From e2034f27e8287385f07ef0de8ed74307b90b504a Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 09:51:40 -0700 Subject: [PATCH 01/23] First attempt at setup GitHub Action --- .github/actions/setup-zb/action.yml | 9 + .github/actions/setup-zb/index.js | 82 ++++++ .github/actions/setup-zb/package-lock.json | 284 +++++++++++++++++++++ .github/actions/setup-zb/package.json | 27 ++ .github/workflows/build.yml | 20 ++ .gitignore | 1 + 6 files changed, 423 insertions(+) create mode 100644 .github/actions/setup-zb/action.yml create mode 100644 .github/actions/setup-zb/index.js create mode 100644 .github/actions/setup-zb/package-lock.json create mode 100644 .github/actions/setup-zb/package.json create mode 100644 .github/workflows/build.yml create mode 100644 .gitignore diff --git a/.github/actions/setup-zb/action.yml b/.github/actions/setup-zb/action.yml new file mode 100644 index 0000000..972536b --- /dev/null +++ b/.github/actions/setup-zb/action.yml @@ -0,0 +1,9 @@ +name: Set up zb +description: Install zb +author: The zb Authors +inputs: + zb-version: + description: The zb version to download and use. Be sure to enclose this option in single quotation marks. +runs: + using: node24 + main: index.js diff --git a/.github/actions/setup-zb/index.js b/.github/actions/setup-zb/index.js new file mode 100644 index 0000000..59465c7 --- /dev/null +++ b/.github/actions/setup-zb/index.js @@ -0,0 +1,82 @@ +// Copyright 2026 The zb Authors +// SPDX-License-Identifier: MIT + +import * as process from 'node:process'; +import path from 'node:path'; + +import * as core from '@actions/core'; +import { exec } from '@actions/exec'; +import { getOctokit } from '@actions/github'; +import { downloadTool, extractTar, extractZip } from '@actions/tool-cache'; + +const releaseFragment = + ` + fragment releaseFields on Release { + tagName + releaseAssets(first: 50) { + nodes { + name + downloadUrl + } + } + } + `; + +(async () => { + const octokit = getOctokit(''); + + const version = core.getInput('zb-version'); + const graphqlRequest = + version ? + { + query: + ` + query releaseAssetsForVersion($tagName: String!) { + repository(owner: "256lights", repo: "zb") { + release(tagName: $tagName) { + ...releaseFields + } + } + } + + ${releaseFragment} + `, + tagName: 'v' + version, + } : + { + query: + ` + query releaseAssetsForLatest { + repository(owner: "256lights", repo: "zb") { + release: latestRelease { + ...releaseFields + } + } + } + + ${releaseFragment} + `, + }; + + const release = (await octokit.graphql(graphqlRequest)).repository.release; + /** @type {{name: string, downloadUrl: string}[] | undefined} */ + const releaseAssets = release?.releaseAssets?.nodes; + + /** @type {{name: string, downloadUrl: string} | undefined} */ + let asset; + if (process.platform === 'darwin' && process.arch === 'arm64') { + const asset = releaseAssets.find(({ name }) => name.includes('aarch64-apple-macos')) + } else if (process.platform === 'linux' && process.arch === 'x64') { + const asset = releaseAssets.find(({ name }) => name.includes('x86_64-unknown-linux')) + } + if (!asset) { + core.setFailed(`No download found for ${process.arch}-${process.platform} version ${release?.tagName || version}`); + return; + } + + const zbArchivePath = await downloadTool(asset.downloadUrl); + const zbExtractedFolderPath = asset.downloadUrl.endsWith('.zip') ? + await extractZip(zbArchivePath) : + await extractTar(zbArchivePath); + await exec(path.join(zbArchivePath, 'install'), ['--single-user', '--no-systemd', '--no-launchd']); +})(); diff --git a/.github/actions/setup-zb/package-lock.json b/.github/actions/setup-zb/package-lock.json new file mode 100644 index 0000000..4801fb7 --- /dev/null +++ b/.github/actions/setup-zb/package-lock.json @@ -0,0 +1,284 @@ +{ + "name": "setup-zb", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "setup-zb", + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@actions/core": "^3.0.1", + "@actions/exec": "^3.0.0", + "@actions/github": "^9.1.1", + "@actions/tool-cache": "^4.0.0" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/@actions/core": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-3.0.1.tgz", + "integrity": "sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==", + "license": "MIT", + "dependencies": { + "@actions/exec": "^3.0.0", + "@actions/http-client": "^4.0.0" + } + }, + "node_modules/@actions/exec": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-3.0.0.tgz", + "integrity": "sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==", + "license": "MIT", + "dependencies": { + "@actions/io": "^3.0.2" + } + }, + "node_modules/@actions/github": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@actions/github/-/github-9.1.1.tgz", + "integrity": "sha512-tL5JbYOBZHc0ngEnCsaDcryUizIUIlQyIMwy1Wkx93H5HzbBJ7TbiPx2PnFjBwZW0Vh05JmfFZhecE6gglYegA==", + "license": "MIT", + "dependencies": { + "@actions/http-client": "^3.0.2", + "@octokit/core": "^7.0.6", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/plugin-rest-endpoint-methods": "^17.0.0", + "@octokit/request": "^10.0.7", + "@octokit/request-error": "^7.1.0", + "undici": "^6.23.0" + } + }, + "node_modules/@actions/github/node_modules/@actions/http-client": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-3.0.2.tgz", + "integrity": "sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==", + "license": "MIT", + "dependencies": { + "tunnel": "^0.0.6", + "undici": "^6.23.0" + } + }, + "node_modules/@actions/http-client": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-4.0.1.tgz", + "integrity": "sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg==", + "license": "MIT", + "dependencies": { + "tunnel": "^0.0.6", + "undici": "^6.23.0" + } + }, + "node_modules/@actions/io": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-3.0.2.tgz", + "integrity": "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==", + "license": "MIT" + }, + "node_modules/@actions/tool-cache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-4.0.0.tgz", + "integrity": "sha512-L8P9HbXvpvqjZDveb/fdsa55IVC0trfPgQ4ZwGo6r5af6YDVdM9vMGPZ7rgY2fAT9gGj4PSYd6bYlg3p3jD78A==", + "license": "MIT", + "dependencies": { + "@actions/core": "^3.0.0", + "@actions/exec": "^3.0.0", + "@actions/http-client": "^4.0.0", + "@actions/io": "^3.0.0", + "semver": "^7.7.3" + } + }, + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/endpoint": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.3.tgz", + "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/graphql": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", + "license": "MIT", + "dependencies": { + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", + "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-17.0.0.tgz", + "integrity": "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/request": { + "version": "10.0.11", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.11.tgz", + "integrity": "sha512-+s7HUxjfFqOMS9VlIwDffq0MikjSAK0gSpG73W+meAvVAvX4MBrHYTK5Bj3Uot55qFT4gzUtfzE4mGWY4Br8/Q==", + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "content-type": "^2.0.0", + "json-with-bigint": "^3.5.3", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request-error": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^27.0.0" + } + }, + "node_modules/before-after-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "license": "Apache-2.0" + }, + "node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/json-with-bigint": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.10.tgz", + "integrity": "sha512-Vcx+JVNEBts/xfcoCS69sKrOhOk/3TVlvlT+XzUOefVKnnrbYSCKpDCm10pohsJFtsJVYnwa/cXRZ4eElzaM6w==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "license": "ISC" + } + } +} diff --git a/.github/actions/setup-zb/package.json b/.github/actions/setup-zb/package.json new file mode 100644 index 0000000..8d51d1a --- /dev/null +++ b/.github/actions/setup-zb/package.json @@ -0,0 +1,27 @@ +{ + "name": "setup-zb", + "version": "0.1.0", + "description": "GitHub Action to install zb", + "license": "MIT", + "author": "The zb Authors", + "keywords": [ + "actions", + "zb", + "setup" + ], + "private": true, + "type": "module", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "engines": { + "node": ">=24.0.0" + }, + "dependencies": { + "@actions/core": "^3.0.1", + "@actions/exec": "^3.0.0", + "@actions/github": "^9.1.1", + "@actions/tool-cache": "^4.0.0" + } +} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..be8d6d1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,20 @@ +# Copyright 2026 The zb Authors +# SPDX-License-Identifier: MIT + +name: Build +on: + push: + pull_request: +jobs: + build: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Check out code + uses: actions/checkout@v7 + - name: Install zb + uses: $/.github/actions/setup-zb + - name: Check zb version + run: zb --version diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ From 767e535c8ef801d1634bffa2d8be642e89afe8a5 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 12:19:05 -0700 Subject: [PATCH 02/23] Checking for workflow syntax problems --- .github/workflows/build.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index be8d6d1..30feaa7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,7 +14,5 @@ jobs: steps: - name: Check out code uses: actions/checkout@v7 - - name: Install zb - uses: $/.github/actions/setup-zb - name: Check zb version run: zb --version From 98ee00048deecb47eb255b418e2ba560d63f912c Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 12:28:42 -0700 Subject: [PATCH 03/23] Reintroduce action step --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 30feaa7..be8d6d1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,5 +14,7 @@ jobs: steps: - name: Check out code uses: actions/checkout@v7 + - name: Install zb + uses: $/.github/actions/setup-zb - name: Check zb version run: zb --version From 781d961a17b1a44904d974fdbc8176baba2e7633 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 15:38:10 -0700 Subject: [PATCH 04/23] Bundle with esbuild and use TypeScript --- .github/actions/setup-zb/action.yml | 2 +- .github/actions/setup-zb/build.js | 17 + .github/actions/setup-zb/dist/main.js | 108 +++ .github/actions/setup-zb/package-lock.json | 881 ++++++++++++++++++ .github/actions/setup-zb/package.json | 8 +- .../setup-zb/{index.js => src/main.ts} | 41 +- .github/actions/setup-zb/tsconfig.json | 6 + 7 files changed, 1050 insertions(+), 13 deletions(-) create mode 100644 .github/actions/setup-zb/build.js create mode 100644 .github/actions/setup-zb/dist/main.js rename .github/actions/setup-zb/{index.js => src/main.ts} (67%) create mode 100644 .github/actions/setup-zb/tsconfig.json diff --git a/.github/actions/setup-zb/action.yml b/.github/actions/setup-zb/action.yml index 972536b..fb77ea6 100644 --- a/.github/actions/setup-zb/action.yml +++ b/.github/actions/setup-zb/action.yml @@ -6,4 +6,4 @@ inputs: description: The zb version to download and use. Be sure to enclose this option in single quotation marks. runs: using: node24 - main: index.js + main: dist/main.js diff --git a/.github/actions/setup-zb/build.js b/.github/actions/setup-zb/build.js new file mode 100644 index 0000000..cbd5a11 --- /dev/null +++ b/.github/actions/setup-zb/build.js @@ -0,0 +1,17 @@ +/** + * @license + * Copyright 2026 The zb Authors + * SPDX-License-Identifier: MIT + */ + +import { platform } from '@actions/core'; +import * as esbuild from 'esbuild'; + +await esbuild.build({ + entryPoints: ['src/main.ts'], + bundle: true, + minify: true, + platform: 'node', + target: ['node24.0'], + outfile: 'dist/main.js', +}); diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js new file mode 100644 index 0000000..d4eb6d5 --- /dev/null +++ b/.github/actions/setup-zb/dist/main.js @@ -0,0 +1,108 @@ +var Uy=Object.create;var bu=Object.defineProperty;var Gy=Object.getOwnPropertyDescriptor;var Ly=Object.getOwnPropertyNames;var My=Object.getPrototypeOf,vy=Object.prototype.hasOwnProperty;var B=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var xy=(t,e,r,A)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ly(e))!vy.call(t,s)&&s!==r&&bu(t,s,{get:()=>e[s],enumerable:!(A=Gy(e,s))||A.enumerable});return t};var W=(t,e,r)=>(r=t!=null?Uy(My(t)):{},xy(e||!t||!t.__esModule?bu(r,"default",{value:t,enumerable:!0}):r,t));var Lu=B(zr=>{"use strict";var aJ=require("net"),Hy=require("tls"),Wi=require("http"),Nu=require("https"),Vy=require("events"),cJ=require("assert"),qy=require("util");zr.httpOverHttp=Wy;zr.httpsOverHttp=zy;zr.httpOverHttps=Zy;zr.httpsOverHttps=jy;function Wy(t){var e=new yt(t);return e.request=Wi.request,e}function zy(t){var e=new yt(t);return e.request=Wi.request,e.createSocket=Uu,e.defaultPort=443,e}function Zy(t){var e=new yt(t);return e.request=Nu.request,e}function jy(t){var e=new yt(t);return e.request=Nu.request,e.createSocket=Uu,e.defaultPort=443,e}function yt(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||Wi.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(A,s,o,n){for(var i=Gu(s,o,n),a=0,c=e.requests.length;a=this.maxSockets){o.requests.push(n);return}o.createSocket(n,function(i){i.on("free",a),i.on("close",c),i.on("agentRemove",c),e.onSocket(i);function a(){o.emit("free",i,n)}function c(g){o.removeSocket(i),i.removeListener("free",a),i.removeListener("close",c),i.removeListener("agentRemove",c)}})};yt.prototype.createSocket=function(e,r){var A=this,s={};A.sockets.push(s);var o=zi({},A.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(o.localAddress=e.localAddress),o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")),Jt("making CONNECT request");var n=A.request(o);n.useChunkedEncodingByDefault=!1,n.once("response",i),n.once("upgrade",a),n.once("connect",c),n.once("error",g),n.end();function i(l){l.upgrade=!0}function a(l,u,E){process.nextTick(function(){c(l,u,E)})}function c(l,u,E){if(n.removeAllListeners(),u.removeAllListeners(),l.statusCode!==200){Jt("tunneling socket could not be established, statusCode=%d",l.statusCode),u.destroy();var h=new Error("tunneling socket could not be established, statusCode="+l.statusCode);h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}if(E.length>0){Jt("got illegal response body from proxy"),u.destroy();var h=new Error("got illegal response body from proxy");h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}return Jt("tunneling connection has established"),A.sockets[A.sockets.indexOf(s)]=u,r(u)}function g(l){n.removeAllListeners(),Jt(`tunneling socket could not be established, cause=%s +`,l.message,l.stack);var u=new Error("tunneling socket could not be established, cause="+l.message);u.code="ECONNRESET",e.request.emit("error",u),A.removeSocket(s)}};yt.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var A=this.requests.shift();A&&this.createSocket(A,function(s){A.request.onSocket(s)})}};function Uu(t,e){var r=this;yt.prototype.createSocket.call(r,t,function(A){var s=t.request.getHeader("host"),o=zi({},r.options,{socket:A,servername:s?s.replace(/:.*$/,""):t.host}),n=Hy.connect(0,o);r.sockets[r.sockets.indexOf(A)]=n,e(n)})}function Gu(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function zi(t){for(var e=1,r=arguments.length;e{Mu.exports=Lu()});var $=B((uJ,vu)=>{vu.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}});var Y=B((EJ,aE)=>{"use strict";var xu=Symbol.for("undici.error.UND_ERR"),ee=class extends Error{constructor(e){super(e),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&e[xu]===!0}[xu]=!0},Ou=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),ji=class extends ee{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ou]===!0}[Ou]=!0},Yu=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),Ki=class extends ee{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Yu]===!0}[Yu]=!0},_u=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Xi=class extends ee{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&e[_u]===!0}[_u]=!0},Ju=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),$i=class extends ee{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ju]===!0}[Ju]=!0},Pu=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),ea=class extends ee{constructor(e,r,A,s){super(e),this.name="ResponseStatusCodeError",this.message=e||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=s,this.status=r,this.statusCode=r,this.headers=A}static[Symbol.hasInstance](e){return e&&e[Pu]===!0}[Pu]=!0},Hu=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),ta=class extends ee{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&e[Hu]===!0}[Hu]=!0},Vu=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),ra=class extends ee{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&e[Vu]===!0}[Vu]=!0},qu=Symbol.for("undici.error.UND_ERR_ABORT"),Eo=class extends ee{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&e[qu]===!0}[qu]=!0},Wu=Symbol.for("undici.error.UND_ERR_ABORTED"),Aa=class extends Eo{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&e[Wu]===!0}[Wu]=!0},zu=Symbol.for("undici.error.UND_ERR_INFO"),sa=class extends ee{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&e[zu]===!0}[zu]=!0},Zu=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),oa=class extends ee{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[Zu]===!0}[Zu]=!0},ju=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),na=class extends ee{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[ju]===!0}[ju]=!0},Ku=Symbol.for("undici.error.UND_ERR_DESTROYED"),ia=class extends ee{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&e[Ku]===!0}[Ku]=!0},Xu=Symbol.for("undici.error.UND_ERR_CLOSED"),aa=class extends ee{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&e[Xu]===!0}[Xu]=!0},$u=Symbol.for("undici.error.UND_ERR_SOCKET"),ca=class extends ee{constructor(e,r){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=r}static[Symbol.hasInstance](e){return e&&e[$u]===!0}[$u]=!0},eE=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),ga=class extends ee{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&e[eE]===!0}[eE]=!0},tE=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),la=class extends ee{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&e[tE]===!0}[tE]=!0},rE=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),ua=class extends Error{constructor(e,r,A){super(e),this.name="HTTPParserError",this.code=r?`HPE_${r}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&e[rE]===!0}[rE]=!0},AE=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),Ea=class extends ee{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&e[AE]===!0}[AE]=!0},sE=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),ha=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[sE]===!0}[sE]=!0},oE=Symbol.for("undici.error.UND_ERR_RESPONSE"),Qa=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[oE]===!0}[oE]=!0},nE=Symbol.for("undici.error.UND_ERR_PRX_TLS"),Ba=class extends ee{constructor(e,r,A){super(r,{cause:e,...A??{}}),this.name="SecureProxyConnectionError",this.message=r||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&e[nE]===!0}[nE]=!0},iE=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),Ia=class extends ee{constructor(e){super(e),this.name="MessageSizeExceededError",this.message=e||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](e){return e&&e[iE]===!0}get[iE](){return!0}};aE.exports={AbortError:Eo,HTTPParserError:ua,UndiciError:ee,HeadersTimeoutError:Ki,HeadersOverflowError:Xi,BodyTimeoutError:$i,RequestContentLengthMismatchError:oa,ConnectTimeoutError:ji,ResponseStatusCodeError:ea,InvalidArgumentError:ta,InvalidReturnValueError:ra,RequestAbortedError:Aa,ClientDestroyedError:ia,ClientClosedError:aa,InformationalError:sa,SocketError:ca,NotSupportedError:ga,ResponseContentLengthMismatchError:na,BalancedPoolMissingUpstreamError:la,ResponseExceededMaxSizeError:Ea,RequestRetryError:ha,ResponseError:Qa,SecureProxyConnectionError:Ba,MessageSizeExceededError:Ia}});var Qo=B((hJ,cE)=>{"use strict";var ho={},Ca=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let t=0;t{"use strict";var{wellknownHeaderNames:gE,headerNameLowerCasedRecord:Ky}=Qo(),da=class t{value=null;left=null;middle=null;right=null;code;constructor(e,r,A){if(A===void 0||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new t(e,r,A):this.value=r}add(e,r){let A=e.length;if(A===0)throw new TypeError("Unreachable");let s=0,o=this;for(;;){let n=e.charCodeAt(s);if(n>127)throw new TypeError("key must be ascii string");if(o.code===n)if(A===++s){o.value=r;break}else if(o.middle!==null)o=o.middle;else{o.middle=new t(e,r,s);break}else if(o.code=65&&(o|=32);s!==null;){if(o===s.code){if(r===++A)return s;s=s.middle;break}s=s.code{"use strict";var KA=require("node:assert"),{kDestroyed:QE,kBodyUsed:Zr,kListeners:fa,kBody:hE}=$(),{IncomingMessage:Xy}=require("node:http"),fo=require("node:stream"),$y=require("node:net"),{Blob:eR}=require("node:buffer"),tR=require("node:util"),{stringify:rR}=require("node:querystring"),{EventEmitter:AR}=require("node:events"),{InvalidArgumentError:Ee}=Y(),{headerNameLowerCasedRecord:sR}=Qo(),{tree:BE}=EE(),[oR,nR]=process.versions.node.split(".").map(t=>Number(t)),Co=class{constructor(e){this[hE]=e,this[Zr]=!1}async*[Symbol.asyncIterator](){KA(!this[Zr],"disturbed"),this[Zr]=!0,yield*this[hE]}};function iR(t){return po(t)?(pE(t)===0&&t.on("data",function(){KA(!1)}),typeof t.readableDidRead!="boolean"&&(t[Zr]=!1,AR.prototype.on.call(t,"data",function(){this[Zr]=!0})),t):t&&typeof t.pipeTo=="function"?new Co(t):t&&typeof t!="string"&&!ArrayBuffer.isView(t)&&fE(t)?new Co(t):t}function aR(){}function po(t){return t&&typeof t=="object"&&typeof t.pipe=="function"&&typeof t.on=="function"}function IE(t){if(t===null)return!1;if(t instanceof eR)return!0;if(typeof t!="object")return!1;{let e=t[Symbol.toStringTag];return(e==="Blob"||e==="File")&&("stream"in t&&typeof t.stream=="function"||"arrayBuffer"in t&&typeof t.arrayBuffer=="function")}}function cR(t,e){if(t.includes("?")||t.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=rR(e);return r&&(t+="?"+r),t}function CE(t){let e=parseInt(t,10);return e===Number(t)&&e>=0&&e<=65535}function Io(t){return t!=null&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&(t[4]===":"||t[4]==="s"&&t[5]===":")}function dE(t){if(typeof t=="string"){if(t=new URL(t),!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}if(!t||typeof t!="object")throw new Ee("Invalid URL: The URL argument must be a non-null object.");if(!(t instanceof URL)){if(t.port!=null&&t.port!==""&&CE(t.port)===!1)throw new Ee("Invalid URL: port must be a valid integer or a string representation of an integer.");if(t.path!=null&&typeof t.path!="string")throw new Ee("Invalid URL path: the path must be a string or null/undefined.");if(t.pathname!=null&&typeof t.pathname!="string")throw new Ee("Invalid URL pathname: the pathname must be a string or null/undefined.");if(t.hostname!=null&&typeof t.hostname!="string")throw new Ee("Invalid URL hostname: the hostname must be a string or null/undefined.");if(t.origin!=null&&typeof t.origin!="string")throw new Ee("Invalid URL origin: the origin must be a string or null/undefined.");if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");let e=t.port!=null?t.port:t.protocol==="https:"?443:80,r=t.origin!=null?t.origin:`${t.protocol||""}//${t.hostname||""}:${e}`,A=t.path!=null?t.path:`${t.pathname||""}${t.search||""}`;return r[r.length-1]==="/"&&(r=r.slice(0,r.length-1)),A&&A[0]!=="/"&&(A=`/${A}`),new URL(`${r}${A}`)}if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}function gR(t){if(t=dE(t),t.pathname!=="/"||t.search||t.hash)throw new Ee("invalid url");return t}function lR(t){if(t[0]==="["){let r=t.indexOf("]");return KA(r!==-1),t.substring(1,r)}let e=t.indexOf(":");return e===-1?t:t.substring(0,e)}function uR(t){if(!t)return null;KA(typeof t=="string");let e=lR(t);return $y.isIP(e)?"":e}function ER(t){return JSON.parse(JSON.stringify(t))}function hR(t){return t!=null&&typeof t[Symbol.asyncIterator]=="function"}function fE(t){return t!=null&&(typeof t[Symbol.iterator]=="function"||typeof t[Symbol.asyncIterator]=="function")}function pE(t){if(t==null)return 0;if(po(t)){let e=t._readableState;return e&&e.objectMode===!1&&e.ended===!0&&Number.isFinite(e.length)?e.length:null}else{if(IE(t))return t.size!=null?t.size:null;if(yE(t))return t.byteLength}return null}function mE(t){return t&&!!(t.destroyed||t[QE]||fo.isDestroyed?.(t))}function QR(t,e){t==null||!po(t)||mE(t)||(typeof t.destroy=="function"?(Object.getPrototypeOf(t).constructor===Xy&&(t.socket=null),t.destroy(e)):e&&queueMicrotask(()=>{t.emit("error",e)}),t.destroyed!==!0&&(t[QE]=!0))}var BR=/timeout=(\d+)/;function IR(t){let e=t.toString().match(BR);return e?parseInt(e[1],10)*1e3:null}function wE(t){return typeof t=="string"?sR[t]??t.toLowerCase():BE.lookup(t)??t.toString("latin1").toLowerCase()}function CR(t){return BE.lookup(t)??t.toString("latin1").toLowerCase()}function dR(t,e){e===void 0&&(e={});for(let r=0;rn.toString("utf8")):o.toString("utf8")}}return"content-length"in e&&"content-disposition"in e&&(e["content-disposition"]=Buffer.from(e["content-disposition"]).toString("latin1")),e}function fR(t){let e=t.length,r=new Array(e),A=!1,s=-1,o,n,i=0;for(let a=0;a{r.close(),r.byobRequest?.respond(0)});else{let o=Buffer.isBuffer(s)?s:Buffer.from(s);o.byteLength&&r.enqueue(new Uint8Array(o))}return r.desiredSize>0},async cancel(r){await e.return()},type:"bytes"})}function TR(t){return t&&typeof t=="object"&&typeof t.append=="function"&&typeof t.delete=="function"&&typeof t.get=="function"&&typeof t.getAll=="function"&&typeof t.has=="function"&&typeof t.set=="function"&&t[Symbol.toStringTag]==="FormData"}function bR(t,e){return"addEventListener"in t?(t.addEventListener("abort",e,{once:!0}),()=>t.removeEventListener("abort",e)):(t.addListener("abort",e),()=>t.removeListener("abort",e))}var kR=typeof String.prototype.toWellFormed=="function",FR=typeof String.prototype.isWellFormed=="function";function RE(t){return kR?`${t}`.toWellFormed():tR.toUSVString(t)}function SR(t){return FR?`${t}`.isWellFormed():RE(t)===`${t}`}function DE(t){switch(t){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return t>=33&&t<=126}}function NR(t){if(t.length===0)return!1;for(let e=0;e{"use strict";var J=require("node:diagnostics_channel"),wa=require("node:util"),mo=wa.debuglog("undici"),ma=wa.debuglog("fetch"),Qr=wa.debuglog("websocket"),FE=!1,OR={beforeConnect:J.channel("undici:client:beforeConnect"),connected:J.channel("undici:client:connected"),connectError:J.channel("undici:client:connectError"),sendHeaders:J.channel("undici:client:sendHeaders"),create:J.channel("undici:request:create"),bodySent:J.channel("undici:request:bodySent"),headers:J.channel("undici:request:headers"),trailers:J.channel("undici:request:trailers"),error:J.channel("undici:request:error"),open:J.channel("undici:websocket:open"),close:J.channel("undici:websocket:close"),socketError:J.channel("undici:websocket:socket_error"),ping:J.channel("undici:websocket:ping"),pong:J.channel("undici:websocket:pong")};if(mo.enabled||ma.enabled){let t=ma.enabled?ma:mo;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s using %s%s errored - %s",`${o}${s?`:${s}`:""}`,A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)}),J.channel("undici:request:headers").subscribe(e=>{let{request:{method:r,path:A,origin:s},response:{statusCode:o}}=e;t("received response to %s %s/%s - HTTP %d",r,s,A,o)}),J.channel("undici:request:trailers").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("trailers received from %s %s/%s",r,s,A)}),J.channel("undici:request:error").subscribe(e=>{let{request:{method:r,path:A,origin:s},error:o}=e;t("request to %s %s/%s errored - %s",r,s,A,o.message)}),FE=!0}if(Qr.enabled){if(!FE){let t=mo.enabled?mo:Qr;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s%s using %s%s errored - %s",o,s?`:${s}`:"",A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)})}J.channel("undici:websocket:open").subscribe(t=>{let{address:{address:e,port:r}}=t;Qr("connection opened %s%s",e,r?`:${r}`:"")}),J.channel("undici:websocket:close").subscribe(t=>{let{websocket:e,code:r,reason:A}=t;Qr("closed connection to %s - %s %s",e.url,r,A)}),J.channel("undici:websocket:socket_error").subscribe(t=>{Qr("connection errored - %s",t.message)}),J.channel("undici:websocket:ping").subscribe(t=>{Qr("ping received")}),J.channel("undici:websocket:pong").subscribe(t=>{Qr("pong received")})}SE.exports={channels:OR}});var LE=B((CJ,GE)=>{"use strict";var{InvalidArgumentError:V,NotSupportedError:YR}=Y(),Rt=require("node:assert"),{isValidHTTPToken:UE,isValidHeaderValue:XA,isStream:_R,destroy:JR,isBuffer:PR,isFormDataLike:HR,isIterable:VR,isBlobLike:qR,buildURL:WR,validateHandler:zR,getServerName:ZR,normalizedMethodRecords:jR}=M(),{channels:lt}=jr(),{headerNameLowerCasedRecord:NE}=Qo(),KR=/[^\u0021-\u00ff]/,He=Symbol("handler"),ya=class{constructor(e,{path:r,method:A,body:s,headers:o,query:n,idempotent:i,blocking:a,upgrade:c,headersTimeout:g,bodyTimeout:l,reset:u,throwOnError:E,expectContinue:h,servername:C},I){if(typeof r!="string")throw new V("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&A!=="CONNECT")throw new V("path must be an absolute URL or start with a slash");if(KR.test(r))throw new V("invalid request path");if(typeof A!="string")throw new V("method must be a string");if(jR[A]===void 0&&!UE(A))throw new V("invalid request method");if(c&&typeof c!="string")throw new V("upgrade must be a string");if(c&&!XA(c))throw new V("invalid upgrade header");if(g!=null&&(!Number.isFinite(g)||g<0))throw new V("invalid headersTimeout");if(l!=null&&(!Number.isFinite(l)||l<0))throw new V("invalid bodyTimeout");if(u!=null&&typeof u!="boolean")throw new V("invalid reset");if(h!=null&&typeof h!="boolean")throw new V("invalid expectContinue");if(this.headersTimeout=g,this.bodyTimeout=l,this.throwOnError=E===!0,this.method=A,this.abort=null,s==null)this.body=null;else if(_R(s)){this.body=s;let Q=this.body._readableState;(!Q||!Q.autoDestroy)&&(this.endHandler=function(){JR(this)},this.body.on("end",this.endHandler)),this.errorHandler=f=>{this.abort?this.abort(f):this.error=f},this.body.on("error",this.errorHandler)}else if(PR(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if(typeof s=="string")this.body=s.length?Buffer.from(s):null;else if(HR(s)||VR(s)||qR(s))this.body=s;else throw new V("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=c||null,this.path=n?WR(r,n):r,this.origin=e,this.idempotent=i??(A==="HEAD"||A==="GET"),this.blocking=a??!1,this.reset=u??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=h??!1,Array.isArray(o)){if(o.length%2!==0)throw new V("headers array must be even");for(let Q=0;Q{"use strict";var XR=require("node:events"),yo=class extends XR{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){let r=Array.isArray(e[0])?e[0]:e,A=this.dispatch.bind(this);for(let s of r)if(s!=null){if(typeof s!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof s}`);if(A=s(A),A==null||typeof A!="function"||A.length!==2)throw new TypeError("invalid interceptor")}return new Ra(this,A)}},Ra=class extends yo{#e=null;#t=null;constructor(e,r){super(),this.#e=e,this.#t=r}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};ME.exports=yo});var eA=B((fJ,vE)=>{"use strict";var $R=$A(),{ClientDestroyedError:Da,ClientClosedError:eD,InvalidArgumentError:Kr}=Y(),{kDestroy:tD,kClose:rD,kClosed:es,kDestroyed:Xr,kDispatch:Ta,kInterceptors:Br}=$(),Dt=Symbol("onDestroyed"),$r=Symbol("onClosed"),Ro=Symbol("Intercepted Dispatch"),ba=Symbol("webSocketOptions"),ka=class extends $R{constructor(e){super(),this[Xr]=!1,this[Dt]=null,this[es]=!1,this[$r]=[],this[ba]=e?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[ba].maxFragments??131072,maxPayloadSize:this[ba].maxPayloadSize??128*1024*1024}}get destroyed(){return this[Xr]}get closed(){return this[es]}get interceptors(){return this[Br]}set interceptors(e){if(e){for(let r=e.length-1;r>=0;r--)if(typeof this[Br][r]!="function")throw new Kr("interceptor must be an function")}this[Br]=e}close(e){if(e===void 0)return new Promise((A,s)=>{this.close((o,n)=>o?s(o):A(n))});if(typeof e!="function")throw new Kr("invalid callback");if(this[Xr]){queueMicrotask(()=>e(new Da,null));return}if(this[es]){this[$r]?this[$r].push(e):queueMicrotask(()=>e(null,null));return}this[es]=!0,this[$r].push(e);let r=()=>{let A=this[$r];this[$r]=null;for(let s=0;sthis.destroy()).then(()=>{queueMicrotask(r)})}destroy(e,r){if(typeof e=="function"&&(r=e,e=null),r===void 0)return new Promise((s,o)=>{this.destroy(e,(n,i)=>n?o(n):s(i))});if(typeof r!="function")throw new Kr("invalid callback");if(this[Xr]){this[Dt]?this[Dt].push(r):queueMicrotask(()=>r(null,null));return}e||(e=new Da),this[Xr]=!0,this[Dt]=this[Dt]||[],this[Dt].push(r);let A=()=>{let s=this[Dt];this[Dt]=null;for(let o=0;o{queueMicrotask(A)})}[Ro](e,r){if(!this[Br]||this[Br].length===0)return this[Ro]=this[Ta],this[Ta](e,r);let A=this[Ta].bind(this);for(let s=this[Br].length-1;s>=0;s--)A=this[Br][s](A);return this[Ro]=A,A(e,r)}dispatch(e,r){if(!r||typeof r!="object")throw new Kr("handler must be an object");try{if(!e||typeof e!="object")throw new Kr("opts must be an object.");if(this[Xr]||this[Dt])throw new Da;if(this[es])throw new eD;return this[Ro](e,r)}catch(A){if(typeof r.onError!="function")throw new Kr("invalid onError method");return r.onError(A),!1}}};vE.exports=ka});var Ma=B((pJ,_E)=>{"use strict";var tA=0,Fa=1e3,Sa=(Fa>>1)-1,Tt,Na=Symbol("kFastTimer"),bt=[],Ua=-2,Ga=-1,OE=0,xE=1;function La(){tA+=Sa;let t=0,e=bt.length;for(;t=r._idleStart+r._idleTimeout&&(r._state=Ga,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===Ga?(r._state=Ua,--e!==0&&(bt[t]=bt[e])):++t}bt.length=e,bt.length!==0&&YE()}function YE(){Tt?Tt.refresh():(clearTimeout(Tt),Tt=setTimeout(La,Sa),Tt.unref&&Tt.unref())}var Do=class{[Na]=!0;_state=Ua;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,r,A){this._onTimeout=e,this._idleTimeout=r,this._timerArg=A,this.refresh()}refresh(){this._state===Ua&&bt.push(this),(!Tt||bt.length===1)&&YE(),this._state=OE}clear(){this._state=Ga,this._idleStart=-1}};_E.exports={setTimeout(t,e,r){return e<=Fa?setTimeout(t,e,r):new Do(t,e,r)},clearTimeout(t){t[Na]?t.clear():clearTimeout(t)},setFastTimeout(t,e,r){return new Do(t,e,r)},clearFastTimeout(t){t.clear()},now(){return tA},tick(t=0){tA+=t-Fa+1,La(),La()},reset(){tA=0,bt.length=0,clearTimeout(Tt),Tt=null},kFastTimer:Na}});var ts=B((yJ,qE)=>{"use strict";var AD=require("node:net"),JE=require("node:assert"),VE=M(),{InvalidArgumentError:sD,ConnectTimeoutError:oD}=Y(),To=Ma();function PE(){}var va,xa;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?xa=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry(r=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:A}=this._sessionCache.keys().next();this._sessionCache.delete(A)}this._sessionCache.set(e,r)}}};function nD({allowH2:t,maxCachedSessions:e,socketPath:r,timeout:A,session:s,...o}){if(e!=null&&(!Number.isInteger(e)||e<0))throw new sD("maxCachedSessions must be a positive integer or zero");let n={path:r,...o},i=new xa(e??100);return A=A??1e4,t=t??!1,function({hostname:c,host:g,protocol:l,port:u,servername:E,localAddress:h,httpSocket:C},I){let Q;if(l==="https:"){va||(va=require("node:tls")),E=E||n.servername||VE.getServerName(g)||null;let R=E||c;JE(R);let y=s||i.get(R)||null;u=u||443,Q=va.connect({highWaterMark:16384,...n,servername:E,session:y,localAddress:h,ALPNProtocols:t?["http/1.1","h2"]:["http/1.1"],socket:C,port:u,host:c}),Q.on("session",function(P){i.set(R,P)})}else JE(!C,"httpSocket can only be sent on TLS update"),u=u||80,Q=AD.connect({highWaterMark:64*1024,...n,localAddress:h,port:u,host:c});if(n.keepAlive==null||n.keepAlive){let R=n.keepAliveInitialDelay===void 0?6e4:n.keepAliveInitialDelay;Q.setKeepAlive(!0,R)}let f=iD(new WeakRef(Q),{timeout:A,hostname:c,port:u});return Q.setNoDelay(!0).once(l==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(f),I){let R=I;I=null,R(null,this)}}).on("error",function(R){if(queueMicrotask(f),I){let y=I;I=null,y(R)}}),Q}}var iD=process.platform==="win32"?(t,e)=>{if(!e.timeout)return PE;let r=null,A=null,s=To.setFastTimeout(()=>{r=setImmediate(()=>{A=setImmediate(()=>HE(t.deref(),e))})},e.timeout);return()=>{To.clearFastTimeout(s),clearImmediate(r),clearImmediate(A)}}:(t,e)=>{if(!e.timeout)return PE;let r=null,A=To.setFastTimeout(()=>{r=setImmediate(()=>{HE(t.deref(),e)})},e.timeout);return()=>{To.clearFastTimeout(A),clearImmediate(r)}};function HE(t,e){if(t==null)return;let r="Connect Timeout Error";Array.isArray(t.autoSelectFamilyAttemptedAddresses)?r+=` (attempted addresses: ${t.autoSelectFamilyAttemptedAddresses.join(", ")},`:r+=` (attempted address: ${e.hostname}:${e.port},`,r+=` timeout: ${e.timeout}ms)`,VE.destroy(t,new oD(r))}qE.exports=nD});var WE=B(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.enumToMap=void 0;function aD(t){let e={};return Object.keys(t).forEach(r=>{let A=t[r];typeof A=="number"&&(e[r]=A)}),e}bo.enumToMap=aD});var zE=B(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.SPECIAL_HEADERS=p.HEADER_STATE=p.MINOR=p.MAJOR=p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS=p.TOKEN=p.STRICT_TOKEN=p.HEX=p.URL_CHAR=p.STRICT_URL_CHAR=p.USERINFO_CHARS=p.MARK=p.ALPHANUM=p.NUM=p.HEX_MAP=p.NUM_MAP=p.ALPHA=p.FINISH=p.H_METHOD_MAP=p.METHOD_MAP=p.METHODS_RTSP=p.METHODS_ICE=p.METHODS_HTTP=p.METHODS=p.LENIENT_FLAGS=p.FLAGS=p.TYPE=p.ERROR=void 0;var cD=WE(),gD;(function(t){t[t.OK=0]="OK",t[t.INTERNAL=1]="INTERNAL",t[t.STRICT=2]="STRICT",t[t.LF_EXPECTED=3]="LF_EXPECTED",t[t.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",t[t.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",t[t.INVALID_METHOD=6]="INVALID_METHOD",t[t.INVALID_URL=7]="INVALID_URL",t[t.INVALID_CONSTANT=8]="INVALID_CONSTANT",t[t.INVALID_VERSION=9]="INVALID_VERSION",t[t.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",t[t.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",t[t.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",t[t.INVALID_STATUS=13]="INVALID_STATUS",t[t.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",t[t.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",t[t.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",t[t.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",t[t.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",t[t.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",t[t.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",t[t.PAUSED=21]="PAUSED",t[t.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",t[t.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",t[t.USER=24]="USER"})(gD=p.ERROR||(p.ERROR={}));var lD;(function(t){t[t.BOTH=0]="BOTH",t[t.REQUEST=1]="REQUEST",t[t.RESPONSE=2]="RESPONSE"})(lD=p.TYPE||(p.TYPE={}));var uD;(function(t){t[t.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",t[t.CHUNKED=8]="CHUNKED",t[t.UPGRADE=16]="UPGRADE",t[t.CONTENT_LENGTH=32]="CONTENT_LENGTH",t[t.SKIPBODY=64]="SKIPBODY",t[t.TRAILING=128]="TRAILING",t[t.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(uD=p.FLAGS||(p.FLAGS={}));var ED;(function(t){t[t.HEADERS=1]="HEADERS",t[t.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",t[t.KEEP_ALIVE=4]="KEEP_ALIVE"})(ED=p.LENIENT_FLAGS||(p.LENIENT_FLAGS={}));var k;(function(t){t[t.DELETE=0]="DELETE",t[t.GET=1]="GET",t[t.HEAD=2]="HEAD",t[t.POST=3]="POST",t[t.PUT=4]="PUT",t[t.CONNECT=5]="CONNECT",t[t.OPTIONS=6]="OPTIONS",t[t.TRACE=7]="TRACE",t[t.COPY=8]="COPY",t[t.LOCK=9]="LOCK",t[t.MKCOL=10]="MKCOL",t[t.MOVE=11]="MOVE",t[t.PROPFIND=12]="PROPFIND",t[t.PROPPATCH=13]="PROPPATCH",t[t.SEARCH=14]="SEARCH",t[t.UNLOCK=15]="UNLOCK",t[t.BIND=16]="BIND",t[t.REBIND=17]="REBIND",t[t.UNBIND=18]="UNBIND",t[t.ACL=19]="ACL",t[t.REPORT=20]="REPORT",t[t.MKACTIVITY=21]="MKACTIVITY",t[t.CHECKOUT=22]="CHECKOUT",t[t.MERGE=23]="MERGE",t[t["M-SEARCH"]=24]="M-SEARCH",t[t.NOTIFY=25]="NOTIFY",t[t.SUBSCRIBE=26]="SUBSCRIBE",t[t.UNSUBSCRIBE=27]="UNSUBSCRIBE",t[t.PATCH=28]="PATCH",t[t.PURGE=29]="PURGE",t[t.MKCALENDAR=30]="MKCALENDAR",t[t.LINK=31]="LINK",t[t.UNLINK=32]="UNLINK",t[t.SOURCE=33]="SOURCE",t[t.PRI=34]="PRI",t[t.DESCRIBE=35]="DESCRIBE",t[t.ANNOUNCE=36]="ANNOUNCE",t[t.SETUP=37]="SETUP",t[t.PLAY=38]="PLAY",t[t.PAUSE=39]="PAUSE",t[t.TEARDOWN=40]="TEARDOWN",t[t.GET_PARAMETER=41]="GET_PARAMETER",t[t.SET_PARAMETER=42]="SET_PARAMETER",t[t.REDIRECT=43]="REDIRECT",t[t.RECORD=44]="RECORD",t[t.FLUSH=45]="FLUSH"})(k=p.METHODS||(p.METHODS={}));p.METHODS_HTTP=[k.DELETE,k.GET,k.HEAD,k.POST,k.PUT,k.CONNECT,k.OPTIONS,k.TRACE,k.COPY,k.LOCK,k.MKCOL,k.MOVE,k.PROPFIND,k.PROPPATCH,k.SEARCH,k.UNLOCK,k.BIND,k.REBIND,k.UNBIND,k.ACL,k.REPORT,k.MKACTIVITY,k.CHECKOUT,k.MERGE,k["M-SEARCH"],k.NOTIFY,k.SUBSCRIBE,k.UNSUBSCRIBE,k.PATCH,k.PURGE,k.MKCALENDAR,k.LINK,k.UNLINK,k.PRI,k.SOURCE];p.METHODS_ICE=[k.SOURCE];p.METHODS_RTSP=[k.OPTIONS,k.DESCRIBE,k.ANNOUNCE,k.SETUP,k.PLAY,k.PAUSE,k.TEARDOWN,k.GET_PARAMETER,k.SET_PARAMETER,k.REDIRECT,k.RECORD,k.FLUSH,k.GET,k.POST];p.METHOD_MAP=cD.enumToMap(k);p.H_METHOD_MAP={};Object.keys(p.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(p.H_METHOD_MAP[t]=p.METHOD_MAP[t])});var hD;(function(t){t[t.SAFE=0]="SAFE",t[t.SAFE_WITH_CB=1]="SAFE_WITH_CB",t[t.UNSAFE=2]="UNSAFE"})(hD=p.FINISH||(p.FINISH={}));p.ALPHA=[];for(let t=65;t<=90;t++)p.ALPHA.push(String.fromCharCode(t)),p.ALPHA.push(String.fromCharCode(t+32));p.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};p.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};p.NUM=["0","1","2","3","4","5","6","7","8","9"];p.ALPHANUM=p.ALPHA.concat(p.NUM);p.MARK=["-","_",".","!","~","*","'","(",")"];p.USERINFO_CHARS=p.ALPHANUM.concat(p.MARK).concat(["%",";",":","&","=","+","$",","]);p.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(p.ALPHANUM);p.URL_CHAR=p.STRICT_URL_CHAR.concat([" ","\f"]);for(let t=128;t<=255;t++)p.URL_CHAR.push(t);p.HEX=p.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);p.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(p.ALPHANUM);p.TOKEN=p.STRICT_TOKEN.concat([" "]);p.HEADER_CHARS=[" "];for(let t=32;t<=255;t++)t!==127&&p.HEADER_CHARS.push(t);p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS.filter(t=>t!==44);p.MAJOR=p.NUM_MAP;p.MINOR=p.MAJOR;var rA;(function(t){t[t.GENERAL=0]="GENERAL",t[t.CONNECTION=1]="CONNECTION",t[t.CONTENT_LENGTH=2]="CONTENT_LENGTH",t[t.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",t[t.UPGRADE=4]="UPGRADE",t[t.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",t[t.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})(rA=p.HEADER_STATE||(p.HEADER_STATE={}));p.SPECIAL_HEADERS={connection:rA.CONNECTION,"content-length":rA.CONTENT_LENGTH,"proxy-connection":rA.CONNECTION,"transfer-encoding":rA.TRANSFER_ENCODING,upgrade:rA.UPGRADE}});var Oa=B((TJ,ZE)=>{"use strict";var{Buffer:QD}=require("node:buffer");ZE.exports=QD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var KE=B((bJ,jE)=>{"use strict";var{Buffer:BD}=require("node:buffer");jE.exports=BD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var rs=B((kJ,oh)=>{"use strict";var XE=["GET","HEAD","POST"],ID=new Set(XE),CD=[101,204,205,304],$E=[301,302,303,307,308],dD=new Set($E),eh=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],fD=new Set(eh),th=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],pD=new Set(th),mD=["follow","manual","error"],rh=["GET","HEAD","OPTIONS","TRACE"],wD=new Set(rh),yD=["navigate","same-origin","no-cors","cors"],RD=["omit","same-origin","include"],DD=["default","no-store","reload","no-cache","force-cache","only-if-cached"],TD=["content-encoding","content-language","content-location","content-type","content-length"],bD=["half"],Ah=["CONNECT","TRACE","TRACK"],kD=new Set(Ah),sh=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],FD=new Set(sh);oh.exports={subresource:sh,forbiddenMethods:Ah,requestBodyHeader:TD,referrerPolicy:th,requestRedirect:mD,requestMode:yD,requestCredentials:RD,requestCache:DD,redirectStatus:$E,corsSafeListedMethods:XE,nullBodyStatus:CD,safeMethods:rh,badPorts:eh,requestDuplex:bD,subresourceSet:FD,badPortsSet:fD,redirectStatusSet:dD,corsSafeListedMethodsSet:ID,safeMethodsSet:wD,forbiddenMethodsSet:kD,referrerPolicySet:pD}});var _a=B((FJ,nh)=>{"use strict";var Ya=Symbol.for("undici.globalOrigin.1");function SD(){return globalThis[Ya]}function ND(t){if(t===void 0){Object.defineProperty(globalThis,Ya,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let e=new URL(t);if(e.protocol!=="http:"&&e.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${e.protocol}`);Object.defineProperty(globalThis,Ya,{value:e,writable:!0,enumerable:!1,configurable:!1})}nh.exports={getGlobalOrigin:SD,setGlobalOrigin:ND}});var Te=B((SJ,Eh)=>{"use strict";var Fo=require("node:assert"),UD=new TextEncoder,As=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,GD=/[\u000A\u000D\u0009\u0020]/,LD=/[\u0009\u000A\u000C\u000D\u0020]/g,MD=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function vD(t){Fo(t.protocol==="data:");let e=ch(t,!0);e=e.slice(5);let r={position:0},A=AA(",",e,r),s=A.length;if(A=PD(A,!0,!0),r.position>=e.length)return"failure";r.position++;let o=e.slice(s+1),n=gh(o);if(/;(\u0020){0,}base64$/i.test(A)){let a=uh(n);if(n=OD(a),n==="failure")return"failure";A=A.slice(0,-6),A=A.replace(/(\u0020)+$/,""),A=A.slice(0,-1)}A.startsWith(";")&&(A="text/plain"+A);let i=Ja(A);return i==="failure"&&(i=Ja("text/plain;charset=US-ASCII")),{mimeType:i,body:n}}function ch(t,e=!1){if(!e)return t.href;let r=t.href,A=t.hash.length,s=A===0?r:r.substring(0,r.length-A);return!A&&r.endsWith("#")?s.slice(0,-1):s}function So(t,e,r){let A="";for(;r.position=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function ah(t){return t>=48&&t<=57?t-48:(t&223)-55}function xD(t){let e=t.length,r=new Uint8Array(e),A=0;for(let s=0;st.length)return"failure";e.position++;let A=AA(";",t,e);if(A=ko(A,!1,!0),A.length===0||!As.test(A))return"failure";let s=r.toLowerCase(),o=A.toLowerCase(),n={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;e.positionGD.test(c),t,e);let i=So(c=>c!==";"&&c!=="=",t,e);if(i=i.toLowerCase(),e.positiont.length)break;let a=null;if(t[e.position]==='"')a=lh(t,e,!0),AA(";",t,e);else if(a=AA(";",t,e),a=ko(a,!1,!0),a.length===0)continue;i.length!==0&&As.test(i)&&(a.length===0||MD.test(a))&&!n.parameters.has(i)&&n.parameters.set(i,a)}return n}function OD(t){t=t.replace(LD,"");let e=t.length;if(e%4===0&&t.charCodeAt(e-1)===61&&(--e,t.charCodeAt(e-1)===61&&--e),e%4===1||/[^+/0-9A-Za-z]/.test(t.length===e?t:t.substring(0,e)))return"failure";let r=Buffer.from(t,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function lh(t,e,r){let A=e.position,s="";for(Fo(t[e.position]==='"'),e.position++;s+=So(n=>n!=='"'&&n!=="\\",t,e),!(e.position>=t.length);){let o=t[e.position];if(e.position++,o==="\\"){if(e.position>=t.length){s+="\\";break}s+=t[e.position],e.position++}else{Fo(o==='"');break}}return r?s:t.slice(A,e.position)}function YD(t){Fo(t!=="failure");let{parameters:e,essence:r}=t,A=r;for(let[s,o]of e.entries())A+=";",A+=s,A+="=",As.test(o)||(o=o.replace(/(\\|")/g,"\\$1"),o='"'+o,o+='"'),A+=o;return A}function _D(t){return t===13||t===10||t===9||t===32}function ko(t,e=!0,r=!0){return Pa(t,e,r,_D)}function JD(t){return t===13||t===10||t===9||t===12||t===32}function PD(t,e=!0,r=!0){return Pa(t,e,r,JD)}function Pa(t,e,r,A){let s=0,o=t.length-1;if(e)for(;s0&&A(t.charCodeAt(o));)o--;return s===0&&o===t.length-1?t:t.slice(s,o+1)}function uh(t){let e=t.length;if(65535>e)return String.fromCharCode.apply(null,t);let r="",A=0,s=65535;for(;Ae&&(s=e-A),r+=String.fromCharCode.apply(null,t.subarray(A,A+=s));return r}function HD(t){switch(t.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return t.subtype.endsWith("+json")?"application/json":t.subtype.endsWith("+xml")?"application/xml":""}Eh.exports={dataURLProcessor:vD,URLSerializer:ch,collectASequenceOfCodePoints:So,collectASequenceOfCodePointsFast:AA,stringPercentDecode:gh,parseMIMEType:Ja,collectAnHTTPQuotedString:lh,serializeAMimeType:YD,removeChars:Pa,removeHTTPWhitespace:ko,minimizeSupportedMimeType:HD,HTTP_TOKEN_CODEPOINTS:As,isomorphicDecode:uh}});var Qe=B((NJ,hh)=>{"use strict";var{types:ut,inspect:VD}=require("node:util"),{markAsUncloneable:qD}=require("node:worker_threads"),{toUSVString:WD}=M(),d={};d.converters={};d.util={};d.errors={};d.errors.exception=function(t){return new TypeError(`${t.header}: ${t.message}`)};d.errors.conversionFailed=function(t){let e=t.types.length===1?"":" one of",r=`${t.argument} could not be converted to${e}: ${t.types.join(", ")}.`;return d.errors.exception({header:t.prefix,message:r})};d.errors.invalidArgument=function(t){return d.errors.exception({header:t.prefix,message:`"${t.value}" is an invalid ${t.type}.`})};d.brandCheck=function(t,e,r){if(r?.strict!==!1){if(!(t instanceof e)){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}}else if(t?.[Symbol.toStringTag]!==e.prototype[Symbol.toStringTag]){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}};d.argumentLengthCheck=function({length:t},e,r){if(t{});d.util.ConvertToInt=function(t,e,r,A){let s,o;e===64?(s=Math.pow(2,53)-1,r==="unsigned"?o=0:o=Math.pow(-2,53)+1):r==="unsigned"?(o=0,s=Math.pow(2,e)-1):(o=Math.pow(-2,e)-1,s=Math.pow(2,e-1)-1);let n=Number(t);if(n===0&&(n=0),A?.enforceRange===!0){if(Number.isNaN(n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY)throw d.errors.exception({header:"Integer conversion",message:`Could not convert ${d.util.Stringify(t)} to an integer.`});if(n=d.util.IntegerPart(n),ns)throw d.errors.exception({header:"Integer conversion",message:`Value must be between ${o}-${s}, got ${n}.`});return n}return!Number.isNaN(n)&&A?.clamp===!0?(n=Math.min(Math.max(n,o),s),Math.floor(n)%2===0?n=Math.floor(n):n=Math.ceil(n),n):Number.isNaN(n)||n===0&&Object.is(0,n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY?0:(n=d.util.IntegerPart(n),n=n%Math.pow(2,e),r==="signed"&&n>=Math.pow(2,e)-1?n-Math.pow(2,e):n)};d.util.IntegerPart=function(t){let e=Math.floor(Math.abs(t));return t<0?-1*e:e};d.util.Stringify=function(t){switch(d.util.Type(t)){case"Symbol":return`Symbol(${t.description})`;case"Object":return VD(t);case"String":return`"${t}"`;default:return`${t}`}};d.sequenceConverter=function(t){return(e,r,A,s)=>{if(d.util.Type(e)!=="Object")throw d.errors.exception({header:r,message:`${A} (${d.util.Stringify(e)}) is not iterable.`});let o=typeof s=="function"?s():e?.[Symbol.iterator]?.(),n=[],i=0;if(o===void 0||typeof o.next!="function")throw d.errors.exception({header:r,message:`${A} is not iterable.`});for(;;){let{done:a,value:c}=o.next();if(a)break;n.push(t(c,r,`${A}[${i++}]`))}return n}};d.recordConverter=function(t,e){return(r,A,s)=>{if(d.util.Type(r)!=="Object")throw d.errors.exception({header:A,message:`${s} ("${d.util.Type(r)}") is not an Object.`});let o={};if(!ut.isProxy(r)){let i=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let a of i){let c=t(a,A,s),g=e(r[a],A,s);o[c]=g}return o}let n=Reflect.ownKeys(r);for(let i of n)if(Reflect.getOwnPropertyDescriptor(r,i)?.enumerable){let c=t(i,A,s),g=e(r[i],A,s);o[c]=g}return o}};d.interfaceConverter=function(t){return(e,r,A,s)=>{if(s?.strict!==!1&&!(e instanceof t))throw d.errors.exception({header:r,message:`Expected ${A} ("${d.util.Stringify(e)}") to be an instance of ${t.name}.`});return e}};d.dictionaryConverter=function(t){return(e,r,A)=>{let s=d.util.Type(e),o={};if(s==="Null"||s==="Undefined")return o;if(s!=="Object")throw d.errors.exception({header:r,message:`Expected ${e} to be one of: Null, Undefined, Object.`});for(let n of t){let{key:i,defaultValue:a,required:c,converter:g}=n;if(c===!0&&!Object.hasOwn(e,i))throw d.errors.exception({header:r,message:`Missing required key "${i}".`});let l=e[i],u=Object.hasOwn(n,"defaultValue");if(u&&l!==null&&(l??=a()),c||u||l!==void 0){if(l=g(l,r,`${A}.${i}`),n.allowedValues&&!n.allowedValues.includes(l))throw d.errors.exception({header:r,message:`${l} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});o[i]=l}}return o}};d.nullableConverter=function(t){return(e,r,A)=>e===null?e:t(e,r,A)};d.converters.DOMString=function(t,e,r,A){if(t===null&&A?.legacyNullToEmptyString)return"";if(typeof t=="symbol")throw d.errors.exception({header:e,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(t)};d.converters.ByteString=function(t,e,r){let A=d.converters.DOMString(t,e,r);for(let s=0;s255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${s} has a value of ${A.charCodeAt(s)} which is greater than 255.`);return A};d.converters.USVString=WD;d.converters.boolean=function(t){return!!t};d.converters.any=function(t){return t};d.converters["long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"signed",void 0,e,r)};d.converters["unsigned long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"unsigned",void 0,e,r)};d.converters["unsigned long"]=function(t,e,r){return d.util.ConvertToInt(t,32,"unsigned",void 0,e,r)};d.converters["unsigned short"]=function(t,e,r,A){return d.util.ConvertToInt(t,16,"unsigned",A,e,r)};d.converters.ArrayBuffer=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isAnyArrayBuffer(t))throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["ArrayBuffer"]});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.resizable||t.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.TypedArray=function(t,e,r,A,s){if(d.util.Type(t)!=="Object"||!ut.isTypedArray(t)||t.constructor.name!==e.name)throw d.errors.conversionFailed({prefix:r,argument:`${A} ("${d.util.Stringify(t)}")`,types:[e.name]});if(s?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.DataView=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isDataView(t))throw d.errors.exception({header:e,message:`${r} is not a DataView.`});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.BufferSource=function(t,e,r,A){if(ut.isAnyArrayBuffer(t))return d.converters.ArrayBuffer(t,e,r,{...A,allowShared:!1});if(ut.isTypedArray(t))return d.converters.TypedArray(t,t.constructor,e,r,{...A,allowShared:!1});if(ut.isDataView(t))return d.converters.DataView(t,e,r,{...A,allowShared:!1});throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["BufferSource"]})};d.converters["sequence"]=d.sequenceConverter(d.converters.ByteString);d.converters["sequence>"]=d.sequenceConverter(d.converters["sequence"]);d.converters["record"]=d.recordConverter(d.converters.ByteString,d.converters.ByteString);hh.exports={webidl:d}});var Ge=B((UJ,bh)=>{"use strict";var{Transform:zD}=require("node:stream"),Qh=require("node:zlib"),{redirectStatusSet:ZD,referrerPolicySet:jD,badPortsSet:KD}=rs(),{getGlobalOrigin:Bh}=_a(),{collectASequenceOfCodePoints:Ir,collectAnHTTPQuotedString:XD,removeChars:$D,parseMIMEType:e0}=Te(),{performance:t0}=require("node:perf_hooks"),{isBlobLike:r0,ReadableStreamFrom:A0,isValidHTTPToken:Ih,normalizedMethodRecordsBase:s0}=M(),Cr=require("node:assert"),{isUint8Array:o0}=require("node:util/types"),{webidl:ss}=Qe(),Ch=[],Uo;try{Uo=require("node:crypto");let t=["sha256","sha384","sha512"];Ch=Uo.getHashes().filter(e=>t.includes(e))}catch{}function dh(t){let e=t.urlList,r=e.length;return r===0?null:e[r-1].toString()}function n0(t,e){if(!ZD.has(t.status))return null;let r=t.headersList.get("location",!0);return r!==null&&ph(r)&&(fh(r)||(r=i0(r)),r=new URL(r,dh(t))),r&&!r.hash&&(r.hash=e),r}function fh(t){for(let e=0;e126||r<32)return!1}return!0}function i0(t){return Buffer.from(t,"binary").toString("utf8")}function ns(t){return t.urlList[t.urlList.length-1]}function a0(t){let e=ns(t);return Dh(e)&&KD.has(e.port)?"blocked":"allowed"}function c0(t){return t instanceof Error||t?.constructor?.name==="Error"||t?.constructor?.name==="DOMException"}function g0(t){for(let e=0;e=32&&r<=126||r>=128&&r<=255))return!1}return!0}var l0=Ih;function ph(t){return(t[0]===" "||t[0]===" "||t[t.length-1]===" "||t[t.length-1]===" "||t.includes(` +`)||t.includes("\r")||t.includes("\0"))===!1}function u0(t,e){let{headersList:r}=e,A=(r.get("referrer-policy",!0)??"").split(","),s="";if(A.length>0)for(let o=A.length;o!==0;o--){let n=A[o-1].trim();if(jD.has(n)){s=n;break}}s!==""&&(t.referrerPolicy=s)}function E0(){return"allowed"}function h0(){return"success"}function Q0(){return"success"}function B0(t){let e=null;e=t.mode,t.headersList.set("sec-fetch-mode",e,!0)}function I0(t){let e=t.origin;if(!(e==="client"||e===void 0)){if(t.responseTainting==="cors"||t.mode==="websocket")t.headersList.append("origin",e,!0);else if(t.method!=="GET"&&t.method!=="HEAD"){switch(t.referrerPolicy){case"no-referrer":e=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":t.origin&&Va(t.origin)&&!Va(ns(t))&&(e=null);break;case"same-origin":Go(t,ns(t))||(e=null);break;default:}t.headersList.append("origin",e,!0)}}}function sA(t,e){return t}function C0(t,e,r){return!t?.startTime||t.startTime4096&&(A=s);let o=Go(t,A),n=os(A)&&!os(t.url);switch(e){case"origin":return s??Ha(r,!0);case"unsafe-url":return A;case"same-origin":return o?s:"no-referrer";case"origin-when-cross-origin":return o?A:s;case"strict-origin-when-cross-origin":{let i=ns(t);return Go(A,i)?A:os(A)&&!os(i)?"no-referrer":s}default:return n?"no-referrer":s}}function Ha(t,e){return Cr(t instanceof URL),t=new URL(t),t.protocol==="file:"||t.protocol==="about:"||t.protocol==="blank:"?"no-referrer":(t.username="",t.password="",t.hash="",e&&(t.pathname="",t.search=""),t)}function os(t){if(!(t instanceof URL))return!1;if(t.href==="about:blank"||t.href==="about:srcdoc"||t.protocol==="data:"||t.protocol==="file:")return!0;return e(t.origin);function e(r){if(r==null||r==="null")return!1;let A=new URL(r);return!!(A.protocol==="https:"||A.protocol==="wss:"||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(A.hostname)||A.hostname==="localhost"||A.hostname.includes("localhost.")||A.hostname.endsWith(".localhost"))}}function w0(t,e){if(Uo===void 0)return!0;let r=wh(e);if(r==="no metadata"||r.length===0)return!0;let A=R0(r),s=D0(r,A);for(let o of s){let n=o.algo,i=o.hash,a=Uo.createHash(n).update(t).digest("base64");if(a[a.length-1]==="="&&(a[a.length-2]==="="?a=a.slice(0,-2):a=a.slice(0,-1)),T0(a,i))return!0}return!1}var y0=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function wh(t){let e=[],r=!0;for(let A of t.split(" ")){r=!1;let s=y0.exec(A);if(s===null||s.groups===void 0||s.groups.algo===void 0)continue;let o=s.groups.algo.toLowerCase();Ch.includes(o)&&e.push(s.groups)}return r===!0?"no metadata":e}function R0(t){let e=t[0].algo;if(e[3]==="5")return e;for(let r=1;r{t=A,e=s}),resolve:t,reject:e}}function F0(t){return t.controller.state==="aborted"}function S0(t){return t.controller.state==="aborted"||t.controller.state==="terminated"}function N0(t){return s0[t.toLowerCase()]??t}function U0(t){let e=JSON.stringify(t);if(e===void 0)throw new TypeError("Value is not JSON serializable");return Cr(typeof e=="string"),e}var G0=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function yh(t,e,r=0,A=1){class s{#e;#t;#r;constructor(n,i){this.#e=n,this.#t=i,this.#r=0}next(){if(typeof this!="object"||this===null||!(#e in this))throw new TypeError(`'next' called on an object that does not implement interface ${t} Iterator.`);let n=this.#r,i=this.#e[e],a=i.length;if(n>=a)return{value:void 0,done:!0};let{[r]:c,[A]:g}=i[n];this.#r=n+1;let l;switch(this.#t){case"key":l=c;break;case"value":l=g;break;case"key+value":l=[c,g];break}return{value:l,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,G0),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${t} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(o,n){return new s(o,n)}}function L0(t,e,r,A=0,s=1){let o=yh(t,r,A,s),n={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(a,c=globalThis){if(ss.brandCheck(this,e),ss.argumentLengthCheck(arguments,1,`${t}.forEach`),typeof a!="function")throw new TypeError(`Failed to execute 'forEach' on '${t}': parameter 1 is not of type 'Function'.`);for(let{0:g,1:l}of o(this,"key+value"))a.call(c,l,g,this)}}};return Object.defineProperties(e.prototype,{...n,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:n.entries.value}})}async function M0(t,e,r){let A=e,s=r,o;try{o=t.stream.getReader()}catch(n){s(n);return}try{A(await Rh(o))}catch(n){s(n)}}function v0(t){return t instanceof ReadableStream||t[Symbol.toStringTag]==="ReadableStream"&&typeof t.tee=="function"}function x0(t){try{t.close(),t.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}}var O0=/[^\x00-\xFF]/;function No(t){return Cr(!O0.test(t)),t}async function Rh(t){let e=[],r=0;for(;;){let{done:A,value:s}=await t.read();if(A)return Buffer.concat(e,r);if(!o0(s))throw new TypeError("Received non-Uint8Array chunk");e.push(s),r+=s.length}}function Y0(t){Cr("protocol"in t);let e=t.protocol;return e==="about:"||e==="blob:"||e==="data:"}function Va(t){return typeof t=="string"&&t[5]===":"&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&t[4]==="s"||t.protocol==="https:"}function Dh(t){Cr("protocol"in t);let e=t.protocol;return e==="http:"||e==="https:"}function _0(t,e){let r=t;if(!r.startsWith("bytes"))return"failure";let A={position:5};if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==61)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let s=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),o=s.length?Number(s):null;if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==45)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let n=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),i=n.length?Number(n):null;return A.positioni?"failure":{rangeStartValue:o,rangeEndValue:i}}function J0(t,e,r){let A="bytes ";return A+=No(`${t}`),A+="-",A+=No(`${e}`),A+="/",A+=No(`${r}`),A}var qa=class extends zD{#e;constructor(e){super(),this.#e=e}_transform(e,r,A){if(!this._inflateStream){if(e.length===0){A();return}this._inflateStream=(e[0]&15)===8?Qh.createInflate(this.#e):Qh.createInflateRaw(this.#e),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",s=>this.destroy(s))}this._inflateStream.write(e,r,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}};function P0(t){return new qa(t)}function H0(t){let e=null,r=null,A=null,s=Th("content-type",t);if(s===null)return"failure";for(let o of s){let n=e0(o);n==="failure"||n.essence==="*/*"||(A=n,A.essence!==r?(e=null,A.parameters.has("charset")&&(e=A.parameters.get("charset")),r=A.essence):!A.parameters.has("charset")&&e!==null&&A.parameters.set("charset",e))}return A??"failure"}function V0(t){let e=t,r={position:0},A=[],s="";for(;r.positiono!=='"'&&o!==",",e,r),r.positiono===9||o===32),A.push(s),s=""}return A}function Th(t,e){let r=e.get(t,!0);return r===null?null:V0(r)}var q0=new TextDecoder;function W0(t){return t.length===0?"":(t[0]===239&&t[1]===187&&t[2]===191&&(t=t.subarray(3)),q0.decode(t))}var Wa=class{get baseUrl(){return Bh()}get origin(){return this.baseUrl?.origin}policyContainer=mh()},za=class{settingsObject=new Wa},z0=new za;bh.exports={isAborted:F0,isCancelled:S0,isValidEncodedURL:fh,createDeferredPromise:k0,ReadableStreamFrom:A0,tryUpgradeRequestToAPotentiallyTrustworthyURL:b0,clampAndCoarsenConnectionTimingInfo:C0,coarsenedSharedCurrentTime:d0,determineRequestsReferrer:m0,makePolicyContainer:mh,clonePolicyContainer:p0,appendFetchMetadata:B0,appendRequestOriginHeader:I0,TAOCheck:Q0,corsCheck:h0,crossOriginResourcePolicyCheck:E0,createOpaqueTimingInfo:f0,setRequestReferrerPolicyOnRedirect:u0,isValidHTTPToken:Ih,requestBadPort:a0,requestCurrentURL:ns,responseURL:dh,responseLocationURL:n0,isBlobLike:r0,isURLPotentiallyTrustworthy:os,isValidReasonPhrase:g0,sameOrigin:Go,normalizeMethod:N0,serializeJavascriptValueToJSONString:U0,iteratorMixin:L0,createIterator:yh,isValidHeaderName:l0,isValidHeaderValue:ph,isErrorLike:c0,fullyReadBody:M0,bytesMatch:w0,isReadableStreamLike:v0,readableStreamClose:x0,isomorphicEncode:No,urlIsLocal:Y0,urlHasHttpsScheme:Va,urlIsHttpHttpsScheme:Dh,readAllBytes:Rh,simpleRangeHeaderValue:_0,buildContentRange:J0,parseMetadata:wh,createInflate:P0,extractMimeType:H0,getDecodeSplit:Th,utf8DecodeBytes:W0,environmentSettingsObject:z0}});var Pt=B((GJ,kh)=>{"use strict";kh.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var ja=B((LJ,Fh)=>{"use strict";var{Blob:Z0,File:j0}=require("node:buffer"),{kState:kt}=Pt(),{webidl:Et}=Qe(),Za=class t{constructor(e,r,A={}){let s=r,o=A.type,n=A.lastModified??Date.now();this[kt]={blobLike:e,name:s,type:o,lastModified:n}}stream(...e){return Et.brandCheck(this,t),this[kt].blobLike.stream(...e)}arrayBuffer(...e){return Et.brandCheck(this,t),this[kt].blobLike.arrayBuffer(...e)}slice(...e){return Et.brandCheck(this,t),this[kt].blobLike.slice(...e)}text(...e){return Et.brandCheck(this,t),this[kt].blobLike.text(...e)}get size(){return Et.brandCheck(this,t),this[kt].blobLike.size}get type(){return Et.brandCheck(this,t),this[kt].blobLike.type}get name(){return Et.brandCheck(this,t),this[kt].name}get lastModified(){return Et.brandCheck(this,t),this[kt].lastModified}get[Symbol.toStringTag](){return"File"}};Et.converters.Blob=Et.interfaceConverter(Z0);function K0(t){return t instanceof j0||t&&(typeof t.stream=="function"||typeof t.arrayBuffer=="function")&&t[Symbol.toStringTag]==="File"}Fh.exports={FileLike:Za,isFileLike:K0}});var as=B((MJ,Lh)=>{"use strict";var{isBlobLike:Lo,iteratorMixin:X0}=Ge(),{kState:fe}=Pt(),{kEnumerableProperty:oA}=M(),{FileLike:Sh,isFileLike:$0}=ja(),{webidl:z}=Qe(),{File:Gh}=require("node:buffer"),Nh=require("node:util"),Uh=globalThis.File??Gh,is=class t{constructor(e){if(z.util.markAsUncloneable(this),e!==void 0)throw z.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[fe]=[]}append(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.append";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"value",{strict:!1}):z.converters.USVString(r,s,"value"),A=arguments.length===3?z.converters.USVString(A,s,"filename"):void 0;let o=Ka(e,r,A);this[fe].push(o)}delete(e){z.brandCheck(this,t);let r="FormData.delete";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe]=this[fe].filter(A=>A.name!==e)}get(e){z.brandCheck(this,t);let r="FormData.get";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name");let A=this[fe].findIndex(s=>s.name===e);return A===-1?null:this[fe][A].value}getAll(e){z.brandCheck(this,t);let r="FormData.getAll";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].filter(A=>A.name===e).map(A=>A.value)}has(e){z.brandCheck(this,t);let r="FormData.has";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].findIndex(A=>A.name===e)!==-1}set(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.set";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"name",{strict:!1}):z.converters.USVString(r,s,"name"),A=arguments.length===3?z.converters.USVString(A,s,"name"):void 0;let o=Ka(e,r,A),n=this[fe].findIndex(i=>i.name===e);n!==-1?this[fe]=[...this[fe].slice(0,n),o,...this[fe].slice(n+1).filter(i=>i.name!==e)]:this[fe].push(o)}[Nh.inspect.custom](e,r){let A=this[fe].reduce((o,n)=>(o[n.name]?Array.isArray(o[n.name])?o[n.name].push(n.value):o[n.name]=[o[n.name],n.value]:o[n.name]=n.value,o),{__proto__:null});r.depth??=e,r.colors??=!0;let s=Nh.formatWithOptions(r,A);return`FormData ${s.slice(s.indexOf("]")+2)}`}};X0("FormData",is,fe,"name","value");Object.defineProperties(is.prototype,{append:oA,delete:oA,get:oA,getAll:oA,has:oA,set:oA,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function Ka(t,e,r){if(typeof e!="string"){if($0(e)||(e=e instanceof Blob?new Uh([e],"blob",{type:e.type}):new Sh(e,"blob",{type:e.type})),r!==void 0){let A={type:e.type,lastModified:e.lastModified};e=e instanceof Gh?new Uh([e],r,A):new Sh(e,r,A)}}return{name:t,value:e}}Lh.exports={FormData:is,makeEntry:Ka}});var _h=B((vJ,Yh)=>{"use strict";var{isUSVString:Mh,bufferToLowerCasedHeaderName:eT}=M(),{utf8DecodeBytes:tT}=Ge(),{HTTP_TOKEN_CODEPOINTS:rT,isomorphicDecode:vh}=Te(),{isFileLike:AT}=ja(),{makeEntry:sT}=as(),Mo=require("node:assert"),{File:oT}=require("node:buffer"),nT=globalThis.File??oT,iT=Buffer.from('form-data; name="'),xh=Buffer.from("; filename"),aT=Buffer.from("--"),cT=Buffer.from(`--\r +`);function gT(t){for(let e=0;e70)return!1;for(let r=0;r=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===39||A===45||A===95))return!1}return!0}function uT(t,e){Mo(e!=="failure"&&e.essence==="multipart/form-data");let r=e.parameters.get("boundary");if(r===void 0)return"failure";let A=Buffer.from(`--${r}`,"utf8"),s=[],o={position:0};for(;t[o.position]===13&&t[o.position+1]===10;)o.position+=2;let n=t.length;for(;t[n-1]===10&&t[n-2]===13;)n-=2;for(n!==t.length&&(t=t.subarray(0,n));;){if(t.subarray(o.position,o.position+A.length).equals(A))o.position+=A.length;else return"failure";if(o.position===t.length-2&&vo(t,aT,o)||o.position===t.length-4&&vo(t,cT,o))return s;if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let i=ET(t,o);if(i==="failure")return"failure";let{name:a,filename:c,contentType:g,encoding:l}=i;o.position+=2;let u;{let h=t.indexOf(A.subarray(2),o.position);if(h===-1)return"failure";u=t.subarray(o.position,h-4),o.position+=u.length,l==="base64"&&(u=Buffer.from(u.toString(),"base64"))}if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let E;c!==null?(g??="text/plain",gT(g)||(g=""),E=new nT([u],c,{type:g})):E=tT(Buffer.from(u)),Mo(Mh(a)),Mo(typeof E=="string"&&Mh(E)||AT(E)),s.push(sT(a,E,c))}}function ET(t,e){let r=null,A=null,s=null,o=null;for(;;){if(t[e.position]===13&&t[e.position+1]===10)return r===null?"failure":{name:r,filename:A,contentType:s,encoding:o};let n=nA(i=>i!==10&&i!==13&&i!==58,t,e);if(n=Xa(n,!0,!0,i=>i===9||i===32),!rT.test(n.toString())||t[e.position]!==58)return"failure";switch(e.position++,nA(i=>i===32||i===9,t,e),eT(n)){case"content-disposition":{if(r=A=null,!vo(t,iT,e)||(e.position+=17,r=Oh(t,e),r===null))return"failure";if(vo(t,xh,e)){let i=e.position+xh.length;if(t[i]===42&&(e.position+=1,i+=1),t[i]!==61||t[i+1]!==34||(e.position+=12,A=Oh(t,e),A===null))return"failure"}break}case"content-type":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),s=vh(i);break}case"content-transfer-encoding":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),o=vh(i);break}default:nA(i=>i!==10&&i!==13,t,e)}if(t[e.position]!==13&&t[e.position+1]!==10)return"failure";e.position+=2}}function Oh(t,e){Mo(t[e.position-1]===34);let r=nA(A=>A!==10&&A!==13&&A!==34,t,e);return t[e.position]!==34?null:(e.position++,r=new TextDecoder().decode(r).replace(/%0A/ig,` +`).replace(/%0D/ig,"\r").replace(/%22/g,'"'),r)}function nA(t,e,r){let A=r.position;for(;A0&&A(t[o]);)o--;return s===0&&o===t.length-1?t:t.subarray(s,o+1)}function vo(t,e,r){if(t.length{"use strict";var cs=M(),{ReadableStreamFrom:hT,isBlobLike:Jh,isReadableStreamLike:QT,readableStreamClose:BT,createDeferredPromise:IT,fullyReadBody:CT,extractMimeType:dT,utf8DecodeBytes:Vh}=Ge(),{FormData:Ph}=as(),{kState:aA}=Pt(),{webidl:fT}=Qe(),{Blob:pT}=require("node:buffer"),$a=require("node:assert"),{isErrored:qh,isDisturbed:mT}=require("node:stream"),{isArrayBuffer:wT}=require("node:util/types"),{serializeAMimeType:yT}=Te(),{multipartFormDataParser:RT}=_h(),ec;try{let t=require("node:crypto");ec=e=>t.randomInt(0,e)}catch{ec=t=>Math.floor(Math.random(t))}var xo=new TextEncoder;function DT(){}var Wh=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,zh;Wh&&(zh=new FinalizationRegistry(t=>{let e=t.deref();e&&!e.locked&&!mT(e)&&!qh(e)&&e.cancel("Response object has been garbage collected").catch(DT)}));function Zh(t,e=!1){let r=null;t instanceof ReadableStream?r=t:Jh(t)?r=t.stream():r=new ReadableStream({async pull(a){let c=typeof s=="string"?xo.encode(s):s;c.byteLength&&a.enqueue(c),queueMicrotask(()=>BT(a))},start(){},type:"bytes"}),$a(QT(r));let A=null,s=null,o=null,n=null;if(typeof t=="string")s=t,n="text/plain;charset=UTF-8";else if(t instanceof URLSearchParams)s=t.toString(),n="application/x-www-form-urlencoded;charset=UTF-8";else if(wT(t))s=new Uint8Array(t.slice());else if(ArrayBuffer.isView(t))s=new Uint8Array(t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength));else if(cs.isFormDataLike(t)){let a=`----formdata-undici-0${`${ec(1e11)}`.padStart(11,"0")}`,c=`--${a}\r +Content-Disposition: form-data`;let g=I=>I.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),l=I=>I.replace(/\r?\n|\r/g,`\r +`),u=[],E=new Uint8Array([13,10]);o=0;let h=!1;for(let[I,Q]of t)if(typeof Q=="string"){let f=xo.encode(c+`; name="${g(l(I))}"\r +\r +${l(Q)}\r +`);u.push(f),o+=f.byteLength}else{let f=xo.encode(`${c}; name="${g(l(I))}"`+(Q.name?`; filename="${g(Q.name)}"`:"")+`\r +Content-Type: ${Q.type||"application/octet-stream"}\r +\r +`);u.push(f,Q,E),typeof Q.size=="number"?o+=f.byteLength+Q.size+E.byteLength:h=!0}let C=xo.encode(`--${a}--\r +`);u.push(C),o+=C.byteLength,h&&(o=null),s=t,A=async function*(){for(let I of u)I.stream?yield*I.stream():yield I},n=`multipart/form-data; boundary=${a}`}else if(Jh(t))s=t,o=t.size,t.type&&(n=t.type);else if(typeof t[Symbol.asyncIterator]=="function"){if(e)throw new TypeError("keepalive");if(cs.isDisturbed(t)||t.locked)throw new TypeError("Response body object should not be disturbed or locked");r=t instanceof ReadableStream?t:hT(t)}if((typeof s=="string"||cs.isBuffer(s))&&(o=Buffer.byteLength(s)),A!=null){let a;r=new ReadableStream({async start(){a=A(t)[Symbol.asyncIterator]()},async pull(c){let{value:g,done:l}=await a.next();if(l)queueMicrotask(()=>{c.close(),c.byobRequest?.respond(0)});else if(!qh(r)){let u=new Uint8Array(g);u.byteLength&&c.enqueue(u)}return c.desiredSize>0},async cancel(c){await a.return()},type:"bytes"})}return[{stream:r,source:s,length:o},n]}function TT(t,e=!1){return t instanceof ReadableStream&&($a(!cs.isDisturbed(t),"The body has already been consumed."),$a(!t.locked,"The stream is locked.")),Zh(t,e)}function bT(t,e){let[r,A]=e.stream.tee();return e.stream=r,{stream:A,length:e.length,source:e.source}}function kT(t){if(t.aborted)throw new DOMException("The operation was aborted.","AbortError")}function FT(t){return{blob(){return iA(this,r=>{let A=Hh(this);return A===null?A="":A&&(A=yT(A)),new pT([r],{type:A})},t)},arrayBuffer(){return iA(this,r=>new Uint8Array(r).buffer,t)},text(){return iA(this,Vh,t)},json(){return iA(this,NT,t)},formData(){return iA(this,r=>{let A=Hh(this);if(A!==null)switch(A.essence){case"multipart/form-data":{let s=RT(r,A);if(s==="failure")throw new TypeError("Failed to parse body as FormData.");let o=new Ph;return o[aA]=s,o}case"application/x-www-form-urlencoded":{let s=new URLSearchParams(r.toString()),o=new Ph;for(let[n,i]of s)o.append(n,i);return o}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')},t)},bytes(){return iA(this,r=>new Uint8Array(r),t)}}}function ST(t){Object.assign(t.prototype,FT(t))}async function iA(t,e,r){if(fT.brandCheck(t,r),jh(t))throw new TypeError("Body is unusable: Body has already been read");kT(t[aA]);let A=IT(),s=n=>A.reject(n),o=n=>{try{A.resolve(e(n))}catch(i){s(i)}};return t[aA].body==null?(o(Buffer.allocUnsafe(0)),A.promise):(await CT(t[aA].body,o,s),A.promise)}function jh(t){let e=t[aA].body;return e!=null&&(e.stream.locked||cs.isDisturbed(e.stream))}function NT(t){return JSON.parse(Vh(t))}function Hh(t){let e=t[aA].headersList,r=dT(e);return r==="failure"?null:r}Kh.exports={extractBody:Zh,safelyExtractBody:TT,cloneBody:bT,mixinBody:ST,streamRegistry:zh,hasFinalizationRegistry:Wh,bodyUnusable:jh}});var EQ=B((OJ,uQ)=>{"use strict";var b=require("node:assert"),F=M(),{channels:Xh}=jr(),tc=Ma(),{RequestContentLengthMismatchError:dr,ResponseContentLengthMismatchError:$h,RequestAbortedError:iQ,InvalidArgumentError:UT,HeadersTimeoutError:GT,HeadersOverflowError:LT,SocketError:gA,InformationalError:lA,BodyTimeoutError:MT,HTTPParserError:vT,ResponseExceededMaxSizeError:xT}=Y(),{kUrl:aQ,kReset:be,kClient:Jo,kParser:j,kBlocking:us,kRunning:ce,kPending:cQ,kSize:eQ,kWriting:Ht,kQueue:et,kNoRef:gs,kKeepAliveDefaultTimeout:OT,kHostHeader:YT,kPendingIdx:_T,kRunningIdx:Ve,kError:pe,kPipelining:Po,kSocket:pr,kKeepAliveTimeoutValue:Vo,kMaxHeadersSize:rc,kKeepAliveMaxTimeout:JT,kKeepAliveTimeoutThreshold:PT,kHeadersTimeout:HT,kBodyTimeout:VT,kStrictContentLength:oc,kMaxRequests:tQ,kCounter:qT,kMaxResponseSize:WT,kOnError:rQ,kResume:Ft,kHTTPContext:gQ}=$(),Le=zE(),AQ=Buffer.alloc(0),Oo=Buffer[Symbol.species],Yo=F.addListener,zT=F.removeAllListeners,mr=Symbol("kIdleSocketValidation"),fr=Symbol("kIdleSocketValidationTimeout"),cc=Symbol("kSocketUsed"),Ac;async function ZT(){let t=process.env.JEST_WORKER_ID?Oa():void 0,e;try{e=await WebAssembly.compile(KE())}catch{e=await WebAssembly.compile(t||Oa())}return await WebAssembly.instantiate(e,{env:{wasm_on_url:(r,A,s)=>0,wasm_on_status:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onStatus(new Oo(ht.buffer,o,s))||0},wasm_on_message_begin:r=>(b(se.ptr===r),se.onMessageBegin()||0),wasm_on_header_field:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderField(new Oo(ht.buffer,o,s))||0},wasm_on_header_value:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderValue(new Oo(ht.buffer,o,s))||0},wasm_on_headers_complete:(r,A,s,o)=>(b(se.ptr===r),se.onHeadersComplete(A,!!s,!!o)||0),wasm_on_body:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onBody(new Oo(ht.buffer,o,s))||0},wasm_on_message_complete:r=>(b(se.ptr===r),se.onMessageComplete()||0)}})}var sc=null,nc=ZT();nc.catch();var se=null,ht=null,_o=0,Qt=null,jT=0,ls=1,uA=2|ls,Ho=4|ls,ic=8|jT,ac=class{constructor(e,r,{exports:A}){b(Number.isFinite(e[rc])&&e[rc]>0),this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Le.TYPE.RESPONSE),this.client=e,this.socket=r,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[rc],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[WT]}setTimeout(e,r){e!==this.timeoutValue||r&ls^this.timeoutType&ls?(this.timeout&&(tc.clearTimeout(this.timeout),this.timeout=null),e&&(r&ls?this.timeout=tc.setFastTimeout(sQ,e,new WeakRef(this)):(this.timeout=setTimeout(sQ,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=r}resume(){this.socket.destroyed||!this.paused||(b(this.ptr!=null),b(se==null),this.llhttp.llhttp_resume(this.ptr),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||AQ),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){b(this.ptr!=null),b(se==null),b(!this.paused);let{socket:r,llhttp:A}=this;e.length>_o&&(Qt&&A.free(Qt),_o=Math.ceil(e.length/4096)*4096,Qt=A.malloc(_o)),new Uint8Array(A.memory.buffer,Qt,_o).set(e);try{let s;try{ht=e,se=this,s=A.llhttp_execute(this.ptr,Qt,e.length)}catch(n){throw n}finally{se=null,ht=null}let o=A.llhttp_get_error_pos(this.ptr)-Qt;if(s!==Le.ERROR.OK){let n=e.subarray(o);if(s===Le.ERROR.PAUSED_UPGRADE)this.onUpgrade(n);else if(s===Le.ERROR.PAUSED)this.paused=!0,r.unshift(n);else throw this.createError(s,n)}}catch(s){F.destroy(r,s)}}finish(){b(se===null),b(this.ptr!=null),b(!this.paused);let{llhttp:e}=this,r;try{se=this,r=e.llhttp_finish(this.ptr)}finally{se=null}return r===Le.ERROR.OK?null:r===Le.ERROR.PAUSED||r===Le.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,AQ)}createError(e,r){let{llhttp:A,contentLength:s,bytesRead:o}=this;if(s&&o!==parseInt(s,10))return new $h;let n=A.llhttp_get_error_reason(this.ptr),i="";if(n){let a=new Uint8Array(A.memory.buffer,n).indexOf(0);i="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,n,a).toString()+")"}return new vT(i,Le.ERROR[e],r)}destroy(){b(this.ptr!=null),b(se==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&tc.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:r}=this;if(e.destroyed)return-1;if(r[ce]===0)return F.destroy(e,new gA("bad response",F.getSocketInfo(e))),-1;let A=r[et][r[Ve]];if(!A)return-1;A.onResponseStarted()}onHeaderField(e){let r=this.headers.length;(r&1)===0?this.headers.push(e):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]),this.trackHeader(e.length)}onHeaderValue(e){let r=this.headers.length;(r&1)===1?(this.headers.push(e),r+=1):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]);let A=this.headers[r-2];if(A.length===10){let s=F.bufferToLowerCasedHeaderName(A);s==="keep-alive"?this.keepAlive+=e.toString():s==="connection"&&(this.connection+=e.toString())}else A.length===14&&F.bufferToLowerCasedHeaderName(A)==="content-length"&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&F.destroy(this.socket,new LT)}onUpgrade(e){let{upgrade:r,client:A,socket:s,headers:o,statusCode:n}=this;b(r),b(A[pr]===s),b(!s.destroyed),b(!this.paused),b((o.length&1)===0);let i=A[et][A[Ve]];b(i),b(i.upgrade||i.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,s.unshift(e),s[j].destroy(),s[j]=null,s[Jo]=null,s[pe]=null,zT(s),A[pr]=null,A[gQ]=null,A[et][A[Ve]++]=null,A.emit("disconnect",A[aQ],[A],new lA("upgrade"));try{i.onUpgrade(n,o,s)}catch(a){F.destroy(s,a)}A[Ft]()}onHeadersComplete(e,r,A){let{client:s,socket:o,headers:n,statusText:i}=this;if(o.destroyed)return-1;if(s[ce]===0)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;let a=s[et][s[Ve]];if(!a)return-1;if(b(!this.upgrade),b(this.statusCode<200),e===100)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;if(r&&!a.upgrade)return F.destroy(o,new gA("bad upgrade",F.getSocketInfo(o))),-1;if(b(this.timeoutType===uA),this.statusCode=e,this.shouldKeepAlive=A||a.method==="HEAD"&&!o[be]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let g=a.bodyTimeout!=null?a.bodyTimeout:s[VT];this.setTimeout(g,Ho)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(a.method==="CONNECT")return b(s[ce]===1),this.upgrade=!0,2;if(r)return b(s[ce]===1),this.upgrade=!0,2;if(b((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&s[Po]){let g=this.keepAlive?F.parseKeepAliveTimeout(this.keepAlive):null;if(g!=null){let l=Math.min(g-s[PT],s[JT]);l<=0?o[be]=!0:s[Vo]=l}else s[Vo]=s[OT]}else o[be]=!0;let c=a.onHeaders(e,n,this.resume,i)===!1;return a.aborted?-1:a.method==="HEAD"||e<200?1:(o[us]&&(o[us]=!1,s[Ft]()),c?Le.ERROR.PAUSED:0)}onBody(e){let{client:r,socket:A,statusCode:s,maxResponseSize:o}=this;if(A.destroyed)return-1;let n=r[et][r[Ve]];if(b(n),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),b(s>=200),o>-1&&this.bytesRead+e.length>o)return F.destroy(A,new xT),-1;if(this.bytesRead+=e.length,n.onData(e)===!1)return Le.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:r,statusCode:A,upgrade:s,headers:o,contentLength:n,bytesRead:i,shouldKeepAlive:a}=this;if(r.destroyed&&(!A||a))return-1;if(s)return;b(A>=100),b((this.headers.length&1)===0);let c=e[et][e[Ve]];if(b(c),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,!(A<200)){if(c.method!=="HEAD"&&n&&i!==parseInt(n,10))return F.destroy(r,new $h),-1;if(c.onComplete(o),e[et][e[Ve]++]=null,r[cc]=!0,r[Ht])return b(e[ce]===0),F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;if(a){if(r[be]&&e[ce]===0)return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;e[Po]==null||e[Po]===1?setImmediate(()=>e[Ft]()):e[Ft]()}else return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED}}};function sQ(t){let{socket:e,timeoutType:r,client:A,paused:s}=t.deref();r===uA?(!e[Ht]||e.writableNeedDrain||A[ce]>1)&&(b(!s,"cannot be paused while waiting for headers"),F.destroy(e,new GT)):r===Ho?s||F.destroy(e,new MT):r===ic&&(b(A[ce]===0&&A[Vo]),F.destroy(e,new lA("socket idle timeout")))}async function KT(t,e){t[pr]=e,sc||(sc=await nc,nc=null),e[gs]=!1,e[Ht]=!1,e[be]=!1,e[us]=!1,e[mr]=0,e[fr]=null,e[cc]=!1,e[j]=new ac(t,e,sc),Yo(e,"error",function(A){b(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let s=this[j];if(A.code==="ECONNRESET"&&s.statusCode&&!s.shouldKeepAlive){let o=s.finish();o&&(this[pe]=o,this[Jo][rQ](o));return}this[pe]=A,this[Jo][rQ](A)}),Yo(e,"readable",function(){let A=this[j];A&&A.readMore()}),Yo(e,"end",function(){let A=this[j];if(A.statusCode&&!A.shouldKeepAlive){let s=A.finish();s&&F.destroy(this,s);return}F.destroy(this,new gA("other side closed",F.getSocketInfo(this)))}),Yo(e,"close",function(){let A=this[Jo],s=this[j];lQ(this),s&&(!this[pe]&&s.statusCode&&!s.shouldKeepAlive&&(this[pe]=s.finish()||this[pe]),this[j].destroy(),this[j]=null);let o=this[pe]||new gA("closed",F.getSocketInfo(this));if(A[pr]=null,A[gQ]=null,A.destroyed){b(A[cQ]===0);let n=A[et].splice(A[Ve]);for(let i=0;i0&&o.code!=="UND_ERR_INFO"){let n=A[et][A[Ve]];A[et][A[Ve]++]=null,F.errorRequest(A,n,o)}A[_T]=A[Ve],b(A[ce]===0),A.emit("disconnect",A[aQ],[A],o),A[Ft]()});let r=!1;return e.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...A){return tb(t,...A)},resume(){$T(t)},destroy(A,s){r?queueMicrotask(s):e.destroy(A).on("close",s)},get destroyed(){return e.destroyed},busy(A){return!!(e[Ht]||e[be]||e[us]||e[mr]===1||A&&(t[ce]>0&&!A.idempotent||t[ce]>0&&(A.upgrade||A.method==="CONNECT")||t[ce]>0&&F.bodyLength(A.body)!==0&&(F.isStream(A.body)||F.isAsyncIterable(A.body)||F.isFormDataLike(A.body))))}}}function lQ(t){t[fr]&&(clearTimeout(t[fr]),t[fr]=null),t[mr]=0}function XT(t,e){e[mr]=1,e[fr]=setTimeout(()=>{e[fr]=null,e[mr]=2,t[pr]===e&&!e.destroyed&&t[Ft]()},0),e[fr].unref?.()}function $T(t){let e=t[pr];if(e&&!e.destroyed){if(t[eQ]===0?!e[gs]&&e.unref&&(e.unref(),e[gs]=!0):e[gs]&&e.ref&&(e.ref(),e[gs]=!1),t[ce]===0&&t[cQ]>0&&e[cc]){if(e[mr]===0)return XT(t,e),e[j].readMore(),e.destroyed,void 0;if(e[mr]===1)return e[j].readMore(),e.destroyed,void 0}if(t[ce]===0&&(e[j].readMore(),e.destroyed))return;if(t[eQ]===0)e[j].timeoutType!==ic&&e[j].setTimeout(t[Vo],ic);else if(t[ce]>0&&e[j].statusCode<200&&e[j].timeoutType!==uA){let r=t[et][t[Ve]],A=r.headersTimeout!=null?r.headersTimeout:t[HT];e[j].setTimeout(A,uA)}}}function eb(t){return t!=="GET"&&t!=="HEAD"&&t!=="OPTIONS"&&t!=="TRACE"&&t!=="CONNECT"}function tb(t,e){let{method:r,path:A,host:s,upgrade:o,blocking:n,reset:i}=e,{body:a,headers:c,contentLength:g}=e,l=r==="PUT"||r==="POST"||r==="PATCH"||r==="QUERY"||r==="PROPFIND"||r==="PROPPATCH";if(F.isFormDataLike(a)){Ac||(Ac=cA().extractBody);let[I,Q]=Ac(a);e.contentType==null&&c.push("content-type",Q),a=I.stream,g=I.length}else if(F.isBlobLike(a)&&e.contentType==null){let I=a.type;if(I){let Q=`${I}`;if(!F.isValidHeaderValue(Q))return F.errorRequest(t,e,new UT("invalid content-type header")),!1;c.push("content-type",Q)}}a&&typeof a.read=="function"&&a.read(0);let u=F.bodyLength(a);if(g=u??g,g===null&&(g=e.contentLength),g===0&&!l&&(g=null),eb(r)&&g>0&&e.contentLength!==null&&e.contentLength!==g){if(t[oc])return F.errorRequest(t,e,new dr),!1;process.emitWarning(new dr)}let E=t[pr];lQ(E);let h=I=>{e.aborted||e.completed||(F.errorRequest(t,e,I||new iQ),F.destroy(a),F.destroy(E,new lA("aborted")))};try{e.onConnect(h)}catch(I){F.errorRequest(t,e,I)}if(e.aborted)return!1;r==="HEAD"&&(E[be]=!0),(o||r==="CONNECT")&&(E[be]=!0),i!=null&&(E[be]=i),t[tQ]&&E[qT]++>=t[tQ]&&(E[be]=!0),n&&(E[us]=!0);let C=`${r} ${A} HTTP/1.1\r +`;if(typeof s=="string"?C+=`host: ${s}\r +`:C+=t[YT],o?C+=`connection: upgrade\r +upgrade: ${o}\r +`:t[Po]&&!E[be]?C+=`connection: keep-alive\r +`:C+=`connection: close\r +`,Array.isArray(c))for(let I=0;I{e.removeListener("error",E)}),!a){let h=new iQ;queueMicrotask(()=>E(h))}},E=function(h){if(!a){if(a=!0,b(s.destroyed||s[Ht]&&r[ce]<=1),s.off("drain",l).off("error",E),e.removeListener("data",g).removeListener("end",E).removeListener("close",u),!h)try{c.end()}catch(C){h=C}c.destroy(h),h&&(h.code!=="UND_ERR_INFO"||h.message!=="reset")?F.destroy(e,h):F.destroy(e)}};e.on("data",g).on("end",E).on("error",E).on("close",u),e.resume&&e.resume(),s.on("drain",l).on("error",E),e.errorEmitted??e.errored?setImmediate(()=>E(e.errored)):(e.endEmitted??e.readableEnded)&&setImmediate(()=>E(null)),(e.closeEmitted??e.closed)&&setImmediate(u)}function oQ(t,e,r,A,s,o,n,i){try{e?F.isBuffer(e)&&(b(o===e.byteLength,"buffer body must have content length"),s.cork(),s.write(`${n}content-length: ${o}\r +\r +`,"latin1"),s.write(e),s.uncork(),A.onBodySent(e),!i&&A.reset!==!1&&(s[be]=!0)):o===0?s.write(`${n}content-length: 0\r +\r +`,"latin1"):(b(o===null,"no body must not have content length"),s.write(`${n}\r +`,"latin1")),A.onRequestSent(),r[Ft]()}catch(a){t(a)}}async function Ab(t,e,r,A,s,o,n,i){b(o===e.size,"blob body must have content length");try{if(o!=null&&o!==e.size)throw new dr;let a=Buffer.from(await e.arrayBuffer());s.cork(),s.write(`${n}content-length: ${o}\r +\r +`,"latin1"),s.write(a),s.uncork(),A.onBodySent(a),A.onRequestSent(),!i&&A.reset!==!1&&(s[be]=!0),r[Ft]()}catch(a){t(a)}}async function nQ(t,e,r,A,s,o,n,i){b(o!==0||r[ce]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let u=a;a=null,u()}}let g=()=>new Promise((u,E)=>{b(a===null),s[pe]?E(s[pe]):a=u});s.on("close",c).on("drain",c);let l=new qo({abort:t,socket:s,request:A,contentLength:o,client:r,expectsPayload:i,header:n});try{for await(let u of e){if(s[pe])throw s[pe];l.write(u)||await g()}l.end()}catch(u){l.destroy(u)}finally{s.off("close",c).off("drain",c)}}var qo=class{constructor({abort:e,socket:r,request:A,contentLength:s,client:o,expectsPayload:n,header:i}){this.socket=r,this.request=A,this.contentLength=s,this.client=o,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,r[Ht]=!0}write(e){let{socket:r,request:A,contentLength:s,client:o,bytesWritten:n,expectsPayload:i,header:a}=this;if(r[pe])throw r[pe];if(r.destroyed)return!1;let c=Buffer.byteLength(e);if(!c)return!0;if(s!==null&&n+c>s){if(o[oc])throw new dr;process.emitWarning(new dr)}r.cork(),n===0&&(!i&&A.reset!==!1&&(r[be]=!0),s===null?r.write(`${a}transfer-encoding: chunked\r +`,"latin1"):r.write(`${a}content-length: ${s}\r +\r +`,"latin1")),s===null&&r.write(`\r +${c.toString(16)}\r +`,"latin1"),this.bytesWritten+=c;let g=r.write(e);return r.uncork(),A.onBodySent(e),g||r[j].timeout&&r[j].timeoutType===uA&&r[j].timeout.refresh&&r[j].timeout.refresh(),g}end(){let{socket:e,contentLength:r,client:A,bytesWritten:s,expectsPayload:o,header:n,request:i}=this;if(i.onRequestSent(),e[Ht]=!1,e[pe])throw e[pe];if(!e.destroyed){if(s===0?o?e.write(`${n}content-length: 0\r +\r +`,"latin1"):e.write(`${n}\r +`,"latin1"):r===null&&e.write(`\r +0\r +\r +`,"latin1"),r!==null&&s!==r){if(A[oc])throw new dr;process.emitWarning(new dr)}e[j].timeout&&e[j].timeoutType===uA&&e[j].timeout.refresh&&e[j].timeout.refresh(),A[Ft]()}}destroy(e){let{socket:r,client:A,abort:s}=this;r[Ht]=!1,e&&(b(A[ce]<=1,"pipeline should only contain this request"),s(e))}};uQ.exports=KT});var pQ=B((YJ,fQ)=>{"use strict";var qe=require("node:assert"),{pipeline:sb}=require("node:stream"),v=M(),{RequestContentLengthMismatchError:gc,RequestAbortedError:hQ,SocketError:Es,InformationalError:lc}=Y(),{kUrl:Wo,kReset:Zo,kClient:EA,kRunning:jo,kPending:ob,kQueue:Vt,kPendingIdx:uc,kRunningIdx:tt,kError:At,kSocket:he,kStrictContentLength:nb,kOnError:Ec,kMaxConcurrentStreams:dQ,kHTTP2Session:rt,kResume:qt,kSize:ib,kHTTPContext:ab}=$(),St=Symbol("open streams"),QQ,BQ=!1,zo;try{zo=require("node:http2")}catch{zo={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:cb,HTTP2_HEADER_METHOD:gb,HTTP2_HEADER_PATH:lb,HTTP2_HEADER_SCHEME:ub,HTTP2_HEADER_CONTENT_LENGTH:Eb,HTTP2_HEADER_EXPECT:hb,HTTP2_HEADER_STATUS:Qb}}=zo;function Bb(t){let e=[];for(let[r,A]of Object.entries(t))if(Array.isArray(A))for(let s of A)e.push(Buffer.from(r),Buffer.from(s));else e.push(Buffer.from(r),Buffer.from(A));return e}async function Ib(t,e){t[he]=e,BQ||(BQ=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=zo.connect(t[Wo],{createConnection:()=>e,peerMaxConcurrentStreams:t[dQ]});r[St]=0,r[EA]=t,r[he]=e,v.addListener(r,"error",db),v.addListener(r,"frameError",fb),v.addListener(r,"end",pb),v.addListener(r,"goaway",mb),v.addListener(r,"close",function(){let{[EA]:s}=this,{[he]:o}=s,n=this[he][At]||this[At]||new Es("closed",v.getSocketInfo(o));if(s[rt]=null,s.destroyed){qe(s[ob]===0);let i=s[Vt].splice(s[tt]);for(let a=0;a{A=!0}),{version:"h2",defaultPipelining:1/0,write(...s){return yb(t,...s)},resume(){Cb(t)},destroy(s,o){A?queueMicrotask(o):e.destroy(s).on("close",o)},get destroyed(){return e.destroyed},busy(){return!1}}}function Cb(t){let e=t[he];e?.destroyed===!1&&(t[ib]===0&&t[dQ]===0?(e.unref(),t[rt].unref()):(e.ref(),t[rt].ref()))}function db(t){qe(t.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[he][At]=t,this[EA][Ec](t)}function fb(t,e,r){if(r===0){let A=new lc(`HTTP/2: "frameError" received - type ${t}, code ${e}`);this[he][At]=A,this[EA][Ec](A)}}function pb(){let t=new Es("other side closed",v.getSocketInfo(this[he]));this.destroy(t),v.destroy(this[he],t)}function mb(t){let e=this[At]||new Es(`HTTP/2: "GOAWAY" frame received with code ${t}`,v.getSocketInfo(this)),r=this[EA];if(r[he]=null,r[ab]=null,this[rt]!=null&&(this[rt].destroy(e),this[rt]=null),v.destroy(this[he],e),r[tt]{e.aborted||e.completed||(y=y||new hQ,v.errorRequest(t,e,y),u!=null&&v.destroy(u,y),v.destroy(g,y),t[Vt][t[tt]++]=null,t[qt]())};try{e.onConnect(C)}catch(y){v.errorRequest(t,e,y)}if(e.aborted)return!1;if(A==="CONNECT")return r.ref(),u=r.request(l,{endStream:!1,signal:a}),u.id&&!u.pending?(e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null):u.once("ready",()=>{e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),!0;l[lb]=s,l[ub]="https";let I=A==="PUT"||A==="POST"||A==="PATCH";g&&typeof g.read=="function"&&g.read(0);let Q=v.bodyLength(g);if(v.isFormDataLike(g)){QQ??=cA().extractBody;let[y,P]=QQ(g);l["content-type"]=P,g=y.stream,Q=y.length}if(Q==null&&(Q=e.contentLength),(Q===0||!I)&&(Q=null),wb(A)&&Q>0&&e.contentLength!=null&&e.contentLength!==Q){if(t[nb])return v.errorRequest(t,e,new gc),!1;process.emitWarning(new gc)}Q!=null&&(qe(g,"no body must not have content length"),l[Eb]=`${Q}`),r.ref();let f=A==="GET"||A==="HEAD"||g===null;return i?(l[hb]="100-continue",u=r.request(l,{endStream:f,signal:a}),u.once("continue",R)):(u=r.request(l,{endStream:f,signal:a}),R()),++r[St],u.once("response",y=>{let{[Qb]:P,...Z}=y;if(e.onResponseStarted(),e.aborted){let Ae=new hQ;v.errorRequest(t,e,Ae),v.destroy(u,Ae);return}e.onHeaders(Number(P),Bb(Z),u.resume.bind(u),"")===!1&&u.pause(),u.on("data",Ae=>{e.onData(Ae)===!1&&u.pause()})}),u.once("end",()=>{(u.state?.state==null||u.state.state<6)&&e.onComplete([]),r[St]===0&&r.unref(),C(new lc("HTTP/2: stream half-closed (remote)")),t[Vt][t[tt]++]=null,t[uc]=t[tt],t[qt]()}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),u.once("error",function(y){C(y)}),u.once("frameError",(y,P)=>{C(new lc(`HTTP/2: "frameError" received - type ${y}, code ${P}`))}),!0;function R(){!g||Q===0?IQ(C,u,null,t,e,t[he],Q,I):v.isBuffer(g)?IQ(C,u,g,t,e,t[he],Q,I):v.isBlobLike(g)?typeof g.stream=="function"?CQ(C,u,g.stream(),t,e,t[he],Q,I):Db(C,u,g,t,e,t[he],Q,I):v.isStream(g)?Rb(C,t[he],I,u,g,t,e,Q):v.isIterable(g)?CQ(C,u,g,t,e,t[he],Q,I):qe(!1)}}function IQ(t,e,r,A,s,o,n,i){try{r!=null&&v.isBuffer(r)&&(qe(n===r.byteLength,"buffer body must have content length"),e.cork(),e.write(r),e.uncork(),e.end(),s.onBodySent(r)),i||(o[Zo]=!0),s.onRequestSent(),A[qt]()}catch(a){t(a)}}function Rb(t,e,r,A,s,o,n,i){qe(i!==0||o[jo]===0,"stream body cannot be pipelined");let a=sb(s,A,g=>{g?(v.destroy(a,g),t(g)):(v.removeAllListeners(a),n.onRequestSent(),r||(e[Zo]=!0),o[qt]())});v.addListener(a,"data",c);function c(g){n.onBodySent(g)}}async function Db(t,e,r,A,s,o,n,i){qe(n===r.size,"blob body must have content length");try{if(n!=null&&n!==r.size)throw new gc;let a=Buffer.from(await r.arrayBuffer());e.cork(),e.write(a),e.uncork(),e.end(),s.onBodySent(a),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(a){t(a)}}async function CQ(t,e,r,A,s,o,n,i){qe(n!==0||A[jo]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let l=a;a=null,l()}}let g=()=>new Promise((l,u)=>{qe(a===null),o[At]?u(o[At]):a=l});e.on("close",c).on("drain",c);try{for await(let l of r){if(o[At])throw o[At];let u=e.write(l);s.onBodySent(l),u||await g()}e.end(),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(l){t(l)}finally{e.off("close",c).off("drain",c)}}fQ.exports=Ib});var Xo=B((_J,yQ)=>{"use strict";var Bt=M(),{kBodyUsed:hs}=$(),Qc=require("node:assert"),{InvalidArgumentError:Tb}=Y(),bb=require("node:events"),kb=[300,301,302,303,307,308],mQ=Symbol("body"),Ko=class{constructor(e){this[mQ]=e,this[hs]=!1}async*[Symbol.asyncIterator](){Qc(!this[hs],"disturbed"),this[hs]=!0,yield*this[mQ]}},hc=class{constructor(e,r,A,s){if(r!=null&&(!Number.isInteger(r)||r<0))throw new Tb("maxRedirections must be a positive number");Bt.validateHandler(s,A.method,A.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...A,maxRedirections:0},this.maxRedirections=r,this.handler=s,this.history=[],this.redirectionLimitReached=!1,Bt.isStream(this.opts.body)?(Bt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){Qc(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[hs]=!1,bb.prototype.on.call(this.opts.body,"data",function(){this[hs]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Ko(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Bt.isIterable(this.opts.body)&&(this.opts.body=new Ko(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,r,A){this.handler.onUpgrade(e,r,A)}onError(e){this.handler.onError(e)}onHeaders(e,r,A,s){if(this.location=this.history.length>=this.maxRedirections||Bt.isDisturbed(this.opts.body)?null:Fb(e,r),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(new Error("max redirects")),this.redirectionLimitReached=!0,this.abort(new Error("max redirects"));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,r,A,s);let{origin:o,pathname:n,search:i}=Bt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),a=i?`${n}${i}`:n;this.opts.headers=Sb(this.opts.headers,e===303,this.opts.origin!==o),this.opts.path=a,this.opts.origin=o,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!=="HEAD"&&(this.opts.method="GET",this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function Fb(t,e){if(kb.indexOf(t)===-1)return null;for(let r=0;r{"use strict";var Nb=Xo();function Ub({maxRedirections:t}){return e=>function(A,s){let{maxRedirections:o=t}=A;if(!o)return e(A,s);let n=new Nb(e,o,A,s);return A={...A,maxRedirections:0},e(A,n)}}RQ.exports=Ub});var BA=B((PJ,LQ)=>{"use strict";var Nt=require("node:assert"),SQ=require("node:net"),Gb=require("node:http"),wr=M(),{channels:hA}=jr(),Lb=LE(),Mb=eA(),{InvalidArgumentError:oe,InformationalError:vb,ClientDestroyedError:xb}=Y(),Ob=ts(),{kUrl:It,kServerName:Wt,kClient:Yb,kBusy:Bc,kConnect:_b,kResuming:yr,kRunning:ds,kPending:fs,kSize:Cs,kQueue:st,kConnected:Jb,kConnecting:QA,kNeedDrain:Zt,kKeepAliveDefaultTimeout:DQ,kHostHeader:Pb,kPendingIdx:ot,kRunningIdx:Ut,kError:Hb,kPipelining:en,kKeepAliveTimeoutValue:Vb,kMaxHeadersSize:qb,kKeepAliveMaxTimeout:Wb,kKeepAliveTimeoutThreshold:zb,kHeadersTimeout:Zb,kBodyTimeout:jb,kStrictContentLength:Kb,kConnector:Qs,kMaxRedirections:Xb,kMaxRequests:Ic,kCounter:$b,kClose:ek,kDestroy:tk,kDispatch:rk,kInterceptors:TQ,kLocalAddress:Bs,kMaxResponseSize:Ak,kOnError:sk,kHTTPContext:ne,kMaxConcurrentStreams:ok,kResume:Is}=$(),nk=EQ(),ik=pQ(),bQ=!1,zt=Symbol("kClosedResolve"),kQ=()=>{};function NQ(t){return t[en]??t[ne]?.defaultPipelining??1}var Cc=class extends Mb{constructor(e,{interceptors:r,maxHeaderSize:A,headersTimeout:s,socketTimeout:o,requestTimeout:n,connectTimeout:i,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:l,maxKeepAliveTimeout:u,keepAliveMaxTimeout:E,keepAliveTimeoutThreshold:h,socketPath:C,pipelining:I,tls:Q,strictContentLength:f,maxCachedSessions:R,maxRedirections:y,connect:P,maxRequestsPerClient:Z,localAddress:Ae,maxResponseSize:gt,autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr,maxConcurrentStreams:_t,allowH2:De,webSocket:qr}={}){if(super({webSocket:qr}),g!==void 0)throw new oe("unsupported keepAlive, use pipelining=0 instead");if(o!==void 0)throw new oe("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(n!==void 0)throw new oe("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new oe("unsupported idleTimeout, use keepAliveTimeout instead");if(u!==void 0)throw new oe("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(A!=null&&!Number.isFinite(A))throw new oe("invalid maxHeaderSize");if(C!=null&&typeof C!="string")throw new oe("invalid socketPath");if(i!=null&&(!Number.isFinite(i)||i<0))throw new oe("invalid connectTimeout");if(l!=null&&(!Number.isFinite(l)||l<=0))throw new oe("invalid keepAliveTimeout");if(E!=null&&(!Number.isFinite(E)||E<=0))throw new oe("invalid keepAliveMaxTimeout");if(h!=null&&!Number.isFinite(h))throw new oe("invalid keepAliveTimeoutThreshold");if(s!=null&&(!Number.isInteger(s)||s<0))throw new oe("headersTimeout must be a positive integer or zero");if(a!=null&&(!Number.isInteger(a)||a<0))throw new oe("bodyTimeout must be a positive integer or zero");if(P!=null&&typeof P!="function"&&typeof P!="object")throw new oe("connect must be a function or an object");if(y!=null&&(!Number.isInteger(y)||y<0))throw new oe("maxRedirections must be a positive number");if(Z!=null&&(!Number.isInteger(Z)||Z<0))throw new oe("maxRequestsPerClient must be a positive number");if(Ae!=null&&(typeof Ae!="string"||SQ.isIP(Ae)===0))throw new oe("localAddress must be valid string IP address");if(gt!=null&&(!Number.isInteger(gt)||gt<-1))throw new oe("maxResponseSize must be a positive number");if(Vr!=null&&(!Number.isInteger(Vr)||Vr<-1))throw new oe("autoSelectFamilyAttemptTimeout must be a positive number");if(De!=null&&typeof De!="boolean")throw new oe("allowH2 must be a valid boolean value");if(_t!=null&&(typeof _t!="number"||_t<1))throw new oe("maxConcurrentStreams must be a positive integer, greater than 0");typeof P!="function"&&(P=Ob({...Q,maxCachedSessions:R,allowH2:De,socketPath:C,timeout:i,...wt?{autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr}:void 0,...P})),r?.Client&&Array.isArray(r.Client)?(this[TQ]=r.Client,bQ||(bQ=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[TQ]=[ak({maxRedirections:y})],this[It]=wr.parseOrigin(e),this[Qs]=P,this[en]=I??1,this[qb]=A||Gb.maxHeaderSize,this[DQ]=l??4e3,this[Wb]=E??6e5,this[zb]=h??2e3,this[Vb]=this[DQ],this[Wt]=null,this[Bs]=Ae??null,this[yr]=0,this[Zt]=0,this[Pb]=`host: ${this[It].hostname}${this[It].port?`:${this[It].port}`:""}\r +`,this[jb]=a??3e5,this[Zb]=s??3e5,this[Kb]=f??!0,this[Xb]=y,this[Ic]=Z,this[zt]=null,this[Ak]=gt>-1?gt:-1,this[ok]=_t??100,this[ne]=null,this[st]=[],this[Ut]=0,this[ot]=0,this[Is]=Wr=>dc(this,Wr),this[sk]=Wr=>UQ(this,Wr)}get pipelining(){return this[en]}set pipelining(e){this[en]=e,this[Is](!0)}get[fs](){return this[st].length-this[ot]}get[ds](){return this[ot]-this[Ut]}get[Cs](){return this[st].length-this[Ut]}get[Jb](){return!!this[ne]&&!this[QA]&&!this[ne].destroyed}get[Bc](){return!!(this[ne]?.busy(null)||this[Cs]>=(NQ(this)||1)||this[fs]>0)}[_b](e){GQ(this),this.once("connect",e)}[rk](e,r){let A=e.origin||this[It].origin,s=new Lb(A,e,r);return this[st].push(s),this[yr]||(wr.bodyLength(s.body)==null&&wr.isIterable(s.body)?(this[yr]=1,queueMicrotask(()=>dc(this))):this[Is](!0)),this[yr]&&this[Zt]!==2&&this[Bc]&&(this[Zt]=2),this[Zt]<2}async[ek](){return new Promise(e=>{this[Cs]?this[zt]=e:e(null)})}async[tk](e){return new Promise(r=>{let A=this[st].splice(this[ot]);for(let o=0;o{this[zt]&&(this[zt](),this[zt]=null),r(null)};this[ne]?(this[ne].destroy(e,s),this[ne]=null):queueMicrotask(s),this[Is]()})}},ak=$o();function UQ(t,e){if(t[ds]===0&&e.code!=="UND_ERR_INFO"&&e.code!=="UND_ERR_SOCKET"){Nt(t[ot]===t[Ut]);let r=t[st].splice(t[Ut]);for(let A=0;A{t[Qs]({host:e,hostname:r,protocol:A,port:s,servername:t[Wt],localAddress:t[Bs]},(a,c)=>{a?i(a):n(c)})});if(t.destroyed){wr.destroy(o.on("error",kQ),new xb);return}Nt(o);try{t[ne]=o.alpnProtocol==="h2"?await ik(t,o):await nk(t,o)}catch(n){throw o.destroy().on("error",kQ),n}t[QA]=!1,o[$b]=0,o[Ic]=t[Ic],o[Yb]=t,o[Hb]=null,hA.connected.hasSubscribers&&hA.connected.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],socket:o}),t.emit("connect",t[It],[t])}catch(o){if(t.destroyed)return;if(t[QA]=!1,hA.connectError.hasSubscribers&&hA.connectError.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],error:o}),o.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(Nt(t[ds]===0);t[fs]>0&&t[st][t[ot]].servername===t[Wt];){let n=t[st][t[ot]++];wr.errorRequest(t,n,o)}else UQ(t,o);t.emit("connectionError",t[It],[t],o)}t[Is]()}function FQ(t){t[Zt]=0,t.emit("drain",t[It],[t])}function dc(t,e){t[yr]!==2&&(t[yr]=2,ck(t,e),t[yr]=0,t[Ut]>256&&(t[st].splice(0,t[Ut]),t[ot]-=t[Ut],t[Ut]=0))}function ck(t,e){for(;;){if(t.destroyed){Nt(t[fs]===0);return}if(t[zt]&&!t[Cs]){t[zt](),t[zt]=null;return}if(t[ne]&&t[ne].resume(),t[Bc])t[Zt]=2;else if(t[Zt]===2){e?(t[Zt]=1,queueMicrotask(()=>FQ(t))):FQ(t);continue}if(t[fs]===0||t[ds]>=(NQ(t)||1))return;let r=t[st][t[ot]];if(t[It].protocol==="https:"&&t[Wt]!==r.servername){if(t[ds]>0)return;t[Wt]=r.servername,t[ne]?.destroy(new vb("servername changed"),()=>{t[ne]=null,dc(t)})}if(t[QA])return;if(!t[ne]){GQ(t);return}if(t[ne].destroyed||t[ne].busy(r))return;!r.aborted&&t[ne].write(r)?t[ot]++:t[st].splice(t[ot],1)}}LQ.exports=Cc});var fc=B((VJ,MQ)=>{"use strict";var tn=class{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&2047}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,e)}};MQ.exports=class{constructor(){this.head=this.tail=new tn}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new tn),this.head.push(e)}shift(){let e=this.tail,r=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),r}}});var xQ=B((qJ,vQ)=>{var{kFree:gk,kConnected:lk,kPending:uk,kQueued:Ek,kRunning:hk,kSize:Qk}=$(),Rr=Symbol("pool"),pc=class{constructor(e){this[Rr]=e}get connected(){return this[Rr][lk]}get free(){return this[Rr][gk]}get pending(){return this[Rr][uk]}get queued(){return this[Rr][Ek]}get running(){return this[Rr][hk]}get size(){return this[Rr][Qk]}};vQ.exports=pc});var Tc=B((WJ,zQ)=>{"use strict";var Bk=eA(),Ik=fc(),{kConnected:mc,kSize:OQ,kRunning:YQ,kPending:_Q,kQueued:ps,kBusy:Ck,kFree:dk,kUrl:fk,kClose:pk,kDestroy:mk,kDispatch:wk}=$(),yk=xQ(),ke=Symbol("clients"),me=Symbol("needDrain"),ms=Symbol("queue"),wc=Symbol("closed resolve"),yc=Symbol("onDrain"),JQ=Symbol("onConnect"),PQ=Symbol("onDisconnect"),HQ=Symbol("onConnectionError"),Rc=Symbol("get dispatcher"),qQ=Symbol("add client"),WQ=Symbol("remove client"),VQ=Symbol("stats"),Dc=class extends Bk{constructor(e){super(e),this[ms]=new Ik,this[ke]=[],this[ps]=0;let r=this;this[yc]=function(s,o){let n=r[ms],i=!1;for(;!i;){let a=n.shift();if(!a)break;r[ps]--,i=!this.dispatch(a.opts,a.handler)}this[me]=i,!this[me]&&r[me]&&(r[me]=!1,r.emit("drain",s,[r,...o])),r[wc]&&n.isEmpty()&&Promise.all(r[ke].map(a=>a.close())).then(r[wc])},this[JQ]=(A,s)=>{r.emit("connect",A,[r,...s])},this[PQ]=(A,s,o)=>{r.emit("disconnect",A,[r,...s],o)},this[HQ]=(A,s,o)=>{r.emit("connectionError",A,[r,...s],o)},this[VQ]=new yk(this)}get[Ck](){return this[me]}get[mc](){return this[ke].filter(e=>e[mc]).length}get[dk](){return this[ke].filter(e=>e[mc]&&!e[me]).length}get[_Q](){let e=this[ps];for(let{[_Q]:r}of this[ke])e+=r;return e}get[YQ](){let e=0;for(let{[YQ]:r}of this[ke])e+=r;return e}get[OQ](){let e=this[ps];for(let{[OQ]:r}of this[ke])e+=r;return e}get stats(){return this[VQ]}async[pk](){this[ms].isEmpty()?await Promise.all(this[ke].map(e=>e.close())):await new Promise(e=>{this[wc]=e})}async[mk](e){for(;;){let r=this[ms].shift();if(!r)break;r.handler.onError(e)}await Promise.all(this[ke].map(r=>r.destroy(e)))}[wk](e,r){let A=this[Rc]();return A?A.dispatch(e,r)||(A[me]=!0,this[me]=!this[Rc]()):(this[me]=!0,this[ms].push({opts:e,handler:r}),this[ps]++),!this[me]}[qQ](e){return e.on("drain",this[yc]).on("connect",this[JQ]).on("disconnect",this[PQ]).on("connectionError",this[HQ]),this[ke].push(e),this[me]&&queueMicrotask(()=>{this[me]&&this[yc](e[fk],[this,e])}),this}[WQ](e){e.close(()=>{let r=this[ke].indexOf(e);r!==-1&&this[ke].splice(r,1)}),this[me]=this[ke].some(r=>!r[me]&&r.closed!==!0&&r.destroyed!==!0)}};zQ.exports={PoolBase:Dc,kClients:ke,kNeedDrain:me,kAddClient:qQ,kRemoveClient:WQ,kGetDispatcher:Rc}});var IA=B((zJ,XQ)=>{"use strict";var{PoolBase:Rk,kClients:rn,kNeedDrain:Dk,kAddClient:Tk,kGetDispatcher:bk}=Tc(),kk=BA(),{InvalidArgumentError:bc}=Y(),ZQ=M(),{kUrl:jQ,kInterceptors:Fk}=$(),Sk=ts(),kc=Symbol("options"),Fc=Symbol("connections"),KQ=Symbol("factory");function Nk(t,e){return new kk(t,e)}var Sc=class extends Rk{constructor(e,{connections:r,factory:A=Nk,connect:s,connectTimeout:o,tls:n,maxCachedSessions:i,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g,allowH2:l,...u}={}){if(r!=null&&(!Number.isFinite(r)||r<0))throw new bc("invalid connections");if(typeof A!="function")throw new bc("factory must be a function.");if(s!=null&&typeof s!="function"&&typeof s!="object")throw new bc("connect must be a function or an object");typeof s!="function"&&(s=Sk({...n,maxCachedSessions:i,allowH2:l,socketPath:a,timeout:o,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g}:void 0,...s})),super(u),this[Fk]=u.interceptors?.Pool&&Array.isArray(u.interceptors.Pool)?u.interceptors.Pool:[],this[Fc]=r||null,this[jQ]=ZQ.parseOrigin(e),this[kc]={...ZQ.deepClone(u),connect:s,allowH2:l},this[kc].interceptors=u.interceptors?{...u.interceptors}:void 0,this[KQ]=A,this.on("connectionError",(E,h,C)=>{for(let I of h){let Q=this[rn].indexOf(I);Q!==-1&&this[rn].splice(Q,1)}})}[bk](){for(let e of this[rn])if(!e[Dk])return e;if(!this[Fc]||this[rn].length{"use strict";var{BalancedPoolMissingUpstreamError:Uk,InvalidArgumentError:Gk}=Y(),{PoolBase:Lk,kClients:Ce,kNeedDrain:ws,kAddClient:Mk,kRemoveClient:vk,kGetDispatcher:xk}=Tc(),Ok=IA(),{kUrl:Nc,kInterceptors:Yk}=$(),{parseOrigin:$Q}=M(),eB=Symbol("factory"),An=Symbol("options"),tB=Symbol("kGreatestCommonDivisor"),Dr=Symbol("kCurrentWeight"),Tr=Symbol("kIndex"),We=Symbol("kWeight"),sn=Symbol("kMaxWeightPerServer"),on=Symbol("kErrorPenalty");function _k(t,e){if(t===0)return e;for(;e!==0;){let r=e;e=t%e,t=r}return t}function Jk(t,e){return new Ok(t,e)}var Uc=class extends Lk{constructor(e=[],{factory:r=Jk,...A}={}){if(super(),this[An]=A,this[Tr]=-1,this[Dr]=0,this[sn]=this[An].maxWeightPerServer||100,this[on]=this[An].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof r!="function")throw new Gk("factory must be a function.");this[Yk]=A.interceptors?.BalancedPool&&Array.isArray(A.interceptors.BalancedPool)?A.interceptors.BalancedPool:[],this[eB]=r;for(let s of e)this.addUpstream(s);this._updateBalancedPoolStats()}addUpstream(e){let r=$Q(e).origin;if(this[Ce].find(s=>s[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0))return this;let A=this[eB](r,Object.assign({},this[An]));this[Mk](A),A.on("connect",()=>{A[We]=Math.min(this[sn],A[We]+this[on])}),A.on("connectionError",()=>{A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats()}),A.on("disconnect",(...s)=>{let o=s[2];o&&o.code==="UND_ERR_SOCKET"&&(A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats())});for(let s of this[Ce])s[We]=this[sn];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let r=0;rs[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0);return A&&this[vk](A),this}get upstreams(){return this[Ce].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[Nc].origin)}[xk](){if(this[Ce].length===0)throw new Uk;if(!this[Ce].find(o=>!o[ws]&&o.closed!==!0&&o.destroyed!==!0)||this[Ce].map(o=>o[ws]).reduce((o,n)=>o&&n,!0))return;let A=0,s=this[Ce].findIndex(o=>!o[ws]);for(;A++this[Ce][s][We]&&!o[ws]&&(s=this[Tr]),this[Tr]===0&&(this[Dr]=this[Dr]-this[tB],this[Dr]<=0&&(this[Dr]=this[sn])),o[We]>=this[Dr]&&!o[ws])return o}return this[Dr]=this[Ce][s][We],this[Tr]=s,this[Ce][s]}};rB.exports=Uc});var CA=B((jJ,gB)=>{"use strict";var{InvalidArgumentError:nn}=Y(),{kClients:jt,kRunning:sB,kClose:Pk,kDestroy:Hk,kDispatch:Vk,kInterceptors:qk}=$(),Wk=eA(),zk=IA(),Zk=BA(),jk=M(),Kk=$o(),oB=Symbol("onConnect"),nB=Symbol("onDisconnect"),iB=Symbol("onConnectionError"),Xk=Symbol("maxRedirections"),aB=Symbol("onDrain"),cB=Symbol("factory"),Gc=Symbol("options");function $k(t,e){return e&&e.connections===1?new Zk(t,e):new zk(t,e)}var Lc=class extends Wk{constructor({factory:e=$k,maxRedirections:r=0,connect:A,...s}={}){if(typeof e!="function")throw new nn("factory must be a function.");if(A!=null&&typeof A!="function"&&typeof A!="object")throw new nn("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new nn("maxRedirections must be a positive number");super(s),A&&typeof A!="function"&&(A={...A}),this[qk]=s.interceptors?.Agent&&Array.isArray(s.interceptors.Agent)?s.interceptors.Agent:[Kk({maxRedirections:r})],this[Gc]={...jk.deepClone(s),connect:A},this[Gc].interceptors=s.interceptors?{...s.interceptors}:void 0,this[Xk]=r,this[cB]=e,this[jt]=new Map,this[aB]=(o,n)=>{this.emit("drain",o,[this,...n])},this[oB]=(o,n)=>{this.emit("connect",o,[this,...n])},this[nB]=(o,n,i)=>{this.emit("disconnect",o,[this,...n],i)},this[iB]=(o,n,i)=>{this.emit("connectionError",o,[this,...n],i)}}get[sB](){let e=0;for(let r of this[jt].values())e+=r[sB];return e}[Vk](e,r){let A;if(e.origin&&(typeof e.origin=="string"||e.origin instanceof URL))A=String(e.origin);else throw new nn("opts.origin must be a non-empty string or URL.");let s=this[jt].get(A);return s||(s=this[cB](e.origin,this[Gc]).on("drain",this[aB]).on("connect",this[oB]).on("disconnect",this[nB]).on("connectionError",this[iB]),this[jt].set(A,s)),s.dispatch(e,r)}async[Pk](){let e=[];for(let r of this[jt].values())e.push(r.close());this[jt].clear(),await Promise.all(e)}async[Hk](e){let r=[];for(let A of this[jt].values())r.push(A.destroy(e));this[jt].clear(),await Promise.all(r)}};gB.exports=Lc});var Yc=B((KJ,pB)=>{"use strict";var{kProxy:Mc,kClose:BB,kDestroy:IB,kDispatch:lB,kInterceptors:eF}=$(),{URL:br}=require("node:url"),tF=CA(),CB=IA(),dB=eA(),{InvalidArgumentError:dA,RequestAbortedError:rF,SecureProxyConnectionError:AF}=Y(),uB=ts(),fB=BA(),an=Symbol("proxy agent"),cn=Symbol("proxy client"),Kt=Symbol("proxy headers"),vc=Symbol("request tls settings"),EB=Symbol("proxy tls settings"),hB=Symbol("connect endpoint function"),QB=Symbol("tunnel proxy");function sF(t){return t==="https:"?443:80}function oF(t,e){return new CB(t,e)}var nF=()=>{};function iF(t,e){return e.connections===1?new fB(t,e):new CB(t,e)}var xc=class extends dB{#e;constructor(e,{headers:r={},connect:A,factory:s}){if(super(),!e)throw new dA("Proxy URL is mandatory");this[Kt]=r,s?this.#e=s(e,{connect:A}):this.#e=new fB(e,{connect:A})}[lB](e,r){let A=r.onHeaders;r.onHeaders=function(i,a,c){if(i===407){typeof r.onError=="function"&&r.onError(new dA("Proxy Authentication Required (407)"));return}A&&A.call(this,i,a,c)};let{origin:s,path:o="/",headers:n={}}=e;if(e.path=s+o,!("host"in n)&&!("Host"in n)){let{host:i}=new br(s);n.host=i}return e.headers={...this[Kt],...n},this.#e[lB](e,r)}async[BB](){return this.#e.close()}async[IB](e){return this.#e.destroy(e)}},Oc=class extends dB{constructor(e){if(super(),!e||typeof e=="object"&&!(e instanceof br)&&!e.uri)throw new dA("Proxy uri is mandatory");let{clientFactory:r=oF}=e;if(typeof r!="function")throw new dA("Proxy opts.clientFactory must be a function.");let{proxyTunnel:A=!0}=e,s=this.#e(e),{href:o,origin:n,port:i,protocol:a,username:c,password:g,hostname:l}=s;if(this[Mc]={uri:o,protocol:a},this[eF]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[vc]=e.requestTls,this[EB]=e.proxyTls,this[Kt]=e.headers||{},this[QB]=A,e.auth&&e.token)throw new dA("opts.auth cannot be used in combination with opts.token");e.auth?this[Kt]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Kt]["proxy-authorization"]=e.token:c&&g&&(this[Kt]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(g)}`).toString("base64")}`);let u=uB({...e.proxyTls});this[hB]=uB({...e.requestTls});let E=e.factory||iF,h=(C,I)=>{let{protocol:Q}=new br(C);return!this[QB]&&Q==="http:"&&this[Mc].protocol==="http:"?new xc(this[Mc].uri,{headers:this[Kt],connect:u,factory:E}):E(C,I)};this[cn]=r(s,{connect:u}),this[an]=new tF({...e,factory:h,connect:async(C,I)=>{let Q=C.host;C.port||(Q+=`:${sF(C.protocol)}`);try{let{socket:f,statusCode:R}=await this[cn].connect({origin:n,port:i,path:Q,signal:C.signal,headers:{...this[Kt],host:C.host},servername:this[EB]?.servername||l});if(R!==200&&(f.on("error",nF).destroy(),I(new rF(`Proxy response (${R}) !== 200 when HTTP Tunneling`))),C.protocol!=="https:"){I(null,f);return}let y;this[vc]?y=this[vc].servername:y=C.servername,this[hB]({...C,servername:y,httpSocket:f},I)}catch(f){f.code==="ERR_TLS_CERT_ALTNAME_INVALID"?I(new AF(f)):I(f)}}})}dispatch(e,r){let A=aF(e.headers);if(cF(A),A&&!("host"in A)&&!("Host"in A)){let{host:s}=new br(e.origin);A.host=s}return this[an].dispatch({...e,headers:A},r)}#e(e){return typeof e=="string"?new br(e):e instanceof br?e:new br(e.uri)}async[BB](){await this[an].close(),await this[cn].close()}async[IB](){await this[an].destroy(),await this[cn].destroy()}};function aF(t){if(Array.isArray(t)){let e={};for(let r=0;rr.toLowerCase()==="proxy-authorization"))throw new dA("Proxy-Authorization should be sent in ProxyAgent constructor")}pB.exports=Oc});var TB=B((XJ,DB)=>{"use strict";var gF=eA(),{kClose:lF,kDestroy:uF,kClosed:mB,kDestroyed:wB,kDispatch:EF,kNoProxyAgent:ys,kHttpProxyAgent:Xt,kHttpsProxyAgent:kr}=$(),yB=Yc(),hF=CA(),QF={"http:":80,"https:":443},RB=!1,_c=class extends gF{#e=null;#t=null;#r=null;constructor(e={}){super(),this.#r=e,RB||(RB=!0,process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"}));let{httpProxy:r,httpsProxy:A,noProxy:s,...o}=e;this[ys]=new hF(o);let n=r??process.env.http_proxy??process.env.HTTP_PROXY;n?this[Xt]=new yB({...o,uri:n}):this[Xt]=this[ys];let i=A??process.env.https_proxy??process.env.HTTPS_PROXY;i?this[kr]=new yB({...o,uri:i}):this[kr]=this[Xt],this.#A()}[EF](e,r){let A=new URL(e.origin);return this.#o(A).dispatch(e,r)}async[lF](){await this[ys].close(),this[Xt][mB]||await this[Xt].close(),this[kr][mB]||await this[kr].close()}async[uF](e){await this[ys].destroy(e),this[Xt][wB]||await this[Xt].destroy(e),this[kr][wB]||await this[kr].destroy(e)}#o(e){let{protocol:r,host:A,port:s}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),s=Number.parseInt(s,10)||QF[r]||0,this.#s(A,s)?r==="https:"?this[kr]:this[Xt]:this[ys]}#s(e,r){if(this.#n&&this.#A(),this.#t.length===0)return!0;if(this.#e==="*")return!1;for(let A=0;A{"use strict";var fA=require("node:assert"),{kRetryHandlerDefaultRetry:bB}=$(),{RequestRetryError:pA}=Y(),{isDisturbed:kB,parseHeaders:BF,parseRangeHeader:FB,wrapRequestBody:IF}=M();function CF(t){let e=Date.now();return new Date(t).getTime()-e}function SB(t,e,r,A){let s=t["content-length"];if(s==null||!Number.isFinite(e.start)||!Number.isFinite(e.end))return null;let o=Number(s),n=e.end-e.start+1;return!Number.isFinite(o)||o!==n?new pA("Content-Length mismatch",r,{headers:t,data:{count:A}}):null}var Jc=class t{constructor(e,r){let{retryOptions:A,...s}=e,{retry:o,maxRetries:n,maxTimeout:i,minTimeout:a,timeoutFactor:c,methods:g,errorCodes:l,retryAfter:u,statusCodes:E}=A??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...s,body:IF(e.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??t[bB],retryAfter:u??!0,maxTimeout:i??30*1e3,minTimeout:a??500,timeoutFactor:c??2,maxRetries:n??5,methods:g??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:E??[500,502,503,504,429],errorCodes:l??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect(h=>{this.aborted=!0,this.abort?this.abort(h):this.reason=h})}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,r,A){this.handler.onUpgrade&&this.handler.onUpgrade(e,r,A)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[bB](e,{state:r,opts:A},s){let{statusCode:o,code:n,headers:i}=e,{method:a,retryOptions:c}=A,{maxRetries:g,minTimeout:l,maxTimeout:u,timeoutFactor:E,statusCodes:h,errorCodes:C,methods:I}=c,{counter:Q}=r;if(n&&n!=="UND_ERR_REQ_RETRY"&&!C.includes(n)){s(e);return}if(Array.isArray(I)&&!I.includes(a)){s(e);return}if(o!=null&&Array.isArray(h)&&!h.includes(o)){s(e);return}if(Q>g){s(e);return}let f=i?.["retry-after"];f&&(f=Number(f),f=Number.isNaN(f)?CF(f):f*1e3);let R=f>0?Math.min(f,u):Math.min(l*E**(Q-1),u);setTimeout(()=>s(null),R)}onHeaders(e,r,A,s){let o=BF(r);if(this.retryCount+=1,e>=300)return this.retryOpts.statusCodes.includes(e)===!1?this.handler.onHeaders(e,r,A,s):(this.abort(new pA("Request failed",e,{headers:o,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new pA("server does not support the range header and the payload was partially consumed",e,{headers:o,data:{count:this.retryCount}})),!1;let i=FB(o["content-range"]);if(!i)return this.abort(new pA("Content-Range mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==o.etag)return this.abort(new pA("ETag mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;return fA(this.start===c,"content-range mismatch"),fA(this.end==null||this.end===l,"content-range mismatch"),this.resume=A,!0}if(this.end==null){if(e===206){let i=FB(o["content-range"]);if(i==null)return this.handler.onHeaders(e,r,A,s);let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;fA(c!=null&&Number.isFinite(c),"content-range mismatch"),fA(l!=null&&Number.isFinite(l),"invalid content-length"),this.start=c,this.end=l}if(this.end==null){let i=o["content-length"];this.end=i!=null?Number(i)-1:null}return fA(Number.isFinite(this.start)),fA(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=A,this.etag=o.etag!=null?o.etag:null,this.etag!=null&&this.etag.startsWith("W/")&&(this.etag=null),this.handler.onHeaders(e,r,A,s)}let n=new pA("Request failed",e,{headers:o,data:{count:this.retryCount}});return this.abort(n),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||kB(this.opts.body))return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},r.bind(this));function r(A){if(A!=null||this.aborted||kB(this.opts.body))return this.handler.onError(A);if(this.start!==0){let s={range:`bytes=${this.start}-${this.end??""}`};this.etag!=null&&(s["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...s}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(s){this.handler.onError(s)}}}};NB.exports=Jc});var GB=B((eP,UB)=>{"use strict";var dF=$A(),fF=gn(),Pc=class extends dF{#e=null;#t=null;constructor(e,r={}){super(r),this.#e=e,this.#t=r}dispatch(e,r){let A=new fF({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:r});return this.#e.dispatch(e,A)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}};UB.exports=Pc});var Zc=B((tP,PB)=>{"use strict";var OB=require("node:assert"),{Readable:pF}=require("node:stream"),{RequestAbortedError:YB,NotSupportedError:mF,InvalidArgumentError:wF,AbortError:Hc}=Y(),_B=M(),{ReadableStreamFrom:yF}=M(),Me=Symbol("kConsume"),Rs=Symbol("kReading"),$t=Symbol("kBody"),LB=Symbol("kAbort"),JB=Symbol("kContentType"),MB=Symbol("kContentLength"),RF=()=>{},Vc=class extends pF{constructor({resume:e,abort:r,contentType:A="",contentLength:s,highWaterMark:o=64*1024}){super({autoDestroy:!0,read:e,highWaterMark:o}),this._readableState.dataEmitted=!1,this[LB]=r,this[Me]=null,this[$t]=null,this[JB]=A,this[MB]=s,this[Rs]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new YB),e&&this[LB](),super.destroy(e)}_destroy(e,r){this[Rs]?r(e):setImmediate(()=>{r(e)})}on(e,...r){return(e==="data"||e==="readable")&&(this[Rs]=!0),super.on(e,...r)}addListener(e,...r){return this.on(e,...r)}off(e,...r){let A=super.off(e,...r);return(e==="data"||e==="readable")&&(this[Rs]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,...r){return this.off(e,...r)}push(e){return this[Me]&&e!==null?(Wc(this[Me],e),this[Rs]?super.push(e):!0):super.push(e)}async text(){return Ds(this,"text")}async json(){return Ds(this,"json")}async blob(){return Ds(this,"blob")}async bytes(){return Ds(this,"bytes")}async arrayBuffer(){return Ds(this,"arrayBuffer")}async formData(){throw new mF}get bodyUsed(){return _B.isDisturbed(this)}get body(){return this[$t]||(this[$t]=yF(this),this[Me]&&(this[$t].getReader(),OB(this[$t].locked))),this[$t]}async dump(e){let r=Number.isFinite(e?.limit)?e.limit:131072,A=e?.signal;if(A!=null&&(typeof A!="object"||!("aborted"in A)))throw new wF("signal must be an AbortSignal");return A?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((s,o)=>{this[MB]>r&&this.destroy(new Hc);let n=()=>{this.destroy(A.reason??new Hc)};A?.addEventListener("abort",n),this.on("close",function(){A?.removeEventListener("abort",n),A?.aborted?o(A.reason??new Hc):s(null)}).on("error",RF).on("data",function(i){r-=i.length,r<=0&&this.destroy()}).resume()})}};function DF(t){return t[$t]&&t[$t].locked===!0||t[Me]}function TF(t){return _B.isDisturbed(t)||DF(t)}async function Ds(t,e){return OB(!t[Me]),new Promise((r,A)=>{if(TF(t)){let s=t._readableState;s.destroyed&&s.closeEmitted===!1?t.on("error",o=>{A(o)}).on("close",()=>{A(new TypeError("unusable"))}):A(s.errored??new TypeError("unusable"))}else queueMicrotask(()=>{t[Me]={type:e,stream:t,resolve:r,reject:A,length:0,body:[]},t.on("error",function(s){zc(this[Me],s)}).on("close",function(){this[Me].body!==null&&zc(this[Me],new YB)}),bF(t[Me])})})}function bF(t){if(t.body===null)return;let{_readableState:e}=t.stream;if(e.bufferIndex){let r=e.bufferIndex,A=e.buffer.length;for(let s=r;s2&&r[0]===239&&r[1]===187&&r[2]===191?3:0;return r.utf8Slice(s,A)}function vB(t,e){if(t.length===0||e===0)return new Uint8Array(0);if(t.length===1)return new Uint8Array(t[0]);let r=new Uint8Array(Buffer.allocUnsafeSlow(e).buffer),A=0;for(let s=0;s{var kF=require("node:assert"),{ResponseStatusCodeError:HB}=Y(),{chunksDecode:VB}=Zc(),FF=128*1024;async function SF({callback:t,body:e,contentType:r,statusCode:A,statusMessage:s,headers:o}){kF(e);let n=[],i=0;try{for await(let l of e)if(n.push(l),i+=l.length,i>FF){n=[],i=0;break}}catch{n=[],i=0}let a=`Response status code ${A}${s?`: ${s}`:""}`;if(A===204||!r||!i){queueMicrotask(()=>t(new HB(a,A,o)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let g;try{qB(r)?g=JSON.parse(VB(n,i)):WB(r)&&(g=VB(n,i))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>t(new HB(a,A,o,g)))}var qB=t=>t.length>15&&t[11]==="/"&&t[0]==="a"&&t[1]==="p"&&t[2]==="p"&&t[3]==="l"&&t[4]==="i"&&t[5]==="c"&&t[6]==="a"&&t[7]==="t"&&t[8]==="i"&&t[9]==="o"&&t[10]==="n"&&t[12]==="j"&&t[13]==="s"&&t[14]==="o"&&t[15]==="n",WB=t=>t.length>4&&t[4]==="/"&&t[0]==="t"&&t[1]==="e"&&t[2]==="x"&&t[3]==="t";zB.exports={getResolveErrorBodyCallback:SF,isContentTypeApplicationJson:qB,isContentTypeText:WB}});var KB=B((AP,Kc)=>{"use strict";var NF=require("node:assert"),{Readable:UF}=Zc(),{InvalidArgumentError:mA,RequestAbortedError:ZB}=Y(),ve=M(),{getResolveErrorBodyCallback:GF}=jc(),{AsyncResource:LF}=require("node:async_hooks"),ln=class extends LF{constructor(e,r){if(!e||typeof e!="object")throw new mA("invalid opts");let{signal:A,method:s,opaque:o,body:n,onInfo:i,responseHeaders:a,throwOnError:c,highWaterMark:g}=e;try{if(typeof r!="function")throw new mA("invalid callback");if(g&&(typeof g!="number"||g<0))throw new mA("invalid highWaterMark");if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new mA("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new mA("invalid method");if(i&&typeof i!="function")throw new mA("invalid onInfo callback");super("UNDICI_REQUEST")}catch(l){throw ve.isStream(n)&&ve.destroy(n.on("error",ve.nop),l),l}this.method=s,this.responseHeaders=a||null,this.opaque=o||null,this.callback=r,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=i||null,this.throwOnError=c,this.highWaterMark=g,this.signal=A,this.reason=null,this.removeAbortListener=null,ve.isStream(n)&&n.on("error",l=>{this.onError(l)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new ZB:this.removeAbortListener=ve.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new ZB,this.res?ve.destroy(this.res.on("error",ve.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&(this.res?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}))}onConnect(e,r){if(this.reason){e(this.reason);return}NF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{callback:o,opaque:n,abort:i,context:a,responseHeaders:c,highWaterMark:g}=this,l=c==="raw"?ve.parseRawHeaders(r):ve.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:l});return}let u=c==="raw"?ve.parseHeaders(r):l,E=u["content-type"],h=u["content-length"],C=new UF({resume:A,abort:i,contentType:E,contentLength:this.method!=="HEAD"&&h?Number(h):null,highWaterMark:g});this.removeAbortListener&&C.on("close",this.removeAbortListener),this.callback=null,this.res=C,o!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(GF,null,{callback:o,body:C,contentType:E,statusCode:e,statusMessage:s,headers:l}):this.runInAsyncScope(o,null,null,{statusCode:e,headers:l,trailers:this.trailers,opaque:n,body:C,context:a}))}onData(e){return this.res.push(e)}onComplete(e){ve.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:r,callback:A,body:s,opaque:o}=this;A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:o})})),r&&(this.res=null,queueMicrotask(()=>{ve.destroy(r,e)})),s&&(this.body=null,ve.destroy(s,e)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function jB(t,e){if(e===void 0)return new Promise((r,A)=>{jB.call(this,t,(s,o)=>s?A(s):r(o))});try{this.dispatch(t,new ln(t,e))}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}Kc.exports=jB;Kc.exports.RequestHandler=ln});var Ts=B((sP,eI)=>{var{addAbortListener:MF}=M(),{RequestAbortedError:vF}=Y(),wA=Symbol("kListener"),Ct=Symbol("kSignal");function XB(t){t.abort?t.abort(t[Ct]?.reason):t.reason=t[Ct]?.reason??new vF,$B(t)}function xF(t,e){if(t.reason=null,t[Ct]=null,t[wA]=null,!!e){if(e.aborted){XB(t);return}t[Ct]=e,t[wA]=()=>{XB(t)},MF(t[Ct],t[wA])}}function $B(t){t[Ct]&&("removeEventListener"in t[Ct]?t[Ct].removeEventListener("abort",t[wA]):t[Ct].removeListener("abort",t[wA]),t[Ct]=null,t[wA]=null)}eI.exports={addSignal:xF,removeSignal:$B}});var sI=B((oP,AI)=>{"use strict";var OF=require("node:assert"),{finished:YF,PassThrough:_F}=require("node:stream"),{InvalidArgumentError:yA,InvalidReturnValueError:JF}=Y(),nt=M(),{getResolveErrorBodyCallback:PF}=jc(),{AsyncResource:HF}=require("node:async_hooks"),{addSignal:VF,removeSignal:tI}=Ts(),Xc=class extends HF{constructor(e,r,A){if(!e||typeof e!="object")throw new yA("invalid opts");let{signal:s,method:o,opaque:n,body:i,onInfo:a,responseHeaders:c,throwOnError:g}=e;try{if(typeof A!="function")throw new yA("invalid callback");if(typeof r!="function")throw new yA("invalid factory");if(s&&typeof s.on!="function"&&typeof s.addEventListener!="function")throw new yA("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new yA("invalid method");if(a&&typeof a!="function")throw new yA("invalid onInfo callback");super("UNDICI_STREAM")}catch(l){throw nt.isStream(i)&&nt.destroy(i.on("error",nt.nop),l),l}this.responseHeaders=c||null,this.opaque=n||null,this.factory=r,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=i,this.onInfo=a||null,this.throwOnError=g||!1,nt.isStream(i)&&i.on("error",l=>{this.onError(l)}),VF(this,s)}onConnect(e,r){if(this.reason){e(this.reason);return}OF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{factory:o,opaque:n,context:i,callback:a,responseHeaders:c}=this,g=c==="raw"?nt.parseRawHeaders(r):nt.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:g});return}this.factory=null;let l;if(this.throwOnError&&e>=400){let h=(c==="raw"?nt.parseHeaders(r):g)["content-type"];l=new _F,this.callback=null,this.runInAsyncScope(PF,null,{callback:a,body:l,contentType:h,statusCode:e,statusMessage:s,headers:g})}else{if(o===null)return;if(l=this.runInAsyncScope(o,null,{statusCode:e,headers:g,opaque:n,context:i}),!l||typeof l.write!="function"||typeof l.end!="function"||typeof l.on!="function")throw new JF("expected Writable");YF(l,{readable:!1},E=>{let{callback:h,res:C,opaque:I,trailers:Q,abort:f}=this;this.res=null,(E||!C.readable)&&nt.destroy(C,E),this.callback=null,this.runInAsyncScope(h,null,E||null,{opaque:I,trailers:Q}),E&&f()})}return l.on("drain",A),this.res=l,(l.writableNeedDrain!==void 0?l.writableNeedDrain:l._writableState?.needDrain)!==!0}onData(e){let{res:r}=this;return r?r.write(e):!0}onComplete(e){let{res:r}=this;tI(this),r&&(this.trailers=nt.parseHeaders(e),r.end())}onError(e){let{res:r,callback:A,opaque:s,body:o}=this;tI(this),this.factory=null,r?(this.res=null,nt.destroy(r,e)):A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:s})})),o&&(this.body=null,nt.destroy(o,e))}};function rI(t,e,r){if(r===void 0)return new Promise((A,s)=>{rI.call(this,t,e,(o,n)=>o?s(o):A(n))});try{this.dispatch(t,new Xc(t,e,r))}catch(A){if(typeof r!="function")throw A;let s=t?.opaque;queueMicrotask(()=>r(A,{opaque:s}))}}AI.exports=rI});var aI=B((nP,iI)=>{"use strict";var{Readable:nI,Duplex:qF,PassThrough:WF}=require("node:stream"),{InvalidArgumentError:bs,InvalidReturnValueError:zF,RequestAbortedError:$c}=Y(),ze=M(),{AsyncResource:ZF}=require("node:async_hooks"),{addSignal:jF,removeSignal:KF}=Ts(),oI=require("node:assert"),RA=Symbol("resume"),eg=class extends nI{constructor(){super({autoDestroy:!0}),this[RA]=null}_read(){let{[RA]:e}=this;e&&(this[RA]=null,e())}_destroy(e,r){this._read(),r(e)}},tg=class extends nI{constructor(e){super({autoDestroy:!0}),this[RA]=e}_read(){this[RA]()}_destroy(e,r){!e&&!this._readableState.endEmitted&&(e=new $c),r(e)}},rg=class extends ZF{constructor(e,r){if(!e||typeof e!="object")throw new bs("invalid opts");if(typeof r!="function")throw new bs("invalid handler");let{signal:A,method:s,opaque:o,onInfo:n,responseHeaders:i}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new bs("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new bs("invalid method");if(n&&typeof n!="function")throw new bs("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=o||null,this.responseHeaders=i||null,this.handler=r,this.abort=null,this.context=null,this.onInfo=n||null,this.req=new eg().on("error",ze.nop),this.ret=new qF({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:a}=this;a?.resume&&a.resume()},write:(a,c,g)=>{let{req:l}=this;l.push(a,c)||l._readableState.destroyed?g():l[RA]=g},destroy:(a,c)=>{let{body:g,req:l,res:u,ret:E,abort:h}=this;!a&&!E._readableState.endEmitted&&(a=new $c),h&&a&&h(),ze.destroy(g,a),ze.destroy(l,a),ze.destroy(u,a),KF(this),c(a)}}).on("prefinish",()=>{let{req:a}=this;a.push(null)}),this.res=null,jF(this,A)}onConnect(e,r){let{ret:A,res:s}=this;if(this.reason){e(this.reason);return}oI(!s,"pipeline cannot be retried"),oI(!A.destroyed),this.abort=e,this.context=r}onHeaders(e,r,A){let{opaque:s,handler:o,context:n}=this;if(e<200){if(this.onInfo){let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);this.onInfo({statusCode:e,headers:a})}return}this.res=new tg(A);let i;try{this.handler=null;let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);i=this.runInAsyncScope(o,null,{statusCode:e,headers:a,opaque:s,body:this.res,context:n})}catch(a){throw this.res.on("error",ze.nop),a}if(!i||typeof i.on!="function")throw new zF("expected Readable");i.on("data",a=>{let{ret:c,body:g}=this;!c.push(a)&&g.pause&&g.pause()}).on("error",a=>{let{ret:c}=this;ze.destroy(c,a)}).on("end",()=>{let{ret:a}=this;a.push(null)}).on("close",()=>{let{ret:a}=this;a._readableState.ended||ze.destroy(a,new $c)}),this.body=i}onData(e){let{res:r}=this;return r.push(e)}onComplete(e){let{res:r}=this;r.push(null)}onError(e){let{ret:r}=this;this.handler=null,ze.destroy(r,e)}};function XF(t,e){try{let r=new rg(t,e);return this.dispatch({...t,body:r.req},r),r.ret}catch(r){return new WF().destroy(r)}}iI.exports=XF});var hI=B((iP,EI)=>{"use strict";var{InvalidArgumentError:Ag,SocketError:$F}=Y(),{AsyncResource:eS}=require("node:async_hooks"),cI=M(),{addSignal:tS,removeSignal:gI}=Ts(),lI=require("node:assert"),sg=class extends eS{constructor(e,r){if(!e||typeof e!="object")throw new Ag("invalid opts");if(typeof r!="function")throw new Ag("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new Ag("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=o||null,this.opaque=s||null,this.callback=r,this.abort=null,this.context=null,tS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}lI(this.callback),this.abort=e,this.context=null}onHeaders(){throw new $F("bad upgrade",null)}onUpgrade(e,r,A){lI(e===101);let{callback:s,opaque:o,context:n}=this;gI(this),this.callback=null;let i=this.responseHeaders==="raw"?cI.parseRawHeaders(r):cI.parseHeaders(r);this.runInAsyncScope(s,null,null,{headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;gI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function uI(t,e){if(e===void 0)return new Promise((r,A)=>{uI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new sg(t,e);this.dispatch({...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}EI.exports=uI});var dI=B((aP,CI)=>{"use strict";var rS=require("node:assert"),{AsyncResource:AS}=require("node:async_hooks"),{InvalidArgumentError:og,SocketError:sS}=Y(),QI=M(),{addSignal:oS,removeSignal:BI}=Ts(),ng=class extends AS{constructor(e,r){if(!e||typeof e!="object")throw new og("invalid opts");if(typeof r!="function")throw new og("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new og("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=s||null,this.responseHeaders=o||null,this.callback=r,this.abort=null,oS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}rS(this.callback),this.abort=e,this.context=r}onHeaders(){throw new sS("bad connect",null)}onUpgrade(e,r,A){let{callback:s,opaque:o,context:n}=this;BI(this),this.callback=null;let i=r;i!=null&&(i=this.responseHeaders==="raw"?QI.parseRawHeaders(r):QI.parseHeaders(r)),this.runInAsyncScope(s,null,null,{statusCode:e,headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;BI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function II(t,e){if(e===void 0)return new Promise((r,A)=>{II.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new ng(t,e);this.dispatch({...t,method:"CONNECT"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}CI.exports=II});var fI=B((cP,DA)=>{"use strict";DA.exports.request=KB();DA.exports.stream=sI();DA.exports.pipeline=aI();DA.exports.upgrade=hI();DA.exports.connect=dI()});var ag=B((gP,mI)=>{"use strict";var{UndiciError:nS}=Y(),pI=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),ig=class t extends nS{constructor(e){super(e),Error.captureStackTrace(this,t),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&e[pI]===!0}[pI]=!0};mI.exports={MockNotMatchedError:ig}});var TA=B((lP,wI)=>{"use strict";wI.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var ks=B((uP,GI)=>{"use strict";var{MockNotMatchedError:Fr}=ag(),{kDispatches:un,kMockAgent:iS,kOriginalDispatch:aS,kOrigin:cS,kGetNetConnect:gS}=TA(),{buildURL:lS}=M(),{STATUS_CODES:uS}=require("node:http"),{types:{isPromise:ES}}=require("node:util");function Gt(t,e){return typeof t=="string"?t===e:t instanceof RegExp?t.test(e):typeof t=="function"?t(e)===!0:!1}function RI(t){return Object.fromEntries(Object.entries(t).map(([e,r])=>[e.toLocaleLowerCase(),r]))}function DI(t,e){if(Array.isArray(t)){for(let r=0;r"u")return!0;if(typeof e!="object"||typeof t.headers!="object")return!1;for(let[r,A]of Object.entries(t.headers)){let s=DI(e,r);if(!Gt(A,s))return!1}return!0}function yI(t){if(typeof t!="string")return t;let e=t.split("?");if(e.length!==2)return t;let r=new URLSearchParams(e.pop());return r.sort(),[...e,r.toString()].join("?")}function hS(t,{path:e,method:r,body:A,headers:s}){let o=Gt(t.path,e),n=Gt(t.method,r),i=typeof t.body<"u"?Gt(t.body,A):!0,a=TI(t,s);return o&&n&&i&&a}function bI(t){return Buffer.isBuffer(t)||t instanceof Uint8Array||t instanceof ArrayBuffer?t:typeof t=="object"?JSON.stringify(t):t.toString()}function kI(t,e){let r=e.query?lS(e.path,e.query):e.path,A=typeof r=="string"?yI(r):r,s=t.filter(({consumed:o})=>!o).filter(({path:o})=>Gt(yI(o),A));if(s.length===0)throw new Fr(`Mock dispatch not matched for path '${A}'`);if(s=s.filter(({method:o})=>Gt(o,e.method)),s.length===0)throw new Fr(`Mock dispatch not matched for method '${e.method}' on path '${A}'`);if(s=s.filter(({body:o})=>typeof o<"u"?Gt(o,e.body):!0),s.length===0)throw new Fr(`Mock dispatch not matched for body '${e.body}' on path '${A}'`);if(s=s.filter(o=>TI(o,e.headers)),s.length===0){let o=typeof e.headers=="object"?JSON.stringify(e.headers):e.headers;throw new Fr(`Mock dispatch not matched for headers '${o}' on path '${A}'`)}return s[0]}function QS(t,e,r){let A={timesInvoked:0,times:1,persist:!1,consumed:!1},s=typeof r=="function"?{callback:r}:{...r},o={...A,...e,pending:!0,data:{error:null,...s}};return t.push(o),o}function cg(t,e){let r=t.findIndex(A=>A.consumed?hS(A,e):!1);r!==-1&&t.splice(r,1)}function FI(t){let{path:e,method:r,body:A,headers:s,query:o}=t;return{path:e,method:r,body:A,headers:s,query:o}}function gg(t){let e=Object.keys(t),r=[];for(let A=0;A=u,A.pending=l0?setTimeout(()=>{E(this[un])},c):E(this[un]);function E(C,I=o){let Q=Array.isArray(t.headers)?lg(t.headers):t.headers,f=typeof I=="function"?I({...t,headers:Q}):I;if(ES(f)){f.then(Z=>E(C,Z));return}let R=bI(f),y=gg(n),P=gg(i);e.onConnect?.(Z=>e.onError(Z),null),e.onHeaders?.(s,y,h,SI(s)),e.onData?.(Buffer.from(R)),e.onComplete?.(P),cg(C,r)}function h(){}return!0}function IS(){let t=this[iS],e=this[cS],r=this[aS];return function(s,o){if(t.isMockActive)try{NI.call(this,s,o)}catch(n){if(n instanceof Fr){let i=t[gS]();if(i===!1)throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect disabled)`);if(UI(i,e))r.call(this,s,o);else throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect is not enabled for this origin)`)}else throw n}else r.call(this,s,o)}}function UI(t,e){let r=new URL(e);return t===!0?!0:!!(Array.isArray(t)&&t.some(A=>Gt(A,r.host)))}function CS(t){if(t){let{agent:e,...r}=t;return r}}GI.exports={getResponseData:bI,getMockDispatch:kI,addMockDispatch:QS,deleteMockDispatch:cg,buildKey:FI,generateKeyValues:gg,matchValue:Gt,getResponse:BS,getStatusText:SI,mockDispatch:NI,buildMockDispatch:IS,checkNetConnect:UI,buildMockOptions:CS,getHeaderByName:DI,buildHeadersFromArray:lg}});var Cg=B((EP,Ig)=>{"use strict";var{getResponseData:dS,buildKey:fS,addMockDispatch:ug}=ks(),{kDispatches:En,kDispatchKey:hn,kDefaultHeaders:Eg,kDefaultTrailers:hg,kContentLength:Qg,kMockDispatch:Qn}=TA(),{InvalidArgumentError:dt}=Y(),{buildURL:pS}=M(),bA=class{constructor(e){this[Qn]=e}delay(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("waitInMs must be a valid integer > 0");return this[Qn].delay=e,this}persist(){return this[Qn].persist=!0,this}times(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("repeatTimes must be a valid integer > 0");return this[Qn].times=e,this}},Bg=class{constructor(e,r){if(typeof e!="object")throw new dt("opts must be an object");if(typeof e.path>"u")throw new dt("opts.path must be defined");if(typeof e.method>"u"&&(e.method="GET"),typeof e.path=="string")if(e.query)e.path=pS(e.path,e.query);else{let A=new URL(e.path,"data://");e.path=A.pathname+A.search}typeof e.method=="string"&&(e.method=e.method.toUpperCase()),this[hn]=fS(e),this[En]=r,this[Eg]={},this[hg]={},this[Qg]=!1}createMockScopeDispatchData({statusCode:e,data:r,responseOptions:A}){let s=dS(r),o=this[Qg]?{"content-length":s.length}:{},n={...this[Eg],...o,...A.headers},i={...this[hg],...A.trailers};return{statusCode:e,data:r,headers:n,trailers:i}}validateReplyParameters(e){if(typeof e.statusCode>"u")throw new dt("statusCode must be defined");if(typeof e.responseOptions!="object"||e.responseOptions===null)throw new dt("responseOptions must be an object")}reply(e){if(typeof e=="function"){let o=i=>{let a=e(i);if(typeof a!="object"||a===null)throw new dt("reply options callback must return an object");let c={data:"",responseOptions:{},...a};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},n=ug(this[En],this[hn],o);return new bA(n)}let r={statusCode:e,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(r);let A=this.createMockScopeDispatchData(r),s=ug(this[En],this[hn],A);return new bA(s)}replyWithError(e){if(typeof e>"u")throw new dt("error must be defined");let r=ug(this[En],this[hn],{error:e});return new bA(r)}defaultReplyHeaders(e){if(typeof e>"u")throw new dt("headers must be defined");return this[Eg]=e,this}defaultReplyTrailers(e){if(typeof e>"u")throw new dt("trailers must be defined");return this[hg]=e,this}replyContentLength(){return this[Qg]=!0,this}};Ig.exports.MockInterceptor=Bg;Ig.exports.MockScope=bA});var pg=B((hP,_I)=>{"use strict";var{promisify:mS}=require("node:util"),wS=BA(),{buildMockDispatch:yS}=ks(),{kDispatches:LI,kMockAgent:MI,kClose:vI,kOriginalClose:xI,kOrigin:OI,kOriginalDispatch:RS,kConnected:dg}=TA(),{MockInterceptor:DS}=Cg(),YI=$(),{InvalidArgumentError:TS}=Y(),fg=class extends wS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new TS("Argument opts.agent must implement Agent");this[MI]=r.agent,this[OI]=e,this[LI]=[],this[dg]=1,this[RS]=this.dispatch,this[xI]=this.close.bind(this),this.dispatch=yS.call(this),this.close=this[vI]}get[YI.kConnected](){return this[dg]}intercept(e){return new DS(e,this[LI])}async[vI](){await mS(this[xI])(),this[dg]=0,this[MI][YI.kClients].delete(this[OI])}};_I.exports=fg});var yg=B((QP,zI)=>{"use strict";var{promisify:bS}=require("node:util"),kS=IA(),{buildMockDispatch:FS}=ks(),{kDispatches:JI,kMockAgent:PI,kClose:HI,kOriginalClose:VI,kOrigin:qI,kOriginalDispatch:SS,kConnected:mg}=TA(),{MockInterceptor:NS}=Cg(),WI=$(),{InvalidArgumentError:US}=Y(),wg=class extends kS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new US("Argument opts.agent must implement Agent");this[PI]=r.agent,this[qI]=e,this[JI]=[],this[mg]=1,this[SS]=this.dispatch,this[VI]=this.close.bind(this),this.dispatch=FS.call(this),this.close=this[HI]}get[WI.kConnected](){return this[mg]}intercept(e){return new NS(e,this[JI])}async[HI](){await bS(this[VI])(),this[mg]=0,this[PI][WI.kClients].delete(this[qI])}};zI.exports=wg});var jI=B((IP,ZI)=>{"use strict";var GS={pronoun:"it",is:"is",was:"was",this:"this"},LS={pronoun:"they",is:"are",was:"were",this:"these"};ZI.exports=class{constructor(e,r){this.singular=e,this.plural=r}pluralize(e){let r=e===1,A=r?GS:LS,s=r?this.singular:this.plural;return{...A,count:e,noun:s}}}});var XI=B((dP,KI)=>{"use strict";var{Transform:MS}=require("node:stream"),{Console:vS}=require("node:console"),xS=process.versions.icu?"\u2705":"Y ",OS=process.versions.icu?"\u274C":"N ";KI.exports=class{constructor({disableColors:e}={}){this.transform=new MS({transform(r,A,s){s(null,r)}}),this.logger=new vS({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let r=e.map(({method:A,path:s,data:{statusCode:o},persist:n,times:i,timesInvoked:a,origin:c})=>({Method:A,Origin:c,Path:s,"Status code":o,Persistent:n?xS:OS,Invocations:a,Remaining:n?1/0:i-a}));return this.logger.table(r),this.transform.read().toString()}}});var rC=B((fP,tC)=>{"use strict";var{kClients:Sr}=$(),YS=CA(),{kAgent:Rg,kMockAgentSet:Bn,kMockAgentGet:$I,kDispatches:Dg,kIsMockActive:In,kNetConnect:Nr,kGetNetConnect:_S,kOptions:Cn,kFactory:dn}=TA(),JS=pg(),PS=yg(),{matchValue:HS,buildMockOptions:VS}=ks(),{InvalidArgumentError:eC,UndiciError:qS}=Y(),WS=$A(),zS=jI(),ZS=XI(),Tg=class extends WS{constructor(e){if(super(e),this[Nr]=!0,this[In]=!0,e?.agent&&typeof e.agent.dispatch!="function")throw new eC("Argument opts.agent must implement Agent");let r=e?.agent?e.agent:new YS(e);this[Rg]=r,this[Sr]=r[Sr],this[Cn]=VS(e)}get(e){let r=this[$I](e);return r||(r=this[dn](e),this[Bn](e,r)),r}dispatch(e,r){return this.get(e.origin),this[Rg].dispatch(e,r)}async close(){await this[Rg].close(),this[Sr].clear()}deactivate(){this[In]=!1}activate(){this[In]=!0}enableNetConnect(e){if(typeof e=="string"||typeof e=="function"||e instanceof RegExp)Array.isArray(this[Nr])?this[Nr].push(e):this[Nr]=[e];else if(typeof e>"u")this[Nr]=!0;else throw new eC("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[Nr]=!1}get isMockActive(){return this[In]}[Bn](e,r){this[Sr].set(e,r)}[dn](e){let r=Object.assign({agent:this},this[Cn]);return this[Cn]&&this[Cn].connections===1?new JS(e,r):new PS(e,r)}[$I](e){let r=this[Sr].get(e);if(r)return r;if(typeof e!="string"){let A=this[dn]("http://localhost:9999");return this[Bn](e,A),A}for(let[A,s]of Array.from(this[Sr]))if(s&&typeof A!="string"&&HS(A,e)){let o=this[dn](e);return this[Bn](e,o),o[Dg]=s[Dg],o}}[_S](){return this[Nr]}pendingInterceptors(){let e=this[Sr];return Array.from(e.entries()).flatMap(([r,A])=>A[Dg].map(s=>({...s,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new ZS}={}){let r=this.pendingInterceptors();if(r.length===0)return;let A=new zS("interceptor","interceptors").pluralize(r.length);throw new qS(` +${A.count} ${A.noun} ${A.is} pending: + +${e.format(r)} +`.trim())}};tC.exports=Tg});var fn=B((pP,nC)=>{"use strict";var AC=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:jS}=Y(),KS=CA();oC()===void 0&&sC(new KS);function sC(t){if(!t||typeof t.dispatch!="function")throw new jS("Argument agent must implement Agent");Object.defineProperty(globalThis,AC,{value:t,writable:!0,enumerable:!1,configurable:!1})}function oC(){return globalThis[AC]}nC.exports={setGlobalDispatcher:sC,getGlobalDispatcher:oC}});var pn=B((wP,iC)=>{"use strict";iC.exports=class{#e;constructor(e){if(typeof e!="object"||e===null)throw new TypeError("handler must be an object");this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}});var cC=B((yP,aC)=>{"use strict";var XS=Xo();aC.exports=t=>{let e=t?.maxRedirections;return r=>function(s,o){let{maxRedirections:n=e,...i}=s;if(!n)return r(s,o);let a=new XS(r,n,s,o);return r(i,a)}}});var lC=B((RP,gC)=>{"use strict";var $S=gn();gC.exports=t=>e=>function(A,s){return e(A,new $S({...A,retryOptions:{...t,...A.retryOptions}},{handler:s,dispatch:e}))}});var EC=B((DP,uC)=>{"use strict";var eN=M(),{InvalidArgumentError:tN,RequestAbortedError:rN}=Y(),AN=pn(),bg=class extends AN{#e=1024*1024;#t=null;#r=!1;#o=!1;#s=0;#A=null;#n=null;constructor({maxSize:e},r){if(super(r),e!=null&&(!Number.isFinite(e)||e<1))throw new tN("maxSize must be a number greater than 0");this.#e=e??this.#e,this.#n=r}onConnect(e){this.#t=e,this.#n.onConnect(this.#i.bind(this))}#i(e){this.#o=!0,this.#A=e}onHeaders(e,r,A,s){let n=eN.parseHeaders(r)["content-length"];if(n!=null&&n>this.#e)throw new rN(`Response size (${n}) larger than maxSize (${this.#e})`);return this.#o?!0:this.#n.onHeaders(e,r,A,s)}onError(e){this.#r||(e=this.#A??e,this.#n.onError(e))}onData(e){return this.#s=this.#s+e.length,this.#s>=this.#e&&(this.#r=!0,this.#o?this.#n.onError(this.#A):this.#n.onComplete([])),!0}onComplete(e){if(!this.#r){if(this.#o){this.#n.onError(this.reason);return}this.#n.onComplete(e)}}};function sN({maxSize:t}={maxSize:1024*1024}){return e=>function(A,s){let{dumpMaxSize:o=t}=A,n=new bg({maxSize:o},s);return e(A,n)}}uC.exports=sN});var BC=B((TP,QC)=>{"use strict";var{isIP:oN}=require("node:net"),{lookup:nN}=require("node:dns"),iN=pn(),{InvalidArgumentError:kA,InformationalError:aN}=Y(),hC=Math.pow(2,31)-1,kg=class{#e=0;#t=0;#r=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#o,this.pick=e.pick??this.#s}get full(){return this.#r.size===this.#t}runLookup(e,r,A){let s=this.#r.get(e.hostname);if(s==null&&this.full){A(null,e.origin);return}let o={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...r.dns,maxTTL:this.#e,maxItems:this.#t};if(s==null)this.lookup(e,o,(n,i)=>{if(n||i==null||i.length===0){A(n??new aN("No DNS entries found"));return}this.setRecords(e,i);let a=this.#r.get(e.hostname),c=this.pick(e,a,o.affinity),g;typeof c.port=="number"?g=`:${c.port}`:e.port!==""?g=`:${e.port}`:g="",A(null,`${e.protocol}//${c.family===6?`[${c.address}]`:c.address}${g}`)});else{let n=this.pick(e,s,o.affinity);if(n==null){this.#r.delete(e.hostname),this.runLookup(e,r,A);return}let i;typeof n.port=="number"?i=`:${n.port}`:e.port!==""?i=`:${e.port}`:i="",A(null,`${e.protocol}//${n.family===6?`[${n.address}]`:n.address}${i}`)}}#o(e,r,A){nN(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(s,o)=>{if(s)return A(s);let n=new Map;for(let i of o)n.set(`${i.address}:${i.family}`,i);A(null,n.values())})}#s(e,r,A){let s=null,{records:o,offset:n}=r,i;if(this.dualStack?(A==null&&(n==null||n===hC?(r.offset=0,A=4):(r.offset++,A=(r.offset&1)===1?6:4)),o[A]!=null&&o[A].ips.length>0?i=o[A]:i=o[A===4?6:4]):i=o[A],i==null||i.ips.length===0)return s;i.offset==null||i.offset===hC?i.offset=0:i.offset++;let a=i.offset%i.ips.length;return s=i.ips[a]??null,s==null?s:Date.now()-s.timestamp>s.ttl?(i.ips.splice(a,1),this.pick(e,r,A)):s}setRecords(e,r){let A=Date.now(),s={records:{4:null,6:null}};for(let o of r){o.timestamp=A,typeof o.ttl=="number"?o.ttl=Math.min(o.ttl,this.#e):o.ttl=this.#e;let n=s.records[o.family]??{ips:[]};n.ips.push(o),s.records[o.family]=n}this.#r.set(e.hostname,s)}getHandler(e,r){return new Fg(this,e,r)}},Fg=class extends iN{#e=null;#t=null;#r=null;#o=null;#s=null;constructor(e,{origin:r,handler:A,dispatch:s},o){super(A),this.#s=r,this.#o=A,this.#t={...o},this.#e=e,this.#r=s}onError(e){switch(e.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#s,this.#t,(r,A)=>{if(r)return this.#o.onError(r);let s={...this.#t,origin:A};this.#r(s,this)});return}this.#o.onError(e);return}case"ENOTFOUND":this.#e.deleteRecord(this.#s);default:this.#o.onError(e);break}}};QC.exports=t=>{if(t?.maxTTL!=null&&(typeof t?.maxTTL!="number"||t?.maxTTL<0))throw new kA("Invalid maxTTL. Must be a positive number");if(t?.maxItems!=null&&(typeof t?.maxItems!="number"||t?.maxItems<1))throw new kA("Invalid maxItems. Must be a positive number and greater than zero");if(t?.affinity!=null&&t?.affinity!==4&&t?.affinity!==6)throw new kA("Invalid affinity. Must be either 4 or 6");if(t?.dualStack!=null&&typeof t?.dualStack!="boolean")throw new kA("Invalid dualStack. Must be a boolean");if(t?.lookup!=null&&typeof t?.lookup!="function")throw new kA("Invalid lookup. Must be a function");if(t?.pick!=null&&typeof t?.pick!="function")throw new kA("Invalid pick. Must be a function");let e=t?.dualStack??!0,r;e?r=t?.affinity??null:r=t?.affinity??4;let A={maxTTL:t?.maxTTL??1e4,lookup:t?.lookup??null,pick:t?.pick??null,dualStack:e,affinity:r,maxItems:t?.maxItems??1/0},s=new kg(A);return o=>function(i,a){let c=i.origin.constructor===URL?i.origin:new URL(i.origin);return oN(c.hostname)!==0?o(i,a):(s.runLookup(c,i,(g,l)=>{if(g)return a.onError(g);let u=null;u={...i,servername:c.hostname,origin:l,headers:{host:c.hostname,...i.headers}},o(u,s.getHandler({origin:c,dispatch:o,handler:a},i))}),!0)}}});var Ur=B((bP,wC)=>{"use strict";var{kConstruct:cN}=$(),{kEnumerableProperty:FA}=M(),{iteratorMixin:gN,isValidHeaderName:Fs,isValidHeaderValue:CC}=Ge(),{webidl:O}=Qe(),Sg=require("node:assert"),mn=require("node:util"),ge=Symbol("headers map"),xe=Symbol("headers map sorted");function IC(t){return t===10||t===13||t===9||t===32}function dC(t){let e=0,r=t.length;for(;r>e&&IC(t.charCodeAt(r-1));)--r;for(;r>e&&IC(t.charCodeAt(e));)++e;return e===0&&r===t.length?t:t.substring(e,r)}function fC(t,e){if(Array.isArray(e))for(let r=0;r>","record"]})}function Ng(t,e,r){if(r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"});if(mC(t)==="immutable")throw new TypeError("immutable");return Ug(t).append(e,r,!1)}function pC(t,e){return t[0]>1),r[c][0]<=g[0]?a=c+1:i=c;if(o!==c){for(n=o;n>a;)r[n]=r[--n];r[a]=g}}if(!A.next().done)throw new TypeError("Unreachable");return r}else{let A=0;for(let{0:s,1:{value:o}}of this[ge])r[A++]=[s,o],Sg(o!==null);return r.sort(pC)}}},it=class t{#e;#t;constructor(e=void 0){O.util.markAsUncloneable(this),e!==cN&&(this.#t=new wn,this.#e="none",e!==void 0&&(e=O.converters.HeadersInit(e,"Headers contructor","init"),fC(this,e)))}append(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.append");let A="Headers.append";return e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),Ng(this,e,r)}delete(e){if(O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.delete"),e=O.converters.ByteString(e,"Headers.delete","name"),!Fs(e))throw O.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(e,!1)&&this.#t.delete(e,!1)}get(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.get(e,!1)}has(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.contains(e,!1)}set(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.set");let A="Headers.set";if(e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:A,value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(e,r,!1)}getSetCookie(){O.brandCheck(this,t);let e=this.#t.cookies;return e?[...e]:[]}get[xe](){if(this.#t[xe])return this.#t[xe];let e=[],r=this.#t.toSortedArray(),A=this.#t.cookies;if(A===null||A.length===1)return this.#t[xe]=r;for(let s=0;s>"](t,e,r,A.bind(t)):O.converters["record"](t,e,r)}throw O.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};wC.exports={fill:fC,compareHeaderName:pC,Headers:it,HeadersList:wn,getHeadersGuard:mC,setHeadersGuard:lN,setHeadersList:uN,getHeadersList:Ug}});var Ns=B((kP,LC)=>{"use strict";var{Headers:kC,HeadersList:yC,fill:EN,getHeadersGuard:hN,setHeadersGuard:FC,setHeadersList:SC}=Ur(),{extractBody:RC,cloneBody:QN,mixinBody:BN,hasFinalizationRegistry:NC,streamRegistry:UC,bodyUnusable:IN}=cA(),Gg=M(),DC=require("node:util"),{kEnumerableProperty:Oe}=Gg,{isValidReasonPhrase:CN,isCancelled:dN,isAborted:fN,isBlobLike:pN,serializeJavascriptValueToJSONString:mN,isErrorLike:wN,isomorphicEncode:yN,environmentSettingsObject:RN}=Ge(),{redirectStatusSet:DN,nullBodyStatus:TN}=rs(),{kState:te,kHeaders:Lt}=Pt(),{webidl:L}=Qe(),{FormData:bN}=as(),{URLSerializer:TC}=Te(),{kConstruct:Rn}=$(),Lg=require("node:assert"),{types:kN}=require("node:util"),FN=new TextEncoder("utf-8"),Gr=class t{static error(){return Ss(Dn(),"immutable")}static json(e,r={}){L.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=L.converters.ResponseInit(r));let A=FN.encode(mN(e)),s=RC(A),o=Ss(SA({}),"response");return bC(o,r,{body:s[0],type:"application/json"}),o}static redirect(e,r=302){L.argumentLengthCheck(arguments,1,"Response.redirect"),e=L.converters.USVString(e),r=L.converters["unsigned short"](r);let A;try{A=new URL(e,RN.settingsObject.baseUrl)}catch(n){throw new TypeError(`Failed to parse URL from ${e}`,{cause:n})}if(!DN.has(r))throw new RangeError(`Invalid status code ${r}`);let s=Ss(SA({}),"immutable");s[te].status=r;let o=yN(TC(A));return s[te].headersList.append("location",o,!0),s}constructor(e=null,r={}){if(L.util.markAsUncloneable(this),e===Rn)return;e!==null&&(e=L.converters.BodyInit(e)),r=L.converters.ResponseInit(r),this[te]=SA({}),this[Lt]=new kC(Rn),FC(this[Lt],"response"),SC(this[Lt],this[te].headersList);let A=null;if(e!=null){let[s,o]=RC(e);A={body:s,type:o}}bC(this,r,A)}get type(){return L.brandCheck(this,t),this[te].type}get url(){L.brandCheck(this,t);let e=this[te].urlList,r=e[e.length-1]??null;return r===null?"":TC(r,!0)}get redirected(){return L.brandCheck(this,t),this[te].urlList.length>1}get status(){return L.brandCheck(this,t),this[te].status}get ok(){return L.brandCheck(this,t),this[te].status>=200&&this[te].status<=299}get statusText(){return L.brandCheck(this,t),this[te].statusText}get headers(){return L.brandCheck(this,t),this[Lt]}get body(){return L.brandCheck(this,t),this[te].body?this[te].body.stream:null}get bodyUsed(){return L.brandCheck(this,t),!!this[te].body&&Gg.isDisturbed(this[te].body.stream)}clone(){if(L.brandCheck(this,t),IN(this))throw L.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let e=Mg(this[te]);return NC&&this[te].body?.stream&&UC.register(this,new WeakRef(this[te].body.stream)),Ss(e,hN(this[Lt]))}[DC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${DC.formatWithOptions(r,A)}`}};BN(Gr);Object.defineProperties(Gr.prototype,{type:Oe,url:Oe,status:Oe,ok:Oe,redirected:Oe,statusText:Oe,headers:Oe,clone:Oe,body:Oe,bodyUsed:Oe,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Gr,{json:Oe,redirect:Oe,error:Oe});function Mg(t){if(t.internalResponse)return GC(Mg(t.internalResponse),t.type);let e=SA({...t,body:null});return t.body!=null&&(e.body=QN(e,t.body)),e}function SA(t){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...t,headersList:t?.headersList?new yC(t?.headersList):new yC,urlList:t?.urlList?[...t.urlList]:[]}}function Dn(t){let e=wN(t);return SA({type:"error",status:0,error:e?t:new Error(t&&String(t)),aborted:t&&t.name==="AbortError"})}function SN(t){return t.type==="error"&&t.status===0}function yn(t,e){return e={internalResponse:t,...e},new Proxy(t,{get(r,A){return A in e?e[A]:r[A]},set(r,A,s){return Lg(!(A in e)),r[A]=s,!0}})}function GC(t,e){if(e==="basic")return yn(t,{type:"basic",headersList:t.headersList});if(e==="cors")return yn(t,{type:"cors",headersList:t.headersList});if(e==="opaque")return yn(t,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(e==="opaqueredirect")return yn(t,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});Lg(!1)}function NN(t,e=null){return Lg(dN(t)),fN(t)?Dn(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:e})):Dn(Object.assign(new DOMException("Request was cancelled."),{cause:e}))}function bC(t,e,r){if(e.status!==null&&(e.status<200||e.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in e&&e.statusText!=null&&!CN(String(e.statusText)))throw new TypeError("Invalid statusText");if("status"in e&&e.status!=null&&(t[te].status=e.status),"statusText"in e&&e.statusText!=null&&(t[te].statusText=e.statusText),"headers"in e&&e.headers!=null&&EN(t[Lt],e.headers),r){if(TN.includes(t.status))throw L.errors.exception({header:"Response constructor",message:`Invalid response status code ${t.status}`});t[te].body=r.body,r.type!=null&&!t[te].headersList.contains("content-type",!0)&&t[te].headersList.append("content-type",r.type,!0)}}function Ss(t,e){let r=new Gr(Rn);return r[te]=t,r[Lt]=new kC(Rn),SC(r[Lt],t.headersList),FC(r[Lt],e),NC&&t.body?.stream&&UC.register(r,new WeakRef(t.body.stream)),r}L.converters.ReadableStream=L.interfaceConverter(ReadableStream);L.converters.FormData=L.interfaceConverter(bN);L.converters.URLSearchParams=L.interfaceConverter(URLSearchParams);L.converters.XMLHttpRequestBodyInit=function(t,e,r){return typeof t=="string"?L.converters.USVString(t,e,r):pN(t)?L.converters.Blob(t,e,r,{strict:!1}):ArrayBuffer.isView(t)||kN.isArrayBuffer(t)?L.converters.BufferSource(t,e,r):Gg.isFormDataLike(t)?L.converters.FormData(t,e,r,{strict:!1}):t instanceof URLSearchParams?L.converters.URLSearchParams(t,e,r):L.converters.DOMString(t,e,r)};L.converters.BodyInit=function(t,e,r){return t instanceof ReadableStream?L.converters.ReadableStream(t,e,r):t?.[Symbol.asyncIterator]?t:L.converters.XMLHttpRequestBodyInit(t,e,r)};L.converters.ResponseInit=L.dictionaryConverter([{key:"status",converter:L.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:L.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:L.converters.HeadersInit}]);LC.exports={isNetworkError:SN,makeNetworkError:Dn,makeResponse:SA,makeAppropriateNetworkError:NN,filterResponse:GC,Response:Gr,cloneResponse:Mg,fromInnerResponse:Ss}});var OC=B((FP,xC)=>{"use strict";var{kConnected:MC,kSize:vC}=$(),vg=class{constructor(e){this.value=e}deref(){return this.value[MC]===0&&this.value[vC]===0?void 0:this.value}},xg=class{constructor(e){this.finalizer=e}register(e,r){e.on&&e.on("disconnect",()=>{e[MC]===0&&e[vC]===0&&this.finalizer(r)})}unregister(e){}};xC.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:vg,FinalizationRegistry:xg}):{WeakRef,FinalizationRegistry}}});var NA=B((SP,ed)=>{"use strict";var{extractBody:UN,mixinBody:GN,cloneBody:LN,bodyUnusable:YC}=cA(),{Headers:ZC,fill:MN,HeadersList:Fn,setHeadersGuard:Yg,getHeadersGuard:vN,setHeadersList:jC,getHeadersList:_C}=Ur(),{FinalizationRegistry:xN}=OC()(),bn=M(),JC=require("node:util"),{isValidHTTPToken:ON,sameOrigin:PC,environmentSettingsObject:Tn}=Ge(),{forbiddenMethodsSet:YN,corsSafeListedMethodsSet:_N,referrerPolicy:JN,requestRedirect:PN,requestMode:HN,requestCredentials:VN,requestCache:qN,requestDuplex:WN}=rs(),{kEnumerableProperty:le,normalizedMethodRecordsBase:zN,normalizedMethodRecords:ZN}=bn,{kHeaders:Ye,kSignal:kn,kState:K,kDispatcher:Og}=Pt(),{webidl:S}=Qe(),{URLSerializer:jN}=Te(),{kConstruct:Sn}=$(),KN=require("node:assert"),{getMaxListeners:HC,setMaxListeners:VC,getEventListeners:XN,defaultMaxListeners:qC}=require("node:events"),$N=Symbol("abortController"),KC=new xN(({signal:t,abort:e})=>{t.removeEventListener("abort",e)}),Nn=new WeakMap;function WC(t){return e;function e(){let r=t.deref();if(r!==void 0){KC.unregister(e),this.removeEventListener("abort",e),r.abort(this.reason);let A=Nn.get(r.signal);if(A!==void 0){if(A.size!==0){for(let s of A){let o=s.deref();o!==void 0&&o.abort(this.reason)}A.clear()}Nn.delete(r.signal)}}}}var zC=!1,er=class t{constructor(e,r={}){if(S.util.markAsUncloneable(this),e===Sn)return;let A="Request constructor";S.argumentLengthCheck(arguments,1,A),e=S.converters.RequestInfo(e,A,"input"),r=S.converters.RequestInit(r,A,"init");let s=null,o=null,n=Tn.settingsObject.baseUrl,i=null;if(typeof e=="string"){this[Og]=r.dispatcher;let Q;try{Q=new URL(e,n)}catch(f){throw new TypeError("Failed to parse URL from "+e,{cause:f})}if(Q.username||Q.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);s=Un({urlList:[Q]}),o="cors"}else this[Og]=r.dispatcher||e[Og],KN(e instanceof t),s=e[K],i=e[kn];let a=Tn.settingsObject.origin,c="client";if(s.window?.constructor?.name==="EnvironmentSettingsObject"&&PC(s.window,a)&&(c=s.window),r.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in r&&(c="no-window"),s=Un({method:s.method,headersList:s.headersList,unsafeRequest:s.unsafeRequest,client:Tn.settingsObject,window:c,priority:s.priority,origin:s.origin,referrer:s.referrer,referrerPolicy:s.referrerPolicy,mode:s.mode,credentials:s.credentials,cache:s.cache,redirect:s.redirect,integrity:s.integrity,keepalive:s.keepalive,reloadNavigation:s.reloadNavigation,historyNavigation:s.historyNavigation,urlList:[...s.urlList]});let g=Object.keys(r).length!==0;if(g&&(s.mode==="navigate"&&(s.mode="same-origin"),s.reloadNavigation=!1,s.historyNavigation=!1,s.origin="client",s.referrer="client",s.referrerPolicy="",s.url=s.urlList[s.urlList.length-1],s.urlList=[s.url]),r.referrer!==void 0){let Q=r.referrer;if(Q==="")s.referrer="no-referrer";else{let f;try{f=new URL(Q,n)}catch(R){throw new TypeError(`Referrer "${Q}" is not a valid URL.`,{cause:R})}f.protocol==="about:"&&f.hostname==="client"||a&&!PC(f,Tn.settingsObject.baseUrl)?s.referrer="client":s.referrer=f}}r.referrerPolicy!==void 0&&(s.referrerPolicy=r.referrerPolicy);let l;if(r.mode!==void 0?l=r.mode:l=o,l==="navigate")throw S.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(l!=null&&(s.mode=l),r.credentials!==void 0&&(s.credentials=r.credentials),r.cache!==void 0&&(s.cache=r.cache),s.cache==="only-if-cached"&&s.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(r.redirect!==void 0&&(s.redirect=r.redirect),r.integrity!=null&&(s.integrity=String(r.integrity)),r.keepalive!==void 0&&(s.keepalive=!!r.keepalive),r.method!==void 0){let Q=r.method,f=ZN[Q];if(f!==void 0)s.method=f;else{if(!ON(Q))throw new TypeError(`'${Q}' is not a valid HTTP method.`);let R=Q.toUpperCase();if(YN.has(R))throw new TypeError(`'${Q}' HTTP method is unsupported.`);Q=zN[R]??Q,s.method=Q}!zC&&s.method==="patch"&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),zC=!0)}r.signal!==void 0&&(i=r.signal),this[K]=s;let u=new AbortController;if(this[kn]=u.signal,i!=null){if(!i||typeof i.aborted!="boolean"||typeof i.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(i.aborted)u.abort(i.reason);else{this[$N]=u;let Q=new WeakRef(u),f=WC(Q);try{(typeof HC=="function"&&HC(i)===qC||XN(i,"abort").length>=qC)&&VC(1500,i)}catch{}bn.addAbortListener(i,f),KC.register(u,{signal:i,abort:f},f)}}if(this[Ye]=new ZC(Sn),jC(this[Ye],s.headersList),Yg(this[Ye],"request"),l==="no-cors"){if(!_N.has(s.method))throw new TypeError(`'${s.method} is unsupported in no-cors mode.`);Yg(this[Ye],"request-no-cors")}if(g){let Q=_C(this[Ye]),f=r.headers!==void 0?r.headers:new Fn(Q);if(Q.clear(),f instanceof Fn){for(let{name:R,value:y}of f.rawValues())Q.append(R,y,!1);Q.cookies=f.cookies}else MN(this[Ye],f)}let E=e instanceof t?e[K].body:null;if((r.body!=null||E!=null)&&(s.method==="GET"||s.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let h=null;if(r.body!=null){let[Q,f]=UN(r.body,s.keepalive);h=Q,f&&!_C(this[Ye]).contains("content-type",!0)&&this[Ye].append("content-type",f)}let C=h??E;if(C!=null&&C.source==null){if(h!=null&&r.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(s.mode!=="same-origin"&&s.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');s.useCORSPreflightFlag=!0}let I=C;if(h==null&&E!=null){if(YC(e))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let Q=new TransformStream;E.stream.pipeThrough(Q),I={source:E.source,length:E.length,stream:Q.readable}}this[K].body=I}get method(){return S.brandCheck(this,t),this[K].method}get url(){return S.brandCheck(this,t),jN(this[K].url)}get headers(){return S.brandCheck(this,t),this[Ye]}get destination(){return S.brandCheck(this,t),this[K].destination}get referrer(){return S.brandCheck(this,t),this[K].referrer==="no-referrer"?"":this[K].referrer==="client"?"about:client":this[K].referrer.toString()}get referrerPolicy(){return S.brandCheck(this,t),this[K].referrerPolicy}get mode(){return S.brandCheck(this,t),this[K].mode}get credentials(){return this[K].credentials}get cache(){return S.brandCheck(this,t),this[K].cache}get redirect(){return S.brandCheck(this,t),this[K].redirect}get integrity(){return S.brandCheck(this,t),this[K].integrity}get keepalive(){return S.brandCheck(this,t),this[K].keepalive}get isReloadNavigation(){return S.brandCheck(this,t),this[K].reloadNavigation}get isHistoryNavigation(){return S.brandCheck(this,t),this[K].historyNavigation}get signal(){return S.brandCheck(this,t),this[kn]}get body(){return S.brandCheck(this,t),this[K].body?this[K].body.stream:null}get bodyUsed(){return S.brandCheck(this,t),!!this[K].body&&bn.isDisturbed(this[K].body.stream)}get duplex(){return S.brandCheck(this,t),"half"}clone(){if(S.brandCheck(this,t),YC(this))throw new TypeError("unusable");let e=XC(this[K]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let A=Nn.get(this.signal);A===void 0&&(A=new Set,Nn.set(this.signal,A));let s=new WeakRef(r);A.add(s),bn.addAbortListener(r.signal,WC(s))}return $C(e,r.signal,vN(this[Ye]))}[JC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${JC.formatWithOptions(r,A)}`}};GN(er);function Un(t){return{method:t.method??"GET",localURLsOnly:t.localURLsOnly??!1,unsafeRequest:t.unsafeRequest??!1,body:t.body??null,client:t.client??null,reservedClient:t.reservedClient??null,replacesClientId:t.replacesClientId??"",window:t.window??"client",keepalive:t.keepalive??!1,serviceWorkers:t.serviceWorkers??"all",initiator:t.initiator??"",destination:t.destination??"",priority:t.priority??null,origin:t.origin??"client",policyContainer:t.policyContainer??"client",referrer:t.referrer??"client",referrerPolicy:t.referrerPolicy??"",mode:t.mode??"no-cors",useCORSPreflightFlag:t.useCORSPreflightFlag??!1,credentials:t.credentials??"same-origin",useCredentials:t.useCredentials??!1,cache:t.cache??"default",redirect:t.redirect??"follow",integrity:t.integrity??"",cryptoGraphicsNonceMetadata:t.cryptoGraphicsNonceMetadata??"",parserMetadata:t.parserMetadata??"",reloadNavigation:t.reloadNavigation??!1,historyNavigation:t.historyNavigation??!1,userActivation:t.userActivation??!1,taintedOrigin:t.taintedOrigin??!1,redirectCount:t.redirectCount??0,responseTainting:t.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:t.preventNoCacheCacheControlHeaderModification??!1,done:t.done??!1,timingAllowFailed:t.timingAllowFailed??!1,urlList:t.urlList,url:t.urlList[0],headersList:t.headersList?new Fn(t.headersList):new Fn}}function XC(t){let e=Un({...t,body:null});return t.body!=null&&(e.body=LN(e,t.body)),e}function $C(t,e,r){let A=new er(Sn);return A[K]=t,A[kn]=e,A[Ye]=new ZC(Sn),jC(A[Ye],t.headersList),Yg(A[Ye],r),A}Object.defineProperties(er.prototype,{method:le,url:le,headers:le,redirect:le,clone:le,signal:le,duplex:le,destination:le,body:le,bodyUsed:le,isHistoryNavigation:le,isReloadNavigation:le,keepalive:le,integrity:le,cache:le,credentials:le,attribute:le,referrerPolicy:le,referrer:le,mode:le,[Symbol.toStringTag]:{value:"Request",configurable:!0}});S.converters.Request=S.interfaceConverter(er);S.converters.RequestInfo=function(t,e,r){return typeof t=="string"?S.converters.USVString(t,e,r):t instanceof er?S.converters.Request(t,e,r):S.converters.USVString(t,e,r)};S.converters.AbortSignal=S.interfaceConverter(AbortSignal);S.converters.RequestInit=S.dictionaryConverter([{key:"method",converter:S.converters.ByteString},{key:"headers",converter:S.converters.HeadersInit},{key:"body",converter:S.nullableConverter(S.converters.BodyInit)},{key:"referrer",converter:S.converters.USVString},{key:"referrerPolicy",converter:S.converters.DOMString,allowedValues:JN},{key:"mode",converter:S.converters.DOMString,allowedValues:HN},{key:"credentials",converter:S.converters.DOMString,allowedValues:VN},{key:"cache",converter:S.converters.DOMString,allowedValues:qN},{key:"redirect",converter:S.converters.DOMString,allowedValues:PN},{key:"integrity",converter:S.converters.DOMString},{key:"keepalive",converter:S.converters.boolean},{key:"signal",converter:S.nullableConverter(t=>S.converters.AbortSignal(t,"RequestInit","signal",{strict:!1}))},{key:"window",converter:S.converters.any},{key:"duplex",converter:S.converters.DOMString,allowedValues:WN},{key:"dispatcher",converter:S.converters.any}]);ed.exports={Request:er,makeRequest:Un,fromInnerRequest:$C,cloneRequest:XC}});var Gs=B((NP,Qd)=>{"use strict";var{makeNetworkError:H,makeAppropriateNetworkError:Gn,filterResponse:_g,makeResponse:Ln,fromInnerResponse:eU}=Ns(),{HeadersList:td}=Ur(),{Request:tU,cloneRequest:rU}=NA(),tr=require("node:zlib"),{bytesMatch:AU,makePolicyContainer:sU,clonePolicyContainer:oU,requestBadPort:nU,TAOCheck:iU,appendRequestOriginHeader:aU,responseLocationURL:cU,requestCurrentURL:ft,setRequestReferrerPolicyOnRedirect:gU,tryUpgradeRequestToAPotentiallyTrustworthyURL:lU,createOpaqueTimingInfo:qg,appendFetchMetadata:uU,corsCheck:EU,crossOriginResourcePolicyCheck:hU,determineRequestsReferrer:QU,coarsenedSharedCurrentTime:Us,createDeferredPromise:BU,isBlobLike:IU,sameOrigin:Vg,isCancelled:Lr,isAborted:rd,isErrorLike:CU,fullyReadBody:dU,readableStreamClose:fU,isomorphicEncode:Mn,urlIsLocal:pU,urlIsHttpHttpsScheme:Wg,urlHasHttpsScheme:mU,clampAndCoarsenConnectionTimingInfo:wU,simpleRangeHeaderValue:yU,buildContentRange:RU,createInflate:DU,extractMimeType:TU}=Ge(),{kState:nd,kDispatcher:bU}=Pt(),Mr=require("node:assert"),{safelyExtractBody:zg,extractBody:Ad}=cA(),{redirectStatusSet:id,nullBodyStatus:ad,safeMethodsSet:kU,requestBodyHeader:FU,subresourceSet:SU}=rs(),NU=require("node:events"),{Readable:UU,pipeline:GU,finished:LU}=require("node:stream"),{addAbortListener:MU,isErrored:vU,isReadable:vn,bufferToLowerCasedHeaderName:sd}=M(),{dataURLProcessor:xU,serializeAMimeType:OU,minimizeSupportedMimeType:YU}=Te(),{getGlobalDispatcher:_U}=fn(),{webidl:JU}=Qe(),{STATUS_CODES:PU}=require("node:http"),HU=["GET","HEAD"],VU=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",Jg,xn=class extends NU{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){this.state==="ongoing"&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}};function qU(t){cd(t,"fetch")}function WU(t,e=void 0){JU.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=BU(),A;try{A=new tU(t,e)}catch(g){return r.reject(g),r.promise}let s=A[nd];if(A.signal.aborted)return Pg(r,s,null,A.signal.reason),r.promise;s.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(s.serviceWorkers="none");let n=null,i=!1,a=null;return MU(A.signal,()=>{i=!0,Mr(a!=null),a.abort(A.signal.reason);let g=n?.deref();Pg(r,s,g,A.signal.reason)}),a=ld({request:s,processResponseEndOfBody:qU,processResponse:g=>{if(!i){if(g.aborted){Pg(r,s,n,a.serializedAbortReason);return}if(g.type==="error"){r.reject(new TypeError("fetch failed",{cause:g.error}));return}n=new WeakRef(eU(g,"immutable")),r.resolve(n.deref()),r=null}},dispatcher:A[bU]}),r.promise}function cd(t,e="other"){if(t.type==="error"&&t.aborted||!t.urlList?.length)return;let r=t.urlList[0],A=t.timingInfo,s=t.cacheState;Wg(r)&&A!==null&&(t.timingAllowPassed||(A=qg({startTime:A.startTime}),s=""),A.endTime=Us(),t.timingInfo=A,gd(A,r.href,e,globalThis,s))}var gd=performance.markResourceTiming;function Pg(t,e,r,A){if(t&&t.reject(A),e.body!=null&&vn(e.body?.stream)&&e.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o}),r==null)return;let s=r[nd];s.body!=null&&vn(s.body?.stream)&&s.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o})}function ld({request:t,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseEndOfBody:s,processResponseConsumeBody:o,useParallelQueue:n=!1,dispatcher:i=_U()}){Mr(i);let a=null,c=!1;t.client!=null&&(a=t.client.globalObject,c=t.client.crossOriginIsolatedCapability);let g=Us(c),l=qg({startTime:g}),u={controller:new xn(i),request:t,timingInfo:l,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseConsumeBody:o,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};return Mr(!t.body||t.body.stream),t.window==="client"&&(t.window=t.client?.globalObject?.constructor?.name==="Window"?t.client:"no-window"),t.origin==="client"&&(t.origin=t.client.origin),t.policyContainer==="client"&&(t.client!=null?t.policyContainer=oU(t.client.policyContainer):t.policyContainer=sU()),t.headersList.contains("accept",!0)||t.headersList.append("accept","*/*",!0),t.headersList.contains("accept-language",!0)||t.headersList.append("accept-language","*",!0),t.priority,SU.has(t.destination),ud(u).catch(E=>{u.controller.terminate(E)}),u.controller}async function ud(t,e=!1){let r=t.request,A=null;if(r.localURLsOnly&&!pU(ft(r))&&(A=H("local URLs only")),lU(r),nU(r)==="blocked"&&(A=H("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=QU(r)),A===null&&(A=await(async()=>{let o=ft(r);return Vg(o,r.url)&&r.responseTainting==="basic"||o.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await od(t)):r.mode==="same-origin"?H('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?H('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await od(t)):Wg(ft(r))?(r.responseTainting="cors",await Ed(t)):H("URL scheme must be a HTTP(S) scheme")})()),e)return A;A.status!==0&&!A.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?A=_g(A,"basic"):r.responseTainting==="cors"?A=_g(A,"cors"):r.responseTainting==="opaque"?A=_g(A,"opaque"):Mr(!1));let s=A.status===0?A:A.internalResponse;if(s.urlList.length===0&&s.urlList.push(...r.urlList),r.timingAllowFailed||(A.timingAllowPassed=!0),A.type==="opaque"&&s.status===206&&s.rangeRequested&&!r.headers.contains("range",!0)&&(A=s=H()),A.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||ad.includes(s.status))&&(s.body=null,t.controller.dump=!0),r.integrity){let o=i=>Hg(t,H(i));if(r.responseTainting==="opaque"||A.body==null){o(A.error);return}let n=i=>{if(!AU(i,r.integrity)){o("integrity mismatch");return}A.body=zg(i)[0],Hg(t,A)};await dU(A.body,n,o)}else Hg(t,A)}function od(t){if(Lr(t)&&t.request.redirectCount===0)return Promise.resolve(Gn(t));let{request:e}=t,{protocol:r}=ft(e);switch(r){case"about:":return Promise.resolve(H("about scheme is not supported"));case"blob:":{Jg||(Jg=require("node:buffer").resolveObjectURL);let A=ft(e);if(A.search.length!==0)return Promise.resolve(H("NetworkError when attempting to fetch resource."));let s=Jg(A.toString());if(e.method!=="GET"||!IU(s))return Promise.resolve(H("invalid method"));let o=Ln(),n=s.size,i=Mn(`${n}`),a=s.type;if(e.headersList.contains("range",!0)){o.rangeRequested=!0;let c=e.headersList.get("range",!0),g=yU(c,!0);if(g==="failure")return Promise.resolve(H("failed to fetch the data URL"));let{rangeStartValue:l,rangeEndValue:u}=g;if(l===null)l=n-u,u=l+u-1;else{if(l>=n)return Promise.resolve(H("Range start is greater than the blob's size."));(u===null||u>=n)&&(u=n-1)}let E=s.slice(l,u,a),h=Ad(E);o.body=h[0];let C=Mn(`${E.size}`),I=RU(l,u,n);o.status=206,o.statusText="Partial Content",o.headersList.set("content-length",C,!0),o.headersList.set("content-type",a,!0),o.headersList.set("content-range",I,!0)}else{let c=Ad(s);o.statusText="OK",o.body=c[0],o.headersList.set("content-length",i,!0),o.headersList.set("content-type",a,!0)}return Promise.resolve(o)}case"data:":{let A=ft(e),s=xU(A);if(s==="failure")return Promise.resolve(H("failed to fetch the data URL"));let o=OU(s.mimeType);return Promise.resolve(Ln({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:o}]],body:zg(s.body)[0]}))}case"file:":return Promise.resolve(H("not implemented... yet..."));case"http:":case"https:":return Ed(t).catch(A=>H(A));default:return Promise.resolve(H("unknown scheme"))}}function zU(t,e){t.request.done=!0,t.processResponseDone!=null&&queueMicrotask(()=>t.processResponseDone(e))}function Hg(t,e){let r=t.timingInfo,A=()=>{let o=Date.now();t.request.destination==="document"&&(t.controller.fullTimingInfo=r),t.controller.reportTimingSteps=()=>{if(t.request.url.protocol!=="https:")return;r.endTime=o;let i=e.cacheState,a=e.bodyInfo;e.timingAllowPassed||(r=qg(r),i="");let c=0;if(t.request.mode!=="navigator"||!e.hasCrossOriginRedirects){c=e.status;let g=TU(e.headersList);g!=="failure"&&(a.contentType=YU(g))}t.request.initiatorType!=null&&gd(r,t.request.url.href,t.request.initiatorType,globalThis,i,a,c)};let n=()=>{t.request.done=!0,t.processResponseEndOfBody!=null&&queueMicrotask(()=>t.processResponseEndOfBody(e)),t.request.initiatorType!=null&&t.controller.reportTimingSteps()};queueMicrotask(()=>n())};t.processResponse!=null&&queueMicrotask(()=>{t.processResponse(e),t.processResponse=null});let s=e.type==="error"?e:e.internalResponse??e;s.body==null?A():LU(s.body.stream,()=>{A()})}async function Ed(t){let e=t.request,r=null,A=null,s=t.timingInfo;if(e.serviceWorkers,r===null){if(e.redirect==="follow"&&(e.serviceWorkers="none"),A=r=await hd(t),e.responseTainting==="cors"&&EU(e,r)==="failure")return H("cors failure");iU(e,r)==="failure"&&(e.timingAllowFailed=!0)}return(e.responseTainting==="opaque"||r.type==="opaque")&&hU(e.origin,e.client,e.destination,A)==="blocked"?H("blocked"):(id.has(A.status)&&(e.redirect!=="manual"&&t.controller.connection.destroy(void 0,!1),e.redirect==="error"?r=H("unexpected redirect"):e.redirect==="manual"?r=A:e.redirect==="follow"?r=await ZU(t,r):Mr(!1)),r.timingInfo=s,r)}function ZU(t,e){let r=t.request,A=e.internalResponse?e.internalResponse:e,s;try{if(s=cU(A,ft(r).hash),s==null)return e}catch(n){return Promise.resolve(H(n))}if(!Wg(s))return Promise.resolve(H("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(H("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(s.username||s.password)&&!Vg(r,s))return Promise.resolve(H('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(s.username||s.password))return Promise.resolve(H('URL cannot contain credentials for request mode "cors"'));if(A.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(H());if([301,302].includes(A.status)&&r.method==="POST"||A.status===303&&!HU.includes(r.method)){r.method="GET",r.body=null;for(let n of FU)r.headersList.delete(n)}Vg(ft(r),s)||(r.headersList.delete("authorization",!0),r.headersList.delete("proxy-authorization",!0),r.headersList.delete("cookie",!0),r.headersList.delete("host",!0)),r.body!=null&&(Mr(r.body.source!=null),r.body=zg(r.body.source)[0]);let o=t.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=Us(t.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(s),gU(r,A),ud(t,!0)}async function hd(t,e=!1,r=!1){let A=t.request,s=null,o=null,n=null,i=null,a=!1;A.window==="no-window"&&A.redirect==="error"?(s=t,o=A):(o=rU(A),s={...t},s.request=o);let c=A.credentials==="include"||A.credentials==="same-origin"&&A.responseTainting==="basic",g=o.body?o.body.length:null,l=null;if(o.body==null&&["POST","PUT"].includes(o.method)&&(l="0"),g!=null&&(l=Mn(`${g}`)),l!=null&&o.headersList.append("content-length",l,!0),g!=null&&o.keepalive,o.referrer instanceof URL&&o.headersList.append("referer",Mn(o.referrer.href),!0),aU(o),uU(o),o.headersList.contains("user-agent",!0)||o.headersList.append("user-agent",VU),o.cache==="default"&&(o.headersList.contains("if-modified-since",!0)||o.headersList.contains("if-none-match",!0)||o.headersList.contains("if-unmodified-since",!0)||o.headersList.contains("if-match",!0)||o.headersList.contains("if-range",!0))&&(o.cache="no-store"),o.cache==="no-cache"&&!o.preventNoCacheCacheControlHeaderModification&&!o.headersList.contains("cache-control",!0)&&o.headersList.append("cache-control","max-age=0",!0),(o.cache==="no-store"||o.cache==="reload")&&(o.headersList.contains("pragma",!0)||o.headersList.append("pragma","no-cache",!0),o.headersList.contains("cache-control",!0)||o.headersList.append("cache-control","no-cache",!0)),o.headersList.contains("range",!0)&&o.headersList.append("accept-encoding","identity",!0),o.headersList.contains("accept-encoding",!0)||(mU(ft(o))?o.headersList.append("accept-encoding","br, gzip, deflate",!0):o.headersList.append("accept-encoding","gzip, deflate",!0)),o.headersList.delete("host",!0),i==null&&(o.cache="no-store"),o.cache!=="no-store"&&o.cache,n==null){if(o.cache==="only-if-cached")return H("only if cached");let u=await jU(s,c,r);!kU.has(o.method)&&u.status>=200&&u.status<=399,a&&u.status,n==null&&(n=u)}if(n.urlList=[...o.urlList],o.headersList.contains("range",!0)&&(n.rangeRequested=!0),n.requestIncludesCredentials=c,n.status===407)return A.window==="no-window"?H():Lr(t)?Gn(t):H("proxy authentication required");if(n.status===421&&!r&&(A.body==null||A.body.source!=null)){if(Lr(t))return Gn(t);t.controller.connection.destroy(),n=await hd(t,e,!0)}return n}async function jU(t,e=!1,r=!1){Mr(!t.controller.connection||t.controller.connection.destroyed),t.controller.connection={abort:null,destroyed:!1,destroy(h,C=!0){this.destroyed||(this.destroyed=!0,C&&this.abort?.(h??new DOMException("The operation was aborted.","AbortError")))}};let A=t.request,s=null,o=t.timingInfo;null==null&&(A.cache="no-store");let i=r?"yes":"no";A.mode;let a=null;if(A.body==null&&t.processRequestEndOfBody)queueMicrotask(()=>t.processRequestEndOfBody());else if(A.body!=null){let h=async function*(Q){Lr(t)||(yield Q,t.processRequestBodyChunkLength?.(Q.byteLength))},C=()=>{Lr(t)||t.processRequestEndOfBody&&t.processRequestEndOfBody()},I=Q=>{Lr(t)||(Q.name==="AbortError"?t.controller.abort():t.controller.terminate(Q))};a=(async function*(){try{for await(let Q of A.body.stream)yield*h(Q);C()}catch(Q){I(Q)}})()}try{let{body:h,status:C,statusText:I,headersList:Q,socket:f}=await E({body:a});if(f)s=Ln({status:C,statusText:I,headersList:Q,socket:f});else{let R=h[Symbol.asyncIterator]();t.controller.next=()=>R.next(),s=Ln({status:C,statusText:I,headersList:Q})}}catch(h){return h.name==="AbortError"?(t.controller.connection.destroy(),Gn(t,h)):H(h)}let c=async()=>{await t.controller.resume()},g=h=>{Lr(t)||t.controller.abort(h)},l=new ReadableStream({async start(h){t.controller.controller=h},async pull(h){await c(h)},async cancel(h){await g(h)},type:"bytes"});s.body={stream:l,source:null,length:null},t.controller.onAborted=u,t.controller.on("terminated",u),t.controller.resume=async()=>{for(;;){let h,C;try{let{done:Q,value:f}=await t.controller.next();if(rd(t))break;h=Q?void 0:f}catch(Q){t.controller.ended&&!o.encodedBodySize?h=void 0:(h=Q,C=!0)}if(h===void 0){fU(t.controller.controller),zU(t,s);return}if(o.decodedBodySize+=h?.byteLength??0,C){t.controller.terminate(h);return}let I=new Uint8Array(h);if(I.byteLength&&t.controller.controller.enqueue(I),vU(l)){t.controller.terminate();return}if(t.controller.controller.desiredSize<=0)return}};function u(h){rd(t)?(s.aborted=!0,vn(l)&&t.controller.controller.error(t.controller.serializedAbortReason)):vn(l)&&t.controller.controller.error(new TypeError("terminated",{cause:CU(h)?h:void 0})),t.controller.connection.destroy()}return s;function E({body:h}){let C=ft(A),I=t.controller.dispatcher;return new Promise((Q,f)=>I.dispatch({path:C.pathname+C.search,origin:C.origin,method:A.method,body:I.isMockActive?A.body&&(A.body.source||A.body.stream):h,headers:A.headersList.entries,maxRedirections:0,upgrade:A.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(R){let{connection:y}=t.controller;o.finalConnectionTimingInfo=wU(void 0,o.postRedirectStartTime,t.crossOriginIsolatedCapability),y.destroyed?R(new DOMException("The operation was aborted.","AbortError")):(t.controller.on("terminated",R),this.abort=y.abort=R),o.finalNetworkRequestStartTime=Us(t.crossOriginIsolatedCapability)},onResponseStarted(){o.finalNetworkResponseStartTime=Us(t.crossOriginIsolatedCapability)},onHeaders(R,y,P,Z){if(R<200)return;let Ae="",gt=new td;for(let De=0;DeWr)return f(new Error(`too many content-encodings in response: ${qr.length}, maximum allowed is ${Wr}`)),!0;for(let Pi=qr.length-1;Pi>=0;--Pi){let lo=qr[Pi].trim();if(lo==="x-gzip"||lo==="gzip")wt.push(tr.createGunzip({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="deflate")wt.push(DU({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="br")wt.push(tr.createBrotliDecompress({flush:tr.constants.BROTLI_OPERATION_FLUSH,finishFlush:tr.constants.BROTLI_OPERATION_FLUSH}));else{wt.length=0;break}}}let _t=this.onError.bind(this);return Q({status:R,statusText:Z,headersList:gt,body:wt.length?GU(this.body,...wt,De=>{De&&this.onError(De)}).on("error",_t):this.body.on("error",_t)}),!0},onData(R){if(t.controller.dump)return;let y=R;return o.encodedBodySize+=y.byteLength,this.body.push(y)},onComplete(){this.abort&&t.controller.off("terminated",this.abort),t.controller.onAborted&&t.controller.off("terminated",t.controller.onAborted),t.controller.ended=!0,this.body.push(null)},onError(R){this.abort&&t.controller.off("terminated",this.abort),this.body?.destroy(R),t.controller.terminate(R),f(R)},onUpgrade(R,y,P){if(R!==101)return;let Z=new td;for(let Ae=0;Ae{"use strict";Bd.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var Cd=B((GP,Id)=>{"use strict";var{webidl:_e}=Qe(),On=Symbol("ProgressEvent state"),jg=class t extends Event{constructor(e,r={}){e=_e.converters.DOMString(e,"ProgressEvent constructor","type"),r=_e.converters.ProgressEventInit(r??{}),super(e,r),this[On]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return _e.brandCheck(this,t),this[On].lengthComputable}get loaded(){return _e.brandCheck(this,t),this[On].loaded}get total(){return _e.brandCheck(this,t),this[On].total}};_e.converters.ProgressEventInit=_e.dictionaryConverter([{key:"lengthComputable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:_e.converters.boolean,defaultValue:()=>!1}]);Id.exports={ProgressEvent:jg}});var fd=B((LP,dd)=>{"use strict";function KU(t){if(!t)return"failure";switch(t.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}dd.exports={getEncoding:KU}});var bd=B((MP,Td)=>{"use strict";var{kState:UA,kError:Kg,kResult:pd,kAborted:Ls,kLastProgressEventFired:Xg}=Zg(),{ProgressEvent:XU}=Cd(),{getEncoding:md}=fd(),{serializeAMimeType:$U,parseMIMEType:wd}=Te(),{types:eG}=require("node:util"),{StringDecoder:yd}=require("string_decoder"),{btoa:Rd}=require("node:buffer"),tG={enumerable:!0,writable:!1,configurable:!1};function rG(t,e,r,A){if(t[UA]==="loading")throw new DOMException("Invalid state","InvalidStateError");t[UA]="loading",t[pd]=null,t[Kg]=null;let o=e.stream().getReader(),n=[],i=o.read(),a=!0;(async()=>{for(;!t[Ls];)try{let{done:c,value:g}=await i;if(a&&!t[Ls]&&queueMicrotask(()=>{rr("loadstart",t)}),a=!1,!c&&eG.isUint8Array(g))n.push(g),(t[Xg]===void 0||Date.now()-t[Xg]>=50)&&!t[Ls]&&(t[Xg]=Date.now(),queueMicrotask(()=>{rr("progress",t)})),i=o.read();else if(c){queueMicrotask(()=>{t[UA]="done";try{let l=AG(n,r,e.type,A);if(t[Ls])return;t[pd]=l,rr("load",t)}catch(l){t[Kg]=l,rr("error",t)}t[UA]!=="loading"&&rr("loadend",t)});break}}catch(c){if(t[Ls])return;queueMicrotask(()=>{t[UA]="done",t[Kg]=c,rr("error",t),t[UA]!=="loading"&&rr("loadend",t)});break}})()}function rr(t,e){let r=new XU(t,{bubbles:!1,cancelable:!1});e.dispatchEvent(r)}function AG(t,e,r,A){switch(e){case"DataURL":{let s="data:",o=wd(r||"application/octet-stream");o!=="failure"&&(s+=$U(o)),s+=";base64,";let n=new yd("latin1");for(let i of t)s+=Rd(n.write(i));return s+=Rd(n.end()),s}case"Text":{let s="failure";if(A&&(s=md(A)),s==="failure"&&r){let o=wd(r);o!=="failure"&&(s=md(o.parameters.get("charset")))}return s==="failure"&&(s="UTF-8"),sG(t,s)}case"ArrayBuffer":return Dd(t).buffer;case"BinaryString":{let s="",o=new yd("latin1");for(let n of t)s+=o.write(n);return s+=o.end(),s}}}function sG(t,e){let r=Dd(t),A=oG(r),s=0;A!==null&&(e=A,s=A==="UTF-8"?3:2);let o=r.slice(s);return new TextDecoder(e).decode(o)}function oG(t){let[e,r,A]=t;return e===239&&r===187&&A===191?"UTF-8":e===254&&r===255?"UTF-16BE":e===255&&r===254?"UTF-16LE":null}function Dd(t){let e=t.reduce((A,s)=>A+s.byteLength,0),r=0;return t.reduce((A,s)=>(A.set(s,r),r+=s.byteLength,A),new Uint8Array(e))}Td.exports={staticPropertyDescriptors:tG,readOperation:rG,fireAProgressEvent:rr}});var Nd=B((vP,Sd)=>{"use strict";var{staticPropertyDescriptors:GA,readOperation:Yn,fireAProgressEvent:kd}=bd(),{kState:vr,kError:Fd,kResult:_n,kEvents:_,kAborted:nG}=Zg(),{webidl:q}=Qe(),{kEnumerableProperty:Fe}=M(),at=class t extends EventTarget{constructor(){super(),this[vr]="empty",this[_n]=null,this[Fd]=null,this[_]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"ArrayBuffer")}readAsBinaryString(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"BinaryString")}readAsText(e,r=void 0){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsText"),e=q.converters.Blob(e,{strict:!1}),r!==void 0&&(r=q.converters.DOMString(r,"FileReader.readAsText","encoding")),Yn(this,e,"Text",r)}readAsDataURL(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"DataURL")}abort(){if(this[vr]==="empty"||this[vr]==="done"){this[_n]=null;return}this[vr]==="loading"&&(this[vr]="done",this[_n]=null),this[nG]=!0,kd("abort",this),this[vr]!=="loading"&&kd("loadend",this)}get readyState(){switch(q.brandCheck(this,t),this[vr]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return q.brandCheck(this,t),this[_n]}get error(){return q.brandCheck(this,t),this[Fd]}get onloadend(){return q.brandCheck(this,t),this[_].loadend}set onloadend(e){q.brandCheck(this,t),this[_].loadend&&this.removeEventListener("loadend",this[_].loadend),typeof e=="function"?(this[_].loadend=e,this.addEventListener("loadend",e)):this[_].loadend=null}get onerror(){return q.brandCheck(this,t),this[_].error}set onerror(e){q.brandCheck(this,t),this[_].error&&this.removeEventListener("error",this[_].error),typeof e=="function"?(this[_].error=e,this.addEventListener("error",e)):this[_].error=null}get onloadstart(){return q.brandCheck(this,t),this[_].loadstart}set onloadstart(e){q.brandCheck(this,t),this[_].loadstart&&this.removeEventListener("loadstart",this[_].loadstart),typeof e=="function"?(this[_].loadstart=e,this.addEventListener("loadstart",e)):this[_].loadstart=null}get onprogress(){return q.brandCheck(this,t),this[_].progress}set onprogress(e){q.brandCheck(this,t),this[_].progress&&this.removeEventListener("progress",this[_].progress),typeof e=="function"?(this[_].progress=e,this.addEventListener("progress",e)):this[_].progress=null}get onload(){return q.brandCheck(this,t),this[_].load}set onload(e){q.brandCheck(this,t),this[_].load&&this.removeEventListener("load",this[_].load),typeof e=="function"?(this[_].load=e,this.addEventListener("load",e)):this[_].load=null}get onabort(){return q.brandCheck(this,t),this[_].abort}set onabort(e){q.brandCheck(this,t),this[_].abort&&this.removeEventListener("abort",this[_].abort),typeof e=="function"?(this[_].abort=e,this.addEventListener("abort",e)):this[_].abort=null}};at.EMPTY=at.prototype.EMPTY=0;at.LOADING=at.prototype.LOADING=1;at.DONE=at.prototype.DONE=2;Object.defineProperties(at.prototype,{EMPTY:GA,LOADING:GA,DONE:GA,readAsArrayBuffer:Fe,readAsBinaryString:Fe,readAsText:Fe,readAsDataURL:Fe,abort:Fe,readyState:Fe,result:Fe,error:Fe,onloadstart:Fe,onprogress:Fe,onload:Fe,onabort:Fe,onerror:Fe,onloadend:Fe,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(at,{EMPTY:GA,LOADING:GA,DONE:GA});Sd.exports={FileReader:at}});var Jn=B((xP,Ud)=>{"use strict";Ud.exports={kConstruct:$().kConstruct}});var Md=B((OP,Ld)=>{"use strict";var iG=require("node:assert"),{URLSerializer:Gd}=Te(),{isValidHeaderName:aG}=Ge();function cG(t,e,r=!1){let A=Gd(t,r),s=Gd(e,r);return A===s}function gG(t){iG(t!==null);let e=[];for(let r of t.split(","))r=r.trim(),aG(r)&&e.push(r);return e}Ld.exports={urlEquals:cG,getFieldValues:gG}});var Od=B((YP,xd)=>{"use strict";var{kConstruct:lG}=Jn(),{urlEquals:uG,getFieldValues:$g}=Md(),{kEnumerableProperty:xr,isDisturbed:EG}=M(),{webidl:T}=Qe(),{Response:hG,cloneResponse:QG,fromInnerResponse:BG}=Ns(),{Request:Mt,fromInnerRequest:IG}=NA(),{kState:ct}=Pt(),{fetching:CG}=Gs(),{urlIsHttpHttpsScheme:Pn,createDeferredPromise:LA,readAllBytes:dG}=Ge(),el=require("node:assert"),Hn=class t{#e;constructor(){arguments[0]!==lG&&T.illegalConstructor(),T.util.markAsUncloneable(this),this.#e=arguments[1]}async match(e,r={}){T.brandCheck(this,t);let A="Cache.match";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=this.#s(e,r,1);if(s.length!==0)return s[0]}async matchAll(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.matchAll";return e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options"),this.#s(e,r)}async add(e){T.brandCheck(this,t);let r="Cache.add";T.argumentLengthCheck(arguments,1,r),e=T.converters.RequestInfo(e,r,"request");let A=[e];return await this.addAll(A)}async addAll(e){T.brandCheck(this,t);let r="Cache.addAll";T.argumentLengthCheck(arguments,1,r);let A=[],s=[];for(let u of e){if(u===void 0)throw T.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(u=T.converters.RequestInfo(u),typeof u=="string")continue;let E=u[ct];if(!Pn(E.url)||E.method!=="GET")throw T.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let o=[];for(let u of e){let E=new Mt(u)[ct];if(!Pn(E.url))throw T.errors.exception({header:r,message:"Expected http/s scheme."});E.initiator="fetch",E.destination="subresource",s.push(E);let h=LA();o.push(CG({request:E,processResponse(C){if(C.type==="error"||C.status===206||C.status<200||C.status>299)h.reject(T.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(C.headersList.contains("vary")){let I=$g(C.headersList.get("vary"));for(let Q of I)if(Q==="*"){h.reject(T.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let f of o)f.abort();return}}},processResponseEndOfBody(C){if(C.aborted){h.reject(new DOMException("aborted","AbortError"));return}h.resolve(C)}})),A.push(h.promise)}let i=await Promise.all(A),a=[],c=0;for(let u of i){let E={type:"put",request:s[c],response:u};a.push(E),c++}let g=LA(),l=null;try{this.#t(a)}catch(u){l=u}return queueMicrotask(()=>{l===null?g.resolve(void 0):g.reject(l)}),g.promise}async put(e,r){T.brandCheck(this,t);let A="Cache.put";T.argumentLengthCheck(arguments,2,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.Response(r,A,"response");let s=null;if(e instanceof Mt?s=e[ct]:s=new Mt(e)[ct],!Pn(s.url)||s.method!=="GET")throw T.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});let o=r[ct];if(o.status===206)throw T.errors.exception({header:A,message:"Got 206 status"});if(o.headersList.contains("vary")){let E=$g(o.headersList.get("vary"));for(let h of E)if(h==="*")throw T.errors.exception({header:A,message:"Got * vary field value"})}if(o.body&&(EG(o.body.stream)||o.body.stream.locked))throw T.errors.exception({header:A,message:"Response body is locked or disturbed"});let n=QG(o),i=LA();if(o.body!=null){let h=o.body.stream.getReader();dG(h).then(i.resolve,i.reject)}else i.resolve(void 0);let a=[],c={type:"put",request:s,response:n};a.push(c);let g=await i.promise;n.body!=null&&(n.body.source=g);let l=LA(),u=null;try{this.#t(a)}catch(E){u=E}return queueMicrotask(()=>{u===null?l.resolve():l.reject(u)}),l.promise}async delete(e,r={}){T.brandCheck(this,t);let A="Cache.delete";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return!1}else el(typeof e=="string"),s=new Mt(e)[ct];let o=[],n={type:"delete",request:s,options:r};o.push(n);let i=LA(),a=null,c;try{c=this.#t(o)}catch(g){a=g}return queueMicrotask(()=>{a===null?i.resolve(!!c?.length):i.reject(a)}),i.promise}async keys(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.keys";e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=LA(),n=[];if(e===void 0)for(let i of this.#e)n.push(i[0]);else{let i=this.#r(s,r);for(let a of i)n.push(a[0])}return queueMicrotask(()=>{let i=[];for(let a of n){let c=IG(a,new AbortController().signal,"immutable");i.push(c)}o.resolve(Object.freeze(i))}),o.promise}#t(e){let r=this.#e,A=[...r],s=[],o=[];try{for(let n of e){if(n.type!=="delete"&&n.type!=="put")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(n.type==="delete"&&n.response!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#r(n.request,n.options,s).length)throw new DOMException("???","InvalidStateError");let i;if(n.type==="delete"){if(i=this.#r(n.request,n.options),i.length===0)return[];for(let a of i){let c=r.indexOf(a);el(c!==-1),r.splice(c,1)}}else if(n.type==="put"){if(n.response==null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=n.request;if(!Pn(a.url))throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(n.options!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});i=this.#r(n.request);for(let c of i){let g=r.indexOf(c);el(g!==-1),r.splice(g,1)}r.push([n.request,n.response]),s.push([n.request,n.response])}o.push([n.request,n.response])}return o}catch(n){throw this.#e.length=0,this.#e=A,n}}#r(e,r,A){let s=[],o=A??this.#e;for(let n of o){let[i,a]=n;this.#o(e,i,a,r)&&s.push(n)}return s}#o(e,r,A=null,s){let o=new URL(e.url),n=new URL(r.url);if(s?.ignoreSearch&&(n.search="",o.search=""),!uG(o,n,!0))return!1;if(A==null||s?.ignoreVary||!A.headersList.contains("vary"))return!0;let i=$g(A.headersList.get("vary"));for(let a of i){if(a==="*")return!1;let c=r.headersList.get(a),g=e.headersList.get(a);if(c!==g)return!1}return!0}#s(e,r,A=1/0){let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=[];if(e===void 0)for(let i of this.#e)o.push(i[1]);else{let i=this.#r(s,r);for(let a of i)o.push(a[1])}let n=[];for(let i of o){let a=BG(i,"immutable");if(n.push(a.clone()),n.length>=A)break}return Object.freeze(n)}};Object.defineProperties(Hn.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:xr,matchAll:xr,add:xr,addAll:xr,put:xr,delete:xr,keys:xr});var vd=[{key:"ignoreSearch",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:T.converters.boolean,defaultValue:()=>!1}];T.converters.CacheQueryOptions=T.dictionaryConverter(vd);T.converters.MultiCacheQueryOptions=T.dictionaryConverter([...vd,{key:"cacheName",converter:T.converters.DOMString}]);T.converters.Response=T.interfaceConverter(hG);T.converters["sequence"]=T.sequenceConverter(T.converters.RequestInfo);xd.exports={Cache:Hn}});var _d=B((_P,Yd)=>{"use strict";var{kConstruct:Ms}=Jn(),{Cache:Vn}=Od(),{webidl:de}=Qe(),{kEnumerableProperty:vs}=M(),qn=class t{#e=new Map;constructor(){arguments[0]!==Ms&&de.illegalConstructor(),de.util.markAsUncloneable(this)}async match(e,r={}){if(de.brandCheck(this,t),de.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=de.converters.RequestInfo(e),r=de.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let A=this.#e.get(r.cacheName);return await new Vn(Ms,A).match(e,r)}}else for(let A of this.#e.values()){let o=await new Vn(Ms,A).match(e,r);if(o!==void 0)return o}}async has(e){de.brandCheck(this,t);let r="CacheStorage.has";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)}async open(e){de.brandCheck(this,t);let r="CacheStorage.open";if(de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)){let s=this.#e.get(e);return new Vn(Ms,s)}let A=[];return this.#e.set(e,A),new Vn(Ms,A)}async delete(e){de.brandCheck(this,t);let r="CacheStorage.delete";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.delete(e)}async keys(){return de.brandCheck(this,t),[...this.#e.keys()]}};Object.defineProperties(qn.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:vs,has:vs,open:vs,delete:vs,keys:vs});Yd.exports={CacheStorage:qn}});var Pd=B((JP,Jd)=>{"use strict";Jd.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var Al=B((PP,Wd)=>{"use strict";function fG(t){for(let e=0;e=0&&r<=8||r>=10&&r<=31||r===127)return!0}return!1}function tl(t){for(let e=0;e126||r===34||r===40||r===41||r===60||r===62||r===64||r===44||r===59||r===58||r===92||r===47||r===91||r===93||r===63||r===61||r===123||r===125)throw new Error("Invalid cookie name")}}function rl(t){let e=t.length,r=0;if(t[0]==='"'){if(e===1||t[e-1]!=='"')throw new Error("Invalid cookie value");--e,++r}for(;r126||A===34||A===44||A===59||A===92)throw new Error("Invalid cookie value")}}function Vd(t){for(let e=0;e126||r===59)throw new Error("Invalid cookie path")}}function Hd(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function pG(t){if(t===" ")return;if(t.length>255)throw new Error("Invalid cookie domain");let e=0;for(let r=0;r63)throw new Error("Invalid cookie domain")}if(e===0||t.charCodeAt(t.length-1)===45)throw new Error("Invalid cookie domain")}var mG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wn=Array(61).fill(0).map((t,e)=>e.toString().padStart(2,"0"));function qd(t){return typeof t=="number"&&(t=new Date(t)),`${mG[t.getUTCDay()]}, ${Wn[t.getUTCDate()]} ${wG[t.getUTCMonth()]} ${t.getUTCFullYear()} ${Wn[t.getUTCHours()]}:${Wn[t.getUTCMinutes()]}:${Wn[t.getUTCSeconds()]} GMT`}function yG(t){if(t<0)throw new Error("Invalid cookie max-age")}function RG(t){if(t.name.length===0)return null;tl(t.name),rl(t.value);let e=[`${t.name}=${t.value}`];t.name.startsWith("__Secure-")&&(t.secure=!0),t.name.startsWith("__Host-")&&(t.secure=!0,t.domain=null,t.path="/"),t.secure&&e.push("Secure"),t.httpOnly&&e.push("HttpOnly"),typeof t.maxAge=="number"&&(yG(t.maxAge),e.push(`Max-Age=${t.maxAge}`)),t.domain&&(pG(t.domain),e.push(`Domain=${t.domain}`)),t.path&&(Vd(t.path),e.push(`Path=${t.path}`)),t.expires&&t.expires.toString()!=="Invalid Date"&&e.push(`Expires=${qd(t.expires)}`),t.sameSite&&e.push(`SameSite=${t.sameSite}`);for(let r of t.unparsed){if(!r.includes("="))throw new Error("Invalid unparsed");let[A,...s]=r.split("="),o=A.trim(),n=s.join("=");tl(o),rl(n),e.push(`${o}=${n}`)}return e.join("; ")}Wd.exports={isCTLExcludingHtab:fG,validateCookieName:tl,validateCookiePath:Vd,validateCookieValue:rl,toIMFDate:qd,stringify:RG}});var Zd=B((HP,zd)=>{"use strict";var{maxNameValuePairSize:DG,maxAttributeValueSize:TG}=Pd(),{isCTLExcludingHtab:bG}=Al(),{collectASequenceOfCodePointsFast:zn}=Te(),kG=require("node:assert");function FG(t){if(bG(t))return null;let e="",r="",A="",s="";if(t.includes(";")){let o={position:0};e=zn(";",t,o),r=t.slice(o.position)}else e=t;if(!e.includes("="))s=e;else{let o={position:0};A=zn("=",e,o),s=e.slice(o.position+1)}return A=A.trim(),s=s.trim(),A.length+s.length>DG?null:{name:A,value:s,...MA(r)}}function MA(t,e={}){if(t.length===0)return e;kG(t[0]===";"),t=t.slice(1);let r="";t.includes(";")?(r=zn(";",t,{position:0}),t=t.slice(r.length)):(r=t,t="");let A="",s="";if(r.includes("=")){let n={position:0};A=zn("=",r,n),s=r.slice(n.position+1)}else A=r;if(A=A.trim(),s=s.trim(),s.length>TG)return MA(t,e);let o=A.toLowerCase();if(o==="expires"){let n=new Date(s);e.expires=n}else if(o==="max-age"){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!=="-"||!/^\d+$/.test(s))return MA(t,e);let i=Number(s);e.maxAge=i}else if(o==="domain"){let n=s;n[0]==="."&&(n=n.slice(1)),n=n.toLowerCase(),e.domain=n}else if(o==="path"){let n="";s.length===0||s[0]!=="/"?n="/":n=s,e.path=n}else if(o==="secure")e.secure=!0;else if(o==="httponly")e.httpOnly=!0;else if(o==="samesite"){let n=s.toLowerCase();n==="none"?e.sameSite="None":n==="strict"?e.sameSite="Strict":n==="lax"&&(e.sameSite="Lax")}else e.unparsed??=[],e.unparsed.push(`${A}=${s}`);return MA(t,e)}zd.exports={parseSetCookie:FG,parseUnparsedAttributes:MA}});var Xd=B((VP,Kd)=>{"use strict";var{parseSetCookie:SG}=Zd(),{stringify:NG}=Al(),{webidl:x}=Qe(),{Headers:Zn}=Ur();function UG(t){x.argumentLengthCheck(arguments,1,"getCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.get("cookie"),r={};if(!e)return r;for(let A of e.split(";")){let[s,...o]=A.split("=");r[s.trim()]=o.join("=")}return r}function GG(t,e,r){x.brandCheck(t,Zn,{strict:!1});let A="deleteCookie";x.argumentLengthCheck(arguments,2,A),e=x.converters.DOMString(e,A,"name"),r=x.converters.DeleteCookieAttributes(r),jd(t,{name:e,value:"",expires:new Date(0),...r})}function LG(t){x.argumentLengthCheck(arguments,1,"getSetCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.getSetCookie();return e?e.map(r=>SG(r)):[]}function jd(t,e){x.argumentLengthCheck(arguments,2,"setCookie"),x.brandCheck(t,Zn,{strict:!1}),e=x.converters.Cookie(e);let r=NG(e);r&&t.append("Set-Cookie",r)}x.converters.DeleteCookieAttributes=x.dictionaryConverter([{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null}]);x.converters.Cookie=x.dictionaryConverter([{converter:x.converters.DOMString,key:"name"},{converter:x.converters.DOMString,key:"value"},{converter:x.nullableConverter(t=>typeof t=="number"?x.converters["unsigned long long"](t):new Date(t)),key:"expires",defaultValue:()=>null},{converter:x.nullableConverter(x.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"secure",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:x.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:x.sequenceConverter(x.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);Kd.exports={getCookies:UG,deleteCookie:GG,getSetCookies:LG,setCookie:jd}});var xA=B((qP,ef)=>{"use strict";var{webidl:D}=Qe(),{kEnumerableProperty:Se}=M(),{kConstruct:$d}=$(),{MessagePort:MG}=require("node:worker_threads"),vA=class t extends Event{#e;constructor(e,r={}){if(e===$d){super(arguments[1],arguments[2]),D.util.markAsUncloneable(this);return}let A="MessageEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.MessageEventInit(r,A,"eventInitDict"),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get data(){return D.brandCheck(this,t),this.#e.data}get origin(){return D.brandCheck(this,t),this.#e.origin}get lastEventId(){return D.brandCheck(this,t),this.#e.lastEventId}get source(){return D.brandCheck(this,t),this.#e.source}get ports(){return D.brandCheck(this,t),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(e,r=!1,A=!1,s=null,o="",n="",i=null,a=[]){return D.brandCheck(this,t),D.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new t(e,{bubbles:r,cancelable:A,data:s,origin:o,lastEventId:n,source:i,ports:a})}static createFastMessageEvent(e,r){let A=new t($d,e,r);return A.#e=r,A.#e.data??=null,A.#e.origin??="",A.#e.lastEventId??="",A.#e.source??=null,A.#e.ports??=[],A}},{createFastMessageEvent:vG}=vA;delete vA.createFastMessageEvent;var jn=class t extends Event{#e;constructor(e,r={}){let A="CloseEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.CloseEventInit(r),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get wasClean(){return D.brandCheck(this,t),this.#e.wasClean}get code(){return D.brandCheck(this,t),this.#e.code}get reason(){return D.brandCheck(this,t),this.#e.reason}},Kn=class t extends Event{#e;constructor(e,r){let A="ErrorEvent constructor";D.argumentLengthCheck(arguments,1,A),super(e,r),D.util.markAsUncloneable(this),e=D.converters.DOMString(e,A,"type"),r=D.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return D.brandCheck(this,t),this.#e.message}get filename(){return D.brandCheck(this,t),this.#e.filename}get lineno(){return D.brandCheck(this,t),this.#e.lineno}get colno(){return D.brandCheck(this,t),this.#e.colno}get error(){return D.brandCheck(this,t),this.#e.error}};Object.defineProperties(vA.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:Se,origin:Se,lastEventId:Se,source:Se,ports:Se,initMessageEvent:Se});Object.defineProperties(jn.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:Se,code:Se,wasClean:Se});Object.defineProperties(Kn.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:Se,filename:Se,lineno:Se,colno:Se,error:Se});D.converters.MessagePort=D.interfaceConverter(MG);D.converters["sequence"]=D.sequenceConverter(D.converters.MessagePort);var sl=[{key:"bubbles",converter:D.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:D.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:D.converters.boolean,defaultValue:()=>!1}];D.converters.MessageEventInit=D.dictionaryConverter([...sl,{key:"data",converter:D.converters.any,defaultValue:()=>null},{key:"origin",converter:D.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:D.converters.DOMString,defaultValue:()=>""},{key:"source",converter:D.nullableConverter(D.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:D.converters["sequence"],defaultValue:()=>new Array(0)}]);D.converters.CloseEventInit=D.dictionaryConverter([...sl,{key:"wasClean",converter:D.converters.boolean,defaultValue:()=>!1},{key:"code",converter:D.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:D.converters.USVString,defaultValue:()=>""}]);D.converters.ErrorEventInit=D.dictionaryConverter([...sl,{key:"message",converter:D.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:D.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:D.converters.any}]);ef.exports={MessageEvent:vA,CloseEvent:jn,ErrorEvent:Kn,createFastMessageEvent:vG}});var Or=B((WP,tf)=>{"use strict";var xG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",OG={enumerable:!0,writable:!1,configurable:!1},YG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},_G={NOT_SENT:0,PROCESSING:1,SENT:2},JG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},PG=2**16-1,HG={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},VG=Buffer.allocUnsafe(0),qG={string:1,typedArray:2,arrayBuffer:3,blob:4};tf.exports={uid:xG,sentCloseFrameState:_G,staticPropertyDescriptors:OG,states:YG,opcodes:JG,maxUnsigned16Bit:PG,parserStates:HG,emptyBuffer:VG,sendHints:qG}});var xs=B((zP,rf)=>{"use strict";rf.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var _s=B((ZP,uf)=>{"use strict";var{kReadyState:Os,kController:WG,kResponse:zG,kBinaryType:ZG,kWebSocketURL:jG}=xs(),{states:Ys,opcodes:Ar}=Or(),{ErrorEvent:KG,createFastMessageEvent:XG}=xA(),{isUtf8:$G}=require("node:buffer"),{collectASequenceOfCodePointsFast:eL,removeHTTPWhitespace:Af}=Te();function tL(t){return t[Os]===Ys.CONNECTING}function rL(t){return t[Os]===Ys.OPEN}function AL(t){return t[Os]===Ys.CLOSING}function sL(t){return t[Os]===Ys.CLOSED}function ol(t,e,r=(s,o)=>new Event(s,o),A={}){let s=r(t,A);e.dispatchEvent(s)}function oL(t,e,r){if(t[Os]!==Ys.OPEN)return;let A;if(e===Ar.TEXT)try{A=lf(r)}catch{of(t,"Received invalid UTF-8 in text frame.");return}else e===Ar.BINARY&&(t[ZG]==="blob"?A=new Blob([r]):A=nL(r));ol("message",t,XG,{origin:t[jG].origin,data:A})}function nL(t){return t.byteLength===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function iL(t){if(t.length===0)return!1;for(let e=0;e126||r===34||r===40||r===41||r===44||r===47||r===58||r===59||r===60||r===61||r===62||r===63||r===64||r===91||r===92||r===93||r===123||r===125)return!1}return!0}function aL(t){return t>=1e3&&t<1015?t!==1004&&t!==1005&&t!==1006:t>=3e3&&t<=4999}function of(t,e){let{[WG]:r,[zG]:A}=t;r.abort(),A?.socket&&!A.socket.destroyed&&A.socket.destroy(),e&&ol("error",t,(s,o)=>new KG(s,o),{error:new Error(e),message:e})}function nf(t){return t===Ar.CLOSE||t===Ar.PING||t===Ar.PONG}function af(t){return t===Ar.CONTINUATION}function cf(t){return t===Ar.TEXT||t===Ar.BINARY}function cL(t){return cf(t)||af(t)||nf(t)}function gL(t){let e={position:0},r=new Map;for(;e.position57)return!1}let e=Number.parseInt(t,10);return e>=8&&e<=15}var gf=typeof process.versions.icu=="string",sf=gf?new TextDecoder("utf-8",{fatal:!0}):void 0,lf=gf?sf.decode.bind(sf):function(t){if($G(t))return t.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};uf.exports={isConnecting:tL,isEstablished:rL,isClosing:AL,isClosed:sL,fireEvent:ol,isValidSubprotocol:iL,isValidStatusCode:aL,failWebsocketConnection:of,websocketMessageReceived:oL,utf8Decode:lf,isControlFrame:nf,isContinuationFrame:af,isTextBinaryFrame:cf,isValidOpcode:cL,parseExtensions:gL,isValidClientWindowBits:lL}});var $n=B((jP,Ef)=>{"use strict";var{maxUnsigned16Bit:uL}=Or(),Xn=16386,nl,Js=null,OA=Xn;try{nl=require("node:crypto")}catch{nl={randomFillSync:function(e,r,A){for(let s=0;suL?(n+=8,o=127):s>125&&(n+=2,o=126);let i=Buffer.allocUnsafe(s+n);i[0]=i[1]=0,i[0]|=128,i[0]=(i[0]&240)+e;i[n-4]=A[0],i[n-3]=A[1],i[n-2]=A[2],i[n-1]=A[3],i[1]=o,o===126?i.writeUInt16BE(s,2):o===127&&(i[2]=i[3]=0,i.writeUIntBE(s,4,6)),i[1]|=128;for(let a=0;a{"use strict";var{uid:hL,states:Ps,sentCloseFrameState:ei,emptyBuffer:QL,opcodes:BL}=Or(),{kReadyState:Hs,kSentClose:ti,kByteParser:Qf,kReceivedClose:hf,kResponse:Bf}=xs(),{fireEvent:IL,failWebsocketConnection:sr,isClosing:CL,isClosed:dL,isEstablished:fL,parseExtensions:pL}=_s(),{channels:YA}=jr(),{CloseEvent:mL}=xA(),{makeRequest:wL}=NA(),{fetching:yL}=Gs(),{Headers:RL,getHeadersList:DL}=Ur(),{getDecodeSplit:TL}=Ge(),{WebsocketFrameSend:bL}=$n(),al;try{al=require("node:crypto")}catch{}function kL(t,e,r,A,s,o){let n=t;n.protocol=t.protocol==="ws:"?"http:":"https:";let i=wL({urlList:[n],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(o.headers){let l=DL(new RL(o.headers));i.headersList=l}let a=al.randomBytes(16).toString("base64");i.headersList.append("sec-websocket-key",a),i.headersList.append("sec-websocket-version","13");for(let l of e)i.headersList.append("sec-websocket-protocol",l);return i.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),yL({request:i,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(l){if(l.type==="error"||l.status!==101){sr(A,"Received network error or non-101 status code.");return}if(e.length!==0&&!l.headersList.get("Sec-WebSocket-Protocol")){sr(A,"Server did not respond with sent protocols.");return}if(l.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){sr(A,'Server did not set Upgrade header to "websocket".');return}if(l.headersList.get("Connection")?.toLowerCase()!=="upgrade"){sr(A,'Server did not set Connection header to "upgrade".');return}let u=l.headersList.get("Sec-WebSocket-Accept"),E=al.createHash("sha1").update(a+hL).digest("base64");if(u!==E){sr(A,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let h=l.headersList.get("Sec-WebSocket-Extensions"),C;if(h!==null&&(C=pL(h),!C.has("permessage-deflate"))){sr(A,"Sec-WebSocket-Extensions header does not match.");return}let I=l.headersList.get("Sec-WebSocket-Protocol");if(I!==null&&!TL("sec-websocket-protocol",i.headersList).includes(I)){sr(A,"Protocol was not set in the opening handshake.");return}l.socket.on("data",If),l.socket.on("close",Cf),l.socket.on("error",df),YA.open.hasSubscribers&&YA.open.publish({address:l.socket.address(),protocol:I,extensions:h}),s(l,C)}})}function FL(t,e,r,A){if(!(CL(t)||dL(t)))if(!fL(t))sr(t,"Connection was closed before it was established."),t[Hs]=Ps.CLOSING;else if(t[ti]===ei.NOT_SENT){t[ti]=ei.PROCESSING;let s=new bL;e!==void 0&&r===void 0?(s.frameData=Buffer.allocUnsafe(2),s.frameData.writeUInt16BE(e,0)):e!==void 0&&r!==void 0?(s.frameData=Buffer.allocUnsafe(2+A),s.frameData.writeUInt16BE(e,0),s.frameData.write(r,2,"utf-8")):s.frameData=QL,t[Bf].socket.write(s.createFrame(BL.CLOSE)),t[ti]=ei.SENT,t[Hs]=Ps.CLOSING}else t[Hs]=Ps.CLOSING}function If(t){this.ws[Qf].write(t)||this.pause()}function Cf(){let{ws:t}=this,{[Bf]:e}=t;e.socket.off("data",If),e.socket.off("close",Cf),e.socket.off("error",df);let r=t[ti]===ei.SENT&&t[hf],A=1005,s="",o=t[Qf].closingInfo;o&&!o.error?(A=o.code??1005,s=o.reason):t[hf]||(A=1006),t[Hs]=Ps.CLOSED,IL("close",t,(n,i)=>new mL(n,i),{wasClean:r,code:A,reason:s}),YA.close.hasSubscribers&&YA.close.publish({websocket:t,code:A,reason:s})}function df(t){let{ws:e}=this;e[Hs]=Ps.CLOSING,YA.socketError.hasSubscribers&&YA.socketError.publish(t),this.destroy()}ff.exports={establishWebSocketConnection:kL,closeWebSocketConnection:FL}});var mf=B((XP,pf)=>{"use strict";var{createInflateRaw:SL,Z_DEFAULT_WINDOWBITS:NL}=require("node:zlib"),{isValidClientWindowBits:UL}=_s(),{MessageSizeExceededError:GL}=Y(),LL=Buffer.from([0,0,255,255]),ri=Symbol("kBuffer"),Vs=Symbol("kLength"),gl=class{#e;#t={};#r=0;constructor(e,r){this.#t.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=e.get("server_max_window_bits"),this.#r=r.maxPayloadSize}decompress(e,r,A){if(!this.#e){let s=NL;if(this.#t.serverMaxWindowBits){if(!UL(this.#t.serverMaxWindowBits)){A(new Error("Invalid server_max_window_bits"));return}s=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=SL({windowBits:s})}catch(o){A(o);return}this.#e[ri]=[],this.#e[Vs]=0,this.#e.on("data",o=>{if(this.#e[Vs]+=o.length,this.#r>0&&this.#e[Vs]>this.#r){A(new GL),this.#e.removeAllListeners(),this.#e=null;return}this.#e[ri].push(o)}),this.#e.on("error",o=>{this.#e=null,A(o)})}this.#e.write(e),r&&this.#e.write(LL),this.#e.flush(()=>{if(!this.#e)return;let s=Buffer.concat(this.#e[ri],this.#e[Vs]);this.#e[ri].length=0,this.#e[Vs]=0,A(null,s)})}};pf.exports={PerMessageDeflate:gl}});var Nf=B(($P,Sf)=>{"use strict";var{Writable:ML}=require("node:stream"),vL=require("node:assert"),{parserStates:Ne,opcodes:_A,states:xL,emptyBuffer:wf,sentCloseFrameState:yf}=Or(),{kReadyState:OL,kSentClose:Rf,kResponse:Df,kReceivedClose:Tf}=xs(),{channels:Ai}=jr(),{isValidStatusCode:YL,isValidOpcode:_L,failWebsocketConnection:Je,websocketMessageReceived:bf,utf8Decode:JL,isControlFrame:ll,isTextBinaryFrame:ul,isContinuationFrame:PL}=_s(),{WebsocketFrameSend:kf}=$n(),{closeWebSocketConnection:Ff}=cl(),{PerMessageDeflate:HL}=mf(),{MessageSizeExceededError:El}=Y();function qs(t,e,r){Ff(t,e,r,Buffer.byteLength(r)),Je(t,r)}var hl=class extends ML{#e=[];#t=0;#r=0;#o=!1;#s=Ne.INFO;#A={};#n=[];#i;#c;#a;constructor(e,r,A={}){super(),this.ws=e,this.#i=r??new Map,this.#c=A.maxFragments??0,this.#a=A.maxPayloadSize??0,this.#i.has("permessage-deflate")&&this.#i.set("permessage-deflate",new HL(r,A))}_write(e,r,A){this.#e.push(e),this.#r+=e.length,this.#o=!0,this.run(A)}#g(){return this.#a>0&&!ll(this.#A.opcode)&&this.#A.payloadLength+this.#t>this.#a?(qs(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(e){for(;this.#o;)if(this.#s===Ne.INFO){if(this.#r<2)return e();let r=this.consume(2),A=(r[0]&128)!==0,s=r[0]&15,o=(r[1]&128)===128,n=!A&&s!==_A.CONTINUATION,i=r[1]&127,a=r[0]&64,c=r[0]&32,g=r[0]&16;if(!_L(s))return Je(this.ws,"Invalid opcode received"),e();if(o)return Je(this.ws,"Frame cannot be masked"),e();if(a!==0&&!this.#i.has("permessage-deflate")){Je(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||g!==0){Je(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(n&&!ul(s)){Je(this.ws,"Invalid frame type was fragmented.");return}if(ul(s)&&this.#n.length>0){Je(this.ws,"Expected continuation frame");return}if(this.#A.fragmented&&n){Je(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((i>125||n)&&ll(s)){Je(this.ws,"Control frame either too large or fragmented");return}if(PL(s)&&this.#n.length===0&&!this.#A.compressed){Je(this.ws,"Unexpected continuation frame");return}if(i<=125){if(this.#A.payloadLength=i,this.#s=Ne.READ_DATA,!this.#g())return}else i===126?this.#s=Ne.PAYLOADLENGTH_16:i===127&&(this.#s=Ne.PAYLOADLENGTH_64);ul(s)&&(this.#A.binaryType=s,this.#A.compressed=a!==0),this.#A.opcode=s,this.#A.masked=o,this.#A.fin=A,this.#A.fragmented=n}else if(this.#s===Ne.PAYLOADLENGTH_16){if(this.#r<2)return e();let r=this.consume(2);if(this.#A.payloadLength=r.readUInt16BE(0),this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.PAYLOADLENGTH_64){if(this.#r<8)return e();let r=this.consume(8),A=r.readUInt32BE(0),s=r.readUInt32BE(4);if(A!==0||s>2**31-1){Je(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#A.payloadLength=s,this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.READ_DATA){if(this.#r{if(A){let o=A instanceof El?1009:1007;qs(this.ws,o,A.message);return}if(this.writeFragments(s)){if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}if(!this.#A.fin){this.#s=Ne.INFO,this.#o=!0,this.run(e);return}bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#o=!0,this.#s=Ne.INFO,this.run(e)}}),this.#o=!1;break}else{if(!this.writeFragments(r))return;if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}!this.#A.fragmented&&this.#A.fin&&bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#s=Ne.INFO}}}consume(e){if(e>this.#r)throw new Error("Called consume() before buffers satiated.");if(e===0)return wf;if(this.#e[0].length===e)return this.#r-=this.#e[0].length,this.#e.shift();let r=Buffer.allocUnsafe(e),A=0;for(;A!==e;){let s=this.#e[0],{length:o}=s;if(o+A===e){r.set(this.#e.shift(),A);break}else if(o+A>e){r.set(s.subarray(0,e-A),A),this.#e[0]=s.subarray(e-A);break}else r.set(this.#e.shift(),A),A+=s.length}return this.#r-=e,r}writeFragments(e){return this.#c>0&&this.#n.length===this.#c?(qs(this.ws,1008,"Too many message fragments"),!1):(this.#t+=e.length,this.#n.push(e),!0)}consumeFragments(){let e=this.#n;if(e.length===1)return this.#t=0,e.shift();let r=Buffer.concat(e,this.#t);return this.#n=[],this.#t=0,r}parseCloseBody(e){vL(e.length!==1);let r;if(e.length>=2&&(r=e.readUInt16BE(0)),r!==void 0&&!YL(r))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);A[0]===239&&A[1]===187&&A[2]===191&&(A=A.subarray(3));try{A=JL(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:r,reason:A,error:!1}}parseControlFrame(e){let{opcode:r,payloadLength:A}=this.#A;if(r===_A.CLOSE){if(A===1)return Je(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#A.closeInfo=this.parseCloseBody(e),this.#A.closeInfo.error){let{code:s,reason:o}=this.#A.closeInfo;return Ff(this.ws,s,o,o.length),Je(this.ws,o),!1}if(this.ws[Rf]!==yf.SENT){let s=wf;this.#A.closeInfo.code&&(s=Buffer.allocUnsafe(2),s.writeUInt16BE(this.#A.closeInfo.code,0));let o=new kf(s);this.ws[Df].socket.write(o.createFrame(_A.CLOSE),n=>{n||(this.ws[Rf]=yf.SENT)})}return this.ws[OL]=xL.CLOSING,this.ws[Tf]=!0,!1}else if(r===_A.PING){if(!this.ws[Tf]){let s=new kf(e);this.ws[Df].socket.write(s.createFrame(_A.PONG)),Ai.ping.hasSubscribers&&Ai.ping.publish({payload:e})}}else r===_A.PONG&&Ai.pong.hasSubscribers&&Ai.pong.publish({payload:e});return!0}get closingInfo(){return this.#A.closeInfo}};Sf.exports={ByteParser:hl}});var vf=B((eH,Mf)=>{"use strict";var{WebsocketFrameSend:VL}=$n(),{opcodes:Uf,sendHints:JA}=Or(),qL=fc(),Gf=Buffer[Symbol.species],Ql=class{#e=new qL;#t=!1;#r;constructor(e){this.#r=e}add(e,r,A){if(A!==JA.blob){let o=Lf(e,A);if(!this.#t)this.#r.write(o,r);else{let n={promise:null,callback:r,frame:o};this.#e.push(n)}return}let s={promise:e.arrayBuffer().then(o=>{s.promise=null,s.frame=Lf(o,A)}),callback:r,frame:null};this.#e.push(s),this.#t||this.#o()}async#o(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let r=e.shift();r.promise!==null&&await r.promise,this.#r.write(r.frame,r.callback),r.callback=r.frame=null}this.#t=!1}};function Lf(t,e){return new VL(WL(t,e)).createFrame(e===JA.string?Uf.TEXT:Uf.BINARY)}function WL(t,e){switch(e){case JA.string:return Buffer.from(t);case JA.arrayBuffer:case JA.blob:return new Gf(t);case JA.typedArray:return new Gf(t.buffer,t.byteOffset,t.byteLength)}}Mf.exports={SendQueue:Ql}});var Wf=B((tH,qf)=>{"use strict";var{webidl:U}=Qe(),{URLSerializer:zL}=Te(),{environmentSettingsObject:xf}=Ge(),{staticPropertyDescriptors:or,states:Ws,sentCloseFrameState:ZL,sendHints:si}=Or(),{kWebSocketURL:Of,kReadyState:Bl,kController:Yf,kBinaryType:oi,kResponse:_f,kSentClose:jL,kByteParser:KL}=xs(),{isConnecting:XL,isEstablished:$L,isClosing:eM,isValidSubprotocol:tM,fireEvent:Jf}=_s(),{establishWebSocketConnection:rM,closeWebSocketConnection:Pf}=cl(),{ByteParser:AM}=Nf(),{kEnumerableProperty:Ze,isBlobLike:Hf}=M(),{getGlobalDispatcher:sM}=fn(),{types:Vf}=require("node:util"),{ErrorEvent:oM,CloseEvent:nM}=xA(),{SendQueue:iM}=vf(),Pe=class t extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#o="";#s;constructor(e,r=[]){super(),U.util.markAsUncloneable(this);let A="WebSocket constructor";U.argumentLengthCheck(arguments,1,A);let s=U.converters["DOMString or sequence or WebSocketInit"](r,A,"options");e=U.converters.USVString(e,A,"url"),r=s.protocols;let o=xf.settingsObject.baseUrl,n;try{n=new URL(e,o)}catch(a){throw new DOMException(a,"SyntaxError")}if(n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),n.protocol!=="ws:"&&n.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${n.protocol}`,"SyntaxError");if(n.hash||n.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof r=="string"&&(r=[r]),r.length!==new Set(r.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(r.length>0&&!r.every(a=>tM(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[Of]=new URL(n.href);let i=xf.settingsObject;this[Yf]=rM(n,r,i,this,(a,c)=>this.#A(a,c),s),this[Bl]=t.CONNECTING,this[jL]=ZL.NOT_SENT,this[oi]="blob"}close(e=void 0,r=void 0){U.brandCheck(this,t);let A="WebSocket.close";if(e!==void 0&&(e=U.converters["unsigned short"](e,A,"code",{clamp:!0})),r!==void 0&&(r=U.converters.USVString(r,A,"reason")),e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");let s=0;if(r!==void 0&&(s=Buffer.byteLength(r),s>123))throw new DOMException(`Reason must be less than 123 bytes; received ${s}`,"SyntaxError");Pf(this,e,r,s)}send(e){U.brandCheck(this,t);let r="WebSocket.send";if(U.argumentLengthCheck(arguments,1,r),e=U.converters.WebSocketSendData(e,r,"data"),XL(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!$L(this)||eM(this)))if(typeof e=="string"){let A=Buffer.byteLength(e);this.#t+=A,this.#s.add(e,()=>{this.#t-=A},si.string)}else Vf.isArrayBuffer(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.arrayBuffer)):ArrayBuffer.isView(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.typedArray)):Hf(e)&&(this.#t+=e.size,this.#s.add(e,()=>{this.#t-=e.size},si.blob))}get readyState(){return U.brandCheck(this,t),this[Bl]}get bufferedAmount(){return U.brandCheck(this,t),this.#t}get url(){return U.brandCheck(this,t),zL(this[Of])}get extensions(){return U.brandCheck(this,t),this.#o}get protocol(){return U.brandCheck(this,t),this.#r}get onopen(){return U.brandCheck(this,t),this.#e.open}set onopen(e){U.brandCheck(this,t),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onerror(){return U.brandCheck(this,t),this.#e.error}set onerror(e){U.brandCheck(this,t),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}get onclose(){return U.brandCheck(this,t),this.#e.close}set onclose(e){U.brandCheck(this,t),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof e=="function"?(this.#e.close=e,this.addEventListener("close",e)):this.#e.close=null}get onmessage(){return U.brandCheck(this,t),this.#e.message}set onmessage(e){U.brandCheck(this,t),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get binaryType(){return U.brandCheck(this,t),this[oi]}set binaryType(e){U.brandCheck(this,t),e!=="blob"&&e!=="arraybuffer"?this[oi]="blob":this[oi]=e}#A(e,r){this[_f]=e;let A=this[Yf]?.dispatcher?.webSocketOptions,s=A?.maxFragments,o=A?.maxPayloadSize,n=new AM(this,r,{maxFragments:s,maxPayloadSize:o});n.on("drain",aM),n.on("error",cM.bind(this)),e.socket.ws=this,this[KL]=n,this.#s=new iM(e.socket),this[Bl]=Ws.OPEN;let i=e.headersList.get("sec-websocket-extensions");i!==null&&(this.#o=i);let a=e.headersList.get("sec-websocket-protocol");a!==null&&(this.#r=a),Jf("open",this)}};Pe.CONNECTING=Pe.prototype.CONNECTING=Ws.CONNECTING;Pe.OPEN=Pe.prototype.OPEN=Ws.OPEN;Pe.CLOSING=Pe.prototype.CLOSING=Ws.CLOSING;Pe.CLOSED=Pe.prototype.CLOSED=Ws.CLOSED;Object.defineProperties(Pe.prototype,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or,url:Ze,readyState:Ze,bufferedAmount:Ze,onopen:Ze,onerror:Ze,onclose:Ze,close:Ze,onmessage:Ze,binaryType:Ze,send:Ze,extensions:Ze,protocol:Ze,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Pe,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or});U.converters["sequence"]=U.sequenceConverter(U.converters.DOMString);U.converters["DOMString or sequence"]=function(t,e,r){return U.util.Type(t)==="Object"&&Symbol.iterator in t?U.converters["sequence"](t):U.converters.DOMString(t,e,r)};U.converters.WebSocketInit=U.dictionaryConverter([{key:"protocols",converter:U.converters["DOMString or sequence"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:U.converters.any,defaultValue:()=>sM()},{key:"headers",converter:U.nullableConverter(U.converters.HeadersInit)}]);U.converters["DOMString or sequence or WebSocketInit"]=function(t){return U.util.Type(t)==="Object"&&!(Symbol.iterator in t)?U.converters.WebSocketInit(t):{protocols:U.converters["DOMString or sequence"](t)}};U.converters.WebSocketSendData=function(t){if(U.util.Type(t)==="Object"){if(Hf(t))return U.converters.Blob(t,{strict:!1});if(ArrayBuffer.isView(t)||Vf.isArrayBuffer(t))return U.converters.BufferSource(t)}return U.converters.USVString(t)};function aM(){this.ws[_f].socket.resume()}function cM(t){let e,r;t instanceof nM?(e=t.reason,r=t.code):e=t.message,Jf("error",this,()=>new oM("error",{error:t,message:e})),Pf(this,r)}qf.exports={WebSocket:Pe}});var Il=B((rH,zf)=>{"use strict";function gM(t){return t.indexOf("\0")===-1}function lM(t){if(t.length===0)return!1;for(let e=0;e57)return!1;return!0}function uM(t){return new Promise(e=>{setTimeout(e,t).unref()})}zf.exports={isValidLastEventId:gM,isASCIINumber:lM,delay:uM}});var Xf=B((AH,Kf)=>{"use strict";var{Transform:EM}=require("node:stream"),{isASCIINumber:Zf,isValidLastEventId:jf}=Il(),vt=[239,187,191],Cl=10,ni=13,hM=58,QM=32,dl=class extends EM{state=null;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,r,A){if(e.length===0){A();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===vt[0]){A();return}this.checkBOM=!1,A();return;case 2:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]){A();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,A();return}this.checkBOM=!1;break;default:this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1;break}for(;this.pos0&&(r[s]=o);break}}processEvent(e){e.retry&&Zf(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&jf(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};Kf.exports={EventSourceStream:dl}});var np=B((sH,op)=>{"use strict";var{pipeline:BM}=require("node:stream"),{fetching:IM}=Gs(),{makeRequest:CM}=NA(),{webidl:xt}=Qe(),{EventSourceStream:dM}=Xf(),{parseMIMEType:fM}=Te(),{createFastMessageEvent:pM}=xA(),{isNetworkError:$f}=Ns(),{delay:mM}=Il(),{kEnumerableProperty:Yr}=M(),{environmentSettingsObject:ep}=Ge(),tp=!1,rp=3e3,zs=0,Ap=1,Zs=2,wM="anonymous",yM="use-credentials",PA=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#o=zs;#s=null;#A=null;#n;#i;constructor(e,r={}){super(),xt.util.markAsUncloneable(this);let A="EventSource constructor";xt.argumentLengthCheck(arguments,1,A),tp||(tp=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=xt.converters.USVString(e,A,"url"),r=xt.converters.EventSourceInitDict(r,A,"eventSourceInitDict"),this.#n=r.dispatcher,this.#i={lastEventId:"",reconnectionTime:rp};let s=ep,o;try{o=new URL(e,s.settingsObject.baseUrl),this.#i.origin=o.origin}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=o.href;let n=wM;r.withCredentials&&(n=yM,this.#r=!0);let i={redirect:"follow",keepalive:!0,mode:"cors",credentials:n==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};i.client=ep.settingsObject,i.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],i.cache="no-store",i.initiator="other",i.urlList=[new URL(this.#t)],this.#s=CM(i),this.#c()}get readyState(){return this.#o}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#o===Zs)return;this.#o=zs;let e={request:this.#s,dispatcher:this.#n},r=A=>{$f(A)&&(this.dispatchEvent(new Event("error")),this.close()),this.#a()};e.processResponseEndOfBody=r,e.processResponse=A=>{if($f(A))if(A.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#a();return}let s=A.headersList.get("content-type",!0),o=s!==null?fM(s):"failure",n=o!=="failure"&&o.essence==="text/event-stream";if(A.status!==200||n===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#o=Ap,this.dispatchEvent(new Event("open")),this.#i.origin=A.urlList[A.urlList.length-1].origin;let i=new dM({eventSourceSettings:this.#i,push:a=>{this.dispatchEvent(pM(a.type,a.options))}});BM(A.body.stream,i,a=>{a?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#A=IM(e)}async#a(){this.#o!==Zs&&(this.#o=zs,this.dispatchEvent(new Event("error")),await mM(this.#i.reconnectionTime),this.#o===zs&&(this.#i.lastEventId.length&&this.#s.headersList.set("last-event-id",this.#i.lastEventId,!0),this.#c()))}close(){xt.brandCheck(this,t),this.#o!==Zs&&(this.#o=Zs,this.#A.abort(),this.#s=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}},sp={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:zs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:Ap,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:Zs,writable:!1}};Object.defineProperties(PA,sp);Object.defineProperties(PA.prototype,sp);Object.defineProperties(PA.prototype,{close:Yr,onerror:Yr,onmessage:Yr,onopen:Yr,readyState:Yr,url:Yr,withCredentials:Yr});xt.converters.EventSourceInitDict=xt.dictionaryConverter([{key:"withCredentials",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:xt.converters.any}]);op.exports={EventSource:PA,defaultReconnectionTime:rp}});var ci=B((oH,N)=>{"use strict";var RM=BA(),ip=$A(),DM=IA(),TM=AB(),bM=CA(),kM=Yc(),FM=TB(),SM=GB(),ap=Y(),ai=M(),{InvalidArgumentError:ii}=ap,HA=fI(),NM=ts(),UM=pg(),GM=rC(),LM=yg(),MM=ag(),vM=gn(),{getGlobalDispatcher:cp,setGlobalDispatcher:xM}=fn(),OM=pn(),YM=Xo(),_M=$o();Object.assign(ip.prototype,HA);N.exports.Dispatcher=ip;N.exports.Client=RM;N.exports.Pool=DM;N.exports.BalancedPool=TM;N.exports.Agent=bM;N.exports.ProxyAgent=kM;N.exports.EnvHttpProxyAgent=FM;N.exports.RetryAgent=SM;N.exports.RetryHandler=vM;N.exports.DecoratorHandler=OM;N.exports.RedirectHandler=YM;N.exports.createRedirectInterceptor=_M;N.exports.interceptors={redirect:cC(),retry:lC(),dump:EC(),dns:BC()};N.exports.buildConnector=NM;N.exports.errors=ap;N.exports.util={parseHeaders:ai.parseHeaders,headerNameToString:ai.headerNameToString};function js(t){return(e,r,A)=>{if(typeof r=="function"&&(A=r,r=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new ii("invalid url");if(r!=null&&typeof r!="object")throw new ii("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new ii("invalid opts.path");let n=r.path;r.path.startsWith("/")||(n=`/${n}`),e=new URL(ai.parseOrigin(e).origin+n)}else r||(r=typeof e=="object"?e:{}),e=ai.parseURL(e);let{agent:s,dispatcher:o=cp()}=r;if(s)throw new ii("unsupported opts.agent. Did you mean opts.client?");return t.call(o,{...r,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:r.method||(r.body?"PUT":"GET")},A)}}N.exports.setGlobalDispatcher=xM;N.exports.getGlobalDispatcher=cp;var JM=Gs().fetch;N.exports.fetch=async function(e,r=void 0){try{return await JM(e,r)}catch(A){throw A&&typeof A=="object"&&Error.captureStackTrace(A),A}};N.exports.Headers=Ur().Headers;N.exports.Response=Ns().Response;N.exports.Request=NA().Request;N.exports.FormData=as().FormData;N.exports.File=globalThis.File??require("node:buffer").File;N.exports.FileReader=Nd().FileReader;var{setGlobalOrigin:PM,getGlobalOrigin:HM}=_a();N.exports.setGlobalOrigin=PM;N.exports.getGlobalOrigin=HM;var{CacheStorage:VM}=_d(),{kConstruct:qM}=Jn();N.exports.caches=new VM(qM);var{deleteCookie:WM,getCookies:zM,getSetCookies:ZM,setCookie:jM}=Xd();N.exports.deleteCookie=WM;N.exports.getCookies=zM;N.exports.getSetCookies=ZM;N.exports.setCookie=jM;var{parseMIMEType:KM,serializeAMimeType:XM}=Te();N.exports.parseMIMEType=KM;N.exports.serializeAMimeType=XM;var{CloseEvent:$M,ErrorEvent:ev,MessageEvent:tv}=xA();N.exports.WebSocket=Wf().WebSocket;N.exports.CloseEvent=$M;N.exports.ErrorEvent=ev;N.exports.MessageEvent=tv;N.exports.request=js(HA.request);N.exports.stream=js(HA.stream);N.exports.pipeline=js(HA.pipeline);N.exports.connect=js(HA.connect);N.exports.upgrade=js(HA.upgrade);N.exports.MockClient=UM;N.exports.MockPool=LM;N.exports.MockAgent=GM;N.exports.mockErrors=MM;var{EventSource:rv}=np();N.exports.EventSource=rv});var Up=B(Ci=>{"use strict";Object.defineProperty(Ci,"__esModule",{value:!0});Ci.getProxyUrl=Rv;Ci.checkBypass=Np;function Rv(t){let e=t.protocol==="https:";if(Np(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new Ii(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new Ii(`http://${r}`)}else return}function Np(t){if(!t.hostname)return!1;let e=t.hostname;if(Dv(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Dv(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var Ii=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}}});var Lp=B(re=>{"use strict";var Tv=re&&re.__createBinding||(Object.create?(function(t,e,r,A){A===void 0&&(A=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,A,s)}):(function(t,e,r,A){A===void 0&&(A=r),t[A]=e[r]})),bv=re&&re.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),mi=re&&re.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var A=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(A[A.length]=s);return A},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var A=t(e),s=0;sae(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ae(this,void 0,void 0,function*(){return new Promise(e=>ae(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};re.HttpClientResponse=pi;function Mv(t){return new URL(t).protocol==="https:"}var vl=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ae(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ae(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ae(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ae(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ae(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ae(this,arguments,void 0,function*(r,A={}){A[ye.Accept]=this._getExistingOrDefaultHeader(A,ye.Accept,Yt.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ae(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&Uv.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===Ke.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Sv.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!Nv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pi(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Ml.getProxyUrl(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?Gp:Ll;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},ro(this.requestOptions.headers),ro(e||{})):ro(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=ro(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=ro(this.requestOptions.headers)[ye.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[ye.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Ml.getProxyUrl(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||Ll.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?di.httpsOverHttps:di.httpsOverHttp:a=c?di.httpOverHttps:di.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new Gp.Agent(i):new Ll.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new kv.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ae(this,void 0,void 0,function*(){e=Math.min(Gv,e);let r=Lv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ae(this,void 0,void 0,function*(){return new Promise((A,s)=>ae(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===Ke.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fi(g,o);l.result=n.result,s(l)}else A(n)}))})}};re.HttpClient=vl;var ro=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{})});var nm=B(yi=>{"use strict";Object.defineProperty(yi,"__esModule",{value:!0});yi.format=sx;yi.parse=ox;var tx=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,tm=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rx=/[\\"]/g,Ax=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rm=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function sx(t){let{type:e,parameters:r}=t;if(!e||!Ax.test(e))throw new TypeError(`Invalid type: ${e}`);let A=e;if(r)for(let s of Object.keys(r)){if(!tm.test(s))throw new TypeError(`Invalid parameter name: ${s}`);A+=`; ${s}=${cx(r[s])}`}return A}function ox(t,e){let r=t.length,A=Pl(t,0,r),s=A;A=Jl(t,A,r);let o=Hl(t,s,A),n=t.slice(s,o).toLowerCase(),i=e?.parameters===!1?new rm:ax(t,A,r);return{type:n,parameters:i}}var Am=32,sm=9,om=59,nx=61,em=34,ix=92;function ax(t,e,r){let A=new rm;e:for(;ee;){let A=t.charCodeAt(r-1);if(A!==Am&&A!==sm)break;r--}return r}function cx(t){if(tm.test(t))return t;if(tx.test(t))return`"${t.replace(rx,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var zA=B((Y2,Sm)=>{"use strict";var Px="2.0.0",Hx=Number.MAX_SAFE_INTEGER||9007199254740991,Vx=16,qx=250,Wx=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Sm.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Vx,MAX_SAFE_BUILD_LENGTH:qx,MAX_SAFE_INTEGER:Hx,RELEASE_TYPES:Wx,SEMVER_SPEC_VERSION:Px,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var oo=B((_2,Nm)=>{"use strict";var zx=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};Nm.exports=zx});var ZA=B((mt,Um)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:ou,MAX_SAFE_BUILD_LENGTH:Zx,MAX_LENGTH:jx}=zA(),Kx=oo();mt=Um.exports={};var Xx=mt.re=[],$x=mt.safeRe=[],m=mt.src=[],eO=mt.safeSrc=[],w=mt.t={},tO=0,nu="[a-zA-Z0-9-]",rO=[["\\s",1],["\\d",jx],[nu,Zx]],AO=t=>{for(let[e,r]of rO)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},G=(t,e,r)=>{let A=AO(e),s=tO++;Kx(t,s,e),w[t]=s,m[s]=e,eO[s]=A,Xx[s]=new RegExp(e,r?"g":void 0),$x[s]=new RegExp(A,r?"g":void 0)};G("NUMERICIDENTIFIER","0|[1-9]\\d*");G("NUMERICIDENTIFIERLOOSE","\\d+");G("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${nu}*`);G("MAINVERSION",`(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})`);G("MAINVERSIONLOOSE",`(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASEIDENTIFIER",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIER]})`);G("PRERELEASEIDENTIFIERLOOSE",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASE",`(?:-(${m[w.PRERELEASEIDENTIFIER]}(?:\\.${m[w.PRERELEASEIDENTIFIER]})*))`);G("PRERELEASELOOSE",`(?:-?(${m[w.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${m[w.PRERELEASEIDENTIFIERLOOSE]})*))`);G("BUILDIDENTIFIER",`${nu}+`);G("BUILD",`(?:\\+(${m[w.BUILDIDENTIFIER]}(?:\\.${m[w.BUILDIDENTIFIER]})*))`);G("FULLPLAIN",`v?${m[w.MAINVERSION]}${m[w.PRERELEASE]}?${m[w.BUILD]}?`);G("FULL",`^${m[w.FULLPLAIN]}$`);G("LOOSEPLAIN",`[v=\\s]*${m[w.MAINVERSIONLOOSE]}${m[w.PRERELEASELOOSE]}?${m[w.BUILD]}?`);G("LOOSE",`^${m[w.LOOSEPLAIN]}$`);G("GTLT","((?:<|>)?=?)");G("XRANGEIDENTIFIERLOOSE",`${m[w.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);G("XRANGEIDENTIFIER",`${m[w.NUMERICIDENTIFIER]}|x|X|\\*`);G("XRANGEPLAIN",`[v=\\s]*(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:${m[w.PRERELEASE]})?${m[w.BUILD]}?)?)?`);G("XRANGEPLAINLOOSE",`[v=\\s]*(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:${m[w.PRERELEASELOOSE]})?${m[w.BUILD]}?)?)?`);G("XRANGE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAIN]}$`);G("XRANGELOOSE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAINLOOSE]}$`);G("COERCEPLAIN",`(^|[^\\d])(\\d{1,${ou}})(?:\\.(\\d{1,${ou}}))?(?:\\.(\\d{1,${ou}}))?`);G("COERCE",`${m[w.COERCEPLAIN]}(?:$|[^\\d])`);G("COERCEFULL",m[w.COERCEPLAIN]+`(?:${m[w.PRERELEASE]})?(?:${m[w.BUILD]})?(?:$|[^\\d])`);G("COERCERTL",m[w.COERCE],!0);G("COERCERTLFULL",m[w.COERCEFULL],!0);G("LONETILDE","(?:~>?)");G("TILDETRIM",`(\\s*)${m[w.LONETILDE]}\\s+`,!0);mt.tildeTrimReplace="$1~";G("TILDE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAIN]}$`);G("TILDELOOSE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAINLOOSE]}$`);G("LONECARET","(?:\\^)");G("CARETTRIM",`(\\s*)${m[w.LONECARET]}\\s+`,!0);mt.caretTrimReplace="$1^";G("CARET",`^${m[w.LONECARET]}${m[w.XRANGEPLAIN]}$`);G("CARETLOOSE",`^${m[w.LONECARET]}${m[w.XRANGEPLAINLOOSE]}$`);G("COMPARATORLOOSE",`^${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]})$|^$`);G("COMPARATOR",`^${m[w.GTLT]}\\s*(${m[w.FULLPLAIN]})$|^$`);G("COMPARATORTRIM",`(\\s*)${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]}|${m[w.XRANGEPLAIN]})`,!0);mt.comparatorTrimReplace="$1$2$3";G("HYPHENRANGE",`^\\s*(${m[w.XRANGEPLAIN]})\\s+-\\s+(${m[w.XRANGEPLAIN]})\\s*$`);G("HYPHENRANGELOOSE",`^\\s*(${m[w.XRANGEPLAINLOOSE]})\\s+-\\s+(${m[w.XRANGEPLAINLOOSE]})\\s*$`);G("STAR","(<|>)?=?\\s*\\*");G("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");G("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var bi=B((J2,Gm)=>{"use strict";var sO=Object.freeze({loose:!0}),oO=Object.freeze({}),nO=t=>t?typeof t!="object"?sO:t:oO;Gm.exports=nO});var iu=B((P2,vm)=>{"use strict";var Lm=/^[0-9]+$/,Mm=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:tMm(e,t);vm.exports={compareIdentifiers:Mm,rcompareIdentifiers:iO}});var Be=B((H2,Om)=>{"use strict";var ki=oo(),{MAX_LENGTH:xm,MAX_SAFE_INTEGER:Fi}=zA(),{safeRe:Si,t:Ni}=ZA(),aO=bi(),{compareIdentifiers:au}=iu(),cO=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let A=0;Axm)throw new TypeError(`version is longer than ${xm} characters`);ki("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let A=e.trim().match(r.loose?Si[Ni.LOOSE]:Si[Ni.FULL]);if(!A)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+A[1],this.minor=+A[2],this.patch=+A[3],this.major>Fi||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Fi||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Fi||this.patch<0)throw new TypeError("Invalid patch version");A[4]?this.prerelease=A[4].split(".").map(s=>{if(/^[0-9]+$/.test(s)){let o=+s;if(o>=0&&oe.major?1:this.minore.minor?1:this.patche.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let A=this.prerelease[r],s=e.prerelease[r];if(ki("prerelease compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let A=this.build[r],s=e.build[r];if(ki("build compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}inc(e,r,A){if(e.startsWith("pre")){if(!r&&A===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let s=`-${r}`.match(this.options.loose?Si[Ni.PRERELEASELOOSE]:Si[Ni.PRERELEASE]);if(!s||s[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,A);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,A);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,A),this.inc("pre",r,A);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,A),this.inc("pre",r,A);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let s=Number(A)?1:0;if(this.prerelease.length===0)this.prerelease=[s];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&A===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(s)}}if(r){let o=[r,s];if(A===!1&&(o=[r]),cO(this.prerelease,r)){let n=this.prerelease[r.split(".").length];isNaN(n)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};Om.exports=cu});var ur=B((V2,_m)=>{"use strict";var Ym=Be(),gO=(t,e,r=!1)=>{if(t instanceof Ym)return t;try{return new Ym(t,e)}catch(A){if(!r)return null;throw A}};_m.exports=gO});var Pm=B((q2,Jm)=>{"use strict";var lO=ur(),uO=(t,e)=>{let r=lO(t,e);return r?r.version:null};Jm.exports=uO});var Vm=B((W2,Hm)=>{"use strict";var EO=ur(),hO=(t,e)=>{let r=EO(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};Hm.exports=hO});var zm=B((z2,Wm)=>{"use strict";var qm=Be(),QO=(t,e,r,A,s)=>{typeof r=="string"&&(s=A,A=r,r=void 0);try{return new qm(t instanceof qm?t.version:t,r).inc(e,A,s).version}catch{return null}};Wm.exports=QO});var Km=B((Z2,jm)=>{"use strict";var Zm=ur(),BO=(t,e)=>{let r=Zm(t,null,!0),A=Zm(e,null,!0),s=r.compare(A);if(s===0)return null;let o=s>0,n=o?r:A,i=o?A:r,a=!!n.prerelease.length;if(!!i.prerelease.length&&!a){if(!i.patch&&!i.minor)return"major";if(i.compareMain(n)===0)return i.minor&&!i.patch?"minor":"patch"}let g=a?"pre":"";return r.major!==A.major?g+"major":r.minor!==A.minor?g+"minor":r.patch!==A.patch?g+"patch":"prerelease"};jm.exports=BO});var $m=B((j2,Xm)=>{"use strict";var IO=Be(),CO=(t,e)=>new IO(t,e).major;Xm.exports=CO});var tw=B((K2,ew)=>{"use strict";var dO=Be(),fO=(t,e)=>new dO(t,e).minor;ew.exports=fO});var Aw=B((X2,rw)=>{"use strict";var pO=Be(),mO=(t,e)=>new pO(t,e).patch;rw.exports=mO});var ow=B(($2,sw)=>{"use strict";var wO=ur(),yO=(t,e)=>{let r=wO(t,e);return r&&r.prerelease.length?r.prerelease:null};sw.exports=yO});var Xe=B((eV,iw)=>{"use strict";var nw=Be(),RO=(t,e,r)=>new nw(t,r).compare(new nw(e,r));iw.exports=RO});var cw=B((tV,aw)=>{"use strict";var DO=Xe(),TO=(t,e,r)=>DO(e,t,r);aw.exports=TO});var lw=B((rV,gw)=>{"use strict";var bO=Xe(),kO=(t,e)=>bO(t,e,!0);gw.exports=kO});var Ui=B((AV,Ew)=>{"use strict";var uw=Be(),FO=(t,e,r)=>{let A=new uw(t,r),s=new uw(e,r);return A.compare(s)||A.compareBuild(s)};Ew.exports=FO});var Qw=B((sV,hw)=>{"use strict";var SO=Ui(),NO=(t,e)=>t.sort((r,A)=>SO(r,A,e));hw.exports=NO});var Iw=B((oV,Bw)=>{"use strict";var UO=Ui(),GO=(t,e)=>t.sort((r,A)=>UO(A,r,e));Bw.exports=GO});var no=B((nV,Cw)=>{"use strict";var LO=Xe(),MO=(t,e,r)=>LO(t,e,r)>0;Cw.exports=MO});var Gi=B((iV,dw)=>{"use strict";var vO=Xe(),xO=(t,e,r)=>vO(t,e,r)<0;dw.exports=xO});var gu=B((aV,fw)=>{"use strict";var OO=Xe(),YO=(t,e,r)=>OO(t,e,r)===0;fw.exports=YO});var lu=B((cV,pw)=>{"use strict";var _O=Xe(),JO=(t,e,r)=>_O(t,e,r)!==0;pw.exports=JO});var Li=B((gV,mw)=>{"use strict";var PO=Xe(),HO=(t,e,r)=>PO(t,e,r)>=0;mw.exports=HO});var Mi=B((lV,ww)=>{"use strict";var VO=Xe(),qO=(t,e,r)=>VO(t,e,r)<=0;ww.exports=qO});var uu=B((uV,yw)=>{"use strict";var WO=gu(),zO=lu(),ZO=no(),jO=Li(),KO=Gi(),XO=Mi(),$O=(t,e,r,A)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return WO(t,r,A);case"!=":return zO(t,r,A);case">":return ZO(t,r,A);case">=":return jO(t,r,A);case"<":return KO(t,r,A);case"<=":return XO(t,r,A);default:throw new TypeError(`Invalid operator: ${e}`)}};yw.exports=$O});var Dw=B((EV,Rw)=>{"use strict";var eY=Be(),tY=ur(),{safeRe:vi,t:xi}=ZA(),rY=(t,e)=>{if(t instanceof eY)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?vi[xi.COERCEFULL]:vi[xi.COERCE]);else{let a=e.includePrerelease?vi[xi.COERCERTLFULL]:vi[xi.COERCERTL],c;for(;(c=a.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||c.index+c[0].length!==r.index+r[0].length)&&(r=c),a.lastIndex=c.index+c[1].length+c[2].length;a.lastIndex=-1}if(r===null)return null;let A=r[2],s=r[3]||"0",o=r[4]||"0",n=e.includePrerelease&&r[5]?`-${r[5]}`:"",i=e.includePrerelease&&r[6]?`+${r[6]}`:"";return tY(`${A}.${s}.${o}${n}${i}`,e)};Rw.exports=rY});var bw=B((hV,Tw)=>{"use strict";var AY=ur(),sY=zA(),oY=Be(),nY=(t,e,r)=>{if(!sY.RELEASE_TYPES.includes(e))return null;let A=iY(t,r);return A&&aY(A,e)},iY=(t,e)=>{let r=t instanceof oY?t.version:t;return AY(r,e)},aY=(t,e)=>{if(cY(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},cY=t=>t.startsWith("pre");Tw.exports=nY});var Fw=B((QV,kw)=>{"use strict";var Eu=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let s=this.map.keys().next().value;this.delete(s)}this.map.set(e,r)}return this}};kw.exports=Eu});var $e=B((BV,Gw)=>{"use strict";var gY=/\s+/g,hu=class t{constructor(e,r){if(r=uY(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof Qu)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(gY," "),this.set=this.raw.split("||").map(A=>this.parseRange(A.trim())).filter(A=>A.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let A=this.set[0];if(this.set=this.set.filter(s=>!Nw(s[0])),this.set.length===0)this.set=[A];else if(this.set.length>1){for(let s of this.set)if(s.length===1&&pY(s[0])){this.set=[s];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e0&&(this.formatted+="||");let r=this.set[e];for(let A=0;A0&&(this.formatted+=" "),this.formatted+=r[A].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(fY,"");let A=((this.options.includePrerelease&&CY)|(this.options.loose&&dY))+":"+e,s=Sw.get(A);if(s)return s;let o=this.options.loose,n=o?Re[Ie.HYPHENRANGELOOSE]:Re[Ie.HYPHENRANGE];e=e.replace(n,NY(this.options.includePrerelease)),X("hyphen replace",e),e=e.replace(Re[Ie.COMPARATORTRIM],QY),X("comparator trim",e),e=e.replace(Re[Ie.TILDETRIM],BY),X("tilde trim",e),e=e.replace(Re[Ie.CARETTRIM],IY),X("caret trim",e);let i=e.split(" ").map(l=>mY(l,this.options)).join(" ").split(/\s+/).map(l=>SY(l,this.options));o&&(i=i.filter(l=>(X("loose invalid filter",l,this.options),!!l.match(Re[Ie.COMPARATORLOOSE])))),X("range list",i);let a=new Map,c=i.map(l=>new Qu(l,this.options));for(let l of c){if(Nw(l))return[l];a.set(l.value,l)}a.size>1&&a.has("")&&a.delete("");let g=[...a.values()];return Sw.set(A,g),g}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(A=>Uw(A,r)&&e.set.some(s=>Uw(s,r)&&A.every(o=>s.every(n=>o.intersects(n,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new EY(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",pY=t=>t.value==="",Uw=(t,e)=>{let r=!0,A=t.slice(),s=A.pop();for(;r&&A.length;)r=A.every(o=>s.intersects(o,e)),s=A.pop();return r},mY=(t,e)=>(t=t.replace(Re[Ie.BUILD],""),X("comp",t,e),t=DY(t,e),X("caret",t),t=yY(t,e),X("tildes",t),t=bY(t,e),X("xrange",t),t=FY(t,e),X("stars",t),t),ue=t=>!t||t.toLowerCase()==="x"||t==="*",wY=(t,e,r)=>ue(t)&&!ue(e)||ue(e)&&r&&!ue(r),yY=(t,e)=>t.trim().split(/\s+/).map(r=>RY(r,e)).join(" "),RY=(t,e)=>{let r=e.loose?Re[Ie.TILDELOOSE]:Re[Ie.TILDE],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("tilde",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:a?(X("replaceTilde pr",a),c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`):c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`,X("tilde return",c),c})},DY=(t,e)=>t.trim().split(/\s+/).map(r=>TY(r,e)).join(" "),TY=(t,e)=>{X("caret",t,e);let r=e.loose?Re[Ie.CARETLOOSE]:Re[Ie.CARET],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("caret",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?o==="0"?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.0${A} <${+o+1}.0.0-0`:a?(X("replaceCaret pr",a),o==="0"?n==="0"?c=`>=${o}.${n}.${i}-${a} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i}-${a} <${+o+1}.0.0-0`):(X("no pr"),o==="0"?n==="0"?c=`>=${o}.${n}.${i} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i} <${+o+1}.0.0-0`),X("caret return",c),c})},bY=(t,e)=>(X("replaceXRanges",t,e),t.split(/\s+/).map(r=>kY(r,e)).join(" ")),kY=(t,e)=>{t=t.trim();let r=e.loose?Re[Ie.XRANGELOOSE]:Re[Ie.XRANGE];return t.replace(r,(A,s,o,n,i,a)=>{if(X("xRange",t,A,s,o,n,i,a),wY(o,n,i))return t;let c=ue(o),g=c||ue(n),l=g||ue(i),u=l;return s==="="&&u&&(s=""),a=e.includePrerelease?"-0":"",c?s===">"||s==="<"?A="<0.0.0-0":A="*":s&&u?(g&&(n=0),i=0,s===">"?(s=">=",g?(o=+o+1,n=0,i=0):(n=+n+1,i=0)):s==="<="&&(s="<",g?o=+o+1:n=+n+1),s==="<"&&(a="-0"),A=`${s+o}.${n}.${i}${a}`):g?A=`>=${o}.0.0${a} <${+o+1}.0.0-0`:l&&(A=`>=${o}.${n}.0${a} <${o}.${+n+1}.0-0`),X("xRange return",A),A})},FY=(t,e)=>(X("replaceStars",t,e),t.trim().replace(Re[Ie.STAR],"")),SY=(t,e)=>(X("replaceGTE0",t,e),t.trim().replace(Re[e.includePrerelease?Ie.GTE0PRE:Ie.GTE0],"")),NY=t=>(e,r,A,s,o,n,i,a,c,g,l,u)=>(ue(A)?r="":ue(s)?r=`>=${A}.0.0${t?"-0":""}`:ue(o)?r=`>=${A}.${s}.0${t?"-0":""}`:n?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,ue(c)?a="":ue(g)?a=`<${+c+1}.0.0-0`:ue(l)?a=`<${c}.${+g+1}.0-0`:u?a=`<=${c}.${g}.${l}-${u}`:t?a=`<${c}.${g}.${+l+1}-0`:a=`<=${a}`,`${r} ${a}`.trim()),UY=(t,e,r)=>{for(let A=0;A0){let s=t[A].semver;if(s.major===e.major&&s.minor===e.minor&&s.patch===e.patch)return!0}return!1}return!0}});var io=B((IV,Yw)=>{"use strict";var ao=Symbol("SemVer ANY"),Cu=class t{static get ANY(){return ao}constructor(e,r){if(r=Lw(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),Iu("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ao?this.value="":this.value=this.operator+this.semver.version,Iu("comp",this)}parse(e){let r=this.options.loose?Mw[vw.COMPARATORLOOSE]:Mw[vw.COMPARATOR],A=e.match(r);if(!A)throw new TypeError(`Invalid comparator: ${e}`);this.operator=A[1]!==void 0?A[1]:"",this.operator==="="&&(this.operator=""),A[2]?this.semver=new xw(A[2],this.options.loose):this.semver=ao}toString(){return this.value}test(e){if(Iu("Comparator.test",e,this.options.loose),this.semver===ao||e===ao)return!0;if(typeof e=="string")try{e=new xw(e,this.options)}catch{return!1}return Bu(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Ow(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new Ow(this.value,r).test(e.semver):(r=Lw(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||Bu(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||Bu(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Yw.exports=Cu;var Lw=bi(),{safeRe:Mw,t:vw}=ZA(),Bu=uu(),Iu=oo(),xw=Be(),Ow=$e()});var co=B((CV,_w)=>{"use strict";var GY=$e(),LY=(t,e,r)=>{try{e=new GY(e,r)}catch{return!1}return e.test(t)};_w.exports=LY});var Pw=B((dV,Jw)=>{"use strict";var MY=$e(),vY=(t,e)=>new MY(t,e).set.map(r=>r.map(A=>A.value).join(" ").trim().split(" "));Jw.exports=vY});var Vw=B((fV,Hw)=>{"use strict";var xY=Be(),OY=$e(),YY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new OY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===-1)&&(A=n,s=new xY(A,r))}),A};Hw.exports=YY});var Ww=B((pV,qw)=>{"use strict";var _Y=Be(),JY=$e(),PY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new JY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===1)&&(A=n,s=new _Y(A,r))}),A};qw.exports=PY});var jw=B((mV,Zw)=>{"use strict";var du=Be(),HY=$e(),zw=no(),VY=(t,e)=>{t=new HY(t,e);let r=new du("0.0.0");if(t.test(r)||(r=new du("0.0.0-0"),t.test(r)))return r;r=null;for(let A=0;A{let i=new du(n.semver.version);switch(n.operator){case">":i.prerelease.length===0?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!o||zw(i,o))&&(o=i);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${n.operator}`)}}),o&&(!r||zw(r,o))&&(r=o)}return r&&t.test(r)?r:null};Zw.exports=VY});var Xw=B((wV,Kw)=>{"use strict";var qY=$e(),WY=(t,e)=>{try{return new qY(t,e).range||"*"}catch{return null}};Kw.exports=WY});var Oi=B((yV,ry)=>{"use strict";var zY=Be(),ty=io(),{ANY:ZY}=ty,jY=$e(),KY=co(),$w=no(),ey=Gi(),XY=Mi(),$Y=Li(),e_=(t,e,r,A)=>{t=new zY(t,A),e=new jY(e,A);let s,o,n,i,a;switch(r){case">":s=$w,o=XY,n=ey,i=">",a=">=";break;case"<":s=ey,o=$Y,n=$w,i="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(KY(t,e,A))return!1;for(let c=0;c{E.semver===ZY&&(E=new ty(">=0.0.0")),l=l||E,u=u||E,s(E.semver,l.semver,A)?l=E:n(E.semver,u.semver,A)&&(u=E)}),l.operator===i||l.operator===a||(!u.operator||u.operator===i)&&o(t,u.semver))return!1;if(u.operator===a&&n(t,u.semver))return!1}return!0};ry.exports=e_});var sy=B((RV,Ay)=>{"use strict";var t_=Oi(),r_=(t,e,r)=>t_(t,e,">",r);Ay.exports=r_});var ny=B((DV,oy)=>{"use strict";var A_=Oi(),s_=(t,e,r)=>A_(t,e,"<",r);oy.exports=s_});var cy=B((TV,ay)=>{"use strict";var iy=$e(),o_=(t,e,r)=>(t=new iy(t,r),e=new iy(e,r),t.intersects(e,r));ay.exports=o_});var ly=B((bV,gy)=>{"use strict";var n_=co(),i_=Xe();gy.exports=(t,e,r)=>{let A=[],s=null,o=null,n=t.sort((g,l)=>i_(g,l,r));for(let g of n)n_(g,e,r)?(o=g,s||(s=g)):(o&&A.push([s,o]),o=null,s=null);s&&A.push([s,null]);let i=[];for(let[g,l]of A)g===l?i.push(g):!l&&g===n[0]?i.push("*"):l?g===n[0]?i.push(`<=${l}`):i.push(`${g} - ${l}`):i.push(`>=${g}`);let a=i.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return a.length{"use strict";var uy=$e(),mu=io(),{ANY:fu}=mu,pu=co(),wu=Xe(),a_=(t,e,r={})=>{if(t===e)return!0;t=new uy(t,r),e=new uy(e,r);let A=!1;e:for(let s of t.set){for(let o of e.set){let n=g_(s,o,r);if(A=A||n!==null,n)continue e}if(A)return!1}return!0},c_=[new mu(">=0.0.0-0")],Ey=[new mu(">=0.0.0")],g_=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===fu){if(e.length===1&&e[0].semver===fu)return!0;r.includePrerelease?t=c_:t=Ey}if(e.length===1&&e[0].semver===fu){if(r.includePrerelease)return!0;e=Ey}let A=new Set,s,o;for(let E of t)E.operator===">"||E.operator===">="?s=hy(s,E,r):E.operator==="<"||E.operator==="<="?o=Qy(o,E,r):A.add(E.semver);if(A.size>1)return null;let n;if(s&&o){if(n=wu(s.semver,o.semver,r),n>0)return null;if(n===0&&(s.operator!==">="||o.operator!=="<="))return null}for(let E of A){if(s&&!pu(E,String(s),r)||o&&!pu(E,String(o),r))return null;for(let h of e)if(!pu(E,String(h),r))return!1;return!0}let i,a,c,g,l=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,u=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1;l&&l.prerelease.length===1&&o.operator==="<"&&l.prerelease[0]===0&&(l=!1);for(let E of e){if(g=g||E.operator===">"||E.operator===">=",c=c||E.operator==="<"||E.operator==="<=",s){if(u&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===u.major&&E.semver.minor===u.minor&&E.semver.patch===u.patch&&(u=!1),E.operator===">"||E.operator===">="){if(i=hy(s,E,r),i===E&&i!==s)return!1}else if(s.operator===">="&&!E.test(s.semver))return!1}if(o){if(l&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===l.major&&E.semver.minor===l.minor&&E.semver.patch===l.patch&&(l=!1),E.operator==="<"||E.operator==="<="){if(a=Qy(o,E,r),a===E&&a!==o)return!1}else if(o.operator==="<="&&!E.test(o.semver))return!1}if(!E.operator&&(o||s)&&n!==0)return!1}return!(s&&c&&!o&&n!==0||o&&g&&!s&&n!==0||u||l)},hy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A>0?t:A<0||e.operator===">"&&t.operator===">="?e:t},Qy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A<0?t:A>0||e.operator==="<"&&t.operator==="<="?e:t};By.exports=a_});var Ru=B((FV,fy)=>{"use strict";var yu=ZA(),Cy=zA(),l_=Be(),dy=iu(),u_=ur(),E_=Pm(),h_=Vm(),Q_=zm(),B_=Km(),I_=$m(),C_=tw(),d_=Aw(),f_=ow(),p_=Xe(),m_=cw(),w_=lw(),y_=Ui(),R_=Qw(),D_=Iw(),T_=no(),b_=Gi(),k_=gu(),F_=lu(),S_=Li(),N_=Mi(),U_=uu(),G_=Dw(),L_=bw(),M_=io(),v_=$e(),x_=co(),O_=Pw(),Y_=Vw(),__=Ww(),J_=jw(),P_=Xw(),H_=Oi(),V_=sy(),q_=ny(),W_=cy(),z_=ly(),Z_=Iy();fy.exports={parse:u_,valid:E_,clean:h_,inc:Q_,diff:B_,major:I_,minor:C_,patch:d_,prerelease:f_,compare:p_,rcompare:m_,compareLoose:w_,compareBuild:y_,sort:R_,rsort:D_,gt:T_,lt:b_,eq:k_,neq:F_,gte:S_,lte:N_,cmp:U_,coerce:G_,truncate:L_,Comparator:M_,Range:v_,satisfies:x_,toComparators:O_,maxSatisfying:Y_,minSatisfying:__,minVersion:J_,validRange:P_,outside:H_,gtr:V_,ltr:q_,intersects:W_,simplifyRange:z_,subset:Z_,SemVer:l_,re:yu.re,src:yu.src,tokens:yu.t,SEMVER_SPEC_VERSION:Cy.SEMVER_SPEC_VERSION,RELEASE_TYPES:Cy.RELEASE_TYPES,compareIdentifiers:dy.compareIdentifiers,rcompareIdentifiers:dy.rcompareIdentifiers}});var hr=W(require("node:process"),1),Ny=W(require("node:path"),1);var Su=W(require("os"),1);function jA(t){return t==null?"":typeof t=="string"||t instanceof String?t:JSON.stringify(t)}function ku(t){return Object.keys(t).length?{title:t.title,file:t.file,line:t.startLine,endLine:t.endLine,col:t.startColumn,endColumn:t.endColumn}:{}}function Vi(t,e,r){let A=new Hi(t,e,r);process.stdout.write(A.toString()+Su.EOL)}var Fu="::",Hi=class{constructor(e,r,A){e||(e="missing.command"),this.command=e,this.properties=r,this.message=A}toString(){let e=Fu+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let r=!0;for(let A in this.properties)if(this.properties.hasOwnProperty(A)){let s=this.properties[A];s&&(r?r=!1:e+=",",e+=`${A}=${Yy(s)}`)}}return e+=`${Fu}${Oy(this.message)}`,e}};function Oy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function Yy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}var Tp=W(require("os"),1);var $s=W(require("http"),1),ml=W(require("https"),1);function qi(t){let e=t.protocol==="https:";if(_y(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new uo(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new uo(`http://${r}`)}else return}function _y(t){if(!t.hostname)return!1;let e=t.hostname;if(Jy(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Jy(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var uo=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}};var nr=W(Zi(),1),gp=W(ci(),1),ie=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},je;(function(t){t[t.OK=200]="OK",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.ResourceMoved=302]="ResourceMoved",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.SwitchProxy=306]="SwitchProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.TooManyRequests=429]="TooManyRequests",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout"})(je||(je={}));var we;(function(t){t.Accept="accept",t.ContentType="content-type"})(we||(we={}));var Ot;(function(t){t.ApplicationJson="application/json"})(Ot||(Ot={}));var Av=[je.MovedPermanently,je.ResourceMoved,je.SeeOther,je.TemporaryRedirect,je.PermanentRedirect],sv=[je.BadGateway,je.ServiceUnavailable,je.GatewayTimeout],ov=["OPTIONS","GET","DELETE","HEAD"],nv=10,iv=5,fl=class t extends Error{constructor(e,r){super(e),this.name="HttpClientError",this.statusCode=r,Object.setPrototypeOf(this,t.prototype)}},pl=class{constructor(e){this.message=e}readBody(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};var Xs=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ie(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ie(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ie(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ie(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ie(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ie(this,arguments,void 0,function*(r,A={}){A[we.Accept]=this._getExistingOrDefaultHeader(A,we.Accept,Ot.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ie(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&ov.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===je.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Av.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!sv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pl(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=qi(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?ml:$s;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},Ks(this.requestOptions.headers),Ks(e||{})):Ks(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=Ks(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=Ks(this.requestOptions.headers)[we.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[we.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=qi(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||$s.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?nr.httpsOverHttps:nr.httpsOverHttp:a=c?nr.httpOverHttps:nr.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new ml.Agent(i):new $s.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new gp.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ie(this,void 0,void 0,function*(){e=Math.min(nv,e);let r=iv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ie(this,void 0,void 0,function*(){return new Promise((A,s)=>ie(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===je.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fl(g,o);l.result=n.result,s(l)}else A(n)}))})}},Ks=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{});var up=require("os"),eo=require("fs"),wl=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{access:cv,appendFile:gv,writeFile:lv}=eo.promises,lp="GITHUB_STEP_SUMMARY";var yl=class{constructor(){this._buffer=""}filePath(){return wl(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[lp];if(!e)throw new Error(`Unable to find environment variable for $${lp}. Check if your runtime environment supports job summaries.`);try{yield cv(e,eo.constants.R_OK|eo.constants.W_OK)}catch{throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,r,A={}){let s=Object.entries(A).map(([o,n])=>` ${o}="${n}"`).join("");return r?`<${e}${s}>${r}`:`<${e}${s}>`}write(e){return wl(this,void 0,void 0,function*(){let r=!!e?.overwrite,A=yield this.filePath();return yield(r?lv:gv)(A,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return wl(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(e,r=!1){return this._buffer+=e,r?this.addEOL():this}addEOL(){return this.addRaw(up.EOL)}addCodeBlock(e,r){let A=Object.assign({},r&&{lang:r}),s=this.wrap("pre",this.wrap("code",e),A);return this.addRaw(s).addEOL()}addList(e,r=!1){let A=r?"ol":"ul",s=e.map(n=>this.wrap("li",n)).join(""),o=this.wrap(A,s);return this.addRaw(o).addEOL()}addTable(e){let r=e.map(s=>{let o=s.map(n=>{if(typeof n=="string")return this.wrap("td",n);let{header:i,data:a,colspan:c,rowspan:g}=n,l=i?"th":"td",u=Object.assign(Object.assign({},c&&{colspan:c}),g&&{rowspan:g});return this.wrap(l,a,u)}).join("");return this.wrap("tr",o)}).join(""),A=this.wrap("table",r);return this.addRaw(A).addEOL()}addDetails(e,r){let A=this.wrap("details",this.wrap("summary",e)+r);return this.addRaw(A).addEOL()}addImage(e,r,A){let{width:s,height:o}=A||{},n=Object.assign(Object.assign({},s&&{width:s}),o&&{height:o}),i=this.wrap("img",null,Object.assign({src:e,alt:r},n));return this.addRaw(i).addEOL()}addHeading(e,r){let A=`h${r}`,s=["h1","h2","h3","h4","h5","h6"].includes(A)?A:"h1",o=this.wrap(s,e);return this.addRaw(o).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,r){let A=Object.assign({},r&&{cite:r}),s=this.wrap("blockquote",e,A);return this.addRaw(s).addEOL()}addLink(e,r){let A=this.wrap("a",e,{href:r});return this.addRaw(A).addEOL()}},EH=new yl;var Fl=W(require("os"),1);var to=W(require("os"),1),kl=W(require("events"),1),wp=W(require("child_process"),1),yp=W(require("path"),1);var dp=require("assert"),pt=W(require("path"),1);var li=W(require("fs"),1),ar=W(require("path"),1),hp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{chmod:uv,copyFile:Ev,lstat:hv,mkdir:Qp,open:BH,readdir:Bp,rename:Qv,rm:Ip,rmdir:IH,stat:gi,symlink:Bv,unlink:Iv}=li.promises,ir=process.platform==="win32";var CH=li.constants.O_RDONLY;function Rl(t){return hp(this,void 0,void 0,function*(){try{yield gi(t)}catch(e){if(e.code==="ENOENT")return!1;throw e}return!0})}function ui(t){if(t=Cv(t),!t)throw new Error('isRooted() parameter "p" cannot be empty');return ir?t.startsWith("\\")||/^[A-Z]:/i.test(t):t.startsWith("/")}function Dl(t,e){return hp(this,void 0,void 0,function*(){let r;try{r=yield gi(t)}catch(s){s.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${s}`)}if(r&&r.isFile()){if(ir){let s=ar.extname(t).toUpperCase();if(e.some(o=>o.toUpperCase()===s))return t}else if(Ep(r))return t}let A=t;for(let s of e){t=A+s,r=void 0;try{r=yield gi(t)}catch(o){o.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${o}`)}if(r&&r.isFile()){if(ir){try{let o=ar.dirname(t),n=ar.basename(t).toUpperCase();for(let i of yield Bp(o))if(n===i.toUpperCase()){t=ar.join(o,i);break}}catch(o){console.log(`Unexpected error attempting to determine the actual case of the file '${t}': ${o}`)}return t}else if(Ep(r))return t}}return""})}function Cv(t){return t=t||"",ir?(t=t.replace(/\//g,"\\"),t.replace(/\\\\+/g,"\\")):t.replace(/\/\/+/g,"/")}function Ep(t){return(t.mode&1)>0||(t.mode&8)>0&&process.getgid!==void 0&&t.gid===process.getgid()||(t.mode&64)>0&&process.getuid!==void 0&&t.uid===process.getuid()}var Ei=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function fp(t){return Ei(this,void 0,void 0,function*(){if(ir&&/[*"<>|]/.test(t))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');try{yield Ip(t,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(e){throw new Error(`File was unable to be removed ${e}`)}})}function Tl(t){return Ei(this,void 0,void 0,function*(){(0,dp.ok)(t,"a path argument must be provided"),yield Qp(t,{recursive:!0})})}function _r(t,e){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");if(e){let A=yield _r(t,!1);if(!A)throw ir?new Error(`Unable to locate executable file: ${t}. 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.`):new Error(`Unable to locate executable file: ${t}. 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 A}let r=yield dv(t);return r&&r.length>0?r[0]:""})}function dv(t){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");let e=[];if(ir&&process.env.PATHEXT)for(let s of process.env.PATHEXT.split(pt.delimiter))s&&e.push(s);if(ui(t)){let s=yield Dl(t,e);return s?[s]:[]}if(t.includes(pt.sep))return[];let r=[];if(process.env.PATH)for(let s of process.env.PATH.split(pt.delimiter))s&&r.push(s);let A=[];for(let s of r){let o=yield Dl(pt.join(s,t),e);o&&A.push(o)}return A})}var Rp=require("timers"),mp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},hi=process.platform==="win32",Qi=class extends kl.EventEmitter{constructor(e,r,A){if(super(),!e)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=e,this.args=r||[],this.options=A||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,r){let A=this._getSpawnFileName(),s=this._getSpawnArgs(e),o=r?"":"[command]";if(hi)if(this._isCmdFile()){o+=A;for(let n of s)o+=` ${n}`}else if(e.windowsVerbatimArguments){o+=`"${A}"`;for(let n of s)o+=` ${n}`}else{o+=this._windowsQuoteCmdArg(A);for(let n of s)o+=` ${this._windowsQuoteCmdArg(n)}`}else{o+=A;for(let n of s)o+=` ${n}`}return o}_processLineBuffer(e,r,A){try{let s=r+e.toString(),o=s.indexOf(to.EOL);for(;o>-1;){let n=s.substring(0,o);A(n),s=s.substring(o+to.EOL.length),o=s.indexOf(to.EOL)}return s}catch(s){return this._debug(`error processing line. Failed with error ${s}`),""}}_getSpawnFileName(){return hi&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(e){if(hi&&this._isCmdFile()){let r=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let A of this.args)r+=" ",r+=e.windowsVerbatimArguments?A:this._windowsQuoteCmdArg(A);return r+='"',[r]}return this.args}_endsWith(e,r){return e.endsWith(r)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return'""';let r=[" "," ","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],A=!1;for(let n of e)if(r.some(i=>i===n)){A=!0;break}if(!A)return e;let s='"',o=!0;for(let n=e.length;n>0;n--)s+=e[n-1],o&&e[n-1]==="\\"?s+="\\":e[n-1]==='"'?(o=!0,s+='"'):o=!1;return s+='"',s.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e)return'""';if(!e.includes(" ")&&!e.includes(" ")&&!e.includes('"'))return e;if(!e.includes('"')&&!e.includes("\\"))return`"${e}"`;let r='"',A=!0;for(let s=e.length;s>0;s--)r+=e[s-1],A&&e[s-1]==="\\"?r+="\\":e[s-1]==='"'?(A=!0,r+="\\"):A=!1;return r+='"',r.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};let r={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return r.outStream=e.outStream||process.stdout,r.errStream=e.errStream||process.stderr,r}_getSpawnOptions(e,r){e=e||{};let A={};return A.cwd=e.cwd,A.env=e.env,A.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(A.argv0=`"${r}"`),A}exec(){return mp(this,void 0,void 0,function*(){return!ui(this.toolPath)&&(this.toolPath.includes("/")||hi&&this.toolPath.includes("\\"))&&(this.toolPath=yp.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield _r(this.toolPath,!0),new Promise((e,r)=>mp(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let c of this.args)this._debug(` ${c}`);let A=this._cloneExecOptions(this.options);!A.silent&&A.outStream&&A.outStream.write(this._getCommandString(A)+to.EOL);let s=new bl(A,this.toolPath);if(s.on("debug",c=>{this._debug(c)}),this.options.cwd&&!(yield Rl(this.options.cwd)))return r(new Error(`The cwd: ${this.options.cwd} does not exist!`));let o=this._getSpawnFileName(),n=wp.spawn(o,this._getSpawnArgs(A),this._getSpawnOptions(this.options,o)),i="";n.stdout&&n.stdout.on("data",c=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(c),!A.silent&&A.outStream&&A.outStream.write(c),i=this._processLineBuffer(c,i,g=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(g)})});let a="";if(n.stderr&&n.stderr.on("data",c=>{s.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(c),!A.silent&&A.errStream&&A.outStream&&(A.failOnStdErr?A.errStream:A.outStream).write(c),a=this._processLineBuffer(c,a,g=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(g)})}),n.on("error",c=>{s.processError=c.message,s.processExited=!0,s.processClosed=!0,s.CheckComplete()}),n.on("exit",c=>{s.processExitCode=c,s.processExited=!0,this._debug(`Exit code ${c} received from tool '${this.toolPath}'`),s.CheckComplete()}),n.on("close",c=>{s.processExitCode=c,s.processExited=!0,s.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),s.CheckComplete()}),s.on("done",(c,g)=>{i.length>0&&this.emit("stdline",i),a.length>0&&this.emit("errline",a),n.removeAllListeners(),c?r(c):e(g)}),this.options.input){if(!n.stdin)throw new Error("child process missing stdin");n.stdin.end(this.options.input)}}))})}};function Dp(t){let e=[],r=!1,A=!1,s="";function o(n){A&&n!=='"'&&(s+="\\"),s+=n,A=!1}for(let n=0;n0&&(e.push(s),s="");continue}o(i)}return s.length>0&&e.push(s.trim()),e}var bl=class t extends kl.EventEmitter{constructor(e,r){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!r)throw new Error("toolPath must not be empty");this.options=e,this.toolPath=r,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=(0,Rp.setTimeout)(t.HandleTimeout,this.delay,this)))}_debug(e){this.emit("debug",e)}_setResult(){let e;this.processExited&&(this.processError?e=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}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let r=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(r)}e._setResult()}}};var pv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function cr(t,e,r){return pv(this,void 0,void 0,function*(){let A=Dp(t);if(A.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let s=A[0];return e=A.slice(1).concat(e||[]),new Qi(s,e,r).exec()})}var mH=Fl.default.platform(),wH=Fl.default.arch();var Sl;(function(t){t[t.Success=0]="Success",t[t.Failure=1]="Failure"})(Sl||(Sl={}));function bp(t,e){let r=process.env[`INPUT_${t.replace(/ /g,"_").toUpperCase()}`]||"";if(e&&e.required&&!r)throw new Error(`Input required and not supplied: ${t}`);return e&&e.trimWhitespace===!1?r:r.trim()}function kp(t){process.exitCode=Sl.Failure,yv(t)}function Nl(){return process.env.RUNNER_DEBUG==="1"}function Ue(t){Vi("debug",{},t)}function yv(t,e={}){Vi("error",ku(e),t instanceof Error?t.toString():t)}function Ul(t){process.stdout.write(t+Tp.EOL)}var Bi=require("fs"),Fp=require("os"),VA=class{constructor(){var e,r,A;if(this.payload={},process.env.GITHUB_EVENT_PATH)if((0,Bi.existsSync)(process.env.GITHUB_EVENT_PATH))this.payload=JSON.parse((0,Bi.readFileSync)(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}));else{let s=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${s} does not exist${Fp.EOL}`)}this.eventName=process.env.GITHUB_EVENT_NAME,this.sha=process.env.GITHUB_SHA,this.ref=process.env.GITHUB_REF,this.workflow=process.env.GITHUB_WORKFLOW,this.action=process.env.GITHUB_ACTION,this.actor=process.env.GITHUB_ACTOR,this.job=process.env.GITHUB_JOB,this.runAttempt=parseInt(process.env.GITHUB_RUN_ATTEMPT,10),this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10),this.runId=parseInt(process.env.GITHUB_RUN_ID,10),this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:"https://api.github.com",this.serverUrl=(r=process.env.GITHUB_SERVER_URL)!==null&&r!==void 0?r:"https://github.com",this.graphqlUrl=(A=process.env.GITHUB_GRAPHQL_URL)!==null&&A!==void 0?A:"https://api.github.com/graphql"}get issue(){let e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){let[e,r]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:r}}if(this.payload.repository)return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name};throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}};var xl=W(Lp(),1),Mp=W(ci(),1),vv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function vp(t,e){if(!t&&!e.auth)throw new Error("Parameter token or opts.auth is required");if(t&&e.auth)throw new Error("Parameters token and opts.auth may not both be specified");return typeof e.auth=="string"?e.auth:`token ${t}`}function xp(t){return new xl.HttpClient().getAgent(t)}function xv(t){return new xl.HttpClient().getAgentDispatcher(t)}function Op(t){let e=xv(t);return(A,s)=>vv(this,void 0,void 0,function*(){return(0,Mp.fetch)(A,Object.assign(Object.assign({},s),{dispatcher:e}))})}function Yp(){return process.env.GITHUB_API_URL||"https://api.github.com"}function Ol(t){var e;let r=(e=process.env.ACTIONS_ORCHESTRATION_ID)===null||e===void 0?void 0:e.trim();if(r){let s=`actions_orchestration_id/${r.replace(/[^a-z0-9_.-]/gi,"_")}`;return t?.includes(s)?t:`${t?`${t} `:""}${s}`}return t}function gr(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}function wi(t,e,r,A){if(typeof r!="function")throw new Error("method for before hook must be a function");return A||(A={}),Array.isArray(e)?e.reverse().reduce((s,o)=>wi.bind(null,t,o,s,A),r)():Promise.resolve().then(()=>t.registry[e]?t.registry[e].reduce((s,o)=>o.hook.bind(null,s,A),r)():r(A))}function _p(t,e,r,A){let s=A;t.registry[r]||(t.registry[r]=[]),e==="before"&&(A=(o,n)=>Promise.resolve().then(s.bind(null,n)).then(o.bind(null,n))),e==="after"&&(A=(o,n)=>{let i;return Promise.resolve().then(o.bind(null,n)).then(a=>(i=a,s(i,n))).then(()=>i)}),e==="error"&&(A=(o,n)=>Promise.resolve().then(o.bind(null,n)).catch(i=>s(i,n))),t.registry[r].push({hook:A,orig:s})}function Jp(t,e,r){if(!t.registry[e])return;let A=t.registry[e].map(s=>s.orig).indexOf(r);A!==-1&&t.registry[e].splice(A,1)}var Pp=Function.bind,Hp=Pp.bind(Pp);function Vp(t,e,r){let A=Hp(Jp,null).apply(null,r?[e,r]:[e]);t.api={remove:A},t.remove=A,["before","error","after","wrap"].forEach(s=>{let o=r?[e,s,r]:[e,s];t[s]=t.api[s]=Hp(_p,null).apply(null,o)})}function Yv(){let t=Symbol("Singular"),e={registry:{}},r=wi.bind(null,e,t);return Vp(r,e,t),r}function _v(){let t={registry:{}},e=wi.bind(null,t);return Vp(e,t),e}var qp={Singular:Yv,Collection:_v};var Jv="0.0.0-development",Pv=`octokit-endpoint.js/${Jv} ${gr()}`,Hv={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Pv},mediaType:{format:""}};function Vv(t){return t?Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{}):{}}function qv(t){if(typeof t!="object"||t===null||Object.prototype.toString.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);if(e===null)return!0;let r=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.call(r)===Function.prototype.call(t)}function Zp(t,e){let r=Object.assign({},t);return Object.keys(e).forEach(A=>{qv(e[A])?A in t?r[A]=Zp(t[A],e[A]):Object.assign(r,{[A]:e[A]}):Object.assign(r,{[A]:e[A]})}),r}function Wp(t){for(let e in t)t[e]===void 0&&delete t[e];return t}function _l(t,e,r){if(typeof e=="string"){let[s,o]=e.split(" ");r=Object.assign(o?{method:s,url:o}:{url:s},r)}else r=Object.assign({},e);r.headers=Vv(r.headers),Wp(r),Wp(r.headers);let A=Zp(t||{},r);return r.url==="/graphql"&&(t&&t.mediaType.previews?.length&&(A.mediaType.previews=t.mediaType.previews.filter(s=>!A.mediaType.previews.includes(s)).concat(A.mediaType.previews)),A.mediaType.previews=(A.mediaType.previews||[]).map(s=>s.replace(/-preview/,""))),A}function Wv(t,e){let r=/\?/.test(t)?"&":"?",A=Object.keys(e);return A.length===0?t:t+r+A.map(s=>s==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${s}=${encodeURIComponent(e[s])}`).join("&")}var zv=/\{[^{}}]+\}/g;function Zv(t){return t.replace(/(?:^\W+)|(?:(?r.concat(A),[]):[]}function zp(t,e){let r={__proto__:null};for(let A of Object.keys(t))e.indexOf(A)===-1&&(r[A]=t[A]);return r}function jp(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function WA(t){return encodeURIComponent(t).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Ao(t,e,r){return e=t==="+"||t==="#"?jp(e):WA(e),r?WA(r)+"="+e:e}function qA(t){return t!=null}function Yl(t){return t===";"||t==="&"||t==="?"}function Kv(t,e,r,A){var s=t[r],o=[];if(qA(s)&&s!=="")if(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||typeof s=="boolean")s=s.toString(),A&&A!=="*"&&(s=s.substring(0,parseInt(A,10))),o.push(Ao(e,s,Yl(e)?r:""));else if(A==="*")Array.isArray(s)?s.filter(qA).forEach(function(n){o.push(Ao(e,n,Yl(e)?r:""))}):Object.keys(s).forEach(function(n){qA(s[n])&&o.push(Ao(e,s[n],n))});else{let n=[];Array.isArray(s)?s.filter(qA).forEach(function(i){n.push(Ao(e,i))}):Object.keys(s).forEach(function(i){qA(s[i])&&(n.push(WA(i)),n.push(Ao(e,s[i].toString())))}),Yl(e)?o.push(WA(r)+"="+n.join(",")):n.length!==0&&o.push(n.join(","))}else e===";"?qA(s)&&o.push(WA(r)):s===""&&(e==="&"||e==="?")?o.push(WA(r)+"="):s===""&&o.push("");return o}function Xv(t){return{expand:$v.bind(null,t)}}function $v(t,e){var r=["+","#",".","/",";","?","&"];return t=t.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(A,s,o){if(s){let i="",a=[];if(r.indexOf(s.charAt(0))!==-1&&(i=s.charAt(0),s=s.substr(1)),s.split(/,/g).forEach(function(c){var g=/([^:\*]*)(?::(\d+)|(\*))?/.exec(c);a.push(Kv(e,i,g[1],g[2]||g[3]))}),i&&i!=="+"){var n=",";return i==="?"?n="&":i!=="#"&&(n=i),(a.length!==0?i:"")+a.join(n)}else return a.join(",")}else return jp(o)}),t==="/"?t:t.replace(/\/$/,"")}function Kp(t){let e=t.method.toUpperCase(),r=(t.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),A=Object.assign({},t.headers),s,o=zp(t,["method","baseUrl","url","headers","request","mediaType"]),n=jv(r);r=Xv(r).expand(o),/^http/.test(r)||(r=t.baseUrl+r);let i=Object.keys(t).filter(g=>n.includes(g)).concat("baseUrl"),a=zp(o,i);if(!/application\/octet-stream/i.test(A.accept)&&(t.mediaType.format&&(A.accept=A.accept.split(/,/).map(g=>g.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${t.mediaType.format}`)).join(",")),r.endsWith("/graphql")&&t.mediaType.previews?.length)){let g=A.accept.match(/(?{let u=t.mediaType.format?`.${t.mediaType.format}`:"+json";return`application/vnd.github.${l}-preview${u}`}).join(",")}return["GET","HEAD"].includes(e)?r=Wv(r,a):"data"in a?s=a.data:Object.keys(a).length&&(s=a),!A["content-type"]&&typeof s<"u"&&(A["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof s>"u"&&(s=""),Object.assign({method:e,url:r,headers:A},typeof s<"u"?{body:s}:null,t.request?{request:t.request}:null)}function ex(t,e,r){return Kp(_l(t,e,r))}function Xp(t,e){let r=_l(t,e),A=ex.bind(null,r);return Object.assign(A,{DEFAULTS:r,defaults:Xp.bind(null,r),merge:_l.bind(null,r),parse:Kp})}var $p=Xp(null,Hv);var Im=W(nm(),1);var gx=/^-?\d+$/,Di=/^-?\d+n+$/,lr=JSON.stringify,Vl=JSON.parse,lm=/^-?\d+n$/,im=/([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g,am=/([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g,ql=t=>t===void 0||typeof t=="function"||typeof t=="symbol",Wl=t=>t!==null&&typeof t=="object"&&t.constructor&&t.constructor.name==="RawJSON",lx=(t,e,r)=>{let A="";typeof r=="number"?A=" ".repeat(Math.min(10,Math.max(0,Math.floor(r)))):typeof r=="string"&&(A=r.slice(0,10));let s=typeof e=="function",o=Array.isArray(e)?new Set(e.map(String)):null,n=(h,C,I)=>(I!==null&&typeof I=="object"&&typeof I.toJSON=="function"&&(I=I.toJSON(C)),typeof I=="string"&&Di.test(I)?I+"n":typeof I=="bigint"?"rawJSON"in JSON?JSON.rawJSON(I.toString()):I.toString()+"n":(s&&(I=e.call(h,C,I)),I!==null&&typeof I=="object"&&(I instanceof Number||I instanceof String||I instanceof Boolean)&&(I=I.valueOf()),I)),i=n({"":t},"",t);if(ql(i))return;let a=i===null||typeof i!="object",c=Wl(i);if(a||c)return lr(i);let g=[],l=0,u=[{parent:{"":i},key:"",val:i,isArray:Array.isArray(i),keys:Array.isArray(i)?null:Object.keys(i),index:0,first:!0}],E=new WeakSet([i]);for(;u.length>0;){let h=u[u.length-1];h.index===0&&(g.push(h.isArray?"[":"{"),l++);let C=!1;if(h.isArray)if(h.index=h.keys.length&&u[u.length-1]===h&&(C=!0)}C&&(l--,!h.first&&A&&g.push(` +`+A.repeat(l)),g.push(h.isArray?"]":"}"),E.delete(h.val),u.pop())}return g.join("")},um=(t,e,r)=>{try{return"rawJSON"in JSON?lr(t,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r):t?lr(t,(i,a)=>typeof a=="string"&&Di.test(a)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r).replace(im,"$1$2$3").replace(am,"$1$2$3"):lr(t,e,r)}catch(A){if(A instanceof RangeError){let s=lx(t,e,r);return s===void 0?void 0:"rawJSON"in JSON?s:s.replace(im,"$1$2$3").replace(am,"$1$2$3")}throw A}},Ri=new Map,ux=()=>{let t=JSON.parse.toString();if(Ri.has(t))return Ri.get(t);try{let e=JSON.parse("1",(r,A,s)=>!!s?.source&&s.source==="1");return Ri.set(t,e),e}catch{return Ri.set(t,!1),!1}},Ex=(t,e,r,A)=>typeof e=="string"&&lm.test(e)?BigInt(e.slice(0,-1)):typeof e=="string"&&Di.test(e)?e.slice(0,-1):typeof A=="function"?A(t,e,r):e,hx=(t,e)=>JSON.parse(t,(r,A,s)=>{let o=typeof A=="number",n=A>Number.MAX_SAFE_INTEGER||A{let r={"":t},A=[{parent:r,key:"",visited:!1}];for(;A.length>0;){let s=A[A.length-1];if(s.visited){let{parent:o,key:n}=s,i=o[n];typeof i=="string"&&(lm.test(i)?i=BigInt(i.slice(0,-1)):Di.test(i)&&(i=i.slice(0,-1))),typeof e=="function"&&(i=e.call(o,n,i)),i===void 0?delete o[n]:o[n]=i,A.pop()}else{s.visited=!0;let o=s.parent[s.key];if(o!==null&&typeof o=="object"){let i=Object.keys(o);for(let a=i.length-1;a>=0;a--)A.push({parent:o,key:i[a],visited:!1})}}}return r[""]},gm=t=>t.replace(Qx,(e,r,A,s)=>{let o=e[0]==='"';if(o&&Bx.test(e))return e.substring(0,e.length-1)+'n"';let i=A||s,a=r&&(r.length{if(!t)return Vl(t,e);try{if(ux())return hx(t,e);let r=gm(t);return Vl(r,(A,s,o)=>Ex(A,s,o,e))}catch(r){if(r instanceof RangeError){let A=gm(t),s=Vl(A);return Ix(s,e)}throw r}};var Jr=class extends Error{name;status;request;response;constructor(e,r,A){super(e,{cause:A.cause}),this.name="HttpError",this.status=Number.parseInt(r),Number.isNaN(this.status)&&(this.status=0);"response"in A&&(this.response=A.response);let s=Object.assign({},A.request);A.request.headers.authorization&&(s.headers=Object.assign({},A.request.headers,{authorization:A.request.headers.authorization.replace(/(?"";async function Bm(t){let e=t.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let r=t.request?.log||console,A=t.request?.parseSuccessResponseBody!==!1,s=fx(t.body)||Array.isArray(t.body)?um(t.body):t.body,o=Object.fromEntries(Object.entries(t.headers).map(([l,u])=>[l,String(u)])),n;try{n=await e(t.url,{method:t.method,body:s,redirect:t.request?.redirect,headers:o,signal:t.request?.signal,...t.body&&{duplex:"half"}})}catch(l){let u="Unknown Error";if(l instanceof Error){if(l.name==="AbortError")throw l.status=500,l;u=l.message,l.name==="TypeError"&&"cause"in l&&(l.cause instanceof Error?u=l.cause.message:typeof l.cause=="string"&&(u=l.cause))}let E=new Jr(u,500,{request:t});throw E.cause=l,E}let i=n.status,a=n.url,c={};for(let[l,u]of n.headers)c[l]=u;let g={url:a,status:i,headers:c,data:""};if("deprecation"in c){let l=c.link&&c.link.match(/<([^<>]+)>; rel="deprecation"/),u=l&&l.pop();r.warn(`[@octokit/request] "${t.method} ${t.url}" is deprecated. It is scheduled to be removed on ${c.sunset}${u?`. See ${u}`:""}`)}if(i===204||i===205)return g;if(t.method==="HEAD"){if(i<400)return g;throw new Jr(n.statusText,i,{response:g,request:t})}if(i===304)throw g.data=await zl(n),new Jr("Not modified",i,{response:g,request:t});if(i>=400)throw g.data=await zl(n),new Jr(mx(g.data),i,{response:g,request:t});return g.data=A?await zl(n):n.body,g}async function zl(t){let e=t.headers.get("content-type");if(!e)return t.text().catch(Qm);let r=(0,Im.parse)(e);if(px(r)){let A="";try{return A=await t.text(),hm(A)}catch{return A}}else return r.type.startsWith("text/")||r.parameters.charset?.toLowerCase()==="utf-8"?t.text().catch(Qm):t.arrayBuffer().catch(()=>new ArrayBuffer(0))}function px(t){return t.type==="application/json"||t.type==="application/scim+json"}function mx(t){if(typeof t=="string")return t;if(t instanceof ArrayBuffer)return"Unknown error";if(typeof t=="object"&&t!==null&&"message"in t){let e=t,r="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(A=>JSON.stringify(A)).join(", ")}${r}`:`${e.message}${r}`}return`Unknown error: ${JSON.stringify(t)}`}function Zl(t,e){let r=t.defaults(e);return Object.assign(function(s,o){let n=r.merge(s,o);if(!n.request||!n.request.hook)return Bm(r.parse(n));let i=(a,c)=>Bm(r.parse(r.merge(a,c)));return Object.assign(i,{endpoint:r,defaults:Zl.bind(null,r)}),n.request.hook(i,n)},{endpoint:r,defaults:Zl.bind(null,r)})}var so=Zl($p,dx);var wx="0.0.0-development";function yx(t){return`Request failed due to following response errors: +`+t.errors.map(e=>` - ${e.message}`).join(` +`)}var Rx=class extends Error{constructor(t,e,r){super(yx(r)),this.request=t,this.headers=e,this.response=r,this.errors=r.errors,this.data=r.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},Dx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],Tx=["query","method","url"],Cm=/\/api\/v3\/?$/;function bx(t,e,r){if(r){if(typeof e=="string"&&"query"in r)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let n in r)if(Tx.includes(n))return Promise.reject(new Error(`[@octokit/graphql] "${n}" cannot be used as variable name`))}let A=typeof e=="string"?Object.assign({query:e},r):e,s=Object.keys(A).reduce((n,i)=>Dx.includes(i)?(n[i]=A[i],n):(n.variables||(n.variables={}),n.variables[i]=A[i],n),{}),o=A.baseUrl||t.endpoint.DEFAULTS.baseUrl;return Cm.test(o)&&(s.url=o.replace(Cm,"/api/graphql")),t(s).then(n=>{if(n.data.errors){let i={};for(let a of Object.keys(n.headers))i[a]=n.headers[a];throw new Rx(s,i,n.data)}return n.data.data})}function jl(t,e){let r=t.defaults(e);return Object.assign((s,o)=>bx(r,s,o),{defaults:jl.bind(null,r),endpoint:r.endpoint})}var a2=jl(so,{headers:{"user-agent":`octokit-graphql.js/${wx} ${gr()}`},method:"POST",url:"/graphql"});function dm(t){return jl(t,{method:"POST",url:"/graphql"})}var Kl="(?:[a-zA-Z0-9_-]+)",fm="\\.",pm=new RegExp(`^${Kl}${fm}${Kl}${fm}${Kl}$`),kx=pm.test.bind(pm);async function Fx(t){let e=kx(t),r=t.startsWith("v1.")||t.startsWith("ghs_"),A=t.startsWith("ghu_");return{type:"token",token:t,tokenType:e?"app":r?"installation":A?"user-to-server":"oauth"}}function Sx(t){return t.split(/\./).length===3?`bearer ${t}`:`token ${t}`}async function Nx(t,e,r,A){let s=e.endpoint.merge(r,A);return s.headers.authorization=Sx(t),e(s)}var mm=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(Fx.bind(null,e),{hook:Nx.bind(null,e)})};var Xl="7.0.6";var wm=()=>{},Ux=console.warn.bind(console),Gx=console.error.bind(console);function Lx(t={}){return typeof t.debug!="function"&&(t.debug=wm),typeof t.info!="function"&&(t.info=wm),typeof t.warn!="function"&&(t.warn=Ux),typeof t.error!="function"&&(t.error=Gx),t}var ym=`octokit-core.js/${Xl} ${gr()}`,Ti=class{static VERSION=Xl;static defaults(e){return class extends this{constructor(...A){let s=A[0]||{};if(typeof e=="function"){super(e(s));return}super(Object.assign({},e,s,s.userAgent&&e.userAgent?{userAgent:`${s.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let r=this.plugins;return class extends this{static plugins=r.concat(e.filter(s=>!r.includes(s)))}}constructor(e={}){let r=new qp.Collection,A={baseUrl:so.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:r.bind(null,"request")}),mediaType:{previews:[],format:""}};if(A.headers["user-agent"]=e.userAgent?`${e.userAgent} ${ym}`:ym,e.baseUrl&&(A.baseUrl=e.baseUrl),e.previews&&(A.mediaType.previews=e.previews),e.timeZone&&(A.headers["time-zone"]=e.timeZone),this.request=so.defaults(A),this.graphql=dm(this.request).defaults(A),this.log=Lx(e.log),this.hook=r,e.authStrategy){let{authStrategy:o,...n}=e,i=o(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:n},e.auth));r.wrap("request",i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let o=mm(e.auth);r.wrap("request",o.hook),this.auth=o}let s=this.constructor;for(let o=0;o({async next(){if(!i)return{done:!0};try{let a=await s({method:o,url:i,headers:n}),c=_x(a);if(i=((c.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!i&&"total_commits"in c.data){let g=new URL(c.url),l=g.searchParams,u=parseInt(l.get("page")||"1",10),E=parseInt(l.get("per_page")||"250",10);u*E{if(s.done)return e;let o=!1;function n(){o=!0}return e=e.concat(A?A(s.value,n):s.value.data),o?e:Tm(t,e,r,A)})}var k2=Object.assign(Dm,{iterator:ru});function Au(t){return{paginate:Object.assign(Dm.bind(null,t),{iterator:ru.bind(null,t)})}}Au.VERSION=Yx;var G2=new VA,su=Yp(),Jx={baseUrl:su,request:{agent:xp(su),fetch:Op(su)}},bm=Ti.plugin(tu,Au).defaults(Jx);function km(t,e){let r=Object.assign({},e||{}),A=vp(t,r);A&&(r.auth=A);let s=Ol(r.userAgent);return s&&(r.userAgent=s),r}var x2=new VA;function Fm(t,e,...r){let A=bm.plugin(...r);return new A(km(t,e))}var Tu=W(require("crypto"),1),Hr=W(require("fs"),1);var j_=W(Ru(),1);var go=W(require("path"),1);var Ji=W(Ru(),1),my=W(require("stream"),1),wy=W(require("util"),1),yy=require("assert");var py=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Yi=class{constructor(e,r,A){if(e<1)throw new Error("max attempts should be greater than or equal to 1");if(this.maxAttempts=e,this.minSeconds=Math.floor(r),this.maxSeconds=Math.floor(A),this.minSeconds>this.maxSeconds)throw new Error("min seconds should be less than or equal to max seconds")}execute(e,r){return py(this,void 0,void 0,function*(){let A=1;for(;AsetTimeout(r,e*1e3))})}};var Er=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},_i=class extends Error{constructor(e){super(`Unexpected HTTP response: ${e}`),this.httpStatusCode=e,Object.setPrototypeOf(this,new.target.prototype)}},Ry=process.platform==="win32",vV=process.platform==="darwin",X_="actions/tool-cache";function Dy(t,e,r,A){return Er(this,void 0,void 0,function*(){e=e||go.join(Fy(),Tu.randomUUID()),yield Tl(go.dirname(e)),Ue(`Downloading ${t}`),Ue(`Destination ${e}`);let s=3,o=Du("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS",10),n=Du("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS",20);return yield new Yi(s,o,n).execute(()=>Er(this,void 0,void 0,function*(){return yield $_(t,e||"",r,A)}),a=>!(a instanceof _i&&a.httpStatusCode&&a.httpStatusCode<500&&a.httpStatusCode!==408&&a.httpStatusCode!==429))})}function $_(t,e,r,A){return Er(this,void 0,void 0,function*(){if(Hr.existsSync(e))throw new Error(`Destination file path ${e} already exists`);let s=new Xs(X_,[],{allowRetries:!1});r&&(Ue("set auth"),A===void 0&&(A={}),A.authorization=r);let o=yield s.get(t,A);if(o.message.statusCode!==200){let g=new _i(o.message.statusCode);throw Ue(`Failed to download from "${t}". Code(${o.message.statusCode}) Message(${o.message.statusMessage})`),g}let n=wy.promisify(my.pipeline),a=Du("TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY",()=>o.message)(),c=!1;try{return yield n(a,Hr.createWriteStream(e)),Ue("download complete"),c=!0,e}finally{if(!c){Ue("download failed");try{yield fp(e)}catch(g){Ue(`Failed to delete '${e}'. ${g.message}`)}}}})}function Ty(t,e){return Er(this,arguments,void 0,function*(r,A,s="xz"){if(!r)throw new Error("parameter 'file' is required");A=yield ky(A),Ue("Checking tar --version");let o="";yield cr("tar --version",[],{ignoreReturnCode:!0,silent:!0,listeners:{stdout:g=>o+=g.toString(),stderr:g=>o+=g.toString()}}),Ue(o.trim());let n=o.toUpperCase().includes("GNU TAR"),i;s instanceof Array?i=s:i=[s],Nl()&&!s.includes("v")&&i.push("-v");let a=A,c=r;return Ry&&n&&(i.push("--force-local"),a=A.replace(/\\/g,"/"),c=r.replace(/\\/g,"/")),n&&(i.push("--warning=no-unknown-keyword"),i.push("--overwrite")),i.push("-C",a,"-f",c),yield cr("tar",i),A})}function by(t,e){return Er(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'file' is required");return e=yield ky(e),Ry?yield eJ(t,e):yield tJ(t,e),e})}function eJ(t,e){return Er(this,void 0,void 0,function*(){let r=t.replace(/'/g,"''").replace(/"|\n|\r/g,""),A=e.replace(/'/g,"''").replace(/"|\n|\r/g,""),s=yield _r("pwsh",!1);if(s){let n=["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;",`try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`,`catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force } else { throw $_ } } ;`].join(" ")];Ue(`Using pwsh at path: ${s}`),yield cr(`"${s}"`,n)}else{let n=["-NoLogo","-Sta","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;",`if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force }`,`else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`].join(" ")],i=yield _r("powershell",!0);Ue(`Using powershell at path: ${i}`),yield cr(`"${i}"`,n)}})}function tJ(t,e){return Er(this,void 0,void 0,function*(){let r=yield _r("unzip",!0),A=[t];Nl()||A.unshift("-q"),A.unshift("-o"),yield cr(`"${r}"`,A,{cwd:e})})}function ky(t){return Er(this,void 0,void 0,function*(){return t||(t=go.join(Fy(),Tu.randomUUID())),yield Tl(t),t})}function Fy(){let t=process.env.RUNNER_TEMP||"";return(0,yy.ok)(t,"Expected RUNNER_TEMP to be defined"),t}function Du(t,e){let r=global[t];return r!==void 0?r:e}var Sy=` + fragment releaseFields on Release { + tagName + releaseAssets(first: 50) { + nodes { + name + downloadUrl + } + } + } + `;(async()=>{let t=Fm(""),e=bp("zb-version"),r=e?{query:` + query releaseAssetsForVersion($tagName: String!) { + repository(owner: "256lights", repo: "zb") { + release(tagName: $tagName) { + ...releaseFields + } + } + } + + ${Sy} + `,tagName:"v"+e}:{query:` + query releaseAssetsForLatest { + repository(owner: "256lights", repo: "zb") { + release: latestRelease { + ...releaseFields + } + } + } + + ${Sy} + `},s=(await t.graphql(r)).repository.release,o=s?.releaseAssets?.nodes||[],n;if(hr.platform==="darwin"&&hr.arch==="arm64"?n=o.find(({name:c})=>c.includes("aarch64-apple-macos")):hr.platform==="linux"&&hr.arch==="x64"&&(n=o.find(({name:c})=>c.includes("x86_64-unknown-linux"))),!n){kp(`No download found for ${hr.arch}-${hr.platform} version ${s?.tagName||e}`);return}let i=await Dy(n.downloadUrl),a=n.downloadUrl.endsWith(".zip")?await by(i):await Ty(i);await cr(Ny.default.join(a,"install"),["--single-user","--no-systemd","--no-launchd"])})(); +/** + * @license + * Copyright 2026 The zb Authors + * SPDX-License-Identifier: MIT + */ +/*! Bundled license information: + +undici/lib/web/fetch/body.js: + (*! formdata-polyfill. MIT License. Jimmy Wärting *) + +undici/lib/web/websocket/frame.js: + (*! ws. MIT License. Einar Otto Stangvik *) + +content-type/dist/index.js: + (*! + * content-type + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + *) + +@octokit/request-error/dist-src/index.js: + (* v8 ignore else -- @preserve -- Bug with vitest coverage where it sees an else branch that doesn't exist *) + +@octokit/request/dist-bundle/index.js: + (* v8 ignore next -- @preserve *) + (* v8 ignore else -- @preserve *) +*/ diff --git a/.github/actions/setup-zb/package-lock.json b/.github/actions/setup-zb/package-lock.json index 4801fb7..a18e41d 100644 --- a/.github/actions/setup-zb/package-lock.json +++ b/.github/actions/setup-zb/package-lock.json @@ -14,6 +14,11 @@ "@actions/github": "^9.1.1", "@actions/tool-cache": "^4.0.0" }, + "devDependencies": { + "@types/node": "^26.1.2", + "esbuild": "^0.28.1", + "typescript": "^7.0.2" + }, "engines": { "node": ">=24.0.0" } @@ -91,6 +96,448 @@ "semver": "^7.7.3" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@octokit/auth-token": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", @@ -219,6 +666,356 @@ "@octokit/openapi-types": "^27.0.0" } }, + "node_modules/@types/node": { + "version": "26.1.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz", + "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/before-after-hook": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", @@ -238,6 +1035,48 @@ "url": "https://opencollective.com/express" } }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, "node_modules/json-with-bigint": { "version": "3.5.10", "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.10.tgz", @@ -265,6 +1104,41 @@ "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, + "node_modules/typescript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc" + }, + "engines": { + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, "node_modules/undici": { "version": "6.28.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", @@ -274,6 +1148,13 @@ "node": ">=18.17" } }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "dev": true, + "license": "MIT" + }, "node_modules/universal-user-agent": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", diff --git a/.github/actions/setup-zb/package.json b/.github/actions/setup-zb/package.json index 8d51d1a..b890b0a 100644 --- a/.github/actions/setup-zb/package.json +++ b/.github/actions/setup-zb/package.json @@ -11,8 +11,9 @@ ], "private": true, "type": "module", - "main": "index.js", + "main": "dist/main.js", "scripts": { + "build": "node build.js", "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { @@ -23,5 +24,10 @@ "@actions/exec": "^3.0.0", "@actions/github": "^9.1.1", "@actions/tool-cache": "^4.0.0" + }, + "devDependencies": { + "@types/node": "^26.1.2", + "esbuild": "^0.28.1", + "typescript": "^7.0.2" } } diff --git a/.github/actions/setup-zb/index.js b/.github/actions/setup-zb/src/main.ts similarity index 67% rename from .github/actions/setup-zb/index.js rename to .github/actions/setup-zb/src/main.ts index 59465c7..6fd1716 100644 --- a/.github/actions/setup-zb/index.js +++ b/.github/actions/setup-zb/src/main.ts @@ -1,5 +1,8 @@ -// Copyright 2026 The zb Authors -// SPDX-License-Identifier: MIT +/** + * @license + * Copyright 2026 The zb Authors + * SPDX-License-Identifier: MIT + */ import * as process from 'node:process'; import path from 'node:path'; @@ -9,6 +12,20 @@ import { exec } from '@actions/exec'; import { getOctokit } from '@actions/github'; import { downloadTool, extractTar, extractZip } from '@actions/tool-cache'; +interface Release { + tagName: string; + releaseAssets: ReleaseAssetConnection; +} + +interface ReleaseAssetConnection { + nodes: ReleaseAsset[]; +} + +interface ReleaseAsset { + name: string; + downloadUrl: string; +} + const releaseFragment = ` fragment releaseFields on Release { @@ -57,17 +74,19 @@ const releaseFragment = ${releaseFragment} `, }; + const graphqlResponse = await octokit.graphql<{ + repository: { + release: Release | null; + } + }>(graphqlRequest); + const release = graphqlResponse.repository.release; + const releaseAssets = release?.releaseAssets?.nodes || []; - const release = (await octokit.graphql(graphqlRequest)).repository.release; - /** @type {{name: string, downloadUrl: string}[] | undefined} */ - const releaseAssets = release?.releaseAssets?.nodes; - - /** @type {{name: string, downloadUrl: string} | undefined} */ - let asset; + let asset: ReleaseAsset | undefined; if (process.platform === 'darwin' && process.arch === 'arm64') { - const asset = releaseAssets.find(({ name }) => name.includes('aarch64-apple-macos')) + asset = releaseAssets.find(({ name }) => name.includes('aarch64-apple-macos')) } else if (process.platform === 'linux' && process.arch === 'x64') { - const asset = releaseAssets.find(({ name }) => name.includes('x86_64-unknown-linux')) + asset = releaseAssets.find(({ name }) => name.includes('x86_64-unknown-linux')) } if (!asset) { core.setFailed(`No download found for ${process.arch}-${process.platform} version ${release?.tagName || version}`); @@ -78,5 +97,5 @@ const releaseFragment = const zbExtractedFolderPath = asset.downloadUrl.endsWith('.zip') ? await extractZip(zbArchivePath) : await extractTar(zbArchivePath); - await exec(path.join(zbArchivePath, 'install'), ['--single-user', '--no-systemd', '--no-launchd']); + await exec(path.join(zbExtractedFolderPath, 'install'), ['--single-user', '--no-systemd', '--no-launchd']); })(); diff --git a/.github/actions/setup-zb/tsconfig.json b/.github/actions/setup-zb/tsconfig.json new file mode 100644 index 0000000..a45d46b --- /dev/null +++ b/.github/actions/setup-zb/tsconfig.json @@ -0,0 +1,6 @@ +{ + "include": [ + "src/**/*.ts" + ], + "noEmit": true +} From 5e527409a84b0e3f64fcedd9905b7f75978bde26 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 15:42:23 -0700 Subject: [PATCH 05/23] Ignore .github in export and prevent bundled JavaScript from merging --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..58e6bff --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +/.github/ export-ignore +/.github/actions/setup-zb/dist/*.js text eol=lf -diff -merge From de5c2803e3caeac3ab5a477ef86096575e0c9ae2 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 16:29:24 -0700 Subject: [PATCH 06/23] Add .github directory back to export (I suspect this is how GitHub Actions loads actions from the same repository.) --- .gitattributes | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 58e6bff..77f0cb0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1 @@ -/.github/ export-ignore /.github/actions/setup-zb/dist/*.js text eol=lf -diff -merge From 6b066c65231775cb6bdd909f13708c9eacfa9c7d Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 16:35:23 -0700 Subject: [PATCH 07/23] Use ESM format --- .github/actions/setup-zb/build.js | 1 + .github/actions/setup-zb/dist/main.js | 64 +++++++++++++-------------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/.github/actions/setup-zb/build.js b/.github/actions/setup-zb/build.js index cbd5a11..31ae67a 100644 --- a/.github/actions/setup-zb/build.js +++ b/.github/actions/setup-zb/build.js @@ -13,5 +13,6 @@ await esbuild.build({ minify: true, platform: 'node', target: ['node24.0'], + format: 'esm', outfile: 'dist/main.js', }); diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index d4eb6d5..ecb50a4 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -1,54 +1,54 @@ -var Uy=Object.create;var bu=Object.defineProperty;var Gy=Object.getOwnPropertyDescriptor;var Ly=Object.getOwnPropertyNames;var My=Object.getPrototypeOf,vy=Object.prototype.hasOwnProperty;var B=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var xy=(t,e,r,A)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ly(e))!vy.call(t,s)&&s!==r&&bu(t,s,{get:()=>e[s],enumerable:!(A=Gy(e,s))||A.enumerable});return t};var W=(t,e,r)=>(r=t!=null?Uy(My(t)):{},xy(e||!t||!t.__esModule?bu(r,"default",{value:t,enumerable:!0}):r,t));var Lu=B(zr=>{"use strict";var aJ=require("net"),Hy=require("tls"),Wi=require("http"),Nu=require("https"),Vy=require("events"),cJ=require("assert"),qy=require("util");zr.httpOverHttp=Wy;zr.httpsOverHttp=zy;zr.httpOverHttps=Zy;zr.httpsOverHttps=jy;function Wy(t){var e=new yt(t);return e.request=Wi.request,e}function zy(t){var e=new yt(t);return e.request=Wi.request,e.createSocket=Uu,e.defaultPort=443,e}function Zy(t){var e=new yt(t);return e.request=Nu.request,e}function jy(t){var e=new yt(t);return e.request=Nu.request,e.createSocket=Uu,e.defaultPort=443,e}function yt(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||Wi.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(A,s,o,n){for(var i=Gu(s,o,n),a=0,c=e.requests.length;a=this.maxSockets){o.requests.push(n);return}o.createSocket(n,function(i){i.on("free",a),i.on("close",c),i.on("agentRemove",c),e.onSocket(i);function a(){o.emit("free",i,n)}function c(g){o.removeSocket(i),i.removeListener("free",a),i.removeListener("close",c),i.removeListener("agentRemove",c)}})};yt.prototype.createSocket=function(e,r){var A=this,s={};A.sockets.push(s);var o=zi({},A.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(o.localAddress=e.localAddress),o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")),Jt("making CONNECT request");var n=A.request(o);n.useChunkedEncodingByDefault=!1,n.once("response",i),n.once("upgrade",a),n.once("connect",c),n.once("error",g),n.end();function i(l){l.upgrade=!0}function a(l,u,E){process.nextTick(function(){c(l,u,E)})}function c(l,u,E){if(n.removeAllListeners(),u.removeAllListeners(),l.statusCode!==200){Jt("tunneling socket could not be established, statusCode=%d",l.statusCode),u.destroy();var h=new Error("tunneling socket could not be established, statusCode="+l.statusCode);h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}if(E.length>0){Jt("got illegal response body from proxy"),u.destroy();var h=new Error("got illegal response body from proxy");h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}return Jt("tunneling connection has established"),A.sockets[A.sockets.indexOf(s)]=u,r(u)}function g(l){n.removeAllListeners(),Jt(`tunneling socket could not be established, cause=%s -`,l.message,l.stack);var u=new Error("tunneling socket could not be established, cause="+l.message);u.code="ECONNRESET",e.request.emit("error",u),A.removeSocket(s)}};yt.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var A=this.requests.shift();A&&this.createSocket(A,function(s){A.request.onSocket(s)})}};function Uu(t,e){var r=this;yt.prototype.createSocket.call(r,t,function(A){var s=t.request.getHeader("host"),o=zi({},r.options,{socket:A,servername:s?s.replace(/:.*$/,""):t.host}),n=Hy.connect(0,o);r.sockets[r.sockets.indexOf(A)]=n,e(n)})}function Gu(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function zi(t){for(var e=1,r=arguments.length;e{Mu.exports=Lu()});var $=B((uJ,vu)=>{vu.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}});var Y=B((EJ,aE)=>{"use strict";var xu=Symbol.for("undici.error.UND_ERR"),ee=class extends Error{constructor(e){super(e),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&e[xu]===!0}[xu]=!0},Ou=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),ji=class extends ee{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ou]===!0}[Ou]=!0},Yu=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),Ki=class extends ee{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Yu]===!0}[Yu]=!0},_u=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Xi=class extends ee{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&e[_u]===!0}[_u]=!0},Ju=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),$i=class extends ee{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ju]===!0}[Ju]=!0},Pu=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),ea=class extends ee{constructor(e,r,A,s){super(e),this.name="ResponseStatusCodeError",this.message=e||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=s,this.status=r,this.statusCode=r,this.headers=A}static[Symbol.hasInstance](e){return e&&e[Pu]===!0}[Pu]=!0},Hu=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),ta=class extends ee{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&e[Hu]===!0}[Hu]=!0},Vu=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),ra=class extends ee{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&e[Vu]===!0}[Vu]=!0},qu=Symbol.for("undici.error.UND_ERR_ABORT"),Eo=class extends ee{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&e[qu]===!0}[qu]=!0},Wu=Symbol.for("undici.error.UND_ERR_ABORTED"),Aa=class extends Eo{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&e[Wu]===!0}[Wu]=!0},zu=Symbol.for("undici.error.UND_ERR_INFO"),sa=class extends ee{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&e[zu]===!0}[zu]=!0},Zu=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),oa=class extends ee{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[Zu]===!0}[Zu]=!0},ju=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),na=class extends ee{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[ju]===!0}[ju]=!0},Ku=Symbol.for("undici.error.UND_ERR_DESTROYED"),ia=class extends ee{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&e[Ku]===!0}[Ku]=!0},Xu=Symbol.for("undici.error.UND_ERR_CLOSED"),aa=class extends ee{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&e[Xu]===!0}[Xu]=!0},$u=Symbol.for("undici.error.UND_ERR_SOCKET"),ca=class extends ee{constructor(e,r){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=r}static[Symbol.hasInstance](e){return e&&e[$u]===!0}[$u]=!0},eE=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),ga=class extends ee{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&e[eE]===!0}[eE]=!0},tE=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),la=class extends ee{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&e[tE]===!0}[tE]=!0},rE=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),ua=class extends Error{constructor(e,r,A){super(e),this.name="HTTPParserError",this.code=r?`HPE_${r}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&e[rE]===!0}[rE]=!0},AE=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),Ea=class extends ee{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&e[AE]===!0}[AE]=!0},sE=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),ha=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[sE]===!0}[sE]=!0},oE=Symbol.for("undici.error.UND_ERR_RESPONSE"),Qa=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[oE]===!0}[oE]=!0},nE=Symbol.for("undici.error.UND_ERR_PRX_TLS"),Ba=class extends ee{constructor(e,r,A){super(r,{cause:e,...A??{}}),this.name="SecureProxyConnectionError",this.message=r||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&e[nE]===!0}[nE]=!0},iE=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),Ia=class extends ee{constructor(e){super(e),this.name="MessageSizeExceededError",this.message=e||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](e){return e&&e[iE]===!0}get[iE](){return!0}};aE.exports={AbortError:Eo,HTTPParserError:ua,UndiciError:ee,HeadersTimeoutError:Ki,HeadersOverflowError:Xi,BodyTimeoutError:$i,RequestContentLengthMismatchError:oa,ConnectTimeoutError:ji,ResponseStatusCodeError:ea,InvalidArgumentError:ta,InvalidReturnValueError:ra,RequestAbortedError:Aa,ClientDestroyedError:ia,ClientClosedError:aa,InformationalError:sa,SocketError:ca,NotSupportedError:ga,ResponseContentLengthMismatchError:na,BalancedPoolMissingUpstreamError:la,ResponseExceededMaxSizeError:Ea,RequestRetryError:ha,ResponseError:Qa,SecureProxyConnectionError:Ba,MessageSizeExceededError:Ia}});var Qo=B((hJ,cE)=>{"use strict";var ho={},Ca=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let t=0;t{"use strict";var{wellknownHeaderNames:gE,headerNameLowerCasedRecord:Ky}=Qo(),da=class t{value=null;left=null;middle=null;right=null;code;constructor(e,r,A){if(A===void 0||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new t(e,r,A):this.value=r}add(e,r){let A=e.length;if(A===0)throw new TypeError("Unreachable");let s=0,o=this;for(;;){let n=e.charCodeAt(s);if(n>127)throw new TypeError("key must be ascii string");if(o.code===n)if(A===++s){o.value=r;break}else if(o.middle!==null)o=o.middle;else{o.middle=new t(e,r,s);break}else if(o.code=65&&(o|=32);s!==null;){if(o===s.code){if(r===++A)return s;s=s.middle;break}s=s.code{"use strict";var KA=require("node:assert"),{kDestroyed:QE,kBodyUsed:Zr,kListeners:fa,kBody:hE}=$(),{IncomingMessage:Xy}=require("node:http"),fo=require("node:stream"),$y=require("node:net"),{Blob:eR}=require("node:buffer"),tR=require("node:util"),{stringify:rR}=require("node:querystring"),{EventEmitter:AR}=require("node:events"),{InvalidArgumentError:Ee}=Y(),{headerNameLowerCasedRecord:sR}=Qo(),{tree:BE}=EE(),[oR,nR]=process.versions.node.split(".").map(t=>Number(t)),Co=class{constructor(e){this[hE]=e,this[Zr]=!1}async*[Symbol.asyncIterator](){KA(!this[Zr],"disturbed"),this[Zr]=!0,yield*this[hE]}};function iR(t){return po(t)?(pE(t)===0&&t.on("data",function(){KA(!1)}),typeof t.readableDidRead!="boolean"&&(t[Zr]=!1,AR.prototype.on.call(t,"data",function(){this[Zr]=!0})),t):t&&typeof t.pipeTo=="function"?new Co(t):t&&typeof t!="string"&&!ArrayBuffer.isView(t)&&fE(t)?new Co(t):t}function aR(){}function po(t){return t&&typeof t=="object"&&typeof t.pipe=="function"&&typeof t.on=="function"}function IE(t){if(t===null)return!1;if(t instanceof eR)return!0;if(typeof t!="object")return!1;{let e=t[Symbol.toStringTag];return(e==="Blob"||e==="File")&&("stream"in t&&typeof t.stream=="function"||"arrayBuffer"in t&&typeof t.arrayBuffer=="function")}}function cR(t,e){if(t.includes("?")||t.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=rR(e);return r&&(t+="?"+r),t}function CE(t){let e=parseInt(t,10);return e===Number(t)&&e>=0&&e<=65535}function Io(t){return t!=null&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&(t[4]===":"||t[4]==="s"&&t[5]===":")}function dE(t){if(typeof t=="string"){if(t=new URL(t),!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}if(!t||typeof t!="object")throw new Ee("Invalid URL: The URL argument must be a non-null object.");if(!(t instanceof URL)){if(t.port!=null&&t.port!==""&&CE(t.port)===!1)throw new Ee("Invalid URL: port must be a valid integer or a string representation of an integer.");if(t.path!=null&&typeof t.path!="string")throw new Ee("Invalid URL path: the path must be a string or null/undefined.");if(t.pathname!=null&&typeof t.pathname!="string")throw new Ee("Invalid URL pathname: the pathname must be a string or null/undefined.");if(t.hostname!=null&&typeof t.hostname!="string")throw new Ee("Invalid URL hostname: the hostname must be a string or null/undefined.");if(t.origin!=null&&typeof t.origin!="string")throw new Ee("Invalid URL origin: the origin must be a string or null/undefined.");if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");let e=t.port!=null?t.port:t.protocol==="https:"?443:80,r=t.origin!=null?t.origin:`${t.protocol||""}//${t.hostname||""}:${e}`,A=t.path!=null?t.path:`${t.pathname||""}${t.search||""}`;return r[r.length-1]==="/"&&(r=r.slice(0,r.length-1)),A&&A[0]!=="/"&&(A=`/${A}`),new URL(`${r}${A}`)}if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}function gR(t){if(t=dE(t),t.pathname!=="/"||t.search||t.hash)throw new Ee("invalid url");return t}function lR(t){if(t[0]==="["){let r=t.indexOf("]");return KA(r!==-1),t.substring(1,r)}let e=t.indexOf(":");return e===-1?t:t.substring(0,e)}function uR(t){if(!t)return null;KA(typeof t=="string");let e=lR(t);return $y.isIP(e)?"":e}function ER(t){return JSON.parse(JSON.stringify(t))}function hR(t){return t!=null&&typeof t[Symbol.asyncIterator]=="function"}function fE(t){return t!=null&&(typeof t[Symbol.iterator]=="function"||typeof t[Symbol.asyncIterator]=="function")}function pE(t){if(t==null)return 0;if(po(t)){let e=t._readableState;return e&&e.objectMode===!1&&e.ended===!0&&Number.isFinite(e.length)?e.length:null}else{if(IE(t))return t.size!=null?t.size:null;if(yE(t))return t.byteLength}return null}function mE(t){return t&&!!(t.destroyed||t[QE]||fo.isDestroyed?.(t))}function QR(t,e){t==null||!po(t)||mE(t)||(typeof t.destroy=="function"?(Object.getPrototypeOf(t).constructor===Xy&&(t.socket=null),t.destroy(e)):e&&queueMicrotask(()=>{t.emit("error",e)}),t.destroyed!==!0&&(t[QE]=!0))}var BR=/timeout=(\d+)/;function IR(t){let e=t.toString().match(BR);return e?parseInt(e[1],10)*1e3:null}function wE(t){return typeof t=="string"?sR[t]??t.toLowerCase():BE.lookup(t)??t.toString("latin1").toLowerCase()}function CR(t){return BE.lookup(t)??t.toString("latin1").toLowerCase()}function dR(t,e){e===void 0&&(e={});for(let r=0;rn.toString("utf8")):o.toString("utf8")}}return"content-length"in e&&"content-disposition"in e&&(e["content-disposition"]=Buffer.from(e["content-disposition"]).toString("latin1")),e}function fR(t){let e=t.length,r=new Array(e),A=!1,s=-1,o,n,i=0;for(let a=0;a{r.close(),r.byobRequest?.respond(0)});else{let o=Buffer.isBuffer(s)?s:Buffer.from(s);o.byteLength&&r.enqueue(new Uint8Array(o))}return r.desiredSize>0},async cancel(r){await e.return()},type:"bytes"})}function TR(t){return t&&typeof t=="object"&&typeof t.append=="function"&&typeof t.delete=="function"&&typeof t.get=="function"&&typeof t.getAll=="function"&&typeof t.has=="function"&&typeof t.set=="function"&&t[Symbol.toStringTag]==="FormData"}function bR(t,e){return"addEventListener"in t?(t.addEventListener("abort",e,{once:!0}),()=>t.removeEventListener("abort",e)):(t.addListener("abort",e),()=>t.removeListener("abort",e))}var kR=typeof String.prototype.toWellFormed=="function",FR=typeof String.prototype.isWellFormed=="function";function RE(t){return kR?`${t}`.toWellFormed():tR.toUSVString(t)}function SR(t){return FR?`${t}`.isWellFormed():RE(t)===`${t}`}function DE(t){switch(t){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return t>=33&&t<=126}}function NR(t){if(t.length===0)return!1;for(let e=0;e{"use strict";var J=require("node:diagnostics_channel"),wa=require("node:util"),mo=wa.debuglog("undici"),ma=wa.debuglog("fetch"),Qr=wa.debuglog("websocket"),FE=!1,OR={beforeConnect:J.channel("undici:client:beforeConnect"),connected:J.channel("undici:client:connected"),connectError:J.channel("undici:client:connectError"),sendHeaders:J.channel("undici:client:sendHeaders"),create:J.channel("undici:request:create"),bodySent:J.channel("undici:request:bodySent"),headers:J.channel("undici:request:headers"),trailers:J.channel("undici:request:trailers"),error:J.channel("undici:request:error"),open:J.channel("undici:websocket:open"),close:J.channel("undici:websocket:close"),socketError:J.channel("undici:websocket:socket_error"),ping:J.channel("undici:websocket:ping"),pong:J.channel("undici:websocket:pong")};if(mo.enabled||ma.enabled){let t=ma.enabled?ma:mo;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s using %s%s errored - %s",`${o}${s?`:${s}`:""}`,A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)}),J.channel("undici:request:headers").subscribe(e=>{let{request:{method:r,path:A,origin:s},response:{statusCode:o}}=e;t("received response to %s %s/%s - HTTP %d",r,s,A,o)}),J.channel("undici:request:trailers").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("trailers received from %s %s/%s",r,s,A)}),J.channel("undici:request:error").subscribe(e=>{let{request:{method:r,path:A,origin:s},error:o}=e;t("request to %s %s/%s errored - %s",r,s,A,o.message)}),FE=!0}if(Qr.enabled){if(!FE){let t=mo.enabled?mo:Qr;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s%s using %s%s errored - %s",o,s?`:${s}`:"",A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)})}J.channel("undici:websocket:open").subscribe(t=>{let{address:{address:e,port:r}}=t;Qr("connection opened %s%s",e,r?`:${r}`:"")}),J.channel("undici:websocket:close").subscribe(t=>{let{websocket:e,code:r,reason:A}=t;Qr("closed connection to %s - %s %s",e.url,r,A)}),J.channel("undici:websocket:socket_error").subscribe(t=>{Qr("connection errored - %s",t.message)}),J.channel("undici:websocket:ping").subscribe(t=>{Qr("ping received")}),J.channel("undici:websocket:pong").subscribe(t=>{Qr("pong received")})}SE.exports={channels:OR}});var LE=B((CJ,GE)=>{"use strict";var{InvalidArgumentError:V,NotSupportedError:YR}=Y(),Rt=require("node:assert"),{isValidHTTPToken:UE,isValidHeaderValue:XA,isStream:_R,destroy:JR,isBuffer:PR,isFormDataLike:HR,isIterable:VR,isBlobLike:qR,buildURL:WR,validateHandler:zR,getServerName:ZR,normalizedMethodRecords:jR}=M(),{channels:lt}=jr(),{headerNameLowerCasedRecord:NE}=Qo(),KR=/[^\u0021-\u00ff]/,He=Symbol("handler"),ya=class{constructor(e,{path:r,method:A,body:s,headers:o,query:n,idempotent:i,blocking:a,upgrade:c,headersTimeout:g,bodyTimeout:l,reset:u,throwOnError:E,expectContinue:h,servername:C},I){if(typeof r!="string")throw new V("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&A!=="CONNECT")throw new V("path must be an absolute URL or start with a slash");if(KR.test(r))throw new V("invalid request path");if(typeof A!="string")throw new V("method must be a string");if(jR[A]===void 0&&!UE(A))throw new V("invalid request method");if(c&&typeof c!="string")throw new V("upgrade must be a string");if(c&&!XA(c))throw new V("invalid upgrade header");if(g!=null&&(!Number.isFinite(g)||g<0))throw new V("invalid headersTimeout");if(l!=null&&(!Number.isFinite(l)||l<0))throw new V("invalid bodyTimeout");if(u!=null&&typeof u!="boolean")throw new V("invalid reset");if(h!=null&&typeof h!="boolean")throw new V("invalid expectContinue");if(this.headersTimeout=g,this.bodyTimeout=l,this.throwOnError=E===!0,this.method=A,this.abort=null,s==null)this.body=null;else if(_R(s)){this.body=s;let Q=this.body._readableState;(!Q||!Q.autoDestroy)&&(this.endHandler=function(){JR(this)},this.body.on("end",this.endHandler)),this.errorHandler=f=>{this.abort?this.abort(f):this.error=f},this.body.on("error",this.errorHandler)}else if(PR(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if(typeof s=="string")this.body=s.length?Buffer.from(s):null;else if(HR(s)||VR(s)||qR(s))this.body=s;else throw new V("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=c||null,this.path=n?WR(r,n):r,this.origin=e,this.idempotent=i??(A==="HEAD"||A==="GET"),this.blocking=a??!1,this.reset=u??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=h??!1,Array.isArray(o)){if(o.length%2!==0)throw new V("headers array must be even");for(let Q=0;Q{"use strict";var XR=require("node:events"),yo=class extends XR{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){let r=Array.isArray(e[0])?e[0]:e,A=this.dispatch.bind(this);for(let s of r)if(s!=null){if(typeof s!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof s}`);if(A=s(A),A==null||typeof A!="function"||A.length!==2)throw new TypeError("invalid interceptor")}return new Ra(this,A)}},Ra=class extends yo{#e=null;#t=null;constructor(e,r){super(),this.#e=e,this.#t=r}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};ME.exports=yo});var eA=B((fJ,vE)=>{"use strict";var $R=$A(),{ClientDestroyedError:Da,ClientClosedError:eD,InvalidArgumentError:Kr}=Y(),{kDestroy:tD,kClose:rD,kClosed:es,kDestroyed:Xr,kDispatch:Ta,kInterceptors:Br}=$(),Dt=Symbol("onDestroyed"),$r=Symbol("onClosed"),Ro=Symbol("Intercepted Dispatch"),ba=Symbol("webSocketOptions"),ka=class extends $R{constructor(e){super(),this[Xr]=!1,this[Dt]=null,this[es]=!1,this[$r]=[],this[ba]=e?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[ba].maxFragments??131072,maxPayloadSize:this[ba].maxPayloadSize??128*1024*1024}}get destroyed(){return this[Xr]}get closed(){return this[es]}get interceptors(){return this[Br]}set interceptors(e){if(e){for(let r=e.length-1;r>=0;r--)if(typeof this[Br][r]!="function")throw new Kr("interceptor must be an function")}this[Br]=e}close(e){if(e===void 0)return new Promise((A,s)=>{this.close((o,n)=>o?s(o):A(n))});if(typeof e!="function")throw new Kr("invalid callback");if(this[Xr]){queueMicrotask(()=>e(new Da,null));return}if(this[es]){this[$r]?this[$r].push(e):queueMicrotask(()=>e(null,null));return}this[es]=!0,this[$r].push(e);let r=()=>{let A=this[$r];this[$r]=null;for(let s=0;sthis.destroy()).then(()=>{queueMicrotask(r)})}destroy(e,r){if(typeof e=="function"&&(r=e,e=null),r===void 0)return new Promise((s,o)=>{this.destroy(e,(n,i)=>n?o(n):s(i))});if(typeof r!="function")throw new Kr("invalid callback");if(this[Xr]){this[Dt]?this[Dt].push(r):queueMicrotask(()=>r(null,null));return}e||(e=new Da),this[Xr]=!0,this[Dt]=this[Dt]||[],this[Dt].push(r);let A=()=>{let s=this[Dt];this[Dt]=null;for(let o=0;o{queueMicrotask(A)})}[Ro](e,r){if(!this[Br]||this[Br].length===0)return this[Ro]=this[Ta],this[Ta](e,r);let A=this[Ta].bind(this);for(let s=this[Br].length-1;s>=0;s--)A=this[Br][s](A);return this[Ro]=A,A(e,r)}dispatch(e,r){if(!r||typeof r!="object")throw new Kr("handler must be an object");try{if(!e||typeof e!="object")throw new Kr("opts must be an object.");if(this[Xr]||this[Dt])throw new Da;if(this[es])throw new eD;return this[Ro](e,r)}catch(A){if(typeof r.onError!="function")throw new Kr("invalid onError method");return r.onError(A),!1}}};vE.exports=ka});var Ma=B((pJ,_E)=>{"use strict";var tA=0,Fa=1e3,Sa=(Fa>>1)-1,Tt,Na=Symbol("kFastTimer"),bt=[],Ua=-2,Ga=-1,OE=0,xE=1;function La(){tA+=Sa;let t=0,e=bt.length;for(;t=r._idleStart+r._idleTimeout&&(r._state=Ga,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===Ga?(r._state=Ua,--e!==0&&(bt[t]=bt[e])):++t}bt.length=e,bt.length!==0&&YE()}function YE(){Tt?Tt.refresh():(clearTimeout(Tt),Tt=setTimeout(La,Sa),Tt.unref&&Tt.unref())}var Do=class{[Na]=!0;_state=Ua;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,r,A){this._onTimeout=e,this._idleTimeout=r,this._timerArg=A,this.refresh()}refresh(){this._state===Ua&&bt.push(this),(!Tt||bt.length===1)&&YE(),this._state=OE}clear(){this._state=Ga,this._idleStart=-1}};_E.exports={setTimeout(t,e,r){return e<=Fa?setTimeout(t,e,r):new Do(t,e,r)},clearTimeout(t){t[Na]?t.clear():clearTimeout(t)},setFastTimeout(t,e,r){return new Do(t,e,r)},clearFastTimeout(t){t.clear()},now(){return tA},tick(t=0){tA+=t-Fa+1,La(),La()},reset(){tA=0,bt.length=0,clearTimeout(Tt),Tt=null},kFastTimer:Na}});var ts=B((yJ,qE)=>{"use strict";var AD=require("node:net"),JE=require("node:assert"),VE=M(),{InvalidArgumentError:sD,ConnectTimeoutError:oD}=Y(),To=Ma();function PE(){}var va,xa;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?xa=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry(r=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:A}=this._sessionCache.keys().next();this._sessionCache.delete(A)}this._sessionCache.set(e,r)}}};function nD({allowH2:t,maxCachedSessions:e,socketPath:r,timeout:A,session:s,...o}){if(e!=null&&(!Number.isInteger(e)||e<0))throw new sD("maxCachedSessions must be a positive integer or zero");let n={path:r,...o},i=new xa(e??100);return A=A??1e4,t=t??!1,function({hostname:c,host:g,protocol:l,port:u,servername:E,localAddress:h,httpSocket:C},I){let Q;if(l==="https:"){va||(va=require("node:tls")),E=E||n.servername||VE.getServerName(g)||null;let R=E||c;JE(R);let y=s||i.get(R)||null;u=u||443,Q=va.connect({highWaterMark:16384,...n,servername:E,session:y,localAddress:h,ALPNProtocols:t?["http/1.1","h2"]:["http/1.1"],socket:C,port:u,host:c}),Q.on("session",function(P){i.set(R,P)})}else JE(!C,"httpSocket can only be sent on TLS update"),u=u||80,Q=AD.connect({highWaterMark:64*1024,...n,localAddress:h,port:u,host:c});if(n.keepAlive==null||n.keepAlive){let R=n.keepAliveInitialDelay===void 0?6e4:n.keepAliveInitialDelay;Q.setKeepAlive(!0,R)}let f=iD(new WeakRef(Q),{timeout:A,hostname:c,port:u});return Q.setNoDelay(!0).once(l==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(f),I){let R=I;I=null,R(null,this)}}).on("error",function(R){if(queueMicrotask(f),I){let y=I;I=null,y(R)}}),Q}}var iD=process.platform==="win32"?(t,e)=>{if(!e.timeout)return PE;let r=null,A=null,s=To.setFastTimeout(()=>{r=setImmediate(()=>{A=setImmediate(()=>HE(t.deref(),e))})},e.timeout);return()=>{To.clearFastTimeout(s),clearImmediate(r),clearImmediate(A)}}:(t,e)=>{if(!e.timeout)return PE;let r=null,A=To.setFastTimeout(()=>{r=setImmediate(()=>{HE(t.deref(),e)})},e.timeout);return()=>{To.clearFastTimeout(A),clearImmediate(r)}};function HE(t,e){if(t==null)return;let r="Connect Timeout Error";Array.isArray(t.autoSelectFamilyAttemptedAddresses)?r+=` (attempted addresses: ${t.autoSelectFamilyAttemptedAddresses.join(", ")},`:r+=` (attempted address: ${e.hostname}:${e.port},`,r+=` timeout: ${e.timeout}ms)`,VE.destroy(t,new oD(r))}qE.exports=nD});var WE=B(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.enumToMap=void 0;function aD(t){let e={};return Object.keys(t).forEach(r=>{let A=t[r];typeof A=="number"&&(e[r]=A)}),e}bo.enumToMap=aD});var zE=B(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.SPECIAL_HEADERS=p.HEADER_STATE=p.MINOR=p.MAJOR=p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS=p.TOKEN=p.STRICT_TOKEN=p.HEX=p.URL_CHAR=p.STRICT_URL_CHAR=p.USERINFO_CHARS=p.MARK=p.ALPHANUM=p.NUM=p.HEX_MAP=p.NUM_MAP=p.ALPHA=p.FINISH=p.H_METHOD_MAP=p.METHOD_MAP=p.METHODS_RTSP=p.METHODS_ICE=p.METHODS_HTTP=p.METHODS=p.LENIENT_FLAGS=p.FLAGS=p.TYPE=p.ERROR=void 0;var cD=WE(),gD;(function(t){t[t.OK=0]="OK",t[t.INTERNAL=1]="INTERNAL",t[t.STRICT=2]="STRICT",t[t.LF_EXPECTED=3]="LF_EXPECTED",t[t.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",t[t.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",t[t.INVALID_METHOD=6]="INVALID_METHOD",t[t.INVALID_URL=7]="INVALID_URL",t[t.INVALID_CONSTANT=8]="INVALID_CONSTANT",t[t.INVALID_VERSION=9]="INVALID_VERSION",t[t.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",t[t.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",t[t.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",t[t.INVALID_STATUS=13]="INVALID_STATUS",t[t.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",t[t.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",t[t.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",t[t.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",t[t.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",t[t.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",t[t.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",t[t.PAUSED=21]="PAUSED",t[t.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",t[t.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",t[t.USER=24]="USER"})(gD=p.ERROR||(p.ERROR={}));var lD;(function(t){t[t.BOTH=0]="BOTH",t[t.REQUEST=1]="REQUEST",t[t.RESPONSE=2]="RESPONSE"})(lD=p.TYPE||(p.TYPE={}));var uD;(function(t){t[t.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",t[t.CHUNKED=8]="CHUNKED",t[t.UPGRADE=16]="UPGRADE",t[t.CONTENT_LENGTH=32]="CONTENT_LENGTH",t[t.SKIPBODY=64]="SKIPBODY",t[t.TRAILING=128]="TRAILING",t[t.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(uD=p.FLAGS||(p.FLAGS={}));var ED;(function(t){t[t.HEADERS=1]="HEADERS",t[t.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",t[t.KEEP_ALIVE=4]="KEEP_ALIVE"})(ED=p.LENIENT_FLAGS||(p.LENIENT_FLAGS={}));var k;(function(t){t[t.DELETE=0]="DELETE",t[t.GET=1]="GET",t[t.HEAD=2]="HEAD",t[t.POST=3]="POST",t[t.PUT=4]="PUT",t[t.CONNECT=5]="CONNECT",t[t.OPTIONS=6]="OPTIONS",t[t.TRACE=7]="TRACE",t[t.COPY=8]="COPY",t[t.LOCK=9]="LOCK",t[t.MKCOL=10]="MKCOL",t[t.MOVE=11]="MOVE",t[t.PROPFIND=12]="PROPFIND",t[t.PROPPATCH=13]="PROPPATCH",t[t.SEARCH=14]="SEARCH",t[t.UNLOCK=15]="UNLOCK",t[t.BIND=16]="BIND",t[t.REBIND=17]="REBIND",t[t.UNBIND=18]="UNBIND",t[t.ACL=19]="ACL",t[t.REPORT=20]="REPORT",t[t.MKACTIVITY=21]="MKACTIVITY",t[t.CHECKOUT=22]="CHECKOUT",t[t.MERGE=23]="MERGE",t[t["M-SEARCH"]=24]="M-SEARCH",t[t.NOTIFY=25]="NOTIFY",t[t.SUBSCRIBE=26]="SUBSCRIBE",t[t.UNSUBSCRIBE=27]="UNSUBSCRIBE",t[t.PATCH=28]="PATCH",t[t.PURGE=29]="PURGE",t[t.MKCALENDAR=30]="MKCALENDAR",t[t.LINK=31]="LINK",t[t.UNLINK=32]="UNLINK",t[t.SOURCE=33]="SOURCE",t[t.PRI=34]="PRI",t[t.DESCRIBE=35]="DESCRIBE",t[t.ANNOUNCE=36]="ANNOUNCE",t[t.SETUP=37]="SETUP",t[t.PLAY=38]="PLAY",t[t.PAUSE=39]="PAUSE",t[t.TEARDOWN=40]="TEARDOWN",t[t.GET_PARAMETER=41]="GET_PARAMETER",t[t.SET_PARAMETER=42]="SET_PARAMETER",t[t.REDIRECT=43]="REDIRECT",t[t.RECORD=44]="RECORD",t[t.FLUSH=45]="FLUSH"})(k=p.METHODS||(p.METHODS={}));p.METHODS_HTTP=[k.DELETE,k.GET,k.HEAD,k.POST,k.PUT,k.CONNECT,k.OPTIONS,k.TRACE,k.COPY,k.LOCK,k.MKCOL,k.MOVE,k.PROPFIND,k.PROPPATCH,k.SEARCH,k.UNLOCK,k.BIND,k.REBIND,k.UNBIND,k.ACL,k.REPORT,k.MKACTIVITY,k.CHECKOUT,k.MERGE,k["M-SEARCH"],k.NOTIFY,k.SUBSCRIBE,k.UNSUBSCRIBE,k.PATCH,k.PURGE,k.MKCALENDAR,k.LINK,k.UNLINK,k.PRI,k.SOURCE];p.METHODS_ICE=[k.SOURCE];p.METHODS_RTSP=[k.OPTIONS,k.DESCRIBE,k.ANNOUNCE,k.SETUP,k.PLAY,k.PAUSE,k.TEARDOWN,k.GET_PARAMETER,k.SET_PARAMETER,k.REDIRECT,k.RECORD,k.FLUSH,k.GET,k.POST];p.METHOD_MAP=cD.enumToMap(k);p.H_METHOD_MAP={};Object.keys(p.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(p.H_METHOD_MAP[t]=p.METHOD_MAP[t])});var hD;(function(t){t[t.SAFE=0]="SAFE",t[t.SAFE_WITH_CB=1]="SAFE_WITH_CB",t[t.UNSAFE=2]="UNSAFE"})(hD=p.FINISH||(p.FINISH={}));p.ALPHA=[];for(let t=65;t<=90;t++)p.ALPHA.push(String.fromCharCode(t)),p.ALPHA.push(String.fromCharCode(t+32));p.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};p.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};p.NUM=["0","1","2","3","4","5","6","7","8","9"];p.ALPHANUM=p.ALPHA.concat(p.NUM);p.MARK=["-","_",".","!","~","*","'","(",")"];p.USERINFO_CHARS=p.ALPHANUM.concat(p.MARK).concat(["%",";",":","&","=","+","$",","]);p.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(p.ALPHANUM);p.URL_CHAR=p.STRICT_URL_CHAR.concat([" ","\f"]);for(let t=128;t<=255;t++)p.URL_CHAR.push(t);p.HEX=p.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);p.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(p.ALPHANUM);p.TOKEN=p.STRICT_TOKEN.concat([" "]);p.HEADER_CHARS=[" "];for(let t=32;t<=255;t++)t!==127&&p.HEADER_CHARS.push(t);p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS.filter(t=>t!==44);p.MAJOR=p.NUM_MAP;p.MINOR=p.MAJOR;var rA;(function(t){t[t.GENERAL=0]="GENERAL",t[t.CONNECTION=1]="CONNECTION",t[t.CONTENT_LENGTH=2]="CONTENT_LENGTH",t[t.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",t[t.UPGRADE=4]="UPGRADE",t[t.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",t[t.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})(rA=p.HEADER_STATE||(p.HEADER_STATE={}));p.SPECIAL_HEADERS={connection:rA.CONNECTION,"content-length":rA.CONTENT_LENGTH,"proxy-connection":rA.CONNECTION,"transfer-encoding":rA.TRANSFER_ENCODING,upgrade:rA.UPGRADE}});var Oa=B((TJ,ZE)=>{"use strict";var{Buffer:QD}=require("node:buffer");ZE.exports=QD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var KE=B((bJ,jE)=>{"use strict";var{Buffer:BD}=require("node:buffer");jE.exports=BD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var rs=B((kJ,oh)=>{"use strict";var XE=["GET","HEAD","POST"],ID=new Set(XE),CD=[101,204,205,304],$E=[301,302,303,307,308],dD=new Set($E),eh=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],fD=new Set(eh),th=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],pD=new Set(th),mD=["follow","manual","error"],rh=["GET","HEAD","OPTIONS","TRACE"],wD=new Set(rh),yD=["navigate","same-origin","no-cors","cors"],RD=["omit","same-origin","include"],DD=["default","no-store","reload","no-cache","force-cache","only-if-cached"],TD=["content-encoding","content-language","content-location","content-type","content-length"],bD=["half"],Ah=["CONNECT","TRACE","TRACK"],kD=new Set(Ah),sh=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],FD=new Set(sh);oh.exports={subresource:sh,forbiddenMethods:Ah,requestBodyHeader:TD,referrerPolicy:th,requestRedirect:mD,requestMode:yD,requestCredentials:RD,requestCache:DD,redirectStatus:$E,corsSafeListedMethods:XE,nullBodyStatus:CD,safeMethods:rh,badPorts:eh,requestDuplex:bD,subresourceSet:FD,badPortsSet:fD,redirectStatusSet:dD,corsSafeListedMethodsSet:ID,safeMethodsSet:wD,forbiddenMethodsSet:kD,referrerPolicySet:pD}});var _a=B((FJ,nh)=>{"use strict";var Ya=Symbol.for("undici.globalOrigin.1");function SD(){return globalThis[Ya]}function ND(t){if(t===void 0){Object.defineProperty(globalThis,Ya,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let e=new URL(t);if(e.protocol!=="http:"&&e.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${e.protocol}`);Object.defineProperty(globalThis,Ya,{value:e,writable:!0,enumerable:!1,configurable:!1})}nh.exports={getGlobalOrigin:SD,setGlobalOrigin:ND}});var Te=B((SJ,Eh)=>{"use strict";var Fo=require("node:assert"),UD=new TextEncoder,As=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,GD=/[\u000A\u000D\u0009\u0020]/,LD=/[\u0009\u000A\u000C\u000D\u0020]/g,MD=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function vD(t){Fo(t.protocol==="data:");let e=ch(t,!0);e=e.slice(5);let r={position:0},A=AA(",",e,r),s=A.length;if(A=PD(A,!0,!0),r.position>=e.length)return"failure";r.position++;let o=e.slice(s+1),n=gh(o);if(/;(\u0020){0,}base64$/i.test(A)){let a=uh(n);if(n=OD(a),n==="failure")return"failure";A=A.slice(0,-6),A=A.replace(/(\u0020)+$/,""),A=A.slice(0,-1)}A.startsWith(";")&&(A="text/plain"+A);let i=Ja(A);return i==="failure"&&(i=Ja("text/plain;charset=US-ASCII")),{mimeType:i,body:n}}function ch(t,e=!1){if(!e)return t.href;let r=t.href,A=t.hash.length,s=A===0?r:r.substring(0,r.length-A);return!A&&r.endsWith("#")?s.slice(0,-1):s}function So(t,e,r){let A="";for(;r.position=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function ah(t){return t>=48&&t<=57?t-48:(t&223)-55}function xD(t){let e=t.length,r=new Uint8Array(e),A=0;for(let s=0;st.length)return"failure";e.position++;let A=AA(";",t,e);if(A=ko(A,!1,!0),A.length===0||!As.test(A))return"failure";let s=r.toLowerCase(),o=A.toLowerCase(),n={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;e.positionGD.test(c),t,e);let i=So(c=>c!==";"&&c!=="=",t,e);if(i=i.toLowerCase(),e.positiont.length)break;let a=null;if(t[e.position]==='"')a=lh(t,e,!0),AA(";",t,e);else if(a=AA(";",t,e),a=ko(a,!1,!0),a.length===0)continue;i.length!==0&&As.test(i)&&(a.length===0||MD.test(a))&&!n.parameters.has(i)&&n.parameters.set(i,a)}return n}function OD(t){t=t.replace(LD,"");let e=t.length;if(e%4===0&&t.charCodeAt(e-1)===61&&(--e,t.charCodeAt(e-1)===61&&--e),e%4===1||/[^+/0-9A-Za-z]/.test(t.length===e?t:t.substring(0,e)))return"failure";let r=Buffer.from(t,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function lh(t,e,r){let A=e.position,s="";for(Fo(t[e.position]==='"'),e.position++;s+=So(n=>n!=='"'&&n!=="\\",t,e),!(e.position>=t.length);){let o=t[e.position];if(e.position++,o==="\\"){if(e.position>=t.length){s+="\\";break}s+=t[e.position],e.position++}else{Fo(o==='"');break}}return r?s:t.slice(A,e.position)}function YD(t){Fo(t!=="failure");let{parameters:e,essence:r}=t,A=r;for(let[s,o]of e.entries())A+=";",A+=s,A+="=",As.test(o)||(o=o.replace(/(\\|")/g,"\\$1"),o='"'+o,o+='"'),A+=o;return A}function _D(t){return t===13||t===10||t===9||t===32}function ko(t,e=!0,r=!0){return Pa(t,e,r,_D)}function JD(t){return t===13||t===10||t===9||t===12||t===32}function PD(t,e=!0,r=!0){return Pa(t,e,r,JD)}function Pa(t,e,r,A){let s=0,o=t.length-1;if(e)for(;s0&&A(t.charCodeAt(o));)o--;return s===0&&o===t.length-1?t:t.slice(s,o+1)}function uh(t){let e=t.length;if(65535>e)return String.fromCharCode.apply(null,t);let r="",A=0,s=65535;for(;Ae&&(s=e-A),r+=String.fromCharCode.apply(null,t.subarray(A,A+=s));return r}function HD(t){switch(t.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return t.subtype.endsWith("+json")?"application/json":t.subtype.endsWith("+xml")?"application/xml":""}Eh.exports={dataURLProcessor:vD,URLSerializer:ch,collectASequenceOfCodePoints:So,collectASequenceOfCodePointsFast:AA,stringPercentDecode:gh,parseMIMEType:Ja,collectAnHTTPQuotedString:lh,serializeAMimeType:YD,removeChars:Pa,removeHTTPWhitespace:ko,minimizeSupportedMimeType:HD,HTTP_TOKEN_CODEPOINTS:As,isomorphicDecode:uh}});var Qe=B((NJ,hh)=>{"use strict";var{types:ut,inspect:VD}=require("node:util"),{markAsUncloneable:qD}=require("node:worker_threads"),{toUSVString:WD}=M(),d={};d.converters={};d.util={};d.errors={};d.errors.exception=function(t){return new TypeError(`${t.header}: ${t.message}`)};d.errors.conversionFailed=function(t){let e=t.types.length===1?"":" one of",r=`${t.argument} could not be converted to${e}: ${t.types.join(", ")}.`;return d.errors.exception({header:t.prefix,message:r})};d.errors.invalidArgument=function(t){return d.errors.exception({header:t.prefix,message:`"${t.value}" is an invalid ${t.type}.`})};d.brandCheck=function(t,e,r){if(r?.strict!==!1){if(!(t instanceof e)){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}}else if(t?.[Symbol.toStringTag]!==e.prototype[Symbol.toStringTag]){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}};d.argumentLengthCheck=function({length:t},e,r){if(t{});d.util.ConvertToInt=function(t,e,r,A){let s,o;e===64?(s=Math.pow(2,53)-1,r==="unsigned"?o=0:o=Math.pow(-2,53)+1):r==="unsigned"?(o=0,s=Math.pow(2,e)-1):(o=Math.pow(-2,e)-1,s=Math.pow(2,e-1)-1);let n=Number(t);if(n===0&&(n=0),A?.enforceRange===!0){if(Number.isNaN(n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY)throw d.errors.exception({header:"Integer conversion",message:`Could not convert ${d.util.Stringify(t)} to an integer.`});if(n=d.util.IntegerPart(n),ns)throw d.errors.exception({header:"Integer conversion",message:`Value must be between ${o}-${s}, got ${n}.`});return n}return!Number.isNaN(n)&&A?.clamp===!0?(n=Math.min(Math.max(n,o),s),Math.floor(n)%2===0?n=Math.floor(n):n=Math.ceil(n),n):Number.isNaN(n)||n===0&&Object.is(0,n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY?0:(n=d.util.IntegerPart(n),n=n%Math.pow(2,e),r==="signed"&&n>=Math.pow(2,e)-1?n-Math.pow(2,e):n)};d.util.IntegerPart=function(t){let e=Math.floor(Math.abs(t));return t<0?-1*e:e};d.util.Stringify=function(t){switch(d.util.Type(t)){case"Symbol":return`Symbol(${t.description})`;case"Object":return VD(t);case"String":return`"${t}"`;default:return`${t}`}};d.sequenceConverter=function(t){return(e,r,A,s)=>{if(d.util.Type(e)!=="Object")throw d.errors.exception({header:r,message:`${A} (${d.util.Stringify(e)}) is not iterable.`});let o=typeof s=="function"?s():e?.[Symbol.iterator]?.(),n=[],i=0;if(o===void 0||typeof o.next!="function")throw d.errors.exception({header:r,message:`${A} is not iterable.`});for(;;){let{done:a,value:c}=o.next();if(a)break;n.push(t(c,r,`${A}[${i++}]`))}return n}};d.recordConverter=function(t,e){return(r,A,s)=>{if(d.util.Type(r)!=="Object")throw d.errors.exception({header:A,message:`${s} ("${d.util.Type(r)}") is not an Object.`});let o={};if(!ut.isProxy(r)){let i=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let a of i){let c=t(a,A,s),g=e(r[a],A,s);o[c]=g}return o}let n=Reflect.ownKeys(r);for(let i of n)if(Reflect.getOwnPropertyDescriptor(r,i)?.enumerable){let c=t(i,A,s),g=e(r[i],A,s);o[c]=g}return o}};d.interfaceConverter=function(t){return(e,r,A,s)=>{if(s?.strict!==!1&&!(e instanceof t))throw d.errors.exception({header:r,message:`Expected ${A} ("${d.util.Stringify(e)}") to be an instance of ${t.name}.`});return e}};d.dictionaryConverter=function(t){return(e,r,A)=>{let s=d.util.Type(e),o={};if(s==="Null"||s==="Undefined")return o;if(s!=="Object")throw d.errors.exception({header:r,message:`Expected ${e} to be one of: Null, Undefined, Object.`});for(let n of t){let{key:i,defaultValue:a,required:c,converter:g}=n;if(c===!0&&!Object.hasOwn(e,i))throw d.errors.exception({header:r,message:`Missing required key "${i}".`});let l=e[i],u=Object.hasOwn(n,"defaultValue");if(u&&l!==null&&(l??=a()),c||u||l!==void 0){if(l=g(l,r,`${A}.${i}`),n.allowedValues&&!n.allowedValues.includes(l))throw d.errors.exception({header:r,message:`${l} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});o[i]=l}}return o}};d.nullableConverter=function(t){return(e,r,A)=>e===null?e:t(e,r,A)};d.converters.DOMString=function(t,e,r,A){if(t===null&&A?.legacyNullToEmptyString)return"";if(typeof t=="symbol")throw d.errors.exception({header:e,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(t)};d.converters.ByteString=function(t,e,r){let A=d.converters.DOMString(t,e,r);for(let s=0;s255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${s} has a value of ${A.charCodeAt(s)} which is greater than 255.`);return A};d.converters.USVString=WD;d.converters.boolean=function(t){return!!t};d.converters.any=function(t){return t};d.converters["long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"signed",void 0,e,r)};d.converters["unsigned long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"unsigned",void 0,e,r)};d.converters["unsigned long"]=function(t,e,r){return d.util.ConvertToInt(t,32,"unsigned",void 0,e,r)};d.converters["unsigned short"]=function(t,e,r,A){return d.util.ConvertToInt(t,16,"unsigned",A,e,r)};d.converters.ArrayBuffer=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isAnyArrayBuffer(t))throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["ArrayBuffer"]});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.resizable||t.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.TypedArray=function(t,e,r,A,s){if(d.util.Type(t)!=="Object"||!ut.isTypedArray(t)||t.constructor.name!==e.name)throw d.errors.conversionFailed({prefix:r,argument:`${A} ("${d.util.Stringify(t)}")`,types:[e.name]});if(s?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.DataView=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isDataView(t))throw d.errors.exception({header:e,message:`${r} is not a DataView.`});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.BufferSource=function(t,e,r,A){if(ut.isAnyArrayBuffer(t))return d.converters.ArrayBuffer(t,e,r,{...A,allowShared:!1});if(ut.isTypedArray(t))return d.converters.TypedArray(t,t.constructor,e,r,{...A,allowShared:!1});if(ut.isDataView(t))return d.converters.DataView(t,e,r,{...A,allowShared:!1});throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["BufferSource"]})};d.converters["sequence"]=d.sequenceConverter(d.converters.ByteString);d.converters["sequence>"]=d.sequenceConverter(d.converters["sequence"]);d.converters["record"]=d.recordConverter(d.converters.ByteString,d.converters.ByteString);hh.exports={webidl:d}});var Ge=B((UJ,bh)=>{"use strict";var{Transform:zD}=require("node:stream"),Qh=require("node:zlib"),{redirectStatusSet:ZD,referrerPolicySet:jD,badPortsSet:KD}=rs(),{getGlobalOrigin:Bh}=_a(),{collectASequenceOfCodePoints:Ir,collectAnHTTPQuotedString:XD,removeChars:$D,parseMIMEType:e0}=Te(),{performance:t0}=require("node:perf_hooks"),{isBlobLike:r0,ReadableStreamFrom:A0,isValidHTTPToken:Ih,normalizedMethodRecordsBase:s0}=M(),Cr=require("node:assert"),{isUint8Array:o0}=require("node:util/types"),{webidl:ss}=Qe(),Ch=[],Uo;try{Uo=require("node:crypto");let t=["sha256","sha384","sha512"];Ch=Uo.getHashes().filter(e=>t.includes(e))}catch{}function dh(t){let e=t.urlList,r=e.length;return r===0?null:e[r-1].toString()}function n0(t,e){if(!ZD.has(t.status))return null;let r=t.headersList.get("location",!0);return r!==null&&ph(r)&&(fh(r)||(r=i0(r)),r=new URL(r,dh(t))),r&&!r.hash&&(r.hash=e),r}function fh(t){for(let e=0;e126||r<32)return!1}return!0}function i0(t){return Buffer.from(t,"binary").toString("utf8")}function ns(t){return t.urlList[t.urlList.length-1]}function a0(t){let e=ns(t);return Dh(e)&&KD.has(e.port)?"blocked":"allowed"}function c0(t){return t instanceof Error||t?.constructor?.name==="Error"||t?.constructor?.name==="DOMException"}function g0(t){for(let e=0;e=32&&r<=126||r>=128&&r<=255))return!1}return!0}var l0=Ih;function ph(t){return(t[0]===" "||t[0]===" "||t[t.length-1]===" "||t[t.length-1]===" "||t.includes(` -`)||t.includes("\r")||t.includes("\0"))===!1}function u0(t,e){let{headersList:r}=e,A=(r.get("referrer-policy",!0)??"").split(","),s="";if(A.length>0)for(let o=A.length;o!==0;o--){let n=A[o-1].trim();if(jD.has(n)){s=n;break}}s!==""&&(t.referrerPolicy=s)}function E0(){return"allowed"}function h0(){return"success"}function Q0(){return"success"}function B0(t){let e=null;e=t.mode,t.headersList.set("sec-fetch-mode",e,!0)}function I0(t){let e=t.origin;if(!(e==="client"||e===void 0)){if(t.responseTainting==="cors"||t.mode==="websocket")t.headersList.append("origin",e,!0);else if(t.method!=="GET"&&t.method!=="HEAD"){switch(t.referrerPolicy){case"no-referrer":e=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":t.origin&&Va(t.origin)&&!Va(ns(t))&&(e=null);break;case"same-origin":Go(t,ns(t))||(e=null);break;default:}t.headersList.append("origin",e,!0)}}}function sA(t,e){return t}function C0(t,e,r){return!t?.startTime||t.startTime4096&&(A=s);let o=Go(t,A),n=os(A)&&!os(t.url);switch(e){case"origin":return s??Ha(r,!0);case"unsafe-url":return A;case"same-origin":return o?s:"no-referrer";case"origin-when-cross-origin":return o?A:s;case"strict-origin-when-cross-origin":{let i=ns(t);return Go(A,i)?A:os(A)&&!os(i)?"no-referrer":s}default:return n?"no-referrer":s}}function Ha(t,e){return Cr(t instanceof URL),t=new URL(t),t.protocol==="file:"||t.protocol==="about:"||t.protocol==="blank:"?"no-referrer":(t.username="",t.password="",t.hash="",e&&(t.pathname="",t.search=""),t)}function os(t){if(!(t instanceof URL))return!1;if(t.href==="about:blank"||t.href==="about:srcdoc"||t.protocol==="data:"||t.protocol==="file:")return!0;return e(t.origin);function e(r){if(r==null||r==="null")return!1;let A=new URL(r);return!!(A.protocol==="https:"||A.protocol==="wss:"||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(A.hostname)||A.hostname==="localhost"||A.hostname.includes("localhost.")||A.hostname.endsWith(".localhost"))}}function w0(t,e){if(Uo===void 0)return!0;let r=wh(e);if(r==="no metadata"||r.length===0)return!0;let A=R0(r),s=D0(r,A);for(let o of s){let n=o.algo,i=o.hash,a=Uo.createHash(n).update(t).digest("base64");if(a[a.length-1]==="="&&(a[a.length-2]==="="?a=a.slice(0,-2):a=a.slice(0,-1)),T0(a,i))return!0}return!1}var y0=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function wh(t){let e=[],r=!0;for(let A of t.split(" ")){r=!1;let s=y0.exec(A);if(s===null||s.groups===void 0||s.groups.algo===void 0)continue;let o=s.groups.algo.toLowerCase();Ch.includes(o)&&e.push(s.groups)}return r===!0?"no metadata":e}function R0(t){let e=t[0].algo;if(e[3]==="5")return e;for(let r=1;r{t=A,e=s}),resolve:t,reject:e}}function F0(t){return t.controller.state==="aborted"}function S0(t){return t.controller.state==="aborted"||t.controller.state==="terminated"}function N0(t){return s0[t.toLowerCase()]??t}function U0(t){let e=JSON.stringify(t);if(e===void 0)throw new TypeError("Value is not JSON serializable");return Cr(typeof e=="string"),e}var G0=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function yh(t,e,r=0,A=1){class s{#e;#t;#r;constructor(n,i){this.#e=n,this.#t=i,this.#r=0}next(){if(typeof this!="object"||this===null||!(#e in this))throw new TypeError(`'next' called on an object that does not implement interface ${t} Iterator.`);let n=this.#r,i=this.#e[e],a=i.length;if(n>=a)return{value:void 0,done:!0};let{[r]:c,[A]:g}=i[n];this.#r=n+1;let l;switch(this.#t){case"key":l=c;break;case"value":l=g;break;case"key+value":l=[c,g];break}return{value:l,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,G0),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${t} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(o,n){return new s(o,n)}}function L0(t,e,r,A=0,s=1){let o=yh(t,r,A,s),n={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(a,c=globalThis){if(ss.brandCheck(this,e),ss.argumentLengthCheck(arguments,1,`${t}.forEach`),typeof a!="function")throw new TypeError(`Failed to execute 'forEach' on '${t}': parameter 1 is not of type 'Function'.`);for(let{0:g,1:l}of o(this,"key+value"))a.call(c,l,g,this)}}};return Object.defineProperties(e.prototype,{...n,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:n.entries.value}})}async function M0(t,e,r){let A=e,s=r,o;try{o=t.stream.getReader()}catch(n){s(n);return}try{A(await Rh(o))}catch(n){s(n)}}function v0(t){return t instanceof ReadableStream||t[Symbol.toStringTag]==="ReadableStream"&&typeof t.tee=="function"}function x0(t){try{t.close(),t.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}}var O0=/[^\x00-\xFF]/;function No(t){return Cr(!O0.test(t)),t}async function Rh(t){let e=[],r=0;for(;;){let{done:A,value:s}=await t.read();if(A)return Buffer.concat(e,r);if(!o0(s))throw new TypeError("Received non-Uint8Array chunk");e.push(s),r+=s.length}}function Y0(t){Cr("protocol"in t);let e=t.protocol;return e==="about:"||e==="blob:"||e==="data:"}function Va(t){return typeof t=="string"&&t[5]===":"&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&t[4]==="s"||t.protocol==="https:"}function Dh(t){Cr("protocol"in t);let e=t.protocol;return e==="http:"||e==="https:"}function _0(t,e){let r=t;if(!r.startsWith("bytes"))return"failure";let A={position:5};if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==61)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let s=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),o=s.length?Number(s):null;if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==45)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let n=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),i=n.length?Number(n):null;return A.positioni?"failure":{rangeStartValue:o,rangeEndValue:i}}function J0(t,e,r){let A="bytes ";return A+=No(`${t}`),A+="-",A+=No(`${e}`),A+="/",A+=No(`${r}`),A}var qa=class extends zD{#e;constructor(e){super(),this.#e=e}_transform(e,r,A){if(!this._inflateStream){if(e.length===0){A();return}this._inflateStream=(e[0]&15)===8?Qh.createInflate(this.#e):Qh.createInflateRaw(this.#e),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",s=>this.destroy(s))}this._inflateStream.write(e,r,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}};function P0(t){return new qa(t)}function H0(t){let e=null,r=null,A=null,s=Th("content-type",t);if(s===null)return"failure";for(let o of s){let n=e0(o);n==="failure"||n.essence==="*/*"||(A=n,A.essence!==r?(e=null,A.parameters.has("charset")&&(e=A.parameters.get("charset")),r=A.essence):!A.parameters.has("charset")&&e!==null&&A.parameters.set("charset",e))}return A??"failure"}function V0(t){let e=t,r={position:0},A=[],s="";for(;r.positiono!=='"'&&o!==",",e,r),r.positiono===9||o===32),A.push(s),s=""}return A}function Th(t,e){let r=e.get(t,!0);return r===null?null:V0(r)}var q0=new TextDecoder;function W0(t){return t.length===0?"":(t[0]===239&&t[1]===187&&t[2]===191&&(t=t.subarray(3)),q0.decode(t))}var Wa=class{get baseUrl(){return Bh()}get origin(){return this.baseUrl?.origin}policyContainer=mh()},za=class{settingsObject=new Wa},z0=new za;bh.exports={isAborted:F0,isCancelled:S0,isValidEncodedURL:fh,createDeferredPromise:k0,ReadableStreamFrom:A0,tryUpgradeRequestToAPotentiallyTrustworthyURL:b0,clampAndCoarsenConnectionTimingInfo:C0,coarsenedSharedCurrentTime:d0,determineRequestsReferrer:m0,makePolicyContainer:mh,clonePolicyContainer:p0,appendFetchMetadata:B0,appendRequestOriginHeader:I0,TAOCheck:Q0,corsCheck:h0,crossOriginResourcePolicyCheck:E0,createOpaqueTimingInfo:f0,setRequestReferrerPolicyOnRedirect:u0,isValidHTTPToken:Ih,requestBadPort:a0,requestCurrentURL:ns,responseURL:dh,responseLocationURL:n0,isBlobLike:r0,isURLPotentiallyTrustworthy:os,isValidReasonPhrase:g0,sameOrigin:Go,normalizeMethod:N0,serializeJavascriptValueToJSONString:U0,iteratorMixin:L0,createIterator:yh,isValidHeaderName:l0,isValidHeaderValue:ph,isErrorLike:c0,fullyReadBody:M0,bytesMatch:w0,isReadableStreamLike:v0,readableStreamClose:x0,isomorphicEncode:No,urlIsLocal:Y0,urlHasHttpsScheme:Va,urlIsHttpHttpsScheme:Dh,readAllBytes:Rh,simpleRangeHeaderValue:_0,buildContentRange:J0,parseMetadata:wh,createInflate:P0,extractMimeType:H0,getDecodeSplit:Th,utf8DecodeBytes:W0,environmentSettingsObject:z0}});var Pt=B((GJ,kh)=>{"use strict";kh.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var ja=B((LJ,Fh)=>{"use strict";var{Blob:Z0,File:j0}=require("node:buffer"),{kState:kt}=Pt(),{webidl:Et}=Qe(),Za=class t{constructor(e,r,A={}){let s=r,o=A.type,n=A.lastModified??Date.now();this[kt]={blobLike:e,name:s,type:o,lastModified:n}}stream(...e){return Et.brandCheck(this,t),this[kt].blobLike.stream(...e)}arrayBuffer(...e){return Et.brandCheck(this,t),this[kt].blobLike.arrayBuffer(...e)}slice(...e){return Et.brandCheck(this,t),this[kt].blobLike.slice(...e)}text(...e){return Et.brandCheck(this,t),this[kt].blobLike.text(...e)}get size(){return Et.brandCheck(this,t),this[kt].blobLike.size}get type(){return Et.brandCheck(this,t),this[kt].blobLike.type}get name(){return Et.brandCheck(this,t),this[kt].name}get lastModified(){return Et.brandCheck(this,t),this[kt].lastModified}get[Symbol.toStringTag](){return"File"}};Et.converters.Blob=Et.interfaceConverter(Z0);function K0(t){return t instanceof j0||t&&(typeof t.stream=="function"||typeof t.arrayBuffer=="function")&&t[Symbol.toStringTag]==="File"}Fh.exports={FileLike:Za,isFileLike:K0}});var as=B((MJ,Lh)=>{"use strict";var{isBlobLike:Lo,iteratorMixin:X0}=Ge(),{kState:fe}=Pt(),{kEnumerableProperty:oA}=M(),{FileLike:Sh,isFileLike:$0}=ja(),{webidl:z}=Qe(),{File:Gh}=require("node:buffer"),Nh=require("node:util"),Uh=globalThis.File??Gh,is=class t{constructor(e){if(z.util.markAsUncloneable(this),e!==void 0)throw z.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[fe]=[]}append(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.append";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"value",{strict:!1}):z.converters.USVString(r,s,"value"),A=arguments.length===3?z.converters.USVString(A,s,"filename"):void 0;let o=Ka(e,r,A);this[fe].push(o)}delete(e){z.brandCheck(this,t);let r="FormData.delete";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe]=this[fe].filter(A=>A.name!==e)}get(e){z.brandCheck(this,t);let r="FormData.get";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name");let A=this[fe].findIndex(s=>s.name===e);return A===-1?null:this[fe][A].value}getAll(e){z.brandCheck(this,t);let r="FormData.getAll";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].filter(A=>A.name===e).map(A=>A.value)}has(e){z.brandCheck(this,t);let r="FormData.has";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].findIndex(A=>A.name===e)!==-1}set(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.set";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"name",{strict:!1}):z.converters.USVString(r,s,"name"),A=arguments.length===3?z.converters.USVString(A,s,"name"):void 0;let o=Ka(e,r,A),n=this[fe].findIndex(i=>i.name===e);n!==-1?this[fe]=[...this[fe].slice(0,n),o,...this[fe].slice(n+1).filter(i=>i.name!==e)]:this[fe].push(o)}[Nh.inspect.custom](e,r){let A=this[fe].reduce((o,n)=>(o[n.name]?Array.isArray(o[n.name])?o[n.name].push(n.value):o[n.name]=[o[n.name],n.value]:o[n.name]=n.value,o),{__proto__:null});r.depth??=e,r.colors??=!0;let s=Nh.formatWithOptions(r,A);return`FormData ${s.slice(s.indexOf("]")+2)}`}};X0("FormData",is,fe,"name","value");Object.defineProperties(is.prototype,{append:oA,delete:oA,get:oA,getAll:oA,has:oA,set:oA,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function Ka(t,e,r){if(typeof e!="string"){if($0(e)||(e=e instanceof Blob?new Uh([e],"blob",{type:e.type}):new Sh(e,"blob",{type:e.type})),r!==void 0){let A={type:e.type,lastModified:e.lastModified};e=e instanceof Gh?new Uh([e],r,A):new Sh(e,r,A)}}return{name:t,value:e}}Lh.exports={FormData:is,makeEntry:Ka}});var _h=B((vJ,Yh)=>{"use strict";var{isUSVString:Mh,bufferToLowerCasedHeaderName:eT}=M(),{utf8DecodeBytes:tT}=Ge(),{HTTP_TOKEN_CODEPOINTS:rT,isomorphicDecode:vh}=Te(),{isFileLike:AT}=ja(),{makeEntry:sT}=as(),Mo=require("node:assert"),{File:oT}=require("node:buffer"),nT=globalThis.File??oT,iT=Buffer.from('form-data; name="'),xh=Buffer.from("; filename"),aT=Buffer.from("--"),cT=Buffer.from(`--\r -`);function gT(t){for(let e=0;e70)return!1;for(let r=0;r=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===39||A===45||A===95))return!1}return!0}function uT(t,e){Mo(e!=="failure"&&e.essence==="multipart/form-data");let r=e.parameters.get("boundary");if(r===void 0)return"failure";let A=Buffer.from(`--${r}`,"utf8"),s=[],o={position:0};for(;t[o.position]===13&&t[o.position+1]===10;)o.position+=2;let n=t.length;for(;t[n-1]===10&&t[n-2]===13;)n-=2;for(n!==t.length&&(t=t.subarray(0,n));;){if(t.subarray(o.position,o.position+A.length).equals(A))o.position+=A.length;else return"failure";if(o.position===t.length-2&&vo(t,aT,o)||o.position===t.length-4&&vo(t,cT,o))return s;if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let i=ET(t,o);if(i==="failure")return"failure";let{name:a,filename:c,contentType:g,encoding:l}=i;o.position+=2;let u;{let h=t.indexOf(A.subarray(2),o.position);if(h===-1)return"failure";u=t.subarray(o.position,h-4),o.position+=u.length,l==="base64"&&(u=Buffer.from(u.toString(),"base64"))}if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let E;c!==null?(g??="text/plain",gT(g)||(g=""),E=new nT([u],c,{type:g})):E=tT(Buffer.from(u)),Mo(Mh(a)),Mo(typeof E=="string"&&Mh(E)||AT(E)),s.push(sT(a,E,c))}}function ET(t,e){let r=null,A=null,s=null,o=null;for(;;){if(t[e.position]===13&&t[e.position+1]===10)return r===null?"failure":{name:r,filename:A,contentType:s,encoding:o};let n=nA(i=>i!==10&&i!==13&&i!==58,t,e);if(n=Xa(n,!0,!0,i=>i===9||i===32),!rT.test(n.toString())||t[e.position]!==58)return"failure";switch(e.position++,nA(i=>i===32||i===9,t,e),eT(n)){case"content-disposition":{if(r=A=null,!vo(t,iT,e)||(e.position+=17,r=Oh(t,e),r===null))return"failure";if(vo(t,xh,e)){let i=e.position+xh.length;if(t[i]===42&&(e.position+=1,i+=1),t[i]!==61||t[i+1]!==34||(e.position+=12,A=Oh(t,e),A===null))return"failure"}break}case"content-type":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),s=vh(i);break}case"content-transfer-encoding":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),o=vh(i);break}default:nA(i=>i!==10&&i!==13,t,e)}if(t[e.position]!==13&&t[e.position+1]!==10)return"failure";e.position+=2}}function Oh(t,e){Mo(t[e.position-1]===34);let r=nA(A=>A!==10&&A!==13&&A!==34,t,e);return t[e.position]!==34?null:(e.position++,r=new TextDecoder().decode(r).replace(/%0A/ig,` -`).replace(/%0D/ig,"\r").replace(/%22/g,'"'),r)}function nA(t,e,r){let A=r.position;for(;A0&&A(t[o]);)o--;return s===0&&o===t.length-1?t:t.subarray(s,o+1)}function vo(t,e,r){if(t.length{"use strict";var cs=M(),{ReadableStreamFrom:hT,isBlobLike:Jh,isReadableStreamLike:QT,readableStreamClose:BT,createDeferredPromise:IT,fullyReadBody:CT,extractMimeType:dT,utf8DecodeBytes:Vh}=Ge(),{FormData:Ph}=as(),{kState:aA}=Pt(),{webidl:fT}=Qe(),{Blob:pT}=require("node:buffer"),$a=require("node:assert"),{isErrored:qh,isDisturbed:mT}=require("node:stream"),{isArrayBuffer:wT}=require("node:util/types"),{serializeAMimeType:yT}=Te(),{multipartFormDataParser:RT}=_h(),ec;try{let t=require("node:crypto");ec=e=>t.randomInt(0,e)}catch{ec=t=>Math.floor(Math.random(t))}var xo=new TextEncoder;function DT(){}var Wh=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,zh;Wh&&(zh=new FinalizationRegistry(t=>{let e=t.deref();e&&!e.locked&&!mT(e)&&!qh(e)&&e.cancel("Response object has been garbage collected").catch(DT)}));function Zh(t,e=!1){let r=null;t instanceof ReadableStream?r=t:Jh(t)?r=t.stream():r=new ReadableStream({async pull(a){let c=typeof s=="string"?xo.encode(s):s;c.byteLength&&a.enqueue(c),queueMicrotask(()=>BT(a))},start(){},type:"bytes"}),$a(QT(r));let A=null,s=null,o=null,n=null;if(typeof t=="string")s=t,n="text/plain;charset=UTF-8";else if(t instanceof URLSearchParams)s=t.toString(),n="application/x-www-form-urlencoded;charset=UTF-8";else if(wT(t))s=new Uint8Array(t.slice());else if(ArrayBuffer.isView(t))s=new Uint8Array(t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength));else if(cs.isFormDataLike(t)){let a=`----formdata-undici-0${`${ec(1e11)}`.padStart(11,"0")}`,c=`--${a}\r +var Ty=Object.create;var Du=Object.defineProperty;var by=Object.getOwnPropertyDescriptor;var ky=Object.getOwnPropertyNames;var Fy=Object.getPrototypeOf,Sy=Object.prototype.hasOwnProperty;var C=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var B=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var Ny=(t,e,r,A)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ky(e))!Sy.call(t,s)&&s!==r&&Du(t,s,{get:()=>e[s],enumerable:!(A=by(e,s))||A.enumerable});return t};var Qr=(t,e,r)=>(r=t!=null?Ty(Fy(t)):{},Ny(e||!t||!t.__esModule?Du(r,"default",{value:t,enumerable:!0}):r,t));var Uu=B(Zr=>{"use strict";var lJ=C("net"),xy=C("tls"),qi=C("http"),Fu=C("https"),Oy=C("events"),uJ=C("assert"),Yy=C("util");Zr.httpOverHttp=_y;Zr.httpsOverHttp=Jy;Zr.httpOverHttps=Py;Zr.httpsOverHttps=Hy;function _y(t){var e=new yt(t);return e.request=qi.request,e}function Jy(t){var e=new yt(t);return e.request=qi.request,e.createSocket=Su,e.defaultPort=443,e}function Py(t){var e=new yt(t);return e.request=Fu.request,e}function Hy(t){var e=new yt(t);return e.request=Fu.request,e.createSocket=Su,e.defaultPort=443,e}function yt(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||qi.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(A,s,o,n){for(var i=Nu(s,o,n),a=0,c=e.requests.length;a=this.maxSockets){o.requests.push(n);return}o.createSocket(n,function(i){i.on("free",a),i.on("close",c),i.on("agentRemove",c),e.onSocket(i);function a(){o.emit("free",i,n)}function c(g){o.removeSocket(i),i.removeListener("free",a),i.removeListener("close",c),i.removeListener("agentRemove",c)}})};yt.prototype.createSocket=function(e,r){var A=this,s={};A.sockets.push(s);var o=Wi({},A.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(o.localAddress=e.localAddress),o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")),Jt("making CONNECT request");var n=A.request(o);n.useChunkedEncodingByDefault=!1,n.once("response",i),n.once("upgrade",a),n.once("connect",c),n.once("error",g),n.end();function i(l){l.upgrade=!0}function a(l,u,E){process.nextTick(function(){c(l,u,E)})}function c(l,u,E){if(n.removeAllListeners(),u.removeAllListeners(),l.statusCode!==200){Jt("tunneling socket could not be established, statusCode=%d",l.statusCode),u.destroy();var h=new Error("tunneling socket could not be established, statusCode="+l.statusCode);h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}if(E.length>0){Jt("got illegal response body from proxy"),u.destroy();var h=new Error("got illegal response body from proxy");h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}return Jt("tunneling connection has established"),A.sockets[A.sockets.indexOf(s)]=u,r(u)}function g(l){n.removeAllListeners(),Jt(`tunneling socket could not be established, cause=%s +`,l.message,l.stack);var u=new Error("tunneling socket could not be established, cause="+l.message);u.code="ECONNRESET",e.request.emit("error",u),A.removeSocket(s)}};yt.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var A=this.requests.shift();A&&this.createSocket(A,function(s){A.request.onSocket(s)})}};function Su(t,e){var r=this;yt.prototype.createSocket.call(r,t,function(A){var s=t.request.getHeader("host"),o=Wi({},r.options,{socket:A,servername:s?s.replace(/:.*$/,""):t.host}),n=xy.connect(0,o);r.sockets[r.sockets.indexOf(A)]=n,e(n)})}function Nu(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function Wi(t){for(var e=1,r=arguments.length;e{Gu.exports=Uu()});var $=B((QJ,Lu)=>{Lu.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}});var _=B((BJ,nE)=>{"use strict";var Mu=Symbol.for("undici.error.UND_ERR"),ee=class extends Error{constructor(e){super(e),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&e[Mu]===!0}[Mu]=!0},vu=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),Zi=class extends ee{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[vu]===!0}[vu]=!0},xu=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),ji=class extends ee{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[xu]===!0}[xu]=!0},Ou=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Ki=class extends ee{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&e[Ou]===!0}[Ou]=!0},Yu=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),Xi=class extends ee{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Yu]===!0}[Yu]=!0},_u=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),$i=class extends ee{constructor(e,r,A,s){super(e),this.name="ResponseStatusCodeError",this.message=e||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=s,this.status=r,this.statusCode=r,this.headers=A}static[Symbol.hasInstance](e){return e&&e[_u]===!0}[_u]=!0},Ju=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),ea=class extends ee{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&e[Ju]===!0}[Ju]=!0},Pu=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),ta=class extends ee{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&e[Pu]===!0}[Pu]=!0},Hu=Symbol.for("undici.error.UND_ERR_ABORT"),Eo=class extends ee{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&e[Hu]===!0}[Hu]=!0},Vu=Symbol.for("undici.error.UND_ERR_ABORTED"),ra=class extends Eo{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&e[Vu]===!0}[Vu]=!0},qu=Symbol.for("undici.error.UND_ERR_INFO"),Aa=class extends ee{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&e[qu]===!0}[qu]=!0},Wu=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),sa=class extends ee{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[Wu]===!0}[Wu]=!0},zu=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),oa=class extends ee{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[zu]===!0}[zu]=!0},Zu=Symbol.for("undici.error.UND_ERR_DESTROYED"),na=class extends ee{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&e[Zu]===!0}[Zu]=!0},ju=Symbol.for("undici.error.UND_ERR_CLOSED"),ia=class extends ee{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&e[ju]===!0}[ju]=!0},Ku=Symbol.for("undici.error.UND_ERR_SOCKET"),aa=class extends ee{constructor(e,r){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=r}static[Symbol.hasInstance](e){return e&&e[Ku]===!0}[Ku]=!0},Xu=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),ca=class extends ee{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&e[Xu]===!0}[Xu]=!0},$u=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),ga=class extends ee{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&e[$u]===!0}[$u]=!0},eE=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),la=class extends Error{constructor(e,r,A){super(e),this.name="HTTPParserError",this.code=r?`HPE_${r}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&e[eE]===!0}[eE]=!0},tE=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),ua=class extends ee{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&e[tE]===!0}[tE]=!0},rE=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),Ea=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[rE]===!0}[rE]=!0},AE=Symbol.for("undici.error.UND_ERR_RESPONSE"),ha=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[AE]===!0}[AE]=!0},sE=Symbol.for("undici.error.UND_ERR_PRX_TLS"),Qa=class extends ee{constructor(e,r,A){super(r,{cause:e,...A??{}}),this.name="SecureProxyConnectionError",this.message=r||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&e[sE]===!0}[sE]=!0},oE=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),Ba=class extends ee{constructor(e){super(e),this.name="MessageSizeExceededError",this.message=e||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](e){return e&&e[oE]===!0}get[oE](){return!0}};nE.exports={AbortError:Eo,HTTPParserError:la,UndiciError:ee,HeadersTimeoutError:ji,HeadersOverflowError:Ki,BodyTimeoutError:Xi,RequestContentLengthMismatchError:sa,ConnectTimeoutError:Zi,ResponseStatusCodeError:$i,InvalidArgumentError:ea,InvalidReturnValueError:ta,RequestAbortedError:ra,ClientDestroyedError:na,ClientClosedError:ia,InformationalError:Aa,SocketError:aa,NotSupportedError:ca,ResponseContentLengthMismatchError:oa,BalancedPoolMissingUpstreamError:ga,ResponseExceededMaxSizeError:ua,RequestRetryError:Ea,ResponseError:ha,SecureProxyConnectionError:Qa,MessageSizeExceededError:Ba}});var Qo=B((IJ,iE)=>{"use strict";var ho={},Ia=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let t=0;t{"use strict";var{wellknownHeaderNames:aE,headerNameLowerCasedRecord:Vy}=Qo(),Ca=class t{value=null;left=null;middle=null;right=null;code;constructor(e,r,A){if(A===void 0||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new t(e,r,A):this.value=r}add(e,r){let A=e.length;if(A===0)throw new TypeError("Unreachable");let s=0,o=this;for(;;){let n=e.charCodeAt(s);if(n>127)throw new TypeError("key must be ascii string");if(o.code===n)if(A===++s){o.value=r;break}else if(o.middle!==null)o=o.middle;else{o.middle=new t(e,r,s);break}else if(o.code=65&&(o|=32);s!==null;){if(o===s.code){if(r===++A)return s;s=s.middle;break}s=s.code{"use strict";var XA=C("node:assert"),{kDestroyed:EE,kBodyUsed:jr,kListeners:da,kBody:uE}=$(),{IncomingMessage:qy}=C("node:http"),fo=C("node:stream"),Wy=C("node:net"),{Blob:zy}=C("node:buffer"),Zy=C("node:util"),{stringify:jy}=C("node:querystring"),{EventEmitter:Ky}=C("node:events"),{InvalidArgumentError:Ee}=_(),{headerNameLowerCasedRecord:Xy}=Qo(),{tree:hE}=lE(),[$y,eR]=process.versions.node.split(".").map(t=>Number(t)),Co=class{constructor(e){this[uE]=e,this[jr]=!1}async*[Symbol.asyncIterator](){XA(!this[jr],"disturbed"),this[jr]=!0,yield*this[uE]}};function tR(t){return po(t)?(dE(t)===0&&t.on("data",function(){XA(!1)}),typeof t.readableDidRead!="boolean"&&(t[jr]=!1,Ky.prototype.on.call(t,"data",function(){this[jr]=!0})),t):t&&typeof t.pipeTo=="function"?new Co(t):t&&typeof t!="string"&&!ArrayBuffer.isView(t)&&CE(t)?new Co(t):t}function rR(){}function po(t){return t&&typeof t=="object"&&typeof t.pipe=="function"&&typeof t.on=="function"}function QE(t){if(t===null)return!1;if(t instanceof zy)return!0;if(typeof t!="object")return!1;{let e=t[Symbol.toStringTag];return(e==="Blob"||e==="File")&&("stream"in t&&typeof t.stream=="function"||"arrayBuffer"in t&&typeof t.arrayBuffer=="function")}}function AR(t,e){if(t.includes("?")||t.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=jy(e);return r&&(t+="?"+r),t}function BE(t){let e=parseInt(t,10);return e===Number(t)&&e>=0&&e<=65535}function Io(t){return t!=null&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&(t[4]===":"||t[4]==="s"&&t[5]===":")}function IE(t){if(typeof t=="string"){if(t=new URL(t),!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}if(!t||typeof t!="object")throw new Ee("Invalid URL: The URL argument must be a non-null object.");if(!(t instanceof URL)){if(t.port!=null&&t.port!==""&&BE(t.port)===!1)throw new Ee("Invalid URL: port must be a valid integer or a string representation of an integer.");if(t.path!=null&&typeof t.path!="string")throw new Ee("Invalid URL path: the path must be a string or null/undefined.");if(t.pathname!=null&&typeof t.pathname!="string")throw new Ee("Invalid URL pathname: the pathname must be a string or null/undefined.");if(t.hostname!=null&&typeof t.hostname!="string")throw new Ee("Invalid URL hostname: the hostname must be a string or null/undefined.");if(t.origin!=null&&typeof t.origin!="string")throw new Ee("Invalid URL origin: the origin must be a string or null/undefined.");if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");let e=t.port!=null?t.port:t.protocol==="https:"?443:80,r=t.origin!=null?t.origin:`${t.protocol||""}//${t.hostname||""}:${e}`,A=t.path!=null?t.path:`${t.pathname||""}${t.search||""}`;return r[r.length-1]==="/"&&(r=r.slice(0,r.length-1)),A&&A[0]!=="/"&&(A=`/${A}`),new URL(`${r}${A}`)}if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}function sR(t){if(t=IE(t),t.pathname!=="/"||t.search||t.hash)throw new Ee("invalid url");return t}function oR(t){if(t[0]==="["){let r=t.indexOf("]");return XA(r!==-1),t.substring(1,r)}let e=t.indexOf(":");return e===-1?t:t.substring(0,e)}function nR(t){if(!t)return null;XA(typeof t=="string");let e=oR(t);return Wy.isIP(e)?"":e}function iR(t){return JSON.parse(JSON.stringify(t))}function aR(t){return t!=null&&typeof t[Symbol.asyncIterator]=="function"}function CE(t){return t!=null&&(typeof t[Symbol.iterator]=="function"||typeof t[Symbol.asyncIterator]=="function")}function dE(t){if(t==null)return 0;if(po(t)){let e=t._readableState;return e&&e.objectMode===!1&&e.ended===!0&&Number.isFinite(e.length)?e.length:null}else{if(QE(t))return t.size!=null?t.size:null;if(mE(t))return t.byteLength}return null}function fE(t){return t&&!!(t.destroyed||t[EE]||fo.isDestroyed?.(t))}function cR(t,e){t==null||!po(t)||fE(t)||(typeof t.destroy=="function"?(Object.getPrototypeOf(t).constructor===qy&&(t.socket=null),t.destroy(e)):e&&queueMicrotask(()=>{t.emit("error",e)}),t.destroyed!==!0&&(t[EE]=!0))}var gR=/timeout=(\d+)/;function lR(t){let e=t.toString().match(gR);return e?parseInt(e[1],10)*1e3:null}function pE(t){return typeof t=="string"?Xy[t]??t.toLowerCase():hE.lookup(t)??t.toString("latin1").toLowerCase()}function uR(t){return hE.lookup(t)??t.toString("latin1").toLowerCase()}function ER(t,e){e===void 0&&(e={});for(let r=0;rn.toString("utf8")):o.toString("utf8")}}return"content-length"in e&&"content-disposition"in e&&(e["content-disposition"]=Buffer.from(e["content-disposition"]).toString("latin1")),e}function hR(t){let e=t.length,r=new Array(e),A=!1,s=-1,o,n,i=0;for(let a=0;a{r.close(),r.byobRequest?.respond(0)});else{let o=Buffer.isBuffer(s)?s:Buffer.from(s);o.byteLength&&r.enqueue(new Uint8Array(o))}return r.desiredSize>0},async cancel(r){await e.return()},type:"bytes"})}function pR(t){return t&&typeof t=="object"&&typeof t.append=="function"&&typeof t.delete=="function"&&typeof t.get=="function"&&typeof t.getAll=="function"&&typeof t.has=="function"&&typeof t.set=="function"&&t[Symbol.toStringTag]==="FormData"}function mR(t,e){return"addEventListener"in t?(t.addEventListener("abort",e,{once:!0}),()=>t.removeEventListener("abort",e)):(t.addListener("abort",e),()=>t.removeListener("abort",e))}var wR=typeof String.prototype.toWellFormed=="function",yR=typeof String.prototype.isWellFormed=="function";function wE(t){return wR?`${t}`.toWellFormed():Zy.toUSVString(t)}function RR(t){return yR?`${t}`.isWellFormed():wE(t)===`${t}`}function yE(t){switch(t){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return t>=33&&t<=126}}function DR(t){if(t.length===0)return!1;for(let e=0;e{"use strict";var P=C("node:diagnostics_channel"),ma=C("node:util"),mo=ma.debuglog("undici"),pa=ma.debuglog("fetch"),Br=ma.debuglog("websocket"),bE=!1,UR={beforeConnect:P.channel("undici:client:beforeConnect"),connected:P.channel("undici:client:connected"),connectError:P.channel("undici:client:connectError"),sendHeaders:P.channel("undici:client:sendHeaders"),create:P.channel("undici:request:create"),bodySent:P.channel("undici:request:bodySent"),headers:P.channel("undici:request:headers"),trailers:P.channel("undici:request:trailers"),error:P.channel("undici:request:error"),open:P.channel("undici:websocket:open"),close:P.channel("undici:websocket:close"),socketError:P.channel("undici:websocket:socket_error"),ping:P.channel("undici:websocket:ping"),pong:P.channel("undici:websocket:pong")};if(mo.enabled||pa.enabled){let t=pa.enabled?pa:mo;P.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),P.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),P.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s using %s%s errored - %s",`${o}${s?`:${s}`:""}`,A,r,n.message)}),P.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)}),P.channel("undici:request:headers").subscribe(e=>{let{request:{method:r,path:A,origin:s},response:{statusCode:o}}=e;t("received response to %s %s/%s - HTTP %d",r,s,A,o)}),P.channel("undici:request:trailers").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("trailers received from %s %s/%s",r,s,A)}),P.channel("undici:request:error").subscribe(e=>{let{request:{method:r,path:A,origin:s},error:o}=e;t("request to %s %s/%s errored - %s",r,s,A,o.message)}),bE=!0}if(Br.enabled){if(!bE){let t=mo.enabled?mo:Br;P.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),P.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),P.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s%s using %s%s errored - %s",o,s?`:${s}`:"",A,r,n.message)}),P.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)})}P.channel("undici:websocket:open").subscribe(t=>{let{address:{address:e,port:r}}=t;Br("connection opened %s%s",e,r?`:${r}`:"")}),P.channel("undici:websocket:close").subscribe(t=>{let{websocket:e,code:r,reason:A}=t;Br("closed connection to %s - %s %s",e.url,r,A)}),P.channel("undici:websocket:socket_error").subscribe(t=>{Br("connection errored - %s",t.message)}),P.channel("undici:websocket:ping").subscribe(t=>{Br("ping received")}),P.channel("undici:websocket:pong").subscribe(t=>{Br("pong received")})}kE.exports={channels:UR}});var UE=B((pJ,NE)=>{"use strict";var{InvalidArgumentError:q,NotSupportedError:GR}=_(),Rt=C("node:assert"),{isValidHTTPToken:SE,isValidHeaderValue:$A,isStream:LR,destroy:MR,isBuffer:vR,isFormDataLike:xR,isIterable:OR,isBlobLike:YR,buildURL:_R,validateHandler:JR,getServerName:PR,normalizedMethodRecords:HR}=v(),{channels:lt}=Kr(),{headerNameLowerCasedRecord:FE}=Qo(),VR=/[^\u0021-\u00ff]/,He=Symbol("handler"),wa=class{constructor(e,{path:r,method:A,body:s,headers:o,query:n,idempotent:i,blocking:a,upgrade:c,headersTimeout:g,bodyTimeout:l,reset:u,throwOnError:E,expectContinue:h,servername:d},I){if(typeof r!="string")throw new q("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&A!=="CONNECT")throw new q("path must be an absolute URL or start with a slash");if(VR.test(r))throw new q("invalid request path");if(typeof A!="string")throw new q("method must be a string");if(HR[A]===void 0&&!SE(A))throw new q("invalid request method");if(c&&typeof c!="string")throw new q("upgrade must be a string");if(c&&!$A(c))throw new q("invalid upgrade header");if(g!=null&&(!Number.isFinite(g)||g<0))throw new q("invalid headersTimeout");if(l!=null&&(!Number.isFinite(l)||l<0))throw new q("invalid bodyTimeout");if(u!=null&&typeof u!="boolean")throw new q("invalid reset");if(h!=null&&typeof h!="boolean")throw new q("invalid expectContinue");if(this.headersTimeout=g,this.bodyTimeout=l,this.throwOnError=E===!0,this.method=A,this.abort=null,s==null)this.body=null;else if(LR(s)){this.body=s;let Q=this.body._readableState;(!Q||!Q.autoDestroy)&&(this.endHandler=function(){MR(this)},this.body.on("end",this.endHandler)),this.errorHandler=p=>{this.abort?this.abort(p):this.error=p},this.body.on("error",this.errorHandler)}else if(vR(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if(typeof s=="string")this.body=s.length?Buffer.from(s):null;else if(xR(s)||OR(s)||YR(s))this.body=s;else throw new q("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=c||null,this.path=n?_R(r,n):r,this.origin=e,this.idempotent=i??(A==="HEAD"||A==="GET"),this.blocking=a??!1,this.reset=u??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=h??!1,Array.isArray(o)){if(o.length%2!==0)throw new q("headers array must be even");for(let Q=0;Q{"use strict";var qR=C("node:events"),yo=class extends qR{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){let r=Array.isArray(e[0])?e[0]:e,A=this.dispatch.bind(this);for(let s of r)if(s!=null){if(typeof s!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof s}`);if(A=s(A),A==null||typeof A!="function"||A.length!==2)throw new TypeError("invalid interceptor")}return new ya(this,A)}},ya=class extends yo{#e=null;#t=null;constructor(e,r){super(),this.#e=e,this.#t=r}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};GE.exports=yo});var tA=B((wJ,LE)=>{"use strict";var WR=es(),{ClientDestroyedError:Ra,ClientClosedError:zR,InvalidArgumentError:Xr}=_(),{kDestroy:ZR,kClose:jR,kClosed:ts,kDestroyed:$r,kDispatch:Da,kInterceptors:Ir}=$(),Dt=Symbol("onDestroyed"),eA=Symbol("onClosed"),Ro=Symbol("Intercepted Dispatch"),Ta=Symbol("webSocketOptions"),ba=class extends WR{constructor(e){super(),this[$r]=!1,this[Dt]=null,this[ts]=!1,this[eA]=[],this[Ta]=e?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[Ta].maxFragments??131072,maxPayloadSize:this[Ta].maxPayloadSize??128*1024*1024}}get destroyed(){return this[$r]}get closed(){return this[ts]}get interceptors(){return this[Ir]}set interceptors(e){if(e){for(let r=e.length-1;r>=0;r--)if(typeof this[Ir][r]!="function")throw new Xr("interceptor must be an function")}this[Ir]=e}close(e){if(e===void 0)return new Promise((A,s)=>{this.close((o,n)=>o?s(o):A(n))});if(typeof e!="function")throw new Xr("invalid callback");if(this[$r]){queueMicrotask(()=>e(new Ra,null));return}if(this[ts]){this[eA]?this[eA].push(e):queueMicrotask(()=>e(null,null));return}this[ts]=!0,this[eA].push(e);let r=()=>{let A=this[eA];this[eA]=null;for(let s=0;sthis.destroy()).then(()=>{queueMicrotask(r)})}destroy(e,r){if(typeof e=="function"&&(r=e,e=null),r===void 0)return new Promise((s,o)=>{this.destroy(e,(n,i)=>n?o(n):s(i))});if(typeof r!="function")throw new Xr("invalid callback");if(this[$r]){this[Dt]?this[Dt].push(r):queueMicrotask(()=>r(null,null));return}e||(e=new Ra),this[$r]=!0,this[Dt]=this[Dt]||[],this[Dt].push(r);let A=()=>{let s=this[Dt];this[Dt]=null;for(let o=0;o{queueMicrotask(A)})}[Ro](e,r){if(!this[Ir]||this[Ir].length===0)return this[Ro]=this[Da],this[Da](e,r);let A=this[Da].bind(this);for(let s=this[Ir].length-1;s>=0;s--)A=this[Ir][s](A);return this[Ro]=A,A(e,r)}dispatch(e,r){if(!r||typeof r!="object")throw new Xr("handler must be an object");try{if(!e||typeof e!="object")throw new Xr("opts must be an object.");if(this[$r]||this[Dt])throw new Ra;if(this[ts])throw new zR;return this[Ro](e,r)}catch(A){if(typeof r.onError!="function")throw new Xr("invalid onError method");return r.onError(A),!1}}};LE.exports=ba});var La=B((yJ,OE)=>{"use strict";var rA=0,ka=1e3,Fa=(ka>>1)-1,Tt,Sa=Symbol("kFastTimer"),bt=[],Na=-2,Ua=-1,vE=0,ME=1;function Ga(){rA+=Fa;let t=0,e=bt.length;for(;t=r._idleStart+r._idleTimeout&&(r._state=Ua,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===Ua?(r._state=Na,--e!==0&&(bt[t]=bt[e])):++t}bt.length=e,bt.length!==0&&xE()}function xE(){Tt?Tt.refresh():(clearTimeout(Tt),Tt=setTimeout(Ga,Fa),Tt.unref&&Tt.unref())}var Do=class{[Sa]=!0;_state=Na;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,r,A){this._onTimeout=e,this._idleTimeout=r,this._timerArg=A,this.refresh()}refresh(){this._state===Na&&bt.push(this),(!Tt||bt.length===1)&&xE(),this._state=vE}clear(){this._state=Ua,this._idleStart=-1}};OE.exports={setTimeout(t,e,r){return e<=ka?setTimeout(t,e,r):new Do(t,e,r)},clearTimeout(t){t[Sa]?t.clear():clearTimeout(t)},setFastTimeout(t,e,r){return new Do(t,e,r)},clearFastTimeout(t){t.clear()},now(){return rA},tick(t=0){rA+=t-ka+1,Ga(),Ga()},reset(){rA=0,bt.length=0,clearTimeout(Tt),Tt=null},kFastTimer:Sa}});var rs=B((TJ,HE)=>{"use strict";var KR=C("node:net"),YE=C("node:assert"),PE=v(),{InvalidArgumentError:XR,ConnectTimeoutError:$R}=_(),To=La();function _E(){}var Ma,va;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?va=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry(r=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:A}=this._sessionCache.keys().next();this._sessionCache.delete(A)}this._sessionCache.set(e,r)}}};function eD({allowH2:t,maxCachedSessions:e,socketPath:r,timeout:A,session:s,...o}){if(e!=null&&(!Number.isInteger(e)||e<0))throw new XR("maxCachedSessions must be a positive integer or zero");let n={path:r,...o},i=new va(e??100);return A=A??1e4,t=t??!1,function({hostname:c,host:g,protocol:l,port:u,servername:E,localAddress:h,httpSocket:d},I){let Q;if(l==="https:"){Ma||(Ma=C("node:tls")),E=E||n.servername||PE.getServerName(g)||null;let D=E||c;YE(D);let R=s||i.get(D)||null;u=u||443,Q=Ma.connect({highWaterMark:16384,...n,servername:E,session:R,localAddress:h,ALPNProtocols:t?["http/1.1","h2"]:["http/1.1"],socket:d,port:u,host:c}),Q.on("session",function(H){i.set(D,H)})}else YE(!d,"httpSocket can only be sent on TLS update"),u=u||80,Q=KR.connect({highWaterMark:64*1024,...n,localAddress:h,port:u,host:c});if(n.keepAlive==null||n.keepAlive){let D=n.keepAliveInitialDelay===void 0?6e4:n.keepAliveInitialDelay;Q.setKeepAlive(!0,D)}let p=tD(new WeakRef(Q),{timeout:A,hostname:c,port:u});return Q.setNoDelay(!0).once(l==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(p),I){let D=I;I=null,D(null,this)}}).on("error",function(D){if(queueMicrotask(p),I){let R=I;I=null,R(D)}}),Q}}var tD=process.platform==="win32"?(t,e)=>{if(!e.timeout)return _E;let r=null,A=null,s=To.setFastTimeout(()=>{r=setImmediate(()=>{A=setImmediate(()=>JE(t.deref(),e))})},e.timeout);return()=>{To.clearFastTimeout(s),clearImmediate(r),clearImmediate(A)}}:(t,e)=>{if(!e.timeout)return _E;let r=null,A=To.setFastTimeout(()=>{r=setImmediate(()=>{JE(t.deref(),e)})},e.timeout);return()=>{To.clearFastTimeout(A),clearImmediate(r)}};function JE(t,e){if(t==null)return;let r="Connect Timeout Error";Array.isArray(t.autoSelectFamilyAttemptedAddresses)?r+=` (attempted addresses: ${t.autoSelectFamilyAttemptedAddresses.join(", ")},`:r+=` (attempted address: ${e.hostname}:${e.port},`,r+=` timeout: ${e.timeout}ms)`,PE.destroy(t,new $R(r))}HE.exports=eD});var VE=B(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.enumToMap=void 0;function rD(t){let e={};return Object.keys(t).forEach(r=>{let A=t[r];typeof A=="number"&&(e[r]=A)}),e}bo.enumToMap=rD});var qE=B(m=>{"use strict";Object.defineProperty(m,"__esModule",{value:!0});m.SPECIAL_HEADERS=m.HEADER_STATE=m.MINOR=m.MAJOR=m.CONNECTION_TOKEN_CHARS=m.HEADER_CHARS=m.TOKEN=m.STRICT_TOKEN=m.HEX=m.URL_CHAR=m.STRICT_URL_CHAR=m.USERINFO_CHARS=m.MARK=m.ALPHANUM=m.NUM=m.HEX_MAP=m.NUM_MAP=m.ALPHA=m.FINISH=m.H_METHOD_MAP=m.METHOD_MAP=m.METHODS_RTSP=m.METHODS_ICE=m.METHODS_HTTP=m.METHODS=m.LENIENT_FLAGS=m.FLAGS=m.TYPE=m.ERROR=void 0;var AD=VE(),sD;(function(t){t[t.OK=0]="OK",t[t.INTERNAL=1]="INTERNAL",t[t.STRICT=2]="STRICT",t[t.LF_EXPECTED=3]="LF_EXPECTED",t[t.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",t[t.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",t[t.INVALID_METHOD=6]="INVALID_METHOD",t[t.INVALID_URL=7]="INVALID_URL",t[t.INVALID_CONSTANT=8]="INVALID_CONSTANT",t[t.INVALID_VERSION=9]="INVALID_VERSION",t[t.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",t[t.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",t[t.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",t[t.INVALID_STATUS=13]="INVALID_STATUS",t[t.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",t[t.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",t[t.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",t[t.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",t[t.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",t[t.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",t[t.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",t[t.PAUSED=21]="PAUSED",t[t.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",t[t.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",t[t.USER=24]="USER"})(sD=m.ERROR||(m.ERROR={}));var oD;(function(t){t[t.BOTH=0]="BOTH",t[t.REQUEST=1]="REQUEST",t[t.RESPONSE=2]="RESPONSE"})(oD=m.TYPE||(m.TYPE={}));var nD;(function(t){t[t.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",t[t.CHUNKED=8]="CHUNKED",t[t.UPGRADE=16]="UPGRADE",t[t.CONTENT_LENGTH=32]="CONTENT_LENGTH",t[t.SKIPBODY=64]="SKIPBODY",t[t.TRAILING=128]="TRAILING",t[t.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(nD=m.FLAGS||(m.FLAGS={}));var iD;(function(t){t[t.HEADERS=1]="HEADERS",t[t.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",t[t.KEEP_ALIVE=4]="KEEP_ALIVE"})(iD=m.LENIENT_FLAGS||(m.LENIENT_FLAGS={}));var F;(function(t){t[t.DELETE=0]="DELETE",t[t.GET=1]="GET",t[t.HEAD=2]="HEAD",t[t.POST=3]="POST",t[t.PUT=4]="PUT",t[t.CONNECT=5]="CONNECT",t[t.OPTIONS=6]="OPTIONS",t[t.TRACE=7]="TRACE",t[t.COPY=8]="COPY",t[t.LOCK=9]="LOCK",t[t.MKCOL=10]="MKCOL",t[t.MOVE=11]="MOVE",t[t.PROPFIND=12]="PROPFIND",t[t.PROPPATCH=13]="PROPPATCH",t[t.SEARCH=14]="SEARCH",t[t.UNLOCK=15]="UNLOCK",t[t.BIND=16]="BIND",t[t.REBIND=17]="REBIND",t[t.UNBIND=18]="UNBIND",t[t.ACL=19]="ACL",t[t.REPORT=20]="REPORT",t[t.MKACTIVITY=21]="MKACTIVITY",t[t.CHECKOUT=22]="CHECKOUT",t[t.MERGE=23]="MERGE",t[t["M-SEARCH"]=24]="M-SEARCH",t[t.NOTIFY=25]="NOTIFY",t[t.SUBSCRIBE=26]="SUBSCRIBE",t[t.UNSUBSCRIBE=27]="UNSUBSCRIBE",t[t.PATCH=28]="PATCH",t[t.PURGE=29]="PURGE",t[t.MKCALENDAR=30]="MKCALENDAR",t[t.LINK=31]="LINK",t[t.UNLINK=32]="UNLINK",t[t.SOURCE=33]="SOURCE",t[t.PRI=34]="PRI",t[t.DESCRIBE=35]="DESCRIBE",t[t.ANNOUNCE=36]="ANNOUNCE",t[t.SETUP=37]="SETUP",t[t.PLAY=38]="PLAY",t[t.PAUSE=39]="PAUSE",t[t.TEARDOWN=40]="TEARDOWN",t[t.GET_PARAMETER=41]="GET_PARAMETER",t[t.SET_PARAMETER=42]="SET_PARAMETER",t[t.REDIRECT=43]="REDIRECT",t[t.RECORD=44]="RECORD",t[t.FLUSH=45]="FLUSH"})(F=m.METHODS||(m.METHODS={}));m.METHODS_HTTP=[F.DELETE,F.GET,F.HEAD,F.POST,F.PUT,F.CONNECT,F.OPTIONS,F.TRACE,F.COPY,F.LOCK,F.MKCOL,F.MOVE,F.PROPFIND,F.PROPPATCH,F.SEARCH,F.UNLOCK,F.BIND,F.REBIND,F.UNBIND,F.ACL,F.REPORT,F.MKACTIVITY,F.CHECKOUT,F.MERGE,F["M-SEARCH"],F.NOTIFY,F.SUBSCRIBE,F.UNSUBSCRIBE,F.PATCH,F.PURGE,F.MKCALENDAR,F.LINK,F.UNLINK,F.PRI,F.SOURCE];m.METHODS_ICE=[F.SOURCE];m.METHODS_RTSP=[F.OPTIONS,F.DESCRIBE,F.ANNOUNCE,F.SETUP,F.PLAY,F.PAUSE,F.TEARDOWN,F.GET_PARAMETER,F.SET_PARAMETER,F.REDIRECT,F.RECORD,F.FLUSH,F.GET,F.POST];m.METHOD_MAP=AD.enumToMap(F);m.H_METHOD_MAP={};Object.keys(m.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(m.H_METHOD_MAP[t]=m.METHOD_MAP[t])});var aD;(function(t){t[t.SAFE=0]="SAFE",t[t.SAFE_WITH_CB=1]="SAFE_WITH_CB",t[t.UNSAFE=2]="UNSAFE"})(aD=m.FINISH||(m.FINISH={}));m.ALPHA=[];for(let t=65;t<=90;t++)m.ALPHA.push(String.fromCharCode(t)),m.ALPHA.push(String.fromCharCode(t+32));m.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};m.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};m.NUM=["0","1","2","3","4","5","6","7","8","9"];m.ALPHANUM=m.ALPHA.concat(m.NUM);m.MARK=["-","_",".","!","~","*","'","(",")"];m.USERINFO_CHARS=m.ALPHANUM.concat(m.MARK).concat(["%",";",":","&","=","+","$",","]);m.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(m.ALPHANUM);m.URL_CHAR=m.STRICT_URL_CHAR.concat([" ","\f"]);for(let t=128;t<=255;t++)m.URL_CHAR.push(t);m.HEX=m.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);m.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(m.ALPHANUM);m.TOKEN=m.STRICT_TOKEN.concat([" "]);m.HEADER_CHARS=[" "];for(let t=32;t<=255;t++)t!==127&&m.HEADER_CHARS.push(t);m.CONNECTION_TOKEN_CHARS=m.HEADER_CHARS.filter(t=>t!==44);m.MAJOR=m.NUM_MAP;m.MINOR=m.MAJOR;var AA;(function(t){t[t.GENERAL=0]="GENERAL",t[t.CONNECTION=1]="CONNECTION",t[t.CONTENT_LENGTH=2]="CONTENT_LENGTH",t[t.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",t[t.UPGRADE=4]="UPGRADE",t[t.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",t[t.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})(AA=m.HEADER_STATE||(m.HEADER_STATE={}));m.SPECIAL_HEADERS={connection:AA.CONNECTION,"content-length":AA.CONTENT_LENGTH,"proxy-connection":AA.CONNECTION,"transfer-encoding":AA.TRANSFER_ENCODING,upgrade:AA.UPGRADE}});var xa=B((FJ,WE)=>{"use strict";var{Buffer:cD}=C("node:buffer");WE.exports=cD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var ZE=B((SJ,zE)=>{"use strict";var{Buffer:gD}=C("node:buffer");zE.exports=gD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var As=B((NJ,Ah)=>{"use strict";var jE=["GET","HEAD","POST"],lD=new Set(jE),uD=[101,204,205,304],KE=[301,302,303,307,308],ED=new Set(KE),XE=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],hD=new Set(XE),$E=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],QD=new Set($E),BD=["follow","manual","error"],eh=["GET","HEAD","OPTIONS","TRACE"],ID=new Set(eh),CD=["navigate","same-origin","no-cors","cors"],dD=["omit","same-origin","include"],fD=["default","no-store","reload","no-cache","force-cache","only-if-cached"],pD=["content-encoding","content-language","content-location","content-type","content-length"],mD=["half"],th=["CONNECT","TRACE","TRACK"],wD=new Set(th),rh=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],yD=new Set(rh);Ah.exports={subresource:rh,forbiddenMethods:th,requestBodyHeader:pD,referrerPolicy:$E,requestRedirect:BD,requestMode:CD,requestCredentials:dD,requestCache:fD,redirectStatus:KE,corsSafeListedMethods:jE,nullBodyStatus:uD,safeMethods:eh,badPorts:XE,requestDuplex:mD,subresourceSet:yD,badPortsSet:hD,redirectStatusSet:ED,corsSafeListedMethodsSet:lD,safeMethodsSet:ID,forbiddenMethodsSet:wD,referrerPolicySet:QD}});var Ya=B((UJ,sh)=>{"use strict";var Oa=Symbol.for("undici.globalOrigin.1");function RD(){return globalThis[Oa]}function DD(t){if(t===void 0){Object.defineProperty(globalThis,Oa,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let e=new URL(t);if(e.protocol!=="http:"&&e.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${e.protocol}`);Object.defineProperty(globalThis,Oa,{value:e,writable:!0,enumerable:!1,configurable:!1})}sh.exports={getGlobalOrigin:RD,setGlobalOrigin:DD}});var Te=B((GJ,lh)=>{"use strict";var Fo=C("node:assert"),TD=new TextEncoder,ss=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,bD=/[\u000A\u000D\u0009\u0020]/,kD=/[\u0009\u000A\u000C\u000D\u0020]/g,FD=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function SD(t){Fo(t.protocol==="data:");let e=ih(t,!0);e=e.slice(5);let r={position:0},A=sA(",",e,r),s=A.length;if(A=vD(A,!0,!0),r.position>=e.length)return"failure";r.position++;let o=e.slice(s+1),n=ah(o);if(/;(\u0020){0,}base64$/i.test(A)){let a=gh(n);if(n=UD(a),n==="failure")return"failure";A=A.slice(0,-6),A=A.replace(/(\u0020)+$/,""),A=A.slice(0,-1)}A.startsWith(";")&&(A="text/plain"+A);let i=_a(A);return i==="failure"&&(i=_a("text/plain;charset=US-ASCII")),{mimeType:i,body:n}}function ih(t,e=!1){if(!e)return t.href;let r=t.href,A=t.hash.length,s=A===0?r:r.substring(0,r.length-A);return!A&&r.endsWith("#")?s.slice(0,-1):s}function So(t,e,r){let A="";for(;r.position=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function nh(t){return t>=48&&t<=57?t-48:(t&223)-55}function ND(t){let e=t.length,r=new Uint8Array(e),A=0;for(let s=0;st.length)return"failure";e.position++;let A=sA(";",t,e);if(A=ko(A,!1,!0),A.length===0||!ss.test(A))return"failure";let s=r.toLowerCase(),o=A.toLowerCase(),n={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;e.positionbD.test(c),t,e);let i=So(c=>c!==";"&&c!=="=",t,e);if(i=i.toLowerCase(),e.positiont.length)break;let a=null;if(t[e.position]==='"')a=ch(t,e,!0),sA(";",t,e);else if(a=sA(";",t,e),a=ko(a,!1,!0),a.length===0)continue;i.length!==0&&ss.test(i)&&(a.length===0||FD.test(a))&&!n.parameters.has(i)&&n.parameters.set(i,a)}return n}function UD(t){t=t.replace(kD,"");let e=t.length;if(e%4===0&&t.charCodeAt(e-1)===61&&(--e,t.charCodeAt(e-1)===61&&--e),e%4===1||/[^+/0-9A-Za-z]/.test(t.length===e?t:t.substring(0,e)))return"failure";let r=Buffer.from(t,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function ch(t,e,r){let A=e.position,s="";for(Fo(t[e.position]==='"'),e.position++;s+=So(n=>n!=='"'&&n!=="\\",t,e),!(e.position>=t.length);){let o=t[e.position];if(e.position++,o==="\\"){if(e.position>=t.length){s+="\\";break}s+=t[e.position],e.position++}else{Fo(o==='"');break}}return r?s:t.slice(A,e.position)}function GD(t){Fo(t!=="failure");let{parameters:e,essence:r}=t,A=r;for(let[s,o]of e.entries())A+=";",A+=s,A+="=",ss.test(o)||(o=o.replace(/(\\|")/g,"\\$1"),o='"'+o,o+='"'),A+=o;return A}function LD(t){return t===13||t===10||t===9||t===32}function ko(t,e=!0,r=!0){return Ja(t,e,r,LD)}function MD(t){return t===13||t===10||t===9||t===12||t===32}function vD(t,e=!0,r=!0){return Ja(t,e,r,MD)}function Ja(t,e,r,A){let s=0,o=t.length-1;if(e)for(;s0&&A(t.charCodeAt(o));)o--;return s===0&&o===t.length-1?t:t.slice(s,o+1)}function gh(t){let e=t.length;if(65535>e)return String.fromCharCode.apply(null,t);let r="",A=0,s=65535;for(;Ae&&(s=e-A),r+=String.fromCharCode.apply(null,t.subarray(A,A+=s));return r}function xD(t){switch(t.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return t.subtype.endsWith("+json")?"application/json":t.subtype.endsWith("+xml")?"application/xml":""}lh.exports={dataURLProcessor:SD,URLSerializer:ih,collectASequenceOfCodePoints:So,collectASequenceOfCodePointsFast:sA,stringPercentDecode:ah,parseMIMEType:_a,collectAnHTTPQuotedString:ch,serializeAMimeType:GD,removeChars:Ja,removeHTTPWhitespace:ko,minimizeSupportedMimeType:xD,HTTP_TOKEN_CODEPOINTS:ss,isomorphicDecode:gh}});var Qe=B((LJ,uh)=>{"use strict";var{types:ut,inspect:OD}=C("node:util"),{markAsUncloneable:YD}=C("node:worker_threads"),{toUSVString:_D}=v(),f={};f.converters={};f.util={};f.errors={};f.errors.exception=function(t){return new TypeError(`${t.header}: ${t.message}`)};f.errors.conversionFailed=function(t){let e=t.types.length===1?"":" one of",r=`${t.argument} could not be converted to${e}: ${t.types.join(", ")}.`;return f.errors.exception({header:t.prefix,message:r})};f.errors.invalidArgument=function(t){return f.errors.exception({header:t.prefix,message:`"${t.value}" is an invalid ${t.type}.`})};f.brandCheck=function(t,e,r){if(r?.strict!==!1){if(!(t instanceof e)){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}}else if(t?.[Symbol.toStringTag]!==e.prototype[Symbol.toStringTag]){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}};f.argumentLengthCheck=function({length:t},e,r){if(t{});f.util.ConvertToInt=function(t,e,r,A){let s,o;e===64?(s=Math.pow(2,53)-1,r==="unsigned"?o=0:o=Math.pow(-2,53)+1):r==="unsigned"?(o=0,s=Math.pow(2,e)-1):(o=Math.pow(-2,e)-1,s=Math.pow(2,e-1)-1);let n=Number(t);if(n===0&&(n=0),A?.enforceRange===!0){if(Number.isNaN(n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY)throw f.errors.exception({header:"Integer conversion",message:`Could not convert ${f.util.Stringify(t)} to an integer.`});if(n=f.util.IntegerPart(n),ns)throw f.errors.exception({header:"Integer conversion",message:`Value must be between ${o}-${s}, got ${n}.`});return n}return!Number.isNaN(n)&&A?.clamp===!0?(n=Math.min(Math.max(n,o),s),Math.floor(n)%2===0?n=Math.floor(n):n=Math.ceil(n),n):Number.isNaN(n)||n===0&&Object.is(0,n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY?0:(n=f.util.IntegerPart(n),n=n%Math.pow(2,e),r==="signed"&&n>=Math.pow(2,e)-1?n-Math.pow(2,e):n)};f.util.IntegerPart=function(t){let e=Math.floor(Math.abs(t));return t<0?-1*e:e};f.util.Stringify=function(t){switch(f.util.Type(t)){case"Symbol":return`Symbol(${t.description})`;case"Object":return OD(t);case"String":return`"${t}"`;default:return`${t}`}};f.sequenceConverter=function(t){return(e,r,A,s)=>{if(f.util.Type(e)!=="Object")throw f.errors.exception({header:r,message:`${A} (${f.util.Stringify(e)}) is not iterable.`});let o=typeof s=="function"?s():e?.[Symbol.iterator]?.(),n=[],i=0;if(o===void 0||typeof o.next!="function")throw f.errors.exception({header:r,message:`${A} is not iterable.`});for(;;){let{done:a,value:c}=o.next();if(a)break;n.push(t(c,r,`${A}[${i++}]`))}return n}};f.recordConverter=function(t,e){return(r,A,s)=>{if(f.util.Type(r)!=="Object")throw f.errors.exception({header:A,message:`${s} ("${f.util.Type(r)}") is not an Object.`});let o={};if(!ut.isProxy(r)){let i=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let a of i){let c=t(a,A,s),g=e(r[a],A,s);o[c]=g}return o}let n=Reflect.ownKeys(r);for(let i of n)if(Reflect.getOwnPropertyDescriptor(r,i)?.enumerable){let c=t(i,A,s),g=e(r[i],A,s);o[c]=g}return o}};f.interfaceConverter=function(t){return(e,r,A,s)=>{if(s?.strict!==!1&&!(e instanceof t))throw f.errors.exception({header:r,message:`Expected ${A} ("${f.util.Stringify(e)}") to be an instance of ${t.name}.`});return e}};f.dictionaryConverter=function(t){return(e,r,A)=>{let s=f.util.Type(e),o={};if(s==="Null"||s==="Undefined")return o;if(s!=="Object")throw f.errors.exception({header:r,message:`Expected ${e} to be one of: Null, Undefined, Object.`});for(let n of t){let{key:i,defaultValue:a,required:c,converter:g}=n;if(c===!0&&!Object.hasOwn(e,i))throw f.errors.exception({header:r,message:`Missing required key "${i}".`});let l=e[i],u=Object.hasOwn(n,"defaultValue");if(u&&l!==null&&(l??=a()),c||u||l!==void 0){if(l=g(l,r,`${A}.${i}`),n.allowedValues&&!n.allowedValues.includes(l))throw f.errors.exception({header:r,message:`${l} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});o[i]=l}}return o}};f.nullableConverter=function(t){return(e,r,A)=>e===null?e:t(e,r,A)};f.converters.DOMString=function(t,e,r,A){if(t===null&&A?.legacyNullToEmptyString)return"";if(typeof t=="symbol")throw f.errors.exception({header:e,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(t)};f.converters.ByteString=function(t,e,r){let A=f.converters.DOMString(t,e,r);for(let s=0;s255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${s} has a value of ${A.charCodeAt(s)} which is greater than 255.`);return A};f.converters.USVString=_D;f.converters.boolean=function(t){return!!t};f.converters.any=function(t){return t};f.converters["long long"]=function(t,e,r){return f.util.ConvertToInt(t,64,"signed",void 0,e,r)};f.converters["unsigned long long"]=function(t,e,r){return f.util.ConvertToInt(t,64,"unsigned",void 0,e,r)};f.converters["unsigned long"]=function(t,e,r){return f.util.ConvertToInt(t,32,"unsigned",void 0,e,r)};f.converters["unsigned short"]=function(t,e,r,A){return f.util.ConvertToInt(t,16,"unsigned",A,e,r)};f.converters.ArrayBuffer=function(t,e,r,A){if(f.util.Type(t)!=="Object"||!ut.isAnyArrayBuffer(t))throw f.errors.conversionFailed({prefix:e,argument:`${r} ("${f.util.Stringify(t)}")`,types:["ArrayBuffer"]});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t))throw f.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.resizable||t.growable)throw f.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};f.converters.TypedArray=function(t,e,r,A,s){if(f.util.Type(t)!=="Object"||!ut.isTypedArray(t)||t.constructor.name!==e.name)throw f.errors.conversionFailed({prefix:r,argument:`${A} ("${f.util.Stringify(t)}")`,types:[e.name]});if(s?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw f.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw f.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};f.converters.DataView=function(t,e,r,A){if(f.util.Type(t)!=="Object"||!ut.isDataView(t))throw f.errors.exception({header:e,message:`${r} is not a DataView.`});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw f.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw f.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};f.converters.BufferSource=function(t,e,r,A){if(ut.isAnyArrayBuffer(t))return f.converters.ArrayBuffer(t,e,r,{...A,allowShared:!1});if(ut.isTypedArray(t))return f.converters.TypedArray(t,t.constructor,e,r,{...A,allowShared:!1});if(ut.isDataView(t))return f.converters.DataView(t,e,r,{...A,allowShared:!1});throw f.errors.conversionFailed({prefix:e,argument:`${r} ("${f.util.Stringify(t)}")`,types:["BufferSource"]})};f.converters["sequence"]=f.sequenceConverter(f.converters.ByteString);f.converters["sequence>"]=f.sequenceConverter(f.converters["sequence"]);f.converters["record"]=f.recordConverter(f.converters.ByteString,f.converters.ByteString);uh.exports={webidl:f}});var Ge=B((MJ,Dh)=>{"use strict";var{Transform:JD}=C("node:stream"),Eh=C("node:zlib"),{redirectStatusSet:PD,referrerPolicySet:HD,badPortsSet:VD}=As(),{getGlobalOrigin:hh}=Ya(),{collectASequenceOfCodePoints:Cr,collectAnHTTPQuotedString:qD,removeChars:WD,parseMIMEType:zD}=Te(),{performance:ZD}=C("node:perf_hooks"),{isBlobLike:jD,ReadableStreamFrom:KD,isValidHTTPToken:Qh,normalizedMethodRecordsBase:XD}=v(),dr=C("node:assert"),{isUint8Array:$D}=C("node:util/types"),{webidl:os}=Qe(),Bh=[],Uo;try{Uo=C("node:crypto");let t=["sha256","sha384","sha512"];Bh=Uo.getHashes().filter(e=>t.includes(e))}catch{}function Ih(t){let e=t.urlList,r=e.length;return r===0?null:e[r-1].toString()}function e0(t,e){if(!PD.has(t.status))return null;let r=t.headersList.get("location",!0);return r!==null&&dh(r)&&(Ch(r)||(r=t0(r)),r=new URL(r,Ih(t))),r&&!r.hash&&(r.hash=e),r}function Ch(t){for(let e=0;e126||r<32)return!1}return!0}function t0(t){return Buffer.from(t,"binary").toString("utf8")}function is(t){return t.urlList[t.urlList.length-1]}function r0(t){let e=is(t);return yh(e)&&VD.has(e.port)?"blocked":"allowed"}function A0(t){return t instanceof Error||t?.constructor?.name==="Error"||t?.constructor?.name==="DOMException"}function s0(t){for(let e=0;e=32&&r<=126||r>=128&&r<=255))return!1}return!0}var o0=Qh;function dh(t){return(t[0]===" "||t[0]===" "||t[t.length-1]===" "||t[t.length-1]===" "||t.includes(` +`)||t.includes("\r")||t.includes("\0"))===!1}function n0(t,e){let{headersList:r}=e,A=(r.get("referrer-policy",!0)??"").split(","),s="";if(A.length>0)for(let o=A.length;o!==0;o--){let n=A[o-1].trim();if(HD.has(n)){s=n;break}}s!==""&&(t.referrerPolicy=s)}function i0(){return"allowed"}function a0(){return"success"}function c0(){return"success"}function g0(t){let e=null;e=t.mode,t.headersList.set("sec-fetch-mode",e,!0)}function l0(t){let e=t.origin;if(!(e==="client"||e===void 0)){if(t.responseTainting==="cors"||t.mode==="websocket")t.headersList.append("origin",e,!0);else if(t.method!=="GET"&&t.method!=="HEAD"){switch(t.referrerPolicy){case"no-referrer":e=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":t.origin&&Ha(t.origin)&&!Ha(is(t))&&(e=null);break;case"same-origin":Go(t,is(t))||(e=null);break;default:}t.headersList.append("origin",e,!0)}}}function oA(t,e){return t}function u0(t,e,r){return!t?.startTime||t.startTime4096&&(A=s);let o=Go(t,A),n=ns(A)&&!ns(t.url);switch(e){case"origin":return s??Pa(r,!0);case"unsafe-url":return A;case"same-origin":return o?s:"no-referrer";case"origin-when-cross-origin":return o?A:s;case"strict-origin-when-cross-origin":{let i=is(t);return Go(A,i)?A:ns(A)&&!ns(i)?"no-referrer":s}default:return n?"no-referrer":s}}function Pa(t,e){return dr(t instanceof URL),t=new URL(t),t.protocol==="file:"||t.protocol==="about:"||t.protocol==="blank:"?"no-referrer":(t.username="",t.password="",t.hash="",e&&(t.pathname="",t.search=""),t)}function ns(t){if(!(t instanceof URL))return!1;if(t.href==="about:blank"||t.href==="about:srcdoc"||t.protocol==="data:"||t.protocol==="file:")return!0;return e(t.origin);function e(r){if(r==null||r==="null")return!1;let A=new URL(r);return!!(A.protocol==="https:"||A.protocol==="wss:"||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(A.hostname)||A.hostname==="localhost"||A.hostname.includes("localhost.")||A.hostname.endsWith(".localhost"))}}function I0(t,e){if(Uo===void 0)return!0;let r=ph(e);if(r==="no metadata"||r.length===0)return!0;let A=d0(r),s=f0(r,A);for(let o of s){let n=o.algo,i=o.hash,a=Uo.createHash(n).update(t).digest("base64");if(a[a.length-1]==="="&&(a[a.length-2]==="="?a=a.slice(0,-2):a=a.slice(0,-1)),p0(a,i))return!0}return!1}var C0=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function ph(t){let e=[],r=!0;for(let A of t.split(" ")){r=!1;let s=C0.exec(A);if(s===null||s.groups===void 0||s.groups.algo===void 0)continue;let o=s.groups.algo.toLowerCase();Bh.includes(o)&&e.push(s.groups)}return r===!0?"no metadata":e}function d0(t){let e=t[0].algo;if(e[3]==="5")return e;for(let r=1;r{t=A,e=s}),resolve:t,reject:e}}function y0(t){return t.controller.state==="aborted"}function R0(t){return t.controller.state==="aborted"||t.controller.state==="terminated"}function D0(t){return XD[t.toLowerCase()]??t}function T0(t){let e=JSON.stringify(t);if(e===void 0)throw new TypeError("Value is not JSON serializable");return dr(typeof e=="string"),e}var b0=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function mh(t,e,r=0,A=1){class s{#e;#t;#r;constructor(n,i){this.#e=n,this.#t=i,this.#r=0}next(){if(typeof this!="object"||this===null||!(#e in this))throw new TypeError(`'next' called on an object that does not implement interface ${t} Iterator.`);let n=this.#r,i=this.#e[e],a=i.length;if(n>=a)return{value:void 0,done:!0};let{[r]:c,[A]:g}=i[n];this.#r=n+1;let l;switch(this.#t){case"key":l=c;break;case"value":l=g;break;case"key+value":l=[c,g];break}return{value:l,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,b0),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${t} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(o,n){return new s(o,n)}}function k0(t,e,r,A=0,s=1){let o=mh(t,r,A,s),n={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return os.brandCheck(this,e),o(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return os.brandCheck(this,e),o(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return os.brandCheck(this,e),o(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(a,c=globalThis){if(os.brandCheck(this,e),os.argumentLengthCheck(arguments,1,`${t}.forEach`),typeof a!="function")throw new TypeError(`Failed to execute 'forEach' on '${t}': parameter 1 is not of type 'Function'.`);for(let{0:g,1:l}of o(this,"key+value"))a.call(c,l,g,this)}}};return Object.defineProperties(e.prototype,{...n,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:n.entries.value}})}async function F0(t,e,r){let A=e,s=r,o;try{o=t.stream.getReader()}catch(n){s(n);return}try{A(await wh(o))}catch(n){s(n)}}function S0(t){return t instanceof ReadableStream||t[Symbol.toStringTag]==="ReadableStream"&&typeof t.tee=="function"}function N0(t){try{t.close(),t.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}}var U0=/[^\x00-\xFF]/;function No(t){return dr(!U0.test(t)),t}async function wh(t){let e=[],r=0;for(;;){let{done:A,value:s}=await t.read();if(A)return Buffer.concat(e,r);if(!$D(s))throw new TypeError("Received non-Uint8Array chunk");e.push(s),r+=s.length}}function G0(t){dr("protocol"in t);let e=t.protocol;return e==="about:"||e==="blob:"||e==="data:"}function Ha(t){return typeof t=="string"&&t[5]===":"&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&t[4]==="s"||t.protocol==="https:"}function yh(t){dr("protocol"in t);let e=t.protocol;return e==="http:"||e==="https:"}function L0(t,e){let r=t;if(!r.startsWith("bytes"))return"failure";let A={position:5};if(e&&Cr(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==61)return"failure";A.position++,e&&Cr(a=>a===" "||a===" ",r,A);let s=Cr(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),o=s.length?Number(s):null;if(e&&Cr(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==45)return"failure";A.position++,e&&Cr(a=>a===" "||a===" ",r,A);let n=Cr(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),i=n.length?Number(n):null;return A.positioni?"failure":{rangeStartValue:o,rangeEndValue:i}}function M0(t,e,r){let A="bytes ";return A+=No(`${t}`),A+="-",A+=No(`${e}`),A+="/",A+=No(`${r}`),A}var Va=class extends JD{#e;constructor(e){super(),this.#e=e}_transform(e,r,A){if(!this._inflateStream){if(e.length===0){A();return}this._inflateStream=(e[0]&15)===8?Eh.createInflate(this.#e):Eh.createInflateRaw(this.#e),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",s=>this.destroy(s))}this._inflateStream.write(e,r,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}};function v0(t){return new Va(t)}function x0(t){let e=null,r=null,A=null,s=Rh("content-type",t);if(s===null)return"failure";for(let o of s){let n=zD(o);n==="failure"||n.essence==="*/*"||(A=n,A.essence!==r?(e=null,A.parameters.has("charset")&&(e=A.parameters.get("charset")),r=A.essence):!A.parameters.has("charset")&&e!==null&&A.parameters.set("charset",e))}return A??"failure"}function O0(t){let e=t,r={position:0},A=[],s="";for(;r.positiono!=='"'&&o!==",",e,r),r.positiono===9||o===32),A.push(s),s=""}return A}function Rh(t,e){let r=e.get(t,!0);return r===null?null:O0(r)}var Y0=new TextDecoder;function _0(t){return t.length===0?"":(t[0]===239&&t[1]===187&&t[2]===191&&(t=t.subarray(3)),Y0.decode(t))}var qa=class{get baseUrl(){return hh()}get origin(){return this.baseUrl?.origin}policyContainer=fh()},Wa=class{settingsObject=new qa},J0=new Wa;Dh.exports={isAborted:y0,isCancelled:R0,isValidEncodedURL:Ch,createDeferredPromise:w0,ReadableStreamFrom:KD,tryUpgradeRequestToAPotentiallyTrustworthyURL:m0,clampAndCoarsenConnectionTimingInfo:u0,coarsenedSharedCurrentTime:E0,determineRequestsReferrer:B0,makePolicyContainer:fh,clonePolicyContainer:Q0,appendFetchMetadata:g0,appendRequestOriginHeader:l0,TAOCheck:c0,corsCheck:a0,crossOriginResourcePolicyCheck:i0,createOpaqueTimingInfo:h0,setRequestReferrerPolicyOnRedirect:n0,isValidHTTPToken:Qh,requestBadPort:r0,requestCurrentURL:is,responseURL:Ih,responseLocationURL:e0,isBlobLike:jD,isURLPotentiallyTrustworthy:ns,isValidReasonPhrase:s0,sameOrigin:Go,normalizeMethod:D0,serializeJavascriptValueToJSONString:T0,iteratorMixin:k0,createIterator:mh,isValidHeaderName:o0,isValidHeaderValue:dh,isErrorLike:A0,fullyReadBody:F0,bytesMatch:I0,isReadableStreamLike:S0,readableStreamClose:N0,isomorphicEncode:No,urlIsLocal:G0,urlHasHttpsScheme:Ha,urlIsHttpHttpsScheme:yh,readAllBytes:wh,simpleRangeHeaderValue:L0,buildContentRange:M0,parseMetadata:ph,createInflate:v0,extractMimeType:x0,getDecodeSplit:Rh,utf8DecodeBytes:_0,environmentSettingsObject:J0}});var Pt=B((vJ,Th)=>{"use strict";Th.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var Za=B((xJ,bh)=>{"use strict";var{Blob:P0,File:H0}=C("node:buffer"),{kState:kt}=Pt(),{webidl:Et}=Qe(),za=class t{constructor(e,r,A={}){let s=r,o=A.type,n=A.lastModified??Date.now();this[kt]={blobLike:e,name:s,type:o,lastModified:n}}stream(...e){return Et.brandCheck(this,t),this[kt].blobLike.stream(...e)}arrayBuffer(...e){return Et.brandCheck(this,t),this[kt].blobLike.arrayBuffer(...e)}slice(...e){return Et.brandCheck(this,t),this[kt].blobLike.slice(...e)}text(...e){return Et.brandCheck(this,t),this[kt].blobLike.text(...e)}get size(){return Et.brandCheck(this,t),this[kt].blobLike.size}get type(){return Et.brandCheck(this,t),this[kt].blobLike.type}get name(){return Et.brandCheck(this,t),this[kt].name}get lastModified(){return Et.brandCheck(this,t),this[kt].lastModified}get[Symbol.toStringTag](){return"File"}};Et.converters.Blob=Et.interfaceConverter(P0);function V0(t){return t instanceof H0||t&&(typeof t.stream=="function"||typeof t.arrayBuffer=="function")&&t[Symbol.toStringTag]==="File"}bh.exports={FileLike:za,isFileLike:V0}});var cs=B((OJ,Uh)=>{"use strict";var{isBlobLike:Lo,iteratorMixin:q0}=Ge(),{kState:fe}=Pt(),{kEnumerableProperty:nA}=v(),{FileLike:kh,isFileLike:W0}=Za(),{webidl:z}=Qe(),{File:Nh}=C("node:buffer"),Fh=C("node:util"),Sh=globalThis.File??Nh,as=class t{constructor(e){if(z.util.markAsUncloneable(this),e!==void 0)throw z.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[fe]=[]}append(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.append";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"value",{strict:!1}):z.converters.USVString(r,s,"value"),A=arguments.length===3?z.converters.USVString(A,s,"filename"):void 0;let o=ja(e,r,A);this[fe].push(o)}delete(e){z.brandCheck(this,t);let r="FormData.delete";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe]=this[fe].filter(A=>A.name!==e)}get(e){z.brandCheck(this,t);let r="FormData.get";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name");let A=this[fe].findIndex(s=>s.name===e);return A===-1?null:this[fe][A].value}getAll(e){z.brandCheck(this,t);let r="FormData.getAll";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].filter(A=>A.name===e).map(A=>A.value)}has(e){z.brandCheck(this,t);let r="FormData.has";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].findIndex(A=>A.name===e)!==-1}set(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.set";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"name",{strict:!1}):z.converters.USVString(r,s,"name"),A=arguments.length===3?z.converters.USVString(A,s,"name"):void 0;let o=ja(e,r,A),n=this[fe].findIndex(i=>i.name===e);n!==-1?this[fe]=[...this[fe].slice(0,n),o,...this[fe].slice(n+1).filter(i=>i.name!==e)]:this[fe].push(o)}[Fh.inspect.custom](e,r){let A=this[fe].reduce((o,n)=>(o[n.name]?Array.isArray(o[n.name])?o[n.name].push(n.value):o[n.name]=[o[n.name],n.value]:o[n.name]=n.value,o),{__proto__:null});r.depth??=e,r.colors??=!0;let s=Fh.formatWithOptions(r,A);return`FormData ${s.slice(s.indexOf("]")+2)}`}};q0("FormData",as,fe,"name","value");Object.defineProperties(as.prototype,{append:nA,delete:nA,get:nA,getAll:nA,has:nA,set:nA,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function ja(t,e,r){if(typeof e!="string"){if(W0(e)||(e=e instanceof Blob?new Sh([e],"blob",{type:e.type}):new kh(e,"blob",{type:e.type})),r!==void 0){let A={type:e.type,lastModified:e.lastModified};e=e instanceof Nh?new Sh([e],r,A):new kh(e,r,A)}}return{name:t,value:e}}Uh.exports={FormData:as,makeEntry:ja}});var Oh=B((YJ,xh)=>{"use strict";var{isUSVString:Gh,bufferToLowerCasedHeaderName:z0}=v(),{utf8DecodeBytes:Z0}=Ge(),{HTTP_TOKEN_CODEPOINTS:j0,isomorphicDecode:Lh}=Te(),{isFileLike:K0}=Za(),{makeEntry:X0}=cs(),Mo=C("node:assert"),{File:$0}=C("node:buffer"),eT=globalThis.File??$0,tT=Buffer.from('form-data; name="'),Mh=Buffer.from("; filename"),rT=Buffer.from("--"),AT=Buffer.from(`--\r +`);function sT(t){for(let e=0;e70)return!1;for(let r=0;r=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===39||A===45||A===95))return!1}return!0}function nT(t,e){Mo(e!=="failure"&&e.essence==="multipart/form-data");let r=e.parameters.get("boundary");if(r===void 0)return"failure";let A=Buffer.from(`--${r}`,"utf8"),s=[],o={position:0};for(;t[o.position]===13&&t[o.position+1]===10;)o.position+=2;let n=t.length;for(;t[n-1]===10&&t[n-2]===13;)n-=2;for(n!==t.length&&(t=t.subarray(0,n));;){if(t.subarray(o.position,o.position+A.length).equals(A))o.position+=A.length;else return"failure";if(o.position===t.length-2&&vo(t,rT,o)||o.position===t.length-4&&vo(t,AT,o))return s;if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let i=iT(t,o);if(i==="failure")return"failure";let{name:a,filename:c,contentType:g,encoding:l}=i;o.position+=2;let u;{let h=t.indexOf(A.subarray(2),o.position);if(h===-1)return"failure";u=t.subarray(o.position,h-4),o.position+=u.length,l==="base64"&&(u=Buffer.from(u.toString(),"base64"))}if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let E;c!==null?(g??="text/plain",sT(g)||(g=""),E=new eT([u],c,{type:g})):E=Z0(Buffer.from(u)),Mo(Gh(a)),Mo(typeof E=="string"&&Gh(E)||K0(E)),s.push(X0(a,E,c))}}function iT(t,e){let r=null,A=null,s=null,o=null;for(;;){if(t[e.position]===13&&t[e.position+1]===10)return r===null?"failure":{name:r,filename:A,contentType:s,encoding:o};let n=iA(i=>i!==10&&i!==13&&i!==58,t,e);if(n=Ka(n,!0,!0,i=>i===9||i===32),!j0.test(n.toString())||t[e.position]!==58)return"failure";switch(e.position++,iA(i=>i===32||i===9,t,e),z0(n)){case"content-disposition":{if(r=A=null,!vo(t,tT,e)||(e.position+=17,r=vh(t,e),r===null))return"failure";if(vo(t,Mh,e)){let i=e.position+Mh.length;if(t[i]===42&&(e.position+=1,i+=1),t[i]!==61||t[i+1]!==34||(e.position+=12,A=vh(t,e),A===null))return"failure"}break}case"content-type":{let i=iA(a=>a!==10&&a!==13,t,e);i=Ka(i,!1,!0,a=>a===9||a===32),s=Lh(i);break}case"content-transfer-encoding":{let i=iA(a=>a!==10&&a!==13,t,e);i=Ka(i,!1,!0,a=>a===9||a===32),o=Lh(i);break}default:iA(i=>i!==10&&i!==13,t,e)}if(t[e.position]!==13&&t[e.position+1]!==10)return"failure";e.position+=2}}function vh(t,e){Mo(t[e.position-1]===34);let r=iA(A=>A!==10&&A!==13&&A!==34,t,e);return t[e.position]!==34?null:(e.position++,r=new TextDecoder().decode(r).replace(/%0A/ig,` +`).replace(/%0D/ig,"\r").replace(/%22/g,'"'),r)}function iA(t,e,r){let A=r.position;for(;A0&&A(t[o]);)o--;return s===0&&o===t.length-1?t:t.subarray(s,o+1)}function vo(t,e,r){if(t.length{"use strict";var gs=v(),{ReadableStreamFrom:aT,isBlobLike:Yh,isReadableStreamLike:cT,readableStreamClose:gT,createDeferredPromise:lT,fullyReadBody:uT,extractMimeType:ET,utf8DecodeBytes:Ph}=Ge(),{FormData:_h}=cs(),{kState:cA}=Pt(),{webidl:hT}=Qe(),{Blob:QT}=C("node:buffer"),Xa=C("node:assert"),{isErrored:Hh,isDisturbed:BT}=C("node:stream"),{isArrayBuffer:IT}=C("node:util/types"),{serializeAMimeType:CT}=Te(),{multipartFormDataParser:dT}=Oh(),$a;try{let t=C("node:crypto");$a=e=>t.randomInt(0,e)}catch{$a=t=>Math.floor(Math.random(t))}var xo=new TextEncoder;function fT(){}var Vh=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,qh;Vh&&(qh=new FinalizationRegistry(t=>{let e=t.deref();e&&!e.locked&&!BT(e)&&!Hh(e)&&e.cancel("Response object has been garbage collected").catch(fT)}));function Wh(t,e=!1){let r=null;t instanceof ReadableStream?r=t:Yh(t)?r=t.stream():r=new ReadableStream({async pull(a){let c=typeof s=="string"?xo.encode(s):s;c.byteLength&&a.enqueue(c),queueMicrotask(()=>gT(a))},start(){},type:"bytes"}),Xa(cT(r));let A=null,s=null,o=null,n=null;if(typeof t=="string")s=t,n="text/plain;charset=UTF-8";else if(t instanceof URLSearchParams)s=t.toString(),n="application/x-www-form-urlencoded;charset=UTF-8";else if(IT(t))s=new Uint8Array(t.slice());else if(ArrayBuffer.isView(t))s=new Uint8Array(t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength));else if(gs.isFormDataLike(t)){let a=`----formdata-undici-0${`${$a(1e11)}`.padStart(11,"0")}`,c=`--${a}\r Content-Disposition: form-data`;let g=I=>I.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),l=I=>I.replace(/\r?\n|\r/g,`\r -`),u=[],E=new Uint8Array([13,10]);o=0;let h=!1;for(let[I,Q]of t)if(typeof Q=="string"){let f=xo.encode(c+`; name="${g(l(I))}"\r +`),u=[],E=new Uint8Array([13,10]);o=0;let h=!1;for(let[I,Q]of t)if(typeof Q=="string"){let p=xo.encode(c+`; name="${g(l(I))}"\r \r ${l(Q)}\r -`);u.push(f),o+=f.byteLength}else{let f=xo.encode(`${c}; name="${g(l(I))}"`+(Q.name?`; filename="${g(Q.name)}"`:"")+`\r +`);u.push(p),o+=p.byteLength}else{let p=xo.encode(`${c}; name="${g(l(I))}"`+(Q.name?`; filename="${g(Q.name)}"`:"")+`\r Content-Type: ${Q.type||"application/octet-stream"}\r \r -`);u.push(f,Q,E),typeof Q.size=="number"?o+=f.byteLength+Q.size+E.byteLength:h=!0}let C=xo.encode(`--${a}--\r -`);u.push(C),o+=C.byteLength,h&&(o=null),s=t,A=async function*(){for(let I of u)I.stream?yield*I.stream():yield I},n=`multipart/form-data; boundary=${a}`}else if(Jh(t))s=t,o=t.size,t.type&&(n=t.type);else if(typeof t[Symbol.asyncIterator]=="function"){if(e)throw new TypeError("keepalive");if(cs.isDisturbed(t)||t.locked)throw new TypeError("Response body object should not be disturbed or locked");r=t instanceof ReadableStream?t:hT(t)}if((typeof s=="string"||cs.isBuffer(s))&&(o=Buffer.byteLength(s)),A!=null){let a;r=new ReadableStream({async start(){a=A(t)[Symbol.asyncIterator]()},async pull(c){let{value:g,done:l}=await a.next();if(l)queueMicrotask(()=>{c.close(),c.byobRequest?.respond(0)});else if(!qh(r)){let u=new Uint8Array(g);u.byteLength&&c.enqueue(u)}return c.desiredSize>0},async cancel(c){await a.return()},type:"bytes"})}return[{stream:r,source:s,length:o},n]}function TT(t,e=!1){return t instanceof ReadableStream&&($a(!cs.isDisturbed(t),"The body has already been consumed."),$a(!t.locked,"The stream is locked.")),Zh(t,e)}function bT(t,e){let[r,A]=e.stream.tee();return e.stream=r,{stream:A,length:e.length,source:e.source}}function kT(t){if(t.aborted)throw new DOMException("The operation was aborted.","AbortError")}function FT(t){return{blob(){return iA(this,r=>{let A=Hh(this);return A===null?A="":A&&(A=yT(A)),new pT([r],{type:A})},t)},arrayBuffer(){return iA(this,r=>new Uint8Array(r).buffer,t)},text(){return iA(this,Vh,t)},json(){return iA(this,NT,t)},formData(){return iA(this,r=>{let A=Hh(this);if(A!==null)switch(A.essence){case"multipart/form-data":{let s=RT(r,A);if(s==="failure")throw new TypeError("Failed to parse body as FormData.");let o=new Ph;return o[aA]=s,o}case"application/x-www-form-urlencoded":{let s=new URLSearchParams(r.toString()),o=new Ph;for(let[n,i]of s)o.append(n,i);return o}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')},t)},bytes(){return iA(this,r=>new Uint8Array(r),t)}}}function ST(t){Object.assign(t.prototype,FT(t))}async function iA(t,e,r){if(fT.brandCheck(t,r),jh(t))throw new TypeError("Body is unusable: Body has already been read");kT(t[aA]);let A=IT(),s=n=>A.reject(n),o=n=>{try{A.resolve(e(n))}catch(i){s(i)}};return t[aA].body==null?(o(Buffer.allocUnsafe(0)),A.promise):(await CT(t[aA].body,o,s),A.promise)}function jh(t){let e=t[aA].body;return e!=null&&(e.stream.locked||cs.isDisturbed(e.stream))}function NT(t){return JSON.parse(Vh(t))}function Hh(t){let e=t[aA].headersList,r=dT(e);return r==="failure"?null:r}Kh.exports={extractBody:Zh,safelyExtractBody:TT,cloneBody:bT,mixinBody:ST,streamRegistry:zh,hasFinalizationRegistry:Wh,bodyUnusable:jh}});var EQ=B((OJ,uQ)=>{"use strict";var b=require("node:assert"),F=M(),{channels:Xh}=jr(),tc=Ma(),{RequestContentLengthMismatchError:dr,ResponseContentLengthMismatchError:$h,RequestAbortedError:iQ,InvalidArgumentError:UT,HeadersTimeoutError:GT,HeadersOverflowError:LT,SocketError:gA,InformationalError:lA,BodyTimeoutError:MT,HTTPParserError:vT,ResponseExceededMaxSizeError:xT}=Y(),{kUrl:aQ,kReset:be,kClient:Jo,kParser:j,kBlocking:us,kRunning:ce,kPending:cQ,kSize:eQ,kWriting:Ht,kQueue:et,kNoRef:gs,kKeepAliveDefaultTimeout:OT,kHostHeader:YT,kPendingIdx:_T,kRunningIdx:Ve,kError:pe,kPipelining:Po,kSocket:pr,kKeepAliveTimeoutValue:Vo,kMaxHeadersSize:rc,kKeepAliveMaxTimeout:JT,kKeepAliveTimeoutThreshold:PT,kHeadersTimeout:HT,kBodyTimeout:VT,kStrictContentLength:oc,kMaxRequests:tQ,kCounter:qT,kMaxResponseSize:WT,kOnError:rQ,kResume:Ft,kHTTPContext:gQ}=$(),Le=zE(),AQ=Buffer.alloc(0),Oo=Buffer[Symbol.species],Yo=F.addListener,zT=F.removeAllListeners,mr=Symbol("kIdleSocketValidation"),fr=Symbol("kIdleSocketValidationTimeout"),cc=Symbol("kSocketUsed"),Ac;async function ZT(){let t=process.env.JEST_WORKER_ID?Oa():void 0,e;try{e=await WebAssembly.compile(KE())}catch{e=await WebAssembly.compile(t||Oa())}return await WebAssembly.instantiate(e,{env:{wasm_on_url:(r,A,s)=>0,wasm_on_status:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onStatus(new Oo(ht.buffer,o,s))||0},wasm_on_message_begin:r=>(b(se.ptr===r),se.onMessageBegin()||0),wasm_on_header_field:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderField(new Oo(ht.buffer,o,s))||0},wasm_on_header_value:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderValue(new Oo(ht.buffer,o,s))||0},wasm_on_headers_complete:(r,A,s,o)=>(b(se.ptr===r),se.onHeadersComplete(A,!!s,!!o)||0),wasm_on_body:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onBody(new Oo(ht.buffer,o,s))||0},wasm_on_message_complete:r=>(b(se.ptr===r),se.onMessageComplete()||0)}})}var sc=null,nc=ZT();nc.catch();var se=null,ht=null,_o=0,Qt=null,jT=0,ls=1,uA=2|ls,Ho=4|ls,ic=8|jT,ac=class{constructor(e,r,{exports:A}){b(Number.isFinite(e[rc])&&e[rc]>0),this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Le.TYPE.RESPONSE),this.client=e,this.socket=r,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[rc],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[WT]}setTimeout(e,r){e!==this.timeoutValue||r&ls^this.timeoutType&ls?(this.timeout&&(tc.clearTimeout(this.timeout),this.timeout=null),e&&(r&ls?this.timeout=tc.setFastTimeout(sQ,e,new WeakRef(this)):(this.timeout=setTimeout(sQ,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=r}resume(){this.socket.destroyed||!this.paused||(b(this.ptr!=null),b(se==null),this.llhttp.llhttp_resume(this.ptr),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||AQ),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){b(this.ptr!=null),b(se==null),b(!this.paused);let{socket:r,llhttp:A}=this;e.length>_o&&(Qt&&A.free(Qt),_o=Math.ceil(e.length/4096)*4096,Qt=A.malloc(_o)),new Uint8Array(A.memory.buffer,Qt,_o).set(e);try{let s;try{ht=e,se=this,s=A.llhttp_execute(this.ptr,Qt,e.length)}catch(n){throw n}finally{se=null,ht=null}let o=A.llhttp_get_error_pos(this.ptr)-Qt;if(s!==Le.ERROR.OK){let n=e.subarray(o);if(s===Le.ERROR.PAUSED_UPGRADE)this.onUpgrade(n);else if(s===Le.ERROR.PAUSED)this.paused=!0,r.unshift(n);else throw this.createError(s,n)}}catch(s){F.destroy(r,s)}}finish(){b(se===null),b(this.ptr!=null),b(!this.paused);let{llhttp:e}=this,r;try{se=this,r=e.llhttp_finish(this.ptr)}finally{se=null}return r===Le.ERROR.OK?null:r===Le.ERROR.PAUSED||r===Le.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,AQ)}createError(e,r){let{llhttp:A,contentLength:s,bytesRead:o}=this;if(s&&o!==parseInt(s,10))return new $h;let n=A.llhttp_get_error_reason(this.ptr),i="";if(n){let a=new Uint8Array(A.memory.buffer,n).indexOf(0);i="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,n,a).toString()+")"}return new vT(i,Le.ERROR[e],r)}destroy(){b(this.ptr!=null),b(se==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&tc.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:r}=this;if(e.destroyed)return-1;if(r[ce]===0)return F.destroy(e,new gA("bad response",F.getSocketInfo(e))),-1;let A=r[et][r[Ve]];if(!A)return-1;A.onResponseStarted()}onHeaderField(e){let r=this.headers.length;(r&1)===0?this.headers.push(e):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]),this.trackHeader(e.length)}onHeaderValue(e){let r=this.headers.length;(r&1)===1?(this.headers.push(e),r+=1):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]);let A=this.headers[r-2];if(A.length===10){let s=F.bufferToLowerCasedHeaderName(A);s==="keep-alive"?this.keepAlive+=e.toString():s==="connection"&&(this.connection+=e.toString())}else A.length===14&&F.bufferToLowerCasedHeaderName(A)==="content-length"&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&F.destroy(this.socket,new LT)}onUpgrade(e){let{upgrade:r,client:A,socket:s,headers:o,statusCode:n}=this;b(r),b(A[pr]===s),b(!s.destroyed),b(!this.paused),b((o.length&1)===0);let i=A[et][A[Ve]];b(i),b(i.upgrade||i.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,s.unshift(e),s[j].destroy(),s[j]=null,s[Jo]=null,s[pe]=null,zT(s),A[pr]=null,A[gQ]=null,A[et][A[Ve]++]=null,A.emit("disconnect",A[aQ],[A],new lA("upgrade"));try{i.onUpgrade(n,o,s)}catch(a){F.destroy(s,a)}A[Ft]()}onHeadersComplete(e,r,A){let{client:s,socket:o,headers:n,statusText:i}=this;if(o.destroyed)return-1;if(s[ce]===0)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;let a=s[et][s[Ve]];if(!a)return-1;if(b(!this.upgrade),b(this.statusCode<200),e===100)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;if(r&&!a.upgrade)return F.destroy(o,new gA("bad upgrade",F.getSocketInfo(o))),-1;if(b(this.timeoutType===uA),this.statusCode=e,this.shouldKeepAlive=A||a.method==="HEAD"&&!o[be]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let g=a.bodyTimeout!=null?a.bodyTimeout:s[VT];this.setTimeout(g,Ho)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(a.method==="CONNECT")return b(s[ce]===1),this.upgrade=!0,2;if(r)return b(s[ce]===1),this.upgrade=!0,2;if(b((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&s[Po]){let g=this.keepAlive?F.parseKeepAliveTimeout(this.keepAlive):null;if(g!=null){let l=Math.min(g-s[PT],s[JT]);l<=0?o[be]=!0:s[Vo]=l}else s[Vo]=s[OT]}else o[be]=!0;let c=a.onHeaders(e,n,this.resume,i)===!1;return a.aborted?-1:a.method==="HEAD"||e<200?1:(o[us]&&(o[us]=!1,s[Ft]()),c?Le.ERROR.PAUSED:0)}onBody(e){let{client:r,socket:A,statusCode:s,maxResponseSize:o}=this;if(A.destroyed)return-1;let n=r[et][r[Ve]];if(b(n),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),b(s>=200),o>-1&&this.bytesRead+e.length>o)return F.destroy(A,new xT),-1;if(this.bytesRead+=e.length,n.onData(e)===!1)return Le.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:r,statusCode:A,upgrade:s,headers:o,contentLength:n,bytesRead:i,shouldKeepAlive:a}=this;if(r.destroyed&&(!A||a))return-1;if(s)return;b(A>=100),b((this.headers.length&1)===0);let c=e[et][e[Ve]];if(b(c),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,!(A<200)){if(c.method!=="HEAD"&&n&&i!==parseInt(n,10))return F.destroy(r,new $h),-1;if(c.onComplete(o),e[et][e[Ve]++]=null,r[cc]=!0,r[Ht])return b(e[ce]===0),F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;if(a){if(r[be]&&e[ce]===0)return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;e[Po]==null||e[Po]===1?setImmediate(()=>e[Ft]()):e[Ft]()}else return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED}}};function sQ(t){let{socket:e,timeoutType:r,client:A,paused:s}=t.deref();r===uA?(!e[Ht]||e.writableNeedDrain||A[ce]>1)&&(b(!s,"cannot be paused while waiting for headers"),F.destroy(e,new GT)):r===Ho?s||F.destroy(e,new MT):r===ic&&(b(A[ce]===0&&A[Vo]),F.destroy(e,new lA("socket idle timeout")))}async function KT(t,e){t[pr]=e,sc||(sc=await nc,nc=null),e[gs]=!1,e[Ht]=!1,e[be]=!1,e[us]=!1,e[mr]=0,e[fr]=null,e[cc]=!1,e[j]=new ac(t,e,sc),Yo(e,"error",function(A){b(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let s=this[j];if(A.code==="ECONNRESET"&&s.statusCode&&!s.shouldKeepAlive){let o=s.finish();o&&(this[pe]=o,this[Jo][rQ](o));return}this[pe]=A,this[Jo][rQ](A)}),Yo(e,"readable",function(){let A=this[j];A&&A.readMore()}),Yo(e,"end",function(){let A=this[j];if(A.statusCode&&!A.shouldKeepAlive){let s=A.finish();s&&F.destroy(this,s);return}F.destroy(this,new gA("other side closed",F.getSocketInfo(this)))}),Yo(e,"close",function(){let A=this[Jo],s=this[j];lQ(this),s&&(!this[pe]&&s.statusCode&&!s.shouldKeepAlive&&(this[pe]=s.finish()||this[pe]),this[j].destroy(),this[j]=null);let o=this[pe]||new gA("closed",F.getSocketInfo(this));if(A[pr]=null,A[gQ]=null,A.destroyed){b(A[cQ]===0);let n=A[et].splice(A[Ve]);for(let i=0;i0&&o.code!=="UND_ERR_INFO"){let n=A[et][A[Ve]];A[et][A[Ve]++]=null,F.errorRequest(A,n,o)}A[_T]=A[Ve],b(A[ce]===0),A.emit("disconnect",A[aQ],[A],o),A[Ft]()});let r=!1;return e.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...A){return tb(t,...A)},resume(){$T(t)},destroy(A,s){r?queueMicrotask(s):e.destroy(A).on("close",s)},get destroyed(){return e.destroyed},busy(A){return!!(e[Ht]||e[be]||e[us]||e[mr]===1||A&&(t[ce]>0&&!A.idempotent||t[ce]>0&&(A.upgrade||A.method==="CONNECT")||t[ce]>0&&F.bodyLength(A.body)!==0&&(F.isStream(A.body)||F.isAsyncIterable(A.body)||F.isFormDataLike(A.body))))}}}function lQ(t){t[fr]&&(clearTimeout(t[fr]),t[fr]=null),t[mr]=0}function XT(t,e){e[mr]=1,e[fr]=setTimeout(()=>{e[fr]=null,e[mr]=2,t[pr]===e&&!e.destroyed&&t[Ft]()},0),e[fr].unref?.()}function $T(t){let e=t[pr];if(e&&!e.destroyed){if(t[eQ]===0?!e[gs]&&e.unref&&(e.unref(),e[gs]=!0):e[gs]&&e.ref&&(e.ref(),e[gs]=!1),t[ce]===0&&t[cQ]>0&&e[cc]){if(e[mr]===0)return XT(t,e),e[j].readMore(),e.destroyed,void 0;if(e[mr]===1)return e[j].readMore(),e.destroyed,void 0}if(t[ce]===0&&(e[j].readMore(),e.destroyed))return;if(t[eQ]===0)e[j].timeoutType!==ic&&e[j].setTimeout(t[Vo],ic);else if(t[ce]>0&&e[j].statusCode<200&&e[j].timeoutType!==uA){let r=t[et][t[Ve]],A=r.headersTimeout!=null?r.headersTimeout:t[HT];e[j].setTimeout(A,uA)}}}function eb(t){return t!=="GET"&&t!=="HEAD"&&t!=="OPTIONS"&&t!=="TRACE"&&t!=="CONNECT"}function tb(t,e){let{method:r,path:A,host:s,upgrade:o,blocking:n,reset:i}=e,{body:a,headers:c,contentLength:g}=e,l=r==="PUT"||r==="POST"||r==="PATCH"||r==="QUERY"||r==="PROPFIND"||r==="PROPPATCH";if(F.isFormDataLike(a)){Ac||(Ac=cA().extractBody);let[I,Q]=Ac(a);e.contentType==null&&c.push("content-type",Q),a=I.stream,g=I.length}else if(F.isBlobLike(a)&&e.contentType==null){let I=a.type;if(I){let Q=`${I}`;if(!F.isValidHeaderValue(Q))return F.errorRequest(t,e,new UT("invalid content-type header")),!1;c.push("content-type",Q)}}a&&typeof a.read=="function"&&a.read(0);let u=F.bodyLength(a);if(g=u??g,g===null&&(g=e.contentLength),g===0&&!l&&(g=null),eb(r)&&g>0&&e.contentLength!==null&&e.contentLength!==g){if(t[oc])return F.errorRequest(t,e,new dr),!1;process.emitWarning(new dr)}let E=t[pr];lQ(E);let h=I=>{e.aborted||e.completed||(F.errorRequest(t,e,I||new iQ),F.destroy(a),F.destroy(E,new lA("aborted")))};try{e.onConnect(h)}catch(I){F.errorRequest(t,e,I)}if(e.aborted)return!1;r==="HEAD"&&(E[be]=!0),(o||r==="CONNECT")&&(E[be]=!0),i!=null&&(E[be]=i),t[tQ]&&E[qT]++>=t[tQ]&&(E[be]=!0),n&&(E[us]=!0);let C=`${r} ${A} HTTP/1.1\r -`;if(typeof s=="string"?C+=`host: ${s}\r -`:C+=t[YT],o?C+=`connection: upgrade\r +`);u.push(p,Q,E),typeof Q.size=="number"?o+=p.byteLength+Q.size+E.byteLength:h=!0}let d=xo.encode(`--${a}--\r +`);u.push(d),o+=d.byteLength,h&&(o=null),s=t,A=async function*(){for(let I of u)I.stream?yield*I.stream():yield I},n=`multipart/form-data; boundary=${a}`}else if(Yh(t))s=t,o=t.size,t.type&&(n=t.type);else if(typeof t[Symbol.asyncIterator]=="function"){if(e)throw new TypeError("keepalive");if(gs.isDisturbed(t)||t.locked)throw new TypeError("Response body object should not be disturbed or locked");r=t instanceof ReadableStream?t:aT(t)}if((typeof s=="string"||gs.isBuffer(s))&&(o=Buffer.byteLength(s)),A!=null){let a;r=new ReadableStream({async start(){a=A(t)[Symbol.asyncIterator]()},async pull(c){let{value:g,done:l}=await a.next();if(l)queueMicrotask(()=>{c.close(),c.byobRequest?.respond(0)});else if(!Hh(r)){let u=new Uint8Array(g);u.byteLength&&c.enqueue(u)}return c.desiredSize>0},async cancel(c){await a.return()},type:"bytes"})}return[{stream:r,source:s,length:o},n]}function pT(t,e=!1){return t instanceof ReadableStream&&(Xa(!gs.isDisturbed(t),"The body has already been consumed."),Xa(!t.locked,"The stream is locked.")),Wh(t,e)}function mT(t,e){let[r,A]=e.stream.tee();return e.stream=r,{stream:A,length:e.length,source:e.source}}function wT(t){if(t.aborted)throw new DOMException("The operation was aborted.","AbortError")}function yT(t){return{blob(){return aA(this,r=>{let A=Jh(this);return A===null?A="":A&&(A=CT(A)),new QT([r],{type:A})},t)},arrayBuffer(){return aA(this,r=>new Uint8Array(r).buffer,t)},text(){return aA(this,Ph,t)},json(){return aA(this,DT,t)},formData(){return aA(this,r=>{let A=Jh(this);if(A!==null)switch(A.essence){case"multipart/form-data":{let s=dT(r,A);if(s==="failure")throw new TypeError("Failed to parse body as FormData.");let o=new _h;return o[cA]=s,o}case"application/x-www-form-urlencoded":{let s=new URLSearchParams(r.toString()),o=new _h;for(let[n,i]of s)o.append(n,i);return o}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')},t)},bytes(){return aA(this,r=>new Uint8Array(r),t)}}}function RT(t){Object.assign(t.prototype,yT(t))}async function aA(t,e,r){if(hT.brandCheck(t,r),zh(t))throw new TypeError("Body is unusable: Body has already been read");wT(t[cA]);let A=lT(),s=n=>A.reject(n),o=n=>{try{A.resolve(e(n))}catch(i){s(i)}};return t[cA].body==null?(o(Buffer.allocUnsafe(0)),A.promise):(await uT(t[cA].body,o,s),A.promise)}function zh(t){let e=t[cA].body;return e!=null&&(e.stream.locked||gs.isDisturbed(e.stream))}function DT(t){return JSON.parse(Ph(t))}function Jh(t){let e=t[cA].headersList,r=ET(e);return r==="failure"?null:r}Zh.exports={extractBody:Wh,safelyExtractBody:pT,cloneBody:mT,mixinBody:RT,streamRegistry:qh,hasFinalizationRegistry:Vh,bodyUnusable:zh}});var lQ=B((JJ,gQ)=>{"use strict";var k=C("node:assert"),S=v(),{channels:jh}=Kr(),ec=La(),{RequestContentLengthMismatchError:fr,ResponseContentLengthMismatchError:Kh,RequestAbortedError:oQ,InvalidArgumentError:TT,HeadersTimeoutError:bT,HeadersOverflowError:kT,SocketError:lA,InformationalError:uA,BodyTimeoutError:FT,HTTPParserError:ST,ResponseExceededMaxSizeError:NT}=_(),{kUrl:nQ,kReset:be,kClient:Jo,kParser:j,kBlocking:Es,kRunning:ce,kPending:iQ,kSize:Xh,kWriting:Ht,kQueue:et,kNoRef:ls,kKeepAliveDefaultTimeout:UT,kHostHeader:GT,kPendingIdx:LT,kRunningIdx:Ve,kError:pe,kPipelining:Po,kSocket:mr,kKeepAliveTimeoutValue:Vo,kMaxHeadersSize:tc,kKeepAliveMaxTimeout:MT,kKeepAliveTimeoutThreshold:vT,kHeadersTimeout:xT,kBodyTimeout:OT,kStrictContentLength:sc,kMaxRequests:$h,kCounter:YT,kMaxResponseSize:_T,kOnError:eQ,kResume:Ft,kHTTPContext:aQ}=$(),Le=qE(),tQ=Buffer.alloc(0),Oo=Buffer[Symbol.species],Yo=S.addListener,JT=S.removeAllListeners,wr=Symbol("kIdleSocketValidation"),pr=Symbol("kIdleSocketValidationTimeout"),ac=Symbol("kSocketUsed"),rc;async function PT(){let t=process.env.JEST_WORKER_ID?xa():void 0,e;try{e=await WebAssembly.compile(ZE())}catch{e=await WebAssembly.compile(t||xa())}return await WebAssembly.instantiate(e,{env:{wasm_on_url:(r,A,s)=>0,wasm_on_status:(r,A,s)=>{k(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onStatus(new Oo(ht.buffer,o,s))||0},wasm_on_message_begin:r=>(k(se.ptr===r),se.onMessageBegin()||0),wasm_on_header_field:(r,A,s)=>{k(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderField(new Oo(ht.buffer,o,s))||0},wasm_on_header_value:(r,A,s)=>{k(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderValue(new Oo(ht.buffer,o,s))||0},wasm_on_headers_complete:(r,A,s,o)=>(k(se.ptr===r),se.onHeadersComplete(A,!!s,!!o)||0),wasm_on_body:(r,A,s)=>{k(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onBody(new Oo(ht.buffer,o,s))||0},wasm_on_message_complete:r=>(k(se.ptr===r),se.onMessageComplete()||0)}})}var Ac=null,oc=PT();oc.catch();var se=null,ht=null,_o=0,Qt=null,HT=0,us=1,EA=2|us,Ho=4|us,nc=8|HT,ic=class{constructor(e,r,{exports:A}){k(Number.isFinite(e[tc])&&e[tc]>0),this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Le.TYPE.RESPONSE),this.client=e,this.socket=r,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[tc],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[_T]}setTimeout(e,r){e!==this.timeoutValue||r&us^this.timeoutType&us?(this.timeout&&(ec.clearTimeout(this.timeout),this.timeout=null),e&&(r&us?this.timeout=ec.setFastTimeout(rQ,e,new WeakRef(this)):(this.timeout=setTimeout(rQ,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=r}resume(){this.socket.destroyed||!this.paused||(k(this.ptr!=null),k(se==null),this.llhttp.llhttp_resume(this.ptr),k(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||tQ),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){k(this.ptr!=null),k(se==null),k(!this.paused);let{socket:r,llhttp:A}=this;e.length>_o&&(Qt&&A.free(Qt),_o=Math.ceil(e.length/4096)*4096,Qt=A.malloc(_o)),new Uint8Array(A.memory.buffer,Qt,_o).set(e);try{let s;try{ht=e,se=this,s=A.llhttp_execute(this.ptr,Qt,e.length)}catch(n){throw n}finally{se=null,ht=null}let o=A.llhttp_get_error_pos(this.ptr)-Qt;if(s!==Le.ERROR.OK){let n=e.subarray(o);if(s===Le.ERROR.PAUSED_UPGRADE)this.onUpgrade(n);else if(s===Le.ERROR.PAUSED)this.paused=!0,r.unshift(n);else throw this.createError(s,n)}}catch(s){S.destroy(r,s)}}finish(){k(se===null),k(this.ptr!=null),k(!this.paused);let{llhttp:e}=this,r;try{se=this,r=e.llhttp_finish(this.ptr)}finally{se=null}return r===Le.ERROR.OK?null:r===Le.ERROR.PAUSED||r===Le.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,tQ)}createError(e,r){let{llhttp:A,contentLength:s,bytesRead:o}=this;if(s&&o!==parseInt(s,10))return new Kh;let n=A.llhttp_get_error_reason(this.ptr),i="";if(n){let a=new Uint8Array(A.memory.buffer,n).indexOf(0);i="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,n,a).toString()+")"}return new ST(i,Le.ERROR[e],r)}destroy(){k(this.ptr!=null),k(se==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&ec.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:r}=this;if(e.destroyed)return-1;if(r[ce]===0)return S.destroy(e,new lA("bad response",S.getSocketInfo(e))),-1;let A=r[et][r[Ve]];if(!A)return-1;A.onResponseStarted()}onHeaderField(e){let r=this.headers.length;(r&1)===0?this.headers.push(e):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]),this.trackHeader(e.length)}onHeaderValue(e){let r=this.headers.length;(r&1)===1?(this.headers.push(e),r+=1):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]);let A=this.headers[r-2];if(A.length===10){let s=S.bufferToLowerCasedHeaderName(A);s==="keep-alive"?this.keepAlive+=e.toString():s==="connection"&&(this.connection+=e.toString())}else A.length===14&&S.bufferToLowerCasedHeaderName(A)==="content-length"&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&S.destroy(this.socket,new kT)}onUpgrade(e){let{upgrade:r,client:A,socket:s,headers:o,statusCode:n}=this;k(r),k(A[mr]===s),k(!s.destroyed),k(!this.paused),k((o.length&1)===0);let i=A[et][A[Ve]];k(i),k(i.upgrade||i.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,s.unshift(e),s[j].destroy(),s[j]=null,s[Jo]=null,s[pe]=null,JT(s),A[mr]=null,A[aQ]=null,A[et][A[Ve]++]=null,A.emit("disconnect",A[nQ],[A],new uA("upgrade"));try{i.onUpgrade(n,o,s)}catch(a){S.destroy(s,a)}A[Ft]()}onHeadersComplete(e,r,A){let{client:s,socket:o,headers:n,statusText:i}=this;if(o.destroyed)return-1;if(s[ce]===0)return S.destroy(o,new lA("bad response",S.getSocketInfo(o))),-1;let a=s[et][s[Ve]];if(!a)return-1;if(k(!this.upgrade),k(this.statusCode<200),e===100)return S.destroy(o,new lA("bad response",S.getSocketInfo(o))),-1;if(r&&!a.upgrade)return S.destroy(o,new lA("bad upgrade",S.getSocketInfo(o))),-1;if(k(this.timeoutType===EA),this.statusCode=e,this.shouldKeepAlive=A||a.method==="HEAD"&&!o[be]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let g=a.bodyTimeout!=null?a.bodyTimeout:s[OT];this.setTimeout(g,Ho)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(a.method==="CONNECT")return k(s[ce]===1),this.upgrade=!0,2;if(r)return k(s[ce]===1),this.upgrade=!0,2;if(k((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&s[Po]){let g=this.keepAlive?S.parseKeepAliveTimeout(this.keepAlive):null;if(g!=null){let l=Math.min(g-s[vT],s[MT]);l<=0?o[be]=!0:s[Vo]=l}else s[Vo]=s[UT]}else o[be]=!0;let c=a.onHeaders(e,n,this.resume,i)===!1;return a.aborted?-1:a.method==="HEAD"||e<200?1:(o[Es]&&(o[Es]=!1,s[Ft]()),c?Le.ERROR.PAUSED:0)}onBody(e){let{client:r,socket:A,statusCode:s,maxResponseSize:o}=this;if(A.destroyed)return-1;let n=r[et][r[Ve]];if(k(n),k(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),k(s>=200),o>-1&&this.bytesRead+e.length>o)return S.destroy(A,new NT),-1;if(this.bytesRead+=e.length,n.onData(e)===!1)return Le.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:r,statusCode:A,upgrade:s,headers:o,contentLength:n,bytesRead:i,shouldKeepAlive:a}=this;if(r.destroyed&&(!A||a))return-1;if(s)return;k(A>=100),k((this.headers.length&1)===0);let c=e[et][e[Ve]];if(k(c),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,!(A<200)){if(c.method!=="HEAD"&&n&&i!==parseInt(n,10))return S.destroy(r,new Kh),-1;if(c.onComplete(o),e[et][e[Ve]++]=null,r[ac]=!0,r[Ht])return k(e[ce]===0),S.destroy(r,new uA("reset")),Le.ERROR.PAUSED;if(a){if(r[be]&&e[ce]===0)return S.destroy(r,new uA("reset")),Le.ERROR.PAUSED;e[Po]==null||e[Po]===1?setImmediate(()=>e[Ft]()):e[Ft]()}else return S.destroy(r,new uA("reset")),Le.ERROR.PAUSED}}};function rQ(t){let{socket:e,timeoutType:r,client:A,paused:s}=t.deref();r===EA?(!e[Ht]||e.writableNeedDrain||A[ce]>1)&&(k(!s,"cannot be paused while waiting for headers"),S.destroy(e,new bT)):r===Ho?s||S.destroy(e,new FT):r===nc&&(k(A[ce]===0&&A[Vo]),S.destroy(e,new uA("socket idle timeout")))}async function VT(t,e){t[mr]=e,Ac||(Ac=await oc,oc=null),e[ls]=!1,e[Ht]=!1,e[be]=!1,e[Es]=!1,e[wr]=0,e[pr]=null,e[ac]=!1,e[j]=new ic(t,e,Ac),Yo(e,"error",function(A){k(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let s=this[j];if(A.code==="ECONNRESET"&&s.statusCode&&!s.shouldKeepAlive){let o=s.finish();o&&(this[pe]=o,this[Jo][eQ](o));return}this[pe]=A,this[Jo][eQ](A)}),Yo(e,"readable",function(){let A=this[j];A&&A.readMore()}),Yo(e,"end",function(){let A=this[j];if(A.statusCode&&!A.shouldKeepAlive){let s=A.finish();s&&S.destroy(this,s);return}S.destroy(this,new lA("other side closed",S.getSocketInfo(this)))}),Yo(e,"close",function(){let A=this[Jo],s=this[j];cQ(this),s&&(!this[pe]&&s.statusCode&&!s.shouldKeepAlive&&(this[pe]=s.finish()||this[pe]),this[j].destroy(),this[j]=null);let o=this[pe]||new lA("closed",S.getSocketInfo(this));if(A[mr]=null,A[aQ]=null,A.destroyed){k(A[iQ]===0);let n=A[et].splice(A[Ve]);for(let i=0;i0&&o.code!=="UND_ERR_INFO"){let n=A[et][A[Ve]];A[et][A[Ve]++]=null,S.errorRequest(A,n,o)}A[LT]=A[Ve],k(A[ce]===0),A.emit("disconnect",A[nQ],[A],o),A[Ft]()});let r=!1;return e.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...A){return ZT(t,...A)},resume(){WT(t)},destroy(A,s){r?queueMicrotask(s):e.destroy(A).on("close",s)},get destroyed(){return e.destroyed},busy(A){return!!(e[Ht]||e[be]||e[Es]||e[wr]===1||A&&(t[ce]>0&&!A.idempotent||t[ce]>0&&(A.upgrade||A.method==="CONNECT")||t[ce]>0&&S.bodyLength(A.body)!==0&&(S.isStream(A.body)||S.isAsyncIterable(A.body)||S.isFormDataLike(A.body))))}}}function cQ(t){t[pr]&&(clearTimeout(t[pr]),t[pr]=null),t[wr]=0}function qT(t,e){e[wr]=1,e[pr]=setTimeout(()=>{e[pr]=null,e[wr]=2,t[mr]===e&&!e.destroyed&&t[Ft]()},0),e[pr].unref?.()}function WT(t){let e=t[mr];if(e&&!e.destroyed){if(t[Xh]===0?!e[ls]&&e.unref&&(e.unref(),e[ls]=!0):e[ls]&&e.ref&&(e.ref(),e[ls]=!1),t[ce]===0&&t[iQ]>0&&e[ac]){if(e[wr]===0)return qT(t,e),e[j].readMore(),e.destroyed,void 0;if(e[wr]===1)return e[j].readMore(),e.destroyed,void 0}if(t[ce]===0&&(e[j].readMore(),e.destroyed))return;if(t[Xh]===0)e[j].timeoutType!==nc&&e[j].setTimeout(t[Vo],nc);else if(t[ce]>0&&e[j].statusCode<200&&e[j].timeoutType!==EA){let r=t[et][t[Ve]],A=r.headersTimeout!=null?r.headersTimeout:t[xT];e[j].setTimeout(A,EA)}}}function zT(t){return t!=="GET"&&t!=="HEAD"&&t!=="OPTIONS"&&t!=="TRACE"&&t!=="CONNECT"}function ZT(t,e){let{method:r,path:A,host:s,upgrade:o,blocking:n,reset:i}=e,{body:a,headers:c,contentLength:g}=e,l=r==="PUT"||r==="POST"||r==="PATCH"||r==="QUERY"||r==="PROPFIND"||r==="PROPPATCH";if(S.isFormDataLike(a)){rc||(rc=gA().extractBody);let[I,Q]=rc(a);e.contentType==null&&c.push("content-type",Q),a=I.stream,g=I.length}else if(S.isBlobLike(a)&&e.contentType==null){let I=a.type;if(I){let Q=`${I}`;if(!S.isValidHeaderValue(Q))return S.errorRequest(t,e,new TT("invalid content-type header")),!1;c.push("content-type",Q)}}a&&typeof a.read=="function"&&a.read(0);let u=S.bodyLength(a);if(g=u??g,g===null&&(g=e.contentLength),g===0&&!l&&(g=null),zT(r)&&g>0&&e.contentLength!==null&&e.contentLength!==g){if(t[sc])return S.errorRequest(t,e,new fr),!1;process.emitWarning(new fr)}let E=t[mr];cQ(E);let h=I=>{e.aborted||e.completed||(S.errorRequest(t,e,I||new oQ),S.destroy(a),S.destroy(E,new uA("aborted")))};try{e.onConnect(h)}catch(I){S.errorRequest(t,e,I)}if(e.aborted)return!1;r==="HEAD"&&(E[be]=!0),(o||r==="CONNECT")&&(E[be]=!0),i!=null&&(E[be]=i),t[$h]&&E[YT]++>=t[$h]&&(E[be]=!0),n&&(E[Es]=!0);let d=`${r} ${A} HTTP/1.1\r +`;if(typeof s=="string"?d+=`host: ${s}\r +`:d+=t[GT],o?d+=`connection: upgrade\r upgrade: ${o}\r -`:t[Po]&&!E[be]?C+=`connection: keep-alive\r -`:C+=`connection: close\r -`,Array.isArray(c))for(let I=0;I{e.removeListener("error",E)}),!a){let h=new iQ;queueMicrotask(()=>E(h))}},E=function(h){if(!a){if(a=!0,b(s.destroyed||s[Ht]&&r[ce]<=1),s.off("drain",l).off("error",E),e.removeListener("data",g).removeListener("end",E).removeListener("close",u),!h)try{c.end()}catch(C){h=C}c.destroy(h),h&&(h.code!=="UND_ERR_INFO"||h.message!=="reset")?F.destroy(e,h):F.destroy(e)}};e.on("data",g).on("end",E).on("error",E).on("close",u),e.resume&&e.resume(),s.on("drain",l).on("error",E),e.errorEmitted??e.errored?setImmediate(()=>E(e.errored)):(e.endEmitted??e.readableEnded)&&setImmediate(()=>E(null)),(e.closeEmitted??e.closed)&&setImmediate(u)}function oQ(t,e,r,A,s,o,n,i){try{e?F.isBuffer(e)&&(b(o===e.byteLength,"buffer body must have content length"),s.cork(),s.write(`${n}content-length: ${o}\r +`:t[Po]&&!E[be]?d+=`connection: keep-alive\r +`:d+=`connection: close\r +`,Array.isArray(c))for(let I=0;I{e.removeListener("error",E)}),!a){let h=new oQ;queueMicrotask(()=>E(h))}},E=function(h){if(!a){if(a=!0,k(s.destroyed||s[Ht]&&r[ce]<=1),s.off("drain",l).off("error",E),e.removeListener("data",g).removeListener("end",E).removeListener("close",u),!h)try{c.end()}catch(d){h=d}c.destroy(h),h&&(h.code!=="UND_ERR_INFO"||h.message!=="reset")?S.destroy(e,h):S.destroy(e)}};e.on("data",g).on("end",E).on("error",E).on("close",u),e.resume&&e.resume(),s.on("drain",l).on("error",E),e.errorEmitted??e.errored?setImmediate(()=>E(e.errored)):(e.endEmitted??e.readableEnded)&&setImmediate(()=>E(null)),(e.closeEmitted??e.closed)&&setImmediate(u)}function AQ(t,e,r,A,s,o,n,i){try{e?S.isBuffer(e)&&(k(o===e.byteLength,"buffer body must have content length"),s.cork(),s.write(`${n}content-length: ${o}\r \r `,"latin1"),s.write(e),s.uncork(),A.onBodySent(e),!i&&A.reset!==!1&&(s[be]=!0)):o===0?s.write(`${n}content-length: 0\r \r -`,"latin1"):(b(o===null,"no body must not have content length"),s.write(`${n}\r -`,"latin1")),A.onRequestSent(),r[Ft]()}catch(a){t(a)}}async function Ab(t,e,r,A,s,o,n,i){b(o===e.size,"blob body must have content length");try{if(o!=null&&o!==e.size)throw new dr;let a=Buffer.from(await e.arrayBuffer());s.cork(),s.write(`${n}content-length: ${o}\r +`,"latin1"):(k(o===null,"no body must not have content length"),s.write(`${n}\r +`,"latin1")),A.onRequestSent(),r[Ft]()}catch(a){t(a)}}async function KT(t,e,r,A,s,o,n,i){k(o===e.size,"blob body must have content length");try{if(o!=null&&o!==e.size)throw new fr;let a=Buffer.from(await e.arrayBuffer());s.cork(),s.write(`${n}content-length: ${o}\r \r -`,"latin1"),s.write(a),s.uncork(),A.onBodySent(a),A.onRequestSent(),!i&&A.reset!==!1&&(s[be]=!0),r[Ft]()}catch(a){t(a)}}async function nQ(t,e,r,A,s,o,n,i){b(o!==0||r[ce]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let u=a;a=null,u()}}let g=()=>new Promise((u,E)=>{b(a===null),s[pe]?E(s[pe]):a=u});s.on("close",c).on("drain",c);let l=new qo({abort:t,socket:s,request:A,contentLength:o,client:r,expectsPayload:i,header:n});try{for await(let u of e){if(s[pe])throw s[pe];l.write(u)||await g()}l.end()}catch(u){l.destroy(u)}finally{s.off("close",c).off("drain",c)}}var qo=class{constructor({abort:e,socket:r,request:A,contentLength:s,client:o,expectsPayload:n,header:i}){this.socket=r,this.request=A,this.contentLength=s,this.client=o,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,r[Ht]=!0}write(e){let{socket:r,request:A,contentLength:s,client:o,bytesWritten:n,expectsPayload:i,header:a}=this;if(r[pe])throw r[pe];if(r.destroyed)return!1;let c=Buffer.byteLength(e);if(!c)return!0;if(s!==null&&n+c>s){if(o[oc])throw new dr;process.emitWarning(new dr)}r.cork(),n===0&&(!i&&A.reset!==!1&&(r[be]=!0),s===null?r.write(`${a}transfer-encoding: chunked\r +`,"latin1"),s.write(a),s.uncork(),A.onBodySent(a),A.onRequestSent(),!i&&A.reset!==!1&&(s[be]=!0),r[Ft]()}catch(a){t(a)}}async function sQ(t,e,r,A,s,o,n,i){k(o!==0||r[ce]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let u=a;a=null,u()}}let g=()=>new Promise((u,E)=>{k(a===null),s[pe]?E(s[pe]):a=u});s.on("close",c).on("drain",c);let l=new qo({abort:t,socket:s,request:A,contentLength:o,client:r,expectsPayload:i,header:n});try{for await(let u of e){if(s[pe])throw s[pe];l.write(u)||await g()}l.end()}catch(u){l.destroy(u)}finally{s.off("close",c).off("drain",c)}}var qo=class{constructor({abort:e,socket:r,request:A,contentLength:s,client:o,expectsPayload:n,header:i}){this.socket=r,this.request=A,this.contentLength=s,this.client=o,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,r[Ht]=!0}write(e){let{socket:r,request:A,contentLength:s,client:o,bytesWritten:n,expectsPayload:i,header:a}=this;if(r[pe])throw r[pe];if(r.destroyed)return!1;let c=Buffer.byteLength(e);if(!c)return!0;if(s!==null&&n+c>s){if(o[sc])throw new fr;process.emitWarning(new fr)}r.cork(),n===0&&(!i&&A.reset!==!1&&(r[be]=!0),s===null?r.write(`${a}transfer-encoding: chunked\r `,"latin1"):r.write(`${a}content-length: ${s}\r \r `,"latin1")),s===null&&r.write(`\r ${c.toString(16)}\r -`,"latin1"),this.bytesWritten+=c;let g=r.write(e);return r.uncork(),A.onBodySent(e),g||r[j].timeout&&r[j].timeoutType===uA&&r[j].timeout.refresh&&r[j].timeout.refresh(),g}end(){let{socket:e,contentLength:r,client:A,bytesWritten:s,expectsPayload:o,header:n,request:i}=this;if(i.onRequestSent(),e[Ht]=!1,e[pe])throw e[pe];if(!e.destroyed){if(s===0?o?e.write(`${n}content-length: 0\r +`,"latin1"),this.bytesWritten+=c;let g=r.write(e);return r.uncork(),A.onBodySent(e),g||r[j].timeout&&r[j].timeoutType===EA&&r[j].timeout.refresh&&r[j].timeout.refresh(),g}end(){let{socket:e,contentLength:r,client:A,bytesWritten:s,expectsPayload:o,header:n,request:i}=this;if(i.onRequestSent(),e[Ht]=!1,e[pe])throw e[pe];if(!e.destroyed){if(s===0?o?e.write(`${n}content-length: 0\r \r `,"latin1"):e.write(`${n}\r `,"latin1"):r===null&&e.write(`\r 0\r \r -`,"latin1"),r!==null&&s!==r){if(A[oc])throw new dr;process.emitWarning(new dr)}e[j].timeout&&e[j].timeoutType===uA&&e[j].timeout.refresh&&e[j].timeout.refresh(),A[Ft]()}}destroy(e){let{socket:r,client:A,abort:s}=this;r[Ht]=!1,e&&(b(A[ce]<=1,"pipeline should only contain this request"),s(e))}};uQ.exports=KT});var pQ=B((YJ,fQ)=>{"use strict";var qe=require("node:assert"),{pipeline:sb}=require("node:stream"),v=M(),{RequestContentLengthMismatchError:gc,RequestAbortedError:hQ,SocketError:Es,InformationalError:lc}=Y(),{kUrl:Wo,kReset:Zo,kClient:EA,kRunning:jo,kPending:ob,kQueue:Vt,kPendingIdx:uc,kRunningIdx:tt,kError:At,kSocket:he,kStrictContentLength:nb,kOnError:Ec,kMaxConcurrentStreams:dQ,kHTTP2Session:rt,kResume:qt,kSize:ib,kHTTPContext:ab}=$(),St=Symbol("open streams"),QQ,BQ=!1,zo;try{zo=require("node:http2")}catch{zo={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:cb,HTTP2_HEADER_METHOD:gb,HTTP2_HEADER_PATH:lb,HTTP2_HEADER_SCHEME:ub,HTTP2_HEADER_CONTENT_LENGTH:Eb,HTTP2_HEADER_EXPECT:hb,HTTP2_HEADER_STATUS:Qb}}=zo;function Bb(t){let e=[];for(let[r,A]of Object.entries(t))if(Array.isArray(A))for(let s of A)e.push(Buffer.from(r),Buffer.from(s));else e.push(Buffer.from(r),Buffer.from(A));return e}async function Ib(t,e){t[he]=e,BQ||(BQ=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=zo.connect(t[Wo],{createConnection:()=>e,peerMaxConcurrentStreams:t[dQ]});r[St]=0,r[EA]=t,r[he]=e,v.addListener(r,"error",db),v.addListener(r,"frameError",fb),v.addListener(r,"end",pb),v.addListener(r,"goaway",mb),v.addListener(r,"close",function(){let{[EA]:s}=this,{[he]:o}=s,n=this[he][At]||this[At]||new Es("closed",v.getSocketInfo(o));if(s[rt]=null,s.destroyed){qe(s[ob]===0);let i=s[Vt].splice(s[tt]);for(let a=0;a{A=!0}),{version:"h2",defaultPipelining:1/0,write(...s){return yb(t,...s)},resume(){Cb(t)},destroy(s,o){A?queueMicrotask(o):e.destroy(s).on("close",o)},get destroyed(){return e.destroyed},busy(){return!1}}}function Cb(t){let e=t[he];e?.destroyed===!1&&(t[ib]===0&&t[dQ]===0?(e.unref(),t[rt].unref()):(e.ref(),t[rt].ref()))}function db(t){qe(t.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[he][At]=t,this[EA][Ec](t)}function fb(t,e,r){if(r===0){let A=new lc(`HTTP/2: "frameError" received - type ${t}, code ${e}`);this[he][At]=A,this[EA][Ec](A)}}function pb(){let t=new Es("other side closed",v.getSocketInfo(this[he]));this.destroy(t),v.destroy(this[he],t)}function mb(t){let e=this[At]||new Es(`HTTP/2: "GOAWAY" frame received with code ${t}`,v.getSocketInfo(this)),r=this[EA];if(r[he]=null,r[ab]=null,this[rt]!=null&&(this[rt].destroy(e),this[rt]=null),v.destroy(this[he],e),r[tt]{e.aborted||e.completed||(y=y||new hQ,v.errorRequest(t,e,y),u!=null&&v.destroy(u,y),v.destroy(g,y),t[Vt][t[tt]++]=null,t[qt]())};try{e.onConnect(C)}catch(y){v.errorRequest(t,e,y)}if(e.aborted)return!1;if(A==="CONNECT")return r.ref(),u=r.request(l,{endStream:!1,signal:a}),u.id&&!u.pending?(e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null):u.once("ready",()=>{e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),!0;l[lb]=s,l[ub]="https";let I=A==="PUT"||A==="POST"||A==="PATCH";g&&typeof g.read=="function"&&g.read(0);let Q=v.bodyLength(g);if(v.isFormDataLike(g)){QQ??=cA().extractBody;let[y,P]=QQ(g);l["content-type"]=P,g=y.stream,Q=y.length}if(Q==null&&(Q=e.contentLength),(Q===0||!I)&&(Q=null),wb(A)&&Q>0&&e.contentLength!=null&&e.contentLength!==Q){if(t[nb])return v.errorRequest(t,e,new gc),!1;process.emitWarning(new gc)}Q!=null&&(qe(g,"no body must not have content length"),l[Eb]=`${Q}`),r.ref();let f=A==="GET"||A==="HEAD"||g===null;return i?(l[hb]="100-continue",u=r.request(l,{endStream:f,signal:a}),u.once("continue",R)):(u=r.request(l,{endStream:f,signal:a}),R()),++r[St],u.once("response",y=>{let{[Qb]:P,...Z}=y;if(e.onResponseStarted(),e.aborted){let Ae=new hQ;v.errorRequest(t,e,Ae),v.destroy(u,Ae);return}e.onHeaders(Number(P),Bb(Z),u.resume.bind(u),"")===!1&&u.pause(),u.on("data",Ae=>{e.onData(Ae)===!1&&u.pause()})}),u.once("end",()=>{(u.state?.state==null||u.state.state<6)&&e.onComplete([]),r[St]===0&&r.unref(),C(new lc("HTTP/2: stream half-closed (remote)")),t[Vt][t[tt]++]=null,t[uc]=t[tt],t[qt]()}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),u.once("error",function(y){C(y)}),u.once("frameError",(y,P)=>{C(new lc(`HTTP/2: "frameError" received - type ${y}, code ${P}`))}),!0;function R(){!g||Q===0?IQ(C,u,null,t,e,t[he],Q,I):v.isBuffer(g)?IQ(C,u,g,t,e,t[he],Q,I):v.isBlobLike(g)?typeof g.stream=="function"?CQ(C,u,g.stream(),t,e,t[he],Q,I):Db(C,u,g,t,e,t[he],Q,I):v.isStream(g)?Rb(C,t[he],I,u,g,t,e,Q):v.isIterable(g)?CQ(C,u,g,t,e,t[he],Q,I):qe(!1)}}function IQ(t,e,r,A,s,o,n,i){try{r!=null&&v.isBuffer(r)&&(qe(n===r.byteLength,"buffer body must have content length"),e.cork(),e.write(r),e.uncork(),e.end(),s.onBodySent(r)),i||(o[Zo]=!0),s.onRequestSent(),A[qt]()}catch(a){t(a)}}function Rb(t,e,r,A,s,o,n,i){qe(i!==0||o[jo]===0,"stream body cannot be pipelined");let a=sb(s,A,g=>{g?(v.destroy(a,g),t(g)):(v.removeAllListeners(a),n.onRequestSent(),r||(e[Zo]=!0),o[qt]())});v.addListener(a,"data",c);function c(g){n.onBodySent(g)}}async function Db(t,e,r,A,s,o,n,i){qe(n===r.size,"blob body must have content length");try{if(n!=null&&n!==r.size)throw new gc;let a=Buffer.from(await r.arrayBuffer());e.cork(),e.write(a),e.uncork(),e.end(),s.onBodySent(a),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(a){t(a)}}async function CQ(t,e,r,A,s,o,n,i){qe(n!==0||A[jo]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let l=a;a=null,l()}}let g=()=>new Promise((l,u)=>{qe(a===null),o[At]?u(o[At]):a=l});e.on("close",c).on("drain",c);try{for await(let l of r){if(o[At])throw o[At];let u=e.write(l);s.onBodySent(l),u||await g()}e.end(),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(l){t(l)}finally{e.off("close",c).off("drain",c)}}fQ.exports=Ib});var Xo=B((_J,yQ)=>{"use strict";var Bt=M(),{kBodyUsed:hs}=$(),Qc=require("node:assert"),{InvalidArgumentError:Tb}=Y(),bb=require("node:events"),kb=[300,301,302,303,307,308],mQ=Symbol("body"),Ko=class{constructor(e){this[mQ]=e,this[hs]=!1}async*[Symbol.asyncIterator](){Qc(!this[hs],"disturbed"),this[hs]=!0,yield*this[mQ]}},hc=class{constructor(e,r,A,s){if(r!=null&&(!Number.isInteger(r)||r<0))throw new Tb("maxRedirections must be a positive number");Bt.validateHandler(s,A.method,A.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...A,maxRedirections:0},this.maxRedirections=r,this.handler=s,this.history=[],this.redirectionLimitReached=!1,Bt.isStream(this.opts.body)?(Bt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){Qc(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[hs]=!1,bb.prototype.on.call(this.opts.body,"data",function(){this[hs]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Ko(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Bt.isIterable(this.opts.body)&&(this.opts.body=new Ko(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,r,A){this.handler.onUpgrade(e,r,A)}onError(e){this.handler.onError(e)}onHeaders(e,r,A,s){if(this.location=this.history.length>=this.maxRedirections||Bt.isDisturbed(this.opts.body)?null:Fb(e,r),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(new Error("max redirects")),this.redirectionLimitReached=!0,this.abort(new Error("max redirects"));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,r,A,s);let{origin:o,pathname:n,search:i}=Bt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),a=i?`${n}${i}`:n;this.opts.headers=Sb(this.opts.headers,e===303,this.opts.origin!==o),this.opts.path=a,this.opts.origin=o,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!=="HEAD"&&(this.opts.method="GET",this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function Fb(t,e){if(kb.indexOf(t)===-1)return null;for(let r=0;r{"use strict";var Nb=Xo();function Ub({maxRedirections:t}){return e=>function(A,s){let{maxRedirections:o=t}=A;if(!o)return e(A,s);let n=new Nb(e,o,A,s);return A={...A,maxRedirections:0},e(A,n)}}RQ.exports=Ub});var BA=B((PJ,LQ)=>{"use strict";var Nt=require("node:assert"),SQ=require("node:net"),Gb=require("node:http"),wr=M(),{channels:hA}=jr(),Lb=LE(),Mb=eA(),{InvalidArgumentError:oe,InformationalError:vb,ClientDestroyedError:xb}=Y(),Ob=ts(),{kUrl:It,kServerName:Wt,kClient:Yb,kBusy:Bc,kConnect:_b,kResuming:yr,kRunning:ds,kPending:fs,kSize:Cs,kQueue:st,kConnected:Jb,kConnecting:QA,kNeedDrain:Zt,kKeepAliveDefaultTimeout:DQ,kHostHeader:Pb,kPendingIdx:ot,kRunningIdx:Ut,kError:Hb,kPipelining:en,kKeepAliveTimeoutValue:Vb,kMaxHeadersSize:qb,kKeepAliveMaxTimeout:Wb,kKeepAliveTimeoutThreshold:zb,kHeadersTimeout:Zb,kBodyTimeout:jb,kStrictContentLength:Kb,kConnector:Qs,kMaxRedirections:Xb,kMaxRequests:Ic,kCounter:$b,kClose:ek,kDestroy:tk,kDispatch:rk,kInterceptors:TQ,kLocalAddress:Bs,kMaxResponseSize:Ak,kOnError:sk,kHTTPContext:ne,kMaxConcurrentStreams:ok,kResume:Is}=$(),nk=EQ(),ik=pQ(),bQ=!1,zt=Symbol("kClosedResolve"),kQ=()=>{};function NQ(t){return t[en]??t[ne]?.defaultPipelining??1}var Cc=class extends Mb{constructor(e,{interceptors:r,maxHeaderSize:A,headersTimeout:s,socketTimeout:o,requestTimeout:n,connectTimeout:i,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:l,maxKeepAliveTimeout:u,keepAliveMaxTimeout:E,keepAliveTimeoutThreshold:h,socketPath:C,pipelining:I,tls:Q,strictContentLength:f,maxCachedSessions:R,maxRedirections:y,connect:P,maxRequestsPerClient:Z,localAddress:Ae,maxResponseSize:gt,autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr,maxConcurrentStreams:_t,allowH2:De,webSocket:qr}={}){if(super({webSocket:qr}),g!==void 0)throw new oe("unsupported keepAlive, use pipelining=0 instead");if(o!==void 0)throw new oe("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(n!==void 0)throw new oe("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new oe("unsupported idleTimeout, use keepAliveTimeout instead");if(u!==void 0)throw new oe("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(A!=null&&!Number.isFinite(A))throw new oe("invalid maxHeaderSize");if(C!=null&&typeof C!="string")throw new oe("invalid socketPath");if(i!=null&&(!Number.isFinite(i)||i<0))throw new oe("invalid connectTimeout");if(l!=null&&(!Number.isFinite(l)||l<=0))throw new oe("invalid keepAliveTimeout");if(E!=null&&(!Number.isFinite(E)||E<=0))throw new oe("invalid keepAliveMaxTimeout");if(h!=null&&!Number.isFinite(h))throw new oe("invalid keepAliveTimeoutThreshold");if(s!=null&&(!Number.isInteger(s)||s<0))throw new oe("headersTimeout must be a positive integer or zero");if(a!=null&&(!Number.isInteger(a)||a<0))throw new oe("bodyTimeout must be a positive integer or zero");if(P!=null&&typeof P!="function"&&typeof P!="object")throw new oe("connect must be a function or an object");if(y!=null&&(!Number.isInteger(y)||y<0))throw new oe("maxRedirections must be a positive number");if(Z!=null&&(!Number.isInteger(Z)||Z<0))throw new oe("maxRequestsPerClient must be a positive number");if(Ae!=null&&(typeof Ae!="string"||SQ.isIP(Ae)===0))throw new oe("localAddress must be valid string IP address");if(gt!=null&&(!Number.isInteger(gt)||gt<-1))throw new oe("maxResponseSize must be a positive number");if(Vr!=null&&(!Number.isInteger(Vr)||Vr<-1))throw new oe("autoSelectFamilyAttemptTimeout must be a positive number");if(De!=null&&typeof De!="boolean")throw new oe("allowH2 must be a valid boolean value");if(_t!=null&&(typeof _t!="number"||_t<1))throw new oe("maxConcurrentStreams must be a positive integer, greater than 0");typeof P!="function"&&(P=Ob({...Q,maxCachedSessions:R,allowH2:De,socketPath:C,timeout:i,...wt?{autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr}:void 0,...P})),r?.Client&&Array.isArray(r.Client)?(this[TQ]=r.Client,bQ||(bQ=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[TQ]=[ak({maxRedirections:y})],this[It]=wr.parseOrigin(e),this[Qs]=P,this[en]=I??1,this[qb]=A||Gb.maxHeaderSize,this[DQ]=l??4e3,this[Wb]=E??6e5,this[zb]=h??2e3,this[Vb]=this[DQ],this[Wt]=null,this[Bs]=Ae??null,this[yr]=0,this[Zt]=0,this[Pb]=`host: ${this[It].hostname}${this[It].port?`:${this[It].port}`:""}\r -`,this[jb]=a??3e5,this[Zb]=s??3e5,this[Kb]=f??!0,this[Xb]=y,this[Ic]=Z,this[zt]=null,this[Ak]=gt>-1?gt:-1,this[ok]=_t??100,this[ne]=null,this[st]=[],this[Ut]=0,this[ot]=0,this[Is]=Wr=>dc(this,Wr),this[sk]=Wr=>UQ(this,Wr)}get pipelining(){return this[en]}set pipelining(e){this[en]=e,this[Is](!0)}get[fs](){return this[st].length-this[ot]}get[ds](){return this[ot]-this[Ut]}get[Cs](){return this[st].length-this[Ut]}get[Jb](){return!!this[ne]&&!this[QA]&&!this[ne].destroyed}get[Bc](){return!!(this[ne]?.busy(null)||this[Cs]>=(NQ(this)||1)||this[fs]>0)}[_b](e){GQ(this),this.once("connect",e)}[rk](e,r){let A=e.origin||this[It].origin,s=new Lb(A,e,r);return this[st].push(s),this[yr]||(wr.bodyLength(s.body)==null&&wr.isIterable(s.body)?(this[yr]=1,queueMicrotask(()=>dc(this))):this[Is](!0)),this[yr]&&this[Zt]!==2&&this[Bc]&&(this[Zt]=2),this[Zt]<2}async[ek](){return new Promise(e=>{this[Cs]?this[zt]=e:e(null)})}async[tk](e){return new Promise(r=>{let A=this[st].splice(this[ot]);for(let o=0;o{this[zt]&&(this[zt](),this[zt]=null),r(null)};this[ne]?(this[ne].destroy(e,s),this[ne]=null):queueMicrotask(s),this[Is]()})}},ak=$o();function UQ(t,e){if(t[ds]===0&&e.code!=="UND_ERR_INFO"&&e.code!=="UND_ERR_SOCKET"){Nt(t[ot]===t[Ut]);let r=t[st].splice(t[Ut]);for(let A=0;A{t[Qs]({host:e,hostname:r,protocol:A,port:s,servername:t[Wt],localAddress:t[Bs]},(a,c)=>{a?i(a):n(c)})});if(t.destroyed){wr.destroy(o.on("error",kQ),new xb);return}Nt(o);try{t[ne]=o.alpnProtocol==="h2"?await ik(t,o):await nk(t,o)}catch(n){throw o.destroy().on("error",kQ),n}t[QA]=!1,o[$b]=0,o[Ic]=t[Ic],o[Yb]=t,o[Hb]=null,hA.connected.hasSubscribers&&hA.connected.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],socket:o}),t.emit("connect",t[It],[t])}catch(o){if(t.destroyed)return;if(t[QA]=!1,hA.connectError.hasSubscribers&&hA.connectError.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],error:o}),o.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(Nt(t[ds]===0);t[fs]>0&&t[st][t[ot]].servername===t[Wt];){let n=t[st][t[ot]++];wr.errorRequest(t,n,o)}else UQ(t,o);t.emit("connectionError",t[It],[t],o)}t[Is]()}function FQ(t){t[Zt]=0,t.emit("drain",t[It],[t])}function dc(t,e){t[yr]!==2&&(t[yr]=2,ck(t,e),t[yr]=0,t[Ut]>256&&(t[st].splice(0,t[Ut]),t[ot]-=t[Ut],t[Ut]=0))}function ck(t,e){for(;;){if(t.destroyed){Nt(t[fs]===0);return}if(t[zt]&&!t[Cs]){t[zt](),t[zt]=null;return}if(t[ne]&&t[ne].resume(),t[Bc])t[Zt]=2;else if(t[Zt]===2){e?(t[Zt]=1,queueMicrotask(()=>FQ(t))):FQ(t);continue}if(t[fs]===0||t[ds]>=(NQ(t)||1))return;let r=t[st][t[ot]];if(t[It].protocol==="https:"&&t[Wt]!==r.servername){if(t[ds]>0)return;t[Wt]=r.servername,t[ne]?.destroy(new vb("servername changed"),()=>{t[ne]=null,dc(t)})}if(t[QA])return;if(!t[ne]){GQ(t);return}if(t[ne].destroyed||t[ne].busy(r))return;!r.aborted&&t[ne].write(r)?t[ot]++:t[st].splice(t[ot],1)}}LQ.exports=Cc});var fc=B((VJ,MQ)=>{"use strict";var tn=class{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&2047}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,e)}};MQ.exports=class{constructor(){this.head=this.tail=new tn}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new tn),this.head.push(e)}shift(){let e=this.tail,r=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),r}}});var xQ=B((qJ,vQ)=>{var{kFree:gk,kConnected:lk,kPending:uk,kQueued:Ek,kRunning:hk,kSize:Qk}=$(),Rr=Symbol("pool"),pc=class{constructor(e){this[Rr]=e}get connected(){return this[Rr][lk]}get free(){return this[Rr][gk]}get pending(){return this[Rr][uk]}get queued(){return this[Rr][Ek]}get running(){return this[Rr][hk]}get size(){return this[Rr][Qk]}};vQ.exports=pc});var Tc=B((WJ,zQ)=>{"use strict";var Bk=eA(),Ik=fc(),{kConnected:mc,kSize:OQ,kRunning:YQ,kPending:_Q,kQueued:ps,kBusy:Ck,kFree:dk,kUrl:fk,kClose:pk,kDestroy:mk,kDispatch:wk}=$(),yk=xQ(),ke=Symbol("clients"),me=Symbol("needDrain"),ms=Symbol("queue"),wc=Symbol("closed resolve"),yc=Symbol("onDrain"),JQ=Symbol("onConnect"),PQ=Symbol("onDisconnect"),HQ=Symbol("onConnectionError"),Rc=Symbol("get dispatcher"),qQ=Symbol("add client"),WQ=Symbol("remove client"),VQ=Symbol("stats"),Dc=class extends Bk{constructor(e){super(e),this[ms]=new Ik,this[ke]=[],this[ps]=0;let r=this;this[yc]=function(s,o){let n=r[ms],i=!1;for(;!i;){let a=n.shift();if(!a)break;r[ps]--,i=!this.dispatch(a.opts,a.handler)}this[me]=i,!this[me]&&r[me]&&(r[me]=!1,r.emit("drain",s,[r,...o])),r[wc]&&n.isEmpty()&&Promise.all(r[ke].map(a=>a.close())).then(r[wc])},this[JQ]=(A,s)=>{r.emit("connect",A,[r,...s])},this[PQ]=(A,s,o)=>{r.emit("disconnect",A,[r,...s],o)},this[HQ]=(A,s,o)=>{r.emit("connectionError",A,[r,...s],o)},this[VQ]=new yk(this)}get[Ck](){return this[me]}get[mc](){return this[ke].filter(e=>e[mc]).length}get[dk](){return this[ke].filter(e=>e[mc]&&!e[me]).length}get[_Q](){let e=this[ps];for(let{[_Q]:r}of this[ke])e+=r;return e}get[YQ](){let e=0;for(let{[YQ]:r}of this[ke])e+=r;return e}get[OQ](){let e=this[ps];for(let{[OQ]:r}of this[ke])e+=r;return e}get stats(){return this[VQ]}async[pk](){this[ms].isEmpty()?await Promise.all(this[ke].map(e=>e.close())):await new Promise(e=>{this[wc]=e})}async[mk](e){for(;;){let r=this[ms].shift();if(!r)break;r.handler.onError(e)}await Promise.all(this[ke].map(r=>r.destroy(e)))}[wk](e,r){let A=this[Rc]();return A?A.dispatch(e,r)||(A[me]=!0,this[me]=!this[Rc]()):(this[me]=!0,this[ms].push({opts:e,handler:r}),this[ps]++),!this[me]}[qQ](e){return e.on("drain",this[yc]).on("connect",this[JQ]).on("disconnect",this[PQ]).on("connectionError",this[HQ]),this[ke].push(e),this[me]&&queueMicrotask(()=>{this[me]&&this[yc](e[fk],[this,e])}),this}[WQ](e){e.close(()=>{let r=this[ke].indexOf(e);r!==-1&&this[ke].splice(r,1)}),this[me]=this[ke].some(r=>!r[me]&&r.closed!==!0&&r.destroyed!==!0)}};zQ.exports={PoolBase:Dc,kClients:ke,kNeedDrain:me,kAddClient:qQ,kRemoveClient:WQ,kGetDispatcher:Rc}});var IA=B((zJ,XQ)=>{"use strict";var{PoolBase:Rk,kClients:rn,kNeedDrain:Dk,kAddClient:Tk,kGetDispatcher:bk}=Tc(),kk=BA(),{InvalidArgumentError:bc}=Y(),ZQ=M(),{kUrl:jQ,kInterceptors:Fk}=$(),Sk=ts(),kc=Symbol("options"),Fc=Symbol("connections"),KQ=Symbol("factory");function Nk(t,e){return new kk(t,e)}var Sc=class extends Rk{constructor(e,{connections:r,factory:A=Nk,connect:s,connectTimeout:o,tls:n,maxCachedSessions:i,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g,allowH2:l,...u}={}){if(r!=null&&(!Number.isFinite(r)||r<0))throw new bc("invalid connections");if(typeof A!="function")throw new bc("factory must be a function.");if(s!=null&&typeof s!="function"&&typeof s!="object")throw new bc("connect must be a function or an object");typeof s!="function"&&(s=Sk({...n,maxCachedSessions:i,allowH2:l,socketPath:a,timeout:o,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g}:void 0,...s})),super(u),this[Fk]=u.interceptors?.Pool&&Array.isArray(u.interceptors.Pool)?u.interceptors.Pool:[],this[Fc]=r||null,this[jQ]=ZQ.parseOrigin(e),this[kc]={...ZQ.deepClone(u),connect:s,allowH2:l},this[kc].interceptors=u.interceptors?{...u.interceptors}:void 0,this[KQ]=A,this.on("connectionError",(E,h,C)=>{for(let I of h){let Q=this[rn].indexOf(I);Q!==-1&&this[rn].splice(Q,1)}})}[bk](){for(let e of this[rn])if(!e[Dk])return e;if(!this[Fc]||this[rn].length{"use strict";var{BalancedPoolMissingUpstreamError:Uk,InvalidArgumentError:Gk}=Y(),{PoolBase:Lk,kClients:Ce,kNeedDrain:ws,kAddClient:Mk,kRemoveClient:vk,kGetDispatcher:xk}=Tc(),Ok=IA(),{kUrl:Nc,kInterceptors:Yk}=$(),{parseOrigin:$Q}=M(),eB=Symbol("factory"),An=Symbol("options"),tB=Symbol("kGreatestCommonDivisor"),Dr=Symbol("kCurrentWeight"),Tr=Symbol("kIndex"),We=Symbol("kWeight"),sn=Symbol("kMaxWeightPerServer"),on=Symbol("kErrorPenalty");function _k(t,e){if(t===0)return e;for(;e!==0;){let r=e;e=t%e,t=r}return t}function Jk(t,e){return new Ok(t,e)}var Uc=class extends Lk{constructor(e=[],{factory:r=Jk,...A}={}){if(super(),this[An]=A,this[Tr]=-1,this[Dr]=0,this[sn]=this[An].maxWeightPerServer||100,this[on]=this[An].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof r!="function")throw new Gk("factory must be a function.");this[Yk]=A.interceptors?.BalancedPool&&Array.isArray(A.interceptors.BalancedPool)?A.interceptors.BalancedPool:[],this[eB]=r;for(let s of e)this.addUpstream(s);this._updateBalancedPoolStats()}addUpstream(e){let r=$Q(e).origin;if(this[Ce].find(s=>s[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0))return this;let A=this[eB](r,Object.assign({},this[An]));this[Mk](A),A.on("connect",()=>{A[We]=Math.min(this[sn],A[We]+this[on])}),A.on("connectionError",()=>{A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats()}),A.on("disconnect",(...s)=>{let o=s[2];o&&o.code==="UND_ERR_SOCKET"&&(A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats())});for(let s of this[Ce])s[We]=this[sn];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let r=0;rs[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0);return A&&this[vk](A),this}get upstreams(){return this[Ce].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[Nc].origin)}[xk](){if(this[Ce].length===0)throw new Uk;if(!this[Ce].find(o=>!o[ws]&&o.closed!==!0&&o.destroyed!==!0)||this[Ce].map(o=>o[ws]).reduce((o,n)=>o&&n,!0))return;let A=0,s=this[Ce].findIndex(o=>!o[ws]);for(;A++this[Ce][s][We]&&!o[ws]&&(s=this[Tr]),this[Tr]===0&&(this[Dr]=this[Dr]-this[tB],this[Dr]<=0&&(this[Dr]=this[sn])),o[We]>=this[Dr]&&!o[ws])return o}return this[Dr]=this[Ce][s][We],this[Tr]=s,this[Ce][s]}};rB.exports=Uc});var CA=B((jJ,gB)=>{"use strict";var{InvalidArgumentError:nn}=Y(),{kClients:jt,kRunning:sB,kClose:Pk,kDestroy:Hk,kDispatch:Vk,kInterceptors:qk}=$(),Wk=eA(),zk=IA(),Zk=BA(),jk=M(),Kk=$o(),oB=Symbol("onConnect"),nB=Symbol("onDisconnect"),iB=Symbol("onConnectionError"),Xk=Symbol("maxRedirections"),aB=Symbol("onDrain"),cB=Symbol("factory"),Gc=Symbol("options");function $k(t,e){return e&&e.connections===1?new Zk(t,e):new zk(t,e)}var Lc=class extends Wk{constructor({factory:e=$k,maxRedirections:r=0,connect:A,...s}={}){if(typeof e!="function")throw new nn("factory must be a function.");if(A!=null&&typeof A!="function"&&typeof A!="object")throw new nn("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new nn("maxRedirections must be a positive number");super(s),A&&typeof A!="function"&&(A={...A}),this[qk]=s.interceptors?.Agent&&Array.isArray(s.interceptors.Agent)?s.interceptors.Agent:[Kk({maxRedirections:r})],this[Gc]={...jk.deepClone(s),connect:A},this[Gc].interceptors=s.interceptors?{...s.interceptors}:void 0,this[Xk]=r,this[cB]=e,this[jt]=new Map,this[aB]=(o,n)=>{this.emit("drain",o,[this,...n])},this[oB]=(o,n)=>{this.emit("connect",o,[this,...n])},this[nB]=(o,n,i)=>{this.emit("disconnect",o,[this,...n],i)},this[iB]=(o,n,i)=>{this.emit("connectionError",o,[this,...n],i)}}get[sB](){let e=0;for(let r of this[jt].values())e+=r[sB];return e}[Vk](e,r){let A;if(e.origin&&(typeof e.origin=="string"||e.origin instanceof URL))A=String(e.origin);else throw new nn("opts.origin must be a non-empty string or URL.");let s=this[jt].get(A);return s||(s=this[cB](e.origin,this[Gc]).on("drain",this[aB]).on("connect",this[oB]).on("disconnect",this[nB]).on("connectionError",this[iB]),this[jt].set(A,s)),s.dispatch(e,r)}async[Pk](){let e=[];for(let r of this[jt].values())e.push(r.close());this[jt].clear(),await Promise.all(e)}async[Hk](e){let r=[];for(let A of this[jt].values())r.push(A.destroy(e));this[jt].clear(),await Promise.all(r)}};gB.exports=Lc});var Yc=B((KJ,pB)=>{"use strict";var{kProxy:Mc,kClose:BB,kDestroy:IB,kDispatch:lB,kInterceptors:eF}=$(),{URL:br}=require("node:url"),tF=CA(),CB=IA(),dB=eA(),{InvalidArgumentError:dA,RequestAbortedError:rF,SecureProxyConnectionError:AF}=Y(),uB=ts(),fB=BA(),an=Symbol("proxy agent"),cn=Symbol("proxy client"),Kt=Symbol("proxy headers"),vc=Symbol("request tls settings"),EB=Symbol("proxy tls settings"),hB=Symbol("connect endpoint function"),QB=Symbol("tunnel proxy");function sF(t){return t==="https:"?443:80}function oF(t,e){return new CB(t,e)}var nF=()=>{};function iF(t,e){return e.connections===1?new fB(t,e):new CB(t,e)}var xc=class extends dB{#e;constructor(e,{headers:r={},connect:A,factory:s}){if(super(),!e)throw new dA("Proxy URL is mandatory");this[Kt]=r,s?this.#e=s(e,{connect:A}):this.#e=new fB(e,{connect:A})}[lB](e,r){let A=r.onHeaders;r.onHeaders=function(i,a,c){if(i===407){typeof r.onError=="function"&&r.onError(new dA("Proxy Authentication Required (407)"));return}A&&A.call(this,i,a,c)};let{origin:s,path:o="/",headers:n={}}=e;if(e.path=s+o,!("host"in n)&&!("Host"in n)){let{host:i}=new br(s);n.host=i}return e.headers={...this[Kt],...n},this.#e[lB](e,r)}async[BB](){return this.#e.close()}async[IB](e){return this.#e.destroy(e)}},Oc=class extends dB{constructor(e){if(super(),!e||typeof e=="object"&&!(e instanceof br)&&!e.uri)throw new dA("Proxy uri is mandatory");let{clientFactory:r=oF}=e;if(typeof r!="function")throw new dA("Proxy opts.clientFactory must be a function.");let{proxyTunnel:A=!0}=e,s=this.#e(e),{href:o,origin:n,port:i,protocol:a,username:c,password:g,hostname:l}=s;if(this[Mc]={uri:o,protocol:a},this[eF]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[vc]=e.requestTls,this[EB]=e.proxyTls,this[Kt]=e.headers||{},this[QB]=A,e.auth&&e.token)throw new dA("opts.auth cannot be used in combination with opts.token");e.auth?this[Kt]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Kt]["proxy-authorization"]=e.token:c&&g&&(this[Kt]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(g)}`).toString("base64")}`);let u=uB({...e.proxyTls});this[hB]=uB({...e.requestTls});let E=e.factory||iF,h=(C,I)=>{let{protocol:Q}=new br(C);return!this[QB]&&Q==="http:"&&this[Mc].protocol==="http:"?new xc(this[Mc].uri,{headers:this[Kt],connect:u,factory:E}):E(C,I)};this[cn]=r(s,{connect:u}),this[an]=new tF({...e,factory:h,connect:async(C,I)=>{let Q=C.host;C.port||(Q+=`:${sF(C.protocol)}`);try{let{socket:f,statusCode:R}=await this[cn].connect({origin:n,port:i,path:Q,signal:C.signal,headers:{...this[Kt],host:C.host},servername:this[EB]?.servername||l});if(R!==200&&(f.on("error",nF).destroy(),I(new rF(`Proxy response (${R}) !== 200 when HTTP Tunneling`))),C.protocol!=="https:"){I(null,f);return}let y;this[vc]?y=this[vc].servername:y=C.servername,this[hB]({...C,servername:y,httpSocket:f},I)}catch(f){f.code==="ERR_TLS_CERT_ALTNAME_INVALID"?I(new AF(f)):I(f)}}})}dispatch(e,r){let A=aF(e.headers);if(cF(A),A&&!("host"in A)&&!("Host"in A)){let{host:s}=new br(e.origin);A.host=s}return this[an].dispatch({...e,headers:A},r)}#e(e){return typeof e=="string"?new br(e):e instanceof br?e:new br(e.uri)}async[BB](){await this[an].close(),await this[cn].close()}async[IB](){await this[an].destroy(),await this[cn].destroy()}};function aF(t){if(Array.isArray(t)){let e={};for(let r=0;rr.toLowerCase()==="proxy-authorization"))throw new dA("Proxy-Authorization should be sent in ProxyAgent constructor")}pB.exports=Oc});var TB=B((XJ,DB)=>{"use strict";var gF=eA(),{kClose:lF,kDestroy:uF,kClosed:mB,kDestroyed:wB,kDispatch:EF,kNoProxyAgent:ys,kHttpProxyAgent:Xt,kHttpsProxyAgent:kr}=$(),yB=Yc(),hF=CA(),QF={"http:":80,"https:":443},RB=!1,_c=class extends gF{#e=null;#t=null;#r=null;constructor(e={}){super(),this.#r=e,RB||(RB=!0,process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"}));let{httpProxy:r,httpsProxy:A,noProxy:s,...o}=e;this[ys]=new hF(o);let n=r??process.env.http_proxy??process.env.HTTP_PROXY;n?this[Xt]=new yB({...o,uri:n}):this[Xt]=this[ys];let i=A??process.env.https_proxy??process.env.HTTPS_PROXY;i?this[kr]=new yB({...o,uri:i}):this[kr]=this[Xt],this.#A()}[EF](e,r){let A=new URL(e.origin);return this.#o(A).dispatch(e,r)}async[lF](){await this[ys].close(),this[Xt][mB]||await this[Xt].close(),this[kr][mB]||await this[kr].close()}async[uF](e){await this[ys].destroy(e),this[Xt][wB]||await this[Xt].destroy(e),this[kr][wB]||await this[kr].destroy(e)}#o(e){let{protocol:r,host:A,port:s}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),s=Number.parseInt(s,10)||QF[r]||0,this.#s(A,s)?r==="https:"?this[kr]:this[Xt]:this[ys]}#s(e,r){if(this.#n&&this.#A(),this.#t.length===0)return!0;if(this.#e==="*")return!1;for(let A=0;A{"use strict";var fA=require("node:assert"),{kRetryHandlerDefaultRetry:bB}=$(),{RequestRetryError:pA}=Y(),{isDisturbed:kB,parseHeaders:BF,parseRangeHeader:FB,wrapRequestBody:IF}=M();function CF(t){let e=Date.now();return new Date(t).getTime()-e}function SB(t,e,r,A){let s=t["content-length"];if(s==null||!Number.isFinite(e.start)||!Number.isFinite(e.end))return null;let o=Number(s),n=e.end-e.start+1;return!Number.isFinite(o)||o!==n?new pA("Content-Length mismatch",r,{headers:t,data:{count:A}}):null}var Jc=class t{constructor(e,r){let{retryOptions:A,...s}=e,{retry:o,maxRetries:n,maxTimeout:i,minTimeout:a,timeoutFactor:c,methods:g,errorCodes:l,retryAfter:u,statusCodes:E}=A??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...s,body:IF(e.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??t[bB],retryAfter:u??!0,maxTimeout:i??30*1e3,minTimeout:a??500,timeoutFactor:c??2,maxRetries:n??5,methods:g??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:E??[500,502,503,504,429],errorCodes:l??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect(h=>{this.aborted=!0,this.abort?this.abort(h):this.reason=h})}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,r,A){this.handler.onUpgrade&&this.handler.onUpgrade(e,r,A)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[bB](e,{state:r,opts:A},s){let{statusCode:o,code:n,headers:i}=e,{method:a,retryOptions:c}=A,{maxRetries:g,minTimeout:l,maxTimeout:u,timeoutFactor:E,statusCodes:h,errorCodes:C,methods:I}=c,{counter:Q}=r;if(n&&n!=="UND_ERR_REQ_RETRY"&&!C.includes(n)){s(e);return}if(Array.isArray(I)&&!I.includes(a)){s(e);return}if(o!=null&&Array.isArray(h)&&!h.includes(o)){s(e);return}if(Q>g){s(e);return}let f=i?.["retry-after"];f&&(f=Number(f),f=Number.isNaN(f)?CF(f):f*1e3);let R=f>0?Math.min(f,u):Math.min(l*E**(Q-1),u);setTimeout(()=>s(null),R)}onHeaders(e,r,A,s){let o=BF(r);if(this.retryCount+=1,e>=300)return this.retryOpts.statusCodes.includes(e)===!1?this.handler.onHeaders(e,r,A,s):(this.abort(new pA("Request failed",e,{headers:o,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new pA("server does not support the range header and the payload was partially consumed",e,{headers:o,data:{count:this.retryCount}})),!1;let i=FB(o["content-range"]);if(!i)return this.abort(new pA("Content-Range mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==o.etag)return this.abort(new pA("ETag mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;return fA(this.start===c,"content-range mismatch"),fA(this.end==null||this.end===l,"content-range mismatch"),this.resume=A,!0}if(this.end==null){if(e===206){let i=FB(o["content-range"]);if(i==null)return this.handler.onHeaders(e,r,A,s);let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;fA(c!=null&&Number.isFinite(c),"content-range mismatch"),fA(l!=null&&Number.isFinite(l),"invalid content-length"),this.start=c,this.end=l}if(this.end==null){let i=o["content-length"];this.end=i!=null?Number(i)-1:null}return fA(Number.isFinite(this.start)),fA(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=A,this.etag=o.etag!=null?o.etag:null,this.etag!=null&&this.etag.startsWith("W/")&&(this.etag=null),this.handler.onHeaders(e,r,A,s)}let n=new pA("Request failed",e,{headers:o,data:{count:this.retryCount}});return this.abort(n),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||kB(this.opts.body))return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},r.bind(this));function r(A){if(A!=null||this.aborted||kB(this.opts.body))return this.handler.onError(A);if(this.start!==0){let s={range:`bytes=${this.start}-${this.end??""}`};this.etag!=null&&(s["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...s}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(s){this.handler.onError(s)}}}};NB.exports=Jc});var GB=B((eP,UB)=>{"use strict";var dF=$A(),fF=gn(),Pc=class extends dF{#e=null;#t=null;constructor(e,r={}){super(r),this.#e=e,this.#t=r}dispatch(e,r){let A=new fF({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:r});return this.#e.dispatch(e,A)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}};UB.exports=Pc});var Zc=B((tP,PB)=>{"use strict";var OB=require("node:assert"),{Readable:pF}=require("node:stream"),{RequestAbortedError:YB,NotSupportedError:mF,InvalidArgumentError:wF,AbortError:Hc}=Y(),_B=M(),{ReadableStreamFrom:yF}=M(),Me=Symbol("kConsume"),Rs=Symbol("kReading"),$t=Symbol("kBody"),LB=Symbol("kAbort"),JB=Symbol("kContentType"),MB=Symbol("kContentLength"),RF=()=>{},Vc=class extends pF{constructor({resume:e,abort:r,contentType:A="",contentLength:s,highWaterMark:o=64*1024}){super({autoDestroy:!0,read:e,highWaterMark:o}),this._readableState.dataEmitted=!1,this[LB]=r,this[Me]=null,this[$t]=null,this[JB]=A,this[MB]=s,this[Rs]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new YB),e&&this[LB](),super.destroy(e)}_destroy(e,r){this[Rs]?r(e):setImmediate(()=>{r(e)})}on(e,...r){return(e==="data"||e==="readable")&&(this[Rs]=!0),super.on(e,...r)}addListener(e,...r){return this.on(e,...r)}off(e,...r){let A=super.off(e,...r);return(e==="data"||e==="readable")&&(this[Rs]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,...r){return this.off(e,...r)}push(e){return this[Me]&&e!==null?(Wc(this[Me],e),this[Rs]?super.push(e):!0):super.push(e)}async text(){return Ds(this,"text")}async json(){return Ds(this,"json")}async blob(){return Ds(this,"blob")}async bytes(){return Ds(this,"bytes")}async arrayBuffer(){return Ds(this,"arrayBuffer")}async formData(){throw new mF}get bodyUsed(){return _B.isDisturbed(this)}get body(){return this[$t]||(this[$t]=yF(this),this[Me]&&(this[$t].getReader(),OB(this[$t].locked))),this[$t]}async dump(e){let r=Number.isFinite(e?.limit)?e.limit:131072,A=e?.signal;if(A!=null&&(typeof A!="object"||!("aborted"in A)))throw new wF("signal must be an AbortSignal");return A?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((s,o)=>{this[MB]>r&&this.destroy(new Hc);let n=()=>{this.destroy(A.reason??new Hc)};A?.addEventListener("abort",n),this.on("close",function(){A?.removeEventListener("abort",n),A?.aborted?o(A.reason??new Hc):s(null)}).on("error",RF).on("data",function(i){r-=i.length,r<=0&&this.destroy()}).resume()})}};function DF(t){return t[$t]&&t[$t].locked===!0||t[Me]}function TF(t){return _B.isDisturbed(t)||DF(t)}async function Ds(t,e){return OB(!t[Me]),new Promise((r,A)=>{if(TF(t)){let s=t._readableState;s.destroyed&&s.closeEmitted===!1?t.on("error",o=>{A(o)}).on("close",()=>{A(new TypeError("unusable"))}):A(s.errored??new TypeError("unusable"))}else queueMicrotask(()=>{t[Me]={type:e,stream:t,resolve:r,reject:A,length:0,body:[]},t.on("error",function(s){zc(this[Me],s)}).on("close",function(){this[Me].body!==null&&zc(this[Me],new YB)}),bF(t[Me])})})}function bF(t){if(t.body===null)return;let{_readableState:e}=t.stream;if(e.bufferIndex){let r=e.bufferIndex,A=e.buffer.length;for(let s=r;s2&&r[0]===239&&r[1]===187&&r[2]===191?3:0;return r.utf8Slice(s,A)}function vB(t,e){if(t.length===0||e===0)return new Uint8Array(0);if(t.length===1)return new Uint8Array(t[0]);let r=new Uint8Array(Buffer.allocUnsafeSlow(e).buffer),A=0;for(let s=0;s{var kF=require("node:assert"),{ResponseStatusCodeError:HB}=Y(),{chunksDecode:VB}=Zc(),FF=128*1024;async function SF({callback:t,body:e,contentType:r,statusCode:A,statusMessage:s,headers:o}){kF(e);let n=[],i=0;try{for await(let l of e)if(n.push(l),i+=l.length,i>FF){n=[],i=0;break}}catch{n=[],i=0}let a=`Response status code ${A}${s?`: ${s}`:""}`;if(A===204||!r||!i){queueMicrotask(()=>t(new HB(a,A,o)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let g;try{qB(r)?g=JSON.parse(VB(n,i)):WB(r)&&(g=VB(n,i))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>t(new HB(a,A,o,g)))}var qB=t=>t.length>15&&t[11]==="/"&&t[0]==="a"&&t[1]==="p"&&t[2]==="p"&&t[3]==="l"&&t[4]==="i"&&t[5]==="c"&&t[6]==="a"&&t[7]==="t"&&t[8]==="i"&&t[9]==="o"&&t[10]==="n"&&t[12]==="j"&&t[13]==="s"&&t[14]==="o"&&t[15]==="n",WB=t=>t.length>4&&t[4]==="/"&&t[0]==="t"&&t[1]==="e"&&t[2]==="x"&&t[3]==="t";zB.exports={getResolveErrorBodyCallback:SF,isContentTypeApplicationJson:qB,isContentTypeText:WB}});var KB=B((AP,Kc)=>{"use strict";var NF=require("node:assert"),{Readable:UF}=Zc(),{InvalidArgumentError:mA,RequestAbortedError:ZB}=Y(),ve=M(),{getResolveErrorBodyCallback:GF}=jc(),{AsyncResource:LF}=require("node:async_hooks"),ln=class extends LF{constructor(e,r){if(!e||typeof e!="object")throw new mA("invalid opts");let{signal:A,method:s,opaque:o,body:n,onInfo:i,responseHeaders:a,throwOnError:c,highWaterMark:g}=e;try{if(typeof r!="function")throw new mA("invalid callback");if(g&&(typeof g!="number"||g<0))throw new mA("invalid highWaterMark");if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new mA("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new mA("invalid method");if(i&&typeof i!="function")throw new mA("invalid onInfo callback");super("UNDICI_REQUEST")}catch(l){throw ve.isStream(n)&&ve.destroy(n.on("error",ve.nop),l),l}this.method=s,this.responseHeaders=a||null,this.opaque=o||null,this.callback=r,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=i||null,this.throwOnError=c,this.highWaterMark=g,this.signal=A,this.reason=null,this.removeAbortListener=null,ve.isStream(n)&&n.on("error",l=>{this.onError(l)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new ZB:this.removeAbortListener=ve.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new ZB,this.res?ve.destroy(this.res.on("error",ve.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&(this.res?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}))}onConnect(e,r){if(this.reason){e(this.reason);return}NF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{callback:o,opaque:n,abort:i,context:a,responseHeaders:c,highWaterMark:g}=this,l=c==="raw"?ve.parseRawHeaders(r):ve.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:l});return}let u=c==="raw"?ve.parseHeaders(r):l,E=u["content-type"],h=u["content-length"],C=new UF({resume:A,abort:i,contentType:E,contentLength:this.method!=="HEAD"&&h?Number(h):null,highWaterMark:g});this.removeAbortListener&&C.on("close",this.removeAbortListener),this.callback=null,this.res=C,o!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(GF,null,{callback:o,body:C,contentType:E,statusCode:e,statusMessage:s,headers:l}):this.runInAsyncScope(o,null,null,{statusCode:e,headers:l,trailers:this.trailers,opaque:n,body:C,context:a}))}onData(e){return this.res.push(e)}onComplete(e){ve.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:r,callback:A,body:s,opaque:o}=this;A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:o})})),r&&(this.res=null,queueMicrotask(()=>{ve.destroy(r,e)})),s&&(this.body=null,ve.destroy(s,e)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function jB(t,e){if(e===void 0)return new Promise((r,A)=>{jB.call(this,t,(s,o)=>s?A(s):r(o))});try{this.dispatch(t,new ln(t,e))}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}Kc.exports=jB;Kc.exports.RequestHandler=ln});var Ts=B((sP,eI)=>{var{addAbortListener:MF}=M(),{RequestAbortedError:vF}=Y(),wA=Symbol("kListener"),Ct=Symbol("kSignal");function XB(t){t.abort?t.abort(t[Ct]?.reason):t.reason=t[Ct]?.reason??new vF,$B(t)}function xF(t,e){if(t.reason=null,t[Ct]=null,t[wA]=null,!!e){if(e.aborted){XB(t);return}t[Ct]=e,t[wA]=()=>{XB(t)},MF(t[Ct],t[wA])}}function $B(t){t[Ct]&&("removeEventListener"in t[Ct]?t[Ct].removeEventListener("abort",t[wA]):t[Ct].removeListener("abort",t[wA]),t[Ct]=null,t[wA]=null)}eI.exports={addSignal:xF,removeSignal:$B}});var sI=B((oP,AI)=>{"use strict";var OF=require("node:assert"),{finished:YF,PassThrough:_F}=require("node:stream"),{InvalidArgumentError:yA,InvalidReturnValueError:JF}=Y(),nt=M(),{getResolveErrorBodyCallback:PF}=jc(),{AsyncResource:HF}=require("node:async_hooks"),{addSignal:VF,removeSignal:tI}=Ts(),Xc=class extends HF{constructor(e,r,A){if(!e||typeof e!="object")throw new yA("invalid opts");let{signal:s,method:o,opaque:n,body:i,onInfo:a,responseHeaders:c,throwOnError:g}=e;try{if(typeof A!="function")throw new yA("invalid callback");if(typeof r!="function")throw new yA("invalid factory");if(s&&typeof s.on!="function"&&typeof s.addEventListener!="function")throw new yA("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new yA("invalid method");if(a&&typeof a!="function")throw new yA("invalid onInfo callback");super("UNDICI_STREAM")}catch(l){throw nt.isStream(i)&&nt.destroy(i.on("error",nt.nop),l),l}this.responseHeaders=c||null,this.opaque=n||null,this.factory=r,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=i,this.onInfo=a||null,this.throwOnError=g||!1,nt.isStream(i)&&i.on("error",l=>{this.onError(l)}),VF(this,s)}onConnect(e,r){if(this.reason){e(this.reason);return}OF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{factory:o,opaque:n,context:i,callback:a,responseHeaders:c}=this,g=c==="raw"?nt.parseRawHeaders(r):nt.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:g});return}this.factory=null;let l;if(this.throwOnError&&e>=400){let h=(c==="raw"?nt.parseHeaders(r):g)["content-type"];l=new _F,this.callback=null,this.runInAsyncScope(PF,null,{callback:a,body:l,contentType:h,statusCode:e,statusMessage:s,headers:g})}else{if(o===null)return;if(l=this.runInAsyncScope(o,null,{statusCode:e,headers:g,opaque:n,context:i}),!l||typeof l.write!="function"||typeof l.end!="function"||typeof l.on!="function")throw new JF("expected Writable");YF(l,{readable:!1},E=>{let{callback:h,res:C,opaque:I,trailers:Q,abort:f}=this;this.res=null,(E||!C.readable)&&nt.destroy(C,E),this.callback=null,this.runInAsyncScope(h,null,E||null,{opaque:I,trailers:Q}),E&&f()})}return l.on("drain",A),this.res=l,(l.writableNeedDrain!==void 0?l.writableNeedDrain:l._writableState?.needDrain)!==!0}onData(e){let{res:r}=this;return r?r.write(e):!0}onComplete(e){let{res:r}=this;tI(this),r&&(this.trailers=nt.parseHeaders(e),r.end())}onError(e){let{res:r,callback:A,opaque:s,body:o}=this;tI(this),this.factory=null,r?(this.res=null,nt.destroy(r,e)):A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:s})})),o&&(this.body=null,nt.destroy(o,e))}};function rI(t,e,r){if(r===void 0)return new Promise((A,s)=>{rI.call(this,t,e,(o,n)=>o?s(o):A(n))});try{this.dispatch(t,new Xc(t,e,r))}catch(A){if(typeof r!="function")throw A;let s=t?.opaque;queueMicrotask(()=>r(A,{opaque:s}))}}AI.exports=rI});var aI=B((nP,iI)=>{"use strict";var{Readable:nI,Duplex:qF,PassThrough:WF}=require("node:stream"),{InvalidArgumentError:bs,InvalidReturnValueError:zF,RequestAbortedError:$c}=Y(),ze=M(),{AsyncResource:ZF}=require("node:async_hooks"),{addSignal:jF,removeSignal:KF}=Ts(),oI=require("node:assert"),RA=Symbol("resume"),eg=class extends nI{constructor(){super({autoDestroy:!0}),this[RA]=null}_read(){let{[RA]:e}=this;e&&(this[RA]=null,e())}_destroy(e,r){this._read(),r(e)}},tg=class extends nI{constructor(e){super({autoDestroy:!0}),this[RA]=e}_read(){this[RA]()}_destroy(e,r){!e&&!this._readableState.endEmitted&&(e=new $c),r(e)}},rg=class extends ZF{constructor(e,r){if(!e||typeof e!="object")throw new bs("invalid opts");if(typeof r!="function")throw new bs("invalid handler");let{signal:A,method:s,opaque:o,onInfo:n,responseHeaders:i}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new bs("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new bs("invalid method");if(n&&typeof n!="function")throw new bs("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=o||null,this.responseHeaders=i||null,this.handler=r,this.abort=null,this.context=null,this.onInfo=n||null,this.req=new eg().on("error",ze.nop),this.ret=new qF({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:a}=this;a?.resume&&a.resume()},write:(a,c,g)=>{let{req:l}=this;l.push(a,c)||l._readableState.destroyed?g():l[RA]=g},destroy:(a,c)=>{let{body:g,req:l,res:u,ret:E,abort:h}=this;!a&&!E._readableState.endEmitted&&(a=new $c),h&&a&&h(),ze.destroy(g,a),ze.destroy(l,a),ze.destroy(u,a),KF(this),c(a)}}).on("prefinish",()=>{let{req:a}=this;a.push(null)}),this.res=null,jF(this,A)}onConnect(e,r){let{ret:A,res:s}=this;if(this.reason){e(this.reason);return}oI(!s,"pipeline cannot be retried"),oI(!A.destroyed),this.abort=e,this.context=r}onHeaders(e,r,A){let{opaque:s,handler:o,context:n}=this;if(e<200){if(this.onInfo){let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);this.onInfo({statusCode:e,headers:a})}return}this.res=new tg(A);let i;try{this.handler=null;let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);i=this.runInAsyncScope(o,null,{statusCode:e,headers:a,opaque:s,body:this.res,context:n})}catch(a){throw this.res.on("error",ze.nop),a}if(!i||typeof i.on!="function")throw new zF("expected Readable");i.on("data",a=>{let{ret:c,body:g}=this;!c.push(a)&&g.pause&&g.pause()}).on("error",a=>{let{ret:c}=this;ze.destroy(c,a)}).on("end",()=>{let{ret:a}=this;a.push(null)}).on("close",()=>{let{ret:a}=this;a._readableState.ended||ze.destroy(a,new $c)}),this.body=i}onData(e){let{res:r}=this;return r.push(e)}onComplete(e){let{res:r}=this;r.push(null)}onError(e){let{ret:r}=this;this.handler=null,ze.destroy(r,e)}};function XF(t,e){try{let r=new rg(t,e);return this.dispatch({...t,body:r.req},r),r.ret}catch(r){return new WF().destroy(r)}}iI.exports=XF});var hI=B((iP,EI)=>{"use strict";var{InvalidArgumentError:Ag,SocketError:$F}=Y(),{AsyncResource:eS}=require("node:async_hooks"),cI=M(),{addSignal:tS,removeSignal:gI}=Ts(),lI=require("node:assert"),sg=class extends eS{constructor(e,r){if(!e||typeof e!="object")throw new Ag("invalid opts");if(typeof r!="function")throw new Ag("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new Ag("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=o||null,this.opaque=s||null,this.callback=r,this.abort=null,this.context=null,tS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}lI(this.callback),this.abort=e,this.context=null}onHeaders(){throw new $F("bad upgrade",null)}onUpgrade(e,r,A){lI(e===101);let{callback:s,opaque:o,context:n}=this;gI(this),this.callback=null;let i=this.responseHeaders==="raw"?cI.parseRawHeaders(r):cI.parseHeaders(r);this.runInAsyncScope(s,null,null,{headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;gI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function uI(t,e){if(e===void 0)return new Promise((r,A)=>{uI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new sg(t,e);this.dispatch({...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}EI.exports=uI});var dI=B((aP,CI)=>{"use strict";var rS=require("node:assert"),{AsyncResource:AS}=require("node:async_hooks"),{InvalidArgumentError:og,SocketError:sS}=Y(),QI=M(),{addSignal:oS,removeSignal:BI}=Ts(),ng=class extends AS{constructor(e,r){if(!e||typeof e!="object")throw new og("invalid opts");if(typeof r!="function")throw new og("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new og("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=s||null,this.responseHeaders=o||null,this.callback=r,this.abort=null,oS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}rS(this.callback),this.abort=e,this.context=r}onHeaders(){throw new sS("bad connect",null)}onUpgrade(e,r,A){let{callback:s,opaque:o,context:n}=this;BI(this),this.callback=null;let i=r;i!=null&&(i=this.responseHeaders==="raw"?QI.parseRawHeaders(r):QI.parseHeaders(r)),this.runInAsyncScope(s,null,null,{statusCode:e,headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;BI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function II(t,e){if(e===void 0)return new Promise((r,A)=>{II.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new ng(t,e);this.dispatch({...t,method:"CONNECT"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}CI.exports=II});var fI=B((cP,DA)=>{"use strict";DA.exports.request=KB();DA.exports.stream=sI();DA.exports.pipeline=aI();DA.exports.upgrade=hI();DA.exports.connect=dI()});var ag=B((gP,mI)=>{"use strict";var{UndiciError:nS}=Y(),pI=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),ig=class t extends nS{constructor(e){super(e),Error.captureStackTrace(this,t),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&e[pI]===!0}[pI]=!0};mI.exports={MockNotMatchedError:ig}});var TA=B((lP,wI)=>{"use strict";wI.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var ks=B((uP,GI)=>{"use strict";var{MockNotMatchedError:Fr}=ag(),{kDispatches:un,kMockAgent:iS,kOriginalDispatch:aS,kOrigin:cS,kGetNetConnect:gS}=TA(),{buildURL:lS}=M(),{STATUS_CODES:uS}=require("node:http"),{types:{isPromise:ES}}=require("node:util");function Gt(t,e){return typeof t=="string"?t===e:t instanceof RegExp?t.test(e):typeof t=="function"?t(e)===!0:!1}function RI(t){return Object.fromEntries(Object.entries(t).map(([e,r])=>[e.toLocaleLowerCase(),r]))}function DI(t,e){if(Array.isArray(t)){for(let r=0;r"u")return!0;if(typeof e!="object"||typeof t.headers!="object")return!1;for(let[r,A]of Object.entries(t.headers)){let s=DI(e,r);if(!Gt(A,s))return!1}return!0}function yI(t){if(typeof t!="string")return t;let e=t.split("?");if(e.length!==2)return t;let r=new URLSearchParams(e.pop());return r.sort(),[...e,r.toString()].join("?")}function hS(t,{path:e,method:r,body:A,headers:s}){let o=Gt(t.path,e),n=Gt(t.method,r),i=typeof t.body<"u"?Gt(t.body,A):!0,a=TI(t,s);return o&&n&&i&&a}function bI(t){return Buffer.isBuffer(t)||t instanceof Uint8Array||t instanceof ArrayBuffer?t:typeof t=="object"?JSON.stringify(t):t.toString()}function kI(t,e){let r=e.query?lS(e.path,e.query):e.path,A=typeof r=="string"?yI(r):r,s=t.filter(({consumed:o})=>!o).filter(({path:o})=>Gt(yI(o),A));if(s.length===0)throw new Fr(`Mock dispatch not matched for path '${A}'`);if(s=s.filter(({method:o})=>Gt(o,e.method)),s.length===0)throw new Fr(`Mock dispatch not matched for method '${e.method}' on path '${A}'`);if(s=s.filter(({body:o})=>typeof o<"u"?Gt(o,e.body):!0),s.length===0)throw new Fr(`Mock dispatch not matched for body '${e.body}' on path '${A}'`);if(s=s.filter(o=>TI(o,e.headers)),s.length===0){let o=typeof e.headers=="object"?JSON.stringify(e.headers):e.headers;throw new Fr(`Mock dispatch not matched for headers '${o}' on path '${A}'`)}return s[0]}function QS(t,e,r){let A={timesInvoked:0,times:1,persist:!1,consumed:!1},s=typeof r=="function"?{callback:r}:{...r},o={...A,...e,pending:!0,data:{error:null,...s}};return t.push(o),o}function cg(t,e){let r=t.findIndex(A=>A.consumed?hS(A,e):!1);r!==-1&&t.splice(r,1)}function FI(t){let{path:e,method:r,body:A,headers:s,query:o}=t;return{path:e,method:r,body:A,headers:s,query:o}}function gg(t){let e=Object.keys(t),r=[];for(let A=0;A=u,A.pending=l0?setTimeout(()=>{E(this[un])},c):E(this[un]);function E(C,I=o){let Q=Array.isArray(t.headers)?lg(t.headers):t.headers,f=typeof I=="function"?I({...t,headers:Q}):I;if(ES(f)){f.then(Z=>E(C,Z));return}let R=bI(f),y=gg(n),P=gg(i);e.onConnect?.(Z=>e.onError(Z),null),e.onHeaders?.(s,y,h,SI(s)),e.onData?.(Buffer.from(R)),e.onComplete?.(P),cg(C,r)}function h(){}return!0}function IS(){let t=this[iS],e=this[cS],r=this[aS];return function(s,o){if(t.isMockActive)try{NI.call(this,s,o)}catch(n){if(n instanceof Fr){let i=t[gS]();if(i===!1)throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect disabled)`);if(UI(i,e))r.call(this,s,o);else throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect is not enabled for this origin)`)}else throw n}else r.call(this,s,o)}}function UI(t,e){let r=new URL(e);return t===!0?!0:!!(Array.isArray(t)&&t.some(A=>Gt(A,r.host)))}function CS(t){if(t){let{agent:e,...r}=t;return r}}GI.exports={getResponseData:bI,getMockDispatch:kI,addMockDispatch:QS,deleteMockDispatch:cg,buildKey:FI,generateKeyValues:gg,matchValue:Gt,getResponse:BS,getStatusText:SI,mockDispatch:NI,buildMockDispatch:IS,checkNetConnect:UI,buildMockOptions:CS,getHeaderByName:DI,buildHeadersFromArray:lg}});var Cg=B((EP,Ig)=>{"use strict";var{getResponseData:dS,buildKey:fS,addMockDispatch:ug}=ks(),{kDispatches:En,kDispatchKey:hn,kDefaultHeaders:Eg,kDefaultTrailers:hg,kContentLength:Qg,kMockDispatch:Qn}=TA(),{InvalidArgumentError:dt}=Y(),{buildURL:pS}=M(),bA=class{constructor(e){this[Qn]=e}delay(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("waitInMs must be a valid integer > 0");return this[Qn].delay=e,this}persist(){return this[Qn].persist=!0,this}times(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("repeatTimes must be a valid integer > 0");return this[Qn].times=e,this}},Bg=class{constructor(e,r){if(typeof e!="object")throw new dt("opts must be an object");if(typeof e.path>"u")throw new dt("opts.path must be defined");if(typeof e.method>"u"&&(e.method="GET"),typeof e.path=="string")if(e.query)e.path=pS(e.path,e.query);else{let A=new URL(e.path,"data://");e.path=A.pathname+A.search}typeof e.method=="string"&&(e.method=e.method.toUpperCase()),this[hn]=fS(e),this[En]=r,this[Eg]={},this[hg]={},this[Qg]=!1}createMockScopeDispatchData({statusCode:e,data:r,responseOptions:A}){let s=dS(r),o=this[Qg]?{"content-length":s.length}:{},n={...this[Eg],...o,...A.headers},i={...this[hg],...A.trailers};return{statusCode:e,data:r,headers:n,trailers:i}}validateReplyParameters(e){if(typeof e.statusCode>"u")throw new dt("statusCode must be defined");if(typeof e.responseOptions!="object"||e.responseOptions===null)throw new dt("responseOptions must be an object")}reply(e){if(typeof e=="function"){let o=i=>{let a=e(i);if(typeof a!="object"||a===null)throw new dt("reply options callback must return an object");let c={data:"",responseOptions:{},...a};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},n=ug(this[En],this[hn],o);return new bA(n)}let r={statusCode:e,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(r);let A=this.createMockScopeDispatchData(r),s=ug(this[En],this[hn],A);return new bA(s)}replyWithError(e){if(typeof e>"u")throw new dt("error must be defined");let r=ug(this[En],this[hn],{error:e});return new bA(r)}defaultReplyHeaders(e){if(typeof e>"u")throw new dt("headers must be defined");return this[Eg]=e,this}defaultReplyTrailers(e){if(typeof e>"u")throw new dt("trailers must be defined");return this[hg]=e,this}replyContentLength(){return this[Qg]=!0,this}};Ig.exports.MockInterceptor=Bg;Ig.exports.MockScope=bA});var pg=B((hP,_I)=>{"use strict";var{promisify:mS}=require("node:util"),wS=BA(),{buildMockDispatch:yS}=ks(),{kDispatches:LI,kMockAgent:MI,kClose:vI,kOriginalClose:xI,kOrigin:OI,kOriginalDispatch:RS,kConnected:dg}=TA(),{MockInterceptor:DS}=Cg(),YI=$(),{InvalidArgumentError:TS}=Y(),fg=class extends wS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new TS("Argument opts.agent must implement Agent");this[MI]=r.agent,this[OI]=e,this[LI]=[],this[dg]=1,this[RS]=this.dispatch,this[xI]=this.close.bind(this),this.dispatch=yS.call(this),this.close=this[vI]}get[YI.kConnected](){return this[dg]}intercept(e){return new DS(e,this[LI])}async[vI](){await mS(this[xI])(),this[dg]=0,this[MI][YI.kClients].delete(this[OI])}};_I.exports=fg});var yg=B((QP,zI)=>{"use strict";var{promisify:bS}=require("node:util"),kS=IA(),{buildMockDispatch:FS}=ks(),{kDispatches:JI,kMockAgent:PI,kClose:HI,kOriginalClose:VI,kOrigin:qI,kOriginalDispatch:SS,kConnected:mg}=TA(),{MockInterceptor:NS}=Cg(),WI=$(),{InvalidArgumentError:US}=Y(),wg=class extends kS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new US("Argument opts.agent must implement Agent");this[PI]=r.agent,this[qI]=e,this[JI]=[],this[mg]=1,this[SS]=this.dispatch,this[VI]=this.close.bind(this),this.dispatch=FS.call(this),this.close=this[HI]}get[WI.kConnected](){return this[mg]}intercept(e){return new NS(e,this[JI])}async[HI](){await bS(this[VI])(),this[mg]=0,this[PI][WI.kClients].delete(this[qI])}};zI.exports=wg});var jI=B((IP,ZI)=>{"use strict";var GS={pronoun:"it",is:"is",was:"was",this:"this"},LS={pronoun:"they",is:"are",was:"were",this:"these"};ZI.exports=class{constructor(e,r){this.singular=e,this.plural=r}pluralize(e){let r=e===1,A=r?GS:LS,s=r?this.singular:this.plural;return{...A,count:e,noun:s}}}});var XI=B((dP,KI)=>{"use strict";var{Transform:MS}=require("node:stream"),{Console:vS}=require("node:console"),xS=process.versions.icu?"\u2705":"Y ",OS=process.versions.icu?"\u274C":"N ";KI.exports=class{constructor({disableColors:e}={}){this.transform=new MS({transform(r,A,s){s(null,r)}}),this.logger=new vS({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let r=e.map(({method:A,path:s,data:{statusCode:o},persist:n,times:i,timesInvoked:a,origin:c})=>({Method:A,Origin:c,Path:s,"Status code":o,Persistent:n?xS:OS,Invocations:a,Remaining:n?1/0:i-a}));return this.logger.table(r),this.transform.read().toString()}}});var rC=B((fP,tC)=>{"use strict";var{kClients:Sr}=$(),YS=CA(),{kAgent:Rg,kMockAgentSet:Bn,kMockAgentGet:$I,kDispatches:Dg,kIsMockActive:In,kNetConnect:Nr,kGetNetConnect:_S,kOptions:Cn,kFactory:dn}=TA(),JS=pg(),PS=yg(),{matchValue:HS,buildMockOptions:VS}=ks(),{InvalidArgumentError:eC,UndiciError:qS}=Y(),WS=$A(),zS=jI(),ZS=XI(),Tg=class extends WS{constructor(e){if(super(e),this[Nr]=!0,this[In]=!0,e?.agent&&typeof e.agent.dispatch!="function")throw new eC("Argument opts.agent must implement Agent");let r=e?.agent?e.agent:new YS(e);this[Rg]=r,this[Sr]=r[Sr],this[Cn]=VS(e)}get(e){let r=this[$I](e);return r||(r=this[dn](e),this[Bn](e,r)),r}dispatch(e,r){return this.get(e.origin),this[Rg].dispatch(e,r)}async close(){await this[Rg].close(),this[Sr].clear()}deactivate(){this[In]=!1}activate(){this[In]=!0}enableNetConnect(e){if(typeof e=="string"||typeof e=="function"||e instanceof RegExp)Array.isArray(this[Nr])?this[Nr].push(e):this[Nr]=[e];else if(typeof e>"u")this[Nr]=!0;else throw new eC("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[Nr]=!1}get isMockActive(){return this[In]}[Bn](e,r){this[Sr].set(e,r)}[dn](e){let r=Object.assign({agent:this},this[Cn]);return this[Cn]&&this[Cn].connections===1?new JS(e,r):new PS(e,r)}[$I](e){let r=this[Sr].get(e);if(r)return r;if(typeof e!="string"){let A=this[dn]("http://localhost:9999");return this[Bn](e,A),A}for(let[A,s]of Array.from(this[Sr]))if(s&&typeof A!="string"&&HS(A,e)){let o=this[dn](e);return this[Bn](e,o),o[Dg]=s[Dg],o}}[_S](){return this[Nr]}pendingInterceptors(){let e=this[Sr];return Array.from(e.entries()).flatMap(([r,A])=>A[Dg].map(s=>({...s,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new ZS}={}){let r=this.pendingInterceptors();if(r.length===0)return;let A=new zS("interceptor","interceptors").pluralize(r.length);throw new qS(` +`,"latin1"),r!==null&&s!==r){if(A[sc])throw new fr;process.emitWarning(new fr)}e[j].timeout&&e[j].timeoutType===EA&&e[j].timeout.refresh&&e[j].timeout.refresh(),A[Ft]()}}destroy(e){let{socket:r,client:A,abort:s}=this;r[Ht]=!1,e&&(k(A[ce]<=1,"pipeline should only contain this request"),s(e))}};gQ.exports=VT});var dQ=B((PJ,CQ)=>{"use strict";var qe=C("node:assert"),{pipeline:XT}=C("node:stream"),x=v(),{RequestContentLengthMismatchError:cc,RequestAbortedError:uQ,SocketError:hs,InformationalError:gc}=_(),{kUrl:Wo,kReset:Zo,kClient:hA,kRunning:jo,kPending:$T,kQueue:Vt,kPendingIdx:lc,kRunningIdx:tt,kError:At,kSocket:he,kStrictContentLength:eb,kOnError:uc,kMaxConcurrentStreams:IQ,kHTTP2Session:rt,kResume:qt,kSize:tb,kHTTPContext:rb}=$(),St=Symbol("open streams"),EQ,hQ=!1,zo;try{zo=C("node:http2")}catch{zo={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:Ab,HTTP2_HEADER_METHOD:sb,HTTP2_HEADER_PATH:ob,HTTP2_HEADER_SCHEME:nb,HTTP2_HEADER_CONTENT_LENGTH:ib,HTTP2_HEADER_EXPECT:ab,HTTP2_HEADER_STATUS:cb}}=zo;function gb(t){let e=[];for(let[r,A]of Object.entries(t))if(Array.isArray(A))for(let s of A)e.push(Buffer.from(r),Buffer.from(s));else e.push(Buffer.from(r),Buffer.from(A));return e}async function lb(t,e){t[he]=e,hQ||(hQ=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=zo.connect(t[Wo],{createConnection:()=>e,peerMaxConcurrentStreams:t[IQ]});r[St]=0,r[hA]=t,r[he]=e,x.addListener(r,"error",Eb),x.addListener(r,"frameError",hb),x.addListener(r,"end",Qb),x.addListener(r,"goaway",Bb),x.addListener(r,"close",function(){let{[hA]:s}=this,{[he]:o}=s,n=this[he][At]||this[At]||new hs("closed",x.getSocketInfo(o));if(s[rt]=null,s.destroyed){qe(s[$T]===0);let i=s[Vt].splice(s[tt]);for(let a=0;a{A=!0}),{version:"h2",defaultPipelining:1/0,write(...s){return Cb(t,...s)},resume(){ub(t)},destroy(s,o){A?queueMicrotask(o):e.destroy(s).on("close",o)},get destroyed(){return e.destroyed},busy(){return!1}}}function ub(t){let e=t[he];e?.destroyed===!1&&(t[tb]===0&&t[IQ]===0?(e.unref(),t[rt].unref()):(e.ref(),t[rt].ref()))}function Eb(t){qe(t.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[he][At]=t,this[hA][uc](t)}function hb(t,e,r){if(r===0){let A=new gc(`HTTP/2: "frameError" received - type ${t}, code ${e}`);this[he][At]=A,this[hA][uc](A)}}function Qb(){let t=new hs("other side closed",x.getSocketInfo(this[he]));this.destroy(t),x.destroy(this[he],t)}function Bb(t){let e=this[At]||new hs(`HTTP/2: "GOAWAY" frame received with code ${t}`,x.getSocketInfo(this)),r=this[hA];if(r[he]=null,r[rb]=null,this[rt]!=null&&(this[rt].destroy(e),this[rt]=null),x.destroy(this[he],e),r[tt]{e.aborted||e.completed||(R=R||new uQ,x.errorRequest(t,e,R),u!=null&&x.destroy(u,R),x.destroy(g,R),t[Vt][t[tt]++]=null,t[qt]())};try{e.onConnect(d)}catch(R){x.errorRequest(t,e,R)}if(e.aborted)return!1;if(A==="CONNECT")return r.ref(),u=r.request(l,{endStream:!1,signal:a}),u.id&&!u.pending?(e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null):u.once("ready",()=>{e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),!0;l[ob]=s,l[nb]="https";let I=A==="PUT"||A==="POST"||A==="PATCH";g&&typeof g.read=="function"&&g.read(0);let Q=x.bodyLength(g);if(x.isFormDataLike(g)){EQ??=gA().extractBody;let[R,H]=EQ(g);l["content-type"]=H,g=R.stream,Q=R.length}if(Q==null&&(Q=e.contentLength),(Q===0||!I)&&(Q=null),Ib(A)&&Q>0&&e.contentLength!=null&&e.contentLength!==Q){if(t[eb])return x.errorRequest(t,e,new cc),!1;process.emitWarning(new cc)}Q!=null&&(qe(g,"no body must not have content length"),l[ib]=`${Q}`),r.ref();let p=A==="GET"||A==="HEAD"||g===null;return i?(l[ab]="100-continue",u=r.request(l,{endStream:p,signal:a}),u.once("continue",D)):(u=r.request(l,{endStream:p,signal:a}),D()),++r[St],u.once("response",R=>{let{[cb]:H,...Z}=R;if(e.onResponseStarted(),e.aborted){let Ae=new uQ;x.errorRequest(t,e,Ae),x.destroy(u,Ae);return}e.onHeaders(Number(H),gb(Z),u.resume.bind(u),"")===!1&&u.pause(),u.on("data",Ae=>{e.onData(Ae)===!1&&u.pause()})}),u.once("end",()=>{(u.state?.state==null||u.state.state<6)&&e.onComplete([]),r[St]===0&&r.unref(),d(new gc("HTTP/2: stream half-closed (remote)")),t[Vt][t[tt]++]=null,t[lc]=t[tt],t[qt]()}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),u.once("error",function(R){d(R)}),u.once("frameError",(R,H)=>{d(new gc(`HTTP/2: "frameError" received - type ${R}, code ${H}`))}),!0;function D(){!g||Q===0?QQ(d,u,null,t,e,t[he],Q,I):x.isBuffer(g)?QQ(d,u,g,t,e,t[he],Q,I):x.isBlobLike(g)?typeof g.stream=="function"?BQ(d,u,g.stream(),t,e,t[he],Q,I):fb(d,u,g,t,e,t[he],Q,I):x.isStream(g)?db(d,t[he],I,u,g,t,e,Q):x.isIterable(g)?BQ(d,u,g,t,e,t[he],Q,I):qe(!1)}}function QQ(t,e,r,A,s,o,n,i){try{r!=null&&x.isBuffer(r)&&(qe(n===r.byteLength,"buffer body must have content length"),e.cork(),e.write(r),e.uncork(),e.end(),s.onBodySent(r)),i||(o[Zo]=!0),s.onRequestSent(),A[qt]()}catch(a){t(a)}}function db(t,e,r,A,s,o,n,i){qe(i!==0||o[jo]===0,"stream body cannot be pipelined");let a=XT(s,A,g=>{g?(x.destroy(a,g),t(g)):(x.removeAllListeners(a),n.onRequestSent(),r||(e[Zo]=!0),o[qt]())});x.addListener(a,"data",c);function c(g){n.onBodySent(g)}}async function fb(t,e,r,A,s,o,n,i){qe(n===r.size,"blob body must have content length");try{if(n!=null&&n!==r.size)throw new cc;let a=Buffer.from(await r.arrayBuffer());e.cork(),e.write(a),e.uncork(),e.end(),s.onBodySent(a),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(a){t(a)}}async function BQ(t,e,r,A,s,o,n,i){qe(n!==0||A[jo]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let l=a;a=null,l()}}let g=()=>new Promise((l,u)=>{qe(a===null),o[At]?u(o[At]):a=l});e.on("close",c).on("drain",c);try{for await(let l of r){if(o[At])throw o[At];let u=e.write(l);s.onBodySent(l),u||await g()}e.end(),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(l){t(l)}finally{e.off("close",c).off("drain",c)}}CQ.exports=lb});var Xo=B((HJ,mQ)=>{"use strict";var Bt=v(),{kBodyUsed:Qs}=$(),hc=C("node:assert"),{InvalidArgumentError:pb}=_(),mb=C("node:events"),wb=[300,301,302,303,307,308],fQ=Symbol("body"),Ko=class{constructor(e){this[fQ]=e,this[Qs]=!1}async*[Symbol.asyncIterator](){hc(!this[Qs],"disturbed"),this[Qs]=!0,yield*this[fQ]}},Ec=class{constructor(e,r,A,s){if(r!=null&&(!Number.isInteger(r)||r<0))throw new pb("maxRedirections must be a positive number");Bt.validateHandler(s,A.method,A.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...A,maxRedirections:0},this.maxRedirections=r,this.handler=s,this.history=[],this.redirectionLimitReached=!1,Bt.isStream(this.opts.body)?(Bt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){hc(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[Qs]=!1,mb.prototype.on.call(this.opts.body,"data",function(){this[Qs]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Ko(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Bt.isIterable(this.opts.body)&&(this.opts.body=new Ko(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,r,A){this.handler.onUpgrade(e,r,A)}onError(e){this.handler.onError(e)}onHeaders(e,r,A,s){if(this.location=this.history.length>=this.maxRedirections||Bt.isDisturbed(this.opts.body)?null:yb(e,r),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(new Error("max redirects")),this.redirectionLimitReached=!0,this.abort(new Error("max redirects"));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,r,A,s);let{origin:o,pathname:n,search:i}=Bt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),a=i?`${n}${i}`:n;this.opts.headers=Rb(this.opts.headers,e===303,this.opts.origin!==o),this.opts.path=a,this.opts.origin=o,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!=="HEAD"&&(this.opts.method="GET",this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function yb(t,e){if(wb.indexOf(t)===-1)return null;for(let r=0;r{"use strict";var Db=Xo();function Tb({maxRedirections:t}){return e=>function(A,s){let{maxRedirections:o=t}=A;if(!o)return e(A,s);let n=new Db(e,o,A,s);return A={...A,maxRedirections:0},e(A,n)}}wQ.exports=Tb});var IA=B((qJ,UQ)=>{"use strict";var Nt=C("node:assert"),kQ=C("node:net"),bb=C("node:http"),yr=v(),{channels:QA}=Kr(),kb=UE(),Fb=tA(),{InvalidArgumentError:oe,InformationalError:Sb,ClientDestroyedError:Nb}=_(),Ub=rs(),{kUrl:It,kServerName:Wt,kClient:Gb,kBusy:Qc,kConnect:Lb,kResuming:Rr,kRunning:fs,kPending:ps,kSize:ds,kQueue:st,kConnected:Mb,kConnecting:BA,kNeedDrain:Zt,kKeepAliveDefaultTimeout:yQ,kHostHeader:vb,kPendingIdx:ot,kRunningIdx:Ut,kError:xb,kPipelining:en,kKeepAliveTimeoutValue:Ob,kMaxHeadersSize:Yb,kKeepAliveMaxTimeout:_b,kKeepAliveTimeoutThreshold:Jb,kHeadersTimeout:Pb,kBodyTimeout:Hb,kStrictContentLength:Vb,kConnector:Bs,kMaxRedirections:qb,kMaxRequests:Bc,kCounter:Wb,kClose:zb,kDestroy:Zb,kDispatch:jb,kInterceptors:RQ,kLocalAddress:Is,kMaxResponseSize:Kb,kOnError:Xb,kHTTPContext:ne,kMaxConcurrentStreams:$b,kResume:Cs}=$(),ek=lQ(),tk=dQ(),DQ=!1,zt=Symbol("kClosedResolve"),TQ=()=>{};function FQ(t){return t[en]??t[ne]?.defaultPipelining??1}var Ic=class extends Fb{constructor(e,{interceptors:r,maxHeaderSize:A,headersTimeout:s,socketTimeout:o,requestTimeout:n,connectTimeout:i,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:l,maxKeepAliveTimeout:u,keepAliveMaxTimeout:E,keepAliveTimeoutThreshold:h,socketPath:d,pipelining:I,tls:Q,strictContentLength:p,maxCachedSessions:D,maxRedirections:R,connect:H,maxRequestsPerClient:Z,localAddress:Ae,maxResponseSize:gt,autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:qr,maxConcurrentStreams:_t,allowH2:De,webSocket:Wr}={}){if(super({webSocket:Wr}),g!==void 0)throw new oe("unsupported keepAlive, use pipelining=0 instead");if(o!==void 0)throw new oe("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(n!==void 0)throw new oe("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new oe("unsupported idleTimeout, use keepAliveTimeout instead");if(u!==void 0)throw new oe("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(A!=null&&!Number.isFinite(A))throw new oe("invalid maxHeaderSize");if(d!=null&&typeof d!="string")throw new oe("invalid socketPath");if(i!=null&&(!Number.isFinite(i)||i<0))throw new oe("invalid connectTimeout");if(l!=null&&(!Number.isFinite(l)||l<=0))throw new oe("invalid keepAliveTimeout");if(E!=null&&(!Number.isFinite(E)||E<=0))throw new oe("invalid keepAliveMaxTimeout");if(h!=null&&!Number.isFinite(h))throw new oe("invalid keepAliveTimeoutThreshold");if(s!=null&&(!Number.isInteger(s)||s<0))throw new oe("headersTimeout must be a positive integer or zero");if(a!=null&&(!Number.isInteger(a)||a<0))throw new oe("bodyTimeout must be a positive integer or zero");if(H!=null&&typeof H!="function"&&typeof H!="object")throw new oe("connect must be a function or an object");if(R!=null&&(!Number.isInteger(R)||R<0))throw new oe("maxRedirections must be a positive number");if(Z!=null&&(!Number.isInteger(Z)||Z<0))throw new oe("maxRequestsPerClient must be a positive number");if(Ae!=null&&(typeof Ae!="string"||kQ.isIP(Ae)===0))throw new oe("localAddress must be valid string IP address");if(gt!=null&&(!Number.isInteger(gt)||gt<-1))throw new oe("maxResponseSize must be a positive number");if(qr!=null&&(!Number.isInteger(qr)||qr<-1))throw new oe("autoSelectFamilyAttemptTimeout must be a positive number");if(De!=null&&typeof De!="boolean")throw new oe("allowH2 must be a valid boolean value");if(_t!=null&&(typeof _t!="number"||_t<1))throw new oe("maxConcurrentStreams must be a positive integer, greater than 0");typeof H!="function"&&(H=Ub({...Q,maxCachedSessions:D,allowH2:De,socketPath:d,timeout:i,...wt?{autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:qr}:void 0,...H})),r?.Client&&Array.isArray(r.Client)?(this[RQ]=r.Client,DQ||(DQ=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[RQ]=[rk({maxRedirections:R})],this[It]=yr.parseOrigin(e),this[Bs]=H,this[en]=I??1,this[Yb]=A||bb.maxHeaderSize,this[yQ]=l??4e3,this[_b]=E??6e5,this[Jb]=h??2e3,this[Ob]=this[yQ],this[Wt]=null,this[Is]=Ae??null,this[Rr]=0,this[Zt]=0,this[vb]=`host: ${this[It].hostname}${this[It].port?`:${this[It].port}`:""}\r +`,this[Hb]=a??3e5,this[Pb]=s??3e5,this[Vb]=p??!0,this[qb]=R,this[Bc]=Z,this[zt]=null,this[Kb]=gt>-1?gt:-1,this[$b]=_t??100,this[ne]=null,this[st]=[],this[Ut]=0,this[ot]=0,this[Cs]=zr=>Cc(this,zr),this[Xb]=zr=>SQ(this,zr)}get pipelining(){return this[en]}set pipelining(e){this[en]=e,this[Cs](!0)}get[ps](){return this[st].length-this[ot]}get[fs](){return this[ot]-this[Ut]}get[ds](){return this[st].length-this[Ut]}get[Mb](){return!!this[ne]&&!this[BA]&&!this[ne].destroyed}get[Qc](){return!!(this[ne]?.busy(null)||this[ds]>=(FQ(this)||1)||this[ps]>0)}[Lb](e){NQ(this),this.once("connect",e)}[jb](e,r){let A=e.origin||this[It].origin,s=new kb(A,e,r);return this[st].push(s),this[Rr]||(yr.bodyLength(s.body)==null&&yr.isIterable(s.body)?(this[Rr]=1,queueMicrotask(()=>Cc(this))):this[Cs](!0)),this[Rr]&&this[Zt]!==2&&this[Qc]&&(this[Zt]=2),this[Zt]<2}async[zb](){return new Promise(e=>{this[ds]?this[zt]=e:e(null)})}async[Zb](e){return new Promise(r=>{let A=this[st].splice(this[ot]);for(let o=0;o{this[zt]&&(this[zt](),this[zt]=null),r(null)};this[ne]?(this[ne].destroy(e,s),this[ne]=null):queueMicrotask(s),this[Cs]()})}},rk=$o();function SQ(t,e){if(t[fs]===0&&e.code!=="UND_ERR_INFO"&&e.code!=="UND_ERR_SOCKET"){Nt(t[ot]===t[Ut]);let r=t[st].splice(t[Ut]);for(let A=0;A{t[Bs]({host:e,hostname:r,protocol:A,port:s,servername:t[Wt],localAddress:t[Is]},(a,c)=>{a?i(a):n(c)})});if(t.destroyed){yr.destroy(o.on("error",TQ),new Nb);return}Nt(o);try{t[ne]=o.alpnProtocol==="h2"?await tk(t,o):await ek(t,o)}catch(n){throw o.destroy().on("error",TQ),n}t[BA]=!1,o[Wb]=0,o[Bc]=t[Bc],o[Gb]=t,o[xb]=null,QA.connected.hasSubscribers&&QA.connected.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Is]},connector:t[Bs],socket:o}),t.emit("connect",t[It],[t])}catch(o){if(t.destroyed)return;if(t[BA]=!1,QA.connectError.hasSubscribers&&QA.connectError.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Is]},connector:t[Bs],error:o}),o.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(Nt(t[fs]===0);t[ps]>0&&t[st][t[ot]].servername===t[Wt];){let n=t[st][t[ot]++];yr.errorRequest(t,n,o)}else SQ(t,o);t.emit("connectionError",t[It],[t],o)}t[Cs]()}function bQ(t){t[Zt]=0,t.emit("drain",t[It],[t])}function Cc(t,e){t[Rr]!==2&&(t[Rr]=2,Ak(t,e),t[Rr]=0,t[Ut]>256&&(t[st].splice(0,t[Ut]),t[ot]-=t[Ut],t[Ut]=0))}function Ak(t,e){for(;;){if(t.destroyed){Nt(t[ps]===0);return}if(t[zt]&&!t[ds]){t[zt](),t[zt]=null;return}if(t[ne]&&t[ne].resume(),t[Qc])t[Zt]=2;else if(t[Zt]===2){e?(t[Zt]=1,queueMicrotask(()=>bQ(t))):bQ(t);continue}if(t[ps]===0||t[fs]>=(FQ(t)||1))return;let r=t[st][t[ot]];if(t[It].protocol==="https:"&&t[Wt]!==r.servername){if(t[fs]>0)return;t[Wt]=r.servername,t[ne]?.destroy(new Sb("servername changed"),()=>{t[ne]=null,Cc(t)})}if(t[BA])return;if(!t[ne]){NQ(t);return}if(t[ne].destroyed||t[ne].busy(r))return;!r.aborted&&t[ne].write(r)?t[ot]++:t[st].splice(t[ot],1)}}UQ.exports=Ic});var dc=B((zJ,GQ)=>{"use strict";var tn=class{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&2047}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,e)}};GQ.exports=class{constructor(){this.head=this.tail=new tn}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new tn),this.head.push(e)}shift(){let e=this.tail,r=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),r}}});var MQ=B((ZJ,LQ)=>{var{kFree:sk,kConnected:ok,kPending:nk,kQueued:ik,kRunning:ak,kSize:ck}=$(),Dr=Symbol("pool"),fc=class{constructor(e){this[Dr]=e}get connected(){return this[Dr][ok]}get free(){return this[Dr][sk]}get pending(){return this[Dr][nk]}get queued(){return this[Dr][ik]}get running(){return this[Dr][ak]}get size(){return this[Dr][ck]}};LQ.exports=fc});var Dc=B((jJ,qQ)=>{"use strict";var gk=tA(),lk=dc(),{kConnected:pc,kSize:vQ,kRunning:xQ,kPending:OQ,kQueued:ms,kBusy:uk,kFree:Ek,kUrl:hk,kClose:Qk,kDestroy:Bk,kDispatch:Ik}=$(),Ck=MQ(),ke=Symbol("clients"),me=Symbol("needDrain"),ws=Symbol("queue"),mc=Symbol("closed resolve"),wc=Symbol("onDrain"),YQ=Symbol("onConnect"),_Q=Symbol("onDisconnect"),JQ=Symbol("onConnectionError"),yc=Symbol("get dispatcher"),HQ=Symbol("add client"),VQ=Symbol("remove client"),PQ=Symbol("stats"),Rc=class extends gk{constructor(e){super(e),this[ws]=new lk,this[ke]=[],this[ms]=0;let r=this;this[wc]=function(s,o){let n=r[ws],i=!1;for(;!i;){let a=n.shift();if(!a)break;r[ms]--,i=!this.dispatch(a.opts,a.handler)}this[me]=i,!this[me]&&r[me]&&(r[me]=!1,r.emit("drain",s,[r,...o])),r[mc]&&n.isEmpty()&&Promise.all(r[ke].map(a=>a.close())).then(r[mc])},this[YQ]=(A,s)=>{r.emit("connect",A,[r,...s])},this[_Q]=(A,s,o)=>{r.emit("disconnect",A,[r,...s],o)},this[JQ]=(A,s,o)=>{r.emit("connectionError",A,[r,...s],o)},this[PQ]=new Ck(this)}get[uk](){return this[me]}get[pc](){return this[ke].filter(e=>e[pc]).length}get[Ek](){return this[ke].filter(e=>e[pc]&&!e[me]).length}get[OQ](){let e=this[ms];for(let{[OQ]:r}of this[ke])e+=r;return e}get[xQ](){let e=0;for(let{[xQ]:r}of this[ke])e+=r;return e}get[vQ](){let e=this[ms];for(let{[vQ]:r}of this[ke])e+=r;return e}get stats(){return this[PQ]}async[Qk](){this[ws].isEmpty()?await Promise.all(this[ke].map(e=>e.close())):await new Promise(e=>{this[mc]=e})}async[Bk](e){for(;;){let r=this[ws].shift();if(!r)break;r.handler.onError(e)}await Promise.all(this[ke].map(r=>r.destroy(e)))}[Ik](e,r){let A=this[yc]();return A?A.dispatch(e,r)||(A[me]=!0,this[me]=!this[yc]()):(this[me]=!0,this[ws].push({opts:e,handler:r}),this[ms]++),!this[me]}[HQ](e){return e.on("drain",this[wc]).on("connect",this[YQ]).on("disconnect",this[_Q]).on("connectionError",this[JQ]),this[ke].push(e),this[me]&&queueMicrotask(()=>{this[me]&&this[wc](e[hk],[this,e])}),this}[VQ](e){e.close(()=>{let r=this[ke].indexOf(e);r!==-1&&this[ke].splice(r,1)}),this[me]=this[ke].some(r=>!r[me]&&r.closed!==!0&&r.destroyed!==!0)}};qQ.exports={PoolBase:Rc,kClients:ke,kNeedDrain:me,kAddClient:HQ,kRemoveClient:VQ,kGetDispatcher:yc}});var CA=B((KJ,jQ)=>{"use strict";var{PoolBase:dk,kClients:rn,kNeedDrain:fk,kAddClient:pk,kGetDispatcher:mk}=Dc(),wk=IA(),{InvalidArgumentError:Tc}=_(),WQ=v(),{kUrl:zQ,kInterceptors:yk}=$(),Rk=rs(),bc=Symbol("options"),kc=Symbol("connections"),ZQ=Symbol("factory");function Dk(t,e){return new wk(t,e)}var Fc=class extends dk{constructor(e,{connections:r,factory:A=Dk,connect:s,connectTimeout:o,tls:n,maxCachedSessions:i,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g,allowH2:l,...u}={}){if(r!=null&&(!Number.isFinite(r)||r<0))throw new Tc("invalid connections");if(typeof A!="function")throw new Tc("factory must be a function.");if(s!=null&&typeof s!="function"&&typeof s!="object")throw new Tc("connect must be a function or an object");typeof s!="function"&&(s=Rk({...n,maxCachedSessions:i,allowH2:l,socketPath:a,timeout:o,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g}:void 0,...s})),super(u),this[yk]=u.interceptors?.Pool&&Array.isArray(u.interceptors.Pool)?u.interceptors.Pool:[],this[kc]=r||null,this[zQ]=WQ.parseOrigin(e),this[bc]={...WQ.deepClone(u),connect:s,allowH2:l},this[bc].interceptors=u.interceptors?{...u.interceptors}:void 0,this[ZQ]=A,this.on("connectionError",(E,h,d)=>{for(let I of h){let Q=this[rn].indexOf(I);Q!==-1&&this[rn].splice(Q,1)}})}[mk](){for(let e of this[rn])if(!e[fk])return e;if(!this[kc]||this[rn].length{"use strict";var{BalancedPoolMissingUpstreamError:Tk,InvalidArgumentError:bk}=_(),{PoolBase:kk,kClients:Ce,kNeedDrain:ys,kAddClient:Fk,kRemoveClient:Sk,kGetDispatcher:Nk}=Dc(),Uk=CA(),{kUrl:Sc,kInterceptors:Gk}=$(),{parseOrigin:KQ}=v(),XQ=Symbol("factory"),An=Symbol("options"),$Q=Symbol("kGreatestCommonDivisor"),Tr=Symbol("kCurrentWeight"),br=Symbol("kIndex"),We=Symbol("kWeight"),sn=Symbol("kMaxWeightPerServer"),on=Symbol("kErrorPenalty");function Lk(t,e){if(t===0)return e;for(;e!==0;){let r=e;e=t%e,t=r}return t}function Mk(t,e){return new Uk(t,e)}var Nc=class extends kk{constructor(e=[],{factory:r=Mk,...A}={}){if(super(),this[An]=A,this[br]=-1,this[Tr]=0,this[sn]=this[An].maxWeightPerServer||100,this[on]=this[An].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof r!="function")throw new bk("factory must be a function.");this[Gk]=A.interceptors?.BalancedPool&&Array.isArray(A.interceptors.BalancedPool)?A.interceptors.BalancedPool:[],this[XQ]=r;for(let s of e)this.addUpstream(s);this._updateBalancedPoolStats()}addUpstream(e){let r=KQ(e).origin;if(this[Ce].find(s=>s[Sc].origin===r&&s.closed!==!0&&s.destroyed!==!0))return this;let A=this[XQ](r,Object.assign({},this[An]));this[Fk](A),A.on("connect",()=>{A[We]=Math.min(this[sn],A[We]+this[on])}),A.on("connectionError",()=>{A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats()}),A.on("disconnect",(...s)=>{let o=s[2];o&&o.code==="UND_ERR_SOCKET"&&(A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats())});for(let s of this[Ce])s[We]=this[sn];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let r=0;rs[Sc].origin===r&&s.closed!==!0&&s.destroyed!==!0);return A&&this[Sk](A),this}get upstreams(){return this[Ce].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[Sc].origin)}[Nk](){if(this[Ce].length===0)throw new Tk;if(!this[Ce].find(o=>!o[ys]&&o.closed!==!0&&o.destroyed!==!0)||this[Ce].map(o=>o[ys]).reduce((o,n)=>o&&n,!0))return;let A=0,s=this[Ce].findIndex(o=>!o[ys]);for(;A++this[Ce][s][We]&&!o[ys]&&(s=this[br]),this[br]===0&&(this[Tr]=this[Tr]-this[$Q],this[Tr]<=0&&(this[Tr]=this[sn])),o[We]>=this[Tr]&&!o[ys])return o}return this[Tr]=this[Ce][s][We],this[br]=s,this[Ce][s]}};eB.exports=Nc});var dA=B(($J,aB)=>{"use strict";var{InvalidArgumentError:nn}=_(),{kClients:jt,kRunning:rB,kClose:vk,kDestroy:xk,kDispatch:Ok,kInterceptors:Yk}=$(),_k=tA(),Jk=CA(),Pk=IA(),Hk=v(),Vk=$o(),AB=Symbol("onConnect"),sB=Symbol("onDisconnect"),oB=Symbol("onConnectionError"),qk=Symbol("maxRedirections"),nB=Symbol("onDrain"),iB=Symbol("factory"),Uc=Symbol("options");function Wk(t,e){return e&&e.connections===1?new Pk(t,e):new Jk(t,e)}var Gc=class extends _k{constructor({factory:e=Wk,maxRedirections:r=0,connect:A,...s}={}){if(typeof e!="function")throw new nn("factory must be a function.");if(A!=null&&typeof A!="function"&&typeof A!="object")throw new nn("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new nn("maxRedirections must be a positive number");super(s),A&&typeof A!="function"&&(A={...A}),this[Yk]=s.interceptors?.Agent&&Array.isArray(s.interceptors.Agent)?s.interceptors.Agent:[Vk({maxRedirections:r})],this[Uc]={...Hk.deepClone(s),connect:A},this[Uc].interceptors=s.interceptors?{...s.interceptors}:void 0,this[qk]=r,this[iB]=e,this[jt]=new Map,this[nB]=(o,n)=>{this.emit("drain",o,[this,...n])},this[AB]=(o,n)=>{this.emit("connect",o,[this,...n])},this[sB]=(o,n,i)=>{this.emit("disconnect",o,[this,...n],i)},this[oB]=(o,n,i)=>{this.emit("connectionError",o,[this,...n],i)}}get[rB](){let e=0;for(let r of this[jt].values())e+=r[rB];return e}[Ok](e,r){let A;if(e.origin&&(typeof e.origin=="string"||e.origin instanceof URL))A=String(e.origin);else throw new nn("opts.origin must be a non-empty string or URL.");let s=this[jt].get(A);return s||(s=this[iB](e.origin,this[Uc]).on("drain",this[nB]).on("connect",this[AB]).on("disconnect",this[sB]).on("connectionError",this[oB]),this[jt].set(A,s)),s.dispatch(e,r)}async[vk](){let e=[];for(let r of this[jt].values())e.push(r.close());this[jt].clear(),await Promise.all(e)}async[xk](e){let r=[];for(let A of this[jt].values())r.push(A.destroy(e));this[jt].clear(),await Promise.all(r)}};aB.exports=Gc});var Oc=B((eP,dB)=>{"use strict";var{kProxy:Lc,kClose:hB,kDestroy:QB,kDispatch:cB,kInterceptors:zk}=$(),{URL:kr}=C("node:url"),Zk=dA(),BB=CA(),IB=tA(),{InvalidArgumentError:fA,RequestAbortedError:jk,SecureProxyConnectionError:Kk}=_(),gB=rs(),CB=IA(),an=Symbol("proxy agent"),cn=Symbol("proxy client"),Kt=Symbol("proxy headers"),Mc=Symbol("request tls settings"),lB=Symbol("proxy tls settings"),uB=Symbol("connect endpoint function"),EB=Symbol("tunnel proxy");function Xk(t){return t==="https:"?443:80}function $k(t,e){return new BB(t,e)}var eF=()=>{};function tF(t,e){return e.connections===1?new CB(t,e):new BB(t,e)}var vc=class extends IB{#e;constructor(e,{headers:r={},connect:A,factory:s}){if(super(),!e)throw new fA("Proxy URL is mandatory");this[Kt]=r,s?this.#e=s(e,{connect:A}):this.#e=new CB(e,{connect:A})}[cB](e,r){let A=r.onHeaders;r.onHeaders=function(i,a,c){if(i===407){typeof r.onError=="function"&&r.onError(new fA("Proxy Authentication Required (407)"));return}A&&A.call(this,i,a,c)};let{origin:s,path:o="/",headers:n={}}=e;if(e.path=s+o,!("host"in n)&&!("Host"in n)){let{host:i}=new kr(s);n.host=i}return e.headers={...this[Kt],...n},this.#e[cB](e,r)}async[hB](){return this.#e.close()}async[QB](e){return this.#e.destroy(e)}},xc=class extends IB{constructor(e){if(super(),!e||typeof e=="object"&&!(e instanceof kr)&&!e.uri)throw new fA("Proxy uri is mandatory");let{clientFactory:r=$k}=e;if(typeof r!="function")throw new fA("Proxy opts.clientFactory must be a function.");let{proxyTunnel:A=!0}=e,s=this.#e(e),{href:o,origin:n,port:i,protocol:a,username:c,password:g,hostname:l}=s;if(this[Lc]={uri:o,protocol:a},this[zk]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[Mc]=e.requestTls,this[lB]=e.proxyTls,this[Kt]=e.headers||{},this[EB]=A,e.auth&&e.token)throw new fA("opts.auth cannot be used in combination with opts.token");e.auth?this[Kt]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Kt]["proxy-authorization"]=e.token:c&&g&&(this[Kt]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(g)}`).toString("base64")}`);let u=gB({...e.proxyTls});this[uB]=gB({...e.requestTls});let E=e.factory||tF,h=(d,I)=>{let{protocol:Q}=new kr(d);return!this[EB]&&Q==="http:"&&this[Lc].protocol==="http:"?new vc(this[Lc].uri,{headers:this[Kt],connect:u,factory:E}):E(d,I)};this[cn]=r(s,{connect:u}),this[an]=new Zk({...e,factory:h,connect:async(d,I)=>{let Q=d.host;d.port||(Q+=`:${Xk(d.protocol)}`);try{let{socket:p,statusCode:D}=await this[cn].connect({origin:n,port:i,path:Q,signal:d.signal,headers:{...this[Kt],host:d.host},servername:this[lB]?.servername||l});if(D!==200&&(p.on("error",eF).destroy(),I(new jk(`Proxy response (${D}) !== 200 when HTTP Tunneling`))),d.protocol!=="https:"){I(null,p);return}let R;this[Mc]?R=this[Mc].servername:R=d.servername,this[uB]({...d,servername:R,httpSocket:p},I)}catch(p){p.code==="ERR_TLS_CERT_ALTNAME_INVALID"?I(new Kk(p)):I(p)}}})}dispatch(e,r){let A=rF(e.headers);if(AF(A),A&&!("host"in A)&&!("Host"in A)){let{host:s}=new kr(e.origin);A.host=s}return this[an].dispatch({...e,headers:A},r)}#e(e){return typeof e=="string"?new kr(e):e instanceof kr?e:new kr(e.uri)}async[hB](){await this[an].close(),await this[cn].close()}async[QB](){await this[an].destroy(),await this[cn].destroy()}};function rF(t){if(Array.isArray(t)){let e={};for(let r=0;rr.toLowerCase()==="proxy-authorization"))throw new fA("Proxy-Authorization should be sent in ProxyAgent constructor")}dB.exports=xc});var RB=B((tP,yB)=>{"use strict";var sF=tA(),{kClose:oF,kDestroy:nF,kClosed:fB,kDestroyed:pB,kDispatch:iF,kNoProxyAgent:Rs,kHttpProxyAgent:Xt,kHttpsProxyAgent:Fr}=$(),mB=Oc(),aF=dA(),cF={"http:":80,"https:":443},wB=!1,Yc=class extends sF{#e=null;#t=null;#r=null;constructor(e={}){super(),this.#r=e,wB||(wB=!0,process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"}));let{httpProxy:r,httpsProxy:A,noProxy:s,...o}=e;this[Rs]=new aF(o);let n=r??process.env.http_proxy??process.env.HTTP_PROXY;n?this[Xt]=new mB({...o,uri:n}):this[Xt]=this[Rs];let i=A??process.env.https_proxy??process.env.HTTPS_PROXY;i?this[Fr]=new mB({...o,uri:i}):this[Fr]=this[Xt],this.#A()}[iF](e,r){let A=new URL(e.origin);return this.#o(A).dispatch(e,r)}async[oF](){await this[Rs].close(),this[Xt][fB]||await this[Xt].close(),this[Fr][fB]||await this[Fr].close()}async[nF](e){await this[Rs].destroy(e),this[Xt][pB]||await this[Xt].destroy(e),this[Fr][pB]||await this[Fr].destroy(e)}#o(e){let{protocol:r,host:A,port:s}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),s=Number.parseInt(s,10)||cF[r]||0,this.#s(A,s)?r==="https:"?this[Fr]:this[Xt]:this[Rs]}#s(e,r){if(this.#n&&this.#A(),this.#t.length===0)return!0;if(this.#e==="*")return!1;for(let A=0;A{"use strict";var pA=C("node:assert"),{kRetryHandlerDefaultRetry:DB}=$(),{RequestRetryError:mA}=_(),{isDisturbed:TB,parseHeaders:gF,parseRangeHeader:bB,wrapRequestBody:lF}=v();function uF(t){let e=Date.now();return new Date(t).getTime()-e}function kB(t,e,r,A){let s=t["content-length"];if(s==null||!Number.isFinite(e.start)||!Number.isFinite(e.end))return null;let o=Number(s),n=e.end-e.start+1;return!Number.isFinite(o)||o!==n?new mA("Content-Length mismatch",r,{headers:t,data:{count:A}}):null}var _c=class t{constructor(e,r){let{retryOptions:A,...s}=e,{retry:o,maxRetries:n,maxTimeout:i,minTimeout:a,timeoutFactor:c,methods:g,errorCodes:l,retryAfter:u,statusCodes:E}=A??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...s,body:lF(e.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??t[DB],retryAfter:u??!0,maxTimeout:i??30*1e3,minTimeout:a??500,timeoutFactor:c??2,maxRetries:n??5,methods:g??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:E??[500,502,503,504,429],errorCodes:l??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect(h=>{this.aborted=!0,this.abort?this.abort(h):this.reason=h})}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,r,A){this.handler.onUpgrade&&this.handler.onUpgrade(e,r,A)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[DB](e,{state:r,opts:A},s){let{statusCode:o,code:n,headers:i}=e,{method:a,retryOptions:c}=A,{maxRetries:g,minTimeout:l,maxTimeout:u,timeoutFactor:E,statusCodes:h,errorCodes:d,methods:I}=c,{counter:Q}=r;if(n&&n!=="UND_ERR_REQ_RETRY"&&!d.includes(n)){s(e);return}if(Array.isArray(I)&&!I.includes(a)){s(e);return}if(o!=null&&Array.isArray(h)&&!h.includes(o)){s(e);return}if(Q>g){s(e);return}let p=i?.["retry-after"];p&&(p=Number(p),p=Number.isNaN(p)?uF(p):p*1e3);let D=p>0?Math.min(p,u):Math.min(l*E**(Q-1),u);setTimeout(()=>s(null),D)}onHeaders(e,r,A,s){let o=gF(r);if(this.retryCount+=1,e>=300)return this.retryOpts.statusCodes.includes(e)===!1?this.handler.onHeaders(e,r,A,s):(this.abort(new mA("Request failed",e,{headers:o,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new mA("server does not support the range header and the payload was partially consumed",e,{headers:o,data:{count:this.retryCount}})),!1;let i=bB(o["content-range"]);if(!i)return this.abort(new mA("Content-Range mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==o.etag)return this.abort(new mA("ETag mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;let a=kB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;return pA(this.start===c,"content-range mismatch"),pA(this.end==null||this.end===l,"content-range mismatch"),this.resume=A,!0}if(this.end==null){if(e===206){let i=bB(o["content-range"]);if(i==null)return this.handler.onHeaders(e,r,A,s);let a=kB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;pA(c!=null&&Number.isFinite(c),"content-range mismatch"),pA(l!=null&&Number.isFinite(l),"invalid content-length"),this.start=c,this.end=l}if(this.end==null){let i=o["content-length"];this.end=i!=null?Number(i)-1:null}return pA(Number.isFinite(this.start)),pA(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=A,this.etag=o.etag!=null?o.etag:null,this.etag!=null&&this.etag.startsWith("W/")&&(this.etag=null),this.handler.onHeaders(e,r,A,s)}let n=new mA("Request failed",e,{headers:o,data:{count:this.retryCount}});return this.abort(n),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||TB(this.opts.body))return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},r.bind(this));function r(A){if(A!=null||this.aborted||TB(this.opts.body))return this.handler.onError(A);if(this.start!==0){let s={range:`bytes=${this.start}-${this.end??""}`};this.etag!=null&&(s["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...s}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(s){this.handler.onError(s)}}}};FB.exports=_c});var NB=B((AP,SB)=>{"use strict";var EF=es(),hF=gn(),Jc=class extends EF{#e=null;#t=null;constructor(e,r={}){super(r),this.#e=e,this.#t=r}dispatch(e,r){let A=new hF({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:r});return this.#e.dispatch(e,A)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}};SB.exports=Jc});var zc=B((sP,_B)=>{"use strict";var vB=C("node:assert"),{Readable:QF}=C("node:stream"),{RequestAbortedError:xB,NotSupportedError:BF,InvalidArgumentError:IF,AbortError:Pc}=_(),OB=v(),{ReadableStreamFrom:CF}=v(),Me=Symbol("kConsume"),Ds=Symbol("kReading"),$t=Symbol("kBody"),UB=Symbol("kAbort"),YB=Symbol("kContentType"),GB=Symbol("kContentLength"),dF=()=>{},Hc=class extends QF{constructor({resume:e,abort:r,contentType:A="",contentLength:s,highWaterMark:o=64*1024}){super({autoDestroy:!0,read:e,highWaterMark:o}),this._readableState.dataEmitted=!1,this[UB]=r,this[Me]=null,this[$t]=null,this[YB]=A,this[GB]=s,this[Ds]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new xB),e&&this[UB](),super.destroy(e)}_destroy(e,r){this[Ds]?r(e):setImmediate(()=>{r(e)})}on(e,...r){return(e==="data"||e==="readable")&&(this[Ds]=!0),super.on(e,...r)}addListener(e,...r){return this.on(e,...r)}off(e,...r){let A=super.off(e,...r);return(e==="data"||e==="readable")&&(this[Ds]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,...r){return this.off(e,...r)}push(e){return this[Me]&&e!==null?(qc(this[Me],e),this[Ds]?super.push(e):!0):super.push(e)}async text(){return Ts(this,"text")}async json(){return Ts(this,"json")}async blob(){return Ts(this,"blob")}async bytes(){return Ts(this,"bytes")}async arrayBuffer(){return Ts(this,"arrayBuffer")}async formData(){throw new BF}get bodyUsed(){return OB.isDisturbed(this)}get body(){return this[$t]||(this[$t]=CF(this),this[Me]&&(this[$t].getReader(),vB(this[$t].locked))),this[$t]}async dump(e){let r=Number.isFinite(e?.limit)?e.limit:131072,A=e?.signal;if(A!=null&&(typeof A!="object"||!("aborted"in A)))throw new IF("signal must be an AbortSignal");return A?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((s,o)=>{this[GB]>r&&this.destroy(new Pc);let n=()=>{this.destroy(A.reason??new Pc)};A?.addEventListener("abort",n),this.on("close",function(){A?.removeEventListener("abort",n),A?.aborted?o(A.reason??new Pc):s(null)}).on("error",dF).on("data",function(i){r-=i.length,r<=0&&this.destroy()}).resume()})}};function fF(t){return t[$t]&&t[$t].locked===!0||t[Me]}function pF(t){return OB.isDisturbed(t)||fF(t)}async function Ts(t,e){return vB(!t[Me]),new Promise((r,A)=>{if(pF(t)){let s=t._readableState;s.destroyed&&s.closeEmitted===!1?t.on("error",o=>{A(o)}).on("close",()=>{A(new TypeError("unusable"))}):A(s.errored??new TypeError("unusable"))}else queueMicrotask(()=>{t[Me]={type:e,stream:t,resolve:r,reject:A,length:0,body:[]},t.on("error",function(s){Wc(this[Me],s)}).on("close",function(){this[Me].body!==null&&Wc(this[Me],new xB)}),mF(t[Me])})})}function mF(t){if(t.body===null)return;let{_readableState:e}=t.stream;if(e.bufferIndex){let r=e.bufferIndex,A=e.buffer.length;for(let s=r;s2&&r[0]===239&&r[1]===187&&r[2]===191?3:0;return r.utf8Slice(s,A)}function LB(t,e){if(t.length===0||e===0)return new Uint8Array(0);if(t.length===1)return new Uint8Array(t[0]);let r=new Uint8Array(Buffer.allocUnsafeSlow(e).buffer),A=0;for(let s=0;s{var wF=C("node:assert"),{ResponseStatusCodeError:JB}=_(),{chunksDecode:PB}=zc(),yF=128*1024;async function RF({callback:t,body:e,contentType:r,statusCode:A,statusMessage:s,headers:o}){wF(e);let n=[],i=0;try{for await(let l of e)if(n.push(l),i+=l.length,i>yF){n=[],i=0;break}}catch{n=[],i=0}let a=`Response status code ${A}${s?`: ${s}`:""}`;if(A===204||!r||!i){queueMicrotask(()=>t(new JB(a,A,o)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let g;try{HB(r)?g=JSON.parse(PB(n,i)):VB(r)&&(g=PB(n,i))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>t(new JB(a,A,o,g)))}var HB=t=>t.length>15&&t[11]==="/"&&t[0]==="a"&&t[1]==="p"&&t[2]==="p"&&t[3]==="l"&&t[4]==="i"&&t[5]==="c"&&t[6]==="a"&&t[7]==="t"&&t[8]==="i"&&t[9]==="o"&&t[10]==="n"&&t[12]==="j"&&t[13]==="s"&&t[14]==="o"&&t[15]==="n",VB=t=>t.length>4&&t[4]==="/"&&t[0]==="t"&&t[1]==="e"&&t[2]==="x"&&t[3]==="t";qB.exports={getResolveErrorBodyCallback:RF,isContentTypeApplicationJson:HB,isContentTypeText:VB}});var ZB=B((nP,jc)=>{"use strict";var DF=C("node:assert"),{Readable:TF}=zc(),{InvalidArgumentError:wA,RequestAbortedError:WB}=_(),ve=v(),{getResolveErrorBodyCallback:bF}=Zc(),{AsyncResource:kF}=C("node:async_hooks"),ln=class extends kF{constructor(e,r){if(!e||typeof e!="object")throw new wA("invalid opts");let{signal:A,method:s,opaque:o,body:n,onInfo:i,responseHeaders:a,throwOnError:c,highWaterMark:g}=e;try{if(typeof r!="function")throw new wA("invalid callback");if(g&&(typeof g!="number"||g<0))throw new wA("invalid highWaterMark");if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new wA("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new wA("invalid method");if(i&&typeof i!="function")throw new wA("invalid onInfo callback");super("UNDICI_REQUEST")}catch(l){throw ve.isStream(n)&&ve.destroy(n.on("error",ve.nop),l),l}this.method=s,this.responseHeaders=a||null,this.opaque=o||null,this.callback=r,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=i||null,this.throwOnError=c,this.highWaterMark=g,this.signal=A,this.reason=null,this.removeAbortListener=null,ve.isStream(n)&&n.on("error",l=>{this.onError(l)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new WB:this.removeAbortListener=ve.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new WB,this.res?ve.destroy(this.res.on("error",ve.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&(this.res?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}))}onConnect(e,r){if(this.reason){e(this.reason);return}DF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{callback:o,opaque:n,abort:i,context:a,responseHeaders:c,highWaterMark:g}=this,l=c==="raw"?ve.parseRawHeaders(r):ve.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:l});return}let u=c==="raw"?ve.parseHeaders(r):l,E=u["content-type"],h=u["content-length"],d=new TF({resume:A,abort:i,contentType:E,contentLength:this.method!=="HEAD"&&h?Number(h):null,highWaterMark:g});this.removeAbortListener&&d.on("close",this.removeAbortListener),this.callback=null,this.res=d,o!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(bF,null,{callback:o,body:d,contentType:E,statusCode:e,statusMessage:s,headers:l}):this.runInAsyncScope(o,null,null,{statusCode:e,headers:l,trailers:this.trailers,opaque:n,body:d,context:a}))}onData(e){return this.res.push(e)}onComplete(e){ve.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:r,callback:A,body:s,opaque:o}=this;A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:o})})),r&&(this.res=null,queueMicrotask(()=>{ve.destroy(r,e)})),s&&(this.body=null,ve.destroy(s,e)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function zB(t,e){if(e===void 0)return new Promise((r,A)=>{zB.call(this,t,(s,o)=>s?A(s):r(o))});try{this.dispatch(t,new ln(t,e))}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}jc.exports=zB;jc.exports.RequestHandler=ln});var bs=B((iP,XB)=>{var{addAbortListener:FF}=v(),{RequestAbortedError:SF}=_(),yA=Symbol("kListener"),Ct=Symbol("kSignal");function jB(t){t.abort?t.abort(t[Ct]?.reason):t.reason=t[Ct]?.reason??new SF,KB(t)}function NF(t,e){if(t.reason=null,t[Ct]=null,t[yA]=null,!!e){if(e.aborted){jB(t);return}t[Ct]=e,t[yA]=()=>{jB(t)},FF(t[Ct],t[yA])}}function KB(t){t[Ct]&&("removeEventListener"in t[Ct]?t[Ct].removeEventListener("abort",t[yA]):t[Ct].removeListener("abort",t[yA]),t[Ct]=null,t[yA]=null)}XB.exports={addSignal:NF,removeSignal:KB}});var rI=B((aP,tI)=>{"use strict";var UF=C("node:assert"),{finished:GF,PassThrough:LF}=C("node:stream"),{InvalidArgumentError:RA,InvalidReturnValueError:MF}=_(),nt=v(),{getResolveErrorBodyCallback:vF}=Zc(),{AsyncResource:xF}=C("node:async_hooks"),{addSignal:OF,removeSignal:$B}=bs(),Kc=class extends xF{constructor(e,r,A){if(!e||typeof e!="object")throw new RA("invalid opts");let{signal:s,method:o,opaque:n,body:i,onInfo:a,responseHeaders:c,throwOnError:g}=e;try{if(typeof A!="function")throw new RA("invalid callback");if(typeof r!="function")throw new RA("invalid factory");if(s&&typeof s.on!="function"&&typeof s.addEventListener!="function")throw new RA("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new RA("invalid method");if(a&&typeof a!="function")throw new RA("invalid onInfo callback");super("UNDICI_STREAM")}catch(l){throw nt.isStream(i)&&nt.destroy(i.on("error",nt.nop),l),l}this.responseHeaders=c||null,this.opaque=n||null,this.factory=r,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=i,this.onInfo=a||null,this.throwOnError=g||!1,nt.isStream(i)&&i.on("error",l=>{this.onError(l)}),OF(this,s)}onConnect(e,r){if(this.reason){e(this.reason);return}UF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{factory:o,opaque:n,context:i,callback:a,responseHeaders:c}=this,g=c==="raw"?nt.parseRawHeaders(r):nt.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:g});return}this.factory=null;let l;if(this.throwOnError&&e>=400){let h=(c==="raw"?nt.parseHeaders(r):g)["content-type"];l=new LF,this.callback=null,this.runInAsyncScope(vF,null,{callback:a,body:l,contentType:h,statusCode:e,statusMessage:s,headers:g})}else{if(o===null)return;if(l=this.runInAsyncScope(o,null,{statusCode:e,headers:g,opaque:n,context:i}),!l||typeof l.write!="function"||typeof l.end!="function"||typeof l.on!="function")throw new MF("expected Writable");GF(l,{readable:!1},E=>{let{callback:h,res:d,opaque:I,trailers:Q,abort:p}=this;this.res=null,(E||!d.readable)&&nt.destroy(d,E),this.callback=null,this.runInAsyncScope(h,null,E||null,{opaque:I,trailers:Q}),E&&p()})}return l.on("drain",A),this.res=l,(l.writableNeedDrain!==void 0?l.writableNeedDrain:l._writableState?.needDrain)!==!0}onData(e){let{res:r}=this;return r?r.write(e):!0}onComplete(e){let{res:r}=this;$B(this),r&&(this.trailers=nt.parseHeaders(e),r.end())}onError(e){let{res:r,callback:A,opaque:s,body:o}=this;$B(this),this.factory=null,r?(this.res=null,nt.destroy(r,e)):A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:s})})),o&&(this.body=null,nt.destroy(o,e))}};function eI(t,e,r){if(r===void 0)return new Promise((A,s)=>{eI.call(this,t,e,(o,n)=>o?s(o):A(n))});try{this.dispatch(t,new Kc(t,e,r))}catch(A){if(typeof r!="function")throw A;let s=t?.opaque;queueMicrotask(()=>r(A,{opaque:s}))}}tI.exports=eI});var nI=B((cP,oI)=>{"use strict";var{Readable:sI,Duplex:YF,PassThrough:_F}=C("node:stream"),{InvalidArgumentError:ks,InvalidReturnValueError:JF,RequestAbortedError:Xc}=_(),ze=v(),{AsyncResource:PF}=C("node:async_hooks"),{addSignal:HF,removeSignal:VF}=bs(),AI=C("node:assert"),DA=Symbol("resume"),$c=class extends sI{constructor(){super({autoDestroy:!0}),this[DA]=null}_read(){let{[DA]:e}=this;e&&(this[DA]=null,e())}_destroy(e,r){this._read(),r(e)}},eg=class extends sI{constructor(e){super({autoDestroy:!0}),this[DA]=e}_read(){this[DA]()}_destroy(e,r){!e&&!this._readableState.endEmitted&&(e=new Xc),r(e)}},tg=class extends PF{constructor(e,r){if(!e||typeof e!="object")throw new ks("invalid opts");if(typeof r!="function")throw new ks("invalid handler");let{signal:A,method:s,opaque:o,onInfo:n,responseHeaders:i}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new ks("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new ks("invalid method");if(n&&typeof n!="function")throw new ks("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=o||null,this.responseHeaders=i||null,this.handler=r,this.abort=null,this.context=null,this.onInfo=n||null,this.req=new $c().on("error",ze.nop),this.ret=new YF({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:a}=this;a?.resume&&a.resume()},write:(a,c,g)=>{let{req:l}=this;l.push(a,c)||l._readableState.destroyed?g():l[DA]=g},destroy:(a,c)=>{let{body:g,req:l,res:u,ret:E,abort:h}=this;!a&&!E._readableState.endEmitted&&(a=new Xc),h&&a&&h(),ze.destroy(g,a),ze.destroy(l,a),ze.destroy(u,a),VF(this),c(a)}}).on("prefinish",()=>{let{req:a}=this;a.push(null)}),this.res=null,HF(this,A)}onConnect(e,r){let{ret:A,res:s}=this;if(this.reason){e(this.reason);return}AI(!s,"pipeline cannot be retried"),AI(!A.destroyed),this.abort=e,this.context=r}onHeaders(e,r,A){let{opaque:s,handler:o,context:n}=this;if(e<200){if(this.onInfo){let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);this.onInfo({statusCode:e,headers:a})}return}this.res=new eg(A);let i;try{this.handler=null;let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);i=this.runInAsyncScope(o,null,{statusCode:e,headers:a,opaque:s,body:this.res,context:n})}catch(a){throw this.res.on("error",ze.nop),a}if(!i||typeof i.on!="function")throw new JF("expected Readable");i.on("data",a=>{let{ret:c,body:g}=this;!c.push(a)&&g.pause&&g.pause()}).on("error",a=>{let{ret:c}=this;ze.destroy(c,a)}).on("end",()=>{let{ret:a}=this;a.push(null)}).on("close",()=>{let{ret:a}=this;a._readableState.ended||ze.destroy(a,new Xc)}),this.body=i}onData(e){let{res:r}=this;return r.push(e)}onComplete(e){let{res:r}=this;r.push(null)}onError(e){let{ret:r}=this;this.handler=null,ze.destroy(r,e)}};function qF(t,e){try{let r=new tg(t,e);return this.dispatch({...t,body:r.req},r),r.ret}catch(r){return new _F().destroy(r)}}oI.exports=qF});var uI=B((gP,lI)=>{"use strict";var{InvalidArgumentError:rg,SocketError:WF}=_(),{AsyncResource:zF}=C("node:async_hooks"),iI=v(),{addSignal:ZF,removeSignal:aI}=bs(),cI=C("node:assert"),Ag=class extends zF{constructor(e,r){if(!e||typeof e!="object")throw new rg("invalid opts");if(typeof r!="function")throw new rg("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new rg("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=o||null,this.opaque=s||null,this.callback=r,this.abort=null,this.context=null,ZF(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}cI(this.callback),this.abort=e,this.context=null}onHeaders(){throw new WF("bad upgrade",null)}onUpgrade(e,r,A){cI(e===101);let{callback:s,opaque:o,context:n}=this;aI(this),this.callback=null;let i=this.responseHeaders==="raw"?iI.parseRawHeaders(r):iI.parseHeaders(r);this.runInAsyncScope(s,null,null,{headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;aI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function gI(t,e){if(e===void 0)return new Promise((r,A)=>{gI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new Ag(t,e);this.dispatch({...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}lI.exports=gI});var II=B((lP,BI)=>{"use strict";var jF=C("node:assert"),{AsyncResource:KF}=C("node:async_hooks"),{InvalidArgumentError:sg,SocketError:XF}=_(),EI=v(),{addSignal:$F,removeSignal:hI}=bs(),og=class extends KF{constructor(e,r){if(!e||typeof e!="object")throw new sg("invalid opts");if(typeof r!="function")throw new sg("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new sg("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=s||null,this.responseHeaders=o||null,this.callback=r,this.abort=null,$F(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}jF(this.callback),this.abort=e,this.context=r}onHeaders(){throw new XF("bad connect",null)}onUpgrade(e,r,A){let{callback:s,opaque:o,context:n}=this;hI(this),this.callback=null;let i=r;i!=null&&(i=this.responseHeaders==="raw"?EI.parseRawHeaders(r):EI.parseHeaders(r)),this.runInAsyncScope(s,null,null,{statusCode:e,headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;hI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function QI(t,e){if(e===void 0)return new Promise((r,A)=>{QI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new og(t,e);this.dispatch({...t,method:"CONNECT"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}BI.exports=QI});var CI=B((uP,TA)=>{"use strict";TA.exports.request=ZB();TA.exports.stream=rI();TA.exports.pipeline=nI();TA.exports.upgrade=uI();TA.exports.connect=II()});var ig=B((EP,fI)=>{"use strict";var{UndiciError:eS}=_(),dI=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),ng=class t extends eS{constructor(e){super(e),Error.captureStackTrace(this,t),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&e[dI]===!0}[dI]=!0};fI.exports={MockNotMatchedError:ng}});var bA=B((hP,pI)=>{"use strict";pI.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var Fs=B((QP,NI)=>{"use strict";var{MockNotMatchedError:Sr}=ig(),{kDispatches:un,kMockAgent:tS,kOriginalDispatch:rS,kOrigin:AS,kGetNetConnect:sS}=bA(),{buildURL:oS}=v(),{STATUS_CODES:nS}=C("node:http"),{types:{isPromise:iS}}=C("node:util");function Gt(t,e){return typeof t=="string"?t===e:t instanceof RegExp?t.test(e):typeof t=="function"?t(e)===!0:!1}function wI(t){return Object.fromEntries(Object.entries(t).map(([e,r])=>[e.toLocaleLowerCase(),r]))}function yI(t,e){if(Array.isArray(t)){for(let r=0;r"u")return!0;if(typeof e!="object"||typeof t.headers!="object")return!1;for(let[r,A]of Object.entries(t.headers)){let s=yI(e,r);if(!Gt(A,s))return!1}return!0}function mI(t){if(typeof t!="string")return t;let e=t.split("?");if(e.length!==2)return t;let r=new URLSearchParams(e.pop());return r.sort(),[...e,r.toString()].join("?")}function aS(t,{path:e,method:r,body:A,headers:s}){let o=Gt(t.path,e),n=Gt(t.method,r),i=typeof t.body<"u"?Gt(t.body,A):!0,a=RI(t,s);return o&&n&&i&&a}function DI(t){return Buffer.isBuffer(t)||t instanceof Uint8Array||t instanceof ArrayBuffer?t:typeof t=="object"?JSON.stringify(t):t.toString()}function TI(t,e){let r=e.query?oS(e.path,e.query):e.path,A=typeof r=="string"?mI(r):r,s=t.filter(({consumed:o})=>!o).filter(({path:o})=>Gt(mI(o),A));if(s.length===0)throw new Sr(`Mock dispatch not matched for path '${A}'`);if(s=s.filter(({method:o})=>Gt(o,e.method)),s.length===0)throw new Sr(`Mock dispatch not matched for method '${e.method}' on path '${A}'`);if(s=s.filter(({body:o})=>typeof o<"u"?Gt(o,e.body):!0),s.length===0)throw new Sr(`Mock dispatch not matched for body '${e.body}' on path '${A}'`);if(s=s.filter(o=>RI(o,e.headers)),s.length===0){let o=typeof e.headers=="object"?JSON.stringify(e.headers):e.headers;throw new Sr(`Mock dispatch not matched for headers '${o}' on path '${A}'`)}return s[0]}function cS(t,e,r){let A={timesInvoked:0,times:1,persist:!1,consumed:!1},s=typeof r=="function"?{callback:r}:{...r},o={...A,...e,pending:!0,data:{error:null,...s}};return t.push(o),o}function ag(t,e){let r=t.findIndex(A=>A.consumed?aS(A,e):!1);r!==-1&&t.splice(r,1)}function bI(t){let{path:e,method:r,body:A,headers:s,query:o}=t;return{path:e,method:r,body:A,headers:s,query:o}}function cg(t){let e=Object.keys(t),r=[];for(let A=0;A=u,A.pending=l0?setTimeout(()=>{E(this[un])},c):E(this[un]);function E(d,I=o){let Q=Array.isArray(t.headers)?gg(t.headers):t.headers,p=typeof I=="function"?I({...t,headers:Q}):I;if(iS(p)){p.then(Z=>E(d,Z));return}let D=DI(p),R=cg(n),H=cg(i);e.onConnect?.(Z=>e.onError(Z),null),e.onHeaders?.(s,R,h,kI(s)),e.onData?.(Buffer.from(D)),e.onComplete?.(H),ag(d,r)}function h(){}return!0}function lS(){let t=this[tS],e=this[AS],r=this[rS];return function(s,o){if(t.isMockActive)try{FI.call(this,s,o)}catch(n){if(n instanceof Sr){let i=t[sS]();if(i===!1)throw new Sr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect disabled)`);if(SI(i,e))r.call(this,s,o);else throw new Sr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect is not enabled for this origin)`)}else throw n}else r.call(this,s,o)}}function SI(t,e){let r=new URL(e);return t===!0?!0:!!(Array.isArray(t)&&t.some(A=>Gt(A,r.host)))}function uS(t){if(t){let{agent:e,...r}=t;return r}}NI.exports={getResponseData:DI,getMockDispatch:TI,addMockDispatch:cS,deleteMockDispatch:ag,buildKey:bI,generateKeyValues:cg,matchValue:Gt,getResponse:gS,getStatusText:kI,mockDispatch:FI,buildMockDispatch:lS,checkNetConnect:SI,buildMockOptions:uS,getHeaderByName:yI,buildHeadersFromArray:gg}});var Ig=B((BP,Bg)=>{"use strict";var{getResponseData:ES,buildKey:hS,addMockDispatch:lg}=Fs(),{kDispatches:En,kDispatchKey:hn,kDefaultHeaders:ug,kDefaultTrailers:Eg,kContentLength:hg,kMockDispatch:Qn}=bA(),{InvalidArgumentError:dt}=_(),{buildURL:QS}=v(),kA=class{constructor(e){this[Qn]=e}delay(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("waitInMs must be a valid integer > 0");return this[Qn].delay=e,this}persist(){return this[Qn].persist=!0,this}times(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("repeatTimes must be a valid integer > 0");return this[Qn].times=e,this}},Qg=class{constructor(e,r){if(typeof e!="object")throw new dt("opts must be an object");if(typeof e.path>"u")throw new dt("opts.path must be defined");if(typeof e.method>"u"&&(e.method="GET"),typeof e.path=="string")if(e.query)e.path=QS(e.path,e.query);else{let A=new URL(e.path,"data://");e.path=A.pathname+A.search}typeof e.method=="string"&&(e.method=e.method.toUpperCase()),this[hn]=hS(e),this[En]=r,this[ug]={},this[Eg]={},this[hg]=!1}createMockScopeDispatchData({statusCode:e,data:r,responseOptions:A}){let s=ES(r),o=this[hg]?{"content-length":s.length}:{},n={...this[ug],...o,...A.headers},i={...this[Eg],...A.trailers};return{statusCode:e,data:r,headers:n,trailers:i}}validateReplyParameters(e){if(typeof e.statusCode>"u")throw new dt("statusCode must be defined");if(typeof e.responseOptions!="object"||e.responseOptions===null)throw new dt("responseOptions must be an object")}reply(e){if(typeof e=="function"){let o=i=>{let a=e(i);if(typeof a!="object"||a===null)throw new dt("reply options callback must return an object");let c={data:"",responseOptions:{},...a};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},n=lg(this[En],this[hn],o);return new kA(n)}let r={statusCode:e,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(r);let A=this.createMockScopeDispatchData(r),s=lg(this[En],this[hn],A);return new kA(s)}replyWithError(e){if(typeof e>"u")throw new dt("error must be defined");let r=lg(this[En],this[hn],{error:e});return new kA(r)}defaultReplyHeaders(e){if(typeof e>"u")throw new dt("headers must be defined");return this[ug]=e,this}defaultReplyTrailers(e){if(typeof e>"u")throw new dt("trailers must be defined");return this[Eg]=e,this}replyContentLength(){return this[hg]=!0,this}};Bg.exports.MockInterceptor=Qg;Bg.exports.MockScope=kA});var fg=B((IP,OI)=>{"use strict";var{promisify:BS}=C("node:util"),IS=IA(),{buildMockDispatch:CS}=Fs(),{kDispatches:UI,kMockAgent:GI,kClose:LI,kOriginalClose:MI,kOrigin:vI,kOriginalDispatch:dS,kConnected:Cg}=bA(),{MockInterceptor:fS}=Ig(),xI=$(),{InvalidArgumentError:pS}=_(),dg=class extends IS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new pS("Argument opts.agent must implement Agent");this[GI]=r.agent,this[vI]=e,this[UI]=[],this[Cg]=1,this[dS]=this.dispatch,this[MI]=this.close.bind(this),this.dispatch=CS.call(this),this.close=this[LI]}get[xI.kConnected](){return this[Cg]}intercept(e){return new fS(e,this[UI])}async[LI](){await BS(this[MI])(),this[Cg]=0,this[GI][xI.kClients].delete(this[vI])}};OI.exports=dg});var wg=B((CP,qI)=>{"use strict";var{promisify:mS}=C("node:util"),wS=CA(),{buildMockDispatch:yS}=Fs(),{kDispatches:YI,kMockAgent:_I,kClose:JI,kOriginalClose:PI,kOrigin:HI,kOriginalDispatch:RS,kConnected:pg}=bA(),{MockInterceptor:DS}=Ig(),VI=$(),{InvalidArgumentError:TS}=_(),mg=class extends wS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new TS("Argument opts.agent must implement Agent");this[_I]=r.agent,this[HI]=e,this[YI]=[],this[pg]=1,this[RS]=this.dispatch,this[PI]=this.close.bind(this),this.dispatch=yS.call(this),this.close=this[JI]}get[VI.kConnected](){return this[pg]}intercept(e){return new DS(e,this[YI])}async[JI](){await mS(this[PI])(),this[pg]=0,this[_I][VI.kClients].delete(this[HI])}};qI.exports=mg});var zI=B((fP,WI)=>{"use strict";var bS={pronoun:"it",is:"is",was:"was",this:"this"},kS={pronoun:"they",is:"are",was:"were",this:"these"};WI.exports=class{constructor(e,r){this.singular=e,this.plural=r}pluralize(e){let r=e===1,A=r?bS:kS,s=r?this.singular:this.plural;return{...A,count:e,noun:s}}}});var jI=B((mP,ZI)=>{"use strict";var{Transform:FS}=C("node:stream"),{Console:SS}=C("node:console"),NS=process.versions.icu?"\u2705":"Y ",US=process.versions.icu?"\u274C":"N ";ZI.exports=class{constructor({disableColors:e}={}){this.transform=new FS({transform(r,A,s){s(null,r)}}),this.logger=new SS({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let r=e.map(({method:A,path:s,data:{statusCode:o},persist:n,times:i,timesInvoked:a,origin:c})=>({Method:A,Origin:c,Path:s,"Status code":o,Persistent:n?NS:US,Invocations:a,Remaining:n?1/0:i-a}));return this.logger.table(r),this.transform.read().toString()}}});var eC=B((wP,$I)=>{"use strict";var{kClients:Nr}=$(),GS=dA(),{kAgent:yg,kMockAgentSet:Bn,kMockAgentGet:KI,kDispatches:Rg,kIsMockActive:In,kNetConnect:Ur,kGetNetConnect:LS,kOptions:Cn,kFactory:dn}=bA(),MS=fg(),vS=wg(),{matchValue:xS,buildMockOptions:OS}=Fs(),{InvalidArgumentError:XI,UndiciError:YS}=_(),_S=es(),JS=zI(),PS=jI(),Dg=class extends _S{constructor(e){if(super(e),this[Ur]=!0,this[In]=!0,e?.agent&&typeof e.agent.dispatch!="function")throw new XI("Argument opts.agent must implement Agent");let r=e?.agent?e.agent:new GS(e);this[yg]=r,this[Nr]=r[Nr],this[Cn]=OS(e)}get(e){let r=this[KI](e);return r||(r=this[dn](e),this[Bn](e,r)),r}dispatch(e,r){return this.get(e.origin),this[yg].dispatch(e,r)}async close(){await this[yg].close(),this[Nr].clear()}deactivate(){this[In]=!1}activate(){this[In]=!0}enableNetConnect(e){if(typeof e=="string"||typeof e=="function"||e instanceof RegExp)Array.isArray(this[Ur])?this[Ur].push(e):this[Ur]=[e];else if(typeof e>"u")this[Ur]=!0;else throw new XI("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[Ur]=!1}get isMockActive(){return this[In]}[Bn](e,r){this[Nr].set(e,r)}[dn](e){let r=Object.assign({agent:this},this[Cn]);return this[Cn]&&this[Cn].connections===1?new MS(e,r):new vS(e,r)}[KI](e){let r=this[Nr].get(e);if(r)return r;if(typeof e!="string"){let A=this[dn]("http://localhost:9999");return this[Bn](e,A),A}for(let[A,s]of Array.from(this[Nr]))if(s&&typeof A!="string"&&xS(A,e)){let o=this[dn](e);return this[Bn](e,o),o[Rg]=s[Rg],o}}[LS](){return this[Ur]}pendingInterceptors(){let e=this[Nr];return Array.from(e.entries()).flatMap(([r,A])=>A[Rg].map(s=>({...s,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new PS}={}){let r=this.pendingInterceptors();if(r.length===0)return;let A=new JS("interceptor","interceptors").pluralize(r.length);throw new YS(` ${A.count} ${A.noun} ${A.is} pending: ${e.format(r)} -`.trim())}};tC.exports=Tg});var fn=B((pP,nC)=>{"use strict";var AC=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:jS}=Y(),KS=CA();oC()===void 0&&sC(new KS);function sC(t){if(!t||typeof t.dispatch!="function")throw new jS("Argument agent must implement Agent");Object.defineProperty(globalThis,AC,{value:t,writable:!0,enumerable:!1,configurable:!1})}function oC(){return globalThis[AC]}nC.exports={setGlobalDispatcher:sC,getGlobalDispatcher:oC}});var pn=B((wP,iC)=>{"use strict";iC.exports=class{#e;constructor(e){if(typeof e!="object"||e===null)throw new TypeError("handler must be an object");this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}});var cC=B((yP,aC)=>{"use strict";var XS=Xo();aC.exports=t=>{let e=t?.maxRedirections;return r=>function(s,o){let{maxRedirections:n=e,...i}=s;if(!n)return r(s,o);let a=new XS(r,n,s,o);return r(i,a)}}});var lC=B((RP,gC)=>{"use strict";var $S=gn();gC.exports=t=>e=>function(A,s){return e(A,new $S({...A,retryOptions:{...t,...A.retryOptions}},{handler:s,dispatch:e}))}});var EC=B((DP,uC)=>{"use strict";var eN=M(),{InvalidArgumentError:tN,RequestAbortedError:rN}=Y(),AN=pn(),bg=class extends AN{#e=1024*1024;#t=null;#r=!1;#o=!1;#s=0;#A=null;#n=null;constructor({maxSize:e},r){if(super(r),e!=null&&(!Number.isFinite(e)||e<1))throw new tN("maxSize must be a number greater than 0");this.#e=e??this.#e,this.#n=r}onConnect(e){this.#t=e,this.#n.onConnect(this.#i.bind(this))}#i(e){this.#o=!0,this.#A=e}onHeaders(e,r,A,s){let n=eN.parseHeaders(r)["content-length"];if(n!=null&&n>this.#e)throw new rN(`Response size (${n}) larger than maxSize (${this.#e})`);return this.#o?!0:this.#n.onHeaders(e,r,A,s)}onError(e){this.#r||(e=this.#A??e,this.#n.onError(e))}onData(e){return this.#s=this.#s+e.length,this.#s>=this.#e&&(this.#r=!0,this.#o?this.#n.onError(this.#A):this.#n.onComplete([])),!0}onComplete(e){if(!this.#r){if(this.#o){this.#n.onError(this.reason);return}this.#n.onComplete(e)}}};function sN({maxSize:t}={maxSize:1024*1024}){return e=>function(A,s){let{dumpMaxSize:o=t}=A,n=new bg({maxSize:o},s);return e(A,n)}}uC.exports=sN});var BC=B((TP,QC)=>{"use strict";var{isIP:oN}=require("node:net"),{lookup:nN}=require("node:dns"),iN=pn(),{InvalidArgumentError:kA,InformationalError:aN}=Y(),hC=Math.pow(2,31)-1,kg=class{#e=0;#t=0;#r=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#o,this.pick=e.pick??this.#s}get full(){return this.#r.size===this.#t}runLookup(e,r,A){let s=this.#r.get(e.hostname);if(s==null&&this.full){A(null,e.origin);return}let o={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...r.dns,maxTTL:this.#e,maxItems:this.#t};if(s==null)this.lookup(e,o,(n,i)=>{if(n||i==null||i.length===0){A(n??new aN("No DNS entries found"));return}this.setRecords(e,i);let a=this.#r.get(e.hostname),c=this.pick(e,a,o.affinity),g;typeof c.port=="number"?g=`:${c.port}`:e.port!==""?g=`:${e.port}`:g="",A(null,`${e.protocol}//${c.family===6?`[${c.address}]`:c.address}${g}`)});else{let n=this.pick(e,s,o.affinity);if(n==null){this.#r.delete(e.hostname),this.runLookup(e,r,A);return}let i;typeof n.port=="number"?i=`:${n.port}`:e.port!==""?i=`:${e.port}`:i="",A(null,`${e.protocol}//${n.family===6?`[${n.address}]`:n.address}${i}`)}}#o(e,r,A){nN(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(s,o)=>{if(s)return A(s);let n=new Map;for(let i of o)n.set(`${i.address}:${i.family}`,i);A(null,n.values())})}#s(e,r,A){let s=null,{records:o,offset:n}=r,i;if(this.dualStack?(A==null&&(n==null||n===hC?(r.offset=0,A=4):(r.offset++,A=(r.offset&1)===1?6:4)),o[A]!=null&&o[A].ips.length>0?i=o[A]:i=o[A===4?6:4]):i=o[A],i==null||i.ips.length===0)return s;i.offset==null||i.offset===hC?i.offset=0:i.offset++;let a=i.offset%i.ips.length;return s=i.ips[a]??null,s==null?s:Date.now()-s.timestamp>s.ttl?(i.ips.splice(a,1),this.pick(e,r,A)):s}setRecords(e,r){let A=Date.now(),s={records:{4:null,6:null}};for(let o of r){o.timestamp=A,typeof o.ttl=="number"?o.ttl=Math.min(o.ttl,this.#e):o.ttl=this.#e;let n=s.records[o.family]??{ips:[]};n.ips.push(o),s.records[o.family]=n}this.#r.set(e.hostname,s)}getHandler(e,r){return new Fg(this,e,r)}},Fg=class extends iN{#e=null;#t=null;#r=null;#o=null;#s=null;constructor(e,{origin:r,handler:A,dispatch:s},o){super(A),this.#s=r,this.#o=A,this.#t={...o},this.#e=e,this.#r=s}onError(e){switch(e.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#s,this.#t,(r,A)=>{if(r)return this.#o.onError(r);let s={...this.#t,origin:A};this.#r(s,this)});return}this.#o.onError(e);return}case"ENOTFOUND":this.#e.deleteRecord(this.#s);default:this.#o.onError(e);break}}};QC.exports=t=>{if(t?.maxTTL!=null&&(typeof t?.maxTTL!="number"||t?.maxTTL<0))throw new kA("Invalid maxTTL. Must be a positive number");if(t?.maxItems!=null&&(typeof t?.maxItems!="number"||t?.maxItems<1))throw new kA("Invalid maxItems. Must be a positive number and greater than zero");if(t?.affinity!=null&&t?.affinity!==4&&t?.affinity!==6)throw new kA("Invalid affinity. Must be either 4 or 6");if(t?.dualStack!=null&&typeof t?.dualStack!="boolean")throw new kA("Invalid dualStack. Must be a boolean");if(t?.lookup!=null&&typeof t?.lookup!="function")throw new kA("Invalid lookup. Must be a function");if(t?.pick!=null&&typeof t?.pick!="function")throw new kA("Invalid pick. Must be a function");let e=t?.dualStack??!0,r;e?r=t?.affinity??null:r=t?.affinity??4;let A={maxTTL:t?.maxTTL??1e4,lookup:t?.lookup??null,pick:t?.pick??null,dualStack:e,affinity:r,maxItems:t?.maxItems??1/0},s=new kg(A);return o=>function(i,a){let c=i.origin.constructor===URL?i.origin:new URL(i.origin);return oN(c.hostname)!==0?o(i,a):(s.runLookup(c,i,(g,l)=>{if(g)return a.onError(g);let u=null;u={...i,servername:c.hostname,origin:l,headers:{host:c.hostname,...i.headers}},o(u,s.getHandler({origin:c,dispatch:o,handler:a},i))}),!0)}}});var Ur=B((bP,wC)=>{"use strict";var{kConstruct:cN}=$(),{kEnumerableProperty:FA}=M(),{iteratorMixin:gN,isValidHeaderName:Fs,isValidHeaderValue:CC}=Ge(),{webidl:O}=Qe(),Sg=require("node:assert"),mn=require("node:util"),ge=Symbol("headers map"),xe=Symbol("headers map sorted");function IC(t){return t===10||t===13||t===9||t===32}function dC(t){let e=0,r=t.length;for(;r>e&&IC(t.charCodeAt(r-1));)--r;for(;r>e&&IC(t.charCodeAt(e));)++e;return e===0&&r===t.length?t:t.substring(e,r)}function fC(t,e){if(Array.isArray(e))for(let r=0;r>","record"]})}function Ng(t,e,r){if(r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"});if(mC(t)==="immutable")throw new TypeError("immutable");return Ug(t).append(e,r,!1)}function pC(t,e){return t[0]>1),r[c][0]<=g[0]?a=c+1:i=c;if(o!==c){for(n=o;n>a;)r[n]=r[--n];r[a]=g}}if(!A.next().done)throw new TypeError("Unreachable");return r}else{let A=0;for(let{0:s,1:{value:o}}of this[ge])r[A++]=[s,o],Sg(o!==null);return r.sort(pC)}}},it=class t{#e;#t;constructor(e=void 0){O.util.markAsUncloneable(this),e!==cN&&(this.#t=new wn,this.#e="none",e!==void 0&&(e=O.converters.HeadersInit(e,"Headers contructor","init"),fC(this,e)))}append(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.append");let A="Headers.append";return e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),Ng(this,e,r)}delete(e){if(O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.delete"),e=O.converters.ByteString(e,"Headers.delete","name"),!Fs(e))throw O.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(e,!1)&&this.#t.delete(e,!1)}get(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.get(e,!1)}has(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.contains(e,!1)}set(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.set");let A="Headers.set";if(e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:A,value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(e,r,!1)}getSetCookie(){O.brandCheck(this,t);let e=this.#t.cookies;return e?[...e]:[]}get[xe](){if(this.#t[xe])return this.#t[xe];let e=[],r=this.#t.toSortedArray(),A=this.#t.cookies;if(A===null||A.length===1)return this.#t[xe]=r;for(let s=0;s>"](t,e,r,A.bind(t)):O.converters["record"](t,e,r)}throw O.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};wC.exports={fill:fC,compareHeaderName:pC,Headers:it,HeadersList:wn,getHeadersGuard:mC,setHeadersGuard:lN,setHeadersList:uN,getHeadersList:Ug}});var Ns=B((kP,LC)=>{"use strict";var{Headers:kC,HeadersList:yC,fill:EN,getHeadersGuard:hN,setHeadersGuard:FC,setHeadersList:SC}=Ur(),{extractBody:RC,cloneBody:QN,mixinBody:BN,hasFinalizationRegistry:NC,streamRegistry:UC,bodyUnusable:IN}=cA(),Gg=M(),DC=require("node:util"),{kEnumerableProperty:Oe}=Gg,{isValidReasonPhrase:CN,isCancelled:dN,isAborted:fN,isBlobLike:pN,serializeJavascriptValueToJSONString:mN,isErrorLike:wN,isomorphicEncode:yN,environmentSettingsObject:RN}=Ge(),{redirectStatusSet:DN,nullBodyStatus:TN}=rs(),{kState:te,kHeaders:Lt}=Pt(),{webidl:L}=Qe(),{FormData:bN}=as(),{URLSerializer:TC}=Te(),{kConstruct:Rn}=$(),Lg=require("node:assert"),{types:kN}=require("node:util"),FN=new TextEncoder("utf-8"),Gr=class t{static error(){return Ss(Dn(),"immutable")}static json(e,r={}){L.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=L.converters.ResponseInit(r));let A=FN.encode(mN(e)),s=RC(A),o=Ss(SA({}),"response");return bC(o,r,{body:s[0],type:"application/json"}),o}static redirect(e,r=302){L.argumentLengthCheck(arguments,1,"Response.redirect"),e=L.converters.USVString(e),r=L.converters["unsigned short"](r);let A;try{A=new URL(e,RN.settingsObject.baseUrl)}catch(n){throw new TypeError(`Failed to parse URL from ${e}`,{cause:n})}if(!DN.has(r))throw new RangeError(`Invalid status code ${r}`);let s=Ss(SA({}),"immutable");s[te].status=r;let o=yN(TC(A));return s[te].headersList.append("location",o,!0),s}constructor(e=null,r={}){if(L.util.markAsUncloneable(this),e===Rn)return;e!==null&&(e=L.converters.BodyInit(e)),r=L.converters.ResponseInit(r),this[te]=SA({}),this[Lt]=new kC(Rn),FC(this[Lt],"response"),SC(this[Lt],this[te].headersList);let A=null;if(e!=null){let[s,o]=RC(e);A={body:s,type:o}}bC(this,r,A)}get type(){return L.brandCheck(this,t),this[te].type}get url(){L.brandCheck(this,t);let e=this[te].urlList,r=e[e.length-1]??null;return r===null?"":TC(r,!0)}get redirected(){return L.brandCheck(this,t),this[te].urlList.length>1}get status(){return L.brandCheck(this,t),this[te].status}get ok(){return L.brandCheck(this,t),this[te].status>=200&&this[te].status<=299}get statusText(){return L.brandCheck(this,t),this[te].statusText}get headers(){return L.brandCheck(this,t),this[Lt]}get body(){return L.brandCheck(this,t),this[te].body?this[te].body.stream:null}get bodyUsed(){return L.brandCheck(this,t),!!this[te].body&&Gg.isDisturbed(this[te].body.stream)}clone(){if(L.brandCheck(this,t),IN(this))throw L.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let e=Mg(this[te]);return NC&&this[te].body?.stream&&UC.register(this,new WeakRef(this[te].body.stream)),Ss(e,hN(this[Lt]))}[DC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${DC.formatWithOptions(r,A)}`}};BN(Gr);Object.defineProperties(Gr.prototype,{type:Oe,url:Oe,status:Oe,ok:Oe,redirected:Oe,statusText:Oe,headers:Oe,clone:Oe,body:Oe,bodyUsed:Oe,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Gr,{json:Oe,redirect:Oe,error:Oe});function Mg(t){if(t.internalResponse)return GC(Mg(t.internalResponse),t.type);let e=SA({...t,body:null});return t.body!=null&&(e.body=QN(e,t.body)),e}function SA(t){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...t,headersList:t?.headersList?new yC(t?.headersList):new yC,urlList:t?.urlList?[...t.urlList]:[]}}function Dn(t){let e=wN(t);return SA({type:"error",status:0,error:e?t:new Error(t&&String(t)),aborted:t&&t.name==="AbortError"})}function SN(t){return t.type==="error"&&t.status===0}function yn(t,e){return e={internalResponse:t,...e},new Proxy(t,{get(r,A){return A in e?e[A]:r[A]},set(r,A,s){return Lg(!(A in e)),r[A]=s,!0}})}function GC(t,e){if(e==="basic")return yn(t,{type:"basic",headersList:t.headersList});if(e==="cors")return yn(t,{type:"cors",headersList:t.headersList});if(e==="opaque")return yn(t,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(e==="opaqueredirect")return yn(t,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});Lg(!1)}function NN(t,e=null){return Lg(dN(t)),fN(t)?Dn(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:e})):Dn(Object.assign(new DOMException("Request was cancelled."),{cause:e}))}function bC(t,e,r){if(e.status!==null&&(e.status<200||e.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in e&&e.statusText!=null&&!CN(String(e.statusText)))throw new TypeError("Invalid statusText");if("status"in e&&e.status!=null&&(t[te].status=e.status),"statusText"in e&&e.statusText!=null&&(t[te].statusText=e.statusText),"headers"in e&&e.headers!=null&&EN(t[Lt],e.headers),r){if(TN.includes(t.status))throw L.errors.exception({header:"Response constructor",message:`Invalid response status code ${t.status}`});t[te].body=r.body,r.type!=null&&!t[te].headersList.contains("content-type",!0)&&t[te].headersList.append("content-type",r.type,!0)}}function Ss(t,e){let r=new Gr(Rn);return r[te]=t,r[Lt]=new kC(Rn),SC(r[Lt],t.headersList),FC(r[Lt],e),NC&&t.body?.stream&&UC.register(r,new WeakRef(t.body.stream)),r}L.converters.ReadableStream=L.interfaceConverter(ReadableStream);L.converters.FormData=L.interfaceConverter(bN);L.converters.URLSearchParams=L.interfaceConverter(URLSearchParams);L.converters.XMLHttpRequestBodyInit=function(t,e,r){return typeof t=="string"?L.converters.USVString(t,e,r):pN(t)?L.converters.Blob(t,e,r,{strict:!1}):ArrayBuffer.isView(t)||kN.isArrayBuffer(t)?L.converters.BufferSource(t,e,r):Gg.isFormDataLike(t)?L.converters.FormData(t,e,r,{strict:!1}):t instanceof URLSearchParams?L.converters.URLSearchParams(t,e,r):L.converters.DOMString(t,e,r)};L.converters.BodyInit=function(t,e,r){return t instanceof ReadableStream?L.converters.ReadableStream(t,e,r):t?.[Symbol.asyncIterator]?t:L.converters.XMLHttpRequestBodyInit(t,e,r)};L.converters.ResponseInit=L.dictionaryConverter([{key:"status",converter:L.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:L.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:L.converters.HeadersInit}]);LC.exports={isNetworkError:SN,makeNetworkError:Dn,makeResponse:SA,makeAppropriateNetworkError:NN,filterResponse:GC,Response:Gr,cloneResponse:Mg,fromInnerResponse:Ss}});var OC=B((FP,xC)=>{"use strict";var{kConnected:MC,kSize:vC}=$(),vg=class{constructor(e){this.value=e}deref(){return this.value[MC]===0&&this.value[vC]===0?void 0:this.value}},xg=class{constructor(e){this.finalizer=e}register(e,r){e.on&&e.on("disconnect",()=>{e[MC]===0&&e[vC]===0&&this.finalizer(r)})}unregister(e){}};xC.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:vg,FinalizationRegistry:xg}):{WeakRef,FinalizationRegistry}}});var NA=B((SP,ed)=>{"use strict";var{extractBody:UN,mixinBody:GN,cloneBody:LN,bodyUnusable:YC}=cA(),{Headers:ZC,fill:MN,HeadersList:Fn,setHeadersGuard:Yg,getHeadersGuard:vN,setHeadersList:jC,getHeadersList:_C}=Ur(),{FinalizationRegistry:xN}=OC()(),bn=M(),JC=require("node:util"),{isValidHTTPToken:ON,sameOrigin:PC,environmentSettingsObject:Tn}=Ge(),{forbiddenMethodsSet:YN,corsSafeListedMethodsSet:_N,referrerPolicy:JN,requestRedirect:PN,requestMode:HN,requestCredentials:VN,requestCache:qN,requestDuplex:WN}=rs(),{kEnumerableProperty:le,normalizedMethodRecordsBase:zN,normalizedMethodRecords:ZN}=bn,{kHeaders:Ye,kSignal:kn,kState:K,kDispatcher:Og}=Pt(),{webidl:S}=Qe(),{URLSerializer:jN}=Te(),{kConstruct:Sn}=$(),KN=require("node:assert"),{getMaxListeners:HC,setMaxListeners:VC,getEventListeners:XN,defaultMaxListeners:qC}=require("node:events"),$N=Symbol("abortController"),KC=new xN(({signal:t,abort:e})=>{t.removeEventListener("abort",e)}),Nn=new WeakMap;function WC(t){return e;function e(){let r=t.deref();if(r!==void 0){KC.unregister(e),this.removeEventListener("abort",e),r.abort(this.reason);let A=Nn.get(r.signal);if(A!==void 0){if(A.size!==0){for(let s of A){let o=s.deref();o!==void 0&&o.abort(this.reason)}A.clear()}Nn.delete(r.signal)}}}}var zC=!1,er=class t{constructor(e,r={}){if(S.util.markAsUncloneable(this),e===Sn)return;let A="Request constructor";S.argumentLengthCheck(arguments,1,A),e=S.converters.RequestInfo(e,A,"input"),r=S.converters.RequestInit(r,A,"init");let s=null,o=null,n=Tn.settingsObject.baseUrl,i=null;if(typeof e=="string"){this[Og]=r.dispatcher;let Q;try{Q=new URL(e,n)}catch(f){throw new TypeError("Failed to parse URL from "+e,{cause:f})}if(Q.username||Q.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);s=Un({urlList:[Q]}),o="cors"}else this[Og]=r.dispatcher||e[Og],KN(e instanceof t),s=e[K],i=e[kn];let a=Tn.settingsObject.origin,c="client";if(s.window?.constructor?.name==="EnvironmentSettingsObject"&&PC(s.window,a)&&(c=s.window),r.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in r&&(c="no-window"),s=Un({method:s.method,headersList:s.headersList,unsafeRequest:s.unsafeRequest,client:Tn.settingsObject,window:c,priority:s.priority,origin:s.origin,referrer:s.referrer,referrerPolicy:s.referrerPolicy,mode:s.mode,credentials:s.credentials,cache:s.cache,redirect:s.redirect,integrity:s.integrity,keepalive:s.keepalive,reloadNavigation:s.reloadNavigation,historyNavigation:s.historyNavigation,urlList:[...s.urlList]});let g=Object.keys(r).length!==0;if(g&&(s.mode==="navigate"&&(s.mode="same-origin"),s.reloadNavigation=!1,s.historyNavigation=!1,s.origin="client",s.referrer="client",s.referrerPolicy="",s.url=s.urlList[s.urlList.length-1],s.urlList=[s.url]),r.referrer!==void 0){let Q=r.referrer;if(Q==="")s.referrer="no-referrer";else{let f;try{f=new URL(Q,n)}catch(R){throw new TypeError(`Referrer "${Q}" is not a valid URL.`,{cause:R})}f.protocol==="about:"&&f.hostname==="client"||a&&!PC(f,Tn.settingsObject.baseUrl)?s.referrer="client":s.referrer=f}}r.referrerPolicy!==void 0&&(s.referrerPolicy=r.referrerPolicy);let l;if(r.mode!==void 0?l=r.mode:l=o,l==="navigate")throw S.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(l!=null&&(s.mode=l),r.credentials!==void 0&&(s.credentials=r.credentials),r.cache!==void 0&&(s.cache=r.cache),s.cache==="only-if-cached"&&s.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(r.redirect!==void 0&&(s.redirect=r.redirect),r.integrity!=null&&(s.integrity=String(r.integrity)),r.keepalive!==void 0&&(s.keepalive=!!r.keepalive),r.method!==void 0){let Q=r.method,f=ZN[Q];if(f!==void 0)s.method=f;else{if(!ON(Q))throw new TypeError(`'${Q}' is not a valid HTTP method.`);let R=Q.toUpperCase();if(YN.has(R))throw new TypeError(`'${Q}' HTTP method is unsupported.`);Q=zN[R]??Q,s.method=Q}!zC&&s.method==="patch"&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),zC=!0)}r.signal!==void 0&&(i=r.signal),this[K]=s;let u=new AbortController;if(this[kn]=u.signal,i!=null){if(!i||typeof i.aborted!="boolean"||typeof i.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(i.aborted)u.abort(i.reason);else{this[$N]=u;let Q=new WeakRef(u),f=WC(Q);try{(typeof HC=="function"&&HC(i)===qC||XN(i,"abort").length>=qC)&&VC(1500,i)}catch{}bn.addAbortListener(i,f),KC.register(u,{signal:i,abort:f},f)}}if(this[Ye]=new ZC(Sn),jC(this[Ye],s.headersList),Yg(this[Ye],"request"),l==="no-cors"){if(!_N.has(s.method))throw new TypeError(`'${s.method} is unsupported in no-cors mode.`);Yg(this[Ye],"request-no-cors")}if(g){let Q=_C(this[Ye]),f=r.headers!==void 0?r.headers:new Fn(Q);if(Q.clear(),f instanceof Fn){for(let{name:R,value:y}of f.rawValues())Q.append(R,y,!1);Q.cookies=f.cookies}else MN(this[Ye],f)}let E=e instanceof t?e[K].body:null;if((r.body!=null||E!=null)&&(s.method==="GET"||s.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let h=null;if(r.body!=null){let[Q,f]=UN(r.body,s.keepalive);h=Q,f&&!_C(this[Ye]).contains("content-type",!0)&&this[Ye].append("content-type",f)}let C=h??E;if(C!=null&&C.source==null){if(h!=null&&r.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(s.mode!=="same-origin"&&s.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');s.useCORSPreflightFlag=!0}let I=C;if(h==null&&E!=null){if(YC(e))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let Q=new TransformStream;E.stream.pipeThrough(Q),I={source:E.source,length:E.length,stream:Q.readable}}this[K].body=I}get method(){return S.brandCheck(this,t),this[K].method}get url(){return S.brandCheck(this,t),jN(this[K].url)}get headers(){return S.brandCheck(this,t),this[Ye]}get destination(){return S.brandCheck(this,t),this[K].destination}get referrer(){return S.brandCheck(this,t),this[K].referrer==="no-referrer"?"":this[K].referrer==="client"?"about:client":this[K].referrer.toString()}get referrerPolicy(){return S.brandCheck(this,t),this[K].referrerPolicy}get mode(){return S.brandCheck(this,t),this[K].mode}get credentials(){return this[K].credentials}get cache(){return S.brandCheck(this,t),this[K].cache}get redirect(){return S.brandCheck(this,t),this[K].redirect}get integrity(){return S.brandCheck(this,t),this[K].integrity}get keepalive(){return S.brandCheck(this,t),this[K].keepalive}get isReloadNavigation(){return S.brandCheck(this,t),this[K].reloadNavigation}get isHistoryNavigation(){return S.brandCheck(this,t),this[K].historyNavigation}get signal(){return S.brandCheck(this,t),this[kn]}get body(){return S.brandCheck(this,t),this[K].body?this[K].body.stream:null}get bodyUsed(){return S.brandCheck(this,t),!!this[K].body&&bn.isDisturbed(this[K].body.stream)}get duplex(){return S.brandCheck(this,t),"half"}clone(){if(S.brandCheck(this,t),YC(this))throw new TypeError("unusable");let e=XC(this[K]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let A=Nn.get(this.signal);A===void 0&&(A=new Set,Nn.set(this.signal,A));let s=new WeakRef(r);A.add(s),bn.addAbortListener(r.signal,WC(s))}return $C(e,r.signal,vN(this[Ye]))}[JC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${JC.formatWithOptions(r,A)}`}};GN(er);function Un(t){return{method:t.method??"GET",localURLsOnly:t.localURLsOnly??!1,unsafeRequest:t.unsafeRequest??!1,body:t.body??null,client:t.client??null,reservedClient:t.reservedClient??null,replacesClientId:t.replacesClientId??"",window:t.window??"client",keepalive:t.keepalive??!1,serviceWorkers:t.serviceWorkers??"all",initiator:t.initiator??"",destination:t.destination??"",priority:t.priority??null,origin:t.origin??"client",policyContainer:t.policyContainer??"client",referrer:t.referrer??"client",referrerPolicy:t.referrerPolicy??"",mode:t.mode??"no-cors",useCORSPreflightFlag:t.useCORSPreflightFlag??!1,credentials:t.credentials??"same-origin",useCredentials:t.useCredentials??!1,cache:t.cache??"default",redirect:t.redirect??"follow",integrity:t.integrity??"",cryptoGraphicsNonceMetadata:t.cryptoGraphicsNonceMetadata??"",parserMetadata:t.parserMetadata??"",reloadNavigation:t.reloadNavigation??!1,historyNavigation:t.historyNavigation??!1,userActivation:t.userActivation??!1,taintedOrigin:t.taintedOrigin??!1,redirectCount:t.redirectCount??0,responseTainting:t.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:t.preventNoCacheCacheControlHeaderModification??!1,done:t.done??!1,timingAllowFailed:t.timingAllowFailed??!1,urlList:t.urlList,url:t.urlList[0],headersList:t.headersList?new Fn(t.headersList):new Fn}}function XC(t){let e=Un({...t,body:null});return t.body!=null&&(e.body=LN(e,t.body)),e}function $C(t,e,r){let A=new er(Sn);return A[K]=t,A[kn]=e,A[Ye]=new ZC(Sn),jC(A[Ye],t.headersList),Yg(A[Ye],r),A}Object.defineProperties(er.prototype,{method:le,url:le,headers:le,redirect:le,clone:le,signal:le,duplex:le,destination:le,body:le,bodyUsed:le,isHistoryNavigation:le,isReloadNavigation:le,keepalive:le,integrity:le,cache:le,credentials:le,attribute:le,referrerPolicy:le,referrer:le,mode:le,[Symbol.toStringTag]:{value:"Request",configurable:!0}});S.converters.Request=S.interfaceConverter(er);S.converters.RequestInfo=function(t,e,r){return typeof t=="string"?S.converters.USVString(t,e,r):t instanceof er?S.converters.Request(t,e,r):S.converters.USVString(t,e,r)};S.converters.AbortSignal=S.interfaceConverter(AbortSignal);S.converters.RequestInit=S.dictionaryConverter([{key:"method",converter:S.converters.ByteString},{key:"headers",converter:S.converters.HeadersInit},{key:"body",converter:S.nullableConverter(S.converters.BodyInit)},{key:"referrer",converter:S.converters.USVString},{key:"referrerPolicy",converter:S.converters.DOMString,allowedValues:JN},{key:"mode",converter:S.converters.DOMString,allowedValues:HN},{key:"credentials",converter:S.converters.DOMString,allowedValues:VN},{key:"cache",converter:S.converters.DOMString,allowedValues:qN},{key:"redirect",converter:S.converters.DOMString,allowedValues:PN},{key:"integrity",converter:S.converters.DOMString},{key:"keepalive",converter:S.converters.boolean},{key:"signal",converter:S.nullableConverter(t=>S.converters.AbortSignal(t,"RequestInit","signal",{strict:!1}))},{key:"window",converter:S.converters.any},{key:"duplex",converter:S.converters.DOMString,allowedValues:WN},{key:"dispatcher",converter:S.converters.any}]);ed.exports={Request:er,makeRequest:Un,fromInnerRequest:$C,cloneRequest:XC}});var Gs=B((NP,Qd)=>{"use strict";var{makeNetworkError:H,makeAppropriateNetworkError:Gn,filterResponse:_g,makeResponse:Ln,fromInnerResponse:eU}=Ns(),{HeadersList:td}=Ur(),{Request:tU,cloneRequest:rU}=NA(),tr=require("node:zlib"),{bytesMatch:AU,makePolicyContainer:sU,clonePolicyContainer:oU,requestBadPort:nU,TAOCheck:iU,appendRequestOriginHeader:aU,responseLocationURL:cU,requestCurrentURL:ft,setRequestReferrerPolicyOnRedirect:gU,tryUpgradeRequestToAPotentiallyTrustworthyURL:lU,createOpaqueTimingInfo:qg,appendFetchMetadata:uU,corsCheck:EU,crossOriginResourcePolicyCheck:hU,determineRequestsReferrer:QU,coarsenedSharedCurrentTime:Us,createDeferredPromise:BU,isBlobLike:IU,sameOrigin:Vg,isCancelled:Lr,isAborted:rd,isErrorLike:CU,fullyReadBody:dU,readableStreamClose:fU,isomorphicEncode:Mn,urlIsLocal:pU,urlIsHttpHttpsScheme:Wg,urlHasHttpsScheme:mU,clampAndCoarsenConnectionTimingInfo:wU,simpleRangeHeaderValue:yU,buildContentRange:RU,createInflate:DU,extractMimeType:TU}=Ge(),{kState:nd,kDispatcher:bU}=Pt(),Mr=require("node:assert"),{safelyExtractBody:zg,extractBody:Ad}=cA(),{redirectStatusSet:id,nullBodyStatus:ad,safeMethodsSet:kU,requestBodyHeader:FU,subresourceSet:SU}=rs(),NU=require("node:events"),{Readable:UU,pipeline:GU,finished:LU}=require("node:stream"),{addAbortListener:MU,isErrored:vU,isReadable:vn,bufferToLowerCasedHeaderName:sd}=M(),{dataURLProcessor:xU,serializeAMimeType:OU,minimizeSupportedMimeType:YU}=Te(),{getGlobalDispatcher:_U}=fn(),{webidl:JU}=Qe(),{STATUS_CODES:PU}=require("node:http"),HU=["GET","HEAD"],VU=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",Jg,xn=class extends NU{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){this.state==="ongoing"&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}};function qU(t){cd(t,"fetch")}function WU(t,e=void 0){JU.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=BU(),A;try{A=new tU(t,e)}catch(g){return r.reject(g),r.promise}let s=A[nd];if(A.signal.aborted)return Pg(r,s,null,A.signal.reason),r.promise;s.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(s.serviceWorkers="none");let n=null,i=!1,a=null;return MU(A.signal,()=>{i=!0,Mr(a!=null),a.abort(A.signal.reason);let g=n?.deref();Pg(r,s,g,A.signal.reason)}),a=ld({request:s,processResponseEndOfBody:qU,processResponse:g=>{if(!i){if(g.aborted){Pg(r,s,n,a.serializedAbortReason);return}if(g.type==="error"){r.reject(new TypeError("fetch failed",{cause:g.error}));return}n=new WeakRef(eU(g,"immutable")),r.resolve(n.deref()),r=null}},dispatcher:A[bU]}),r.promise}function cd(t,e="other"){if(t.type==="error"&&t.aborted||!t.urlList?.length)return;let r=t.urlList[0],A=t.timingInfo,s=t.cacheState;Wg(r)&&A!==null&&(t.timingAllowPassed||(A=qg({startTime:A.startTime}),s=""),A.endTime=Us(),t.timingInfo=A,gd(A,r.href,e,globalThis,s))}var gd=performance.markResourceTiming;function Pg(t,e,r,A){if(t&&t.reject(A),e.body!=null&&vn(e.body?.stream)&&e.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o}),r==null)return;let s=r[nd];s.body!=null&&vn(s.body?.stream)&&s.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o})}function ld({request:t,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseEndOfBody:s,processResponseConsumeBody:o,useParallelQueue:n=!1,dispatcher:i=_U()}){Mr(i);let a=null,c=!1;t.client!=null&&(a=t.client.globalObject,c=t.client.crossOriginIsolatedCapability);let g=Us(c),l=qg({startTime:g}),u={controller:new xn(i),request:t,timingInfo:l,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseConsumeBody:o,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};return Mr(!t.body||t.body.stream),t.window==="client"&&(t.window=t.client?.globalObject?.constructor?.name==="Window"?t.client:"no-window"),t.origin==="client"&&(t.origin=t.client.origin),t.policyContainer==="client"&&(t.client!=null?t.policyContainer=oU(t.client.policyContainer):t.policyContainer=sU()),t.headersList.contains("accept",!0)||t.headersList.append("accept","*/*",!0),t.headersList.contains("accept-language",!0)||t.headersList.append("accept-language","*",!0),t.priority,SU.has(t.destination),ud(u).catch(E=>{u.controller.terminate(E)}),u.controller}async function ud(t,e=!1){let r=t.request,A=null;if(r.localURLsOnly&&!pU(ft(r))&&(A=H("local URLs only")),lU(r),nU(r)==="blocked"&&(A=H("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=QU(r)),A===null&&(A=await(async()=>{let o=ft(r);return Vg(o,r.url)&&r.responseTainting==="basic"||o.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await od(t)):r.mode==="same-origin"?H('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?H('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await od(t)):Wg(ft(r))?(r.responseTainting="cors",await Ed(t)):H("URL scheme must be a HTTP(S) scheme")})()),e)return A;A.status!==0&&!A.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?A=_g(A,"basic"):r.responseTainting==="cors"?A=_g(A,"cors"):r.responseTainting==="opaque"?A=_g(A,"opaque"):Mr(!1));let s=A.status===0?A:A.internalResponse;if(s.urlList.length===0&&s.urlList.push(...r.urlList),r.timingAllowFailed||(A.timingAllowPassed=!0),A.type==="opaque"&&s.status===206&&s.rangeRequested&&!r.headers.contains("range",!0)&&(A=s=H()),A.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||ad.includes(s.status))&&(s.body=null,t.controller.dump=!0),r.integrity){let o=i=>Hg(t,H(i));if(r.responseTainting==="opaque"||A.body==null){o(A.error);return}let n=i=>{if(!AU(i,r.integrity)){o("integrity mismatch");return}A.body=zg(i)[0],Hg(t,A)};await dU(A.body,n,o)}else Hg(t,A)}function od(t){if(Lr(t)&&t.request.redirectCount===0)return Promise.resolve(Gn(t));let{request:e}=t,{protocol:r}=ft(e);switch(r){case"about:":return Promise.resolve(H("about scheme is not supported"));case"blob:":{Jg||(Jg=require("node:buffer").resolveObjectURL);let A=ft(e);if(A.search.length!==0)return Promise.resolve(H("NetworkError when attempting to fetch resource."));let s=Jg(A.toString());if(e.method!=="GET"||!IU(s))return Promise.resolve(H("invalid method"));let o=Ln(),n=s.size,i=Mn(`${n}`),a=s.type;if(e.headersList.contains("range",!0)){o.rangeRequested=!0;let c=e.headersList.get("range",!0),g=yU(c,!0);if(g==="failure")return Promise.resolve(H("failed to fetch the data URL"));let{rangeStartValue:l,rangeEndValue:u}=g;if(l===null)l=n-u,u=l+u-1;else{if(l>=n)return Promise.resolve(H("Range start is greater than the blob's size."));(u===null||u>=n)&&(u=n-1)}let E=s.slice(l,u,a),h=Ad(E);o.body=h[0];let C=Mn(`${E.size}`),I=RU(l,u,n);o.status=206,o.statusText="Partial Content",o.headersList.set("content-length",C,!0),o.headersList.set("content-type",a,!0),o.headersList.set("content-range",I,!0)}else{let c=Ad(s);o.statusText="OK",o.body=c[0],o.headersList.set("content-length",i,!0),o.headersList.set("content-type",a,!0)}return Promise.resolve(o)}case"data:":{let A=ft(e),s=xU(A);if(s==="failure")return Promise.resolve(H("failed to fetch the data URL"));let o=OU(s.mimeType);return Promise.resolve(Ln({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:o}]],body:zg(s.body)[0]}))}case"file:":return Promise.resolve(H("not implemented... yet..."));case"http:":case"https:":return Ed(t).catch(A=>H(A));default:return Promise.resolve(H("unknown scheme"))}}function zU(t,e){t.request.done=!0,t.processResponseDone!=null&&queueMicrotask(()=>t.processResponseDone(e))}function Hg(t,e){let r=t.timingInfo,A=()=>{let o=Date.now();t.request.destination==="document"&&(t.controller.fullTimingInfo=r),t.controller.reportTimingSteps=()=>{if(t.request.url.protocol!=="https:")return;r.endTime=o;let i=e.cacheState,a=e.bodyInfo;e.timingAllowPassed||(r=qg(r),i="");let c=0;if(t.request.mode!=="navigator"||!e.hasCrossOriginRedirects){c=e.status;let g=TU(e.headersList);g!=="failure"&&(a.contentType=YU(g))}t.request.initiatorType!=null&&gd(r,t.request.url.href,t.request.initiatorType,globalThis,i,a,c)};let n=()=>{t.request.done=!0,t.processResponseEndOfBody!=null&&queueMicrotask(()=>t.processResponseEndOfBody(e)),t.request.initiatorType!=null&&t.controller.reportTimingSteps()};queueMicrotask(()=>n())};t.processResponse!=null&&queueMicrotask(()=>{t.processResponse(e),t.processResponse=null});let s=e.type==="error"?e:e.internalResponse??e;s.body==null?A():LU(s.body.stream,()=>{A()})}async function Ed(t){let e=t.request,r=null,A=null,s=t.timingInfo;if(e.serviceWorkers,r===null){if(e.redirect==="follow"&&(e.serviceWorkers="none"),A=r=await hd(t),e.responseTainting==="cors"&&EU(e,r)==="failure")return H("cors failure");iU(e,r)==="failure"&&(e.timingAllowFailed=!0)}return(e.responseTainting==="opaque"||r.type==="opaque")&&hU(e.origin,e.client,e.destination,A)==="blocked"?H("blocked"):(id.has(A.status)&&(e.redirect!=="manual"&&t.controller.connection.destroy(void 0,!1),e.redirect==="error"?r=H("unexpected redirect"):e.redirect==="manual"?r=A:e.redirect==="follow"?r=await ZU(t,r):Mr(!1)),r.timingInfo=s,r)}function ZU(t,e){let r=t.request,A=e.internalResponse?e.internalResponse:e,s;try{if(s=cU(A,ft(r).hash),s==null)return e}catch(n){return Promise.resolve(H(n))}if(!Wg(s))return Promise.resolve(H("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(H("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(s.username||s.password)&&!Vg(r,s))return Promise.resolve(H('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(s.username||s.password))return Promise.resolve(H('URL cannot contain credentials for request mode "cors"'));if(A.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(H());if([301,302].includes(A.status)&&r.method==="POST"||A.status===303&&!HU.includes(r.method)){r.method="GET",r.body=null;for(let n of FU)r.headersList.delete(n)}Vg(ft(r),s)||(r.headersList.delete("authorization",!0),r.headersList.delete("proxy-authorization",!0),r.headersList.delete("cookie",!0),r.headersList.delete("host",!0)),r.body!=null&&(Mr(r.body.source!=null),r.body=zg(r.body.source)[0]);let o=t.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=Us(t.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(s),gU(r,A),ud(t,!0)}async function hd(t,e=!1,r=!1){let A=t.request,s=null,o=null,n=null,i=null,a=!1;A.window==="no-window"&&A.redirect==="error"?(s=t,o=A):(o=rU(A),s={...t},s.request=o);let c=A.credentials==="include"||A.credentials==="same-origin"&&A.responseTainting==="basic",g=o.body?o.body.length:null,l=null;if(o.body==null&&["POST","PUT"].includes(o.method)&&(l="0"),g!=null&&(l=Mn(`${g}`)),l!=null&&o.headersList.append("content-length",l,!0),g!=null&&o.keepalive,o.referrer instanceof URL&&o.headersList.append("referer",Mn(o.referrer.href),!0),aU(o),uU(o),o.headersList.contains("user-agent",!0)||o.headersList.append("user-agent",VU),o.cache==="default"&&(o.headersList.contains("if-modified-since",!0)||o.headersList.contains("if-none-match",!0)||o.headersList.contains("if-unmodified-since",!0)||o.headersList.contains("if-match",!0)||o.headersList.contains("if-range",!0))&&(o.cache="no-store"),o.cache==="no-cache"&&!o.preventNoCacheCacheControlHeaderModification&&!o.headersList.contains("cache-control",!0)&&o.headersList.append("cache-control","max-age=0",!0),(o.cache==="no-store"||o.cache==="reload")&&(o.headersList.contains("pragma",!0)||o.headersList.append("pragma","no-cache",!0),o.headersList.contains("cache-control",!0)||o.headersList.append("cache-control","no-cache",!0)),o.headersList.contains("range",!0)&&o.headersList.append("accept-encoding","identity",!0),o.headersList.contains("accept-encoding",!0)||(mU(ft(o))?o.headersList.append("accept-encoding","br, gzip, deflate",!0):o.headersList.append("accept-encoding","gzip, deflate",!0)),o.headersList.delete("host",!0),i==null&&(o.cache="no-store"),o.cache!=="no-store"&&o.cache,n==null){if(o.cache==="only-if-cached")return H("only if cached");let u=await jU(s,c,r);!kU.has(o.method)&&u.status>=200&&u.status<=399,a&&u.status,n==null&&(n=u)}if(n.urlList=[...o.urlList],o.headersList.contains("range",!0)&&(n.rangeRequested=!0),n.requestIncludesCredentials=c,n.status===407)return A.window==="no-window"?H():Lr(t)?Gn(t):H("proxy authentication required");if(n.status===421&&!r&&(A.body==null||A.body.source!=null)){if(Lr(t))return Gn(t);t.controller.connection.destroy(),n=await hd(t,e,!0)}return n}async function jU(t,e=!1,r=!1){Mr(!t.controller.connection||t.controller.connection.destroyed),t.controller.connection={abort:null,destroyed:!1,destroy(h,C=!0){this.destroyed||(this.destroyed=!0,C&&this.abort?.(h??new DOMException("The operation was aborted.","AbortError")))}};let A=t.request,s=null,o=t.timingInfo;null==null&&(A.cache="no-store");let i=r?"yes":"no";A.mode;let a=null;if(A.body==null&&t.processRequestEndOfBody)queueMicrotask(()=>t.processRequestEndOfBody());else if(A.body!=null){let h=async function*(Q){Lr(t)||(yield Q,t.processRequestBodyChunkLength?.(Q.byteLength))},C=()=>{Lr(t)||t.processRequestEndOfBody&&t.processRequestEndOfBody()},I=Q=>{Lr(t)||(Q.name==="AbortError"?t.controller.abort():t.controller.terminate(Q))};a=(async function*(){try{for await(let Q of A.body.stream)yield*h(Q);C()}catch(Q){I(Q)}})()}try{let{body:h,status:C,statusText:I,headersList:Q,socket:f}=await E({body:a});if(f)s=Ln({status:C,statusText:I,headersList:Q,socket:f});else{let R=h[Symbol.asyncIterator]();t.controller.next=()=>R.next(),s=Ln({status:C,statusText:I,headersList:Q})}}catch(h){return h.name==="AbortError"?(t.controller.connection.destroy(),Gn(t,h)):H(h)}let c=async()=>{await t.controller.resume()},g=h=>{Lr(t)||t.controller.abort(h)},l=new ReadableStream({async start(h){t.controller.controller=h},async pull(h){await c(h)},async cancel(h){await g(h)},type:"bytes"});s.body={stream:l,source:null,length:null},t.controller.onAborted=u,t.controller.on("terminated",u),t.controller.resume=async()=>{for(;;){let h,C;try{let{done:Q,value:f}=await t.controller.next();if(rd(t))break;h=Q?void 0:f}catch(Q){t.controller.ended&&!o.encodedBodySize?h=void 0:(h=Q,C=!0)}if(h===void 0){fU(t.controller.controller),zU(t,s);return}if(o.decodedBodySize+=h?.byteLength??0,C){t.controller.terminate(h);return}let I=new Uint8Array(h);if(I.byteLength&&t.controller.controller.enqueue(I),vU(l)){t.controller.terminate();return}if(t.controller.controller.desiredSize<=0)return}};function u(h){rd(t)?(s.aborted=!0,vn(l)&&t.controller.controller.error(t.controller.serializedAbortReason)):vn(l)&&t.controller.controller.error(new TypeError("terminated",{cause:CU(h)?h:void 0})),t.controller.connection.destroy()}return s;function E({body:h}){let C=ft(A),I=t.controller.dispatcher;return new Promise((Q,f)=>I.dispatch({path:C.pathname+C.search,origin:C.origin,method:A.method,body:I.isMockActive?A.body&&(A.body.source||A.body.stream):h,headers:A.headersList.entries,maxRedirections:0,upgrade:A.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(R){let{connection:y}=t.controller;o.finalConnectionTimingInfo=wU(void 0,o.postRedirectStartTime,t.crossOriginIsolatedCapability),y.destroyed?R(new DOMException("The operation was aborted.","AbortError")):(t.controller.on("terminated",R),this.abort=y.abort=R),o.finalNetworkRequestStartTime=Us(t.crossOriginIsolatedCapability)},onResponseStarted(){o.finalNetworkResponseStartTime=Us(t.crossOriginIsolatedCapability)},onHeaders(R,y,P,Z){if(R<200)return;let Ae="",gt=new td;for(let De=0;DeWr)return f(new Error(`too many content-encodings in response: ${qr.length}, maximum allowed is ${Wr}`)),!0;for(let Pi=qr.length-1;Pi>=0;--Pi){let lo=qr[Pi].trim();if(lo==="x-gzip"||lo==="gzip")wt.push(tr.createGunzip({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="deflate")wt.push(DU({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="br")wt.push(tr.createBrotliDecompress({flush:tr.constants.BROTLI_OPERATION_FLUSH,finishFlush:tr.constants.BROTLI_OPERATION_FLUSH}));else{wt.length=0;break}}}let _t=this.onError.bind(this);return Q({status:R,statusText:Z,headersList:gt,body:wt.length?GU(this.body,...wt,De=>{De&&this.onError(De)}).on("error",_t):this.body.on("error",_t)}),!0},onData(R){if(t.controller.dump)return;let y=R;return o.encodedBodySize+=y.byteLength,this.body.push(y)},onComplete(){this.abort&&t.controller.off("terminated",this.abort),t.controller.onAborted&&t.controller.off("terminated",t.controller.onAborted),t.controller.ended=!0,this.body.push(null)},onError(R){this.abort&&t.controller.off("terminated",this.abort),this.body?.destroy(R),t.controller.terminate(R),f(R)},onUpgrade(R,y,P){if(R!==101)return;let Z=new td;for(let Ae=0;Ae{"use strict";Bd.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var Cd=B((GP,Id)=>{"use strict";var{webidl:_e}=Qe(),On=Symbol("ProgressEvent state"),jg=class t extends Event{constructor(e,r={}){e=_e.converters.DOMString(e,"ProgressEvent constructor","type"),r=_e.converters.ProgressEventInit(r??{}),super(e,r),this[On]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return _e.brandCheck(this,t),this[On].lengthComputable}get loaded(){return _e.brandCheck(this,t),this[On].loaded}get total(){return _e.brandCheck(this,t),this[On].total}};_e.converters.ProgressEventInit=_e.dictionaryConverter([{key:"lengthComputable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:_e.converters.boolean,defaultValue:()=>!1}]);Id.exports={ProgressEvent:jg}});var fd=B((LP,dd)=>{"use strict";function KU(t){if(!t)return"failure";switch(t.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}dd.exports={getEncoding:KU}});var bd=B((MP,Td)=>{"use strict";var{kState:UA,kError:Kg,kResult:pd,kAborted:Ls,kLastProgressEventFired:Xg}=Zg(),{ProgressEvent:XU}=Cd(),{getEncoding:md}=fd(),{serializeAMimeType:$U,parseMIMEType:wd}=Te(),{types:eG}=require("node:util"),{StringDecoder:yd}=require("string_decoder"),{btoa:Rd}=require("node:buffer"),tG={enumerable:!0,writable:!1,configurable:!1};function rG(t,e,r,A){if(t[UA]==="loading")throw new DOMException("Invalid state","InvalidStateError");t[UA]="loading",t[pd]=null,t[Kg]=null;let o=e.stream().getReader(),n=[],i=o.read(),a=!0;(async()=>{for(;!t[Ls];)try{let{done:c,value:g}=await i;if(a&&!t[Ls]&&queueMicrotask(()=>{rr("loadstart",t)}),a=!1,!c&&eG.isUint8Array(g))n.push(g),(t[Xg]===void 0||Date.now()-t[Xg]>=50)&&!t[Ls]&&(t[Xg]=Date.now(),queueMicrotask(()=>{rr("progress",t)})),i=o.read();else if(c){queueMicrotask(()=>{t[UA]="done";try{let l=AG(n,r,e.type,A);if(t[Ls])return;t[pd]=l,rr("load",t)}catch(l){t[Kg]=l,rr("error",t)}t[UA]!=="loading"&&rr("loadend",t)});break}}catch(c){if(t[Ls])return;queueMicrotask(()=>{t[UA]="done",t[Kg]=c,rr("error",t),t[UA]!=="loading"&&rr("loadend",t)});break}})()}function rr(t,e){let r=new XU(t,{bubbles:!1,cancelable:!1});e.dispatchEvent(r)}function AG(t,e,r,A){switch(e){case"DataURL":{let s="data:",o=wd(r||"application/octet-stream");o!=="failure"&&(s+=$U(o)),s+=";base64,";let n=new yd("latin1");for(let i of t)s+=Rd(n.write(i));return s+=Rd(n.end()),s}case"Text":{let s="failure";if(A&&(s=md(A)),s==="failure"&&r){let o=wd(r);o!=="failure"&&(s=md(o.parameters.get("charset")))}return s==="failure"&&(s="UTF-8"),sG(t,s)}case"ArrayBuffer":return Dd(t).buffer;case"BinaryString":{let s="",o=new yd("latin1");for(let n of t)s+=o.write(n);return s+=o.end(),s}}}function sG(t,e){let r=Dd(t),A=oG(r),s=0;A!==null&&(e=A,s=A==="UTF-8"?3:2);let o=r.slice(s);return new TextDecoder(e).decode(o)}function oG(t){let[e,r,A]=t;return e===239&&r===187&&A===191?"UTF-8":e===254&&r===255?"UTF-16BE":e===255&&r===254?"UTF-16LE":null}function Dd(t){let e=t.reduce((A,s)=>A+s.byteLength,0),r=0;return t.reduce((A,s)=>(A.set(s,r),r+=s.byteLength,A),new Uint8Array(e))}Td.exports={staticPropertyDescriptors:tG,readOperation:rG,fireAProgressEvent:rr}});var Nd=B((vP,Sd)=>{"use strict";var{staticPropertyDescriptors:GA,readOperation:Yn,fireAProgressEvent:kd}=bd(),{kState:vr,kError:Fd,kResult:_n,kEvents:_,kAborted:nG}=Zg(),{webidl:q}=Qe(),{kEnumerableProperty:Fe}=M(),at=class t extends EventTarget{constructor(){super(),this[vr]="empty",this[_n]=null,this[Fd]=null,this[_]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"ArrayBuffer")}readAsBinaryString(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"BinaryString")}readAsText(e,r=void 0){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsText"),e=q.converters.Blob(e,{strict:!1}),r!==void 0&&(r=q.converters.DOMString(r,"FileReader.readAsText","encoding")),Yn(this,e,"Text",r)}readAsDataURL(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"DataURL")}abort(){if(this[vr]==="empty"||this[vr]==="done"){this[_n]=null;return}this[vr]==="loading"&&(this[vr]="done",this[_n]=null),this[nG]=!0,kd("abort",this),this[vr]!=="loading"&&kd("loadend",this)}get readyState(){switch(q.brandCheck(this,t),this[vr]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return q.brandCheck(this,t),this[_n]}get error(){return q.brandCheck(this,t),this[Fd]}get onloadend(){return q.brandCheck(this,t),this[_].loadend}set onloadend(e){q.brandCheck(this,t),this[_].loadend&&this.removeEventListener("loadend",this[_].loadend),typeof e=="function"?(this[_].loadend=e,this.addEventListener("loadend",e)):this[_].loadend=null}get onerror(){return q.brandCheck(this,t),this[_].error}set onerror(e){q.brandCheck(this,t),this[_].error&&this.removeEventListener("error",this[_].error),typeof e=="function"?(this[_].error=e,this.addEventListener("error",e)):this[_].error=null}get onloadstart(){return q.brandCheck(this,t),this[_].loadstart}set onloadstart(e){q.brandCheck(this,t),this[_].loadstart&&this.removeEventListener("loadstart",this[_].loadstart),typeof e=="function"?(this[_].loadstart=e,this.addEventListener("loadstart",e)):this[_].loadstart=null}get onprogress(){return q.brandCheck(this,t),this[_].progress}set onprogress(e){q.brandCheck(this,t),this[_].progress&&this.removeEventListener("progress",this[_].progress),typeof e=="function"?(this[_].progress=e,this.addEventListener("progress",e)):this[_].progress=null}get onload(){return q.brandCheck(this,t),this[_].load}set onload(e){q.brandCheck(this,t),this[_].load&&this.removeEventListener("load",this[_].load),typeof e=="function"?(this[_].load=e,this.addEventListener("load",e)):this[_].load=null}get onabort(){return q.brandCheck(this,t),this[_].abort}set onabort(e){q.brandCheck(this,t),this[_].abort&&this.removeEventListener("abort",this[_].abort),typeof e=="function"?(this[_].abort=e,this.addEventListener("abort",e)):this[_].abort=null}};at.EMPTY=at.prototype.EMPTY=0;at.LOADING=at.prototype.LOADING=1;at.DONE=at.prototype.DONE=2;Object.defineProperties(at.prototype,{EMPTY:GA,LOADING:GA,DONE:GA,readAsArrayBuffer:Fe,readAsBinaryString:Fe,readAsText:Fe,readAsDataURL:Fe,abort:Fe,readyState:Fe,result:Fe,error:Fe,onloadstart:Fe,onprogress:Fe,onload:Fe,onabort:Fe,onerror:Fe,onloadend:Fe,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(at,{EMPTY:GA,LOADING:GA,DONE:GA});Sd.exports={FileReader:at}});var Jn=B((xP,Ud)=>{"use strict";Ud.exports={kConstruct:$().kConstruct}});var Md=B((OP,Ld)=>{"use strict";var iG=require("node:assert"),{URLSerializer:Gd}=Te(),{isValidHeaderName:aG}=Ge();function cG(t,e,r=!1){let A=Gd(t,r),s=Gd(e,r);return A===s}function gG(t){iG(t!==null);let e=[];for(let r of t.split(","))r=r.trim(),aG(r)&&e.push(r);return e}Ld.exports={urlEquals:cG,getFieldValues:gG}});var Od=B((YP,xd)=>{"use strict";var{kConstruct:lG}=Jn(),{urlEquals:uG,getFieldValues:$g}=Md(),{kEnumerableProperty:xr,isDisturbed:EG}=M(),{webidl:T}=Qe(),{Response:hG,cloneResponse:QG,fromInnerResponse:BG}=Ns(),{Request:Mt,fromInnerRequest:IG}=NA(),{kState:ct}=Pt(),{fetching:CG}=Gs(),{urlIsHttpHttpsScheme:Pn,createDeferredPromise:LA,readAllBytes:dG}=Ge(),el=require("node:assert"),Hn=class t{#e;constructor(){arguments[0]!==lG&&T.illegalConstructor(),T.util.markAsUncloneable(this),this.#e=arguments[1]}async match(e,r={}){T.brandCheck(this,t);let A="Cache.match";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=this.#s(e,r,1);if(s.length!==0)return s[0]}async matchAll(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.matchAll";return e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options"),this.#s(e,r)}async add(e){T.brandCheck(this,t);let r="Cache.add";T.argumentLengthCheck(arguments,1,r),e=T.converters.RequestInfo(e,r,"request");let A=[e];return await this.addAll(A)}async addAll(e){T.brandCheck(this,t);let r="Cache.addAll";T.argumentLengthCheck(arguments,1,r);let A=[],s=[];for(let u of e){if(u===void 0)throw T.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(u=T.converters.RequestInfo(u),typeof u=="string")continue;let E=u[ct];if(!Pn(E.url)||E.method!=="GET")throw T.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let o=[];for(let u of e){let E=new Mt(u)[ct];if(!Pn(E.url))throw T.errors.exception({header:r,message:"Expected http/s scheme."});E.initiator="fetch",E.destination="subresource",s.push(E);let h=LA();o.push(CG({request:E,processResponse(C){if(C.type==="error"||C.status===206||C.status<200||C.status>299)h.reject(T.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(C.headersList.contains("vary")){let I=$g(C.headersList.get("vary"));for(let Q of I)if(Q==="*"){h.reject(T.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let f of o)f.abort();return}}},processResponseEndOfBody(C){if(C.aborted){h.reject(new DOMException("aborted","AbortError"));return}h.resolve(C)}})),A.push(h.promise)}let i=await Promise.all(A),a=[],c=0;for(let u of i){let E={type:"put",request:s[c],response:u};a.push(E),c++}let g=LA(),l=null;try{this.#t(a)}catch(u){l=u}return queueMicrotask(()=>{l===null?g.resolve(void 0):g.reject(l)}),g.promise}async put(e,r){T.brandCheck(this,t);let A="Cache.put";T.argumentLengthCheck(arguments,2,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.Response(r,A,"response");let s=null;if(e instanceof Mt?s=e[ct]:s=new Mt(e)[ct],!Pn(s.url)||s.method!=="GET")throw T.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});let o=r[ct];if(o.status===206)throw T.errors.exception({header:A,message:"Got 206 status"});if(o.headersList.contains("vary")){let E=$g(o.headersList.get("vary"));for(let h of E)if(h==="*")throw T.errors.exception({header:A,message:"Got * vary field value"})}if(o.body&&(EG(o.body.stream)||o.body.stream.locked))throw T.errors.exception({header:A,message:"Response body is locked or disturbed"});let n=QG(o),i=LA();if(o.body!=null){let h=o.body.stream.getReader();dG(h).then(i.resolve,i.reject)}else i.resolve(void 0);let a=[],c={type:"put",request:s,response:n};a.push(c);let g=await i.promise;n.body!=null&&(n.body.source=g);let l=LA(),u=null;try{this.#t(a)}catch(E){u=E}return queueMicrotask(()=>{u===null?l.resolve():l.reject(u)}),l.promise}async delete(e,r={}){T.brandCheck(this,t);let A="Cache.delete";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return!1}else el(typeof e=="string"),s=new Mt(e)[ct];let o=[],n={type:"delete",request:s,options:r};o.push(n);let i=LA(),a=null,c;try{c=this.#t(o)}catch(g){a=g}return queueMicrotask(()=>{a===null?i.resolve(!!c?.length):i.reject(a)}),i.promise}async keys(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.keys";e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=LA(),n=[];if(e===void 0)for(let i of this.#e)n.push(i[0]);else{let i=this.#r(s,r);for(let a of i)n.push(a[0])}return queueMicrotask(()=>{let i=[];for(let a of n){let c=IG(a,new AbortController().signal,"immutable");i.push(c)}o.resolve(Object.freeze(i))}),o.promise}#t(e){let r=this.#e,A=[...r],s=[],o=[];try{for(let n of e){if(n.type!=="delete"&&n.type!=="put")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(n.type==="delete"&&n.response!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#r(n.request,n.options,s).length)throw new DOMException("???","InvalidStateError");let i;if(n.type==="delete"){if(i=this.#r(n.request,n.options),i.length===0)return[];for(let a of i){let c=r.indexOf(a);el(c!==-1),r.splice(c,1)}}else if(n.type==="put"){if(n.response==null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=n.request;if(!Pn(a.url))throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(n.options!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});i=this.#r(n.request);for(let c of i){let g=r.indexOf(c);el(g!==-1),r.splice(g,1)}r.push([n.request,n.response]),s.push([n.request,n.response])}o.push([n.request,n.response])}return o}catch(n){throw this.#e.length=0,this.#e=A,n}}#r(e,r,A){let s=[],o=A??this.#e;for(let n of o){let[i,a]=n;this.#o(e,i,a,r)&&s.push(n)}return s}#o(e,r,A=null,s){let o=new URL(e.url),n=new URL(r.url);if(s?.ignoreSearch&&(n.search="",o.search=""),!uG(o,n,!0))return!1;if(A==null||s?.ignoreVary||!A.headersList.contains("vary"))return!0;let i=$g(A.headersList.get("vary"));for(let a of i){if(a==="*")return!1;let c=r.headersList.get(a),g=e.headersList.get(a);if(c!==g)return!1}return!0}#s(e,r,A=1/0){let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=[];if(e===void 0)for(let i of this.#e)o.push(i[1]);else{let i=this.#r(s,r);for(let a of i)o.push(a[1])}let n=[];for(let i of o){let a=BG(i,"immutable");if(n.push(a.clone()),n.length>=A)break}return Object.freeze(n)}};Object.defineProperties(Hn.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:xr,matchAll:xr,add:xr,addAll:xr,put:xr,delete:xr,keys:xr});var vd=[{key:"ignoreSearch",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:T.converters.boolean,defaultValue:()=>!1}];T.converters.CacheQueryOptions=T.dictionaryConverter(vd);T.converters.MultiCacheQueryOptions=T.dictionaryConverter([...vd,{key:"cacheName",converter:T.converters.DOMString}]);T.converters.Response=T.interfaceConverter(hG);T.converters["sequence"]=T.sequenceConverter(T.converters.RequestInfo);xd.exports={Cache:Hn}});var _d=B((_P,Yd)=>{"use strict";var{kConstruct:Ms}=Jn(),{Cache:Vn}=Od(),{webidl:de}=Qe(),{kEnumerableProperty:vs}=M(),qn=class t{#e=new Map;constructor(){arguments[0]!==Ms&&de.illegalConstructor(),de.util.markAsUncloneable(this)}async match(e,r={}){if(de.brandCheck(this,t),de.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=de.converters.RequestInfo(e),r=de.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let A=this.#e.get(r.cacheName);return await new Vn(Ms,A).match(e,r)}}else for(let A of this.#e.values()){let o=await new Vn(Ms,A).match(e,r);if(o!==void 0)return o}}async has(e){de.brandCheck(this,t);let r="CacheStorage.has";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)}async open(e){de.brandCheck(this,t);let r="CacheStorage.open";if(de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)){let s=this.#e.get(e);return new Vn(Ms,s)}let A=[];return this.#e.set(e,A),new Vn(Ms,A)}async delete(e){de.brandCheck(this,t);let r="CacheStorage.delete";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.delete(e)}async keys(){return de.brandCheck(this,t),[...this.#e.keys()]}};Object.defineProperties(qn.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:vs,has:vs,open:vs,delete:vs,keys:vs});Yd.exports={CacheStorage:qn}});var Pd=B((JP,Jd)=>{"use strict";Jd.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var Al=B((PP,Wd)=>{"use strict";function fG(t){for(let e=0;e=0&&r<=8||r>=10&&r<=31||r===127)return!0}return!1}function tl(t){for(let e=0;e126||r===34||r===40||r===41||r===60||r===62||r===64||r===44||r===59||r===58||r===92||r===47||r===91||r===93||r===63||r===61||r===123||r===125)throw new Error("Invalid cookie name")}}function rl(t){let e=t.length,r=0;if(t[0]==='"'){if(e===1||t[e-1]!=='"')throw new Error("Invalid cookie value");--e,++r}for(;r126||A===34||A===44||A===59||A===92)throw new Error("Invalid cookie value")}}function Vd(t){for(let e=0;e126||r===59)throw new Error("Invalid cookie path")}}function Hd(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function pG(t){if(t===" ")return;if(t.length>255)throw new Error("Invalid cookie domain");let e=0;for(let r=0;r63)throw new Error("Invalid cookie domain")}if(e===0||t.charCodeAt(t.length-1)===45)throw new Error("Invalid cookie domain")}var mG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wn=Array(61).fill(0).map((t,e)=>e.toString().padStart(2,"0"));function qd(t){return typeof t=="number"&&(t=new Date(t)),`${mG[t.getUTCDay()]}, ${Wn[t.getUTCDate()]} ${wG[t.getUTCMonth()]} ${t.getUTCFullYear()} ${Wn[t.getUTCHours()]}:${Wn[t.getUTCMinutes()]}:${Wn[t.getUTCSeconds()]} GMT`}function yG(t){if(t<0)throw new Error("Invalid cookie max-age")}function RG(t){if(t.name.length===0)return null;tl(t.name),rl(t.value);let e=[`${t.name}=${t.value}`];t.name.startsWith("__Secure-")&&(t.secure=!0),t.name.startsWith("__Host-")&&(t.secure=!0,t.domain=null,t.path="/"),t.secure&&e.push("Secure"),t.httpOnly&&e.push("HttpOnly"),typeof t.maxAge=="number"&&(yG(t.maxAge),e.push(`Max-Age=${t.maxAge}`)),t.domain&&(pG(t.domain),e.push(`Domain=${t.domain}`)),t.path&&(Vd(t.path),e.push(`Path=${t.path}`)),t.expires&&t.expires.toString()!=="Invalid Date"&&e.push(`Expires=${qd(t.expires)}`),t.sameSite&&e.push(`SameSite=${t.sameSite}`);for(let r of t.unparsed){if(!r.includes("="))throw new Error("Invalid unparsed");let[A,...s]=r.split("="),o=A.trim(),n=s.join("=");tl(o),rl(n),e.push(`${o}=${n}`)}return e.join("; ")}Wd.exports={isCTLExcludingHtab:fG,validateCookieName:tl,validateCookiePath:Vd,validateCookieValue:rl,toIMFDate:qd,stringify:RG}});var Zd=B((HP,zd)=>{"use strict";var{maxNameValuePairSize:DG,maxAttributeValueSize:TG}=Pd(),{isCTLExcludingHtab:bG}=Al(),{collectASequenceOfCodePointsFast:zn}=Te(),kG=require("node:assert");function FG(t){if(bG(t))return null;let e="",r="",A="",s="";if(t.includes(";")){let o={position:0};e=zn(";",t,o),r=t.slice(o.position)}else e=t;if(!e.includes("="))s=e;else{let o={position:0};A=zn("=",e,o),s=e.slice(o.position+1)}return A=A.trim(),s=s.trim(),A.length+s.length>DG?null:{name:A,value:s,...MA(r)}}function MA(t,e={}){if(t.length===0)return e;kG(t[0]===";"),t=t.slice(1);let r="";t.includes(";")?(r=zn(";",t,{position:0}),t=t.slice(r.length)):(r=t,t="");let A="",s="";if(r.includes("=")){let n={position:0};A=zn("=",r,n),s=r.slice(n.position+1)}else A=r;if(A=A.trim(),s=s.trim(),s.length>TG)return MA(t,e);let o=A.toLowerCase();if(o==="expires"){let n=new Date(s);e.expires=n}else if(o==="max-age"){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!=="-"||!/^\d+$/.test(s))return MA(t,e);let i=Number(s);e.maxAge=i}else if(o==="domain"){let n=s;n[0]==="."&&(n=n.slice(1)),n=n.toLowerCase(),e.domain=n}else if(o==="path"){let n="";s.length===0||s[0]!=="/"?n="/":n=s,e.path=n}else if(o==="secure")e.secure=!0;else if(o==="httponly")e.httpOnly=!0;else if(o==="samesite"){let n=s.toLowerCase();n==="none"?e.sameSite="None":n==="strict"?e.sameSite="Strict":n==="lax"&&(e.sameSite="Lax")}else e.unparsed??=[],e.unparsed.push(`${A}=${s}`);return MA(t,e)}zd.exports={parseSetCookie:FG,parseUnparsedAttributes:MA}});var Xd=B((VP,Kd)=>{"use strict";var{parseSetCookie:SG}=Zd(),{stringify:NG}=Al(),{webidl:x}=Qe(),{Headers:Zn}=Ur();function UG(t){x.argumentLengthCheck(arguments,1,"getCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.get("cookie"),r={};if(!e)return r;for(let A of e.split(";")){let[s,...o]=A.split("=");r[s.trim()]=o.join("=")}return r}function GG(t,e,r){x.brandCheck(t,Zn,{strict:!1});let A="deleteCookie";x.argumentLengthCheck(arguments,2,A),e=x.converters.DOMString(e,A,"name"),r=x.converters.DeleteCookieAttributes(r),jd(t,{name:e,value:"",expires:new Date(0),...r})}function LG(t){x.argumentLengthCheck(arguments,1,"getSetCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.getSetCookie();return e?e.map(r=>SG(r)):[]}function jd(t,e){x.argumentLengthCheck(arguments,2,"setCookie"),x.brandCheck(t,Zn,{strict:!1}),e=x.converters.Cookie(e);let r=NG(e);r&&t.append("Set-Cookie",r)}x.converters.DeleteCookieAttributes=x.dictionaryConverter([{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null}]);x.converters.Cookie=x.dictionaryConverter([{converter:x.converters.DOMString,key:"name"},{converter:x.converters.DOMString,key:"value"},{converter:x.nullableConverter(t=>typeof t=="number"?x.converters["unsigned long long"](t):new Date(t)),key:"expires",defaultValue:()=>null},{converter:x.nullableConverter(x.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"secure",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:x.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:x.sequenceConverter(x.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);Kd.exports={getCookies:UG,deleteCookie:GG,getSetCookies:LG,setCookie:jd}});var xA=B((qP,ef)=>{"use strict";var{webidl:D}=Qe(),{kEnumerableProperty:Se}=M(),{kConstruct:$d}=$(),{MessagePort:MG}=require("node:worker_threads"),vA=class t extends Event{#e;constructor(e,r={}){if(e===$d){super(arguments[1],arguments[2]),D.util.markAsUncloneable(this);return}let A="MessageEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.MessageEventInit(r,A,"eventInitDict"),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get data(){return D.brandCheck(this,t),this.#e.data}get origin(){return D.brandCheck(this,t),this.#e.origin}get lastEventId(){return D.brandCheck(this,t),this.#e.lastEventId}get source(){return D.brandCheck(this,t),this.#e.source}get ports(){return D.brandCheck(this,t),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(e,r=!1,A=!1,s=null,o="",n="",i=null,a=[]){return D.brandCheck(this,t),D.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new t(e,{bubbles:r,cancelable:A,data:s,origin:o,lastEventId:n,source:i,ports:a})}static createFastMessageEvent(e,r){let A=new t($d,e,r);return A.#e=r,A.#e.data??=null,A.#e.origin??="",A.#e.lastEventId??="",A.#e.source??=null,A.#e.ports??=[],A}},{createFastMessageEvent:vG}=vA;delete vA.createFastMessageEvent;var jn=class t extends Event{#e;constructor(e,r={}){let A="CloseEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.CloseEventInit(r),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get wasClean(){return D.brandCheck(this,t),this.#e.wasClean}get code(){return D.brandCheck(this,t),this.#e.code}get reason(){return D.brandCheck(this,t),this.#e.reason}},Kn=class t extends Event{#e;constructor(e,r){let A="ErrorEvent constructor";D.argumentLengthCheck(arguments,1,A),super(e,r),D.util.markAsUncloneable(this),e=D.converters.DOMString(e,A,"type"),r=D.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return D.brandCheck(this,t),this.#e.message}get filename(){return D.brandCheck(this,t),this.#e.filename}get lineno(){return D.brandCheck(this,t),this.#e.lineno}get colno(){return D.brandCheck(this,t),this.#e.colno}get error(){return D.brandCheck(this,t),this.#e.error}};Object.defineProperties(vA.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:Se,origin:Se,lastEventId:Se,source:Se,ports:Se,initMessageEvent:Se});Object.defineProperties(jn.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:Se,code:Se,wasClean:Se});Object.defineProperties(Kn.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:Se,filename:Se,lineno:Se,colno:Se,error:Se});D.converters.MessagePort=D.interfaceConverter(MG);D.converters["sequence"]=D.sequenceConverter(D.converters.MessagePort);var sl=[{key:"bubbles",converter:D.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:D.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:D.converters.boolean,defaultValue:()=>!1}];D.converters.MessageEventInit=D.dictionaryConverter([...sl,{key:"data",converter:D.converters.any,defaultValue:()=>null},{key:"origin",converter:D.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:D.converters.DOMString,defaultValue:()=>""},{key:"source",converter:D.nullableConverter(D.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:D.converters["sequence"],defaultValue:()=>new Array(0)}]);D.converters.CloseEventInit=D.dictionaryConverter([...sl,{key:"wasClean",converter:D.converters.boolean,defaultValue:()=>!1},{key:"code",converter:D.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:D.converters.USVString,defaultValue:()=>""}]);D.converters.ErrorEventInit=D.dictionaryConverter([...sl,{key:"message",converter:D.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:D.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:D.converters.any}]);ef.exports={MessageEvent:vA,CloseEvent:jn,ErrorEvent:Kn,createFastMessageEvent:vG}});var Or=B((WP,tf)=>{"use strict";var xG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",OG={enumerable:!0,writable:!1,configurable:!1},YG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},_G={NOT_SENT:0,PROCESSING:1,SENT:2},JG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},PG=2**16-1,HG={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},VG=Buffer.allocUnsafe(0),qG={string:1,typedArray:2,arrayBuffer:3,blob:4};tf.exports={uid:xG,sentCloseFrameState:_G,staticPropertyDescriptors:OG,states:YG,opcodes:JG,maxUnsigned16Bit:PG,parserStates:HG,emptyBuffer:VG,sendHints:qG}});var xs=B((zP,rf)=>{"use strict";rf.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var _s=B((ZP,uf)=>{"use strict";var{kReadyState:Os,kController:WG,kResponse:zG,kBinaryType:ZG,kWebSocketURL:jG}=xs(),{states:Ys,opcodes:Ar}=Or(),{ErrorEvent:KG,createFastMessageEvent:XG}=xA(),{isUtf8:$G}=require("node:buffer"),{collectASequenceOfCodePointsFast:eL,removeHTTPWhitespace:Af}=Te();function tL(t){return t[Os]===Ys.CONNECTING}function rL(t){return t[Os]===Ys.OPEN}function AL(t){return t[Os]===Ys.CLOSING}function sL(t){return t[Os]===Ys.CLOSED}function ol(t,e,r=(s,o)=>new Event(s,o),A={}){let s=r(t,A);e.dispatchEvent(s)}function oL(t,e,r){if(t[Os]!==Ys.OPEN)return;let A;if(e===Ar.TEXT)try{A=lf(r)}catch{of(t,"Received invalid UTF-8 in text frame.");return}else e===Ar.BINARY&&(t[ZG]==="blob"?A=new Blob([r]):A=nL(r));ol("message",t,XG,{origin:t[jG].origin,data:A})}function nL(t){return t.byteLength===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function iL(t){if(t.length===0)return!1;for(let e=0;e126||r===34||r===40||r===41||r===44||r===47||r===58||r===59||r===60||r===61||r===62||r===63||r===64||r===91||r===92||r===93||r===123||r===125)return!1}return!0}function aL(t){return t>=1e3&&t<1015?t!==1004&&t!==1005&&t!==1006:t>=3e3&&t<=4999}function of(t,e){let{[WG]:r,[zG]:A}=t;r.abort(),A?.socket&&!A.socket.destroyed&&A.socket.destroy(),e&&ol("error",t,(s,o)=>new KG(s,o),{error:new Error(e),message:e})}function nf(t){return t===Ar.CLOSE||t===Ar.PING||t===Ar.PONG}function af(t){return t===Ar.CONTINUATION}function cf(t){return t===Ar.TEXT||t===Ar.BINARY}function cL(t){return cf(t)||af(t)||nf(t)}function gL(t){let e={position:0},r=new Map;for(;e.position57)return!1}let e=Number.parseInt(t,10);return e>=8&&e<=15}var gf=typeof process.versions.icu=="string",sf=gf?new TextDecoder("utf-8",{fatal:!0}):void 0,lf=gf?sf.decode.bind(sf):function(t){if($G(t))return t.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};uf.exports={isConnecting:tL,isEstablished:rL,isClosing:AL,isClosed:sL,fireEvent:ol,isValidSubprotocol:iL,isValidStatusCode:aL,failWebsocketConnection:of,websocketMessageReceived:oL,utf8Decode:lf,isControlFrame:nf,isContinuationFrame:af,isTextBinaryFrame:cf,isValidOpcode:cL,parseExtensions:gL,isValidClientWindowBits:lL}});var $n=B((jP,Ef)=>{"use strict";var{maxUnsigned16Bit:uL}=Or(),Xn=16386,nl,Js=null,OA=Xn;try{nl=require("node:crypto")}catch{nl={randomFillSync:function(e,r,A){for(let s=0;suL?(n+=8,o=127):s>125&&(n+=2,o=126);let i=Buffer.allocUnsafe(s+n);i[0]=i[1]=0,i[0]|=128,i[0]=(i[0]&240)+e;i[n-4]=A[0],i[n-3]=A[1],i[n-2]=A[2],i[n-1]=A[3],i[1]=o,o===126?i.writeUInt16BE(s,2):o===127&&(i[2]=i[3]=0,i.writeUIntBE(s,4,6)),i[1]|=128;for(let a=0;a{"use strict";var{uid:hL,states:Ps,sentCloseFrameState:ei,emptyBuffer:QL,opcodes:BL}=Or(),{kReadyState:Hs,kSentClose:ti,kByteParser:Qf,kReceivedClose:hf,kResponse:Bf}=xs(),{fireEvent:IL,failWebsocketConnection:sr,isClosing:CL,isClosed:dL,isEstablished:fL,parseExtensions:pL}=_s(),{channels:YA}=jr(),{CloseEvent:mL}=xA(),{makeRequest:wL}=NA(),{fetching:yL}=Gs(),{Headers:RL,getHeadersList:DL}=Ur(),{getDecodeSplit:TL}=Ge(),{WebsocketFrameSend:bL}=$n(),al;try{al=require("node:crypto")}catch{}function kL(t,e,r,A,s,o){let n=t;n.protocol=t.protocol==="ws:"?"http:":"https:";let i=wL({urlList:[n],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(o.headers){let l=DL(new RL(o.headers));i.headersList=l}let a=al.randomBytes(16).toString("base64");i.headersList.append("sec-websocket-key",a),i.headersList.append("sec-websocket-version","13");for(let l of e)i.headersList.append("sec-websocket-protocol",l);return i.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),yL({request:i,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(l){if(l.type==="error"||l.status!==101){sr(A,"Received network error or non-101 status code.");return}if(e.length!==0&&!l.headersList.get("Sec-WebSocket-Protocol")){sr(A,"Server did not respond with sent protocols.");return}if(l.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){sr(A,'Server did not set Upgrade header to "websocket".');return}if(l.headersList.get("Connection")?.toLowerCase()!=="upgrade"){sr(A,'Server did not set Connection header to "upgrade".');return}let u=l.headersList.get("Sec-WebSocket-Accept"),E=al.createHash("sha1").update(a+hL).digest("base64");if(u!==E){sr(A,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let h=l.headersList.get("Sec-WebSocket-Extensions"),C;if(h!==null&&(C=pL(h),!C.has("permessage-deflate"))){sr(A,"Sec-WebSocket-Extensions header does not match.");return}let I=l.headersList.get("Sec-WebSocket-Protocol");if(I!==null&&!TL("sec-websocket-protocol",i.headersList).includes(I)){sr(A,"Protocol was not set in the opening handshake.");return}l.socket.on("data",If),l.socket.on("close",Cf),l.socket.on("error",df),YA.open.hasSubscribers&&YA.open.publish({address:l.socket.address(),protocol:I,extensions:h}),s(l,C)}})}function FL(t,e,r,A){if(!(CL(t)||dL(t)))if(!fL(t))sr(t,"Connection was closed before it was established."),t[Hs]=Ps.CLOSING;else if(t[ti]===ei.NOT_SENT){t[ti]=ei.PROCESSING;let s=new bL;e!==void 0&&r===void 0?(s.frameData=Buffer.allocUnsafe(2),s.frameData.writeUInt16BE(e,0)):e!==void 0&&r!==void 0?(s.frameData=Buffer.allocUnsafe(2+A),s.frameData.writeUInt16BE(e,0),s.frameData.write(r,2,"utf-8")):s.frameData=QL,t[Bf].socket.write(s.createFrame(BL.CLOSE)),t[ti]=ei.SENT,t[Hs]=Ps.CLOSING}else t[Hs]=Ps.CLOSING}function If(t){this.ws[Qf].write(t)||this.pause()}function Cf(){let{ws:t}=this,{[Bf]:e}=t;e.socket.off("data",If),e.socket.off("close",Cf),e.socket.off("error",df);let r=t[ti]===ei.SENT&&t[hf],A=1005,s="",o=t[Qf].closingInfo;o&&!o.error?(A=o.code??1005,s=o.reason):t[hf]||(A=1006),t[Hs]=Ps.CLOSED,IL("close",t,(n,i)=>new mL(n,i),{wasClean:r,code:A,reason:s}),YA.close.hasSubscribers&&YA.close.publish({websocket:t,code:A,reason:s})}function df(t){let{ws:e}=this;e[Hs]=Ps.CLOSING,YA.socketError.hasSubscribers&&YA.socketError.publish(t),this.destroy()}ff.exports={establishWebSocketConnection:kL,closeWebSocketConnection:FL}});var mf=B((XP,pf)=>{"use strict";var{createInflateRaw:SL,Z_DEFAULT_WINDOWBITS:NL}=require("node:zlib"),{isValidClientWindowBits:UL}=_s(),{MessageSizeExceededError:GL}=Y(),LL=Buffer.from([0,0,255,255]),ri=Symbol("kBuffer"),Vs=Symbol("kLength"),gl=class{#e;#t={};#r=0;constructor(e,r){this.#t.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=e.get("server_max_window_bits"),this.#r=r.maxPayloadSize}decompress(e,r,A){if(!this.#e){let s=NL;if(this.#t.serverMaxWindowBits){if(!UL(this.#t.serverMaxWindowBits)){A(new Error("Invalid server_max_window_bits"));return}s=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=SL({windowBits:s})}catch(o){A(o);return}this.#e[ri]=[],this.#e[Vs]=0,this.#e.on("data",o=>{if(this.#e[Vs]+=o.length,this.#r>0&&this.#e[Vs]>this.#r){A(new GL),this.#e.removeAllListeners(),this.#e=null;return}this.#e[ri].push(o)}),this.#e.on("error",o=>{this.#e=null,A(o)})}this.#e.write(e),r&&this.#e.write(LL),this.#e.flush(()=>{if(!this.#e)return;let s=Buffer.concat(this.#e[ri],this.#e[Vs]);this.#e[ri].length=0,this.#e[Vs]=0,A(null,s)})}};pf.exports={PerMessageDeflate:gl}});var Nf=B(($P,Sf)=>{"use strict";var{Writable:ML}=require("node:stream"),vL=require("node:assert"),{parserStates:Ne,opcodes:_A,states:xL,emptyBuffer:wf,sentCloseFrameState:yf}=Or(),{kReadyState:OL,kSentClose:Rf,kResponse:Df,kReceivedClose:Tf}=xs(),{channels:Ai}=jr(),{isValidStatusCode:YL,isValidOpcode:_L,failWebsocketConnection:Je,websocketMessageReceived:bf,utf8Decode:JL,isControlFrame:ll,isTextBinaryFrame:ul,isContinuationFrame:PL}=_s(),{WebsocketFrameSend:kf}=$n(),{closeWebSocketConnection:Ff}=cl(),{PerMessageDeflate:HL}=mf(),{MessageSizeExceededError:El}=Y();function qs(t,e,r){Ff(t,e,r,Buffer.byteLength(r)),Je(t,r)}var hl=class extends ML{#e=[];#t=0;#r=0;#o=!1;#s=Ne.INFO;#A={};#n=[];#i;#c;#a;constructor(e,r,A={}){super(),this.ws=e,this.#i=r??new Map,this.#c=A.maxFragments??0,this.#a=A.maxPayloadSize??0,this.#i.has("permessage-deflate")&&this.#i.set("permessage-deflate",new HL(r,A))}_write(e,r,A){this.#e.push(e),this.#r+=e.length,this.#o=!0,this.run(A)}#g(){return this.#a>0&&!ll(this.#A.opcode)&&this.#A.payloadLength+this.#t>this.#a?(qs(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(e){for(;this.#o;)if(this.#s===Ne.INFO){if(this.#r<2)return e();let r=this.consume(2),A=(r[0]&128)!==0,s=r[0]&15,o=(r[1]&128)===128,n=!A&&s!==_A.CONTINUATION,i=r[1]&127,a=r[0]&64,c=r[0]&32,g=r[0]&16;if(!_L(s))return Je(this.ws,"Invalid opcode received"),e();if(o)return Je(this.ws,"Frame cannot be masked"),e();if(a!==0&&!this.#i.has("permessage-deflate")){Je(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||g!==0){Je(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(n&&!ul(s)){Je(this.ws,"Invalid frame type was fragmented.");return}if(ul(s)&&this.#n.length>0){Je(this.ws,"Expected continuation frame");return}if(this.#A.fragmented&&n){Je(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((i>125||n)&&ll(s)){Je(this.ws,"Control frame either too large or fragmented");return}if(PL(s)&&this.#n.length===0&&!this.#A.compressed){Je(this.ws,"Unexpected continuation frame");return}if(i<=125){if(this.#A.payloadLength=i,this.#s=Ne.READ_DATA,!this.#g())return}else i===126?this.#s=Ne.PAYLOADLENGTH_16:i===127&&(this.#s=Ne.PAYLOADLENGTH_64);ul(s)&&(this.#A.binaryType=s,this.#A.compressed=a!==0),this.#A.opcode=s,this.#A.masked=o,this.#A.fin=A,this.#A.fragmented=n}else if(this.#s===Ne.PAYLOADLENGTH_16){if(this.#r<2)return e();let r=this.consume(2);if(this.#A.payloadLength=r.readUInt16BE(0),this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.PAYLOADLENGTH_64){if(this.#r<8)return e();let r=this.consume(8),A=r.readUInt32BE(0),s=r.readUInt32BE(4);if(A!==0||s>2**31-1){Je(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#A.payloadLength=s,this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.READ_DATA){if(this.#r{if(A){let o=A instanceof El?1009:1007;qs(this.ws,o,A.message);return}if(this.writeFragments(s)){if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}if(!this.#A.fin){this.#s=Ne.INFO,this.#o=!0,this.run(e);return}bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#o=!0,this.#s=Ne.INFO,this.run(e)}}),this.#o=!1;break}else{if(!this.writeFragments(r))return;if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}!this.#A.fragmented&&this.#A.fin&&bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#s=Ne.INFO}}}consume(e){if(e>this.#r)throw new Error("Called consume() before buffers satiated.");if(e===0)return wf;if(this.#e[0].length===e)return this.#r-=this.#e[0].length,this.#e.shift();let r=Buffer.allocUnsafe(e),A=0;for(;A!==e;){let s=this.#e[0],{length:o}=s;if(o+A===e){r.set(this.#e.shift(),A);break}else if(o+A>e){r.set(s.subarray(0,e-A),A),this.#e[0]=s.subarray(e-A);break}else r.set(this.#e.shift(),A),A+=s.length}return this.#r-=e,r}writeFragments(e){return this.#c>0&&this.#n.length===this.#c?(qs(this.ws,1008,"Too many message fragments"),!1):(this.#t+=e.length,this.#n.push(e),!0)}consumeFragments(){let e=this.#n;if(e.length===1)return this.#t=0,e.shift();let r=Buffer.concat(e,this.#t);return this.#n=[],this.#t=0,r}parseCloseBody(e){vL(e.length!==1);let r;if(e.length>=2&&(r=e.readUInt16BE(0)),r!==void 0&&!YL(r))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);A[0]===239&&A[1]===187&&A[2]===191&&(A=A.subarray(3));try{A=JL(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:r,reason:A,error:!1}}parseControlFrame(e){let{opcode:r,payloadLength:A}=this.#A;if(r===_A.CLOSE){if(A===1)return Je(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#A.closeInfo=this.parseCloseBody(e),this.#A.closeInfo.error){let{code:s,reason:o}=this.#A.closeInfo;return Ff(this.ws,s,o,o.length),Je(this.ws,o),!1}if(this.ws[Rf]!==yf.SENT){let s=wf;this.#A.closeInfo.code&&(s=Buffer.allocUnsafe(2),s.writeUInt16BE(this.#A.closeInfo.code,0));let o=new kf(s);this.ws[Df].socket.write(o.createFrame(_A.CLOSE),n=>{n||(this.ws[Rf]=yf.SENT)})}return this.ws[OL]=xL.CLOSING,this.ws[Tf]=!0,!1}else if(r===_A.PING){if(!this.ws[Tf]){let s=new kf(e);this.ws[Df].socket.write(s.createFrame(_A.PONG)),Ai.ping.hasSubscribers&&Ai.ping.publish({payload:e})}}else r===_A.PONG&&Ai.pong.hasSubscribers&&Ai.pong.publish({payload:e});return!0}get closingInfo(){return this.#A.closeInfo}};Sf.exports={ByteParser:hl}});var vf=B((eH,Mf)=>{"use strict";var{WebsocketFrameSend:VL}=$n(),{opcodes:Uf,sendHints:JA}=Or(),qL=fc(),Gf=Buffer[Symbol.species],Ql=class{#e=new qL;#t=!1;#r;constructor(e){this.#r=e}add(e,r,A){if(A!==JA.blob){let o=Lf(e,A);if(!this.#t)this.#r.write(o,r);else{let n={promise:null,callback:r,frame:o};this.#e.push(n)}return}let s={promise:e.arrayBuffer().then(o=>{s.promise=null,s.frame=Lf(o,A)}),callback:r,frame:null};this.#e.push(s),this.#t||this.#o()}async#o(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let r=e.shift();r.promise!==null&&await r.promise,this.#r.write(r.frame,r.callback),r.callback=r.frame=null}this.#t=!1}};function Lf(t,e){return new VL(WL(t,e)).createFrame(e===JA.string?Uf.TEXT:Uf.BINARY)}function WL(t,e){switch(e){case JA.string:return Buffer.from(t);case JA.arrayBuffer:case JA.blob:return new Gf(t);case JA.typedArray:return new Gf(t.buffer,t.byteOffset,t.byteLength)}}Mf.exports={SendQueue:Ql}});var Wf=B((tH,qf)=>{"use strict";var{webidl:U}=Qe(),{URLSerializer:zL}=Te(),{environmentSettingsObject:xf}=Ge(),{staticPropertyDescriptors:or,states:Ws,sentCloseFrameState:ZL,sendHints:si}=Or(),{kWebSocketURL:Of,kReadyState:Bl,kController:Yf,kBinaryType:oi,kResponse:_f,kSentClose:jL,kByteParser:KL}=xs(),{isConnecting:XL,isEstablished:$L,isClosing:eM,isValidSubprotocol:tM,fireEvent:Jf}=_s(),{establishWebSocketConnection:rM,closeWebSocketConnection:Pf}=cl(),{ByteParser:AM}=Nf(),{kEnumerableProperty:Ze,isBlobLike:Hf}=M(),{getGlobalDispatcher:sM}=fn(),{types:Vf}=require("node:util"),{ErrorEvent:oM,CloseEvent:nM}=xA(),{SendQueue:iM}=vf(),Pe=class t extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#o="";#s;constructor(e,r=[]){super(),U.util.markAsUncloneable(this);let A="WebSocket constructor";U.argumentLengthCheck(arguments,1,A);let s=U.converters["DOMString or sequence or WebSocketInit"](r,A,"options");e=U.converters.USVString(e,A,"url"),r=s.protocols;let o=xf.settingsObject.baseUrl,n;try{n=new URL(e,o)}catch(a){throw new DOMException(a,"SyntaxError")}if(n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),n.protocol!=="ws:"&&n.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${n.protocol}`,"SyntaxError");if(n.hash||n.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof r=="string"&&(r=[r]),r.length!==new Set(r.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(r.length>0&&!r.every(a=>tM(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[Of]=new URL(n.href);let i=xf.settingsObject;this[Yf]=rM(n,r,i,this,(a,c)=>this.#A(a,c),s),this[Bl]=t.CONNECTING,this[jL]=ZL.NOT_SENT,this[oi]="blob"}close(e=void 0,r=void 0){U.brandCheck(this,t);let A="WebSocket.close";if(e!==void 0&&(e=U.converters["unsigned short"](e,A,"code",{clamp:!0})),r!==void 0&&(r=U.converters.USVString(r,A,"reason")),e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");let s=0;if(r!==void 0&&(s=Buffer.byteLength(r),s>123))throw new DOMException(`Reason must be less than 123 bytes; received ${s}`,"SyntaxError");Pf(this,e,r,s)}send(e){U.brandCheck(this,t);let r="WebSocket.send";if(U.argumentLengthCheck(arguments,1,r),e=U.converters.WebSocketSendData(e,r,"data"),XL(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!$L(this)||eM(this)))if(typeof e=="string"){let A=Buffer.byteLength(e);this.#t+=A,this.#s.add(e,()=>{this.#t-=A},si.string)}else Vf.isArrayBuffer(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.arrayBuffer)):ArrayBuffer.isView(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.typedArray)):Hf(e)&&(this.#t+=e.size,this.#s.add(e,()=>{this.#t-=e.size},si.blob))}get readyState(){return U.brandCheck(this,t),this[Bl]}get bufferedAmount(){return U.brandCheck(this,t),this.#t}get url(){return U.brandCheck(this,t),zL(this[Of])}get extensions(){return U.brandCheck(this,t),this.#o}get protocol(){return U.brandCheck(this,t),this.#r}get onopen(){return U.brandCheck(this,t),this.#e.open}set onopen(e){U.brandCheck(this,t),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onerror(){return U.brandCheck(this,t),this.#e.error}set onerror(e){U.brandCheck(this,t),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}get onclose(){return U.brandCheck(this,t),this.#e.close}set onclose(e){U.brandCheck(this,t),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof e=="function"?(this.#e.close=e,this.addEventListener("close",e)):this.#e.close=null}get onmessage(){return U.brandCheck(this,t),this.#e.message}set onmessage(e){U.brandCheck(this,t),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get binaryType(){return U.brandCheck(this,t),this[oi]}set binaryType(e){U.brandCheck(this,t),e!=="blob"&&e!=="arraybuffer"?this[oi]="blob":this[oi]=e}#A(e,r){this[_f]=e;let A=this[Yf]?.dispatcher?.webSocketOptions,s=A?.maxFragments,o=A?.maxPayloadSize,n=new AM(this,r,{maxFragments:s,maxPayloadSize:o});n.on("drain",aM),n.on("error",cM.bind(this)),e.socket.ws=this,this[KL]=n,this.#s=new iM(e.socket),this[Bl]=Ws.OPEN;let i=e.headersList.get("sec-websocket-extensions");i!==null&&(this.#o=i);let a=e.headersList.get("sec-websocket-protocol");a!==null&&(this.#r=a),Jf("open",this)}};Pe.CONNECTING=Pe.prototype.CONNECTING=Ws.CONNECTING;Pe.OPEN=Pe.prototype.OPEN=Ws.OPEN;Pe.CLOSING=Pe.prototype.CLOSING=Ws.CLOSING;Pe.CLOSED=Pe.prototype.CLOSED=Ws.CLOSED;Object.defineProperties(Pe.prototype,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or,url:Ze,readyState:Ze,bufferedAmount:Ze,onopen:Ze,onerror:Ze,onclose:Ze,close:Ze,onmessage:Ze,binaryType:Ze,send:Ze,extensions:Ze,protocol:Ze,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Pe,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or});U.converters["sequence"]=U.sequenceConverter(U.converters.DOMString);U.converters["DOMString or sequence"]=function(t,e,r){return U.util.Type(t)==="Object"&&Symbol.iterator in t?U.converters["sequence"](t):U.converters.DOMString(t,e,r)};U.converters.WebSocketInit=U.dictionaryConverter([{key:"protocols",converter:U.converters["DOMString or sequence"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:U.converters.any,defaultValue:()=>sM()},{key:"headers",converter:U.nullableConverter(U.converters.HeadersInit)}]);U.converters["DOMString or sequence or WebSocketInit"]=function(t){return U.util.Type(t)==="Object"&&!(Symbol.iterator in t)?U.converters.WebSocketInit(t):{protocols:U.converters["DOMString or sequence"](t)}};U.converters.WebSocketSendData=function(t){if(U.util.Type(t)==="Object"){if(Hf(t))return U.converters.Blob(t,{strict:!1});if(ArrayBuffer.isView(t)||Vf.isArrayBuffer(t))return U.converters.BufferSource(t)}return U.converters.USVString(t)};function aM(){this.ws[_f].socket.resume()}function cM(t){let e,r;t instanceof nM?(e=t.reason,r=t.code):e=t.message,Jf("error",this,()=>new oM("error",{error:t,message:e})),Pf(this,r)}qf.exports={WebSocket:Pe}});var Il=B((rH,zf)=>{"use strict";function gM(t){return t.indexOf("\0")===-1}function lM(t){if(t.length===0)return!1;for(let e=0;e57)return!1;return!0}function uM(t){return new Promise(e=>{setTimeout(e,t).unref()})}zf.exports={isValidLastEventId:gM,isASCIINumber:lM,delay:uM}});var Xf=B((AH,Kf)=>{"use strict";var{Transform:EM}=require("node:stream"),{isASCIINumber:Zf,isValidLastEventId:jf}=Il(),vt=[239,187,191],Cl=10,ni=13,hM=58,QM=32,dl=class extends EM{state=null;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,r,A){if(e.length===0){A();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===vt[0]){A();return}this.checkBOM=!1,A();return;case 2:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]){A();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,A();return}this.checkBOM=!1;break;default:this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1;break}for(;this.pos0&&(r[s]=o);break}}processEvent(e){e.retry&&Zf(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&jf(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};Kf.exports={EventSourceStream:dl}});var np=B((sH,op)=>{"use strict";var{pipeline:BM}=require("node:stream"),{fetching:IM}=Gs(),{makeRequest:CM}=NA(),{webidl:xt}=Qe(),{EventSourceStream:dM}=Xf(),{parseMIMEType:fM}=Te(),{createFastMessageEvent:pM}=xA(),{isNetworkError:$f}=Ns(),{delay:mM}=Il(),{kEnumerableProperty:Yr}=M(),{environmentSettingsObject:ep}=Ge(),tp=!1,rp=3e3,zs=0,Ap=1,Zs=2,wM="anonymous",yM="use-credentials",PA=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#o=zs;#s=null;#A=null;#n;#i;constructor(e,r={}){super(),xt.util.markAsUncloneable(this);let A="EventSource constructor";xt.argumentLengthCheck(arguments,1,A),tp||(tp=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=xt.converters.USVString(e,A,"url"),r=xt.converters.EventSourceInitDict(r,A,"eventSourceInitDict"),this.#n=r.dispatcher,this.#i={lastEventId:"",reconnectionTime:rp};let s=ep,o;try{o=new URL(e,s.settingsObject.baseUrl),this.#i.origin=o.origin}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=o.href;let n=wM;r.withCredentials&&(n=yM,this.#r=!0);let i={redirect:"follow",keepalive:!0,mode:"cors",credentials:n==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};i.client=ep.settingsObject,i.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],i.cache="no-store",i.initiator="other",i.urlList=[new URL(this.#t)],this.#s=CM(i),this.#c()}get readyState(){return this.#o}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#o===Zs)return;this.#o=zs;let e={request:this.#s,dispatcher:this.#n},r=A=>{$f(A)&&(this.dispatchEvent(new Event("error")),this.close()),this.#a()};e.processResponseEndOfBody=r,e.processResponse=A=>{if($f(A))if(A.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#a();return}let s=A.headersList.get("content-type",!0),o=s!==null?fM(s):"failure",n=o!=="failure"&&o.essence==="text/event-stream";if(A.status!==200||n===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#o=Ap,this.dispatchEvent(new Event("open")),this.#i.origin=A.urlList[A.urlList.length-1].origin;let i=new dM({eventSourceSettings:this.#i,push:a=>{this.dispatchEvent(pM(a.type,a.options))}});BM(A.body.stream,i,a=>{a?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#A=IM(e)}async#a(){this.#o!==Zs&&(this.#o=zs,this.dispatchEvent(new Event("error")),await mM(this.#i.reconnectionTime),this.#o===zs&&(this.#i.lastEventId.length&&this.#s.headersList.set("last-event-id",this.#i.lastEventId,!0),this.#c()))}close(){xt.brandCheck(this,t),this.#o!==Zs&&(this.#o=Zs,this.#A.abort(),this.#s=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}},sp={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:zs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:Ap,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:Zs,writable:!1}};Object.defineProperties(PA,sp);Object.defineProperties(PA.prototype,sp);Object.defineProperties(PA.prototype,{close:Yr,onerror:Yr,onmessage:Yr,onopen:Yr,readyState:Yr,url:Yr,withCredentials:Yr});xt.converters.EventSourceInitDict=xt.dictionaryConverter([{key:"withCredentials",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:xt.converters.any}]);op.exports={EventSource:PA,defaultReconnectionTime:rp}});var ci=B((oH,N)=>{"use strict";var RM=BA(),ip=$A(),DM=IA(),TM=AB(),bM=CA(),kM=Yc(),FM=TB(),SM=GB(),ap=Y(),ai=M(),{InvalidArgumentError:ii}=ap,HA=fI(),NM=ts(),UM=pg(),GM=rC(),LM=yg(),MM=ag(),vM=gn(),{getGlobalDispatcher:cp,setGlobalDispatcher:xM}=fn(),OM=pn(),YM=Xo(),_M=$o();Object.assign(ip.prototype,HA);N.exports.Dispatcher=ip;N.exports.Client=RM;N.exports.Pool=DM;N.exports.BalancedPool=TM;N.exports.Agent=bM;N.exports.ProxyAgent=kM;N.exports.EnvHttpProxyAgent=FM;N.exports.RetryAgent=SM;N.exports.RetryHandler=vM;N.exports.DecoratorHandler=OM;N.exports.RedirectHandler=YM;N.exports.createRedirectInterceptor=_M;N.exports.interceptors={redirect:cC(),retry:lC(),dump:EC(),dns:BC()};N.exports.buildConnector=NM;N.exports.errors=ap;N.exports.util={parseHeaders:ai.parseHeaders,headerNameToString:ai.headerNameToString};function js(t){return(e,r,A)=>{if(typeof r=="function"&&(A=r,r=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new ii("invalid url");if(r!=null&&typeof r!="object")throw new ii("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new ii("invalid opts.path");let n=r.path;r.path.startsWith("/")||(n=`/${n}`),e=new URL(ai.parseOrigin(e).origin+n)}else r||(r=typeof e=="object"?e:{}),e=ai.parseURL(e);let{agent:s,dispatcher:o=cp()}=r;if(s)throw new ii("unsupported opts.agent. Did you mean opts.client?");return t.call(o,{...r,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:r.method||(r.body?"PUT":"GET")},A)}}N.exports.setGlobalDispatcher=xM;N.exports.getGlobalDispatcher=cp;var JM=Gs().fetch;N.exports.fetch=async function(e,r=void 0){try{return await JM(e,r)}catch(A){throw A&&typeof A=="object"&&Error.captureStackTrace(A),A}};N.exports.Headers=Ur().Headers;N.exports.Response=Ns().Response;N.exports.Request=NA().Request;N.exports.FormData=as().FormData;N.exports.File=globalThis.File??require("node:buffer").File;N.exports.FileReader=Nd().FileReader;var{setGlobalOrigin:PM,getGlobalOrigin:HM}=_a();N.exports.setGlobalOrigin=PM;N.exports.getGlobalOrigin=HM;var{CacheStorage:VM}=_d(),{kConstruct:qM}=Jn();N.exports.caches=new VM(qM);var{deleteCookie:WM,getCookies:zM,getSetCookies:ZM,setCookie:jM}=Xd();N.exports.deleteCookie=WM;N.exports.getCookies=zM;N.exports.getSetCookies=ZM;N.exports.setCookie=jM;var{parseMIMEType:KM,serializeAMimeType:XM}=Te();N.exports.parseMIMEType=KM;N.exports.serializeAMimeType=XM;var{CloseEvent:$M,ErrorEvent:ev,MessageEvent:tv}=xA();N.exports.WebSocket=Wf().WebSocket;N.exports.CloseEvent=$M;N.exports.ErrorEvent=ev;N.exports.MessageEvent=tv;N.exports.request=js(HA.request);N.exports.stream=js(HA.stream);N.exports.pipeline=js(HA.pipeline);N.exports.connect=js(HA.connect);N.exports.upgrade=js(HA.upgrade);N.exports.MockClient=UM;N.exports.MockPool=LM;N.exports.MockAgent=GM;N.exports.mockErrors=MM;var{EventSource:rv}=np();N.exports.EventSource=rv});var Up=B(Ci=>{"use strict";Object.defineProperty(Ci,"__esModule",{value:!0});Ci.getProxyUrl=Rv;Ci.checkBypass=Np;function Rv(t){let e=t.protocol==="https:";if(Np(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new Ii(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new Ii(`http://${r}`)}else return}function Np(t){if(!t.hostname)return!1;let e=t.hostname;if(Dv(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Dv(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var Ii=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}}});var Lp=B(re=>{"use strict";var Tv=re&&re.__createBinding||(Object.create?(function(t,e,r,A){A===void 0&&(A=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,A,s)}):(function(t,e,r,A){A===void 0&&(A=r),t[A]=e[r]})),bv=re&&re.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),mi=re&&re.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var A=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(A[A.length]=s);return A},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var A=t(e),s=0;sae(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ae(this,void 0,void 0,function*(){return new Promise(e=>ae(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};re.HttpClientResponse=pi;function Mv(t){return new URL(t).protocol==="https:"}var vl=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ae(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ae(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ae(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ae(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ae(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ae(this,arguments,void 0,function*(r,A={}){A[ye.Accept]=this._getExistingOrDefaultHeader(A,ye.Accept,Yt.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ae(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&Uv.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===Ke.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Sv.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!Nv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pi(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Ml.getProxyUrl(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?Gp:Ll;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},ro(this.requestOptions.headers),ro(e||{})):ro(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=ro(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=ro(this.requestOptions.headers)[ye.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[ye.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Ml.getProxyUrl(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||Ll.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?di.httpsOverHttps:di.httpsOverHttp:a=c?di.httpOverHttps:di.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new Gp.Agent(i):new Ll.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new kv.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ae(this,void 0,void 0,function*(){e=Math.min(Gv,e);let r=Lv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ae(this,void 0,void 0,function*(){return new Promise((A,s)=>ae(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===Ke.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fi(g,o);l.result=n.result,s(l)}else A(n)}))})}};re.HttpClient=vl;var ro=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{})});var nm=B(yi=>{"use strict";Object.defineProperty(yi,"__esModule",{value:!0});yi.format=sx;yi.parse=ox;var tx=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,tm=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rx=/[\\"]/g,Ax=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rm=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function sx(t){let{type:e,parameters:r}=t;if(!e||!Ax.test(e))throw new TypeError(`Invalid type: ${e}`);let A=e;if(r)for(let s of Object.keys(r)){if(!tm.test(s))throw new TypeError(`Invalid parameter name: ${s}`);A+=`; ${s}=${cx(r[s])}`}return A}function ox(t,e){let r=t.length,A=Pl(t,0,r),s=A;A=Jl(t,A,r);let o=Hl(t,s,A),n=t.slice(s,o).toLowerCase(),i=e?.parameters===!1?new rm:ax(t,A,r);return{type:n,parameters:i}}var Am=32,sm=9,om=59,nx=61,em=34,ix=92;function ax(t,e,r){let A=new rm;e:for(;ee;){let A=t.charCodeAt(r-1);if(A!==Am&&A!==sm)break;r--}return r}function cx(t){if(tm.test(t))return t;if(tx.test(t))return`"${t.replace(rx,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var zA=B((Y2,Sm)=>{"use strict";var Px="2.0.0",Hx=Number.MAX_SAFE_INTEGER||9007199254740991,Vx=16,qx=250,Wx=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Sm.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Vx,MAX_SAFE_BUILD_LENGTH:qx,MAX_SAFE_INTEGER:Hx,RELEASE_TYPES:Wx,SEMVER_SPEC_VERSION:Px,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var oo=B((_2,Nm)=>{"use strict";var zx=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};Nm.exports=zx});var ZA=B((mt,Um)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:ou,MAX_SAFE_BUILD_LENGTH:Zx,MAX_LENGTH:jx}=zA(),Kx=oo();mt=Um.exports={};var Xx=mt.re=[],$x=mt.safeRe=[],m=mt.src=[],eO=mt.safeSrc=[],w=mt.t={},tO=0,nu="[a-zA-Z0-9-]",rO=[["\\s",1],["\\d",jx],[nu,Zx]],AO=t=>{for(let[e,r]of rO)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},G=(t,e,r)=>{let A=AO(e),s=tO++;Kx(t,s,e),w[t]=s,m[s]=e,eO[s]=A,Xx[s]=new RegExp(e,r?"g":void 0),$x[s]=new RegExp(A,r?"g":void 0)};G("NUMERICIDENTIFIER","0|[1-9]\\d*");G("NUMERICIDENTIFIERLOOSE","\\d+");G("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${nu}*`);G("MAINVERSION",`(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})`);G("MAINVERSIONLOOSE",`(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASEIDENTIFIER",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIER]})`);G("PRERELEASEIDENTIFIERLOOSE",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASE",`(?:-(${m[w.PRERELEASEIDENTIFIER]}(?:\\.${m[w.PRERELEASEIDENTIFIER]})*))`);G("PRERELEASELOOSE",`(?:-?(${m[w.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${m[w.PRERELEASEIDENTIFIERLOOSE]})*))`);G("BUILDIDENTIFIER",`${nu}+`);G("BUILD",`(?:\\+(${m[w.BUILDIDENTIFIER]}(?:\\.${m[w.BUILDIDENTIFIER]})*))`);G("FULLPLAIN",`v?${m[w.MAINVERSION]}${m[w.PRERELEASE]}?${m[w.BUILD]}?`);G("FULL",`^${m[w.FULLPLAIN]}$`);G("LOOSEPLAIN",`[v=\\s]*${m[w.MAINVERSIONLOOSE]}${m[w.PRERELEASELOOSE]}?${m[w.BUILD]}?`);G("LOOSE",`^${m[w.LOOSEPLAIN]}$`);G("GTLT","((?:<|>)?=?)");G("XRANGEIDENTIFIERLOOSE",`${m[w.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);G("XRANGEIDENTIFIER",`${m[w.NUMERICIDENTIFIER]}|x|X|\\*`);G("XRANGEPLAIN",`[v=\\s]*(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:${m[w.PRERELEASE]})?${m[w.BUILD]}?)?)?`);G("XRANGEPLAINLOOSE",`[v=\\s]*(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:${m[w.PRERELEASELOOSE]})?${m[w.BUILD]}?)?)?`);G("XRANGE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAIN]}$`);G("XRANGELOOSE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAINLOOSE]}$`);G("COERCEPLAIN",`(^|[^\\d])(\\d{1,${ou}})(?:\\.(\\d{1,${ou}}))?(?:\\.(\\d{1,${ou}}))?`);G("COERCE",`${m[w.COERCEPLAIN]}(?:$|[^\\d])`);G("COERCEFULL",m[w.COERCEPLAIN]+`(?:${m[w.PRERELEASE]})?(?:${m[w.BUILD]})?(?:$|[^\\d])`);G("COERCERTL",m[w.COERCE],!0);G("COERCERTLFULL",m[w.COERCEFULL],!0);G("LONETILDE","(?:~>?)");G("TILDETRIM",`(\\s*)${m[w.LONETILDE]}\\s+`,!0);mt.tildeTrimReplace="$1~";G("TILDE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAIN]}$`);G("TILDELOOSE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAINLOOSE]}$`);G("LONECARET","(?:\\^)");G("CARETTRIM",`(\\s*)${m[w.LONECARET]}\\s+`,!0);mt.caretTrimReplace="$1^";G("CARET",`^${m[w.LONECARET]}${m[w.XRANGEPLAIN]}$`);G("CARETLOOSE",`^${m[w.LONECARET]}${m[w.XRANGEPLAINLOOSE]}$`);G("COMPARATORLOOSE",`^${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]})$|^$`);G("COMPARATOR",`^${m[w.GTLT]}\\s*(${m[w.FULLPLAIN]})$|^$`);G("COMPARATORTRIM",`(\\s*)${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]}|${m[w.XRANGEPLAIN]})`,!0);mt.comparatorTrimReplace="$1$2$3";G("HYPHENRANGE",`^\\s*(${m[w.XRANGEPLAIN]})\\s+-\\s+(${m[w.XRANGEPLAIN]})\\s*$`);G("HYPHENRANGELOOSE",`^\\s*(${m[w.XRANGEPLAINLOOSE]})\\s+-\\s+(${m[w.XRANGEPLAINLOOSE]})\\s*$`);G("STAR","(<|>)?=?\\s*\\*");G("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");G("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var bi=B((J2,Gm)=>{"use strict";var sO=Object.freeze({loose:!0}),oO=Object.freeze({}),nO=t=>t?typeof t!="object"?sO:t:oO;Gm.exports=nO});var iu=B((P2,vm)=>{"use strict";var Lm=/^[0-9]+$/,Mm=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:tMm(e,t);vm.exports={compareIdentifiers:Mm,rcompareIdentifiers:iO}});var Be=B((H2,Om)=>{"use strict";var ki=oo(),{MAX_LENGTH:xm,MAX_SAFE_INTEGER:Fi}=zA(),{safeRe:Si,t:Ni}=ZA(),aO=bi(),{compareIdentifiers:au}=iu(),cO=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let A=0;Axm)throw new TypeError(`version is longer than ${xm} characters`);ki("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let A=e.trim().match(r.loose?Si[Ni.LOOSE]:Si[Ni.FULL]);if(!A)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+A[1],this.minor=+A[2],this.patch=+A[3],this.major>Fi||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Fi||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Fi||this.patch<0)throw new TypeError("Invalid patch version");A[4]?this.prerelease=A[4].split(".").map(s=>{if(/^[0-9]+$/.test(s)){let o=+s;if(o>=0&&oe.major?1:this.minore.minor?1:this.patche.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let A=this.prerelease[r],s=e.prerelease[r];if(ki("prerelease compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let A=this.build[r],s=e.build[r];if(ki("build compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}inc(e,r,A){if(e.startsWith("pre")){if(!r&&A===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let s=`-${r}`.match(this.options.loose?Si[Ni.PRERELEASELOOSE]:Si[Ni.PRERELEASE]);if(!s||s[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,A);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,A);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,A),this.inc("pre",r,A);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,A),this.inc("pre",r,A);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let s=Number(A)?1:0;if(this.prerelease.length===0)this.prerelease=[s];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&A===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(s)}}if(r){let o=[r,s];if(A===!1&&(o=[r]),cO(this.prerelease,r)){let n=this.prerelease[r.split(".").length];isNaN(n)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};Om.exports=cu});var ur=B((V2,_m)=>{"use strict";var Ym=Be(),gO=(t,e,r=!1)=>{if(t instanceof Ym)return t;try{return new Ym(t,e)}catch(A){if(!r)return null;throw A}};_m.exports=gO});var Pm=B((q2,Jm)=>{"use strict";var lO=ur(),uO=(t,e)=>{let r=lO(t,e);return r?r.version:null};Jm.exports=uO});var Vm=B((W2,Hm)=>{"use strict";var EO=ur(),hO=(t,e)=>{let r=EO(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};Hm.exports=hO});var zm=B((z2,Wm)=>{"use strict";var qm=Be(),QO=(t,e,r,A,s)=>{typeof r=="string"&&(s=A,A=r,r=void 0);try{return new qm(t instanceof qm?t.version:t,r).inc(e,A,s).version}catch{return null}};Wm.exports=QO});var Km=B((Z2,jm)=>{"use strict";var Zm=ur(),BO=(t,e)=>{let r=Zm(t,null,!0),A=Zm(e,null,!0),s=r.compare(A);if(s===0)return null;let o=s>0,n=o?r:A,i=o?A:r,a=!!n.prerelease.length;if(!!i.prerelease.length&&!a){if(!i.patch&&!i.minor)return"major";if(i.compareMain(n)===0)return i.minor&&!i.patch?"minor":"patch"}let g=a?"pre":"";return r.major!==A.major?g+"major":r.minor!==A.minor?g+"minor":r.patch!==A.patch?g+"patch":"prerelease"};jm.exports=BO});var $m=B((j2,Xm)=>{"use strict";var IO=Be(),CO=(t,e)=>new IO(t,e).major;Xm.exports=CO});var tw=B((K2,ew)=>{"use strict";var dO=Be(),fO=(t,e)=>new dO(t,e).minor;ew.exports=fO});var Aw=B((X2,rw)=>{"use strict";var pO=Be(),mO=(t,e)=>new pO(t,e).patch;rw.exports=mO});var ow=B(($2,sw)=>{"use strict";var wO=ur(),yO=(t,e)=>{let r=wO(t,e);return r&&r.prerelease.length?r.prerelease:null};sw.exports=yO});var Xe=B((eV,iw)=>{"use strict";var nw=Be(),RO=(t,e,r)=>new nw(t,r).compare(new nw(e,r));iw.exports=RO});var cw=B((tV,aw)=>{"use strict";var DO=Xe(),TO=(t,e,r)=>DO(e,t,r);aw.exports=TO});var lw=B((rV,gw)=>{"use strict";var bO=Xe(),kO=(t,e)=>bO(t,e,!0);gw.exports=kO});var Ui=B((AV,Ew)=>{"use strict";var uw=Be(),FO=(t,e,r)=>{let A=new uw(t,r),s=new uw(e,r);return A.compare(s)||A.compareBuild(s)};Ew.exports=FO});var Qw=B((sV,hw)=>{"use strict";var SO=Ui(),NO=(t,e)=>t.sort((r,A)=>SO(r,A,e));hw.exports=NO});var Iw=B((oV,Bw)=>{"use strict";var UO=Ui(),GO=(t,e)=>t.sort((r,A)=>UO(A,r,e));Bw.exports=GO});var no=B((nV,Cw)=>{"use strict";var LO=Xe(),MO=(t,e,r)=>LO(t,e,r)>0;Cw.exports=MO});var Gi=B((iV,dw)=>{"use strict";var vO=Xe(),xO=(t,e,r)=>vO(t,e,r)<0;dw.exports=xO});var gu=B((aV,fw)=>{"use strict";var OO=Xe(),YO=(t,e,r)=>OO(t,e,r)===0;fw.exports=YO});var lu=B((cV,pw)=>{"use strict";var _O=Xe(),JO=(t,e,r)=>_O(t,e,r)!==0;pw.exports=JO});var Li=B((gV,mw)=>{"use strict";var PO=Xe(),HO=(t,e,r)=>PO(t,e,r)>=0;mw.exports=HO});var Mi=B((lV,ww)=>{"use strict";var VO=Xe(),qO=(t,e,r)=>VO(t,e,r)<=0;ww.exports=qO});var uu=B((uV,yw)=>{"use strict";var WO=gu(),zO=lu(),ZO=no(),jO=Li(),KO=Gi(),XO=Mi(),$O=(t,e,r,A)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return WO(t,r,A);case"!=":return zO(t,r,A);case">":return ZO(t,r,A);case">=":return jO(t,r,A);case"<":return KO(t,r,A);case"<=":return XO(t,r,A);default:throw new TypeError(`Invalid operator: ${e}`)}};yw.exports=$O});var Dw=B((EV,Rw)=>{"use strict";var eY=Be(),tY=ur(),{safeRe:vi,t:xi}=ZA(),rY=(t,e)=>{if(t instanceof eY)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?vi[xi.COERCEFULL]:vi[xi.COERCE]);else{let a=e.includePrerelease?vi[xi.COERCERTLFULL]:vi[xi.COERCERTL],c;for(;(c=a.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||c.index+c[0].length!==r.index+r[0].length)&&(r=c),a.lastIndex=c.index+c[1].length+c[2].length;a.lastIndex=-1}if(r===null)return null;let A=r[2],s=r[3]||"0",o=r[4]||"0",n=e.includePrerelease&&r[5]?`-${r[5]}`:"",i=e.includePrerelease&&r[6]?`+${r[6]}`:"";return tY(`${A}.${s}.${o}${n}${i}`,e)};Rw.exports=rY});var bw=B((hV,Tw)=>{"use strict";var AY=ur(),sY=zA(),oY=Be(),nY=(t,e,r)=>{if(!sY.RELEASE_TYPES.includes(e))return null;let A=iY(t,r);return A&&aY(A,e)},iY=(t,e)=>{let r=t instanceof oY?t.version:t;return AY(r,e)},aY=(t,e)=>{if(cY(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},cY=t=>t.startsWith("pre");Tw.exports=nY});var Fw=B((QV,kw)=>{"use strict";var Eu=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let s=this.map.keys().next().value;this.delete(s)}this.map.set(e,r)}return this}};kw.exports=Eu});var $e=B((BV,Gw)=>{"use strict";var gY=/\s+/g,hu=class t{constructor(e,r){if(r=uY(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof Qu)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(gY," "),this.set=this.raw.split("||").map(A=>this.parseRange(A.trim())).filter(A=>A.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let A=this.set[0];if(this.set=this.set.filter(s=>!Nw(s[0])),this.set.length===0)this.set=[A];else if(this.set.length>1){for(let s of this.set)if(s.length===1&&pY(s[0])){this.set=[s];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e0&&(this.formatted+="||");let r=this.set[e];for(let A=0;A0&&(this.formatted+=" "),this.formatted+=r[A].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(fY,"");let A=((this.options.includePrerelease&&CY)|(this.options.loose&&dY))+":"+e,s=Sw.get(A);if(s)return s;let o=this.options.loose,n=o?Re[Ie.HYPHENRANGELOOSE]:Re[Ie.HYPHENRANGE];e=e.replace(n,NY(this.options.includePrerelease)),X("hyphen replace",e),e=e.replace(Re[Ie.COMPARATORTRIM],QY),X("comparator trim",e),e=e.replace(Re[Ie.TILDETRIM],BY),X("tilde trim",e),e=e.replace(Re[Ie.CARETTRIM],IY),X("caret trim",e);let i=e.split(" ").map(l=>mY(l,this.options)).join(" ").split(/\s+/).map(l=>SY(l,this.options));o&&(i=i.filter(l=>(X("loose invalid filter",l,this.options),!!l.match(Re[Ie.COMPARATORLOOSE])))),X("range list",i);let a=new Map,c=i.map(l=>new Qu(l,this.options));for(let l of c){if(Nw(l))return[l];a.set(l.value,l)}a.size>1&&a.has("")&&a.delete("");let g=[...a.values()];return Sw.set(A,g),g}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(A=>Uw(A,r)&&e.set.some(s=>Uw(s,r)&&A.every(o=>s.every(n=>o.intersects(n,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new EY(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",pY=t=>t.value==="",Uw=(t,e)=>{let r=!0,A=t.slice(),s=A.pop();for(;r&&A.length;)r=A.every(o=>s.intersects(o,e)),s=A.pop();return r},mY=(t,e)=>(t=t.replace(Re[Ie.BUILD],""),X("comp",t,e),t=DY(t,e),X("caret",t),t=yY(t,e),X("tildes",t),t=bY(t,e),X("xrange",t),t=FY(t,e),X("stars",t),t),ue=t=>!t||t.toLowerCase()==="x"||t==="*",wY=(t,e,r)=>ue(t)&&!ue(e)||ue(e)&&r&&!ue(r),yY=(t,e)=>t.trim().split(/\s+/).map(r=>RY(r,e)).join(" "),RY=(t,e)=>{let r=e.loose?Re[Ie.TILDELOOSE]:Re[Ie.TILDE],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("tilde",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:a?(X("replaceTilde pr",a),c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`):c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`,X("tilde return",c),c})},DY=(t,e)=>t.trim().split(/\s+/).map(r=>TY(r,e)).join(" "),TY=(t,e)=>{X("caret",t,e);let r=e.loose?Re[Ie.CARETLOOSE]:Re[Ie.CARET],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("caret",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?o==="0"?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.0${A} <${+o+1}.0.0-0`:a?(X("replaceCaret pr",a),o==="0"?n==="0"?c=`>=${o}.${n}.${i}-${a} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i}-${a} <${+o+1}.0.0-0`):(X("no pr"),o==="0"?n==="0"?c=`>=${o}.${n}.${i} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i} <${+o+1}.0.0-0`),X("caret return",c),c})},bY=(t,e)=>(X("replaceXRanges",t,e),t.split(/\s+/).map(r=>kY(r,e)).join(" ")),kY=(t,e)=>{t=t.trim();let r=e.loose?Re[Ie.XRANGELOOSE]:Re[Ie.XRANGE];return t.replace(r,(A,s,o,n,i,a)=>{if(X("xRange",t,A,s,o,n,i,a),wY(o,n,i))return t;let c=ue(o),g=c||ue(n),l=g||ue(i),u=l;return s==="="&&u&&(s=""),a=e.includePrerelease?"-0":"",c?s===">"||s==="<"?A="<0.0.0-0":A="*":s&&u?(g&&(n=0),i=0,s===">"?(s=">=",g?(o=+o+1,n=0,i=0):(n=+n+1,i=0)):s==="<="&&(s="<",g?o=+o+1:n=+n+1),s==="<"&&(a="-0"),A=`${s+o}.${n}.${i}${a}`):g?A=`>=${o}.0.0${a} <${+o+1}.0.0-0`:l&&(A=`>=${o}.${n}.0${a} <${o}.${+n+1}.0-0`),X("xRange return",A),A})},FY=(t,e)=>(X("replaceStars",t,e),t.trim().replace(Re[Ie.STAR],"")),SY=(t,e)=>(X("replaceGTE0",t,e),t.trim().replace(Re[e.includePrerelease?Ie.GTE0PRE:Ie.GTE0],"")),NY=t=>(e,r,A,s,o,n,i,a,c,g,l,u)=>(ue(A)?r="":ue(s)?r=`>=${A}.0.0${t?"-0":""}`:ue(o)?r=`>=${A}.${s}.0${t?"-0":""}`:n?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,ue(c)?a="":ue(g)?a=`<${+c+1}.0.0-0`:ue(l)?a=`<${c}.${+g+1}.0-0`:u?a=`<=${c}.${g}.${l}-${u}`:t?a=`<${c}.${g}.${+l+1}-0`:a=`<=${a}`,`${r} ${a}`.trim()),UY=(t,e,r)=>{for(let A=0;A0){let s=t[A].semver;if(s.major===e.major&&s.minor===e.minor&&s.patch===e.patch)return!0}return!1}return!0}});var io=B((IV,Yw)=>{"use strict";var ao=Symbol("SemVer ANY"),Cu=class t{static get ANY(){return ao}constructor(e,r){if(r=Lw(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),Iu("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ao?this.value="":this.value=this.operator+this.semver.version,Iu("comp",this)}parse(e){let r=this.options.loose?Mw[vw.COMPARATORLOOSE]:Mw[vw.COMPARATOR],A=e.match(r);if(!A)throw new TypeError(`Invalid comparator: ${e}`);this.operator=A[1]!==void 0?A[1]:"",this.operator==="="&&(this.operator=""),A[2]?this.semver=new xw(A[2],this.options.loose):this.semver=ao}toString(){return this.value}test(e){if(Iu("Comparator.test",e,this.options.loose),this.semver===ao||e===ao)return!0;if(typeof e=="string")try{e=new xw(e,this.options)}catch{return!1}return Bu(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Ow(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new Ow(this.value,r).test(e.semver):(r=Lw(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||Bu(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||Bu(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Yw.exports=Cu;var Lw=bi(),{safeRe:Mw,t:vw}=ZA(),Bu=uu(),Iu=oo(),xw=Be(),Ow=$e()});var co=B((CV,_w)=>{"use strict";var GY=$e(),LY=(t,e,r)=>{try{e=new GY(e,r)}catch{return!1}return e.test(t)};_w.exports=LY});var Pw=B((dV,Jw)=>{"use strict";var MY=$e(),vY=(t,e)=>new MY(t,e).set.map(r=>r.map(A=>A.value).join(" ").trim().split(" "));Jw.exports=vY});var Vw=B((fV,Hw)=>{"use strict";var xY=Be(),OY=$e(),YY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new OY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===-1)&&(A=n,s=new xY(A,r))}),A};Hw.exports=YY});var Ww=B((pV,qw)=>{"use strict";var _Y=Be(),JY=$e(),PY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new JY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===1)&&(A=n,s=new _Y(A,r))}),A};qw.exports=PY});var jw=B((mV,Zw)=>{"use strict";var du=Be(),HY=$e(),zw=no(),VY=(t,e)=>{t=new HY(t,e);let r=new du("0.0.0");if(t.test(r)||(r=new du("0.0.0-0"),t.test(r)))return r;r=null;for(let A=0;A{let i=new du(n.semver.version);switch(n.operator){case">":i.prerelease.length===0?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!o||zw(i,o))&&(o=i);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${n.operator}`)}}),o&&(!r||zw(r,o))&&(r=o)}return r&&t.test(r)?r:null};Zw.exports=VY});var Xw=B((wV,Kw)=>{"use strict";var qY=$e(),WY=(t,e)=>{try{return new qY(t,e).range||"*"}catch{return null}};Kw.exports=WY});var Oi=B((yV,ry)=>{"use strict";var zY=Be(),ty=io(),{ANY:ZY}=ty,jY=$e(),KY=co(),$w=no(),ey=Gi(),XY=Mi(),$Y=Li(),e_=(t,e,r,A)=>{t=new zY(t,A),e=new jY(e,A);let s,o,n,i,a;switch(r){case">":s=$w,o=XY,n=ey,i=">",a=">=";break;case"<":s=ey,o=$Y,n=$w,i="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(KY(t,e,A))return!1;for(let c=0;c{E.semver===ZY&&(E=new ty(">=0.0.0")),l=l||E,u=u||E,s(E.semver,l.semver,A)?l=E:n(E.semver,u.semver,A)&&(u=E)}),l.operator===i||l.operator===a||(!u.operator||u.operator===i)&&o(t,u.semver))return!1;if(u.operator===a&&n(t,u.semver))return!1}return!0};ry.exports=e_});var sy=B((RV,Ay)=>{"use strict";var t_=Oi(),r_=(t,e,r)=>t_(t,e,">",r);Ay.exports=r_});var ny=B((DV,oy)=>{"use strict";var A_=Oi(),s_=(t,e,r)=>A_(t,e,"<",r);oy.exports=s_});var cy=B((TV,ay)=>{"use strict";var iy=$e(),o_=(t,e,r)=>(t=new iy(t,r),e=new iy(e,r),t.intersects(e,r));ay.exports=o_});var ly=B((bV,gy)=>{"use strict";var n_=co(),i_=Xe();gy.exports=(t,e,r)=>{let A=[],s=null,o=null,n=t.sort((g,l)=>i_(g,l,r));for(let g of n)n_(g,e,r)?(o=g,s||(s=g)):(o&&A.push([s,o]),o=null,s=null);s&&A.push([s,null]);let i=[];for(let[g,l]of A)g===l?i.push(g):!l&&g===n[0]?i.push("*"):l?g===n[0]?i.push(`<=${l}`):i.push(`${g} - ${l}`):i.push(`>=${g}`);let a=i.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return a.length{"use strict";var uy=$e(),mu=io(),{ANY:fu}=mu,pu=co(),wu=Xe(),a_=(t,e,r={})=>{if(t===e)return!0;t=new uy(t,r),e=new uy(e,r);let A=!1;e:for(let s of t.set){for(let o of e.set){let n=g_(s,o,r);if(A=A||n!==null,n)continue e}if(A)return!1}return!0},c_=[new mu(">=0.0.0-0")],Ey=[new mu(">=0.0.0")],g_=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===fu){if(e.length===1&&e[0].semver===fu)return!0;r.includePrerelease?t=c_:t=Ey}if(e.length===1&&e[0].semver===fu){if(r.includePrerelease)return!0;e=Ey}let A=new Set,s,o;for(let E of t)E.operator===">"||E.operator===">="?s=hy(s,E,r):E.operator==="<"||E.operator==="<="?o=Qy(o,E,r):A.add(E.semver);if(A.size>1)return null;let n;if(s&&o){if(n=wu(s.semver,o.semver,r),n>0)return null;if(n===0&&(s.operator!==">="||o.operator!=="<="))return null}for(let E of A){if(s&&!pu(E,String(s),r)||o&&!pu(E,String(o),r))return null;for(let h of e)if(!pu(E,String(h),r))return!1;return!0}let i,a,c,g,l=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,u=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1;l&&l.prerelease.length===1&&o.operator==="<"&&l.prerelease[0]===0&&(l=!1);for(let E of e){if(g=g||E.operator===">"||E.operator===">=",c=c||E.operator==="<"||E.operator==="<=",s){if(u&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===u.major&&E.semver.minor===u.minor&&E.semver.patch===u.patch&&(u=!1),E.operator===">"||E.operator===">="){if(i=hy(s,E,r),i===E&&i!==s)return!1}else if(s.operator===">="&&!E.test(s.semver))return!1}if(o){if(l&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===l.major&&E.semver.minor===l.minor&&E.semver.patch===l.patch&&(l=!1),E.operator==="<"||E.operator==="<="){if(a=Qy(o,E,r),a===E&&a!==o)return!1}else if(o.operator==="<="&&!E.test(o.semver))return!1}if(!E.operator&&(o||s)&&n!==0)return!1}return!(s&&c&&!o&&n!==0||o&&g&&!s&&n!==0||u||l)},hy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A>0?t:A<0||e.operator===">"&&t.operator===">="?e:t},Qy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A<0?t:A>0||e.operator==="<"&&t.operator==="<="?e:t};By.exports=a_});var Ru=B((FV,fy)=>{"use strict";var yu=ZA(),Cy=zA(),l_=Be(),dy=iu(),u_=ur(),E_=Pm(),h_=Vm(),Q_=zm(),B_=Km(),I_=$m(),C_=tw(),d_=Aw(),f_=ow(),p_=Xe(),m_=cw(),w_=lw(),y_=Ui(),R_=Qw(),D_=Iw(),T_=no(),b_=Gi(),k_=gu(),F_=lu(),S_=Li(),N_=Mi(),U_=uu(),G_=Dw(),L_=bw(),M_=io(),v_=$e(),x_=co(),O_=Pw(),Y_=Vw(),__=Ww(),J_=jw(),P_=Xw(),H_=Oi(),V_=sy(),q_=ny(),W_=cy(),z_=ly(),Z_=Iy();fy.exports={parse:u_,valid:E_,clean:h_,inc:Q_,diff:B_,major:I_,minor:C_,patch:d_,prerelease:f_,compare:p_,rcompare:m_,compareLoose:w_,compareBuild:y_,sort:R_,rsort:D_,gt:T_,lt:b_,eq:k_,neq:F_,gte:S_,lte:N_,cmp:U_,coerce:G_,truncate:L_,Comparator:M_,Range:v_,satisfies:x_,toComparators:O_,maxSatisfying:Y_,minSatisfying:__,minVersion:J_,validRange:P_,outside:H_,gtr:V_,ltr:q_,intersects:W_,simplifyRange:z_,subset:Z_,SemVer:l_,re:yu.re,src:yu.src,tokens:yu.t,SEMVER_SPEC_VERSION:Cy.SEMVER_SPEC_VERSION,RELEASE_TYPES:Cy.RELEASE_TYPES,compareIdentifiers:dy.compareIdentifiers,rcompareIdentifiers:dy.rcompareIdentifiers}});var hr=W(require("node:process"),1),Ny=W(require("node:path"),1);var Su=W(require("os"),1);function jA(t){return t==null?"":typeof t=="string"||t instanceof String?t:JSON.stringify(t)}function ku(t){return Object.keys(t).length?{title:t.title,file:t.file,line:t.startLine,endLine:t.endLine,col:t.startColumn,endColumn:t.endColumn}:{}}function Vi(t,e,r){let A=new Hi(t,e,r);process.stdout.write(A.toString()+Su.EOL)}var Fu="::",Hi=class{constructor(e,r,A){e||(e="missing.command"),this.command=e,this.properties=r,this.message=A}toString(){let e=Fu+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let r=!0;for(let A in this.properties)if(this.properties.hasOwnProperty(A)){let s=this.properties[A];s&&(r?r=!1:e+=",",e+=`${A}=${Yy(s)}`)}}return e+=`${Fu}${Oy(this.message)}`,e}};function Oy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function Yy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}var Tp=W(require("os"),1);var $s=W(require("http"),1),ml=W(require("https"),1);function qi(t){let e=t.protocol==="https:";if(_y(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new uo(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new uo(`http://${r}`)}else return}function _y(t){if(!t.hostname)return!1;let e=t.hostname;if(Jy(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Jy(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var uo=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}};var nr=W(Zi(),1),gp=W(ci(),1),ie=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},je;(function(t){t[t.OK=200]="OK",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.ResourceMoved=302]="ResourceMoved",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.SwitchProxy=306]="SwitchProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.TooManyRequests=429]="TooManyRequests",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout"})(je||(je={}));var we;(function(t){t.Accept="accept",t.ContentType="content-type"})(we||(we={}));var Ot;(function(t){t.ApplicationJson="application/json"})(Ot||(Ot={}));var Av=[je.MovedPermanently,je.ResourceMoved,je.SeeOther,je.TemporaryRedirect,je.PermanentRedirect],sv=[je.BadGateway,je.ServiceUnavailable,je.GatewayTimeout],ov=["OPTIONS","GET","DELETE","HEAD"],nv=10,iv=5,fl=class t extends Error{constructor(e,r){super(e),this.name="HttpClientError",this.statusCode=r,Object.setPrototypeOf(this,t.prototype)}},pl=class{constructor(e){this.message=e}readBody(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};var Xs=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ie(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ie(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ie(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ie(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ie(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ie(this,arguments,void 0,function*(r,A={}){A[we.Accept]=this._getExistingOrDefaultHeader(A,we.Accept,Ot.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ie(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&ov.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===je.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Av.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!sv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pl(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=qi(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?ml:$s;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},Ks(this.requestOptions.headers),Ks(e||{})):Ks(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=Ks(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=Ks(this.requestOptions.headers)[we.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[we.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=qi(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||$s.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?nr.httpsOverHttps:nr.httpsOverHttp:a=c?nr.httpOverHttps:nr.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new ml.Agent(i):new $s.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new gp.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ie(this,void 0,void 0,function*(){e=Math.min(nv,e);let r=iv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ie(this,void 0,void 0,function*(){return new Promise((A,s)=>ie(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===je.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fl(g,o);l.result=n.result,s(l)}else A(n)}))})}},Ks=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{});var up=require("os"),eo=require("fs"),wl=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{access:cv,appendFile:gv,writeFile:lv}=eo.promises,lp="GITHUB_STEP_SUMMARY";var yl=class{constructor(){this._buffer=""}filePath(){return wl(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[lp];if(!e)throw new Error(`Unable to find environment variable for $${lp}. Check if your runtime environment supports job summaries.`);try{yield cv(e,eo.constants.R_OK|eo.constants.W_OK)}catch{throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,r,A={}){let s=Object.entries(A).map(([o,n])=>` ${o}="${n}"`).join("");return r?`<${e}${s}>${r}`:`<${e}${s}>`}write(e){return wl(this,void 0,void 0,function*(){let r=!!e?.overwrite,A=yield this.filePath();return yield(r?lv:gv)(A,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return wl(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(e,r=!1){return this._buffer+=e,r?this.addEOL():this}addEOL(){return this.addRaw(up.EOL)}addCodeBlock(e,r){let A=Object.assign({},r&&{lang:r}),s=this.wrap("pre",this.wrap("code",e),A);return this.addRaw(s).addEOL()}addList(e,r=!1){let A=r?"ol":"ul",s=e.map(n=>this.wrap("li",n)).join(""),o=this.wrap(A,s);return this.addRaw(o).addEOL()}addTable(e){let r=e.map(s=>{let o=s.map(n=>{if(typeof n=="string")return this.wrap("td",n);let{header:i,data:a,colspan:c,rowspan:g}=n,l=i?"th":"td",u=Object.assign(Object.assign({},c&&{colspan:c}),g&&{rowspan:g});return this.wrap(l,a,u)}).join("");return this.wrap("tr",o)}).join(""),A=this.wrap("table",r);return this.addRaw(A).addEOL()}addDetails(e,r){let A=this.wrap("details",this.wrap("summary",e)+r);return this.addRaw(A).addEOL()}addImage(e,r,A){let{width:s,height:o}=A||{},n=Object.assign(Object.assign({},s&&{width:s}),o&&{height:o}),i=this.wrap("img",null,Object.assign({src:e,alt:r},n));return this.addRaw(i).addEOL()}addHeading(e,r){let A=`h${r}`,s=["h1","h2","h3","h4","h5","h6"].includes(A)?A:"h1",o=this.wrap(s,e);return this.addRaw(o).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,r){let A=Object.assign({},r&&{cite:r}),s=this.wrap("blockquote",e,A);return this.addRaw(s).addEOL()}addLink(e,r){let A=this.wrap("a",e,{href:r});return this.addRaw(A).addEOL()}},EH=new yl;var Fl=W(require("os"),1);var to=W(require("os"),1),kl=W(require("events"),1),wp=W(require("child_process"),1),yp=W(require("path"),1);var dp=require("assert"),pt=W(require("path"),1);var li=W(require("fs"),1),ar=W(require("path"),1),hp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{chmod:uv,copyFile:Ev,lstat:hv,mkdir:Qp,open:BH,readdir:Bp,rename:Qv,rm:Ip,rmdir:IH,stat:gi,symlink:Bv,unlink:Iv}=li.promises,ir=process.platform==="win32";var CH=li.constants.O_RDONLY;function Rl(t){return hp(this,void 0,void 0,function*(){try{yield gi(t)}catch(e){if(e.code==="ENOENT")return!1;throw e}return!0})}function ui(t){if(t=Cv(t),!t)throw new Error('isRooted() parameter "p" cannot be empty');return ir?t.startsWith("\\")||/^[A-Z]:/i.test(t):t.startsWith("/")}function Dl(t,e){return hp(this,void 0,void 0,function*(){let r;try{r=yield gi(t)}catch(s){s.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${s}`)}if(r&&r.isFile()){if(ir){let s=ar.extname(t).toUpperCase();if(e.some(o=>o.toUpperCase()===s))return t}else if(Ep(r))return t}let A=t;for(let s of e){t=A+s,r=void 0;try{r=yield gi(t)}catch(o){o.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${o}`)}if(r&&r.isFile()){if(ir){try{let o=ar.dirname(t),n=ar.basename(t).toUpperCase();for(let i of yield Bp(o))if(n===i.toUpperCase()){t=ar.join(o,i);break}}catch(o){console.log(`Unexpected error attempting to determine the actual case of the file '${t}': ${o}`)}return t}else if(Ep(r))return t}}return""})}function Cv(t){return t=t||"",ir?(t=t.replace(/\//g,"\\"),t.replace(/\\\\+/g,"\\")):t.replace(/\/\/+/g,"/")}function Ep(t){return(t.mode&1)>0||(t.mode&8)>0&&process.getgid!==void 0&&t.gid===process.getgid()||(t.mode&64)>0&&process.getuid!==void 0&&t.uid===process.getuid()}var Ei=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function fp(t){return Ei(this,void 0,void 0,function*(){if(ir&&/[*"<>|]/.test(t))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');try{yield Ip(t,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(e){throw new Error(`File was unable to be removed ${e}`)}})}function Tl(t){return Ei(this,void 0,void 0,function*(){(0,dp.ok)(t,"a path argument must be provided"),yield Qp(t,{recursive:!0})})}function _r(t,e){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");if(e){let A=yield _r(t,!1);if(!A)throw ir?new Error(`Unable to locate executable file: ${t}. 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.`):new Error(`Unable to locate executable file: ${t}. 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 A}let r=yield dv(t);return r&&r.length>0?r[0]:""})}function dv(t){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");let e=[];if(ir&&process.env.PATHEXT)for(let s of process.env.PATHEXT.split(pt.delimiter))s&&e.push(s);if(ui(t)){let s=yield Dl(t,e);return s?[s]:[]}if(t.includes(pt.sep))return[];let r=[];if(process.env.PATH)for(let s of process.env.PATH.split(pt.delimiter))s&&r.push(s);let A=[];for(let s of r){let o=yield Dl(pt.join(s,t),e);o&&A.push(o)}return A})}var Rp=require("timers"),mp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},hi=process.platform==="win32",Qi=class extends kl.EventEmitter{constructor(e,r,A){if(super(),!e)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=e,this.args=r||[],this.options=A||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,r){let A=this._getSpawnFileName(),s=this._getSpawnArgs(e),o=r?"":"[command]";if(hi)if(this._isCmdFile()){o+=A;for(let n of s)o+=` ${n}`}else if(e.windowsVerbatimArguments){o+=`"${A}"`;for(let n of s)o+=` ${n}`}else{o+=this._windowsQuoteCmdArg(A);for(let n of s)o+=` ${this._windowsQuoteCmdArg(n)}`}else{o+=A;for(let n of s)o+=` ${n}`}return o}_processLineBuffer(e,r,A){try{let s=r+e.toString(),o=s.indexOf(to.EOL);for(;o>-1;){let n=s.substring(0,o);A(n),s=s.substring(o+to.EOL.length),o=s.indexOf(to.EOL)}return s}catch(s){return this._debug(`error processing line. Failed with error ${s}`),""}}_getSpawnFileName(){return hi&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(e){if(hi&&this._isCmdFile()){let r=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let A of this.args)r+=" ",r+=e.windowsVerbatimArguments?A:this._windowsQuoteCmdArg(A);return r+='"',[r]}return this.args}_endsWith(e,r){return e.endsWith(r)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return'""';let r=[" "," ","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],A=!1;for(let n of e)if(r.some(i=>i===n)){A=!0;break}if(!A)return e;let s='"',o=!0;for(let n=e.length;n>0;n--)s+=e[n-1],o&&e[n-1]==="\\"?s+="\\":e[n-1]==='"'?(o=!0,s+='"'):o=!1;return s+='"',s.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e)return'""';if(!e.includes(" ")&&!e.includes(" ")&&!e.includes('"'))return e;if(!e.includes('"')&&!e.includes("\\"))return`"${e}"`;let r='"',A=!0;for(let s=e.length;s>0;s--)r+=e[s-1],A&&e[s-1]==="\\"?r+="\\":e[s-1]==='"'?(A=!0,r+="\\"):A=!1;return r+='"',r.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};let r={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return r.outStream=e.outStream||process.stdout,r.errStream=e.errStream||process.stderr,r}_getSpawnOptions(e,r){e=e||{};let A={};return A.cwd=e.cwd,A.env=e.env,A.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(A.argv0=`"${r}"`),A}exec(){return mp(this,void 0,void 0,function*(){return!ui(this.toolPath)&&(this.toolPath.includes("/")||hi&&this.toolPath.includes("\\"))&&(this.toolPath=yp.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield _r(this.toolPath,!0),new Promise((e,r)=>mp(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let c of this.args)this._debug(` ${c}`);let A=this._cloneExecOptions(this.options);!A.silent&&A.outStream&&A.outStream.write(this._getCommandString(A)+to.EOL);let s=new bl(A,this.toolPath);if(s.on("debug",c=>{this._debug(c)}),this.options.cwd&&!(yield Rl(this.options.cwd)))return r(new Error(`The cwd: ${this.options.cwd} does not exist!`));let o=this._getSpawnFileName(),n=wp.spawn(o,this._getSpawnArgs(A),this._getSpawnOptions(this.options,o)),i="";n.stdout&&n.stdout.on("data",c=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(c),!A.silent&&A.outStream&&A.outStream.write(c),i=this._processLineBuffer(c,i,g=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(g)})});let a="";if(n.stderr&&n.stderr.on("data",c=>{s.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(c),!A.silent&&A.errStream&&A.outStream&&(A.failOnStdErr?A.errStream:A.outStream).write(c),a=this._processLineBuffer(c,a,g=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(g)})}),n.on("error",c=>{s.processError=c.message,s.processExited=!0,s.processClosed=!0,s.CheckComplete()}),n.on("exit",c=>{s.processExitCode=c,s.processExited=!0,this._debug(`Exit code ${c} received from tool '${this.toolPath}'`),s.CheckComplete()}),n.on("close",c=>{s.processExitCode=c,s.processExited=!0,s.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),s.CheckComplete()}),s.on("done",(c,g)=>{i.length>0&&this.emit("stdline",i),a.length>0&&this.emit("errline",a),n.removeAllListeners(),c?r(c):e(g)}),this.options.input){if(!n.stdin)throw new Error("child process missing stdin");n.stdin.end(this.options.input)}}))})}};function Dp(t){let e=[],r=!1,A=!1,s="";function o(n){A&&n!=='"'&&(s+="\\"),s+=n,A=!1}for(let n=0;n0&&(e.push(s),s="");continue}o(i)}return s.length>0&&e.push(s.trim()),e}var bl=class t extends kl.EventEmitter{constructor(e,r){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!r)throw new Error("toolPath must not be empty");this.options=e,this.toolPath=r,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=(0,Rp.setTimeout)(t.HandleTimeout,this.delay,this)))}_debug(e){this.emit("debug",e)}_setResult(){let e;this.processExited&&(this.processError?e=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}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let r=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(r)}e._setResult()}}};var pv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function cr(t,e,r){return pv(this,void 0,void 0,function*(){let A=Dp(t);if(A.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let s=A[0];return e=A.slice(1).concat(e||[]),new Qi(s,e,r).exec()})}var mH=Fl.default.platform(),wH=Fl.default.arch();var Sl;(function(t){t[t.Success=0]="Success",t[t.Failure=1]="Failure"})(Sl||(Sl={}));function bp(t,e){let r=process.env[`INPUT_${t.replace(/ /g,"_").toUpperCase()}`]||"";if(e&&e.required&&!r)throw new Error(`Input required and not supplied: ${t}`);return e&&e.trimWhitespace===!1?r:r.trim()}function kp(t){process.exitCode=Sl.Failure,yv(t)}function Nl(){return process.env.RUNNER_DEBUG==="1"}function Ue(t){Vi("debug",{},t)}function yv(t,e={}){Vi("error",ku(e),t instanceof Error?t.toString():t)}function Ul(t){process.stdout.write(t+Tp.EOL)}var Bi=require("fs"),Fp=require("os"),VA=class{constructor(){var e,r,A;if(this.payload={},process.env.GITHUB_EVENT_PATH)if((0,Bi.existsSync)(process.env.GITHUB_EVENT_PATH))this.payload=JSON.parse((0,Bi.readFileSync)(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}));else{let s=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${s} does not exist${Fp.EOL}`)}this.eventName=process.env.GITHUB_EVENT_NAME,this.sha=process.env.GITHUB_SHA,this.ref=process.env.GITHUB_REF,this.workflow=process.env.GITHUB_WORKFLOW,this.action=process.env.GITHUB_ACTION,this.actor=process.env.GITHUB_ACTOR,this.job=process.env.GITHUB_JOB,this.runAttempt=parseInt(process.env.GITHUB_RUN_ATTEMPT,10),this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10),this.runId=parseInt(process.env.GITHUB_RUN_ID,10),this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:"https://api.github.com",this.serverUrl=(r=process.env.GITHUB_SERVER_URL)!==null&&r!==void 0?r:"https://github.com",this.graphqlUrl=(A=process.env.GITHUB_GRAPHQL_URL)!==null&&A!==void 0?A:"https://api.github.com/graphql"}get issue(){let e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){let[e,r]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:r}}if(this.payload.repository)return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name};throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}};var xl=W(Lp(),1),Mp=W(ci(),1),vv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function vp(t,e){if(!t&&!e.auth)throw new Error("Parameter token or opts.auth is required");if(t&&e.auth)throw new Error("Parameters token and opts.auth may not both be specified");return typeof e.auth=="string"?e.auth:`token ${t}`}function xp(t){return new xl.HttpClient().getAgent(t)}function xv(t){return new xl.HttpClient().getAgentDispatcher(t)}function Op(t){let e=xv(t);return(A,s)=>vv(this,void 0,void 0,function*(){return(0,Mp.fetch)(A,Object.assign(Object.assign({},s),{dispatcher:e}))})}function Yp(){return process.env.GITHUB_API_URL||"https://api.github.com"}function Ol(t){var e;let r=(e=process.env.ACTIONS_ORCHESTRATION_ID)===null||e===void 0?void 0:e.trim();if(r){let s=`actions_orchestration_id/${r.replace(/[^a-z0-9_.-]/gi,"_")}`;return t?.includes(s)?t:`${t?`${t} `:""}${s}`}return t}function gr(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}function wi(t,e,r,A){if(typeof r!="function")throw new Error("method for before hook must be a function");return A||(A={}),Array.isArray(e)?e.reverse().reduce((s,o)=>wi.bind(null,t,o,s,A),r)():Promise.resolve().then(()=>t.registry[e]?t.registry[e].reduce((s,o)=>o.hook.bind(null,s,A),r)():r(A))}function _p(t,e,r,A){let s=A;t.registry[r]||(t.registry[r]=[]),e==="before"&&(A=(o,n)=>Promise.resolve().then(s.bind(null,n)).then(o.bind(null,n))),e==="after"&&(A=(o,n)=>{let i;return Promise.resolve().then(o.bind(null,n)).then(a=>(i=a,s(i,n))).then(()=>i)}),e==="error"&&(A=(o,n)=>Promise.resolve().then(o.bind(null,n)).catch(i=>s(i,n))),t.registry[r].push({hook:A,orig:s})}function Jp(t,e,r){if(!t.registry[e])return;let A=t.registry[e].map(s=>s.orig).indexOf(r);A!==-1&&t.registry[e].splice(A,1)}var Pp=Function.bind,Hp=Pp.bind(Pp);function Vp(t,e,r){let A=Hp(Jp,null).apply(null,r?[e,r]:[e]);t.api={remove:A},t.remove=A,["before","error","after","wrap"].forEach(s=>{let o=r?[e,s,r]:[e,s];t[s]=t.api[s]=Hp(_p,null).apply(null,o)})}function Yv(){let t=Symbol("Singular"),e={registry:{}},r=wi.bind(null,e,t);return Vp(r,e,t),r}function _v(){let t={registry:{}},e=wi.bind(null,t);return Vp(e,t),e}var qp={Singular:Yv,Collection:_v};var Jv="0.0.0-development",Pv=`octokit-endpoint.js/${Jv} ${gr()}`,Hv={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Pv},mediaType:{format:""}};function Vv(t){return t?Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{}):{}}function qv(t){if(typeof t!="object"||t===null||Object.prototype.toString.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);if(e===null)return!0;let r=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.call(r)===Function.prototype.call(t)}function Zp(t,e){let r=Object.assign({},t);return Object.keys(e).forEach(A=>{qv(e[A])?A in t?r[A]=Zp(t[A],e[A]):Object.assign(r,{[A]:e[A]}):Object.assign(r,{[A]:e[A]})}),r}function Wp(t){for(let e in t)t[e]===void 0&&delete t[e];return t}function _l(t,e,r){if(typeof e=="string"){let[s,o]=e.split(" ");r=Object.assign(o?{method:s,url:o}:{url:s},r)}else r=Object.assign({},e);r.headers=Vv(r.headers),Wp(r),Wp(r.headers);let A=Zp(t||{},r);return r.url==="/graphql"&&(t&&t.mediaType.previews?.length&&(A.mediaType.previews=t.mediaType.previews.filter(s=>!A.mediaType.previews.includes(s)).concat(A.mediaType.previews)),A.mediaType.previews=(A.mediaType.previews||[]).map(s=>s.replace(/-preview/,""))),A}function Wv(t,e){let r=/\?/.test(t)?"&":"?",A=Object.keys(e);return A.length===0?t:t+r+A.map(s=>s==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${s}=${encodeURIComponent(e[s])}`).join("&")}var zv=/\{[^{}}]+\}/g;function Zv(t){return t.replace(/(?:^\W+)|(?:(?r.concat(A),[]):[]}function zp(t,e){let r={__proto__:null};for(let A of Object.keys(t))e.indexOf(A)===-1&&(r[A]=t[A]);return r}function jp(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function WA(t){return encodeURIComponent(t).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Ao(t,e,r){return e=t==="+"||t==="#"?jp(e):WA(e),r?WA(r)+"="+e:e}function qA(t){return t!=null}function Yl(t){return t===";"||t==="&"||t==="?"}function Kv(t,e,r,A){var s=t[r],o=[];if(qA(s)&&s!=="")if(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||typeof s=="boolean")s=s.toString(),A&&A!=="*"&&(s=s.substring(0,parseInt(A,10))),o.push(Ao(e,s,Yl(e)?r:""));else if(A==="*")Array.isArray(s)?s.filter(qA).forEach(function(n){o.push(Ao(e,n,Yl(e)?r:""))}):Object.keys(s).forEach(function(n){qA(s[n])&&o.push(Ao(e,s[n],n))});else{let n=[];Array.isArray(s)?s.filter(qA).forEach(function(i){n.push(Ao(e,i))}):Object.keys(s).forEach(function(i){qA(s[i])&&(n.push(WA(i)),n.push(Ao(e,s[i].toString())))}),Yl(e)?o.push(WA(r)+"="+n.join(",")):n.length!==0&&o.push(n.join(","))}else e===";"?qA(s)&&o.push(WA(r)):s===""&&(e==="&"||e==="?")?o.push(WA(r)+"="):s===""&&o.push("");return o}function Xv(t){return{expand:$v.bind(null,t)}}function $v(t,e){var r=["+","#",".","/",";","?","&"];return t=t.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(A,s,o){if(s){let i="",a=[];if(r.indexOf(s.charAt(0))!==-1&&(i=s.charAt(0),s=s.substr(1)),s.split(/,/g).forEach(function(c){var g=/([^:\*]*)(?::(\d+)|(\*))?/.exec(c);a.push(Kv(e,i,g[1],g[2]||g[3]))}),i&&i!=="+"){var n=",";return i==="?"?n="&":i!=="#"&&(n=i),(a.length!==0?i:"")+a.join(n)}else return a.join(",")}else return jp(o)}),t==="/"?t:t.replace(/\/$/,"")}function Kp(t){let e=t.method.toUpperCase(),r=(t.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),A=Object.assign({},t.headers),s,o=zp(t,["method","baseUrl","url","headers","request","mediaType"]),n=jv(r);r=Xv(r).expand(o),/^http/.test(r)||(r=t.baseUrl+r);let i=Object.keys(t).filter(g=>n.includes(g)).concat("baseUrl"),a=zp(o,i);if(!/application\/octet-stream/i.test(A.accept)&&(t.mediaType.format&&(A.accept=A.accept.split(/,/).map(g=>g.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${t.mediaType.format}`)).join(",")),r.endsWith("/graphql")&&t.mediaType.previews?.length)){let g=A.accept.match(/(?{let u=t.mediaType.format?`.${t.mediaType.format}`:"+json";return`application/vnd.github.${l}-preview${u}`}).join(",")}return["GET","HEAD"].includes(e)?r=Wv(r,a):"data"in a?s=a.data:Object.keys(a).length&&(s=a),!A["content-type"]&&typeof s<"u"&&(A["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof s>"u"&&(s=""),Object.assign({method:e,url:r,headers:A},typeof s<"u"?{body:s}:null,t.request?{request:t.request}:null)}function ex(t,e,r){return Kp(_l(t,e,r))}function Xp(t,e){let r=_l(t,e),A=ex.bind(null,r);return Object.assign(A,{DEFAULTS:r,defaults:Xp.bind(null,r),merge:_l.bind(null,r),parse:Kp})}var $p=Xp(null,Hv);var Im=W(nm(),1);var gx=/^-?\d+$/,Di=/^-?\d+n+$/,lr=JSON.stringify,Vl=JSON.parse,lm=/^-?\d+n$/,im=/([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g,am=/([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g,ql=t=>t===void 0||typeof t=="function"||typeof t=="symbol",Wl=t=>t!==null&&typeof t=="object"&&t.constructor&&t.constructor.name==="RawJSON",lx=(t,e,r)=>{let A="";typeof r=="number"?A=" ".repeat(Math.min(10,Math.max(0,Math.floor(r)))):typeof r=="string"&&(A=r.slice(0,10));let s=typeof e=="function",o=Array.isArray(e)?new Set(e.map(String)):null,n=(h,C,I)=>(I!==null&&typeof I=="object"&&typeof I.toJSON=="function"&&(I=I.toJSON(C)),typeof I=="string"&&Di.test(I)?I+"n":typeof I=="bigint"?"rawJSON"in JSON?JSON.rawJSON(I.toString()):I.toString()+"n":(s&&(I=e.call(h,C,I)),I!==null&&typeof I=="object"&&(I instanceof Number||I instanceof String||I instanceof Boolean)&&(I=I.valueOf()),I)),i=n({"":t},"",t);if(ql(i))return;let a=i===null||typeof i!="object",c=Wl(i);if(a||c)return lr(i);let g=[],l=0,u=[{parent:{"":i},key:"",val:i,isArray:Array.isArray(i),keys:Array.isArray(i)?null:Object.keys(i),index:0,first:!0}],E=new WeakSet([i]);for(;u.length>0;){let h=u[u.length-1];h.index===0&&(g.push(h.isArray?"[":"{"),l++);let C=!1;if(h.isArray)if(h.index=h.keys.length&&u[u.length-1]===h&&(C=!0)}C&&(l--,!h.first&&A&&g.push(` -`+A.repeat(l)),g.push(h.isArray?"]":"}"),E.delete(h.val),u.pop())}return g.join("")},um=(t,e,r)=>{try{return"rawJSON"in JSON?lr(t,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r):t?lr(t,(i,a)=>typeof a=="string"&&Di.test(a)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r).replace(im,"$1$2$3").replace(am,"$1$2$3"):lr(t,e,r)}catch(A){if(A instanceof RangeError){let s=lx(t,e,r);return s===void 0?void 0:"rawJSON"in JSON?s:s.replace(im,"$1$2$3").replace(am,"$1$2$3")}throw A}},Ri=new Map,ux=()=>{let t=JSON.parse.toString();if(Ri.has(t))return Ri.get(t);try{let e=JSON.parse("1",(r,A,s)=>!!s?.source&&s.source==="1");return Ri.set(t,e),e}catch{return Ri.set(t,!1),!1}},Ex=(t,e,r,A)=>typeof e=="string"&&lm.test(e)?BigInt(e.slice(0,-1)):typeof e=="string"&&Di.test(e)?e.slice(0,-1):typeof A=="function"?A(t,e,r):e,hx=(t,e)=>JSON.parse(t,(r,A,s)=>{let o=typeof A=="number",n=A>Number.MAX_SAFE_INTEGER||A{let r={"":t},A=[{parent:r,key:"",visited:!1}];for(;A.length>0;){let s=A[A.length-1];if(s.visited){let{parent:o,key:n}=s,i=o[n];typeof i=="string"&&(lm.test(i)?i=BigInt(i.slice(0,-1)):Di.test(i)&&(i=i.slice(0,-1))),typeof e=="function"&&(i=e.call(o,n,i)),i===void 0?delete o[n]:o[n]=i,A.pop()}else{s.visited=!0;let o=s.parent[s.key];if(o!==null&&typeof o=="object"){let i=Object.keys(o);for(let a=i.length-1;a>=0;a--)A.push({parent:o,key:i[a],visited:!1})}}}return r[""]},gm=t=>t.replace(Qx,(e,r,A,s)=>{let o=e[0]==='"';if(o&&Bx.test(e))return e.substring(0,e.length-1)+'n"';let i=A||s,a=r&&(r.length{if(!t)return Vl(t,e);try{if(ux())return hx(t,e);let r=gm(t);return Vl(r,(A,s,o)=>Ex(A,s,o,e))}catch(r){if(r instanceof RangeError){let A=gm(t),s=Vl(A);return Ix(s,e)}throw r}};var Jr=class extends Error{name;status;request;response;constructor(e,r,A){super(e,{cause:A.cause}),this.name="HttpError",this.status=Number.parseInt(r),Number.isNaN(this.status)&&(this.status=0);"response"in A&&(this.response=A.response);let s=Object.assign({},A.request);A.request.headers.authorization&&(s.headers=Object.assign({},A.request.headers,{authorization:A.request.headers.authorization.replace(/(?"";async function Bm(t){let e=t.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let r=t.request?.log||console,A=t.request?.parseSuccessResponseBody!==!1,s=fx(t.body)||Array.isArray(t.body)?um(t.body):t.body,o=Object.fromEntries(Object.entries(t.headers).map(([l,u])=>[l,String(u)])),n;try{n=await e(t.url,{method:t.method,body:s,redirect:t.request?.redirect,headers:o,signal:t.request?.signal,...t.body&&{duplex:"half"}})}catch(l){let u="Unknown Error";if(l instanceof Error){if(l.name==="AbortError")throw l.status=500,l;u=l.message,l.name==="TypeError"&&"cause"in l&&(l.cause instanceof Error?u=l.cause.message:typeof l.cause=="string"&&(u=l.cause))}let E=new Jr(u,500,{request:t});throw E.cause=l,E}let i=n.status,a=n.url,c={};for(let[l,u]of n.headers)c[l]=u;let g={url:a,status:i,headers:c,data:""};if("deprecation"in c){let l=c.link&&c.link.match(/<([^<>]+)>; rel="deprecation"/),u=l&&l.pop();r.warn(`[@octokit/request] "${t.method} ${t.url}" is deprecated. It is scheduled to be removed on ${c.sunset}${u?`. See ${u}`:""}`)}if(i===204||i===205)return g;if(t.method==="HEAD"){if(i<400)return g;throw new Jr(n.statusText,i,{response:g,request:t})}if(i===304)throw g.data=await zl(n),new Jr("Not modified",i,{response:g,request:t});if(i>=400)throw g.data=await zl(n),new Jr(mx(g.data),i,{response:g,request:t});return g.data=A?await zl(n):n.body,g}async function zl(t){let e=t.headers.get("content-type");if(!e)return t.text().catch(Qm);let r=(0,Im.parse)(e);if(px(r)){let A="";try{return A=await t.text(),hm(A)}catch{return A}}else return r.type.startsWith("text/")||r.parameters.charset?.toLowerCase()==="utf-8"?t.text().catch(Qm):t.arrayBuffer().catch(()=>new ArrayBuffer(0))}function px(t){return t.type==="application/json"||t.type==="application/scim+json"}function mx(t){if(typeof t=="string")return t;if(t instanceof ArrayBuffer)return"Unknown error";if(typeof t=="object"&&t!==null&&"message"in t){let e=t,r="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(A=>JSON.stringify(A)).join(", ")}${r}`:`${e.message}${r}`}return`Unknown error: ${JSON.stringify(t)}`}function Zl(t,e){let r=t.defaults(e);return Object.assign(function(s,o){let n=r.merge(s,o);if(!n.request||!n.request.hook)return Bm(r.parse(n));let i=(a,c)=>Bm(r.parse(r.merge(a,c)));return Object.assign(i,{endpoint:r,defaults:Zl.bind(null,r)}),n.request.hook(i,n)},{endpoint:r,defaults:Zl.bind(null,r)})}var so=Zl($p,dx);var wx="0.0.0-development";function yx(t){return`Request failed due to following response errors: +`.trim())}};$I.exports=Dg});var fn=B((yP,sC)=>{"use strict";var tC=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:HS}=_(),VS=dA();AC()===void 0&&rC(new VS);function rC(t){if(!t||typeof t.dispatch!="function")throw new HS("Argument agent must implement Agent");Object.defineProperty(globalThis,tC,{value:t,writable:!0,enumerable:!1,configurable:!1})}function AC(){return globalThis[tC]}sC.exports={setGlobalDispatcher:rC,getGlobalDispatcher:AC}});var pn=B((DP,oC)=>{"use strict";oC.exports=class{#e;constructor(e){if(typeof e!="object"||e===null)throw new TypeError("handler must be an object");this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}});var iC=B((TP,nC)=>{"use strict";var qS=Xo();nC.exports=t=>{let e=t?.maxRedirections;return r=>function(s,o){let{maxRedirections:n=e,...i}=s;if(!n)return r(s,o);let a=new qS(r,n,s,o);return r(i,a)}}});var cC=B((bP,aC)=>{"use strict";var WS=gn();aC.exports=t=>e=>function(A,s){return e(A,new WS({...A,retryOptions:{...t,...A.retryOptions}},{handler:s,dispatch:e}))}});var lC=B((kP,gC)=>{"use strict";var zS=v(),{InvalidArgumentError:ZS,RequestAbortedError:jS}=_(),KS=pn(),Tg=class extends KS{#e=1024*1024;#t=null;#r=!1;#o=!1;#s=0;#A=null;#n=null;constructor({maxSize:e},r){if(super(r),e!=null&&(!Number.isFinite(e)||e<1))throw new ZS("maxSize must be a number greater than 0");this.#e=e??this.#e,this.#n=r}onConnect(e){this.#t=e,this.#n.onConnect(this.#i.bind(this))}#i(e){this.#o=!0,this.#A=e}onHeaders(e,r,A,s){let n=zS.parseHeaders(r)["content-length"];if(n!=null&&n>this.#e)throw new jS(`Response size (${n}) larger than maxSize (${this.#e})`);return this.#o?!0:this.#n.onHeaders(e,r,A,s)}onError(e){this.#r||(e=this.#A??e,this.#n.onError(e))}onData(e){return this.#s=this.#s+e.length,this.#s>=this.#e&&(this.#r=!0,this.#o?this.#n.onError(this.#A):this.#n.onComplete([])),!0}onComplete(e){if(!this.#r){if(this.#o){this.#n.onError(this.reason);return}this.#n.onComplete(e)}}};function XS({maxSize:t}={maxSize:1024*1024}){return e=>function(A,s){let{dumpMaxSize:o=t}=A,n=new Tg({maxSize:o},s);return e(A,n)}}gC.exports=XS});var hC=B((FP,EC)=>{"use strict";var{isIP:$S}=C("node:net"),{lookup:eN}=C("node:dns"),tN=pn(),{InvalidArgumentError:FA,InformationalError:rN}=_(),uC=Math.pow(2,31)-1,bg=class{#e=0;#t=0;#r=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#o,this.pick=e.pick??this.#s}get full(){return this.#r.size===this.#t}runLookup(e,r,A){let s=this.#r.get(e.hostname);if(s==null&&this.full){A(null,e.origin);return}let o={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...r.dns,maxTTL:this.#e,maxItems:this.#t};if(s==null)this.lookup(e,o,(n,i)=>{if(n||i==null||i.length===0){A(n??new rN("No DNS entries found"));return}this.setRecords(e,i);let a=this.#r.get(e.hostname),c=this.pick(e,a,o.affinity),g;typeof c.port=="number"?g=`:${c.port}`:e.port!==""?g=`:${e.port}`:g="",A(null,`${e.protocol}//${c.family===6?`[${c.address}]`:c.address}${g}`)});else{let n=this.pick(e,s,o.affinity);if(n==null){this.#r.delete(e.hostname),this.runLookup(e,r,A);return}let i;typeof n.port=="number"?i=`:${n.port}`:e.port!==""?i=`:${e.port}`:i="",A(null,`${e.protocol}//${n.family===6?`[${n.address}]`:n.address}${i}`)}}#o(e,r,A){eN(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(s,o)=>{if(s)return A(s);let n=new Map;for(let i of o)n.set(`${i.address}:${i.family}`,i);A(null,n.values())})}#s(e,r,A){let s=null,{records:o,offset:n}=r,i;if(this.dualStack?(A==null&&(n==null||n===uC?(r.offset=0,A=4):(r.offset++,A=(r.offset&1)===1?6:4)),o[A]!=null&&o[A].ips.length>0?i=o[A]:i=o[A===4?6:4]):i=o[A],i==null||i.ips.length===0)return s;i.offset==null||i.offset===uC?i.offset=0:i.offset++;let a=i.offset%i.ips.length;return s=i.ips[a]??null,s==null?s:Date.now()-s.timestamp>s.ttl?(i.ips.splice(a,1),this.pick(e,r,A)):s}setRecords(e,r){let A=Date.now(),s={records:{4:null,6:null}};for(let o of r){o.timestamp=A,typeof o.ttl=="number"?o.ttl=Math.min(o.ttl,this.#e):o.ttl=this.#e;let n=s.records[o.family]??{ips:[]};n.ips.push(o),s.records[o.family]=n}this.#r.set(e.hostname,s)}getHandler(e,r){return new kg(this,e,r)}},kg=class extends tN{#e=null;#t=null;#r=null;#o=null;#s=null;constructor(e,{origin:r,handler:A,dispatch:s},o){super(A),this.#s=r,this.#o=A,this.#t={...o},this.#e=e,this.#r=s}onError(e){switch(e.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#s,this.#t,(r,A)=>{if(r)return this.#o.onError(r);let s={...this.#t,origin:A};this.#r(s,this)});return}this.#o.onError(e);return}case"ENOTFOUND":this.#e.deleteRecord(this.#s);default:this.#o.onError(e);break}}};EC.exports=t=>{if(t?.maxTTL!=null&&(typeof t?.maxTTL!="number"||t?.maxTTL<0))throw new FA("Invalid maxTTL. Must be a positive number");if(t?.maxItems!=null&&(typeof t?.maxItems!="number"||t?.maxItems<1))throw new FA("Invalid maxItems. Must be a positive number and greater than zero");if(t?.affinity!=null&&t?.affinity!==4&&t?.affinity!==6)throw new FA("Invalid affinity. Must be either 4 or 6");if(t?.dualStack!=null&&typeof t?.dualStack!="boolean")throw new FA("Invalid dualStack. Must be a boolean");if(t?.lookup!=null&&typeof t?.lookup!="function")throw new FA("Invalid lookup. Must be a function");if(t?.pick!=null&&typeof t?.pick!="function")throw new FA("Invalid pick. Must be a function");let e=t?.dualStack??!0,r;e?r=t?.affinity??null:r=t?.affinity??4;let A={maxTTL:t?.maxTTL??1e4,lookup:t?.lookup??null,pick:t?.pick??null,dualStack:e,affinity:r,maxItems:t?.maxItems??1/0},s=new bg(A);return o=>function(i,a){let c=i.origin.constructor===URL?i.origin:new URL(i.origin);return $S(c.hostname)!==0?o(i,a):(s.runLookup(c,i,(g,l)=>{if(g)return a.onError(g);let u=null;u={...i,servername:c.hostname,origin:l,headers:{host:c.hostname,...i.headers}},o(u,s.getHandler({origin:c,dispatch:o,handler:a},i))}),!0)}}});var Gr=B((SP,pC)=>{"use strict";var{kConstruct:AN}=$(),{kEnumerableProperty:SA}=v(),{iteratorMixin:sN,isValidHeaderName:Ss,isValidHeaderValue:BC}=Ge(),{webidl:Y}=Qe(),Fg=C("node:assert"),mn=C("node:util"),ge=Symbol("headers map"),xe=Symbol("headers map sorted");function QC(t){return t===10||t===13||t===9||t===32}function IC(t){let e=0,r=t.length;for(;r>e&&QC(t.charCodeAt(r-1));)--r;for(;r>e&&QC(t.charCodeAt(e));)++e;return e===0&&r===t.length?t:t.substring(e,r)}function CC(t,e){if(Array.isArray(e))for(let r=0;r>","record"]})}function Sg(t,e,r){if(r=IC(r),Ss(e)){if(!BC(r))throw Y.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw Y.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"});if(fC(t)==="immutable")throw new TypeError("immutable");return Ng(t).append(e,r,!1)}function dC(t,e){return t[0]>1),r[c][0]<=g[0]?a=c+1:i=c;if(o!==c){for(n=o;n>a;)r[n]=r[--n];r[a]=g}}if(!A.next().done)throw new TypeError("Unreachable");return r}else{let A=0;for(let{0:s,1:{value:o}}of this[ge])r[A++]=[s,o],Fg(o!==null);return r.sort(dC)}}},it=class t{#e;#t;constructor(e=void 0){Y.util.markAsUncloneable(this),e!==AN&&(this.#t=new wn,this.#e="none",e!==void 0&&(e=Y.converters.HeadersInit(e,"Headers contructor","init"),CC(this,e)))}append(e,r){Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,2,"Headers.append");let A="Headers.append";return e=Y.converters.ByteString(e,A,"name"),r=Y.converters.ByteString(r,A,"value"),Sg(this,e,r)}delete(e){if(Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,1,"Headers.delete"),e=Y.converters.ByteString(e,"Headers.delete","name"),!Ss(e))throw Y.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(e,!1)&&this.#t.delete(e,!1)}get(e){Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(e=Y.converters.ByteString(e,r,"name"),!Ss(e))throw Y.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.get(e,!1)}has(e){Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(e=Y.converters.ByteString(e,r,"name"),!Ss(e))throw Y.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.contains(e,!1)}set(e,r){Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,2,"Headers.set");let A="Headers.set";if(e=Y.converters.ByteString(e,A,"name"),r=Y.converters.ByteString(r,A,"value"),r=IC(r),Ss(e)){if(!BC(r))throw Y.errors.invalidArgument({prefix:A,value:r,type:"header value"})}else throw Y.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(e,r,!1)}getSetCookie(){Y.brandCheck(this,t);let e=this.#t.cookies;return e?[...e]:[]}get[xe](){if(this.#t[xe])return this.#t[xe];let e=[],r=this.#t.toSortedArray(),A=this.#t.cookies;if(A===null||A.length===1)return this.#t[xe]=r;for(let s=0;s>"](t,e,r,A.bind(t)):Y.converters["record"](t,e,r)}throw Y.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};pC.exports={fill:CC,compareHeaderName:dC,Headers:it,HeadersList:wn,getHeadersGuard:fC,setHeadersGuard:oN,setHeadersList:nN,getHeadersList:Ng}});var Us=B((NP,UC)=>{"use strict";var{Headers:TC,HeadersList:mC,fill:iN,getHeadersGuard:aN,setHeadersGuard:bC,setHeadersList:kC}=Gr(),{extractBody:wC,cloneBody:cN,mixinBody:gN,hasFinalizationRegistry:FC,streamRegistry:SC,bodyUnusable:lN}=gA(),Ug=v(),yC=C("node:util"),{kEnumerableProperty:Oe}=Ug,{isValidReasonPhrase:uN,isCancelled:EN,isAborted:hN,isBlobLike:QN,serializeJavascriptValueToJSONString:BN,isErrorLike:IN,isomorphicEncode:CN,environmentSettingsObject:dN}=Ge(),{redirectStatusSet:fN,nullBodyStatus:pN}=As(),{kState:te,kHeaders:Lt}=Pt(),{webidl:M}=Qe(),{FormData:mN}=cs(),{URLSerializer:RC}=Te(),{kConstruct:Rn}=$(),Gg=C("node:assert"),{types:wN}=C("node:util"),yN=new TextEncoder("utf-8"),Lr=class t{static error(){return Ns(Dn(),"immutable")}static json(e,r={}){M.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=M.converters.ResponseInit(r));let A=yN.encode(BN(e)),s=wC(A),o=Ns(NA({}),"response");return DC(o,r,{body:s[0],type:"application/json"}),o}static redirect(e,r=302){M.argumentLengthCheck(arguments,1,"Response.redirect"),e=M.converters.USVString(e),r=M.converters["unsigned short"](r);let A;try{A=new URL(e,dN.settingsObject.baseUrl)}catch(n){throw new TypeError(`Failed to parse URL from ${e}`,{cause:n})}if(!fN.has(r))throw new RangeError(`Invalid status code ${r}`);let s=Ns(NA({}),"immutable");s[te].status=r;let o=CN(RC(A));return s[te].headersList.append("location",o,!0),s}constructor(e=null,r={}){if(M.util.markAsUncloneable(this),e===Rn)return;e!==null&&(e=M.converters.BodyInit(e)),r=M.converters.ResponseInit(r),this[te]=NA({}),this[Lt]=new TC(Rn),bC(this[Lt],"response"),kC(this[Lt],this[te].headersList);let A=null;if(e!=null){let[s,o]=wC(e);A={body:s,type:o}}DC(this,r,A)}get type(){return M.brandCheck(this,t),this[te].type}get url(){M.brandCheck(this,t);let e=this[te].urlList,r=e[e.length-1]??null;return r===null?"":RC(r,!0)}get redirected(){return M.brandCheck(this,t),this[te].urlList.length>1}get status(){return M.brandCheck(this,t),this[te].status}get ok(){return M.brandCheck(this,t),this[te].status>=200&&this[te].status<=299}get statusText(){return M.brandCheck(this,t),this[te].statusText}get headers(){return M.brandCheck(this,t),this[Lt]}get body(){return M.brandCheck(this,t),this[te].body?this[te].body.stream:null}get bodyUsed(){return M.brandCheck(this,t),!!this[te].body&&Ug.isDisturbed(this[te].body.stream)}clone(){if(M.brandCheck(this,t),lN(this))throw M.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let e=Lg(this[te]);return FC&&this[te].body?.stream&&SC.register(this,new WeakRef(this[te].body.stream)),Ns(e,aN(this[Lt]))}[yC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${yC.formatWithOptions(r,A)}`}};gN(Lr);Object.defineProperties(Lr.prototype,{type:Oe,url:Oe,status:Oe,ok:Oe,redirected:Oe,statusText:Oe,headers:Oe,clone:Oe,body:Oe,bodyUsed:Oe,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Lr,{json:Oe,redirect:Oe,error:Oe});function Lg(t){if(t.internalResponse)return NC(Lg(t.internalResponse),t.type);let e=NA({...t,body:null});return t.body!=null&&(e.body=cN(e,t.body)),e}function NA(t){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...t,headersList:t?.headersList?new mC(t?.headersList):new mC,urlList:t?.urlList?[...t.urlList]:[]}}function Dn(t){let e=IN(t);return NA({type:"error",status:0,error:e?t:new Error(t&&String(t)),aborted:t&&t.name==="AbortError"})}function RN(t){return t.type==="error"&&t.status===0}function yn(t,e){return e={internalResponse:t,...e},new Proxy(t,{get(r,A){return A in e?e[A]:r[A]},set(r,A,s){return Gg(!(A in e)),r[A]=s,!0}})}function NC(t,e){if(e==="basic")return yn(t,{type:"basic",headersList:t.headersList});if(e==="cors")return yn(t,{type:"cors",headersList:t.headersList});if(e==="opaque")return yn(t,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(e==="opaqueredirect")return yn(t,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});Gg(!1)}function DN(t,e=null){return Gg(EN(t)),hN(t)?Dn(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:e})):Dn(Object.assign(new DOMException("Request was cancelled."),{cause:e}))}function DC(t,e,r){if(e.status!==null&&(e.status<200||e.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in e&&e.statusText!=null&&!uN(String(e.statusText)))throw new TypeError("Invalid statusText");if("status"in e&&e.status!=null&&(t[te].status=e.status),"statusText"in e&&e.statusText!=null&&(t[te].statusText=e.statusText),"headers"in e&&e.headers!=null&&iN(t[Lt],e.headers),r){if(pN.includes(t.status))throw M.errors.exception({header:"Response constructor",message:`Invalid response status code ${t.status}`});t[te].body=r.body,r.type!=null&&!t[te].headersList.contains("content-type",!0)&&t[te].headersList.append("content-type",r.type,!0)}}function Ns(t,e){let r=new Lr(Rn);return r[te]=t,r[Lt]=new TC(Rn),kC(r[Lt],t.headersList),bC(r[Lt],e),FC&&t.body?.stream&&SC.register(r,new WeakRef(t.body.stream)),r}M.converters.ReadableStream=M.interfaceConverter(ReadableStream);M.converters.FormData=M.interfaceConverter(mN);M.converters.URLSearchParams=M.interfaceConverter(URLSearchParams);M.converters.XMLHttpRequestBodyInit=function(t,e,r){return typeof t=="string"?M.converters.USVString(t,e,r):QN(t)?M.converters.Blob(t,e,r,{strict:!1}):ArrayBuffer.isView(t)||wN.isArrayBuffer(t)?M.converters.BufferSource(t,e,r):Ug.isFormDataLike(t)?M.converters.FormData(t,e,r,{strict:!1}):t instanceof URLSearchParams?M.converters.URLSearchParams(t,e,r):M.converters.DOMString(t,e,r)};M.converters.BodyInit=function(t,e,r){return t instanceof ReadableStream?M.converters.ReadableStream(t,e,r):t?.[Symbol.asyncIterator]?t:M.converters.XMLHttpRequestBodyInit(t,e,r)};M.converters.ResponseInit=M.dictionaryConverter([{key:"status",converter:M.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:M.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:M.converters.HeadersInit}]);UC.exports={isNetworkError:RN,makeNetworkError:Dn,makeResponse:NA,makeAppropriateNetworkError:DN,filterResponse:NC,Response:Lr,cloneResponse:Lg,fromInnerResponse:Ns}});var vC=B((UP,MC)=>{"use strict";var{kConnected:GC,kSize:LC}=$(),Mg=class{constructor(e){this.value=e}deref(){return this.value[GC]===0&&this.value[LC]===0?void 0:this.value}},vg=class{constructor(e){this.finalizer=e}register(e,r){e.on&&e.on("disconnect",()=>{e[GC]===0&&e[LC]===0&&this.finalizer(r)})}unregister(e){}};MC.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:Mg,FinalizationRegistry:vg}):{WeakRef,FinalizationRegistry}}});var UA=B((GP,XC)=>{"use strict";var{extractBody:TN,mixinBody:bN,cloneBody:kN,bodyUnusable:xC}=gA(),{Headers:WC,fill:FN,HeadersList:Fn,setHeadersGuard:Og,getHeadersGuard:SN,setHeadersList:zC,getHeadersList:OC}=Gr(),{FinalizationRegistry:NN}=vC()(),bn=v(),YC=C("node:util"),{isValidHTTPToken:UN,sameOrigin:_C,environmentSettingsObject:Tn}=Ge(),{forbiddenMethodsSet:GN,corsSafeListedMethodsSet:LN,referrerPolicy:MN,requestRedirect:vN,requestMode:xN,requestCredentials:ON,requestCache:YN,requestDuplex:_N}=As(),{kEnumerableProperty:le,normalizedMethodRecordsBase:JN,normalizedMethodRecords:PN}=bn,{kHeaders:Ye,kSignal:kn,kState:K,kDispatcher:xg}=Pt(),{webidl:N}=Qe(),{URLSerializer:HN}=Te(),{kConstruct:Sn}=$(),VN=C("node:assert"),{getMaxListeners:JC,setMaxListeners:PC,getEventListeners:qN,defaultMaxListeners:HC}=C("node:events"),WN=Symbol("abortController"),ZC=new NN(({signal:t,abort:e})=>{t.removeEventListener("abort",e)}),Nn=new WeakMap;function VC(t){return e;function e(){let r=t.deref();if(r!==void 0){ZC.unregister(e),this.removeEventListener("abort",e),r.abort(this.reason);let A=Nn.get(r.signal);if(A!==void 0){if(A.size!==0){for(let s of A){let o=s.deref();o!==void 0&&o.abort(this.reason)}A.clear()}Nn.delete(r.signal)}}}}var qC=!1,er=class t{constructor(e,r={}){if(N.util.markAsUncloneable(this),e===Sn)return;let A="Request constructor";N.argumentLengthCheck(arguments,1,A),e=N.converters.RequestInfo(e,A,"input"),r=N.converters.RequestInit(r,A,"init");let s=null,o=null,n=Tn.settingsObject.baseUrl,i=null;if(typeof e=="string"){this[xg]=r.dispatcher;let Q;try{Q=new URL(e,n)}catch(p){throw new TypeError("Failed to parse URL from "+e,{cause:p})}if(Q.username||Q.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);s=Un({urlList:[Q]}),o="cors"}else this[xg]=r.dispatcher||e[xg],VN(e instanceof t),s=e[K],i=e[kn];let a=Tn.settingsObject.origin,c="client";if(s.window?.constructor?.name==="EnvironmentSettingsObject"&&_C(s.window,a)&&(c=s.window),r.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in r&&(c="no-window"),s=Un({method:s.method,headersList:s.headersList,unsafeRequest:s.unsafeRequest,client:Tn.settingsObject,window:c,priority:s.priority,origin:s.origin,referrer:s.referrer,referrerPolicy:s.referrerPolicy,mode:s.mode,credentials:s.credentials,cache:s.cache,redirect:s.redirect,integrity:s.integrity,keepalive:s.keepalive,reloadNavigation:s.reloadNavigation,historyNavigation:s.historyNavigation,urlList:[...s.urlList]});let g=Object.keys(r).length!==0;if(g&&(s.mode==="navigate"&&(s.mode="same-origin"),s.reloadNavigation=!1,s.historyNavigation=!1,s.origin="client",s.referrer="client",s.referrerPolicy="",s.url=s.urlList[s.urlList.length-1],s.urlList=[s.url]),r.referrer!==void 0){let Q=r.referrer;if(Q==="")s.referrer="no-referrer";else{let p;try{p=new URL(Q,n)}catch(D){throw new TypeError(`Referrer "${Q}" is not a valid URL.`,{cause:D})}p.protocol==="about:"&&p.hostname==="client"||a&&!_C(p,Tn.settingsObject.baseUrl)?s.referrer="client":s.referrer=p}}r.referrerPolicy!==void 0&&(s.referrerPolicy=r.referrerPolicy);let l;if(r.mode!==void 0?l=r.mode:l=o,l==="navigate")throw N.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(l!=null&&(s.mode=l),r.credentials!==void 0&&(s.credentials=r.credentials),r.cache!==void 0&&(s.cache=r.cache),s.cache==="only-if-cached"&&s.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(r.redirect!==void 0&&(s.redirect=r.redirect),r.integrity!=null&&(s.integrity=String(r.integrity)),r.keepalive!==void 0&&(s.keepalive=!!r.keepalive),r.method!==void 0){let Q=r.method,p=PN[Q];if(p!==void 0)s.method=p;else{if(!UN(Q))throw new TypeError(`'${Q}' is not a valid HTTP method.`);let D=Q.toUpperCase();if(GN.has(D))throw new TypeError(`'${Q}' HTTP method is unsupported.`);Q=JN[D]??Q,s.method=Q}!qC&&s.method==="patch"&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),qC=!0)}r.signal!==void 0&&(i=r.signal),this[K]=s;let u=new AbortController;if(this[kn]=u.signal,i!=null){if(!i||typeof i.aborted!="boolean"||typeof i.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(i.aborted)u.abort(i.reason);else{this[WN]=u;let Q=new WeakRef(u),p=VC(Q);try{(typeof JC=="function"&&JC(i)===HC||qN(i,"abort").length>=HC)&&PC(1500,i)}catch{}bn.addAbortListener(i,p),ZC.register(u,{signal:i,abort:p},p)}}if(this[Ye]=new WC(Sn),zC(this[Ye],s.headersList),Og(this[Ye],"request"),l==="no-cors"){if(!LN.has(s.method))throw new TypeError(`'${s.method} is unsupported in no-cors mode.`);Og(this[Ye],"request-no-cors")}if(g){let Q=OC(this[Ye]),p=r.headers!==void 0?r.headers:new Fn(Q);if(Q.clear(),p instanceof Fn){for(let{name:D,value:R}of p.rawValues())Q.append(D,R,!1);Q.cookies=p.cookies}else FN(this[Ye],p)}let E=e instanceof t?e[K].body:null;if((r.body!=null||E!=null)&&(s.method==="GET"||s.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let h=null;if(r.body!=null){let[Q,p]=TN(r.body,s.keepalive);h=Q,p&&!OC(this[Ye]).contains("content-type",!0)&&this[Ye].append("content-type",p)}let d=h??E;if(d!=null&&d.source==null){if(h!=null&&r.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(s.mode!=="same-origin"&&s.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');s.useCORSPreflightFlag=!0}let I=d;if(h==null&&E!=null){if(xC(e))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let Q=new TransformStream;E.stream.pipeThrough(Q),I={source:E.source,length:E.length,stream:Q.readable}}this[K].body=I}get method(){return N.brandCheck(this,t),this[K].method}get url(){return N.brandCheck(this,t),HN(this[K].url)}get headers(){return N.brandCheck(this,t),this[Ye]}get destination(){return N.brandCheck(this,t),this[K].destination}get referrer(){return N.brandCheck(this,t),this[K].referrer==="no-referrer"?"":this[K].referrer==="client"?"about:client":this[K].referrer.toString()}get referrerPolicy(){return N.brandCheck(this,t),this[K].referrerPolicy}get mode(){return N.brandCheck(this,t),this[K].mode}get credentials(){return this[K].credentials}get cache(){return N.brandCheck(this,t),this[K].cache}get redirect(){return N.brandCheck(this,t),this[K].redirect}get integrity(){return N.brandCheck(this,t),this[K].integrity}get keepalive(){return N.brandCheck(this,t),this[K].keepalive}get isReloadNavigation(){return N.brandCheck(this,t),this[K].reloadNavigation}get isHistoryNavigation(){return N.brandCheck(this,t),this[K].historyNavigation}get signal(){return N.brandCheck(this,t),this[kn]}get body(){return N.brandCheck(this,t),this[K].body?this[K].body.stream:null}get bodyUsed(){return N.brandCheck(this,t),!!this[K].body&&bn.isDisturbed(this[K].body.stream)}get duplex(){return N.brandCheck(this,t),"half"}clone(){if(N.brandCheck(this,t),xC(this))throw new TypeError("unusable");let e=jC(this[K]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let A=Nn.get(this.signal);A===void 0&&(A=new Set,Nn.set(this.signal,A));let s=new WeakRef(r);A.add(s),bn.addAbortListener(r.signal,VC(s))}return KC(e,r.signal,SN(this[Ye]))}[YC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${YC.formatWithOptions(r,A)}`}};bN(er);function Un(t){return{method:t.method??"GET",localURLsOnly:t.localURLsOnly??!1,unsafeRequest:t.unsafeRequest??!1,body:t.body??null,client:t.client??null,reservedClient:t.reservedClient??null,replacesClientId:t.replacesClientId??"",window:t.window??"client",keepalive:t.keepalive??!1,serviceWorkers:t.serviceWorkers??"all",initiator:t.initiator??"",destination:t.destination??"",priority:t.priority??null,origin:t.origin??"client",policyContainer:t.policyContainer??"client",referrer:t.referrer??"client",referrerPolicy:t.referrerPolicy??"",mode:t.mode??"no-cors",useCORSPreflightFlag:t.useCORSPreflightFlag??!1,credentials:t.credentials??"same-origin",useCredentials:t.useCredentials??!1,cache:t.cache??"default",redirect:t.redirect??"follow",integrity:t.integrity??"",cryptoGraphicsNonceMetadata:t.cryptoGraphicsNonceMetadata??"",parserMetadata:t.parserMetadata??"",reloadNavigation:t.reloadNavigation??!1,historyNavigation:t.historyNavigation??!1,userActivation:t.userActivation??!1,taintedOrigin:t.taintedOrigin??!1,redirectCount:t.redirectCount??0,responseTainting:t.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:t.preventNoCacheCacheControlHeaderModification??!1,done:t.done??!1,timingAllowFailed:t.timingAllowFailed??!1,urlList:t.urlList,url:t.urlList[0],headersList:t.headersList?new Fn(t.headersList):new Fn}}function jC(t){let e=Un({...t,body:null});return t.body!=null&&(e.body=kN(e,t.body)),e}function KC(t,e,r){let A=new er(Sn);return A[K]=t,A[kn]=e,A[Ye]=new WC(Sn),zC(A[Ye],t.headersList),Og(A[Ye],r),A}Object.defineProperties(er.prototype,{method:le,url:le,headers:le,redirect:le,clone:le,signal:le,duplex:le,destination:le,body:le,bodyUsed:le,isHistoryNavigation:le,isReloadNavigation:le,keepalive:le,integrity:le,cache:le,credentials:le,attribute:le,referrerPolicy:le,referrer:le,mode:le,[Symbol.toStringTag]:{value:"Request",configurable:!0}});N.converters.Request=N.interfaceConverter(er);N.converters.RequestInfo=function(t,e,r){return typeof t=="string"?N.converters.USVString(t,e,r):t instanceof er?N.converters.Request(t,e,r):N.converters.USVString(t,e,r)};N.converters.AbortSignal=N.interfaceConverter(AbortSignal);N.converters.RequestInit=N.dictionaryConverter([{key:"method",converter:N.converters.ByteString},{key:"headers",converter:N.converters.HeadersInit},{key:"body",converter:N.nullableConverter(N.converters.BodyInit)},{key:"referrer",converter:N.converters.USVString},{key:"referrerPolicy",converter:N.converters.DOMString,allowedValues:MN},{key:"mode",converter:N.converters.DOMString,allowedValues:xN},{key:"credentials",converter:N.converters.DOMString,allowedValues:ON},{key:"cache",converter:N.converters.DOMString,allowedValues:YN},{key:"redirect",converter:N.converters.DOMString,allowedValues:vN},{key:"integrity",converter:N.converters.DOMString},{key:"keepalive",converter:N.converters.boolean},{key:"signal",converter:N.nullableConverter(t=>N.converters.AbortSignal(t,"RequestInit","signal",{strict:!1}))},{key:"window",converter:N.converters.any},{key:"duplex",converter:N.converters.DOMString,allowedValues:_N},{key:"dispatcher",converter:N.converters.any}]);XC.exports={Request:er,makeRequest:Un,fromInnerRequest:KC,cloneRequest:jC}});var Ls=B((LP,Ed)=>{"use strict";var{makeNetworkError:V,makeAppropriateNetworkError:Gn,filterResponse:Yg,makeResponse:Ln,fromInnerResponse:zN}=Us(),{HeadersList:$C}=Gr(),{Request:ZN,cloneRequest:jN}=UA(),tr=C("node:zlib"),{bytesMatch:KN,makePolicyContainer:XN,clonePolicyContainer:$N,requestBadPort:eU,TAOCheck:tU,appendRequestOriginHeader:rU,responseLocationURL:AU,requestCurrentURL:ft,setRequestReferrerPolicyOnRedirect:sU,tryUpgradeRequestToAPotentiallyTrustworthyURL:oU,createOpaqueTimingInfo:Vg,appendFetchMetadata:nU,corsCheck:iU,crossOriginResourcePolicyCheck:aU,determineRequestsReferrer:cU,coarsenedSharedCurrentTime:Gs,createDeferredPromise:gU,isBlobLike:lU,sameOrigin:Hg,isCancelled:Mr,isAborted:ed,isErrorLike:uU,fullyReadBody:EU,readableStreamClose:hU,isomorphicEncode:Mn,urlIsLocal:QU,urlIsHttpHttpsScheme:qg,urlHasHttpsScheme:BU,clampAndCoarsenConnectionTimingInfo:IU,simpleRangeHeaderValue:CU,buildContentRange:dU,createInflate:fU,extractMimeType:pU}=Ge(),{kState:sd,kDispatcher:mU}=Pt(),vr=C("node:assert"),{safelyExtractBody:Wg,extractBody:td}=gA(),{redirectStatusSet:od,nullBodyStatus:nd,safeMethodsSet:wU,requestBodyHeader:yU,subresourceSet:RU}=As(),DU=C("node:events"),{Readable:TU,pipeline:bU,finished:kU}=C("node:stream"),{addAbortListener:FU,isErrored:SU,isReadable:vn,bufferToLowerCasedHeaderName:rd}=v(),{dataURLProcessor:NU,serializeAMimeType:UU,minimizeSupportedMimeType:GU}=Te(),{getGlobalDispatcher:LU}=fn(),{webidl:MU}=Qe(),{STATUS_CODES:vU}=C("node:http"),xU=["GET","HEAD"],OU=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",_g,xn=class extends DU{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){this.state==="ongoing"&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}};function YU(t){id(t,"fetch")}function _U(t,e=void 0){MU.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=gU(),A;try{A=new ZN(t,e)}catch(g){return r.reject(g),r.promise}let s=A[sd];if(A.signal.aborted)return Jg(r,s,null,A.signal.reason),r.promise;s.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(s.serviceWorkers="none");let n=null,i=!1,a=null;return FU(A.signal,()=>{i=!0,vr(a!=null),a.abort(A.signal.reason);let g=n?.deref();Jg(r,s,g,A.signal.reason)}),a=cd({request:s,processResponseEndOfBody:YU,processResponse:g=>{if(!i){if(g.aborted){Jg(r,s,n,a.serializedAbortReason);return}if(g.type==="error"){r.reject(new TypeError("fetch failed",{cause:g.error}));return}n=new WeakRef(zN(g,"immutable")),r.resolve(n.deref()),r=null}},dispatcher:A[mU]}),r.promise}function id(t,e="other"){if(t.type==="error"&&t.aborted||!t.urlList?.length)return;let r=t.urlList[0],A=t.timingInfo,s=t.cacheState;qg(r)&&A!==null&&(t.timingAllowPassed||(A=Vg({startTime:A.startTime}),s=""),A.endTime=Gs(),t.timingInfo=A,ad(A,r.href,e,globalThis,s))}var ad=performance.markResourceTiming;function Jg(t,e,r,A){if(t&&t.reject(A),e.body!=null&&vn(e.body?.stream)&&e.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o}),r==null)return;let s=r[sd];s.body!=null&&vn(s.body?.stream)&&s.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o})}function cd({request:t,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseEndOfBody:s,processResponseConsumeBody:o,useParallelQueue:n=!1,dispatcher:i=LU()}){vr(i);let a=null,c=!1;t.client!=null&&(a=t.client.globalObject,c=t.client.crossOriginIsolatedCapability);let g=Gs(c),l=Vg({startTime:g}),u={controller:new xn(i),request:t,timingInfo:l,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseConsumeBody:o,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};return vr(!t.body||t.body.stream),t.window==="client"&&(t.window=t.client?.globalObject?.constructor?.name==="Window"?t.client:"no-window"),t.origin==="client"&&(t.origin=t.client.origin),t.policyContainer==="client"&&(t.client!=null?t.policyContainer=$N(t.client.policyContainer):t.policyContainer=XN()),t.headersList.contains("accept",!0)||t.headersList.append("accept","*/*",!0),t.headersList.contains("accept-language",!0)||t.headersList.append("accept-language","*",!0),t.priority,RU.has(t.destination),gd(u).catch(E=>{u.controller.terminate(E)}),u.controller}async function gd(t,e=!1){let r=t.request,A=null;if(r.localURLsOnly&&!QU(ft(r))&&(A=V("local URLs only")),oU(r),eU(r)==="blocked"&&(A=V("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=cU(r)),A===null&&(A=await(async()=>{let o=ft(r);return Hg(o,r.url)&&r.responseTainting==="basic"||o.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await Ad(t)):r.mode==="same-origin"?V('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?V('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await Ad(t)):qg(ft(r))?(r.responseTainting="cors",await ld(t)):V("URL scheme must be a HTTP(S) scheme")})()),e)return A;A.status!==0&&!A.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?A=Yg(A,"basic"):r.responseTainting==="cors"?A=Yg(A,"cors"):r.responseTainting==="opaque"?A=Yg(A,"opaque"):vr(!1));let s=A.status===0?A:A.internalResponse;if(s.urlList.length===0&&s.urlList.push(...r.urlList),r.timingAllowFailed||(A.timingAllowPassed=!0),A.type==="opaque"&&s.status===206&&s.rangeRequested&&!r.headers.contains("range",!0)&&(A=s=V()),A.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||nd.includes(s.status))&&(s.body=null,t.controller.dump=!0),r.integrity){let o=i=>Pg(t,V(i));if(r.responseTainting==="opaque"||A.body==null){o(A.error);return}let n=i=>{if(!KN(i,r.integrity)){o("integrity mismatch");return}A.body=Wg(i)[0],Pg(t,A)};await EU(A.body,n,o)}else Pg(t,A)}function Ad(t){if(Mr(t)&&t.request.redirectCount===0)return Promise.resolve(Gn(t));let{request:e}=t,{protocol:r}=ft(e);switch(r){case"about:":return Promise.resolve(V("about scheme is not supported"));case"blob:":{_g||(_g=C("node:buffer").resolveObjectURL);let A=ft(e);if(A.search.length!==0)return Promise.resolve(V("NetworkError when attempting to fetch resource."));let s=_g(A.toString());if(e.method!=="GET"||!lU(s))return Promise.resolve(V("invalid method"));let o=Ln(),n=s.size,i=Mn(`${n}`),a=s.type;if(e.headersList.contains("range",!0)){o.rangeRequested=!0;let c=e.headersList.get("range",!0),g=CU(c,!0);if(g==="failure")return Promise.resolve(V("failed to fetch the data URL"));let{rangeStartValue:l,rangeEndValue:u}=g;if(l===null)l=n-u,u=l+u-1;else{if(l>=n)return Promise.resolve(V("Range start is greater than the blob's size."));(u===null||u>=n)&&(u=n-1)}let E=s.slice(l,u,a),h=td(E);o.body=h[0];let d=Mn(`${E.size}`),I=dU(l,u,n);o.status=206,o.statusText="Partial Content",o.headersList.set("content-length",d,!0),o.headersList.set("content-type",a,!0),o.headersList.set("content-range",I,!0)}else{let c=td(s);o.statusText="OK",o.body=c[0],o.headersList.set("content-length",i,!0),o.headersList.set("content-type",a,!0)}return Promise.resolve(o)}case"data:":{let A=ft(e),s=NU(A);if(s==="failure")return Promise.resolve(V("failed to fetch the data URL"));let o=UU(s.mimeType);return Promise.resolve(Ln({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:o}]],body:Wg(s.body)[0]}))}case"file:":return Promise.resolve(V("not implemented... yet..."));case"http:":case"https:":return ld(t).catch(A=>V(A));default:return Promise.resolve(V("unknown scheme"))}}function JU(t,e){t.request.done=!0,t.processResponseDone!=null&&queueMicrotask(()=>t.processResponseDone(e))}function Pg(t,e){let r=t.timingInfo,A=()=>{let o=Date.now();t.request.destination==="document"&&(t.controller.fullTimingInfo=r),t.controller.reportTimingSteps=()=>{if(t.request.url.protocol!=="https:")return;r.endTime=o;let i=e.cacheState,a=e.bodyInfo;e.timingAllowPassed||(r=Vg(r),i="");let c=0;if(t.request.mode!=="navigator"||!e.hasCrossOriginRedirects){c=e.status;let g=pU(e.headersList);g!=="failure"&&(a.contentType=GU(g))}t.request.initiatorType!=null&&ad(r,t.request.url.href,t.request.initiatorType,globalThis,i,a,c)};let n=()=>{t.request.done=!0,t.processResponseEndOfBody!=null&&queueMicrotask(()=>t.processResponseEndOfBody(e)),t.request.initiatorType!=null&&t.controller.reportTimingSteps()};queueMicrotask(()=>n())};t.processResponse!=null&&queueMicrotask(()=>{t.processResponse(e),t.processResponse=null});let s=e.type==="error"?e:e.internalResponse??e;s.body==null?A():kU(s.body.stream,()=>{A()})}async function ld(t){let e=t.request,r=null,A=null,s=t.timingInfo;if(e.serviceWorkers,r===null){if(e.redirect==="follow"&&(e.serviceWorkers="none"),A=r=await ud(t),e.responseTainting==="cors"&&iU(e,r)==="failure")return V("cors failure");tU(e,r)==="failure"&&(e.timingAllowFailed=!0)}return(e.responseTainting==="opaque"||r.type==="opaque")&&aU(e.origin,e.client,e.destination,A)==="blocked"?V("blocked"):(od.has(A.status)&&(e.redirect!=="manual"&&t.controller.connection.destroy(void 0,!1),e.redirect==="error"?r=V("unexpected redirect"):e.redirect==="manual"?r=A:e.redirect==="follow"?r=await PU(t,r):vr(!1)),r.timingInfo=s,r)}function PU(t,e){let r=t.request,A=e.internalResponse?e.internalResponse:e,s;try{if(s=AU(A,ft(r).hash),s==null)return e}catch(n){return Promise.resolve(V(n))}if(!qg(s))return Promise.resolve(V("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(V("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(s.username||s.password)&&!Hg(r,s))return Promise.resolve(V('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(s.username||s.password))return Promise.resolve(V('URL cannot contain credentials for request mode "cors"'));if(A.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(V());if([301,302].includes(A.status)&&r.method==="POST"||A.status===303&&!xU.includes(r.method)){r.method="GET",r.body=null;for(let n of yU)r.headersList.delete(n)}Hg(ft(r),s)||(r.headersList.delete("authorization",!0),r.headersList.delete("proxy-authorization",!0),r.headersList.delete("cookie",!0),r.headersList.delete("host",!0)),r.body!=null&&(vr(r.body.source!=null),r.body=Wg(r.body.source)[0]);let o=t.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=Gs(t.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(s),sU(r,A),gd(t,!0)}async function ud(t,e=!1,r=!1){let A=t.request,s=null,o=null,n=null,i=null,a=!1;A.window==="no-window"&&A.redirect==="error"?(s=t,o=A):(o=jN(A),s={...t},s.request=o);let c=A.credentials==="include"||A.credentials==="same-origin"&&A.responseTainting==="basic",g=o.body?o.body.length:null,l=null;if(o.body==null&&["POST","PUT"].includes(o.method)&&(l="0"),g!=null&&(l=Mn(`${g}`)),l!=null&&o.headersList.append("content-length",l,!0),g!=null&&o.keepalive,o.referrer instanceof URL&&o.headersList.append("referer",Mn(o.referrer.href),!0),rU(o),nU(o),o.headersList.contains("user-agent",!0)||o.headersList.append("user-agent",OU),o.cache==="default"&&(o.headersList.contains("if-modified-since",!0)||o.headersList.contains("if-none-match",!0)||o.headersList.contains("if-unmodified-since",!0)||o.headersList.contains("if-match",!0)||o.headersList.contains("if-range",!0))&&(o.cache="no-store"),o.cache==="no-cache"&&!o.preventNoCacheCacheControlHeaderModification&&!o.headersList.contains("cache-control",!0)&&o.headersList.append("cache-control","max-age=0",!0),(o.cache==="no-store"||o.cache==="reload")&&(o.headersList.contains("pragma",!0)||o.headersList.append("pragma","no-cache",!0),o.headersList.contains("cache-control",!0)||o.headersList.append("cache-control","no-cache",!0)),o.headersList.contains("range",!0)&&o.headersList.append("accept-encoding","identity",!0),o.headersList.contains("accept-encoding",!0)||(BU(ft(o))?o.headersList.append("accept-encoding","br, gzip, deflate",!0):o.headersList.append("accept-encoding","gzip, deflate",!0)),o.headersList.delete("host",!0),i==null&&(o.cache="no-store"),o.cache!=="no-store"&&o.cache,n==null){if(o.cache==="only-if-cached")return V("only if cached");let u=await HU(s,c,r);!wU.has(o.method)&&u.status>=200&&u.status<=399,a&&u.status,n==null&&(n=u)}if(n.urlList=[...o.urlList],o.headersList.contains("range",!0)&&(n.rangeRequested=!0),n.requestIncludesCredentials=c,n.status===407)return A.window==="no-window"?V():Mr(t)?Gn(t):V("proxy authentication required");if(n.status===421&&!r&&(A.body==null||A.body.source!=null)){if(Mr(t))return Gn(t);t.controller.connection.destroy(),n=await ud(t,e,!0)}return n}async function HU(t,e=!1,r=!1){vr(!t.controller.connection||t.controller.connection.destroyed),t.controller.connection={abort:null,destroyed:!1,destroy(h,d=!0){this.destroyed||(this.destroyed=!0,d&&this.abort?.(h??new DOMException("The operation was aborted.","AbortError")))}};let A=t.request,s=null,o=t.timingInfo;null==null&&(A.cache="no-store");let i=r?"yes":"no";A.mode;let a=null;if(A.body==null&&t.processRequestEndOfBody)queueMicrotask(()=>t.processRequestEndOfBody());else if(A.body!=null){let h=async function*(Q){Mr(t)||(yield Q,t.processRequestBodyChunkLength?.(Q.byteLength))},d=()=>{Mr(t)||t.processRequestEndOfBody&&t.processRequestEndOfBody()},I=Q=>{Mr(t)||(Q.name==="AbortError"?t.controller.abort():t.controller.terminate(Q))};a=(async function*(){try{for await(let Q of A.body.stream)yield*h(Q);d()}catch(Q){I(Q)}})()}try{let{body:h,status:d,statusText:I,headersList:Q,socket:p}=await E({body:a});if(p)s=Ln({status:d,statusText:I,headersList:Q,socket:p});else{let D=h[Symbol.asyncIterator]();t.controller.next=()=>D.next(),s=Ln({status:d,statusText:I,headersList:Q})}}catch(h){return h.name==="AbortError"?(t.controller.connection.destroy(),Gn(t,h)):V(h)}let c=async()=>{await t.controller.resume()},g=h=>{Mr(t)||t.controller.abort(h)},l=new ReadableStream({async start(h){t.controller.controller=h},async pull(h){await c(h)},async cancel(h){await g(h)},type:"bytes"});s.body={stream:l,source:null,length:null},t.controller.onAborted=u,t.controller.on("terminated",u),t.controller.resume=async()=>{for(;;){let h,d;try{let{done:Q,value:p}=await t.controller.next();if(ed(t))break;h=Q?void 0:p}catch(Q){t.controller.ended&&!o.encodedBodySize?h=void 0:(h=Q,d=!0)}if(h===void 0){hU(t.controller.controller),JU(t,s);return}if(o.decodedBodySize+=h?.byteLength??0,d){t.controller.terminate(h);return}let I=new Uint8Array(h);if(I.byteLength&&t.controller.controller.enqueue(I),SU(l)){t.controller.terminate();return}if(t.controller.controller.desiredSize<=0)return}};function u(h){ed(t)?(s.aborted=!0,vn(l)&&t.controller.controller.error(t.controller.serializedAbortReason)):vn(l)&&t.controller.controller.error(new TypeError("terminated",{cause:uU(h)?h:void 0})),t.controller.connection.destroy()}return s;function E({body:h}){let d=ft(A),I=t.controller.dispatcher;return new Promise((Q,p)=>I.dispatch({path:d.pathname+d.search,origin:d.origin,method:A.method,body:I.isMockActive?A.body&&(A.body.source||A.body.stream):h,headers:A.headersList.entries,maxRedirections:0,upgrade:A.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(D){let{connection:R}=t.controller;o.finalConnectionTimingInfo=IU(void 0,o.postRedirectStartTime,t.crossOriginIsolatedCapability),R.destroyed?D(new DOMException("The operation was aborted.","AbortError")):(t.controller.on("terminated",D),this.abort=R.abort=D),o.finalNetworkRequestStartTime=Gs(t.crossOriginIsolatedCapability)},onResponseStarted(){o.finalNetworkResponseStartTime=Gs(t.crossOriginIsolatedCapability)},onHeaders(D,R,H,Z){if(D<200)return;let Ae="",gt=new $C;for(let De=0;Dezr)return p(new Error(`too many content-encodings in response: ${Wr.length}, maximum allowed is ${zr}`)),!0;for(let Ji=Wr.length-1;Ji>=0;--Ji){let lo=Wr[Ji].trim();if(lo==="x-gzip"||lo==="gzip")wt.push(tr.createGunzip({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="deflate")wt.push(fU({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="br")wt.push(tr.createBrotliDecompress({flush:tr.constants.BROTLI_OPERATION_FLUSH,finishFlush:tr.constants.BROTLI_OPERATION_FLUSH}));else{wt.length=0;break}}}let _t=this.onError.bind(this);return Q({status:D,statusText:Z,headersList:gt,body:wt.length?bU(this.body,...wt,De=>{De&&this.onError(De)}).on("error",_t):this.body.on("error",_t)}),!0},onData(D){if(t.controller.dump)return;let R=D;return o.encodedBodySize+=R.byteLength,this.body.push(R)},onComplete(){this.abort&&t.controller.off("terminated",this.abort),t.controller.onAborted&&t.controller.off("terminated",t.controller.onAborted),t.controller.ended=!0,this.body.push(null)},onError(D){this.abort&&t.controller.off("terminated",this.abort),this.body?.destroy(D),t.controller.terminate(D),p(D)},onUpgrade(D,R,H){if(D!==101)return;let Z=new $C;for(let Ae=0;Ae{"use strict";hd.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var Bd=B((vP,Qd)=>{"use strict";var{webidl:_e}=Qe(),On=Symbol("ProgressEvent state"),Zg=class t extends Event{constructor(e,r={}){e=_e.converters.DOMString(e,"ProgressEvent constructor","type"),r=_e.converters.ProgressEventInit(r??{}),super(e,r),this[On]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return _e.brandCheck(this,t),this[On].lengthComputable}get loaded(){return _e.brandCheck(this,t),this[On].loaded}get total(){return _e.brandCheck(this,t),this[On].total}};_e.converters.ProgressEventInit=_e.dictionaryConverter([{key:"lengthComputable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:_e.converters.boolean,defaultValue:()=>!1}]);Qd.exports={ProgressEvent:Zg}});var Cd=B((xP,Id)=>{"use strict";function VU(t){if(!t)return"failure";switch(t.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}Id.exports={getEncoding:VU}});var Dd=B((OP,Rd)=>{"use strict";var{kState:GA,kError:jg,kResult:dd,kAborted:Ms,kLastProgressEventFired:Kg}=zg(),{ProgressEvent:qU}=Bd(),{getEncoding:fd}=Cd(),{serializeAMimeType:WU,parseMIMEType:pd}=Te(),{types:zU}=C("node:util"),{StringDecoder:md}=C("string_decoder"),{btoa:wd}=C("node:buffer"),ZU={enumerable:!0,writable:!1,configurable:!1};function jU(t,e,r,A){if(t[GA]==="loading")throw new DOMException("Invalid state","InvalidStateError");t[GA]="loading",t[dd]=null,t[jg]=null;let o=e.stream().getReader(),n=[],i=o.read(),a=!0;(async()=>{for(;!t[Ms];)try{let{done:c,value:g}=await i;if(a&&!t[Ms]&&queueMicrotask(()=>{rr("loadstart",t)}),a=!1,!c&&zU.isUint8Array(g))n.push(g),(t[Kg]===void 0||Date.now()-t[Kg]>=50)&&!t[Ms]&&(t[Kg]=Date.now(),queueMicrotask(()=>{rr("progress",t)})),i=o.read();else if(c){queueMicrotask(()=>{t[GA]="done";try{let l=KU(n,r,e.type,A);if(t[Ms])return;t[dd]=l,rr("load",t)}catch(l){t[jg]=l,rr("error",t)}t[GA]!=="loading"&&rr("loadend",t)});break}}catch(c){if(t[Ms])return;queueMicrotask(()=>{t[GA]="done",t[jg]=c,rr("error",t),t[GA]!=="loading"&&rr("loadend",t)});break}})()}function rr(t,e){let r=new qU(t,{bubbles:!1,cancelable:!1});e.dispatchEvent(r)}function KU(t,e,r,A){switch(e){case"DataURL":{let s="data:",o=pd(r||"application/octet-stream");o!=="failure"&&(s+=WU(o)),s+=";base64,";let n=new md("latin1");for(let i of t)s+=wd(n.write(i));return s+=wd(n.end()),s}case"Text":{let s="failure";if(A&&(s=fd(A)),s==="failure"&&r){let o=pd(r);o!=="failure"&&(s=fd(o.parameters.get("charset")))}return s==="failure"&&(s="UTF-8"),XU(t,s)}case"ArrayBuffer":return yd(t).buffer;case"BinaryString":{let s="",o=new md("latin1");for(let n of t)s+=o.write(n);return s+=o.end(),s}}}function XU(t,e){let r=yd(t),A=$U(r),s=0;A!==null&&(e=A,s=A==="UTF-8"?3:2);let o=r.slice(s);return new TextDecoder(e).decode(o)}function $U(t){let[e,r,A]=t;return e===239&&r===187&&A===191?"UTF-8":e===254&&r===255?"UTF-16BE":e===255&&r===254?"UTF-16LE":null}function yd(t){let e=t.reduce((A,s)=>A+s.byteLength,0),r=0;return t.reduce((A,s)=>(A.set(s,r),r+=s.byteLength,A),new Uint8Array(e))}Rd.exports={staticPropertyDescriptors:ZU,readOperation:jU,fireAProgressEvent:rr}});var Fd=B((YP,kd)=>{"use strict";var{staticPropertyDescriptors:LA,readOperation:Yn,fireAProgressEvent:Td}=Dd(),{kState:xr,kError:bd,kResult:_n,kEvents:J,kAborted:eG}=zg(),{webidl:W}=Qe(),{kEnumerableProperty:Fe}=v(),at=class t extends EventTarget{constructor(){super(),this[xr]="empty",this[_n]=null,this[bd]=null,this[J]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){W.brandCheck(this,t),W.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),e=W.converters.Blob(e,{strict:!1}),Yn(this,e,"ArrayBuffer")}readAsBinaryString(e){W.brandCheck(this,t),W.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),e=W.converters.Blob(e,{strict:!1}),Yn(this,e,"BinaryString")}readAsText(e,r=void 0){W.brandCheck(this,t),W.argumentLengthCheck(arguments,1,"FileReader.readAsText"),e=W.converters.Blob(e,{strict:!1}),r!==void 0&&(r=W.converters.DOMString(r,"FileReader.readAsText","encoding")),Yn(this,e,"Text",r)}readAsDataURL(e){W.brandCheck(this,t),W.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),e=W.converters.Blob(e,{strict:!1}),Yn(this,e,"DataURL")}abort(){if(this[xr]==="empty"||this[xr]==="done"){this[_n]=null;return}this[xr]==="loading"&&(this[xr]="done",this[_n]=null),this[eG]=!0,Td("abort",this),this[xr]!=="loading"&&Td("loadend",this)}get readyState(){switch(W.brandCheck(this,t),this[xr]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return W.brandCheck(this,t),this[_n]}get error(){return W.brandCheck(this,t),this[bd]}get onloadend(){return W.brandCheck(this,t),this[J].loadend}set onloadend(e){W.brandCheck(this,t),this[J].loadend&&this.removeEventListener("loadend",this[J].loadend),typeof e=="function"?(this[J].loadend=e,this.addEventListener("loadend",e)):this[J].loadend=null}get onerror(){return W.brandCheck(this,t),this[J].error}set onerror(e){W.brandCheck(this,t),this[J].error&&this.removeEventListener("error",this[J].error),typeof e=="function"?(this[J].error=e,this.addEventListener("error",e)):this[J].error=null}get onloadstart(){return W.brandCheck(this,t),this[J].loadstart}set onloadstart(e){W.brandCheck(this,t),this[J].loadstart&&this.removeEventListener("loadstart",this[J].loadstart),typeof e=="function"?(this[J].loadstart=e,this.addEventListener("loadstart",e)):this[J].loadstart=null}get onprogress(){return W.brandCheck(this,t),this[J].progress}set onprogress(e){W.brandCheck(this,t),this[J].progress&&this.removeEventListener("progress",this[J].progress),typeof e=="function"?(this[J].progress=e,this.addEventListener("progress",e)):this[J].progress=null}get onload(){return W.brandCheck(this,t),this[J].load}set onload(e){W.brandCheck(this,t),this[J].load&&this.removeEventListener("load",this[J].load),typeof e=="function"?(this[J].load=e,this.addEventListener("load",e)):this[J].load=null}get onabort(){return W.brandCheck(this,t),this[J].abort}set onabort(e){W.brandCheck(this,t),this[J].abort&&this.removeEventListener("abort",this[J].abort),typeof e=="function"?(this[J].abort=e,this.addEventListener("abort",e)):this[J].abort=null}};at.EMPTY=at.prototype.EMPTY=0;at.LOADING=at.prototype.LOADING=1;at.DONE=at.prototype.DONE=2;Object.defineProperties(at.prototype,{EMPTY:LA,LOADING:LA,DONE:LA,readAsArrayBuffer:Fe,readAsBinaryString:Fe,readAsText:Fe,readAsDataURL:Fe,abort:Fe,readyState:Fe,result:Fe,error:Fe,onloadstart:Fe,onprogress:Fe,onload:Fe,onabort:Fe,onerror:Fe,onloadend:Fe,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(at,{EMPTY:LA,LOADING:LA,DONE:LA});kd.exports={FileReader:at}});var Jn=B((_P,Sd)=>{"use strict";Sd.exports={kConstruct:$().kConstruct}});var Gd=B((JP,Ud)=>{"use strict";var tG=C("node:assert"),{URLSerializer:Nd}=Te(),{isValidHeaderName:rG}=Ge();function AG(t,e,r=!1){let A=Nd(t,r),s=Nd(e,r);return A===s}function sG(t){tG(t!==null);let e=[];for(let r of t.split(","))r=r.trim(),rG(r)&&e.push(r);return e}Ud.exports={urlEquals:AG,getFieldValues:sG}});var vd=B((PP,Md)=>{"use strict";var{kConstruct:oG}=Jn(),{urlEquals:nG,getFieldValues:Xg}=Gd(),{kEnumerableProperty:Or,isDisturbed:iG}=v(),{webidl:b}=Qe(),{Response:aG,cloneResponse:cG,fromInnerResponse:gG}=Us(),{Request:Mt,fromInnerRequest:lG}=UA(),{kState:ct}=Pt(),{fetching:uG}=Ls(),{urlIsHttpHttpsScheme:Pn,createDeferredPromise:MA,readAllBytes:EG}=Ge(),$g=C("node:assert"),Hn=class t{#e;constructor(){arguments[0]!==oG&&b.illegalConstructor(),b.util.markAsUncloneable(this),this.#e=arguments[1]}async match(e,r={}){b.brandCheck(this,t);let A="Cache.match";b.argumentLengthCheck(arguments,1,A),e=b.converters.RequestInfo(e,A,"request"),r=b.converters.CacheQueryOptions(r,A,"options");let s=this.#s(e,r,1);if(s.length!==0)return s[0]}async matchAll(e=void 0,r={}){b.brandCheck(this,t);let A="Cache.matchAll";return e!==void 0&&(e=b.converters.RequestInfo(e,A,"request")),r=b.converters.CacheQueryOptions(r,A,"options"),this.#s(e,r)}async add(e){b.brandCheck(this,t);let r="Cache.add";b.argumentLengthCheck(arguments,1,r),e=b.converters.RequestInfo(e,r,"request");let A=[e];return await this.addAll(A)}async addAll(e){b.brandCheck(this,t);let r="Cache.addAll";b.argumentLengthCheck(arguments,1,r);let A=[],s=[];for(let u of e){if(u===void 0)throw b.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(u=b.converters.RequestInfo(u),typeof u=="string")continue;let E=u[ct];if(!Pn(E.url)||E.method!=="GET")throw b.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let o=[];for(let u of e){let E=new Mt(u)[ct];if(!Pn(E.url))throw b.errors.exception({header:r,message:"Expected http/s scheme."});E.initiator="fetch",E.destination="subresource",s.push(E);let h=MA();o.push(uG({request:E,processResponse(d){if(d.type==="error"||d.status===206||d.status<200||d.status>299)h.reject(b.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(d.headersList.contains("vary")){let I=Xg(d.headersList.get("vary"));for(let Q of I)if(Q==="*"){h.reject(b.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let p of o)p.abort();return}}},processResponseEndOfBody(d){if(d.aborted){h.reject(new DOMException("aborted","AbortError"));return}h.resolve(d)}})),A.push(h.promise)}let i=await Promise.all(A),a=[],c=0;for(let u of i){let E={type:"put",request:s[c],response:u};a.push(E),c++}let g=MA(),l=null;try{this.#t(a)}catch(u){l=u}return queueMicrotask(()=>{l===null?g.resolve(void 0):g.reject(l)}),g.promise}async put(e,r){b.brandCheck(this,t);let A="Cache.put";b.argumentLengthCheck(arguments,2,A),e=b.converters.RequestInfo(e,A,"request"),r=b.converters.Response(r,A,"response");let s=null;if(e instanceof Mt?s=e[ct]:s=new Mt(e)[ct],!Pn(s.url)||s.method!=="GET")throw b.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});let o=r[ct];if(o.status===206)throw b.errors.exception({header:A,message:"Got 206 status"});if(o.headersList.contains("vary")){let E=Xg(o.headersList.get("vary"));for(let h of E)if(h==="*")throw b.errors.exception({header:A,message:"Got * vary field value"})}if(o.body&&(iG(o.body.stream)||o.body.stream.locked))throw b.errors.exception({header:A,message:"Response body is locked or disturbed"});let n=cG(o),i=MA();if(o.body!=null){let h=o.body.stream.getReader();EG(h).then(i.resolve,i.reject)}else i.resolve(void 0);let a=[],c={type:"put",request:s,response:n};a.push(c);let g=await i.promise;n.body!=null&&(n.body.source=g);let l=MA(),u=null;try{this.#t(a)}catch(E){u=E}return queueMicrotask(()=>{u===null?l.resolve():l.reject(u)}),l.promise}async delete(e,r={}){b.brandCheck(this,t);let A="Cache.delete";b.argumentLengthCheck(arguments,1,A),e=b.converters.RequestInfo(e,A,"request"),r=b.converters.CacheQueryOptions(r,A,"options");let s=null;if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return!1}else $g(typeof e=="string"),s=new Mt(e)[ct];let o=[],n={type:"delete",request:s,options:r};o.push(n);let i=MA(),a=null,c;try{c=this.#t(o)}catch(g){a=g}return queueMicrotask(()=>{a===null?i.resolve(!!c?.length):i.reject(a)}),i.promise}async keys(e=void 0,r={}){b.brandCheck(this,t);let A="Cache.keys";e!==void 0&&(e=b.converters.RequestInfo(e,A,"request")),r=b.converters.CacheQueryOptions(r,A,"options");let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=MA(),n=[];if(e===void 0)for(let i of this.#e)n.push(i[0]);else{let i=this.#r(s,r);for(let a of i)n.push(a[0])}return queueMicrotask(()=>{let i=[];for(let a of n){let c=lG(a,new AbortController().signal,"immutable");i.push(c)}o.resolve(Object.freeze(i))}),o.promise}#t(e){let r=this.#e,A=[...r],s=[],o=[];try{for(let n of e){if(n.type!=="delete"&&n.type!=="put")throw b.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(n.type==="delete"&&n.response!=null)throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#r(n.request,n.options,s).length)throw new DOMException("???","InvalidStateError");let i;if(n.type==="delete"){if(i=this.#r(n.request,n.options),i.length===0)return[];for(let a of i){let c=r.indexOf(a);$g(c!==-1),r.splice(c,1)}}else if(n.type==="put"){if(n.response==null)throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=n.request;if(!Pn(a.url))throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(n.options!=null)throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});i=this.#r(n.request);for(let c of i){let g=r.indexOf(c);$g(g!==-1),r.splice(g,1)}r.push([n.request,n.response]),s.push([n.request,n.response])}o.push([n.request,n.response])}return o}catch(n){throw this.#e.length=0,this.#e=A,n}}#r(e,r,A){let s=[],o=A??this.#e;for(let n of o){let[i,a]=n;this.#o(e,i,a,r)&&s.push(n)}return s}#o(e,r,A=null,s){let o=new URL(e.url),n=new URL(r.url);if(s?.ignoreSearch&&(n.search="",o.search=""),!nG(o,n,!0))return!1;if(A==null||s?.ignoreVary||!A.headersList.contains("vary"))return!0;let i=Xg(A.headersList.get("vary"));for(let a of i){if(a==="*")return!1;let c=r.headersList.get(a),g=e.headersList.get(a);if(c!==g)return!1}return!0}#s(e,r,A=1/0){let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=[];if(e===void 0)for(let i of this.#e)o.push(i[1]);else{let i=this.#r(s,r);for(let a of i)o.push(a[1])}let n=[];for(let i of o){let a=gG(i,"immutable");if(n.push(a.clone()),n.length>=A)break}return Object.freeze(n)}};Object.defineProperties(Hn.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:Or,matchAll:Or,add:Or,addAll:Or,put:Or,delete:Or,keys:Or});var Ld=[{key:"ignoreSearch",converter:b.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:b.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:b.converters.boolean,defaultValue:()=>!1}];b.converters.CacheQueryOptions=b.dictionaryConverter(Ld);b.converters.MultiCacheQueryOptions=b.dictionaryConverter([...Ld,{key:"cacheName",converter:b.converters.DOMString}]);b.converters.Response=b.interfaceConverter(aG);b.converters["sequence"]=b.sequenceConverter(b.converters.RequestInfo);Md.exports={Cache:Hn}});var Od=B((HP,xd)=>{"use strict";var{kConstruct:vs}=Jn(),{Cache:Vn}=vd(),{webidl:de}=Qe(),{kEnumerableProperty:xs}=v(),qn=class t{#e=new Map;constructor(){arguments[0]!==vs&&de.illegalConstructor(),de.util.markAsUncloneable(this)}async match(e,r={}){if(de.brandCheck(this,t),de.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=de.converters.RequestInfo(e),r=de.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let A=this.#e.get(r.cacheName);return await new Vn(vs,A).match(e,r)}}else for(let A of this.#e.values()){let o=await new Vn(vs,A).match(e,r);if(o!==void 0)return o}}async has(e){de.brandCheck(this,t);let r="CacheStorage.has";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)}async open(e){de.brandCheck(this,t);let r="CacheStorage.open";if(de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)){let s=this.#e.get(e);return new Vn(vs,s)}let A=[];return this.#e.set(e,A),new Vn(vs,A)}async delete(e){de.brandCheck(this,t);let r="CacheStorage.delete";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.delete(e)}async keys(){return de.brandCheck(this,t),[...this.#e.keys()]}};Object.defineProperties(qn.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:xs,has:xs,open:xs,delete:xs,keys:xs});xd.exports={CacheStorage:qn}});var _d=B((VP,Yd)=>{"use strict";Yd.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var rl=B((qP,Vd)=>{"use strict";function hG(t){for(let e=0;e=0&&r<=8||r>=10&&r<=31||r===127)return!0}return!1}function el(t){for(let e=0;e126||r===34||r===40||r===41||r===60||r===62||r===64||r===44||r===59||r===58||r===92||r===47||r===91||r===93||r===63||r===61||r===123||r===125)throw new Error("Invalid cookie name")}}function tl(t){let e=t.length,r=0;if(t[0]==='"'){if(e===1||t[e-1]!=='"')throw new Error("Invalid cookie value");--e,++r}for(;r126||A===34||A===44||A===59||A===92)throw new Error("Invalid cookie value")}}function Pd(t){for(let e=0;e126||r===59)throw new Error("Invalid cookie path")}}function Jd(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function QG(t){if(t===" ")return;if(t.length>255)throw new Error("Invalid cookie domain");let e=0;for(let r=0;r63)throw new Error("Invalid cookie domain")}if(e===0||t.charCodeAt(t.length-1)===45)throw new Error("Invalid cookie domain")}var BG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],IG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wn=Array(61).fill(0).map((t,e)=>e.toString().padStart(2,"0"));function Hd(t){return typeof t=="number"&&(t=new Date(t)),`${BG[t.getUTCDay()]}, ${Wn[t.getUTCDate()]} ${IG[t.getUTCMonth()]} ${t.getUTCFullYear()} ${Wn[t.getUTCHours()]}:${Wn[t.getUTCMinutes()]}:${Wn[t.getUTCSeconds()]} GMT`}function CG(t){if(t<0)throw new Error("Invalid cookie max-age")}function dG(t){if(t.name.length===0)return null;el(t.name),tl(t.value);let e=[`${t.name}=${t.value}`];t.name.startsWith("__Secure-")&&(t.secure=!0),t.name.startsWith("__Host-")&&(t.secure=!0,t.domain=null,t.path="/"),t.secure&&e.push("Secure"),t.httpOnly&&e.push("HttpOnly"),typeof t.maxAge=="number"&&(CG(t.maxAge),e.push(`Max-Age=${t.maxAge}`)),t.domain&&(QG(t.domain),e.push(`Domain=${t.domain}`)),t.path&&(Pd(t.path),e.push(`Path=${t.path}`)),t.expires&&t.expires.toString()!=="Invalid Date"&&e.push(`Expires=${Hd(t.expires)}`),t.sameSite&&e.push(`SameSite=${t.sameSite}`);for(let r of t.unparsed){if(!r.includes("="))throw new Error("Invalid unparsed");let[A,...s]=r.split("="),o=A.trim(),n=s.join("=");el(o),tl(n),e.push(`${o}=${n}`)}return e.join("; ")}Vd.exports={isCTLExcludingHtab:hG,validateCookieName:el,validateCookiePath:Pd,validateCookieValue:tl,toIMFDate:Hd,stringify:dG}});var Wd=B((WP,qd)=>{"use strict";var{maxNameValuePairSize:fG,maxAttributeValueSize:pG}=_d(),{isCTLExcludingHtab:mG}=rl(),{collectASequenceOfCodePointsFast:zn}=Te(),wG=C("node:assert");function yG(t){if(mG(t))return null;let e="",r="",A="",s="";if(t.includes(";")){let o={position:0};e=zn(";",t,o),r=t.slice(o.position)}else e=t;if(!e.includes("="))s=e;else{let o={position:0};A=zn("=",e,o),s=e.slice(o.position+1)}return A=A.trim(),s=s.trim(),A.length+s.length>fG?null:{name:A,value:s,...vA(r)}}function vA(t,e={}){if(t.length===0)return e;wG(t[0]===";"),t=t.slice(1);let r="";t.includes(";")?(r=zn(";",t,{position:0}),t=t.slice(r.length)):(r=t,t="");let A="",s="";if(r.includes("=")){let n={position:0};A=zn("=",r,n),s=r.slice(n.position+1)}else A=r;if(A=A.trim(),s=s.trim(),s.length>pG)return vA(t,e);let o=A.toLowerCase();if(o==="expires"){let n=new Date(s);e.expires=n}else if(o==="max-age"){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!=="-"||!/^\d+$/.test(s))return vA(t,e);let i=Number(s);e.maxAge=i}else if(o==="domain"){let n=s;n[0]==="."&&(n=n.slice(1)),n=n.toLowerCase(),e.domain=n}else if(o==="path"){let n="";s.length===0||s[0]!=="/"?n="/":n=s,e.path=n}else if(o==="secure")e.secure=!0;else if(o==="httponly")e.httpOnly=!0;else if(o==="samesite"){let n=s.toLowerCase();n==="none"?e.sameSite="None":n==="strict"?e.sameSite="Strict":n==="lax"&&(e.sameSite="Lax")}else e.unparsed??=[],e.unparsed.push(`${A}=${s}`);return vA(t,e)}qd.exports={parseSetCookie:yG,parseUnparsedAttributes:vA}});var jd=B((zP,Zd)=>{"use strict";var{parseSetCookie:RG}=Wd(),{stringify:DG}=rl(),{webidl:O}=Qe(),{Headers:Zn}=Gr();function TG(t){O.argumentLengthCheck(arguments,1,"getCookies"),O.brandCheck(t,Zn,{strict:!1});let e=t.get("cookie"),r={};if(!e)return r;for(let A of e.split(";")){let[s,...o]=A.split("=");r[s.trim()]=o.join("=")}return r}function bG(t,e,r){O.brandCheck(t,Zn,{strict:!1});let A="deleteCookie";O.argumentLengthCheck(arguments,2,A),e=O.converters.DOMString(e,A,"name"),r=O.converters.DeleteCookieAttributes(r),zd(t,{name:e,value:"",expires:new Date(0),...r})}function kG(t){O.argumentLengthCheck(arguments,1,"getSetCookies"),O.brandCheck(t,Zn,{strict:!1});let e=t.getSetCookie();return e?e.map(r=>RG(r)):[]}function zd(t,e){O.argumentLengthCheck(arguments,2,"setCookie"),O.brandCheck(t,Zn,{strict:!1}),e=O.converters.Cookie(e);let r=DG(e);r&&t.append("Set-Cookie",r)}O.converters.DeleteCookieAttributes=O.dictionaryConverter([{converter:O.nullableConverter(O.converters.DOMString),key:"path",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.DOMString),key:"domain",defaultValue:()=>null}]);O.converters.Cookie=O.dictionaryConverter([{converter:O.converters.DOMString,key:"name"},{converter:O.converters.DOMString,key:"value"},{converter:O.nullableConverter(t=>typeof t=="number"?O.converters["unsigned long long"](t):new Date(t)),key:"expires",defaultValue:()=>null},{converter:O.nullableConverter(O.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.DOMString),key:"path",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.boolean),key:"secure",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:O.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:O.sequenceConverter(O.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);Zd.exports={getCookies:TG,deleteCookie:bG,getSetCookies:kG,setCookie:zd}});var OA=B((ZP,Xd)=>{"use strict";var{webidl:T}=Qe(),{kEnumerableProperty:Se}=v(),{kConstruct:Kd}=$(),{MessagePort:FG}=C("node:worker_threads"),xA=class t extends Event{#e;constructor(e,r={}){if(e===Kd){super(arguments[1],arguments[2]),T.util.markAsUncloneable(this);return}let A="MessageEvent constructor";T.argumentLengthCheck(arguments,1,A),e=T.converters.DOMString(e,A,"type"),r=T.converters.MessageEventInit(r,A,"eventInitDict"),super(e,r),this.#e=r,T.util.markAsUncloneable(this)}get data(){return T.brandCheck(this,t),this.#e.data}get origin(){return T.brandCheck(this,t),this.#e.origin}get lastEventId(){return T.brandCheck(this,t),this.#e.lastEventId}get source(){return T.brandCheck(this,t),this.#e.source}get ports(){return T.brandCheck(this,t),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(e,r=!1,A=!1,s=null,o="",n="",i=null,a=[]){return T.brandCheck(this,t),T.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new t(e,{bubbles:r,cancelable:A,data:s,origin:o,lastEventId:n,source:i,ports:a})}static createFastMessageEvent(e,r){let A=new t(Kd,e,r);return A.#e=r,A.#e.data??=null,A.#e.origin??="",A.#e.lastEventId??="",A.#e.source??=null,A.#e.ports??=[],A}},{createFastMessageEvent:SG}=xA;delete xA.createFastMessageEvent;var jn=class t extends Event{#e;constructor(e,r={}){let A="CloseEvent constructor";T.argumentLengthCheck(arguments,1,A),e=T.converters.DOMString(e,A,"type"),r=T.converters.CloseEventInit(r),super(e,r),this.#e=r,T.util.markAsUncloneable(this)}get wasClean(){return T.brandCheck(this,t),this.#e.wasClean}get code(){return T.brandCheck(this,t),this.#e.code}get reason(){return T.brandCheck(this,t),this.#e.reason}},Kn=class t extends Event{#e;constructor(e,r){let A="ErrorEvent constructor";T.argumentLengthCheck(arguments,1,A),super(e,r),T.util.markAsUncloneable(this),e=T.converters.DOMString(e,A,"type"),r=T.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return T.brandCheck(this,t),this.#e.message}get filename(){return T.brandCheck(this,t),this.#e.filename}get lineno(){return T.brandCheck(this,t),this.#e.lineno}get colno(){return T.brandCheck(this,t),this.#e.colno}get error(){return T.brandCheck(this,t),this.#e.error}};Object.defineProperties(xA.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:Se,origin:Se,lastEventId:Se,source:Se,ports:Se,initMessageEvent:Se});Object.defineProperties(jn.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:Se,code:Se,wasClean:Se});Object.defineProperties(Kn.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:Se,filename:Se,lineno:Se,colno:Se,error:Se});T.converters.MessagePort=T.interfaceConverter(FG);T.converters["sequence"]=T.sequenceConverter(T.converters.MessagePort);var Al=[{key:"bubbles",converter:T.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:T.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:T.converters.boolean,defaultValue:()=>!1}];T.converters.MessageEventInit=T.dictionaryConverter([...Al,{key:"data",converter:T.converters.any,defaultValue:()=>null},{key:"origin",converter:T.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:T.converters.DOMString,defaultValue:()=>""},{key:"source",converter:T.nullableConverter(T.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:T.converters["sequence"],defaultValue:()=>new Array(0)}]);T.converters.CloseEventInit=T.dictionaryConverter([...Al,{key:"wasClean",converter:T.converters.boolean,defaultValue:()=>!1},{key:"code",converter:T.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:T.converters.USVString,defaultValue:()=>""}]);T.converters.ErrorEventInit=T.dictionaryConverter([...Al,{key:"message",converter:T.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:T.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:T.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:T.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:T.converters.any}]);Xd.exports={MessageEvent:xA,CloseEvent:jn,ErrorEvent:Kn,createFastMessageEvent:SG}});var Yr=B((jP,$d)=>{"use strict";var NG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",UG={enumerable:!0,writable:!1,configurable:!1},GG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},LG={NOT_SENT:0,PROCESSING:1,SENT:2},MG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},vG=2**16-1,xG={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},OG=Buffer.allocUnsafe(0),YG={string:1,typedArray:2,arrayBuffer:3,blob:4};$d.exports={uid:NG,sentCloseFrameState:LG,staticPropertyDescriptors:UG,states:GG,opcodes:MG,maxUnsigned16Bit:vG,parserStates:xG,emptyBuffer:OG,sendHints:YG}});var Os=B((KP,ef)=>{"use strict";ef.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var Js=B((XP,gf)=>{"use strict";var{kReadyState:Ys,kController:_G,kResponse:JG,kBinaryType:PG,kWebSocketURL:HG}=Os(),{states:_s,opcodes:Ar}=Yr(),{ErrorEvent:VG,createFastMessageEvent:qG}=OA(),{isUtf8:WG}=C("node:buffer"),{collectASequenceOfCodePointsFast:zG,removeHTTPWhitespace:tf}=Te();function ZG(t){return t[Ys]===_s.CONNECTING}function jG(t){return t[Ys]===_s.OPEN}function KG(t){return t[Ys]===_s.CLOSING}function XG(t){return t[Ys]===_s.CLOSED}function sl(t,e,r=(s,o)=>new Event(s,o),A={}){let s=r(t,A);e.dispatchEvent(s)}function $G(t,e,r){if(t[Ys]!==_s.OPEN)return;let A;if(e===Ar.TEXT)try{A=cf(r)}catch{Af(t,"Received invalid UTF-8 in text frame.");return}else e===Ar.BINARY&&(t[PG]==="blob"?A=new Blob([r]):A=eL(r));sl("message",t,qG,{origin:t[HG].origin,data:A})}function eL(t){return t.byteLength===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function tL(t){if(t.length===0)return!1;for(let e=0;e126||r===34||r===40||r===41||r===44||r===47||r===58||r===59||r===60||r===61||r===62||r===63||r===64||r===91||r===92||r===93||r===123||r===125)return!1}return!0}function rL(t){return t>=1e3&&t<1015?t!==1004&&t!==1005&&t!==1006:t>=3e3&&t<=4999}function Af(t,e){let{[_G]:r,[JG]:A}=t;r.abort(),A?.socket&&!A.socket.destroyed&&A.socket.destroy(),e&&sl("error",t,(s,o)=>new VG(s,o),{error:new Error(e),message:e})}function sf(t){return t===Ar.CLOSE||t===Ar.PING||t===Ar.PONG}function of(t){return t===Ar.CONTINUATION}function nf(t){return t===Ar.TEXT||t===Ar.BINARY}function AL(t){return nf(t)||of(t)||sf(t)}function sL(t){let e={position:0},r=new Map;for(;e.position57)return!1}let e=Number.parseInt(t,10);return e>=8&&e<=15}var af=typeof process.versions.icu=="string",rf=af?new TextDecoder("utf-8",{fatal:!0}):void 0,cf=af?rf.decode.bind(rf):function(t){if(WG(t))return t.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};gf.exports={isConnecting:ZG,isEstablished:jG,isClosing:KG,isClosed:XG,fireEvent:sl,isValidSubprotocol:tL,isValidStatusCode:rL,failWebsocketConnection:Af,websocketMessageReceived:$G,utf8Decode:cf,isControlFrame:sf,isContinuationFrame:of,isTextBinaryFrame:nf,isValidOpcode:AL,parseExtensions:sL,isValidClientWindowBits:oL}});var $n=B(($P,lf)=>{"use strict";var{maxUnsigned16Bit:nL}=Yr(),Xn=16386,ol,Ps=null,YA=Xn;try{ol=C("node:crypto")}catch{ol={randomFillSync:function(e,r,A){for(let s=0;snL?(n+=8,o=127):s>125&&(n+=2,o=126);let i=Buffer.allocUnsafe(s+n);i[0]=i[1]=0,i[0]|=128,i[0]=(i[0]&240)+e;i[n-4]=A[0],i[n-3]=A[1],i[n-2]=A[2],i[n-1]=A[3],i[1]=o,o===126?i.writeUInt16BE(s,2):o===127&&(i[2]=i[3]=0,i.writeUIntBE(s,4,6)),i[1]|=128;for(let a=0;a{"use strict";var{uid:aL,states:Hs,sentCloseFrameState:ei,emptyBuffer:cL,opcodes:gL}=Yr(),{kReadyState:Vs,kSentClose:ti,kByteParser:Ef,kReceivedClose:uf,kResponse:hf}=Os(),{fireEvent:lL,failWebsocketConnection:sr,isClosing:uL,isClosed:EL,isEstablished:hL,parseExtensions:QL}=Js(),{channels:_A}=Kr(),{CloseEvent:BL}=OA(),{makeRequest:IL}=UA(),{fetching:CL}=Ls(),{Headers:dL,getHeadersList:fL}=Gr(),{getDecodeSplit:pL}=Ge(),{WebsocketFrameSend:mL}=$n(),il;try{il=C("node:crypto")}catch{}function wL(t,e,r,A,s,o){let n=t;n.protocol=t.protocol==="ws:"?"http:":"https:";let i=IL({urlList:[n],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(o.headers){let l=fL(new dL(o.headers));i.headersList=l}let a=il.randomBytes(16).toString("base64");i.headersList.append("sec-websocket-key",a),i.headersList.append("sec-websocket-version","13");for(let l of e)i.headersList.append("sec-websocket-protocol",l);return i.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),CL({request:i,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(l){if(l.type==="error"||l.status!==101){sr(A,"Received network error or non-101 status code.");return}if(e.length!==0&&!l.headersList.get("Sec-WebSocket-Protocol")){sr(A,"Server did not respond with sent protocols.");return}if(l.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){sr(A,'Server did not set Upgrade header to "websocket".');return}if(l.headersList.get("Connection")?.toLowerCase()!=="upgrade"){sr(A,'Server did not set Connection header to "upgrade".');return}let u=l.headersList.get("Sec-WebSocket-Accept"),E=il.createHash("sha1").update(a+aL).digest("base64");if(u!==E){sr(A,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let h=l.headersList.get("Sec-WebSocket-Extensions"),d;if(h!==null&&(d=QL(h),!d.has("permessage-deflate"))){sr(A,"Sec-WebSocket-Extensions header does not match.");return}let I=l.headersList.get("Sec-WebSocket-Protocol");if(I!==null&&!pL("sec-websocket-protocol",i.headersList).includes(I)){sr(A,"Protocol was not set in the opening handshake.");return}l.socket.on("data",Qf),l.socket.on("close",Bf),l.socket.on("error",If),_A.open.hasSubscribers&&_A.open.publish({address:l.socket.address(),protocol:I,extensions:h}),s(l,d)}})}function yL(t,e,r,A){if(!(uL(t)||EL(t)))if(!hL(t))sr(t,"Connection was closed before it was established."),t[Vs]=Hs.CLOSING;else if(t[ti]===ei.NOT_SENT){t[ti]=ei.PROCESSING;let s=new mL;e!==void 0&&r===void 0?(s.frameData=Buffer.allocUnsafe(2),s.frameData.writeUInt16BE(e,0)):e!==void 0&&r!==void 0?(s.frameData=Buffer.allocUnsafe(2+A),s.frameData.writeUInt16BE(e,0),s.frameData.write(r,2,"utf-8")):s.frameData=cL,t[hf].socket.write(s.createFrame(gL.CLOSE)),t[ti]=ei.SENT,t[Vs]=Hs.CLOSING}else t[Vs]=Hs.CLOSING}function Qf(t){this.ws[Ef].write(t)||this.pause()}function Bf(){let{ws:t}=this,{[hf]:e}=t;e.socket.off("data",Qf),e.socket.off("close",Bf),e.socket.off("error",If);let r=t[ti]===ei.SENT&&t[uf],A=1005,s="",o=t[Ef].closingInfo;o&&!o.error?(A=o.code??1005,s=o.reason):t[uf]||(A=1006),t[Vs]=Hs.CLOSED,lL("close",t,(n,i)=>new BL(n,i),{wasClean:r,code:A,reason:s}),_A.close.hasSubscribers&&_A.close.publish({websocket:t,code:A,reason:s})}function If(t){let{ws:e}=this;e[Vs]=Hs.CLOSING,_A.socketError.hasSubscribers&&_A.socketError.publish(t),this.destroy()}Cf.exports={establishWebSocketConnection:wL,closeWebSocketConnection:yL}});var ff=B((tH,df)=>{"use strict";var{createInflateRaw:RL,Z_DEFAULT_WINDOWBITS:DL}=C("node:zlib"),{isValidClientWindowBits:TL}=Js(),{MessageSizeExceededError:bL}=_(),kL=Buffer.from([0,0,255,255]),ri=Symbol("kBuffer"),qs=Symbol("kLength"),cl=class{#e;#t={};#r=0;constructor(e,r){this.#t.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=e.get("server_max_window_bits"),this.#r=r.maxPayloadSize}decompress(e,r,A){if(!this.#e){let s=DL;if(this.#t.serverMaxWindowBits){if(!TL(this.#t.serverMaxWindowBits)){A(new Error("Invalid server_max_window_bits"));return}s=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=RL({windowBits:s})}catch(o){A(o);return}this.#e[ri]=[],this.#e[qs]=0,this.#e.on("data",o=>{if(this.#e[qs]+=o.length,this.#r>0&&this.#e[qs]>this.#r){A(new bL),this.#e.removeAllListeners(),this.#e=null;return}this.#e[ri].push(o)}),this.#e.on("error",o=>{this.#e=null,A(o)})}this.#e.write(e),r&&this.#e.write(kL),this.#e.flush(()=>{if(!this.#e)return;let s=Buffer.concat(this.#e[ri],this.#e[qs]);this.#e[ri].length=0,this.#e[qs]=0,A(null,s)})}};df.exports={PerMessageDeflate:cl}});var Ff=B((rH,kf)=>{"use strict";var{Writable:FL}=C("node:stream"),SL=C("node:assert"),{parserStates:Ne,opcodes:JA,states:NL,emptyBuffer:pf,sentCloseFrameState:mf}=Yr(),{kReadyState:UL,kSentClose:wf,kResponse:yf,kReceivedClose:Rf}=Os(),{channels:Ai}=Kr(),{isValidStatusCode:GL,isValidOpcode:LL,failWebsocketConnection:Je,websocketMessageReceived:Df,utf8Decode:ML,isControlFrame:gl,isTextBinaryFrame:ll,isContinuationFrame:vL}=Js(),{WebsocketFrameSend:Tf}=$n(),{closeWebSocketConnection:bf}=al(),{PerMessageDeflate:xL}=ff(),{MessageSizeExceededError:ul}=_();function Ws(t,e,r){bf(t,e,r,Buffer.byteLength(r)),Je(t,r)}var El=class extends FL{#e=[];#t=0;#r=0;#o=!1;#s=Ne.INFO;#A={};#n=[];#i;#c;#a;constructor(e,r,A={}){super(),this.ws=e,this.#i=r??new Map,this.#c=A.maxFragments??0,this.#a=A.maxPayloadSize??0,this.#i.has("permessage-deflate")&&this.#i.set("permessage-deflate",new xL(r,A))}_write(e,r,A){this.#e.push(e),this.#r+=e.length,this.#o=!0,this.run(A)}#g(){return this.#a>0&&!gl(this.#A.opcode)&&this.#A.payloadLength+this.#t>this.#a?(Ws(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(e){for(;this.#o;)if(this.#s===Ne.INFO){if(this.#r<2)return e();let r=this.consume(2),A=(r[0]&128)!==0,s=r[0]&15,o=(r[1]&128)===128,n=!A&&s!==JA.CONTINUATION,i=r[1]&127,a=r[0]&64,c=r[0]&32,g=r[0]&16;if(!LL(s))return Je(this.ws,"Invalid opcode received"),e();if(o)return Je(this.ws,"Frame cannot be masked"),e();if(a!==0&&!this.#i.has("permessage-deflate")){Je(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||g!==0){Je(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(n&&!ll(s)){Je(this.ws,"Invalid frame type was fragmented.");return}if(ll(s)&&this.#n.length>0){Je(this.ws,"Expected continuation frame");return}if(this.#A.fragmented&&n){Je(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((i>125||n)&&gl(s)){Je(this.ws,"Control frame either too large or fragmented");return}if(vL(s)&&this.#n.length===0&&!this.#A.compressed){Je(this.ws,"Unexpected continuation frame");return}if(i<=125){if(this.#A.payloadLength=i,this.#s=Ne.READ_DATA,!this.#g())return}else i===126?this.#s=Ne.PAYLOADLENGTH_16:i===127&&(this.#s=Ne.PAYLOADLENGTH_64);ll(s)&&(this.#A.binaryType=s,this.#A.compressed=a!==0),this.#A.opcode=s,this.#A.masked=o,this.#A.fin=A,this.#A.fragmented=n}else if(this.#s===Ne.PAYLOADLENGTH_16){if(this.#r<2)return e();let r=this.consume(2);if(this.#A.payloadLength=r.readUInt16BE(0),this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.PAYLOADLENGTH_64){if(this.#r<8)return e();let r=this.consume(8),A=r.readUInt32BE(0),s=r.readUInt32BE(4);if(A!==0||s>2**31-1){Je(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#A.payloadLength=s,this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.READ_DATA){if(this.#r{if(A){let o=A instanceof ul?1009:1007;Ws(this.ws,o,A.message);return}if(this.writeFragments(s)){if(this.#a>0&&this.#t>this.#a){Ws(this.ws,1009,new ul().message);return}if(!this.#A.fin){this.#s=Ne.INFO,this.#o=!0,this.run(e);return}Df(this.ws,this.#A.binaryType,this.consumeFragments()),this.#o=!0,this.#s=Ne.INFO,this.run(e)}}),this.#o=!1;break}else{if(!this.writeFragments(r))return;if(this.#a>0&&this.#t>this.#a){Ws(this.ws,1009,new ul().message);return}!this.#A.fragmented&&this.#A.fin&&Df(this.ws,this.#A.binaryType,this.consumeFragments()),this.#s=Ne.INFO}}}consume(e){if(e>this.#r)throw new Error("Called consume() before buffers satiated.");if(e===0)return pf;if(this.#e[0].length===e)return this.#r-=this.#e[0].length,this.#e.shift();let r=Buffer.allocUnsafe(e),A=0;for(;A!==e;){let s=this.#e[0],{length:o}=s;if(o+A===e){r.set(this.#e.shift(),A);break}else if(o+A>e){r.set(s.subarray(0,e-A),A),this.#e[0]=s.subarray(e-A);break}else r.set(this.#e.shift(),A),A+=s.length}return this.#r-=e,r}writeFragments(e){return this.#c>0&&this.#n.length===this.#c?(Ws(this.ws,1008,"Too many message fragments"),!1):(this.#t+=e.length,this.#n.push(e),!0)}consumeFragments(){let e=this.#n;if(e.length===1)return this.#t=0,e.shift();let r=Buffer.concat(e,this.#t);return this.#n=[],this.#t=0,r}parseCloseBody(e){SL(e.length!==1);let r;if(e.length>=2&&(r=e.readUInt16BE(0)),r!==void 0&&!GL(r))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);A[0]===239&&A[1]===187&&A[2]===191&&(A=A.subarray(3));try{A=ML(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:r,reason:A,error:!1}}parseControlFrame(e){let{opcode:r,payloadLength:A}=this.#A;if(r===JA.CLOSE){if(A===1)return Je(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#A.closeInfo=this.parseCloseBody(e),this.#A.closeInfo.error){let{code:s,reason:o}=this.#A.closeInfo;return bf(this.ws,s,o,o.length),Je(this.ws,o),!1}if(this.ws[wf]!==mf.SENT){let s=pf;this.#A.closeInfo.code&&(s=Buffer.allocUnsafe(2),s.writeUInt16BE(this.#A.closeInfo.code,0));let o=new Tf(s);this.ws[yf].socket.write(o.createFrame(JA.CLOSE),n=>{n||(this.ws[wf]=mf.SENT)})}return this.ws[UL]=NL.CLOSING,this.ws[Rf]=!0,!1}else if(r===JA.PING){if(!this.ws[Rf]){let s=new Tf(e);this.ws[yf].socket.write(s.createFrame(JA.PONG)),Ai.ping.hasSubscribers&&Ai.ping.publish({payload:e})}}else r===JA.PONG&&Ai.pong.hasSubscribers&&Ai.pong.publish({payload:e});return!0}get closingInfo(){return this.#A.closeInfo}};kf.exports={ByteParser:El}});var Lf=B((AH,Gf)=>{"use strict";var{WebsocketFrameSend:OL}=$n(),{opcodes:Sf,sendHints:PA}=Yr(),YL=dc(),Nf=Buffer[Symbol.species],hl=class{#e=new YL;#t=!1;#r;constructor(e){this.#r=e}add(e,r,A){if(A!==PA.blob){let o=Uf(e,A);if(!this.#t)this.#r.write(o,r);else{let n={promise:null,callback:r,frame:o};this.#e.push(n)}return}let s={promise:e.arrayBuffer().then(o=>{s.promise=null,s.frame=Uf(o,A)}),callback:r,frame:null};this.#e.push(s),this.#t||this.#o()}async#o(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let r=e.shift();r.promise!==null&&await r.promise,this.#r.write(r.frame,r.callback),r.callback=r.frame=null}this.#t=!1}};function Uf(t,e){return new OL(_L(t,e)).createFrame(e===PA.string?Sf.TEXT:Sf.BINARY)}function _L(t,e){switch(e){case PA.string:return Buffer.from(t);case PA.arrayBuffer:case PA.blob:return new Nf(t);case PA.typedArray:return new Nf(t.buffer,t.byteOffset,t.byteLength)}}Gf.exports={SendQueue:hl}});var Vf=B((sH,Hf)=>{"use strict";var{webidl:G}=Qe(),{URLSerializer:JL}=Te(),{environmentSettingsObject:Mf}=Ge(),{staticPropertyDescriptors:or,states:zs,sentCloseFrameState:PL,sendHints:si}=Yr(),{kWebSocketURL:vf,kReadyState:Ql,kController:xf,kBinaryType:oi,kResponse:Of,kSentClose:HL,kByteParser:VL}=Os(),{isConnecting:qL,isEstablished:WL,isClosing:zL,isValidSubprotocol:ZL,fireEvent:Yf}=Js(),{establishWebSocketConnection:jL,closeWebSocketConnection:_f}=al(),{ByteParser:KL}=Ff(),{kEnumerableProperty:Ze,isBlobLike:Jf}=v(),{getGlobalDispatcher:XL}=fn(),{types:Pf}=C("node:util"),{ErrorEvent:$L,CloseEvent:eM}=OA(),{SendQueue:tM}=Lf(),Pe=class t extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#o="";#s;constructor(e,r=[]){super(),G.util.markAsUncloneable(this);let A="WebSocket constructor";G.argumentLengthCheck(arguments,1,A);let s=G.converters["DOMString or sequence or WebSocketInit"](r,A,"options");e=G.converters.USVString(e,A,"url"),r=s.protocols;let o=Mf.settingsObject.baseUrl,n;try{n=new URL(e,o)}catch(a){throw new DOMException(a,"SyntaxError")}if(n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),n.protocol!=="ws:"&&n.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${n.protocol}`,"SyntaxError");if(n.hash||n.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof r=="string"&&(r=[r]),r.length!==new Set(r.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(r.length>0&&!r.every(a=>ZL(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[vf]=new URL(n.href);let i=Mf.settingsObject;this[xf]=jL(n,r,i,this,(a,c)=>this.#A(a,c),s),this[Ql]=t.CONNECTING,this[HL]=PL.NOT_SENT,this[oi]="blob"}close(e=void 0,r=void 0){G.brandCheck(this,t);let A="WebSocket.close";if(e!==void 0&&(e=G.converters["unsigned short"](e,A,"code",{clamp:!0})),r!==void 0&&(r=G.converters.USVString(r,A,"reason")),e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");let s=0;if(r!==void 0&&(s=Buffer.byteLength(r),s>123))throw new DOMException(`Reason must be less than 123 bytes; received ${s}`,"SyntaxError");_f(this,e,r,s)}send(e){G.brandCheck(this,t);let r="WebSocket.send";if(G.argumentLengthCheck(arguments,1,r),e=G.converters.WebSocketSendData(e,r,"data"),qL(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!WL(this)||zL(this)))if(typeof e=="string"){let A=Buffer.byteLength(e);this.#t+=A,this.#s.add(e,()=>{this.#t-=A},si.string)}else Pf.isArrayBuffer(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.arrayBuffer)):ArrayBuffer.isView(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.typedArray)):Jf(e)&&(this.#t+=e.size,this.#s.add(e,()=>{this.#t-=e.size},si.blob))}get readyState(){return G.brandCheck(this,t),this[Ql]}get bufferedAmount(){return G.brandCheck(this,t),this.#t}get url(){return G.brandCheck(this,t),JL(this[vf])}get extensions(){return G.brandCheck(this,t),this.#o}get protocol(){return G.brandCheck(this,t),this.#r}get onopen(){return G.brandCheck(this,t),this.#e.open}set onopen(e){G.brandCheck(this,t),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onerror(){return G.brandCheck(this,t),this.#e.error}set onerror(e){G.brandCheck(this,t),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}get onclose(){return G.brandCheck(this,t),this.#e.close}set onclose(e){G.brandCheck(this,t),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof e=="function"?(this.#e.close=e,this.addEventListener("close",e)):this.#e.close=null}get onmessage(){return G.brandCheck(this,t),this.#e.message}set onmessage(e){G.brandCheck(this,t),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get binaryType(){return G.brandCheck(this,t),this[oi]}set binaryType(e){G.brandCheck(this,t),e!=="blob"&&e!=="arraybuffer"?this[oi]="blob":this[oi]=e}#A(e,r){this[Of]=e;let A=this[xf]?.dispatcher?.webSocketOptions,s=A?.maxFragments,o=A?.maxPayloadSize,n=new KL(this,r,{maxFragments:s,maxPayloadSize:o});n.on("drain",rM),n.on("error",AM.bind(this)),e.socket.ws=this,this[VL]=n,this.#s=new tM(e.socket),this[Ql]=zs.OPEN;let i=e.headersList.get("sec-websocket-extensions");i!==null&&(this.#o=i);let a=e.headersList.get("sec-websocket-protocol");a!==null&&(this.#r=a),Yf("open",this)}};Pe.CONNECTING=Pe.prototype.CONNECTING=zs.CONNECTING;Pe.OPEN=Pe.prototype.OPEN=zs.OPEN;Pe.CLOSING=Pe.prototype.CLOSING=zs.CLOSING;Pe.CLOSED=Pe.prototype.CLOSED=zs.CLOSED;Object.defineProperties(Pe.prototype,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or,url:Ze,readyState:Ze,bufferedAmount:Ze,onopen:Ze,onerror:Ze,onclose:Ze,close:Ze,onmessage:Ze,binaryType:Ze,send:Ze,extensions:Ze,protocol:Ze,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Pe,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or});G.converters["sequence"]=G.sequenceConverter(G.converters.DOMString);G.converters["DOMString or sequence"]=function(t,e,r){return G.util.Type(t)==="Object"&&Symbol.iterator in t?G.converters["sequence"](t):G.converters.DOMString(t,e,r)};G.converters.WebSocketInit=G.dictionaryConverter([{key:"protocols",converter:G.converters["DOMString or sequence"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:G.converters.any,defaultValue:()=>XL()},{key:"headers",converter:G.nullableConverter(G.converters.HeadersInit)}]);G.converters["DOMString or sequence or WebSocketInit"]=function(t){return G.util.Type(t)==="Object"&&!(Symbol.iterator in t)?G.converters.WebSocketInit(t):{protocols:G.converters["DOMString or sequence"](t)}};G.converters.WebSocketSendData=function(t){if(G.util.Type(t)==="Object"){if(Jf(t))return G.converters.Blob(t,{strict:!1});if(ArrayBuffer.isView(t)||Pf.isArrayBuffer(t))return G.converters.BufferSource(t)}return G.converters.USVString(t)};function rM(){this.ws[Of].socket.resume()}function AM(t){let e,r;t instanceof eM?(e=t.reason,r=t.code):e=t.message,Yf("error",this,()=>new $L("error",{error:t,message:e})),_f(this,r)}Hf.exports={WebSocket:Pe}});var Bl=B((oH,qf)=>{"use strict";function sM(t){return t.indexOf("\0")===-1}function oM(t){if(t.length===0)return!1;for(let e=0;e57)return!1;return!0}function nM(t){return new Promise(e=>{setTimeout(e,t).unref()})}qf.exports={isValidLastEventId:sM,isASCIINumber:oM,delay:nM}});var jf=B((nH,Zf)=>{"use strict";var{Transform:iM}=C("node:stream"),{isASCIINumber:Wf,isValidLastEventId:zf}=Bl(),vt=[239,187,191],Il=10,ni=13,aM=58,cM=32,Cl=class extends iM{state=null;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,r,A){if(e.length===0){A();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===vt[0]){A();return}this.checkBOM=!1,A();return;case 2:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]){A();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,A();return}this.checkBOM=!1;break;default:this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1;break}for(;this.pos0&&(r[s]=o);break}}processEvent(e){e.retry&&Wf(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&zf(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};Zf.exports={EventSourceStream:Cl}});var sp=B((iH,Ap)=>{"use strict";var{pipeline:gM}=C("node:stream"),{fetching:lM}=Ls(),{makeRequest:uM}=UA(),{webidl:xt}=Qe(),{EventSourceStream:EM}=jf(),{parseMIMEType:hM}=Te(),{createFastMessageEvent:QM}=OA(),{isNetworkError:Kf}=Us(),{delay:BM}=Bl(),{kEnumerableProperty:_r}=v(),{environmentSettingsObject:Xf}=Ge(),$f=!1,ep=3e3,Zs=0,tp=1,js=2,IM="anonymous",CM="use-credentials",HA=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#o=Zs;#s=null;#A=null;#n;#i;constructor(e,r={}){super(),xt.util.markAsUncloneable(this);let A="EventSource constructor";xt.argumentLengthCheck(arguments,1,A),$f||($f=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=xt.converters.USVString(e,A,"url"),r=xt.converters.EventSourceInitDict(r,A,"eventSourceInitDict"),this.#n=r.dispatcher,this.#i={lastEventId:"",reconnectionTime:ep};let s=Xf,o;try{o=new URL(e,s.settingsObject.baseUrl),this.#i.origin=o.origin}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=o.href;let n=IM;r.withCredentials&&(n=CM,this.#r=!0);let i={redirect:"follow",keepalive:!0,mode:"cors",credentials:n==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};i.client=Xf.settingsObject,i.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],i.cache="no-store",i.initiator="other",i.urlList=[new URL(this.#t)],this.#s=uM(i),this.#c()}get readyState(){return this.#o}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#o===js)return;this.#o=Zs;let e={request:this.#s,dispatcher:this.#n},r=A=>{Kf(A)&&(this.dispatchEvent(new Event("error")),this.close()),this.#a()};e.processResponseEndOfBody=r,e.processResponse=A=>{if(Kf(A))if(A.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#a();return}let s=A.headersList.get("content-type",!0),o=s!==null?hM(s):"failure",n=o!=="failure"&&o.essence==="text/event-stream";if(A.status!==200||n===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#o=tp,this.dispatchEvent(new Event("open")),this.#i.origin=A.urlList[A.urlList.length-1].origin;let i=new EM({eventSourceSettings:this.#i,push:a=>{this.dispatchEvent(QM(a.type,a.options))}});gM(A.body.stream,i,a=>{a?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#A=lM(e)}async#a(){this.#o!==js&&(this.#o=Zs,this.dispatchEvent(new Event("error")),await BM(this.#i.reconnectionTime),this.#o===Zs&&(this.#i.lastEventId.length&&this.#s.headersList.set("last-event-id",this.#i.lastEventId,!0),this.#c()))}close(){xt.brandCheck(this,t),this.#o!==js&&(this.#o=js,this.#A.abort(),this.#s=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}},rp={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:Zs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:tp,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:js,writable:!1}};Object.defineProperties(HA,rp);Object.defineProperties(HA.prototype,rp);Object.defineProperties(HA.prototype,{close:_r,onerror:_r,onmessage:_r,onopen:_r,readyState:_r,url:_r,withCredentials:_r});xt.converters.EventSourceInitDict=xt.dictionaryConverter([{key:"withCredentials",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:xt.converters.any}]);Ap.exports={EventSource:HA,defaultReconnectionTime:ep}});var ci=B((aH,U)=>{"use strict";var dM=IA(),op=es(),fM=CA(),pM=tB(),mM=dA(),wM=Oc(),yM=RB(),RM=NB(),np=_(),ai=v(),{InvalidArgumentError:ii}=np,VA=CI(),DM=rs(),TM=fg(),bM=eC(),kM=wg(),FM=ig(),SM=gn(),{getGlobalDispatcher:ip,setGlobalDispatcher:NM}=fn(),UM=pn(),GM=Xo(),LM=$o();Object.assign(op.prototype,VA);U.exports.Dispatcher=op;U.exports.Client=dM;U.exports.Pool=fM;U.exports.BalancedPool=pM;U.exports.Agent=mM;U.exports.ProxyAgent=wM;U.exports.EnvHttpProxyAgent=yM;U.exports.RetryAgent=RM;U.exports.RetryHandler=SM;U.exports.DecoratorHandler=UM;U.exports.RedirectHandler=GM;U.exports.createRedirectInterceptor=LM;U.exports.interceptors={redirect:iC(),retry:cC(),dump:lC(),dns:hC()};U.exports.buildConnector=DM;U.exports.errors=np;U.exports.util={parseHeaders:ai.parseHeaders,headerNameToString:ai.headerNameToString};function Ks(t){return(e,r,A)=>{if(typeof r=="function"&&(A=r,r=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new ii("invalid url");if(r!=null&&typeof r!="object")throw new ii("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new ii("invalid opts.path");let n=r.path;r.path.startsWith("/")||(n=`/${n}`),e=new URL(ai.parseOrigin(e).origin+n)}else r||(r=typeof e=="object"?e:{}),e=ai.parseURL(e);let{agent:s,dispatcher:o=ip()}=r;if(s)throw new ii("unsupported opts.agent. Did you mean opts.client?");return t.call(o,{...r,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:r.method||(r.body?"PUT":"GET")},A)}}U.exports.setGlobalDispatcher=NM;U.exports.getGlobalDispatcher=ip;var MM=Ls().fetch;U.exports.fetch=async function(e,r=void 0){try{return await MM(e,r)}catch(A){throw A&&typeof A=="object"&&Error.captureStackTrace(A),A}};U.exports.Headers=Gr().Headers;U.exports.Response=Us().Response;U.exports.Request=UA().Request;U.exports.FormData=cs().FormData;U.exports.File=globalThis.File??C("node:buffer").File;U.exports.FileReader=Fd().FileReader;var{setGlobalOrigin:vM,getGlobalOrigin:xM}=Ya();U.exports.setGlobalOrigin=vM;U.exports.getGlobalOrigin=xM;var{CacheStorage:OM}=Od(),{kConstruct:YM}=Jn();U.exports.caches=new OM(YM);var{deleteCookie:_M,getCookies:JM,getSetCookies:PM,setCookie:HM}=jd();U.exports.deleteCookie=_M;U.exports.getCookies=JM;U.exports.getSetCookies=PM;U.exports.setCookie=HM;var{parseMIMEType:VM,serializeAMimeType:qM}=Te();U.exports.parseMIMEType=VM;U.exports.serializeAMimeType=qM;var{CloseEvent:WM,ErrorEvent:zM,MessageEvent:ZM}=OA();U.exports.WebSocket=Vf().WebSocket;U.exports.CloseEvent=WM;U.exports.ErrorEvent=zM;U.exports.MessageEvent=ZM;U.exports.request=Ks(VA.request);U.exports.stream=Ks(VA.stream);U.exports.pipeline=Ks(VA.pipeline);U.exports.connect=Ks(VA.connect);U.exports.upgrade=Ks(VA.upgrade);U.exports.MockClient=TM;U.exports.MockPool=kM;U.exports.MockAgent=bM;U.exports.mockErrors=FM;var{EventSource:jM}=sp();U.exports.EventSource=jM});var kp=B(Ii=>{"use strict";Object.defineProperty(Ii,"__esModule",{value:!0});Ii.getProxyUrl=Dv;Ii.checkBypass=bp;function Dv(t){let e=t.protocol==="https:";if(bp(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new Bi(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new Bi(`http://${r}`)}else return}function bp(t){if(!t.hostname)return!1;let e=t.hostname;if(Tv(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Tv(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var Bi=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}}});var Sp=B(re=>{"use strict";var bv=re&&re.__createBinding||(Object.create?(function(t,e,r,A){A===void 0&&(A=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,A,s)}):(function(t,e,r,A){A===void 0&&(A=r),t[A]=e[r]})),kv=re&&re.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),pi=re&&re.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var A=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(A[A.length]=s);return A},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var A=t(e),s=0;sae(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ae(this,void 0,void 0,function*(){return new Promise(e=>ae(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};re.HttpClientResponse=fi;function vv(t){return new URL(t).protocol==="https:"}var Ll=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ae(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ae(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ae(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ae(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ae(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ae(this,arguments,void 0,function*(r,A={}){A[ye.Accept]=this._getExistingOrDefaultHeader(A,ye.Accept,Yt.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ae(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&Gv.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===Ke.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Nv.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!Uv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new fi(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Gl.getProxyUrl(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?Fp:Ul;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},ro(this.requestOptions.headers),ro(e||{})):ro(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=ro(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=ro(this.requestOptions.headers)[ye.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[ye.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Gl.getProxyUrl(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||Ul.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?Ci.httpsOverHttps:Ci.httpsOverHttp:a=c?Ci.httpOverHttps:Ci.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new Fp.Agent(i):new Ul.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new Fv.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ae(this,void 0,void 0,function*(){e=Math.min(Lv,e);let r=Mv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ae(this,void 0,void 0,function*(){return new Promise((A,s)=>ae(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===Ke.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new di(g,o);l.result=n.result,s(l)}else A(n)}))})}};re.HttpClient=Ll;var ro=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{})});var rm=B(wi=>{"use strict";Object.defineProperty(wi,"__esModule",{value:!0});wi.format=ox;wi.parse=nx;var rx=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,Kp=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,Ax=/[\\"]/g,sx=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,Xp=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function ox(t){let{type:e,parameters:r}=t;if(!e||!sx.test(e))throw new TypeError(`Invalid type: ${e}`);let A=e;if(r)for(let s of Object.keys(r)){if(!Kp.test(s))throw new TypeError(`Invalid parameter name: ${s}`);A+=`; ${s}=${gx(r[s])}`}return A}function nx(t,e){let r=t.length,A=_l(t,0,r),s=A;A=Yl(t,A,r);let o=Jl(t,s,A),n=t.slice(s,o).toLowerCase(),i=e?.parameters===!1?new Xp:cx(t,A,r);return{type:n,parameters:i}}var $p=32,em=9,tm=59,ix=61,jp=34,ax=92;function cx(t,e,r){let A=new Xp;e:for(;ee;){let A=t.charCodeAt(r-1);if(A!==$p&&A!==em)break;r--}return r}function gx(t){if(Kp.test(t))return t;if(rx.test(t))return`"${t.replace(Ax,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var ZA=B((j2,Tm)=>{"use strict";var Hx="2.0.0",Vx=Number.MAX_SAFE_INTEGER||9007199254740991,qx=16,Wx=250,zx=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Tm.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:qx,MAX_SAFE_BUILD_LENGTH:Wx,MAX_SAFE_INTEGER:Vx,RELEASE_TYPES:zx,SEMVER_SPEC_VERSION:Hx,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var oo=B((K2,bm)=>{"use strict";var Zx=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};bm.exports=Zx});var jA=B((mt,km)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:Au,MAX_SAFE_BUILD_LENGTH:jx,MAX_LENGTH:Kx}=ZA(),Xx=oo();mt=km.exports={};var $x=mt.re=[],eO=mt.safeRe=[],w=mt.src=[],tO=mt.safeSrc=[],y=mt.t={},rO=0,su="[a-zA-Z0-9-]",AO=[["\\s",1],["\\d",Kx],[su,jx]],sO=t=>{for(let[e,r]of AO)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},L=(t,e,r)=>{let A=sO(e),s=rO++;Xx(t,s,e),y[t]=s,w[s]=e,tO[s]=A,$x[s]=new RegExp(e,r?"g":void 0),eO[s]=new RegExp(A,r?"g":void 0)};L("NUMERICIDENTIFIER","0|[1-9]\\d*");L("NUMERICIDENTIFIERLOOSE","\\d+");L("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${su}*`);L("MAINVERSION",`(${w[y.NUMERICIDENTIFIER]})\\.(${w[y.NUMERICIDENTIFIER]})\\.(${w[y.NUMERICIDENTIFIER]})`);L("MAINVERSIONLOOSE",`(${w[y.NUMERICIDENTIFIERLOOSE]})\\.(${w[y.NUMERICIDENTIFIERLOOSE]})\\.(${w[y.NUMERICIDENTIFIERLOOSE]})`);L("PRERELEASEIDENTIFIER",`(?:${w[y.NONNUMERICIDENTIFIER]}|${w[y.NUMERICIDENTIFIER]})`);L("PRERELEASEIDENTIFIERLOOSE",`(?:${w[y.NONNUMERICIDENTIFIER]}|${w[y.NUMERICIDENTIFIERLOOSE]})`);L("PRERELEASE",`(?:-(${w[y.PRERELEASEIDENTIFIER]}(?:\\.${w[y.PRERELEASEIDENTIFIER]})*))`);L("PRERELEASELOOSE",`(?:-?(${w[y.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${w[y.PRERELEASEIDENTIFIERLOOSE]})*))`);L("BUILDIDENTIFIER",`${su}+`);L("BUILD",`(?:\\+(${w[y.BUILDIDENTIFIER]}(?:\\.${w[y.BUILDIDENTIFIER]})*))`);L("FULLPLAIN",`v?${w[y.MAINVERSION]}${w[y.PRERELEASE]}?${w[y.BUILD]}?`);L("FULL",`^${w[y.FULLPLAIN]}$`);L("LOOSEPLAIN",`[v=\\s]*${w[y.MAINVERSIONLOOSE]}${w[y.PRERELEASELOOSE]}?${w[y.BUILD]}?`);L("LOOSE",`^${w[y.LOOSEPLAIN]}$`);L("GTLT","((?:<|>)?=?)");L("XRANGEIDENTIFIERLOOSE",`${w[y.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);L("XRANGEIDENTIFIER",`${w[y.NUMERICIDENTIFIER]}|x|X|\\*`);L("XRANGEPLAIN",`[v=\\s]*(${w[y.XRANGEIDENTIFIER]})(?:\\.(${w[y.XRANGEIDENTIFIER]})(?:\\.(${w[y.XRANGEIDENTIFIER]})(?:${w[y.PRERELEASE]})?${w[y.BUILD]}?)?)?`);L("XRANGEPLAINLOOSE",`[v=\\s]*(${w[y.XRANGEIDENTIFIERLOOSE]})(?:\\.(${w[y.XRANGEIDENTIFIERLOOSE]})(?:\\.(${w[y.XRANGEIDENTIFIERLOOSE]})(?:${w[y.PRERELEASELOOSE]})?${w[y.BUILD]}?)?)?`);L("XRANGE",`^${w[y.GTLT]}\\s*${w[y.XRANGEPLAIN]}$`);L("XRANGELOOSE",`^${w[y.GTLT]}\\s*${w[y.XRANGEPLAINLOOSE]}$`);L("COERCEPLAIN",`(^|[^\\d])(\\d{1,${Au}})(?:\\.(\\d{1,${Au}}))?(?:\\.(\\d{1,${Au}}))?`);L("COERCE",`${w[y.COERCEPLAIN]}(?:$|[^\\d])`);L("COERCEFULL",w[y.COERCEPLAIN]+`(?:${w[y.PRERELEASE]})?(?:${w[y.BUILD]})?(?:$|[^\\d])`);L("COERCERTL",w[y.COERCE],!0);L("COERCERTLFULL",w[y.COERCEFULL],!0);L("LONETILDE","(?:~>?)");L("TILDETRIM",`(\\s*)${w[y.LONETILDE]}\\s+`,!0);mt.tildeTrimReplace="$1~";L("TILDE",`^${w[y.LONETILDE]}${w[y.XRANGEPLAIN]}$`);L("TILDELOOSE",`^${w[y.LONETILDE]}${w[y.XRANGEPLAINLOOSE]}$`);L("LONECARET","(?:\\^)");L("CARETTRIM",`(\\s*)${w[y.LONECARET]}\\s+`,!0);mt.caretTrimReplace="$1^";L("CARET",`^${w[y.LONECARET]}${w[y.XRANGEPLAIN]}$`);L("CARETLOOSE",`^${w[y.LONECARET]}${w[y.XRANGEPLAINLOOSE]}$`);L("COMPARATORLOOSE",`^${w[y.GTLT]}\\s*(${w[y.LOOSEPLAIN]})$|^$`);L("COMPARATOR",`^${w[y.GTLT]}\\s*(${w[y.FULLPLAIN]})$|^$`);L("COMPARATORTRIM",`(\\s*)${w[y.GTLT]}\\s*(${w[y.LOOSEPLAIN]}|${w[y.XRANGEPLAIN]})`,!0);mt.comparatorTrimReplace="$1$2$3";L("HYPHENRANGE",`^\\s*(${w[y.XRANGEPLAIN]})\\s+-\\s+(${w[y.XRANGEPLAIN]})\\s*$`);L("HYPHENRANGELOOSE",`^\\s*(${w[y.XRANGEPLAINLOOSE]})\\s+-\\s+(${w[y.XRANGEPLAINLOOSE]})\\s*$`);L("STAR","(<|>)?=?\\s*\\*");L("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");L("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var Ti=B((X2,Fm)=>{"use strict";var oO=Object.freeze({loose:!0}),nO=Object.freeze({}),iO=t=>t?typeof t!="object"?oO:t:nO;Fm.exports=iO});var ou=B(($2,Um)=>{"use strict";var Sm=/^[0-9]+$/,Nm=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:tNm(e,t);Um.exports={compareIdentifiers:Nm,rcompareIdentifiers:aO}});var Be=B((eV,Lm)=>{"use strict";var bi=oo(),{MAX_LENGTH:Gm,MAX_SAFE_INTEGER:ki}=ZA(),{safeRe:Fi,t:Si}=jA(),cO=Ti(),{compareIdentifiers:nu}=ou(),gO=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let A=0;AGm)throw new TypeError(`version is longer than ${Gm} characters`);bi("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let A=e.trim().match(r.loose?Fi[Si.LOOSE]:Fi[Si.FULL]);if(!A)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+A[1],this.minor=+A[2],this.patch=+A[3],this.major>ki||this.major<0)throw new TypeError("Invalid major version");if(this.minor>ki||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>ki||this.patch<0)throw new TypeError("Invalid patch version");A[4]?this.prerelease=A[4].split(".").map(s=>{if(/^[0-9]+$/.test(s)){let o=+s;if(o>=0&&oe.major?1:this.minore.minor?1:this.patche.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let A=this.prerelease[r],s=e.prerelease[r];if(bi("prerelease compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return nu(A,s)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let A=this.build[r],s=e.build[r];if(bi("build compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return nu(A,s)}while(++r)}inc(e,r,A){if(e.startsWith("pre")){if(!r&&A===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let s=`-${r}`.match(this.options.loose?Fi[Si.PRERELEASELOOSE]:Fi[Si.PRERELEASE]);if(!s||s[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,A);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,A);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,A),this.inc("pre",r,A);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,A),this.inc("pre",r,A);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let s=Number(A)?1:0;if(this.prerelease.length===0)this.prerelease=[s];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&A===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(s)}}if(r){let o=[r,s];if(A===!1&&(o=[r]),gO(this.prerelease,r)){let n=this.prerelease[r.split(".").length];isNaN(n)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};Lm.exports=iu});var ur=B((tV,vm)=>{"use strict";var Mm=Be(),lO=(t,e,r=!1)=>{if(t instanceof Mm)return t;try{return new Mm(t,e)}catch(A){if(!r)return null;throw A}};vm.exports=lO});var Om=B((rV,xm)=>{"use strict";var uO=ur(),EO=(t,e)=>{let r=uO(t,e);return r?r.version:null};xm.exports=EO});var _m=B((AV,Ym)=>{"use strict";var hO=ur(),QO=(t,e)=>{let r=hO(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};Ym.exports=QO});var Hm=B((sV,Pm)=>{"use strict";var Jm=Be(),BO=(t,e,r,A,s)=>{typeof r=="string"&&(s=A,A=r,r=void 0);try{return new Jm(t instanceof Jm?t.version:t,r).inc(e,A,s).version}catch{return null}};Pm.exports=BO});var Wm=B((oV,qm)=>{"use strict";var Vm=ur(),IO=(t,e)=>{let r=Vm(t,null,!0),A=Vm(e,null,!0),s=r.compare(A);if(s===0)return null;let o=s>0,n=o?r:A,i=o?A:r,a=!!n.prerelease.length;if(!!i.prerelease.length&&!a){if(!i.patch&&!i.minor)return"major";if(i.compareMain(n)===0)return i.minor&&!i.patch?"minor":"patch"}let g=a?"pre":"";return r.major!==A.major?g+"major":r.minor!==A.minor?g+"minor":r.patch!==A.patch?g+"patch":"prerelease"};qm.exports=IO});var Zm=B((nV,zm)=>{"use strict";var CO=Be(),dO=(t,e)=>new CO(t,e).major;zm.exports=dO});var Km=B((iV,jm)=>{"use strict";var fO=Be(),pO=(t,e)=>new fO(t,e).minor;jm.exports=pO});var $m=B((aV,Xm)=>{"use strict";var mO=Be(),wO=(t,e)=>new mO(t,e).patch;Xm.exports=wO});var tw=B((cV,ew)=>{"use strict";var yO=ur(),RO=(t,e)=>{let r=yO(t,e);return r&&r.prerelease.length?r.prerelease:null};ew.exports=RO});var Xe=B((gV,Aw)=>{"use strict";var rw=Be(),DO=(t,e,r)=>new rw(t,r).compare(new rw(e,r));Aw.exports=DO});var ow=B((lV,sw)=>{"use strict";var TO=Xe(),bO=(t,e,r)=>TO(e,t,r);sw.exports=bO});var iw=B((uV,nw)=>{"use strict";var kO=Xe(),FO=(t,e)=>kO(t,e,!0);nw.exports=FO});var Ni=B((EV,cw)=>{"use strict";var aw=Be(),SO=(t,e,r)=>{let A=new aw(t,r),s=new aw(e,r);return A.compare(s)||A.compareBuild(s)};cw.exports=SO});var lw=B((hV,gw)=>{"use strict";var NO=Ni(),UO=(t,e)=>t.sort((r,A)=>NO(r,A,e));gw.exports=UO});var Ew=B((QV,uw)=>{"use strict";var GO=Ni(),LO=(t,e)=>t.sort((r,A)=>GO(A,r,e));uw.exports=LO});var no=B((BV,hw)=>{"use strict";var MO=Xe(),vO=(t,e,r)=>MO(t,e,r)>0;hw.exports=vO});var Ui=B((IV,Qw)=>{"use strict";var xO=Xe(),OO=(t,e,r)=>xO(t,e,r)<0;Qw.exports=OO});var au=B((CV,Bw)=>{"use strict";var YO=Xe(),_O=(t,e,r)=>YO(t,e,r)===0;Bw.exports=_O});var cu=B((dV,Iw)=>{"use strict";var JO=Xe(),PO=(t,e,r)=>JO(t,e,r)!==0;Iw.exports=PO});var Gi=B((fV,Cw)=>{"use strict";var HO=Xe(),VO=(t,e,r)=>HO(t,e,r)>=0;Cw.exports=VO});var Li=B((pV,dw)=>{"use strict";var qO=Xe(),WO=(t,e,r)=>qO(t,e,r)<=0;dw.exports=WO});var gu=B((mV,fw)=>{"use strict";var zO=au(),ZO=cu(),jO=no(),KO=Gi(),XO=Ui(),$O=Li(),eY=(t,e,r,A)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return zO(t,r,A);case"!=":return ZO(t,r,A);case">":return jO(t,r,A);case">=":return KO(t,r,A);case"<":return XO(t,r,A);case"<=":return $O(t,r,A);default:throw new TypeError(`Invalid operator: ${e}`)}};fw.exports=eY});var mw=B((wV,pw)=>{"use strict";var tY=Be(),rY=ur(),{safeRe:Mi,t:vi}=jA(),AY=(t,e)=>{if(t instanceof tY)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?Mi[vi.COERCEFULL]:Mi[vi.COERCE]);else{let a=e.includePrerelease?Mi[vi.COERCERTLFULL]:Mi[vi.COERCERTL],c;for(;(c=a.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||c.index+c[0].length!==r.index+r[0].length)&&(r=c),a.lastIndex=c.index+c[1].length+c[2].length;a.lastIndex=-1}if(r===null)return null;let A=r[2],s=r[3]||"0",o=r[4]||"0",n=e.includePrerelease&&r[5]?`-${r[5]}`:"",i=e.includePrerelease&&r[6]?`+${r[6]}`:"";return rY(`${A}.${s}.${o}${n}${i}`,e)};pw.exports=AY});var yw=B((yV,ww)=>{"use strict";var sY=ur(),oY=ZA(),nY=Be(),iY=(t,e,r)=>{if(!oY.RELEASE_TYPES.includes(e))return null;let A=aY(t,r);return A&&cY(A,e)},aY=(t,e)=>{let r=t instanceof nY?t.version:t;return sY(r,e)},cY=(t,e)=>{if(gY(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},gY=t=>t.startsWith("pre");ww.exports=iY});var Dw=B((RV,Rw)=>{"use strict";var lu=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let s=this.map.keys().next().value;this.delete(s)}this.map.set(e,r)}return this}};Rw.exports=lu});var $e=B((DV,Fw)=>{"use strict";var lY=/\s+/g,uu=class t{constructor(e,r){if(r=EY(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof Eu)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(lY," "),this.set=this.raw.split("||").map(A=>this.parseRange(A.trim())).filter(A=>A.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let A=this.set[0];if(this.set=this.set.filter(s=>!bw(s[0])),this.set.length===0)this.set=[A];else if(this.set.length>1){for(let s of this.set)if(s.length===1&&mY(s[0])){this.set=[s];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e0&&(this.formatted+="||");let r=this.set[e];for(let A=0;A0&&(this.formatted+=" "),this.formatted+=r[A].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(pY,"");let A=((this.options.includePrerelease&&dY)|(this.options.loose&&fY))+":"+e,s=Tw.get(A);if(s)return s;let o=this.options.loose,n=o?Re[Ie.HYPHENRANGELOOSE]:Re[Ie.HYPHENRANGE];e=e.replace(n,UY(this.options.includePrerelease)),X("hyphen replace",e),e=e.replace(Re[Ie.COMPARATORTRIM],BY),X("comparator trim",e),e=e.replace(Re[Ie.TILDETRIM],IY),X("tilde trim",e),e=e.replace(Re[Ie.CARETTRIM],CY),X("caret trim",e);let i=e.split(" ").map(l=>wY(l,this.options)).join(" ").split(/\s+/).map(l=>NY(l,this.options));o&&(i=i.filter(l=>(X("loose invalid filter",l,this.options),!!l.match(Re[Ie.COMPARATORLOOSE])))),X("range list",i);let a=new Map,c=i.map(l=>new Eu(l,this.options));for(let l of c){if(bw(l))return[l];a.set(l.value,l)}a.size>1&&a.has("")&&a.delete("");let g=[...a.values()];return Tw.set(A,g),g}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(A=>kw(A,r)&&e.set.some(s=>kw(s,r)&&A.every(o=>s.every(n=>o.intersects(n,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new hY(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",mY=t=>t.value==="",kw=(t,e)=>{let r=!0,A=t.slice(),s=A.pop();for(;r&&A.length;)r=A.every(o=>s.intersects(o,e)),s=A.pop();return r},wY=(t,e)=>(t=t.replace(Re[Ie.BUILD],""),X("comp",t,e),t=TY(t,e),X("caret",t),t=RY(t,e),X("tildes",t),t=kY(t,e),X("xrange",t),t=SY(t,e),X("stars",t),t),ue=t=>!t||t.toLowerCase()==="x"||t==="*",yY=(t,e,r)=>ue(t)&&!ue(e)||ue(e)&&r&&!ue(r),RY=(t,e)=>t.trim().split(/\s+/).map(r=>DY(r,e)).join(" "),DY=(t,e)=>{let r=e.loose?Re[Ie.TILDELOOSE]:Re[Ie.TILDE],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("tilde",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:a?(X("replaceTilde pr",a),c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`):c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`,X("tilde return",c),c})},TY=(t,e)=>t.trim().split(/\s+/).map(r=>bY(r,e)).join(" "),bY=(t,e)=>{X("caret",t,e);let r=e.loose?Re[Ie.CARETLOOSE]:Re[Ie.CARET],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("caret",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?o==="0"?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.0${A} <${+o+1}.0.0-0`:a?(X("replaceCaret pr",a),o==="0"?n==="0"?c=`>=${o}.${n}.${i}-${a} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i}-${a} <${+o+1}.0.0-0`):(X("no pr"),o==="0"?n==="0"?c=`>=${o}.${n}.${i} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i} <${+o+1}.0.0-0`),X("caret return",c),c})},kY=(t,e)=>(X("replaceXRanges",t,e),t.split(/\s+/).map(r=>FY(r,e)).join(" ")),FY=(t,e)=>{t=t.trim();let r=e.loose?Re[Ie.XRANGELOOSE]:Re[Ie.XRANGE];return t.replace(r,(A,s,o,n,i,a)=>{if(X("xRange",t,A,s,o,n,i,a),yY(o,n,i))return t;let c=ue(o),g=c||ue(n),l=g||ue(i),u=l;return s==="="&&u&&(s=""),a=e.includePrerelease?"-0":"",c?s===">"||s==="<"?A="<0.0.0-0":A="*":s&&u?(g&&(n=0),i=0,s===">"?(s=">=",g?(o=+o+1,n=0,i=0):(n=+n+1,i=0)):s==="<="&&(s="<",g?o=+o+1:n=+n+1),s==="<"&&(a="-0"),A=`${s+o}.${n}.${i}${a}`):g?A=`>=${o}.0.0${a} <${+o+1}.0.0-0`:l&&(A=`>=${o}.${n}.0${a} <${o}.${+n+1}.0-0`),X("xRange return",A),A})},SY=(t,e)=>(X("replaceStars",t,e),t.trim().replace(Re[Ie.STAR],"")),NY=(t,e)=>(X("replaceGTE0",t,e),t.trim().replace(Re[e.includePrerelease?Ie.GTE0PRE:Ie.GTE0],"")),UY=t=>(e,r,A,s,o,n,i,a,c,g,l,u)=>(ue(A)?r="":ue(s)?r=`>=${A}.0.0${t?"-0":""}`:ue(o)?r=`>=${A}.${s}.0${t?"-0":""}`:n?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,ue(c)?a="":ue(g)?a=`<${+c+1}.0.0-0`:ue(l)?a=`<${c}.${+g+1}.0-0`:u?a=`<=${c}.${g}.${l}-${u}`:t?a=`<${c}.${g}.${+l+1}-0`:a=`<=${a}`,`${r} ${a}`.trim()),GY=(t,e,r)=>{for(let A=0;A0){let s=t[A].semver;if(s.major===e.major&&s.minor===e.minor&&s.patch===e.patch)return!0}return!1}return!0}});var io=B((TV,Mw)=>{"use strict";var ao=Symbol("SemVer ANY"),Bu=class t{static get ANY(){return ao}constructor(e,r){if(r=Sw(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),Qu("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ao?this.value="":this.value=this.operator+this.semver.version,Qu("comp",this)}parse(e){let r=this.options.loose?Nw[Uw.COMPARATORLOOSE]:Nw[Uw.COMPARATOR],A=e.match(r);if(!A)throw new TypeError(`Invalid comparator: ${e}`);this.operator=A[1]!==void 0?A[1]:"",this.operator==="="&&(this.operator=""),A[2]?this.semver=new Gw(A[2],this.options.loose):this.semver=ao}toString(){return this.value}test(e){if(Qu("Comparator.test",e,this.options.loose),this.semver===ao||e===ao)return!0;if(typeof e=="string")try{e=new Gw(e,this.options)}catch{return!1}return hu(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Lw(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new Lw(this.value,r).test(e.semver):(r=Sw(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||hu(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||hu(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Mw.exports=Bu;var Sw=Ti(),{safeRe:Nw,t:Uw}=jA(),hu=gu(),Qu=oo(),Gw=Be(),Lw=$e()});var co=B((bV,vw)=>{"use strict";var LY=$e(),MY=(t,e,r)=>{try{e=new LY(e,r)}catch{return!1}return e.test(t)};vw.exports=MY});var Ow=B((kV,xw)=>{"use strict";var vY=$e(),xY=(t,e)=>new vY(t,e).set.map(r=>r.map(A=>A.value).join(" ").trim().split(" "));xw.exports=xY});var _w=B((FV,Yw)=>{"use strict";var OY=Be(),YY=$e(),_Y=(t,e,r)=>{let A=null,s=null,o=null;try{o=new YY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===-1)&&(A=n,s=new OY(A,r))}),A};Yw.exports=_Y});var Pw=B((SV,Jw)=>{"use strict";var JY=Be(),PY=$e(),HY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new PY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===1)&&(A=n,s=new JY(A,r))}),A};Jw.exports=HY});var qw=B((NV,Vw)=>{"use strict";var Iu=Be(),VY=$e(),Hw=no(),qY=(t,e)=>{t=new VY(t,e);let r=new Iu("0.0.0");if(t.test(r)||(r=new Iu("0.0.0-0"),t.test(r)))return r;r=null;for(let A=0;A{let i=new Iu(n.semver.version);switch(n.operator){case">":i.prerelease.length===0?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!o||Hw(i,o))&&(o=i);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${n.operator}`)}}),o&&(!r||Hw(r,o))&&(r=o)}return r&&t.test(r)?r:null};Vw.exports=qY});var zw=B((UV,Ww)=>{"use strict";var WY=$e(),zY=(t,e)=>{try{return new WY(t,e).range||"*"}catch{return null}};Ww.exports=zY});var xi=B((GV,Xw)=>{"use strict";var ZY=Be(),Kw=io(),{ANY:jY}=Kw,KY=$e(),XY=co(),Zw=no(),jw=Ui(),$Y=Li(),e_=Gi(),t_=(t,e,r,A)=>{t=new ZY(t,A),e=new KY(e,A);let s,o,n,i,a;switch(r){case">":s=Zw,o=$Y,n=jw,i=">",a=">=";break;case"<":s=jw,o=e_,n=Zw,i="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(XY(t,e,A))return!1;for(let c=0;c{E.semver===jY&&(E=new Kw(">=0.0.0")),l=l||E,u=u||E,s(E.semver,l.semver,A)?l=E:n(E.semver,u.semver,A)&&(u=E)}),l.operator===i||l.operator===a||(!u.operator||u.operator===i)&&o(t,u.semver))return!1;if(u.operator===a&&n(t,u.semver))return!1}return!0};Xw.exports=t_});var ey=B((LV,$w)=>{"use strict";var r_=xi(),A_=(t,e,r)=>r_(t,e,">",r);$w.exports=A_});var ry=B((MV,ty)=>{"use strict";var s_=xi(),o_=(t,e,r)=>s_(t,e,"<",r);ty.exports=o_});var oy=B((vV,sy)=>{"use strict";var Ay=$e(),n_=(t,e,r)=>(t=new Ay(t,r),e=new Ay(e,r),t.intersects(e,r));sy.exports=n_});var iy=B((xV,ny)=>{"use strict";var i_=co(),a_=Xe();ny.exports=(t,e,r)=>{let A=[],s=null,o=null,n=t.sort((g,l)=>a_(g,l,r));for(let g of n)i_(g,e,r)?(o=g,s||(s=g)):(o&&A.push([s,o]),o=null,s=null);s&&A.push([s,null]);let i=[];for(let[g,l]of A)g===l?i.push(g):!l&&g===n[0]?i.push("*"):l?g===n[0]?i.push(`<=${l}`):i.push(`${g} - ${l}`):i.push(`>=${g}`);let a=i.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return a.length{"use strict";var ay=$e(),fu=io(),{ANY:Cu}=fu,du=co(),pu=Xe(),c_=(t,e,r={})=>{if(t===e)return!0;t=new ay(t,r),e=new ay(e,r);let A=!1;e:for(let s of t.set){for(let o of e.set){let n=l_(s,o,r);if(A=A||n!==null,n)continue e}if(A)return!1}return!0},g_=[new fu(">=0.0.0-0")],cy=[new fu(">=0.0.0")],l_=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===Cu){if(e.length===1&&e[0].semver===Cu)return!0;r.includePrerelease?t=g_:t=cy}if(e.length===1&&e[0].semver===Cu){if(r.includePrerelease)return!0;e=cy}let A=new Set,s,o;for(let E of t)E.operator===">"||E.operator===">="?s=gy(s,E,r):E.operator==="<"||E.operator==="<="?o=ly(o,E,r):A.add(E.semver);if(A.size>1)return null;let n;if(s&&o){if(n=pu(s.semver,o.semver,r),n>0)return null;if(n===0&&(s.operator!==">="||o.operator!=="<="))return null}for(let E of A){if(s&&!du(E,String(s),r)||o&&!du(E,String(o),r))return null;for(let h of e)if(!du(E,String(h),r))return!1;return!0}let i,a,c,g,l=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,u=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1;l&&l.prerelease.length===1&&o.operator==="<"&&l.prerelease[0]===0&&(l=!1);for(let E of e){if(g=g||E.operator===">"||E.operator===">=",c=c||E.operator==="<"||E.operator==="<=",s){if(u&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===u.major&&E.semver.minor===u.minor&&E.semver.patch===u.patch&&(u=!1),E.operator===">"||E.operator===">="){if(i=gy(s,E,r),i===E&&i!==s)return!1}else if(s.operator===">="&&!E.test(s.semver))return!1}if(o){if(l&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===l.major&&E.semver.minor===l.minor&&E.semver.patch===l.patch&&(l=!1),E.operator==="<"||E.operator==="<="){if(a=ly(o,E,r),a===E&&a!==o)return!1}else if(o.operator==="<="&&!E.test(o.semver))return!1}if(!E.operator&&(o||s)&&n!==0)return!1}return!(s&&c&&!o&&n!==0||o&&g&&!s&&n!==0||u||l)},gy=(t,e,r)=>{if(!t)return e;let A=pu(t.semver,e.semver,r);return A>0?t:A<0||e.operator===">"&&t.operator===">="?e:t},ly=(t,e,r)=>{if(!t)return e;let A=pu(t.semver,e.semver,r);return A<0?t:A>0||e.operator==="<"&&t.operator==="<="?e:t};uy.exports=c_});var wu=B((YV,By)=>{"use strict";var mu=jA(),hy=ZA(),u_=Be(),Qy=ou(),E_=ur(),h_=Om(),Q_=_m(),B_=Hm(),I_=Wm(),C_=Zm(),d_=Km(),f_=$m(),p_=tw(),m_=Xe(),w_=ow(),y_=iw(),R_=Ni(),D_=lw(),T_=Ew(),b_=no(),k_=Ui(),F_=au(),S_=cu(),N_=Gi(),U_=Li(),G_=gu(),L_=mw(),M_=yw(),v_=io(),x_=$e(),O_=co(),Y_=Ow(),__=_w(),J_=Pw(),P_=qw(),H_=zw(),V_=xi(),q_=ey(),W_=ry(),z_=oy(),Z_=iy(),j_=Ey();By.exports={parse:E_,valid:h_,clean:Q_,inc:B_,diff:I_,major:C_,minor:d_,patch:f_,prerelease:p_,compare:m_,rcompare:w_,compareLoose:y_,compareBuild:R_,sort:D_,rsort:T_,gt:b_,lt:k_,eq:F_,neq:S_,gte:N_,lte:U_,cmp:G_,coerce:L_,truncate:M_,Comparator:v_,Range:x_,satisfies:O_,toComparators:Y_,maxSatisfying:__,minSatisfying:J_,minVersion:P_,validRange:H_,outside:V_,gtr:q_,ltr:W_,intersects:z_,simplifyRange:Z_,subset:j_,SemVer:u_,re:mu.re,src:mu.src,tokens:mu.t,SEMVER_SPEC_VERSION:hy.SEMVER_SPEC_VERSION,RELEASE_TYPES:hy.RELEASE_TYPES,compareIdentifiers:Qy.compareIdentifiers,rcompareIdentifiers:Qy.rcompareIdentifiers}});import*as hr from"node:process";import sJ from"node:path";import*as ku from"os";function KA(t){return t==null?"":typeof t=="string"||t instanceof String?t:JSON.stringify(t)}function Tu(t){return Object.keys(t).length?{title:t.title,file:t.file,line:t.startLine,endLine:t.endLine,col:t.startColumn,endColumn:t.endColumn}:{}}function Hi(t,e,r){let A=new Pi(t,e,r);process.stdout.write(A.toString()+ku.EOL)}var bu="::",Pi=class{constructor(e,r,A){e||(e="missing.command"),this.command=e,this.properties=r,this.message=A}toString(){let e=bu+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let r=!0;for(let A in this.properties)if(this.properties.hasOwnProperty(A)){let s=this.properties[A];s&&(r?r=!1:e+=",",e+=`${A}=${Gy(s)}`)}}return e+=`${bu}${Uy(this.message)}`,e}};function Uy(t){return KA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function Gy(t){return KA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}import*as yp from"os";import*as eo from"http";import*as pl from"https";function Vi(t){let e=t.protocol==="https:";if(Ly(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new uo(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new uo(`http://${r}`)}else return}function Ly(t){if(!t.hostname)return!1;let e=t.hostname;if(My(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function My(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var uo=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}};var nr=Qr(zi(),1),ap=Qr(ci(),1),ie=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},je;(function(t){t[t.OK=200]="OK",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.ResourceMoved=302]="ResourceMoved",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.SwitchProxy=306]="SwitchProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.TooManyRequests=429]="TooManyRequests",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout"})(je||(je={}));var we;(function(t){t.Accept="accept",t.ContentType="content-type"})(we||(we={}));var Ot;(function(t){t.ApplicationJson="application/json"})(Ot||(Ot={}));var KM=[je.MovedPermanently,je.ResourceMoved,je.SeeOther,je.TemporaryRedirect,je.PermanentRedirect],XM=[je.BadGateway,je.ServiceUnavailable,je.GatewayTimeout],$M=["OPTIONS","GET","DELETE","HEAD"],ev=10,tv=5,dl=class t extends Error{constructor(e,r){super(e),this.name="HttpClientError",this.statusCode=r,Object.setPrototypeOf(this,t.prototype)}},fl=class{constructor(e){this.message=e}readBody(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};var $s=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ie(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ie(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ie(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ie(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ie(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ie(this,arguments,void 0,function*(r,A={}){A[we.Accept]=this._getExistingOrDefaultHeader(A,we.Accept,Ot.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ie(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&$M.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===je.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&KM.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!XM.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new fl(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Vi(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?pl:eo;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},Xs(this.requestOptions.headers),Xs(e||{})):Xs(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=Xs(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=Xs(this.requestOptions.headers)[we.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[we.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Vi(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||eo.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?nr.httpsOverHttps:nr.httpsOverHttp:a=c?nr.httpOverHttps:nr.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new pl.Agent(i):new eo.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new ap.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ie(this,void 0,void 0,function*(){e=Math.min(ev,e);let r=tv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ie(this,void 0,void 0,function*(){return new Promise((A,s)=>ie(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===je.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new dl(g,o);l.result=n.result,s(l)}else A(n)}))})}},Xs=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{});import{EOL as Av}from"os";import{constants as cp,promises as sv}from"fs";var ml=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{access:ov,appendFile:nv,writeFile:iv}=sv,gp="GITHUB_STEP_SUMMARY";var wl=class{constructor(){this._buffer=""}filePath(){return ml(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[gp];if(!e)throw new Error(`Unable to find environment variable for $${gp}. Check if your runtime environment supports job summaries.`);try{yield ov(e,cp.R_OK|cp.W_OK)}catch{throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,r,A={}){let s=Object.entries(A).map(([o,n])=>` ${o}="${n}"`).join("");return r?`<${e}${s}>${r}`:`<${e}${s}>`}write(e){return ml(this,void 0,void 0,function*(){let r=!!e?.overwrite,A=yield this.filePath();return yield(r?iv:nv)(A,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return ml(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(e,r=!1){return this._buffer+=e,r?this.addEOL():this}addEOL(){return this.addRaw(Av)}addCodeBlock(e,r){let A=Object.assign({},r&&{lang:r}),s=this.wrap("pre",this.wrap("code",e),A);return this.addRaw(s).addEOL()}addList(e,r=!1){let A=r?"ol":"ul",s=e.map(n=>this.wrap("li",n)).join(""),o=this.wrap(A,s);return this.addRaw(o).addEOL()}addTable(e){let r=e.map(s=>{let o=s.map(n=>{if(typeof n=="string")return this.wrap("td",n);let{header:i,data:a,colspan:c,rowspan:g}=n,l=i?"th":"td",u=Object.assign(Object.assign({},c&&{colspan:c}),g&&{rowspan:g});return this.wrap(l,a,u)}).join("");return this.wrap("tr",o)}).join(""),A=this.wrap("table",r);return this.addRaw(A).addEOL()}addDetails(e,r){let A=this.wrap("details",this.wrap("summary",e)+r);return this.addRaw(A).addEOL()}addImage(e,r,A){let{width:s,height:o}=A||{},n=Object.assign(Object.assign({},s&&{width:s}),o&&{height:o}),i=this.wrap("img",null,Object.assign({src:e,alt:r},n));return this.addRaw(i).addEOL()}addHeading(e,r){let A=`h${r}`,s=["h1","h2","h3","h4","h5","h6"].includes(A)?A:"h1",o=this.wrap(s,e);return this.addRaw(o).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,r){let A=Object.assign({},r&&{cite:r}),s=this.wrap("blockquote",e,A);return this.addRaw(s).addEOL()}addLink(e,r){let A=this.wrap("a",e,{href:r});return this.addRaw(A).addEOL()}},CH=new wl;import wp from"os";import*as to from"os";import*as bl from"events";import*as fp from"child_process";import*as pp from"path";import{ok as Qv}from"assert";import*as pt from"path";import*as li from"fs";import*as ar from"path";var up=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{chmod:av,copyFile:cv,lstat:gv,mkdir:Ep,open:pH,readdir:hp,rename:lv,rm:Qp,rmdir:mH,stat:gi,symlink:uv,unlink:Ev}=li.promises,ir=process.platform==="win32";var wH=li.constants.O_RDONLY;function yl(t){return up(this,void 0,void 0,function*(){try{yield gi(t)}catch(e){if(e.code==="ENOENT")return!1;throw e}return!0})}function ui(t){if(t=hv(t),!t)throw new Error('isRooted() parameter "p" cannot be empty');return ir?t.startsWith("\\")||/^[A-Z]:/i.test(t):t.startsWith("/")}function Rl(t,e){return up(this,void 0,void 0,function*(){let r;try{r=yield gi(t)}catch(s){s.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${s}`)}if(r&&r.isFile()){if(ir){let s=ar.extname(t).toUpperCase();if(e.some(o=>o.toUpperCase()===s))return t}else if(lp(r))return t}let A=t;for(let s of e){t=A+s,r=void 0;try{r=yield gi(t)}catch(o){o.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${o}`)}if(r&&r.isFile()){if(ir){try{let o=ar.dirname(t),n=ar.basename(t).toUpperCase();for(let i of yield hp(o))if(n===i.toUpperCase()){t=ar.join(o,i);break}}catch(o){console.log(`Unexpected error attempting to determine the actual case of the file '${t}': ${o}`)}return t}else if(lp(r))return t}}return""})}function hv(t){return t=t||"",ir?(t=t.replace(/\//g,"\\"),t.replace(/\\\\+/g,"\\")):t.replace(/\/\/+/g,"/")}function lp(t){return(t.mode&1)>0||(t.mode&8)>0&&process.getgid!==void 0&&t.gid===process.getgid()||(t.mode&64)>0&&process.getuid!==void 0&&t.uid===process.getuid()}var Ei=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function Ip(t){return Ei(this,void 0,void 0,function*(){if(ir&&/[*"<>|]/.test(t))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');try{yield Qp(t,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(e){throw new Error(`File was unable to be removed ${e}`)}})}function Dl(t){return Ei(this,void 0,void 0,function*(){Qv(t,"a path argument must be provided"),yield Ep(t,{recursive:!0})})}function Jr(t,e){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");if(e){let A=yield Jr(t,!1);if(!A)throw ir?new Error(`Unable to locate executable file: ${t}. 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.`):new Error(`Unable to locate executable file: ${t}. 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 A}let r=yield Bv(t);return r&&r.length>0?r[0]:""})}function Bv(t){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");let e=[];if(ir&&process.env.PATHEXT)for(let s of process.env.PATHEXT.split(pt.delimiter))s&&e.push(s);if(ui(t)){let s=yield Rl(t,e);return s?[s]:[]}if(t.includes(pt.sep))return[];let r=[];if(process.env.PATH)for(let s of process.env.PATH.split(pt.delimiter))s&&r.push(s);let A=[];for(let s of r){let o=yield Rl(pt.join(s,t),e);o&&A.push(o)}return A})}import{setTimeout as Iv}from"timers";var dp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},hi=process.platform==="win32",Qi=class extends bl.EventEmitter{constructor(e,r,A){if(super(),!e)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=e,this.args=r||[],this.options=A||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,r){let A=this._getSpawnFileName(),s=this._getSpawnArgs(e),o=r?"":"[command]";if(hi)if(this._isCmdFile()){o+=A;for(let n of s)o+=` ${n}`}else if(e.windowsVerbatimArguments){o+=`"${A}"`;for(let n of s)o+=` ${n}`}else{o+=this._windowsQuoteCmdArg(A);for(let n of s)o+=` ${this._windowsQuoteCmdArg(n)}`}else{o+=A;for(let n of s)o+=` ${n}`}return o}_processLineBuffer(e,r,A){try{let s=r+e.toString(),o=s.indexOf(to.EOL);for(;o>-1;){let n=s.substring(0,o);A(n),s=s.substring(o+to.EOL.length),o=s.indexOf(to.EOL)}return s}catch(s){return this._debug(`error processing line. Failed with error ${s}`),""}}_getSpawnFileName(){return hi&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(e){if(hi&&this._isCmdFile()){let r=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let A of this.args)r+=" ",r+=e.windowsVerbatimArguments?A:this._windowsQuoteCmdArg(A);return r+='"',[r]}return this.args}_endsWith(e,r){return e.endsWith(r)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return'""';let r=[" "," ","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],A=!1;for(let n of e)if(r.some(i=>i===n)){A=!0;break}if(!A)return e;let s='"',o=!0;for(let n=e.length;n>0;n--)s+=e[n-1],o&&e[n-1]==="\\"?s+="\\":e[n-1]==='"'?(o=!0,s+='"'):o=!1;return s+='"',s.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e)return'""';if(!e.includes(" ")&&!e.includes(" ")&&!e.includes('"'))return e;if(!e.includes('"')&&!e.includes("\\"))return`"${e}"`;let r='"',A=!0;for(let s=e.length;s>0;s--)r+=e[s-1],A&&e[s-1]==="\\"?r+="\\":e[s-1]==='"'?(A=!0,r+="\\"):A=!1;return r+='"',r.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};let r={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return r.outStream=e.outStream||process.stdout,r.errStream=e.errStream||process.stderr,r}_getSpawnOptions(e,r){e=e||{};let A={};return A.cwd=e.cwd,A.env=e.env,A.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(A.argv0=`"${r}"`),A}exec(){return dp(this,void 0,void 0,function*(){return!ui(this.toolPath)&&(this.toolPath.includes("/")||hi&&this.toolPath.includes("\\"))&&(this.toolPath=pp.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield Jr(this.toolPath,!0),new Promise((e,r)=>dp(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let c of this.args)this._debug(` ${c}`);let A=this._cloneExecOptions(this.options);!A.silent&&A.outStream&&A.outStream.write(this._getCommandString(A)+to.EOL);let s=new Tl(A,this.toolPath);if(s.on("debug",c=>{this._debug(c)}),this.options.cwd&&!(yield yl(this.options.cwd)))return r(new Error(`The cwd: ${this.options.cwd} does not exist!`));let o=this._getSpawnFileName(),n=fp.spawn(o,this._getSpawnArgs(A),this._getSpawnOptions(this.options,o)),i="";n.stdout&&n.stdout.on("data",c=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(c),!A.silent&&A.outStream&&A.outStream.write(c),i=this._processLineBuffer(c,i,g=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(g)})});let a="";if(n.stderr&&n.stderr.on("data",c=>{s.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(c),!A.silent&&A.errStream&&A.outStream&&(A.failOnStdErr?A.errStream:A.outStream).write(c),a=this._processLineBuffer(c,a,g=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(g)})}),n.on("error",c=>{s.processError=c.message,s.processExited=!0,s.processClosed=!0,s.CheckComplete()}),n.on("exit",c=>{s.processExitCode=c,s.processExited=!0,this._debug(`Exit code ${c} received from tool '${this.toolPath}'`),s.CheckComplete()}),n.on("close",c=>{s.processExitCode=c,s.processExited=!0,s.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),s.CheckComplete()}),s.on("done",(c,g)=>{i.length>0&&this.emit("stdline",i),a.length>0&&this.emit("errline",a),n.removeAllListeners(),c?r(c):e(g)}),this.options.input){if(!n.stdin)throw new Error("child process missing stdin");n.stdin.end(this.options.input)}}))})}};function mp(t){let e=[],r=!1,A=!1,s="";function o(n){A&&n!=='"'&&(s+="\\"),s+=n,A=!1}for(let n=0;n0&&(e.push(s),s="");continue}o(i)}return s.length>0&&e.push(s.trim()),e}var Tl=class t extends bl.EventEmitter{constructor(e,r){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!r)throw new Error("toolPath must not be empty");this.options=e,this.toolPath=r,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=Iv(t.HandleTimeout,this.delay,this)))}_debug(e){this.emit("debug",e)}_setResult(){let e;this.processExited&&(this.processError?e=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}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let r=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(r)}e._setResult()}}};var dv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function cr(t,e,r){return dv(this,void 0,void 0,function*(){let A=mp(t);if(A.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let s=A[0];return e=A.slice(1).concat(e||[]),new Qi(s,e,r).exec()})}var FH=wp.platform(),SH=wp.arch();var kl;(function(t){t[t.Success=0]="Success",t[t.Failure=1]="Failure"})(kl||(kl={}));function Rp(t,e){let r=process.env[`INPUT_${t.replace(/ /g,"_").toUpperCase()}`]||"";if(e&&e.required&&!r)throw new Error(`Input required and not supplied: ${t}`);return e&&e.trimWhitespace===!1?r:r.trim()}function Dp(t){process.exitCode=kl.Failure,mv(t)}function Fl(){return process.env.RUNNER_DEBUG==="1"}function Ue(t){Hi("debug",{},t)}function mv(t,e={}){Hi("error",Tu(e),t instanceof Error?t.toString():t)}function Sl(t){process.stdout.write(t+yp.EOL)}import{readFileSync as wv,existsSync as yv}from"fs";import{EOL as Rv}from"os";var qA=class{constructor(){var e,r,A;if(this.payload={},process.env.GITHUB_EVENT_PATH)if(yv(process.env.GITHUB_EVENT_PATH))this.payload=JSON.parse(wv(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}));else{let s=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${s} does not exist${Rv}`)}this.eventName=process.env.GITHUB_EVENT_NAME,this.sha=process.env.GITHUB_SHA,this.ref=process.env.GITHUB_REF,this.workflow=process.env.GITHUB_WORKFLOW,this.action=process.env.GITHUB_ACTION,this.actor=process.env.GITHUB_ACTOR,this.job=process.env.GITHUB_JOB,this.runAttempt=parseInt(process.env.GITHUB_RUN_ATTEMPT,10),this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10),this.runId=parseInt(process.env.GITHUB_RUN_ID,10),this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:"https://api.github.com",this.serverUrl=(r=process.env.GITHUB_SERVER_URL)!==null&&r!==void 0?r:"https://github.com",this.graphqlUrl=(A=process.env.GITHUB_GRAPHQL_URL)!==null&&A!==void 0?A:"https://api.github.com/graphql"}get issue(){let e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){let[e,r]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:r}}if(this.payload.repository)return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name};throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}};var Ml=Qr(Sp(),1),Np=Qr(ci(),1),xv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function Up(t,e){if(!t&&!e.auth)throw new Error("Parameter token or opts.auth is required");if(t&&e.auth)throw new Error("Parameters token and opts.auth may not both be specified");return typeof e.auth=="string"?e.auth:`token ${t}`}function Gp(t){return new Ml.HttpClient().getAgent(t)}function Ov(t){return new Ml.HttpClient().getAgentDispatcher(t)}function Lp(t){let e=Ov(t);return(A,s)=>xv(this,void 0,void 0,function*(){return(0,Np.fetch)(A,Object.assign(Object.assign({},s),{dispatcher:e}))})}function Mp(){return process.env.GITHUB_API_URL||"https://api.github.com"}function vl(t){var e;let r=(e=process.env.ACTIONS_ORCHESTRATION_ID)===null||e===void 0?void 0:e.trim();if(r){let s=`actions_orchestration_id/${r.replace(/[^a-z0-9_.-]/gi,"_")}`;return t?.includes(s)?t:`${t?`${t} `:""}${s}`}return t}function gr(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}function mi(t,e,r,A){if(typeof r!="function")throw new Error("method for before hook must be a function");return A||(A={}),Array.isArray(e)?e.reverse().reduce((s,o)=>mi.bind(null,t,o,s,A),r)():Promise.resolve().then(()=>t.registry[e]?t.registry[e].reduce((s,o)=>o.hook.bind(null,s,A),r)():r(A))}function vp(t,e,r,A){let s=A;t.registry[r]||(t.registry[r]=[]),e==="before"&&(A=(o,n)=>Promise.resolve().then(s.bind(null,n)).then(o.bind(null,n))),e==="after"&&(A=(o,n)=>{let i;return Promise.resolve().then(o.bind(null,n)).then(a=>(i=a,s(i,n))).then(()=>i)}),e==="error"&&(A=(o,n)=>Promise.resolve().then(o.bind(null,n)).catch(i=>s(i,n))),t.registry[r].push({hook:A,orig:s})}function xp(t,e,r){if(!t.registry[e])return;let A=t.registry[e].map(s=>s.orig).indexOf(r);A!==-1&&t.registry[e].splice(A,1)}var Op=Function.bind,Yp=Op.bind(Op);function _p(t,e,r){let A=Yp(xp,null).apply(null,r?[e,r]:[e]);t.api={remove:A},t.remove=A,["before","error","after","wrap"].forEach(s=>{let o=r?[e,s,r]:[e,s];t[s]=t.api[s]=Yp(vp,null).apply(null,o)})}function _v(){let t=Symbol("Singular"),e={registry:{}},r=mi.bind(null,e,t);return _p(r,e,t),r}function Jv(){let t={registry:{}},e=mi.bind(null,t);return _p(e,t),e}var Jp={Singular:_v,Collection:Jv};var Pv="0.0.0-development",Hv=`octokit-endpoint.js/${Pv} ${gr()}`,Vv={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Hv},mediaType:{format:""}};function qv(t){return t?Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{}):{}}function Wv(t){if(typeof t!="object"||t===null||Object.prototype.toString.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);if(e===null)return!0;let r=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.call(r)===Function.prototype.call(t)}function Vp(t,e){let r=Object.assign({},t);return Object.keys(e).forEach(A=>{Wv(e[A])?A in t?r[A]=Vp(t[A],e[A]):Object.assign(r,{[A]:e[A]}):Object.assign(r,{[A]:e[A]})}),r}function Pp(t){for(let e in t)t[e]===void 0&&delete t[e];return t}function Ol(t,e,r){if(typeof e=="string"){let[s,o]=e.split(" ");r=Object.assign(o?{method:s,url:o}:{url:s},r)}else r=Object.assign({},e);r.headers=qv(r.headers),Pp(r),Pp(r.headers);let A=Vp(t||{},r);return r.url==="/graphql"&&(t&&t.mediaType.previews?.length&&(A.mediaType.previews=t.mediaType.previews.filter(s=>!A.mediaType.previews.includes(s)).concat(A.mediaType.previews)),A.mediaType.previews=(A.mediaType.previews||[]).map(s=>s.replace(/-preview/,""))),A}function zv(t,e){let r=/\?/.test(t)?"&":"?",A=Object.keys(e);return A.length===0?t:t+r+A.map(s=>s==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${s}=${encodeURIComponent(e[s])}`).join("&")}var Zv=/\{[^{}}]+\}/g;function jv(t){return t.replace(/(?:^\W+)|(?:(?r.concat(A),[]):[]}function Hp(t,e){let r={__proto__:null};for(let A of Object.keys(t))e.indexOf(A)===-1&&(r[A]=t[A]);return r}function qp(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function zA(t){return encodeURIComponent(t).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Ao(t,e,r){return e=t==="+"||t==="#"?qp(e):zA(e),r?zA(r)+"="+e:e}function WA(t){return t!=null}function xl(t){return t===";"||t==="&"||t==="?"}function Xv(t,e,r,A){var s=t[r],o=[];if(WA(s)&&s!=="")if(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||typeof s=="boolean")s=s.toString(),A&&A!=="*"&&(s=s.substring(0,parseInt(A,10))),o.push(Ao(e,s,xl(e)?r:""));else if(A==="*")Array.isArray(s)?s.filter(WA).forEach(function(n){o.push(Ao(e,n,xl(e)?r:""))}):Object.keys(s).forEach(function(n){WA(s[n])&&o.push(Ao(e,s[n],n))});else{let n=[];Array.isArray(s)?s.filter(WA).forEach(function(i){n.push(Ao(e,i))}):Object.keys(s).forEach(function(i){WA(s[i])&&(n.push(zA(i)),n.push(Ao(e,s[i].toString())))}),xl(e)?o.push(zA(r)+"="+n.join(",")):n.length!==0&&o.push(n.join(","))}else e===";"?WA(s)&&o.push(zA(r)):s===""&&(e==="&"||e==="?")?o.push(zA(r)+"="):s===""&&o.push("");return o}function $v(t){return{expand:ex.bind(null,t)}}function ex(t,e){var r=["+","#",".","/",";","?","&"];return t=t.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(A,s,o){if(s){let i="",a=[];if(r.indexOf(s.charAt(0))!==-1&&(i=s.charAt(0),s=s.substr(1)),s.split(/,/g).forEach(function(c){var g=/([^:\*]*)(?::(\d+)|(\*))?/.exec(c);a.push(Xv(e,i,g[1],g[2]||g[3]))}),i&&i!=="+"){var n=",";return i==="?"?n="&":i!=="#"&&(n=i),(a.length!==0?i:"")+a.join(n)}else return a.join(",")}else return qp(o)}),t==="/"?t:t.replace(/\/$/,"")}function Wp(t){let e=t.method.toUpperCase(),r=(t.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),A=Object.assign({},t.headers),s,o=Hp(t,["method","baseUrl","url","headers","request","mediaType"]),n=Kv(r);r=$v(r).expand(o),/^http/.test(r)||(r=t.baseUrl+r);let i=Object.keys(t).filter(g=>n.includes(g)).concat("baseUrl"),a=Hp(o,i);if(!/application\/octet-stream/i.test(A.accept)&&(t.mediaType.format&&(A.accept=A.accept.split(/,/).map(g=>g.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${t.mediaType.format}`)).join(",")),r.endsWith("/graphql")&&t.mediaType.previews?.length)){let g=A.accept.match(/(?{let u=t.mediaType.format?`.${t.mediaType.format}`:"+json";return`application/vnd.github.${l}-preview${u}`}).join(",")}return["GET","HEAD"].includes(e)?r=zv(r,a):"data"in a?s=a.data:Object.keys(a).length&&(s=a),!A["content-type"]&&typeof s<"u"&&(A["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof s>"u"&&(s=""),Object.assign({method:e,url:r,headers:A},typeof s<"u"?{body:s}:null,t.request?{request:t.request}:null)}function tx(t,e,r){return Wp(Ol(t,e,r))}function zp(t,e){let r=Ol(t,e),A=tx.bind(null,r);return Object.assign(A,{DEFAULTS:r,defaults:zp.bind(null,r),merge:Ol.bind(null,r),parse:Wp})}var Zp=zp(null,Vv);var Em=Qr(rm(),1);var lx=/^-?\d+$/,Ri=/^-?\d+n+$/,lr=JSON.stringify,Pl=JSON.parse,im=/^-?\d+n$/,Am=/([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g,sm=/([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g,Hl=t=>t===void 0||typeof t=="function"||typeof t=="symbol",Vl=t=>t!==null&&typeof t=="object"&&t.constructor&&t.constructor.name==="RawJSON",ux=(t,e,r)=>{let A="";typeof r=="number"?A=" ".repeat(Math.min(10,Math.max(0,Math.floor(r)))):typeof r=="string"&&(A=r.slice(0,10));let s=typeof e=="function",o=Array.isArray(e)?new Set(e.map(String)):null,n=(h,d,I)=>(I!==null&&typeof I=="object"&&typeof I.toJSON=="function"&&(I=I.toJSON(d)),typeof I=="string"&&Ri.test(I)?I+"n":typeof I=="bigint"?"rawJSON"in JSON?JSON.rawJSON(I.toString()):I.toString()+"n":(s&&(I=e.call(h,d,I)),I!==null&&typeof I=="object"&&(I instanceof Number||I instanceof String||I instanceof Boolean)&&(I=I.valueOf()),I)),i=n({"":t},"",t);if(Hl(i))return;let a=i===null||typeof i!="object",c=Vl(i);if(a||c)return lr(i);let g=[],l=0,u=[{parent:{"":i},key:"",val:i,isArray:Array.isArray(i),keys:Array.isArray(i)?null:Object.keys(i),index:0,first:!0}],E=new WeakSet([i]);for(;u.length>0;){let h=u[u.length-1];h.index===0&&(g.push(h.isArray?"[":"{"),l++);let d=!1;if(h.isArray)if(h.index=h.keys.length&&u[u.length-1]===h&&(d=!0)}d&&(l--,!h.first&&A&&g.push(` +`+A.repeat(l)),g.push(h.isArray?"]":"}"),E.delete(h.val),u.pop())}return g.join("")},am=(t,e,r)=>{try{return"rawJSON"in JSON?lr(t,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r):t?lr(t,(i,a)=>typeof a=="string"&&Ri.test(a)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r).replace(Am,"$1$2$3").replace(sm,"$1$2$3"):lr(t,e,r)}catch(A){if(A instanceof RangeError){let s=ux(t,e,r);return s===void 0?void 0:"rawJSON"in JSON?s:s.replace(Am,"$1$2$3").replace(sm,"$1$2$3")}throw A}},yi=new Map,Ex=()=>{let t=JSON.parse.toString();if(yi.has(t))return yi.get(t);try{let e=JSON.parse("1",(r,A,s)=>!!s?.source&&s.source==="1");return yi.set(t,e),e}catch{return yi.set(t,!1),!1}},hx=(t,e,r,A)=>typeof e=="string"&&im.test(e)?BigInt(e.slice(0,-1)):typeof e=="string"&&Ri.test(e)?e.slice(0,-1):typeof A=="function"?A(t,e,r):e,Qx=(t,e)=>JSON.parse(t,(r,A,s)=>{let o=typeof A=="number",n=A>Number.MAX_SAFE_INTEGER||A{let r={"":t},A=[{parent:r,key:"",visited:!1}];for(;A.length>0;){let s=A[A.length-1];if(s.visited){let{parent:o,key:n}=s,i=o[n];typeof i=="string"&&(im.test(i)?i=BigInt(i.slice(0,-1)):Ri.test(i)&&(i=i.slice(0,-1))),typeof e=="function"&&(i=e.call(o,n,i)),i===void 0?delete o[n]:o[n]=i,A.pop()}else{s.visited=!0;let o=s.parent[s.key];if(o!==null&&typeof o=="object"){let i=Object.keys(o);for(let a=i.length-1;a>=0;a--)A.push({parent:o,key:i[a],visited:!1})}}}return r[""]},nm=t=>t.replace(Bx,(e,r,A,s)=>{let o=e[0]==='"';if(o&&Ix.test(e))return e.substring(0,e.length-1)+'n"';let i=A||s,a=r&&(r.length{if(!t)return Pl(t,e);try{if(Ex())return Qx(t,e);let r=nm(t);return Pl(r,(A,s,o)=>hx(A,s,o,e))}catch(r){if(r instanceof RangeError){let A=nm(t),s=Pl(A);return Cx(s,e)}throw r}};var Pr=class extends Error{name;status;request;response;constructor(e,r,A){super(e,{cause:A.cause}),this.name="HttpError",this.status=Number.parseInt(r),Number.isNaN(this.status)&&(this.status=0);"response"in A&&(this.response=A.response);let s=Object.assign({},A.request);A.request.headers.authorization&&(s.headers=Object.assign({},A.request.headers,{authorization:A.request.headers.authorization.replace(/(?"";async function um(t){let e=t.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let r=t.request?.log||console,A=t.request?.parseSuccessResponseBody!==!1,s=px(t.body)||Array.isArray(t.body)?am(t.body):t.body,o=Object.fromEntries(Object.entries(t.headers).map(([l,u])=>[l,String(u)])),n;try{n=await e(t.url,{method:t.method,body:s,redirect:t.request?.redirect,headers:o,signal:t.request?.signal,...t.body&&{duplex:"half"}})}catch(l){let u="Unknown Error";if(l instanceof Error){if(l.name==="AbortError")throw l.status=500,l;u=l.message,l.name==="TypeError"&&"cause"in l&&(l.cause instanceof Error?u=l.cause.message:typeof l.cause=="string"&&(u=l.cause))}let E=new Pr(u,500,{request:t});throw E.cause=l,E}let i=n.status,a=n.url,c={};for(let[l,u]of n.headers)c[l]=u;let g={url:a,status:i,headers:c,data:""};if("deprecation"in c){let l=c.link&&c.link.match(/<([^<>]+)>; rel="deprecation"/),u=l&&l.pop();r.warn(`[@octokit/request] "${t.method} ${t.url}" is deprecated. It is scheduled to be removed on ${c.sunset}${u?`. See ${u}`:""}`)}if(i===204||i===205)return g;if(t.method==="HEAD"){if(i<400)return g;throw new Pr(n.statusText,i,{response:g,request:t})}if(i===304)throw g.data=await ql(n),new Pr("Not modified",i,{response:g,request:t});if(i>=400)throw g.data=await ql(n),new Pr(wx(g.data),i,{response:g,request:t});return g.data=A?await ql(n):n.body,g}async function ql(t){let e=t.headers.get("content-type");if(!e)return t.text().catch(lm);let r=(0,Em.parse)(e);if(mx(r)){let A="";try{return A=await t.text(),gm(A)}catch{return A}}else return r.type.startsWith("text/")||r.parameters.charset?.toLowerCase()==="utf-8"?t.text().catch(lm):t.arrayBuffer().catch(()=>new ArrayBuffer(0))}function mx(t){return t.type==="application/json"||t.type==="application/scim+json"}function wx(t){if(typeof t=="string")return t;if(t instanceof ArrayBuffer)return"Unknown error";if(typeof t=="object"&&t!==null&&"message"in t){let e=t,r="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(A=>JSON.stringify(A)).join(", ")}${r}`:`${e.message}${r}`}return`Unknown error: ${JSON.stringify(t)}`}function Wl(t,e){let r=t.defaults(e);return Object.assign(function(s,o){let n=r.merge(s,o);if(!n.request||!n.request.hook)return um(r.parse(n));let i=(a,c)=>um(r.parse(r.merge(a,c)));return Object.assign(i,{endpoint:r,defaults:Wl.bind(null,r)}),n.request.hook(i,n)},{endpoint:r,defaults:Wl.bind(null,r)})}var so=Wl(Zp,fx);var yx="0.0.0-development";function Rx(t){return`Request failed due to following response errors: `+t.errors.map(e=>` - ${e.message}`).join(` -`)}var Rx=class extends Error{constructor(t,e,r){super(yx(r)),this.request=t,this.headers=e,this.response=r,this.errors=r.errors,this.data=r.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},Dx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],Tx=["query","method","url"],Cm=/\/api\/v3\/?$/;function bx(t,e,r){if(r){if(typeof e=="string"&&"query"in r)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let n in r)if(Tx.includes(n))return Promise.reject(new Error(`[@octokit/graphql] "${n}" cannot be used as variable name`))}let A=typeof e=="string"?Object.assign({query:e},r):e,s=Object.keys(A).reduce((n,i)=>Dx.includes(i)?(n[i]=A[i],n):(n.variables||(n.variables={}),n.variables[i]=A[i],n),{}),o=A.baseUrl||t.endpoint.DEFAULTS.baseUrl;return Cm.test(o)&&(s.url=o.replace(Cm,"/api/graphql")),t(s).then(n=>{if(n.data.errors){let i={};for(let a of Object.keys(n.headers))i[a]=n.headers[a];throw new Rx(s,i,n.data)}return n.data.data})}function jl(t,e){let r=t.defaults(e);return Object.assign((s,o)=>bx(r,s,o),{defaults:jl.bind(null,r),endpoint:r.endpoint})}var a2=jl(so,{headers:{"user-agent":`octokit-graphql.js/${wx} ${gr()}`},method:"POST",url:"/graphql"});function dm(t){return jl(t,{method:"POST",url:"/graphql"})}var Kl="(?:[a-zA-Z0-9_-]+)",fm="\\.",pm=new RegExp(`^${Kl}${fm}${Kl}${fm}${Kl}$`),kx=pm.test.bind(pm);async function Fx(t){let e=kx(t),r=t.startsWith("v1.")||t.startsWith("ghs_"),A=t.startsWith("ghu_");return{type:"token",token:t,tokenType:e?"app":r?"installation":A?"user-to-server":"oauth"}}function Sx(t){return t.split(/\./).length===3?`bearer ${t}`:`token ${t}`}async function Nx(t,e,r,A){let s=e.endpoint.merge(r,A);return s.headers.authorization=Sx(t),e(s)}var mm=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(Fx.bind(null,e),{hook:Nx.bind(null,e)})};var Xl="7.0.6";var wm=()=>{},Ux=console.warn.bind(console),Gx=console.error.bind(console);function Lx(t={}){return typeof t.debug!="function"&&(t.debug=wm),typeof t.info!="function"&&(t.info=wm),typeof t.warn!="function"&&(t.warn=Ux),typeof t.error!="function"&&(t.error=Gx),t}var ym=`octokit-core.js/${Xl} ${gr()}`,Ti=class{static VERSION=Xl;static defaults(e){return class extends this{constructor(...A){let s=A[0]||{};if(typeof e=="function"){super(e(s));return}super(Object.assign({},e,s,s.userAgent&&e.userAgent?{userAgent:`${s.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let r=this.plugins;return class extends this{static plugins=r.concat(e.filter(s=>!r.includes(s)))}}constructor(e={}){let r=new qp.Collection,A={baseUrl:so.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:r.bind(null,"request")}),mediaType:{previews:[],format:""}};if(A.headers["user-agent"]=e.userAgent?`${e.userAgent} ${ym}`:ym,e.baseUrl&&(A.baseUrl=e.baseUrl),e.previews&&(A.mediaType.previews=e.previews),e.timeZone&&(A.headers["time-zone"]=e.timeZone),this.request=so.defaults(A),this.graphql=dm(this.request).defaults(A),this.log=Lx(e.log),this.hook=r,e.authStrategy){let{authStrategy:o,...n}=e,i=o(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:n},e.auth));r.wrap("request",i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let o=mm(e.auth);r.wrap("request",o.hook),this.auth=o}let s=this.constructor;for(let o=0;o({async next(){if(!i)return{done:!0};try{let a=await s({method:o,url:i,headers:n}),c=_x(a);if(i=((c.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!i&&"total_commits"in c.data){let g=new URL(c.url),l=g.searchParams,u=parseInt(l.get("page")||"1",10),E=parseInt(l.get("per_page")||"250",10);u*E{if(s.done)return e;let o=!1;function n(){o=!0}return e=e.concat(A?A(s.value,n):s.value.data),o?e:Tm(t,e,r,A)})}var k2=Object.assign(Dm,{iterator:ru});function Au(t){return{paginate:Object.assign(Dm.bind(null,t),{iterator:ru.bind(null,t)})}}Au.VERSION=Yx;var G2=new VA,su=Yp(),Jx={baseUrl:su,request:{agent:xp(su),fetch:Op(su)}},bm=Ti.plugin(tu,Au).defaults(Jx);function km(t,e){let r=Object.assign({},e||{}),A=vp(t,r);A&&(r.auth=A);let s=Ol(r.userAgent);return s&&(r.userAgent=s),r}var x2=new VA;function Fm(t,e,...r){let A=bm.plugin(...r);return new A(km(t,e))}var Tu=W(require("crypto"),1),Hr=W(require("fs"),1);var j_=W(Ru(),1);var go=W(require("path"),1);var Ji=W(Ru(),1),my=W(require("stream"),1),wy=W(require("util"),1),yy=require("assert");var py=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Yi=class{constructor(e,r,A){if(e<1)throw new Error("max attempts should be greater than or equal to 1");if(this.maxAttempts=e,this.minSeconds=Math.floor(r),this.maxSeconds=Math.floor(A),this.minSeconds>this.maxSeconds)throw new Error("min seconds should be less than or equal to max seconds")}execute(e,r){return py(this,void 0,void 0,function*(){let A=1;for(;AsetTimeout(r,e*1e3))})}};var Er=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},_i=class extends Error{constructor(e){super(`Unexpected HTTP response: ${e}`),this.httpStatusCode=e,Object.setPrototypeOf(this,new.target.prototype)}},Ry=process.platform==="win32",vV=process.platform==="darwin",X_="actions/tool-cache";function Dy(t,e,r,A){return Er(this,void 0,void 0,function*(){e=e||go.join(Fy(),Tu.randomUUID()),yield Tl(go.dirname(e)),Ue(`Downloading ${t}`),Ue(`Destination ${e}`);let s=3,o=Du("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS",10),n=Du("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS",20);return yield new Yi(s,o,n).execute(()=>Er(this,void 0,void 0,function*(){return yield $_(t,e||"",r,A)}),a=>!(a instanceof _i&&a.httpStatusCode&&a.httpStatusCode<500&&a.httpStatusCode!==408&&a.httpStatusCode!==429))})}function $_(t,e,r,A){return Er(this,void 0,void 0,function*(){if(Hr.existsSync(e))throw new Error(`Destination file path ${e} already exists`);let s=new Xs(X_,[],{allowRetries:!1});r&&(Ue("set auth"),A===void 0&&(A={}),A.authorization=r);let o=yield s.get(t,A);if(o.message.statusCode!==200){let g=new _i(o.message.statusCode);throw Ue(`Failed to download from "${t}". Code(${o.message.statusCode}) Message(${o.message.statusMessage})`),g}let n=wy.promisify(my.pipeline),a=Du("TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY",()=>o.message)(),c=!1;try{return yield n(a,Hr.createWriteStream(e)),Ue("download complete"),c=!0,e}finally{if(!c){Ue("download failed");try{yield fp(e)}catch(g){Ue(`Failed to delete '${e}'. ${g.message}`)}}}})}function Ty(t,e){return Er(this,arguments,void 0,function*(r,A,s="xz"){if(!r)throw new Error("parameter 'file' is required");A=yield ky(A),Ue("Checking tar --version");let o="";yield cr("tar --version",[],{ignoreReturnCode:!0,silent:!0,listeners:{stdout:g=>o+=g.toString(),stderr:g=>o+=g.toString()}}),Ue(o.trim());let n=o.toUpperCase().includes("GNU TAR"),i;s instanceof Array?i=s:i=[s],Nl()&&!s.includes("v")&&i.push("-v");let a=A,c=r;return Ry&&n&&(i.push("--force-local"),a=A.replace(/\\/g,"/"),c=r.replace(/\\/g,"/")),n&&(i.push("--warning=no-unknown-keyword"),i.push("--overwrite")),i.push("-C",a,"-f",c),yield cr("tar",i),A})}function by(t,e){return Er(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'file' is required");return e=yield ky(e),Ry?yield eJ(t,e):yield tJ(t,e),e})}function eJ(t,e){return Er(this,void 0,void 0,function*(){let r=t.replace(/'/g,"''").replace(/"|\n|\r/g,""),A=e.replace(/'/g,"''").replace(/"|\n|\r/g,""),s=yield _r("pwsh",!1);if(s){let n=["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;",`try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`,`catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force } else { throw $_ } } ;`].join(" ")];Ue(`Using pwsh at path: ${s}`),yield cr(`"${s}"`,n)}else{let n=["-NoLogo","-Sta","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;",`if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force }`,`else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`].join(" ")],i=yield _r("powershell",!0);Ue(`Using powershell at path: ${i}`),yield cr(`"${i}"`,n)}})}function tJ(t,e){return Er(this,void 0,void 0,function*(){let r=yield _r("unzip",!0),A=[t];Nl()||A.unshift("-q"),A.unshift("-o"),yield cr(`"${r}"`,A,{cwd:e})})}function ky(t){return Er(this,void 0,void 0,function*(){return t||(t=go.join(Fy(),Tu.randomUUID())),yield Tl(t),t})}function Fy(){let t=process.env.RUNNER_TEMP||"";return(0,yy.ok)(t,"Expected RUNNER_TEMP to be defined"),t}function Du(t,e){let r=global[t];return r!==void 0?r:e}var Sy=` +`)}var Dx=class extends Error{constructor(t,e,r){super(Rx(r)),this.request=t,this.headers=e,this.response=r,this.errors=r.errors,this.data=r.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},Tx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],bx=["query","method","url"],hm=/\/api\/v3\/?$/;function kx(t,e,r){if(r){if(typeof e=="string"&&"query"in r)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let n in r)if(bx.includes(n))return Promise.reject(new Error(`[@octokit/graphql] "${n}" cannot be used as variable name`))}let A=typeof e=="string"?Object.assign({query:e},r):e,s=Object.keys(A).reduce((n,i)=>Tx.includes(i)?(n[i]=A[i],n):(n.variables||(n.variables={}),n.variables[i]=A[i],n),{}),o=A.baseUrl||t.endpoint.DEFAULTS.baseUrl;return hm.test(o)&&(s.url=o.replace(hm,"/api/graphql")),t(s).then(n=>{if(n.data.errors){let i={};for(let a of Object.keys(n.headers))i[a]=n.headers[a];throw new Dx(s,i,n.data)}return n.data.data})}function zl(t,e){let r=t.defaults(e);return Object.assign((s,o)=>kx(r,s,o),{defaults:zl.bind(null,r),endpoint:r.endpoint})}var C2=zl(so,{headers:{"user-agent":`octokit-graphql.js/${yx} ${gr()}`},method:"POST",url:"/graphql"});function Qm(t){return zl(t,{method:"POST",url:"/graphql"})}var Zl="(?:[a-zA-Z0-9_-]+)",Bm="\\.",Im=new RegExp(`^${Zl}${Bm}${Zl}${Bm}${Zl}$`),Fx=Im.test.bind(Im);async function Sx(t){let e=Fx(t),r=t.startsWith("v1.")||t.startsWith("ghs_"),A=t.startsWith("ghu_");return{type:"token",token:t,tokenType:e?"app":r?"installation":A?"user-to-server":"oauth"}}function Nx(t){return t.split(/\./).length===3?`bearer ${t}`:`token ${t}`}async function Ux(t,e,r,A){let s=e.endpoint.merge(r,A);return s.headers.authorization=Nx(t),e(s)}var Cm=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(Sx.bind(null,e),{hook:Ux.bind(null,e)})};var jl="7.0.6";var dm=()=>{},Gx=console.warn.bind(console),Lx=console.error.bind(console);function Mx(t={}){return typeof t.debug!="function"&&(t.debug=dm),typeof t.info!="function"&&(t.info=dm),typeof t.warn!="function"&&(t.warn=Gx),typeof t.error!="function"&&(t.error=Lx),t}var fm=`octokit-core.js/${jl} ${gr()}`,Di=class{static VERSION=jl;static defaults(e){return class extends this{constructor(...A){let s=A[0]||{};if(typeof e=="function"){super(e(s));return}super(Object.assign({},e,s,s.userAgent&&e.userAgent?{userAgent:`${s.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let r=this.plugins;return class extends this{static plugins=r.concat(e.filter(s=>!r.includes(s)))}}constructor(e={}){let r=new Jp.Collection,A={baseUrl:so.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:r.bind(null,"request")}),mediaType:{previews:[],format:""}};if(A.headers["user-agent"]=e.userAgent?`${e.userAgent} ${fm}`:fm,e.baseUrl&&(A.baseUrl=e.baseUrl),e.previews&&(A.mediaType.previews=e.previews),e.timeZone&&(A.headers["time-zone"]=e.timeZone),this.request=so.defaults(A),this.graphql=Qm(this.request).defaults(A),this.log=Mx(e.log),this.hook=r,e.authStrategy){let{authStrategy:o,...n}=e,i=o(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:n},e.auth));r.wrap("request",i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let o=Cm(e.auth);r.wrap("request",o.hook),this.auth=o}let s=this.constructor;for(let o=0;o({async next(){if(!i)return{done:!0};try{let a=await s({method:o,url:i,headers:n}),c=Jx(a);if(i=((c.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!i&&"total_commits"in c.data){let g=new URL(c.url),l=g.searchParams,u=parseInt(l.get("page")||"1",10),E=parseInt(l.get("per_page")||"250",10);u*E{if(s.done)return e;let o=!1;function n(){o=!0}return e=e.concat(A?A(s.value,n):s.value.data),o?e:wm(t,e,r,A)})}var O2=Object.assign(mm,{iterator:eu});function tu(t){return{paginate:Object.assign(mm.bind(null,t),{iterator:eu.bind(null,t)})}}tu.VERSION=_x;var H2=new qA,ru=Mp(),Px={baseUrl:ru,request:{agent:Gp(ru),fetch:Lp(ru)}},ym=Di.plugin($l,tu).defaults(Px);function Rm(t,e){let r=Object.assign({},e||{}),A=Up(t,r);A&&(r.auth=A);let s=vl(r.userAgent);return s&&(r.userAgent=s),r}var z2=new qA;function Dm(t,e,...r){let A=ym.plugin(...r);return new A(Rm(t,e))}import*as Ru from"crypto";import*as Vr from"fs";var K_=Qr(wu(),1);import*as go from"path";var _i=Qr(wu(),1);import*as Cy from"stream";import*as dy from"util";import{ok as $_}from"assert";var Iy=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Oi=class{constructor(e,r,A){if(e<1)throw new Error("max attempts should be greater than or equal to 1");if(this.maxAttempts=e,this.minSeconds=Math.floor(r),this.maxSeconds=Math.floor(A),this.minSeconds>this.maxSeconds)throw new Error("min seconds should be less than or equal to max seconds")}execute(e,r){return Iy(this,void 0,void 0,function*(){let A=1;for(;AsetTimeout(r,e*1e3))})}};var Er=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Yi=class extends Error{constructor(e){super(`Unexpected HTTP response: ${e}`),this.httpStatusCode=e,Object.setPrototypeOf(this,new.target.prototype)}},fy=process.platform==="win32",zV=process.platform==="darwin",eJ="actions/tool-cache";function py(t,e,r,A){return Er(this,void 0,void 0,function*(){e=e||go.join(Ry(),Ru.randomUUID()),yield Dl(go.dirname(e)),Ue(`Downloading ${t}`),Ue(`Destination ${e}`);let s=3,o=yu("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS",10),n=yu("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS",20);return yield new Oi(s,o,n).execute(()=>Er(this,void 0,void 0,function*(){return yield tJ(t,e||"",r,A)}),a=>!(a instanceof Yi&&a.httpStatusCode&&a.httpStatusCode<500&&a.httpStatusCode!==408&&a.httpStatusCode!==429))})}function tJ(t,e,r,A){return Er(this,void 0,void 0,function*(){if(Vr.existsSync(e))throw new Error(`Destination file path ${e} already exists`);let s=new $s(eJ,[],{allowRetries:!1});r&&(Ue("set auth"),A===void 0&&(A={}),A.authorization=r);let o=yield s.get(t,A);if(o.message.statusCode!==200){let g=new Yi(o.message.statusCode);throw Ue(`Failed to download from "${t}". Code(${o.message.statusCode}) Message(${o.message.statusMessage})`),g}let n=dy.promisify(Cy.pipeline),a=yu("TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY",()=>o.message)(),c=!1;try{return yield n(a,Vr.createWriteStream(e)),Ue("download complete"),c=!0,e}finally{if(!c){Ue("download failed");try{yield Ip(e)}catch(g){Ue(`Failed to delete '${e}'. ${g.message}`)}}}})}function my(t,e){return Er(this,arguments,void 0,function*(r,A,s="xz"){if(!r)throw new Error("parameter 'file' is required");A=yield yy(A),Ue("Checking tar --version");let o="";yield cr("tar --version",[],{ignoreReturnCode:!0,silent:!0,listeners:{stdout:g=>o+=g.toString(),stderr:g=>o+=g.toString()}}),Ue(o.trim());let n=o.toUpperCase().includes("GNU TAR"),i;s instanceof Array?i=s:i=[s],Fl()&&!s.includes("v")&&i.push("-v");let a=A,c=r;return fy&&n&&(i.push("--force-local"),a=A.replace(/\\/g,"/"),c=r.replace(/\\/g,"/")),n&&(i.push("--warning=no-unknown-keyword"),i.push("--overwrite")),i.push("-C",a,"-f",c),yield cr("tar",i),A})}function wy(t,e){return Er(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'file' is required");return e=yield yy(e),fy?yield rJ(t,e):yield AJ(t,e),e})}function rJ(t,e){return Er(this,void 0,void 0,function*(){let r=t.replace(/'/g,"''").replace(/"|\n|\r/g,""),A=e.replace(/'/g,"''").replace(/"|\n|\r/g,""),s=yield Jr("pwsh",!1);if(s){let n=["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;",`try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`,`catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force } else { throw $_ } } ;`].join(" ")];Ue(`Using pwsh at path: ${s}`),yield cr(`"${s}"`,n)}else{let n=["-NoLogo","-Sta","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;",`if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force }`,`else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`].join(" ")],i=yield Jr("powershell",!0);Ue(`Using powershell at path: ${i}`),yield cr(`"${i}"`,n)}})}function AJ(t,e){return Er(this,void 0,void 0,function*(){let r=yield Jr("unzip",!0),A=[t];Fl()||A.unshift("-q"),A.unshift("-o"),yield cr(`"${r}"`,A,{cwd:e})})}function yy(t){return Er(this,void 0,void 0,function*(){return t||(t=go.join(Ry(),Ru.randomUUID())),yield Dl(t),t})}function Ry(){let t=process.env.RUNNER_TEMP||"";return $_(t,"Expected RUNNER_TEMP to be defined"),t}function yu(t,e){let r=global[t];return r!==void 0?r:e}var Dy=` fragment releaseFields on Release { tagName releaseAssets(first: 50) { @@ -58,7 +58,7 @@ ${o}`;break;case"retry":Zf(o)&&(r[s]=o);break;case"id":jf(o)&&(r[s]=o);break;cas } } } - `;(async()=>{let t=Fm(""),e=bp("zb-version"),r=e?{query:` + `;(async()=>{let t=Dm(""),e=Rp("zb-version"),r=e?{query:` query releaseAssetsForVersion($tagName: String!) { repository(owner: "256lights", repo: "zb") { release(tagName: $tagName) { @@ -67,7 +67,7 @@ ${o}`;break;case"retry":Zf(o)&&(r[s]=o);break;case"id":jf(o)&&(r[s]=o);break;cas } } - ${Sy} + ${Dy} `,tagName:"v"+e}:{query:` query releaseAssetsForLatest { repository(owner: "256lights", repo: "zb") { @@ -77,8 +77,8 @@ ${o}`;break;case"retry":Zf(o)&&(r[s]=o);break;case"id":jf(o)&&(r[s]=o);break;cas } } - ${Sy} - `},s=(await t.graphql(r)).repository.release,o=s?.releaseAssets?.nodes||[],n;if(hr.platform==="darwin"&&hr.arch==="arm64"?n=o.find(({name:c})=>c.includes("aarch64-apple-macos")):hr.platform==="linux"&&hr.arch==="x64"&&(n=o.find(({name:c})=>c.includes("x86_64-unknown-linux"))),!n){kp(`No download found for ${hr.arch}-${hr.platform} version ${s?.tagName||e}`);return}let i=await Dy(n.downloadUrl),a=n.downloadUrl.endsWith(".zip")?await by(i):await Ty(i);await cr(Ny.default.join(a,"install"),["--single-user","--no-systemd","--no-launchd"])})(); + ${Dy} + `},s=(await t.graphql(r)).repository.release,o=s?.releaseAssets?.nodes||[],n;if(hr.platform==="darwin"&&hr.arch==="arm64"?n=o.find(({name:c})=>c.includes("aarch64-apple-macos")):hr.platform==="linux"&&hr.arch==="x64"&&(n=o.find(({name:c})=>c.includes("x86_64-unknown-linux"))),!n){Dp(`No download found for ${hr.arch}-${hr.platform} version ${s?.tagName||e}`);return}let i=await py(n.downloadUrl),a=n.downloadUrl.endsWith(".zip")?await wy(i):await my(i);await cr(sJ.join(a,"install"),["--single-user","--no-systemd","--no-launchd"])})(); /** * @license * Copyright 2026 The zb Authors From 2a6e44d6330e746a5e27a76b21e85c06a639e912 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 16:40:47 -0700 Subject: [PATCH 08/23] Set format to commonjs --- .../actions/setup-zb/{build.js => build.mjs} | 2 +- .github/actions/setup-zb/dist/main.js | 64 +++++++++---------- .github/actions/setup-zb/package.json | 4 +- 3 files changed, 35 insertions(+), 35 deletions(-) rename .github/actions/setup-zb/{build.js => build.mjs} (95%) diff --git a/.github/actions/setup-zb/build.js b/.github/actions/setup-zb/build.mjs similarity index 95% rename from .github/actions/setup-zb/build.js rename to .github/actions/setup-zb/build.mjs index 31ae67a..266f02d 100644 --- a/.github/actions/setup-zb/build.js +++ b/.github/actions/setup-zb/build.mjs @@ -13,6 +13,6 @@ await esbuild.build({ minify: true, platform: 'node', target: ['node24.0'], - format: 'esm', + format: 'cjs', outfile: 'dist/main.js', }); diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index ecb50a4..cfa2df0 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -1,54 +1,54 @@ -var Ty=Object.create;var Du=Object.defineProperty;var by=Object.getOwnPropertyDescriptor;var ky=Object.getOwnPropertyNames;var Fy=Object.getPrototypeOf,Sy=Object.prototype.hasOwnProperty;var C=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var B=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var Ny=(t,e,r,A)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ky(e))!Sy.call(t,s)&&s!==r&&Du(t,s,{get:()=>e[s],enumerable:!(A=by(e,s))||A.enumerable});return t};var Qr=(t,e,r)=>(r=t!=null?Ty(Fy(t)):{},Ny(e||!t||!t.__esModule?Du(r,"default",{value:t,enumerable:!0}):r,t));var Uu=B(Zr=>{"use strict";var lJ=C("net"),xy=C("tls"),qi=C("http"),Fu=C("https"),Oy=C("events"),uJ=C("assert"),Yy=C("util");Zr.httpOverHttp=_y;Zr.httpsOverHttp=Jy;Zr.httpOverHttps=Py;Zr.httpsOverHttps=Hy;function _y(t){var e=new yt(t);return e.request=qi.request,e}function Jy(t){var e=new yt(t);return e.request=qi.request,e.createSocket=Su,e.defaultPort=443,e}function Py(t){var e=new yt(t);return e.request=Fu.request,e}function Hy(t){var e=new yt(t);return e.request=Fu.request,e.createSocket=Su,e.defaultPort=443,e}function yt(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||qi.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(A,s,o,n){for(var i=Nu(s,o,n),a=0,c=e.requests.length;a=this.maxSockets){o.requests.push(n);return}o.createSocket(n,function(i){i.on("free",a),i.on("close",c),i.on("agentRemove",c),e.onSocket(i);function a(){o.emit("free",i,n)}function c(g){o.removeSocket(i),i.removeListener("free",a),i.removeListener("close",c),i.removeListener("agentRemove",c)}})};yt.prototype.createSocket=function(e,r){var A=this,s={};A.sockets.push(s);var o=Wi({},A.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(o.localAddress=e.localAddress),o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")),Jt("making CONNECT request");var n=A.request(o);n.useChunkedEncodingByDefault=!1,n.once("response",i),n.once("upgrade",a),n.once("connect",c),n.once("error",g),n.end();function i(l){l.upgrade=!0}function a(l,u,E){process.nextTick(function(){c(l,u,E)})}function c(l,u,E){if(n.removeAllListeners(),u.removeAllListeners(),l.statusCode!==200){Jt("tunneling socket could not be established, statusCode=%d",l.statusCode),u.destroy();var h=new Error("tunneling socket could not be established, statusCode="+l.statusCode);h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}if(E.length>0){Jt("got illegal response body from proxy"),u.destroy();var h=new Error("got illegal response body from proxy");h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}return Jt("tunneling connection has established"),A.sockets[A.sockets.indexOf(s)]=u,r(u)}function g(l){n.removeAllListeners(),Jt(`tunneling socket could not be established, cause=%s -`,l.message,l.stack);var u=new Error("tunneling socket could not be established, cause="+l.message);u.code="ECONNRESET",e.request.emit("error",u),A.removeSocket(s)}};yt.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var A=this.requests.shift();A&&this.createSocket(A,function(s){A.request.onSocket(s)})}};function Su(t,e){var r=this;yt.prototype.createSocket.call(r,t,function(A){var s=t.request.getHeader("host"),o=Wi({},r.options,{socket:A,servername:s?s.replace(/:.*$/,""):t.host}),n=xy.connect(0,o);r.sockets[r.sockets.indexOf(A)]=n,e(n)})}function Nu(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function Wi(t){for(var e=1,r=arguments.length;e{Gu.exports=Uu()});var $=B((QJ,Lu)=>{Lu.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}});var _=B((BJ,nE)=>{"use strict";var Mu=Symbol.for("undici.error.UND_ERR"),ee=class extends Error{constructor(e){super(e),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&e[Mu]===!0}[Mu]=!0},vu=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),Zi=class extends ee{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[vu]===!0}[vu]=!0},xu=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),ji=class extends ee{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[xu]===!0}[xu]=!0},Ou=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Ki=class extends ee{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&e[Ou]===!0}[Ou]=!0},Yu=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),Xi=class extends ee{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Yu]===!0}[Yu]=!0},_u=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),$i=class extends ee{constructor(e,r,A,s){super(e),this.name="ResponseStatusCodeError",this.message=e||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=s,this.status=r,this.statusCode=r,this.headers=A}static[Symbol.hasInstance](e){return e&&e[_u]===!0}[_u]=!0},Ju=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),ea=class extends ee{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&e[Ju]===!0}[Ju]=!0},Pu=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),ta=class extends ee{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&e[Pu]===!0}[Pu]=!0},Hu=Symbol.for("undici.error.UND_ERR_ABORT"),Eo=class extends ee{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&e[Hu]===!0}[Hu]=!0},Vu=Symbol.for("undici.error.UND_ERR_ABORTED"),ra=class extends Eo{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&e[Vu]===!0}[Vu]=!0},qu=Symbol.for("undici.error.UND_ERR_INFO"),Aa=class extends ee{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&e[qu]===!0}[qu]=!0},Wu=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),sa=class extends ee{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[Wu]===!0}[Wu]=!0},zu=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),oa=class extends ee{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[zu]===!0}[zu]=!0},Zu=Symbol.for("undici.error.UND_ERR_DESTROYED"),na=class extends ee{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&e[Zu]===!0}[Zu]=!0},ju=Symbol.for("undici.error.UND_ERR_CLOSED"),ia=class extends ee{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&e[ju]===!0}[ju]=!0},Ku=Symbol.for("undici.error.UND_ERR_SOCKET"),aa=class extends ee{constructor(e,r){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=r}static[Symbol.hasInstance](e){return e&&e[Ku]===!0}[Ku]=!0},Xu=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),ca=class extends ee{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&e[Xu]===!0}[Xu]=!0},$u=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),ga=class extends ee{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&e[$u]===!0}[$u]=!0},eE=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),la=class extends Error{constructor(e,r,A){super(e),this.name="HTTPParserError",this.code=r?`HPE_${r}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&e[eE]===!0}[eE]=!0},tE=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),ua=class extends ee{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&e[tE]===!0}[tE]=!0},rE=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),Ea=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[rE]===!0}[rE]=!0},AE=Symbol.for("undici.error.UND_ERR_RESPONSE"),ha=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[AE]===!0}[AE]=!0},sE=Symbol.for("undici.error.UND_ERR_PRX_TLS"),Qa=class extends ee{constructor(e,r,A){super(r,{cause:e,...A??{}}),this.name="SecureProxyConnectionError",this.message=r||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&e[sE]===!0}[sE]=!0},oE=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),Ba=class extends ee{constructor(e){super(e),this.name="MessageSizeExceededError",this.message=e||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](e){return e&&e[oE]===!0}get[oE](){return!0}};nE.exports={AbortError:Eo,HTTPParserError:la,UndiciError:ee,HeadersTimeoutError:ji,HeadersOverflowError:Ki,BodyTimeoutError:Xi,RequestContentLengthMismatchError:sa,ConnectTimeoutError:Zi,ResponseStatusCodeError:$i,InvalidArgumentError:ea,InvalidReturnValueError:ta,RequestAbortedError:ra,ClientDestroyedError:na,ClientClosedError:ia,InformationalError:Aa,SocketError:aa,NotSupportedError:ca,ResponseContentLengthMismatchError:oa,BalancedPoolMissingUpstreamError:ga,ResponseExceededMaxSizeError:ua,RequestRetryError:Ea,ResponseError:ha,SecureProxyConnectionError:Qa,MessageSizeExceededError:Ba}});var Qo=B((IJ,iE)=>{"use strict";var ho={},Ia=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let t=0;t{"use strict";var{wellknownHeaderNames:aE,headerNameLowerCasedRecord:Vy}=Qo(),Ca=class t{value=null;left=null;middle=null;right=null;code;constructor(e,r,A){if(A===void 0||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new t(e,r,A):this.value=r}add(e,r){let A=e.length;if(A===0)throw new TypeError("Unreachable");let s=0,o=this;for(;;){let n=e.charCodeAt(s);if(n>127)throw new TypeError("key must be ascii string");if(o.code===n)if(A===++s){o.value=r;break}else if(o.middle!==null)o=o.middle;else{o.middle=new t(e,r,s);break}else if(o.code=65&&(o|=32);s!==null;){if(o===s.code){if(r===++A)return s;s=s.middle;break}s=s.code{"use strict";var XA=C("node:assert"),{kDestroyed:EE,kBodyUsed:jr,kListeners:da,kBody:uE}=$(),{IncomingMessage:qy}=C("node:http"),fo=C("node:stream"),Wy=C("node:net"),{Blob:zy}=C("node:buffer"),Zy=C("node:util"),{stringify:jy}=C("node:querystring"),{EventEmitter:Ky}=C("node:events"),{InvalidArgumentError:Ee}=_(),{headerNameLowerCasedRecord:Xy}=Qo(),{tree:hE}=lE(),[$y,eR]=process.versions.node.split(".").map(t=>Number(t)),Co=class{constructor(e){this[uE]=e,this[jr]=!1}async*[Symbol.asyncIterator](){XA(!this[jr],"disturbed"),this[jr]=!0,yield*this[uE]}};function tR(t){return po(t)?(dE(t)===0&&t.on("data",function(){XA(!1)}),typeof t.readableDidRead!="boolean"&&(t[jr]=!1,Ky.prototype.on.call(t,"data",function(){this[jr]=!0})),t):t&&typeof t.pipeTo=="function"?new Co(t):t&&typeof t!="string"&&!ArrayBuffer.isView(t)&&CE(t)?new Co(t):t}function rR(){}function po(t){return t&&typeof t=="object"&&typeof t.pipe=="function"&&typeof t.on=="function"}function QE(t){if(t===null)return!1;if(t instanceof zy)return!0;if(typeof t!="object")return!1;{let e=t[Symbol.toStringTag];return(e==="Blob"||e==="File")&&("stream"in t&&typeof t.stream=="function"||"arrayBuffer"in t&&typeof t.arrayBuffer=="function")}}function AR(t,e){if(t.includes("?")||t.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=jy(e);return r&&(t+="?"+r),t}function BE(t){let e=parseInt(t,10);return e===Number(t)&&e>=0&&e<=65535}function Io(t){return t!=null&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&(t[4]===":"||t[4]==="s"&&t[5]===":")}function IE(t){if(typeof t=="string"){if(t=new URL(t),!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}if(!t||typeof t!="object")throw new Ee("Invalid URL: The URL argument must be a non-null object.");if(!(t instanceof URL)){if(t.port!=null&&t.port!==""&&BE(t.port)===!1)throw new Ee("Invalid URL: port must be a valid integer or a string representation of an integer.");if(t.path!=null&&typeof t.path!="string")throw new Ee("Invalid URL path: the path must be a string or null/undefined.");if(t.pathname!=null&&typeof t.pathname!="string")throw new Ee("Invalid URL pathname: the pathname must be a string or null/undefined.");if(t.hostname!=null&&typeof t.hostname!="string")throw new Ee("Invalid URL hostname: the hostname must be a string or null/undefined.");if(t.origin!=null&&typeof t.origin!="string")throw new Ee("Invalid URL origin: the origin must be a string or null/undefined.");if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");let e=t.port!=null?t.port:t.protocol==="https:"?443:80,r=t.origin!=null?t.origin:`${t.protocol||""}//${t.hostname||""}:${e}`,A=t.path!=null?t.path:`${t.pathname||""}${t.search||""}`;return r[r.length-1]==="/"&&(r=r.slice(0,r.length-1)),A&&A[0]!=="/"&&(A=`/${A}`),new URL(`${r}${A}`)}if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}function sR(t){if(t=IE(t),t.pathname!=="/"||t.search||t.hash)throw new Ee("invalid url");return t}function oR(t){if(t[0]==="["){let r=t.indexOf("]");return XA(r!==-1),t.substring(1,r)}let e=t.indexOf(":");return e===-1?t:t.substring(0,e)}function nR(t){if(!t)return null;XA(typeof t=="string");let e=oR(t);return Wy.isIP(e)?"":e}function iR(t){return JSON.parse(JSON.stringify(t))}function aR(t){return t!=null&&typeof t[Symbol.asyncIterator]=="function"}function CE(t){return t!=null&&(typeof t[Symbol.iterator]=="function"||typeof t[Symbol.asyncIterator]=="function")}function dE(t){if(t==null)return 0;if(po(t)){let e=t._readableState;return e&&e.objectMode===!1&&e.ended===!0&&Number.isFinite(e.length)?e.length:null}else{if(QE(t))return t.size!=null?t.size:null;if(mE(t))return t.byteLength}return null}function fE(t){return t&&!!(t.destroyed||t[EE]||fo.isDestroyed?.(t))}function cR(t,e){t==null||!po(t)||fE(t)||(typeof t.destroy=="function"?(Object.getPrototypeOf(t).constructor===qy&&(t.socket=null),t.destroy(e)):e&&queueMicrotask(()=>{t.emit("error",e)}),t.destroyed!==!0&&(t[EE]=!0))}var gR=/timeout=(\d+)/;function lR(t){let e=t.toString().match(gR);return e?parseInt(e[1],10)*1e3:null}function pE(t){return typeof t=="string"?Xy[t]??t.toLowerCase():hE.lookup(t)??t.toString("latin1").toLowerCase()}function uR(t){return hE.lookup(t)??t.toString("latin1").toLowerCase()}function ER(t,e){e===void 0&&(e={});for(let r=0;rn.toString("utf8")):o.toString("utf8")}}return"content-length"in e&&"content-disposition"in e&&(e["content-disposition"]=Buffer.from(e["content-disposition"]).toString("latin1")),e}function hR(t){let e=t.length,r=new Array(e),A=!1,s=-1,o,n,i=0;for(let a=0;a{r.close(),r.byobRequest?.respond(0)});else{let o=Buffer.isBuffer(s)?s:Buffer.from(s);o.byteLength&&r.enqueue(new Uint8Array(o))}return r.desiredSize>0},async cancel(r){await e.return()},type:"bytes"})}function pR(t){return t&&typeof t=="object"&&typeof t.append=="function"&&typeof t.delete=="function"&&typeof t.get=="function"&&typeof t.getAll=="function"&&typeof t.has=="function"&&typeof t.set=="function"&&t[Symbol.toStringTag]==="FormData"}function mR(t,e){return"addEventListener"in t?(t.addEventListener("abort",e,{once:!0}),()=>t.removeEventListener("abort",e)):(t.addListener("abort",e),()=>t.removeListener("abort",e))}var wR=typeof String.prototype.toWellFormed=="function",yR=typeof String.prototype.isWellFormed=="function";function wE(t){return wR?`${t}`.toWellFormed():Zy.toUSVString(t)}function RR(t){return yR?`${t}`.isWellFormed():wE(t)===`${t}`}function yE(t){switch(t){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return t>=33&&t<=126}}function DR(t){if(t.length===0)return!1;for(let e=0;e{"use strict";var P=C("node:diagnostics_channel"),ma=C("node:util"),mo=ma.debuglog("undici"),pa=ma.debuglog("fetch"),Br=ma.debuglog("websocket"),bE=!1,UR={beforeConnect:P.channel("undici:client:beforeConnect"),connected:P.channel("undici:client:connected"),connectError:P.channel("undici:client:connectError"),sendHeaders:P.channel("undici:client:sendHeaders"),create:P.channel("undici:request:create"),bodySent:P.channel("undici:request:bodySent"),headers:P.channel("undici:request:headers"),trailers:P.channel("undici:request:trailers"),error:P.channel("undici:request:error"),open:P.channel("undici:websocket:open"),close:P.channel("undici:websocket:close"),socketError:P.channel("undici:websocket:socket_error"),ping:P.channel("undici:websocket:ping"),pong:P.channel("undici:websocket:pong")};if(mo.enabled||pa.enabled){let t=pa.enabled?pa:mo;P.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),P.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),P.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s using %s%s errored - %s",`${o}${s?`:${s}`:""}`,A,r,n.message)}),P.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)}),P.channel("undici:request:headers").subscribe(e=>{let{request:{method:r,path:A,origin:s},response:{statusCode:o}}=e;t("received response to %s %s/%s - HTTP %d",r,s,A,o)}),P.channel("undici:request:trailers").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("trailers received from %s %s/%s",r,s,A)}),P.channel("undici:request:error").subscribe(e=>{let{request:{method:r,path:A,origin:s},error:o}=e;t("request to %s %s/%s errored - %s",r,s,A,o.message)}),bE=!0}if(Br.enabled){if(!bE){let t=mo.enabled?mo:Br;P.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),P.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),P.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s%s using %s%s errored - %s",o,s?`:${s}`:"",A,r,n.message)}),P.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)})}P.channel("undici:websocket:open").subscribe(t=>{let{address:{address:e,port:r}}=t;Br("connection opened %s%s",e,r?`:${r}`:"")}),P.channel("undici:websocket:close").subscribe(t=>{let{websocket:e,code:r,reason:A}=t;Br("closed connection to %s - %s %s",e.url,r,A)}),P.channel("undici:websocket:socket_error").subscribe(t=>{Br("connection errored - %s",t.message)}),P.channel("undici:websocket:ping").subscribe(t=>{Br("ping received")}),P.channel("undici:websocket:pong").subscribe(t=>{Br("pong received")})}kE.exports={channels:UR}});var UE=B((pJ,NE)=>{"use strict";var{InvalidArgumentError:q,NotSupportedError:GR}=_(),Rt=C("node:assert"),{isValidHTTPToken:SE,isValidHeaderValue:$A,isStream:LR,destroy:MR,isBuffer:vR,isFormDataLike:xR,isIterable:OR,isBlobLike:YR,buildURL:_R,validateHandler:JR,getServerName:PR,normalizedMethodRecords:HR}=v(),{channels:lt}=Kr(),{headerNameLowerCasedRecord:FE}=Qo(),VR=/[^\u0021-\u00ff]/,He=Symbol("handler"),wa=class{constructor(e,{path:r,method:A,body:s,headers:o,query:n,idempotent:i,blocking:a,upgrade:c,headersTimeout:g,bodyTimeout:l,reset:u,throwOnError:E,expectContinue:h,servername:d},I){if(typeof r!="string")throw new q("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&A!=="CONNECT")throw new q("path must be an absolute URL or start with a slash");if(VR.test(r))throw new q("invalid request path");if(typeof A!="string")throw new q("method must be a string");if(HR[A]===void 0&&!SE(A))throw new q("invalid request method");if(c&&typeof c!="string")throw new q("upgrade must be a string");if(c&&!$A(c))throw new q("invalid upgrade header");if(g!=null&&(!Number.isFinite(g)||g<0))throw new q("invalid headersTimeout");if(l!=null&&(!Number.isFinite(l)||l<0))throw new q("invalid bodyTimeout");if(u!=null&&typeof u!="boolean")throw new q("invalid reset");if(h!=null&&typeof h!="boolean")throw new q("invalid expectContinue");if(this.headersTimeout=g,this.bodyTimeout=l,this.throwOnError=E===!0,this.method=A,this.abort=null,s==null)this.body=null;else if(LR(s)){this.body=s;let Q=this.body._readableState;(!Q||!Q.autoDestroy)&&(this.endHandler=function(){MR(this)},this.body.on("end",this.endHandler)),this.errorHandler=p=>{this.abort?this.abort(p):this.error=p},this.body.on("error",this.errorHandler)}else if(vR(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if(typeof s=="string")this.body=s.length?Buffer.from(s):null;else if(xR(s)||OR(s)||YR(s))this.body=s;else throw new q("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=c||null,this.path=n?_R(r,n):r,this.origin=e,this.idempotent=i??(A==="HEAD"||A==="GET"),this.blocking=a??!1,this.reset=u??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=h??!1,Array.isArray(o)){if(o.length%2!==0)throw new q("headers array must be even");for(let Q=0;Q{"use strict";var qR=C("node:events"),yo=class extends qR{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){let r=Array.isArray(e[0])?e[0]:e,A=this.dispatch.bind(this);for(let s of r)if(s!=null){if(typeof s!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof s}`);if(A=s(A),A==null||typeof A!="function"||A.length!==2)throw new TypeError("invalid interceptor")}return new ya(this,A)}},ya=class extends yo{#e=null;#t=null;constructor(e,r){super(),this.#e=e,this.#t=r}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};GE.exports=yo});var tA=B((wJ,LE)=>{"use strict";var WR=es(),{ClientDestroyedError:Ra,ClientClosedError:zR,InvalidArgumentError:Xr}=_(),{kDestroy:ZR,kClose:jR,kClosed:ts,kDestroyed:$r,kDispatch:Da,kInterceptors:Ir}=$(),Dt=Symbol("onDestroyed"),eA=Symbol("onClosed"),Ro=Symbol("Intercepted Dispatch"),Ta=Symbol("webSocketOptions"),ba=class extends WR{constructor(e){super(),this[$r]=!1,this[Dt]=null,this[ts]=!1,this[eA]=[],this[Ta]=e?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[Ta].maxFragments??131072,maxPayloadSize:this[Ta].maxPayloadSize??128*1024*1024}}get destroyed(){return this[$r]}get closed(){return this[ts]}get interceptors(){return this[Ir]}set interceptors(e){if(e){for(let r=e.length-1;r>=0;r--)if(typeof this[Ir][r]!="function")throw new Xr("interceptor must be an function")}this[Ir]=e}close(e){if(e===void 0)return new Promise((A,s)=>{this.close((o,n)=>o?s(o):A(n))});if(typeof e!="function")throw new Xr("invalid callback");if(this[$r]){queueMicrotask(()=>e(new Ra,null));return}if(this[ts]){this[eA]?this[eA].push(e):queueMicrotask(()=>e(null,null));return}this[ts]=!0,this[eA].push(e);let r=()=>{let A=this[eA];this[eA]=null;for(let s=0;sthis.destroy()).then(()=>{queueMicrotask(r)})}destroy(e,r){if(typeof e=="function"&&(r=e,e=null),r===void 0)return new Promise((s,o)=>{this.destroy(e,(n,i)=>n?o(n):s(i))});if(typeof r!="function")throw new Xr("invalid callback");if(this[$r]){this[Dt]?this[Dt].push(r):queueMicrotask(()=>r(null,null));return}e||(e=new Ra),this[$r]=!0,this[Dt]=this[Dt]||[],this[Dt].push(r);let A=()=>{let s=this[Dt];this[Dt]=null;for(let o=0;o{queueMicrotask(A)})}[Ro](e,r){if(!this[Ir]||this[Ir].length===0)return this[Ro]=this[Da],this[Da](e,r);let A=this[Da].bind(this);for(let s=this[Ir].length-1;s>=0;s--)A=this[Ir][s](A);return this[Ro]=A,A(e,r)}dispatch(e,r){if(!r||typeof r!="object")throw new Xr("handler must be an object");try{if(!e||typeof e!="object")throw new Xr("opts must be an object.");if(this[$r]||this[Dt])throw new Ra;if(this[ts])throw new zR;return this[Ro](e,r)}catch(A){if(typeof r.onError!="function")throw new Xr("invalid onError method");return r.onError(A),!1}}};LE.exports=ba});var La=B((yJ,OE)=>{"use strict";var rA=0,ka=1e3,Fa=(ka>>1)-1,Tt,Sa=Symbol("kFastTimer"),bt=[],Na=-2,Ua=-1,vE=0,ME=1;function Ga(){rA+=Fa;let t=0,e=bt.length;for(;t=r._idleStart+r._idleTimeout&&(r._state=Ua,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===Ua?(r._state=Na,--e!==0&&(bt[t]=bt[e])):++t}bt.length=e,bt.length!==0&&xE()}function xE(){Tt?Tt.refresh():(clearTimeout(Tt),Tt=setTimeout(Ga,Fa),Tt.unref&&Tt.unref())}var Do=class{[Sa]=!0;_state=Na;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,r,A){this._onTimeout=e,this._idleTimeout=r,this._timerArg=A,this.refresh()}refresh(){this._state===Na&&bt.push(this),(!Tt||bt.length===1)&&xE(),this._state=vE}clear(){this._state=Ua,this._idleStart=-1}};OE.exports={setTimeout(t,e,r){return e<=ka?setTimeout(t,e,r):new Do(t,e,r)},clearTimeout(t){t[Sa]?t.clear():clearTimeout(t)},setFastTimeout(t,e,r){return new Do(t,e,r)},clearFastTimeout(t){t.clear()},now(){return rA},tick(t=0){rA+=t-ka+1,Ga(),Ga()},reset(){rA=0,bt.length=0,clearTimeout(Tt),Tt=null},kFastTimer:Sa}});var rs=B((TJ,HE)=>{"use strict";var KR=C("node:net"),YE=C("node:assert"),PE=v(),{InvalidArgumentError:XR,ConnectTimeoutError:$R}=_(),To=La();function _E(){}var Ma,va;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?va=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry(r=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:A}=this._sessionCache.keys().next();this._sessionCache.delete(A)}this._sessionCache.set(e,r)}}};function eD({allowH2:t,maxCachedSessions:e,socketPath:r,timeout:A,session:s,...o}){if(e!=null&&(!Number.isInteger(e)||e<0))throw new XR("maxCachedSessions must be a positive integer or zero");let n={path:r,...o},i=new va(e??100);return A=A??1e4,t=t??!1,function({hostname:c,host:g,protocol:l,port:u,servername:E,localAddress:h,httpSocket:d},I){let Q;if(l==="https:"){Ma||(Ma=C("node:tls")),E=E||n.servername||PE.getServerName(g)||null;let D=E||c;YE(D);let R=s||i.get(D)||null;u=u||443,Q=Ma.connect({highWaterMark:16384,...n,servername:E,session:R,localAddress:h,ALPNProtocols:t?["http/1.1","h2"]:["http/1.1"],socket:d,port:u,host:c}),Q.on("session",function(H){i.set(D,H)})}else YE(!d,"httpSocket can only be sent on TLS update"),u=u||80,Q=KR.connect({highWaterMark:64*1024,...n,localAddress:h,port:u,host:c});if(n.keepAlive==null||n.keepAlive){let D=n.keepAliveInitialDelay===void 0?6e4:n.keepAliveInitialDelay;Q.setKeepAlive(!0,D)}let p=tD(new WeakRef(Q),{timeout:A,hostname:c,port:u});return Q.setNoDelay(!0).once(l==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(p),I){let D=I;I=null,D(null,this)}}).on("error",function(D){if(queueMicrotask(p),I){let R=I;I=null,R(D)}}),Q}}var tD=process.platform==="win32"?(t,e)=>{if(!e.timeout)return _E;let r=null,A=null,s=To.setFastTimeout(()=>{r=setImmediate(()=>{A=setImmediate(()=>JE(t.deref(),e))})},e.timeout);return()=>{To.clearFastTimeout(s),clearImmediate(r),clearImmediate(A)}}:(t,e)=>{if(!e.timeout)return _E;let r=null,A=To.setFastTimeout(()=>{r=setImmediate(()=>{JE(t.deref(),e)})},e.timeout);return()=>{To.clearFastTimeout(A),clearImmediate(r)}};function JE(t,e){if(t==null)return;let r="Connect Timeout Error";Array.isArray(t.autoSelectFamilyAttemptedAddresses)?r+=` (attempted addresses: ${t.autoSelectFamilyAttemptedAddresses.join(", ")},`:r+=` (attempted address: ${e.hostname}:${e.port},`,r+=` timeout: ${e.timeout}ms)`,PE.destroy(t,new $R(r))}HE.exports=eD});var VE=B(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.enumToMap=void 0;function rD(t){let e={};return Object.keys(t).forEach(r=>{let A=t[r];typeof A=="number"&&(e[r]=A)}),e}bo.enumToMap=rD});var qE=B(m=>{"use strict";Object.defineProperty(m,"__esModule",{value:!0});m.SPECIAL_HEADERS=m.HEADER_STATE=m.MINOR=m.MAJOR=m.CONNECTION_TOKEN_CHARS=m.HEADER_CHARS=m.TOKEN=m.STRICT_TOKEN=m.HEX=m.URL_CHAR=m.STRICT_URL_CHAR=m.USERINFO_CHARS=m.MARK=m.ALPHANUM=m.NUM=m.HEX_MAP=m.NUM_MAP=m.ALPHA=m.FINISH=m.H_METHOD_MAP=m.METHOD_MAP=m.METHODS_RTSP=m.METHODS_ICE=m.METHODS_HTTP=m.METHODS=m.LENIENT_FLAGS=m.FLAGS=m.TYPE=m.ERROR=void 0;var AD=VE(),sD;(function(t){t[t.OK=0]="OK",t[t.INTERNAL=1]="INTERNAL",t[t.STRICT=2]="STRICT",t[t.LF_EXPECTED=3]="LF_EXPECTED",t[t.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",t[t.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",t[t.INVALID_METHOD=6]="INVALID_METHOD",t[t.INVALID_URL=7]="INVALID_URL",t[t.INVALID_CONSTANT=8]="INVALID_CONSTANT",t[t.INVALID_VERSION=9]="INVALID_VERSION",t[t.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",t[t.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",t[t.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",t[t.INVALID_STATUS=13]="INVALID_STATUS",t[t.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",t[t.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",t[t.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",t[t.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",t[t.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",t[t.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",t[t.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",t[t.PAUSED=21]="PAUSED",t[t.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",t[t.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",t[t.USER=24]="USER"})(sD=m.ERROR||(m.ERROR={}));var oD;(function(t){t[t.BOTH=0]="BOTH",t[t.REQUEST=1]="REQUEST",t[t.RESPONSE=2]="RESPONSE"})(oD=m.TYPE||(m.TYPE={}));var nD;(function(t){t[t.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",t[t.CHUNKED=8]="CHUNKED",t[t.UPGRADE=16]="UPGRADE",t[t.CONTENT_LENGTH=32]="CONTENT_LENGTH",t[t.SKIPBODY=64]="SKIPBODY",t[t.TRAILING=128]="TRAILING",t[t.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(nD=m.FLAGS||(m.FLAGS={}));var iD;(function(t){t[t.HEADERS=1]="HEADERS",t[t.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",t[t.KEEP_ALIVE=4]="KEEP_ALIVE"})(iD=m.LENIENT_FLAGS||(m.LENIENT_FLAGS={}));var F;(function(t){t[t.DELETE=0]="DELETE",t[t.GET=1]="GET",t[t.HEAD=2]="HEAD",t[t.POST=3]="POST",t[t.PUT=4]="PUT",t[t.CONNECT=5]="CONNECT",t[t.OPTIONS=6]="OPTIONS",t[t.TRACE=7]="TRACE",t[t.COPY=8]="COPY",t[t.LOCK=9]="LOCK",t[t.MKCOL=10]="MKCOL",t[t.MOVE=11]="MOVE",t[t.PROPFIND=12]="PROPFIND",t[t.PROPPATCH=13]="PROPPATCH",t[t.SEARCH=14]="SEARCH",t[t.UNLOCK=15]="UNLOCK",t[t.BIND=16]="BIND",t[t.REBIND=17]="REBIND",t[t.UNBIND=18]="UNBIND",t[t.ACL=19]="ACL",t[t.REPORT=20]="REPORT",t[t.MKACTIVITY=21]="MKACTIVITY",t[t.CHECKOUT=22]="CHECKOUT",t[t.MERGE=23]="MERGE",t[t["M-SEARCH"]=24]="M-SEARCH",t[t.NOTIFY=25]="NOTIFY",t[t.SUBSCRIBE=26]="SUBSCRIBE",t[t.UNSUBSCRIBE=27]="UNSUBSCRIBE",t[t.PATCH=28]="PATCH",t[t.PURGE=29]="PURGE",t[t.MKCALENDAR=30]="MKCALENDAR",t[t.LINK=31]="LINK",t[t.UNLINK=32]="UNLINK",t[t.SOURCE=33]="SOURCE",t[t.PRI=34]="PRI",t[t.DESCRIBE=35]="DESCRIBE",t[t.ANNOUNCE=36]="ANNOUNCE",t[t.SETUP=37]="SETUP",t[t.PLAY=38]="PLAY",t[t.PAUSE=39]="PAUSE",t[t.TEARDOWN=40]="TEARDOWN",t[t.GET_PARAMETER=41]="GET_PARAMETER",t[t.SET_PARAMETER=42]="SET_PARAMETER",t[t.REDIRECT=43]="REDIRECT",t[t.RECORD=44]="RECORD",t[t.FLUSH=45]="FLUSH"})(F=m.METHODS||(m.METHODS={}));m.METHODS_HTTP=[F.DELETE,F.GET,F.HEAD,F.POST,F.PUT,F.CONNECT,F.OPTIONS,F.TRACE,F.COPY,F.LOCK,F.MKCOL,F.MOVE,F.PROPFIND,F.PROPPATCH,F.SEARCH,F.UNLOCK,F.BIND,F.REBIND,F.UNBIND,F.ACL,F.REPORT,F.MKACTIVITY,F.CHECKOUT,F.MERGE,F["M-SEARCH"],F.NOTIFY,F.SUBSCRIBE,F.UNSUBSCRIBE,F.PATCH,F.PURGE,F.MKCALENDAR,F.LINK,F.UNLINK,F.PRI,F.SOURCE];m.METHODS_ICE=[F.SOURCE];m.METHODS_RTSP=[F.OPTIONS,F.DESCRIBE,F.ANNOUNCE,F.SETUP,F.PLAY,F.PAUSE,F.TEARDOWN,F.GET_PARAMETER,F.SET_PARAMETER,F.REDIRECT,F.RECORD,F.FLUSH,F.GET,F.POST];m.METHOD_MAP=AD.enumToMap(F);m.H_METHOD_MAP={};Object.keys(m.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(m.H_METHOD_MAP[t]=m.METHOD_MAP[t])});var aD;(function(t){t[t.SAFE=0]="SAFE",t[t.SAFE_WITH_CB=1]="SAFE_WITH_CB",t[t.UNSAFE=2]="UNSAFE"})(aD=m.FINISH||(m.FINISH={}));m.ALPHA=[];for(let t=65;t<=90;t++)m.ALPHA.push(String.fromCharCode(t)),m.ALPHA.push(String.fromCharCode(t+32));m.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};m.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};m.NUM=["0","1","2","3","4","5","6","7","8","9"];m.ALPHANUM=m.ALPHA.concat(m.NUM);m.MARK=["-","_",".","!","~","*","'","(",")"];m.USERINFO_CHARS=m.ALPHANUM.concat(m.MARK).concat(["%",";",":","&","=","+","$",","]);m.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(m.ALPHANUM);m.URL_CHAR=m.STRICT_URL_CHAR.concat([" ","\f"]);for(let t=128;t<=255;t++)m.URL_CHAR.push(t);m.HEX=m.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);m.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(m.ALPHANUM);m.TOKEN=m.STRICT_TOKEN.concat([" "]);m.HEADER_CHARS=[" "];for(let t=32;t<=255;t++)t!==127&&m.HEADER_CHARS.push(t);m.CONNECTION_TOKEN_CHARS=m.HEADER_CHARS.filter(t=>t!==44);m.MAJOR=m.NUM_MAP;m.MINOR=m.MAJOR;var AA;(function(t){t[t.GENERAL=0]="GENERAL",t[t.CONNECTION=1]="CONNECTION",t[t.CONTENT_LENGTH=2]="CONTENT_LENGTH",t[t.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",t[t.UPGRADE=4]="UPGRADE",t[t.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",t[t.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})(AA=m.HEADER_STATE||(m.HEADER_STATE={}));m.SPECIAL_HEADERS={connection:AA.CONNECTION,"content-length":AA.CONTENT_LENGTH,"proxy-connection":AA.CONNECTION,"transfer-encoding":AA.TRANSFER_ENCODING,upgrade:AA.UPGRADE}});var xa=B((FJ,WE)=>{"use strict";var{Buffer:cD}=C("node:buffer");WE.exports=cD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var ZE=B((SJ,zE)=>{"use strict";var{Buffer:gD}=C("node:buffer");zE.exports=gD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var As=B((NJ,Ah)=>{"use strict";var jE=["GET","HEAD","POST"],lD=new Set(jE),uD=[101,204,205,304],KE=[301,302,303,307,308],ED=new Set(KE),XE=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],hD=new Set(XE),$E=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],QD=new Set($E),BD=["follow","manual","error"],eh=["GET","HEAD","OPTIONS","TRACE"],ID=new Set(eh),CD=["navigate","same-origin","no-cors","cors"],dD=["omit","same-origin","include"],fD=["default","no-store","reload","no-cache","force-cache","only-if-cached"],pD=["content-encoding","content-language","content-location","content-type","content-length"],mD=["half"],th=["CONNECT","TRACE","TRACK"],wD=new Set(th),rh=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],yD=new Set(rh);Ah.exports={subresource:rh,forbiddenMethods:th,requestBodyHeader:pD,referrerPolicy:$E,requestRedirect:BD,requestMode:CD,requestCredentials:dD,requestCache:fD,redirectStatus:KE,corsSafeListedMethods:jE,nullBodyStatus:uD,safeMethods:eh,badPorts:XE,requestDuplex:mD,subresourceSet:yD,badPortsSet:hD,redirectStatusSet:ED,corsSafeListedMethodsSet:lD,safeMethodsSet:ID,forbiddenMethodsSet:wD,referrerPolicySet:QD}});var Ya=B((UJ,sh)=>{"use strict";var Oa=Symbol.for("undici.globalOrigin.1");function RD(){return globalThis[Oa]}function DD(t){if(t===void 0){Object.defineProperty(globalThis,Oa,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let e=new URL(t);if(e.protocol!=="http:"&&e.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${e.protocol}`);Object.defineProperty(globalThis,Oa,{value:e,writable:!0,enumerable:!1,configurable:!1})}sh.exports={getGlobalOrigin:RD,setGlobalOrigin:DD}});var Te=B((GJ,lh)=>{"use strict";var Fo=C("node:assert"),TD=new TextEncoder,ss=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,bD=/[\u000A\u000D\u0009\u0020]/,kD=/[\u0009\u000A\u000C\u000D\u0020]/g,FD=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function SD(t){Fo(t.protocol==="data:");let e=ih(t,!0);e=e.slice(5);let r={position:0},A=sA(",",e,r),s=A.length;if(A=vD(A,!0,!0),r.position>=e.length)return"failure";r.position++;let o=e.slice(s+1),n=ah(o);if(/;(\u0020){0,}base64$/i.test(A)){let a=gh(n);if(n=UD(a),n==="failure")return"failure";A=A.slice(0,-6),A=A.replace(/(\u0020)+$/,""),A=A.slice(0,-1)}A.startsWith(";")&&(A="text/plain"+A);let i=_a(A);return i==="failure"&&(i=_a("text/plain;charset=US-ASCII")),{mimeType:i,body:n}}function ih(t,e=!1){if(!e)return t.href;let r=t.href,A=t.hash.length,s=A===0?r:r.substring(0,r.length-A);return!A&&r.endsWith("#")?s.slice(0,-1):s}function So(t,e,r){let A="";for(;r.position=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function nh(t){return t>=48&&t<=57?t-48:(t&223)-55}function ND(t){let e=t.length,r=new Uint8Array(e),A=0;for(let s=0;st.length)return"failure";e.position++;let A=sA(";",t,e);if(A=ko(A,!1,!0),A.length===0||!ss.test(A))return"failure";let s=r.toLowerCase(),o=A.toLowerCase(),n={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;e.positionbD.test(c),t,e);let i=So(c=>c!==";"&&c!=="=",t,e);if(i=i.toLowerCase(),e.positiont.length)break;let a=null;if(t[e.position]==='"')a=ch(t,e,!0),sA(";",t,e);else if(a=sA(";",t,e),a=ko(a,!1,!0),a.length===0)continue;i.length!==0&&ss.test(i)&&(a.length===0||FD.test(a))&&!n.parameters.has(i)&&n.parameters.set(i,a)}return n}function UD(t){t=t.replace(kD,"");let e=t.length;if(e%4===0&&t.charCodeAt(e-1)===61&&(--e,t.charCodeAt(e-1)===61&&--e),e%4===1||/[^+/0-9A-Za-z]/.test(t.length===e?t:t.substring(0,e)))return"failure";let r=Buffer.from(t,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function ch(t,e,r){let A=e.position,s="";for(Fo(t[e.position]==='"'),e.position++;s+=So(n=>n!=='"'&&n!=="\\",t,e),!(e.position>=t.length);){let o=t[e.position];if(e.position++,o==="\\"){if(e.position>=t.length){s+="\\";break}s+=t[e.position],e.position++}else{Fo(o==='"');break}}return r?s:t.slice(A,e.position)}function GD(t){Fo(t!=="failure");let{parameters:e,essence:r}=t,A=r;for(let[s,o]of e.entries())A+=";",A+=s,A+="=",ss.test(o)||(o=o.replace(/(\\|")/g,"\\$1"),o='"'+o,o+='"'),A+=o;return A}function LD(t){return t===13||t===10||t===9||t===32}function ko(t,e=!0,r=!0){return Ja(t,e,r,LD)}function MD(t){return t===13||t===10||t===9||t===12||t===32}function vD(t,e=!0,r=!0){return Ja(t,e,r,MD)}function Ja(t,e,r,A){let s=0,o=t.length-1;if(e)for(;s0&&A(t.charCodeAt(o));)o--;return s===0&&o===t.length-1?t:t.slice(s,o+1)}function gh(t){let e=t.length;if(65535>e)return String.fromCharCode.apply(null,t);let r="",A=0,s=65535;for(;Ae&&(s=e-A),r+=String.fromCharCode.apply(null,t.subarray(A,A+=s));return r}function xD(t){switch(t.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return t.subtype.endsWith("+json")?"application/json":t.subtype.endsWith("+xml")?"application/xml":""}lh.exports={dataURLProcessor:SD,URLSerializer:ih,collectASequenceOfCodePoints:So,collectASequenceOfCodePointsFast:sA,stringPercentDecode:ah,parseMIMEType:_a,collectAnHTTPQuotedString:ch,serializeAMimeType:GD,removeChars:Ja,removeHTTPWhitespace:ko,minimizeSupportedMimeType:xD,HTTP_TOKEN_CODEPOINTS:ss,isomorphicDecode:gh}});var Qe=B((LJ,uh)=>{"use strict";var{types:ut,inspect:OD}=C("node:util"),{markAsUncloneable:YD}=C("node:worker_threads"),{toUSVString:_D}=v(),f={};f.converters={};f.util={};f.errors={};f.errors.exception=function(t){return new TypeError(`${t.header}: ${t.message}`)};f.errors.conversionFailed=function(t){let e=t.types.length===1?"":" one of",r=`${t.argument} could not be converted to${e}: ${t.types.join(", ")}.`;return f.errors.exception({header:t.prefix,message:r})};f.errors.invalidArgument=function(t){return f.errors.exception({header:t.prefix,message:`"${t.value}" is an invalid ${t.type}.`})};f.brandCheck=function(t,e,r){if(r?.strict!==!1){if(!(t instanceof e)){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}}else if(t?.[Symbol.toStringTag]!==e.prototype[Symbol.toStringTag]){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}};f.argumentLengthCheck=function({length:t},e,r){if(t{});f.util.ConvertToInt=function(t,e,r,A){let s,o;e===64?(s=Math.pow(2,53)-1,r==="unsigned"?o=0:o=Math.pow(-2,53)+1):r==="unsigned"?(o=0,s=Math.pow(2,e)-1):(o=Math.pow(-2,e)-1,s=Math.pow(2,e-1)-1);let n=Number(t);if(n===0&&(n=0),A?.enforceRange===!0){if(Number.isNaN(n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY)throw f.errors.exception({header:"Integer conversion",message:`Could not convert ${f.util.Stringify(t)} to an integer.`});if(n=f.util.IntegerPart(n),ns)throw f.errors.exception({header:"Integer conversion",message:`Value must be between ${o}-${s}, got ${n}.`});return n}return!Number.isNaN(n)&&A?.clamp===!0?(n=Math.min(Math.max(n,o),s),Math.floor(n)%2===0?n=Math.floor(n):n=Math.ceil(n),n):Number.isNaN(n)||n===0&&Object.is(0,n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY?0:(n=f.util.IntegerPart(n),n=n%Math.pow(2,e),r==="signed"&&n>=Math.pow(2,e)-1?n-Math.pow(2,e):n)};f.util.IntegerPart=function(t){let e=Math.floor(Math.abs(t));return t<0?-1*e:e};f.util.Stringify=function(t){switch(f.util.Type(t)){case"Symbol":return`Symbol(${t.description})`;case"Object":return OD(t);case"String":return`"${t}"`;default:return`${t}`}};f.sequenceConverter=function(t){return(e,r,A,s)=>{if(f.util.Type(e)!=="Object")throw f.errors.exception({header:r,message:`${A} (${f.util.Stringify(e)}) is not iterable.`});let o=typeof s=="function"?s():e?.[Symbol.iterator]?.(),n=[],i=0;if(o===void 0||typeof o.next!="function")throw f.errors.exception({header:r,message:`${A} is not iterable.`});for(;;){let{done:a,value:c}=o.next();if(a)break;n.push(t(c,r,`${A}[${i++}]`))}return n}};f.recordConverter=function(t,e){return(r,A,s)=>{if(f.util.Type(r)!=="Object")throw f.errors.exception({header:A,message:`${s} ("${f.util.Type(r)}") is not an Object.`});let o={};if(!ut.isProxy(r)){let i=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let a of i){let c=t(a,A,s),g=e(r[a],A,s);o[c]=g}return o}let n=Reflect.ownKeys(r);for(let i of n)if(Reflect.getOwnPropertyDescriptor(r,i)?.enumerable){let c=t(i,A,s),g=e(r[i],A,s);o[c]=g}return o}};f.interfaceConverter=function(t){return(e,r,A,s)=>{if(s?.strict!==!1&&!(e instanceof t))throw f.errors.exception({header:r,message:`Expected ${A} ("${f.util.Stringify(e)}") to be an instance of ${t.name}.`});return e}};f.dictionaryConverter=function(t){return(e,r,A)=>{let s=f.util.Type(e),o={};if(s==="Null"||s==="Undefined")return o;if(s!=="Object")throw f.errors.exception({header:r,message:`Expected ${e} to be one of: Null, Undefined, Object.`});for(let n of t){let{key:i,defaultValue:a,required:c,converter:g}=n;if(c===!0&&!Object.hasOwn(e,i))throw f.errors.exception({header:r,message:`Missing required key "${i}".`});let l=e[i],u=Object.hasOwn(n,"defaultValue");if(u&&l!==null&&(l??=a()),c||u||l!==void 0){if(l=g(l,r,`${A}.${i}`),n.allowedValues&&!n.allowedValues.includes(l))throw f.errors.exception({header:r,message:`${l} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});o[i]=l}}return o}};f.nullableConverter=function(t){return(e,r,A)=>e===null?e:t(e,r,A)};f.converters.DOMString=function(t,e,r,A){if(t===null&&A?.legacyNullToEmptyString)return"";if(typeof t=="symbol")throw f.errors.exception({header:e,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(t)};f.converters.ByteString=function(t,e,r){let A=f.converters.DOMString(t,e,r);for(let s=0;s255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${s} has a value of ${A.charCodeAt(s)} which is greater than 255.`);return A};f.converters.USVString=_D;f.converters.boolean=function(t){return!!t};f.converters.any=function(t){return t};f.converters["long long"]=function(t,e,r){return f.util.ConvertToInt(t,64,"signed",void 0,e,r)};f.converters["unsigned long long"]=function(t,e,r){return f.util.ConvertToInt(t,64,"unsigned",void 0,e,r)};f.converters["unsigned long"]=function(t,e,r){return f.util.ConvertToInt(t,32,"unsigned",void 0,e,r)};f.converters["unsigned short"]=function(t,e,r,A){return f.util.ConvertToInt(t,16,"unsigned",A,e,r)};f.converters.ArrayBuffer=function(t,e,r,A){if(f.util.Type(t)!=="Object"||!ut.isAnyArrayBuffer(t))throw f.errors.conversionFailed({prefix:e,argument:`${r} ("${f.util.Stringify(t)}")`,types:["ArrayBuffer"]});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t))throw f.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.resizable||t.growable)throw f.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};f.converters.TypedArray=function(t,e,r,A,s){if(f.util.Type(t)!=="Object"||!ut.isTypedArray(t)||t.constructor.name!==e.name)throw f.errors.conversionFailed({prefix:r,argument:`${A} ("${f.util.Stringify(t)}")`,types:[e.name]});if(s?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw f.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw f.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};f.converters.DataView=function(t,e,r,A){if(f.util.Type(t)!=="Object"||!ut.isDataView(t))throw f.errors.exception({header:e,message:`${r} is not a DataView.`});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw f.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw f.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};f.converters.BufferSource=function(t,e,r,A){if(ut.isAnyArrayBuffer(t))return f.converters.ArrayBuffer(t,e,r,{...A,allowShared:!1});if(ut.isTypedArray(t))return f.converters.TypedArray(t,t.constructor,e,r,{...A,allowShared:!1});if(ut.isDataView(t))return f.converters.DataView(t,e,r,{...A,allowShared:!1});throw f.errors.conversionFailed({prefix:e,argument:`${r} ("${f.util.Stringify(t)}")`,types:["BufferSource"]})};f.converters["sequence"]=f.sequenceConverter(f.converters.ByteString);f.converters["sequence>"]=f.sequenceConverter(f.converters["sequence"]);f.converters["record"]=f.recordConverter(f.converters.ByteString,f.converters.ByteString);uh.exports={webidl:f}});var Ge=B((MJ,Dh)=>{"use strict";var{Transform:JD}=C("node:stream"),Eh=C("node:zlib"),{redirectStatusSet:PD,referrerPolicySet:HD,badPortsSet:VD}=As(),{getGlobalOrigin:hh}=Ya(),{collectASequenceOfCodePoints:Cr,collectAnHTTPQuotedString:qD,removeChars:WD,parseMIMEType:zD}=Te(),{performance:ZD}=C("node:perf_hooks"),{isBlobLike:jD,ReadableStreamFrom:KD,isValidHTTPToken:Qh,normalizedMethodRecordsBase:XD}=v(),dr=C("node:assert"),{isUint8Array:$D}=C("node:util/types"),{webidl:os}=Qe(),Bh=[],Uo;try{Uo=C("node:crypto");let t=["sha256","sha384","sha512"];Bh=Uo.getHashes().filter(e=>t.includes(e))}catch{}function Ih(t){let e=t.urlList,r=e.length;return r===0?null:e[r-1].toString()}function e0(t,e){if(!PD.has(t.status))return null;let r=t.headersList.get("location",!0);return r!==null&&dh(r)&&(Ch(r)||(r=t0(r)),r=new URL(r,Ih(t))),r&&!r.hash&&(r.hash=e),r}function Ch(t){for(let e=0;e126||r<32)return!1}return!0}function t0(t){return Buffer.from(t,"binary").toString("utf8")}function is(t){return t.urlList[t.urlList.length-1]}function r0(t){let e=is(t);return yh(e)&&VD.has(e.port)?"blocked":"allowed"}function A0(t){return t instanceof Error||t?.constructor?.name==="Error"||t?.constructor?.name==="DOMException"}function s0(t){for(let e=0;e=32&&r<=126||r>=128&&r<=255))return!1}return!0}var o0=Qh;function dh(t){return(t[0]===" "||t[0]===" "||t[t.length-1]===" "||t[t.length-1]===" "||t.includes(` -`)||t.includes("\r")||t.includes("\0"))===!1}function n0(t,e){let{headersList:r}=e,A=(r.get("referrer-policy",!0)??"").split(","),s="";if(A.length>0)for(let o=A.length;o!==0;o--){let n=A[o-1].trim();if(HD.has(n)){s=n;break}}s!==""&&(t.referrerPolicy=s)}function i0(){return"allowed"}function a0(){return"success"}function c0(){return"success"}function g0(t){let e=null;e=t.mode,t.headersList.set("sec-fetch-mode",e,!0)}function l0(t){let e=t.origin;if(!(e==="client"||e===void 0)){if(t.responseTainting==="cors"||t.mode==="websocket")t.headersList.append("origin",e,!0);else if(t.method!=="GET"&&t.method!=="HEAD"){switch(t.referrerPolicy){case"no-referrer":e=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":t.origin&&Ha(t.origin)&&!Ha(is(t))&&(e=null);break;case"same-origin":Go(t,is(t))||(e=null);break;default:}t.headersList.append("origin",e,!0)}}}function oA(t,e){return t}function u0(t,e,r){return!t?.startTime||t.startTime4096&&(A=s);let o=Go(t,A),n=ns(A)&&!ns(t.url);switch(e){case"origin":return s??Pa(r,!0);case"unsafe-url":return A;case"same-origin":return o?s:"no-referrer";case"origin-when-cross-origin":return o?A:s;case"strict-origin-when-cross-origin":{let i=is(t);return Go(A,i)?A:ns(A)&&!ns(i)?"no-referrer":s}default:return n?"no-referrer":s}}function Pa(t,e){return dr(t instanceof URL),t=new URL(t),t.protocol==="file:"||t.protocol==="about:"||t.protocol==="blank:"?"no-referrer":(t.username="",t.password="",t.hash="",e&&(t.pathname="",t.search=""),t)}function ns(t){if(!(t instanceof URL))return!1;if(t.href==="about:blank"||t.href==="about:srcdoc"||t.protocol==="data:"||t.protocol==="file:")return!0;return e(t.origin);function e(r){if(r==null||r==="null")return!1;let A=new URL(r);return!!(A.protocol==="https:"||A.protocol==="wss:"||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(A.hostname)||A.hostname==="localhost"||A.hostname.includes("localhost.")||A.hostname.endsWith(".localhost"))}}function I0(t,e){if(Uo===void 0)return!0;let r=ph(e);if(r==="no metadata"||r.length===0)return!0;let A=d0(r),s=f0(r,A);for(let o of s){let n=o.algo,i=o.hash,a=Uo.createHash(n).update(t).digest("base64");if(a[a.length-1]==="="&&(a[a.length-2]==="="?a=a.slice(0,-2):a=a.slice(0,-1)),p0(a,i))return!0}return!1}var C0=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function ph(t){let e=[],r=!0;for(let A of t.split(" ")){r=!1;let s=C0.exec(A);if(s===null||s.groups===void 0||s.groups.algo===void 0)continue;let o=s.groups.algo.toLowerCase();Bh.includes(o)&&e.push(s.groups)}return r===!0?"no metadata":e}function d0(t){let e=t[0].algo;if(e[3]==="5")return e;for(let r=1;r{t=A,e=s}),resolve:t,reject:e}}function y0(t){return t.controller.state==="aborted"}function R0(t){return t.controller.state==="aborted"||t.controller.state==="terminated"}function D0(t){return XD[t.toLowerCase()]??t}function T0(t){let e=JSON.stringify(t);if(e===void 0)throw new TypeError("Value is not JSON serializable");return dr(typeof e=="string"),e}var b0=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function mh(t,e,r=0,A=1){class s{#e;#t;#r;constructor(n,i){this.#e=n,this.#t=i,this.#r=0}next(){if(typeof this!="object"||this===null||!(#e in this))throw new TypeError(`'next' called on an object that does not implement interface ${t} Iterator.`);let n=this.#r,i=this.#e[e],a=i.length;if(n>=a)return{value:void 0,done:!0};let{[r]:c,[A]:g}=i[n];this.#r=n+1;let l;switch(this.#t){case"key":l=c;break;case"value":l=g;break;case"key+value":l=[c,g];break}return{value:l,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,b0),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${t} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(o,n){return new s(o,n)}}function k0(t,e,r,A=0,s=1){let o=mh(t,r,A,s),n={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return os.brandCheck(this,e),o(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return os.brandCheck(this,e),o(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return os.brandCheck(this,e),o(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(a,c=globalThis){if(os.brandCheck(this,e),os.argumentLengthCheck(arguments,1,`${t}.forEach`),typeof a!="function")throw new TypeError(`Failed to execute 'forEach' on '${t}': parameter 1 is not of type 'Function'.`);for(let{0:g,1:l}of o(this,"key+value"))a.call(c,l,g,this)}}};return Object.defineProperties(e.prototype,{...n,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:n.entries.value}})}async function F0(t,e,r){let A=e,s=r,o;try{o=t.stream.getReader()}catch(n){s(n);return}try{A(await wh(o))}catch(n){s(n)}}function S0(t){return t instanceof ReadableStream||t[Symbol.toStringTag]==="ReadableStream"&&typeof t.tee=="function"}function N0(t){try{t.close(),t.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}}var U0=/[^\x00-\xFF]/;function No(t){return dr(!U0.test(t)),t}async function wh(t){let e=[],r=0;for(;;){let{done:A,value:s}=await t.read();if(A)return Buffer.concat(e,r);if(!$D(s))throw new TypeError("Received non-Uint8Array chunk");e.push(s),r+=s.length}}function G0(t){dr("protocol"in t);let e=t.protocol;return e==="about:"||e==="blob:"||e==="data:"}function Ha(t){return typeof t=="string"&&t[5]===":"&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&t[4]==="s"||t.protocol==="https:"}function yh(t){dr("protocol"in t);let e=t.protocol;return e==="http:"||e==="https:"}function L0(t,e){let r=t;if(!r.startsWith("bytes"))return"failure";let A={position:5};if(e&&Cr(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==61)return"failure";A.position++,e&&Cr(a=>a===" "||a===" ",r,A);let s=Cr(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),o=s.length?Number(s):null;if(e&&Cr(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==45)return"failure";A.position++,e&&Cr(a=>a===" "||a===" ",r,A);let n=Cr(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),i=n.length?Number(n):null;return A.positioni?"failure":{rangeStartValue:o,rangeEndValue:i}}function M0(t,e,r){let A="bytes ";return A+=No(`${t}`),A+="-",A+=No(`${e}`),A+="/",A+=No(`${r}`),A}var Va=class extends JD{#e;constructor(e){super(),this.#e=e}_transform(e,r,A){if(!this._inflateStream){if(e.length===0){A();return}this._inflateStream=(e[0]&15)===8?Eh.createInflate(this.#e):Eh.createInflateRaw(this.#e),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",s=>this.destroy(s))}this._inflateStream.write(e,r,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}};function v0(t){return new Va(t)}function x0(t){let e=null,r=null,A=null,s=Rh("content-type",t);if(s===null)return"failure";for(let o of s){let n=zD(o);n==="failure"||n.essence==="*/*"||(A=n,A.essence!==r?(e=null,A.parameters.has("charset")&&(e=A.parameters.get("charset")),r=A.essence):!A.parameters.has("charset")&&e!==null&&A.parameters.set("charset",e))}return A??"failure"}function O0(t){let e=t,r={position:0},A=[],s="";for(;r.positiono!=='"'&&o!==",",e,r),r.positiono===9||o===32),A.push(s),s=""}return A}function Rh(t,e){let r=e.get(t,!0);return r===null?null:O0(r)}var Y0=new TextDecoder;function _0(t){return t.length===0?"":(t[0]===239&&t[1]===187&&t[2]===191&&(t=t.subarray(3)),Y0.decode(t))}var qa=class{get baseUrl(){return hh()}get origin(){return this.baseUrl?.origin}policyContainer=fh()},Wa=class{settingsObject=new qa},J0=new Wa;Dh.exports={isAborted:y0,isCancelled:R0,isValidEncodedURL:Ch,createDeferredPromise:w0,ReadableStreamFrom:KD,tryUpgradeRequestToAPotentiallyTrustworthyURL:m0,clampAndCoarsenConnectionTimingInfo:u0,coarsenedSharedCurrentTime:E0,determineRequestsReferrer:B0,makePolicyContainer:fh,clonePolicyContainer:Q0,appendFetchMetadata:g0,appendRequestOriginHeader:l0,TAOCheck:c0,corsCheck:a0,crossOriginResourcePolicyCheck:i0,createOpaqueTimingInfo:h0,setRequestReferrerPolicyOnRedirect:n0,isValidHTTPToken:Qh,requestBadPort:r0,requestCurrentURL:is,responseURL:Ih,responseLocationURL:e0,isBlobLike:jD,isURLPotentiallyTrustworthy:ns,isValidReasonPhrase:s0,sameOrigin:Go,normalizeMethod:D0,serializeJavascriptValueToJSONString:T0,iteratorMixin:k0,createIterator:mh,isValidHeaderName:o0,isValidHeaderValue:dh,isErrorLike:A0,fullyReadBody:F0,bytesMatch:I0,isReadableStreamLike:S0,readableStreamClose:N0,isomorphicEncode:No,urlIsLocal:G0,urlHasHttpsScheme:Ha,urlIsHttpHttpsScheme:yh,readAllBytes:wh,simpleRangeHeaderValue:L0,buildContentRange:M0,parseMetadata:ph,createInflate:v0,extractMimeType:x0,getDecodeSplit:Rh,utf8DecodeBytes:_0,environmentSettingsObject:J0}});var Pt=B((vJ,Th)=>{"use strict";Th.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var Za=B((xJ,bh)=>{"use strict";var{Blob:P0,File:H0}=C("node:buffer"),{kState:kt}=Pt(),{webidl:Et}=Qe(),za=class t{constructor(e,r,A={}){let s=r,o=A.type,n=A.lastModified??Date.now();this[kt]={blobLike:e,name:s,type:o,lastModified:n}}stream(...e){return Et.brandCheck(this,t),this[kt].blobLike.stream(...e)}arrayBuffer(...e){return Et.brandCheck(this,t),this[kt].blobLike.arrayBuffer(...e)}slice(...e){return Et.brandCheck(this,t),this[kt].blobLike.slice(...e)}text(...e){return Et.brandCheck(this,t),this[kt].blobLike.text(...e)}get size(){return Et.brandCheck(this,t),this[kt].blobLike.size}get type(){return Et.brandCheck(this,t),this[kt].blobLike.type}get name(){return Et.brandCheck(this,t),this[kt].name}get lastModified(){return Et.brandCheck(this,t),this[kt].lastModified}get[Symbol.toStringTag](){return"File"}};Et.converters.Blob=Et.interfaceConverter(P0);function V0(t){return t instanceof H0||t&&(typeof t.stream=="function"||typeof t.arrayBuffer=="function")&&t[Symbol.toStringTag]==="File"}bh.exports={FileLike:za,isFileLike:V0}});var cs=B((OJ,Uh)=>{"use strict";var{isBlobLike:Lo,iteratorMixin:q0}=Ge(),{kState:fe}=Pt(),{kEnumerableProperty:nA}=v(),{FileLike:kh,isFileLike:W0}=Za(),{webidl:z}=Qe(),{File:Nh}=C("node:buffer"),Fh=C("node:util"),Sh=globalThis.File??Nh,as=class t{constructor(e){if(z.util.markAsUncloneable(this),e!==void 0)throw z.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[fe]=[]}append(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.append";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"value",{strict:!1}):z.converters.USVString(r,s,"value"),A=arguments.length===3?z.converters.USVString(A,s,"filename"):void 0;let o=ja(e,r,A);this[fe].push(o)}delete(e){z.brandCheck(this,t);let r="FormData.delete";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe]=this[fe].filter(A=>A.name!==e)}get(e){z.brandCheck(this,t);let r="FormData.get";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name");let A=this[fe].findIndex(s=>s.name===e);return A===-1?null:this[fe][A].value}getAll(e){z.brandCheck(this,t);let r="FormData.getAll";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].filter(A=>A.name===e).map(A=>A.value)}has(e){z.brandCheck(this,t);let r="FormData.has";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].findIndex(A=>A.name===e)!==-1}set(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.set";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"name",{strict:!1}):z.converters.USVString(r,s,"name"),A=arguments.length===3?z.converters.USVString(A,s,"name"):void 0;let o=ja(e,r,A),n=this[fe].findIndex(i=>i.name===e);n!==-1?this[fe]=[...this[fe].slice(0,n),o,...this[fe].slice(n+1).filter(i=>i.name!==e)]:this[fe].push(o)}[Fh.inspect.custom](e,r){let A=this[fe].reduce((o,n)=>(o[n.name]?Array.isArray(o[n.name])?o[n.name].push(n.value):o[n.name]=[o[n.name],n.value]:o[n.name]=n.value,o),{__proto__:null});r.depth??=e,r.colors??=!0;let s=Fh.formatWithOptions(r,A);return`FormData ${s.slice(s.indexOf("]")+2)}`}};q0("FormData",as,fe,"name","value");Object.defineProperties(as.prototype,{append:nA,delete:nA,get:nA,getAll:nA,has:nA,set:nA,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function ja(t,e,r){if(typeof e!="string"){if(W0(e)||(e=e instanceof Blob?new Sh([e],"blob",{type:e.type}):new kh(e,"blob",{type:e.type})),r!==void 0){let A={type:e.type,lastModified:e.lastModified};e=e instanceof Nh?new Sh([e],r,A):new kh(e,r,A)}}return{name:t,value:e}}Uh.exports={FormData:as,makeEntry:ja}});var Oh=B((YJ,xh)=>{"use strict";var{isUSVString:Gh,bufferToLowerCasedHeaderName:z0}=v(),{utf8DecodeBytes:Z0}=Ge(),{HTTP_TOKEN_CODEPOINTS:j0,isomorphicDecode:Lh}=Te(),{isFileLike:K0}=Za(),{makeEntry:X0}=cs(),Mo=C("node:assert"),{File:$0}=C("node:buffer"),eT=globalThis.File??$0,tT=Buffer.from('form-data; name="'),Mh=Buffer.from("; filename"),rT=Buffer.from("--"),AT=Buffer.from(`--\r -`);function sT(t){for(let e=0;e70)return!1;for(let r=0;r=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===39||A===45||A===95))return!1}return!0}function nT(t,e){Mo(e!=="failure"&&e.essence==="multipart/form-data");let r=e.parameters.get("boundary");if(r===void 0)return"failure";let A=Buffer.from(`--${r}`,"utf8"),s=[],o={position:0};for(;t[o.position]===13&&t[o.position+1]===10;)o.position+=2;let n=t.length;for(;t[n-1]===10&&t[n-2]===13;)n-=2;for(n!==t.length&&(t=t.subarray(0,n));;){if(t.subarray(o.position,o.position+A.length).equals(A))o.position+=A.length;else return"failure";if(o.position===t.length-2&&vo(t,rT,o)||o.position===t.length-4&&vo(t,AT,o))return s;if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let i=iT(t,o);if(i==="failure")return"failure";let{name:a,filename:c,contentType:g,encoding:l}=i;o.position+=2;let u;{let h=t.indexOf(A.subarray(2),o.position);if(h===-1)return"failure";u=t.subarray(o.position,h-4),o.position+=u.length,l==="base64"&&(u=Buffer.from(u.toString(),"base64"))}if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let E;c!==null?(g??="text/plain",sT(g)||(g=""),E=new eT([u],c,{type:g})):E=Z0(Buffer.from(u)),Mo(Gh(a)),Mo(typeof E=="string"&&Gh(E)||K0(E)),s.push(X0(a,E,c))}}function iT(t,e){let r=null,A=null,s=null,o=null;for(;;){if(t[e.position]===13&&t[e.position+1]===10)return r===null?"failure":{name:r,filename:A,contentType:s,encoding:o};let n=iA(i=>i!==10&&i!==13&&i!==58,t,e);if(n=Ka(n,!0,!0,i=>i===9||i===32),!j0.test(n.toString())||t[e.position]!==58)return"failure";switch(e.position++,iA(i=>i===32||i===9,t,e),z0(n)){case"content-disposition":{if(r=A=null,!vo(t,tT,e)||(e.position+=17,r=vh(t,e),r===null))return"failure";if(vo(t,Mh,e)){let i=e.position+Mh.length;if(t[i]===42&&(e.position+=1,i+=1),t[i]!==61||t[i+1]!==34||(e.position+=12,A=vh(t,e),A===null))return"failure"}break}case"content-type":{let i=iA(a=>a!==10&&a!==13,t,e);i=Ka(i,!1,!0,a=>a===9||a===32),s=Lh(i);break}case"content-transfer-encoding":{let i=iA(a=>a!==10&&a!==13,t,e);i=Ka(i,!1,!0,a=>a===9||a===32),o=Lh(i);break}default:iA(i=>i!==10&&i!==13,t,e)}if(t[e.position]!==13&&t[e.position+1]!==10)return"failure";e.position+=2}}function vh(t,e){Mo(t[e.position-1]===34);let r=iA(A=>A!==10&&A!==13&&A!==34,t,e);return t[e.position]!==34?null:(e.position++,r=new TextDecoder().decode(r).replace(/%0A/ig,` -`).replace(/%0D/ig,"\r").replace(/%22/g,'"'),r)}function iA(t,e,r){let A=r.position;for(;A0&&A(t[o]);)o--;return s===0&&o===t.length-1?t:t.subarray(s,o+1)}function vo(t,e,r){if(t.length{"use strict";var gs=v(),{ReadableStreamFrom:aT,isBlobLike:Yh,isReadableStreamLike:cT,readableStreamClose:gT,createDeferredPromise:lT,fullyReadBody:uT,extractMimeType:ET,utf8DecodeBytes:Ph}=Ge(),{FormData:_h}=cs(),{kState:cA}=Pt(),{webidl:hT}=Qe(),{Blob:QT}=C("node:buffer"),Xa=C("node:assert"),{isErrored:Hh,isDisturbed:BT}=C("node:stream"),{isArrayBuffer:IT}=C("node:util/types"),{serializeAMimeType:CT}=Te(),{multipartFormDataParser:dT}=Oh(),$a;try{let t=C("node:crypto");$a=e=>t.randomInt(0,e)}catch{$a=t=>Math.floor(Math.random(t))}var xo=new TextEncoder;function fT(){}var Vh=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,qh;Vh&&(qh=new FinalizationRegistry(t=>{let e=t.deref();e&&!e.locked&&!BT(e)&&!Hh(e)&&e.cancel("Response object has been garbage collected").catch(fT)}));function Wh(t,e=!1){let r=null;t instanceof ReadableStream?r=t:Yh(t)?r=t.stream():r=new ReadableStream({async pull(a){let c=typeof s=="string"?xo.encode(s):s;c.byteLength&&a.enqueue(c),queueMicrotask(()=>gT(a))},start(){},type:"bytes"}),Xa(cT(r));let A=null,s=null,o=null,n=null;if(typeof t=="string")s=t,n="text/plain;charset=UTF-8";else if(t instanceof URLSearchParams)s=t.toString(),n="application/x-www-form-urlencoded;charset=UTF-8";else if(IT(t))s=new Uint8Array(t.slice());else if(ArrayBuffer.isView(t))s=new Uint8Array(t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength));else if(gs.isFormDataLike(t)){let a=`----formdata-undici-0${`${$a(1e11)}`.padStart(11,"0")}`,c=`--${a}\r +var Uy=Object.create;var bu=Object.defineProperty;var Gy=Object.getOwnPropertyDescriptor;var Ly=Object.getOwnPropertyNames;var My=Object.getPrototypeOf,vy=Object.prototype.hasOwnProperty;var B=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var xy=(t,e,r,A)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ly(e))!vy.call(t,s)&&s!==r&&bu(t,s,{get:()=>e[s],enumerable:!(A=Gy(e,s))||A.enumerable});return t};var W=(t,e,r)=>(r=t!=null?Uy(My(t)):{},xy(e||!t||!t.__esModule?bu(r,"default",{value:t,enumerable:!0}):r,t));var Lu=B(zr=>{"use strict";var aJ=require("net"),Hy=require("tls"),Wi=require("http"),Nu=require("https"),Vy=require("events"),cJ=require("assert"),qy=require("util");zr.httpOverHttp=Wy;zr.httpsOverHttp=zy;zr.httpOverHttps=Zy;zr.httpsOverHttps=jy;function Wy(t){var e=new yt(t);return e.request=Wi.request,e}function zy(t){var e=new yt(t);return e.request=Wi.request,e.createSocket=Uu,e.defaultPort=443,e}function Zy(t){var e=new yt(t);return e.request=Nu.request,e}function jy(t){var e=new yt(t);return e.request=Nu.request,e.createSocket=Uu,e.defaultPort=443,e}function yt(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||Wi.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(A,s,o,n){for(var i=Gu(s,o,n),a=0,c=e.requests.length;a=this.maxSockets){o.requests.push(n);return}o.createSocket(n,function(i){i.on("free",a),i.on("close",c),i.on("agentRemove",c),e.onSocket(i);function a(){o.emit("free",i,n)}function c(g){o.removeSocket(i),i.removeListener("free",a),i.removeListener("close",c),i.removeListener("agentRemove",c)}})};yt.prototype.createSocket=function(e,r){var A=this,s={};A.sockets.push(s);var o=zi({},A.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(o.localAddress=e.localAddress),o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")),Jt("making CONNECT request");var n=A.request(o);n.useChunkedEncodingByDefault=!1,n.once("response",i),n.once("upgrade",a),n.once("connect",c),n.once("error",g),n.end();function i(l){l.upgrade=!0}function a(l,u,E){process.nextTick(function(){c(l,u,E)})}function c(l,u,E){if(n.removeAllListeners(),u.removeAllListeners(),l.statusCode!==200){Jt("tunneling socket could not be established, statusCode=%d",l.statusCode),u.destroy();var h=new Error("tunneling socket could not be established, statusCode="+l.statusCode);h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}if(E.length>0){Jt("got illegal response body from proxy"),u.destroy();var h=new Error("got illegal response body from proxy");h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}return Jt("tunneling connection has established"),A.sockets[A.sockets.indexOf(s)]=u,r(u)}function g(l){n.removeAllListeners(),Jt(`tunneling socket could not be established, cause=%s +`,l.message,l.stack);var u=new Error("tunneling socket could not be established, cause="+l.message);u.code="ECONNRESET",e.request.emit("error",u),A.removeSocket(s)}};yt.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var A=this.requests.shift();A&&this.createSocket(A,function(s){A.request.onSocket(s)})}};function Uu(t,e){var r=this;yt.prototype.createSocket.call(r,t,function(A){var s=t.request.getHeader("host"),o=zi({},r.options,{socket:A,servername:s?s.replace(/:.*$/,""):t.host}),n=Hy.connect(0,o);r.sockets[r.sockets.indexOf(A)]=n,e(n)})}function Gu(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function zi(t){for(var e=1,r=arguments.length;e{Mu.exports=Lu()});var $=B((uJ,vu)=>{vu.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}});var Y=B((EJ,aE)=>{"use strict";var xu=Symbol.for("undici.error.UND_ERR"),ee=class extends Error{constructor(e){super(e),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&e[xu]===!0}[xu]=!0},Ou=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),ji=class extends ee{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ou]===!0}[Ou]=!0},Yu=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),Ki=class extends ee{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Yu]===!0}[Yu]=!0},_u=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Xi=class extends ee{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&e[_u]===!0}[_u]=!0},Ju=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),$i=class extends ee{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ju]===!0}[Ju]=!0},Pu=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),ea=class extends ee{constructor(e,r,A,s){super(e),this.name="ResponseStatusCodeError",this.message=e||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=s,this.status=r,this.statusCode=r,this.headers=A}static[Symbol.hasInstance](e){return e&&e[Pu]===!0}[Pu]=!0},Hu=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),ta=class extends ee{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&e[Hu]===!0}[Hu]=!0},Vu=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),ra=class extends ee{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&e[Vu]===!0}[Vu]=!0},qu=Symbol.for("undici.error.UND_ERR_ABORT"),Eo=class extends ee{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&e[qu]===!0}[qu]=!0},Wu=Symbol.for("undici.error.UND_ERR_ABORTED"),Aa=class extends Eo{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&e[Wu]===!0}[Wu]=!0},zu=Symbol.for("undici.error.UND_ERR_INFO"),sa=class extends ee{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&e[zu]===!0}[zu]=!0},Zu=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),oa=class extends ee{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[Zu]===!0}[Zu]=!0},ju=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),na=class extends ee{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[ju]===!0}[ju]=!0},Ku=Symbol.for("undici.error.UND_ERR_DESTROYED"),ia=class extends ee{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&e[Ku]===!0}[Ku]=!0},Xu=Symbol.for("undici.error.UND_ERR_CLOSED"),aa=class extends ee{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&e[Xu]===!0}[Xu]=!0},$u=Symbol.for("undici.error.UND_ERR_SOCKET"),ca=class extends ee{constructor(e,r){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=r}static[Symbol.hasInstance](e){return e&&e[$u]===!0}[$u]=!0},eE=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),ga=class extends ee{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&e[eE]===!0}[eE]=!0},tE=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),la=class extends ee{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&e[tE]===!0}[tE]=!0},rE=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),ua=class extends Error{constructor(e,r,A){super(e),this.name="HTTPParserError",this.code=r?`HPE_${r}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&e[rE]===!0}[rE]=!0},AE=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),Ea=class extends ee{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&e[AE]===!0}[AE]=!0},sE=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),ha=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[sE]===!0}[sE]=!0},oE=Symbol.for("undici.error.UND_ERR_RESPONSE"),Qa=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[oE]===!0}[oE]=!0},nE=Symbol.for("undici.error.UND_ERR_PRX_TLS"),Ba=class extends ee{constructor(e,r,A){super(r,{cause:e,...A??{}}),this.name="SecureProxyConnectionError",this.message=r||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&e[nE]===!0}[nE]=!0},iE=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),Ia=class extends ee{constructor(e){super(e),this.name="MessageSizeExceededError",this.message=e||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](e){return e&&e[iE]===!0}get[iE](){return!0}};aE.exports={AbortError:Eo,HTTPParserError:ua,UndiciError:ee,HeadersTimeoutError:Ki,HeadersOverflowError:Xi,BodyTimeoutError:$i,RequestContentLengthMismatchError:oa,ConnectTimeoutError:ji,ResponseStatusCodeError:ea,InvalidArgumentError:ta,InvalidReturnValueError:ra,RequestAbortedError:Aa,ClientDestroyedError:ia,ClientClosedError:aa,InformationalError:sa,SocketError:ca,NotSupportedError:ga,ResponseContentLengthMismatchError:na,BalancedPoolMissingUpstreamError:la,ResponseExceededMaxSizeError:Ea,RequestRetryError:ha,ResponseError:Qa,SecureProxyConnectionError:Ba,MessageSizeExceededError:Ia}});var Qo=B((hJ,cE)=>{"use strict";var ho={},Ca=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let t=0;t{"use strict";var{wellknownHeaderNames:gE,headerNameLowerCasedRecord:Ky}=Qo(),da=class t{value=null;left=null;middle=null;right=null;code;constructor(e,r,A){if(A===void 0||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new t(e,r,A):this.value=r}add(e,r){let A=e.length;if(A===0)throw new TypeError("Unreachable");let s=0,o=this;for(;;){let n=e.charCodeAt(s);if(n>127)throw new TypeError("key must be ascii string");if(o.code===n)if(A===++s){o.value=r;break}else if(o.middle!==null)o=o.middle;else{o.middle=new t(e,r,s);break}else if(o.code=65&&(o|=32);s!==null;){if(o===s.code){if(r===++A)return s;s=s.middle;break}s=s.code{"use strict";var KA=require("node:assert"),{kDestroyed:QE,kBodyUsed:Zr,kListeners:fa,kBody:hE}=$(),{IncomingMessage:Xy}=require("node:http"),fo=require("node:stream"),$y=require("node:net"),{Blob:eR}=require("node:buffer"),tR=require("node:util"),{stringify:rR}=require("node:querystring"),{EventEmitter:AR}=require("node:events"),{InvalidArgumentError:Ee}=Y(),{headerNameLowerCasedRecord:sR}=Qo(),{tree:BE}=EE(),[oR,nR]=process.versions.node.split(".").map(t=>Number(t)),Co=class{constructor(e){this[hE]=e,this[Zr]=!1}async*[Symbol.asyncIterator](){KA(!this[Zr],"disturbed"),this[Zr]=!0,yield*this[hE]}};function iR(t){return po(t)?(pE(t)===0&&t.on("data",function(){KA(!1)}),typeof t.readableDidRead!="boolean"&&(t[Zr]=!1,AR.prototype.on.call(t,"data",function(){this[Zr]=!0})),t):t&&typeof t.pipeTo=="function"?new Co(t):t&&typeof t!="string"&&!ArrayBuffer.isView(t)&&fE(t)?new Co(t):t}function aR(){}function po(t){return t&&typeof t=="object"&&typeof t.pipe=="function"&&typeof t.on=="function"}function IE(t){if(t===null)return!1;if(t instanceof eR)return!0;if(typeof t!="object")return!1;{let e=t[Symbol.toStringTag];return(e==="Blob"||e==="File")&&("stream"in t&&typeof t.stream=="function"||"arrayBuffer"in t&&typeof t.arrayBuffer=="function")}}function cR(t,e){if(t.includes("?")||t.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=rR(e);return r&&(t+="?"+r),t}function CE(t){let e=parseInt(t,10);return e===Number(t)&&e>=0&&e<=65535}function Io(t){return t!=null&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&(t[4]===":"||t[4]==="s"&&t[5]===":")}function dE(t){if(typeof t=="string"){if(t=new URL(t),!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}if(!t||typeof t!="object")throw new Ee("Invalid URL: The URL argument must be a non-null object.");if(!(t instanceof URL)){if(t.port!=null&&t.port!==""&&CE(t.port)===!1)throw new Ee("Invalid URL: port must be a valid integer or a string representation of an integer.");if(t.path!=null&&typeof t.path!="string")throw new Ee("Invalid URL path: the path must be a string or null/undefined.");if(t.pathname!=null&&typeof t.pathname!="string")throw new Ee("Invalid URL pathname: the pathname must be a string or null/undefined.");if(t.hostname!=null&&typeof t.hostname!="string")throw new Ee("Invalid URL hostname: the hostname must be a string or null/undefined.");if(t.origin!=null&&typeof t.origin!="string")throw new Ee("Invalid URL origin: the origin must be a string or null/undefined.");if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");let e=t.port!=null?t.port:t.protocol==="https:"?443:80,r=t.origin!=null?t.origin:`${t.protocol||""}//${t.hostname||""}:${e}`,A=t.path!=null?t.path:`${t.pathname||""}${t.search||""}`;return r[r.length-1]==="/"&&(r=r.slice(0,r.length-1)),A&&A[0]!=="/"&&(A=`/${A}`),new URL(`${r}${A}`)}if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}function gR(t){if(t=dE(t),t.pathname!=="/"||t.search||t.hash)throw new Ee("invalid url");return t}function lR(t){if(t[0]==="["){let r=t.indexOf("]");return KA(r!==-1),t.substring(1,r)}let e=t.indexOf(":");return e===-1?t:t.substring(0,e)}function uR(t){if(!t)return null;KA(typeof t=="string");let e=lR(t);return $y.isIP(e)?"":e}function ER(t){return JSON.parse(JSON.stringify(t))}function hR(t){return t!=null&&typeof t[Symbol.asyncIterator]=="function"}function fE(t){return t!=null&&(typeof t[Symbol.iterator]=="function"||typeof t[Symbol.asyncIterator]=="function")}function pE(t){if(t==null)return 0;if(po(t)){let e=t._readableState;return e&&e.objectMode===!1&&e.ended===!0&&Number.isFinite(e.length)?e.length:null}else{if(IE(t))return t.size!=null?t.size:null;if(yE(t))return t.byteLength}return null}function mE(t){return t&&!!(t.destroyed||t[QE]||fo.isDestroyed?.(t))}function QR(t,e){t==null||!po(t)||mE(t)||(typeof t.destroy=="function"?(Object.getPrototypeOf(t).constructor===Xy&&(t.socket=null),t.destroy(e)):e&&queueMicrotask(()=>{t.emit("error",e)}),t.destroyed!==!0&&(t[QE]=!0))}var BR=/timeout=(\d+)/;function IR(t){let e=t.toString().match(BR);return e?parseInt(e[1],10)*1e3:null}function wE(t){return typeof t=="string"?sR[t]??t.toLowerCase():BE.lookup(t)??t.toString("latin1").toLowerCase()}function CR(t){return BE.lookup(t)??t.toString("latin1").toLowerCase()}function dR(t,e){e===void 0&&(e={});for(let r=0;rn.toString("utf8")):o.toString("utf8")}}return"content-length"in e&&"content-disposition"in e&&(e["content-disposition"]=Buffer.from(e["content-disposition"]).toString("latin1")),e}function fR(t){let e=t.length,r=new Array(e),A=!1,s=-1,o,n,i=0;for(let a=0;a{r.close(),r.byobRequest?.respond(0)});else{let o=Buffer.isBuffer(s)?s:Buffer.from(s);o.byteLength&&r.enqueue(new Uint8Array(o))}return r.desiredSize>0},async cancel(r){await e.return()},type:"bytes"})}function TR(t){return t&&typeof t=="object"&&typeof t.append=="function"&&typeof t.delete=="function"&&typeof t.get=="function"&&typeof t.getAll=="function"&&typeof t.has=="function"&&typeof t.set=="function"&&t[Symbol.toStringTag]==="FormData"}function bR(t,e){return"addEventListener"in t?(t.addEventListener("abort",e,{once:!0}),()=>t.removeEventListener("abort",e)):(t.addListener("abort",e),()=>t.removeListener("abort",e))}var kR=typeof String.prototype.toWellFormed=="function",FR=typeof String.prototype.isWellFormed=="function";function RE(t){return kR?`${t}`.toWellFormed():tR.toUSVString(t)}function SR(t){return FR?`${t}`.isWellFormed():RE(t)===`${t}`}function DE(t){switch(t){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return t>=33&&t<=126}}function NR(t){if(t.length===0)return!1;for(let e=0;e{"use strict";var J=require("node:diagnostics_channel"),wa=require("node:util"),mo=wa.debuglog("undici"),ma=wa.debuglog("fetch"),Qr=wa.debuglog("websocket"),FE=!1,OR={beforeConnect:J.channel("undici:client:beforeConnect"),connected:J.channel("undici:client:connected"),connectError:J.channel("undici:client:connectError"),sendHeaders:J.channel("undici:client:sendHeaders"),create:J.channel("undici:request:create"),bodySent:J.channel("undici:request:bodySent"),headers:J.channel("undici:request:headers"),trailers:J.channel("undici:request:trailers"),error:J.channel("undici:request:error"),open:J.channel("undici:websocket:open"),close:J.channel("undici:websocket:close"),socketError:J.channel("undici:websocket:socket_error"),ping:J.channel("undici:websocket:ping"),pong:J.channel("undici:websocket:pong")};if(mo.enabled||ma.enabled){let t=ma.enabled?ma:mo;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s using %s%s errored - %s",`${o}${s?`:${s}`:""}`,A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)}),J.channel("undici:request:headers").subscribe(e=>{let{request:{method:r,path:A,origin:s},response:{statusCode:o}}=e;t("received response to %s %s/%s - HTTP %d",r,s,A,o)}),J.channel("undici:request:trailers").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("trailers received from %s %s/%s",r,s,A)}),J.channel("undici:request:error").subscribe(e=>{let{request:{method:r,path:A,origin:s},error:o}=e;t("request to %s %s/%s errored - %s",r,s,A,o.message)}),FE=!0}if(Qr.enabled){if(!FE){let t=mo.enabled?mo:Qr;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s%s using %s%s errored - %s",o,s?`:${s}`:"",A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)})}J.channel("undici:websocket:open").subscribe(t=>{let{address:{address:e,port:r}}=t;Qr("connection opened %s%s",e,r?`:${r}`:"")}),J.channel("undici:websocket:close").subscribe(t=>{let{websocket:e,code:r,reason:A}=t;Qr("closed connection to %s - %s %s",e.url,r,A)}),J.channel("undici:websocket:socket_error").subscribe(t=>{Qr("connection errored - %s",t.message)}),J.channel("undici:websocket:ping").subscribe(t=>{Qr("ping received")}),J.channel("undici:websocket:pong").subscribe(t=>{Qr("pong received")})}SE.exports={channels:OR}});var LE=B((CJ,GE)=>{"use strict";var{InvalidArgumentError:V,NotSupportedError:YR}=Y(),Rt=require("node:assert"),{isValidHTTPToken:UE,isValidHeaderValue:XA,isStream:_R,destroy:JR,isBuffer:PR,isFormDataLike:HR,isIterable:VR,isBlobLike:qR,buildURL:WR,validateHandler:zR,getServerName:ZR,normalizedMethodRecords:jR}=M(),{channels:lt}=jr(),{headerNameLowerCasedRecord:NE}=Qo(),KR=/[^\u0021-\u00ff]/,He=Symbol("handler"),ya=class{constructor(e,{path:r,method:A,body:s,headers:o,query:n,idempotent:i,blocking:a,upgrade:c,headersTimeout:g,bodyTimeout:l,reset:u,throwOnError:E,expectContinue:h,servername:C},I){if(typeof r!="string")throw new V("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&A!=="CONNECT")throw new V("path must be an absolute URL or start with a slash");if(KR.test(r))throw new V("invalid request path");if(typeof A!="string")throw new V("method must be a string");if(jR[A]===void 0&&!UE(A))throw new V("invalid request method");if(c&&typeof c!="string")throw new V("upgrade must be a string");if(c&&!XA(c))throw new V("invalid upgrade header");if(g!=null&&(!Number.isFinite(g)||g<0))throw new V("invalid headersTimeout");if(l!=null&&(!Number.isFinite(l)||l<0))throw new V("invalid bodyTimeout");if(u!=null&&typeof u!="boolean")throw new V("invalid reset");if(h!=null&&typeof h!="boolean")throw new V("invalid expectContinue");if(this.headersTimeout=g,this.bodyTimeout=l,this.throwOnError=E===!0,this.method=A,this.abort=null,s==null)this.body=null;else if(_R(s)){this.body=s;let Q=this.body._readableState;(!Q||!Q.autoDestroy)&&(this.endHandler=function(){JR(this)},this.body.on("end",this.endHandler)),this.errorHandler=f=>{this.abort?this.abort(f):this.error=f},this.body.on("error",this.errorHandler)}else if(PR(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if(typeof s=="string")this.body=s.length?Buffer.from(s):null;else if(HR(s)||VR(s)||qR(s))this.body=s;else throw new V("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=c||null,this.path=n?WR(r,n):r,this.origin=e,this.idempotent=i??(A==="HEAD"||A==="GET"),this.blocking=a??!1,this.reset=u??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=h??!1,Array.isArray(o)){if(o.length%2!==0)throw new V("headers array must be even");for(let Q=0;Q{"use strict";var XR=require("node:events"),yo=class extends XR{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){let r=Array.isArray(e[0])?e[0]:e,A=this.dispatch.bind(this);for(let s of r)if(s!=null){if(typeof s!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof s}`);if(A=s(A),A==null||typeof A!="function"||A.length!==2)throw new TypeError("invalid interceptor")}return new Ra(this,A)}},Ra=class extends yo{#e=null;#t=null;constructor(e,r){super(),this.#e=e,this.#t=r}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};ME.exports=yo});var eA=B((fJ,vE)=>{"use strict";var $R=$A(),{ClientDestroyedError:Da,ClientClosedError:eD,InvalidArgumentError:Kr}=Y(),{kDestroy:tD,kClose:rD,kClosed:es,kDestroyed:Xr,kDispatch:Ta,kInterceptors:Br}=$(),Dt=Symbol("onDestroyed"),$r=Symbol("onClosed"),Ro=Symbol("Intercepted Dispatch"),ba=Symbol("webSocketOptions"),ka=class extends $R{constructor(e){super(),this[Xr]=!1,this[Dt]=null,this[es]=!1,this[$r]=[],this[ba]=e?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[ba].maxFragments??131072,maxPayloadSize:this[ba].maxPayloadSize??128*1024*1024}}get destroyed(){return this[Xr]}get closed(){return this[es]}get interceptors(){return this[Br]}set interceptors(e){if(e){for(let r=e.length-1;r>=0;r--)if(typeof this[Br][r]!="function")throw new Kr("interceptor must be an function")}this[Br]=e}close(e){if(e===void 0)return new Promise((A,s)=>{this.close((o,n)=>o?s(o):A(n))});if(typeof e!="function")throw new Kr("invalid callback");if(this[Xr]){queueMicrotask(()=>e(new Da,null));return}if(this[es]){this[$r]?this[$r].push(e):queueMicrotask(()=>e(null,null));return}this[es]=!0,this[$r].push(e);let r=()=>{let A=this[$r];this[$r]=null;for(let s=0;sthis.destroy()).then(()=>{queueMicrotask(r)})}destroy(e,r){if(typeof e=="function"&&(r=e,e=null),r===void 0)return new Promise((s,o)=>{this.destroy(e,(n,i)=>n?o(n):s(i))});if(typeof r!="function")throw new Kr("invalid callback");if(this[Xr]){this[Dt]?this[Dt].push(r):queueMicrotask(()=>r(null,null));return}e||(e=new Da),this[Xr]=!0,this[Dt]=this[Dt]||[],this[Dt].push(r);let A=()=>{let s=this[Dt];this[Dt]=null;for(let o=0;o{queueMicrotask(A)})}[Ro](e,r){if(!this[Br]||this[Br].length===0)return this[Ro]=this[Ta],this[Ta](e,r);let A=this[Ta].bind(this);for(let s=this[Br].length-1;s>=0;s--)A=this[Br][s](A);return this[Ro]=A,A(e,r)}dispatch(e,r){if(!r||typeof r!="object")throw new Kr("handler must be an object");try{if(!e||typeof e!="object")throw new Kr("opts must be an object.");if(this[Xr]||this[Dt])throw new Da;if(this[es])throw new eD;return this[Ro](e,r)}catch(A){if(typeof r.onError!="function")throw new Kr("invalid onError method");return r.onError(A),!1}}};vE.exports=ka});var Ma=B((pJ,_E)=>{"use strict";var tA=0,Fa=1e3,Sa=(Fa>>1)-1,Tt,Na=Symbol("kFastTimer"),bt=[],Ua=-2,Ga=-1,OE=0,xE=1;function La(){tA+=Sa;let t=0,e=bt.length;for(;t=r._idleStart+r._idleTimeout&&(r._state=Ga,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===Ga?(r._state=Ua,--e!==0&&(bt[t]=bt[e])):++t}bt.length=e,bt.length!==0&&YE()}function YE(){Tt?Tt.refresh():(clearTimeout(Tt),Tt=setTimeout(La,Sa),Tt.unref&&Tt.unref())}var Do=class{[Na]=!0;_state=Ua;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,r,A){this._onTimeout=e,this._idleTimeout=r,this._timerArg=A,this.refresh()}refresh(){this._state===Ua&&bt.push(this),(!Tt||bt.length===1)&&YE(),this._state=OE}clear(){this._state=Ga,this._idleStart=-1}};_E.exports={setTimeout(t,e,r){return e<=Fa?setTimeout(t,e,r):new Do(t,e,r)},clearTimeout(t){t[Na]?t.clear():clearTimeout(t)},setFastTimeout(t,e,r){return new Do(t,e,r)},clearFastTimeout(t){t.clear()},now(){return tA},tick(t=0){tA+=t-Fa+1,La(),La()},reset(){tA=0,bt.length=0,clearTimeout(Tt),Tt=null},kFastTimer:Na}});var ts=B((yJ,qE)=>{"use strict";var AD=require("node:net"),JE=require("node:assert"),VE=M(),{InvalidArgumentError:sD,ConnectTimeoutError:oD}=Y(),To=Ma();function PE(){}var va,xa;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?xa=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry(r=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:A}=this._sessionCache.keys().next();this._sessionCache.delete(A)}this._sessionCache.set(e,r)}}};function nD({allowH2:t,maxCachedSessions:e,socketPath:r,timeout:A,session:s,...o}){if(e!=null&&(!Number.isInteger(e)||e<0))throw new sD("maxCachedSessions must be a positive integer or zero");let n={path:r,...o},i=new xa(e??100);return A=A??1e4,t=t??!1,function({hostname:c,host:g,protocol:l,port:u,servername:E,localAddress:h,httpSocket:C},I){let Q;if(l==="https:"){va||(va=require("node:tls")),E=E||n.servername||VE.getServerName(g)||null;let R=E||c;JE(R);let y=s||i.get(R)||null;u=u||443,Q=va.connect({highWaterMark:16384,...n,servername:E,session:y,localAddress:h,ALPNProtocols:t?["http/1.1","h2"]:["http/1.1"],socket:C,port:u,host:c}),Q.on("session",function(P){i.set(R,P)})}else JE(!C,"httpSocket can only be sent on TLS update"),u=u||80,Q=AD.connect({highWaterMark:64*1024,...n,localAddress:h,port:u,host:c});if(n.keepAlive==null||n.keepAlive){let R=n.keepAliveInitialDelay===void 0?6e4:n.keepAliveInitialDelay;Q.setKeepAlive(!0,R)}let f=iD(new WeakRef(Q),{timeout:A,hostname:c,port:u});return Q.setNoDelay(!0).once(l==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(f),I){let R=I;I=null,R(null,this)}}).on("error",function(R){if(queueMicrotask(f),I){let y=I;I=null,y(R)}}),Q}}var iD=process.platform==="win32"?(t,e)=>{if(!e.timeout)return PE;let r=null,A=null,s=To.setFastTimeout(()=>{r=setImmediate(()=>{A=setImmediate(()=>HE(t.deref(),e))})},e.timeout);return()=>{To.clearFastTimeout(s),clearImmediate(r),clearImmediate(A)}}:(t,e)=>{if(!e.timeout)return PE;let r=null,A=To.setFastTimeout(()=>{r=setImmediate(()=>{HE(t.deref(),e)})},e.timeout);return()=>{To.clearFastTimeout(A),clearImmediate(r)}};function HE(t,e){if(t==null)return;let r="Connect Timeout Error";Array.isArray(t.autoSelectFamilyAttemptedAddresses)?r+=` (attempted addresses: ${t.autoSelectFamilyAttemptedAddresses.join(", ")},`:r+=` (attempted address: ${e.hostname}:${e.port},`,r+=` timeout: ${e.timeout}ms)`,VE.destroy(t,new oD(r))}qE.exports=nD});var WE=B(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.enumToMap=void 0;function aD(t){let e={};return Object.keys(t).forEach(r=>{let A=t[r];typeof A=="number"&&(e[r]=A)}),e}bo.enumToMap=aD});var zE=B(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.SPECIAL_HEADERS=p.HEADER_STATE=p.MINOR=p.MAJOR=p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS=p.TOKEN=p.STRICT_TOKEN=p.HEX=p.URL_CHAR=p.STRICT_URL_CHAR=p.USERINFO_CHARS=p.MARK=p.ALPHANUM=p.NUM=p.HEX_MAP=p.NUM_MAP=p.ALPHA=p.FINISH=p.H_METHOD_MAP=p.METHOD_MAP=p.METHODS_RTSP=p.METHODS_ICE=p.METHODS_HTTP=p.METHODS=p.LENIENT_FLAGS=p.FLAGS=p.TYPE=p.ERROR=void 0;var cD=WE(),gD;(function(t){t[t.OK=0]="OK",t[t.INTERNAL=1]="INTERNAL",t[t.STRICT=2]="STRICT",t[t.LF_EXPECTED=3]="LF_EXPECTED",t[t.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",t[t.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",t[t.INVALID_METHOD=6]="INVALID_METHOD",t[t.INVALID_URL=7]="INVALID_URL",t[t.INVALID_CONSTANT=8]="INVALID_CONSTANT",t[t.INVALID_VERSION=9]="INVALID_VERSION",t[t.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",t[t.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",t[t.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",t[t.INVALID_STATUS=13]="INVALID_STATUS",t[t.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",t[t.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",t[t.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",t[t.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",t[t.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",t[t.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",t[t.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",t[t.PAUSED=21]="PAUSED",t[t.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",t[t.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",t[t.USER=24]="USER"})(gD=p.ERROR||(p.ERROR={}));var lD;(function(t){t[t.BOTH=0]="BOTH",t[t.REQUEST=1]="REQUEST",t[t.RESPONSE=2]="RESPONSE"})(lD=p.TYPE||(p.TYPE={}));var uD;(function(t){t[t.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",t[t.CHUNKED=8]="CHUNKED",t[t.UPGRADE=16]="UPGRADE",t[t.CONTENT_LENGTH=32]="CONTENT_LENGTH",t[t.SKIPBODY=64]="SKIPBODY",t[t.TRAILING=128]="TRAILING",t[t.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(uD=p.FLAGS||(p.FLAGS={}));var ED;(function(t){t[t.HEADERS=1]="HEADERS",t[t.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",t[t.KEEP_ALIVE=4]="KEEP_ALIVE"})(ED=p.LENIENT_FLAGS||(p.LENIENT_FLAGS={}));var k;(function(t){t[t.DELETE=0]="DELETE",t[t.GET=1]="GET",t[t.HEAD=2]="HEAD",t[t.POST=3]="POST",t[t.PUT=4]="PUT",t[t.CONNECT=5]="CONNECT",t[t.OPTIONS=6]="OPTIONS",t[t.TRACE=7]="TRACE",t[t.COPY=8]="COPY",t[t.LOCK=9]="LOCK",t[t.MKCOL=10]="MKCOL",t[t.MOVE=11]="MOVE",t[t.PROPFIND=12]="PROPFIND",t[t.PROPPATCH=13]="PROPPATCH",t[t.SEARCH=14]="SEARCH",t[t.UNLOCK=15]="UNLOCK",t[t.BIND=16]="BIND",t[t.REBIND=17]="REBIND",t[t.UNBIND=18]="UNBIND",t[t.ACL=19]="ACL",t[t.REPORT=20]="REPORT",t[t.MKACTIVITY=21]="MKACTIVITY",t[t.CHECKOUT=22]="CHECKOUT",t[t.MERGE=23]="MERGE",t[t["M-SEARCH"]=24]="M-SEARCH",t[t.NOTIFY=25]="NOTIFY",t[t.SUBSCRIBE=26]="SUBSCRIBE",t[t.UNSUBSCRIBE=27]="UNSUBSCRIBE",t[t.PATCH=28]="PATCH",t[t.PURGE=29]="PURGE",t[t.MKCALENDAR=30]="MKCALENDAR",t[t.LINK=31]="LINK",t[t.UNLINK=32]="UNLINK",t[t.SOURCE=33]="SOURCE",t[t.PRI=34]="PRI",t[t.DESCRIBE=35]="DESCRIBE",t[t.ANNOUNCE=36]="ANNOUNCE",t[t.SETUP=37]="SETUP",t[t.PLAY=38]="PLAY",t[t.PAUSE=39]="PAUSE",t[t.TEARDOWN=40]="TEARDOWN",t[t.GET_PARAMETER=41]="GET_PARAMETER",t[t.SET_PARAMETER=42]="SET_PARAMETER",t[t.REDIRECT=43]="REDIRECT",t[t.RECORD=44]="RECORD",t[t.FLUSH=45]="FLUSH"})(k=p.METHODS||(p.METHODS={}));p.METHODS_HTTP=[k.DELETE,k.GET,k.HEAD,k.POST,k.PUT,k.CONNECT,k.OPTIONS,k.TRACE,k.COPY,k.LOCK,k.MKCOL,k.MOVE,k.PROPFIND,k.PROPPATCH,k.SEARCH,k.UNLOCK,k.BIND,k.REBIND,k.UNBIND,k.ACL,k.REPORT,k.MKACTIVITY,k.CHECKOUT,k.MERGE,k["M-SEARCH"],k.NOTIFY,k.SUBSCRIBE,k.UNSUBSCRIBE,k.PATCH,k.PURGE,k.MKCALENDAR,k.LINK,k.UNLINK,k.PRI,k.SOURCE];p.METHODS_ICE=[k.SOURCE];p.METHODS_RTSP=[k.OPTIONS,k.DESCRIBE,k.ANNOUNCE,k.SETUP,k.PLAY,k.PAUSE,k.TEARDOWN,k.GET_PARAMETER,k.SET_PARAMETER,k.REDIRECT,k.RECORD,k.FLUSH,k.GET,k.POST];p.METHOD_MAP=cD.enumToMap(k);p.H_METHOD_MAP={};Object.keys(p.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(p.H_METHOD_MAP[t]=p.METHOD_MAP[t])});var hD;(function(t){t[t.SAFE=0]="SAFE",t[t.SAFE_WITH_CB=1]="SAFE_WITH_CB",t[t.UNSAFE=2]="UNSAFE"})(hD=p.FINISH||(p.FINISH={}));p.ALPHA=[];for(let t=65;t<=90;t++)p.ALPHA.push(String.fromCharCode(t)),p.ALPHA.push(String.fromCharCode(t+32));p.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};p.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};p.NUM=["0","1","2","3","4","5","6","7","8","9"];p.ALPHANUM=p.ALPHA.concat(p.NUM);p.MARK=["-","_",".","!","~","*","'","(",")"];p.USERINFO_CHARS=p.ALPHANUM.concat(p.MARK).concat(["%",";",":","&","=","+","$",","]);p.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(p.ALPHANUM);p.URL_CHAR=p.STRICT_URL_CHAR.concat([" ","\f"]);for(let t=128;t<=255;t++)p.URL_CHAR.push(t);p.HEX=p.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);p.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(p.ALPHANUM);p.TOKEN=p.STRICT_TOKEN.concat([" "]);p.HEADER_CHARS=[" "];for(let t=32;t<=255;t++)t!==127&&p.HEADER_CHARS.push(t);p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS.filter(t=>t!==44);p.MAJOR=p.NUM_MAP;p.MINOR=p.MAJOR;var rA;(function(t){t[t.GENERAL=0]="GENERAL",t[t.CONNECTION=1]="CONNECTION",t[t.CONTENT_LENGTH=2]="CONTENT_LENGTH",t[t.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",t[t.UPGRADE=4]="UPGRADE",t[t.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",t[t.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})(rA=p.HEADER_STATE||(p.HEADER_STATE={}));p.SPECIAL_HEADERS={connection:rA.CONNECTION,"content-length":rA.CONTENT_LENGTH,"proxy-connection":rA.CONNECTION,"transfer-encoding":rA.TRANSFER_ENCODING,upgrade:rA.UPGRADE}});var Oa=B((TJ,ZE)=>{"use strict";var{Buffer:QD}=require("node:buffer");ZE.exports=QD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var KE=B((bJ,jE)=>{"use strict";var{Buffer:BD}=require("node:buffer");jE.exports=BD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var rs=B((kJ,oh)=>{"use strict";var XE=["GET","HEAD","POST"],ID=new Set(XE),CD=[101,204,205,304],$E=[301,302,303,307,308],dD=new Set($E),eh=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],fD=new Set(eh),th=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],pD=new Set(th),mD=["follow","manual","error"],rh=["GET","HEAD","OPTIONS","TRACE"],wD=new Set(rh),yD=["navigate","same-origin","no-cors","cors"],RD=["omit","same-origin","include"],DD=["default","no-store","reload","no-cache","force-cache","only-if-cached"],TD=["content-encoding","content-language","content-location","content-type","content-length"],bD=["half"],Ah=["CONNECT","TRACE","TRACK"],kD=new Set(Ah),sh=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],FD=new Set(sh);oh.exports={subresource:sh,forbiddenMethods:Ah,requestBodyHeader:TD,referrerPolicy:th,requestRedirect:mD,requestMode:yD,requestCredentials:RD,requestCache:DD,redirectStatus:$E,corsSafeListedMethods:XE,nullBodyStatus:CD,safeMethods:rh,badPorts:eh,requestDuplex:bD,subresourceSet:FD,badPortsSet:fD,redirectStatusSet:dD,corsSafeListedMethodsSet:ID,safeMethodsSet:wD,forbiddenMethodsSet:kD,referrerPolicySet:pD}});var _a=B((FJ,nh)=>{"use strict";var Ya=Symbol.for("undici.globalOrigin.1");function SD(){return globalThis[Ya]}function ND(t){if(t===void 0){Object.defineProperty(globalThis,Ya,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let e=new URL(t);if(e.protocol!=="http:"&&e.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${e.protocol}`);Object.defineProperty(globalThis,Ya,{value:e,writable:!0,enumerable:!1,configurable:!1})}nh.exports={getGlobalOrigin:SD,setGlobalOrigin:ND}});var Te=B((SJ,Eh)=>{"use strict";var Fo=require("node:assert"),UD=new TextEncoder,As=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,GD=/[\u000A\u000D\u0009\u0020]/,LD=/[\u0009\u000A\u000C\u000D\u0020]/g,MD=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function vD(t){Fo(t.protocol==="data:");let e=ch(t,!0);e=e.slice(5);let r={position:0},A=AA(",",e,r),s=A.length;if(A=PD(A,!0,!0),r.position>=e.length)return"failure";r.position++;let o=e.slice(s+1),n=gh(o);if(/;(\u0020){0,}base64$/i.test(A)){let a=uh(n);if(n=OD(a),n==="failure")return"failure";A=A.slice(0,-6),A=A.replace(/(\u0020)+$/,""),A=A.slice(0,-1)}A.startsWith(";")&&(A="text/plain"+A);let i=Ja(A);return i==="failure"&&(i=Ja("text/plain;charset=US-ASCII")),{mimeType:i,body:n}}function ch(t,e=!1){if(!e)return t.href;let r=t.href,A=t.hash.length,s=A===0?r:r.substring(0,r.length-A);return!A&&r.endsWith("#")?s.slice(0,-1):s}function So(t,e,r){let A="";for(;r.position=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function ah(t){return t>=48&&t<=57?t-48:(t&223)-55}function xD(t){let e=t.length,r=new Uint8Array(e),A=0;for(let s=0;st.length)return"failure";e.position++;let A=AA(";",t,e);if(A=ko(A,!1,!0),A.length===0||!As.test(A))return"failure";let s=r.toLowerCase(),o=A.toLowerCase(),n={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;e.positionGD.test(c),t,e);let i=So(c=>c!==";"&&c!=="=",t,e);if(i=i.toLowerCase(),e.positiont.length)break;let a=null;if(t[e.position]==='"')a=lh(t,e,!0),AA(";",t,e);else if(a=AA(";",t,e),a=ko(a,!1,!0),a.length===0)continue;i.length!==0&&As.test(i)&&(a.length===0||MD.test(a))&&!n.parameters.has(i)&&n.parameters.set(i,a)}return n}function OD(t){t=t.replace(LD,"");let e=t.length;if(e%4===0&&t.charCodeAt(e-1)===61&&(--e,t.charCodeAt(e-1)===61&&--e),e%4===1||/[^+/0-9A-Za-z]/.test(t.length===e?t:t.substring(0,e)))return"failure";let r=Buffer.from(t,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function lh(t,e,r){let A=e.position,s="";for(Fo(t[e.position]==='"'),e.position++;s+=So(n=>n!=='"'&&n!=="\\",t,e),!(e.position>=t.length);){let o=t[e.position];if(e.position++,o==="\\"){if(e.position>=t.length){s+="\\";break}s+=t[e.position],e.position++}else{Fo(o==='"');break}}return r?s:t.slice(A,e.position)}function YD(t){Fo(t!=="failure");let{parameters:e,essence:r}=t,A=r;for(let[s,o]of e.entries())A+=";",A+=s,A+="=",As.test(o)||(o=o.replace(/(\\|")/g,"\\$1"),o='"'+o,o+='"'),A+=o;return A}function _D(t){return t===13||t===10||t===9||t===32}function ko(t,e=!0,r=!0){return Pa(t,e,r,_D)}function JD(t){return t===13||t===10||t===9||t===12||t===32}function PD(t,e=!0,r=!0){return Pa(t,e,r,JD)}function Pa(t,e,r,A){let s=0,o=t.length-1;if(e)for(;s0&&A(t.charCodeAt(o));)o--;return s===0&&o===t.length-1?t:t.slice(s,o+1)}function uh(t){let e=t.length;if(65535>e)return String.fromCharCode.apply(null,t);let r="",A=0,s=65535;for(;Ae&&(s=e-A),r+=String.fromCharCode.apply(null,t.subarray(A,A+=s));return r}function HD(t){switch(t.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return t.subtype.endsWith("+json")?"application/json":t.subtype.endsWith("+xml")?"application/xml":""}Eh.exports={dataURLProcessor:vD,URLSerializer:ch,collectASequenceOfCodePoints:So,collectASequenceOfCodePointsFast:AA,stringPercentDecode:gh,parseMIMEType:Ja,collectAnHTTPQuotedString:lh,serializeAMimeType:YD,removeChars:Pa,removeHTTPWhitespace:ko,minimizeSupportedMimeType:HD,HTTP_TOKEN_CODEPOINTS:As,isomorphicDecode:uh}});var Qe=B((NJ,hh)=>{"use strict";var{types:ut,inspect:VD}=require("node:util"),{markAsUncloneable:qD}=require("node:worker_threads"),{toUSVString:WD}=M(),d={};d.converters={};d.util={};d.errors={};d.errors.exception=function(t){return new TypeError(`${t.header}: ${t.message}`)};d.errors.conversionFailed=function(t){let e=t.types.length===1?"":" one of",r=`${t.argument} could not be converted to${e}: ${t.types.join(", ")}.`;return d.errors.exception({header:t.prefix,message:r})};d.errors.invalidArgument=function(t){return d.errors.exception({header:t.prefix,message:`"${t.value}" is an invalid ${t.type}.`})};d.brandCheck=function(t,e,r){if(r?.strict!==!1){if(!(t instanceof e)){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}}else if(t?.[Symbol.toStringTag]!==e.prototype[Symbol.toStringTag]){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}};d.argumentLengthCheck=function({length:t},e,r){if(t{});d.util.ConvertToInt=function(t,e,r,A){let s,o;e===64?(s=Math.pow(2,53)-1,r==="unsigned"?o=0:o=Math.pow(-2,53)+1):r==="unsigned"?(o=0,s=Math.pow(2,e)-1):(o=Math.pow(-2,e)-1,s=Math.pow(2,e-1)-1);let n=Number(t);if(n===0&&(n=0),A?.enforceRange===!0){if(Number.isNaN(n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY)throw d.errors.exception({header:"Integer conversion",message:`Could not convert ${d.util.Stringify(t)} to an integer.`});if(n=d.util.IntegerPart(n),ns)throw d.errors.exception({header:"Integer conversion",message:`Value must be between ${o}-${s}, got ${n}.`});return n}return!Number.isNaN(n)&&A?.clamp===!0?(n=Math.min(Math.max(n,o),s),Math.floor(n)%2===0?n=Math.floor(n):n=Math.ceil(n),n):Number.isNaN(n)||n===0&&Object.is(0,n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY?0:(n=d.util.IntegerPart(n),n=n%Math.pow(2,e),r==="signed"&&n>=Math.pow(2,e)-1?n-Math.pow(2,e):n)};d.util.IntegerPart=function(t){let e=Math.floor(Math.abs(t));return t<0?-1*e:e};d.util.Stringify=function(t){switch(d.util.Type(t)){case"Symbol":return`Symbol(${t.description})`;case"Object":return VD(t);case"String":return`"${t}"`;default:return`${t}`}};d.sequenceConverter=function(t){return(e,r,A,s)=>{if(d.util.Type(e)!=="Object")throw d.errors.exception({header:r,message:`${A} (${d.util.Stringify(e)}) is not iterable.`});let o=typeof s=="function"?s():e?.[Symbol.iterator]?.(),n=[],i=0;if(o===void 0||typeof o.next!="function")throw d.errors.exception({header:r,message:`${A} is not iterable.`});for(;;){let{done:a,value:c}=o.next();if(a)break;n.push(t(c,r,`${A}[${i++}]`))}return n}};d.recordConverter=function(t,e){return(r,A,s)=>{if(d.util.Type(r)!=="Object")throw d.errors.exception({header:A,message:`${s} ("${d.util.Type(r)}") is not an Object.`});let o={};if(!ut.isProxy(r)){let i=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let a of i){let c=t(a,A,s),g=e(r[a],A,s);o[c]=g}return o}let n=Reflect.ownKeys(r);for(let i of n)if(Reflect.getOwnPropertyDescriptor(r,i)?.enumerable){let c=t(i,A,s),g=e(r[i],A,s);o[c]=g}return o}};d.interfaceConverter=function(t){return(e,r,A,s)=>{if(s?.strict!==!1&&!(e instanceof t))throw d.errors.exception({header:r,message:`Expected ${A} ("${d.util.Stringify(e)}") to be an instance of ${t.name}.`});return e}};d.dictionaryConverter=function(t){return(e,r,A)=>{let s=d.util.Type(e),o={};if(s==="Null"||s==="Undefined")return o;if(s!=="Object")throw d.errors.exception({header:r,message:`Expected ${e} to be one of: Null, Undefined, Object.`});for(let n of t){let{key:i,defaultValue:a,required:c,converter:g}=n;if(c===!0&&!Object.hasOwn(e,i))throw d.errors.exception({header:r,message:`Missing required key "${i}".`});let l=e[i],u=Object.hasOwn(n,"defaultValue");if(u&&l!==null&&(l??=a()),c||u||l!==void 0){if(l=g(l,r,`${A}.${i}`),n.allowedValues&&!n.allowedValues.includes(l))throw d.errors.exception({header:r,message:`${l} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});o[i]=l}}return o}};d.nullableConverter=function(t){return(e,r,A)=>e===null?e:t(e,r,A)};d.converters.DOMString=function(t,e,r,A){if(t===null&&A?.legacyNullToEmptyString)return"";if(typeof t=="symbol")throw d.errors.exception({header:e,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(t)};d.converters.ByteString=function(t,e,r){let A=d.converters.DOMString(t,e,r);for(let s=0;s255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${s} has a value of ${A.charCodeAt(s)} which is greater than 255.`);return A};d.converters.USVString=WD;d.converters.boolean=function(t){return!!t};d.converters.any=function(t){return t};d.converters["long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"signed",void 0,e,r)};d.converters["unsigned long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"unsigned",void 0,e,r)};d.converters["unsigned long"]=function(t,e,r){return d.util.ConvertToInt(t,32,"unsigned",void 0,e,r)};d.converters["unsigned short"]=function(t,e,r,A){return d.util.ConvertToInt(t,16,"unsigned",A,e,r)};d.converters.ArrayBuffer=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isAnyArrayBuffer(t))throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["ArrayBuffer"]});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.resizable||t.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.TypedArray=function(t,e,r,A,s){if(d.util.Type(t)!=="Object"||!ut.isTypedArray(t)||t.constructor.name!==e.name)throw d.errors.conversionFailed({prefix:r,argument:`${A} ("${d.util.Stringify(t)}")`,types:[e.name]});if(s?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.DataView=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isDataView(t))throw d.errors.exception({header:e,message:`${r} is not a DataView.`});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.BufferSource=function(t,e,r,A){if(ut.isAnyArrayBuffer(t))return d.converters.ArrayBuffer(t,e,r,{...A,allowShared:!1});if(ut.isTypedArray(t))return d.converters.TypedArray(t,t.constructor,e,r,{...A,allowShared:!1});if(ut.isDataView(t))return d.converters.DataView(t,e,r,{...A,allowShared:!1});throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["BufferSource"]})};d.converters["sequence"]=d.sequenceConverter(d.converters.ByteString);d.converters["sequence>"]=d.sequenceConverter(d.converters["sequence"]);d.converters["record"]=d.recordConverter(d.converters.ByteString,d.converters.ByteString);hh.exports={webidl:d}});var Ge=B((UJ,bh)=>{"use strict";var{Transform:zD}=require("node:stream"),Qh=require("node:zlib"),{redirectStatusSet:ZD,referrerPolicySet:jD,badPortsSet:KD}=rs(),{getGlobalOrigin:Bh}=_a(),{collectASequenceOfCodePoints:Ir,collectAnHTTPQuotedString:XD,removeChars:$D,parseMIMEType:e0}=Te(),{performance:t0}=require("node:perf_hooks"),{isBlobLike:r0,ReadableStreamFrom:A0,isValidHTTPToken:Ih,normalizedMethodRecordsBase:s0}=M(),Cr=require("node:assert"),{isUint8Array:o0}=require("node:util/types"),{webidl:ss}=Qe(),Ch=[],Uo;try{Uo=require("node:crypto");let t=["sha256","sha384","sha512"];Ch=Uo.getHashes().filter(e=>t.includes(e))}catch{}function dh(t){let e=t.urlList,r=e.length;return r===0?null:e[r-1].toString()}function n0(t,e){if(!ZD.has(t.status))return null;let r=t.headersList.get("location",!0);return r!==null&&ph(r)&&(fh(r)||(r=i0(r)),r=new URL(r,dh(t))),r&&!r.hash&&(r.hash=e),r}function fh(t){for(let e=0;e126||r<32)return!1}return!0}function i0(t){return Buffer.from(t,"binary").toString("utf8")}function ns(t){return t.urlList[t.urlList.length-1]}function a0(t){let e=ns(t);return Dh(e)&&KD.has(e.port)?"blocked":"allowed"}function c0(t){return t instanceof Error||t?.constructor?.name==="Error"||t?.constructor?.name==="DOMException"}function g0(t){for(let e=0;e=32&&r<=126||r>=128&&r<=255))return!1}return!0}var l0=Ih;function ph(t){return(t[0]===" "||t[0]===" "||t[t.length-1]===" "||t[t.length-1]===" "||t.includes(` +`)||t.includes("\r")||t.includes("\0"))===!1}function u0(t,e){let{headersList:r}=e,A=(r.get("referrer-policy",!0)??"").split(","),s="";if(A.length>0)for(let o=A.length;o!==0;o--){let n=A[o-1].trim();if(jD.has(n)){s=n;break}}s!==""&&(t.referrerPolicy=s)}function E0(){return"allowed"}function h0(){return"success"}function Q0(){return"success"}function B0(t){let e=null;e=t.mode,t.headersList.set("sec-fetch-mode",e,!0)}function I0(t){let e=t.origin;if(!(e==="client"||e===void 0)){if(t.responseTainting==="cors"||t.mode==="websocket")t.headersList.append("origin",e,!0);else if(t.method!=="GET"&&t.method!=="HEAD"){switch(t.referrerPolicy){case"no-referrer":e=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":t.origin&&Va(t.origin)&&!Va(ns(t))&&(e=null);break;case"same-origin":Go(t,ns(t))||(e=null);break;default:}t.headersList.append("origin",e,!0)}}}function sA(t,e){return t}function C0(t,e,r){return!t?.startTime||t.startTime4096&&(A=s);let o=Go(t,A),n=os(A)&&!os(t.url);switch(e){case"origin":return s??Ha(r,!0);case"unsafe-url":return A;case"same-origin":return o?s:"no-referrer";case"origin-when-cross-origin":return o?A:s;case"strict-origin-when-cross-origin":{let i=ns(t);return Go(A,i)?A:os(A)&&!os(i)?"no-referrer":s}default:return n?"no-referrer":s}}function Ha(t,e){return Cr(t instanceof URL),t=new URL(t),t.protocol==="file:"||t.protocol==="about:"||t.protocol==="blank:"?"no-referrer":(t.username="",t.password="",t.hash="",e&&(t.pathname="",t.search=""),t)}function os(t){if(!(t instanceof URL))return!1;if(t.href==="about:blank"||t.href==="about:srcdoc"||t.protocol==="data:"||t.protocol==="file:")return!0;return e(t.origin);function e(r){if(r==null||r==="null")return!1;let A=new URL(r);return!!(A.protocol==="https:"||A.protocol==="wss:"||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(A.hostname)||A.hostname==="localhost"||A.hostname.includes("localhost.")||A.hostname.endsWith(".localhost"))}}function w0(t,e){if(Uo===void 0)return!0;let r=wh(e);if(r==="no metadata"||r.length===0)return!0;let A=R0(r),s=D0(r,A);for(let o of s){let n=o.algo,i=o.hash,a=Uo.createHash(n).update(t).digest("base64");if(a[a.length-1]==="="&&(a[a.length-2]==="="?a=a.slice(0,-2):a=a.slice(0,-1)),T0(a,i))return!0}return!1}var y0=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function wh(t){let e=[],r=!0;for(let A of t.split(" ")){r=!1;let s=y0.exec(A);if(s===null||s.groups===void 0||s.groups.algo===void 0)continue;let o=s.groups.algo.toLowerCase();Ch.includes(o)&&e.push(s.groups)}return r===!0?"no metadata":e}function R0(t){let e=t[0].algo;if(e[3]==="5")return e;for(let r=1;r{t=A,e=s}),resolve:t,reject:e}}function F0(t){return t.controller.state==="aborted"}function S0(t){return t.controller.state==="aborted"||t.controller.state==="terminated"}function N0(t){return s0[t.toLowerCase()]??t}function U0(t){let e=JSON.stringify(t);if(e===void 0)throw new TypeError("Value is not JSON serializable");return Cr(typeof e=="string"),e}var G0=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function yh(t,e,r=0,A=1){class s{#e;#t;#r;constructor(n,i){this.#e=n,this.#t=i,this.#r=0}next(){if(typeof this!="object"||this===null||!(#e in this))throw new TypeError(`'next' called on an object that does not implement interface ${t} Iterator.`);let n=this.#r,i=this.#e[e],a=i.length;if(n>=a)return{value:void 0,done:!0};let{[r]:c,[A]:g}=i[n];this.#r=n+1;let l;switch(this.#t){case"key":l=c;break;case"value":l=g;break;case"key+value":l=[c,g];break}return{value:l,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,G0),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${t} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(o,n){return new s(o,n)}}function L0(t,e,r,A=0,s=1){let o=yh(t,r,A,s),n={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(a,c=globalThis){if(ss.brandCheck(this,e),ss.argumentLengthCheck(arguments,1,`${t}.forEach`),typeof a!="function")throw new TypeError(`Failed to execute 'forEach' on '${t}': parameter 1 is not of type 'Function'.`);for(let{0:g,1:l}of o(this,"key+value"))a.call(c,l,g,this)}}};return Object.defineProperties(e.prototype,{...n,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:n.entries.value}})}async function M0(t,e,r){let A=e,s=r,o;try{o=t.stream.getReader()}catch(n){s(n);return}try{A(await Rh(o))}catch(n){s(n)}}function v0(t){return t instanceof ReadableStream||t[Symbol.toStringTag]==="ReadableStream"&&typeof t.tee=="function"}function x0(t){try{t.close(),t.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}}var O0=/[^\x00-\xFF]/;function No(t){return Cr(!O0.test(t)),t}async function Rh(t){let e=[],r=0;for(;;){let{done:A,value:s}=await t.read();if(A)return Buffer.concat(e,r);if(!o0(s))throw new TypeError("Received non-Uint8Array chunk");e.push(s),r+=s.length}}function Y0(t){Cr("protocol"in t);let e=t.protocol;return e==="about:"||e==="blob:"||e==="data:"}function Va(t){return typeof t=="string"&&t[5]===":"&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&t[4]==="s"||t.protocol==="https:"}function Dh(t){Cr("protocol"in t);let e=t.protocol;return e==="http:"||e==="https:"}function _0(t,e){let r=t;if(!r.startsWith("bytes"))return"failure";let A={position:5};if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==61)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let s=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),o=s.length?Number(s):null;if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==45)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let n=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),i=n.length?Number(n):null;return A.positioni?"failure":{rangeStartValue:o,rangeEndValue:i}}function J0(t,e,r){let A="bytes ";return A+=No(`${t}`),A+="-",A+=No(`${e}`),A+="/",A+=No(`${r}`),A}var qa=class extends zD{#e;constructor(e){super(),this.#e=e}_transform(e,r,A){if(!this._inflateStream){if(e.length===0){A();return}this._inflateStream=(e[0]&15)===8?Qh.createInflate(this.#e):Qh.createInflateRaw(this.#e),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",s=>this.destroy(s))}this._inflateStream.write(e,r,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}};function P0(t){return new qa(t)}function H0(t){let e=null,r=null,A=null,s=Th("content-type",t);if(s===null)return"failure";for(let o of s){let n=e0(o);n==="failure"||n.essence==="*/*"||(A=n,A.essence!==r?(e=null,A.parameters.has("charset")&&(e=A.parameters.get("charset")),r=A.essence):!A.parameters.has("charset")&&e!==null&&A.parameters.set("charset",e))}return A??"failure"}function V0(t){let e=t,r={position:0},A=[],s="";for(;r.positiono!=='"'&&o!==",",e,r),r.positiono===9||o===32),A.push(s),s=""}return A}function Th(t,e){let r=e.get(t,!0);return r===null?null:V0(r)}var q0=new TextDecoder;function W0(t){return t.length===0?"":(t[0]===239&&t[1]===187&&t[2]===191&&(t=t.subarray(3)),q0.decode(t))}var Wa=class{get baseUrl(){return Bh()}get origin(){return this.baseUrl?.origin}policyContainer=mh()},za=class{settingsObject=new Wa},z0=new za;bh.exports={isAborted:F0,isCancelled:S0,isValidEncodedURL:fh,createDeferredPromise:k0,ReadableStreamFrom:A0,tryUpgradeRequestToAPotentiallyTrustworthyURL:b0,clampAndCoarsenConnectionTimingInfo:C0,coarsenedSharedCurrentTime:d0,determineRequestsReferrer:m0,makePolicyContainer:mh,clonePolicyContainer:p0,appendFetchMetadata:B0,appendRequestOriginHeader:I0,TAOCheck:Q0,corsCheck:h0,crossOriginResourcePolicyCheck:E0,createOpaqueTimingInfo:f0,setRequestReferrerPolicyOnRedirect:u0,isValidHTTPToken:Ih,requestBadPort:a0,requestCurrentURL:ns,responseURL:dh,responseLocationURL:n0,isBlobLike:r0,isURLPotentiallyTrustworthy:os,isValidReasonPhrase:g0,sameOrigin:Go,normalizeMethod:N0,serializeJavascriptValueToJSONString:U0,iteratorMixin:L0,createIterator:yh,isValidHeaderName:l0,isValidHeaderValue:ph,isErrorLike:c0,fullyReadBody:M0,bytesMatch:w0,isReadableStreamLike:v0,readableStreamClose:x0,isomorphicEncode:No,urlIsLocal:Y0,urlHasHttpsScheme:Va,urlIsHttpHttpsScheme:Dh,readAllBytes:Rh,simpleRangeHeaderValue:_0,buildContentRange:J0,parseMetadata:wh,createInflate:P0,extractMimeType:H0,getDecodeSplit:Th,utf8DecodeBytes:W0,environmentSettingsObject:z0}});var Pt=B((GJ,kh)=>{"use strict";kh.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var ja=B((LJ,Fh)=>{"use strict";var{Blob:Z0,File:j0}=require("node:buffer"),{kState:kt}=Pt(),{webidl:Et}=Qe(),Za=class t{constructor(e,r,A={}){let s=r,o=A.type,n=A.lastModified??Date.now();this[kt]={blobLike:e,name:s,type:o,lastModified:n}}stream(...e){return Et.brandCheck(this,t),this[kt].blobLike.stream(...e)}arrayBuffer(...e){return Et.brandCheck(this,t),this[kt].blobLike.arrayBuffer(...e)}slice(...e){return Et.brandCheck(this,t),this[kt].blobLike.slice(...e)}text(...e){return Et.brandCheck(this,t),this[kt].blobLike.text(...e)}get size(){return Et.brandCheck(this,t),this[kt].blobLike.size}get type(){return Et.brandCheck(this,t),this[kt].blobLike.type}get name(){return Et.brandCheck(this,t),this[kt].name}get lastModified(){return Et.brandCheck(this,t),this[kt].lastModified}get[Symbol.toStringTag](){return"File"}};Et.converters.Blob=Et.interfaceConverter(Z0);function K0(t){return t instanceof j0||t&&(typeof t.stream=="function"||typeof t.arrayBuffer=="function")&&t[Symbol.toStringTag]==="File"}Fh.exports={FileLike:Za,isFileLike:K0}});var as=B((MJ,Lh)=>{"use strict";var{isBlobLike:Lo,iteratorMixin:X0}=Ge(),{kState:fe}=Pt(),{kEnumerableProperty:oA}=M(),{FileLike:Sh,isFileLike:$0}=ja(),{webidl:z}=Qe(),{File:Gh}=require("node:buffer"),Nh=require("node:util"),Uh=globalThis.File??Gh,is=class t{constructor(e){if(z.util.markAsUncloneable(this),e!==void 0)throw z.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[fe]=[]}append(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.append";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"value",{strict:!1}):z.converters.USVString(r,s,"value"),A=arguments.length===3?z.converters.USVString(A,s,"filename"):void 0;let o=Ka(e,r,A);this[fe].push(o)}delete(e){z.brandCheck(this,t);let r="FormData.delete";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe]=this[fe].filter(A=>A.name!==e)}get(e){z.brandCheck(this,t);let r="FormData.get";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name");let A=this[fe].findIndex(s=>s.name===e);return A===-1?null:this[fe][A].value}getAll(e){z.brandCheck(this,t);let r="FormData.getAll";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].filter(A=>A.name===e).map(A=>A.value)}has(e){z.brandCheck(this,t);let r="FormData.has";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].findIndex(A=>A.name===e)!==-1}set(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.set";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"name",{strict:!1}):z.converters.USVString(r,s,"name"),A=arguments.length===3?z.converters.USVString(A,s,"name"):void 0;let o=Ka(e,r,A),n=this[fe].findIndex(i=>i.name===e);n!==-1?this[fe]=[...this[fe].slice(0,n),o,...this[fe].slice(n+1).filter(i=>i.name!==e)]:this[fe].push(o)}[Nh.inspect.custom](e,r){let A=this[fe].reduce((o,n)=>(o[n.name]?Array.isArray(o[n.name])?o[n.name].push(n.value):o[n.name]=[o[n.name],n.value]:o[n.name]=n.value,o),{__proto__:null});r.depth??=e,r.colors??=!0;let s=Nh.formatWithOptions(r,A);return`FormData ${s.slice(s.indexOf("]")+2)}`}};X0("FormData",is,fe,"name","value");Object.defineProperties(is.prototype,{append:oA,delete:oA,get:oA,getAll:oA,has:oA,set:oA,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function Ka(t,e,r){if(typeof e!="string"){if($0(e)||(e=e instanceof Blob?new Uh([e],"blob",{type:e.type}):new Sh(e,"blob",{type:e.type})),r!==void 0){let A={type:e.type,lastModified:e.lastModified};e=e instanceof Gh?new Uh([e],r,A):new Sh(e,r,A)}}return{name:t,value:e}}Lh.exports={FormData:is,makeEntry:Ka}});var _h=B((vJ,Yh)=>{"use strict";var{isUSVString:Mh,bufferToLowerCasedHeaderName:eT}=M(),{utf8DecodeBytes:tT}=Ge(),{HTTP_TOKEN_CODEPOINTS:rT,isomorphicDecode:vh}=Te(),{isFileLike:AT}=ja(),{makeEntry:sT}=as(),Mo=require("node:assert"),{File:oT}=require("node:buffer"),nT=globalThis.File??oT,iT=Buffer.from('form-data; name="'),xh=Buffer.from("; filename"),aT=Buffer.from("--"),cT=Buffer.from(`--\r +`);function gT(t){for(let e=0;e70)return!1;for(let r=0;r=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===39||A===45||A===95))return!1}return!0}function uT(t,e){Mo(e!=="failure"&&e.essence==="multipart/form-data");let r=e.parameters.get("boundary");if(r===void 0)return"failure";let A=Buffer.from(`--${r}`,"utf8"),s=[],o={position:0};for(;t[o.position]===13&&t[o.position+1]===10;)o.position+=2;let n=t.length;for(;t[n-1]===10&&t[n-2]===13;)n-=2;for(n!==t.length&&(t=t.subarray(0,n));;){if(t.subarray(o.position,o.position+A.length).equals(A))o.position+=A.length;else return"failure";if(o.position===t.length-2&&vo(t,aT,o)||o.position===t.length-4&&vo(t,cT,o))return s;if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let i=ET(t,o);if(i==="failure")return"failure";let{name:a,filename:c,contentType:g,encoding:l}=i;o.position+=2;let u;{let h=t.indexOf(A.subarray(2),o.position);if(h===-1)return"failure";u=t.subarray(o.position,h-4),o.position+=u.length,l==="base64"&&(u=Buffer.from(u.toString(),"base64"))}if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let E;c!==null?(g??="text/plain",gT(g)||(g=""),E=new nT([u],c,{type:g})):E=tT(Buffer.from(u)),Mo(Mh(a)),Mo(typeof E=="string"&&Mh(E)||AT(E)),s.push(sT(a,E,c))}}function ET(t,e){let r=null,A=null,s=null,o=null;for(;;){if(t[e.position]===13&&t[e.position+1]===10)return r===null?"failure":{name:r,filename:A,contentType:s,encoding:o};let n=nA(i=>i!==10&&i!==13&&i!==58,t,e);if(n=Xa(n,!0,!0,i=>i===9||i===32),!rT.test(n.toString())||t[e.position]!==58)return"failure";switch(e.position++,nA(i=>i===32||i===9,t,e),eT(n)){case"content-disposition":{if(r=A=null,!vo(t,iT,e)||(e.position+=17,r=Oh(t,e),r===null))return"failure";if(vo(t,xh,e)){let i=e.position+xh.length;if(t[i]===42&&(e.position+=1,i+=1),t[i]!==61||t[i+1]!==34||(e.position+=12,A=Oh(t,e),A===null))return"failure"}break}case"content-type":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),s=vh(i);break}case"content-transfer-encoding":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),o=vh(i);break}default:nA(i=>i!==10&&i!==13,t,e)}if(t[e.position]!==13&&t[e.position+1]!==10)return"failure";e.position+=2}}function Oh(t,e){Mo(t[e.position-1]===34);let r=nA(A=>A!==10&&A!==13&&A!==34,t,e);return t[e.position]!==34?null:(e.position++,r=new TextDecoder().decode(r).replace(/%0A/ig,` +`).replace(/%0D/ig,"\r").replace(/%22/g,'"'),r)}function nA(t,e,r){let A=r.position;for(;A0&&A(t[o]);)o--;return s===0&&o===t.length-1?t:t.subarray(s,o+1)}function vo(t,e,r){if(t.length{"use strict";var cs=M(),{ReadableStreamFrom:hT,isBlobLike:Jh,isReadableStreamLike:QT,readableStreamClose:BT,createDeferredPromise:IT,fullyReadBody:CT,extractMimeType:dT,utf8DecodeBytes:Vh}=Ge(),{FormData:Ph}=as(),{kState:aA}=Pt(),{webidl:fT}=Qe(),{Blob:pT}=require("node:buffer"),$a=require("node:assert"),{isErrored:qh,isDisturbed:mT}=require("node:stream"),{isArrayBuffer:wT}=require("node:util/types"),{serializeAMimeType:yT}=Te(),{multipartFormDataParser:RT}=_h(),ec;try{let t=require("node:crypto");ec=e=>t.randomInt(0,e)}catch{ec=t=>Math.floor(Math.random(t))}var xo=new TextEncoder;function DT(){}var Wh=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,zh;Wh&&(zh=new FinalizationRegistry(t=>{let e=t.deref();e&&!e.locked&&!mT(e)&&!qh(e)&&e.cancel("Response object has been garbage collected").catch(DT)}));function Zh(t,e=!1){let r=null;t instanceof ReadableStream?r=t:Jh(t)?r=t.stream():r=new ReadableStream({async pull(a){let c=typeof s=="string"?xo.encode(s):s;c.byteLength&&a.enqueue(c),queueMicrotask(()=>BT(a))},start(){},type:"bytes"}),$a(QT(r));let A=null,s=null,o=null,n=null;if(typeof t=="string")s=t,n="text/plain;charset=UTF-8";else if(t instanceof URLSearchParams)s=t.toString(),n="application/x-www-form-urlencoded;charset=UTF-8";else if(wT(t))s=new Uint8Array(t.slice());else if(ArrayBuffer.isView(t))s=new Uint8Array(t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength));else if(cs.isFormDataLike(t)){let a=`----formdata-undici-0${`${ec(1e11)}`.padStart(11,"0")}`,c=`--${a}\r Content-Disposition: form-data`;let g=I=>I.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),l=I=>I.replace(/\r?\n|\r/g,`\r -`),u=[],E=new Uint8Array([13,10]);o=0;let h=!1;for(let[I,Q]of t)if(typeof Q=="string"){let p=xo.encode(c+`; name="${g(l(I))}"\r +`),u=[],E=new Uint8Array([13,10]);o=0;let h=!1;for(let[I,Q]of t)if(typeof Q=="string"){let f=xo.encode(c+`; name="${g(l(I))}"\r \r ${l(Q)}\r -`);u.push(p),o+=p.byteLength}else{let p=xo.encode(`${c}; name="${g(l(I))}"`+(Q.name?`; filename="${g(Q.name)}"`:"")+`\r +`);u.push(f),o+=f.byteLength}else{let f=xo.encode(`${c}; name="${g(l(I))}"`+(Q.name?`; filename="${g(Q.name)}"`:"")+`\r Content-Type: ${Q.type||"application/octet-stream"}\r \r -`);u.push(p,Q,E),typeof Q.size=="number"?o+=p.byteLength+Q.size+E.byteLength:h=!0}let d=xo.encode(`--${a}--\r -`);u.push(d),o+=d.byteLength,h&&(o=null),s=t,A=async function*(){for(let I of u)I.stream?yield*I.stream():yield I},n=`multipart/form-data; boundary=${a}`}else if(Yh(t))s=t,o=t.size,t.type&&(n=t.type);else if(typeof t[Symbol.asyncIterator]=="function"){if(e)throw new TypeError("keepalive");if(gs.isDisturbed(t)||t.locked)throw new TypeError("Response body object should not be disturbed or locked");r=t instanceof ReadableStream?t:aT(t)}if((typeof s=="string"||gs.isBuffer(s))&&(o=Buffer.byteLength(s)),A!=null){let a;r=new ReadableStream({async start(){a=A(t)[Symbol.asyncIterator]()},async pull(c){let{value:g,done:l}=await a.next();if(l)queueMicrotask(()=>{c.close(),c.byobRequest?.respond(0)});else if(!Hh(r)){let u=new Uint8Array(g);u.byteLength&&c.enqueue(u)}return c.desiredSize>0},async cancel(c){await a.return()},type:"bytes"})}return[{stream:r,source:s,length:o},n]}function pT(t,e=!1){return t instanceof ReadableStream&&(Xa(!gs.isDisturbed(t),"The body has already been consumed."),Xa(!t.locked,"The stream is locked.")),Wh(t,e)}function mT(t,e){let[r,A]=e.stream.tee();return e.stream=r,{stream:A,length:e.length,source:e.source}}function wT(t){if(t.aborted)throw new DOMException("The operation was aborted.","AbortError")}function yT(t){return{blob(){return aA(this,r=>{let A=Jh(this);return A===null?A="":A&&(A=CT(A)),new QT([r],{type:A})},t)},arrayBuffer(){return aA(this,r=>new Uint8Array(r).buffer,t)},text(){return aA(this,Ph,t)},json(){return aA(this,DT,t)},formData(){return aA(this,r=>{let A=Jh(this);if(A!==null)switch(A.essence){case"multipart/form-data":{let s=dT(r,A);if(s==="failure")throw new TypeError("Failed to parse body as FormData.");let o=new _h;return o[cA]=s,o}case"application/x-www-form-urlencoded":{let s=new URLSearchParams(r.toString()),o=new _h;for(let[n,i]of s)o.append(n,i);return o}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')},t)},bytes(){return aA(this,r=>new Uint8Array(r),t)}}}function RT(t){Object.assign(t.prototype,yT(t))}async function aA(t,e,r){if(hT.brandCheck(t,r),zh(t))throw new TypeError("Body is unusable: Body has already been read");wT(t[cA]);let A=lT(),s=n=>A.reject(n),o=n=>{try{A.resolve(e(n))}catch(i){s(i)}};return t[cA].body==null?(o(Buffer.allocUnsafe(0)),A.promise):(await uT(t[cA].body,o,s),A.promise)}function zh(t){let e=t[cA].body;return e!=null&&(e.stream.locked||gs.isDisturbed(e.stream))}function DT(t){return JSON.parse(Ph(t))}function Jh(t){let e=t[cA].headersList,r=ET(e);return r==="failure"?null:r}Zh.exports={extractBody:Wh,safelyExtractBody:pT,cloneBody:mT,mixinBody:RT,streamRegistry:qh,hasFinalizationRegistry:Vh,bodyUnusable:zh}});var lQ=B((JJ,gQ)=>{"use strict";var k=C("node:assert"),S=v(),{channels:jh}=Kr(),ec=La(),{RequestContentLengthMismatchError:fr,ResponseContentLengthMismatchError:Kh,RequestAbortedError:oQ,InvalidArgumentError:TT,HeadersTimeoutError:bT,HeadersOverflowError:kT,SocketError:lA,InformationalError:uA,BodyTimeoutError:FT,HTTPParserError:ST,ResponseExceededMaxSizeError:NT}=_(),{kUrl:nQ,kReset:be,kClient:Jo,kParser:j,kBlocking:Es,kRunning:ce,kPending:iQ,kSize:Xh,kWriting:Ht,kQueue:et,kNoRef:ls,kKeepAliveDefaultTimeout:UT,kHostHeader:GT,kPendingIdx:LT,kRunningIdx:Ve,kError:pe,kPipelining:Po,kSocket:mr,kKeepAliveTimeoutValue:Vo,kMaxHeadersSize:tc,kKeepAliveMaxTimeout:MT,kKeepAliveTimeoutThreshold:vT,kHeadersTimeout:xT,kBodyTimeout:OT,kStrictContentLength:sc,kMaxRequests:$h,kCounter:YT,kMaxResponseSize:_T,kOnError:eQ,kResume:Ft,kHTTPContext:aQ}=$(),Le=qE(),tQ=Buffer.alloc(0),Oo=Buffer[Symbol.species],Yo=S.addListener,JT=S.removeAllListeners,wr=Symbol("kIdleSocketValidation"),pr=Symbol("kIdleSocketValidationTimeout"),ac=Symbol("kSocketUsed"),rc;async function PT(){let t=process.env.JEST_WORKER_ID?xa():void 0,e;try{e=await WebAssembly.compile(ZE())}catch{e=await WebAssembly.compile(t||xa())}return await WebAssembly.instantiate(e,{env:{wasm_on_url:(r,A,s)=>0,wasm_on_status:(r,A,s)=>{k(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onStatus(new Oo(ht.buffer,o,s))||0},wasm_on_message_begin:r=>(k(se.ptr===r),se.onMessageBegin()||0),wasm_on_header_field:(r,A,s)=>{k(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderField(new Oo(ht.buffer,o,s))||0},wasm_on_header_value:(r,A,s)=>{k(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderValue(new Oo(ht.buffer,o,s))||0},wasm_on_headers_complete:(r,A,s,o)=>(k(se.ptr===r),se.onHeadersComplete(A,!!s,!!o)||0),wasm_on_body:(r,A,s)=>{k(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onBody(new Oo(ht.buffer,o,s))||0},wasm_on_message_complete:r=>(k(se.ptr===r),se.onMessageComplete()||0)}})}var Ac=null,oc=PT();oc.catch();var se=null,ht=null,_o=0,Qt=null,HT=0,us=1,EA=2|us,Ho=4|us,nc=8|HT,ic=class{constructor(e,r,{exports:A}){k(Number.isFinite(e[tc])&&e[tc]>0),this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Le.TYPE.RESPONSE),this.client=e,this.socket=r,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[tc],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[_T]}setTimeout(e,r){e!==this.timeoutValue||r&us^this.timeoutType&us?(this.timeout&&(ec.clearTimeout(this.timeout),this.timeout=null),e&&(r&us?this.timeout=ec.setFastTimeout(rQ,e,new WeakRef(this)):(this.timeout=setTimeout(rQ,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=r}resume(){this.socket.destroyed||!this.paused||(k(this.ptr!=null),k(se==null),this.llhttp.llhttp_resume(this.ptr),k(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||tQ),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){k(this.ptr!=null),k(se==null),k(!this.paused);let{socket:r,llhttp:A}=this;e.length>_o&&(Qt&&A.free(Qt),_o=Math.ceil(e.length/4096)*4096,Qt=A.malloc(_o)),new Uint8Array(A.memory.buffer,Qt,_o).set(e);try{let s;try{ht=e,se=this,s=A.llhttp_execute(this.ptr,Qt,e.length)}catch(n){throw n}finally{se=null,ht=null}let o=A.llhttp_get_error_pos(this.ptr)-Qt;if(s!==Le.ERROR.OK){let n=e.subarray(o);if(s===Le.ERROR.PAUSED_UPGRADE)this.onUpgrade(n);else if(s===Le.ERROR.PAUSED)this.paused=!0,r.unshift(n);else throw this.createError(s,n)}}catch(s){S.destroy(r,s)}}finish(){k(se===null),k(this.ptr!=null),k(!this.paused);let{llhttp:e}=this,r;try{se=this,r=e.llhttp_finish(this.ptr)}finally{se=null}return r===Le.ERROR.OK?null:r===Le.ERROR.PAUSED||r===Le.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,tQ)}createError(e,r){let{llhttp:A,contentLength:s,bytesRead:o}=this;if(s&&o!==parseInt(s,10))return new Kh;let n=A.llhttp_get_error_reason(this.ptr),i="";if(n){let a=new Uint8Array(A.memory.buffer,n).indexOf(0);i="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,n,a).toString()+")"}return new ST(i,Le.ERROR[e],r)}destroy(){k(this.ptr!=null),k(se==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&ec.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:r}=this;if(e.destroyed)return-1;if(r[ce]===0)return S.destroy(e,new lA("bad response",S.getSocketInfo(e))),-1;let A=r[et][r[Ve]];if(!A)return-1;A.onResponseStarted()}onHeaderField(e){let r=this.headers.length;(r&1)===0?this.headers.push(e):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]),this.trackHeader(e.length)}onHeaderValue(e){let r=this.headers.length;(r&1)===1?(this.headers.push(e),r+=1):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]);let A=this.headers[r-2];if(A.length===10){let s=S.bufferToLowerCasedHeaderName(A);s==="keep-alive"?this.keepAlive+=e.toString():s==="connection"&&(this.connection+=e.toString())}else A.length===14&&S.bufferToLowerCasedHeaderName(A)==="content-length"&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&S.destroy(this.socket,new kT)}onUpgrade(e){let{upgrade:r,client:A,socket:s,headers:o,statusCode:n}=this;k(r),k(A[mr]===s),k(!s.destroyed),k(!this.paused),k((o.length&1)===0);let i=A[et][A[Ve]];k(i),k(i.upgrade||i.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,s.unshift(e),s[j].destroy(),s[j]=null,s[Jo]=null,s[pe]=null,JT(s),A[mr]=null,A[aQ]=null,A[et][A[Ve]++]=null,A.emit("disconnect",A[nQ],[A],new uA("upgrade"));try{i.onUpgrade(n,o,s)}catch(a){S.destroy(s,a)}A[Ft]()}onHeadersComplete(e,r,A){let{client:s,socket:o,headers:n,statusText:i}=this;if(o.destroyed)return-1;if(s[ce]===0)return S.destroy(o,new lA("bad response",S.getSocketInfo(o))),-1;let a=s[et][s[Ve]];if(!a)return-1;if(k(!this.upgrade),k(this.statusCode<200),e===100)return S.destroy(o,new lA("bad response",S.getSocketInfo(o))),-1;if(r&&!a.upgrade)return S.destroy(o,new lA("bad upgrade",S.getSocketInfo(o))),-1;if(k(this.timeoutType===EA),this.statusCode=e,this.shouldKeepAlive=A||a.method==="HEAD"&&!o[be]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let g=a.bodyTimeout!=null?a.bodyTimeout:s[OT];this.setTimeout(g,Ho)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(a.method==="CONNECT")return k(s[ce]===1),this.upgrade=!0,2;if(r)return k(s[ce]===1),this.upgrade=!0,2;if(k((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&s[Po]){let g=this.keepAlive?S.parseKeepAliveTimeout(this.keepAlive):null;if(g!=null){let l=Math.min(g-s[vT],s[MT]);l<=0?o[be]=!0:s[Vo]=l}else s[Vo]=s[UT]}else o[be]=!0;let c=a.onHeaders(e,n,this.resume,i)===!1;return a.aborted?-1:a.method==="HEAD"||e<200?1:(o[Es]&&(o[Es]=!1,s[Ft]()),c?Le.ERROR.PAUSED:0)}onBody(e){let{client:r,socket:A,statusCode:s,maxResponseSize:o}=this;if(A.destroyed)return-1;let n=r[et][r[Ve]];if(k(n),k(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),k(s>=200),o>-1&&this.bytesRead+e.length>o)return S.destroy(A,new NT),-1;if(this.bytesRead+=e.length,n.onData(e)===!1)return Le.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:r,statusCode:A,upgrade:s,headers:o,contentLength:n,bytesRead:i,shouldKeepAlive:a}=this;if(r.destroyed&&(!A||a))return-1;if(s)return;k(A>=100),k((this.headers.length&1)===0);let c=e[et][e[Ve]];if(k(c),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,!(A<200)){if(c.method!=="HEAD"&&n&&i!==parseInt(n,10))return S.destroy(r,new Kh),-1;if(c.onComplete(o),e[et][e[Ve]++]=null,r[ac]=!0,r[Ht])return k(e[ce]===0),S.destroy(r,new uA("reset")),Le.ERROR.PAUSED;if(a){if(r[be]&&e[ce]===0)return S.destroy(r,new uA("reset")),Le.ERROR.PAUSED;e[Po]==null||e[Po]===1?setImmediate(()=>e[Ft]()):e[Ft]()}else return S.destroy(r,new uA("reset")),Le.ERROR.PAUSED}}};function rQ(t){let{socket:e,timeoutType:r,client:A,paused:s}=t.deref();r===EA?(!e[Ht]||e.writableNeedDrain||A[ce]>1)&&(k(!s,"cannot be paused while waiting for headers"),S.destroy(e,new bT)):r===Ho?s||S.destroy(e,new FT):r===nc&&(k(A[ce]===0&&A[Vo]),S.destroy(e,new uA("socket idle timeout")))}async function VT(t,e){t[mr]=e,Ac||(Ac=await oc,oc=null),e[ls]=!1,e[Ht]=!1,e[be]=!1,e[Es]=!1,e[wr]=0,e[pr]=null,e[ac]=!1,e[j]=new ic(t,e,Ac),Yo(e,"error",function(A){k(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let s=this[j];if(A.code==="ECONNRESET"&&s.statusCode&&!s.shouldKeepAlive){let o=s.finish();o&&(this[pe]=o,this[Jo][eQ](o));return}this[pe]=A,this[Jo][eQ](A)}),Yo(e,"readable",function(){let A=this[j];A&&A.readMore()}),Yo(e,"end",function(){let A=this[j];if(A.statusCode&&!A.shouldKeepAlive){let s=A.finish();s&&S.destroy(this,s);return}S.destroy(this,new lA("other side closed",S.getSocketInfo(this)))}),Yo(e,"close",function(){let A=this[Jo],s=this[j];cQ(this),s&&(!this[pe]&&s.statusCode&&!s.shouldKeepAlive&&(this[pe]=s.finish()||this[pe]),this[j].destroy(),this[j]=null);let o=this[pe]||new lA("closed",S.getSocketInfo(this));if(A[mr]=null,A[aQ]=null,A.destroyed){k(A[iQ]===0);let n=A[et].splice(A[Ve]);for(let i=0;i0&&o.code!=="UND_ERR_INFO"){let n=A[et][A[Ve]];A[et][A[Ve]++]=null,S.errorRequest(A,n,o)}A[LT]=A[Ve],k(A[ce]===0),A.emit("disconnect",A[nQ],[A],o),A[Ft]()});let r=!1;return e.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...A){return ZT(t,...A)},resume(){WT(t)},destroy(A,s){r?queueMicrotask(s):e.destroy(A).on("close",s)},get destroyed(){return e.destroyed},busy(A){return!!(e[Ht]||e[be]||e[Es]||e[wr]===1||A&&(t[ce]>0&&!A.idempotent||t[ce]>0&&(A.upgrade||A.method==="CONNECT")||t[ce]>0&&S.bodyLength(A.body)!==0&&(S.isStream(A.body)||S.isAsyncIterable(A.body)||S.isFormDataLike(A.body))))}}}function cQ(t){t[pr]&&(clearTimeout(t[pr]),t[pr]=null),t[wr]=0}function qT(t,e){e[wr]=1,e[pr]=setTimeout(()=>{e[pr]=null,e[wr]=2,t[mr]===e&&!e.destroyed&&t[Ft]()},0),e[pr].unref?.()}function WT(t){let e=t[mr];if(e&&!e.destroyed){if(t[Xh]===0?!e[ls]&&e.unref&&(e.unref(),e[ls]=!0):e[ls]&&e.ref&&(e.ref(),e[ls]=!1),t[ce]===0&&t[iQ]>0&&e[ac]){if(e[wr]===0)return qT(t,e),e[j].readMore(),e.destroyed,void 0;if(e[wr]===1)return e[j].readMore(),e.destroyed,void 0}if(t[ce]===0&&(e[j].readMore(),e.destroyed))return;if(t[Xh]===0)e[j].timeoutType!==nc&&e[j].setTimeout(t[Vo],nc);else if(t[ce]>0&&e[j].statusCode<200&&e[j].timeoutType!==EA){let r=t[et][t[Ve]],A=r.headersTimeout!=null?r.headersTimeout:t[xT];e[j].setTimeout(A,EA)}}}function zT(t){return t!=="GET"&&t!=="HEAD"&&t!=="OPTIONS"&&t!=="TRACE"&&t!=="CONNECT"}function ZT(t,e){let{method:r,path:A,host:s,upgrade:o,blocking:n,reset:i}=e,{body:a,headers:c,contentLength:g}=e,l=r==="PUT"||r==="POST"||r==="PATCH"||r==="QUERY"||r==="PROPFIND"||r==="PROPPATCH";if(S.isFormDataLike(a)){rc||(rc=gA().extractBody);let[I,Q]=rc(a);e.contentType==null&&c.push("content-type",Q),a=I.stream,g=I.length}else if(S.isBlobLike(a)&&e.contentType==null){let I=a.type;if(I){let Q=`${I}`;if(!S.isValidHeaderValue(Q))return S.errorRequest(t,e,new TT("invalid content-type header")),!1;c.push("content-type",Q)}}a&&typeof a.read=="function"&&a.read(0);let u=S.bodyLength(a);if(g=u??g,g===null&&(g=e.contentLength),g===0&&!l&&(g=null),zT(r)&&g>0&&e.contentLength!==null&&e.contentLength!==g){if(t[sc])return S.errorRequest(t,e,new fr),!1;process.emitWarning(new fr)}let E=t[mr];cQ(E);let h=I=>{e.aborted||e.completed||(S.errorRequest(t,e,I||new oQ),S.destroy(a),S.destroy(E,new uA("aborted")))};try{e.onConnect(h)}catch(I){S.errorRequest(t,e,I)}if(e.aborted)return!1;r==="HEAD"&&(E[be]=!0),(o||r==="CONNECT")&&(E[be]=!0),i!=null&&(E[be]=i),t[$h]&&E[YT]++>=t[$h]&&(E[be]=!0),n&&(E[Es]=!0);let d=`${r} ${A} HTTP/1.1\r -`;if(typeof s=="string"?d+=`host: ${s}\r -`:d+=t[GT],o?d+=`connection: upgrade\r +`);u.push(f,Q,E),typeof Q.size=="number"?o+=f.byteLength+Q.size+E.byteLength:h=!0}let C=xo.encode(`--${a}--\r +`);u.push(C),o+=C.byteLength,h&&(o=null),s=t,A=async function*(){for(let I of u)I.stream?yield*I.stream():yield I},n=`multipart/form-data; boundary=${a}`}else if(Jh(t))s=t,o=t.size,t.type&&(n=t.type);else if(typeof t[Symbol.asyncIterator]=="function"){if(e)throw new TypeError("keepalive");if(cs.isDisturbed(t)||t.locked)throw new TypeError("Response body object should not be disturbed or locked");r=t instanceof ReadableStream?t:hT(t)}if((typeof s=="string"||cs.isBuffer(s))&&(o=Buffer.byteLength(s)),A!=null){let a;r=new ReadableStream({async start(){a=A(t)[Symbol.asyncIterator]()},async pull(c){let{value:g,done:l}=await a.next();if(l)queueMicrotask(()=>{c.close(),c.byobRequest?.respond(0)});else if(!qh(r)){let u=new Uint8Array(g);u.byteLength&&c.enqueue(u)}return c.desiredSize>0},async cancel(c){await a.return()},type:"bytes"})}return[{stream:r,source:s,length:o},n]}function TT(t,e=!1){return t instanceof ReadableStream&&($a(!cs.isDisturbed(t),"The body has already been consumed."),$a(!t.locked,"The stream is locked.")),Zh(t,e)}function bT(t,e){let[r,A]=e.stream.tee();return e.stream=r,{stream:A,length:e.length,source:e.source}}function kT(t){if(t.aborted)throw new DOMException("The operation was aborted.","AbortError")}function FT(t){return{blob(){return iA(this,r=>{let A=Hh(this);return A===null?A="":A&&(A=yT(A)),new pT([r],{type:A})},t)},arrayBuffer(){return iA(this,r=>new Uint8Array(r).buffer,t)},text(){return iA(this,Vh,t)},json(){return iA(this,NT,t)},formData(){return iA(this,r=>{let A=Hh(this);if(A!==null)switch(A.essence){case"multipart/form-data":{let s=RT(r,A);if(s==="failure")throw new TypeError("Failed to parse body as FormData.");let o=new Ph;return o[aA]=s,o}case"application/x-www-form-urlencoded":{let s=new URLSearchParams(r.toString()),o=new Ph;for(let[n,i]of s)o.append(n,i);return o}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')},t)},bytes(){return iA(this,r=>new Uint8Array(r),t)}}}function ST(t){Object.assign(t.prototype,FT(t))}async function iA(t,e,r){if(fT.brandCheck(t,r),jh(t))throw new TypeError("Body is unusable: Body has already been read");kT(t[aA]);let A=IT(),s=n=>A.reject(n),o=n=>{try{A.resolve(e(n))}catch(i){s(i)}};return t[aA].body==null?(o(Buffer.allocUnsafe(0)),A.promise):(await CT(t[aA].body,o,s),A.promise)}function jh(t){let e=t[aA].body;return e!=null&&(e.stream.locked||cs.isDisturbed(e.stream))}function NT(t){return JSON.parse(Vh(t))}function Hh(t){let e=t[aA].headersList,r=dT(e);return r==="failure"?null:r}Kh.exports={extractBody:Zh,safelyExtractBody:TT,cloneBody:bT,mixinBody:ST,streamRegistry:zh,hasFinalizationRegistry:Wh,bodyUnusable:jh}});var EQ=B((OJ,uQ)=>{"use strict";var b=require("node:assert"),F=M(),{channels:Xh}=jr(),tc=Ma(),{RequestContentLengthMismatchError:dr,ResponseContentLengthMismatchError:$h,RequestAbortedError:iQ,InvalidArgumentError:UT,HeadersTimeoutError:GT,HeadersOverflowError:LT,SocketError:gA,InformationalError:lA,BodyTimeoutError:MT,HTTPParserError:vT,ResponseExceededMaxSizeError:xT}=Y(),{kUrl:aQ,kReset:be,kClient:Jo,kParser:j,kBlocking:us,kRunning:ce,kPending:cQ,kSize:eQ,kWriting:Ht,kQueue:et,kNoRef:gs,kKeepAliveDefaultTimeout:OT,kHostHeader:YT,kPendingIdx:_T,kRunningIdx:Ve,kError:pe,kPipelining:Po,kSocket:pr,kKeepAliveTimeoutValue:Vo,kMaxHeadersSize:rc,kKeepAliveMaxTimeout:JT,kKeepAliveTimeoutThreshold:PT,kHeadersTimeout:HT,kBodyTimeout:VT,kStrictContentLength:oc,kMaxRequests:tQ,kCounter:qT,kMaxResponseSize:WT,kOnError:rQ,kResume:Ft,kHTTPContext:gQ}=$(),Le=zE(),AQ=Buffer.alloc(0),Oo=Buffer[Symbol.species],Yo=F.addListener,zT=F.removeAllListeners,mr=Symbol("kIdleSocketValidation"),fr=Symbol("kIdleSocketValidationTimeout"),cc=Symbol("kSocketUsed"),Ac;async function ZT(){let t=process.env.JEST_WORKER_ID?Oa():void 0,e;try{e=await WebAssembly.compile(KE())}catch{e=await WebAssembly.compile(t||Oa())}return await WebAssembly.instantiate(e,{env:{wasm_on_url:(r,A,s)=>0,wasm_on_status:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onStatus(new Oo(ht.buffer,o,s))||0},wasm_on_message_begin:r=>(b(se.ptr===r),se.onMessageBegin()||0),wasm_on_header_field:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderField(new Oo(ht.buffer,o,s))||0},wasm_on_header_value:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderValue(new Oo(ht.buffer,o,s))||0},wasm_on_headers_complete:(r,A,s,o)=>(b(se.ptr===r),se.onHeadersComplete(A,!!s,!!o)||0),wasm_on_body:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onBody(new Oo(ht.buffer,o,s))||0},wasm_on_message_complete:r=>(b(se.ptr===r),se.onMessageComplete()||0)}})}var sc=null,nc=ZT();nc.catch();var se=null,ht=null,_o=0,Qt=null,jT=0,ls=1,uA=2|ls,Ho=4|ls,ic=8|jT,ac=class{constructor(e,r,{exports:A}){b(Number.isFinite(e[rc])&&e[rc]>0),this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Le.TYPE.RESPONSE),this.client=e,this.socket=r,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[rc],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[WT]}setTimeout(e,r){e!==this.timeoutValue||r&ls^this.timeoutType&ls?(this.timeout&&(tc.clearTimeout(this.timeout),this.timeout=null),e&&(r&ls?this.timeout=tc.setFastTimeout(sQ,e,new WeakRef(this)):(this.timeout=setTimeout(sQ,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=r}resume(){this.socket.destroyed||!this.paused||(b(this.ptr!=null),b(se==null),this.llhttp.llhttp_resume(this.ptr),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||AQ),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){b(this.ptr!=null),b(se==null),b(!this.paused);let{socket:r,llhttp:A}=this;e.length>_o&&(Qt&&A.free(Qt),_o=Math.ceil(e.length/4096)*4096,Qt=A.malloc(_o)),new Uint8Array(A.memory.buffer,Qt,_o).set(e);try{let s;try{ht=e,se=this,s=A.llhttp_execute(this.ptr,Qt,e.length)}catch(n){throw n}finally{se=null,ht=null}let o=A.llhttp_get_error_pos(this.ptr)-Qt;if(s!==Le.ERROR.OK){let n=e.subarray(o);if(s===Le.ERROR.PAUSED_UPGRADE)this.onUpgrade(n);else if(s===Le.ERROR.PAUSED)this.paused=!0,r.unshift(n);else throw this.createError(s,n)}}catch(s){F.destroy(r,s)}}finish(){b(se===null),b(this.ptr!=null),b(!this.paused);let{llhttp:e}=this,r;try{se=this,r=e.llhttp_finish(this.ptr)}finally{se=null}return r===Le.ERROR.OK?null:r===Le.ERROR.PAUSED||r===Le.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,AQ)}createError(e,r){let{llhttp:A,contentLength:s,bytesRead:o}=this;if(s&&o!==parseInt(s,10))return new $h;let n=A.llhttp_get_error_reason(this.ptr),i="";if(n){let a=new Uint8Array(A.memory.buffer,n).indexOf(0);i="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,n,a).toString()+")"}return new vT(i,Le.ERROR[e],r)}destroy(){b(this.ptr!=null),b(se==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&tc.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:r}=this;if(e.destroyed)return-1;if(r[ce]===0)return F.destroy(e,new gA("bad response",F.getSocketInfo(e))),-1;let A=r[et][r[Ve]];if(!A)return-1;A.onResponseStarted()}onHeaderField(e){let r=this.headers.length;(r&1)===0?this.headers.push(e):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]),this.trackHeader(e.length)}onHeaderValue(e){let r=this.headers.length;(r&1)===1?(this.headers.push(e),r+=1):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]);let A=this.headers[r-2];if(A.length===10){let s=F.bufferToLowerCasedHeaderName(A);s==="keep-alive"?this.keepAlive+=e.toString():s==="connection"&&(this.connection+=e.toString())}else A.length===14&&F.bufferToLowerCasedHeaderName(A)==="content-length"&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&F.destroy(this.socket,new LT)}onUpgrade(e){let{upgrade:r,client:A,socket:s,headers:o,statusCode:n}=this;b(r),b(A[pr]===s),b(!s.destroyed),b(!this.paused),b((o.length&1)===0);let i=A[et][A[Ve]];b(i),b(i.upgrade||i.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,s.unshift(e),s[j].destroy(),s[j]=null,s[Jo]=null,s[pe]=null,zT(s),A[pr]=null,A[gQ]=null,A[et][A[Ve]++]=null,A.emit("disconnect",A[aQ],[A],new lA("upgrade"));try{i.onUpgrade(n,o,s)}catch(a){F.destroy(s,a)}A[Ft]()}onHeadersComplete(e,r,A){let{client:s,socket:o,headers:n,statusText:i}=this;if(o.destroyed)return-1;if(s[ce]===0)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;let a=s[et][s[Ve]];if(!a)return-1;if(b(!this.upgrade),b(this.statusCode<200),e===100)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;if(r&&!a.upgrade)return F.destroy(o,new gA("bad upgrade",F.getSocketInfo(o))),-1;if(b(this.timeoutType===uA),this.statusCode=e,this.shouldKeepAlive=A||a.method==="HEAD"&&!o[be]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let g=a.bodyTimeout!=null?a.bodyTimeout:s[VT];this.setTimeout(g,Ho)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(a.method==="CONNECT")return b(s[ce]===1),this.upgrade=!0,2;if(r)return b(s[ce]===1),this.upgrade=!0,2;if(b((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&s[Po]){let g=this.keepAlive?F.parseKeepAliveTimeout(this.keepAlive):null;if(g!=null){let l=Math.min(g-s[PT],s[JT]);l<=0?o[be]=!0:s[Vo]=l}else s[Vo]=s[OT]}else o[be]=!0;let c=a.onHeaders(e,n,this.resume,i)===!1;return a.aborted?-1:a.method==="HEAD"||e<200?1:(o[us]&&(o[us]=!1,s[Ft]()),c?Le.ERROR.PAUSED:0)}onBody(e){let{client:r,socket:A,statusCode:s,maxResponseSize:o}=this;if(A.destroyed)return-1;let n=r[et][r[Ve]];if(b(n),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),b(s>=200),o>-1&&this.bytesRead+e.length>o)return F.destroy(A,new xT),-1;if(this.bytesRead+=e.length,n.onData(e)===!1)return Le.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:r,statusCode:A,upgrade:s,headers:o,contentLength:n,bytesRead:i,shouldKeepAlive:a}=this;if(r.destroyed&&(!A||a))return-1;if(s)return;b(A>=100),b((this.headers.length&1)===0);let c=e[et][e[Ve]];if(b(c),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,!(A<200)){if(c.method!=="HEAD"&&n&&i!==parseInt(n,10))return F.destroy(r,new $h),-1;if(c.onComplete(o),e[et][e[Ve]++]=null,r[cc]=!0,r[Ht])return b(e[ce]===0),F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;if(a){if(r[be]&&e[ce]===0)return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;e[Po]==null||e[Po]===1?setImmediate(()=>e[Ft]()):e[Ft]()}else return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED}}};function sQ(t){let{socket:e,timeoutType:r,client:A,paused:s}=t.deref();r===uA?(!e[Ht]||e.writableNeedDrain||A[ce]>1)&&(b(!s,"cannot be paused while waiting for headers"),F.destroy(e,new GT)):r===Ho?s||F.destroy(e,new MT):r===ic&&(b(A[ce]===0&&A[Vo]),F.destroy(e,new lA("socket idle timeout")))}async function KT(t,e){t[pr]=e,sc||(sc=await nc,nc=null),e[gs]=!1,e[Ht]=!1,e[be]=!1,e[us]=!1,e[mr]=0,e[fr]=null,e[cc]=!1,e[j]=new ac(t,e,sc),Yo(e,"error",function(A){b(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let s=this[j];if(A.code==="ECONNRESET"&&s.statusCode&&!s.shouldKeepAlive){let o=s.finish();o&&(this[pe]=o,this[Jo][rQ](o));return}this[pe]=A,this[Jo][rQ](A)}),Yo(e,"readable",function(){let A=this[j];A&&A.readMore()}),Yo(e,"end",function(){let A=this[j];if(A.statusCode&&!A.shouldKeepAlive){let s=A.finish();s&&F.destroy(this,s);return}F.destroy(this,new gA("other side closed",F.getSocketInfo(this)))}),Yo(e,"close",function(){let A=this[Jo],s=this[j];lQ(this),s&&(!this[pe]&&s.statusCode&&!s.shouldKeepAlive&&(this[pe]=s.finish()||this[pe]),this[j].destroy(),this[j]=null);let o=this[pe]||new gA("closed",F.getSocketInfo(this));if(A[pr]=null,A[gQ]=null,A.destroyed){b(A[cQ]===0);let n=A[et].splice(A[Ve]);for(let i=0;i0&&o.code!=="UND_ERR_INFO"){let n=A[et][A[Ve]];A[et][A[Ve]++]=null,F.errorRequest(A,n,o)}A[_T]=A[Ve],b(A[ce]===0),A.emit("disconnect",A[aQ],[A],o),A[Ft]()});let r=!1;return e.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...A){return tb(t,...A)},resume(){$T(t)},destroy(A,s){r?queueMicrotask(s):e.destroy(A).on("close",s)},get destroyed(){return e.destroyed},busy(A){return!!(e[Ht]||e[be]||e[us]||e[mr]===1||A&&(t[ce]>0&&!A.idempotent||t[ce]>0&&(A.upgrade||A.method==="CONNECT")||t[ce]>0&&F.bodyLength(A.body)!==0&&(F.isStream(A.body)||F.isAsyncIterable(A.body)||F.isFormDataLike(A.body))))}}}function lQ(t){t[fr]&&(clearTimeout(t[fr]),t[fr]=null),t[mr]=0}function XT(t,e){e[mr]=1,e[fr]=setTimeout(()=>{e[fr]=null,e[mr]=2,t[pr]===e&&!e.destroyed&&t[Ft]()},0),e[fr].unref?.()}function $T(t){let e=t[pr];if(e&&!e.destroyed){if(t[eQ]===0?!e[gs]&&e.unref&&(e.unref(),e[gs]=!0):e[gs]&&e.ref&&(e.ref(),e[gs]=!1),t[ce]===0&&t[cQ]>0&&e[cc]){if(e[mr]===0)return XT(t,e),e[j].readMore(),e.destroyed,void 0;if(e[mr]===1)return e[j].readMore(),e.destroyed,void 0}if(t[ce]===0&&(e[j].readMore(),e.destroyed))return;if(t[eQ]===0)e[j].timeoutType!==ic&&e[j].setTimeout(t[Vo],ic);else if(t[ce]>0&&e[j].statusCode<200&&e[j].timeoutType!==uA){let r=t[et][t[Ve]],A=r.headersTimeout!=null?r.headersTimeout:t[HT];e[j].setTimeout(A,uA)}}}function eb(t){return t!=="GET"&&t!=="HEAD"&&t!=="OPTIONS"&&t!=="TRACE"&&t!=="CONNECT"}function tb(t,e){let{method:r,path:A,host:s,upgrade:o,blocking:n,reset:i}=e,{body:a,headers:c,contentLength:g}=e,l=r==="PUT"||r==="POST"||r==="PATCH"||r==="QUERY"||r==="PROPFIND"||r==="PROPPATCH";if(F.isFormDataLike(a)){Ac||(Ac=cA().extractBody);let[I,Q]=Ac(a);e.contentType==null&&c.push("content-type",Q),a=I.stream,g=I.length}else if(F.isBlobLike(a)&&e.contentType==null){let I=a.type;if(I){let Q=`${I}`;if(!F.isValidHeaderValue(Q))return F.errorRequest(t,e,new UT("invalid content-type header")),!1;c.push("content-type",Q)}}a&&typeof a.read=="function"&&a.read(0);let u=F.bodyLength(a);if(g=u??g,g===null&&(g=e.contentLength),g===0&&!l&&(g=null),eb(r)&&g>0&&e.contentLength!==null&&e.contentLength!==g){if(t[oc])return F.errorRequest(t,e,new dr),!1;process.emitWarning(new dr)}let E=t[pr];lQ(E);let h=I=>{e.aborted||e.completed||(F.errorRequest(t,e,I||new iQ),F.destroy(a),F.destroy(E,new lA("aborted")))};try{e.onConnect(h)}catch(I){F.errorRequest(t,e,I)}if(e.aborted)return!1;r==="HEAD"&&(E[be]=!0),(o||r==="CONNECT")&&(E[be]=!0),i!=null&&(E[be]=i),t[tQ]&&E[qT]++>=t[tQ]&&(E[be]=!0),n&&(E[us]=!0);let C=`${r} ${A} HTTP/1.1\r +`;if(typeof s=="string"?C+=`host: ${s}\r +`:C+=t[YT],o?C+=`connection: upgrade\r upgrade: ${o}\r -`:t[Po]&&!E[be]?d+=`connection: keep-alive\r -`:d+=`connection: close\r -`,Array.isArray(c))for(let I=0;I{e.removeListener("error",E)}),!a){let h=new oQ;queueMicrotask(()=>E(h))}},E=function(h){if(!a){if(a=!0,k(s.destroyed||s[Ht]&&r[ce]<=1),s.off("drain",l).off("error",E),e.removeListener("data",g).removeListener("end",E).removeListener("close",u),!h)try{c.end()}catch(d){h=d}c.destroy(h),h&&(h.code!=="UND_ERR_INFO"||h.message!=="reset")?S.destroy(e,h):S.destroy(e)}};e.on("data",g).on("end",E).on("error",E).on("close",u),e.resume&&e.resume(),s.on("drain",l).on("error",E),e.errorEmitted??e.errored?setImmediate(()=>E(e.errored)):(e.endEmitted??e.readableEnded)&&setImmediate(()=>E(null)),(e.closeEmitted??e.closed)&&setImmediate(u)}function AQ(t,e,r,A,s,o,n,i){try{e?S.isBuffer(e)&&(k(o===e.byteLength,"buffer body must have content length"),s.cork(),s.write(`${n}content-length: ${o}\r +`:t[Po]&&!E[be]?C+=`connection: keep-alive\r +`:C+=`connection: close\r +`,Array.isArray(c))for(let I=0;I{e.removeListener("error",E)}),!a){let h=new iQ;queueMicrotask(()=>E(h))}},E=function(h){if(!a){if(a=!0,b(s.destroyed||s[Ht]&&r[ce]<=1),s.off("drain",l).off("error",E),e.removeListener("data",g).removeListener("end",E).removeListener("close",u),!h)try{c.end()}catch(C){h=C}c.destroy(h),h&&(h.code!=="UND_ERR_INFO"||h.message!=="reset")?F.destroy(e,h):F.destroy(e)}};e.on("data",g).on("end",E).on("error",E).on("close",u),e.resume&&e.resume(),s.on("drain",l).on("error",E),e.errorEmitted??e.errored?setImmediate(()=>E(e.errored)):(e.endEmitted??e.readableEnded)&&setImmediate(()=>E(null)),(e.closeEmitted??e.closed)&&setImmediate(u)}function oQ(t,e,r,A,s,o,n,i){try{e?F.isBuffer(e)&&(b(o===e.byteLength,"buffer body must have content length"),s.cork(),s.write(`${n}content-length: ${o}\r \r `,"latin1"),s.write(e),s.uncork(),A.onBodySent(e),!i&&A.reset!==!1&&(s[be]=!0)):o===0?s.write(`${n}content-length: 0\r \r -`,"latin1"):(k(o===null,"no body must not have content length"),s.write(`${n}\r -`,"latin1")),A.onRequestSent(),r[Ft]()}catch(a){t(a)}}async function KT(t,e,r,A,s,o,n,i){k(o===e.size,"blob body must have content length");try{if(o!=null&&o!==e.size)throw new fr;let a=Buffer.from(await e.arrayBuffer());s.cork(),s.write(`${n}content-length: ${o}\r +`,"latin1"):(b(o===null,"no body must not have content length"),s.write(`${n}\r +`,"latin1")),A.onRequestSent(),r[Ft]()}catch(a){t(a)}}async function Ab(t,e,r,A,s,o,n,i){b(o===e.size,"blob body must have content length");try{if(o!=null&&o!==e.size)throw new dr;let a=Buffer.from(await e.arrayBuffer());s.cork(),s.write(`${n}content-length: ${o}\r \r -`,"latin1"),s.write(a),s.uncork(),A.onBodySent(a),A.onRequestSent(),!i&&A.reset!==!1&&(s[be]=!0),r[Ft]()}catch(a){t(a)}}async function sQ(t,e,r,A,s,o,n,i){k(o!==0||r[ce]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let u=a;a=null,u()}}let g=()=>new Promise((u,E)=>{k(a===null),s[pe]?E(s[pe]):a=u});s.on("close",c).on("drain",c);let l=new qo({abort:t,socket:s,request:A,contentLength:o,client:r,expectsPayload:i,header:n});try{for await(let u of e){if(s[pe])throw s[pe];l.write(u)||await g()}l.end()}catch(u){l.destroy(u)}finally{s.off("close",c).off("drain",c)}}var qo=class{constructor({abort:e,socket:r,request:A,contentLength:s,client:o,expectsPayload:n,header:i}){this.socket=r,this.request=A,this.contentLength=s,this.client=o,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,r[Ht]=!0}write(e){let{socket:r,request:A,contentLength:s,client:o,bytesWritten:n,expectsPayload:i,header:a}=this;if(r[pe])throw r[pe];if(r.destroyed)return!1;let c=Buffer.byteLength(e);if(!c)return!0;if(s!==null&&n+c>s){if(o[sc])throw new fr;process.emitWarning(new fr)}r.cork(),n===0&&(!i&&A.reset!==!1&&(r[be]=!0),s===null?r.write(`${a}transfer-encoding: chunked\r +`,"latin1"),s.write(a),s.uncork(),A.onBodySent(a),A.onRequestSent(),!i&&A.reset!==!1&&(s[be]=!0),r[Ft]()}catch(a){t(a)}}async function nQ(t,e,r,A,s,o,n,i){b(o!==0||r[ce]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let u=a;a=null,u()}}let g=()=>new Promise((u,E)=>{b(a===null),s[pe]?E(s[pe]):a=u});s.on("close",c).on("drain",c);let l=new qo({abort:t,socket:s,request:A,contentLength:o,client:r,expectsPayload:i,header:n});try{for await(let u of e){if(s[pe])throw s[pe];l.write(u)||await g()}l.end()}catch(u){l.destroy(u)}finally{s.off("close",c).off("drain",c)}}var qo=class{constructor({abort:e,socket:r,request:A,contentLength:s,client:o,expectsPayload:n,header:i}){this.socket=r,this.request=A,this.contentLength=s,this.client=o,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,r[Ht]=!0}write(e){let{socket:r,request:A,contentLength:s,client:o,bytesWritten:n,expectsPayload:i,header:a}=this;if(r[pe])throw r[pe];if(r.destroyed)return!1;let c=Buffer.byteLength(e);if(!c)return!0;if(s!==null&&n+c>s){if(o[oc])throw new dr;process.emitWarning(new dr)}r.cork(),n===0&&(!i&&A.reset!==!1&&(r[be]=!0),s===null?r.write(`${a}transfer-encoding: chunked\r `,"latin1"):r.write(`${a}content-length: ${s}\r \r `,"latin1")),s===null&&r.write(`\r ${c.toString(16)}\r -`,"latin1"),this.bytesWritten+=c;let g=r.write(e);return r.uncork(),A.onBodySent(e),g||r[j].timeout&&r[j].timeoutType===EA&&r[j].timeout.refresh&&r[j].timeout.refresh(),g}end(){let{socket:e,contentLength:r,client:A,bytesWritten:s,expectsPayload:o,header:n,request:i}=this;if(i.onRequestSent(),e[Ht]=!1,e[pe])throw e[pe];if(!e.destroyed){if(s===0?o?e.write(`${n}content-length: 0\r +`,"latin1"),this.bytesWritten+=c;let g=r.write(e);return r.uncork(),A.onBodySent(e),g||r[j].timeout&&r[j].timeoutType===uA&&r[j].timeout.refresh&&r[j].timeout.refresh(),g}end(){let{socket:e,contentLength:r,client:A,bytesWritten:s,expectsPayload:o,header:n,request:i}=this;if(i.onRequestSent(),e[Ht]=!1,e[pe])throw e[pe];if(!e.destroyed){if(s===0?o?e.write(`${n}content-length: 0\r \r `,"latin1"):e.write(`${n}\r `,"latin1"):r===null&&e.write(`\r 0\r \r -`,"latin1"),r!==null&&s!==r){if(A[sc])throw new fr;process.emitWarning(new fr)}e[j].timeout&&e[j].timeoutType===EA&&e[j].timeout.refresh&&e[j].timeout.refresh(),A[Ft]()}}destroy(e){let{socket:r,client:A,abort:s}=this;r[Ht]=!1,e&&(k(A[ce]<=1,"pipeline should only contain this request"),s(e))}};gQ.exports=VT});var dQ=B((PJ,CQ)=>{"use strict";var qe=C("node:assert"),{pipeline:XT}=C("node:stream"),x=v(),{RequestContentLengthMismatchError:cc,RequestAbortedError:uQ,SocketError:hs,InformationalError:gc}=_(),{kUrl:Wo,kReset:Zo,kClient:hA,kRunning:jo,kPending:$T,kQueue:Vt,kPendingIdx:lc,kRunningIdx:tt,kError:At,kSocket:he,kStrictContentLength:eb,kOnError:uc,kMaxConcurrentStreams:IQ,kHTTP2Session:rt,kResume:qt,kSize:tb,kHTTPContext:rb}=$(),St=Symbol("open streams"),EQ,hQ=!1,zo;try{zo=C("node:http2")}catch{zo={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:Ab,HTTP2_HEADER_METHOD:sb,HTTP2_HEADER_PATH:ob,HTTP2_HEADER_SCHEME:nb,HTTP2_HEADER_CONTENT_LENGTH:ib,HTTP2_HEADER_EXPECT:ab,HTTP2_HEADER_STATUS:cb}}=zo;function gb(t){let e=[];for(let[r,A]of Object.entries(t))if(Array.isArray(A))for(let s of A)e.push(Buffer.from(r),Buffer.from(s));else e.push(Buffer.from(r),Buffer.from(A));return e}async function lb(t,e){t[he]=e,hQ||(hQ=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=zo.connect(t[Wo],{createConnection:()=>e,peerMaxConcurrentStreams:t[IQ]});r[St]=0,r[hA]=t,r[he]=e,x.addListener(r,"error",Eb),x.addListener(r,"frameError",hb),x.addListener(r,"end",Qb),x.addListener(r,"goaway",Bb),x.addListener(r,"close",function(){let{[hA]:s}=this,{[he]:o}=s,n=this[he][At]||this[At]||new hs("closed",x.getSocketInfo(o));if(s[rt]=null,s.destroyed){qe(s[$T]===0);let i=s[Vt].splice(s[tt]);for(let a=0;a{A=!0}),{version:"h2",defaultPipelining:1/0,write(...s){return Cb(t,...s)},resume(){ub(t)},destroy(s,o){A?queueMicrotask(o):e.destroy(s).on("close",o)},get destroyed(){return e.destroyed},busy(){return!1}}}function ub(t){let e=t[he];e?.destroyed===!1&&(t[tb]===0&&t[IQ]===0?(e.unref(),t[rt].unref()):(e.ref(),t[rt].ref()))}function Eb(t){qe(t.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[he][At]=t,this[hA][uc](t)}function hb(t,e,r){if(r===0){let A=new gc(`HTTP/2: "frameError" received - type ${t}, code ${e}`);this[he][At]=A,this[hA][uc](A)}}function Qb(){let t=new hs("other side closed",x.getSocketInfo(this[he]));this.destroy(t),x.destroy(this[he],t)}function Bb(t){let e=this[At]||new hs(`HTTP/2: "GOAWAY" frame received with code ${t}`,x.getSocketInfo(this)),r=this[hA];if(r[he]=null,r[rb]=null,this[rt]!=null&&(this[rt].destroy(e),this[rt]=null),x.destroy(this[he],e),r[tt]{e.aborted||e.completed||(R=R||new uQ,x.errorRequest(t,e,R),u!=null&&x.destroy(u,R),x.destroy(g,R),t[Vt][t[tt]++]=null,t[qt]())};try{e.onConnect(d)}catch(R){x.errorRequest(t,e,R)}if(e.aborted)return!1;if(A==="CONNECT")return r.ref(),u=r.request(l,{endStream:!1,signal:a}),u.id&&!u.pending?(e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null):u.once("ready",()=>{e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),!0;l[ob]=s,l[nb]="https";let I=A==="PUT"||A==="POST"||A==="PATCH";g&&typeof g.read=="function"&&g.read(0);let Q=x.bodyLength(g);if(x.isFormDataLike(g)){EQ??=gA().extractBody;let[R,H]=EQ(g);l["content-type"]=H,g=R.stream,Q=R.length}if(Q==null&&(Q=e.contentLength),(Q===0||!I)&&(Q=null),Ib(A)&&Q>0&&e.contentLength!=null&&e.contentLength!==Q){if(t[eb])return x.errorRequest(t,e,new cc),!1;process.emitWarning(new cc)}Q!=null&&(qe(g,"no body must not have content length"),l[ib]=`${Q}`),r.ref();let p=A==="GET"||A==="HEAD"||g===null;return i?(l[ab]="100-continue",u=r.request(l,{endStream:p,signal:a}),u.once("continue",D)):(u=r.request(l,{endStream:p,signal:a}),D()),++r[St],u.once("response",R=>{let{[cb]:H,...Z}=R;if(e.onResponseStarted(),e.aborted){let Ae=new uQ;x.errorRequest(t,e,Ae),x.destroy(u,Ae);return}e.onHeaders(Number(H),gb(Z),u.resume.bind(u),"")===!1&&u.pause(),u.on("data",Ae=>{e.onData(Ae)===!1&&u.pause()})}),u.once("end",()=>{(u.state?.state==null||u.state.state<6)&&e.onComplete([]),r[St]===0&&r.unref(),d(new gc("HTTP/2: stream half-closed (remote)")),t[Vt][t[tt]++]=null,t[lc]=t[tt],t[qt]()}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),u.once("error",function(R){d(R)}),u.once("frameError",(R,H)=>{d(new gc(`HTTP/2: "frameError" received - type ${R}, code ${H}`))}),!0;function D(){!g||Q===0?QQ(d,u,null,t,e,t[he],Q,I):x.isBuffer(g)?QQ(d,u,g,t,e,t[he],Q,I):x.isBlobLike(g)?typeof g.stream=="function"?BQ(d,u,g.stream(),t,e,t[he],Q,I):fb(d,u,g,t,e,t[he],Q,I):x.isStream(g)?db(d,t[he],I,u,g,t,e,Q):x.isIterable(g)?BQ(d,u,g,t,e,t[he],Q,I):qe(!1)}}function QQ(t,e,r,A,s,o,n,i){try{r!=null&&x.isBuffer(r)&&(qe(n===r.byteLength,"buffer body must have content length"),e.cork(),e.write(r),e.uncork(),e.end(),s.onBodySent(r)),i||(o[Zo]=!0),s.onRequestSent(),A[qt]()}catch(a){t(a)}}function db(t,e,r,A,s,o,n,i){qe(i!==0||o[jo]===0,"stream body cannot be pipelined");let a=XT(s,A,g=>{g?(x.destroy(a,g),t(g)):(x.removeAllListeners(a),n.onRequestSent(),r||(e[Zo]=!0),o[qt]())});x.addListener(a,"data",c);function c(g){n.onBodySent(g)}}async function fb(t,e,r,A,s,o,n,i){qe(n===r.size,"blob body must have content length");try{if(n!=null&&n!==r.size)throw new cc;let a=Buffer.from(await r.arrayBuffer());e.cork(),e.write(a),e.uncork(),e.end(),s.onBodySent(a),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(a){t(a)}}async function BQ(t,e,r,A,s,o,n,i){qe(n!==0||A[jo]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let l=a;a=null,l()}}let g=()=>new Promise((l,u)=>{qe(a===null),o[At]?u(o[At]):a=l});e.on("close",c).on("drain",c);try{for await(let l of r){if(o[At])throw o[At];let u=e.write(l);s.onBodySent(l),u||await g()}e.end(),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(l){t(l)}finally{e.off("close",c).off("drain",c)}}CQ.exports=lb});var Xo=B((HJ,mQ)=>{"use strict";var Bt=v(),{kBodyUsed:Qs}=$(),hc=C("node:assert"),{InvalidArgumentError:pb}=_(),mb=C("node:events"),wb=[300,301,302,303,307,308],fQ=Symbol("body"),Ko=class{constructor(e){this[fQ]=e,this[Qs]=!1}async*[Symbol.asyncIterator](){hc(!this[Qs],"disturbed"),this[Qs]=!0,yield*this[fQ]}},Ec=class{constructor(e,r,A,s){if(r!=null&&(!Number.isInteger(r)||r<0))throw new pb("maxRedirections must be a positive number");Bt.validateHandler(s,A.method,A.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...A,maxRedirections:0},this.maxRedirections=r,this.handler=s,this.history=[],this.redirectionLimitReached=!1,Bt.isStream(this.opts.body)?(Bt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){hc(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[Qs]=!1,mb.prototype.on.call(this.opts.body,"data",function(){this[Qs]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Ko(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Bt.isIterable(this.opts.body)&&(this.opts.body=new Ko(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,r,A){this.handler.onUpgrade(e,r,A)}onError(e){this.handler.onError(e)}onHeaders(e,r,A,s){if(this.location=this.history.length>=this.maxRedirections||Bt.isDisturbed(this.opts.body)?null:yb(e,r),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(new Error("max redirects")),this.redirectionLimitReached=!0,this.abort(new Error("max redirects"));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,r,A,s);let{origin:o,pathname:n,search:i}=Bt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),a=i?`${n}${i}`:n;this.opts.headers=Rb(this.opts.headers,e===303,this.opts.origin!==o),this.opts.path=a,this.opts.origin=o,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!=="HEAD"&&(this.opts.method="GET",this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function yb(t,e){if(wb.indexOf(t)===-1)return null;for(let r=0;r{"use strict";var Db=Xo();function Tb({maxRedirections:t}){return e=>function(A,s){let{maxRedirections:o=t}=A;if(!o)return e(A,s);let n=new Db(e,o,A,s);return A={...A,maxRedirections:0},e(A,n)}}wQ.exports=Tb});var IA=B((qJ,UQ)=>{"use strict";var Nt=C("node:assert"),kQ=C("node:net"),bb=C("node:http"),yr=v(),{channels:QA}=Kr(),kb=UE(),Fb=tA(),{InvalidArgumentError:oe,InformationalError:Sb,ClientDestroyedError:Nb}=_(),Ub=rs(),{kUrl:It,kServerName:Wt,kClient:Gb,kBusy:Qc,kConnect:Lb,kResuming:Rr,kRunning:fs,kPending:ps,kSize:ds,kQueue:st,kConnected:Mb,kConnecting:BA,kNeedDrain:Zt,kKeepAliveDefaultTimeout:yQ,kHostHeader:vb,kPendingIdx:ot,kRunningIdx:Ut,kError:xb,kPipelining:en,kKeepAliveTimeoutValue:Ob,kMaxHeadersSize:Yb,kKeepAliveMaxTimeout:_b,kKeepAliveTimeoutThreshold:Jb,kHeadersTimeout:Pb,kBodyTimeout:Hb,kStrictContentLength:Vb,kConnector:Bs,kMaxRedirections:qb,kMaxRequests:Bc,kCounter:Wb,kClose:zb,kDestroy:Zb,kDispatch:jb,kInterceptors:RQ,kLocalAddress:Is,kMaxResponseSize:Kb,kOnError:Xb,kHTTPContext:ne,kMaxConcurrentStreams:$b,kResume:Cs}=$(),ek=lQ(),tk=dQ(),DQ=!1,zt=Symbol("kClosedResolve"),TQ=()=>{};function FQ(t){return t[en]??t[ne]?.defaultPipelining??1}var Ic=class extends Fb{constructor(e,{interceptors:r,maxHeaderSize:A,headersTimeout:s,socketTimeout:o,requestTimeout:n,connectTimeout:i,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:l,maxKeepAliveTimeout:u,keepAliveMaxTimeout:E,keepAliveTimeoutThreshold:h,socketPath:d,pipelining:I,tls:Q,strictContentLength:p,maxCachedSessions:D,maxRedirections:R,connect:H,maxRequestsPerClient:Z,localAddress:Ae,maxResponseSize:gt,autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:qr,maxConcurrentStreams:_t,allowH2:De,webSocket:Wr}={}){if(super({webSocket:Wr}),g!==void 0)throw new oe("unsupported keepAlive, use pipelining=0 instead");if(o!==void 0)throw new oe("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(n!==void 0)throw new oe("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new oe("unsupported idleTimeout, use keepAliveTimeout instead");if(u!==void 0)throw new oe("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(A!=null&&!Number.isFinite(A))throw new oe("invalid maxHeaderSize");if(d!=null&&typeof d!="string")throw new oe("invalid socketPath");if(i!=null&&(!Number.isFinite(i)||i<0))throw new oe("invalid connectTimeout");if(l!=null&&(!Number.isFinite(l)||l<=0))throw new oe("invalid keepAliveTimeout");if(E!=null&&(!Number.isFinite(E)||E<=0))throw new oe("invalid keepAliveMaxTimeout");if(h!=null&&!Number.isFinite(h))throw new oe("invalid keepAliveTimeoutThreshold");if(s!=null&&(!Number.isInteger(s)||s<0))throw new oe("headersTimeout must be a positive integer or zero");if(a!=null&&(!Number.isInteger(a)||a<0))throw new oe("bodyTimeout must be a positive integer or zero");if(H!=null&&typeof H!="function"&&typeof H!="object")throw new oe("connect must be a function or an object");if(R!=null&&(!Number.isInteger(R)||R<0))throw new oe("maxRedirections must be a positive number");if(Z!=null&&(!Number.isInteger(Z)||Z<0))throw new oe("maxRequestsPerClient must be a positive number");if(Ae!=null&&(typeof Ae!="string"||kQ.isIP(Ae)===0))throw new oe("localAddress must be valid string IP address");if(gt!=null&&(!Number.isInteger(gt)||gt<-1))throw new oe("maxResponseSize must be a positive number");if(qr!=null&&(!Number.isInteger(qr)||qr<-1))throw new oe("autoSelectFamilyAttemptTimeout must be a positive number");if(De!=null&&typeof De!="boolean")throw new oe("allowH2 must be a valid boolean value");if(_t!=null&&(typeof _t!="number"||_t<1))throw new oe("maxConcurrentStreams must be a positive integer, greater than 0");typeof H!="function"&&(H=Ub({...Q,maxCachedSessions:D,allowH2:De,socketPath:d,timeout:i,...wt?{autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:qr}:void 0,...H})),r?.Client&&Array.isArray(r.Client)?(this[RQ]=r.Client,DQ||(DQ=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[RQ]=[rk({maxRedirections:R})],this[It]=yr.parseOrigin(e),this[Bs]=H,this[en]=I??1,this[Yb]=A||bb.maxHeaderSize,this[yQ]=l??4e3,this[_b]=E??6e5,this[Jb]=h??2e3,this[Ob]=this[yQ],this[Wt]=null,this[Is]=Ae??null,this[Rr]=0,this[Zt]=0,this[vb]=`host: ${this[It].hostname}${this[It].port?`:${this[It].port}`:""}\r -`,this[Hb]=a??3e5,this[Pb]=s??3e5,this[Vb]=p??!0,this[qb]=R,this[Bc]=Z,this[zt]=null,this[Kb]=gt>-1?gt:-1,this[$b]=_t??100,this[ne]=null,this[st]=[],this[Ut]=0,this[ot]=0,this[Cs]=zr=>Cc(this,zr),this[Xb]=zr=>SQ(this,zr)}get pipelining(){return this[en]}set pipelining(e){this[en]=e,this[Cs](!0)}get[ps](){return this[st].length-this[ot]}get[fs](){return this[ot]-this[Ut]}get[ds](){return this[st].length-this[Ut]}get[Mb](){return!!this[ne]&&!this[BA]&&!this[ne].destroyed}get[Qc](){return!!(this[ne]?.busy(null)||this[ds]>=(FQ(this)||1)||this[ps]>0)}[Lb](e){NQ(this),this.once("connect",e)}[jb](e,r){let A=e.origin||this[It].origin,s=new kb(A,e,r);return this[st].push(s),this[Rr]||(yr.bodyLength(s.body)==null&&yr.isIterable(s.body)?(this[Rr]=1,queueMicrotask(()=>Cc(this))):this[Cs](!0)),this[Rr]&&this[Zt]!==2&&this[Qc]&&(this[Zt]=2),this[Zt]<2}async[zb](){return new Promise(e=>{this[ds]?this[zt]=e:e(null)})}async[Zb](e){return new Promise(r=>{let A=this[st].splice(this[ot]);for(let o=0;o{this[zt]&&(this[zt](),this[zt]=null),r(null)};this[ne]?(this[ne].destroy(e,s),this[ne]=null):queueMicrotask(s),this[Cs]()})}},rk=$o();function SQ(t,e){if(t[fs]===0&&e.code!=="UND_ERR_INFO"&&e.code!=="UND_ERR_SOCKET"){Nt(t[ot]===t[Ut]);let r=t[st].splice(t[Ut]);for(let A=0;A{t[Bs]({host:e,hostname:r,protocol:A,port:s,servername:t[Wt],localAddress:t[Is]},(a,c)=>{a?i(a):n(c)})});if(t.destroyed){yr.destroy(o.on("error",TQ),new Nb);return}Nt(o);try{t[ne]=o.alpnProtocol==="h2"?await tk(t,o):await ek(t,o)}catch(n){throw o.destroy().on("error",TQ),n}t[BA]=!1,o[Wb]=0,o[Bc]=t[Bc],o[Gb]=t,o[xb]=null,QA.connected.hasSubscribers&&QA.connected.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Is]},connector:t[Bs],socket:o}),t.emit("connect",t[It],[t])}catch(o){if(t.destroyed)return;if(t[BA]=!1,QA.connectError.hasSubscribers&&QA.connectError.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Is]},connector:t[Bs],error:o}),o.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(Nt(t[fs]===0);t[ps]>0&&t[st][t[ot]].servername===t[Wt];){let n=t[st][t[ot]++];yr.errorRequest(t,n,o)}else SQ(t,o);t.emit("connectionError",t[It],[t],o)}t[Cs]()}function bQ(t){t[Zt]=0,t.emit("drain",t[It],[t])}function Cc(t,e){t[Rr]!==2&&(t[Rr]=2,Ak(t,e),t[Rr]=0,t[Ut]>256&&(t[st].splice(0,t[Ut]),t[ot]-=t[Ut],t[Ut]=0))}function Ak(t,e){for(;;){if(t.destroyed){Nt(t[ps]===0);return}if(t[zt]&&!t[ds]){t[zt](),t[zt]=null;return}if(t[ne]&&t[ne].resume(),t[Qc])t[Zt]=2;else if(t[Zt]===2){e?(t[Zt]=1,queueMicrotask(()=>bQ(t))):bQ(t);continue}if(t[ps]===0||t[fs]>=(FQ(t)||1))return;let r=t[st][t[ot]];if(t[It].protocol==="https:"&&t[Wt]!==r.servername){if(t[fs]>0)return;t[Wt]=r.servername,t[ne]?.destroy(new Sb("servername changed"),()=>{t[ne]=null,Cc(t)})}if(t[BA])return;if(!t[ne]){NQ(t);return}if(t[ne].destroyed||t[ne].busy(r))return;!r.aborted&&t[ne].write(r)?t[ot]++:t[st].splice(t[ot],1)}}UQ.exports=Ic});var dc=B((zJ,GQ)=>{"use strict";var tn=class{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&2047}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,e)}};GQ.exports=class{constructor(){this.head=this.tail=new tn}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new tn),this.head.push(e)}shift(){let e=this.tail,r=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),r}}});var MQ=B((ZJ,LQ)=>{var{kFree:sk,kConnected:ok,kPending:nk,kQueued:ik,kRunning:ak,kSize:ck}=$(),Dr=Symbol("pool"),fc=class{constructor(e){this[Dr]=e}get connected(){return this[Dr][ok]}get free(){return this[Dr][sk]}get pending(){return this[Dr][nk]}get queued(){return this[Dr][ik]}get running(){return this[Dr][ak]}get size(){return this[Dr][ck]}};LQ.exports=fc});var Dc=B((jJ,qQ)=>{"use strict";var gk=tA(),lk=dc(),{kConnected:pc,kSize:vQ,kRunning:xQ,kPending:OQ,kQueued:ms,kBusy:uk,kFree:Ek,kUrl:hk,kClose:Qk,kDestroy:Bk,kDispatch:Ik}=$(),Ck=MQ(),ke=Symbol("clients"),me=Symbol("needDrain"),ws=Symbol("queue"),mc=Symbol("closed resolve"),wc=Symbol("onDrain"),YQ=Symbol("onConnect"),_Q=Symbol("onDisconnect"),JQ=Symbol("onConnectionError"),yc=Symbol("get dispatcher"),HQ=Symbol("add client"),VQ=Symbol("remove client"),PQ=Symbol("stats"),Rc=class extends gk{constructor(e){super(e),this[ws]=new lk,this[ke]=[],this[ms]=0;let r=this;this[wc]=function(s,o){let n=r[ws],i=!1;for(;!i;){let a=n.shift();if(!a)break;r[ms]--,i=!this.dispatch(a.opts,a.handler)}this[me]=i,!this[me]&&r[me]&&(r[me]=!1,r.emit("drain",s,[r,...o])),r[mc]&&n.isEmpty()&&Promise.all(r[ke].map(a=>a.close())).then(r[mc])},this[YQ]=(A,s)=>{r.emit("connect",A,[r,...s])},this[_Q]=(A,s,o)=>{r.emit("disconnect",A,[r,...s],o)},this[JQ]=(A,s,o)=>{r.emit("connectionError",A,[r,...s],o)},this[PQ]=new Ck(this)}get[uk](){return this[me]}get[pc](){return this[ke].filter(e=>e[pc]).length}get[Ek](){return this[ke].filter(e=>e[pc]&&!e[me]).length}get[OQ](){let e=this[ms];for(let{[OQ]:r}of this[ke])e+=r;return e}get[xQ](){let e=0;for(let{[xQ]:r}of this[ke])e+=r;return e}get[vQ](){let e=this[ms];for(let{[vQ]:r}of this[ke])e+=r;return e}get stats(){return this[PQ]}async[Qk](){this[ws].isEmpty()?await Promise.all(this[ke].map(e=>e.close())):await new Promise(e=>{this[mc]=e})}async[Bk](e){for(;;){let r=this[ws].shift();if(!r)break;r.handler.onError(e)}await Promise.all(this[ke].map(r=>r.destroy(e)))}[Ik](e,r){let A=this[yc]();return A?A.dispatch(e,r)||(A[me]=!0,this[me]=!this[yc]()):(this[me]=!0,this[ws].push({opts:e,handler:r}),this[ms]++),!this[me]}[HQ](e){return e.on("drain",this[wc]).on("connect",this[YQ]).on("disconnect",this[_Q]).on("connectionError",this[JQ]),this[ke].push(e),this[me]&&queueMicrotask(()=>{this[me]&&this[wc](e[hk],[this,e])}),this}[VQ](e){e.close(()=>{let r=this[ke].indexOf(e);r!==-1&&this[ke].splice(r,1)}),this[me]=this[ke].some(r=>!r[me]&&r.closed!==!0&&r.destroyed!==!0)}};qQ.exports={PoolBase:Rc,kClients:ke,kNeedDrain:me,kAddClient:HQ,kRemoveClient:VQ,kGetDispatcher:yc}});var CA=B((KJ,jQ)=>{"use strict";var{PoolBase:dk,kClients:rn,kNeedDrain:fk,kAddClient:pk,kGetDispatcher:mk}=Dc(),wk=IA(),{InvalidArgumentError:Tc}=_(),WQ=v(),{kUrl:zQ,kInterceptors:yk}=$(),Rk=rs(),bc=Symbol("options"),kc=Symbol("connections"),ZQ=Symbol("factory");function Dk(t,e){return new wk(t,e)}var Fc=class extends dk{constructor(e,{connections:r,factory:A=Dk,connect:s,connectTimeout:o,tls:n,maxCachedSessions:i,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g,allowH2:l,...u}={}){if(r!=null&&(!Number.isFinite(r)||r<0))throw new Tc("invalid connections");if(typeof A!="function")throw new Tc("factory must be a function.");if(s!=null&&typeof s!="function"&&typeof s!="object")throw new Tc("connect must be a function or an object");typeof s!="function"&&(s=Rk({...n,maxCachedSessions:i,allowH2:l,socketPath:a,timeout:o,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g}:void 0,...s})),super(u),this[yk]=u.interceptors?.Pool&&Array.isArray(u.interceptors.Pool)?u.interceptors.Pool:[],this[kc]=r||null,this[zQ]=WQ.parseOrigin(e),this[bc]={...WQ.deepClone(u),connect:s,allowH2:l},this[bc].interceptors=u.interceptors?{...u.interceptors}:void 0,this[ZQ]=A,this.on("connectionError",(E,h,d)=>{for(let I of h){let Q=this[rn].indexOf(I);Q!==-1&&this[rn].splice(Q,1)}})}[mk](){for(let e of this[rn])if(!e[fk])return e;if(!this[kc]||this[rn].length{"use strict";var{BalancedPoolMissingUpstreamError:Tk,InvalidArgumentError:bk}=_(),{PoolBase:kk,kClients:Ce,kNeedDrain:ys,kAddClient:Fk,kRemoveClient:Sk,kGetDispatcher:Nk}=Dc(),Uk=CA(),{kUrl:Sc,kInterceptors:Gk}=$(),{parseOrigin:KQ}=v(),XQ=Symbol("factory"),An=Symbol("options"),$Q=Symbol("kGreatestCommonDivisor"),Tr=Symbol("kCurrentWeight"),br=Symbol("kIndex"),We=Symbol("kWeight"),sn=Symbol("kMaxWeightPerServer"),on=Symbol("kErrorPenalty");function Lk(t,e){if(t===0)return e;for(;e!==0;){let r=e;e=t%e,t=r}return t}function Mk(t,e){return new Uk(t,e)}var Nc=class extends kk{constructor(e=[],{factory:r=Mk,...A}={}){if(super(),this[An]=A,this[br]=-1,this[Tr]=0,this[sn]=this[An].maxWeightPerServer||100,this[on]=this[An].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof r!="function")throw new bk("factory must be a function.");this[Gk]=A.interceptors?.BalancedPool&&Array.isArray(A.interceptors.BalancedPool)?A.interceptors.BalancedPool:[],this[XQ]=r;for(let s of e)this.addUpstream(s);this._updateBalancedPoolStats()}addUpstream(e){let r=KQ(e).origin;if(this[Ce].find(s=>s[Sc].origin===r&&s.closed!==!0&&s.destroyed!==!0))return this;let A=this[XQ](r,Object.assign({},this[An]));this[Fk](A),A.on("connect",()=>{A[We]=Math.min(this[sn],A[We]+this[on])}),A.on("connectionError",()=>{A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats()}),A.on("disconnect",(...s)=>{let o=s[2];o&&o.code==="UND_ERR_SOCKET"&&(A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats())});for(let s of this[Ce])s[We]=this[sn];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let r=0;rs[Sc].origin===r&&s.closed!==!0&&s.destroyed!==!0);return A&&this[Sk](A),this}get upstreams(){return this[Ce].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[Sc].origin)}[Nk](){if(this[Ce].length===0)throw new Tk;if(!this[Ce].find(o=>!o[ys]&&o.closed!==!0&&o.destroyed!==!0)||this[Ce].map(o=>o[ys]).reduce((o,n)=>o&&n,!0))return;let A=0,s=this[Ce].findIndex(o=>!o[ys]);for(;A++this[Ce][s][We]&&!o[ys]&&(s=this[br]),this[br]===0&&(this[Tr]=this[Tr]-this[$Q],this[Tr]<=0&&(this[Tr]=this[sn])),o[We]>=this[Tr]&&!o[ys])return o}return this[Tr]=this[Ce][s][We],this[br]=s,this[Ce][s]}};eB.exports=Nc});var dA=B(($J,aB)=>{"use strict";var{InvalidArgumentError:nn}=_(),{kClients:jt,kRunning:rB,kClose:vk,kDestroy:xk,kDispatch:Ok,kInterceptors:Yk}=$(),_k=tA(),Jk=CA(),Pk=IA(),Hk=v(),Vk=$o(),AB=Symbol("onConnect"),sB=Symbol("onDisconnect"),oB=Symbol("onConnectionError"),qk=Symbol("maxRedirections"),nB=Symbol("onDrain"),iB=Symbol("factory"),Uc=Symbol("options");function Wk(t,e){return e&&e.connections===1?new Pk(t,e):new Jk(t,e)}var Gc=class extends _k{constructor({factory:e=Wk,maxRedirections:r=0,connect:A,...s}={}){if(typeof e!="function")throw new nn("factory must be a function.");if(A!=null&&typeof A!="function"&&typeof A!="object")throw new nn("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new nn("maxRedirections must be a positive number");super(s),A&&typeof A!="function"&&(A={...A}),this[Yk]=s.interceptors?.Agent&&Array.isArray(s.interceptors.Agent)?s.interceptors.Agent:[Vk({maxRedirections:r})],this[Uc]={...Hk.deepClone(s),connect:A},this[Uc].interceptors=s.interceptors?{...s.interceptors}:void 0,this[qk]=r,this[iB]=e,this[jt]=new Map,this[nB]=(o,n)=>{this.emit("drain",o,[this,...n])},this[AB]=(o,n)=>{this.emit("connect",o,[this,...n])},this[sB]=(o,n,i)=>{this.emit("disconnect",o,[this,...n],i)},this[oB]=(o,n,i)=>{this.emit("connectionError",o,[this,...n],i)}}get[rB](){let e=0;for(let r of this[jt].values())e+=r[rB];return e}[Ok](e,r){let A;if(e.origin&&(typeof e.origin=="string"||e.origin instanceof URL))A=String(e.origin);else throw new nn("opts.origin must be a non-empty string or URL.");let s=this[jt].get(A);return s||(s=this[iB](e.origin,this[Uc]).on("drain",this[nB]).on("connect",this[AB]).on("disconnect",this[sB]).on("connectionError",this[oB]),this[jt].set(A,s)),s.dispatch(e,r)}async[vk](){let e=[];for(let r of this[jt].values())e.push(r.close());this[jt].clear(),await Promise.all(e)}async[xk](e){let r=[];for(let A of this[jt].values())r.push(A.destroy(e));this[jt].clear(),await Promise.all(r)}};aB.exports=Gc});var Oc=B((eP,dB)=>{"use strict";var{kProxy:Lc,kClose:hB,kDestroy:QB,kDispatch:cB,kInterceptors:zk}=$(),{URL:kr}=C("node:url"),Zk=dA(),BB=CA(),IB=tA(),{InvalidArgumentError:fA,RequestAbortedError:jk,SecureProxyConnectionError:Kk}=_(),gB=rs(),CB=IA(),an=Symbol("proxy agent"),cn=Symbol("proxy client"),Kt=Symbol("proxy headers"),Mc=Symbol("request tls settings"),lB=Symbol("proxy tls settings"),uB=Symbol("connect endpoint function"),EB=Symbol("tunnel proxy");function Xk(t){return t==="https:"?443:80}function $k(t,e){return new BB(t,e)}var eF=()=>{};function tF(t,e){return e.connections===1?new CB(t,e):new BB(t,e)}var vc=class extends IB{#e;constructor(e,{headers:r={},connect:A,factory:s}){if(super(),!e)throw new fA("Proxy URL is mandatory");this[Kt]=r,s?this.#e=s(e,{connect:A}):this.#e=new CB(e,{connect:A})}[cB](e,r){let A=r.onHeaders;r.onHeaders=function(i,a,c){if(i===407){typeof r.onError=="function"&&r.onError(new fA("Proxy Authentication Required (407)"));return}A&&A.call(this,i,a,c)};let{origin:s,path:o="/",headers:n={}}=e;if(e.path=s+o,!("host"in n)&&!("Host"in n)){let{host:i}=new kr(s);n.host=i}return e.headers={...this[Kt],...n},this.#e[cB](e,r)}async[hB](){return this.#e.close()}async[QB](e){return this.#e.destroy(e)}},xc=class extends IB{constructor(e){if(super(),!e||typeof e=="object"&&!(e instanceof kr)&&!e.uri)throw new fA("Proxy uri is mandatory");let{clientFactory:r=$k}=e;if(typeof r!="function")throw new fA("Proxy opts.clientFactory must be a function.");let{proxyTunnel:A=!0}=e,s=this.#e(e),{href:o,origin:n,port:i,protocol:a,username:c,password:g,hostname:l}=s;if(this[Lc]={uri:o,protocol:a},this[zk]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[Mc]=e.requestTls,this[lB]=e.proxyTls,this[Kt]=e.headers||{},this[EB]=A,e.auth&&e.token)throw new fA("opts.auth cannot be used in combination with opts.token");e.auth?this[Kt]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Kt]["proxy-authorization"]=e.token:c&&g&&(this[Kt]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(g)}`).toString("base64")}`);let u=gB({...e.proxyTls});this[uB]=gB({...e.requestTls});let E=e.factory||tF,h=(d,I)=>{let{protocol:Q}=new kr(d);return!this[EB]&&Q==="http:"&&this[Lc].protocol==="http:"?new vc(this[Lc].uri,{headers:this[Kt],connect:u,factory:E}):E(d,I)};this[cn]=r(s,{connect:u}),this[an]=new Zk({...e,factory:h,connect:async(d,I)=>{let Q=d.host;d.port||(Q+=`:${Xk(d.protocol)}`);try{let{socket:p,statusCode:D}=await this[cn].connect({origin:n,port:i,path:Q,signal:d.signal,headers:{...this[Kt],host:d.host},servername:this[lB]?.servername||l});if(D!==200&&(p.on("error",eF).destroy(),I(new jk(`Proxy response (${D}) !== 200 when HTTP Tunneling`))),d.protocol!=="https:"){I(null,p);return}let R;this[Mc]?R=this[Mc].servername:R=d.servername,this[uB]({...d,servername:R,httpSocket:p},I)}catch(p){p.code==="ERR_TLS_CERT_ALTNAME_INVALID"?I(new Kk(p)):I(p)}}})}dispatch(e,r){let A=rF(e.headers);if(AF(A),A&&!("host"in A)&&!("Host"in A)){let{host:s}=new kr(e.origin);A.host=s}return this[an].dispatch({...e,headers:A},r)}#e(e){return typeof e=="string"?new kr(e):e instanceof kr?e:new kr(e.uri)}async[hB](){await this[an].close(),await this[cn].close()}async[QB](){await this[an].destroy(),await this[cn].destroy()}};function rF(t){if(Array.isArray(t)){let e={};for(let r=0;rr.toLowerCase()==="proxy-authorization"))throw new fA("Proxy-Authorization should be sent in ProxyAgent constructor")}dB.exports=xc});var RB=B((tP,yB)=>{"use strict";var sF=tA(),{kClose:oF,kDestroy:nF,kClosed:fB,kDestroyed:pB,kDispatch:iF,kNoProxyAgent:Rs,kHttpProxyAgent:Xt,kHttpsProxyAgent:Fr}=$(),mB=Oc(),aF=dA(),cF={"http:":80,"https:":443},wB=!1,Yc=class extends sF{#e=null;#t=null;#r=null;constructor(e={}){super(),this.#r=e,wB||(wB=!0,process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"}));let{httpProxy:r,httpsProxy:A,noProxy:s,...o}=e;this[Rs]=new aF(o);let n=r??process.env.http_proxy??process.env.HTTP_PROXY;n?this[Xt]=new mB({...o,uri:n}):this[Xt]=this[Rs];let i=A??process.env.https_proxy??process.env.HTTPS_PROXY;i?this[Fr]=new mB({...o,uri:i}):this[Fr]=this[Xt],this.#A()}[iF](e,r){let A=new URL(e.origin);return this.#o(A).dispatch(e,r)}async[oF](){await this[Rs].close(),this[Xt][fB]||await this[Xt].close(),this[Fr][fB]||await this[Fr].close()}async[nF](e){await this[Rs].destroy(e),this[Xt][pB]||await this[Xt].destroy(e),this[Fr][pB]||await this[Fr].destroy(e)}#o(e){let{protocol:r,host:A,port:s}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),s=Number.parseInt(s,10)||cF[r]||0,this.#s(A,s)?r==="https:"?this[Fr]:this[Xt]:this[Rs]}#s(e,r){if(this.#n&&this.#A(),this.#t.length===0)return!0;if(this.#e==="*")return!1;for(let A=0;A{"use strict";var pA=C("node:assert"),{kRetryHandlerDefaultRetry:DB}=$(),{RequestRetryError:mA}=_(),{isDisturbed:TB,parseHeaders:gF,parseRangeHeader:bB,wrapRequestBody:lF}=v();function uF(t){let e=Date.now();return new Date(t).getTime()-e}function kB(t,e,r,A){let s=t["content-length"];if(s==null||!Number.isFinite(e.start)||!Number.isFinite(e.end))return null;let o=Number(s),n=e.end-e.start+1;return!Number.isFinite(o)||o!==n?new mA("Content-Length mismatch",r,{headers:t,data:{count:A}}):null}var _c=class t{constructor(e,r){let{retryOptions:A,...s}=e,{retry:o,maxRetries:n,maxTimeout:i,minTimeout:a,timeoutFactor:c,methods:g,errorCodes:l,retryAfter:u,statusCodes:E}=A??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...s,body:lF(e.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??t[DB],retryAfter:u??!0,maxTimeout:i??30*1e3,minTimeout:a??500,timeoutFactor:c??2,maxRetries:n??5,methods:g??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:E??[500,502,503,504,429],errorCodes:l??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect(h=>{this.aborted=!0,this.abort?this.abort(h):this.reason=h})}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,r,A){this.handler.onUpgrade&&this.handler.onUpgrade(e,r,A)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[DB](e,{state:r,opts:A},s){let{statusCode:o,code:n,headers:i}=e,{method:a,retryOptions:c}=A,{maxRetries:g,minTimeout:l,maxTimeout:u,timeoutFactor:E,statusCodes:h,errorCodes:d,methods:I}=c,{counter:Q}=r;if(n&&n!=="UND_ERR_REQ_RETRY"&&!d.includes(n)){s(e);return}if(Array.isArray(I)&&!I.includes(a)){s(e);return}if(o!=null&&Array.isArray(h)&&!h.includes(o)){s(e);return}if(Q>g){s(e);return}let p=i?.["retry-after"];p&&(p=Number(p),p=Number.isNaN(p)?uF(p):p*1e3);let D=p>0?Math.min(p,u):Math.min(l*E**(Q-1),u);setTimeout(()=>s(null),D)}onHeaders(e,r,A,s){let o=gF(r);if(this.retryCount+=1,e>=300)return this.retryOpts.statusCodes.includes(e)===!1?this.handler.onHeaders(e,r,A,s):(this.abort(new mA("Request failed",e,{headers:o,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new mA("server does not support the range header and the payload was partially consumed",e,{headers:o,data:{count:this.retryCount}})),!1;let i=bB(o["content-range"]);if(!i)return this.abort(new mA("Content-Range mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==o.etag)return this.abort(new mA("ETag mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;let a=kB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;return pA(this.start===c,"content-range mismatch"),pA(this.end==null||this.end===l,"content-range mismatch"),this.resume=A,!0}if(this.end==null){if(e===206){let i=bB(o["content-range"]);if(i==null)return this.handler.onHeaders(e,r,A,s);let a=kB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;pA(c!=null&&Number.isFinite(c),"content-range mismatch"),pA(l!=null&&Number.isFinite(l),"invalid content-length"),this.start=c,this.end=l}if(this.end==null){let i=o["content-length"];this.end=i!=null?Number(i)-1:null}return pA(Number.isFinite(this.start)),pA(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=A,this.etag=o.etag!=null?o.etag:null,this.etag!=null&&this.etag.startsWith("W/")&&(this.etag=null),this.handler.onHeaders(e,r,A,s)}let n=new mA("Request failed",e,{headers:o,data:{count:this.retryCount}});return this.abort(n),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||TB(this.opts.body))return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},r.bind(this));function r(A){if(A!=null||this.aborted||TB(this.opts.body))return this.handler.onError(A);if(this.start!==0){let s={range:`bytes=${this.start}-${this.end??""}`};this.etag!=null&&(s["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...s}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(s){this.handler.onError(s)}}}};FB.exports=_c});var NB=B((AP,SB)=>{"use strict";var EF=es(),hF=gn(),Jc=class extends EF{#e=null;#t=null;constructor(e,r={}){super(r),this.#e=e,this.#t=r}dispatch(e,r){let A=new hF({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:r});return this.#e.dispatch(e,A)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}};SB.exports=Jc});var zc=B((sP,_B)=>{"use strict";var vB=C("node:assert"),{Readable:QF}=C("node:stream"),{RequestAbortedError:xB,NotSupportedError:BF,InvalidArgumentError:IF,AbortError:Pc}=_(),OB=v(),{ReadableStreamFrom:CF}=v(),Me=Symbol("kConsume"),Ds=Symbol("kReading"),$t=Symbol("kBody"),UB=Symbol("kAbort"),YB=Symbol("kContentType"),GB=Symbol("kContentLength"),dF=()=>{},Hc=class extends QF{constructor({resume:e,abort:r,contentType:A="",contentLength:s,highWaterMark:o=64*1024}){super({autoDestroy:!0,read:e,highWaterMark:o}),this._readableState.dataEmitted=!1,this[UB]=r,this[Me]=null,this[$t]=null,this[YB]=A,this[GB]=s,this[Ds]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new xB),e&&this[UB](),super.destroy(e)}_destroy(e,r){this[Ds]?r(e):setImmediate(()=>{r(e)})}on(e,...r){return(e==="data"||e==="readable")&&(this[Ds]=!0),super.on(e,...r)}addListener(e,...r){return this.on(e,...r)}off(e,...r){let A=super.off(e,...r);return(e==="data"||e==="readable")&&(this[Ds]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,...r){return this.off(e,...r)}push(e){return this[Me]&&e!==null?(qc(this[Me],e),this[Ds]?super.push(e):!0):super.push(e)}async text(){return Ts(this,"text")}async json(){return Ts(this,"json")}async blob(){return Ts(this,"blob")}async bytes(){return Ts(this,"bytes")}async arrayBuffer(){return Ts(this,"arrayBuffer")}async formData(){throw new BF}get bodyUsed(){return OB.isDisturbed(this)}get body(){return this[$t]||(this[$t]=CF(this),this[Me]&&(this[$t].getReader(),vB(this[$t].locked))),this[$t]}async dump(e){let r=Number.isFinite(e?.limit)?e.limit:131072,A=e?.signal;if(A!=null&&(typeof A!="object"||!("aborted"in A)))throw new IF("signal must be an AbortSignal");return A?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((s,o)=>{this[GB]>r&&this.destroy(new Pc);let n=()=>{this.destroy(A.reason??new Pc)};A?.addEventListener("abort",n),this.on("close",function(){A?.removeEventListener("abort",n),A?.aborted?o(A.reason??new Pc):s(null)}).on("error",dF).on("data",function(i){r-=i.length,r<=0&&this.destroy()}).resume()})}};function fF(t){return t[$t]&&t[$t].locked===!0||t[Me]}function pF(t){return OB.isDisturbed(t)||fF(t)}async function Ts(t,e){return vB(!t[Me]),new Promise((r,A)=>{if(pF(t)){let s=t._readableState;s.destroyed&&s.closeEmitted===!1?t.on("error",o=>{A(o)}).on("close",()=>{A(new TypeError("unusable"))}):A(s.errored??new TypeError("unusable"))}else queueMicrotask(()=>{t[Me]={type:e,stream:t,resolve:r,reject:A,length:0,body:[]},t.on("error",function(s){Wc(this[Me],s)}).on("close",function(){this[Me].body!==null&&Wc(this[Me],new xB)}),mF(t[Me])})})}function mF(t){if(t.body===null)return;let{_readableState:e}=t.stream;if(e.bufferIndex){let r=e.bufferIndex,A=e.buffer.length;for(let s=r;s2&&r[0]===239&&r[1]===187&&r[2]===191?3:0;return r.utf8Slice(s,A)}function LB(t,e){if(t.length===0||e===0)return new Uint8Array(0);if(t.length===1)return new Uint8Array(t[0]);let r=new Uint8Array(Buffer.allocUnsafeSlow(e).buffer),A=0;for(let s=0;s{var wF=C("node:assert"),{ResponseStatusCodeError:JB}=_(),{chunksDecode:PB}=zc(),yF=128*1024;async function RF({callback:t,body:e,contentType:r,statusCode:A,statusMessage:s,headers:o}){wF(e);let n=[],i=0;try{for await(let l of e)if(n.push(l),i+=l.length,i>yF){n=[],i=0;break}}catch{n=[],i=0}let a=`Response status code ${A}${s?`: ${s}`:""}`;if(A===204||!r||!i){queueMicrotask(()=>t(new JB(a,A,o)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let g;try{HB(r)?g=JSON.parse(PB(n,i)):VB(r)&&(g=PB(n,i))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>t(new JB(a,A,o,g)))}var HB=t=>t.length>15&&t[11]==="/"&&t[0]==="a"&&t[1]==="p"&&t[2]==="p"&&t[3]==="l"&&t[4]==="i"&&t[5]==="c"&&t[6]==="a"&&t[7]==="t"&&t[8]==="i"&&t[9]==="o"&&t[10]==="n"&&t[12]==="j"&&t[13]==="s"&&t[14]==="o"&&t[15]==="n",VB=t=>t.length>4&&t[4]==="/"&&t[0]==="t"&&t[1]==="e"&&t[2]==="x"&&t[3]==="t";qB.exports={getResolveErrorBodyCallback:RF,isContentTypeApplicationJson:HB,isContentTypeText:VB}});var ZB=B((nP,jc)=>{"use strict";var DF=C("node:assert"),{Readable:TF}=zc(),{InvalidArgumentError:wA,RequestAbortedError:WB}=_(),ve=v(),{getResolveErrorBodyCallback:bF}=Zc(),{AsyncResource:kF}=C("node:async_hooks"),ln=class extends kF{constructor(e,r){if(!e||typeof e!="object")throw new wA("invalid opts");let{signal:A,method:s,opaque:o,body:n,onInfo:i,responseHeaders:a,throwOnError:c,highWaterMark:g}=e;try{if(typeof r!="function")throw new wA("invalid callback");if(g&&(typeof g!="number"||g<0))throw new wA("invalid highWaterMark");if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new wA("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new wA("invalid method");if(i&&typeof i!="function")throw new wA("invalid onInfo callback");super("UNDICI_REQUEST")}catch(l){throw ve.isStream(n)&&ve.destroy(n.on("error",ve.nop),l),l}this.method=s,this.responseHeaders=a||null,this.opaque=o||null,this.callback=r,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=i||null,this.throwOnError=c,this.highWaterMark=g,this.signal=A,this.reason=null,this.removeAbortListener=null,ve.isStream(n)&&n.on("error",l=>{this.onError(l)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new WB:this.removeAbortListener=ve.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new WB,this.res?ve.destroy(this.res.on("error",ve.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&(this.res?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}))}onConnect(e,r){if(this.reason){e(this.reason);return}DF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{callback:o,opaque:n,abort:i,context:a,responseHeaders:c,highWaterMark:g}=this,l=c==="raw"?ve.parseRawHeaders(r):ve.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:l});return}let u=c==="raw"?ve.parseHeaders(r):l,E=u["content-type"],h=u["content-length"],d=new TF({resume:A,abort:i,contentType:E,contentLength:this.method!=="HEAD"&&h?Number(h):null,highWaterMark:g});this.removeAbortListener&&d.on("close",this.removeAbortListener),this.callback=null,this.res=d,o!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(bF,null,{callback:o,body:d,contentType:E,statusCode:e,statusMessage:s,headers:l}):this.runInAsyncScope(o,null,null,{statusCode:e,headers:l,trailers:this.trailers,opaque:n,body:d,context:a}))}onData(e){return this.res.push(e)}onComplete(e){ve.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:r,callback:A,body:s,opaque:o}=this;A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:o})})),r&&(this.res=null,queueMicrotask(()=>{ve.destroy(r,e)})),s&&(this.body=null,ve.destroy(s,e)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function zB(t,e){if(e===void 0)return new Promise((r,A)=>{zB.call(this,t,(s,o)=>s?A(s):r(o))});try{this.dispatch(t,new ln(t,e))}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}jc.exports=zB;jc.exports.RequestHandler=ln});var bs=B((iP,XB)=>{var{addAbortListener:FF}=v(),{RequestAbortedError:SF}=_(),yA=Symbol("kListener"),Ct=Symbol("kSignal");function jB(t){t.abort?t.abort(t[Ct]?.reason):t.reason=t[Ct]?.reason??new SF,KB(t)}function NF(t,e){if(t.reason=null,t[Ct]=null,t[yA]=null,!!e){if(e.aborted){jB(t);return}t[Ct]=e,t[yA]=()=>{jB(t)},FF(t[Ct],t[yA])}}function KB(t){t[Ct]&&("removeEventListener"in t[Ct]?t[Ct].removeEventListener("abort",t[yA]):t[Ct].removeListener("abort",t[yA]),t[Ct]=null,t[yA]=null)}XB.exports={addSignal:NF,removeSignal:KB}});var rI=B((aP,tI)=>{"use strict";var UF=C("node:assert"),{finished:GF,PassThrough:LF}=C("node:stream"),{InvalidArgumentError:RA,InvalidReturnValueError:MF}=_(),nt=v(),{getResolveErrorBodyCallback:vF}=Zc(),{AsyncResource:xF}=C("node:async_hooks"),{addSignal:OF,removeSignal:$B}=bs(),Kc=class extends xF{constructor(e,r,A){if(!e||typeof e!="object")throw new RA("invalid opts");let{signal:s,method:o,opaque:n,body:i,onInfo:a,responseHeaders:c,throwOnError:g}=e;try{if(typeof A!="function")throw new RA("invalid callback");if(typeof r!="function")throw new RA("invalid factory");if(s&&typeof s.on!="function"&&typeof s.addEventListener!="function")throw new RA("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new RA("invalid method");if(a&&typeof a!="function")throw new RA("invalid onInfo callback");super("UNDICI_STREAM")}catch(l){throw nt.isStream(i)&&nt.destroy(i.on("error",nt.nop),l),l}this.responseHeaders=c||null,this.opaque=n||null,this.factory=r,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=i,this.onInfo=a||null,this.throwOnError=g||!1,nt.isStream(i)&&i.on("error",l=>{this.onError(l)}),OF(this,s)}onConnect(e,r){if(this.reason){e(this.reason);return}UF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{factory:o,opaque:n,context:i,callback:a,responseHeaders:c}=this,g=c==="raw"?nt.parseRawHeaders(r):nt.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:g});return}this.factory=null;let l;if(this.throwOnError&&e>=400){let h=(c==="raw"?nt.parseHeaders(r):g)["content-type"];l=new LF,this.callback=null,this.runInAsyncScope(vF,null,{callback:a,body:l,contentType:h,statusCode:e,statusMessage:s,headers:g})}else{if(o===null)return;if(l=this.runInAsyncScope(o,null,{statusCode:e,headers:g,opaque:n,context:i}),!l||typeof l.write!="function"||typeof l.end!="function"||typeof l.on!="function")throw new MF("expected Writable");GF(l,{readable:!1},E=>{let{callback:h,res:d,opaque:I,trailers:Q,abort:p}=this;this.res=null,(E||!d.readable)&&nt.destroy(d,E),this.callback=null,this.runInAsyncScope(h,null,E||null,{opaque:I,trailers:Q}),E&&p()})}return l.on("drain",A),this.res=l,(l.writableNeedDrain!==void 0?l.writableNeedDrain:l._writableState?.needDrain)!==!0}onData(e){let{res:r}=this;return r?r.write(e):!0}onComplete(e){let{res:r}=this;$B(this),r&&(this.trailers=nt.parseHeaders(e),r.end())}onError(e){let{res:r,callback:A,opaque:s,body:o}=this;$B(this),this.factory=null,r?(this.res=null,nt.destroy(r,e)):A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:s})})),o&&(this.body=null,nt.destroy(o,e))}};function eI(t,e,r){if(r===void 0)return new Promise((A,s)=>{eI.call(this,t,e,(o,n)=>o?s(o):A(n))});try{this.dispatch(t,new Kc(t,e,r))}catch(A){if(typeof r!="function")throw A;let s=t?.opaque;queueMicrotask(()=>r(A,{opaque:s}))}}tI.exports=eI});var nI=B((cP,oI)=>{"use strict";var{Readable:sI,Duplex:YF,PassThrough:_F}=C("node:stream"),{InvalidArgumentError:ks,InvalidReturnValueError:JF,RequestAbortedError:Xc}=_(),ze=v(),{AsyncResource:PF}=C("node:async_hooks"),{addSignal:HF,removeSignal:VF}=bs(),AI=C("node:assert"),DA=Symbol("resume"),$c=class extends sI{constructor(){super({autoDestroy:!0}),this[DA]=null}_read(){let{[DA]:e}=this;e&&(this[DA]=null,e())}_destroy(e,r){this._read(),r(e)}},eg=class extends sI{constructor(e){super({autoDestroy:!0}),this[DA]=e}_read(){this[DA]()}_destroy(e,r){!e&&!this._readableState.endEmitted&&(e=new Xc),r(e)}},tg=class extends PF{constructor(e,r){if(!e||typeof e!="object")throw new ks("invalid opts");if(typeof r!="function")throw new ks("invalid handler");let{signal:A,method:s,opaque:o,onInfo:n,responseHeaders:i}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new ks("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new ks("invalid method");if(n&&typeof n!="function")throw new ks("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=o||null,this.responseHeaders=i||null,this.handler=r,this.abort=null,this.context=null,this.onInfo=n||null,this.req=new $c().on("error",ze.nop),this.ret=new YF({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:a}=this;a?.resume&&a.resume()},write:(a,c,g)=>{let{req:l}=this;l.push(a,c)||l._readableState.destroyed?g():l[DA]=g},destroy:(a,c)=>{let{body:g,req:l,res:u,ret:E,abort:h}=this;!a&&!E._readableState.endEmitted&&(a=new Xc),h&&a&&h(),ze.destroy(g,a),ze.destroy(l,a),ze.destroy(u,a),VF(this),c(a)}}).on("prefinish",()=>{let{req:a}=this;a.push(null)}),this.res=null,HF(this,A)}onConnect(e,r){let{ret:A,res:s}=this;if(this.reason){e(this.reason);return}AI(!s,"pipeline cannot be retried"),AI(!A.destroyed),this.abort=e,this.context=r}onHeaders(e,r,A){let{opaque:s,handler:o,context:n}=this;if(e<200){if(this.onInfo){let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);this.onInfo({statusCode:e,headers:a})}return}this.res=new eg(A);let i;try{this.handler=null;let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);i=this.runInAsyncScope(o,null,{statusCode:e,headers:a,opaque:s,body:this.res,context:n})}catch(a){throw this.res.on("error",ze.nop),a}if(!i||typeof i.on!="function")throw new JF("expected Readable");i.on("data",a=>{let{ret:c,body:g}=this;!c.push(a)&&g.pause&&g.pause()}).on("error",a=>{let{ret:c}=this;ze.destroy(c,a)}).on("end",()=>{let{ret:a}=this;a.push(null)}).on("close",()=>{let{ret:a}=this;a._readableState.ended||ze.destroy(a,new Xc)}),this.body=i}onData(e){let{res:r}=this;return r.push(e)}onComplete(e){let{res:r}=this;r.push(null)}onError(e){let{ret:r}=this;this.handler=null,ze.destroy(r,e)}};function qF(t,e){try{let r=new tg(t,e);return this.dispatch({...t,body:r.req},r),r.ret}catch(r){return new _F().destroy(r)}}oI.exports=qF});var uI=B((gP,lI)=>{"use strict";var{InvalidArgumentError:rg,SocketError:WF}=_(),{AsyncResource:zF}=C("node:async_hooks"),iI=v(),{addSignal:ZF,removeSignal:aI}=bs(),cI=C("node:assert"),Ag=class extends zF{constructor(e,r){if(!e||typeof e!="object")throw new rg("invalid opts");if(typeof r!="function")throw new rg("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new rg("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=o||null,this.opaque=s||null,this.callback=r,this.abort=null,this.context=null,ZF(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}cI(this.callback),this.abort=e,this.context=null}onHeaders(){throw new WF("bad upgrade",null)}onUpgrade(e,r,A){cI(e===101);let{callback:s,opaque:o,context:n}=this;aI(this),this.callback=null;let i=this.responseHeaders==="raw"?iI.parseRawHeaders(r):iI.parseHeaders(r);this.runInAsyncScope(s,null,null,{headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;aI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function gI(t,e){if(e===void 0)return new Promise((r,A)=>{gI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new Ag(t,e);this.dispatch({...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}lI.exports=gI});var II=B((lP,BI)=>{"use strict";var jF=C("node:assert"),{AsyncResource:KF}=C("node:async_hooks"),{InvalidArgumentError:sg,SocketError:XF}=_(),EI=v(),{addSignal:$F,removeSignal:hI}=bs(),og=class extends KF{constructor(e,r){if(!e||typeof e!="object")throw new sg("invalid opts");if(typeof r!="function")throw new sg("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new sg("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=s||null,this.responseHeaders=o||null,this.callback=r,this.abort=null,$F(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}jF(this.callback),this.abort=e,this.context=r}onHeaders(){throw new XF("bad connect",null)}onUpgrade(e,r,A){let{callback:s,opaque:o,context:n}=this;hI(this),this.callback=null;let i=r;i!=null&&(i=this.responseHeaders==="raw"?EI.parseRawHeaders(r):EI.parseHeaders(r)),this.runInAsyncScope(s,null,null,{statusCode:e,headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;hI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function QI(t,e){if(e===void 0)return new Promise((r,A)=>{QI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new og(t,e);this.dispatch({...t,method:"CONNECT"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}BI.exports=QI});var CI=B((uP,TA)=>{"use strict";TA.exports.request=ZB();TA.exports.stream=rI();TA.exports.pipeline=nI();TA.exports.upgrade=uI();TA.exports.connect=II()});var ig=B((EP,fI)=>{"use strict";var{UndiciError:eS}=_(),dI=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),ng=class t extends eS{constructor(e){super(e),Error.captureStackTrace(this,t),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&e[dI]===!0}[dI]=!0};fI.exports={MockNotMatchedError:ng}});var bA=B((hP,pI)=>{"use strict";pI.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var Fs=B((QP,NI)=>{"use strict";var{MockNotMatchedError:Sr}=ig(),{kDispatches:un,kMockAgent:tS,kOriginalDispatch:rS,kOrigin:AS,kGetNetConnect:sS}=bA(),{buildURL:oS}=v(),{STATUS_CODES:nS}=C("node:http"),{types:{isPromise:iS}}=C("node:util");function Gt(t,e){return typeof t=="string"?t===e:t instanceof RegExp?t.test(e):typeof t=="function"?t(e)===!0:!1}function wI(t){return Object.fromEntries(Object.entries(t).map(([e,r])=>[e.toLocaleLowerCase(),r]))}function yI(t,e){if(Array.isArray(t)){for(let r=0;r"u")return!0;if(typeof e!="object"||typeof t.headers!="object")return!1;for(let[r,A]of Object.entries(t.headers)){let s=yI(e,r);if(!Gt(A,s))return!1}return!0}function mI(t){if(typeof t!="string")return t;let e=t.split("?");if(e.length!==2)return t;let r=new URLSearchParams(e.pop());return r.sort(),[...e,r.toString()].join("?")}function aS(t,{path:e,method:r,body:A,headers:s}){let o=Gt(t.path,e),n=Gt(t.method,r),i=typeof t.body<"u"?Gt(t.body,A):!0,a=RI(t,s);return o&&n&&i&&a}function DI(t){return Buffer.isBuffer(t)||t instanceof Uint8Array||t instanceof ArrayBuffer?t:typeof t=="object"?JSON.stringify(t):t.toString()}function TI(t,e){let r=e.query?oS(e.path,e.query):e.path,A=typeof r=="string"?mI(r):r,s=t.filter(({consumed:o})=>!o).filter(({path:o})=>Gt(mI(o),A));if(s.length===0)throw new Sr(`Mock dispatch not matched for path '${A}'`);if(s=s.filter(({method:o})=>Gt(o,e.method)),s.length===0)throw new Sr(`Mock dispatch not matched for method '${e.method}' on path '${A}'`);if(s=s.filter(({body:o})=>typeof o<"u"?Gt(o,e.body):!0),s.length===0)throw new Sr(`Mock dispatch not matched for body '${e.body}' on path '${A}'`);if(s=s.filter(o=>RI(o,e.headers)),s.length===0){let o=typeof e.headers=="object"?JSON.stringify(e.headers):e.headers;throw new Sr(`Mock dispatch not matched for headers '${o}' on path '${A}'`)}return s[0]}function cS(t,e,r){let A={timesInvoked:0,times:1,persist:!1,consumed:!1},s=typeof r=="function"?{callback:r}:{...r},o={...A,...e,pending:!0,data:{error:null,...s}};return t.push(o),o}function ag(t,e){let r=t.findIndex(A=>A.consumed?aS(A,e):!1);r!==-1&&t.splice(r,1)}function bI(t){let{path:e,method:r,body:A,headers:s,query:o}=t;return{path:e,method:r,body:A,headers:s,query:o}}function cg(t){let e=Object.keys(t),r=[];for(let A=0;A=u,A.pending=l0?setTimeout(()=>{E(this[un])},c):E(this[un]);function E(d,I=o){let Q=Array.isArray(t.headers)?gg(t.headers):t.headers,p=typeof I=="function"?I({...t,headers:Q}):I;if(iS(p)){p.then(Z=>E(d,Z));return}let D=DI(p),R=cg(n),H=cg(i);e.onConnect?.(Z=>e.onError(Z),null),e.onHeaders?.(s,R,h,kI(s)),e.onData?.(Buffer.from(D)),e.onComplete?.(H),ag(d,r)}function h(){}return!0}function lS(){let t=this[tS],e=this[AS],r=this[rS];return function(s,o){if(t.isMockActive)try{FI.call(this,s,o)}catch(n){if(n instanceof Sr){let i=t[sS]();if(i===!1)throw new Sr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect disabled)`);if(SI(i,e))r.call(this,s,o);else throw new Sr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect is not enabled for this origin)`)}else throw n}else r.call(this,s,o)}}function SI(t,e){let r=new URL(e);return t===!0?!0:!!(Array.isArray(t)&&t.some(A=>Gt(A,r.host)))}function uS(t){if(t){let{agent:e,...r}=t;return r}}NI.exports={getResponseData:DI,getMockDispatch:TI,addMockDispatch:cS,deleteMockDispatch:ag,buildKey:bI,generateKeyValues:cg,matchValue:Gt,getResponse:gS,getStatusText:kI,mockDispatch:FI,buildMockDispatch:lS,checkNetConnect:SI,buildMockOptions:uS,getHeaderByName:yI,buildHeadersFromArray:gg}});var Ig=B((BP,Bg)=>{"use strict";var{getResponseData:ES,buildKey:hS,addMockDispatch:lg}=Fs(),{kDispatches:En,kDispatchKey:hn,kDefaultHeaders:ug,kDefaultTrailers:Eg,kContentLength:hg,kMockDispatch:Qn}=bA(),{InvalidArgumentError:dt}=_(),{buildURL:QS}=v(),kA=class{constructor(e){this[Qn]=e}delay(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("waitInMs must be a valid integer > 0");return this[Qn].delay=e,this}persist(){return this[Qn].persist=!0,this}times(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("repeatTimes must be a valid integer > 0");return this[Qn].times=e,this}},Qg=class{constructor(e,r){if(typeof e!="object")throw new dt("opts must be an object");if(typeof e.path>"u")throw new dt("opts.path must be defined");if(typeof e.method>"u"&&(e.method="GET"),typeof e.path=="string")if(e.query)e.path=QS(e.path,e.query);else{let A=new URL(e.path,"data://");e.path=A.pathname+A.search}typeof e.method=="string"&&(e.method=e.method.toUpperCase()),this[hn]=hS(e),this[En]=r,this[ug]={},this[Eg]={},this[hg]=!1}createMockScopeDispatchData({statusCode:e,data:r,responseOptions:A}){let s=ES(r),o=this[hg]?{"content-length":s.length}:{},n={...this[ug],...o,...A.headers},i={...this[Eg],...A.trailers};return{statusCode:e,data:r,headers:n,trailers:i}}validateReplyParameters(e){if(typeof e.statusCode>"u")throw new dt("statusCode must be defined");if(typeof e.responseOptions!="object"||e.responseOptions===null)throw new dt("responseOptions must be an object")}reply(e){if(typeof e=="function"){let o=i=>{let a=e(i);if(typeof a!="object"||a===null)throw new dt("reply options callback must return an object");let c={data:"",responseOptions:{},...a};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},n=lg(this[En],this[hn],o);return new kA(n)}let r={statusCode:e,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(r);let A=this.createMockScopeDispatchData(r),s=lg(this[En],this[hn],A);return new kA(s)}replyWithError(e){if(typeof e>"u")throw new dt("error must be defined");let r=lg(this[En],this[hn],{error:e});return new kA(r)}defaultReplyHeaders(e){if(typeof e>"u")throw new dt("headers must be defined");return this[ug]=e,this}defaultReplyTrailers(e){if(typeof e>"u")throw new dt("trailers must be defined");return this[Eg]=e,this}replyContentLength(){return this[hg]=!0,this}};Bg.exports.MockInterceptor=Qg;Bg.exports.MockScope=kA});var fg=B((IP,OI)=>{"use strict";var{promisify:BS}=C("node:util"),IS=IA(),{buildMockDispatch:CS}=Fs(),{kDispatches:UI,kMockAgent:GI,kClose:LI,kOriginalClose:MI,kOrigin:vI,kOriginalDispatch:dS,kConnected:Cg}=bA(),{MockInterceptor:fS}=Ig(),xI=$(),{InvalidArgumentError:pS}=_(),dg=class extends IS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new pS("Argument opts.agent must implement Agent");this[GI]=r.agent,this[vI]=e,this[UI]=[],this[Cg]=1,this[dS]=this.dispatch,this[MI]=this.close.bind(this),this.dispatch=CS.call(this),this.close=this[LI]}get[xI.kConnected](){return this[Cg]}intercept(e){return new fS(e,this[UI])}async[LI](){await BS(this[MI])(),this[Cg]=0,this[GI][xI.kClients].delete(this[vI])}};OI.exports=dg});var wg=B((CP,qI)=>{"use strict";var{promisify:mS}=C("node:util"),wS=CA(),{buildMockDispatch:yS}=Fs(),{kDispatches:YI,kMockAgent:_I,kClose:JI,kOriginalClose:PI,kOrigin:HI,kOriginalDispatch:RS,kConnected:pg}=bA(),{MockInterceptor:DS}=Ig(),VI=$(),{InvalidArgumentError:TS}=_(),mg=class extends wS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new TS("Argument opts.agent must implement Agent");this[_I]=r.agent,this[HI]=e,this[YI]=[],this[pg]=1,this[RS]=this.dispatch,this[PI]=this.close.bind(this),this.dispatch=yS.call(this),this.close=this[JI]}get[VI.kConnected](){return this[pg]}intercept(e){return new DS(e,this[YI])}async[JI](){await mS(this[PI])(),this[pg]=0,this[_I][VI.kClients].delete(this[HI])}};qI.exports=mg});var zI=B((fP,WI)=>{"use strict";var bS={pronoun:"it",is:"is",was:"was",this:"this"},kS={pronoun:"they",is:"are",was:"were",this:"these"};WI.exports=class{constructor(e,r){this.singular=e,this.plural=r}pluralize(e){let r=e===1,A=r?bS:kS,s=r?this.singular:this.plural;return{...A,count:e,noun:s}}}});var jI=B((mP,ZI)=>{"use strict";var{Transform:FS}=C("node:stream"),{Console:SS}=C("node:console"),NS=process.versions.icu?"\u2705":"Y ",US=process.versions.icu?"\u274C":"N ";ZI.exports=class{constructor({disableColors:e}={}){this.transform=new FS({transform(r,A,s){s(null,r)}}),this.logger=new SS({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let r=e.map(({method:A,path:s,data:{statusCode:o},persist:n,times:i,timesInvoked:a,origin:c})=>({Method:A,Origin:c,Path:s,"Status code":o,Persistent:n?NS:US,Invocations:a,Remaining:n?1/0:i-a}));return this.logger.table(r),this.transform.read().toString()}}});var eC=B((wP,$I)=>{"use strict";var{kClients:Nr}=$(),GS=dA(),{kAgent:yg,kMockAgentSet:Bn,kMockAgentGet:KI,kDispatches:Rg,kIsMockActive:In,kNetConnect:Ur,kGetNetConnect:LS,kOptions:Cn,kFactory:dn}=bA(),MS=fg(),vS=wg(),{matchValue:xS,buildMockOptions:OS}=Fs(),{InvalidArgumentError:XI,UndiciError:YS}=_(),_S=es(),JS=zI(),PS=jI(),Dg=class extends _S{constructor(e){if(super(e),this[Ur]=!0,this[In]=!0,e?.agent&&typeof e.agent.dispatch!="function")throw new XI("Argument opts.agent must implement Agent");let r=e?.agent?e.agent:new GS(e);this[yg]=r,this[Nr]=r[Nr],this[Cn]=OS(e)}get(e){let r=this[KI](e);return r||(r=this[dn](e),this[Bn](e,r)),r}dispatch(e,r){return this.get(e.origin),this[yg].dispatch(e,r)}async close(){await this[yg].close(),this[Nr].clear()}deactivate(){this[In]=!1}activate(){this[In]=!0}enableNetConnect(e){if(typeof e=="string"||typeof e=="function"||e instanceof RegExp)Array.isArray(this[Ur])?this[Ur].push(e):this[Ur]=[e];else if(typeof e>"u")this[Ur]=!0;else throw new XI("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[Ur]=!1}get isMockActive(){return this[In]}[Bn](e,r){this[Nr].set(e,r)}[dn](e){let r=Object.assign({agent:this},this[Cn]);return this[Cn]&&this[Cn].connections===1?new MS(e,r):new vS(e,r)}[KI](e){let r=this[Nr].get(e);if(r)return r;if(typeof e!="string"){let A=this[dn]("http://localhost:9999");return this[Bn](e,A),A}for(let[A,s]of Array.from(this[Nr]))if(s&&typeof A!="string"&&xS(A,e)){let o=this[dn](e);return this[Bn](e,o),o[Rg]=s[Rg],o}}[LS](){return this[Ur]}pendingInterceptors(){let e=this[Nr];return Array.from(e.entries()).flatMap(([r,A])=>A[Rg].map(s=>({...s,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new PS}={}){let r=this.pendingInterceptors();if(r.length===0)return;let A=new JS("interceptor","interceptors").pluralize(r.length);throw new YS(` +`,"latin1"),r!==null&&s!==r){if(A[oc])throw new dr;process.emitWarning(new dr)}e[j].timeout&&e[j].timeoutType===uA&&e[j].timeout.refresh&&e[j].timeout.refresh(),A[Ft]()}}destroy(e){let{socket:r,client:A,abort:s}=this;r[Ht]=!1,e&&(b(A[ce]<=1,"pipeline should only contain this request"),s(e))}};uQ.exports=KT});var pQ=B((YJ,fQ)=>{"use strict";var qe=require("node:assert"),{pipeline:sb}=require("node:stream"),v=M(),{RequestContentLengthMismatchError:gc,RequestAbortedError:hQ,SocketError:Es,InformationalError:lc}=Y(),{kUrl:Wo,kReset:Zo,kClient:EA,kRunning:jo,kPending:ob,kQueue:Vt,kPendingIdx:uc,kRunningIdx:tt,kError:At,kSocket:he,kStrictContentLength:nb,kOnError:Ec,kMaxConcurrentStreams:dQ,kHTTP2Session:rt,kResume:qt,kSize:ib,kHTTPContext:ab}=$(),St=Symbol("open streams"),QQ,BQ=!1,zo;try{zo=require("node:http2")}catch{zo={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:cb,HTTP2_HEADER_METHOD:gb,HTTP2_HEADER_PATH:lb,HTTP2_HEADER_SCHEME:ub,HTTP2_HEADER_CONTENT_LENGTH:Eb,HTTP2_HEADER_EXPECT:hb,HTTP2_HEADER_STATUS:Qb}}=zo;function Bb(t){let e=[];for(let[r,A]of Object.entries(t))if(Array.isArray(A))for(let s of A)e.push(Buffer.from(r),Buffer.from(s));else e.push(Buffer.from(r),Buffer.from(A));return e}async function Ib(t,e){t[he]=e,BQ||(BQ=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=zo.connect(t[Wo],{createConnection:()=>e,peerMaxConcurrentStreams:t[dQ]});r[St]=0,r[EA]=t,r[he]=e,v.addListener(r,"error",db),v.addListener(r,"frameError",fb),v.addListener(r,"end",pb),v.addListener(r,"goaway",mb),v.addListener(r,"close",function(){let{[EA]:s}=this,{[he]:o}=s,n=this[he][At]||this[At]||new Es("closed",v.getSocketInfo(o));if(s[rt]=null,s.destroyed){qe(s[ob]===0);let i=s[Vt].splice(s[tt]);for(let a=0;a{A=!0}),{version:"h2",defaultPipelining:1/0,write(...s){return yb(t,...s)},resume(){Cb(t)},destroy(s,o){A?queueMicrotask(o):e.destroy(s).on("close",o)},get destroyed(){return e.destroyed},busy(){return!1}}}function Cb(t){let e=t[he];e?.destroyed===!1&&(t[ib]===0&&t[dQ]===0?(e.unref(),t[rt].unref()):(e.ref(),t[rt].ref()))}function db(t){qe(t.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[he][At]=t,this[EA][Ec](t)}function fb(t,e,r){if(r===0){let A=new lc(`HTTP/2: "frameError" received - type ${t}, code ${e}`);this[he][At]=A,this[EA][Ec](A)}}function pb(){let t=new Es("other side closed",v.getSocketInfo(this[he]));this.destroy(t),v.destroy(this[he],t)}function mb(t){let e=this[At]||new Es(`HTTP/2: "GOAWAY" frame received with code ${t}`,v.getSocketInfo(this)),r=this[EA];if(r[he]=null,r[ab]=null,this[rt]!=null&&(this[rt].destroy(e),this[rt]=null),v.destroy(this[he],e),r[tt]{e.aborted||e.completed||(y=y||new hQ,v.errorRequest(t,e,y),u!=null&&v.destroy(u,y),v.destroy(g,y),t[Vt][t[tt]++]=null,t[qt]())};try{e.onConnect(C)}catch(y){v.errorRequest(t,e,y)}if(e.aborted)return!1;if(A==="CONNECT")return r.ref(),u=r.request(l,{endStream:!1,signal:a}),u.id&&!u.pending?(e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null):u.once("ready",()=>{e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),!0;l[lb]=s,l[ub]="https";let I=A==="PUT"||A==="POST"||A==="PATCH";g&&typeof g.read=="function"&&g.read(0);let Q=v.bodyLength(g);if(v.isFormDataLike(g)){QQ??=cA().extractBody;let[y,P]=QQ(g);l["content-type"]=P,g=y.stream,Q=y.length}if(Q==null&&(Q=e.contentLength),(Q===0||!I)&&(Q=null),wb(A)&&Q>0&&e.contentLength!=null&&e.contentLength!==Q){if(t[nb])return v.errorRequest(t,e,new gc),!1;process.emitWarning(new gc)}Q!=null&&(qe(g,"no body must not have content length"),l[Eb]=`${Q}`),r.ref();let f=A==="GET"||A==="HEAD"||g===null;return i?(l[hb]="100-continue",u=r.request(l,{endStream:f,signal:a}),u.once("continue",R)):(u=r.request(l,{endStream:f,signal:a}),R()),++r[St],u.once("response",y=>{let{[Qb]:P,...Z}=y;if(e.onResponseStarted(),e.aborted){let Ae=new hQ;v.errorRequest(t,e,Ae),v.destroy(u,Ae);return}e.onHeaders(Number(P),Bb(Z),u.resume.bind(u),"")===!1&&u.pause(),u.on("data",Ae=>{e.onData(Ae)===!1&&u.pause()})}),u.once("end",()=>{(u.state?.state==null||u.state.state<6)&&e.onComplete([]),r[St]===0&&r.unref(),C(new lc("HTTP/2: stream half-closed (remote)")),t[Vt][t[tt]++]=null,t[uc]=t[tt],t[qt]()}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),u.once("error",function(y){C(y)}),u.once("frameError",(y,P)=>{C(new lc(`HTTP/2: "frameError" received - type ${y}, code ${P}`))}),!0;function R(){!g||Q===0?IQ(C,u,null,t,e,t[he],Q,I):v.isBuffer(g)?IQ(C,u,g,t,e,t[he],Q,I):v.isBlobLike(g)?typeof g.stream=="function"?CQ(C,u,g.stream(),t,e,t[he],Q,I):Db(C,u,g,t,e,t[he],Q,I):v.isStream(g)?Rb(C,t[he],I,u,g,t,e,Q):v.isIterable(g)?CQ(C,u,g,t,e,t[he],Q,I):qe(!1)}}function IQ(t,e,r,A,s,o,n,i){try{r!=null&&v.isBuffer(r)&&(qe(n===r.byteLength,"buffer body must have content length"),e.cork(),e.write(r),e.uncork(),e.end(),s.onBodySent(r)),i||(o[Zo]=!0),s.onRequestSent(),A[qt]()}catch(a){t(a)}}function Rb(t,e,r,A,s,o,n,i){qe(i!==0||o[jo]===0,"stream body cannot be pipelined");let a=sb(s,A,g=>{g?(v.destroy(a,g),t(g)):(v.removeAllListeners(a),n.onRequestSent(),r||(e[Zo]=!0),o[qt]())});v.addListener(a,"data",c);function c(g){n.onBodySent(g)}}async function Db(t,e,r,A,s,o,n,i){qe(n===r.size,"blob body must have content length");try{if(n!=null&&n!==r.size)throw new gc;let a=Buffer.from(await r.arrayBuffer());e.cork(),e.write(a),e.uncork(),e.end(),s.onBodySent(a),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(a){t(a)}}async function CQ(t,e,r,A,s,o,n,i){qe(n!==0||A[jo]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let l=a;a=null,l()}}let g=()=>new Promise((l,u)=>{qe(a===null),o[At]?u(o[At]):a=l});e.on("close",c).on("drain",c);try{for await(let l of r){if(o[At])throw o[At];let u=e.write(l);s.onBodySent(l),u||await g()}e.end(),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(l){t(l)}finally{e.off("close",c).off("drain",c)}}fQ.exports=Ib});var Xo=B((_J,yQ)=>{"use strict";var Bt=M(),{kBodyUsed:hs}=$(),Qc=require("node:assert"),{InvalidArgumentError:Tb}=Y(),bb=require("node:events"),kb=[300,301,302,303,307,308],mQ=Symbol("body"),Ko=class{constructor(e){this[mQ]=e,this[hs]=!1}async*[Symbol.asyncIterator](){Qc(!this[hs],"disturbed"),this[hs]=!0,yield*this[mQ]}},hc=class{constructor(e,r,A,s){if(r!=null&&(!Number.isInteger(r)||r<0))throw new Tb("maxRedirections must be a positive number");Bt.validateHandler(s,A.method,A.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...A,maxRedirections:0},this.maxRedirections=r,this.handler=s,this.history=[],this.redirectionLimitReached=!1,Bt.isStream(this.opts.body)?(Bt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){Qc(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[hs]=!1,bb.prototype.on.call(this.opts.body,"data",function(){this[hs]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Ko(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Bt.isIterable(this.opts.body)&&(this.opts.body=new Ko(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,r,A){this.handler.onUpgrade(e,r,A)}onError(e){this.handler.onError(e)}onHeaders(e,r,A,s){if(this.location=this.history.length>=this.maxRedirections||Bt.isDisturbed(this.opts.body)?null:Fb(e,r),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(new Error("max redirects")),this.redirectionLimitReached=!0,this.abort(new Error("max redirects"));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,r,A,s);let{origin:o,pathname:n,search:i}=Bt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),a=i?`${n}${i}`:n;this.opts.headers=Sb(this.opts.headers,e===303,this.opts.origin!==o),this.opts.path=a,this.opts.origin=o,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!=="HEAD"&&(this.opts.method="GET",this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function Fb(t,e){if(kb.indexOf(t)===-1)return null;for(let r=0;r{"use strict";var Nb=Xo();function Ub({maxRedirections:t}){return e=>function(A,s){let{maxRedirections:o=t}=A;if(!o)return e(A,s);let n=new Nb(e,o,A,s);return A={...A,maxRedirections:0},e(A,n)}}RQ.exports=Ub});var BA=B((PJ,LQ)=>{"use strict";var Nt=require("node:assert"),SQ=require("node:net"),Gb=require("node:http"),wr=M(),{channels:hA}=jr(),Lb=LE(),Mb=eA(),{InvalidArgumentError:oe,InformationalError:vb,ClientDestroyedError:xb}=Y(),Ob=ts(),{kUrl:It,kServerName:Wt,kClient:Yb,kBusy:Bc,kConnect:_b,kResuming:yr,kRunning:ds,kPending:fs,kSize:Cs,kQueue:st,kConnected:Jb,kConnecting:QA,kNeedDrain:Zt,kKeepAliveDefaultTimeout:DQ,kHostHeader:Pb,kPendingIdx:ot,kRunningIdx:Ut,kError:Hb,kPipelining:en,kKeepAliveTimeoutValue:Vb,kMaxHeadersSize:qb,kKeepAliveMaxTimeout:Wb,kKeepAliveTimeoutThreshold:zb,kHeadersTimeout:Zb,kBodyTimeout:jb,kStrictContentLength:Kb,kConnector:Qs,kMaxRedirections:Xb,kMaxRequests:Ic,kCounter:$b,kClose:ek,kDestroy:tk,kDispatch:rk,kInterceptors:TQ,kLocalAddress:Bs,kMaxResponseSize:Ak,kOnError:sk,kHTTPContext:ne,kMaxConcurrentStreams:ok,kResume:Is}=$(),nk=EQ(),ik=pQ(),bQ=!1,zt=Symbol("kClosedResolve"),kQ=()=>{};function NQ(t){return t[en]??t[ne]?.defaultPipelining??1}var Cc=class extends Mb{constructor(e,{interceptors:r,maxHeaderSize:A,headersTimeout:s,socketTimeout:o,requestTimeout:n,connectTimeout:i,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:l,maxKeepAliveTimeout:u,keepAliveMaxTimeout:E,keepAliveTimeoutThreshold:h,socketPath:C,pipelining:I,tls:Q,strictContentLength:f,maxCachedSessions:R,maxRedirections:y,connect:P,maxRequestsPerClient:Z,localAddress:Ae,maxResponseSize:gt,autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr,maxConcurrentStreams:_t,allowH2:De,webSocket:qr}={}){if(super({webSocket:qr}),g!==void 0)throw new oe("unsupported keepAlive, use pipelining=0 instead");if(o!==void 0)throw new oe("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(n!==void 0)throw new oe("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new oe("unsupported idleTimeout, use keepAliveTimeout instead");if(u!==void 0)throw new oe("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(A!=null&&!Number.isFinite(A))throw new oe("invalid maxHeaderSize");if(C!=null&&typeof C!="string")throw new oe("invalid socketPath");if(i!=null&&(!Number.isFinite(i)||i<0))throw new oe("invalid connectTimeout");if(l!=null&&(!Number.isFinite(l)||l<=0))throw new oe("invalid keepAliveTimeout");if(E!=null&&(!Number.isFinite(E)||E<=0))throw new oe("invalid keepAliveMaxTimeout");if(h!=null&&!Number.isFinite(h))throw new oe("invalid keepAliveTimeoutThreshold");if(s!=null&&(!Number.isInteger(s)||s<0))throw new oe("headersTimeout must be a positive integer or zero");if(a!=null&&(!Number.isInteger(a)||a<0))throw new oe("bodyTimeout must be a positive integer or zero");if(P!=null&&typeof P!="function"&&typeof P!="object")throw new oe("connect must be a function or an object");if(y!=null&&(!Number.isInteger(y)||y<0))throw new oe("maxRedirections must be a positive number");if(Z!=null&&(!Number.isInteger(Z)||Z<0))throw new oe("maxRequestsPerClient must be a positive number");if(Ae!=null&&(typeof Ae!="string"||SQ.isIP(Ae)===0))throw new oe("localAddress must be valid string IP address");if(gt!=null&&(!Number.isInteger(gt)||gt<-1))throw new oe("maxResponseSize must be a positive number");if(Vr!=null&&(!Number.isInteger(Vr)||Vr<-1))throw new oe("autoSelectFamilyAttemptTimeout must be a positive number");if(De!=null&&typeof De!="boolean")throw new oe("allowH2 must be a valid boolean value");if(_t!=null&&(typeof _t!="number"||_t<1))throw new oe("maxConcurrentStreams must be a positive integer, greater than 0");typeof P!="function"&&(P=Ob({...Q,maxCachedSessions:R,allowH2:De,socketPath:C,timeout:i,...wt?{autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr}:void 0,...P})),r?.Client&&Array.isArray(r.Client)?(this[TQ]=r.Client,bQ||(bQ=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[TQ]=[ak({maxRedirections:y})],this[It]=wr.parseOrigin(e),this[Qs]=P,this[en]=I??1,this[qb]=A||Gb.maxHeaderSize,this[DQ]=l??4e3,this[Wb]=E??6e5,this[zb]=h??2e3,this[Vb]=this[DQ],this[Wt]=null,this[Bs]=Ae??null,this[yr]=0,this[Zt]=0,this[Pb]=`host: ${this[It].hostname}${this[It].port?`:${this[It].port}`:""}\r +`,this[jb]=a??3e5,this[Zb]=s??3e5,this[Kb]=f??!0,this[Xb]=y,this[Ic]=Z,this[zt]=null,this[Ak]=gt>-1?gt:-1,this[ok]=_t??100,this[ne]=null,this[st]=[],this[Ut]=0,this[ot]=0,this[Is]=Wr=>dc(this,Wr),this[sk]=Wr=>UQ(this,Wr)}get pipelining(){return this[en]}set pipelining(e){this[en]=e,this[Is](!0)}get[fs](){return this[st].length-this[ot]}get[ds](){return this[ot]-this[Ut]}get[Cs](){return this[st].length-this[Ut]}get[Jb](){return!!this[ne]&&!this[QA]&&!this[ne].destroyed}get[Bc](){return!!(this[ne]?.busy(null)||this[Cs]>=(NQ(this)||1)||this[fs]>0)}[_b](e){GQ(this),this.once("connect",e)}[rk](e,r){let A=e.origin||this[It].origin,s=new Lb(A,e,r);return this[st].push(s),this[yr]||(wr.bodyLength(s.body)==null&&wr.isIterable(s.body)?(this[yr]=1,queueMicrotask(()=>dc(this))):this[Is](!0)),this[yr]&&this[Zt]!==2&&this[Bc]&&(this[Zt]=2),this[Zt]<2}async[ek](){return new Promise(e=>{this[Cs]?this[zt]=e:e(null)})}async[tk](e){return new Promise(r=>{let A=this[st].splice(this[ot]);for(let o=0;o{this[zt]&&(this[zt](),this[zt]=null),r(null)};this[ne]?(this[ne].destroy(e,s),this[ne]=null):queueMicrotask(s),this[Is]()})}},ak=$o();function UQ(t,e){if(t[ds]===0&&e.code!=="UND_ERR_INFO"&&e.code!=="UND_ERR_SOCKET"){Nt(t[ot]===t[Ut]);let r=t[st].splice(t[Ut]);for(let A=0;A{t[Qs]({host:e,hostname:r,protocol:A,port:s,servername:t[Wt],localAddress:t[Bs]},(a,c)=>{a?i(a):n(c)})});if(t.destroyed){wr.destroy(o.on("error",kQ),new xb);return}Nt(o);try{t[ne]=o.alpnProtocol==="h2"?await ik(t,o):await nk(t,o)}catch(n){throw o.destroy().on("error",kQ),n}t[QA]=!1,o[$b]=0,o[Ic]=t[Ic],o[Yb]=t,o[Hb]=null,hA.connected.hasSubscribers&&hA.connected.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],socket:o}),t.emit("connect",t[It],[t])}catch(o){if(t.destroyed)return;if(t[QA]=!1,hA.connectError.hasSubscribers&&hA.connectError.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],error:o}),o.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(Nt(t[ds]===0);t[fs]>0&&t[st][t[ot]].servername===t[Wt];){let n=t[st][t[ot]++];wr.errorRequest(t,n,o)}else UQ(t,o);t.emit("connectionError",t[It],[t],o)}t[Is]()}function FQ(t){t[Zt]=0,t.emit("drain",t[It],[t])}function dc(t,e){t[yr]!==2&&(t[yr]=2,ck(t,e),t[yr]=0,t[Ut]>256&&(t[st].splice(0,t[Ut]),t[ot]-=t[Ut],t[Ut]=0))}function ck(t,e){for(;;){if(t.destroyed){Nt(t[fs]===0);return}if(t[zt]&&!t[Cs]){t[zt](),t[zt]=null;return}if(t[ne]&&t[ne].resume(),t[Bc])t[Zt]=2;else if(t[Zt]===2){e?(t[Zt]=1,queueMicrotask(()=>FQ(t))):FQ(t);continue}if(t[fs]===0||t[ds]>=(NQ(t)||1))return;let r=t[st][t[ot]];if(t[It].protocol==="https:"&&t[Wt]!==r.servername){if(t[ds]>0)return;t[Wt]=r.servername,t[ne]?.destroy(new vb("servername changed"),()=>{t[ne]=null,dc(t)})}if(t[QA])return;if(!t[ne]){GQ(t);return}if(t[ne].destroyed||t[ne].busy(r))return;!r.aborted&&t[ne].write(r)?t[ot]++:t[st].splice(t[ot],1)}}LQ.exports=Cc});var fc=B((VJ,MQ)=>{"use strict";var tn=class{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&2047}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,e)}};MQ.exports=class{constructor(){this.head=this.tail=new tn}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new tn),this.head.push(e)}shift(){let e=this.tail,r=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),r}}});var xQ=B((qJ,vQ)=>{var{kFree:gk,kConnected:lk,kPending:uk,kQueued:Ek,kRunning:hk,kSize:Qk}=$(),Rr=Symbol("pool"),pc=class{constructor(e){this[Rr]=e}get connected(){return this[Rr][lk]}get free(){return this[Rr][gk]}get pending(){return this[Rr][uk]}get queued(){return this[Rr][Ek]}get running(){return this[Rr][hk]}get size(){return this[Rr][Qk]}};vQ.exports=pc});var Tc=B((WJ,zQ)=>{"use strict";var Bk=eA(),Ik=fc(),{kConnected:mc,kSize:OQ,kRunning:YQ,kPending:_Q,kQueued:ps,kBusy:Ck,kFree:dk,kUrl:fk,kClose:pk,kDestroy:mk,kDispatch:wk}=$(),yk=xQ(),ke=Symbol("clients"),me=Symbol("needDrain"),ms=Symbol("queue"),wc=Symbol("closed resolve"),yc=Symbol("onDrain"),JQ=Symbol("onConnect"),PQ=Symbol("onDisconnect"),HQ=Symbol("onConnectionError"),Rc=Symbol("get dispatcher"),qQ=Symbol("add client"),WQ=Symbol("remove client"),VQ=Symbol("stats"),Dc=class extends Bk{constructor(e){super(e),this[ms]=new Ik,this[ke]=[],this[ps]=0;let r=this;this[yc]=function(s,o){let n=r[ms],i=!1;for(;!i;){let a=n.shift();if(!a)break;r[ps]--,i=!this.dispatch(a.opts,a.handler)}this[me]=i,!this[me]&&r[me]&&(r[me]=!1,r.emit("drain",s,[r,...o])),r[wc]&&n.isEmpty()&&Promise.all(r[ke].map(a=>a.close())).then(r[wc])},this[JQ]=(A,s)=>{r.emit("connect",A,[r,...s])},this[PQ]=(A,s,o)=>{r.emit("disconnect",A,[r,...s],o)},this[HQ]=(A,s,o)=>{r.emit("connectionError",A,[r,...s],o)},this[VQ]=new yk(this)}get[Ck](){return this[me]}get[mc](){return this[ke].filter(e=>e[mc]).length}get[dk](){return this[ke].filter(e=>e[mc]&&!e[me]).length}get[_Q](){let e=this[ps];for(let{[_Q]:r}of this[ke])e+=r;return e}get[YQ](){let e=0;for(let{[YQ]:r}of this[ke])e+=r;return e}get[OQ](){let e=this[ps];for(let{[OQ]:r}of this[ke])e+=r;return e}get stats(){return this[VQ]}async[pk](){this[ms].isEmpty()?await Promise.all(this[ke].map(e=>e.close())):await new Promise(e=>{this[wc]=e})}async[mk](e){for(;;){let r=this[ms].shift();if(!r)break;r.handler.onError(e)}await Promise.all(this[ke].map(r=>r.destroy(e)))}[wk](e,r){let A=this[Rc]();return A?A.dispatch(e,r)||(A[me]=!0,this[me]=!this[Rc]()):(this[me]=!0,this[ms].push({opts:e,handler:r}),this[ps]++),!this[me]}[qQ](e){return e.on("drain",this[yc]).on("connect",this[JQ]).on("disconnect",this[PQ]).on("connectionError",this[HQ]),this[ke].push(e),this[me]&&queueMicrotask(()=>{this[me]&&this[yc](e[fk],[this,e])}),this}[WQ](e){e.close(()=>{let r=this[ke].indexOf(e);r!==-1&&this[ke].splice(r,1)}),this[me]=this[ke].some(r=>!r[me]&&r.closed!==!0&&r.destroyed!==!0)}};zQ.exports={PoolBase:Dc,kClients:ke,kNeedDrain:me,kAddClient:qQ,kRemoveClient:WQ,kGetDispatcher:Rc}});var IA=B((zJ,XQ)=>{"use strict";var{PoolBase:Rk,kClients:rn,kNeedDrain:Dk,kAddClient:Tk,kGetDispatcher:bk}=Tc(),kk=BA(),{InvalidArgumentError:bc}=Y(),ZQ=M(),{kUrl:jQ,kInterceptors:Fk}=$(),Sk=ts(),kc=Symbol("options"),Fc=Symbol("connections"),KQ=Symbol("factory");function Nk(t,e){return new kk(t,e)}var Sc=class extends Rk{constructor(e,{connections:r,factory:A=Nk,connect:s,connectTimeout:o,tls:n,maxCachedSessions:i,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g,allowH2:l,...u}={}){if(r!=null&&(!Number.isFinite(r)||r<0))throw new bc("invalid connections");if(typeof A!="function")throw new bc("factory must be a function.");if(s!=null&&typeof s!="function"&&typeof s!="object")throw new bc("connect must be a function or an object");typeof s!="function"&&(s=Sk({...n,maxCachedSessions:i,allowH2:l,socketPath:a,timeout:o,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g}:void 0,...s})),super(u),this[Fk]=u.interceptors?.Pool&&Array.isArray(u.interceptors.Pool)?u.interceptors.Pool:[],this[Fc]=r||null,this[jQ]=ZQ.parseOrigin(e),this[kc]={...ZQ.deepClone(u),connect:s,allowH2:l},this[kc].interceptors=u.interceptors?{...u.interceptors}:void 0,this[KQ]=A,this.on("connectionError",(E,h,C)=>{for(let I of h){let Q=this[rn].indexOf(I);Q!==-1&&this[rn].splice(Q,1)}})}[bk](){for(let e of this[rn])if(!e[Dk])return e;if(!this[Fc]||this[rn].length{"use strict";var{BalancedPoolMissingUpstreamError:Uk,InvalidArgumentError:Gk}=Y(),{PoolBase:Lk,kClients:Ce,kNeedDrain:ws,kAddClient:Mk,kRemoveClient:vk,kGetDispatcher:xk}=Tc(),Ok=IA(),{kUrl:Nc,kInterceptors:Yk}=$(),{parseOrigin:$Q}=M(),eB=Symbol("factory"),An=Symbol("options"),tB=Symbol("kGreatestCommonDivisor"),Dr=Symbol("kCurrentWeight"),Tr=Symbol("kIndex"),We=Symbol("kWeight"),sn=Symbol("kMaxWeightPerServer"),on=Symbol("kErrorPenalty");function _k(t,e){if(t===0)return e;for(;e!==0;){let r=e;e=t%e,t=r}return t}function Jk(t,e){return new Ok(t,e)}var Uc=class extends Lk{constructor(e=[],{factory:r=Jk,...A}={}){if(super(),this[An]=A,this[Tr]=-1,this[Dr]=0,this[sn]=this[An].maxWeightPerServer||100,this[on]=this[An].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof r!="function")throw new Gk("factory must be a function.");this[Yk]=A.interceptors?.BalancedPool&&Array.isArray(A.interceptors.BalancedPool)?A.interceptors.BalancedPool:[],this[eB]=r;for(let s of e)this.addUpstream(s);this._updateBalancedPoolStats()}addUpstream(e){let r=$Q(e).origin;if(this[Ce].find(s=>s[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0))return this;let A=this[eB](r,Object.assign({},this[An]));this[Mk](A),A.on("connect",()=>{A[We]=Math.min(this[sn],A[We]+this[on])}),A.on("connectionError",()=>{A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats()}),A.on("disconnect",(...s)=>{let o=s[2];o&&o.code==="UND_ERR_SOCKET"&&(A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats())});for(let s of this[Ce])s[We]=this[sn];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let r=0;rs[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0);return A&&this[vk](A),this}get upstreams(){return this[Ce].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[Nc].origin)}[xk](){if(this[Ce].length===0)throw new Uk;if(!this[Ce].find(o=>!o[ws]&&o.closed!==!0&&o.destroyed!==!0)||this[Ce].map(o=>o[ws]).reduce((o,n)=>o&&n,!0))return;let A=0,s=this[Ce].findIndex(o=>!o[ws]);for(;A++this[Ce][s][We]&&!o[ws]&&(s=this[Tr]),this[Tr]===0&&(this[Dr]=this[Dr]-this[tB],this[Dr]<=0&&(this[Dr]=this[sn])),o[We]>=this[Dr]&&!o[ws])return o}return this[Dr]=this[Ce][s][We],this[Tr]=s,this[Ce][s]}};rB.exports=Uc});var CA=B((jJ,gB)=>{"use strict";var{InvalidArgumentError:nn}=Y(),{kClients:jt,kRunning:sB,kClose:Pk,kDestroy:Hk,kDispatch:Vk,kInterceptors:qk}=$(),Wk=eA(),zk=IA(),Zk=BA(),jk=M(),Kk=$o(),oB=Symbol("onConnect"),nB=Symbol("onDisconnect"),iB=Symbol("onConnectionError"),Xk=Symbol("maxRedirections"),aB=Symbol("onDrain"),cB=Symbol("factory"),Gc=Symbol("options");function $k(t,e){return e&&e.connections===1?new Zk(t,e):new zk(t,e)}var Lc=class extends Wk{constructor({factory:e=$k,maxRedirections:r=0,connect:A,...s}={}){if(typeof e!="function")throw new nn("factory must be a function.");if(A!=null&&typeof A!="function"&&typeof A!="object")throw new nn("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new nn("maxRedirections must be a positive number");super(s),A&&typeof A!="function"&&(A={...A}),this[qk]=s.interceptors?.Agent&&Array.isArray(s.interceptors.Agent)?s.interceptors.Agent:[Kk({maxRedirections:r})],this[Gc]={...jk.deepClone(s),connect:A},this[Gc].interceptors=s.interceptors?{...s.interceptors}:void 0,this[Xk]=r,this[cB]=e,this[jt]=new Map,this[aB]=(o,n)=>{this.emit("drain",o,[this,...n])},this[oB]=(o,n)=>{this.emit("connect",o,[this,...n])},this[nB]=(o,n,i)=>{this.emit("disconnect",o,[this,...n],i)},this[iB]=(o,n,i)=>{this.emit("connectionError",o,[this,...n],i)}}get[sB](){let e=0;for(let r of this[jt].values())e+=r[sB];return e}[Vk](e,r){let A;if(e.origin&&(typeof e.origin=="string"||e.origin instanceof URL))A=String(e.origin);else throw new nn("opts.origin must be a non-empty string or URL.");let s=this[jt].get(A);return s||(s=this[cB](e.origin,this[Gc]).on("drain",this[aB]).on("connect",this[oB]).on("disconnect",this[nB]).on("connectionError",this[iB]),this[jt].set(A,s)),s.dispatch(e,r)}async[Pk](){let e=[];for(let r of this[jt].values())e.push(r.close());this[jt].clear(),await Promise.all(e)}async[Hk](e){let r=[];for(let A of this[jt].values())r.push(A.destroy(e));this[jt].clear(),await Promise.all(r)}};gB.exports=Lc});var Yc=B((KJ,pB)=>{"use strict";var{kProxy:Mc,kClose:BB,kDestroy:IB,kDispatch:lB,kInterceptors:eF}=$(),{URL:br}=require("node:url"),tF=CA(),CB=IA(),dB=eA(),{InvalidArgumentError:dA,RequestAbortedError:rF,SecureProxyConnectionError:AF}=Y(),uB=ts(),fB=BA(),an=Symbol("proxy agent"),cn=Symbol("proxy client"),Kt=Symbol("proxy headers"),vc=Symbol("request tls settings"),EB=Symbol("proxy tls settings"),hB=Symbol("connect endpoint function"),QB=Symbol("tunnel proxy");function sF(t){return t==="https:"?443:80}function oF(t,e){return new CB(t,e)}var nF=()=>{};function iF(t,e){return e.connections===1?new fB(t,e):new CB(t,e)}var xc=class extends dB{#e;constructor(e,{headers:r={},connect:A,factory:s}){if(super(),!e)throw new dA("Proxy URL is mandatory");this[Kt]=r,s?this.#e=s(e,{connect:A}):this.#e=new fB(e,{connect:A})}[lB](e,r){let A=r.onHeaders;r.onHeaders=function(i,a,c){if(i===407){typeof r.onError=="function"&&r.onError(new dA("Proxy Authentication Required (407)"));return}A&&A.call(this,i,a,c)};let{origin:s,path:o="/",headers:n={}}=e;if(e.path=s+o,!("host"in n)&&!("Host"in n)){let{host:i}=new br(s);n.host=i}return e.headers={...this[Kt],...n},this.#e[lB](e,r)}async[BB](){return this.#e.close()}async[IB](e){return this.#e.destroy(e)}},Oc=class extends dB{constructor(e){if(super(),!e||typeof e=="object"&&!(e instanceof br)&&!e.uri)throw new dA("Proxy uri is mandatory");let{clientFactory:r=oF}=e;if(typeof r!="function")throw new dA("Proxy opts.clientFactory must be a function.");let{proxyTunnel:A=!0}=e,s=this.#e(e),{href:o,origin:n,port:i,protocol:a,username:c,password:g,hostname:l}=s;if(this[Mc]={uri:o,protocol:a},this[eF]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[vc]=e.requestTls,this[EB]=e.proxyTls,this[Kt]=e.headers||{},this[QB]=A,e.auth&&e.token)throw new dA("opts.auth cannot be used in combination with opts.token");e.auth?this[Kt]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Kt]["proxy-authorization"]=e.token:c&&g&&(this[Kt]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(g)}`).toString("base64")}`);let u=uB({...e.proxyTls});this[hB]=uB({...e.requestTls});let E=e.factory||iF,h=(C,I)=>{let{protocol:Q}=new br(C);return!this[QB]&&Q==="http:"&&this[Mc].protocol==="http:"?new xc(this[Mc].uri,{headers:this[Kt],connect:u,factory:E}):E(C,I)};this[cn]=r(s,{connect:u}),this[an]=new tF({...e,factory:h,connect:async(C,I)=>{let Q=C.host;C.port||(Q+=`:${sF(C.protocol)}`);try{let{socket:f,statusCode:R}=await this[cn].connect({origin:n,port:i,path:Q,signal:C.signal,headers:{...this[Kt],host:C.host},servername:this[EB]?.servername||l});if(R!==200&&(f.on("error",nF).destroy(),I(new rF(`Proxy response (${R}) !== 200 when HTTP Tunneling`))),C.protocol!=="https:"){I(null,f);return}let y;this[vc]?y=this[vc].servername:y=C.servername,this[hB]({...C,servername:y,httpSocket:f},I)}catch(f){f.code==="ERR_TLS_CERT_ALTNAME_INVALID"?I(new AF(f)):I(f)}}})}dispatch(e,r){let A=aF(e.headers);if(cF(A),A&&!("host"in A)&&!("Host"in A)){let{host:s}=new br(e.origin);A.host=s}return this[an].dispatch({...e,headers:A},r)}#e(e){return typeof e=="string"?new br(e):e instanceof br?e:new br(e.uri)}async[BB](){await this[an].close(),await this[cn].close()}async[IB](){await this[an].destroy(),await this[cn].destroy()}};function aF(t){if(Array.isArray(t)){let e={};for(let r=0;rr.toLowerCase()==="proxy-authorization"))throw new dA("Proxy-Authorization should be sent in ProxyAgent constructor")}pB.exports=Oc});var TB=B((XJ,DB)=>{"use strict";var gF=eA(),{kClose:lF,kDestroy:uF,kClosed:mB,kDestroyed:wB,kDispatch:EF,kNoProxyAgent:ys,kHttpProxyAgent:Xt,kHttpsProxyAgent:kr}=$(),yB=Yc(),hF=CA(),QF={"http:":80,"https:":443},RB=!1,_c=class extends gF{#e=null;#t=null;#r=null;constructor(e={}){super(),this.#r=e,RB||(RB=!0,process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"}));let{httpProxy:r,httpsProxy:A,noProxy:s,...o}=e;this[ys]=new hF(o);let n=r??process.env.http_proxy??process.env.HTTP_PROXY;n?this[Xt]=new yB({...o,uri:n}):this[Xt]=this[ys];let i=A??process.env.https_proxy??process.env.HTTPS_PROXY;i?this[kr]=new yB({...o,uri:i}):this[kr]=this[Xt],this.#A()}[EF](e,r){let A=new URL(e.origin);return this.#o(A).dispatch(e,r)}async[lF](){await this[ys].close(),this[Xt][mB]||await this[Xt].close(),this[kr][mB]||await this[kr].close()}async[uF](e){await this[ys].destroy(e),this[Xt][wB]||await this[Xt].destroy(e),this[kr][wB]||await this[kr].destroy(e)}#o(e){let{protocol:r,host:A,port:s}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),s=Number.parseInt(s,10)||QF[r]||0,this.#s(A,s)?r==="https:"?this[kr]:this[Xt]:this[ys]}#s(e,r){if(this.#n&&this.#A(),this.#t.length===0)return!0;if(this.#e==="*")return!1;for(let A=0;A{"use strict";var fA=require("node:assert"),{kRetryHandlerDefaultRetry:bB}=$(),{RequestRetryError:pA}=Y(),{isDisturbed:kB,parseHeaders:BF,parseRangeHeader:FB,wrapRequestBody:IF}=M();function CF(t){let e=Date.now();return new Date(t).getTime()-e}function SB(t,e,r,A){let s=t["content-length"];if(s==null||!Number.isFinite(e.start)||!Number.isFinite(e.end))return null;let o=Number(s),n=e.end-e.start+1;return!Number.isFinite(o)||o!==n?new pA("Content-Length mismatch",r,{headers:t,data:{count:A}}):null}var Jc=class t{constructor(e,r){let{retryOptions:A,...s}=e,{retry:o,maxRetries:n,maxTimeout:i,minTimeout:a,timeoutFactor:c,methods:g,errorCodes:l,retryAfter:u,statusCodes:E}=A??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...s,body:IF(e.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??t[bB],retryAfter:u??!0,maxTimeout:i??30*1e3,minTimeout:a??500,timeoutFactor:c??2,maxRetries:n??5,methods:g??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:E??[500,502,503,504,429],errorCodes:l??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect(h=>{this.aborted=!0,this.abort?this.abort(h):this.reason=h})}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,r,A){this.handler.onUpgrade&&this.handler.onUpgrade(e,r,A)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[bB](e,{state:r,opts:A},s){let{statusCode:o,code:n,headers:i}=e,{method:a,retryOptions:c}=A,{maxRetries:g,minTimeout:l,maxTimeout:u,timeoutFactor:E,statusCodes:h,errorCodes:C,methods:I}=c,{counter:Q}=r;if(n&&n!=="UND_ERR_REQ_RETRY"&&!C.includes(n)){s(e);return}if(Array.isArray(I)&&!I.includes(a)){s(e);return}if(o!=null&&Array.isArray(h)&&!h.includes(o)){s(e);return}if(Q>g){s(e);return}let f=i?.["retry-after"];f&&(f=Number(f),f=Number.isNaN(f)?CF(f):f*1e3);let R=f>0?Math.min(f,u):Math.min(l*E**(Q-1),u);setTimeout(()=>s(null),R)}onHeaders(e,r,A,s){let o=BF(r);if(this.retryCount+=1,e>=300)return this.retryOpts.statusCodes.includes(e)===!1?this.handler.onHeaders(e,r,A,s):(this.abort(new pA("Request failed",e,{headers:o,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new pA("server does not support the range header and the payload was partially consumed",e,{headers:o,data:{count:this.retryCount}})),!1;let i=FB(o["content-range"]);if(!i)return this.abort(new pA("Content-Range mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==o.etag)return this.abort(new pA("ETag mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;return fA(this.start===c,"content-range mismatch"),fA(this.end==null||this.end===l,"content-range mismatch"),this.resume=A,!0}if(this.end==null){if(e===206){let i=FB(o["content-range"]);if(i==null)return this.handler.onHeaders(e,r,A,s);let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;fA(c!=null&&Number.isFinite(c),"content-range mismatch"),fA(l!=null&&Number.isFinite(l),"invalid content-length"),this.start=c,this.end=l}if(this.end==null){let i=o["content-length"];this.end=i!=null?Number(i)-1:null}return fA(Number.isFinite(this.start)),fA(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=A,this.etag=o.etag!=null?o.etag:null,this.etag!=null&&this.etag.startsWith("W/")&&(this.etag=null),this.handler.onHeaders(e,r,A,s)}let n=new pA("Request failed",e,{headers:o,data:{count:this.retryCount}});return this.abort(n),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||kB(this.opts.body))return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},r.bind(this));function r(A){if(A!=null||this.aborted||kB(this.opts.body))return this.handler.onError(A);if(this.start!==0){let s={range:`bytes=${this.start}-${this.end??""}`};this.etag!=null&&(s["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...s}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(s){this.handler.onError(s)}}}};NB.exports=Jc});var GB=B((eP,UB)=>{"use strict";var dF=$A(),fF=gn(),Pc=class extends dF{#e=null;#t=null;constructor(e,r={}){super(r),this.#e=e,this.#t=r}dispatch(e,r){let A=new fF({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:r});return this.#e.dispatch(e,A)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}};UB.exports=Pc});var Zc=B((tP,PB)=>{"use strict";var OB=require("node:assert"),{Readable:pF}=require("node:stream"),{RequestAbortedError:YB,NotSupportedError:mF,InvalidArgumentError:wF,AbortError:Hc}=Y(),_B=M(),{ReadableStreamFrom:yF}=M(),Me=Symbol("kConsume"),Rs=Symbol("kReading"),$t=Symbol("kBody"),LB=Symbol("kAbort"),JB=Symbol("kContentType"),MB=Symbol("kContentLength"),RF=()=>{},Vc=class extends pF{constructor({resume:e,abort:r,contentType:A="",contentLength:s,highWaterMark:o=64*1024}){super({autoDestroy:!0,read:e,highWaterMark:o}),this._readableState.dataEmitted=!1,this[LB]=r,this[Me]=null,this[$t]=null,this[JB]=A,this[MB]=s,this[Rs]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new YB),e&&this[LB](),super.destroy(e)}_destroy(e,r){this[Rs]?r(e):setImmediate(()=>{r(e)})}on(e,...r){return(e==="data"||e==="readable")&&(this[Rs]=!0),super.on(e,...r)}addListener(e,...r){return this.on(e,...r)}off(e,...r){let A=super.off(e,...r);return(e==="data"||e==="readable")&&(this[Rs]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,...r){return this.off(e,...r)}push(e){return this[Me]&&e!==null?(Wc(this[Me],e),this[Rs]?super.push(e):!0):super.push(e)}async text(){return Ds(this,"text")}async json(){return Ds(this,"json")}async blob(){return Ds(this,"blob")}async bytes(){return Ds(this,"bytes")}async arrayBuffer(){return Ds(this,"arrayBuffer")}async formData(){throw new mF}get bodyUsed(){return _B.isDisturbed(this)}get body(){return this[$t]||(this[$t]=yF(this),this[Me]&&(this[$t].getReader(),OB(this[$t].locked))),this[$t]}async dump(e){let r=Number.isFinite(e?.limit)?e.limit:131072,A=e?.signal;if(A!=null&&(typeof A!="object"||!("aborted"in A)))throw new wF("signal must be an AbortSignal");return A?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((s,o)=>{this[MB]>r&&this.destroy(new Hc);let n=()=>{this.destroy(A.reason??new Hc)};A?.addEventListener("abort",n),this.on("close",function(){A?.removeEventListener("abort",n),A?.aborted?o(A.reason??new Hc):s(null)}).on("error",RF).on("data",function(i){r-=i.length,r<=0&&this.destroy()}).resume()})}};function DF(t){return t[$t]&&t[$t].locked===!0||t[Me]}function TF(t){return _B.isDisturbed(t)||DF(t)}async function Ds(t,e){return OB(!t[Me]),new Promise((r,A)=>{if(TF(t)){let s=t._readableState;s.destroyed&&s.closeEmitted===!1?t.on("error",o=>{A(o)}).on("close",()=>{A(new TypeError("unusable"))}):A(s.errored??new TypeError("unusable"))}else queueMicrotask(()=>{t[Me]={type:e,stream:t,resolve:r,reject:A,length:0,body:[]},t.on("error",function(s){zc(this[Me],s)}).on("close",function(){this[Me].body!==null&&zc(this[Me],new YB)}),bF(t[Me])})})}function bF(t){if(t.body===null)return;let{_readableState:e}=t.stream;if(e.bufferIndex){let r=e.bufferIndex,A=e.buffer.length;for(let s=r;s2&&r[0]===239&&r[1]===187&&r[2]===191?3:0;return r.utf8Slice(s,A)}function vB(t,e){if(t.length===0||e===0)return new Uint8Array(0);if(t.length===1)return new Uint8Array(t[0]);let r=new Uint8Array(Buffer.allocUnsafeSlow(e).buffer),A=0;for(let s=0;s{var kF=require("node:assert"),{ResponseStatusCodeError:HB}=Y(),{chunksDecode:VB}=Zc(),FF=128*1024;async function SF({callback:t,body:e,contentType:r,statusCode:A,statusMessage:s,headers:o}){kF(e);let n=[],i=0;try{for await(let l of e)if(n.push(l),i+=l.length,i>FF){n=[],i=0;break}}catch{n=[],i=0}let a=`Response status code ${A}${s?`: ${s}`:""}`;if(A===204||!r||!i){queueMicrotask(()=>t(new HB(a,A,o)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let g;try{qB(r)?g=JSON.parse(VB(n,i)):WB(r)&&(g=VB(n,i))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>t(new HB(a,A,o,g)))}var qB=t=>t.length>15&&t[11]==="/"&&t[0]==="a"&&t[1]==="p"&&t[2]==="p"&&t[3]==="l"&&t[4]==="i"&&t[5]==="c"&&t[6]==="a"&&t[7]==="t"&&t[8]==="i"&&t[9]==="o"&&t[10]==="n"&&t[12]==="j"&&t[13]==="s"&&t[14]==="o"&&t[15]==="n",WB=t=>t.length>4&&t[4]==="/"&&t[0]==="t"&&t[1]==="e"&&t[2]==="x"&&t[3]==="t";zB.exports={getResolveErrorBodyCallback:SF,isContentTypeApplicationJson:qB,isContentTypeText:WB}});var KB=B((AP,Kc)=>{"use strict";var NF=require("node:assert"),{Readable:UF}=Zc(),{InvalidArgumentError:mA,RequestAbortedError:ZB}=Y(),ve=M(),{getResolveErrorBodyCallback:GF}=jc(),{AsyncResource:LF}=require("node:async_hooks"),ln=class extends LF{constructor(e,r){if(!e||typeof e!="object")throw new mA("invalid opts");let{signal:A,method:s,opaque:o,body:n,onInfo:i,responseHeaders:a,throwOnError:c,highWaterMark:g}=e;try{if(typeof r!="function")throw new mA("invalid callback");if(g&&(typeof g!="number"||g<0))throw new mA("invalid highWaterMark");if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new mA("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new mA("invalid method");if(i&&typeof i!="function")throw new mA("invalid onInfo callback");super("UNDICI_REQUEST")}catch(l){throw ve.isStream(n)&&ve.destroy(n.on("error",ve.nop),l),l}this.method=s,this.responseHeaders=a||null,this.opaque=o||null,this.callback=r,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=i||null,this.throwOnError=c,this.highWaterMark=g,this.signal=A,this.reason=null,this.removeAbortListener=null,ve.isStream(n)&&n.on("error",l=>{this.onError(l)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new ZB:this.removeAbortListener=ve.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new ZB,this.res?ve.destroy(this.res.on("error",ve.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&(this.res?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}))}onConnect(e,r){if(this.reason){e(this.reason);return}NF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{callback:o,opaque:n,abort:i,context:a,responseHeaders:c,highWaterMark:g}=this,l=c==="raw"?ve.parseRawHeaders(r):ve.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:l});return}let u=c==="raw"?ve.parseHeaders(r):l,E=u["content-type"],h=u["content-length"],C=new UF({resume:A,abort:i,contentType:E,contentLength:this.method!=="HEAD"&&h?Number(h):null,highWaterMark:g});this.removeAbortListener&&C.on("close",this.removeAbortListener),this.callback=null,this.res=C,o!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(GF,null,{callback:o,body:C,contentType:E,statusCode:e,statusMessage:s,headers:l}):this.runInAsyncScope(o,null,null,{statusCode:e,headers:l,trailers:this.trailers,opaque:n,body:C,context:a}))}onData(e){return this.res.push(e)}onComplete(e){ve.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:r,callback:A,body:s,opaque:o}=this;A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:o})})),r&&(this.res=null,queueMicrotask(()=>{ve.destroy(r,e)})),s&&(this.body=null,ve.destroy(s,e)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function jB(t,e){if(e===void 0)return new Promise((r,A)=>{jB.call(this,t,(s,o)=>s?A(s):r(o))});try{this.dispatch(t,new ln(t,e))}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}Kc.exports=jB;Kc.exports.RequestHandler=ln});var Ts=B((sP,eI)=>{var{addAbortListener:MF}=M(),{RequestAbortedError:vF}=Y(),wA=Symbol("kListener"),Ct=Symbol("kSignal");function XB(t){t.abort?t.abort(t[Ct]?.reason):t.reason=t[Ct]?.reason??new vF,$B(t)}function xF(t,e){if(t.reason=null,t[Ct]=null,t[wA]=null,!!e){if(e.aborted){XB(t);return}t[Ct]=e,t[wA]=()=>{XB(t)},MF(t[Ct],t[wA])}}function $B(t){t[Ct]&&("removeEventListener"in t[Ct]?t[Ct].removeEventListener("abort",t[wA]):t[Ct].removeListener("abort",t[wA]),t[Ct]=null,t[wA]=null)}eI.exports={addSignal:xF,removeSignal:$B}});var sI=B((oP,AI)=>{"use strict";var OF=require("node:assert"),{finished:YF,PassThrough:_F}=require("node:stream"),{InvalidArgumentError:yA,InvalidReturnValueError:JF}=Y(),nt=M(),{getResolveErrorBodyCallback:PF}=jc(),{AsyncResource:HF}=require("node:async_hooks"),{addSignal:VF,removeSignal:tI}=Ts(),Xc=class extends HF{constructor(e,r,A){if(!e||typeof e!="object")throw new yA("invalid opts");let{signal:s,method:o,opaque:n,body:i,onInfo:a,responseHeaders:c,throwOnError:g}=e;try{if(typeof A!="function")throw new yA("invalid callback");if(typeof r!="function")throw new yA("invalid factory");if(s&&typeof s.on!="function"&&typeof s.addEventListener!="function")throw new yA("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new yA("invalid method");if(a&&typeof a!="function")throw new yA("invalid onInfo callback");super("UNDICI_STREAM")}catch(l){throw nt.isStream(i)&&nt.destroy(i.on("error",nt.nop),l),l}this.responseHeaders=c||null,this.opaque=n||null,this.factory=r,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=i,this.onInfo=a||null,this.throwOnError=g||!1,nt.isStream(i)&&i.on("error",l=>{this.onError(l)}),VF(this,s)}onConnect(e,r){if(this.reason){e(this.reason);return}OF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{factory:o,opaque:n,context:i,callback:a,responseHeaders:c}=this,g=c==="raw"?nt.parseRawHeaders(r):nt.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:g});return}this.factory=null;let l;if(this.throwOnError&&e>=400){let h=(c==="raw"?nt.parseHeaders(r):g)["content-type"];l=new _F,this.callback=null,this.runInAsyncScope(PF,null,{callback:a,body:l,contentType:h,statusCode:e,statusMessage:s,headers:g})}else{if(o===null)return;if(l=this.runInAsyncScope(o,null,{statusCode:e,headers:g,opaque:n,context:i}),!l||typeof l.write!="function"||typeof l.end!="function"||typeof l.on!="function")throw new JF("expected Writable");YF(l,{readable:!1},E=>{let{callback:h,res:C,opaque:I,trailers:Q,abort:f}=this;this.res=null,(E||!C.readable)&&nt.destroy(C,E),this.callback=null,this.runInAsyncScope(h,null,E||null,{opaque:I,trailers:Q}),E&&f()})}return l.on("drain",A),this.res=l,(l.writableNeedDrain!==void 0?l.writableNeedDrain:l._writableState?.needDrain)!==!0}onData(e){let{res:r}=this;return r?r.write(e):!0}onComplete(e){let{res:r}=this;tI(this),r&&(this.trailers=nt.parseHeaders(e),r.end())}onError(e){let{res:r,callback:A,opaque:s,body:o}=this;tI(this),this.factory=null,r?(this.res=null,nt.destroy(r,e)):A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:s})})),o&&(this.body=null,nt.destroy(o,e))}};function rI(t,e,r){if(r===void 0)return new Promise((A,s)=>{rI.call(this,t,e,(o,n)=>o?s(o):A(n))});try{this.dispatch(t,new Xc(t,e,r))}catch(A){if(typeof r!="function")throw A;let s=t?.opaque;queueMicrotask(()=>r(A,{opaque:s}))}}AI.exports=rI});var aI=B((nP,iI)=>{"use strict";var{Readable:nI,Duplex:qF,PassThrough:WF}=require("node:stream"),{InvalidArgumentError:bs,InvalidReturnValueError:zF,RequestAbortedError:$c}=Y(),ze=M(),{AsyncResource:ZF}=require("node:async_hooks"),{addSignal:jF,removeSignal:KF}=Ts(),oI=require("node:assert"),RA=Symbol("resume"),eg=class extends nI{constructor(){super({autoDestroy:!0}),this[RA]=null}_read(){let{[RA]:e}=this;e&&(this[RA]=null,e())}_destroy(e,r){this._read(),r(e)}},tg=class extends nI{constructor(e){super({autoDestroy:!0}),this[RA]=e}_read(){this[RA]()}_destroy(e,r){!e&&!this._readableState.endEmitted&&(e=new $c),r(e)}},rg=class extends ZF{constructor(e,r){if(!e||typeof e!="object")throw new bs("invalid opts");if(typeof r!="function")throw new bs("invalid handler");let{signal:A,method:s,opaque:o,onInfo:n,responseHeaders:i}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new bs("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new bs("invalid method");if(n&&typeof n!="function")throw new bs("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=o||null,this.responseHeaders=i||null,this.handler=r,this.abort=null,this.context=null,this.onInfo=n||null,this.req=new eg().on("error",ze.nop),this.ret=new qF({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:a}=this;a?.resume&&a.resume()},write:(a,c,g)=>{let{req:l}=this;l.push(a,c)||l._readableState.destroyed?g():l[RA]=g},destroy:(a,c)=>{let{body:g,req:l,res:u,ret:E,abort:h}=this;!a&&!E._readableState.endEmitted&&(a=new $c),h&&a&&h(),ze.destroy(g,a),ze.destroy(l,a),ze.destroy(u,a),KF(this),c(a)}}).on("prefinish",()=>{let{req:a}=this;a.push(null)}),this.res=null,jF(this,A)}onConnect(e,r){let{ret:A,res:s}=this;if(this.reason){e(this.reason);return}oI(!s,"pipeline cannot be retried"),oI(!A.destroyed),this.abort=e,this.context=r}onHeaders(e,r,A){let{opaque:s,handler:o,context:n}=this;if(e<200){if(this.onInfo){let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);this.onInfo({statusCode:e,headers:a})}return}this.res=new tg(A);let i;try{this.handler=null;let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);i=this.runInAsyncScope(o,null,{statusCode:e,headers:a,opaque:s,body:this.res,context:n})}catch(a){throw this.res.on("error",ze.nop),a}if(!i||typeof i.on!="function")throw new zF("expected Readable");i.on("data",a=>{let{ret:c,body:g}=this;!c.push(a)&&g.pause&&g.pause()}).on("error",a=>{let{ret:c}=this;ze.destroy(c,a)}).on("end",()=>{let{ret:a}=this;a.push(null)}).on("close",()=>{let{ret:a}=this;a._readableState.ended||ze.destroy(a,new $c)}),this.body=i}onData(e){let{res:r}=this;return r.push(e)}onComplete(e){let{res:r}=this;r.push(null)}onError(e){let{ret:r}=this;this.handler=null,ze.destroy(r,e)}};function XF(t,e){try{let r=new rg(t,e);return this.dispatch({...t,body:r.req},r),r.ret}catch(r){return new WF().destroy(r)}}iI.exports=XF});var hI=B((iP,EI)=>{"use strict";var{InvalidArgumentError:Ag,SocketError:$F}=Y(),{AsyncResource:eS}=require("node:async_hooks"),cI=M(),{addSignal:tS,removeSignal:gI}=Ts(),lI=require("node:assert"),sg=class extends eS{constructor(e,r){if(!e||typeof e!="object")throw new Ag("invalid opts");if(typeof r!="function")throw new Ag("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new Ag("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=o||null,this.opaque=s||null,this.callback=r,this.abort=null,this.context=null,tS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}lI(this.callback),this.abort=e,this.context=null}onHeaders(){throw new $F("bad upgrade",null)}onUpgrade(e,r,A){lI(e===101);let{callback:s,opaque:o,context:n}=this;gI(this),this.callback=null;let i=this.responseHeaders==="raw"?cI.parseRawHeaders(r):cI.parseHeaders(r);this.runInAsyncScope(s,null,null,{headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;gI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function uI(t,e){if(e===void 0)return new Promise((r,A)=>{uI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new sg(t,e);this.dispatch({...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}EI.exports=uI});var dI=B((aP,CI)=>{"use strict";var rS=require("node:assert"),{AsyncResource:AS}=require("node:async_hooks"),{InvalidArgumentError:og,SocketError:sS}=Y(),QI=M(),{addSignal:oS,removeSignal:BI}=Ts(),ng=class extends AS{constructor(e,r){if(!e||typeof e!="object")throw new og("invalid opts");if(typeof r!="function")throw new og("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new og("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=s||null,this.responseHeaders=o||null,this.callback=r,this.abort=null,oS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}rS(this.callback),this.abort=e,this.context=r}onHeaders(){throw new sS("bad connect",null)}onUpgrade(e,r,A){let{callback:s,opaque:o,context:n}=this;BI(this),this.callback=null;let i=r;i!=null&&(i=this.responseHeaders==="raw"?QI.parseRawHeaders(r):QI.parseHeaders(r)),this.runInAsyncScope(s,null,null,{statusCode:e,headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;BI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function II(t,e){if(e===void 0)return new Promise((r,A)=>{II.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new ng(t,e);this.dispatch({...t,method:"CONNECT"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}CI.exports=II});var fI=B((cP,DA)=>{"use strict";DA.exports.request=KB();DA.exports.stream=sI();DA.exports.pipeline=aI();DA.exports.upgrade=hI();DA.exports.connect=dI()});var ag=B((gP,mI)=>{"use strict";var{UndiciError:nS}=Y(),pI=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),ig=class t extends nS{constructor(e){super(e),Error.captureStackTrace(this,t),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&e[pI]===!0}[pI]=!0};mI.exports={MockNotMatchedError:ig}});var TA=B((lP,wI)=>{"use strict";wI.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var ks=B((uP,GI)=>{"use strict";var{MockNotMatchedError:Fr}=ag(),{kDispatches:un,kMockAgent:iS,kOriginalDispatch:aS,kOrigin:cS,kGetNetConnect:gS}=TA(),{buildURL:lS}=M(),{STATUS_CODES:uS}=require("node:http"),{types:{isPromise:ES}}=require("node:util");function Gt(t,e){return typeof t=="string"?t===e:t instanceof RegExp?t.test(e):typeof t=="function"?t(e)===!0:!1}function RI(t){return Object.fromEntries(Object.entries(t).map(([e,r])=>[e.toLocaleLowerCase(),r]))}function DI(t,e){if(Array.isArray(t)){for(let r=0;r"u")return!0;if(typeof e!="object"||typeof t.headers!="object")return!1;for(let[r,A]of Object.entries(t.headers)){let s=DI(e,r);if(!Gt(A,s))return!1}return!0}function yI(t){if(typeof t!="string")return t;let e=t.split("?");if(e.length!==2)return t;let r=new URLSearchParams(e.pop());return r.sort(),[...e,r.toString()].join("?")}function hS(t,{path:e,method:r,body:A,headers:s}){let o=Gt(t.path,e),n=Gt(t.method,r),i=typeof t.body<"u"?Gt(t.body,A):!0,a=TI(t,s);return o&&n&&i&&a}function bI(t){return Buffer.isBuffer(t)||t instanceof Uint8Array||t instanceof ArrayBuffer?t:typeof t=="object"?JSON.stringify(t):t.toString()}function kI(t,e){let r=e.query?lS(e.path,e.query):e.path,A=typeof r=="string"?yI(r):r,s=t.filter(({consumed:o})=>!o).filter(({path:o})=>Gt(yI(o),A));if(s.length===0)throw new Fr(`Mock dispatch not matched for path '${A}'`);if(s=s.filter(({method:o})=>Gt(o,e.method)),s.length===0)throw new Fr(`Mock dispatch not matched for method '${e.method}' on path '${A}'`);if(s=s.filter(({body:o})=>typeof o<"u"?Gt(o,e.body):!0),s.length===0)throw new Fr(`Mock dispatch not matched for body '${e.body}' on path '${A}'`);if(s=s.filter(o=>TI(o,e.headers)),s.length===0){let o=typeof e.headers=="object"?JSON.stringify(e.headers):e.headers;throw new Fr(`Mock dispatch not matched for headers '${o}' on path '${A}'`)}return s[0]}function QS(t,e,r){let A={timesInvoked:0,times:1,persist:!1,consumed:!1},s=typeof r=="function"?{callback:r}:{...r},o={...A,...e,pending:!0,data:{error:null,...s}};return t.push(o),o}function cg(t,e){let r=t.findIndex(A=>A.consumed?hS(A,e):!1);r!==-1&&t.splice(r,1)}function FI(t){let{path:e,method:r,body:A,headers:s,query:o}=t;return{path:e,method:r,body:A,headers:s,query:o}}function gg(t){let e=Object.keys(t),r=[];for(let A=0;A=u,A.pending=l0?setTimeout(()=>{E(this[un])},c):E(this[un]);function E(C,I=o){let Q=Array.isArray(t.headers)?lg(t.headers):t.headers,f=typeof I=="function"?I({...t,headers:Q}):I;if(ES(f)){f.then(Z=>E(C,Z));return}let R=bI(f),y=gg(n),P=gg(i);e.onConnect?.(Z=>e.onError(Z),null),e.onHeaders?.(s,y,h,SI(s)),e.onData?.(Buffer.from(R)),e.onComplete?.(P),cg(C,r)}function h(){}return!0}function IS(){let t=this[iS],e=this[cS],r=this[aS];return function(s,o){if(t.isMockActive)try{NI.call(this,s,o)}catch(n){if(n instanceof Fr){let i=t[gS]();if(i===!1)throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect disabled)`);if(UI(i,e))r.call(this,s,o);else throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect is not enabled for this origin)`)}else throw n}else r.call(this,s,o)}}function UI(t,e){let r=new URL(e);return t===!0?!0:!!(Array.isArray(t)&&t.some(A=>Gt(A,r.host)))}function CS(t){if(t){let{agent:e,...r}=t;return r}}GI.exports={getResponseData:bI,getMockDispatch:kI,addMockDispatch:QS,deleteMockDispatch:cg,buildKey:FI,generateKeyValues:gg,matchValue:Gt,getResponse:BS,getStatusText:SI,mockDispatch:NI,buildMockDispatch:IS,checkNetConnect:UI,buildMockOptions:CS,getHeaderByName:DI,buildHeadersFromArray:lg}});var Cg=B((EP,Ig)=>{"use strict";var{getResponseData:dS,buildKey:fS,addMockDispatch:ug}=ks(),{kDispatches:En,kDispatchKey:hn,kDefaultHeaders:Eg,kDefaultTrailers:hg,kContentLength:Qg,kMockDispatch:Qn}=TA(),{InvalidArgumentError:dt}=Y(),{buildURL:pS}=M(),bA=class{constructor(e){this[Qn]=e}delay(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("waitInMs must be a valid integer > 0");return this[Qn].delay=e,this}persist(){return this[Qn].persist=!0,this}times(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("repeatTimes must be a valid integer > 0");return this[Qn].times=e,this}},Bg=class{constructor(e,r){if(typeof e!="object")throw new dt("opts must be an object");if(typeof e.path>"u")throw new dt("opts.path must be defined");if(typeof e.method>"u"&&(e.method="GET"),typeof e.path=="string")if(e.query)e.path=pS(e.path,e.query);else{let A=new URL(e.path,"data://");e.path=A.pathname+A.search}typeof e.method=="string"&&(e.method=e.method.toUpperCase()),this[hn]=fS(e),this[En]=r,this[Eg]={},this[hg]={},this[Qg]=!1}createMockScopeDispatchData({statusCode:e,data:r,responseOptions:A}){let s=dS(r),o=this[Qg]?{"content-length":s.length}:{},n={...this[Eg],...o,...A.headers},i={...this[hg],...A.trailers};return{statusCode:e,data:r,headers:n,trailers:i}}validateReplyParameters(e){if(typeof e.statusCode>"u")throw new dt("statusCode must be defined");if(typeof e.responseOptions!="object"||e.responseOptions===null)throw new dt("responseOptions must be an object")}reply(e){if(typeof e=="function"){let o=i=>{let a=e(i);if(typeof a!="object"||a===null)throw new dt("reply options callback must return an object");let c={data:"",responseOptions:{},...a};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},n=ug(this[En],this[hn],o);return new bA(n)}let r={statusCode:e,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(r);let A=this.createMockScopeDispatchData(r),s=ug(this[En],this[hn],A);return new bA(s)}replyWithError(e){if(typeof e>"u")throw new dt("error must be defined");let r=ug(this[En],this[hn],{error:e});return new bA(r)}defaultReplyHeaders(e){if(typeof e>"u")throw new dt("headers must be defined");return this[Eg]=e,this}defaultReplyTrailers(e){if(typeof e>"u")throw new dt("trailers must be defined");return this[hg]=e,this}replyContentLength(){return this[Qg]=!0,this}};Ig.exports.MockInterceptor=Bg;Ig.exports.MockScope=bA});var pg=B((hP,_I)=>{"use strict";var{promisify:mS}=require("node:util"),wS=BA(),{buildMockDispatch:yS}=ks(),{kDispatches:LI,kMockAgent:MI,kClose:vI,kOriginalClose:xI,kOrigin:OI,kOriginalDispatch:RS,kConnected:dg}=TA(),{MockInterceptor:DS}=Cg(),YI=$(),{InvalidArgumentError:TS}=Y(),fg=class extends wS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new TS("Argument opts.agent must implement Agent");this[MI]=r.agent,this[OI]=e,this[LI]=[],this[dg]=1,this[RS]=this.dispatch,this[xI]=this.close.bind(this),this.dispatch=yS.call(this),this.close=this[vI]}get[YI.kConnected](){return this[dg]}intercept(e){return new DS(e,this[LI])}async[vI](){await mS(this[xI])(),this[dg]=0,this[MI][YI.kClients].delete(this[OI])}};_I.exports=fg});var yg=B((QP,zI)=>{"use strict";var{promisify:bS}=require("node:util"),kS=IA(),{buildMockDispatch:FS}=ks(),{kDispatches:JI,kMockAgent:PI,kClose:HI,kOriginalClose:VI,kOrigin:qI,kOriginalDispatch:SS,kConnected:mg}=TA(),{MockInterceptor:NS}=Cg(),WI=$(),{InvalidArgumentError:US}=Y(),wg=class extends kS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new US("Argument opts.agent must implement Agent");this[PI]=r.agent,this[qI]=e,this[JI]=[],this[mg]=1,this[SS]=this.dispatch,this[VI]=this.close.bind(this),this.dispatch=FS.call(this),this.close=this[HI]}get[WI.kConnected](){return this[mg]}intercept(e){return new NS(e,this[JI])}async[HI](){await bS(this[VI])(),this[mg]=0,this[PI][WI.kClients].delete(this[qI])}};zI.exports=wg});var jI=B((IP,ZI)=>{"use strict";var GS={pronoun:"it",is:"is",was:"was",this:"this"},LS={pronoun:"they",is:"are",was:"were",this:"these"};ZI.exports=class{constructor(e,r){this.singular=e,this.plural=r}pluralize(e){let r=e===1,A=r?GS:LS,s=r?this.singular:this.plural;return{...A,count:e,noun:s}}}});var XI=B((dP,KI)=>{"use strict";var{Transform:MS}=require("node:stream"),{Console:vS}=require("node:console"),xS=process.versions.icu?"\u2705":"Y ",OS=process.versions.icu?"\u274C":"N ";KI.exports=class{constructor({disableColors:e}={}){this.transform=new MS({transform(r,A,s){s(null,r)}}),this.logger=new vS({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let r=e.map(({method:A,path:s,data:{statusCode:o},persist:n,times:i,timesInvoked:a,origin:c})=>({Method:A,Origin:c,Path:s,"Status code":o,Persistent:n?xS:OS,Invocations:a,Remaining:n?1/0:i-a}));return this.logger.table(r),this.transform.read().toString()}}});var rC=B((fP,tC)=>{"use strict";var{kClients:Sr}=$(),YS=CA(),{kAgent:Rg,kMockAgentSet:Bn,kMockAgentGet:$I,kDispatches:Dg,kIsMockActive:In,kNetConnect:Nr,kGetNetConnect:_S,kOptions:Cn,kFactory:dn}=TA(),JS=pg(),PS=yg(),{matchValue:HS,buildMockOptions:VS}=ks(),{InvalidArgumentError:eC,UndiciError:qS}=Y(),WS=$A(),zS=jI(),ZS=XI(),Tg=class extends WS{constructor(e){if(super(e),this[Nr]=!0,this[In]=!0,e?.agent&&typeof e.agent.dispatch!="function")throw new eC("Argument opts.agent must implement Agent");let r=e?.agent?e.agent:new YS(e);this[Rg]=r,this[Sr]=r[Sr],this[Cn]=VS(e)}get(e){let r=this[$I](e);return r||(r=this[dn](e),this[Bn](e,r)),r}dispatch(e,r){return this.get(e.origin),this[Rg].dispatch(e,r)}async close(){await this[Rg].close(),this[Sr].clear()}deactivate(){this[In]=!1}activate(){this[In]=!0}enableNetConnect(e){if(typeof e=="string"||typeof e=="function"||e instanceof RegExp)Array.isArray(this[Nr])?this[Nr].push(e):this[Nr]=[e];else if(typeof e>"u")this[Nr]=!0;else throw new eC("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[Nr]=!1}get isMockActive(){return this[In]}[Bn](e,r){this[Sr].set(e,r)}[dn](e){let r=Object.assign({agent:this},this[Cn]);return this[Cn]&&this[Cn].connections===1?new JS(e,r):new PS(e,r)}[$I](e){let r=this[Sr].get(e);if(r)return r;if(typeof e!="string"){let A=this[dn]("http://localhost:9999");return this[Bn](e,A),A}for(let[A,s]of Array.from(this[Sr]))if(s&&typeof A!="string"&&HS(A,e)){let o=this[dn](e);return this[Bn](e,o),o[Dg]=s[Dg],o}}[_S](){return this[Nr]}pendingInterceptors(){let e=this[Sr];return Array.from(e.entries()).flatMap(([r,A])=>A[Dg].map(s=>({...s,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new ZS}={}){let r=this.pendingInterceptors();if(r.length===0)return;let A=new zS("interceptor","interceptors").pluralize(r.length);throw new qS(` ${A.count} ${A.noun} ${A.is} pending: ${e.format(r)} -`.trim())}};$I.exports=Dg});var fn=B((yP,sC)=>{"use strict";var tC=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:HS}=_(),VS=dA();AC()===void 0&&rC(new VS);function rC(t){if(!t||typeof t.dispatch!="function")throw new HS("Argument agent must implement Agent");Object.defineProperty(globalThis,tC,{value:t,writable:!0,enumerable:!1,configurable:!1})}function AC(){return globalThis[tC]}sC.exports={setGlobalDispatcher:rC,getGlobalDispatcher:AC}});var pn=B((DP,oC)=>{"use strict";oC.exports=class{#e;constructor(e){if(typeof e!="object"||e===null)throw new TypeError("handler must be an object");this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}});var iC=B((TP,nC)=>{"use strict";var qS=Xo();nC.exports=t=>{let e=t?.maxRedirections;return r=>function(s,o){let{maxRedirections:n=e,...i}=s;if(!n)return r(s,o);let a=new qS(r,n,s,o);return r(i,a)}}});var cC=B((bP,aC)=>{"use strict";var WS=gn();aC.exports=t=>e=>function(A,s){return e(A,new WS({...A,retryOptions:{...t,...A.retryOptions}},{handler:s,dispatch:e}))}});var lC=B((kP,gC)=>{"use strict";var zS=v(),{InvalidArgumentError:ZS,RequestAbortedError:jS}=_(),KS=pn(),Tg=class extends KS{#e=1024*1024;#t=null;#r=!1;#o=!1;#s=0;#A=null;#n=null;constructor({maxSize:e},r){if(super(r),e!=null&&(!Number.isFinite(e)||e<1))throw new ZS("maxSize must be a number greater than 0");this.#e=e??this.#e,this.#n=r}onConnect(e){this.#t=e,this.#n.onConnect(this.#i.bind(this))}#i(e){this.#o=!0,this.#A=e}onHeaders(e,r,A,s){let n=zS.parseHeaders(r)["content-length"];if(n!=null&&n>this.#e)throw new jS(`Response size (${n}) larger than maxSize (${this.#e})`);return this.#o?!0:this.#n.onHeaders(e,r,A,s)}onError(e){this.#r||(e=this.#A??e,this.#n.onError(e))}onData(e){return this.#s=this.#s+e.length,this.#s>=this.#e&&(this.#r=!0,this.#o?this.#n.onError(this.#A):this.#n.onComplete([])),!0}onComplete(e){if(!this.#r){if(this.#o){this.#n.onError(this.reason);return}this.#n.onComplete(e)}}};function XS({maxSize:t}={maxSize:1024*1024}){return e=>function(A,s){let{dumpMaxSize:o=t}=A,n=new Tg({maxSize:o},s);return e(A,n)}}gC.exports=XS});var hC=B((FP,EC)=>{"use strict";var{isIP:$S}=C("node:net"),{lookup:eN}=C("node:dns"),tN=pn(),{InvalidArgumentError:FA,InformationalError:rN}=_(),uC=Math.pow(2,31)-1,bg=class{#e=0;#t=0;#r=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#o,this.pick=e.pick??this.#s}get full(){return this.#r.size===this.#t}runLookup(e,r,A){let s=this.#r.get(e.hostname);if(s==null&&this.full){A(null,e.origin);return}let o={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...r.dns,maxTTL:this.#e,maxItems:this.#t};if(s==null)this.lookup(e,o,(n,i)=>{if(n||i==null||i.length===0){A(n??new rN("No DNS entries found"));return}this.setRecords(e,i);let a=this.#r.get(e.hostname),c=this.pick(e,a,o.affinity),g;typeof c.port=="number"?g=`:${c.port}`:e.port!==""?g=`:${e.port}`:g="",A(null,`${e.protocol}//${c.family===6?`[${c.address}]`:c.address}${g}`)});else{let n=this.pick(e,s,o.affinity);if(n==null){this.#r.delete(e.hostname),this.runLookup(e,r,A);return}let i;typeof n.port=="number"?i=`:${n.port}`:e.port!==""?i=`:${e.port}`:i="",A(null,`${e.protocol}//${n.family===6?`[${n.address}]`:n.address}${i}`)}}#o(e,r,A){eN(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(s,o)=>{if(s)return A(s);let n=new Map;for(let i of o)n.set(`${i.address}:${i.family}`,i);A(null,n.values())})}#s(e,r,A){let s=null,{records:o,offset:n}=r,i;if(this.dualStack?(A==null&&(n==null||n===uC?(r.offset=0,A=4):(r.offset++,A=(r.offset&1)===1?6:4)),o[A]!=null&&o[A].ips.length>0?i=o[A]:i=o[A===4?6:4]):i=o[A],i==null||i.ips.length===0)return s;i.offset==null||i.offset===uC?i.offset=0:i.offset++;let a=i.offset%i.ips.length;return s=i.ips[a]??null,s==null?s:Date.now()-s.timestamp>s.ttl?(i.ips.splice(a,1),this.pick(e,r,A)):s}setRecords(e,r){let A=Date.now(),s={records:{4:null,6:null}};for(let o of r){o.timestamp=A,typeof o.ttl=="number"?o.ttl=Math.min(o.ttl,this.#e):o.ttl=this.#e;let n=s.records[o.family]??{ips:[]};n.ips.push(o),s.records[o.family]=n}this.#r.set(e.hostname,s)}getHandler(e,r){return new kg(this,e,r)}},kg=class extends tN{#e=null;#t=null;#r=null;#o=null;#s=null;constructor(e,{origin:r,handler:A,dispatch:s},o){super(A),this.#s=r,this.#o=A,this.#t={...o},this.#e=e,this.#r=s}onError(e){switch(e.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#s,this.#t,(r,A)=>{if(r)return this.#o.onError(r);let s={...this.#t,origin:A};this.#r(s,this)});return}this.#o.onError(e);return}case"ENOTFOUND":this.#e.deleteRecord(this.#s);default:this.#o.onError(e);break}}};EC.exports=t=>{if(t?.maxTTL!=null&&(typeof t?.maxTTL!="number"||t?.maxTTL<0))throw new FA("Invalid maxTTL. Must be a positive number");if(t?.maxItems!=null&&(typeof t?.maxItems!="number"||t?.maxItems<1))throw new FA("Invalid maxItems. Must be a positive number and greater than zero");if(t?.affinity!=null&&t?.affinity!==4&&t?.affinity!==6)throw new FA("Invalid affinity. Must be either 4 or 6");if(t?.dualStack!=null&&typeof t?.dualStack!="boolean")throw new FA("Invalid dualStack. Must be a boolean");if(t?.lookup!=null&&typeof t?.lookup!="function")throw new FA("Invalid lookup. Must be a function");if(t?.pick!=null&&typeof t?.pick!="function")throw new FA("Invalid pick. Must be a function");let e=t?.dualStack??!0,r;e?r=t?.affinity??null:r=t?.affinity??4;let A={maxTTL:t?.maxTTL??1e4,lookup:t?.lookup??null,pick:t?.pick??null,dualStack:e,affinity:r,maxItems:t?.maxItems??1/0},s=new bg(A);return o=>function(i,a){let c=i.origin.constructor===URL?i.origin:new URL(i.origin);return $S(c.hostname)!==0?o(i,a):(s.runLookup(c,i,(g,l)=>{if(g)return a.onError(g);let u=null;u={...i,servername:c.hostname,origin:l,headers:{host:c.hostname,...i.headers}},o(u,s.getHandler({origin:c,dispatch:o,handler:a},i))}),!0)}}});var Gr=B((SP,pC)=>{"use strict";var{kConstruct:AN}=$(),{kEnumerableProperty:SA}=v(),{iteratorMixin:sN,isValidHeaderName:Ss,isValidHeaderValue:BC}=Ge(),{webidl:Y}=Qe(),Fg=C("node:assert"),mn=C("node:util"),ge=Symbol("headers map"),xe=Symbol("headers map sorted");function QC(t){return t===10||t===13||t===9||t===32}function IC(t){let e=0,r=t.length;for(;r>e&&QC(t.charCodeAt(r-1));)--r;for(;r>e&&QC(t.charCodeAt(e));)++e;return e===0&&r===t.length?t:t.substring(e,r)}function CC(t,e){if(Array.isArray(e))for(let r=0;r>","record"]})}function Sg(t,e,r){if(r=IC(r),Ss(e)){if(!BC(r))throw Y.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw Y.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"});if(fC(t)==="immutable")throw new TypeError("immutable");return Ng(t).append(e,r,!1)}function dC(t,e){return t[0]>1),r[c][0]<=g[0]?a=c+1:i=c;if(o!==c){for(n=o;n>a;)r[n]=r[--n];r[a]=g}}if(!A.next().done)throw new TypeError("Unreachable");return r}else{let A=0;for(let{0:s,1:{value:o}}of this[ge])r[A++]=[s,o],Fg(o!==null);return r.sort(dC)}}},it=class t{#e;#t;constructor(e=void 0){Y.util.markAsUncloneable(this),e!==AN&&(this.#t=new wn,this.#e="none",e!==void 0&&(e=Y.converters.HeadersInit(e,"Headers contructor","init"),CC(this,e)))}append(e,r){Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,2,"Headers.append");let A="Headers.append";return e=Y.converters.ByteString(e,A,"name"),r=Y.converters.ByteString(r,A,"value"),Sg(this,e,r)}delete(e){if(Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,1,"Headers.delete"),e=Y.converters.ByteString(e,"Headers.delete","name"),!Ss(e))throw Y.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(e,!1)&&this.#t.delete(e,!1)}get(e){Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(e=Y.converters.ByteString(e,r,"name"),!Ss(e))throw Y.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.get(e,!1)}has(e){Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(e=Y.converters.ByteString(e,r,"name"),!Ss(e))throw Y.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.contains(e,!1)}set(e,r){Y.brandCheck(this,t),Y.argumentLengthCheck(arguments,2,"Headers.set");let A="Headers.set";if(e=Y.converters.ByteString(e,A,"name"),r=Y.converters.ByteString(r,A,"value"),r=IC(r),Ss(e)){if(!BC(r))throw Y.errors.invalidArgument({prefix:A,value:r,type:"header value"})}else throw Y.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(e,r,!1)}getSetCookie(){Y.brandCheck(this,t);let e=this.#t.cookies;return e?[...e]:[]}get[xe](){if(this.#t[xe])return this.#t[xe];let e=[],r=this.#t.toSortedArray(),A=this.#t.cookies;if(A===null||A.length===1)return this.#t[xe]=r;for(let s=0;s>"](t,e,r,A.bind(t)):Y.converters["record"](t,e,r)}throw Y.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};pC.exports={fill:CC,compareHeaderName:dC,Headers:it,HeadersList:wn,getHeadersGuard:fC,setHeadersGuard:oN,setHeadersList:nN,getHeadersList:Ng}});var Us=B((NP,UC)=>{"use strict";var{Headers:TC,HeadersList:mC,fill:iN,getHeadersGuard:aN,setHeadersGuard:bC,setHeadersList:kC}=Gr(),{extractBody:wC,cloneBody:cN,mixinBody:gN,hasFinalizationRegistry:FC,streamRegistry:SC,bodyUnusable:lN}=gA(),Ug=v(),yC=C("node:util"),{kEnumerableProperty:Oe}=Ug,{isValidReasonPhrase:uN,isCancelled:EN,isAborted:hN,isBlobLike:QN,serializeJavascriptValueToJSONString:BN,isErrorLike:IN,isomorphicEncode:CN,environmentSettingsObject:dN}=Ge(),{redirectStatusSet:fN,nullBodyStatus:pN}=As(),{kState:te,kHeaders:Lt}=Pt(),{webidl:M}=Qe(),{FormData:mN}=cs(),{URLSerializer:RC}=Te(),{kConstruct:Rn}=$(),Gg=C("node:assert"),{types:wN}=C("node:util"),yN=new TextEncoder("utf-8"),Lr=class t{static error(){return Ns(Dn(),"immutable")}static json(e,r={}){M.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=M.converters.ResponseInit(r));let A=yN.encode(BN(e)),s=wC(A),o=Ns(NA({}),"response");return DC(o,r,{body:s[0],type:"application/json"}),o}static redirect(e,r=302){M.argumentLengthCheck(arguments,1,"Response.redirect"),e=M.converters.USVString(e),r=M.converters["unsigned short"](r);let A;try{A=new URL(e,dN.settingsObject.baseUrl)}catch(n){throw new TypeError(`Failed to parse URL from ${e}`,{cause:n})}if(!fN.has(r))throw new RangeError(`Invalid status code ${r}`);let s=Ns(NA({}),"immutable");s[te].status=r;let o=CN(RC(A));return s[te].headersList.append("location",o,!0),s}constructor(e=null,r={}){if(M.util.markAsUncloneable(this),e===Rn)return;e!==null&&(e=M.converters.BodyInit(e)),r=M.converters.ResponseInit(r),this[te]=NA({}),this[Lt]=new TC(Rn),bC(this[Lt],"response"),kC(this[Lt],this[te].headersList);let A=null;if(e!=null){let[s,o]=wC(e);A={body:s,type:o}}DC(this,r,A)}get type(){return M.brandCheck(this,t),this[te].type}get url(){M.brandCheck(this,t);let e=this[te].urlList,r=e[e.length-1]??null;return r===null?"":RC(r,!0)}get redirected(){return M.brandCheck(this,t),this[te].urlList.length>1}get status(){return M.brandCheck(this,t),this[te].status}get ok(){return M.brandCheck(this,t),this[te].status>=200&&this[te].status<=299}get statusText(){return M.brandCheck(this,t),this[te].statusText}get headers(){return M.brandCheck(this,t),this[Lt]}get body(){return M.brandCheck(this,t),this[te].body?this[te].body.stream:null}get bodyUsed(){return M.brandCheck(this,t),!!this[te].body&&Ug.isDisturbed(this[te].body.stream)}clone(){if(M.brandCheck(this,t),lN(this))throw M.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let e=Lg(this[te]);return FC&&this[te].body?.stream&&SC.register(this,new WeakRef(this[te].body.stream)),Ns(e,aN(this[Lt]))}[yC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${yC.formatWithOptions(r,A)}`}};gN(Lr);Object.defineProperties(Lr.prototype,{type:Oe,url:Oe,status:Oe,ok:Oe,redirected:Oe,statusText:Oe,headers:Oe,clone:Oe,body:Oe,bodyUsed:Oe,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Lr,{json:Oe,redirect:Oe,error:Oe});function Lg(t){if(t.internalResponse)return NC(Lg(t.internalResponse),t.type);let e=NA({...t,body:null});return t.body!=null&&(e.body=cN(e,t.body)),e}function NA(t){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...t,headersList:t?.headersList?new mC(t?.headersList):new mC,urlList:t?.urlList?[...t.urlList]:[]}}function Dn(t){let e=IN(t);return NA({type:"error",status:0,error:e?t:new Error(t&&String(t)),aborted:t&&t.name==="AbortError"})}function RN(t){return t.type==="error"&&t.status===0}function yn(t,e){return e={internalResponse:t,...e},new Proxy(t,{get(r,A){return A in e?e[A]:r[A]},set(r,A,s){return Gg(!(A in e)),r[A]=s,!0}})}function NC(t,e){if(e==="basic")return yn(t,{type:"basic",headersList:t.headersList});if(e==="cors")return yn(t,{type:"cors",headersList:t.headersList});if(e==="opaque")return yn(t,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(e==="opaqueredirect")return yn(t,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});Gg(!1)}function DN(t,e=null){return Gg(EN(t)),hN(t)?Dn(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:e})):Dn(Object.assign(new DOMException("Request was cancelled."),{cause:e}))}function DC(t,e,r){if(e.status!==null&&(e.status<200||e.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in e&&e.statusText!=null&&!uN(String(e.statusText)))throw new TypeError("Invalid statusText");if("status"in e&&e.status!=null&&(t[te].status=e.status),"statusText"in e&&e.statusText!=null&&(t[te].statusText=e.statusText),"headers"in e&&e.headers!=null&&iN(t[Lt],e.headers),r){if(pN.includes(t.status))throw M.errors.exception({header:"Response constructor",message:`Invalid response status code ${t.status}`});t[te].body=r.body,r.type!=null&&!t[te].headersList.contains("content-type",!0)&&t[te].headersList.append("content-type",r.type,!0)}}function Ns(t,e){let r=new Lr(Rn);return r[te]=t,r[Lt]=new TC(Rn),kC(r[Lt],t.headersList),bC(r[Lt],e),FC&&t.body?.stream&&SC.register(r,new WeakRef(t.body.stream)),r}M.converters.ReadableStream=M.interfaceConverter(ReadableStream);M.converters.FormData=M.interfaceConverter(mN);M.converters.URLSearchParams=M.interfaceConverter(URLSearchParams);M.converters.XMLHttpRequestBodyInit=function(t,e,r){return typeof t=="string"?M.converters.USVString(t,e,r):QN(t)?M.converters.Blob(t,e,r,{strict:!1}):ArrayBuffer.isView(t)||wN.isArrayBuffer(t)?M.converters.BufferSource(t,e,r):Ug.isFormDataLike(t)?M.converters.FormData(t,e,r,{strict:!1}):t instanceof URLSearchParams?M.converters.URLSearchParams(t,e,r):M.converters.DOMString(t,e,r)};M.converters.BodyInit=function(t,e,r){return t instanceof ReadableStream?M.converters.ReadableStream(t,e,r):t?.[Symbol.asyncIterator]?t:M.converters.XMLHttpRequestBodyInit(t,e,r)};M.converters.ResponseInit=M.dictionaryConverter([{key:"status",converter:M.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:M.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:M.converters.HeadersInit}]);UC.exports={isNetworkError:RN,makeNetworkError:Dn,makeResponse:NA,makeAppropriateNetworkError:DN,filterResponse:NC,Response:Lr,cloneResponse:Lg,fromInnerResponse:Ns}});var vC=B((UP,MC)=>{"use strict";var{kConnected:GC,kSize:LC}=$(),Mg=class{constructor(e){this.value=e}deref(){return this.value[GC]===0&&this.value[LC]===0?void 0:this.value}},vg=class{constructor(e){this.finalizer=e}register(e,r){e.on&&e.on("disconnect",()=>{e[GC]===0&&e[LC]===0&&this.finalizer(r)})}unregister(e){}};MC.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:Mg,FinalizationRegistry:vg}):{WeakRef,FinalizationRegistry}}});var UA=B((GP,XC)=>{"use strict";var{extractBody:TN,mixinBody:bN,cloneBody:kN,bodyUnusable:xC}=gA(),{Headers:WC,fill:FN,HeadersList:Fn,setHeadersGuard:Og,getHeadersGuard:SN,setHeadersList:zC,getHeadersList:OC}=Gr(),{FinalizationRegistry:NN}=vC()(),bn=v(),YC=C("node:util"),{isValidHTTPToken:UN,sameOrigin:_C,environmentSettingsObject:Tn}=Ge(),{forbiddenMethodsSet:GN,corsSafeListedMethodsSet:LN,referrerPolicy:MN,requestRedirect:vN,requestMode:xN,requestCredentials:ON,requestCache:YN,requestDuplex:_N}=As(),{kEnumerableProperty:le,normalizedMethodRecordsBase:JN,normalizedMethodRecords:PN}=bn,{kHeaders:Ye,kSignal:kn,kState:K,kDispatcher:xg}=Pt(),{webidl:N}=Qe(),{URLSerializer:HN}=Te(),{kConstruct:Sn}=$(),VN=C("node:assert"),{getMaxListeners:JC,setMaxListeners:PC,getEventListeners:qN,defaultMaxListeners:HC}=C("node:events"),WN=Symbol("abortController"),ZC=new NN(({signal:t,abort:e})=>{t.removeEventListener("abort",e)}),Nn=new WeakMap;function VC(t){return e;function e(){let r=t.deref();if(r!==void 0){ZC.unregister(e),this.removeEventListener("abort",e),r.abort(this.reason);let A=Nn.get(r.signal);if(A!==void 0){if(A.size!==0){for(let s of A){let o=s.deref();o!==void 0&&o.abort(this.reason)}A.clear()}Nn.delete(r.signal)}}}}var qC=!1,er=class t{constructor(e,r={}){if(N.util.markAsUncloneable(this),e===Sn)return;let A="Request constructor";N.argumentLengthCheck(arguments,1,A),e=N.converters.RequestInfo(e,A,"input"),r=N.converters.RequestInit(r,A,"init");let s=null,o=null,n=Tn.settingsObject.baseUrl,i=null;if(typeof e=="string"){this[xg]=r.dispatcher;let Q;try{Q=new URL(e,n)}catch(p){throw new TypeError("Failed to parse URL from "+e,{cause:p})}if(Q.username||Q.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);s=Un({urlList:[Q]}),o="cors"}else this[xg]=r.dispatcher||e[xg],VN(e instanceof t),s=e[K],i=e[kn];let a=Tn.settingsObject.origin,c="client";if(s.window?.constructor?.name==="EnvironmentSettingsObject"&&_C(s.window,a)&&(c=s.window),r.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in r&&(c="no-window"),s=Un({method:s.method,headersList:s.headersList,unsafeRequest:s.unsafeRequest,client:Tn.settingsObject,window:c,priority:s.priority,origin:s.origin,referrer:s.referrer,referrerPolicy:s.referrerPolicy,mode:s.mode,credentials:s.credentials,cache:s.cache,redirect:s.redirect,integrity:s.integrity,keepalive:s.keepalive,reloadNavigation:s.reloadNavigation,historyNavigation:s.historyNavigation,urlList:[...s.urlList]});let g=Object.keys(r).length!==0;if(g&&(s.mode==="navigate"&&(s.mode="same-origin"),s.reloadNavigation=!1,s.historyNavigation=!1,s.origin="client",s.referrer="client",s.referrerPolicy="",s.url=s.urlList[s.urlList.length-1],s.urlList=[s.url]),r.referrer!==void 0){let Q=r.referrer;if(Q==="")s.referrer="no-referrer";else{let p;try{p=new URL(Q,n)}catch(D){throw new TypeError(`Referrer "${Q}" is not a valid URL.`,{cause:D})}p.protocol==="about:"&&p.hostname==="client"||a&&!_C(p,Tn.settingsObject.baseUrl)?s.referrer="client":s.referrer=p}}r.referrerPolicy!==void 0&&(s.referrerPolicy=r.referrerPolicy);let l;if(r.mode!==void 0?l=r.mode:l=o,l==="navigate")throw N.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(l!=null&&(s.mode=l),r.credentials!==void 0&&(s.credentials=r.credentials),r.cache!==void 0&&(s.cache=r.cache),s.cache==="only-if-cached"&&s.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(r.redirect!==void 0&&(s.redirect=r.redirect),r.integrity!=null&&(s.integrity=String(r.integrity)),r.keepalive!==void 0&&(s.keepalive=!!r.keepalive),r.method!==void 0){let Q=r.method,p=PN[Q];if(p!==void 0)s.method=p;else{if(!UN(Q))throw new TypeError(`'${Q}' is not a valid HTTP method.`);let D=Q.toUpperCase();if(GN.has(D))throw new TypeError(`'${Q}' HTTP method is unsupported.`);Q=JN[D]??Q,s.method=Q}!qC&&s.method==="patch"&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),qC=!0)}r.signal!==void 0&&(i=r.signal),this[K]=s;let u=new AbortController;if(this[kn]=u.signal,i!=null){if(!i||typeof i.aborted!="boolean"||typeof i.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(i.aborted)u.abort(i.reason);else{this[WN]=u;let Q=new WeakRef(u),p=VC(Q);try{(typeof JC=="function"&&JC(i)===HC||qN(i,"abort").length>=HC)&&PC(1500,i)}catch{}bn.addAbortListener(i,p),ZC.register(u,{signal:i,abort:p},p)}}if(this[Ye]=new WC(Sn),zC(this[Ye],s.headersList),Og(this[Ye],"request"),l==="no-cors"){if(!LN.has(s.method))throw new TypeError(`'${s.method} is unsupported in no-cors mode.`);Og(this[Ye],"request-no-cors")}if(g){let Q=OC(this[Ye]),p=r.headers!==void 0?r.headers:new Fn(Q);if(Q.clear(),p instanceof Fn){for(let{name:D,value:R}of p.rawValues())Q.append(D,R,!1);Q.cookies=p.cookies}else FN(this[Ye],p)}let E=e instanceof t?e[K].body:null;if((r.body!=null||E!=null)&&(s.method==="GET"||s.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let h=null;if(r.body!=null){let[Q,p]=TN(r.body,s.keepalive);h=Q,p&&!OC(this[Ye]).contains("content-type",!0)&&this[Ye].append("content-type",p)}let d=h??E;if(d!=null&&d.source==null){if(h!=null&&r.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(s.mode!=="same-origin"&&s.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');s.useCORSPreflightFlag=!0}let I=d;if(h==null&&E!=null){if(xC(e))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let Q=new TransformStream;E.stream.pipeThrough(Q),I={source:E.source,length:E.length,stream:Q.readable}}this[K].body=I}get method(){return N.brandCheck(this,t),this[K].method}get url(){return N.brandCheck(this,t),HN(this[K].url)}get headers(){return N.brandCheck(this,t),this[Ye]}get destination(){return N.brandCheck(this,t),this[K].destination}get referrer(){return N.brandCheck(this,t),this[K].referrer==="no-referrer"?"":this[K].referrer==="client"?"about:client":this[K].referrer.toString()}get referrerPolicy(){return N.brandCheck(this,t),this[K].referrerPolicy}get mode(){return N.brandCheck(this,t),this[K].mode}get credentials(){return this[K].credentials}get cache(){return N.brandCheck(this,t),this[K].cache}get redirect(){return N.brandCheck(this,t),this[K].redirect}get integrity(){return N.brandCheck(this,t),this[K].integrity}get keepalive(){return N.brandCheck(this,t),this[K].keepalive}get isReloadNavigation(){return N.brandCheck(this,t),this[K].reloadNavigation}get isHistoryNavigation(){return N.brandCheck(this,t),this[K].historyNavigation}get signal(){return N.brandCheck(this,t),this[kn]}get body(){return N.brandCheck(this,t),this[K].body?this[K].body.stream:null}get bodyUsed(){return N.brandCheck(this,t),!!this[K].body&&bn.isDisturbed(this[K].body.stream)}get duplex(){return N.brandCheck(this,t),"half"}clone(){if(N.brandCheck(this,t),xC(this))throw new TypeError("unusable");let e=jC(this[K]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let A=Nn.get(this.signal);A===void 0&&(A=new Set,Nn.set(this.signal,A));let s=new WeakRef(r);A.add(s),bn.addAbortListener(r.signal,VC(s))}return KC(e,r.signal,SN(this[Ye]))}[YC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${YC.formatWithOptions(r,A)}`}};bN(er);function Un(t){return{method:t.method??"GET",localURLsOnly:t.localURLsOnly??!1,unsafeRequest:t.unsafeRequest??!1,body:t.body??null,client:t.client??null,reservedClient:t.reservedClient??null,replacesClientId:t.replacesClientId??"",window:t.window??"client",keepalive:t.keepalive??!1,serviceWorkers:t.serviceWorkers??"all",initiator:t.initiator??"",destination:t.destination??"",priority:t.priority??null,origin:t.origin??"client",policyContainer:t.policyContainer??"client",referrer:t.referrer??"client",referrerPolicy:t.referrerPolicy??"",mode:t.mode??"no-cors",useCORSPreflightFlag:t.useCORSPreflightFlag??!1,credentials:t.credentials??"same-origin",useCredentials:t.useCredentials??!1,cache:t.cache??"default",redirect:t.redirect??"follow",integrity:t.integrity??"",cryptoGraphicsNonceMetadata:t.cryptoGraphicsNonceMetadata??"",parserMetadata:t.parserMetadata??"",reloadNavigation:t.reloadNavigation??!1,historyNavigation:t.historyNavigation??!1,userActivation:t.userActivation??!1,taintedOrigin:t.taintedOrigin??!1,redirectCount:t.redirectCount??0,responseTainting:t.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:t.preventNoCacheCacheControlHeaderModification??!1,done:t.done??!1,timingAllowFailed:t.timingAllowFailed??!1,urlList:t.urlList,url:t.urlList[0],headersList:t.headersList?new Fn(t.headersList):new Fn}}function jC(t){let e=Un({...t,body:null});return t.body!=null&&(e.body=kN(e,t.body)),e}function KC(t,e,r){let A=new er(Sn);return A[K]=t,A[kn]=e,A[Ye]=new WC(Sn),zC(A[Ye],t.headersList),Og(A[Ye],r),A}Object.defineProperties(er.prototype,{method:le,url:le,headers:le,redirect:le,clone:le,signal:le,duplex:le,destination:le,body:le,bodyUsed:le,isHistoryNavigation:le,isReloadNavigation:le,keepalive:le,integrity:le,cache:le,credentials:le,attribute:le,referrerPolicy:le,referrer:le,mode:le,[Symbol.toStringTag]:{value:"Request",configurable:!0}});N.converters.Request=N.interfaceConverter(er);N.converters.RequestInfo=function(t,e,r){return typeof t=="string"?N.converters.USVString(t,e,r):t instanceof er?N.converters.Request(t,e,r):N.converters.USVString(t,e,r)};N.converters.AbortSignal=N.interfaceConverter(AbortSignal);N.converters.RequestInit=N.dictionaryConverter([{key:"method",converter:N.converters.ByteString},{key:"headers",converter:N.converters.HeadersInit},{key:"body",converter:N.nullableConverter(N.converters.BodyInit)},{key:"referrer",converter:N.converters.USVString},{key:"referrerPolicy",converter:N.converters.DOMString,allowedValues:MN},{key:"mode",converter:N.converters.DOMString,allowedValues:xN},{key:"credentials",converter:N.converters.DOMString,allowedValues:ON},{key:"cache",converter:N.converters.DOMString,allowedValues:YN},{key:"redirect",converter:N.converters.DOMString,allowedValues:vN},{key:"integrity",converter:N.converters.DOMString},{key:"keepalive",converter:N.converters.boolean},{key:"signal",converter:N.nullableConverter(t=>N.converters.AbortSignal(t,"RequestInit","signal",{strict:!1}))},{key:"window",converter:N.converters.any},{key:"duplex",converter:N.converters.DOMString,allowedValues:_N},{key:"dispatcher",converter:N.converters.any}]);XC.exports={Request:er,makeRequest:Un,fromInnerRequest:KC,cloneRequest:jC}});var Ls=B((LP,Ed)=>{"use strict";var{makeNetworkError:V,makeAppropriateNetworkError:Gn,filterResponse:Yg,makeResponse:Ln,fromInnerResponse:zN}=Us(),{HeadersList:$C}=Gr(),{Request:ZN,cloneRequest:jN}=UA(),tr=C("node:zlib"),{bytesMatch:KN,makePolicyContainer:XN,clonePolicyContainer:$N,requestBadPort:eU,TAOCheck:tU,appendRequestOriginHeader:rU,responseLocationURL:AU,requestCurrentURL:ft,setRequestReferrerPolicyOnRedirect:sU,tryUpgradeRequestToAPotentiallyTrustworthyURL:oU,createOpaqueTimingInfo:Vg,appendFetchMetadata:nU,corsCheck:iU,crossOriginResourcePolicyCheck:aU,determineRequestsReferrer:cU,coarsenedSharedCurrentTime:Gs,createDeferredPromise:gU,isBlobLike:lU,sameOrigin:Hg,isCancelled:Mr,isAborted:ed,isErrorLike:uU,fullyReadBody:EU,readableStreamClose:hU,isomorphicEncode:Mn,urlIsLocal:QU,urlIsHttpHttpsScheme:qg,urlHasHttpsScheme:BU,clampAndCoarsenConnectionTimingInfo:IU,simpleRangeHeaderValue:CU,buildContentRange:dU,createInflate:fU,extractMimeType:pU}=Ge(),{kState:sd,kDispatcher:mU}=Pt(),vr=C("node:assert"),{safelyExtractBody:Wg,extractBody:td}=gA(),{redirectStatusSet:od,nullBodyStatus:nd,safeMethodsSet:wU,requestBodyHeader:yU,subresourceSet:RU}=As(),DU=C("node:events"),{Readable:TU,pipeline:bU,finished:kU}=C("node:stream"),{addAbortListener:FU,isErrored:SU,isReadable:vn,bufferToLowerCasedHeaderName:rd}=v(),{dataURLProcessor:NU,serializeAMimeType:UU,minimizeSupportedMimeType:GU}=Te(),{getGlobalDispatcher:LU}=fn(),{webidl:MU}=Qe(),{STATUS_CODES:vU}=C("node:http"),xU=["GET","HEAD"],OU=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",_g,xn=class extends DU{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){this.state==="ongoing"&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}};function YU(t){id(t,"fetch")}function _U(t,e=void 0){MU.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=gU(),A;try{A=new ZN(t,e)}catch(g){return r.reject(g),r.promise}let s=A[sd];if(A.signal.aborted)return Jg(r,s,null,A.signal.reason),r.promise;s.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(s.serviceWorkers="none");let n=null,i=!1,a=null;return FU(A.signal,()=>{i=!0,vr(a!=null),a.abort(A.signal.reason);let g=n?.deref();Jg(r,s,g,A.signal.reason)}),a=cd({request:s,processResponseEndOfBody:YU,processResponse:g=>{if(!i){if(g.aborted){Jg(r,s,n,a.serializedAbortReason);return}if(g.type==="error"){r.reject(new TypeError("fetch failed",{cause:g.error}));return}n=new WeakRef(zN(g,"immutable")),r.resolve(n.deref()),r=null}},dispatcher:A[mU]}),r.promise}function id(t,e="other"){if(t.type==="error"&&t.aborted||!t.urlList?.length)return;let r=t.urlList[0],A=t.timingInfo,s=t.cacheState;qg(r)&&A!==null&&(t.timingAllowPassed||(A=Vg({startTime:A.startTime}),s=""),A.endTime=Gs(),t.timingInfo=A,ad(A,r.href,e,globalThis,s))}var ad=performance.markResourceTiming;function Jg(t,e,r,A){if(t&&t.reject(A),e.body!=null&&vn(e.body?.stream)&&e.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o}),r==null)return;let s=r[sd];s.body!=null&&vn(s.body?.stream)&&s.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o})}function cd({request:t,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseEndOfBody:s,processResponseConsumeBody:o,useParallelQueue:n=!1,dispatcher:i=LU()}){vr(i);let a=null,c=!1;t.client!=null&&(a=t.client.globalObject,c=t.client.crossOriginIsolatedCapability);let g=Gs(c),l=Vg({startTime:g}),u={controller:new xn(i),request:t,timingInfo:l,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseConsumeBody:o,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};return vr(!t.body||t.body.stream),t.window==="client"&&(t.window=t.client?.globalObject?.constructor?.name==="Window"?t.client:"no-window"),t.origin==="client"&&(t.origin=t.client.origin),t.policyContainer==="client"&&(t.client!=null?t.policyContainer=$N(t.client.policyContainer):t.policyContainer=XN()),t.headersList.contains("accept",!0)||t.headersList.append("accept","*/*",!0),t.headersList.contains("accept-language",!0)||t.headersList.append("accept-language","*",!0),t.priority,RU.has(t.destination),gd(u).catch(E=>{u.controller.terminate(E)}),u.controller}async function gd(t,e=!1){let r=t.request,A=null;if(r.localURLsOnly&&!QU(ft(r))&&(A=V("local URLs only")),oU(r),eU(r)==="blocked"&&(A=V("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=cU(r)),A===null&&(A=await(async()=>{let o=ft(r);return Hg(o,r.url)&&r.responseTainting==="basic"||o.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await Ad(t)):r.mode==="same-origin"?V('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?V('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await Ad(t)):qg(ft(r))?(r.responseTainting="cors",await ld(t)):V("URL scheme must be a HTTP(S) scheme")})()),e)return A;A.status!==0&&!A.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?A=Yg(A,"basic"):r.responseTainting==="cors"?A=Yg(A,"cors"):r.responseTainting==="opaque"?A=Yg(A,"opaque"):vr(!1));let s=A.status===0?A:A.internalResponse;if(s.urlList.length===0&&s.urlList.push(...r.urlList),r.timingAllowFailed||(A.timingAllowPassed=!0),A.type==="opaque"&&s.status===206&&s.rangeRequested&&!r.headers.contains("range",!0)&&(A=s=V()),A.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||nd.includes(s.status))&&(s.body=null,t.controller.dump=!0),r.integrity){let o=i=>Pg(t,V(i));if(r.responseTainting==="opaque"||A.body==null){o(A.error);return}let n=i=>{if(!KN(i,r.integrity)){o("integrity mismatch");return}A.body=Wg(i)[0],Pg(t,A)};await EU(A.body,n,o)}else Pg(t,A)}function Ad(t){if(Mr(t)&&t.request.redirectCount===0)return Promise.resolve(Gn(t));let{request:e}=t,{protocol:r}=ft(e);switch(r){case"about:":return Promise.resolve(V("about scheme is not supported"));case"blob:":{_g||(_g=C("node:buffer").resolveObjectURL);let A=ft(e);if(A.search.length!==0)return Promise.resolve(V("NetworkError when attempting to fetch resource."));let s=_g(A.toString());if(e.method!=="GET"||!lU(s))return Promise.resolve(V("invalid method"));let o=Ln(),n=s.size,i=Mn(`${n}`),a=s.type;if(e.headersList.contains("range",!0)){o.rangeRequested=!0;let c=e.headersList.get("range",!0),g=CU(c,!0);if(g==="failure")return Promise.resolve(V("failed to fetch the data URL"));let{rangeStartValue:l,rangeEndValue:u}=g;if(l===null)l=n-u,u=l+u-1;else{if(l>=n)return Promise.resolve(V("Range start is greater than the blob's size."));(u===null||u>=n)&&(u=n-1)}let E=s.slice(l,u,a),h=td(E);o.body=h[0];let d=Mn(`${E.size}`),I=dU(l,u,n);o.status=206,o.statusText="Partial Content",o.headersList.set("content-length",d,!0),o.headersList.set("content-type",a,!0),o.headersList.set("content-range",I,!0)}else{let c=td(s);o.statusText="OK",o.body=c[0],o.headersList.set("content-length",i,!0),o.headersList.set("content-type",a,!0)}return Promise.resolve(o)}case"data:":{let A=ft(e),s=NU(A);if(s==="failure")return Promise.resolve(V("failed to fetch the data URL"));let o=UU(s.mimeType);return Promise.resolve(Ln({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:o}]],body:Wg(s.body)[0]}))}case"file:":return Promise.resolve(V("not implemented... yet..."));case"http:":case"https:":return ld(t).catch(A=>V(A));default:return Promise.resolve(V("unknown scheme"))}}function JU(t,e){t.request.done=!0,t.processResponseDone!=null&&queueMicrotask(()=>t.processResponseDone(e))}function Pg(t,e){let r=t.timingInfo,A=()=>{let o=Date.now();t.request.destination==="document"&&(t.controller.fullTimingInfo=r),t.controller.reportTimingSteps=()=>{if(t.request.url.protocol!=="https:")return;r.endTime=o;let i=e.cacheState,a=e.bodyInfo;e.timingAllowPassed||(r=Vg(r),i="");let c=0;if(t.request.mode!=="navigator"||!e.hasCrossOriginRedirects){c=e.status;let g=pU(e.headersList);g!=="failure"&&(a.contentType=GU(g))}t.request.initiatorType!=null&&ad(r,t.request.url.href,t.request.initiatorType,globalThis,i,a,c)};let n=()=>{t.request.done=!0,t.processResponseEndOfBody!=null&&queueMicrotask(()=>t.processResponseEndOfBody(e)),t.request.initiatorType!=null&&t.controller.reportTimingSteps()};queueMicrotask(()=>n())};t.processResponse!=null&&queueMicrotask(()=>{t.processResponse(e),t.processResponse=null});let s=e.type==="error"?e:e.internalResponse??e;s.body==null?A():kU(s.body.stream,()=>{A()})}async function ld(t){let e=t.request,r=null,A=null,s=t.timingInfo;if(e.serviceWorkers,r===null){if(e.redirect==="follow"&&(e.serviceWorkers="none"),A=r=await ud(t),e.responseTainting==="cors"&&iU(e,r)==="failure")return V("cors failure");tU(e,r)==="failure"&&(e.timingAllowFailed=!0)}return(e.responseTainting==="opaque"||r.type==="opaque")&&aU(e.origin,e.client,e.destination,A)==="blocked"?V("blocked"):(od.has(A.status)&&(e.redirect!=="manual"&&t.controller.connection.destroy(void 0,!1),e.redirect==="error"?r=V("unexpected redirect"):e.redirect==="manual"?r=A:e.redirect==="follow"?r=await PU(t,r):vr(!1)),r.timingInfo=s,r)}function PU(t,e){let r=t.request,A=e.internalResponse?e.internalResponse:e,s;try{if(s=AU(A,ft(r).hash),s==null)return e}catch(n){return Promise.resolve(V(n))}if(!qg(s))return Promise.resolve(V("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(V("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(s.username||s.password)&&!Hg(r,s))return Promise.resolve(V('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(s.username||s.password))return Promise.resolve(V('URL cannot contain credentials for request mode "cors"'));if(A.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(V());if([301,302].includes(A.status)&&r.method==="POST"||A.status===303&&!xU.includes(r.method)){r.method="GET",r.body=null;for(let n of yU)r.headersList.delete(n)}Hg(ft(r),s)||(r.headersList.delete("authorization",!0),r.headersList.delete("proxy-authorization",!0),r.headersList.delete("cookie",!0),r.headersList.delete("host",!0)),r.body!=null&&(vr(r.body.source!=null),r.body=Wg(r.body.source)[0]);let o=t.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=Gs(t.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(s),sU(r,A),gd(t,!0)}async function ud(t,e=!1,r=!1){let A=t.request,s=null,o=null,n=null,i=null,a=!1;A.window==="no-window"&&A.redirect==="error"?(s=t,o=A):(o=jN(A),s={...t},s.request=o);let c=A.credentials==="include"||A.credentials==="same-origin"&&A.responseTainting==="basic",g=o.body?o.body.length:null,l=null;if(o.body==null&&["POST","PUT"].includes(o.method)&&(l="0"),g!=null&&(l=Mn(`${g}`)),l!=null&&o.headersList.append("content-length",l,!0),g!=null&&o.keepalive,o.referrer instanceof URL&&o.headersList.append("referer",Mn(o.referrer.href),!0),rU(o),nU(o),o.headersList.contains("user-agent",!0)||o.headersList.append("user-agent",OU),o.cache==="default"&&(o.headersList.contains("if-modified-since",!0)||o.headersList.contains("if-none-match",!0)||o.headersList.contains("if-unmodified-since",!0)||o.headersList.contains("if-match",!0)||o.headersList.contains("if-range",!0))&&(o.cache="no-store"),o.cache==="no-cache"&&!o.preventNoCacheCacheControlHeaderModification&&!o.headersList.contains("cache-control",!0)&&o.headersList.append("cache-control","max-age=0",!0),(o.cache==="no-store"||o.cache==="reload")&&(o.headersList.contains("pragma",!0)||o.headersList.append("pragma","no-cache",!0),o.headersList.contains("cache-control",!0)||o.headersList.append("cache-control","no-cache",!0)),o.headersList.contains("range",!0)&&o.headersList.append("accept-encoding","identity",!0),o.headersList.contains("accept-encoding",!0)||(BU(ft(o))?o.headersList.append("accept-encoding","br, gzip, deflate",!0):o.headersList.append("accept-encoding","gzip, deflate",!0)),o.headersList.delete("host",!0),i==null&&(o.cache="no-store"),o.cache!=="no-store"&&o.cache,n==null){if(o.cache==="only-if-cached")return V("only if cached");let u=await HU(s,c,r);!wU.has(o.method)&&u.status>=200&&u.status<=399,a&&u.status,n==null&&(n=u)}if(n.urlList=[...o.urlList],o.headersList.contains("range",!0)&&(n.rangeRequested=!0),n.requestIncludesCredentials=c,n.status===407)return A.window==="no-window"?V():Mr(t)?Gn(t):V("proxy authentication required");if(n.status===421&&!r&&(A.body==null||A.body.source!=null)){if(Mr(t))return Gn(t);t.controller.connection.destroy(),n=await ud(t,e,!0)}return n}async function HU(t,e=!1,r=!1){vr(!t.controller.connection||t.controller.connection.destroyed),t.controller.connection={abort:null,destroyed:!1,destroy(h,d=!0){this.destroyed||(this.destroyed=!0,d&&this.abort?.(h??new DOMException("The operation was aborted.","AbortError")))}};let A=t.request,s=null,o=t.timingInfo;null==null&&(A.cache="no-store");let i=r?"yes":"no";A.mode;let a=null;if(A.body==null&&t.processRequestEndOfBody)queueMicrotask(()=>t.processRequestEndOfBody());else if(A.body!=null){let h=async function*(Q){Mr(t)||(yield Q,t.processRequestBodyChunkLength?.(Q.byteLength))},d=()=>{Mr(t)||t.processRequestEndOfBody&&t.processRequestEndOfBody()},I=Q=>{Mr(t)||(Q.name==="AbortError"?t.controller.abort():t.controller.terminate(Q))};a=(async function*(){try{for await(let Q of A.body.stream)yield*h(Q);d()}catch(Q){I(Q)}})()}try{let{body:h,status:d,statusText:I,headersList:Q,socket:p}=await E({body:a});if(p)s=Ln({status:d,statusText:I,headersList:Q,socket:p});else{let D=h[Symbol.asyncIterator]();t.controller.next=()=>D.next(),s=Ln({status:d,statusText:I,headersList:Q})}}catch(h){return h.name==="AbortError"?(t.controller.connection.destroy(),Gn(t,h)):V(h)}let c=async()=>{await t.controller.resume()},g=h=>{Mr(t)||t.controller.abort(h)},l=new ReadableStream({async start(h){t.controller.controller=h},async pull(h){await c(h)},async cancel(h){await g(h)},type:"bytes"});s.body={stream:l,source:null,length:null},t.controller.onAborted=u,t.controller.on("terminated",u),t.controller.resume=async()=>{for(;;){let h,d;try{let{done:Q,value:p}=await t.controller.next();if(ed(t))break;h=Q?void 0:p}catch(Q){t.controller.ended&&!o.encodedBodySize?h=void 0:(h=Q,d=!0)}if(h===void 0){hU(t.controller.controller),JU(t,s);return}if(o.decodedBodySize+=h?.byteLength??0,d){t.controller.terminate(h);return}let I=new Uint8Array(h);if(I.byteLength&&t.controller.controller.enqueue(I),SU(l)){t.controller.terminate();return}if(t.controller.controller.desiredSize<=0)return}};function u(h){ed(t)?(s.aborted=!0,vn(l)&&t.controller.controller.error(t.controller.serializedAbortReason)):vn(l)&&t.controller.controller.error(new TypeError("terminated",{cause:uU(h)?h:void 0})),t.controller.connection.destroy()}return s;function E({body:h}){let d=ft(A),I=t.controller.dispatcher;return new Promise((Q,p)=>I.dispatch({path:d.pathname+d.search,origin:d.origin,method:A.method,body:I.isMockActive?A.body&&(A.body.source||A.body.stream):h,headers:A.headersList.entries,maxRedirections:0,upgrade:A.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(D){let{connection:R}=t.controller;o.finalConnectionTimingInfo=IU(void 0,o.postRedirectStartTime,t.crossOriginIsolatedCapability),R.destroyed?D(new DOMException("The operation was aborted.","AbortError")):(t.controller.on("terminated",D),this.abort=R.abort=D),o.finalNetworkRequestStartTime=Gs(t.crossOriginIsolatedCapability)},onResponseStarted(){o.finalNetworkResponseStartTime=Gs(t.crossOriginIsolatedCapability)},onHeaders(D,R,H,Z){if(D<200)return;let Ae="",gt=new $C;for(let De=0;Dezr)return p(new Error(`too many content-encodings in response: ${Wr.length}, maximum allowed is ${zr}`)),!0;for(let Ji=Wr.length-1;Ji>=0;--Ji){let lo=Wr[Ji].trim();if(lo==="x-gzip"||lo==="gzip")wt.push(tr.createGunzip({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="deflate")wt.push(fU({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="br")wt.push(tr.createBrotliDecompress({flush:tr.constants.BROTLI_OPERATION_FLUSH,finishFlush:tr.constants.BROTLI_OPERATION_FLUSH}));else{wt.length=0;break}}}let _t=this.onError.bind(this);return Q({status:D,statusText:Z,headersList:gt,body:wt.length?bU(this.body,...wt,De=>{De&&this.onError(De)}).on("error",_t):this.body.on("error",_t)}),!0},onData(D){if(t.controller.dump)return;let R=D;return o.encodedBodySize+=R.byteLength,this.body.push(R)},onComplete(){this.abort&&t.controller.off("terminated",this.abort),t.controller.onAborted&&t.controller.off("terminated",t.controller.onAborted),t.controller.ended=!0,this.body.push(null)},onError(D){this.abort&&t.controller.off("terminated",this.abort),this.body?.destroy(D),t.controller.terminate(D),p(D)},onUpgrade(D,R,H){if(D!==101)return;let Z=new $C;for(let Ae=0;Ae{"use strict";hd.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var Bd=B((vP,Qd)=>{"use strict";var{webidl:_e}=Qe(),On=Symbol("ProgressEvent state"),Zg=class t extends Event{constructor(e,r={}){e=_e.converters.DOMString(e,"ProgressEvent constructor","type"),r=_e.converters.ProgressEventInit(r??{}),super(e,r),this[On]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return _e.brandCheck(this,t),this[On].lengthComputable}get loaded(){return _e.brandCheck(this,t),this[On].loaded}get total(){return _e.brandCheck(this,t),this[On].total}};_e.converters.ProgressEventInit=_e.dictionaryConverter([{key:"lengthComputable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:_e.converters.boolean,defaultValue:()=>!1}]);Qd.exports={ProgressEvent:Zg}});var Cd=B((xP,Id)=>{"use strict";function VU(t){if(!t)return"failure";switch(t.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}Id.exports={getEncoding:VU}});var Dd=B((OP,Rd)=>{"use strict";var{kState:GA,kError:jg,kResult:dd,kAborted:Ms,kLastProgressEventFired:Kg}=zg(),{ProgressEvent:qU}=Bd(),{getEncoding:fd}=Cd(),{serializeAMimeType:WU,parseMIMEType:pd}=Te(),{types:zU}=C("node:util"),{StringDecoder:md}=C("string_decoder"),{btoa:wd}=C("node:buffer"),ZU={enumerable:!0,writable:!1,configurable:!1};function jU(t,e,r,A){if(t[GA]==="loading")throw new DOMException("Invalid state","InvalidStateError");t[GA]="loading",t[dd]=null,t[jg]=null;let o=e.stream().getReader(),n=[],i=o.read(),a=!0;(async()=>{for(;!t[Ms];)try{let{done:c,value:g}=await i;if(a&&!t[Ms]&&queueMicrotask(()=>{rr("loadstart",t)}),a=!1,!c&&zU.isUint8Array(g))n.push(g),(t[Kg]===void 0||Date.now()-t[Kg]>=50)&&!t[Ms]&&(t[Kg]=Date.now(),queueMicrotask(()=>{rr("progress",t)})),i=o.read();else if(c){queueMicrotask(()=>{t[GA]="done";try{let l=KU(n,r,e.type,A);if(t[Ms])return;t[dd]=l,rr("load",t)}catch(l){t[jg]=l,rr("error",t)}t[GA]!=="loading"&&rr("loadend",t)});break}}catch(c){if(t[Ms])return;queueMicrotask(()=>{t[GA]="done",t[jg]=c,rr("error",t),t[GA]!=="loading"&&rr("loadend",t)});break}})()}function rr(t,e){let r=new qU(t,{bubbles:!1,cancelable:!1});e.dispatchEvent(r)}function KU(t,e,r,A){switch(e){case"DataURL":{let s="data:",o=pd(r||"application/octet-stream");o!=="failure"&&(s+=WU(o)),s+=";base64,";let n=new md("latin1");for(let i of t)s+=wd(n.write(i));return s+=wd(n.end()),s}case"Text":{let s="failure";if(A&&(s=fd(A)),s==="failure"&&r){let o=pd(r);o!=="failure"&&(s=fd(o.parameters.get("charset")))}return s==="failure"&&(s="UTF-8"),XU(t,s)}case"ArrayBuffer":return yd(t).buffer;case"BinaryString":{let s="",o=new md("latin1");for(let n of t)s+=o.write(n);return s+=o.end(),s}}}function XU(t,e){let r=yd(t),A=$U(r),s=0;A!==null&&(e=A,s=A==="UTF-8"?3:2);let o=r.slice(s);return new TextDecoder(e).decode(o)}function $U(t){let[e,r,A]=t;return e===239&&r===187&&A===191?"UTF-8":e===254&&r===255?"UTF-16BE":e===255&&r===254?"UTF-16LE":null}function yd(t){let e=t.reduce((A,s)=>A+s.byteLength,0),r=0;return t.reduce((A,s)=>(A.set(s,r),r+=s.byteLength,A),new Uint8Array(e))}Rd.exports={staticPropertyDescriptors:ZU,readOperation:jU,fireAProgressEvent:rr}});var Fd=B((YP,kd)=>{"use strict";var{staticPropertyDescriptors:LA,readOperation:Yn,fireAProgressEvent:Td}=Dd(),{kState:xr,kError:bd,kResult:_n,kEvents:J,kAborted:eG}=zg(),{webidl:W}=Qe(),{kEnumerableProperty:Fe}=v(),at=class t extends EventTarget{constructor(){super(),this[xr]="empty",this[_n]=null,this[bd]=null,this[J]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){W.brandCheck(this,t),W.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),e=W.converters.Blob(e,{strict:!1}),Yn(this,e,"ArrayBuffer")}readAsBinaryString(e){W.brandCheck(this,t),W.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),e=W.converters.Blob(e,{strict:!1}),Yn(this,e,"BinaryString")}readAsText(e,r=void 0){W.brandCheck(this,t),W.argumentLengthCheck(arguments,1,"FileReader.readAsText"),e=W.converters.Blob(e,{strict:!1}),r!==void 0&&(r=W.converters.DOMString(r,"FileReader.readAsText","encoding")),Yn(this,e,"Text",r)}readAsDataURL(e){W.brandCheck(this,t),W.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),e=W.converters.Blob(e,{strict:!1}),Yn(this,e,"DataURL")}abort(){if(this[xr]==="empty"||this[xr]==="done"){this[_n]=null;return}this[xr]==="loading"&&(this[xr]="done",this[_n]=null),this[eG]=!0,Td("abort",this),this[xr]!=="loading"&&Td("loadend",this)}get readyState(){switch(W.brandCheck(this,t),this[xr]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return W.brandCheck(this,t),this[_n]}get error(){return W.brandCheck(this,t),this[bd]}get onloadend(){return W.brandCheck(this,t),this[J].loadend}set onloadend(e){W.brandCheck(this,t),this[J].loadend&&this.removeEventListener("loadend",this[J].loadend),typeof e=="function"?(this[J].loadend=e,this.addEventListener("loadend",e)):this[J].loadend=null}get onerror(){return W.brandCheck(this,t),this[J].error}set onerror(e){W.brandCheck(this,t),this[J].error&&this.removeEventListener("error",this[J].error),typeof e=="function"?(this[J].error=e,this.addEventListener("error",e)):this[J].error=null}get onloadstart(){return W.brandCheck(this,t),this[J].loadstart}set onloadstart(e){W.brandCheck(this,t),this[J].loadstart&&this.removeEventListener("loadstart",this[J].loadstart),typeof e=="function"?(this[J].loadstart=e,this.addEventListener("loadstart",e)):this[J].loadstart=null}get onprogress(){return W.brandCheck(this,t),this[J].progress}set onprogress(e){W.brandCheck(this,t),this[J].progress&&this.removeEventListener("progress",this[J].progress),typeof e=="function"?(this[J].progress=e,this.addEventListener("progress",e)):this[J].progress=null}get onload(){return W.brandCheck(this,t),this[J].load}set onload(e){W.brandCheck(this,t),this[J].load&&this.removeEventListener("load",this[J].load),typeof e=="function"?(this[J].load=e,this.addEventListener("load",e)):this[J].load=null}get onabort(){return W.brandCheck(this,t),this[J].abort}set onabort(e){W.brandCheck(this,t),this[J].abort&&this.removeEventListener("abort",this[J].abort),typeof e=="function"?(this[J].abort=e,this.addEventListener("abort",e)):this[J].abort=null}};at.EMPTY=at.prototype.EMPTY=0;at.LOADING=at.prototype.LOADING=1;at.DONE=at.prototype.DONE=2;Object.defineProperties(at.prototype,{EMPTY:LA,LOADING:LA,DONE:LA,readAsArrayBuffer:Fe,readAsBinaryString:Fe,readAsText:Fe,readAsDataURL:Fe,abort:Fe,readyState:Fe,result:Fe,error:Fe,onloadstart:Fe,onprogress:Fe,onload:Fe,onabort:Fe,onerror:Fe,onloadend:Fe,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(at,{EMPTY:LA,LOADING:LA,DONE:LA});kd.exports={FileReader:at}});var Jn=B((_P,Sd)=>{"use strict";Sd.exports={kConstruct:$().kConstruct}});var Gd=B((JP,Ud)=>{"use strict";var tG=C("node:assert"),{URLSerializer:Nd}=Te(),{isValidHeaderName:rG}=Ge();function AG(t,e,r=!1){let A=Nd(t,r),s=Nd(e,r);return A===s}function sG(t){tG(t!==null);let e=[];for(let r of t.split(","))r=r.trim(),rG(r)&&e.push(r);return e}Ud.exports={urlEquals:AG,getFieldValues:sG}});var vd=B((PP,Md)=>{"use strict";var{kConstruct:oG}=Jn(),{urlEquals:nG,getFieldValues:Xg}=Gd(),{kEnumerableProperty:Or,isDisturbed:iG}=v(),{webidl:b}=Qe(),{Response:aG,cloneResponse:cG,fromInnerResponse:gG}=Us(),{Request:Mt,fromInnerRequest:lG}=UA(),{kState:ct}=Pt(),{fetching:uG}=Ls(),{urlIsHttpHttpsScheme:Pn,createDeferredPromise:MA,readAllBytes:EG}=Ge(),$g=C("node:assert"),Hn=class t{#e;constructor(){arguments[0]!==oG&&b.illegalConstructor(),b.util.markAsUncloneable(this),this.#e=arguments[1]}async match(e,r={}){b.brandCheck(this,t);let A="Cache.match";b.argumentLengthCheck(arguments,1,A),e=b.converters.RequestInfo(e,A,"request"),r=b.converters.CacheQueryOptions(r,A,"options");let s=this.#s(e,r,1);if(s.length!==0)return s[0]}async matchAll(e=void 0,r={}){b.brandCheck(this,t);let A="Cache.matchAll";return e!==void 0&&(e=b.converters.RequestInfo(e,A,"request")),r=b.converters.CacheQueryOptions(r,A,"options"),this.#s(e,r)}async add(e){b.brandCheck(this,t);let r="Cache.add";b.argumentLengthCheck(arguments,1,r),e=b.converters.RequestInfo(e,r,"request");let A=[e];return await this.addAll(A)}async addAll(e){b.brandCheck(this,t);let r="Cache.addAll";b.argumentLengthCheck(arguments,1,r);let A=[],s=[];for(let u of e){if(u===void 0)throw b.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(u=b.converters.RequestInfo(u),typeof u=="string")continue;let E=u[ct];if(!Pn(E.url)||E.method!=="GET")throw b.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let o=[];for(let u of e){let E=new Mt(u)[ct];if(!Pn(E.url))throw b.errors.exception({header:r,message:"Expected http/s scheme."});E.initiator="fetch",E.destination="subresource",s.push(E);let h=MA();o.push(uG({request:E,processResponse(d){if(d.type==="error"||d.status===206||d.status<200||d.status>299)h.reject(b.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(d.headersList.contains("vary")){let I=Xg(d.headersList.get("vary"));for(let Q of I)if(Q==="*"){h.reject(b.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let p of o)p.abort();return}}},processResponseEndOfBody(d){if(d.aborted){h.reject(new DOMException("aborted","AbortError"));return}h.resolve(d)}})),A.push(h.promise)}let i=await Promise.all(A),a=[],c=0;for(let u of i){let E={type:"put",request:s[c],response:u};a.push(E),c++}let g=MA(),l=null;try{this.#t(a)}catch(u){l=u}return queueMicrotask(()=>{l===null?g.resolve(void 0):g.reject(l)}),g.promise}async put(e,r){b.brandCheck(this,t);let A="Cache.put";b.argumentLengthCheck(arguments,2,A),e=b.converters.RequestInfo(e,A,"request"),r=b.converters.Response(r,A,"response");let s=null;if(e instanceof Mt?s=e[ct]:s=new Mt(e)[ct],!Pn(s.url)||s.method!=="GET")throw b.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});let o=r[ct];if(o.status===206)throw b.errors.exception({header:A,message:"Got 206 status"});if(o.headersList.contains("vary")){let E=Xg(o.headersList.get("vary"));for(let h of E)if(h==="*")throw b.errors.exception({header:A,message:"Got * vary field value"})}if(o.body&&(iG(o.body.stream)||o.body.stream.locked))throw b.errors.exception({header:A,message:"Response body is locked or disturbed"});let n=cG(o),i=MA();if(o.body!=null){let h=o.body.stream.getReader();EG(h).then(i.resolve,i.reject)}else i.resolve(void 0);let a=[],c={type:"put",request:s,response:n};a.push(c);let g=await i.promise;n.body!=null&&(n.body.source=g);let l=MA(),u=null;try{this.#t(a)}catch(E){u=E}return queueMicrotask(()=>{u===null?l.resolve():l.reject(u)}),l.promise}async delete(e,r={}){b.brandCheck(this,t);let A="Cache.delete";b.argumentLengthCheck(arguments,1,A),e=b.converters.RequestInfo(e,A,"request"),r=b.converters.CacheQueryOptions(r,A,"options");let s=null;if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return!1}else $g(typeof e=="string"),s=new Mt(e)[ct];let o=[],n={type:"delete",request:s,options:r};o.push(n);let i=MA(),a=null,c;try{c=this.#t(o)}catch(g){a=g}return queueMicrotask(()=>{a===null?i.resolve(!!c?.length):i.reject(a)}),i.promise}async keys(e=void 0,r={}){b.brandCheck(this,t);let A="Cache.keys";e!==void 0&&(e=b.converters.RequestInfo(e,A,"request")),r=b.converters.CacheQueryOptions(r,A,"options");let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=MA(),n=[];if(e===void 0)for(let i of this.#e)n.push(i[0]);else{let i=this.#r(s,r);for(let a of i)n.push(a[0])}return queueMicrotask(()=>{let i=[];for(let a of n){let c=lG(a,new AbortController().signal,"immutable");i.push(c)}o.resolve(Object.freeze(i))}),o.promise}#t(e){let r=this.#e,A=[...r],s=[],o=[];try{for(let n of e){if(n.type!=="delete"&&n.type!=="put")throw b.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(n.type==="delete"&&n.response!=null)throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#r(n.request,n.options,s).length)throw new DOMException("???","InvalidStateError");let i;if(n.type==="delete"){if(i=this.#r(n.request,n.options),i.length===0)return[];for(let a of i){let c=r.indexOf(a);$g(c!==-1),r.splice(c,1)}}else if(n.type==="put"){if(n.response==null)throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=n.request;if(!Pn(a.url))throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(n.options!=null)throw b.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});i=this.#r(n.request);for(let c of i){let g=r.indexOf(c);$g(g!==-1),r.splice(g,1)}r.push([n.request,n.response]),s.push([n.request,n.response])}o.push([n.request,n.response])}return o}catch(n){throw this.#e.length=0,this.#e=A,n}}#r(e,r,A){let s=[],o=A??this.#e;for(let n of o){let[i,a]=n;this.#o(e,i,a,r)&&s.push(n)}return s}#o(e,r,A=null,s){let o=new URL(e.url),n=new URL(r.url);if(s?.ignoreSearch&&(n.search="",o.search=""),!nG(o,n,!0))return!1;if(A==null||s?.ignoreVary||!A.headersList.contains("vary"))return!0;let i=Xg(A.headersList.get("vary"));for(let a of i){if(a==="*")return!1;let c=r.headersList.get(a),g=e.headersList.get(a);if(c!==g)return!1}return!0}#s(e,r,A=1/0){let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=[];if(e===void 0)for(let i of this.#e)o.push(i[1]);else{let i=this.#r(s,r);for(let a of i)o.push(a[1])}let n=[];for(let i of o){let a=gG(i,"immutable");if(n.push(a.clone()),n.length>=A)break}return Object.freeze(n)}};Object.defineProperties(Hn.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:Or,matchAll:Or,add:Or,addAll:Or,put:Or,delete:Or,keys:Or});var Ld=[{key:"ignoreSearch",converter:b.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:b.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:b.converters.boolean,defaultValue:()=>!1}];b.converters.CacheQueryOptions=b.dictionaryConverter(Ld);b.converters.MultiCacheQueryOptions=b.dictionaryConverter([...Ld,{key:"cacheName",converter:b.converters.DOMString}]);b.converters.Response=b.interfaceConverter(aG);b.converters["sequence"]=b.sequenceConverter(b.converters.RequestInfo);Md.exports={Cache:Hn}});var Od=B((HP,xd)=>{"use strict";var{kConstruct:vs}=Jn(),{Cache:Vn}=vd(),{webidl:de}=Qe(),{kEnumerableProperty:xs}=v(),qn=class t{#e=new Map;constructor(){arguments[0]!==vs&&de.illegalConstructor(),de.util.markAsUncloneable(this)}async match(e,r={}){if(de.brandCheck(this,t),de.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=de.converters.RequestInfo(e),r=de.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let A=this.#e.get(r.cacheName);return await new Vn(vs,A).match(e,r)}}else for(let A of this.#e.values()){let o=await new Vn(vs,A).match(e,r);if(o!==void 0)return o}}async has(e){de.brandCheck(this,t);let r="CacheStorage.has";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)}async open(e){de.brandCheck(this,t);let r="CacheStorage.open";if(de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)){let s=this.#e.get(e);return new Vn(vs,s)}let A=[];return this.#e.set(e,A),new Vn(vs,A)}async delete(e){de.brandCheck(this,t);let r="CacheStorage.delete";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.delete(e)}async keys(){return de.brandCheck(this,t),[...this.#e.keys()]}};Object.defineProperties(qn.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:xs,has:xs,open:xs,delete:xs,keys:xs});xd.exports={CacheStorage:qn}});var _d=B((VP,Yd)=>{"use strict";Yd.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var rl=B((qP,Vd)=>{"use strict";function hG(t){for(let e=0;e=0&&r<=8||r>=10&&r<=31||r===127)return!0}return!1}function el(t){for(let e=0;e126||r===34||r===40||r===41||r===60||r===62||r===64||r===44||r===59||r===58||r===92||r===47||r===91||r===93||r===63||r===61||r===123||r===125)throw new Error("Invalid cookie name")}}function tl(t){let e=t.length,r=0;if(t[0]==='"'){if(e===1||t[e-1]!=='"')throw new Error("Invalid cookie value");--e,++r}for(;r126||A===34||A===44||A===59||A===92)throw new Error("Invalid cookie value")}}function Pd(t){for(let e=0;e126||r===59)throw new Error("Invalid cookie path")}}function Jd(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function QG(t){if(t===" ")return;if(t.length>255)throw new Error("Invalid cookie domain");let e=0;for(let r=0;r63)throw new Error("Invalid cookie domain")}if(e===0||t.charCodeAt(t.length-1)===45)throw new Error("Invalid cookie domain")}var BG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],IG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wn=Array(61).fill(0).map((t,e)=>e.toString().padStart(2,"0"));function Hd(t){return typeof t=="number"&&(t=new Date(t)),`${BG[t.getUTCDay()]}, ${Wn[t.getUTCDate()]} ${IG[t.getUTCMonth()]} ${t.getUTCFullYear()} ${Wn[t.getUTCHours()]}:${Wn[t.getUTCMinutes()]}:${Wn[t.getUTCSeconds()]} GMT`}function CG(t){if(t<0)throw new Error("Invalid cookie max-age")}function dG(t){if(t.name.length===0)return null;el(t.name),tl(t.value);let e=[`${t.name}=${t.value}`];t.name.startsWith("__Secure-")&&(t.secure=!0),t.name.startsWith("__Host-")&&(t.secure=!0,t.domain=null,t.path="/"),t.secure&&e.push("Secure"),t.httpOnly&&e.push("HttpOnly"),typeof t.maxAge=="number"&&(CG(t.maxAge),e.push(`Max-Age=${t.maxAge}`)),t.domain&&(QG(t.domain),e.push(`Domain=${t.domain}`)),t.path&&(Pd(t.path),e.push(`Path=${t.path}`)),t.expires&&t.expires.toString()!=="Invalid Date"&&e.push(`Expires=${Hd(t.expires)}`),t.sameSite&&e.push(`SameSite=${t.sameSite}`);for(let r of t.unparsed){if(!r.includes("="))throw new Error("Invalid unparsed");let[A,...s]=r.split("="),o=A.trim(),n=s.join("=");el(o),tl(n),e.push(`${o}=${n}`)}return e.join("; ")}Vd.exports={isCTLExcludingHtab:hG,validateCookieName:el,validateCookiePath:Pd,validateCookieValue:tl,toIMFDate:Hd,stringify:dG}});var Wd=B((WP,qd)=>{"use strict";var{maxNameValuePairSize:fG,maxAttributeValueSize:pG}=_d(),{isCTLExcludingHtab:mG}=rl(),{collectASequenceOfCodePointsFast:zn}=Te(),wG=C("node:assert");function yG(t){if(mG(t))return null;let e="",r="",A="",s="";if(t.includes(";")){let o={position:0};e=zn(";",t,o),r=t.slice(o.position)}else e=t;if(!e.includes("="))s=e;else{let o={position:0};A=zn("=",e,o),s=e.slice(o.position+1)}return A=A.trim(),s=s.trim(),A.length+s.length>fG?null:{name:A,value:s,...vA(r)}}function vA(t,e={}){if(t.length===0)return e;wG(t[0]===";"),t=t.slice(1);let r="";t.includes(";")?(r=zn(";",t,{position:0}),t=t.slice(r.length)):(r=t,t="");let A="",s="";if(r.includes("=")){let n={position:0};A=zn("=",r,n),s=r.slice(n.position+1)}else A=r;if(A=A.trim(),s=s.trim(),s.length>pG)return vA(t,e);let o=A.toLowerCase();if(o==="expires"){let n=new Date(s);e.expires=n}else if(o==="max-age"){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!=="-"||!/^\d+$/.test(s))return vA(t,e);let i=Number(s);e.maxAge=i}else if(o==="domain"){let n=s;n[0]==="."&&(n=n.slice(1)),n=n.toLowerCase(),e.domain=n}else if(o==="path"){let n="";s.length===0||s[0]!=="/"?n="/":n=s,e.path=n}else if(o==="secure")e.secure=!0;else if(o==="httponly")e.httpOnly=!0;else if(o==="samesite"){let n=s.toLowerCase();n==="none"?e.sameSite="None":n==="strict"?e.sameSite="Strict":n==="lax"&&(e.sameSite="Lax")}else e.unparsed??=[],e.unparsed.push(`${A}=${s}`);return vA(t,e)}qd.exports={parseSetCookie:yG,parseUnparsedAttributes:vA}});var jd=B((zP,Zd)=>{"use strict";var{parseSetCookie:RG}=Wd(),{stringify:DG}=rl(),{webidl:O}=Qe(),{Headers:Zn}=Gr();function TG(t){O.argumentLengthCheck(arguments,1,"getCookies"),O.brandCheck(t,Zn,{strict:!1});let e=t.get("cookie"),r={};if(!e)return r;for(let A of e.split(";")){let[s,...o]=A.split("=");r[s.trim()]=o.join("=")}return r}function bG(t,e,r){O.brandCheck(t,Zn,{strict:!1});let A="deleteCookie";O.argumentLengthCheck(arguments,2,A),e=O.converters.DOMString(e,A,"name"),r=O.converters.DeleteCookieAttributes(r),zd(t,{name:e,value:"",expires:new Date(0),...r})}function kG(t){O.argumentLengthCheck(arguments,1,"getSetCookies"),O.brandCheck(t,Zn,{strict:!1});let e=t.getSetCookie();return e?e.map(r=>RG(r)):[]}function zd(t,e){O.argumentLengthCheck(arguments,2,"setCookie"),O.brandCheck(t,Zn,{strict:!1}),e=O.converters.Cookie(e);let r=DG(e);r&&t.append("Set-Cookie",r)}O.converters.DeleteCookieAttributes=O.dictionaryConverter([{converter:O.nullableConverter(O.converters.DOMString),key:"path",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.DOMString),key:"domain",defaultValue:()=>null}]);O.converters.Cookie=O.dictionaryConverter([{converter:O.converters.DOMString,key:"name"},{converter:O.converters.DOMString,key:"value"},{converter:O.nullableConverter(t=>typeof t=="number"?O.converters["unsigned long long"](t):new Date(t)),key:"expires",defaultValue:()=>null},{converter:O.nullableConverter(O.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.DOMString),key:"path",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.boolean),key:"secure",defaultValue:()=>null},{converter:O.nullableConverter(O.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:O.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:O.sequenceConverter(O.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);Zd.exports={getCookies:TG,deleteCookie:bG,getSetCookies:kG,setCookie:zd}});var OA=B((ZP,Xd)=>{"use strict";var{webidl:T}=Qe(),{kEnumerableProperty:Se}=v(),{kConstruct:Kd}=$(),{MessagePort:FG}=C("node:worker_threads"),xA=class t extends Event{#e;constructor(e,r={}){if(e===Kd){super(arguments[1],arguments[2]),T.util.markAsUncloneable(this);return}let A="MessageEvent constructor";T.argumentLengthCheck(arguments,1,A),e=T.converters.DOMString(e,A,"type"),r=T.converters.MessageEventInit(r,A,"eventInitDict"),super(e,r),this.#e=r,T.util.markAsUncloneable(this)}get data(){return T.brandCheck(this,t),this.#e.data}get origin(){return T.brandCheck(this,t),this.#e.origin}get lastEventId(){return T.brandCheck(this,t),this.#e.lastEventId}get source(){return T.brandCheck(this,t),this.#e.source}get ports(){return T.brandCheck(this,t),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(e,r=!1,A=!1,s=null,o="",n="",i=null,a=[]){return T.brandCheck(this,t),T.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new t(e,{bubbles:r,cancelable:A,data:s,origin:o,lastEventId:n,source:i,ports:a})}static createFastMessageEvent(e,r){let A=new t(Kd,e,r);return A.#e=r,A.#e.data??=null,A.#e.origin??="",A.#e.lastEventId??="",A.#e.source??=null,A.#e.ports??=[],A}},{createFastMessageEvent:SG}=xA;delete xA.createFastMessageEvent;var jn=class t extends Event{#e;constructor(e,r={}){let A="CloseEvent constructor";T.argumentLengthCheck(arguments,1,A),e=T.converters.DOMString(e,A,"type"),r=T.converters.CloseEventInit(r),super(e,r),this.#e=r,T.util.markAsUncloneable(this)}get wasClean(){return T.brandCheck(this,t),this.#e.wasClean}get code(){return T.brandCheck(this,t),this.#e.code}get reason(){return T.brandCheck(this,t),this.#e.reason}},Kn=class t extends Event{#e;constructor(e,r){let A="ErrorEvent constructor";T.argumentLengthCheck(arguments,1,A),super(e,r),T.util.markAsUncloneable(this),e=T.converters.DOMString(e,A,"type"),r=T.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return T.brandCheck(this,t),this.#e.message}get filename(){return T.brandCheck(this,t),this.#e.filename}get lineno(){return T.brandCheck(this,t),this.#e.lineno}get colno(){return T.brandCheck(this,t),this.#e.colno}get error(){return T.brandCheck(this,t),this.#e.error}};Object.defineProperties(xA.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:Se,origin:Se,lastEventId:Se,source:Se,ports:Se,initMessageEvent:Se});Object.defineProperties(jn.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:Se,code:Se,wasClean:Se});Object.defineProperties(Kn.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:Se,filename:Se,lineno:Se,colno:Se,error:Se});T.converters.MessagePort=T.interfaceConverter(FG);T.converters["sequence"]=T.sequenceConverter(T.converters.MessagePort);var Al=[{key:"bubbles",converter:T.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:T.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:T.converters.boolean,defaultValue:()=>!1}];T.converters.MessageEventInit=T.dictionaryConverter([...Al,{key:"data",converter:T.converters.any,defaultValue:()=>null},{key:"origin",converter:T.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:T.converters.DOMString,defaultValue:()=>""},{key:"source",converter:T.nullableConverter(T.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:T.converters["sequence"],defaultValue:()=>new Array(0)}]);T.converters.CloseEventInit=T.dictionaryConverter([...Al,{key:"wasClean",converter:T.converters.boolean,defaultValue:()=>!1},{key:"code",converter:T.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:T.converters.USVString,defaultValue:()=>""}]);T.converters.ErrorEventInit=T.dictionaryConverter([...Al,{key:"message",converter:T.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:T.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:T.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:T.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:T.converters.any}]);Xd.exports={MessageEvent:xA,CloseEvent:jn,ErrorEvent:Kn,createFastMessageEvent:SG}});var Yr=B((jP,$d)=>{"use strict";var NG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",UG={enumerable:!0,writable:!1,configurable:!1},GG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},LG={NOT_SENT:0,PROCESSING:1,SENT:2},MG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},vG=2**16-1,xG={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},OG=Buffer.allocUnsafe(0),YG={string:1,typedArray:2,arrayBuffer:3,blob:4};$d.exports={uid:NG,sentCloseFrameState:LG,staticPropertyDescriptors:UG,states:GG,opcodes:MG,maxUnsigned16Bit:vG,parserStates:xG,emptyBuffer:OG,sendHints:YG}});var Os=B((KP,ef)=>{"use strict";ef.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var Js=B((XP,gf)=>{"use strict";var{kReadyState:Ys,kController:_G,kResponse:JG,kBinaryType:PG,kWebSocketURL:HG}=Os(),{states:_s,opcodes:Ar}=Yr(),{ErrorEvent:VG,createFastMessageEvent:qG}=OA(),{isUtf8:WG}=C("node:buffer"),{collectASequenceOfCodePointsFast:zG,removeHTTPWhitespace:tf}=Te();function ZG(t){return t[Ys]===_s.CONNECTING}function jG(t){return t[Ys]===_s.OPEN}function KG(t){return t[Ys]===_s.CLOSING}function XG(t){return t[Ys]===_s.CLOSED}function sl(t,e,r=(s,o)=>new Event(s,o),A={}){let s=r(t,A);e.dispatchEvent(s)}function $G(t,e,r){if(t[Ys]!==_s.OPEN)return;let A;if(e===Ar.TEXT)try{A=cf(r)}catch{Af(t,"Received invalid UTF-8 in text frame.");return}else e===Ar.BINARY&&(t[PG]==="blob"?A=new Blob([r]):A=eL(r));sl("message",t,qG,{origin:t[HG].origin,data:A})}function eL(t){return t.byteLength===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function tL(t){if(t.length===0)return!1;for(let e=0;e126||r===34||r===40||r===41||r===44||r===47||r===58||r===59||r===60||r===61||r===62||r===63||r===64||r===91||r===92||r===93||r===123||r===125)return!1}return!0}function rL(t){return t>=1e3&&t<1015?t!==1004&&t!==1005&&t!==1006:t>=3e3&&t<=4999}function Af(t,e){let{[_G]:r,[JG]:A}=t;r.abort(),A?.socket&&!A.socket.destroyed&&A.socket.destroy(),e&&sl("error",t,(s,o)=>new VG(s,o),{error:new Error(e),message:e})}function sf(t){return t===Ar.CLOSE||t===Ar.PING||t===Ar.PONG}function of(t){return t===Ar.CONTINUATION}function nf(t){return t===Ar.TEXT||t===Ar.BINARY}function AL(t){return nf(t)||of(t)||sf(t)}function sL(t){let e={position:0},r=new Map;for(;e.position57)return!1}let e=Number.parseInt(t,10);return e>=8&&e<=15}var af=typeof process.versions.icu=="string",rf=af?new TextDecoder("utf-8",{fatal:!0}):void 0,cf=af?rf.decode.bind(rf):function(t){if(WG(t))return t.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};gf.exports={isConnecting:ZG,isEstablished:jG,isClosing:KG,isClosed:XG,fireEvent:sl,isValidSubprotocol:tL,isValidStatusCode:rL,failWebsocketConnection:Af,websocketMessageReceived:$G,utf8Decode:cf,isControlFrame:sf,isContinuationFrame:of,isTextBinaryFrame:nf,isValidOpcode:AL,parseExtensions:sL,isValidClientWindowBits:oL}});var $n=B(($P,lf)=>{"use strict";var{maxUnsigned16Bit:nL}=Yr(),Xn=16386,ol,Ps=null,YA=Xn;try{ol=C("node:crypto")}catch{ol={randomFillSync:function(e,r,A){for(let s=0;snL?(n+=8,o=127):s>125&&(n+=2,o=126);let i=Buffer.allocUnsafe(s+n);i[0]=i[1]=0,i[0]|=128,i[0]=(i[0]&240)+e;i[n-4]=A[0],i[n-3]=A[1],i[n-2]=A[2],i[n-1]=A[3],i[1]=o,o===126?i.writeUInt16BE(s,2):o===127&&(i[2]=i[3]=0,i.writeUIntBE(s,4,6)),i[1]|=128;for(let a=0;a{"use strict";var{uid:aL,states:Hs,sentCloseFrameState:ei,emptyBuffer:cL,opcodes:gL}=Yr(),{kReadyState:Vs,kSentClose:ti,kByteParser:Ef,kReceivedClose:uf,kResponse:hf}=Os(),{fireEvent:lL,failWebsocketConnection:sr,isClosing:uL,isClosed:EL,isEstablished:hL,parseExtensions:QL}=Js(),{channels:_A}=Kr(),{CloseEvent:BL}=OA(),{makeRequest:IL}=UA(),{fetching:CL}=Ls(),{Headers:dL,getHeadersList:fL}=Gr(),{getDecodeSplit:pL}=Ge(),{WebsocketFrameSend:mL}=$n(),il;try{il=C("node:crypto")}catch{}function wL(t,e,r,A,s,o){let n=t;n.protocol=t.protocol==="ws:"?"http:":"https:";let i=IL({urlList:[n],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(o.headers){let l=fL(new dL(o.headers));i.headersList=l}let a=il.randomBytes(16).toString("base64");i.headersList.append("sec-websocket-key",a),i.headersList.append("sec-websocket-version","13");for(let l of e)i.headersList.append("sec-websocket-protocol",l);return i.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),CL({request:i,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(l){if(l.type==="error"||l.status!==101){sr(A,"Received network error or non-101 status code.");return}if(e.length!==0&&!l.headersList.get("Sec-WebSocket-Protocol")){sr(A,"Server did not respond with sent protocols.");return}if(l.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){sr(A,'Server did not set Upgrade header to "websocket".');return}if(l.headersList.get("Connection")?.toLowerCase()!=="upgrade"){sr(A,'Server did not set Connection header to "upgrade".');return}let u=l.headersList.get("Sec-WebSocket-Accept"),E=il.createHash("sha1").update(a+aL).digest("base64");if(u!==E){sr(A,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let h=l.headersList.get("Sec-WebSocket-Extensions"),d;if(h!==null&&(d=QL(h),!d.has("permessage-deflate"))){sr(A,"Sec-WebSocket-Extensions header does not match.");return}let I=l.headersList.get("Sec-WebSocket-Protocol");if(I!==null&&!pL("sec-websocket-protocol",i.headersList).includes(I)){sr(A,"Protocol was not set in the opening handshake.");return}l.socket.on("data",Qf),l.socket.on("close",Bf),l.socket.on("error",If),_A.open.hasSubscribers&&_A.open.publish({address:l.socket.address(),protocol:I,extensions:h}),s(l,d)}})}function yL(t,e,r,A){if(!(uL(t)||EL(t)))if(!hL(t))sr(t,"Connection was closed before it was established."),t[Vs]=Hs.CLOSING;else if(t[ti]===ei.NOT_SENT){t[ti]=ei.PROCESSING;let s=new mL;e!==void 0&&r===void 0?(s.frameData=Buffer.allocUnsafe(2),s.frameData.writeUInt16BE(e,0)):e!==void 0&&r!==void 0?(s.frameData=Buffer.allocUnsafe(2+A),s.frameData.writeUInt16BE(e,0),s.frameData.write(r,2,"utf-8")):s.frameData=cL,t[hf].socket.write(s.createFrame(gL.CLOSE)),t[ti]=ei.SENT,t[Vs]=Hs.CLOSING}else t[Vs]=Hs.CLOSING}function Qf(t){this.ws[Ef].write(t)||this.pause()}function Bf(){let{ws:t}=this,{[hf]:e}=t;e.socket.off("data",Qf),e.socket.off("close",Bf),e.socket.off("error",If);let r=t[ti]===ei.SENT&&t[uf],A=1005,s="",o=t[Ef].closingInfo;o&&!o.error?(A=o.code??1005,s=o.reason):t[uf]||(A=1006),t[Vs]=Hs.CLOSED,lL("close",t,(n,i)=>new BL(n,i),{wasClean:r,code:A,reason:s}),_A.close.hasSubscribers&&_A.close.publish({websocket:t,code:A,reason:s})}function If(t){let{ws:e}=this;e[Vs]=Hs.CLOSING,_A.socketError.hasSubscribers&&_A.socketError.publish(t),this.destroy()}Cf.exports={establishWebSocketConnection:wL,closeWebSocketConnection:yL}});var ff=B((tH,df)=>{"use strict";var{createInflateRaw:RL,Z_DEFAULT_WINDOWBITS:DL}=C("node:zlib"),{isValidClientWindowBits:TL}=Js(),{MessageSizeExceededError:bL}=_(),kL=Buffer.from([0,0,255,255]),ri=Symbol("kBuffer"),qs=Symbol("kLength"),cl=class{#e;#t={};#r=0;constructor(e,r){this.#t.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=e.get("server_max_window_bits"),this.#r=r.maxPayloadSize}decompress(e,r,A){if(!this.#e){let s=DL;if(this.#t.serverMaxWindowBits){if(!TL(this.#t.serverMaxWindowBits)){A(new Error("Invalid server_max_window_bits"));return}s=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=RL({windowBits:s})}catch(o){A(o);return}this.#e[ri]=[],this.#e[qs]=0,this.#e.on("data",o=>{if(this.#e[qs]+=o.length,this.#r>0&&this.#e[qs]>this.#r){A(new bL),this.#e.removeAllListeners(),this.#e=null;return}this.#e[ri].push(o)}),this.#e.on("error",o=>{this.#e=null,A(o)})}this.#e.write(e),r&&this.#e.write(kL),this.#e.flush(()=>{if(!this.#e)return;let s=Buffer.concat(this.#e[ri],this.#e[qs]);this.#e[ri].length=0,this.#e[qs]=0,A(null,s)})}};df.exports={PerMessageDeflate:cl}});var Ff=B((rH,kf)=>{"use strict";var{Writable:FL}=C("node:stream"),SL=C("node:assert"),{parserStates:Ne,opcodes:JA,states:NL,emptyBuffer:pf,sentCloseFrameState:mf}=Yr(),{kReadyState:UL,kSentClose:wf,kResponse:yf,kReceivedClose:Rf}=Os(),{channels:Ai}=Kr(),{isValidStatusCode:GL,isValidOpcode:LL,failWebsocketConnection:Je,websocketMessageReceived:Df,utf8Decode:ML,isControlFrame:gl,isTextBinaryFrame:ll,isContinuationFrame:vL}=Js(),{WebsocketFrameSend:Tf}=$n(),{closeWebSocketConnection:bf}=al(),{PerMessageDeflate:xL}=ff(),{MessageSizeExceededError:ul}=_();function Ws(t,e,r){bf(t,e,r,Buffer.byteLength(r)),Je(t,r)}var El=class extends FL{#e=[];#t=0;#r=0;#o=!1;#s=Ne.INFO;#A={};#n=[];#i;#c;#a;constructor(e,r,A={}){super(),this.ws=e,this.#i=r??new Map,this.#c=A.maxFragments??0,this.#a=A.maxPayloadSize??0,this.#i.has("permessage-deflate")&&this.#i.set("permessage-deflate",new xL(r,A))}_write(e,r,A){this.#e.push(e),this.#r+=e.length,this.#o=!0,this.run(A)}#g(){return this.#a>0&&!gl(this.#A.opcode)&&this.#A.payloadLength+this.#t>this.#a?(Ws(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(e){for(;this.#o;)if(this.#s===Ne.INFO){if(this.#r<2)return e();let r=this.consume(2),A=(r[0]&128)!==0,s=r[0]&15,o=(r[1]&128)===128,n=!A&&s!==JA.CONTINUATION,i=r[1]&127,a=r[0]&64,c=r[0]&32,g=r[0]&16;if(!LL(s))return Je(this.ws,"Invalid opcode received"),e();if(o)return Je(this.ws,"Frame cannot be masked"),e();if(a!==0&&!this.#i.has("permessage-deflate")){Je(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||g!==0){Je(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(n&&!ll(s)){Je(this.ws,"Invalid frame type was fragmented.");return}if(ll(s)&&this.#n.length>0){Je(this.ws,"Expected continuation frame");return}if(this.#A.fragmented&&n){Je(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((i>125||n)&&gl(s)){Je(this.ws,"Control frame either too large or fragmented");return}if(vL(s)&&this.#n.length===0&&!this.#A.compressed){Je(this.ws,"Unexpected continuation frame");return}if(i<=125){if(this.#A.payloadLength=i,this.#s=Ne.READ_DATA,!this.#g())return}else i===126?this.#s=Ne.PAYLOADLENGTH_16:i===127&&(this.#s=Ne.PAYLOADLENGTH_64);ll(s)&&(this.#A.binaryType=s,this.#A.compressed=a!==0),this.#A.opcode=s,this.#A.masked=o,this.#A.fin=A,this.#A.fragmented=n}else if(this.#s===Ne.PAYLOADLENGTH_16){if(this.#r<2)return e();let r=this.consume(2);if(this.#A.payloadLength=r.readUInt16BE(0),this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.PAYLOADLENGTH_64){if(this.#r<8)return e();let r=this.consume(8),A=r.readUInt32BE(0),s=r.readUInt32BE(4);if(A!==0||s>2**31-1){Je(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#A.payloadLength=s,this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.READ_DATA){if(this.#r{if(A){let o=A instanceof ul?1009:1007;Ws(this.ws,o,A.message);return}if(this.writeFragments(s)){if(this.#a>0&&this.#t>this.#a){Ws(this.ws,1009,new ul().message);return}if(!this.#A.fin){this.#s=Ne.INFO,this.#o=!0,this.run(e);return}Df(this.ws,this.#A.binaryType,this.consumeFragments()),this.#o=!0,this.#s=Ne.INFO,this.run(e)}}),this.#o=!1;break}else{if(!this.writeFragments(r))return;if(this.#a>0&&this.#t>this.#a){Ws(this.ws,1009,new ul().message);return}!this.#A.fragmented&&this.#A.fin&&Df(this.ws,this.#A.binaryType,this.consumeFragments()),this.#s=Ne.INFO}}}consume(e){if(e>this.#r)throw new Error("Called consume() before buffers satiated.");if(e===0)return pf;if(this.#e[0].length===e)return this.#r-=this.#e[0].length,this.#e.shift();let r=Buffer.allocUnsafe(e),A=0;for(;A!==e;){let s=this.#e[0],{length:o}=s;if(o+A===e){r.set(this.#e.shift(),A);break}else if(o+A>e){r.set(s.subarray(0,e-A),A),this.#e[0]=s.subarray(e-A);break}else r.set(this.#e.shift(),A),A+=s.length}return this.#r-=e,r}writeFragments(e){return this.#c>0&&this.#n.length===this.#c?(Ws(this.ws,1008,"Too many message fragments"),!1):(this.#t+=e.length,this.#n.push(e),!0)}consumeFragments(){let e=this.#n;if(e.length===1)return this.#t=0,e.shift();let r=Buffer.concat(e,this.#t);return this.#n=[],this.#t=0,r}parseCloseBody(e){SL(e.length!==1);let r;if(e.length>=2&&(r=e.readUInt16BE(0)),r!==void 0&&!GL(r))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);A[0]===239&&A[1]===187&&A[2]===191&&(A=A.subarray(3));try{A=ML(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:r,reason:A,error:!1}}parseControlFrame(e){let{opcode:r,payloadLength:A}=this.#A;if(r===JA.CLOSE){if(A===1)return Je(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#A.closeInfo=this.parseCloseBody(e),this.#A.closeInfo.error){let{code:s,reason:o}=this.#A.closeInfo;return bf(this.ws,s,o,o.length),Je(this.ws,o),!1}if(this.ws[wf]!==mf.SENT){let s=pf;this.#A.closeInfo.code&&(s=Buffer.allocUnsafe(2),s.writeUInt16BE(this.#A.closeInfo.code,0));let o=new Tf(s);this.ws[yf].socket.write(o.createFrame(JA.CLOSE),n=>{n||(this.ws[wf]=mf.SENT)})}return this.ws[UL]=NL.CLOSING,this.ws[Rf]=!0,!1}else if(r===JA.PING){if(!this.ws[Rf]){let s=new Tf(e);this.ws[yf].socket.write(s.createFrame(JA.PONG)),Ai.ping.hasSubscribers&&Ai.ping.publish({payload:e})}}else r===JA.PONG&&Ai.pong.hasSubscribers&&Ai.pong.publish({payload:e});return!0}get closingInfo(){return this.#A.closeInfo}};kf.exports={ByteParser:El}});var Lf=B((AH,Gf)=>{"use strict";var{WebsocketFrameSend:OL}=$n(),{opcodes:Sf,sendHints:PA}=Yr(),YL=dc(),Nf=Buffer[Symbol.species],hl=class{#e=new YL;#t=!1;#r;constructor(e){this.#r=e}add(e,r,A){if(A!==PA.blob){let o=Uf(e,A);if(!this.#t)this.#r.write(o,r);else{let n={promise:null,callback:r,frame:o};this.#e.push(n)}return}let s={promise:e.arrayBuffer().then(o=>{s.promise=null,s.frame=Uf(o,A)}),callback:r,frame:null};this.#e.push(s),this.#t||this.#o()}async#o(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let r=e.shift();r.promise!==null&&await r.promise,this.#r.write(r.frame,r.callback),r.callback=r.frame=null}this.#t=!1}};function Uf(t,e){return new OL(_L(t,e)).createFrame(e===PA.string?Sf.TEXT:Sf.BINARY)}function _L(t,e){switch(e){case PA.string:return Buffer.from(t);case PA.arrayBuffer:case PA.blob:return new Nf(t);case PA.typedArray:return new Nf(t.buffer,t.byteOffset,t.byteLength)}}Gf.exports={SendQueue:hl}});var Vf=B((sH,Hf)=>{"use strict";var{webidl:G}=Qe(),{URLSerializer:JL}=Te(),{environmentSettingsObject:Mf}=Ge(),{staticPropertyDescriptors:or,states:zs,sentCloseFrameState:PL,sendHints:si}=Yr(),{kWebSocketURL:vf,kReadyState:Ql,kController:xf,kBinaryType:oi,kResponse:Of,kSentClose:HL,kByteParser:VL}=Os(),{isConnecting:qL,isEstablished:WL,isClosing:zL,isValidSubprotocol:ZL,fireEvent:Yf}=Js(),{establishWebSocketConnection:jL,closeWebSocketConnection:_f}=al(),{ByteParser:KL}=Ff(),{kEnumerableProperty:Ze,isBlobLike:Jf}=v(),{getGlobalDispatcher:XL}=fn(),{types:Pf}=C("node:util"),{ErrorEvent:$L,CloseEvent:eM}=OA(),{SendQueue:tM}=Lf(),Pe=class t extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#o="";#s;constructor(e,r=[]){super(),G.util.markAsUncloneable(this);let A="WebSocket constructor";G.argumentLengthCheck(arguments,1,A);let s=G.converters["DOMString or sequence or WebSocketInit"](r,A,"options");e=G.converters.USVString(e,A,"url"),r=s.protocols;let o=Mf.settingsObject.baseUrl,n;try{n=new URL(e,o)}catch(a){throw new DOMException(a,"SyntaxError")}if(n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),n.protocol!=="ws:"&&n.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${n.protocol}`,"SyntaxError");if(n.hash||n.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof r=="string"&&(r=[r]),r.length!==new Set(r.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(r.length>0&&!r.every(a=>ZL(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[vf]=new URL(n.href);let i=Mf.settingsObject;this[xf]=jL(n,r,i,this,(a,c)=>this.#A(a,c),s),this[Ql]=t.CONNECTING,this[HL]=PL.NOT_SENT,this[oi]="blob"}close(e=void 0,r=void 0){G.brandCheck(this,t);let A="WebSocket.close";if(e!==void 0&&(e=G.converters["unsigned short"](e,A,"code",{clamp:!0})),r!==void 0&&(r=G.converters.USVString(r,A,"reason")),e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");let s=0;if(r!==void 0&&(s=Buffer.byteLength(r),s>123))throw new DOMException(`Reason must be less than 123 bytes; received ${s}`,"SyntaxError");_f(this,e,r,s)}send(e){G.brandCheck(this,t);let r="WebSocket.send";if(G.argumentLengthCheck(arguments,1,r),e=G.converters.WebSocketSendData(e,r,"data"),qL(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!WL(this)||zL(this)))if(typeof e=="string"){let A=Buffer.byteLength(e);this.#t+=A,this.#s.add(e,()=>{this.#t-=A},si.string)}else Pf.isArrayBuffer(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.arrayBuffer)):ArrayBuffer.isView(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.typedArray)):Jf(e)&&(this.#t+=e.size,this.#s.add(e,()=>{this.#t-=e.size},si.blob))}get readyState(){return G.brandCheck(this,t),this[Ql]}get bufferedAmount(){return G.brandCheck(this,t),this.#t}get url(){return G.brandCheck(this,t),JL(this[vf])}get extensions(){return G.brandCheck(this,t),this.#o}get protocol(){return G.brandCheck(this,t),this.#r}get onopen(){return G.brandCheck(this,t),this.#e.open}set onopen(e){G.brandCheck(this,t),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onerror(){return G.brandCheck(this,t),this.#e.error}set onerror(e){G.brandCheck(this,t),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}get onclose(){return G.brandCheck(this,t),this.#e.close}set onclose(e){G.brandCheck(this,t),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof e=="function"?(this.#e.close=e,this.addEventListener("close",e)):this.#e.close=null}get onmessage(){return G.brandCheck(this,t),this.#e.message}set onmessage(e){G.brandCheck(this,t),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get binaryType(){return G.brandCheck(this,t),this[oi]}set binaryType(e){G.brandCheck(this,t),e!=="blob"&&e!=="arraybuffer"?this[oi]="blob":this[oi]=e}#A(e,r){this[Of]=e;let A=this[xf]?.dispatcher?.webSocketOptions,s=A?.maxFragments,o=A?.maxPayloadSize,n=new KL(this,r,{maxFragments:s,maxPayloadSize:o});n.on("drain",rM),n.on("error",AM.bind(this)),e.socket.ws=this,this[VL]=n,this.#s=new tM(e.socket),this[Ql]=zs.OPEN;let i=e.headersList.get("sec-websocket-extensions");i!==null&&(this.#o=i);let a=e.headersList.get("sec-websocket-protocol");a!==null&&(this.#r=a),Yf("open",this)}};Pe.CONNECTING=Pe.prototype.CONNECTING=zs.CONNECTING;Pe.OPEN=Pe.prototype.OPEN=zs.OPEN;Pe.CLOSING=Pe.prototype.CLOSING=zs.CLOSING;Pe.CLOSED=Pe.prototype.CLOSED=zs.CLOSED;Object.defineProperties(Pe.prototype,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or,url:Ze,readyState:Ze,bufferedAmount:Ze,onopen:Ze,onerror:Ze,onclose:Ze,close:Ze,onmessage:Ze,binaryType:Ze,send:Ze,extensions:Ze,protocol:Ze,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Pe,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or});G.converters["sequence"]=G.sequenceConverter(G.converters.DOMString);G.converters["DOMString or sequence"]=function(t,e,r){return G.util.Type(t)==="Object"&&Symbol.iterator in t?G.converters["sequence"](t):G.converters.DOMString(t,e,r)};G.converters.WebSocketInit=G.dictionaryConverter([{key:"protocols",converter:G.converters["DOMString or sequence"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:G.converters.any,defaultValue:()=>XL()},{key:"headers",converter:G.nullableConverter(G.converters.HeadersInit)}]);G.converters["DOMString or sequence or WebSocketInit"]=function(t){return G.util.Type(t)==="Object"&&!(Symbol.iterator in t)?G.converters.WebSocketInit(t):{protocols:G.converters["DOMString or sequence"](t)}};G.converters.WebSocketSendData=function(t){if(G.util.Type(t)==="Object"){if(Jf(t))return G.converters.Blob(t,{strict:!1});if(ArrayBuffer.isView(t)||Pf.isArrayBuffer(t))return G.converters.BufferSource(t)}return G.converters.USVString(t)};function rM(){this.ws[Of].socket.resume()}function AM(t){let e,r;t instanceof eM?(e=t.reason,r=t.code):e=t.message,Yf("error",this,()=>new $L("error",{error:t,message:e})),_f(this,r)}Hf.exports={WebSocket:Pe}});var Bl=B((oH,qf)=>{"use strict";function sM(t){return t.indexOf("\0")===-1}function oM(t){if(t.length===0)return!1;for(let e=0;e57)return!1;return!0}function nM(t){return new Promise(e=>{setTimeout(e,t).unref()})}qf.exports={isValidLastEventId:sM,isASCIINumber:oM,delay:nM}});var jf=B((nH,Zf)=>{"use strict";var{Transform:iM}=C("node:stream"),{isASCIINumber:Wf,isValidLastEventId:zf}=Bl(),vt=[239,187,191],Il=10,ni=13,aM=58,cM=32,Cl=class extends iM{state=null;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,r,A){if(e.length===0){A();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===vt[0]){A();return}this.checkBOM=!1,A();return;case 2:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]){A();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,A();return}this.checkBOM=!1;break;default:this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1;break}for(;this.pos0&&(r[s]=o);break}}processEvent(e){e.retry&&Wf(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&zf(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};Zf.exports={EventSourceStream:Cl}});var sp=B((iH,Ap)=>{"use strict";var{pipeline:gM}=C("node:stream"),{fetching:lM}=Ls(),{makeRequest:uM}=UA(),{webidl:xt}=Qe(),{EventSourceStream:EM}=jf(),{parseMIMEType:hM}=Te(),{createFastMessageEvent:QM}=OA(),{isNetworkError:Kf}=Us(),{delay:BM}=Bl(),{kEnumerableProperty:_r}=v(),{environmentSettingsObject:Xf}=Ge(),$f=!1,ep=3e3,Zs=0,tp=1,js=2,IM="anonymous",CM="use-credentials",HA=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#o=Zs;#s=null;#A=null;#n;#i;constructor(e,r={}){super(),xt.util.markAsUncloneable(this);let A="EventSource constructor";xt.argumentLengthCheck(arguments,1,A),$f||($f=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=xt.converters.USVString(e,A,"url"),r=xt.converters.EventSourceInitDict(r,A,"eventSourceInitDict"),this.#n=r.dispatcher,this.#i={lastEventId:"",reconnectionTime:ep};let s=Xf,o;try{o=new URL(e,s.settingsObject.baseUrl),this.#i.origin=o.origin}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=o.href;let n=IM;r.withCredentials&&(n=CM,this.#r=!0);let i={redirect:"follow",keepalive:!0,mode:"cors",credentials:n==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};i.client=Xf.settingsObject,i.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],i.cache="no-store",i.initiator="other",i.urlList=[new URL(this.#t)],this.#s=uM(i),this.#c()}get readyState(){return this.#o}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#o===js)return;this.#o=Zs;let e={request:this.#s,dispatcher:this.#n},r=A=>{Kf(A)&&(this.dispatchEvent(new Event("error")),this.close()),this.#a()};e.processResponseEndOfBody=r,e.processResponse=A=>{if(Kf(A))if(A.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#a();return}let s=A.headersList.get("content-type",!0),o=s!==null?hM(s):"failure",n=o!=="failure"&&o.essence==="text/event-stream";if(A.status!==200||n===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#o=tp,this.dispatchEvent(new Event("open")),this.#i.origin=A.urlList[A.urlList.length-1].origin;let i=new EM({eventSourceSettings:this.#i,push:a=>{this.dispatchEvent(QM(a.type,a.options))}});gM(A.body.stream,i,a=>{a?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#A=lM(e)}async#a(){this.#o!==js&&(this.#o=Zs,this.dispatchEvent(new Event("error")),await BM(this.#i.reconnectionTime),this.#o===Zs&&(this.#i.lastEventId.length&&this.#s.headersList.set("last-event-id",this.#i.lastEventId,!0),this.#c()))}close(){xt.brandCheck(this,t),this.#o!==js&&(this.#o=js,this.#A.abort(),this.#s=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}},rp={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:Zs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:tp,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:js,writable:!1}};Object.defineProperties(HA,rp);Object.defineProperties(HA.prototype,rp);Object.defineProperties(HA.prototype,{close:_r,onerror:_r,onmessage:_r,onopen:_r,readyState:_r,url:_r,withCredentials:_r});xt.converters.EventSourceInitDict=xt.dictionaryConverter([{key:"withCredentials",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:xt.converters.any}]);Ap.exports={EventSource:HA,defaultReconnectionTime:ep}});var ci=B((aH,U)=>{"use strict";var dM=IA(),op=es(),fM=CA(),pM=tB(),mM=dA(),wM=Oc(),yM=RB(),RM=NB(),np=_(),ai=v(),{InvalidArgumentError:ii}=np,VA=CI(),DM=rs(),TM=fg(),bM=eC(),kM=wg(),FM=ig(),SM=gn(),{getGlobalDispatcher:ip,setGlobalDispatcher:NM}=fn(),UM=pn(),GM=Xo(),LM=$o();Object.assign(op.prototype,VA);U.exports.Dispatcher=op;U.exports.Client=dM;U.exports.Pool=fM;U.exports.BalancedPool=pM;U.exports.Agent=mM;U.exports.ProxyAgent=wM;U.exports.EnvHttpProxyAgent=yM;U.exports.RetryAgent=RM;U.exports.RetryHandler=SM;U.exports.DecoratorHandler=UM;U.exports.RedirectHandler=GM;U.exports.createRedirectInterceptor=LM;U.exports.interceptors={redirect:iC(),retry:cC(),dump:lC(),dns:hC()};U.exports.buildConnector=DM;U.exports.errors=np;U.exports.util={parseHeaders:ai.parseHeaders,headerNameToString:ai.headerNameToString};function Ks(t){return(e,r,A)=>{if(typeof r=="function"&&(A=r,r=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new ii("invalid url");if(r!=null&&typeof r!="object")throw new ii("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new ii("invalid opts.path");let n=r.path;r.path.startsWith("/")||(n=`/${n}`),e=new URL(ai.parseOrigin(e).origin+n)}else r||(r=typeof e=="object"?e:{}),e=ai.parseURL(e);let{agent:s,dispatcher:o=ip()}=r;if(s)throw new ii("unsupported opts.agent. Did you mean opts.client?");return t.call(o,{...r,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:r.method||(r.body?"PUT":"GET")},A)}}U.exports.setGlobalDispatcher=NM;U.exports.getGlobalDispatcher=ip;var MM=Ls().fetch;U.exports.fetch=async function(e,r=void 0){try{return await MM(e,r)}catch(A){throw A&&typeof A=="object"&&Error.captureStackTrace(A),A}};U.exports.Headers=Gr().Headers;U.exports.Response=Us().Response;U.exports.Request=UA().Request;U.exports.FormData=cs().FormData;U.exports.File=globalThis.File??C("node:buffer").File;U.exports.FileReader=Fd().FileReader;var{setGlobalOrigin:vM,getGlobalOrigin:xM}=Ya();U.exports.setGlobalOrigin=vM;U.exports.getGlobalOrigin=xM;var{CacheStorage:OM}=Od(),{kConstruct:YM}=Jn();U.exports.caches=new OM(YM);var{deleteCookie:_M,getCookies:JM,getSetCookies:PM,setCookie:HM}=jd();U.exports.deleteCookie=_M;U.exports.getCookies=JM;U.exports.getSetCookies=PM;U.exports.setCookie=HM;var{parseMIMEType:VM,serializeAMimeType:qM}=Te();U.exports.parseMIMEType=VM;U.exports.serializeAMimeType=qM;var{CloseEvent:WM,ErrorEvent:zM,MessageEvent:ZM}=OA();U.exports.WebSocket=Vf().WebSocket;U.exports.CloseEvent=WM;U.exports.ErrorEvent=zM;U.exports.MessageEvent=ZM;U.exports.request=Ks(VA.request);U.exports.stream=Ks(VA.stream);U.exports.pipeline=Ks(VA.pipeline);U.exports.connect=Ks(VA.connect);U.exports.upgrade=Ks(VA.upgrade);U.exports.MockClient=TM;U.exports.MockPool=kM;U.exports.MockAgent=bM;U.exports.mockErrors=FM;var{EventSource:jM}=sp();U.exports.EventSource=jM});var kp=B(Ii=>{"use strict";Object.defineProperty(Ii,"__esModule",{value:!0});Ii.getProxyUrl=Dv;Ii.checkBypass=bp;function Dv(t){let e=t.protocol==="https:";if(bp(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new Bi(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new Bi(`http://${r}`)}else return}function bp(t){if(!t.hostname)return!1;let e=t.hostname;if(Tv(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Tv(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var Bi=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}}});var Sp=B(re=>{"use strict";var bv=re&&re.__createBinding||(Object.create?(function(t,e,r,A){A===void 0&&(A=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,A,s)}):(function(t,e,r,A){A===void 0&&(A=r),t[A]=e[r]})),kv=re&&re.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),pi=re&&re.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var A=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(A[A.length]=s);return A},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var A=t(e),s=0;sae(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ae(this,void 0,void 0,function*(){return new Promise(e=>ae(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};re.HttpClientResponse=fi;function vv(t){return new URL(t).protocol==="https:"}var Ll=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ae(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ae(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ae(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ae(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ae(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ae(this,arguments,void 0,function*(r,A={}){A[ye.Accept]=this._getExistingOrDefaultHeader(A,ye.Accept,Yt.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ae(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&Gv.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===Ke.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Nv.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!Uv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new fi(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Gl.getProxyUrl(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?Fp:Ul;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},ro(this.requestOptions.headers),ro(e||{})):ro(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=ro(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=ro(this.requestOptions.headers)[ye.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[ye.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Gl.getProxyUrl(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||Ul.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?Ci.httpsOverHttps:Ci.httpsOverHttp:a=c?Ci.httpOverHttps:Ci.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new Fp.Agent(i):new Ul.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new Fv.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ae(this,void 0,void 0,function*(){e=Math.min(Lv,e);let r=Mv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ae(this,void 0,void 0,function*(){return new Promise((A,s)=>ae(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===Ke.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new di(g,o);l.result=n.result,s(l)}else A(n)}))})}};re.HttpClient=Ll;var ro=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{})});var rm=B(wi=>{"use strict";Object.defineProperty(wi,"__esModule",{value:!0});wi.format=ox;wi.parse=nx;var rx=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,Kp=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,Ax=/[\\"]/g,sx=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,Xp=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function ox(t){let{type:e,parameters:r}=t;if(!e||!sx.test(e))throw new TypeError(`Invalid type: ${e}`);let A=e;if(r)for(let s of Object.keys(r)){if(!Kp.test(s))throw new TypeError(`Invalid parameter name: ${s}`);A+=`; ${s}=${gx(r[s])}`}return A}function nx(t,e){let r=t.length,A=_l(t,0,r),s=A;A=Yl(t,A,r);let o=Jl(t,s,A),n=t.slice(s,o).toLowerCase(),i=e?.parameters===!1?new Xp:cx(t,A,r);return{type:n,parameters:i}}var $p=32,em=9,tm=59,ix=61,jp=34,ax=92;function cx(t,e,r){let A=new Xp;e:for(;ee;){let A=t.charCodeAt(r-1);if(A!==$p&&A!==em)break;r--}return r}function gx(t){if(Kp.test(t))return t;if(rx.test(t))return`"${t.replace(Ax,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var ZA=B((j2,Tm)=>{"use strict";var Hx="2.0.0",Vx=Number.MAX_SAFE_INTEGER||9007199254740991,qx=16,Wx=250,zx=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Tm.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:qx,MAX_SAFE_BUILD_LENGTH:Wx,MAX_SAFE_INTEGER:Vx,RELEASE_TYPES:zx,SEMVER_SPEC_VERSION:Hx,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var oo=B((K2,bm)=>{"use strict";var Zx=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};bm.exports=Zx});var jA=B((mt,km)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:Au,MAX_SAFE_BUILD_LENGTH:jx,MAX_LENGTH:Kx}=ZA(),Xx=oo();mt=km.exports={};var $x=mt.re=[],eO=mt.safeRe=[],w=mt.src=[],tO=mt.safeSrc=[],y=mt.t={},rO=0,su="[a-zA-Z0-9-]",AO=[["\\s",1],["\\d",Kx],[su,jx]],sO=t=>{for(let[e,r]of AO)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},L=(t,e,r)=>{let A=sO(e),s=rO++;Xx(t,s,e),y[t]=s,w[s]=e,tO[s]=A,$x[s]=new RegExp(e,r?"g":void 0),eO[s]=new RegExp(A,r?"g":void 0)};L("NUMERICIDENTIFIER","0|[1-9]\\d*");L("NUMERICIDENTIFIERLOOSE","\\d+");L("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${su}*`);L("MAINVERSION",`(${w[y.NUMERICIDENTIFIER]})\\.(${w[y.NUMERICIDENTIFIER]})\\.(${w[y.NUMERICIDENTIFIER]})`);L("MAINVERSIONLOOSE",`(${w[y.NUMERICIDENTIFIERLOOSE]})\\.(${w[y.NUMERICIDENTIFIERLOOSE]})\\.(${w[y.NUMERICIDENTIFIERLOOSE]})`);L("PRERELEASEIDENTIFIER",`(?:${w[y.NONNUMERICIDENTIFIER]}|${w[y.NUMERICIDENTIFIER]})`);L("PRERELEASEIDENTIFIERLOOSE",`(?:${w[y.NONNUMERICIDENTIFIER]}|${w[y.NUMERICIDENTIFIERLOOSE]})`);L("PRERELEASE",`(?:-(${w[y.PRERELEASEIDENTIFIER]}(?:\\.${w[y.PRERELEASEIDENTIFIER]})*))`);L("PRERELEASELOOSE",`(?:-?(${w[y.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${w[y.PRERELEASEIDENTIFIERLOOSE]})*))`);L("BUILDIDENTIFIER",`${su}+`);L("BUILD",`(?:\\+(${w[y.BUILDIDENTIFIER]}(?:\\.${w[y.BUILDIDENTIFIER]})*))`);L("FULLPLAIN",`v?${w[y.MAINVERSION]}${w[y.PRERELEASE]}?${w[y.BUILD]}?`);L("FULL",`^${w[y.FULLPLAIN]}$`);L("LOOSEPLAIN",`[v=\\s]*${w[y.MAINVERSIONLOOSE]}${w[y.PRERELEASELOOSE]}?${w[y.BUILD]}?`);L("LOOSE",`^${w[y.LOOSEPLAIN]}$`);L("GTLT","((?:<|>)?=?)");L("XRANGEIDENTIFIERLOOSE",`${w[y.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);L("XRANGEIDENTIFIER",`${w[y.NUMERICIDENTIFIER]}|x|X|\\*`);L("XRANGEPLAIN",`[v=\\s]*(${w[y.XRANGEIDENTIFIER]})(?:\\.(${w[y.XRANGEIDENTIFIER]})(?:\\.(${w[y.XRANGEIDENTIFIER]})(?:${w[y.PRERELEASE]})?${w[y.BUILD]}?)?)?`);L("XRANGEPLAINLOOSE",`[v=\\s]*(${w[y.XRANGEIDENTIFIERLOOSE]})(?:\\.(${w[y.XRANGEIDENTIFIERLOOSE]})(?:\\.(${w[y.XRANGEIDENTIFIERLOOSE]})(?:${w[y.PRERELEASELOOSE]})?${w[y.BUILD]}?)?)?`);L("XRANGE",`^${w[y.GTLT]}\\s*${w[y.XRANGEPLAIN]}$`);L("XRANGELOOSE",`^${w[y.GTLT]}\\s*${w[y.XRANGEPLAINLOOSE]}$`);L("COERCEPLAIN",`(^|[^\\d])(\\d{1,${Au}})(?:\\.(\\d{1,${Au}}))?(?:\\.(\\d{1,${Au}}))?`);L("COERCE",`${w[y.COERCEPLAIN]}(?:$|[^\\d])`);L("COERCEFULL",w[y.COERCEPLAIN]+`(?:${w[y.PRERELEASE]})?(?:${w[y.BUILD]})?(?:$|[^\\d])`);L("COERCERTL",w[y.COERCE],!0);L("COERCERTLFULL",w[y.COERCEFULL],!0);L("LONETILDE","(?:~>?)");L("TILDETRIM",`(\\s*)${w[y.LONETILDE]}\\s+`,!0);mt.tildeTrimReplace="$1~";L("TILDE",`^${w[y.LONETILDE]}${w[y.XRANGEPLAIN]}$`);L("TILDELOOSE",`^${w[y.LONETILDE]}${w[y.XRANGEPLAINLOOSE]}$`);L("LONECARET","(?:\\^)");L("CARETTRIM",`(\\s*)${w[y.LONECARET]}\\s+`,!0);mt.caretTrimReplace="$1^";L("CARET",`^${w[y.LONECARET]}${w[y.XRANGEPLAIN]}$`);L("CARETLOOSE",`^${w[y.LONECARET]}${w[y.XRANGEPLAINLOOSE]}$`);L("COMPARATORLOOSE",`^${w[y.GTLT]}\\s*(${w[y.LOOSEPLAIN]})$|^$`);L("COMPARATOR",`^${w[y.GTLT]}\\s*(${w[y.FULLPLAIN]})$|^$`);L("COMPARATORTRIM",`(\\s*)${w[y.GTLT]}\\s*(${w[y.LOOSEPLAIN]}|${w[y.XRANGEPLAIN]})`,!0);mt.comparatorTrimReplace="$1$2$3";L("HYPHENRANGE",`^\\s*(${w[y.XRANGEPLAIN]})\\s+-\\s+(${w[y.XRANGEPLAIN]})\\s*$`);L("HYPHENRANGELOOSE",`^\\s*(${w[y.XRANGEPLAINLOOSE]})\\s+-\\s+(${w[y.XRANGEPLAINLOOSE]})\\s*$`);L("STAR","(<|>)?=?\\s*\\*");L("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");L("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var Ti=B((X2,Fm)=>{"use strict";var oO=Object.freeze({loose:!0}),nO=Object.freeze({}),iO=t=>t?typeof t!="object"?oO:t:nO;Fm.exports=iO});var ou=B(($2,Um)=>{"use strict";var Sm=/^[0-9]+$/,Nm=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:tNm(e,t);Um.exports={compareIdentifiers:Nm,rcompareIdentifiers:aO}});var Be=B((eV,Lm)=>{"use strict";var bi=oo(),{MAX_LENGTH:Gm,MAX_SAFE_INTEGER:ki}=ZA(),{safeRe:Fi,t:Si}=jA(),cO=Ti(),{compareIdentifiers:nu}=ou(),gO=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let A=0;AGm)throw new TypeError(`version is longer than ${Gm} characters`);bi("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let A=e.trim().match(r.loose?Fi[Si.LOOSE]:Fi[Si.FULL]);if(!A)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+A[1],this.minor=+A[2],this.patch=+A[3],this.major>ki||this.major<0)throw new TypeError("Invalid major version");if(this.minor>ki||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>ki||this.patch<0)throw new TypeError("Invalid patch version");A[4]?this.prerelease=A[4].split(".").map(s=>{if(/^[0-9]+$/.test(s)){let o=+s;if(o>=0&&oe.major?1:this.minore.minor?1:this.patche.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let A=this.prerelease[r],s=e.prerelease[r];if(bi("prerelease compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return nu(A,s)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let A=this.build[r],s=e.build[r];if(bi("build compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return nu(A,s)}while(++r)}inc(e,r,A){if(e.startsWith("pre")){if(!r&&A===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let s=`-${r}`.match(this.options.loose?Fi[Si.PRERELEASELOOSE]:Fi[Si.PRERELEASE]);if(!s||s[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,A);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,A);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,A),this.inc("pre",r,A);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,A),this.inc("pre",r,A);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let s=Number(A)?1:0;if(this.prerelease.length===0)this.prerelease=[s];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&A===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(s)}}if(r){let o=[r,s];if(A===!1&&(o=[r]),gO(this.prerelease,r)){let n=this.prerelease[r.split(".").length];isNaN(n)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};Lm.exports=iu});var ur=B((tV,vm)=>{"use strict";var Mm=Be(),lO=(t,e,r=!1)=>{if(t instanceof Mm)return t;try{return new Mm(t,e)}catch(A){if(!r)return null;throw A}};vm.exports=lO});var Om=B((rV,xm)=>{"use strict";var uO=ur(),EO=(t,e)=>{let r=uO(t,e);return r?r.version:null};xm.exports=EO});var _m=B((AV,Ym)=>{"use strict";var hO=ur(),QO=(t,e)=>{let r=hO(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};Ym.exports=QO});var Hm=B((sV,Pm)=>{"use strict";var Jm=Be(),BO=(t,e,r,A,s)=>{typeof r=="string"&&(s=A,A=r,r=void 0);try{return new Jm(t instanceof Jm?t.version:t,r).inc(e,A,s).version}catch{return null}};Pm.exports=BO});var Wm=B((oV,qm)=>{"use strict";var Vm=ur(),IO=(t,e)=>{let r=Vm(t,null,!0),A=Vm(e,null,!0),s=r.compare(A);if(s===0)return null;let o=s>0,n=o?r:A,i=o?A:r,a=!!n.prerelease.length;if(!!i.prerelease.length&&!a){if(!i.patch&&!i.minor)return"major";if(i.compareMain(n)===0)return i.minor&&!i.patch?"minor":"patch"}let g=a?"pre":"";return r.major!==A.major?g+"major":r.minor!==A.minor?g+"minor":r.patch!==A.patch?g+"patch":"prerelease"};qm.exports=IO});var Zm=B((nV,zm)=>{"use strict";var CO=Be(),dO=(t,e)=>new CO(t,e).major;zm.exports=dO});var Km=B((iV,jm)=>{"use strict";var fO=Be(),pO=(t,e)=>new fO(t,e).minor;jm.exports=pO});var $m=B((aV,Xm)=>{"use strict";var mO=Be(),wO=(t,e)=>new mO(t,e).patch;Xm.exports=wO});var tw=B((cV,ew)=>{"use strict";var yO=ur(),RO=(t,e)=>{let r=yO(t,e);return r&&r.prerelease.length?r.prerelease:null};ew.exports=RO});var Xe=B((gV,Aw)=>{"use strict";var rw=Be(),DO=(t,e,r)=>new rw(t,r).compare(new rw(e,r));Aw.exports=DO});var ow=B((lV,sw)=>{"use strict";var TO=Xe(),bO=(t,e,r)=>TO(e,t,r);sw.exports=bO});var iw=B((uV,nw)=>{"use strict";var kO=Xe(),FO=(t,e)=>kO(t,e,!0);nw.exports=FO});var Ni=B((EV,cw)=>{"use strict";var aw=Be(),SO=(t,e,r)=>{let A=new aw(t,r),s=new aw(e,r);return A.compare(s)||A.compareBuild(s)};cw.exports=SO});var lw=B((hV,gw)=>{"use strict";var NO=Ni(),UO=(t,e)=>t.sort((r,A)=>NO(r,A,e));gw.exports=UO});var Ew=B((QV,uw)=>{"use strict";var GO=Ni(),LO=(t,e)=>t.sort((r,A)=>GO(A,r,e));uw.exports=LO});var no=B((BV,hw)=>{"use strict";var MO=Xe(),vO=(t,e,r)=>MO(t,e,r)>0;hw.exports=vO});var Ui=B((IV,Qw)=>{"use strict";var xO=Xe(),OO=(t,e,r)=>xO(t,e,r)<0;Qw.exports=OO});var au=B((CV,Bw)=>{"use strict";var YO=Xe(),_O=(t,e,r)=>YO(t,e,r)===0;Bw.exports=_O});var cu=B((dV,Iw)=>{"use strict";var JO=Xe(),PO=(t,e,r)=>JO(t,e,r)!==0;Iw.exports=PO});var Gi=B((fV,Cw)=>{"use strict";var HO=Xe(),VO=(t,e,r)=>HO(t,e,r)>=0;Cw.exports=VO});var Li=B((pV,dw)=>{"use strict";var qO=Xe(),WO=(t,e,r)=>qO(t,e,r)<=0;dw.exports=WO});var gu=B((mV,fw)=>{"use strict";var zO=au(),ZO=cu(),jO=no(),KO=Gi(),XO=Ui(),$O=Li(),eY=(t,e,r,A)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return zO(t,r,A);case"!=":return ZO(t,r,A);case">":return jO(t,r,A);case">=":return KO(t,r,A);case"<":return XO(t,r,A);case"<=":return $O(t,r,A);default:throw new TypeError(`Invalid operator: ${e}`)}};fw.exports=eY});var mw=B((wV,pw)=>{"use strict";var tY=Be(),rY=ur(),{safeRe:Mi,t:vi}=jA(),AY=(t,e)=>{if(t instanceof tY)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?Mi[vi.COERCEFULL]:Mi[vi.COERCE]);else{let a=e.includePrerelease?Mi[vi.COERCERTLFULL]:Mi[vi.COERCERTL],c;for(;(c=a.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||c.index+c[0].length!==r.index+r[0].length)&&(r=c),a.lastIndex=c.index+c[1].length+c[2].length;a.lastIndex=-1}if(r===null)return null;let A=r[2],s=r[3]||"0",o=r[4]||"0",n=e.includePrerelease&&r[5]?`-${r[5]}`:"",i=e.includePrerelease&&r[6]?`+${r[6]}`:"";return rY(`${A}.${s}.${o}${n}${i}`,e)};pw.exports=AY});var yw=B((yV,ww)=>{"use strict";var sY=ur(),oY=ZA(),nY=Be(),iY=(t,e,r)=>{if(!oY.RELEASE_TYPES.includes(e))return null;let A=aY(t,r);return A&&cY(A,e)},aY=(t,e)=>{let r=t instanceof nY?t.version:t;return sY(r,e)},cY=(t,e)=>{if(gY(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},gY=t=>t.startsWith("pre");ww.exports=iY});var Dw=B((RV,Rw)=>{"use strict";var lu=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let s=this.map.keys().next().value;this.delete(s)}this.map.set(e,r)}return this}};Rw.exports=lu});var $e=B((DV,Fw)=>{"use strict";var lY=/\s+/g,uu=class t{constructor(e,r){if(r=EY(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof Eu)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(lY," "),this.set=this.raw.split("||").map(A=>this.parseRange(A.trim())).filter(A=>A.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let A=this.set[0];if(this.set=this.set.filter(s=>!bw(s[0])),this.set.length===0)this.set=[A];else if(this.set.length>1){for(let s of this.set)if(s.length===1&&mY(s[0])){this.set=[s];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e0&&(this.formatted+="||");let r=this.set[e];for(let A=0;A0&&(this.formatted+=" "),this.formatted+=r[A].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(pY,"");let A=((this.options.includePrerelease&&dY)|(this.options.loose&&fY))+":"+e,s=Tw.get(A);if(s)return s;let o=this.options.loose,n=o?Re[Ie.HYPHENRANGELOOSE]:Re[Ie.HYPHENRANGE];e=e.replace(n,UY(this.options.includePrerelease)),X("hyphen replace",e),e=e.replace(Re[Ie.COMPARATORTRIM],BY),X("comparator trim",e),e=e.replace(Re[Ie.TILDETRIM],IY),X("tilde trim",e),e=e.replace(Re[Ie.CARETTRIM],CY),X("caret trim",e);let i=e.split(" ").map(l=>wY(l,this.options)).join(" ").split(/\s+/).map(l=>NY(l,this.options));o&&(i=i.filter(l=>(X("loose invalid filter",l,this.options),!!l.match(Re[Ie.COMPARATORLOOSE])))),X("range list",i);let a=new Map,c=i.map(l=>new Eu(l,this.options));for(let l of c){if(bw(l))return[l];a.set(l.value,l)}a.size>1&&a.has("")&&a.delete("");let g=[...a.values()];return Tw.set(A,g),g}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(A=>kw(A,r)&&e.set.some(s=>kw(s,r)&&A.every(o=>s.every(n=>o.intersects(n,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new hY(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",mY=t=>t.value==="",kw=(t,e)=>{let r=!0,A=t.slice(),s=A.pop();for(;r&&A.length;)r=A.every(o=>s.intersects(o,e)),s=A.pop();return r},wY=(t,e)=>(t=t.replace(Re[Ie.BUILD],""),X("comp",t,e),t=TY(t,e),X("caret",t),t=RY(t,e),X("tildes",t),t=kY(t,e),X("xrange",t),t=SY(t,e),X("stars",t),t),ue=t=>!t||t.toLowerCase()==="x"||t==="*",yY=(t,e,r)=>ue(t)&&!ue(e)||ue(e)&&r&&!ue(r),RY=(t,e)=>t.trim().split(/\s+/).map(r=>DY(r,e)).join(" "),DY=(t,e)=>{let r=e.loose?Re[Ie.TILDELOOSE]:Re[Ie.TILDE],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("tilde",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:a?(X("replaceTilde pr",a),c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`):c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`,X("tilde return",c),c})},TY=(t,e)=>t.trim().split(/\s+/).map(r=>bY(r,e)).join(" "),bY=(t,e)=>{X("caret",t,e);let r=e.loose?Re[Ie.CARETLOOSE]:Re[Ie.CARET],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("caret",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?o==="0"?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.0${A} <${+o+1}.0.0-0`:a?(X("replaceCaret pr",a),o==="0"?n==="0"?c=`>=${o}.${n}.${i}-${a} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i}-${a} <${+o+1}.0.0-0`):(X("no pr"),o==="0"?n==="0"?c=`>=${o}.${n}.${i} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i} <${+o+1}.0.0-0`),X("caret return",c),c})},kY=(t,e)=>(X("replaceXRanges",t,e),t.split(/\s+/).map(r=>FY(r,e)).join(" ")),FY=(t,e)=>{t=t.trim();let r=e.loose?Re[Ie.XRANGELOOSE]:Re[Ie.XRANGE];return t.replace(r,(A,s,o,n,i,a)=>{if(X("xRange",t,A,s,o,n,i,a),yY(o,n,i))return t;let c=ue(o),g=c||ue(n),l=g||ue(i),u=l;return s==="="&&u&&(s=""),a=e.includePrerelease?"-0":"",c?s===">"||s==="<"?A="<0.0.0-0":A="*":s&&u?(g&&(n=0),i=0,s===">"?(s=">=",g?(o=+o+1,n=0,i=0):(n=+n+1,i=0)):s==="<="&&(s="<",g?o=+o+1:n=+n+1),s==="<"&&(a="-0"),A=`${s+o}.${n}.${i}${a}`):g?A=`>=${o}.0.0${a} <${+o+1}.0.0-0`:l&&(A=`>=${o}.${n}.0${a} <${o}.${+n+1}.0-0`),X("xRange return",A),A})},SY=(t,e)=>(X("replaceStars",t,e),t.trim().replace(Re[Ie.STAR],"")),NY=(t,e)=>(X("replaceGTE0",t,e),t.trim().replace(Re[e.includePrerelease?Ie.GTE0PRE:Ie.GTE0],"")),UY=t=>(e,r,A,s,o,n,i,a,c,g,l,u)=>(ue(A)?r="":ue(s)?r=`>=${A}.0.0${t?"-0":""}`:ue(o)?r=`>=${A}.${s}.0${t?"-0":""}`:n?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,ue(c)?a="":ue(g)?a=`<${+c+1}.0.0-0`:ue(l)?a=`<${c}.${+g+1}.0-0`:u?a=`<=${c}.${g}.${l}-${u}`:t?a=`<${c}.${g}.${+l+1}-0`:a=`<=${a}`,`${r} ${a}`.trim()),GY=(t,e,r)=>{for(let A=0;A0){let s=t[A].semver;if(s.major===e.major&&s.minor===e.minor&&s.patch===e.patch)return!0}return!1}return!0}});var io=B((TV,Mw)=>{"use strict";var ao=Symbol("SemVer ANY"),Bu=class t{static get ANY(){return ao}constructor(e,r){if(r=Sw(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),Qu("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ao?this.value="":this.value=this.operator+this.semver.version,Qu("comp",this)}parse(e){let r=this.options.loose?Nw[Uw.COMPARATORLOOSE]:Nw[Uw.COMPARATOR],A=e.match(r);if(!A)throw new TypeError(`Invalid comparator: ${e}`);this.operator=A[1]!==void 0?A[1]:"",this.operator==="="&&(this.operator=""),A[2]?this.semver=new Gw(A[2],this.options.loose):this.semver=ao}toString(){return this.value}test(e){if(Qu("Comparator.test",e,this.options.loose),this.semver===ao||e===ao)return!0;if(typeof e=="string")try{e=new Gw(e,this.options)}catch{return!1}return hu(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Lw(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new Lw(this.value,r).test(e.semver):(r=Sw(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||hu(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||hu(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Mw.exports=Bu;var Sw=Ti(),{safeRe:Nw,t:Uw}=jA(),hu=gu(),Qu=oo(),Gw=Be(),Lw=$e()});var co=B((bV,vw)=>{"use strict";var LY=$e(),MY=(t,e,r)=>{try{e=new LY(e,r)}catch{return!1}return e.test(t)};vw.exports=MY});var Ow=B((kV,xw)=>{"use strict";var vY=$e(),xY=(t,e)=>new vY(t,e).set.map(r=>r.map(A=>A.value).join(" ").trim().split(" "));xw.exports=xY});var _w=B((FV,Yw)=>{"use strict";var OY=Be(),YY=$e(),_Y=(t,e,r)=>{let A=null,s=null,o=null;try{o=new YY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===-1)&&(A=n,s=new OY(A,r))}),A};Yw.exports=_Y});var Pw=B((SV,Jw)=>{"use strict";var JY=Be(),PY=$e(),HY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new PY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===1)&&(A=n,s=new JY(A,r))}),A};Jw.exports=HY});var qw=B((NV,Vw)=>{"use strict";var Iu=Be(),VY=$e(),Hw=no(),qY=(t,e)=>{t=new VY(t,e);let r=new Iu("0.0.0");if(t.test(r)||(r=new Iu("0.0.0-0"),t.test(r)))return r;r=null;for(let A=0;A{let i=new Iu(n.semver.version);switch(n.operator){case">":i.prerelease.length===0?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!o||Hw(i,o))&&(o=i);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${n.operator}`)}}),o&&(!r||Hw(r,o))&&(r=o)}return r&&t.test(r)?r:null};Vw.exports=qY});var zw=B((UV,Ww)=>{"use strict";var WY=$e(),zY=(t,e)=>{try{return new WY(t,e).range||"*"}catch{return null}};Ww.exports=zY});var xi=B((GV,Xw)=>{"use strict";var ZY=Be(),Kw=io(),{ANY:jY}=Kw,KY=$e(),XY=co(),Zw=no(),jw=Ui(),$Y=Li(),e_=Gi(),t_=(t,e,r,A)=>{t=new ZY(t,A),e=new KY(e,A);let s,o,n,i,a;switch(r){case">":s=Zw,o=$Y,n=jw,i=">",a=">=";break;case"<":s=jw,o=e_,n=Zw,i="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(XY(t,e,A))return!1;for(let c=0;c{E.semver===jY&&(E=new Kw(">=0.0.0")),l=l||E,u=u||E,s(E.semver,l.semver,A)?l=E:n(E.semver,u.semver,A)&&(u=E)}),l.operator===i||l.operator===a||(!u.operator||u.operator===i)&&o(t,u.semver))return!1;if(u.operator===a&&n(t,u.semver))return!1}return!0};Xw.exports=t_});var ey=B((LV,$w)=>{"use strict";var r_=xi(),A_=(t,e,r)=>r_(t,e,">",r);$w.exports=A_});var ry=B((MV,ty)=>{"use strict";var s_=xi(),o_=(t,e,r)=>s_(t,e,"<",r);ty.exports=o_});var oy=B((vV,sy)=>{"use strict";var Ay=$e(),n_=(t,e,r)=>(t=new Ay(t,r),e=new Ay(e,r),t.intersects(e,r));sy.exports=n_});var iy=B((xV,ny)=>{"use strict";var i_=co(),a_=Xe();ny.exports=(t,e,r)=>{let A=[],s=null,o=null,n=t.sort((g,l)=>a_(g,l,r));for(let g of n)i_(g,e,r)?(o=g,s||(s=g)):(o&&A.push([s,o]),o=null,s=null);s&&A.push([s,null]);let i=[];for(let[g,l]of A)g===l?i.push(g):!l&&g===n[0]?i.push("*"):l?g===n[0]?i.push(`<=${l}`):i.push(`${g} - ${l}`):i.push(`>=${g}`);let a=i.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return a.length{"use strict";var ay=$e(),fu=io(),{ANY:Cu}=fu,du=co(),pu=Xe(),c_=(t,e,r={})=>{if(t===e)return!0;t=new ay(t,r),e=new ay(e,r);let A=!1;e:for(let s of t.set){for(let o of e.set){let n=l_(s,o,r);if(A=A||n!==null,n)continue e}if(A)return!1}return!0},g_=[new fu(">=0.0.0-0")],cy=[new fu(">=0.0.0")],l_=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===Cu){if(e.length===1&&e[0].semver===Cu)return!0;r.includePrerelease?t=g_:t=cy}if(e.length===1&&e[0].semver===Cu){if(r.includePrerelease)return!0;e=cy}let A=new Set,s,o;for(let E of t)E.operator===">"||E.operator===">="?s=gy(s,E,r):E.operator==="<"||E.operator==="<="?o=ly(o,E,r):A.add(E.semver);if(A.size>1)return null;let n;if(s&&o){if(n=pu(s.semver,o.semver,r),n>0)return null;if(n===0&&(s.operator!==">="||o.operator!=="<="))return null}for(let E of A){if(s&&!du(E,String(s),r)||o&&!du(E,String(o),r))return null;for(let h of e)if(!du(E,String(h),r))return!1;return!0}let i,a,c,g,l=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,u=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1;l&&l.prerelease.length===1&&o.operator==="<"&&l.prerelease[0]===0&&(l=!1);for(let E of e){if(g=g||E.operator===">"||E.operator===">=",c=c||E.operator==="<"||E.operator==="<=",s){if(u&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===u.major&&E.semver.minor===u.minor&&E.semver.patch===u.patch&&(u=!1),E.operator===">"||E.operator===">="){if(i=gy(s,E,r),i===E&&i!==s)return!1}else if(s.operator===">="&&!E.test(s.semver))return!1}if(o){if(l&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===l.major&&E.semver.minor===l.minor&&E.semver.patch===l.patch&&(l=!1),E.operator==="<"||E.operator==="<="){if(a=ly(o,E,r),a===E&&a!==o)return!1}else if(o.operator==="<="&&!E.test(o.semver))return!1}if(!E.operator&&(o||s)&&n!==0)return!1}return!(s&&c&&!o&&n!==0||o&&g&&!s&&n!==0||u||l)},gy=(t,e,r)=>{if(!t)return e;let A=pu(t.semver,e.semver,r);return A>0?t:A<0||e.operator===">"&&t.operator===">="?e:t},ly=(t,e,r)=>{if(!t)return e;let A=pu(t.semver,e.semver,r);return A<0?t:A>0||e.operator==="<"&&t.operator==="<="?e:t};uy.exports=c_});var wu=B((YV,By)=>{"use strict";var mu=jA(),hy=ZA(),u_=Be(),Qy=ou(),E_=ur(),h_=Om(),Q_=_m(),B_=Hm(),I_=Wm(),C_=Zm(),d_=Km(),f_=$m(),p_=tw(),m_=Xe(),w_=ow(),y_=iw(),R_=Ni(),D_=lw(),T_=Ew(),b_=no(),k_=Ui(),F_=au(),S_=cu(),N_=Gi(),U_=Li(),G_=gu(),L_=mw(),M_=yw(),v_=io(),x_=$e(),O_=co(),Y_=Ow(),__=_w(),J_=Pw(),P_=qw(),H_=zw(),V_=xi(),q_=ey(),W_=ry(),z_=oy(),Z_=iy(),j_=Ey();By.exports={parse:E_,valid:h_,clean:Q_,inc:B_,diff:I_,major:C_,minor:d_,patch:f_,prerelease:p_,compare:m_,rcompare:w_,compareLoose:y_,compareBuild:R_,sort:D_,rsort:T_,gt:b_,lt:k_,eq:F_,neq:S_,gte:N_,lte:U_,cmp:G_,coerce:L_,truncate:M_,Comparator:v_,Range:x_,satisfies:O_,toComparators:Y_,maxSatisfying:__,minSatisfying:J_,minVersion:P_,validRange:H_,outside:V_,gtr:q_,ltr:W_,intersects:z_,simplifyRange:Z_,subset:j_,SemVer:u_,re:mu.re,src:mu.src,tokens:mu.t,SEMVER_SPEC_VERSION:hy.SEMVER_SPEC_VERSION,RELEASE_TYPES:hy.RELEASE_TYPES,compareIdentifiers:Qy.compareIdentifiers,rcompareIdentifiers:Qy.rcompareIdentifiers}});import*as hr from"node:process";import sJ from"node:path";import*as ku from"os";function KA(t){return t==null?"":typeof t=="string"||t instanceof String?t:JSON.stringify(t)}function Tu(t){return Object.keys(t).length?{title:t.title,file:t.file,line:t.startLine,endLine:t.endLine,col:t.startColumn,endColumn:t.endColumn}:{}}function Hi(t,e,r){let A=new Pi(t,e,r);process.stdout.write(A.toString()+ku.EOL)}var bu="::",Pi=class{constructor(e,r,A){e||(e="missing.command"),this.command=e,this.properties=r,this.message=A}toString(){let e=bu+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let r=!0;for(let A in this.properties)if(this.properties.hasOwnProperty(A)){let s=this.properties[A];s&&(r?r=!1:e+=",",e+=`${A}=${Gy(s)}`)}}return e+=`${bu}${Uy(this.message)}`,e}};function Uy(t){return KA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function Gy(t){return KA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}import*as yp from"os";import*as eo from"http";import*as pl from"https";function Vi(t){let e=t.protocol==="https:";if(Ly(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new uo(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new uo(`http://${r}`)}else return}function Ly(t){if(!t.hostname)return!1;let e=t.hostname;if(My(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function My(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var uo=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}};var nr=Qr(zi(),1),ap=Qr(ci(),1),ie=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},je;(function(t){t[t.OK=200]="OK",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.ResourceMoved=302]="ResourceMoved",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.SwitchProxy=306]="SwitchProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.TooManyRequests=429]="TooManyRequests",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout"})(je||(je={}));var we;(function(t){t.Accept="accept",t.ContentType="content-type"})(we||(we={}));var Ot;(function(t){t.ApplicationJson="application/json"})(Ot||(Ot={}));var KM=[je.MovedPermanently,je.ResourceMoved,je.SeeOther,je.TemporaryRedirect,je.PermanentRedirect],XM=[je.BadGateway,je.ServiceUnavailable,je.GatewayTimeout],$M=["OPTIONS","GET","DELETE","HEAD"],ev=10,tv=5,dl=class t extends Error{constructor(e,r){super(e),this.name="HttpClientError",this.statusCode=r,Object.setPrototypeOf(this,t.prototype)}},fl=class{constructor(e){this.message=e}readBody(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};var $s=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ie(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ie(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ie(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ie(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ie(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ie(this,arguments,void 0,function*(r,A={}){A[we.Accept]=this._getExistingOrDefaultHeader(A,we.Accept,Ot.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ie(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&$M.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===je.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&KM.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!XM.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new fl(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Vi(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?pl:eo;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},Xs(this.requestOptions.headers),Xs(e||{})):Xs(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=Xs(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=Xs(this.requestOptions.headers)[we.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[we.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Vi(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||eo.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?nr.httpsOverHttps:nr.httpsOverHttp:a=c?nr.httpOverHttps:nr.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new pl.Agent(i):new eo.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new ap.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ie(this,void 0,void 0,function*(){e=Math.min(ev,e);let r=tv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ie(this,void 0,void 0,function*(){return new Promise((A,s)=>ie(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===je.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new dl(g,o);l.result=n.result,s(l)}else A(n)}))})}},Xs=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{});import{EOL as Av}from"os";import{constants as cp,promises as sv}from"fs";var ml=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{access:ov,appendFile:nv,writeFile:iv}=sv,gp="GITHUB_STEP_SUMMARY";var wl=class{constructor(){this._buffer=""}filePath(){return ml(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[gp];if(!e)throw new Error(`Unable to find environment variable for $${gp}. Check if your runtime environment supports job summaries.`);try{yield ov(e,cp.R_OK|cp.W_OK)}catch{throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,r,A={}){let s=Object.entries(A).map(([o,n])=>` ${o}="${n}"`).join("");return r?`<${e}${s}>${r}`:`<${e}${s}>`}write(e){return ml(this,void 0,void 0,function*(){let r=!!e?.overwrite,A=yield this.filePath();return yield(r?iv:nv)(A,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return ml(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(e,r=!1){return this._buffer+=e,r?this.addEOL():this}addEOL(){return this.addRaw(Av)}addCodeBlock(e,r){let A=Object.assign({},r&&{lang:r}),s=this.wrap("pre",this.wrap("code",e),A);return this.addRaw(s).addEOL()}addList(e,r=!1){let A=r?"ol":"ul",s=e.map(n=>this.wrap("li",n)).join(""),o=this.wrap(A,s);return this.addRaw(o).addEOL()}addTable(e){let r=e.map(s=>{let o=s.map(n=>{if(typeof n=="string")return this.wrap("td",n);let{header:i,data:a,colspan:c,rowspan:g}=n,l=i?"th":"td",u=Object.assign(Object.assign({},c&&{colspan:c}),g&&{rowspan:g});return this.wrap(l,a,u)}).join("");return this.wrap("tr",o)}).join(""),A=this.wrap("table",r);return this.addRaw(A).addEOL()}addDetails(e,r){let A=this.wrap("details",this.wrap("summary",e)+r);return this.addRaw(A).addEOL()}addImage(e,r,A){let{width:s,height:o}=A||{},n=Object.assign(Object.assign({},s&&{width:s}),o&&{height:o}),i=this.wrap("img",null,Object.assign({src:e,alt:r},n));return this.addRaw(i).addEOL()}addHeading(e,r){let A=`h${r}`,s=["h1","h2","h3","h4","h5","h6"].includes(A)?A:"h1",o=this.wrap(s,e);return this.addRaw(o).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,r){let A=Object.assign({},r&&{cite:r}),s=this.wrap("blockquote",e,A);return this.addRaw(s).addEOL()}addLink(e,r){let A=this.wrap("a",e,{href:r});return this.addRaw(A).addEOL()}},CH=new wl;import wp from"os";import*as to from"os";import*as bl from"events";import*as fp from"child_process";import*as pp from"path";import{ok as Qv}from"assert";import*as pt from"path";import*as li from"fs";import*as ar from"path";var up=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{chmod:av,copyFile:cv,lstat:gv,mkdir:Ep,open:pH,readdir:hp,rename:lv,rm:Qp,rmdir:mH,stat:gi,symlink:uv,unlink:Ev}=li.promises,ir=process.platform==="win32";var wH=li.constants.O_RDONLY;function yl(t){return up(this,void 0,void 0,function*(){try{yield gi(t)}catch(e){if(e.code==="ENOENT")return!1;throw e}return!0})}function ui(t){if(t=hv(t),!t)throw new Error('isRooted() parameter "p" cannot be empty');return ir?t.startsWith("\\")||/^[A-Z]:/i.test(t):t.startsWith("/")}function Rl(t,e){return up(this,void 0,void 0,function*(){let r;try{r=yield gi(t)}catch(s){s.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${s}`)}if(r&&r.isFile()){if(ir){let s=ar.extname(t).toUpperCase();if(e.some(o=>o.toUpperCase()===s))return t}else if(lp(r))return t}let A=t;for(let s of e){t=A+s,r=void 0;try{r=yield gi(t)}catch(o){o.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${o}`)}if(r&&r.isFile()){if(ir){try{let o=ar.dirname(t),n=ar.basename(t).toUpperCase();for(let i of yield hp(o))if(n===i.toUpperCase()){t=ar.join(o,i);break}}catch(o){console.log(`Unexpected error attempting to determine the actual case of the file '${t}': ${o}`)}return t}else if(lp(r))return t}}return""})}function hv(t){return t=t||"",ir?(t=t.replace(/\//g,"\\"),t.replace(/\\\\+/g,"\\")):t.replace(/\/\/+/g,"/")}function lp(t){return(t.mode&1)>0||(t.mode&8)>0&&process.getgid!==void 0&&t.gid===process.getgid()||(t.mode&64)>0&&process.getuid!==void 0&&t.uid===process.getuid()}var Ei=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function Ip(t){return Ei(this,void 0,void 0,function*(){if(ir&&/[*"<>|]/.test(t))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');try{yield Qp(t,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(e){throw new Error(`File was unable to be removed ${e}`)}})}function Dl(t){return Ei(this,void 0,void 0,function*(){Qv(t,"a path argument must be provided"),yield Ep(t,{recursive:!0})})}function Jr(t,e){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");if(e){let A=yield Jr(t,!1);if(!A)throw ir?new Error(`Unable to locate executable file: ${t}. 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.`):new Error(`Unable to locate executable file: ${t}. 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 A}let r=yield Bv(t);return r&&r.length>0?r[0]:""})}function Bv(t){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");let e=[];if(ir&&process.env.PATHEXT)for(let s of process.env.PATHEXT.split(pt.delimiter))s&&e.push(s);if(ui(t)){let s=yield Rl(t,e);return s?[s]:[]}if(t.includes(pt.sep))return[];let r=[];if(process.env.PATH)for(let s of process.env.PATH.split(pt.delimiter))s&&r.push(s);let A=[];for(let s of r){let o=yield Rl(pt.join(s,t),e);o&&A.push(o)}return A})}import{setTimeout as Iv}from"timers";var dp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},hi=process.platform==="win32",Qi=class extends bl.EventEmitter{constructor(e,r,A){if(super(),!e)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=e,this.args=r||[],this.options=A||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,r){let A=this._getSpawnFileName(),s=this._getSpawnArgs(e),o=r?"":"[command]";if(hi)if(this._isCmdFile()){o+=A;for(let n of s)o+=` ${n}`}else if(e.windowsVerbatimArguments){o+=`"${A}"`;for(let n of s)o+=` ${n}`}else{o+=this._windowsQuoteCmdArg(A);for(let n of s)o+=` ${this._windowsQuoteCmdArg(n)}`}else{o+=A;for(let n of s)o+=` ${n}`}return o}_processLineBuffer(e,r,A){try{let s=r+e.toString(),o=s.indexOf(to.EOL);for(;o>-1;){let n=s.substring(0,o);A(n),s=s.substring(o+to.EOL.length),o=s.indexOf(to.EOL)}return s}catch(s){return this._debug(`error processing line. Failed with error ${s}`),""}}_getSpawnFileName(){return hi&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(e){if(hi&&this._isCmdFile()){let r=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let A of this.args)r+=" ",r+=e.windowsVerbatimArguments?A:this._windowsQuoteCmdArg(A);return r+='"',[r]}return this.args}_endsWith(e,r){return e.endsWith(r)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return'""';let r=[" "," ","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],A=!1;for(let n of e)if(r.some(i=>i===n)){A=!0;break}if(!A)return e;let s='"',o=!0;for(let n=e.length;n>0;n--)s+=e[n-1],o&&e[n-1]==="\\"?s+="\\":e[n-1]==='"'?(o=!0,s+='"'):o=!1;return s+='"',s.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e)return'""';if(!e.includes(" ")&&!e.includes(" ")&&!e.includes('"'))return e;if(!e.includes('"')&&!e.includes("\\"))return`"${e}"`;let r='"',A=!0;for(let s=e.length;s>0;s--)r+=e[s-1],A&&e[s-1]==="\\"?r+="\\":e[s-1]==='"'?(A=!0,r+="\\"):A=!1;return r+='"',r.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};let r={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return r.outStream=e.outStream||process.stdout,r.errStream=e.errStream||process.stderr,r}_getSpawnOptions(e,r){e=e||{};let A={};return A.cwd=e.cwd,A.env=e.env,A.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(A.argv0=`"${r}"`),A}exec(){return dp(this,void 0,void 0,function*(){return!ui(this.toolPath)&&(this.toolPath.includes("/")||hi&&this.toolPath.includes("\\"))&&(this.toolPath=pp.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield Jr(this.toolPath,!0),new Promise((e,r)=>dp(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let c of this.args)this._debug(` ${c}`);let A=this._cloneExecOptions(this.options);!A.silent&&A.outStream&&A.outStream.write(this._getCommandString(A)+to.EOL);let s=new Tl(A,this.toolPath);if(s.on("debug",c=>{this._debug(c)}),this.options.cwd&&!(yield yl(this.options.cwd)))return r(new Error(`The cwd: ${this.options.cwd} does not exist!`));let o=this._getSpawnFileName(),n=fp.spawn(o,this._getSpawnArgs(A),this._getSpawnOptions(this.options,o)),i="";n.stdout&&n.stdout.on("data",c=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(c),!A.silent&&A.outStream&&A.outStream.write(c),i=this._processLineBuffer(c,i,g=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(g)})});let a="";if(n.stderr&&n.stderr.on("data",c=>{s.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(c),!A.silent&&A.errStream&&A.outStream&&(A.failOnStdErr?A.errStream:A.outStream).write(c),a=this._processLineBuffer(c,a,g=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(g)})}),n.on("error",c=>{s.processError=c.message,s.processExited=!0,s.processClosed=!0,s.CheckComplete()}),n.on("exit",c=>{s.processExitCode=c,s.processExited=!0,this._debug(`Exit code ${c} received from tool '${this.toolPath}'`),s.CheckComplete()}),n.on("close",c=>{s.processExitCode=c,s.processExited=!0,s.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),s.CheckComplete()}),s.on("done",(c,g)=>{i.length>0&&this.emit("stdline",i),a.length>0&&this.emit("errline",a),n.removeAllListeners(),c?r(c):e(g)}),this.options.input){if(!n.stdin)throw new Error("child process missing stdin");n.stdin.end(this.options.input)}}))})}};function mp(t){let e=[],r=!1,A=!1,s="";function o(n){A&&n!=='"'&&(s+="\\"),s+=n,A=!1}for(let n=0;n0&&(e.push(s),s="");continue}o(i)}return s.length>0&&e.push(s.trim()),e}var Tl=class t extends bl.EventEmitter{constructor(e,r){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!r)throw new Error("toolPath must not be empty");this.options=e,this.toolPath=r,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=Iv(t.HandleTimeout,this.delay,this)))}_debug(e){this.emit("debug",e)}_setResult(){let e;this.processExited&&(this.processError?e=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}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let r=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(r)}e._setResult()}}};var dv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function cr(t,e,r){return dv(this,void 0,void 0,function*(){let A=mp(t);if(A.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let s=A[0];return e=A.slice(1).concat(e||[]),new Qi(s,e,r).exec()})}var FH=wp.platform(),SH=wp.arch();var kl;(function(t){t[t.Success=0]="Success",t[t.Failure=1]="Failure"})(kl||(kl={}));function Rp(t,e){let r=process.env[`INPUT_${t.replace(/ /g,"_").toUpperCase()}`]||"";if(e&&e.required&&!r)throw new Error(`Input required and not supplied: ${t}`);return e&&e.trimWhitespace===!1?r:r.trim()}function Dp(t){process.exitCode=kl.Failure,mv(t)}function Fl(){return process.env.RUNNER_DEBUG==="1"}function Ue(t){Hi("debug",{},t)}function mv(t,e={}){Hi("error",Tu(e),t instanceof Error?t.toString():t)}function Sl(t){process.stdout.write(t+yp.EOL)}import{readFileSync as wv,existsSync as yv}from"fs";import{EOL as Rv}from"os";var qA=class{constructor(){var e,r,A;if(this.payload={},process.env.GITHUB_EVENT_PATH)if(yv(process.env.GITHUB_EVENT_PATH))this.payload=JSON.parse(wv(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}));else{let s=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${s} does not exist${Rv}`)}this.eventName=process.env.GITHUB_EVENT_NAME,this.sha=process.env.GITHUB_SHA,this.ref=process.env.GITHUB_REF,this.workflow=process.env.GITHUB_WORKFLOW,this.action=process.env.GITHUB_ACTION,this.actor=process.env.GITHUB_ACTOR,this.job=process.env.GITHUB_JOB,this.runAttempt=parseInt(process.env.GITHUB_RUN_ATTEMPT,10),this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10),this.runId=parseInt(process.env.GITHUB_RUN_ID,10),this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:"https://api.github.com",this.serverUrl=(r=process.env.GITHUB_SERVER_URL)!==null&&r!==void 0?r:"https://github.com",this.graphqlUrl=(A=process.env.GITHUB_GRAPHQL_URL)!==null&&A!==void 0?A:"https://api.github.com/graphql"}get issue(){let e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){let[e,r]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:r}}if(this.payload.repository)return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name};throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}};var Ml=Qr(Sp(),1),Np=Qr(ci(),1),xv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function Up(t,e){if(!t&&!e.auth)throw new Error("Parameter token or opts.auth is required");if(t&&e.auth)throw new Error("Parameters token and opts.auth may not both be specified");return typeof e.auth=="string"?e.auth:`token ${t}`}function Gp(t){return new Ml.HttpClient().getAgent(t)}function Ov(t){return new Ml.HttpClient().getAgentDispatcher(t)}function Lp(t){let e=Ov(t);return(A,s)=>xv(this,void 0,void 0,function*(){return(0,Np.fetch)(A,Object.assign(Object.assign({},s),{dispatcher:e}))})}function Mp(){return process.env.GITHUB_API_URL||"https://api.github.com"}function vl(t){var e;let r=(e=process.env.ACTIONS_ORCHESTRATION_ID)===null||e===void 0?void 0:e.trim();if(r){let s=`actions_orchestration_id/${r.replace(/[^a-z0-9_.-]/gi,"_")}`;return t?.includes(s)?t:`${t?`${t} `:""}${s}`}return t}function gr(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}function mi(t,e,r,A){if(typeof r!="function")throw new Error("method for before hook must be a function");return A||(A={}),Array.isArray(e)?e.reverse().reduce((s,o)=>mi.bind(null,t,o,s,A),r)():Promise.resolve().then(()=>t.registry[e]?t.registry[e].reduce((s,o)=>o.hook.bind(null,s,A),r)():r(A))}function vp(t,e,r,A){let s=A;t.registry[r]||(t.registry[r]=[]),e==="before"&&(A=(o,n)=>Promise.resolve().then(s.bind(null,n)).then(o.bind(null,n))),e==="after"&&(A=(o,n)=>{let i;return Promise.resolve().then(o.bind(null,n)).then(a=>(i=a,s(i,n))).then(()=>i)}),e==="error"&&(A=(o,n)=>Promise.resolve().then(o.bind(null,n)).catch(i=>s(i,n))),t.registry[r].push({hook:A,orig:s})}function xp(t,e,r){if(!t.registry[e])return;let A=t.registry[e].map(s=>s.orig).indexOf(r);A!==-1&&t.registry[e].splice(A,1)}var Op=Function.bind,Yp=Op.bind(Op);function _p(t,e,r){let A=Yp(xp,null).apply(null,r?[e,r]:[e]);t.api={remove:A},t.remove=A,["before","error","after","wrap"].forEach(s=>{let o=r?[e,s,r]:[e,s];t[s]=t.api[s]=Yp(vp,null).apply(null,o)})}function _v(){let t=Symbol("Singular"),e={registry:{}},r=mi.bind(null,e,t);return _p(r,e,t),r}function Jv(){let t={registry:{}},e=mi.bind(null,t);return _p(e,t),e}var Jp={Singular:_v,Collection:Jv};var Pv="0.0.0-development",Hv=`octokit-endpoint.js/${Pv} ${gr()}`,Vv={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Hv},mediaType:{format:""}};function qv(t){return t?Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{}):{}}function Wv(t){if(typeof t!="object"||t===null||Object.prototype.toString.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);if(e===null)return!0;let r=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.call(r)===Function.prototype.call(t)}function Vp(t,e){let r=Object.assign({},t);return Object.keys(e).forEach(A=>{Wv(e[A])?A in t?r[A]=Vp(t[A],e[A]):Object.assign(r,{[A]:e[A]}):Object.assign(r,{[A]:e[A]})}),r}function Pp(t){for(let e in t)t[e]===void 0&&delete t[e];return t}function Ol(t,e,r){if(typeof e=="string"){let[s,o]=e.split(" ");r=Object.assign(o?{method:s,url:o}:{url:s},r)}else r=Object.assign({},e);r.headers=qv(r.headers),Pp(r),Pp(r.headers);let A=Vp(t||{},r);return r.url==="/graphql"&&(t&&t.mediaType.previews?.length&&(A.mediaType.previews=t.mediaType.previews.filter(s=>!A.mediaType.previews.includes(s)).concat(A.mediaType.previews)),A.mediaType.previews=(A.mediaType.previews||[]).map(s=>s.replace(/-preview/,""))),A}function zv(t,e){let r=/\?/.test(t)?"&":"?",A=Object.keys(e);return A.length===0?t:t+r+A.map(s=>s==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${s}=${encodeURIComponent(e[s])}`).join("&")}var Zv=/\{[^{}}]+\}/g;function jv(t){return t.replace(/(?:^\W+)|(?:(?r.concat(A),[]):[]}function Hp(t,e){let r={__proto__:null};for(let A of Object.keys(t))e.indexOf(A)===-1&&(r[A]=t[A]);return r}function qp(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function zA(t){return encodeURIComponent(t).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Ao(t,e,r){return e=t==="+"||t==="#"?qp(e):zA(e),r?zA(r)+"="+e:e}function WA(t){return t!=null}function xl(t){return t===";"||t==="&"||t==="?"}function Xv(t,e,r,A){var s=t[r],o=[];if(WA(s)&&s!=="")if(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||typeof s=="boolean")s=s.toString(),A&&A!=="*"&&(s=s.substring(0,parseInt(A,10))),o.push(Ao(e,s,xl(e)?r:""));else if(A==="*")Array.isArray(s)?s.filter(WA).forEach(function(n){o.push(Ao(e,n,xl(e)?r:""))}):Object.keys(s).forEach(function(n){WA(s[n])&&o.push(Ao(e,s[n],n))});else{let n=[];Array.isArray(s)?s.filter(WA).forEach(function(i){n.push(Ao(e,i))}):Object.keys(s).forEach(function(i){WA(s[i])&&(n.push(zA(i)),n.push(Ao(e,s[i].toString())))}),xl(e)?o.push(zA(r)+"="+n.join(",")):n.length!==0&&o.push(n.join(","))}else e===";"?WA(s)&&o.push(zA(r)):s===""&&(e==="&"||e==="?")?o.push(zA(r)+"="):s===""&&o.push("");return o}function $v(t){return{expand:ex.bind(null,t)}}function ex(t,e){var r=["+","#",".","/",";","?","&"];return t=t.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(A,s,o){if(s){let i="",a=[];if(r.indexOf(s.charAt(0))!==-1&&(i=s.charAt(0),s=s.substr(1)),s.split(/,/g).forEach(function(c){var g=/([^:\*]*)(?::(\d+)|(\*))?/.exec(c);a.push(Xv(e,i,g[1],g[2]||g[3]))}),i&&i!=="+"){var n=",";return i==="?"?n="&":i!=="#"&&(n=i),(a.length!==0?i:"")+a.join(n)}else return a.join(",")}else return qp(o)}),t==="/"?t:t.replace(/\/$/,"")}function Wp(t){let e=t.method.toUpperCase(),r=(t.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),A=Object.assign({},t.headers),s,o=Hp(t,["method","baseUrl","url","headers","request","mediaType"]),n=Kv(r);r=$v(r).expand(o),/^http/.test(r)||(r=t.baseUrl+r);let i=Object.keys(t).filter(g=>n.includes(g)).concat("baseUrl"),a=Hp(o,i);if(!/application\/octet-stream/i.test(A.accept)&&(t.mediaType.format&&(A.accept=A.accept.split(/,/).map(g=>g.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${t.mediaType.format}`)).join(",")),r.endsWith("/graphql")&&t.mediaType.previews?.length)){let g=A.accept.match(/(?{let u=t.mediaType.format?`.${t.mediaType.format}`:"+json";return`application/vnd.github.${l}-preview${u}`}).join(",")}return["GET","HEAD"].includes(e)?r=zv(r,a):"data"in a?s=a.data:Object.keys(a).length&&(s=a),!A["content-type"]&&typeof s<"u"&&(A["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof s>"u"&&(s=""),Object.assign({method:e,url:r,headers:A},typeof s<"u"?{body:s}:null,t.request?{request:t.request}:null)}function tx(t,e,r){return Wp(Ol(t,e,r))}function zp(t,e){let r=Ol(t,e),A=tx.bind(null,r);return Object.assign(A,{DEFAULTS:r,defaults:zp.bind(null,r),merge:Ol.bind(null,r),parse:Wp})}var Zp=zp(null,Vv);var Em=Qr(rm(),1);var lx=/^-?\d+$/,Ri=/^-?\d+n+$/,lr=JSON.stringify,Pl=JSON.parse,im=/^-?\d+n$/,Am=/([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g,sm=/([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g,Hl=t=>t===void 0||typeof t=="function"||typeof t=="symbol",Vl=t=>t!==null&&typeof t=="object"&&t.constructor&&t.constructor.name==="RawJSON",ux=(t,e,r)=>{let A="";typeof r=="number"?A=" ".repeat(Math.min(10,Math.max(0,Math.floor(r)))):typeof r=="string"&&(A=r.slice(0,10));let s=typeof e=="function",o=Array.isArray(e)?new Set(e.map(String)):null,n=(h,d,I)=>(I!==null&&typeof I=="object"&&typeof I.toJSON=="function"&&(I=I.toJSON(d)),typeof I=="string"&&Ri.test(I)?I+"n":typeof I=="bigint"?"rawJSON"in JSON?JSON.rawJSON(I.toString()):I.toString()+"n":(s&&(I=e.call(h,d,I)),I!==null&&typeof I=="object"&&(I instanceof Number||I instanceof String||I instanceof Boolean)&&(I=I.valueOf()),I)),i=n({"":t},"",t);if(Hl(i))return;let a=i===null||typeof i!="object",c=Vl(i);if(a||c)return lr(i);let g=[],l=0,u=[{parent:{"":i},key:"",val:i,isArray:Array.isArray(i),keys:Array.isArray(i)?null:Object.keys(i),index:0,first:!0}],E=new WeakSet([i]);for(;u.length>0;){let h=u[u.length-1];h.index===0&&(g.push(h.isArray?"[":"{"),l++);let d=!1;if(h.isArray)if(h.index=h.keys.length&&u[u.length-1]===h&&(d=!0)}d&&(l--,!h.first&&A&&g.push(` -`+A.repeat(l)),g.push(h.isArray?"]":"}"),E.delete(h.val),u.pop())}return g.join("")},am=(t,e,r)=>{try{return"rawJSON"in JSON?lr(t,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r):t?lr(t,(i,a)=>typeof a=="string"&&Ri.test(a)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r).replace(Am,"$1$2$3").replace(sm,"$1$2$3"):lr(t,e,r)}catch(A){if(A instanceof RangeError){let s=ux(t,e,r);return s===void 0?void 0:"rawJSON"in JSON?s:s.replace(Am,"$1$2$3").replace(sm,"$1$2$3")}throw A}},yi=new Map,Ex=()=>{let t=JSON.parse.toString();if(yi.has(t))return yi.get(t);try{let e=JSON.parse("1",(r,A,s)=>!!s?.source&&s.source==="1");return yi.set(t,e),e}catch{return yi.set(t,!1),!1}},hx=(t,e,r,A)=>typeof e=="string"&&im.test(e)?BigInt(e.slice(0,-1)):typeof e=="string"&&Ri.test(e)?e.slice(0,-1):typeof A=="function"?A(t,e,r):e,Qx=(t,e)=>JSON.parse(t,(r,A,s)=>{let o=typeof A=="number",n=A>Number.MAX_SAFE_INTEGER||A{let r={"":t},A=[{parent:r,key:"",visited:!1}];for(;A.length>0;){let s=A[A.length-1];if(s.visited){let{parent:o,key:n}=s,i=o[n];typeof i=="string"&&(im.test(i)?i=BigInt(i.slice(0,-1)):Ri.test(i)&&(i=i.slice(0,-1))),typeof e=="function"&&(i=e.call(o,n,i)),i===void 0?delete o[n]:o[n]=i,A.pop()}else{s.visited=!0;let o=s.parent[s.key];if(o!==null&&typeof o=="object"){let i=Object.keys(o);for(let a=i.length-1;a>=0;a--)A.push({parent:o,key:i[a],visited:!1})}}}return r[""]},nm=t=>t.replace(Bx,(e,r,A,s)=>{let o=e[0]==='"';if(o&&Ix.test(e))return e.substring(0,e.length-1)+'n"';let i=A||s,a=r&&(r.length{if(!t)return Pl(t,e);try{if(Ex())return Qx(t,e);let r=nm(t);return Pl(r,(A,s,o)=>hx(A,s,o,e))}catch(r){if(r instanceof RangeError){let A=nm(t),s=Pl(A);return Cx(s,e)}throw r}};var Pr=class extends Error{name;status;request;response;constructor(e,r,A){super(e,{cause:A.cause}),this.name="HttpError",this.status=Number.parseInt(r),Number.isNaN(this.status)&&(this.status=0);"response"in A&&(this.response=A.response);let s=Object.assign({},A.request);A.request.headers.authorization&&(s.headers=Object.assign({},A.request.headers,{authorization:A.request.headers.authorization.replace(/(?"";async function um(t){let e=t.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let r=t.request?.log||console,A=t.request?.parseSuccessResponseBody!==!1,s=px(t.body)||Array.isArray(t.body)?am(t.body):t.body,o=Object.fromEntries(Object.entries(t.headers).map(([l,u])=>[l,String(u)])),n;try{n=await e(t.url,{method:t.method,body:s,redirect:t.request?.redirect,headers:o,signal:t.request?.signal,...t.body&&{duplex:"half"}})}catch(l){let u="Unknown Error";if(l instanceof Error){if(l.name==="AbortError")throw l.status=500,l;u=l.message,l.name==="TypeError"&&"cause"in l&&(l.cause instanceof Error?u=l.cause.message:typeof l.cause=="string"&&(u=l.cause))}let E=new Pr(u,500,{request:t});throw E.cause=l,E}let i=n.status,a=n.url,c={};for(let[l,u]of n.headers)c[l]=u;let g={url:a,status:i,headers:c,data:""};if("deprecation"in c){let l=c.link&&c.link.match(/<([^<>]+)>; rel="deprecation"/),u=l&&l.pop();r.warn(`[@octokit/request] "${t.method} ${t.url}" is deprecated. It is scheduled to be removed on ${c.sunset}${u?`. See ${u}`:""}`)}if(i===204||i===205)return g;if(t.method==="HEAD"){if(i<400)return g;throw new Pr(n.statusText,i,{response:g,request:t})}if(i===304)throw g.data=await ql(n),new Pr("Not modified",i,{response:g,request:t});if(i>=400)throw g.data=await ql(n),new Pr(wx(g.data),i,{response:g,request:t});return g.data=A?await ql(n):n.body,g}async function ql(t){let e=t.headers.get("content-type");if(!e)return t.text().catch(lm);let r=(0,Em.parse)(e);if(mx(r)){let A="";try{return A=await t.text(),gm(A)}catch{return A}}else return r.type.startsWith("text/")||r.parameters.charset?.toLowerCase()==="utf-8"?t.text().catch(lm):t.arrayBuffer().catch(()=>new ArrayBuffer(0))}function mx(t){return t.type==="application/json"||t.type==="application/scim+json"}function wx(t){if(typeof t=="string")return t;if(t instanceof ArrayBuffer)return"Unknown error";if(typeof t=="object"&&t!==null&&"message"in t){let e=t,r="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(A=>JSON.stringify(A)).join(", ")}${r}`:`${e.message}${r}`}return`Unknown error: ${JSON.stringify(t)}`}function Wl(t,e){let r=t.defaults(e);return Object.assign(function(s,o){let n=r.merge(s,o);if(!n.request||!n.request.hook)return um(r.parse(n));let i=(a,c)=>um(r.parse(r.merge(a,c)));return Object.assign(i,{endpoint:r,defaults:Wl.bind(null,r)}),n.request.hook(i,n)},{endpoint:r,defaults:Wl.bind(null,r)})}var so=Wl(Zp,fx);var yx="0.0.0-development";function Rx(t){return`Request failed due to following response errors: +`.trim())}};tC.exports=Tg});var fn=B((pP,nC)=>{"use strict";var AC=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:jS}=Y(),KS=CA();oC()===void 0&&sC(new KS);function sC(t){if(!t||typeof t.dispatch!="function")throw new jS("Argument agent must implement Agent");Object.defineProperty(globalThis,AC,{value:t,writable:!0,enumerable:!1,configurable:!1})}function oC(){return globalThis[AC]}nC.exports={setGlobalDispatcher:sC,getGlobalDispatcher:oC}});var pn=B((wP,iC)=>{"use strict";iC.exports=class{#e;constructor(e){if(typeof e!="object"||e===null)throw new TypeError("handler must be an object");this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}});var cC=B((yP,aC)=>{"use strict";var XS=Xo();aC.exports=t=>{let e=t?.maxRedirections;return r=>function(s,o){let{maxRedirections:n=e,...i}=s;if(!n)return r(s,o);let a=new XS(r,n,s,o);return r(i,a)}}});var lC=B((RP,gC)=>{"use strict";var $S=gn();gC.exports=t=>e=>function(A,s){return e(A,new $S({...A,retryOptions:{...t,...A.retryOptions}},{handler:s,dispatch:e}))}});var EC=B((DP,uC)=>{"use strict";var eN=M(),{InvalidArgumentError:tN,RequestAbortedError:rN}=Y(),AN=pn(),bg=class extends AN{#e=1024*1024;#t=null;#r=!1;#o=!1;#s=0;#A=null;#n=null;constructor({maxSize:e},r){if(super(r),e!=null&&(!Number.isFinite(e)||e<1))throw new tN("maxSize must be a number greater than 0");this.#e=e??this.#e,this.#n=r}onConnect(e){this.#t=e,this.#n.onConnect(this.#i.bind(this))}#i(e){this.#o=!0,this.#A=e}onHeaders(e,r,A,s){let n=eN.parseHeaders(r)["content-length"];if(n!=null&&n>this.#e)throw new rN(`Response size (${n}) larger than maxSize (${this.#e})`);return this.#o?!0:this.#n.onHeaders(e,r,A,s)}onError(e){this.#r||(e=this.#A??e,this.#n.onError(e))}onData(e){return this.#s=this.#s+e.length,this.#s>=this.#e&&(this.#r=!0,this.#o?this.#n.onError(this.#A):this.#n.onComplete([])),!0}onComplete(e){if(!this.#r){if(this.#o){this.#n.onError(this.reason);return}this.#n.onComplete(e)}}};function sN({maxSize:t}={maxSize:1024*1024}){return e=>function(A,s){let{dumpMaxSize:o=t}=A,n=new bg({maxSize:o},s);return e(A,n)}}uC.exports=sN});var BC=B((TP,QC)=>{"use strict";var{isIP:oN}=require("node:net"),{lookup:nN}=require("node:dns"),iN=pn(),{InvalidArgumentError:kA,InformationalError:aN}=Y(),hC=Math.pow(2,31)-1,kg=class{#e=0;#t=0;#r=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#o,this.pick=e.pick??this.#s}get full(){return this.#r.size===this.#t}runLookup(e,r,A){let s=this.#r.get(e.hostname);if(s==null&&this.full){A(null,e.origin);return}let o={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...r.dns,maxTTL:this.#e,maxItems:this.#t};if(s==null)this.lookup(e,o,(n,i)=>{if(n||i==null||i.length===0){A(n??new aN("No DNS entries found"));return}this.setRecords(e,i);let a=this.#r.get(e.hostname),c=this.pick(e,a,o.affinity),g;typeof c.port=="number"?g=`:${c.port}`:e.port!==""?g=`:${e.port}`:g="",A(null,`${e.protocol}//${c.family===6?`[${c.address}]`:c.address}${g}`)});else{let n=this.pick(e,s,o.affinity);if(n==null){this.#r.delete(e.hostname),this.runLookup(e,r,A);return}let i;typeof n.port=="number"?i=`:${n.port}`:e.port!==""?i=`:${e.port}`:i="",A(null,`${e.protocol}//${n.family===6?`[${n.address}]`:n.address}${i}`)}}#o(e,r,A){nN(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(s,o)=>{if(s)return A(s);let n=new Map;for(let i of o)n.set(`${i.address}:${i.family}`,i);A(null,n.values())})}#s(e,r,A){let s=null,{records:o,offset:n}=r,i;if(this.dualStack?(A==null&&(n==null||n===hC?(r.offset=0,A=4):(r.offset++,A=(r.offset&1)===1?6:4)),o[A]!=null&&o[A].ips.length>0?i=o[A]:i=o[A===4?6:4]):i=o[A],i==null||i.ips.length===0)return s;i.offset==null||i.offset===hC?i.offset=0:i.offset++;let a=i.offset%i.ips.length;return s=i.ips[a]??null,s==null?s:Date.now()-s.timestamp>s.ttl?(i.ips.splice(a,1),this.pick(e,r,A)):s}setRecords(e,r){let A=Date.now(),s={records:{4:null,6:null}};for(let o of r){o.timestamp=A,typeof o.ttl=="number"?o.ttl=Math.min(o.ttl,this.#e):o.ttl=this.#e;let n=s.records[o.family]??{ips:[]};n.ips.push(o),s.records[o.family]=n}this.#r.set(e.hostname,s)}getHandler(e,r){return new Fg(this,e,r)}},Fg=class extends iN{#e=null;#t=null;#r=null;#o=null;#s=null;constructor(e,{origin:r,handler:A,dispatch:s},o){super(A),this.#s=r,this.#o=A,this.#t={...o},this.#e=e,this.#r=s}onError(e){switch(e.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#s,this.#t,(r,A)=>{if(r)return this.#o.onError(r);let s={...this.#t,origin:A};this.#r(s,this)});return}this.#o.onError(e);return}case"ENOTFOUND":this.#e.deleteRecord(this.#s);default:this.#o.onError(e);break}}};QC.exports=t=>{if(t?.maxTTL!=null&&(typeof t?.maxTTL!="number"||t?.maxTTL<0))throw new kA("Invalid maxTTL. Must be a positive number");if(t?.maxItems!=null&&(typeof t?.maxItems!="number"||t?.maxItems<1))throw new kA("Invalid maxItems. Must be a positive number and greater than zero");if(t?.affinity!=null&&t?.affinity!==4&&t?.affinity!==6)throw new kA("Invalid affinity. Must be either 4 or 6");if(t?.dualStack!=null&&typeof t?.dualStack!="boolean")throw new kA("Invalid dualStack. Must be a boolean");if(t?.lookup!=null&&typeof t?.lookup!="function")throw new kA("Invalid lookup. Must be a function");if(t?.pick!=null&&typeof t?.pick!="function")throw new kA("Invalid pick. Must be a function");let e=t?.dualStack??!0,r;e?r=t?.affinity??null:r=t?.affinity??4;let A={maxTTL:t?.maxTTL??1e4,lookup:t?.lookup??null,pick:t?.pick??null,dualStack:e,affinity:r,maxItems:t?.maxItems??1/0},s=new kg(A);return o=>function(i,a){let c=i.origin.constructor===URL?i.origin:new URL(i.origin);return oN(c.hostname)!==0?o(i,a):(s.runLookup(c,i,(g,l)=>{if(g)return a.onError(g);let u=null;u={...i,servername:c.hostname,origin:l,headers:{host:c.hostname,...i.headers}},o(u,s.getHandler({origin:c,dispatch:o,handler:a},i))}),!0)}}});var Ur=B((bP,wC)=>{"use strict";var{kConstruct:cN}=$(),{kEnumerableProperty:FA}=M(),{iteratorMixin:gN,isValidHeaderName:Fs,isValidHeaderValue:CC}=Ge(),{webidl:O}=Qe(),Sg=require("node:assert"),mn=require("node:util"),ge=Symbol("headers map"),xe=Symbol("headers map sorted");function IC(t){return t===10||t===13||t===9||t===32}function dC(t){let e=0,r=t.length;for(;r>e&&IC(t.charCodeAt(r-1));)--r;for(;r>e&&IC(t.charCodeAt(e));)++e;return e===0&&r===t.length?t:t.substring(e,r)}function fC(t,e){if(Array.isArray(e))for(let r=0;r>","record"]})}function Ng(t,e,r){if(r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"});if(mC(t)==="immutable")throw new TypeError("immutable");return Ug(t).append(e,r,!1)}function pC(t,e){return t[0]>1),r[c][0]<=g[0]?a=c+1:i=c;if(o!==c){for(n=o;n>a;)r[n]=r[--n];r[a]=g}}if(!A.next().done)throw new TypeError("Unreachable");return r}else{let A=0;for(let{0:s,1:{value:o}}of this[ge])r[A++]=[s,o],Sg(o!==null);return r.sort(pC)}}},it=class t{#e;#t;constructor(e=void 0){O.util.markAsUncloneable(this),e!==cN&&(this.#t=new wn,this.#e="none",e!==void 0&&(e=O.converters.HeadersInit(e,"Headers contructor","init"),fC(this,e)))}append(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.append");let A="Headers.append";return e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),Ng(this,e,r)}delete(e){if(O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.delete"),e=O.converters.ByteString(e,"Headers.delete","name"),!Fs(e))throw O.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(e,!1)&&this.#t.delete(e,!1)}get(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.get(e,!1)}has(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.contains(e,!1)}set(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.set");let A="Headers.set";if(e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:A,value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(e,r,!1)}getSetCookie(){O.brandCheck(this,t);let e=this.#t.cookies;return e?[...e]:[]}get[xe](){if(this.#t[xe])return this.#t[xe];let e=[],r=this.#t.toSortedArray(),A=this.#t.cookies;if(A===null||A.length===1)return this.#t[xe]=r;for(let s=0;s>"](t,e,r,A.bind(t)):O.converters["record"](t,e,r)}throw O.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};wC.exports={fill:fC,compareHeaderName:pC,Headers:it,HeadersList:wn,getHeadersGuard:mC,setHeadersGuard:lN,setHeadersList:uN,getHeadersList:Ug}});var Ns=B((kP,LC)=>{"use strict";var{Headers:kC,HeadersList:yC,fill:EN,getHeadersGuard:hN,setHeadersGuard:FC,setHeadersList:SC}=Ur(),{extractBody:RC,cloneBody:QN,mixinBody:BN,hasFinalizationRegistry:NC,streamRegistry:UC,bodyUnusable:IN}=cA(),Gg=M(),DC=require("node:util"),{kEnumerableProperty:Oe}=Gg,{isValidReasonPhrase:CN,isCancelled:dN,isAborted:fN,isBlobLike:pN,serializeJavascriptValueToJSONString:mN,isErrorLike:wN,isomorphicEncode:yN,environmentSettingsObject:RN}=Ge(),{redirectStatusSet:DN,nullBodyStatus:TN}=rs(),{kState:te,kHeaders:Lt}=Pt(),{webidl:L}=Qe(),{FormData:bN}=as(),{URLSerializer:TC}=Te(),{kConstruct:Rn}=$(),Lg=require("node:assert"),{types:kN}=require("node:util"),FN=new TextEncoder("utf-8"),Gr=class t{static error(){return Ss(Dn(),"immutable")}static json(e,r={}){L.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=L.converters.ResponseInit(r));let A=FN.encode(mN(e)),s=RC(A),o=Ss(SA({}),"response");return bC(o,r,{body:s[0],type:"application/json"}),o}static redirect(e,r=302){L.argumentLengthCheck(arguments,1,"Response.redirect"),e=L.converters.USVString(e),r=L.converters["unsigned short"](r);let A;try{A=new URL(e,RN.settingsObject.baseUrl)}catch(n){throw new TypeError(`Failed to parse URL from ${e}`,{cause:n})}if(!DN.has(r))throw new RangeError(`Invalid status code ${r}`);let s=Ss(SA({}),"immutable");s[te].status=r;let o=yN(TC(A));return s[te].headersList.append("location",o,!0),s}constructor(e=null,r={}){if(L.util.markAsUncloneable(this),e===Rn)return;e!==null&&(e=L.converters.BodyInit(e)),r=L.converters.ResponseInit(r),this[te]=SA({}),this[Lt]=new kC(Rn),FC(this[Lt],"response"),SC(this[Lt],this[te].headersList);let A=null;if(e!=null){let[s,o]=RC(e);A={body:s,type:o}}bC(this,r,A)}get type(){return L.brandCheck(this,t),this[te].type}get url(){L.brandCheck(this,t);let e=this[te].urlList,r=e[e.length-1]??null;return r===null?"":TC(r,!0)}get redirected(){return L.brandCheck(this,t),this[te].urlList.length>1}get status(){return L.brandCheck(this,t),this[te].status}get ok(){return L.brandCheck(this,t),this[te].status>=200&&this[te].status<=299}get statusText(){return L.brandCheck(this,t),this[te].statusText}get headers(){return L.brandCheck(this,t),this[Lt]}get body(){return L.brandCheck(this,t),this[te].body?this[te].body.stream:null}get bodyUsed(){return L.brandCheck(this,t),!!this[te].body&&Gg.isDisturbed(this[te].body.stream)}clone(){if(L.brandCheck(this,t),IN(this))throw L.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let e=Mg(this[te]);return NC&&this[te].body?.stream&&UC.register(this,new WeakRef(this[te].body.stream)),Ss(e,hN(this[Lt]))}[DC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${DC.formatWithOptions(r,A)}`}};BN(Gr);Object.defineProperties(Gr.prototype,{type:Oe,url:Oe,status:Oe,ok:Oe,redirected:Oe,statusText:Oe,headers:Oe,clone:Oe,body:Oe,bodyUsed:Oe,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Gr,{json:Oe,redirect:Oe,error:Oe});function Mg(t){if(t.internalResponse)return GC(Mg(t.internalResponse),t.type);let e=SA({...t,body:null});return t.body!=null&&(e.body=QN(e,t.body)),e}function SA(t){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...t,headersList:t?.headersList?new yC(t?.headersList):new yC,urlList:t?.urlList?[...t.urlList]:[]}}function Dn(t){let e=wN(t);return SA({type:"error",status:0,error:e?t:new Error(t&&String(t)),aborted:t&&t.name==="AbortError"})}function SN(t){return t.type==="error"&&t.status===0}function yn(t,e){return e={internalResponse:t,...e},new Proxy(t,{get(r,A){return A in e?e[A]:r[A]},set(r,A,s){return Lg(!(A in e)),r[A]=s,!0}})}function GC(t,e){if(e==="basic")return yn(t,{type:"basic",headersList:t.headersList});if(e==="cors")return yn(t,{type:"cors",headersList:t.headersList});if(e==="opaque")return yn(t,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(e==="opaqueredirect")return yn(t,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});Lg(!1)}function NN(t,e=null){return Lg(dN(t)),fN(t)?Dn(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:e})):Dn(Object.assign(new DOMException("Request was cancelled."),{cause:e}))}function bC(t,e,r){if(e.status!==null&&(e.status<200||e.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in e&&e.statusText!=null&&!CN(String(e.statusText)))throw new TypeError("Invalid statusText");if("status"in e&&e.status!=null&&(t[te].status=e.status),"statusText"in e&&e.statusText!=null&&(t[te].statusText=e.statusText),"headers"in e&&e.headers!=null&&EN(t[Lt],e.headers),r){if(TN.includes(t.status))throw L.errors.exception({header:"Response constructor",message:`Invalid response status code ${t.status}`});t[te].body=r.body,r.type!=null&&!t[te].headersList.contains("content-type",!0)&&t[te].headersList.append("content-type",r.type,!0)}}function Ss(t,e){let r=new Gr(Rn);return r[te]=t,r[Lt]=new kC(Rn),SC(r[Lt],t.headersList),FC(r[Lt],e),NC&&t.body?.stream&&UC.register(r,new WeakRef(t.body.stream)),r}L.converters.ReadableStream=L.interfaceConverter(ReadableStream);L.converters.FormData=L.interfaceConverter(bN);L.converters.URLSearchParams=L.interfaceConverter(URLSearchParams);L.converters.XMLHttpRequestBodyInit=function(t,e,r){return typeof t=="string"?L.converters.USVString(t,e,r):pN(t)?L.converters.Blob(t,e,r,{strict:!1}):ArrayBuffer.isView(t)||kN.isArrayBuffer(t)?L.converters.BufferSource(t,e,r):Gg.isFormDataLike(t)?L.converters.FormData(t,e,r,{strict:!1}):t instanceof URLSearchParams?L.converters.URLSearchParams(t,e,r):L.converters.DOMString(t,e,r)};L.converters.BodyInit=function(t,e,r){return t instanceof ReadableStream?L.converters.ReadableStream(t,e,r):t?.[Symbol.asyncIterator]?t:L.converters.XMLHttpRequestBodyInit(t,e,r)};L.converters.ResponseInit=L.dictionaryConverter([{key:"status",converter:L.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:L.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:L.converters.HeadersInit}]);LC.exports={isNetworkError:SN,makeNetworkError:Dn,makeResponse:SA,makeAppropriateNetworkError:NN,filterResponse:GC,Response:Gr,cloneResponse:Mg,fromInnerResponse:Ss}});var OC=B((FP,xC)=>{"use strict";var{kConnected:MC,kSize:vC}=$(),vg=class{constructor(e){this.value=e}deref(){return this.value[MC]===0&&this.value[vC]===0?void 0:this.value}},xg=class{constructor(e){this.finalizer=e}register(e,r){e.on&&e.on("disconnect",()=>{e[MC]===0&&e[vC]===0&&this.finalizer(r)})}unregister(e){}};xC.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:vg,FinalizationRegistry:xg}):{WeakRef,FinalizationRegistry}}});var NA=B((SP,ed)=>{"use strict";var{extractBody:UN,mixinBody:GN,cloneBody:LN,bodyUnusable:YC}=cA(),{Headers:ZC,fill:MN,HeadersList:Fn,setHeadersGuard:Yg,getHeadersGuard:vN,setHeadersList:jC,getHeadersList:_C}=Ur(),{FinalizationRegistry:xN}=OC()(),bn=M(),JC=require("node:util"),{isValidHTTPToken:ON,sameOrigin:PC,environmentSettingsObject:Tn}=Ge(),{forbiddenMethodsSet:YN,corsSafeListedMethodsSet:_N,referrerPolicy:JN,requestRedirect:PN,requestMode:HN,requestCredentials:VN,requestCache:qN,requestDuplex:WN}=rs(),{kEnumerableProperty:le,normalizedMethodRecordsBase:zN,normalizedMethodRecords:ZN}=bn,{kHeaders:Ye,kSignal:kn,kState:K,kDispatcher:Og}=Pt(),{webidl:S}=Qe(),{URLSerializer:jN}=Te(),{kConstruct:Sn}=$(),KN=require("node:assert"),{getMaxListeners:HC,setMaxListeners:VC,getEventListeners:XN,defaultMaxListeners:qC}=require("node:events"),$N=Symbol("abortController"),KC=new xN(({signal:t,abort:e})=>{t.removeEventListener("abort",e)}),Nn=new WeakMap;function WC(t){return e;function e(){let r=t.deref();if(r!==void 0){KC.unregister(e),this.removeEventListener("abort",e),r.abort(this.reason);let A=Nn.get(r.signal);if(A!==void 0){if(A.size!==0){for(let s of A){let o=s.deref();o!==void 0&&o.abort(this.reason)}A.clear()}Nn.delete(r.signal)}}}}var zC=!1,er=class t{constructor(e,r={}){if(S.util.markAsUncloneable(this),e===Sn)return;let A="Request constructor";S.argumentLengthCheck(arguments,1,A),e=S.converters.RequestInfo(e,A,"input"),r=S.converters.RequestInit(r,A,"init");let s=null,o=null,n=Tn.settingsObject.baseUrl,i=null;if(typeof e=="string"){this[Og]=r.dispatcher;let Q;try{Q=new URL(e,n)}catch(f){throw new TypeError("Failed to parse URL from "+e,{cause:f})}if(Q.username||Q.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);s=Un({urlList:[Q]}),o="cors"}else this[Og]=r.dispatcher||e[Og],KN(e instanceof t),s=e[K],i=e[kn];let a=Tn.settingsObject.origin,c="client";if(s.window?.constructor?.name==="EnvironmentSettingsObject"&&PC(s.window,a)&&(c=s.window),r.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in r&&(c="no-window"),s=Un({method:s.method,headersList:s.headersList,unsafeRequest:s.unsafeRequest,client:Tn.settingsObject,window:c,priority:s.priority,origin:s.origin,referrer:s.referrer,referrerPolicy:s.referrerPolicy,mode:s.mode,credentials:s.credentials,cache:s.cache,redirect:s.redirect,integrity:s.integrity,keepalive:s.keepalive,reloadNavigation:s.reloadNavigation,historyNavigation:s.historyNavigation,urlList:[...s.urlList]});let g=Object.keys(r).length!==0;if(g&&(s.mode==="navigate"&&(s.mode="same-origin"),s.reloadNavigation=!1,s.historyNavigation=!1,s.origin="client",s.referrer="client",s.referrerPolicy="",s.url=s.urlList[s.urlList.length-1],s.urlList=[s.url]),r.referrer!==void 0){let Q=r.referrer;if(Q==="")s.referrer="no-referrer";else{let f;try{f=new URL(Q,n)}catch(R){throw new TypeError(`Referrer "${Q}" is not a valid URL.`,{cause:R})}f.protocol==="about:"&&f.hostname==="client"||a&&!PC(f,Tn.settingsObject.baseUrl)?s.referrer="client":s.referrer=f}}r.referrerPolicy!==void 0&&(s.referrerPolicy=r.referrerPolicy);let l;if(r.mode!==void 0?l=r.mode:l=o,l==="navigate")throw S.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(l!=null&&(s.mode=l),r.credentials!==void 0&&(s.credentials=r.credentials),r.cache!==void 0&&(s.cache=r.cache),s.cache==="only-if-cached"&&s.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(r.redirect!==void 0&&(s.redirect=r.redirect),r.integrity!=null&&(s.integrity=String(r.integrity)),r.keepalive!==void 0&&(s.keepalive=!!r.keepalive),r.method!==void 0){let Q=r.method,f=ZN[Q];if(f!==void 0)s.method=f;else{if(!ON(Q))throw new TypeError(`'${Q}' is not a valid HTTP method.`);let R=Q.toUpperCase();if(YN.has(R))throw new TypeError(`'${Q}' HTTP method is unsupported.`);Q=zN[R]??Q,s.method=Q}!zC&&s.method==="patch"&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),zC=!0)}r.signal!==void 0&&(i=r.signal),this[K]=s;let u=new AbortController;if(this[kn]=u.signal,i!=null){if(!i||typeof i.aborted!="boolean"||typeof i.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(i.aborted)u.abort(i.reason);else{this[$N]=u;let Q=new WeakRef(u),f=WC(Q);try{(typeof HC=="function"&&HC(i)===qC||XN(i,"abort").length>=qC)&&VC(1500,i)}catch{}bn.addAbortListener(i,f),KC.register(u,{signal:i,abort:f},f)}}if(this[Ye]=new ZC(Sn),jC(this[Ye],s.headersList),Yg(this[Ye],"request"),l==="no-cors"){if(!_N.has(s.method))throw new TypeError(`'${s.method} is unsupported in no-cors mode.`);Yg(this[Ye],"request-no-cors")}if(g){let Q=_C(this[Ye]),f=r.headers!==void 0?r.headers:new Fn(Q);if(Q.clear(),f instanceof Fn){for(let{name:R,value:y}of f.rawValues())Q.append(R,y,!1);Q.cookies=f.cookies}else MN(this[Ye],f)}let E=e instanceof t?e[K].body:null;if((r.body!=null||E!=null)&&(s.method==="GET"||s.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let h=null;if(r.body!=null){let[Q,f]=UN(r.body,s.keepalive);h=Q,f&&!_C(this[Ye]).contains("content-type",!0)&&this[Ye].append("content-type",f)}let C=h??E;if(C!=null&&C.source==null){if(h!=null&&r.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(s.mode!=="same-origin"&&s.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');s.useCORSPreflightFlag=!0}let I=C;if(h==null&&E!=null){if(YC(e))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let Q=new TransformStream;E.stream.pipeThrough(Q),I={source:E.source,length:E.length,stream:Q.readable}}this[K].body=I}get method(){return S.brandCheck(this,t),this[K].method}get url(){return S.brandCheck(this,t),jN(this[K].url)}get headers(){return S.brandCheck(this,t),this[Ye]}get destination(){return S.brandCheck(this,t),this[K].destination}get referrer(){return S.brandCheck(this,t),this[K].referrer==="no-referrer"?"":this[K].referrer==="client"?"about:client":this[K].referrer.toString()}get referrerPolicy(){return S.brandCheck(this,t),this[K].referrerPolicy}get mode(){return S.brandCheck(this,t),this[K].mode}get credentials(){return this[K].credentials}get cache(){return S.brandCheck(this,t),this[K].cache}get redirect(){return S.brandCheck(this,t),this[K].redirect}get integrity(){return S.brandCheck(this,t),this[K].integrity}get keepalive(){return S.brandCheck(this,t),this[K].keepalive}get isReloadNavigation(){return S.brandCheck(this,t),this[K].reloadNavigation}get isHistoryNavigation(){return S.brandCheck(this,t),this[K].historyNavigation}get signal(){return S.brandCheck(this,t),this[kn]}get body(){return S.brandCheck(this,t),this[K].body?this[K].body.stream:null}get bodyUsed(){return S.brandCheck(this,t),!!this[K].body&&bn.isDisturbed(this[K].body.stream)}get duplex(){return S.brandCheck(this,t),"half"}clone(){if(S.brandCheck(this,t),YC(this))throw new TypeError("unusable");let e=XC(this[K]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let A=Nn.get(this.signal);A===void 0&&(A=new Set,Nn.set(this.signal,A));let s=new WeakRef(r);A.add(s),bn.addAbortListener(r.signal,WC(s))}return $C(e,r.signal,vN(this[Ye]))}[JC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${JC.formatWithOptions(r,A)}`}};GN(er);function Un(t){return{method:t.method??"GET",localURLsOnly:t.localURLsOnly??!1,unsafeRequest:t.unsafeRequest??!1,body:t.body??null,client:t.client??null,reservedClient:t.reservedClient??null,replacesClientId:t.replacesClientId??"",window:t.window??"client",keepalive:t.keepalive??!1,serviceWorkers:t.serviceWorkers??"all",initiator:t.initiator??"",destination:t.destination??"",priority:t.priority??null,origin:t.origin??"client",policyContainer:t.policyContainer??"client",referrer:t.referrer??"client",referrerPolicy:t.referrerPolicy??"",mode:t.mode??"no-cors",useCORSPreflightFlag:t.useCORSPreflightFlag??!1,credentials:t.credentials??"same-origin",useCredentials:t.useCredentials??!1,cache:t.cache??"default",redirect:t.redirect??"follow",integrity:t.integrity??"",cryptoGraphicsNonceMetadata:t.cryptoGraphicsNonceMetadata??"",parserMetadata:t.parserMetadata??"",reloadNavigation:t.reloadNavigation??!1,historyNavigation:t.historyNavigation??!1,userActivation:t.userActivation??!1,taintedOrigin:t.taintedOrigin??!1,redirectCount:t.redirectCount??0,responseTainting:t.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:t.preventNoCacheCacheControlHeaderModification??!1,done:t.done??!1,timingAllowFailed:t.timingAllowFailed??!1,urlList:t.urlList,url:t.urlList[0],headersList:t.headersList?new Fn(t.headersList):new Fn}}function XC(t){let e=Un({...t,body:null});return t.body!=null&&(e.body=LN(e,t.body)),e}function $C(t,e,r){let A=new er(Sn);return A[K]=t,A[kn]=e,A[Ye]=new ZC(Sn),jC(A[Ye],t.headersList),Yg(A[Ye],r),A}Object.defineProperties(er.prototype,{method:le,url:le,headers:le,redirect:le,clone:le,signal:le,duplex:le,destination:le,body:le,bodyUsed:le,isHistoryNavigation:le,isReloadNavigation:le,keepalive:le,integrity:le,cache:le,credentials:le,attribute:le,referrerPolicy:le,referrer:le,mode:le,[Symbol.toStringTag]:{value:"Request",configurable:!0}});S.converters.Request=S.interfaceConverter(er);S.converters.RequestInfo=function(t,e,r){return typeof t=="string"?S.converters.USVString(t,e,r):t instanceof er?S.converters.Request(t,e,r):S.converters.USVString(t,e,r)};S.converters.AbortSignal=S.interfaceConverter(AbortSignal);S.converters.RequestInit=S.dictionaryConverter([{key:"method",converter:S.converters.ByteString},{key:"headers",converter:S.converters.HeadersInit},{key:"body",converter:S.nullableConverter(S.converters.BodyInit)},{key:"referrer",converter:S.converters.USVString},{key:"referrerPolicy",converter:S.converters.DOMString,allowedValues:JN},{key:"mode",converter:S.converters.DOMString,allowedValues:HN},{key:"credentials",converter:S.converters.DOMString,allowedValues:VN},{key:"cache",converter:S.converters.DOMString,allowedValues:qN},{key:"redirect",converter:S.converters.DOMString,allowedValues:PN},{key:"integrity",converter:S.converters.DOMString},{key:"keepalive",converter:S.converters.boolean},{key:"signal",converter:S.nullableConverter(t=>S.converters.AbortSignal(t,"RequestInit","signal",{strict:!1}))},{key:"window",converter:S.converters.any},{key:"duplex",converter:S.converters.DOMString,allowedValues:WN},{key:"dispatcher",converter:S.converters.any}]);ed.exports={Request:er,makeRequest:Un,fromInnerRequest:$C,cloneRequest:XC}});var Gs=B((NP,Qd)=>{"use strict";var{makeNetworkError:H,makeAppropriateNetworkError:Gn,filterResponse:_g,makeResponse:Ln,fromInnerResponse:eU}=Ns(),{HeadersList:td}=Ur(),{Request:tU,cloneRequest:rU}=NA(),tr=require("node:zlib"),{bytesMatch:AU,makePolicyContainer:sU,clonePolicyContainer:oU,requestBadPort:nU,TAOCheck:iU,appendRequestOriginHeader:aU,responseLocationURL:cU,requestCurrentURL:ft,setRequestReferrerPolicyOnRedirect:gU,tryUpgradeRequestToAPotentiallyTrustworthyURL:lU,createOpaqueTimingInfo:qg,appendFetchMetadata:uU,corsCheck:EU,crossOriginResourcePolicyCheck:hU,determineRequestsReferrer:QU,coarsenedSharedCurrentTime:Us,createDeferredPromise:BU,isBlobLike:IU,sameOrigin:Vg,isCancelled:Lr,isAborted:rd,isErrorLike:CU,fullyReadBody:dU,readableStreamClose:fU,isomorphicEncode:Mn,urlIsLocal:pU,urlIsHttpHttpsScheme:Wg,urlHasHttpsScheme:mU,clampAndCoarsenConnectionTimingInfo:wU,simpleRangeHeaderValue:yU,buildContentRange:RU,createInflate:DU,extractMimeType:TU}=Ge(),{kState:nd,kDispatcher:bU}=Pt(),Mr=require("node:assert"),{safelyExtractBody:zg,extractBody:Ad}=cA(),{redirectStatusSet:id,nullBodyStatus:ad,safeMethodsSet:kU,requestBodyHeader:FU,subresourceSet:SU}=rs(),NU=require("node:events"),{Readable:UU,pipeline:GU,finished:LU}=require("node:stream"),{addAbortListener:MU,isErrored:vU,isReadable:vn,bufferToLowerCasedHeaderName:sd}=M(),{dataURLProcessor:xU,serializeAMimeType:OU,minimizeSupportedMimeType:YU}=Te(),{getGlobalDispatcher:_U}=fn(),{webidl:JU}=Qe(),{STATUS_CODES:PU}=require("node:http"),HU=["GET","HEAD"],VU=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",Jg,xn=class extends NU{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){this.state==="ongoing"&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}};function qU(t){cd(t,"fetch")}function WU(t,e=void 0){JU.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=BU(),A;try{A=new tU(t,e)}catch(g){return r.reject(g),r.promise}let s=A[nd];if(A.signal.aborted)return Pg(r,s,null,A.signal.reason),r.promise;s.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(s.serviceWorkers="none");let n=null,i=!1,a=null;return MU(A.signal,()=>{i=!0,Mr(a!=null),a.abort(A.signal.reason);let g=n?.deref();Pg(r,s,g,A.signal.reason)}),a=ld({request:s,processResponseEndOfBody:qU,processResponse:g=>{if(!i){if(g.aborted){Pg(r,s,n,a.serializedAbortReason);return}if(g.type==="error"){r.reject(new TypeError("fetch failed",{cause:g.error}));return}n=new WeakRef(eU(g,"immutable")),r.resolve(n.deref()),r=null}},dispatcher:A[bU]}),r.promise}function cd(t,e="other"){if(t.type==="error"&&t.aborted||!t.urlList?.length)return;let r=t.urlList[0],A=t.timingInfo,s=t.cacheState;Wg(r)&&A!==null&&(t.timingAllowPassed||(A=qg({startTime:A.startTime}),s=""),A.endTime=Us(),t.timingInfo=A,gd(A,r.href,e,globalThis,s))}var gd=performance.markResourceTiming;function Pg(t,e,r,A){if(t&&t.reject(A),e.body!=null&&vn(e.body?.stream)&&e.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o}),r==null)return;let s=r[nd];s.body!=null&&vn(s.body?.stream)&&s.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o})}function ld({request:t,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseEndOfBody:s,processResponseConsumeBody:o,useParallelQueue:n=!1,dispatcher:i=_U()}){Mr(i);let a=null,c=!1;t.client!=null&&(a=t.client.globalObject,c=t.client.crossOriginIsolatedCapability);let g=Us(c),l=qg({startTime:g}),u={controller:new xn(i),request:t,timingInfo:l,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseConsumeBody:o,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};return Mr(!t.body||t.body.stream),t.window==="client"&&(t.window=t.client?.globalObject?.constructor?.name==="Window"?t.client:"no-window"),t.origin==="client"&&(t.origin=t.client.origin),t.policyContainer==="client"&&(t.client!=null?t.policyContainer=oU(t.client.policyContainer):t.policyContainer=sU()),t.headersList.contains("accept",!0)||t.headersList.append("accept","*/*",!0),t.headersList.contains("accept-language",!0)||t.headersList.append("accept-language","*",!0),t.priority,SU.has(t.destination),ud(u).catch(E=>{u.controller.terminate(E)}),u.controller}async function ud(t,e=!1){let r=t.request,A=null;if(r.localURLsOnly&&!pU(ft(r))&&(A=H("local URLs only")),lU(r),nU(r)==="blocked"&&(A=H("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=QU(r)),A===null&&(A=await(async()=>{let o=ft(r);return Vg(o,r.url)&&r.responseTainting==="basic"||o.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await od(t)):r.mode==="same-origin"?H('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?H('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await od(t)):Wg(ft(r))?(r.responseTainting="cors",await Ed(t)):H("URL scheme must be a HTTP(S) scheme")})()),e)return A;A.status!==0&&!A.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?A=_g(A,"basic"):r.responseTainting==="cors"?A=_g(A,"cors"):r.responseTainting==="opaque"?A=_g(A,"opaque"):Mr(!1));let s=A.status===0?A:A.internalResponse;if(s.urlList.length===0&&s.urlList.push(...r.urlList),r.timingAllowFailed||(A.timingAllowPassed=!0),A.type==="opaque"&&s.status===206&&s.rangeRequested&&!r.headers.contains("range",!0)&&(A=s=H()),A.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||ad.includes(s.status))&&(s.body=null,t.controller.dump=!0),r.integrity){let o=i=>Hg(t,H(i));if(r.responseTainting==="opaque"||A.body==null){o(A.error);return}let n=i=>{if(!AU(i,r.integrity)){o("integrity mismatch");return}A.body=zg(i)[0],Hg(t,A)};await dU(A.body,n,o)}else Hg(t,A)}function od(t){if(Lr(t)&&t.request.redirectCount===0)return Promise.resolve(Gn(t));let{request:e}=t,{protocol:r}=ft(e);switch(r){case"about:":return Promise.resolve(H("about scheme is not supported"));case"blob:":{Jg||(Jg=require("node:buffer").resolveObjectURL);let A=ft(e);if(A.search.length!==0)return Promise.resolve(H("NetworkError when attempting to fetch resource."));let s=Jg(A.toString());if(e.method!=="GET"||!IU(s))return Promise.resolve(H("invalid method"));let o=Ln(),n=s.size,i=Mn(`${n}`),a=s.type;if(e.headersList.contains("range",!0)){o.rangeRequested=!0;let c=e.headersList.get("range",!0),g=yU(c,!0);if(g==="failure")return Promise.resolve(H("failed to fetch the data URL"));let{rangeStartValue:l,rangeEndValue:u}=g;if(l===null)l=n-u,u=l+u-1;else{if(l>=n)return Promise.resolve(H("Range start is greater than the blob's size."));(u===null||u>=n)&&(u=n-1)}let E=s.slice(l,u,a),h=Ad(E);o.body=h[0];let C=Mn(`${E.size}`),I=RU(l,u,n);o.status=206,o.statusText="Partial Content",o.headersList.set("content-length",C,!0),o.headersList.set("content-type",a,!0),o.headersList.set("content-range",I,!0)}else{let c=Ad(s);o.statusText="OK",o.body=c[0],o.headersList.set("content-length",i,!0),o.headersList.set("content-type",a,!0)}return Promise.resolve(o)}case"data:":{let A=ft(e),s=xU(A);if(s==="failure")return Promise.resolve(H("failed to fetch the data URL"));let o=OU(s.mimeType);return Promise.resolve(Ln({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:o}]],body:zg(s.body)[0]}))}case"file:":return Promise.resolve(H("not implemented... yet..."));case"http:":case"https:":return Ed(t).catch(A=>H(A));default:return Promise.resolve(H("unknown scheme"))}}function zU(t,e){t.request.done=!0,t.processResponseDone!=null&&queueMicrotask(()=>t.processResponseDone(e))}function Hg(t,e){let r=t.timingInfo,A=()=>{let o=Date.now();t.request.destination==="document"&&(t.controller.fullTimingInfo=r),t.controller.reportTimingSteps=()=>{if(t.request.url.protocol!=="https:")return;r.endTime=o;let i=e.cacheState,a=e.bodyInfo;e.timingAllowPassed||(r=qg(r),i="");let c=0;if(t.request.mode!=="navigator"||!e.hasCrossOriginRedirects){c=e.status;let g=TU(e.headersList);g!=="failure"&&(a.contentType=YU(g))}t.request.initiatorType!=null&&gd(r,t.request.url.href,t.request.initiatorType,globalThis,i,a,c)};let n=()=>{t.request.done=!0,t.processResponseEndOfBody!=null&&queueMicrotask(()=>t.processResponseEndOfBody(e)),t.request.initiatorType!=null&&t.controller.reportTimingSteps()};queueMicrotask(()=>n())};t.processResponse!=null&&queueMicrotask(()=>{t.processResponse(e),t.processResponse=null});let s=e.type==="error"?e:e.internalResponse??e;s.body==null?A():LU(s.body.stream,()=>{A()})}async function Ed(t){let e=t.request,r=null,A=null,s=t.timingInfo;if(e.serviceWorkers,r===null){if(e.redirect==="follow"&&(e.serviceWorkers="none"),A=r=await hd(t),e.responseTainting==="cors"&&EU(e,r)==="failure")return H("cors failure");iU(e,r)==="failure"&&(e.timingAllowFailed=!0)}return(e.responseTainting==="opaque"||r.type==="opaque")&&hU(e.origin,e.client,e.destination,A)==="blocked"?H("blocked"):(id.has(A.status)&&(e.redirect!=="manual"&&t.controller.connection.destroy(void 0,!1),e.redirect==="error"?r=H("unexpected redirect"):e.redirect==="manual"?r=A:e.redirect==="follow"?r=await ZU(t,r):Mr(!1)),r.timingInfo=s,r)}function ZU(t,e){let r=t.request,A=e.internalResponse?e.internalResponse:e,s;try{if(s=cU(A,ft(r).hash),s==null)return e}catch(n){return Promise.resolve(H(n))}if(!Wg(s))return Promise.resolve(H("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(H("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(s.username||s.password)&&!Vg(r,s))return Promise.resolve(H('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(s.username||s.password))return Promise.resolve(H('URL cannot contain credentials for request mode "cors"'));if(A.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(H());if([301,302].includes(A.status)&&r.method==="POST"||A.status===303&&!HU.includes(r.method)){r.method="GET",r.body=null;for(let n of FU)r.headersList.delete(n)}Vg(ft(r),s)||(r.headersList.delete("authorization",!0),r.headersList.delete("proxy-authorization",!0),r.headersList.delete("cookie",!0),r.headersList.delete("host",!0)),r.body!=null&&(Mr(r.body.source!=null),r.body=zg(r.body.source)[0]);let o=t.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=Us(t.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(s),gU(r,A),ud(t,!0)}async function hd(t,e=!1,r=!1){let A=t.request,s=null,o=null,n=null,i=null,a=!1;A.window==="no-window"&&A.redirect==="error"?(s=t,o=A):(o=rU(A),s={...t},s.request=o);let c=A.credentials==="include"||A.credentials==="same-origin"&&A.responseTainting==="basic",g=o.body?o.body.length:null,l=null;if(o.body==null&&["POST","PUT"].includes(o.method)&&(l="0"),g!=null&&(l=Mn(`${g}`)),l!=null&&o.headersList.append("content-length",l,!0),g!=null&&o.keepalive,o.referrer instanceof URL&&o.headersList.append("referer",Mn(o.referrer.href),!0),aU(o),uU(o),o.headersList.contains("user-agent",!0)||o.headersList.append("user-agent",VU),o.cache==="default"&&(o.headersList.contains("if-modified-since",!0)||o.headersList.contains("if-none-match",!0)||o.headersList.contains("if-unmodified-since",!0)||o.headersList.contains("if-match",!0)||o.headersList.contains("if-range",!0))&&(o.cache="no-store"),o.cache==="no-cache"&&!o.preventNoCacheCacheControlHeaderModification&&!o.headersList.contains("cache-control",!0)&&o.headersList.append("cache-control","max-age=0",!0),(o.cache==="no-store"||o.cache==="reload")&&(o.headersList.contains("pragma",!0)||o.headersList.append("pragma","no-cache",!0),o.headersList.contains("cache-control",!0)||o.headersList.append("cache-control","no-cache",!0)),o.headersList.contains("range",!0)&&o.headersList.append("accept-encoding","identity",!0),o.headersList.contains("accept-encoding",!0)||(mU(ft(o))?o.headersList.append("accept-encoding","br, gzip, deflate",!0):o.headersList.append("accept-encoding","gzip, deflate",!0)),o.headersList.delete("host",!0),i==null&&(o.cache="no-store"),o.cache!=="no-store"&&o.cache,n==null){if(o.cache==="only-if-cached")return H("only if cached");let u=await jU(s,c,r);!kU.has(o.method)&&u.status>=200&&u.status<=399,a&&u.status,n==null&&(n=u)}if(n.urlList=[...o.urlList],o.headersList.contains("range",!0)&&(n.rangeRequested=!0),n.requestIncludesCredentials=c,n.status===407)return A.window==="no-window"?H():Lr(t)?Gn(t):H("proxy authentication required");if(n.status===421&&!r&&(A.body==null||A.body.source!=null)){if(Lr(t))return Gn(t);t.controller.connection.destroy(),n=await hd(t,e,!0)}return n}async function jU(t,e=!1,r=!1){Mr(!t.controller.connection||t.controller.connection.destroyed),t.controller.connection={abort:null,destroyed:!1,destroy(h,C=!0){this.destroyed||(this.destroyed=!0,C&&this.abort?.(h??new DOMException("The operation was aborted.","AbortError")))}};let A=t.request,s=null,o=t.timingInfo;null==null&&(A.cache="no-store");let i=r?"yes":"no";A.mode;let a=null;if(A.body==null&&t.processRequestEndOfBody)queueMicrotask(()=>t.processRequestEndOfBody());else if(A.body!=null){let h=async function*(Q){Lr(t)||(yield Q,t.processRequestBodyChunkLength?.(Q.byteLength))},C=()=>{Lr(t)||t.processRequestEndOfBody&&t.processRequestEndOfBody()},I=Q=>{Lr(t)||(Q.name==="AbortError"?t.controller.abort():t.controller.terminate(Q))};a=(async function*(){try{for await(let Q of A.body.stream)yield*h(Q);C()}catch(Q){I(Q)}})()}try{let{body:h,status:C,statusText:I,headersList:Q,socket:f}=await E({body:a});if(f)s=Ln({status:C,statusText:I,headersList:Q,socket:f});else{let R=h[Symbol.asyncIterator]();t.controller.next=()=>R.next(),s=Ln({status:C,statusText:I,headersList:Q})}}catch(h){return h.name==="AbortError"?(t.controller.connection.destroy(),Gn(t,h)):H(h)}let c=async()=>{await t.controller.resume()},g=h=>{Lr(t)||t.controller.abort(h)},l=new ReadableStream({async start(h){t.controller.controller=h},async pull(h){await c(h)},async cancel(h){await g(h)},type:"bytes"});s.body={stream:l,source:null,length:null},t.controller.onAborted=u,t.controller.on("terminated",u),t.controller.resume=async()=>{for(;;){let h,C;try{let{done:Q,value:f}=await t.controller.next();if(rd(t))break;h=Q?void 0:f}catch(Q){t.controller.ended&&!o.encodedBodySize?h=void 0:(h=Q,C=!0)}if(h===void 0){fU(t.controller.controller),zU(t,s);return}if(o.decodedBodySize+=h?.byteLength??0,C){t.controller.terminate(h);return}let I=new Uint8Array(h);if(I.byteLength&&t.controller.controller.enqueue(I),vU(l)){t.controller.terminate();return}if(t.controller.controller.desiredSize<=0)return}};function u(h){rd(t)?(s.aborted=!0,vn(l)&&t.controller.controller.error(t.controller.serializedAbortReason)):vn(l)&&t.controller.controller.error(new TypeError("terminated",{cause:CU(h)?h:void 0})),t.controller.connection.destroy()}return s;function E({body:h}){let C=ft(A),I=t.controller.dispatcher;return new Promise((Q,f)=>I.dispatch({path:C.pathname+C.search,origin:C.origin,method:A.method,body:I.isMockActive?A.body&&(A.body.source||A.body.stream):h,headers:A.headersList.entries,maxRedirections:0,upgrade:A.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(R){let{connection:y}=t.controller;o.finalConnectionTimingInfo=wU(void 0,o.postRedirectStartTime,t.crossOriginIsolatedCapability),y.destroyed?R(new DOMException("The operation was aborted.","AbortError")):(t.controller.on("terminated",R),this.abort=y.abort=R),o.finalNetworkRequestStartTime=Us(t.crossOriginIsolatedCapability)},onResponseStarted(){o.finalNetworkResponseStartTime=Us(t.crossOriginIsolatedCapability)},onHeaders(R,y,P,Z){if(R<200)return;let Ae="",gt=new td;for(let De=0;DeWr)return f(new Error(`too many content-encodings in response: ${qr.length}, maximum allowed is ${Wr}`)),!0;for(let Pi=qr.length-1;Pi>=0;--Pi){let lo=qr[Pi].trim();if(lo==="x-gzip"||lo==="gzip")wt.push(tr.createGunzip({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="deflate")wt.push(DU({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="br")wt.push(tr.createBrotliDecompress({flush:tr.constants.BROTLI_OPERATION_FLUSH,finishFlush:tr.constants.BROTLI_OPERATION_FLUSH}));else{wt.length=0;break}}}let _t=this.onError.bind(this);return Q({status:R,statusText:Z,headersList:gt,body:wt.length?GU(this.body,...wt,De=>{De&&this.onError(De)}).on("error",_t):this.body.on("error",_t)}),!0},onData(R){if(t.controller.dump)return;let y=R;return o.encodedBodySize+=y.byteLength,this.body.push(y)},onComplete(){this.abort&&t.controller.off("terminated",this.abort),t.controller.onAborted&&t.controller.off("terminated",t.controller.onAborted),t.controller.ended=!0,this.body.push(null)},onError(R){this.abort&&t.controller.off("terminated",this.abort),this.body?.destroy(R),t.controller.terminate(R),f(R)},onUpgrade(R,y,P){if(R!==101)return;let Z=new td;for(let Ae=0;Ae{"use strict";Bd.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var Cd=B((GP,Id)=>{"use strict";var{webidl:_e}=Qe(),On=Symbol("ProgressEvent state"),jg=class t extends Event{constructor(e,r={}){e=_e.converters.DOMString(e,"ProgressEvent constructor","type"),r=_e.converters.ProgressEventInit(r??{}),super(e,r),this[On]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return _e.brandCheck(this,t),this[On].lengthComputable}get loaded(){return _e.brandCheck(this,t),this[On].loaded}get total(){return _e.brandCheck(this,t),this[On].total}};_e.converters.ProgressEventInit=_e.dictionaryConverter([{key:"lengthComputable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:_e.converters.boolean,defaultValue:()=>!1}]);Id.exports={ProgressEvent:jg}});var fd=B((LP,dd)=>{"use strict";function KU(t){if(!t)return"failure";switch(t.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}dd.exports={getEncoding:KU}});var bd=B((MP,Td)=>{"use strict";var{kState:UA,kError:Kg,kResult:pd,kAborted:Ls,kLastProgressEventFired:Xg}=Zg(),{ProgressEvent:XU}=Cd(),{getEncoding:md}=fd(),{serializeAMimeType:$U,parseMIMEType:wd}=Te(),{types:eG}=require("node:util"),{StringDecoder:yd}=require("string_decoder"),{btoa:Rd}=require("node:buffer"),tG={enumerable:!0,writable:!1,configurable:!1};function rG(t,e,r,A){if(t[UA]==="loading")throw new DOMException("Invalid state","InvalidStateError");t[UA]="loading",t[pd]=null,t[Kg]=null;let o=e.stream().getReader(),n=[],i=o.read(),a=!0;(async()=>{for(;!t[Ls];)try{let{done:c,value:g}=await i;if(a&&!t[Ls]&&queueMicrotask(()=>{rr("loadstart",t)}),a=!1,!c&&eG.isUint8Array(g))n.push(g),(t[Xg]===void 0||Date.now()-t[Xg]>=50)&&!t[Ls]&&(t[Xg]=Date.now(),queueMicrotask(()=>{rr("progress",t)})),i=o.read();else if(c){queueMicrotask(()=>{t[UA]="done";try{let l=AG(n,r,e.type,A);if(t[Ls])return;t[pd]=l,rr("load",t)}catch(l){t[Kg]=l,rr("error",t)}t[UA]!=="loading"&&rr("loadend",t)});break}}catch(c){if(t[Ls])return;queueMicrotask(()=>{t[UA]="done",t[Kg]=c,rr("error",t),t[UA]!=="loading"&&rr("loadend",t)});break}})()}function rr(t,e){let r=new XU(t,{bubbles:!1,cancelable:!1});e.dispatchEvent(r)}function AG(t,e,r,A){switch(e){case"DataURL":{let s="data:",o=wd(r||"application/octet-stream");o!=="failure"&&(s+=$U(o)),s+=";base64,";let n=new yd("latin1");for(let i of t)s+=Rd(n.write(i));return s+=Rd(n.end()),s}case"Text":{let s="failure";if(A&&(s=md(A)),s==="failure"&&r){let o=wd(r);o!=="failure"&&(s=md(o.parameters.get("charset")))}return s==="failure"&&(s="UTF-8"),sG(t,s)}case"ArrayBuffer":return Dd(t).buffer;case"BinaryString":{let s="",o=new yd("latin1");for(let n of t)s+=o.write(n);return s+=o.end(),s}}}function sG(t,e){let r=Dd(t),A=oG(r),s=0;A!==null&&(e=A,s=A==="UTF-8"?3:2);let o=r.slice(s);return new TextDecoder(e).decode(o)}function oG(t){let[e,r,A]=t;return e===239&&r===187&&A===191?"UTF-8":e===254&&r===255?"UTF-16BE":e===255&&r===254?"UTF-16LE":null}function Dd(t){let e=t.reduce((A,s)=>A+s.byteLength,0),r=0;return t.reduce((A,s)=>(A.set(s,r),r+=s.byteLength,A),new Uint8Array(e))}Td.exports={staticPropertyDescriptors:tG,readOperation:rG,fireAProgressEvent:rr}});var Nd=B((vP,Sd)=>{"use strict";var{staticPropertyDescriptors:GA,readOperation:Yn,fireAProgressEvent:kd}=bd(),{kState:vr,kError:Fd,kResult:_n,kEvents:_,kAborted:nG}=Zg(),{webidl:q}=Qe(),{kEnumerableProperty:Fe}=M(),at=class t extends EventTarget{constructor(){super(),this[vr]="empty",this[_n]=null,this[Fd]=null,this[_]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"ArrayBuffer")}readAsBinaryString(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"BinaryString")}readAsText(e,r=void 0){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsText"),e=q.converters.Blob(e,{strict:!1}),r!==void 0&&(r=q.converters.DOMString(r,"FileReader.readAsText","encoding")),Yn(this,e,"Text",r)}readAsDataURL(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"DataURL")}abort(){if(this[vr]==="empty"||this[vr]==="done"){this[_n]=null;return}this[vr]==="loading"&&(this[vr]="done",this[_n]=null),this[nG]=!0,kd("abort",this),this[vr]!=="loading"&&kd("loadend",this)}get readyState(){switch(q.brandCheck(this,t),this[vr]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return q.brandCheck(this,t),this[_n]}get error(){return q.brandCheck(this,t),this[Fd]}get onloadend(){return q.brandCheck(this,t),this[_].loadend}set onloadend(e){q.brandCheck(this,t),this[_].loadend&&this.removeEventListener("loadend",this[_].loadend),typeof e=="function"?(this[_].loadend=e,this.addEventListener("loadend",e)):this[_].loadend=null}get onerror(){return q.brandCheck(this,t),this[_].error}set onerror(e){q.brandCheck(this,t),this[_].error&&this.removeEventListener("error",this[_].error),typeof e=="function"?(this[_].error=e,this.addEventListener("error",e)):this[_].error=null}get onloadstart(){return q.brandCheck(this,t),this[_].loadstart}set onloadstart(e){q.brandCheck(this,t),this[_].loadstart&&this.removeEventListener("loadstart",this[_].loadstart),typeof e=="function"?(this[_].loadstart=e,this.addEventListener("loadstart",e)):this[_].loadstart=null}get onprogress(){return q.brandCheck(this,t),this[_].progress}set onprogress(e){q.brandCheck(this,t),this[_].progress&&this.removeEventListener("progress",this[_].progress),typeof e=="function"?(this[_].progress=e,this.addEventListener("progress",e)):this[_].progress=null}get onload(){return q.brandCheck(this,t),this[_].load}set onload(e){q.brandCheck(this,t),this[_].load&&this.removeEventListener("load",this[_].load),typeof e=="function"?(this[_].load=e,this.addEventListener("load",e)):this[_].load=null}get onabort(){return q.brandCheck(this,t),this[_].abort}set onabort(e){q.brandCheck(this,t),this[_].abort&&this.removeEventListener("abort",this[_].abort),typeof e=="function"?(this[_].abort=e,this.addEventListener("abort",e)):this[_].abort=null}};at.EMPTY=at.prototype.EMPTY=0;at.LOADING=at.prototype.LOADING=1;at.DONE=at.prototype.DONE=2;Object.defineProperties(at.prototype,{EMPTY:GA,LOADING:GA,DONE:GA,readAsArrayBuffer:Fe,readAsBinaryString:Fe,readAsText:Fe,readAsDataURL:Fe,abort:Fe,readyState:Fe,result:Fe,error:Fe,onloadstart:Fe,onprogress:Fe,onload:Fe,onabort:Fe,onerror:Fe,onloadend:Fe,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(at,{EMPTY:GA,LOADING:GA,DONE:GA});Sd.exports={FileReader:at}});var Jn=B((xP,Ud)=>{"use strict";Ud.exports={kConstruct:$().kConstruct}});var Md=B((OP,Ld)=>{"use strict";var iG=require("node:assert"),{URLSerializer:Gd}=Te(),{isValidHeaderName:aG}=Ge();function cG(t,e,r=!1){let A=Gd(t,r),s=Gd(e,r);return A===s}function gG(t){iG(t!==null);let e=[];for(let r of t.split(","))r=r.trim(),aG(r)&&e.push(r);return e}Ld.exports={urlEquals:cG,getFieldValues:gG}});var Od=B((YP,xd)=>{"use strict";var{kConstruct:lG}=Jn(),{urlEquals:uG,getFieldValues:$g}=Md(),{kEnumerableProperty:xr,isDisturbed:EG}=M(),{webidl:T}=Qe(),{Response:hG,cloneResponse:QG,fromInnerResponse:BG}=Ns(),{Request:Mt,fromInnerRequest:IG}=NA(),{kState:ct}=Pt(),{fetching:CG}=Gs(),{urlIsHttpHttpsScheme:Pn,createDeferredPromise:LA,readAllBytes:dG}=Ge(),el=require("node:assert"),Hn=class t{#e;constructor(){arguments[0]!==lG&&T.illegalConstructor(),T.util.markAsUncloneable(this),this.#e=arguments[1]}async match(e,r={}){T.brandCheck(this,t);let A="Cache.match";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=this.#s(e,r,1);if(s.length!==0)return s[0]}async matchAll(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.matchAll";return e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options"),this.#s(e,r)}async add(e){T.brandCheck(this,t);let r="Cache.add";T.argumentLengthCheck(arguments,1,r),e=T.converters.RequestInfo(e,r,"request");let A=[e];return await this.addAll(A)}async addAll(e){T.brandCheck(this,t);let r="Cache.addAll";T.argumentLengthCheck(arguments,1,r);let A=[],s=[];for(let u of e){if(u===void 0)throw T.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(u=T.converters.RequestInfo(u),typeof u=="string")continue;let E=u[ct];if(!Pn(E.url)||E.method!=="GET")throw T.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let o=[];for(let u of e){let E=new Mt(u)[ct];if(!Pn(E.url))throw T.errors.exception({header:r,message:"Expected http/s scheme."});E.initiator="fetch",E.destination="subresource",s.push(E);let h=LA();o.push(CG({request:E,processResponse(C){if(C.type==="error"||C.status===206||C.status<200||C.status>299)h.reject(T.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(C.headersList.contains("vary")){let I=$g(C.headersList.get("vary"));for(let Q of I)if(Q==="*"){h.reject(T.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let f of o)f.abort();return}}},processResponseEndOfBody(C){if(C.aborted){h.reject(new DOMException("aborted","AbortError"));return}h.resolve(C)}})),A.push(h.promise)}let i=await Promise.all(A),a=[],c=0;for(let u of i){let E={type:"put",request:s[c],response:u};a.push(E),c++}let g=LA(),l=null;try{this.#t(a)}catch(u){l=u}return queueMicrotask(()=>{l===null?g.resolve(void 0):g.reject(l)}),g.promise}async put(e,r){T.brandCheck(this,t);let A="Cache.put";T.argumentLengthCheck(arguments,2,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.Response(r,A,"response");let s=null;if(e instanceof Mt?s=e[ct]:s=new Mt(e)[ct],!Pn(s.url)||s.method!=="GET")throw T.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});let o=r[ct];if(o.status===206)throw T.errors.exception({header:A,message:"Got 206 status"});if(o.headersList.contains("vary")){let E=$g(o.headersList.get("vary"));for(let h of E)if(h==="*")throw T.errors.exception({header:A,message:"Got * vary field value"})}if(o.body&&(EG(o.body.stream)||o.body.stream.locked))throw T.errors.exception({header:A,message:"Response body is locked or disturbed"});let n=QG(o),i=LA();if(o.body!=null){let h=o.body.stream.getReader();dG(h).then(i.resolve,i.reject)}else i.resolve(void 0);let a=[],c={type:"put",request:s,response:n};a.push(c);let g=await i.promise;n.body!=null&&(n.body.source=g);let l=LA(),u=null;try{this.#t(a)}catch(E){u=E}return queueMicrotask(()=>{u===null?l.resolve():l.reject(u)}),l.promise}async delete(e,r={}){T.brandCheck(this,t);let A="Cache.delete";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return!1}else el(typeof e=="string"),s=new Mt(e)[ct];let o=[],n={type:"delete",request:s,options:r};o.push(n);let i=LA(),a=null,c;try{c=this.#t(o)}catch(g){a=g}return queueMicrotask(()=>{a===null?i.resolve(!!c?.length):i.reject(a)}),i.promise}async keys(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.keys";e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=LA(),n=[];if(e===void 0)for(let i of this.#e)n.push(i[0]);else{let i=this.#r(s,r);for(let a of i)n.push(a[0])}return queueMicrotask(()=>{let i=[];for(let a of n){let c=IG(a,new AbortController().signal,"immutable");i.push(c)}o.resolve(Object.freeze(i))}),o.promise}#t(e){let r=this.#e,A=[...r],s=[],o=[];try{for(let n of e){if(n.type!=="delete"&&n.type!=="put")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(n.type==="delete"&&n.response!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#r(n.request,n.options,s).length)throw new DOMException("???","InvalidStateError");let i;if(n.type==="delete"){if(i=this.#r(n.request,n.options),i.length===0)return[];for(let a of i){let c=r.indexOf(a);el(c!==-1),r.splice(c,1)}}else if(n.type==="put"){if(n.response==null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=n.request;if(!Pn(a.url))throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(n.options!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});i=this.#r(n.request);for(let c of i){let g=r.indexOf(c);el(g!==-1),r.splice(g,1)}r.push([n.request,n.response]),s.push([n.request,n.response])}o.push([n.request,n.response])}return o}catch(n){throw this.#e.length=0,this.#e=A,n}}#r(e,r,A){let s=[],o=A??this.#e;for(let n of o){let[i,a]=n;this.#o(e,i,a,r)&&s.push(n)}return s}#o(e,r,A=null,s){let o=new URL(e.url),n=new URL(r.url);if(s?.ignoreSearch&&(n.search="",o.search=""),!uG(o,n,!0))return!1;if(A==null||s?.ignoreVary||!A.headersList.contains("vary"))return!0;let i=$g(A.headersList.get("vary"));for(let a of i){if(a==="*")return!1;let c=r.headersList.get(a),g=e.headersList.get(a);if(c!==g)return!1}return!0}#s(e,r,A=1/0){let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=[];if(e===void 0)for(let i of this.#e)o.push(i[1]);else{let i=this.#r(s,r);for(let a of i)o.push(a[1])}let n=[];for(let i of o){let a=BG(i,"immutable");if(n.push(a.clone()),n.length>=A)break}return Object.freeze(n)}};Object.defineProperties(Hn.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:xr,matchAll:xr,add:xr,addAll:xr,put:xr,delete:xr,keys:xr});var vd=[{key:"ignoreSearch",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:T.converters.boolean,defaultValue:()=>!1}];T.converters.CacheQueryOptions=T.dictionaryConverter(vd);T.converters.MultiCacheQueryOptions=T.dictionaryConverter([...vd,{key:"cacheName",converter:T.converters.DOMString}]);T.converters.Response=T.interfaceConverter(hG);T.converters["sequence"]=T.sequenceConverter(T.converters.RequestInfo);xd.exports={Cache:Hn}});var _d=B((_P,Yd)=>{"use strict";var{kConstruct:Ms}=Jn(),{Cache:Vn}=Od(),{webidl:de}=Qe(),{kEnumerableProperty:vs}=M(),qn=class t{#e=new Map;constructor(){arguments[0]!==Ms&&de.illegalConstructor(),de.util.markAsUncloneable(this)}async match(e,r={}){if(de.brandCheck(this,t),de.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=de.converters.RequestInfo(e),r=de.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let A=this.#e.get(r.cacheName);return await new Vn(Ms,A).match(e,r)}}else for(let A of this.#e.values()){let o=await new Vn(Ms,A).match(e,r);if(o!==void 0)return o}}async has(e){de.brandCheck(this,t);let r="CacheStorage.has";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)}async open(e){de.brandCheck(this,t);let r="CacheStorage.open";if(de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)){let s=this.#e.get(e);return new Vn(Ms,s)}let A=[];return this.#e.set(e,A),new Vn(Ms,A)}async delete(e){de.brandCheck(this,t);let r="CacheStorage.delete";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.delete(e)}async keys(){return de.brandCheck(this,t),[...this.#e.keys()]}};Object.defineProperties(qn.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:vs,has:vs,open:vs,delete:vs,keys:vs});Yd.exports={CacheStorage:qn}});var Pd=B((JP,Jd)=>{"use strict";Jd.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var Al=B((PP,Wd)=>{"use strict";function fG(t){for(let e=0;e=0&&r<=8||r>=10&&r<=31||r===127)return!0}return!1}function tl(t){for(let e=0;e126||r===34||r===40||r===41||r===60||r===62||r===64||r===44||r===59||r===58||r===92||r===47||r===91||r===93||r===63||r===61||r===123||r===125)throw new Error("Invalid cookie name")}}function rl(t){let e=t.length,r=0;if(t[0]==='"'){if(e===1||t[e-1]!=='"')throw new Error("Invalid cookie value");--e,++r}for(;r126||A===34||A===44||A===59||A===92)throw new Error("Invalid cookie value")}}function Vd(t){for(let e=0;e126||r===59)throw new Error("Invalid cookie path")}}function Hd(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function pG(t){if(t===" ")return;if(t.length>255)throw new Error("Invalid cookie domain");let e=0;for(let r=0;r63)throw new Error("Invalid cookie domain")}if(e===0||t.charCodeAt(t.length-1)===45)throw new Error("Invalid cookie domain")}var mG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wn=Array(61).fill(0).map((t,e)=>e.toString().padStart(2,"0"));function qd(t){return typeof t=="number"&&(t=new Date(t)),`${mG[t.getUTCDay()]}, ${Wn[t.getUTCDate()]} ${wG[t.getUTCMonth()]} ${t.getUTCFullYear()} ${Wn[t.getUTCHours()]}:${Wn[t.getUTCMinutes()]}:${Wn[t.getUTCSeconds()]} GMT`}function yG(t){if(t<0)throw new Error("Invalid cookie max-age")}function RG(t){if(t.name.length===0)return null;tl(t.name),rl(t.value);let e=[`${t.name}=${t.value}`];t.name.startsWith("__Secure-")&&(t.secure=!0),t.name.startsWith("__Host-")&&(t.secure=!0,t.domain=null,t.path="/"),t.secure&&e.push("Secure"),t.httpOnly&&e.push("HttpOnly"),typeof t.maxAge=="number"&&(yG(t.maxAge),e.push(`Max-Age=${t.maxAge}`)),t.domain&&(pG(t.domain),e.push(`Domain=${t.domain}`)),t.path&&(Vd(t.path),e.push(`Path=${t.path}`)),t.expires&&t.expires.toString()!=="Invalid Date"&&e.push(`Expires=${qd(t.expires)}`),t.sameSite&&e.push(`SameSite=${t.sameSite}`);for(let r of t.unparsed){if(!r.includes("="))throw new Error("Invalid unparsed");let[A,...s]=r.split("="),o=A.trim(),n=s.join("=");tl(o),rl(n),e.push(`${o}=${n}`)}return e.join("; ")}Wd.exports={isCTLExcludingHtab:fG,validateCookieName:tl,validateCookiePath:Vd,validateCookieValue:rl,toIMFDate:qd,stringify:RG}});var Zd=B((HP,zd)=>{"use strict";var{maxNameValuePairSize:DG,maxAttributeValueSize:TG}=Pd(),{isCTLExcludingHtab:bG}=Al(),{collectASequenceOfCodePointsFast:zn}=Te(),kG=require("node:assert");function FG(t){if(bG(t))return null;let e="",r="",A="",s="";if(t.includes(";")){let o={position:0};e=zn(";",t,o),r=t.slice(o.position)}else e=t;if(!e.includes("="))s=e;else{let o={position:0};A=zn("=",e,o),s=e.slice(o.position+1)}return A=A.trim(),s=s.trim(),A.length+s.length>DG?null:{name:A,value:s,...MA(r)}}function MA(t,e={}){if(t.length===0)return e;kG(t[0]===";"),t=t.slice(1);let r="";t.includes(";")?(r=zn(";",t,{position:0}),t=t.slice(r.length)):(r=t,t="");let A="",s="";if(r.includes("=")){let n={position:0};A=zn("=",r,n),s=r.slice(n.position+1)}else A=r;if(A=A.trim(),s=s.trim(),s.length>TG)return MA(t,e);let o=A.toLowerCase();if(o==="expires"){let n=new Date(s);e.expires=n}else if(o==="max-age"){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!=="-"||!/^\d+$/.test(s))return MA(t,e);let i=Number(s);e.maxAge=i}else if(o==="domain"){let n=s;n[0]==="."&&(n=n.slice(1)),n=n.toLowerCase(),e.domain=n}else if(o==="path"){let n="";s.length===0||s[0]!=="/"?n="/":n=s,e.path=n}else if(o==="secure")e.secure=!0;else if(o==="httponly")e.httpOnly=!0;else if(o==="samesite"){let n=s.toLowerCase();n==="none"?e.sameSite="None":n==="strict"?e.sameSite="Strict":n==="lax"&&(e.sameSite="Lax")}else e.unparsed??=[],e.unparsed.push(`${A}=${s}`);return MA(t,e)}zd.exports={parseSetCookie:FG,parseUnparsedAttributes:MA}});var Xd=B((VP,Kd)=>{"use strict";var{parseSetCookie:SG}=Zd(),{stringify:NG}=Al(),{webidl:x}=Qe(),{Headers:Zn}=Ur();function UG(t){x.argumentLengthCheck(arguments,1,"getCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.get("cookie"),r={};if(!e)return r;for(let A of e.split(";")){let[s,...o]=A.split("=");r[s.trim()]=o.join("=")}return r}function GG(t,e,r){x.brandCheck(t,Zn,{strict:!1});let A="deleteCookie";x.argumentLengthCheck(arguments,2,A),e=x.converters.DOMString(e,A,"name"),r=x.converters.DeleteCookieAttributes(r),jd(t,{name:e,value:"",expires:new Date(0),...r})}function LG(t){x.argumentLengthCheck(arguments,1,"getSetCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.getSetCookie();return e?e.map(r=>SG(r)):[]}function jd(t,e){x.argumentLengthCheck(arguments,2,"setCookie"),x.brandCheck(t,Zn,{strict:!1}),e=x.converters.Cookie(e);let r=NG(e);r&&t.append("Set-Cookie",r)}x.converters.DeleteCookieAttributes=x.dictionaryConverter([{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null}]);x.converters.Cookie=x.dictionaryConverter([{converter:x.converters.DOMString,key:"name"},{converter:x.converters.DOMString,key:"value"},{converter:x.nullableConverter(t=>typeof t=="number"?x.converters["unsigned long long"](t):new Date(t)),key:"expires",defaultValue:()=>null},{converter:x.nullableConverter(x.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"secure",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:x.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:x.sequenceConverter(x.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);Kd.exports={getCookies:UG,deleteCookie:GG,getSetCookies:LG,setCookie:jd}});var xA=B((qP,ef)=>{"use strict";var{webidl:D}=Qe(),{kEnumerableProperty:Se}=M(),{kConstruct:$d}=$(),{MessagePort:MG}=require("node:worker_threads"),vA=class t extends Event{#e;constructor(e,r={}){if(e===$d){super(arguments[1],arguments[2]),D.util.markAsUncloneable(this);return}let A="MessageEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.MessageEventInit(r,A,"eventInitDict"),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get data(){return D.brandCheck(this,t),this.#e.data}get origin(){return D.brandCheck(this,t),this.#e.origin}get lastEventId(){return D.brandCheck(this,t),this.#e.lastEventId}get source(){return D.brandCheck(this,t),this.#e.source}get ports(){return D.brandCheck(this,t),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(e,r=!1,A=!1,s=null,o="",n="",i=null,a=[]){return D.brandCheck(this,t),D.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new t(e,{bubbles:r,cancelable:A,data:s,origin:o,lastEventId:n,source:i,ports:a})}static createFastMessageEvent(e,r){let A=new t($d,e,r);return A.#e=r,A.#e.data??=null,A.#e.origin??="",A.#e.lastEventId??="",A.#e.source??=null,A.#e.ports??=[],A}},{createFastMessageEvent:vG}=vA;delete vA.createFastMessageEvent;var jn=class t extends Event{#e;constructor(e,r={}){let A="CloseEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.CloseEventInit(r),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get wasClean(){return D.brandCheck(this,t),this.#e.wasClean}get code(){return D.brandCheck(this,t),this.#e.code}get reason(){return D.brandCheck(this,t),this.#e.reason}},Kn=class t extends Event{#e;constructor(e,r){let A="ErrorEvent constructor";D.argumentLengthCheck(arguments,1,A),super(e,r),D.util.markAsUncloneable(this),e=D.converters.DOMString(e,A,"type"),r=D.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return D.brandCheck(this,t),this.#e.message}get filename(){return D.brandCheck(this,t),this.#e.filename}get lineno(){return D.brandCheck(this,t),this.#e.lineno}get colno(){return D.brandCheck(this,t),this.#e.colno}get error(){return D.brandCheck(this,t),this.#e.error}};Object.defineProperties(vA.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:Se,origin:Se,lastEventId:Se,source:Se,ports:Se,initMessageEvent:Se});Object.defineProperties(jn.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:Se,code:Se,wasClean:Se});Object.defineProperties(Kn.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:Se,filename:Se,lineno:Se,colno:Se,error:Se});D.converters.MessagePort=D.interfaceConverter(MG);D.converters["sequence"]=D.sequenceConverter(D.converters.MessagePort);var sl=[{key:"bubbles",converter:D.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:D.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:D.converters.boolean,defaultValue:()=>!1}];D.converters.MessageEventInit=D.dictionaryConverter([...sl,{key:"data",converter:D.converters.any,defaultValue:()=>null},{key:"origin",converter:D.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:D.converters.DOMString,defaultValue:()=>""},{key:"source",converter:D.nullableConverter(D.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:D.converters["sequence"],defaultValue:()=>new Array(0)}]);D.converters.CloseEventInit=D.dictionaryConverter([...sl,{key:"wasClean",converter:D.converters.boolean,defaultValue:()=>!1},{key:"code",converter:D.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:D.converters.USVString,defaultValue:()=>""}]);D.converters.ErrorEventInit=D.dictionaryConverter([...sl,{key:"message",converter:D.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:D.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:D.converters.any}]);ef.exports={MessageEvent:vA,CloseEvent:jn,ErrorEvent:Kn,createFastMessageEvent:vG}});var Or=B((WP,tf)=>{"use strict";var xG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",OG={enumerable:!0,writable:!1,configurable:!1},YG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},_G={NOT_SENT:0,PROCESSING:1,SENT:2},JG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},PG=2**16-1,HG={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},VG=Buffer.allocUnsafe(0),qG={string:1,typedArray:2,arrayBuffer:3,blob:4};tf.exports={uid:xG,sentCloseFrameState:_G,staticPropertyDescriptors:OG,states:YG,opcodes:JG,maxUnsigned16Bit:PG,parserStates:HG,emptyBuffer:VG,sendHints:qG}});var xs=B((zP,rf)=>{"use strict";rf.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var _s=B((ZP,uf)=>{"use strict";var{kReadyState:Os,kController:WG,kResponse:zG,kBinaryType:ZG,kWebSocketURL:jG}=xs(),{states:Ys,opcodes:Ar}=Or(),{ErrorEvent:KG,createFastMessageEvent:XG}=xA(),{isUtf8:$G}=require("node:buffer"),{collectASequenceOfCodePointsFast:eL,removeHTTPWhitespace:Af}=Te();function tL(t){return t[Os]===Ys.CONNECTING}function rL(t){return t[Os]===Ys.OPEN}function AL(t){return t[Os]===Ys.CLOSING}function sL(t){return t[Os]===Ys.CLOSED}function ol(t,e,r=(s,o)=>new Event(s,o),A={}){let s=r(t,A);e.dispatchEvent(s)}function oL(t,e,r){if(t[Os]!==Ys.OPEN)return;let A;if(e===Ar.TEXT)try{A=lf(r)}catch{of(t,"Received invalid UTF-8 in text frame.");return}else e===Ar.BINARY&&(t[ZG]==="blob"?A=new Blob([r]):A=nL(r));ol("message",t,XG,{origin:t[jG].origin,data:A})}function nL(t){return t.byteLength===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function iL(t){if(t.length===0)return!1;for(let e=0;e126||r===34||r===40||r===41||r===44||r===47||r===58||r===59||r===60||r===61||r===62||r===63||r===64||r===91||r===92||r===93||r===123||r===125)return!1}return!0}function aL(t){return t>=1e3&&t<1015?t!==1004&&t!==1005&&t!==1006:t>=3e3&&t<=4999}function of(t,e){let{[WG]:r,[zG]:A}=t;r.abort(),A?.socket&&!A.socket.destroyed&&A.socket.destroy(),e&&ol("error",t,(s,o)=>new KG(s,o),{error:new Error(e),message:e})}function nf(t){return t===Ar.CLOSE||t===Ar.PING||t===Ar.PONG}function af(t){return t===Ar.CONTINUATION}function cf(t){return t===Ar.TEXT||t===Ar.BINARY}function cL(t){return cf(t)||af(t)||nf(t)}function gL(t){let e={position:0},r=new Map;for(;e.position57)return!1}let e=Number.parseInt(t,10);return e>=8&&e<=15}var gf=typeof process.versions.icu=="string",sf=gf?new TextDecoder("utf-8",{fatal:!0}):void 0,lf=gf?sf.decode.bind(sf):function(t){if($G(t))return t.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};uf.exports={isConnecting:tL,isEstablished:rL,isClosing:AL,isClosed:sL,fireEvent:ol,isValidSubprotocol:iL,isValidStatusCode:aL,failWebsocketConnection:of,websocketMessageReceived:oL,utf8Decode:lf,isControlFrame:nf,isContinuationFrame:af,isTextBinaryFrame:cf,isValidOpcode:cL,parseExtensions:gL,isValidClientWindowBits:lL}});var $n=B((jP,Ef)=>{"use strict";var{maxUnsigned16Bit:uL}=Or(),Xn=16386,nl,Js=null,OA=Xn;try{nl=require("node:crypto")}catch{nl={randomFillSync:function(e,r,A){for(let s=0;suL?(n+=8,o=127):s>125&&(n+=2,o=126);let i=Buffer.allocUnsafe(s+n);i[0]=i[1]=0,i[0]|=128,i[0]=(i[0]&240)+e;i[n-4]=A[0],i[n-3]=A[1],i[n-2]=A[2],i[n-1]=A[3],i[1]=o,o===126?i.writeUInt16BE(s,2):o===127&&(i[2]=i[3]=0,i.writeUIntBE(s,4,6)),i[1]|=128;for(let a=0;a{"use strict";var{uid:hL,states:Ps,sentCloseFrameState:ei,emptyBuffer:QL,opcodes:BL}=Or(),{kReadyState:Hs,kSentClose:ti,kByteParser:Qf,kReceivedClose:hf,kResponse:Bf}=xs(),{fireEvent:IL,failWebsocketConnection:sr,isClosing:CL,isClosed:dL,isEstablished:fL,parseExtensions:pL}=_s(),{channels:YA}=jr(),{CloseEvent:mL}=xA(),{makeRequest:wL}=NA(),{fetching:yL}=Gs(),{Headers:RL,getHeadersList:DL}=Ur(),{getDecodeSplit:TL}=Ge(),{WebsocketFrameSend:bL}=$n(),al;try{al=require("node:crypto")}catch{}function kL(t,e,r,A,s,o){let n=t;n.protocol=t.protocol==="ws:"?"http:":"https:";let i=wL({urlList:[n],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(o.headers){let l=DL(new RL(o.headers));i.headersList=l}let a=al.randomBytes(16).toString("base64");i.headersList.append("sec-websocket-key",a),i.headersList.append("sec-websocket-version","13");for(let l of e)i.headersList.append("sec-websocket-protocol",l);return i.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),yL({request:i,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(l){if(l.type==="error"||l.status!==101){sr(A,"Received network error or non-101 status code.");return}if(e.length!==0&&!l.headersList.get("Sec-WebSocket-Protocol")){sr(A,"Server did not respond with sent protocols.");return}if(l.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){sr(A,'Server did not set Upgrade header to "websocket".');return}if(l.headersList.get("Connection")?.toLowerCase()!=="upgrade"){sr(A,'Server did not set Connection header to "upgrade".');return}let u=l.headersList.get("Sec-WebSocket-Accept"),E=al.createHash("sha1").update(a+hL).digest("base64");if(u!==E){sr(A,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let h=l.headersList.get("Sec-WebSocket-Extensions"),C;if(h!==null&&(C=pL(h),!C.has("permessage-deflate"))){sr(A,"Sec-WebSocket-Extensions header does not match.");return}let I=l.headersList.get("Sec-WebSocket-Protocol");if(I!==null&&!TL("sec-websocket-protocol",i.headersList).includes(I)){sr(A,"Protocol was not set in the opening handshake.");return}l.socket.on("data",If),l.socket.on("close",Cf),l.socket.on("error",df),YA.open.hasSubscribers&&YA.open.publish({address:l.socket.address(),protocol:I,extensions:h}),s(l,C)}})}function FL(t,e,r,A){if(!(CL(t)||dL(t)))if(!fL(t))sr(t,"Connection was closed before it was established."),t[Hs]=Ps.CLOSING;else if(t[ti]===ei.NOT_SENT){t[ti]=ei.PROCESSING;let s=new bL;e!==void 0&&r===void 0?(s.frameData=Buffer.allocUnsafe(2),s.frameData.writeUInt16BE(e,0)):e!==void 0&&r!==void 0?(s.frameData=Buffer.allocUnsafe(2+A),s.frameData.writeUInt16BE(e,0),s.frameData.write(r,2,"utf-8")):s.frameData=QL,t[Bf].socket.write(s.createFrame(BL.CLOSE)),t[ti]=ei.SENT,t[Hs]=Ps.CLOSING}else t[Hs]=Ps.CLOSING}function If(t){this.ws[Qf].write(t)||this.pause()}function Cf(){let{ws:t}=this,{[Bf]:e}=t;e.socket.off("data",If),e.socket.off("close",Cf),e.socket.off("error",df);let r=t[ti]===ei.SENT&&t[hf],A=1005,s="",o=t[Qf].closingInfo;o&&!o.error?(A=o.code??1005,s=o.reason):t[hf]||(A=1006),t[Hs]=Ps.CLOSED,IL("close",t,(n,i)=>new mL(n,i),{wasClean:r,code:A,reason:s}),YA.close.hasSubscribers&&YA.close.publish({websocket:t,code:A,reason:s})}function df(t){let{ws:e}=this;e[Hs]=Ps.CLOSING,YA.socketError.hasSubscribers&&YA.socketError.publish(t),this.destroy()}ff.exports={establishWebSocketConnection:kL,closeWebSocketConnection:FL}});var mf=B((XP,pf)=>{"use strict";var{createInflateRaw:SL,Z_DEFAULT_WINDOWBITS:NL}=require("node:zlib"),{isValidClientWindowBits:UL}=_s(),{MessageSizeExceededError:GL}=Y(),LL=Buffer.from([0,0,255,255]),ri=Symbol("kBuffer"),Vs=Symbol("kLength"),gl=class{#e;#t={};#r=0;constructor(e,r){this.#t.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=e.get("server_max_window_bits"),this.#r=r.maxPayloadSize}decompress(e,r,A){if(!this.#e){let s=NL;if(this.#t.serverMaxWindowBits){if(!UL(this.#t.serverMaxWindowBits)){A(new Error("Invalid server_max_window_bits"));return}s=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=SL({windowBits:s})}catch(o){A(o);return}this.#e[ri]=[],this.#e[Vs]=0,this.#e.on("data",o=>{if(this.#e[Vs]+=o.length,this.#r>0&&this.#e[Vs]>this.#r){A(new GL),this.#e.removeAllListeners(),this.#e=null;return}this.#e[ri].push(o)}),this.#e.on("error",o=>{this.#e=null,A(o)})}this.#e.write(e),r&&this.#e.write(LL),this.#e.flush(()=>{if(!this.#e)return;let s=Buffer.concat(this.#e[ri],this.#e[Vs]);this.#e[ri].length=0,this.#e[Vs]=0,A(null,s)})}};pf.exports={PerMessageDeflate:gl}});var Nf=B(($P,Sf)=>{"use strict";var{Writable:ML}=require("node:stream"),vL=require("node:assert"),{parserStates:Ne,opcodes:_A,states:xL,emptyBuffer:wf,sentCloseFrameState:yf}=Or(),{kReadyState:OL,kSentClose:Rf,kResponse:Df,kReceivedClose:Tf}=xs(),{channels:Ai}=jr(),{isValidStatusCode:YL,isValidOpcode:_L,failWebsocketConnection:Je,websocketMessageReceived:bf,utf8Decode:JL,isControlFrame:ll,isTextBinaryFrame:ul,isContinuationFrame:PL}=_s(),{WebsocketFrameSend:kf}=$n(),{closeWebSocketConnection:Ff}=cl(),{PerMessageDeflate:HL}=mf(),{MessageSizeExceededError:El}=Y();function qs(t,e,r){Ff(t,e,r,Buffer.byteLength(r)),Je(t,r)}var hl=class extends ML{#e=[];#t=0;#r=0;#o=!1;#s=Ne.INFO;#A={};#n=[];#i;#c;#a;constructor(e,r,A={}){super(),this.ws=e,this.#i=r??new Map,this.#c=A.maxFragments??0,this.#a=A.maxPayloadSize??0,this.#i.has("permessage-deflate")&&this.#i.set("permessage-deflate",new HL(r,A))}_write(e,r,A){this.#e.push(e),this.#r+=e.length,this.#o=!0,this.run(A)}#g(){return this.#a>0&&!ll(this.#A.opcode)&&this.#A.payloadLength+this.#t>this.#a?(qs(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(e){for(;this.#o;)if(this.#s===Ne.INFO){if(this.#r<2)return e();let r=this.consume(2),A=(r[0]&128)!==0,s=r[0]&15,o=(r[1]&128)===128,n=!A&&s!==_A.CONTINUATION,i=r[1]&127,a=r[0]&64,c=r[0]&32,g=r[0]&16;if(!_L(s))return Je(this.ws,"Invalid opcode received"),e();if(o)return Je(this.ws,"Frame cannot be masked"),e();if(a!==0&&!this.#i.has("permessage-deflate")){Je(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||g!==0){Je(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(n&&!ul(s)){Je(this.ws,"Invalid frame type was fragmented.");return}if(ul(s)&&this.#n.length>0){Je(this.ws,"Expected continuation frame");return}if(this.#A.fragmented&&n){Je(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((i>125||n)&&ll(s)){Je(this.ws,"Control frame either too large or fragmented");return}if(PL(s)&&this.#n.length===0&&!this.#A.compressed){Je(this.ws,"Unexpected continuation frame");return}if(i<=125){if(this.#A.payloadLength=i,this.#s=Ne.READ_DATA,!this.#g())return}else i===126?this.#s=Ne.PAYLOADLENGTH_16:i===127&&(this.#s=Ne.PAYLOADLENGTH_64);ul(s)&&(this.#A.binaryType=s,this.#A.compressed=a!==0),this.#A.opcode=s,this.#A.masked=o,this.#A.fin=A,this.#A.fragmented=n}else if(this.#s===Ne.PAYLOADLENGTH_16){if(this.#r<2)return e();let r=this.consume(2);if(this.#A.payloadLength=r.readUInt16BE(0),this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.PAYLOADLENGTH_64){if(this.#r<8)return e();let r=this.consume(8),A=r.readUInt32BE(0),s=r.readUInt32BE(4);if(A!==0||s>2**31-1){Je(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#A.payloadLength=s,this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.READ_DATA){if(this.#r{if(A){let o=A instanceof El?1009:1007;qs(this.ws,o,A.message);return}if(this.writeFragments(s)){if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}if(!this.#A.fin){this.#s=Ne.INFO,this.#o=!0,this.run(e);return}bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#o=!0,this.#s=Ne.INFO,this.run(e)}}),this.#o=!1;break}else{if(!this.writeFragments(r))return;if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}!this.#A.fragmented&&this.#A.fin&&bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#s=Ne.INFO}}}consume(e){if(e>this.#r)throw new Error("Called consume() before buffers satiated.");if(e===0)return wf;if(this.#e[0].length===e)return this.#r-=this.#e[0].length,this.#e.shift();let r=Buffer.allocUnsafe(e),A=0;for(;A!==e;){let s=this.#e[0],{length:o}=s;if(o+A===e){r.set(this.#e.shift(),A);break}else if(o+A>e){r.set(s.subarray(0,e-A),A),this.#e[0]=s.subarray(e-A);break}else r.set(this.#e.shift(),A),A+=s.length}return this.#r-=e,r}writeFragments(e){return this.#c>0&&this.#n.length===this.#c?(qs(this.ws,1008,"Too many message fragments"),!1):(this.#t+=e.length,this.#n.push(e),!0)}consumeFragments(){let e=this.#n;if(e.length===1)return this.#t=0,e.shift();let r=Buffer.concat(e,this.#t);return this.#n=[],this.#t=0,r}parseCloseBody(e){vL(e.length!==1);let r;if(e.length>=2&&(r=e.readUInt16BE(0)),r!==void 0&&!YL(r))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);A[0]===239&&A[1]===187&&A[2]===191&&(A=A.subarray(3));try{A=JL(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:r,reason:A,error:!1}}parseControlFrame(e){let{opcode:r,payloadLength:A}=this.#A;if(r===_A.CLOSE){if(A===1)return Je(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#A.closeInfo=this.parseCloseBody(e),this.#A.closeInfo.error){let{code:s,reason:o}=this.#A.closeInfo;return Ff(this.ws,s,o,o.length),Je(this.ws,o),!1}if(this.ws[Rf]!==yf.SENT){let s=wf;this.#A.closeInfo.code&&(s=Buffer.allocUnsafe(2),s.writeUInt16BE(this.#A.closeInfo.code,0));let o=new kf(s);this.ws[Df].socket.write(o.createFrame(_A.CLOSE),n=>{n||(this.ws[Rf]=yf.SENT)})}return this.ws[OL]=xL.CLOSING,this.ws[Tf]=!0,!1}else if(r===_A.PING){if(!this.ws[Tf]){let s=new kf(e);this.ws[Df].socket.write(s.createFrame(_A.PONG)),Ai.ping.hasSubscribers&&Ai.ping.publish({payload:e})}}else r===_A.PONG&&Ai.pong.hasSubscribers&&Ai.pong.publish({payload:e});return!0}get closingInfo(){return this.#A.closeInfo}};Sf.exports={ByteParser:hl}});var vf=B((eH,Mf)=>{"use strict";var{WebsocketFrameSend:VL}=$n(),{opcodes:Uf,sendHints:JA}=Or(),qL=fc(),Gf=Buffer[Symbol.species],Ql=class{#e=new qL;#t=!1;#r;constructor(e){this.#r=e}add(e,r,A){if(A!==JA.blob){let o=Lf(e,A);if(!this.#t)this.#r.write(o,r);else{let n={promise:null,callback:r,frame:o};this.#e.push(n)}return}let s={promise:e.arrayBuffer().then(o=>{s.promise=null,s.frame=Lf(o,A)}),callback:r,frame:null};this.#e.push(s),this.#t||this.#o()}async#o(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let r=e.shift();r.promise!==null&&await r.promise,this.#r.write(r.frame,r.callback),r.callback=r.frame=null}this.#t=!1}};function Lf(t,e){return new VL(WL(t,e)).createFrame(e===JA.string?Uf.TEXT:Uf.BINARY)}function WL(t,e){switch(e){case JA.string:return Buffer.from(t);case JA.arrayBuffer:case JA.blob:return new Gf(t);case JA.typedArray:return new Gf(t.buffer,t.byteOffset,t.byteLength)}}Mf.exports={SendQueue:Ql}});var Wf=B((tH,qf)=>{"use strict";var{webidl:U}=Qe(),{URLSerializer:zL}=Te(),{environmentSettingsObject:xf}=Ge(),{staticPropertyDescriptors:or,states:Ws,sentCloseFrameState:ZL,sendHints:si}=Or(),{kWebSocketURL:Of,kReadyState:Bl,kController:Yf,kBinaryType:oi,kResponse:_f,kSentClose:jL,kByteParser:KL}=xs(),{isConnecting:XL,isEstablished:$L,isClosing:eM,isValidSubprotocol:tM,fireEvent:Jf}=_s(),{establishWebSocketConnection:rM,closeWebSocketConnection:Pf}=cl(),{ByteParser:AM}=Nf(),{kEnumerableProperty:Ze,isBlobLike:Hf}=M(),{getGlobalDispatcher:sM}=fn(),{types:Vf}=require("node:util"),{ErrorEvent:oM,CloseEvent:nM}=xA(),{SendQueue:iM}=vf(),Pe=class t extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#o="";#s;constructor(e,r=[]){super(),U.util.markAsUncloneable(this);let A="WebSocket constructor";U.argumentLengthCheck(arguments,1,A);let s=U.converters["DOMString or sequence or WebSocketInit"](r,A,"options");e=U.converters.USVString(e,A,"url"),r=s.protocols;let o=xf.settingsObject.baseUrl,n;try{n=new URL(e,o)}catch(a){throw new DOMException(a,"SyntaxError")}if(n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),n.protocol!=="ws:"&&n.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${n.protocol}`,"SyntaxError");if(n.hash||n.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof r=="string"&&(r=[r]),r.length!==new Set(r.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(r.length>0&&!r.every(a=>tM(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[Of]=new URL(n.href);let i=xf.settingsObject;this[Yf]=rM(n,r,i,this,(a,c)=>this.#A(a,c),s),this[Bl]=t.CONNECTING,this[jL]=ZL.NOT_SENT,this[oi]="blob"}close(e=void 0,r=void 0){U.brandCheck(this,t);let A="WebSocket.close";if(e!==void 0&&(e=U.converters["unsigned short"](e,A,"code",{clamp:!0})),r!==void 0&&(r=U.converters.USVString(r,A,"reason")),e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");let s=0;if(r!==void 0&&(s=Buffer.byteLength(r),s>123))throw new DOMException(`Reason must be less than 123 bytes; received ${s}`,"SyntaxError");Pf(this,e,r,s)}send(e){U.brandCheck(this,t);let r="WebSocket.send";if(U.argumentLengthCheck(arguments,1,r),e=U.converters.WebSocketSendData(e,r,"data"),XL(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!$L(this)||eM(this)))if(typeof e=="string"){let A=Buffer.byteLength(e);this.#t+=A,this.#s.add(e,()=>{this.#t-=A},si.string)}else Vf.isArrayBuffer(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.arrayBuffer)):ArrayBuffer.isView(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.typedArray)):Hf(e)&&(this.#t+=e.size,this.#s.add(e,()=>{this.#t-=e.size},si.blob))}get readyState(){return U.brandCheck(this,t),this[Bl]}get bufferedAmount(){return U.brandCheck(this,t),this.#t}get url(){return U.brandCheck(this,t),zL(this[Of])}get extensions(){return U.brandCheck(this,t),this.#o}get protocol(){return U.brandCheck(this,t),this.#r}get onopen(){return U.brandCheck(this,t),this.#e.open}set onopen(e){U.brandCheck(this,t),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onerror(){return U.brandCheck(this,t),this.#e.error}set onerror(e){U.brandCheck(this,t),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}get onclose(){return U.brandCheck(this,t),this.#e.close}set onclose(e){U.brandCheck(this,t),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof e=="function"?(this.#e.close=e,this.addEventListener("close",e)):this.#e.close=null}get onmessage(){return U.brandCheck(this,t),this.#e.message}set onmessage(e){U.brandCheck(this,t),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get binaryType(){return U.brandCheck(this,t),this[oi]}set binaryType(e){U.brandCheck(this,t),e!=="blob"&&e!=="arraybuffer"?this[oi]="blob":this[oi]=e}#A(e,r){this[_f]=e;let A=this[Yf]?.dispatcher?.webSocketOptions,s=A?.maxFragments,o=A?.maxPayloadSize,n=new AM(this,r,{maxFragments:s,maxPayloadSize:o});n.on("drain",aM),n.on("error",cM.bind(this)),e.socket.ws=this,this[KL]=n,this.#s=new iM(e.socket),this[Bl]=Ws.OPEN;let i=e.headersList.get("sec-websocket-extensions");i!==null&&(this.#o=i);let a=e.headersList.get("sec-websocket-protocol");a!==null&&(this.#r=a),Jf("open",this)}};Pe.CONNECTING=Pe.prototype.CONNECTING=Ws.CONNECTING;Pe.OPEN=Pe.prototype.OPEN=Ws.OPEN;Pe.CLOSING=Pe.prototype.CLOSING=Ws.CLOSING;Pe.CLOSED=Pe.prototype.CLOSED=Ws.CLOSED;Object.defineProperties(Pe.prototype,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or,url:Ze,readyState:Ze,bufferedAmount:Ze,onopen:Ze,onerror:Ze,onclose:Ze,close:Ze,onmessage:Ze,binaryType:Ze,send:Ze,extensions:Ze,protocol:Ze,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Pe,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or});U.converters["sequence"]=U.sequenceConverter(U.converters.DOMString);U.converters["DOMString or sequence"]=function(t,e,r){return U.util.Type(t)==="Object"&&Symbol.iterator in t?U.converters["sequence"](t):U.converters.DOMString(t,e,r)};U.converters.WebSocketInit=U.dictionaryConverter([{key:"protocols",converter:U.converters["DOMString or sequence"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:U.converters.any,defaultValue:()=>sM()},{key:"headers",converter:U.nullableConverter(U.converters.HeadersInit)}]);U.converters["DOMString or sequence or WebSocketInit"]=function(t){return U.util.Type(t)==="Object"&&!(Symbol.iterator in t)?U.converters.WebSocketInit(t):{protocols:U.converters["DOMString or sequence"](t)}};U.converters.WebSocketSendData=function(t){if(U.util.Type(t)==="Object"){if(Hf(t))return U.converters.Blob(t,{strict:!1});if(ArrayBuffer.isView(t)||Vf.isArrayBuffer(t))return U.converters.BufferSource(t)}return U.converters.USVString(t)};function aM(){this.ws[_f].socket.resume()}function cM(t){let e,r;t instanceof nM?(e=t.reason,r=t.code):e=t.message,Jf("error",this,()=>new oM("error",{error:t,message:e})),Pf(this,r)}qf.exports={WebSocket:Pe}});var Il=B((rH,zf)=>{"use strict";function gM(t){return t.indexOf("\0")===-1}function lM(t){if(t.length===0)return!1;for(let e=0;e57)return!1;return!0}function uM(t){return new Promise(e=>{setTimeout(e,t).unref()})}zf.exports={isValidLastEventId:gM,isASCIINumber:lM,delay:uM}});var Xf=B((AH,Kf)=>{"use strict";var{Transform:EM}=require("node:stream"),{isASCIINumber:Zf,isValidLastEventId:jf}=Il(),vt=[239,187,191],Cl=10,ni=13,hM=58,QM=32,dl=class extends EM{state=null;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,r,A){if(e.length===0){A();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===vt[0]){A();return}this.checkBOM=!1,A();return;case 2:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]){A();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,A();return}this.checkBOM=!1;break;default:this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1;break}for(;this.pos0&&(r[s]=o);break}}processEvent(e){e.retry&&Zf(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&jf(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};Kf.exports={EventSourceStream:dl}});var np=B((sH,op)=>{"use strict";var{pipeline:BM}=require("node:stream"),{fetching:IM}=Gs(),{makeRequest:CM}=NA(),{webidl:xt}=Qe(),{EventSourceStream:dM}=Xf(),{parseMIMEType:fM}=Te(),{createFastMessageEvent:pM}=xA(),{isNetworkError:$f}=Ns(),{delay:mM}=Il(),{kEnumerableProperty:Yr}=M(),{environmentSettingsObject:ep}=Ge(),tp=!1,rp=3e3,zs=0,Ap=1,Zs=2,wM="anonymous",yM="use-credentials",PA=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#o=zs;#s=null;#A=null;#n;#i;constructor(e,r={}){super(),xt.util.markAsUncloneable(this);let A="EventSource constructor";xt.argumentLengthCheck(arguments,1,A),tp||(tp=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=xt.converters.USVString(e,A,"url"),r=xt.converters.EventSourceInitDict(r,A,"eventSourceInitDict"),this.#n=r.dispatcher,this.#i={lastEventId:"",reconnectionTime:rp};let s=ep,o;try{o=new URL(e,s.settingsObject.baseUrl),this.#i.origin=o.origin}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=o.href;let n=wM;r.withCredentials&&(n=yM,this.#r=!0);let i={redirect:"follow",keepalive:!0,mode:"cors",credentials:n==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};i.client=ep.settingsObject,i.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],i.cache="no-store",i.initiator="other",i.urlList=[new URL(this.#t)],this.#s=CM(i),this.#c()}get readyState(){return this.#o}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#o===Zs)return;this.#o=zs;let e={request:this.#s,dispatcher:this.#n},r=A=>{$f(A)&&(this.dispatchEvent(new Event("error")),this.close()),this.#a()};e.processResponseEndOfBody=r,e.processResponse=A=>{if($f(A))if(A.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#a();return}let s=A.headersList.get("content-type",!0),o=s!==null?fM(s):"failure",n=o!=="failure"&&o.essence==="text/event-stream";if(A.status!==200||n===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#o=Ap,this.dispatchEvent(new Event("open")),this.#i.origin=A.urlList[A.urlList.length-1].origin;let i=new dM({eventSourceSettings:this.#i,push:a=>{this.dispatchEvent(pM(a.type,a.options))}});BM(A.body.stream,i,a=>{a?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#A=IM(e)}async#a(){this.#o!==Zs&&(this.#o=zs,this.dispatchEvent(new Event("error")),await mM(this.#i.reconnectionTime),this.#o===zs&&(this.#i.lastEventId.length&&this.#s.headersList.set("last-event-id",this.#i.lastEventId,!0),this.#c()))}close(){xt.brandCheck(this,t),this.#o!==Zs&&(this.#o=Zs,this.#A.abort(),this.#s=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}},sp={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:zs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:Ap,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:Zs,writable:!1}};Object.defineProperties(PA,sp);Object.defineProperties(PA.prototype,sp);Object.defineProperties(PA.prototype,{close:Yr,onerror:Yr,onmessage:Yr,onopen:Yr,readyState:Yr,url:Yr,withCredentials:Yr});xt.converters.EventSourceInitDict=xt.dictionaryConverter([{key:"withCredentials",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:xt.converters.any}]);op.exports={EventSource:PA,defaultReconnectionTime:rp}});var ci=B((oH,N)=>{"use strict";var RM=BA(),ip=$A(),DM=IA(),TM=AB(),bM=CA(),kM=Yc(),FM=TB(),SM=GB(),ap=Y(),ai=M(),{InvalidArgumentError:ii}=ap,HA=fI(),NM=ts(),UM=pg(),GM=rC(),LM=yg(),MM=ag(),vM=gn(),{getGlobalDispatcher:cp,setGlobalDispatcher:xM}=fn(),OM=pn(),YM=Xo(),_M=$o();Object.assign(ip.prototype,HA);N.exports.Dispatcher=ip;N.exports.Client=RM;N.exports.Pool=DM;N.exports.BalancedPool=TM;N.exports.Agent=bM;N.exports.ProxyAgent=kM;N.exports.EnvHttpProxyAgent=FM;N.exports.RetryAgent=SM;N.exports.RetryHandler=vM;N.exports.DecoratorHandler=OM;N.exports.RedirectHandler=YM;N.exports.createRedirectInterceptor=_M;N.exports.interceptors={redirect:cC(),retry:lC(),dump:EC(),dns:BC()};N.exports.buildConnector=NM;N.exports.errors=ap;N.exports.util={parseHeaders:ai.parseHeaders,headerNameToString:ai.headerNameToString};function js(t){return(e,r,A)=>{if(typeof r=="function"&&(A=r,r=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new ii("invalid url");if(r!=null&&typeof r!="object")throw new ii("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new ii("invalid opts.path");let n=r.path;r.path.startsWith("/")||(n=`/${n}`),e=new URL(ai.parseOrigin(e).origin+n)}else r||(r=typeof e=="object"?e:{}),e=ai.parseURL(e);let{agent:s,dispatcher:o=cp()}=r;if(s)throw new ii("unsupported opts.agent. Did you mean opts.client?");return t.call(o,{...r,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:r.method||(r.body?"PUT":"GET")},A)}}N.exports.setGlobalDispatcher=xM;N.exports.getGlobalDispatcher=cp;var JM=Gs().fetch;N.exports.fetch=async function(e,r=void 0){try{return await JM(e,r)}catch(A){throw A&&typeof A=="object"&&Error.captureStackTrace(A),A}};N.exports.Headers=Ur().Headers;N.exports.Response=Ns().Response;N.exports.Request=NA().Request;N.exports.FormData=as().FormData;N.exports.File=globalThis.File??require("node:buffer").File;N.exports.FileReader=Nd().FileReader;var{setGlobalOrigin:PM,getGlobalOrigin:HM}=_a();N.exports.setGlobalOrigin=PM;N.exports.getGlobalOrigin=HM;var{CacheStorage:VM}=_d(),{kConstruct:qM}=Jn();N.exports.caches=new VM(qM);var{deleteCookie:WM,getCookies:zM,getSetCookies:ZM,setCookie:jM}=Xd();N.exports.deleteCookie=WM;N.exports.getCookies=zM;N.exports.getSetCookies=ZM;N.exports.setCookie=jM;var{parseMIMEType:KM,serializeAMimeType:XM}=Te();N.exports.parseMIMEType=KM;N.exports.serializeAMimeType=XM;var{CloseEvent:$M,ErrorEvent:ev,MessageEvent:tv}=xA();N.exports.WebSocket=Wf().WebSocket;N.exports.CloseEvent=$M;N.exports.ErrorEvent=ev;N.exports.MessageEvent=tv;N.exports.request=js(HA.request);N.exports.stream=js(HA.stream);N.exports.pipeline=js(HA.pipeline);N.exports.connect=js(HA.connect);N.exports.upgrade=js(HA.upgrade);N.exports.MockClient=UM;N.exports.MockPool=LM;N.exports.MockAgent=GM;N.exports.mockErrors=MM;var{EventSource:rv}=np();N.exports.EventSource=rv});var Up=B(Ci=>{"use strict";Object.defineProperty(Ci,"__esModule",{value:!0});Ci.getProxyUrl=Rv;Ci.checkBypass=Np;function Rv(t){let e=t.protocol==="https:";if(Np(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new Ii(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new Ii(`http://${r}`)}else return}function Np(t){if(!t.hostname)return!1;let e=t.hostname;if(Dv(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Dv(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var Ii=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}}});var Lp=B(re=>{"use strict";var Tv=re&&re.__createBinding||(Object.create?(function(t,e,r,A){A===void 0&&(A=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,A,s)}):(function(t,e,r,A){A===void 0&&(A=r),t[A]=e[r]})),bv=re&&re.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),mi=re&&re.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var A=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(A[A.length]=s);return A},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var A=t(e),s=0;sae(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ae(this,void 0,void 0,function*(){return new Promise(e=>ae(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};re.HttpClientResponse=pi;function Mv(t){return new URL(t).protocol==="https:"}var vl=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ae(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ae(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ae(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ae(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ae(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ae(this,arguments,void 0,function*(r,A={}){A[ye.Accept]=this._getExistingOrDefaultHeader(A,ye.Accept,Yt.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ae(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&Uv.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===Ke.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Sv.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!Nv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pi(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Ml.getProxyUrl(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?Gp:Ll;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},ro(this.requestOptions.headers),ro(e||{})):ro(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=ro(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=ro(this.requestOptions.headers)[ye.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[ye.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Ml.getProxyUrl(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||Ll.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?di.httpsOverHttps:di.httpsOverHttp:a=c?di.httpOverHttps:di.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new Gp.Agent(i):new Ll.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new kv.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ae(this,void 0,void 0,function*(){e=Math.min(Gv,e);let r=Lv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ae(this,void 0,void 0,function*(){return new Promise((A,s)=>ae(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===Ke.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fi(g,o);l.result=n.result,s(l)}else A(n)}))})}};re.HttpClient=vl;var ro=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{})});var nm=B(yi=>{"use strict";Object.defineProperty(yi,"__esModule",{value:!0});yi.format=sx;yi.parse=ox;var tx=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,tm=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rx=/[\\"]/g,Ax=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rm=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function sx(t){let{type:e,parameters:r}=t;if(!e||!Ax.test(e))throw new TypeError(`Invalid type: ${e}`);let A=e;if(r)for(let s of Object.keys(r)){if(!tm.test(s))throw new TypeError(`Invalid parameter name: ${s}`);A+=`; ${s}=${cx(r[s])}`}return A}function ox(t,e){let r=t.length,A=Pl(t,0,r),s=A;A=Jl(t,A,r);let o=Hl(t,s,A),n=t.slice(s,o).toLowerCase(),i=e?.parameters===!1?new rm:ax(t,A,r);return{type:n,parameters:i}}var Am=32,sm=9,om=59,nx=61,em=34,ix=92;function ax(t,e,r){let A=new rm;e:for(;ee;){let A=t.charCodeAt(r-1);if(A!==Am&&A!==sm)break;r--}return r}function cx(t){if(tm.test(t))return t;if(tx.test(t))return`"${t.replace(rx,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var zA=B((Y2,Sm)=>{"use strict";var Px="2.0.0",Hx=Number.MAX_SAFE_INTEGER||9007199254740991,Vx=16,qx=250,Wx=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Sm.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Vx,MAX_SAFE_BUILD_LENGTH:qx,MAX_SAFE_INTEGER:Hx,RELEASE_TYPES:Wx,SEMVER_SPEC_VERSION:Px,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var oo=B((_2,Nm)=>{"use strict";var zx=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};Nm.exports=zx});var ZA=B((mt,Um)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:ou,MAX_SAFE_BUILD_LENGTH:Zx,MAX_LENGTH:jx}=zA(),Kx=oo();mt=Um.exports={};var Xx=mt.re=[],$x=mt.safeRe=[],m=mt.src=[],eO=mt.safeSrc=[],w=mt.t={},tO=0,nu="[a-zA-Z0-9-]",rO=[["\\s",1],["\\d",jx],[nu,Zx]],AO=t=>{for(let[e,r]of rO)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},G=(t,e,r)=>{let A=AO(e),s=tO++;Kx(t,s,e),w[t]=s,m[s]=e,eO[s]=A,Xx[s]=new RegExp(e,r?"g":void 0),$x[s]=new RegExp(A,r?"g":void 0)};G("NUMERICIDENTIFIER","0|[1-9]\\d*");G("NUMERICIDENTIFIERLOOSE","\\d+");G("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${nu}*`);G("MAINVERSION",`(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})`);G("MAINVERSIONLOOSE",`(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASEIDENTIFIER",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIER]})`);G("PRERELEASEIDENTIFIERLOOSE",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASE",`(?:-(${m[w.PRERELEASEIDENTIFIER]}(?:\\.${m[w.PRERELEASEIDENTIFIER]})*))`);G("PRERELEASELOOSE",`(?:-?(${m[w.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${m[w.PRERELEASEIDENTIFIERLOOSE]})*))`);G("BUILDIDENTIFIER",`${nu}+`);G("BUILD",`(?:\\+(${m[w.BUILDIDENTIFIER]}(?:\\.${m[w.BUILDIDENTIFIER]})*))`);G("FULLPLAIN",`v?${m[w.MAINVERSION]}${m[w.PRERELEASE]}?${m[w.BUILD]}?`);G("FULL",`^${m[w.FULLPLAIN]}$`);G("LOOSEPLAIN",`[v=\\s]*${m[w.MAINVERSIONLOOSE]}${m[w.PRERELEASELOOSE]}?${m[w.BUILD]}?`);G("LOOSE",`^${m[w.LOOSEPLAIN]}$`);G("GTLT","((?:<|>)?=?)");G("XRANGEIDENTIFIERLOOSE",`${m[w.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);G("XRANGEIDENTIFIER",`${m[w.NUMERICIDENTIFIER]}|x|X|\\*`);G("XRANGEPLAIN",`[v=\\s]*(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:${m[w.PRERELEASE]})?${m[w.BUILD]}?)?)?`);G("XRANGEPLAINLOOSE",`[v=\\s]*(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:${m[w.PRERELEASELOOSE]})?${m[w.BUILD]}?)?)?`);G("XRANGE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAIN]}$`);G("XRANGELOOSE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAINLOOSE]}$`);G("COERCEPLAIN",`(^|[^\\d])(\\d{1,${ou}})(?:\\.(\\d{1,${ou}}))?(?:\\.(\\d{1,${ou}}))?`);G("COERCE",`${m[w.COERCEPLAIN]}(?:$|[^\\d])`);G("COERCEFULL",m[w.COERCEPLAIN]+`(?:${m[w.PRERELEASE]})?(?:${m[w.BUILD]})?(?:$|[^\\d])`);G("COERCERTL",m[w.COERCE],!0);G("COERCERTLFULL",m[w.COERCEFULL],!0);G("LONETILDE","(?:~>?)");G("TILDETRIM",`(\\s*)${m[w.LONETILDE]}\\s+`,!0);mt.tildeTrimReplace="$1~";G("TILDE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAIN]}$`);G("TILDELOOSE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAINLOOSE]}$`);G("LONECARET","(?:\\^)");G("CARETTRIM",`(\\s*)${m[w.LONECARET]}\\s+`,!0);mt.caretTrimReplace="$1^";G("CARET",`^${m[w.LONECARET]}${m[w.XRANGEPLAIN]}$`);G("CARETLOOSE",`^${m[w.LONECARET]}${m[w.XRANGEPLAINLOOSE]}$`);G("COMPARATORLOOSE",`^${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]})$|^$`);G("COMPARATOR",`^${m[w.GTLT]}\\s*(${m[w.FULLPLAIN]})$|^$`);G("COMPARATORTRIM",`(\\s*)${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]}|${m[w.XRANGEPLAIN]})`,!0);mt.comparatorTrimReplace="$1$2$3";G("HYPHENRANGE",`^\\s*(${m[w.XRANGEPLAIN]})\\s+-\\s+(${m[w.XRANGEPLAIN]})\\s*$`);G("HYPHENRANGELOOSE",`^\\s*(${m[w.XRANGEPLAINLOOSE]})\\s+-\\s+(${m[w.XRANGEPLAINLOOSE]})\\s*$`);G("STAR","(<|>)?=?\\s*\\*");G("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");G("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var bi=B((J2,Gm)=>{"use strict";var sO=Object.freeze({loose:!0}),oO=Object.freeze({}),nO=t=>t?typeof t!="object"?sO:t:oO;Gm.exports=nO});var iu=B((P2,vm)=>{"use strict";var Lm=/^[0-9]+$/,Mm=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:tMm(e,t);vm.exports={compareIdentifiers:Mm,rcompareIdentifiers:iO}});var Be=B((H2,Om)=>{"use strict";var ki=oo(),{MAX_LENGTH:xm,MAX_SAFE_INTEGER:Fi}=zA(),{safeRe:Si,t:Ni}=ZA(),aO=bi(),{compareIdentifiers:au}=iu(),cO=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let A=0;Axm)throw new TypeError(`version is longer than ${xm} characters`);ki("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let A=e.trim().match(r.loose?Si[Ni.LOOSE]:Si[Ni.FULL]);if(!A)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+A[1],this.minor=+A[2],this.patch=+A[3],this.major>Fi||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Fi||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Fi||this.patch<0)throw new TypeError("Invalid patch version");A[4]?this.prerelease=A[4].split(".").map(s=>{if(/^[0-9]+$/.test(s)){let o=+s;if(o>=0&&oe.major?1:this.minore.minor?1:this.patche.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let A=this.prerelease[r],s=e.prerelease[r];if(ki("prerelease compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let A=this.build[r],s=e.build[r];if(ki("build compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}inc(e,r,A){if(e.startsWith("pre")){if(!r&&A===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let s=`-${r}`.match(this.options.loose?Si[Ni.PRERELEASELOOSE]:Si[Ni.PRERELEASE]);if(!s||s[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,A);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,A);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,A),this.inc("pre",r,A);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,A),this.inc("pre",r,A);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let s=Number(A)?1:0;if(this.prerelease.length===0)this.prerelease=[s];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&A===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(s)}}if(r){let o=[r,s];if(A===!1&&(o=[r]),cO(this.prerelease,r)){let n=this.prerelease[r.split(".").length];isNaN(n)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};Om.exports=cu});var ur=B((V2,_m)=>{"use strict";var Ym=Be(),gO=(t,e,r=!1)=>{if(t instanceof Ym)return t;try{return new Ym(t,e)}catch(A){if(!r)return null;throw A}};_m.exports=gO});var Pm=B((q2,Jm)=>{"use strict";var lO=ur(),uO=(t,e)=>{let r=lO(t,e);return r?r.version:null};Jm.exports=uO});var Vm=B((W2,Hm)=>{"use strict";var EO=ur(),hO=(t,e)=>{let r=EO(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};Hm.exports=hO});var zm=B((z2,Wm)=>{"use strict";var qm=Be(),QO=(t,e,r,A,s)=>{typeof r=="string"&&(s=A,A=r,r=void 0);try{return new qm(t instanceof qm?t.version:t,r).inc(e,A,s).version}catch{return null}};Wm.exports=QO});var Km=B((Z2,jm)=>{"use strict";var Zm=ur(),BO=(t,e)=>{let r=Zm(t,null,!0),A=Zm(e,null,!0),s=r.compare(A);if(s===0)return null;let o=s>0,n=o?r:A,i=o?A:r,a=!!n.prerelease.length;if(!!i.prerelease.length&&!a){if(!i.patch&&!i.minor)return"major";if(i.compareMain(n)===0)return i.minor&&!i.patch?"minor":"patch"}let g=a?"pre":"";return r.major!==A.major?g+"major":r.minor!==A.minor?g+"minor":r.patch!==A.patch?g+"patch":"prerelease"};jm.exports=BO});var $m=B((j2,Xm)=>{"use strict";var IO=Be(),CO=(t,e)=>new IO(t,e).major;Xm.exports=CO});var tw=B((K2,ew)=>{"use strict";var dO=Be(),fO=(t,e)=>new dO(t,e).minor;ew.exports=fO});var Aw=B((X2,rw)=>{"use strict";var pO=Be(),mO=(t,e)=>new pO(t,e).patch;rw.exports=mO});var ow=B(($2,sw)=>{"use strict";var wO=ur(),yO=(t,e)=>{let r=wO(t,e);return r&&r.prerelease.length?r.prerelease:null};sw.exports=yO});var Xe=B((eV,iw)=>{"use strict";var nw=Be(),RO=(t,e,r)=>new nw(t,r).compare(new nw(e,r));iw.exports=RO});var cw=B((tV,aw)=>{"use strict";var DO=Xe(),TO=(t,e,r)=>DO(e,t,r);aw.exports=TO});var lw=B((rV,gw)=>{"use strict";var bO=Xe(),kO=(t,e)=>bO(t,e,!0);gw.exports=kO});var Ui=B((AV,Ew)=>{"use strict";var uw=Be(),FO=(t,e,r)=>{let A=new uw(t,r),s=new uw(e,r);return A.compare(s)||A.compareBuild(s)};Ew.exports=FO});var Qw=B((sV,hw)=>{"use strict";var SO=Ui(),NO=(t,e)=>t.sort((r,A)=>SO(r,A,e));hw.exports=NO});var Iw=B((oV,Bw)=>{"use strict";var UO=Ui(),GO=(t,e)=>t.sort((r,A)=>UO(A,r,e));Bw.exports=GO});var no=B((nV,Cw)=>{"use strict";var LO=Xe(),MO=(t,e,r)=>LO(t,e,r)>0;Cw.exports=MO});var Gi=B((iV,dw)=>{"use strict";var vO=Xe(),xO=(t,e,r)=>vO(t,e,r)<0;dw.exports=xO});var gu=B((aV,fw)=>{"use strict";var OO=Xe(),YO=(t,e,r)=>OO(t,e,r)===0;fw.exports=YO});var lu=B((cV,pw)=>{"use strict";var _O=Xe(),JO=(t,e,r)=>_O(t,e,r)!==0;pw.exports=JO});var Li=B((gV,mw)=>{"use strict";var PO=Xe(),HO=(t,e,r)=>PO(t,e,r)>=0;mw.exports=HO});var Mi=B((lV,ww)=>{"use strict";var VO=Xe(),qO=(t,e,r)=>VO(t,e,r)<=0;ww.exports=qO});var uu=B((uV,yw)=>{"use strict";var WO=gu(),zO=lu(),ZO=no(),jO=Li(),KO=Gi(),XO=Mi(),$O=(t,e,r,A)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return WO(t,r,A);case"!=":return zO(t,r,A);case">":return ZO(t,r,A);case">=":return jO(t,r,A);case"<":return KO(t,r,A);case"<=":return XO(t,r,A);default:throw new TypeError(`Invalid operator: ${e}`)}};yw.exports=$O});var Dw=B((EV,Rw)=>{"use strict";var eY=Be(),tY=ur(),{safeRe:vi,t:xi}=ZA(),rY=(t,e)=>{if(t instanceof eY)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?vi[xi.COERCEFULL]:vi[xi.COERCE]);else{let a=e.includePrerelease?vi[xi.COERCERTLFULL]:vi[xi.COERCERTL],c;for(;(c=a.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||c.index+c[0].length!==r.index+r[0].length)&&(r=c),a.lastIndex=c.index+c[1].length+c[2].length;a.lastIndex=-1}if(r===null)return null;let A=r[2],s=r[3]||"0",o=r[4]||"0",n=e.includePrerelease&&r[5]?`-${r[5]}`:"",i=e.includePrerelease&&r[6]?`+${r[6]}`:"";return tY(`${A}.${s}.${o}${n}${i}`,e)};Rw.exports=rY});var bw=B((hV,Tw)=>{"use strict";var AY=ur(),sY=zA(),oY=Be(),nY=(t,e,r)=>{if(!sY.RELEASE_TYPES.includes(e))return null;let A=iY(t,r);return A&&aY(A,e)},iY=(t,e)=>{let r=t instanceof oY?t.version:t;return AY(r,e)},aY=(t,e)=>{if(cY(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},cY=t=>t.startsWith("pre");Tw.exports=nY});var Fw=B((QV,kw)=>{"use strict";var Eu=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let s=this.map.keys().next().value;this.delete(s)}this.map.set(e,r)}return this}};kw.exports=Eu});var $e=B((BV,Gw)=>{"use strict";var gY=/\s+/g,hu=class t{constructor(e,r){if(r=uY(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof Qu)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(gY," "),this.set=this.raw.split("||").map(A=>this.parseRange(A.trim())).filter(A=>A.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let A=this.set[0];if(this.set=this.set.filter(s=>!Nw(s[0])),this.set.length===0)this.set=[A];else if(this.set.length>1){for(let s of this.set)if(s.length===1&&pY(s[0])){this.set=[s];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e0&&(this.formatted+="||");let r=this.set[e];for(let A=0;A0&&(this.formatted+=" "),this.formatted+=r[A].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(fY,"");let A=((this.options.includePrerelease&&CY)|(this.options.loose&&dY))+":"+e,s=Sw.get(A);if(s)return s;let o=this.options.loose,n=o?Re[Ie.HYPHENRANGELOOSE]:Re[Ie.HYPHENRANGE];e=e.replace(n,NY(this.options.includePrerelease)),X("hyphen replace",e),e=e.replace(Re[Ie.COMPARATORTRIM],QY),X("comparator trim",e),e=e.replace(Re[Ie.TILDETRIM],BY),X("tilde trim",e),e=e.replace(Re[Ie.CARETTRIM],IY),X("caret trim",e);let i=e.split(" ").map(l=>mY(l,this.options)).join(" ").split(/\s+/).map(l=>SY(l,this.options));o&&(i=i.filter(l=>(X("loose invalid filter",l,this.options),!!l.match(Re[Ie.COMPARATORLOOSE])))),X("range list",i);let a=new Map,c=i.map(l=>new Qu(l,this.options));for(let l of c){if(Nw(l))return[l];a.set(l.value,l)}a.size>1&&a.has("")&&a.delete("");let g=[...a.values()];return Sw.set(A,g),g}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(A=>Uw(A,r)&&e.set.some(s=>Uw(s,r)&&A.every(o=>s.every(n=>o.intersects(n,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new EY(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",pY=t=>t.value==="",Uw=(t,e)=>{let r=!0,A=t.slice(),s=A.pop();for(;r&&A.length;)r=A.every(o=>s.intersects(o,e)),s=A.pop();return r},mY=(t,e)=>(t=t.replace(Re[Ie.BUILD],""),X("comp",t,e),t=DY(t,e),X("caret",t),t=yY(t,e),X("tildes",t),t=bY(t,e),X("xrange",t),t=FY(t,e),X("stars",t),t),ue=t=>!t||t.toLowerCase()==="x"||t==="*",wY=(t,e,r)=>ue(t)&&!ue(e)||ue(e)&&r&&!ue(r),yY=(t,e)=>t.trim().split(/\s+/).map(r=>RY(r,e)).join(" "),RY=(t,e)=>{let r=e.loose?Re[Ie.TILDELOOSE]:Re[Ie.TILDE],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("tilde",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:a?(X("replaceTilde pr",a),c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`):c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`,X("tilde return",c),c})},DY=(t,e)=>t.trim().split(/\s+/).map(r=>TY(r,e)).join(" "),TY=(t,e)=>{X("caret",t,e);let r=e.loose?Re[Ie.CARETLOOSE]:Re[Ie.CARET],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("caret",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?o==="0"?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.0${A} <${+o+1}.0.0-0`:a?(X("replaceCaret pr",a),o==="0"?n==="0"?c=`>=${o}.${n}.${i}-${a} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i}-${a} <${+o+1}.0.0-0`):(X("no pr"),o==="0"?n==="0"?c=`>=${o}.${n}.${i} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i} <${+o+1}.0.0-0`),X("caret return",c),c})},bY=(t,e)=>(X("replaceXRanges",t,e),t.split(/\s+/).map(r=>kY(r,e)).join(" ")),kY=(t,e)=>{t=t.trim();let r=e.loose?Re[Ie.XRANGELOOSE]:Re[Ie.XRANGE];return t.replace(r,(A,s,o,n,i,a)=>{if(X("xRange",t,A,s,o,n,i,a),wY(o,n,i))return t;let c=ue(o),g=c||ue(n),l=g||ue(i),u=l;return s==="="&&u&&(s=""),a=e.includePrerelease?"-0":"",c?s===">"||s==="<"?A="<0.0.0-0":A="*":s&&u?(g&&(n=0),i=0,s===">"?(s=">=",g?(o=+o+1,n=0,i=0):(n=+n+1,i=0)):s==="<="&&(s="<",g?o=+o+1:n=+n+1),s==="<"&&(a="-0"),A=`${s+o}.${n}.${i}${a}`):g?A=`>=${o}.0.0${a} <${+o+1}.0.0-0`:l&&(A=`>=${o}.${n}.0${a} <${o}.${+n+1}.0-0`),X("xRange return",A),A})},FY=(t,e)=>(X("replaceStars",t,e),t.trim().replace(Re[Ie.STAR],"")),SY=(t,e)=>(X("replaceGTE0",t,e),t.trim().replace(Re[e.includePrerelease?Ie.GTE0PRE:Ie.GTE0],"")),NY=t=>(e,r,A,s,o,n,i,a,c,g,l,u)=>(ue(A)?r="":ue(s)?r=`>=${A}.0.0${t?"-0":""}`:ue(o)?r=`>=${A}.${s}.0${t?"-0":""}`:n?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,ue(c)?a="":ue(g)?a=`<${+c+1}.0.0-0`:ue(l)?a=`<${c}.${+g+1}.0-0`:u?a=`<=${c}.${g}.${l}-${u}`:t?a=`<${c}.${g}.${+l+1}-0`:a=`<=${a}`,`${r} ${a}`.trim()),UY=(t,e,r)=>{for(let A=0;A0){let s=t[A].semver;if(s.major===e.major&&s.minor===e.minor&&s.patch===e.patch)return!0}return!1}return!0}});var io=B((IV,Yw)=>{"use strict";var ao=Symbol("SemVer ANY"),Cu=class t{static get ANY(){return ao}constructor(e,r){if(r=Lw(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),Iu("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ao?this.value="":this.value=this.operator+this.semver.version,Iu("comp",this)}parse(e){let r=this.options.loose?Mw[vw.COMPARATORLOOSE]:Mw[vw.COMPARATOR],A=e.match(r);if(!A)throw new TypeError(`Invalid comparator: ${e}`);this.operator=A[1]!==void 0?A[1]:"",this.operator==="="&&(this.operator=""),A[2]?this.semver=new xw(A[2],this.options.loose):this.semver=ao}toString(){return this.value}test(e){if(Iu("Comparator.test",e,this.options.loose),this.semver===ao||e===ao)return!0;if(typeof e=="string")try{e=new xw(e,this.options)}catch{return!1}return Bu(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Ow(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new Ow(this.value,r).test(e.semver):(r=Lw(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||Bu(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||Bu(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Yw.exports=Cu;var Lw=bi(),{safeRe:Mw,t:vw}=ZA(),Bu=uu(),Iu=oo(),xw=Be(),Ow=$e()});var co=B((CV,_w)=>{"use strict";var GY=$e(),LY=(t,e,r)=>{try{e=new GY(e,r)}catch{return!1}return e.test(t)};_w.exports=LY});var Pw=B((dV,Jw)=>{"use strict";var MY=$e(),vY=(t,e)=>new MY(t,e).set.map(r=>r.map(A=>A.value).join(" ").trim().split(" "));Jw.exports=vY});var Vw=B((fV,Hw)=>{"use strict";var xY=Be(),OY=$e(),YY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new OY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===-1)&&(A=n,s=new xY(A,r))}),A};Hw.exports=YY});var Ww=B((pV,qw)=>{"use strict";var _Y=Be(),JY=$e(),PY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new JY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===1)&&(A=n,s=new _Y(A,r))}),A};qw.exports=PY});var jw=B((mV,Zw)=>{"use strict";var du=Be(),HY=$e(),zw=no(),VY=(t,e)=>{t=new HY(t,e);let r=new du("0.0.0");if(t.test(r)||(r=new du("0.0.0-0"),t.test(r)))return r;r=null;for(let A=0;A{let i=new du(n.semver.version);switch(n.operator){case">":i.prerelease.length===0?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!o||zw(i,o))&&(o=i);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${n.operator}`)}}),o&&(!r||zw(r,o))&&(r=o)}return r&&t.test(r)?r:null};Zw.exports=VY});var Xw=B((wV,Kw)=>{"use strict";var qY=$e(),WY=(t,e)=>{try{return new qY(t,e).range||"*"}catch{return null}};Kw.exports=WY});var Oi=B((yV,ry)=>{"use strict";var zY=Be(),ty=io(),{ANY:ZY}=ty,jY=$e(),KY=co(),$w=no(),ey=Gi(),XY=Mi(),$Y=Li(),e_=(t,e,r,A)=>{t=new zY(t,A),e=new jY(e,A);let s,o,n,i,a;switch(r){case">":s=$w,o=XY,n=ey,i=">",a=">=";break;case"<":s=ey,o=$Y,n=$w,i="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(KY(t,e,A))return!1;for(let c=0;c{E.semver===ZY&&(E=new ty(">=0.0.0")),l=l||E,u=u||E,s(E.semver,l.semver,A)?l=E:n(E.semver,u.semver,A)&&(u=E)}),l.operator===i||l.operator===a||(!u.operator||u.operator===i)&&o(t,u.semver))return!1;if(u.operator===a&&n(t,u.semver))return!1}return!0};ry.exports=e_});var sy=B((RV,Ay)=>{"use strict";var t_=Oi(),r_=(t,e,r)=>t_(t,e,">",r);Ay.exports=r_});var ny=B((DV,oy)=>{"use strict";var A_=Oi(),s_=(t,e,r)=>A_(t,e,"<",r);oy.exports=s_});var cy=B((TV,ay)=>{"use strict";var iy=$e(),o_=(t,e,r)=>(t=new iy(t,r),e=new iy(e,r),t.intersects(e,r));ay.exports=o_});var ly=B((bV,gy)=>{"use strict";var n_=co(),i_=Xe();gy.exports=(t,e,r)=>{let A=[],s=null,o=null,n=t.sort((g,l)=>i_(g,l,r));for(let g of n)n_(g,e,r)?(o=g,s||(s=g)):(o&&A.push([s,o]),o=null,s=null);s&&A.push([s,null]);let i=[];for(let[g,l]of A)g===l?i.push(g):!l&&g===n[0]?i.push("*"):l?g===n[0]?i.push(`<=${l}`):i.push(`${g} - ${l}`):i.push(`>=${g}`);let a=i.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return a.length{"use strict";var uy=$e(),mu=io(),{ANY:fu}=mu,pu=co(),wu=Xe(),a_=(t,e,r={})=>{if(t===e)return!0;t=new uy(t,r),e=new uy(e,r);let A=!1;e:for(let s of t.set){for(let o of e.set){let n=g_(s,o,r);if(A=A||n!==null,n)continue e}if(A)return!1}return!0},c_=[new mu(">=0.0.0-0")],Ey=[new mu(">=0.0.0")],g_=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===fu){if(e.length===1&&e[0].semver===fu)return!0;r.includePrerelease?t=c_:t=Ey}if(e.length===1&&e[0].semver===fu){if(r.includePrerelease)return!0;e=Ey}let A=new Set,s,o;for(let E of t)E.operator===">"||E.operator===">="?s=hy(s,E,r):E.operator==="<"||E.operator==="<="?o=Qy(o,E,r):A.add(E.semver);if(A.size>1)return null;let n;if(s&&o){if(n=wu(s.semver,o.semver,r),n>0)return null;if(n===0&&(s.operator!==">="||o.operator!=="<="))return null}for(let E of A){if(s&&!pu(E,String(s),r)||o&&!pu(E,String(o),r))return null;for(let h of e)if(!pu(E,String(h),r))return!1;return!0}let i,a,c,g,l=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,u=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1;l&&l.prerelease.length===1&&o.operator==="<"&&l.prerelease[0]===0&&(l=!1);for(let E of e){if(g=g||E.operator===">"||E.operator===">=",c=c||E.operator==="<"||E.operator==="<=",s){if(u&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===u.major&&E.semver.minor===u.minor&&E.semver.patch===u.patch&&(u=!1),E.operator===">"||E.operator===">="){if(i=hy(s,E,r),i===E&&i!==s)return!1}else if(s.operator===">="&&!E.test(s.semver))return!1}if(o){if(l&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===l.major&&E.semver.minor===l.minor&&E.semver.patch===l.patch&&(l=!1),E.operator==="<"||E.operator==="<="){if(a=Qy(o,E,r),a===E&&a!==o)return!1}else if(o.operator==="<="&&!E.test(o.semver))return!1}if(!E.operator&&(o||s)&&n!==0)return!1}return!(s&&c&&!o&&n!==0||o&&g&&!s&&n!==0||u||l)},hy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A>0?t:A<0||e.operator===">"&&t.operator===">="?e:t},Qy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A<0?t:A>0||e.operator==="<"&&t.operator==="<="?e:t};By.exports=a_});var Ru=B((FV,fy)=>{"use strict";var yu=ZA(),Cy=zA(),l_=Be(),dy=iu(),u_=ur(),E_=Pm(),h_=Vm(),Q_=zm(),B_=Km(),I_=$m(),C_=tw(),d_=Aw(),f_=ow(),p_=Xe(),m_=cw(),w_=lw(),y_=Ui(),R_=Qw(),D_=Iw(),T_=no(),b_=Gi(),k_=gu(),F_=lu(),S_=Li(),N_=Mi(),U_=uu(),G_=Dw(),L_=bw(),M_=io(),v_=$e(),x_=co(),O_=Pw(),Y_=Vw(),__=Ww(),J_=jw(),P_=Xw(),H_=Oi(),V_=sy(),q_=ny(),W_=cy(),z_=ly(),Z_=Iy();fy.exports={parse:u_,valid:E_,clean:h_,inc:Q_,diff:B_,major:I_,minor:C_,patch:d_,prerelease:f_,compare:p_,rcompare:m_,compareLoose:w_,compareBuild:y_,sort:R_,rsort:D_,gt:T_,lt:b_,eq:k_,neq:F_,gte:S_,lte:N_,cmp:U_,coerce:G_,truncate:L_,Comparator:M_,Range:v_,satisfies:x_,toComparators:O_,maxSatisfying:Y_,minSatisfying:__,minVersion:J_,validRange:P_,outside:H_,gtr:V_,ltr:q_,intersects:W_,simplifyRange:z_,subset:Z_,SemVer:l_,re:yu.re,src:yu.src,tokens:yu.t,SEMVER_SPEC_VERSION:Cy.SEMVER_SPEC_VERSION,RELEASE_TYPES:Cy.RELEASE_TYPES,compareIdentifiers:dy.compareIdentifiers,rcompareIdentifiers:dy.rcompareIdentifiers}});var hr=W(require("node:process")),Ny=W(require("node:path"));var Su=W(require("os"),1);function jA(t){return t==null?"":typeof t=="string"||t instanceof String?t:JSON.stringify(t)}function ku(t){return Object.keys(t).length?{title:t.title,file:t.file,line:t.startLine,endLine:t.endLine,col:t.startColumn,endColumn:t.endColumn}:{}}function Vi(t,e,r){let A=new Hi(t,e,r);process.stdout.write(A.toString()+Su.EOL)}var Fu="::",Hi=class{constructor(e,r,A){e||(e="missing.command"),this.command=e,this.properties=r,this.message=A}toString(){let e=Fu+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let r=!0;for(let A in this.properties)if(this.properties.hasOwnProperty(A)){let s=this.properties[A];s&&(r?r=!1:e+=",",e+=`${A}=${Yy(s)}`)}}return e+=`${Fu}${Oy(this.message)}`,e}};function Oy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function Yy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}var Tp=W(require("os"),1);var $s=W(require("http"),1),ml=W(require("https"),1);function qi(t){let e=t.protocol==="https:";if(_y(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new uo(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new uo(`http://${r}`)}else return}function _y(t){if(!t.hostname)return!1;let e=t.hostname;if(Jy(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Jy(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var uo=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}};var nr=W(Zi(),1),gp=W(ci(),1),ie=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},je;(function(t){t[t.OK=200]="OK",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.ResourceMoved=302]="ResourceMoved",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.SwitchProxy=306]="SwitchProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.TooManyRequests=429]="TooManyRequests",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout"})(je||(je={}));var we;(function(t){t.Accept="accept",t.ContentType="content-type"})(we||(we={}));var Ot;(function(t){t.ApplicationJson="application/json"})(Ot||(Ot={}));var Av=[je.MovedPermanently,je.ResourceMoved,je.SeeOther,je.TemporaryRedirect,je.PermanentRedirect],sv=[je.BadGateway,je.ServiceUnavailable,je.GatewayTimeout],ov=["OPTIONS","GET","DELETE","HEAD"],nv=10,iv=5,fl=class t extends Error{constructor(e,r){super(e),this.name="HttpClientError",this.statusCode=r,Object.setPrototypeOf(this,t.prototype)}},pl=class{constructor(e){this.message=e}readBody(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};var Xs=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ie(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ie(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ie(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ie(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ie(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ie(this,arguments,void 0,function*(r,A={}){A[we.Accept]=this._getExistingOrDefaultHeader(A,we.Accept,Ot.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ie(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&ov.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===je.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Av.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!sv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pl(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=qi(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?ml:$s;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},Ks(this.requestOptions.headers),Ks(e||{})):Ks(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=Ks(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=Ks(this.requestOptions.headers)[we.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[we.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=qi(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||$s.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?nr.httpsOverHttps:nr.httpsOverHttp:a=c?nr.httpOverHttps:nr.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new ml.Agent(i):new $s.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new gp.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ie(this,void 0,void 0,function*(){e=Math.min(nv,e);let r=iv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ie(this,void 0,void 0,function*(){return new Promise((A,s)=>ie(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===je.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fl(g,o);l.result=n.result,s(l)}else A(n)}))})}},Ks=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{});var up=require("os"),eo=require("fs"),wl=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{access:cv,appendFile:gv,writeFile:lv}=eo.promises,lp="GITHUB_STEP_SUMMARY";var yl=class{constructor(){this._buffer=""}filePath(){return wl(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[lp];if(!e)throw new Error(`Unable to find environment variable for $${lp}. Check if your runtime environment supports job summaries.`);try{yield cv(e,eo.constants.R_OK|eo.constants.W_OK)}catch{throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,r,A={}){let s=Object.entries(A).map(([o,n])=>` ${o}="${n}"`).join("");return r?`<${e}${s}>${r}`:`<${e}${s}>`}write(e){return wl(this,void 0,void 0,function*(){let r=!!e?.overwrite,A=yield this.filePath();return yield(r?lv:gv)(A,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return wl(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(e,r=!1){return this._buffer+=e,r?this.addEOL():this}addEOL(){return this.addRaw(up.EOL)}addCodeBlock(e,r){let A=Object.assign({},r&&{lang:r}),s=this.wrap("pre",this.wrap("code",e),A);return this.addRaw(s).addEOL()}addList(e,r=!1){let A=r?"ol":"ul",s=e.map(n=>this.wrap("li",n)).join(""),o=this.wrap(A,s);return this.addRaw(o).addEOL()}addTable(e){let r=e.map(s=>{let o=s.map(n=>{if(typeof n=="string")return this.wrap("td",n);let{header:i,data:a,colspan:c,rowspan:g}=n,l=i?"th":"td",u=Object.assign(Object.assign({},c&&{colspan:c}),g&&{rowspan:g});return this.wrap(l,a,u)}).join("");return this.wrap("tr",o)}).join(""),A=this.wrap("table",r);return this.addRaw(A).addEOL()}addDetails(e,r){let A=this.wrap("details",this.wrap("summary",e)+r);return this.addRaw(A).addEOL()}addImage(e,r,A){let{width:s,height:o}=A||{},n=Object.assign(Object.assign({},s&&{width:s}),o&&{height:o}),i=this.wrap("img",null,Object.assign({src:e,alt:r},n));return this.addRaw(i).addEOL()}addHeading(e,r){let A=`h${r}`,s=["h1","h2","h3","h4","h5","h6"].includes(A)?A:"h1",o=this.wrap(s,e);return this.addRaw(o).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,r){let A=Object.assign({},r&&{cite:r}),s=this.wrap("blockquote",e,A);return this.addRaw(s).addEOL()}addLink(e,r){let A=this.wrap("a",e,{href:r});return this.addRaw(A).addEOL()}},EH=new yl;var Fl=W(require("os"),1);var to=W(require("os"),1),kl=W(require("events"),1),wp=W(require("child_process"),1),yp=W(require("path"),1);var dp=require("assert"),pt=W(require("path"),1);var li=W(require("fs"),1),ar=W(require("path"),1),hp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{chmod:uv,copyFile:Ev,lstat:hv,mkdir:Qp,open:BH,readdir:Bp,rename:Qv,rm:Ip,rmdir:IH,stat:gi,symlink:Bv,unlink:Iv}=li.promises,ir=process.platform==="win32";var CH=li.constants.O_RDONLY;function Rl(t){return hp(this,void 0,void 0,function*(){try{yield gi(t)}catch(e){if(e.code==="ENOENT")return!1;throw e}return!0})}function ui(t){if(t=Cv(t),!t)throw new Error('isRooted() parameter "p" cannot be empty');return ir?t.startsWith("\\")||/^[A-Z]:/i.test(t):t.startsWith("/")}function Dl(t,e){return hp(this,void 0,void 0,function*(){let r;try{r=yield gi(t)}catch(s){s.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${s}`)}if(r&&r.isFile()){if(ir){let s=ar.extname(t).toUpperCase();if(e.some(o=>o.toUpperCase()===s))return t}else if(Ep(r))return t}let A=t;for(let s of e){t=A+s,r=void 0;try{r=yield gi(t)}catch(o){o.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${o}`)}if(r&&r.isFile()){if(ir){try{let o=ar.dirname(t),n=ar.basename(t).toUpperCase();for(let i of yield Bp(o))if(n===i.toUpperCase()){t=ar.join(o,i);break}}catch(o){console.log(`Unexpected error attempting to determine the actual case of the file '${t}': ${o}`)}return t}else if(Ep(r))return t}}return""})}function Cv(t){return t=t||"",ir?(t=t.replace(/\//g,"\\"),t.replace(/\\\\+/g,"\\")):t.replace(/\/\/+/g,"/")}function Ep(t){return(t.mode&1)>0||(t.mode&8)>0&&process.getgid!==void 0&&t.gid===process.getgid()||(t.mode&64)>0&&process.getuid!==void 0&&t.uid===process.getuid()}var Ei=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function fp(t){return Ei(this,void 0,void 0,function*(){if(ir&&/[*"<>|]/.test(t))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');try{yield Ip(t,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(e){throw new Error(`File was unable to be removed ${e}`)}})}function Tl(t){return Ei(this,void 0,void 0,function*(){(0,dp.ok)(t,"a path argument must be provided"),yield Qp(t,{recursive:!0})})}function _r(t,e){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");if(e){let A=yield _r(t,!1);if(!A)throw ir?new Error(`Unable to locate executable file: ${t}. 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.`):new Error(`Unable to locate executable file: ${t}. 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 A}let r=yield dv(t);return r&&r.length>0?r[0]:""})}function dv(t){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");let e=[];if(ir&&process.env.PATHEXT)for(let s of process.env.PATHEXT.split(pt.delimiter))s&&e.push(s);if(ui(t)){let s=yield Dl(t,e);return s?[s]:[]}if(t.includes(pt.sep))return[];let r=[];if(process.env.PATH)for(let s of process.env.PATH.split(pt.delimiter))s&&r.push(s);let A=[];for(let s of r){let o=yield Dl(pt.join(s,t),e);o&&A.push(o)}return A})}var Rp=require("timers"),mp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},hi=process.platform==="win32",Qi=class extends kl.EventEmitter{constructor(e,r,A){if(super(),!e)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=e,this.args=r||[],this.options=A||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,r){let A=this._getSpawnFileName(),s=this._getSpawnArgs(e),o=r?"":"[command]";if(hi)if(this._isCmdFile()){o+=A;for(let n of s)o+=` ${n}`}else if(e.windowsVerbatimArguments){o+=`"${A}"`;for(let n of s)o+=` ${n}`}else{o+=this._windowsQuoteCmdArg(A);for(let n of s)o+=` ${this._windowsQuoteCmdArg(n)}`}else{o+=A;for(let n of s)o+=` ${n}`}return o}_processLineBuffer(e,r,A){try{let s=r+e.toString(),o=s.indexOf(to.EOL);for(;o>-1;){let n=s.substring(0,o);A(n),s=s.substring(o+to.EOL.length),o=s.indexOf(to.EOL)}return s}catch(s){return this._debug(`error processing line. Failed with error ${s}`),""}}_getSpawnFileName(){return hi&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(e){if(hi&&this._isCmdFile()){let r=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let A of this.args)r+=" ",r+=e.windowsVerbatimArguments?A:this._windowsQuoteCmdArg(A);return r+='"',[r]}return this.args}_endsWith(e,r){return e.endsWith(r)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return'""';let r=[" "," ","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],A=!1;for(let n of e)if(r.some(i=>i===n)){A=!0;break}if(!A)return e;let s='"',o=!0;for(let n=e.length;n>0;n--)s+=e[n-1],o&&e[n-1]==="\\"?s+="\\":e[n-1]==='"'?(o=!0,s+='"'):o=!1;return s+='"',s.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e)return'""';if(!e.includes(" ")&&!e.includes(" ")&&!e.includes('"'))return e;if(!e.includes('"')&&!e.includes("\\"))return`"${e}"`;let r='"',A=!0;for(let s=e.length;s>0;s--)r+=e[s-1],A&&e[s-1]==="\\"?r+="\\":e[s-1]==='"'?(A=!0,r+="\\"):A=!1;return r+='"',r.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};let r={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return r.outStream=e.outStream||process.stdout,r.errStream=e.errStream||process.stderr,r}_getSpawnOptions(e,r){e=e||{};let A={};return A.cwd=e.cwd,A.env=e.env,A.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(A.argv0=`"${r}"`),A}exec(){return mp(this,void 0,void 0,function*(){return!ui(this.toolPath)&&(this.toolPath.includes("/")||hi&&this.toolPath.includes("\\"))&&(this.toolPath=yp.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield _r(this.toolPath,!0),new Promise((e,r)=>mp(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let c of this.args)this._debug(` ${c}`);let A=this._cloneExecOptions(this.options);!A.silent&&A.outStream&&A.outStream.write(this._getCommandString(A)+to.EOL);let s=new bl(A,this.toolPath);if(s.on("debug",c=>{this._debug(c)}),this.options.cwd&&!(yield Rl(this.options.cwd)))return r(new Error(`The cwd: ${this.options.cwd} does not exist!`));let o=this._getSpawnFileName(),n=wp.spawn(o,this._getSpawnArgs(A),this._getSpawnOptions(this.options,o)),i="";n.stdout&&n.stdout.on("data",c=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(c),!A.silent&&A.outStream&&A.outStream.write(c),i=this._processLineBuffer(c,i,g=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(g)})});let a="";if(n.stderr&&n.stderr.on("data",c=>{s.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(c),!A.silent&&A.errStream&&A.outStream&&(A.failOnStdErr?A.errStream:A.outStream).write(c),a=this._processLineBuffer(c,a,g=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(g)})}),n.on("error",c=>{s.processError=c.message,s.processExited=!0,s.processClosed=!0,s.CheckComplete()}),n.on("exit",c=>{s.processExitCode=c,s.processExited=!0,this._debug(`Exit code ${c} received from tool '${this.toolPath}'`),s.CheckComplete()}),n.on("close",c=>{s.processExitCode=c,s.processExited=!0,s.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),s.CheckComplete()}),s.on("done",(c,g)=>{i.length>0&&this.emit("stdline",i),a.length>0&&this.emit("errline",a),n.removeAllListeners(),c?r(c):e(g)}),this.options.input){if(!n.stdin)throw new Error("child process missing stdin");n.stdin.end(this.options.input)}}))})}};function Dp(t){let e=[],r=!1,A=!1,s="";function o(n){A&&n!=='"'&&(s+="\\"),s+=n,A=!1}for(let n=0;n0&&(e.push(s),s="");continue}o(i)}return s.length>0&&e.push(s.trim()),e}var bl=class t extends kl.EventEmitter{constructor(e,r){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!r)throw new Error("toolPath must not be empty");this.options=e,this.toolPath=r,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=(0,Rp.setTimeout)(t.HandleTimeout,this.delay,this)))}_debug(e){this.emit("debug",e)}_setResult(){let e;this.processExited&&(this.processError?e=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}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let r=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(r)}e._setResult()}}};var pv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function cr(t,e,r){return pv(this,void 0,void 0,function*(){let A=Dp(t);if(A.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let s=A[0];return e=A.slice(1).concat(e||[]),new Qi(s,e,r).exec()})}var mH=Fl.default.platform(),wH=Fl.default.arch();var Sl;(function(t){t[t.Success=0]="Success",t[t.Failure=1]="Failure"})(Sl||(Sl={}));function bp(t,e){let r=process.env[`INPUT_${t.replace(/ /g,"_").toUpperCase()}`]||"";if(e&&e.required&&!r)throw new Error(`Input required and not supplied: ${t}`);return e&&e.trimWhitespace===!1?r:r.trim()}function kp(t){process.exitCode=Sl.Failure,yv(t)}function Nl(){return process.env.RUNNER_DEBUG==="1"}function Ue(t){Vi("debug",{},t)}function yv(t,e={}){Vi("error",ku(e),t instanceof Error?t.toString():t)}function Ul(t){process.stdout.write(t+Tp.EOL)}var Bi=require("fs"),Fp=require("os"),VA=class{constructor(){var e,r,A;if(this.payload={},process.env.GITHUB_EVENT_PATH)if((0,Bi.existsSync)(process.env.GITHUB_EVENT_PATH))this.payload=JSON.parse((0,Bi.readFileSync)(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}));else{let s=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${s} does not exist${Fp.EOL}`)}this.eventName=process.env.GITHUB_EVENT_NAME,this.sha=process.env.GITHUB_SHA,this.ref=process.env.GITHUB_REF,this.workflow=process.env.GITHUB_WORKFLOW,this.action=process.env.GITHUB_ACTION,this.actor=process.env.GITHUB_ACTOR,this.job=process.env.GITHUB_JOB,this.runAttempt=parseInt(process.env.GITHUB_RUN_ATTEMPT,10),this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10),this.runId=parseInt(process.env.GITHUB_RUN_ID,10),this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:"https://api.github.com",this.serverUrl=(r=process.env.GITHUB_SERVER_URL)!==null&&r!==void 0?r:"https://github.com",this.graphqlUrl=(A=process.env.GITHUB_GRAPHQL_URL)!==null&&A!==void 0?A:"https://api.github.com/graphql"}get issue(){let e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){let[e,r]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:r}}if(this.payload.repository)return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name};throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}};var xl=W(Lp(),1),Mp=W(ci(),1),vv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function vp(t,e){if(!t&&!e.auth)throw new Error("Parameter token or opts.auth is required");if(t&&e.auth)throw new Error("Parameters token and opts.auth may not both be specified");return typeof e.auth=="string"?e.auth:`token ${t}`}function xp(t){return new xl.HttpClient().getAgent(t)}function xv(t){return new xl.HttpClient().getAgentDispatcher(t)}function Op(t){let e=xv(t);return(A,s)=>vv(this,void 0,void 0,function*(){return(0,Mp.fetch)(A,Object.assign(Object.assign({},s),{dispatcher:e}))})}function Yp(){return process.env.GITHUB_API_URL||"https://api.github.com"}function Ol(t){var e;let r=(e=process.env.ACTIONS_ORCHESTRATION_ID)===null||e===void 0?void 0:e.trim();if(r){let s=`actions_orchestration_id/${r.replace(/[^a-z0-9_.-]/gi,"_")}`;return t?.includes(s)?t:`${t?`${t} `:""}${s}`}return t}function gr(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}function wi(t,e,r,A){if(typeof r!="function")throw new Error("method for before hook must be a function");return A||(A={}),Array.isArray(e)?e.reverse().reduce((s,o)=>wi.bind(null,t,o,s,A),r)():Promise.resolve().then(()=>t.registry[e]?t.registry[e].reduce((s,o)=>o.hook.bind(null,s,A),r)():r(A))}function _p(t,e,r,A){let s=A;t.registry[r]||(t.registry[r]=[]),e==="before"&&(A=(o,n)=>Promise.resolve().then(s.bind(null,n)).then(o.bind(null,n))),e==="after"&&(A=(o,n)=>{let i;return Promise.resolve().then(o.bind(null,n)).then(a=>(i=a,s(i,n))).then(()=>i)}),e==="error"&&(A=(o,n)=>Promise.resolve().then(o.bind(null,n)).catch(i=>s(i,n))),t.registry[r].push({hook:A,orig:s})}function Jp(t,e,r){if(!t.registry[e])return;let A=t.registry[e].map(s=>s.orig).indexOf(r);A!==-1&&t.registry[e].splice(A,1)}var Pp=Function.bind,Hp=Pp.bind(Pp);function Vp(t,e,r){let A=Hp(Jp,null).apply(null,r?[e,r]:[e]);t.api={remove:A},t.remove=A,["before","error","after","wrap"].forEach(s=>{let o=r?[e,s,r]:[e,s];t[s]=t.api[s]=Hp(_p,null).apply(null,o)})}function Yv(){let t=Symbol("Singular"),e={registry:{}},r=wi.bind(null,e,t);return Vp(r,e,t),r}function _v(){let t={registry:{}},e=wi.bind(null,t);return Vp(e,t),e}var qp={Singular:Yv,Collection:_v};var Jv="0.0.0-development",Pv=`octokit-endpoint.js/${Jv} ${gr()}`,Hv={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Pv},mediaType:{format:""}};function Vv(t){return t?Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{}):{}}function qv(t){if(typeof t!="object"||t===null||Object.prototype.toString.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);if(e===null)return!0;let r=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.call(r)===Function.prototype.call(t)}function Zp(t,e){let r=Object.assign({},t);return Object.keys(e).forEach(A=>{qv(e[A])?A in t?r[A]=Zp(t[A],e[A]):Object.assign(r,{[A]:e[A]}):Object.assign(r,{[A]:e[A]})}),r}function Wp(t){for(let e in t)t[e]===void 0&&delete t[e];return t}function _l(t,e,r){if(typeof e=="string"){let[s,o]=e.split(" ");r=Object.assign(o?{method:s,url:o}:{url:s},r)}else r=Object.assign({},e);r.headers=Vv(r.headers),Wp(r),Wp(r.headers);let A=Zp(t||{},r);return r.url==="/graphql"&&(t&&t.mediaType.previews?.length&&(A.mediaType.previews=t.mediaType.previews.filter(s=>!A.mediaType.previews.includes(s)).concat(A.mediaType.previews)),A.mediaType.previews=(A.mediaType.previews||[]).map(s=>s.replace(/-preview/,""))),A}function Wv(t,e){let r=/\?/.test(t)?"&":"?",A=Object.keys(e);return A.length===0?t:t+r+A.map(s=>s==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${s}=${encodeURIComponent(e[s])}`).join("&")}var zv=/\{[^{}}]+\}/g;function Zv(t){return t.replace(/(?:^\W+)|(?:(?r.concat(A),[]):[]}function zp(t,e){let r={__proto__:null};for(let A of Object.keys(t))e.indexOf(A)===-1&&(r[A]=t[A]);return r}function jp(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function WA(t){return encodeURIComponent(t).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Ao(t,e,r){return e=t==="+"||t==="#"?jp(e):WA(e),r?WA(r)+"="+e:e}function qA(t){return t!=null}function Yl(t){return t===";"||t==="&"||t==="?"}function Kv(t,e,r,A){var s=t[r],o=[];if(qA(s)&&s!=="")if(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||typeof s=="boolean")s=s.toString(),A&&A!=="*"&&(s=s.substring(0,parseInt(A,10))),o.push(Ao(e,s,Yl(e)?r:""));else if(A==="*")Array.isArray(s)?s.filter(qA).forEach(function(n){o.push(Ao(e,n,Yl(e)?r:""))}):Object.keys(s).forEach(function(n){qA(s[n])&&o.push(Ao(e,s[n],n))});else{let n=[];Array.isArray(s)?s.filter(qA).forEach(function(i){n.push(Ao(e,i))}):Object.keys(s).forEach(function(i){qA(s[i])&&(n.push(WA(i)),n.push(Ao(e,s[i].toString())))}),Yl(e)?o.push(WA(r)+"="+n.join(",")):n.length!==0&&o.push(n.join(","))}else e===";"?qA(s)&&o.push(WA(r)):s===""&&(e==="&"||e==="?")?o.push(WA(r)+"="):s===""&&o.push("");return o}function Xv(t){return{expand:$v.bind(null,t)}}function $v(t,e){var r=["+","#",".","/",";","?","&"];return t=t.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(A,s,o){if(s){let i="",a=[];if(r.indexOf(s.charAt(0))!==-1&&(i=s.charAt(0),s=s.substr(1)),s.split(/,/g).forEach(function(c){var g=/([^:\*]*)(?::(\d+)|(\*))?/.exec(c);a.push(Kv(e,i,g[1],g[2]||g[3]))}),i&&i!=="+"){var n=",";return i==="?"?n="&":i!=="#"&&(n=i),(a.length!==0?i:"")+a.join(n)}else return a.join(",")}else return jp(o)}),t==="/"?t:t.replace(/\/$/,"")}function Kp(t){let e=t.method.toUpperCase(),r=(t.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),A=Object.assign({},t.headers),s,o=zp(t,["method","baseUrl","url","headers","request","mediaType"]),n=jv(r);r=Xv(r).expand(o),/^http/.test(r)||(r=t.baseUrl+r);let i=Object.keys(t).filter(g=>n.includes(g)).concat("baseUrl"),a=zp(o,i);if(!/application\/octet-stream/i.test(A.accept)&&(t.mediaType.format&&(A.accept=A.accept.split(/,/).map(g=>g.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${t.mediaType.format}`)).join(",")),r.endsWith("/graphql")&&t.mediaType.previews?.length)){let g=A.accept.match(/(?{let u=t.mediaType.format?`.${t.mediaType.format}`:"+json";return`application/vnd.github.${l}-preview${u}`}).join(",")}return["GET","HEAD"].includes(e)?r=Wv(r,a):"data"in a?s=a.data:Object.keys(a).length&&(s=a),!A["content-type"]&&typeof s<"u"&&(A["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof s>"u"&&(s=""),Object.assign({method:e,url:r,headers:A},typeof s<"u"?{body:s}:null,t.request?{request:t.request}:null)}function ex(t,e,r){return Kp(_l(t,e,r))}function Xp(t,e){let r=_l(t,e),A=ex.bind(null,r);return Object.assign(A,{DEFAULTS:r,defaults:Xp.bind(null,r),merge:_l.bind(null,r),parse:Kp})}var $p=Xp(null,Hv);var Im=W(nm(),1);var gx=/^-?\d+$/,Di=/^-?\d+n+$/,lr=JSON.stringify,Vl=JSON.parse,lm=/^-?\d+n$/,im=/([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g,am=/([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g,ql=t=>t===void 0||typeof t=="function"||typeof t=="symbol",Wl=t=>t!==null&&typeof t=="object"&&t.constructor&&t.constructor.name==="RawJSON",lx=(t,e,r)=>{let A="";typeof r=="number"?A=" ".repeat(Math.min(10,Math.max(0,Math.floor(r)))):typeof r=="string"&&(A=r.slice(0,10));let s=typeof e=="function",o=Array.isArray(e)?new Set(e.map(String)):null,n=(h,C,I)=>(I!==null&&typeof I=="object"&&typeof I.toJSON=="function"&&(I=I.toJSON(C)),typeof I=="string"&&Di.test(I)?I+"n":typeof I=="bigint"?"rawJSON"in JSON?JSON.rawJSON(I.toString()):I.toString()+"n":(s&&(I=e.call(h,C,I)),I!==null&&typeof I=="object"&&(I instanceof Number||I instanceof String||I instanceof Boolean)&&(I=I.valueOf()),I)),i=n({"":t},"",t);if(ql(i))return;let a=i===null||typeof i!="object",c=Wl(i);if(a||c)return lr(i);let g=[],l=0,u=[{parent:{"":i},key:"",val:i,isArray:Array.isArray(i),keys:Array.isArray(i)?null:Object.keys(i),index:0,first:!0}],E=new WeakSet([i]);for(;u.length>0;){let h=u[u.length-1];h.index===0&&(g.push(h.isArray?"[":"{"),l++);let C=!1;if(h.isArray)if(h.index=h.keys.length&&u[u.length-1]===h&&(C=!0)}C&&(l--,!h.first&&A&&g.push(` +`+A.repeat(l)),g.push(h.isArray?"]":"}"),E.delete(h.val),u.pop())}return g.join("")},um=(t,e,r)=>{try{return"rawJSON"in JSON?lr(t,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r):t?lr(t,(i,a)=>typeof a=="string"&&Di.test(a)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r).replace(im,"$1$2$3").replace(am,"$1$2$3"):lr(t,e,r)}catch(A){if(A instanceof RangeError){let s=lx(t,e,r);return s===void 0?void 0:"rawJSON"in JSON?s:s.replace(im,"$1$2$3").replace(am,"$1$2$3")}throw A}},Ri=new Map,ux=()=>{let t=JSON.parse.toString();if(Ri.has(t))return Ri.get(t);try{let e=JSON.parse("1",(r,A,s)=>!!s?.source&&s.source==="1");return Ri.set(t,e),e}catch{return Ri.set(t,!1),!1}},Ex=(t,e,r,A)=>typeof e=="string"&&lm.test(e)?BigInt(e.slice(0,-1)):typeof e=="string"&&Di.test(e)?e.slice(0,-1):typeof A=="function"?A(t,e,r):e,hx=(t,e)=>JSON.parse(t,(r,A,s)=>{let o=typeof A=="number",n=A>Number.MAX_SAFE_INTEGER||A{let r={"":t},A=[{parent:r,key:"",visited:!1}];for(;A.length>0;){let s=A[A.length-1];if(s.visited){let{parent:o,key:n}=s,i=o[n];typeof i=="string"&&(lm.test(i)?i=BigInt(i.slice(0,-1)):Di.test(i)&&(i=i.slice(0,-1))),typeof e=="function"&&(i=e.call(o,n,i)),i===void 0?delete o[n]:o[n]=i,A.pop()}else{s.visited=!0;let o=s.parent[s.key];if(o!==null&&typeof o=="object"){let i=Object.keys(o);for(let a=i.length-1;a>=0;a--)A.push({parent:o,key:i[a],visited:!1})}}}return r[""]},gm=t=>t.replace(Qx,(e,r,A,s)=>{let o=e[0]==='"';if(o&&Bx.test(e))return e.substring(0,e.length-1)+'n"';let i=A||s,a=r&&(r.length{if(!t)return Vl(t,e);try{if(ux())return hx(t,e);let r=gm(t);return Vl(r,(A,s,o)=>Ex(A,s,o,e))}catch(r){if(r instanceof RangeError){let A=gm(t),s=Vl(A);return Ix(s,e)}throw r}};var Jr=class extends Error{name;status;request;response;constructor(e,r,A){super(e,{cause:A.cause}),this.name="HttpError",this.status=Number.parseInt(r),Number.isNaN(this.status)&&(this.status=0);"response"in A&&(this.response=A.response);let s=Object.assign({},A.request);A.request.headers.authorization&&(s.headers=Object.assign({},A.request.headers,{authorization:A.request.headers.authorization.replace(/(?"";async function Bm(t){let e=t.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let r=t.request?.log||console,A=t.request?.parseSuccessResponseBody!==!1,s=fx(t.body)||Array.isArray(t.body)?um(t.body):t.body,o=Object.fromEntries(Object.entries(t.headers).map(([l,u])=>[l,String(u)])),n;try{n=await e(t.url,{method:t.method,body:s,redirect:t.request?.redirect,headers:o,signal:t.request?.signal,...t.body&&{duplex:"half"}})}catch(l){let u="Unknown Error";if(l instanceof Error){if(l.name==="AbortError")throw l.status=500,l;u=l.message,l.name==="TypeError"&&"cause"in l&&(l.cause instanceof Error?u=l.cause.message:typeof l.cause=="string"&&(u=l.cause))}let E=new Jr(u,500,{request:t});throw E.cause=l,E}let i=n.status,a=n.url,c={};for(let[l,u]of n.headers)c[l]=u;let g={url:a,status:i,headers:c,data:""};if("deprecation"in c){let l=c.link&&c.link.match(/<([^<>]+)>; rel="deprecation"/),u=l&&l.pop();r.warn(`[@octokit/request] "${t.method} ${t.url}" is deprecated. It is scheduled to be removed on ${c.sunset}${u?`. See ${u}`:""}`)}if(i===204||i===205)return g;if(t.method==="HEAD"){if(i<400)return g;throw new Jr(n.statusText,i,{response:g,request:t})}if(i===304)throw g.data=await zl(n),new Jr("Not modified",i,{response:g,request:t});if(i>=400)throw g.data=await zl(n),new Jr(mx(g.data),i,{response:g,request:t});return g.data=A?await zl(n):n.body,g}async function zl(t){let e=t.headers.get("content-type");if(!e)return t.text().catch(Qm);let r=(0,Im.parse)(e);if(px(r)){let A="";try{return A=await t.text(),hm(A)}catch{return A}}else return r.type.startsWith("text/")||r.parameters.charset?.toLowerCase()==="utf-8"?t.text().catch(Qm):t.arrayBuffer().catch(()=>new ArrayBuffer(0))}function px(t){return t.type==="application/json"||t.type==="application/scim+json"}function mx(t){if(typeof t=="string")return t;if(t instanceof ArrayBuffer)return"Unknown error";if(typeof t=="object"&&t!==null&&"message"in t){let e=t,r="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(A=>JSON.stringify(A)).join(", ")}${r}`:`${e.message}${r}`}return`Unknown error: ${JSON.stringify(t)}`}function Zl(t,e){let r=t.defaults(e);return Object.assign(function(s,o){let n=r.merge(s,o);if(!n.request||!n.request.hook)return Bm(r.parse(n));let i=(a,c)=>Bm(r.parse(r.merge(a,c)));return Object.assign(i,{endpoint:r,defaults:Zl.bind(null,r)}),n.request.hook(i,n)},{endpoint:r,defaults:Zl.bind(null,r)})}var so=Zl($p,dx);var wx="0.0.0-development";function yx(t){return`Request failed due to following response errors: `+t.errors.map(e=>` - ${e.message}`).join(` -`)}var Dx=class extends Error{constructor(t,e,r){super(Rx(r)),this.request=t,this.headers=e,this.response=r,this.errors=r.errors,this.data=r.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},Tx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],bx=["query","method","url"],hm=/\/api\/v3\/?$/;function kx(t,e,r){if(r){if(typeof e=="string"&&"query"in r)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let n in r)if(bx.includes(n))return Promise.reject(new Error(`[@octokit/graphql] "${n}" cannot be used as variable name`))}let A=typeof e=="string"?Object.assign({query:e},r):e,s=Object.keys(A).reduce((n,i)=>Tx.includes(i)?(n[i]=A[i],n):(n.variables||(n.variables={}),n.variables[i]=A[i],n),{}),o=A.baseUrl||t.endpoint.DEFAULTS.baseUrl;return hm.test(o)&&(s.url=o.replace(hm,"/api/graphql")),t(s).then(n=>{if(n.data.errors){let i={};for(let a of Object.keys(n.headers))i[a]=n.headers[a];throw new Dx(s,i,n.data)}return n.data.data})}function zl(t,e){let r=t.defaults(e);return Object.assign((s,o)=>kx(r,s,o),{defaults:zl.bind(null,r),endpoint:r.endpoint})}var C2=zl(so,{headers:{"user-agent":`octokit-graphql.js/${yx} ${gr()}`},method:"POST",url:"/graphql"});function Qm(t){return zl(t,{method:"POST",url:"/graphql"})}var Zl="(?:[a-zA-Z0-9_-]+)",Bm="\\.",Im=new RegExp(`^${Zl}${Bm}${Zl}${Bm}${Zl}$`),Fx=Im.test.bind(Im);async function Sx(t){let e=Fx(t),r=t.startsWith("v1.")||t.startsWith("ghs_"),A=t.startsWith("ghu_");return{type:"token",token:t,tokenType:e?"app":r?"installation":A?"user-to-server":"oauth"}}function Nx(t){return t.split(/\./).length===3?`bearer ${t}`:`token ${t}`}async function Ux(t,e,r,A){let s=e.endpoint.merge(r,A);return s.headers.authorization=Nx(t),e(s)}var Cm=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(Sx.bind(null,e),{hook:Ux.bind(null,e)})};var jl="7.0.6";var dm=()=>{},Gx=console.warn.bind(console),Lx=console.error.bind(console);function Mx(t={}){return typeof t.debug!="function"&&(t.debug=dm),typeof t.info!="function"&&(t.info=dm),typeof t.warn!="function"&&(t.warn=Gx),typeof t.error!="function"&&(t.error=Lx),t}var fm=`octokit-core.js/${jl} ${gr()}`,Di=class{static VERSION=jl;static defaults(e){return class extends this{constructor(...A){let s=A[0]||{};if(typeof e=="function"){super(e(s));return}super(Object.assign({},e,s,s.userAgent&&e.userAgent?{userAgent:`${s.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let r=this.plugins;return class extends this{static plugins=r.concat(e.filter(s=>!r.includes(s)))}}constructor(e={}){let r=new Jp.Collection,A={baseUrl:so.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:r.bind(null,"request")}),mediaType:{previews:[],format:""}};if(A.headers["user-agent"]=e.userAgent?`${e.userAgent} ${fm}`:fm,e.baseUrl&&(A.baseUrl=e.baseUrl),e.previews&&(A.mediaType.previews=e.previews),e.timeZone&&(A.headers["time-zone"]=e.timeZone),this.request=so.defaults(A),this.graphql=Qm(this.request).defaults(A),this.log=Mx(e.log),this.hook=r,e.authStrategy){let{authStrategy:o,...n}=e,i=o(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:n},e.auth));r.wrap("request",i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let o=Cm(e.auth);r.wrap("request",o.hook),this.auth=o}let s=this.constructor;for(let o=0;o({async next(){if(!i)return{done:!0};try{let a=await s({method:o,url:i,headers:n}),c=Jx(a);if(i=((c.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!i&&"total_commits"in c.data){let g=new URL(c.url),l=g.searchParams,u=parseInt(l.get("page")||"1",10),E=parseInt(l.get("per_page")||"250",10);u*E{if(s.done)return e;let o=!1;function n(){o=!0}return e=e.concat(A?A(s.value,n):s.value.data),o?e:wm(t,e,r,A)})}var O2=Object.assign(mm,{iterator:eu});function tu(t){return{paginate:Object.assign(mm.bind(null,t),{iterator:eu.bind(null,t)})}}tu.VERSION=_x;var H2=new qA,ru=Mp(),Px={baseUrl:ru,request:{agent:Gp(ru),fetch:Lp(ru)}},ym=Di.plugin($l,tu).defaults(Px);function Rm(t,e){let r=Object.assign({},e||{}),A=Up(t,r);A&&(r.auth=A);let s=vl(r.userAgent);return s&&(r.userAgent=s),r}var z2=new qA;function Dm(t,e,...r){let A=ym.plugin(...r);return new A(Rm(t,e))}import*as Ru from"crypto";import*as Vr from"fs";var K_=Qr(wu(),1);import*as go from"path";var _i=Qr(wu(),1);import*as Cy from"stream";import*as dy from"util";import{ok as $_}from"assert";var Iy=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Oi=class{constructor(e,r,A){if(e<1)throw new Error("max attempts should be greater than or equal to 1");if(this.maxAttempts=e,this.minSeconds=Math.floor(r),this.maxSeconds=Math.floor(A),this.minSeconds>this.maxSeconds)throw new Error("min seconds should be less than or equal to max seconds")}execute(e,r){return Iy(this,void 0,void 0,function*(){let A=1;for(;AsetTimeout(r,e*1e3))})}};var Er=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Yi=class extends Error{constructor(e){super(`Unexpected HTTP response: ${e}`),this.httpStatusCode=e,Object.setPrototypeOf(this,new.target.prototype)}},fy=process.platform==="win32",zV=process.platform==="darwin",eJ="actions/tool-cache";function py(t,e,r,A){return Er(this,void 0,void 0,function*(){e=e||go.join(Ry(),Ru.randomUUID()),yield Dl(go.dirname(e)),Ue(`Downloading ${t}`),Ue(`Destination ${e}`);let s=3,o=yu("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS",10),n=yu("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS",20);return yield new Oi(s,o,n).execute(()=>Er(this,void 0,void 0,function*(){return yield tJ(t,e||"",r,A)}),a=>!(a instanceof Yi&&a.httpStatusCode&&a.httpStatusCode<500&&a.httpStatusCode!==408&&a.httpStatusCode!==429))})}function tJ(t,e,r,A){return Er(this,void 0,void 0,function*(){if(Vr.existsSync(e))throw new Error(`Destination file path ${e} already exists`);let s=new $s(eJ,[],{allowRetries:!1});r&&(Ue("set auth"),A===void 0&&(A={}),A.authorization=r);let o=yield s.get(t,A);if(o.message.statusCode!==200){let g=new Yi(o.message.statusCode);throw Ue(`Failed to download from "${t}". Code(${o.message.statusCode}) Message(${o.message.statusMessage})`),g}let n=dy.promisify(Cy.pipeline),a=yu("TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY",()=>o.message)(),c=!1;try{return yield n(a,Vr.createWriteStream(e)),Ue("download complete"),c=!0,e}finally{if(!c){Ue("download failed");try{yield Ip(e)}catch(g){Ue(`Failed to delete '${e}'. ${g.message}`)}}}})}function my(t,e){return Er(this,arguments,void 0,function*(r,A,s="xz"){if(!r)throw new Error("parameter 'file' is required");A=yield yy(A),Ue("Checking tar --version");let o="";yield cr("tar --version",[],{ignoreReturnCode:!0,silent:!0,listeners:{stdout:g=>o+=g.toString(),stderr:g=>o+=g.toString()}}),Ue(o.trim());let n=o.toUpperCase().includes("GNU TAR"),i;s instanceof Array?i=s:i=[s],Fl()&&!s.includes("v")&&i.push("-v");let a=A,c=r;return fy&&n&&(i.push("--force-local"),a=A.replace(/\\/g,"/"),c=r.replace(/\\/g,"/")),n&&(i.push("--warning=no-unknown-keyword"),i.push("--overwrite")),i.push("-C",a,"-f",c),yield cr("tar",i),A})}function wy(t,e){return Er(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'file' is required");return e=yield yy(e),fy?yield rJ(t,e):yield AJ(t,e),e})}function rJ(t,e){return Er(this,void 0,void 0,function*(){let r=t.replace(/'/g,"''").replace(/"|\n|\r/g,""),A=e.replace(/'/g,"''").replace(/"|\n|\r/g,""),s=yield Jr("pwsh",!1);if(s){let n=["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;",`try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`,`catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force } else { throw $_ } } ;`].join(" ")];Ue(`Using pwsh at path: ${s}`),yield cr(`"${s}"`,n)}else{let n=["-NoLogo","-Sta","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;",`if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force }`,`else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`].join(" ")],i=yield Jr("powershell",!0);Ue(`Using powershell at path: ${i}`),yield cr(`"${i}"`,n)}})}function AJ(t,e){return Er(this,void 0,void 0,function*(){let r=yield Jr("unzip",!0),A=[t];Fl()||A.unshift("-q"),A.unshift("-o"),yield cr(`"${r}"`,A,{cwd:e})})}function yy(t){return Er(this,void 0,void 0,function*(){return t||(t=go.join(Ry(),Ru.randomUUID())),yield Dl(t),t})}function Ry(){let t=process.env.RUNNER_TEMP||"";return $_(t,"Expected RUNNER_TEMP to be defined"),t}function yu(t,e){let r=global[t];return r!==void 0?r:e}var Dy=` +`)}var Rx=class extends Error{constructor(t,e,r){super(yx(r)),this.request=t,this.headers=e,this.response=r,this.errors=r.errors,this.data=r.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},Dx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],Tx=["query","method","url"],Cm=/\/api\/v3\/?$/;function bx(t,e,r){if(r){if(typeof e=="string"&&"query"in r)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let n in r)if(Tx.includes(n))return Promise.reject(new Error(`[@octokit/graphql] "${n}" cannot be used as variable name`))}let A=typeof e=="string"?Object.assign({query:e},r):e,s=Object.keys(A).reduce((n,i)=>Dx.includes(i)?(n[i]=A[i],n):(n.variables||(n.variables={}),n.variables[i]=A[i],n),{}),o=A.baseUrl||t.endpoint.DEFAULTS.baseUrl;return Cm.test(o)&&(s.url=o.replace(Cm,"/api/graphql")),t(s).then(n=>{if(n.data.errors){let i={};for(let a of Object.keys(n.headers))i[a]=n.headers[a];throw new Rx(s,i,n.data)}return n.data.data})}function jl(t,e){let r=t.defaults(e);return Object.assign((s,o)=>bx(r,s,o),{defaults:jl.bind(null,r),endpoint:r.endpoint})}var a2=jl(so,{headers:{"user-agent":`octokit-graphql.js/${wx} ${gr()}`},method:"POST",url:"/graphql"});function dm(t){return jl(t,{method:"POST",url:"/graphql"})}var Kl="(?:[a-zA-Z0-9_-]+)",fm="\\.",pm=new RegExp(`^${Kl}${fm}${Kl}${fm}${Kl}$`),kx=pm.test.bind(pm);async function Fx(t){let e=kx(t),r=t.startsWith("v1.")||t.startsWith("ghs_"),A=t.startsWith("ghu_");return{type:"token",token:t,tokenType:e?"app":r?"installation":A?"user-to-server":"oauth"}}function Sx(t){return t.split(/\./).length===3?`bearer ${t}`:`token ${t}`}async function Nx(t,e,r,A){let s=e.endpoint.merge(r,A);return s.headers.authorization=Sx(t),e(s)}var mm=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(Fx.bind(null,e),{hook:Nx.bind(null,e)})};var Xl="7.0.6";var wm=()=>{},Ux=console.warn.bind(console),Gx=console.error.bind(console);function Lx(t={}){return typeof t.debug!="function"&&(t.debug=wm),typeof t.info!="function"&&(t.info=wm),typeof t.warn!="function"&&(t.warn=Ux),typeof t.error!="function"&&(t.error=Gx),t}var ym=`octokit-core.js/${Xl} ${gr()}`,Ti=class{static VERSION=Xl;static defaults(e){return class extends this{constructor(...A){let s=A[0]||{};if(typeof e=="function"){super(e(s));return}super(Object.assign({},e,s,s.userAgent&&e.userAgent?{userAgent:`${s.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let r=this.plugins;return class extends this{static plugins=r.concat(e.filter(s=>!r.includes(s)))}}constructor(e={}){let r=new qp.Collection,A={baseUrl:so.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:r.bind(null,"request")}),mediaType:{previews:[],format:""}};if(A.headers["user-agent"]=e.userAgent?`${e.userAgent} ${ym}`:ym,e.baseUrl&&(A.baseUrl=e.baseUrl),e.previews&&(A.mediaType.previews=e.previews),e.timeZone&&(A.headers["time-zone"]=e.timeZone),this.request=so.defaults(A),this.graphql=dm(this.request).defaults(A),this.log=Lx(e.log),this.hook=r,e.authStrategy){let{authStrategy:o,...n}=e,i=o(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:n},e.auth));r.wrap("request",i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let o=mm(e.auth);r.wrap("request",o.hook),this.auth=o}let s=this.constructor;for(let o=0;o({async next(){if(!i)return{done:!0};try{let a=await s({method:o,url:i,headers:n}),c=_x(a);if(i=((c.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!i&&"total_commits"in c.data){let g=new URL(c.url),l=g.searchParams,u=parseInt(l.get("page")||"1",10),E=parseInt(l.get("per_page")||"250",10);u*E{if(s.done)return e;let o=!1;function n(){o=!0}return e=e.concat(A?A(s.value,n):s.value.data),o?e:Tm(t,e,r,A)})}var k2=Object.assign(Dm,{iterator:ru});function Au(t){return{paginate:Object.assign(Dm.bind(null,t),{iterator:ru.bind(null,t)})}}Au.VERSION=Yx;var G2=new VA,su=Yp(),Jx={baseUrl:su,request:{agent:xp(su),fetch:Op(su)}},bm=Ti.plugin(tu,Au).defaults(Jx);function km(t,e){let r=Object.assign({},e||{}),A=vp(t,r);A&&(r.auth=A);let s=Ol(r.userAgent);return s&&(r.userAgent=s),r}var x2=new VA;function Fm(t,e,...r){let A=bm.plugin(...r);return new A(km(t,e))}var Tu=W(require("crypto"),1),Hr=W(require("fs"),1);var j_=W(Ru(),1);var go=W(require("path"),1);var Ji=W(Ru(),1),my=W(require("stream"),1),wy=W(require("util"),1),yy=require("assert");var py=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Yi=class{constructor(e,r,A){if(e<1)throw new Error("max attempts should be greater than or equal to 1");if(this.maxAttempts=e,this.minSeconds=Math.floor(r),this.maxSeconds=Math.floor(A),this.minSeconds>this.maxSeconds)throw new Error("min seconds should be less than or equal to max seconds")}execute(e,r){return py(this,void 0,void 0,function*(){let A=1;for(;AsetTimeout(r,e*1e3))})}};var Er=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},_i=class extends Error{constructor(e){super(`Unexpected HTTP response: ${e}`),this.httpStatusCode=e,Object.setPrototypeOf(this,new.target.prototype)}},Ry=process.platform==="win32",vV=process.platform==="darwin",X_="actions/tool-cache";function Dy(t,e,r,A){return Er(this,void 0,void 0,function*(){e=e||go.join(Fy(),Tu.randomUUID()),yield Tl(go.dirname(e)),Ue(`Downloading ${t}`),Ue(`Destination ${e}`);let s=3,o=Du("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS",10),n=Du("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS",20);return yield new Yi(s,o,n).execute(()=>Er(this,void 0,void 0,function*(){return yield $_(t,e||"",r,A)}),a=>!(a instanceof _i&&a.httpStatusCode&&a.httpStatusCode<500&&a.httpStatusCode!==408&&a.httpStatusCode!==429))})}function $_(t,e,r,A){return Er(this,void 0,void 0,function*(){if(Hr.existsSync(e))throw new Error(`Destination file path ${e} already exists`);let s=new Xs(X_,[],{allowRetries:!1});r&&(Ue("set auth"),A===void 0&&(A={}),A.authorization=r);let o=yield s.get(t,A);if(o.message.statusCode!==200){let g=new _i(o.message.statusCode);throw Ue(`Failed to download from "${t}". Code(${o.message.statusCode}) Message(${o.message.statusMessage})`),g}let n=wy.promisify(my.pipeline),a=Du("TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY",()=>o.message)(),c=!1;try{return yield n(a,Hr.createWriteStream(e)),Ue("download complete"),c=!0,e}finally{if(!c){Ue("download failed");try{yield fp(e)}catch(g){Ue(`Failed to delete '${e}'. ${g.message}`)}}}})}function Ty(t,e){return Er(this,arguments,void 0,function*(r,A,s="xz"){if(!r)throw new Error("parameter 'file' is required");A=yield ky(A),Ue("Checking tar --version");let o="";yield cr("tar --version",[],{ignoreReturnCode:!0,silent:!0,listeners:{stdout:g=>o+=g.toString(),stderr:g=>o+=g.toString()}}),Ue(o.trim());let n=o.toUpperCase().includes("GNU TAR"),i;s instanceof Array?i=s:i=[s],Nl()&&!s.includes("v")&&i.push("-v");let a=A,c=r;return Ry&&n&&(i.push("--force-local"),a=A.replace(/\\/g,"/"),c=r.replace(/\\/g,"/")),n&&(i.push("--warning=no-unknown-keyword"),i.push("--overwrite")),i.push("-C",a,"-f",c),yield cr("tar",i),A})}function by(t,e){return Er(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'file' is required");return e=yield ky(e),Ry?yield eJ(t,e):yield tJ(t,e),e})}function eJ(t,e){return Er(this,void 0,void 0,function*(){let r=t.replace(/'/g,"''").replace(/"|\n|\r/g,""),A=e.replace(/'/g,"''").replace(/"|\n|\r/g,""),s=yield _r("pwsh",!1);if(s){let n=["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;",`try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`,`catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force } else { throw $_ } } ;`].join(" ")];Ue(`Using pwsh at path: ${s}`),yield cr(`"${s}"`,n)}else{let n=["-NoLogo","-Sta","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;",`if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force }`,`else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`].join(" ")],i=yield _r("powershell",!0);Ue(`Using powershell at path: ${i}`),yield cr(`"${i}"`,n)}})}function tJ(t,e){return Er(this,void 0,void 0,function*(){let r=yield _r("unzip",!0),A=[t];Nl()||A.unshift("-q"),A.unshift("-o"),yield cr(`"${r}"`,A,{cwd:e})})}function ky(t){return Er(this,void 0,void 0,function*(){return t||(t=go.join(Fy(),Tu.randomUUID())),yield Tl(t),t})}function Fy(){let t=process.env.RUNNER_TEMP||"";return(0,yy.ok)(t,"Expected RUNNER_TEMP to be defined"),t}function Du(t,e){let r=global[t];return r!==void 0?r:e}var Sy=` fragment releaseFields on Release { tagName releaseAssets(first: 50) { @@ -58,7 +58,7 @@ ${o}`;break;case"retry":Wf(o)&&(r[s]=o);break;case"id":zf(o)&&(r[s]=o);break;cas } } } - `;(async()=>{let t=Dm(""),e=Rp("zb-version"),r=e?{query:` + `;(async()=>{let t=Fm(""),e=bp("zb-version"),r=e?{query:` query releaseAssetsForVersion($tagName: String!) { repository(owner: "256lights", repo: "zb") { release(tagName: $tagName) { @@ -67,7 +67,7 @@ ${o}`;break;case"retry":Wf(o)&&(r[s]=o);break;case"id":zf(o)&&(r[s]=o);break;cas } } - ${Dy} + ${Sy} `,tagName:"v"+e}:{query:` query releaseAssetsForLatest { repository(owner: "256lights", repo: "zb") { @@ -77,8 +77,8 @@ ${o}`;break;case"retry":Wf(o)&&(r[s]=o);break;case"id":zf(o)&&(r[s]=o);break;cas } } - ${Dy} - `},s=(await t.graphql(r)).repository.release,o=s?.releaseAssets?.nodes||[],n;if(hr.platform==="darwin"&&hr.arch==="arm64"?n=o.find(({name:c})=>c.includes("aarch64-apple-macos")):hr.platform==="linux"&&hr.arch==="x64"&&(n=o.find(({name:c})=>c.includes("x86_64-unknown-linux"))),!n){Dp(`No download found for ${hr.arch}-${hr.platform} version ${s?.tagName||e}`);return}let i=await py(n.downloadUrl),a=n.downloadUrl.endsWith(".zip")?await wy(i):await my(i);await cr(sJ.join(a,"install"),["--single-user","--no-systemd","--no-launchd"])})(); + ${Sy} + `},s=(await t.graphql(r)).repository.release,o=s?.releaseAssets?.nodes||[],n;if(hr.platform==="darwin"&&hr.arch==="arm64"?n=o.find(({name:c})=>c.includes("aarch64-apple-macos")):hr.platform==="linux"&&hr.arch==="x64"&&(n=o.find(({name:c})=>c.includes("x86_64-unknown-linux"))),!n){kp(`No download found for ${hr.arch}-${hr.platform} version ${s?.tagName||e}`);return}let i=await Dy(n.downloadUrl),a=n.downloadUrl.endsWith(".zip")?await by(i):await Ty(i);await cr(Ny.default.join(a,"install"),["--single-user","--no-systemd","--no-launchd"])})(); /** * @license * Copyright 2026 The zb Authors diff --git a/.github/actions/setup-zb/package.json b/.github/actions/setup-zb/package.json index b890b0a..c44f14c 100644 --- a/.github/actions/setup-zb/package.json +++ b/.github/actions/setup-zb/package.json @@ -10,10 +10,10 @@ "setup" ], "private": true, - "type": "module", + "type": "commonjs", "main": "dist/main.js", "scripts": { - "build": "node build.js", + "build": "node build.mjs", "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { From 69559f634f3b08ac18b505e706c8e254648c50cf Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 16:49:03 -0700 Subject: [PATCH 09/23] Enable source maps --- .github/actions/setup-zb/build.mjs | 1 + .github/actions/setup-zb/dist/main.js | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/actions/setup-zb/build.mjs b/.github/actions/setup-zb/build.mjs index 266f02d..1c36cd7 100644 --- a/.github/actions/setup-zb/build.mjs +++ b/.github/actions/setup-zb/build.mjs @@ -11,6 +11,7 @@ await esbuild.build({ entryPoints: ['src/main.ts'], bundle: true, minify: true, + sourcemap: 'inline', platform: 'node', target: ['node24.0'], format: 'cjs', diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index cfa2df0..6b1a65a 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -106,3 +106,4 @@ content-type/dist/index.js: (* v8 ignore next -- @preserve *) (* v8 ignore else -- @preserve *) */ +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90dW5uZWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdHJlZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9kaWFnbm9zdGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlci1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3V0aWwvdGltZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kYXRhLXVybC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZm9ybWRhdGEtcGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmVkaXJlY3QtaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wtYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmV0cnktaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3JldHJ5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZHVtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9lbmNvZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS9jYWNoZXN0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvcGFyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2ZyYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc2VuZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvY29udGVudC10eXBlL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9wYXJzZS1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvaWRlbnRpZmllcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9jbGFzc2VzL3NlbXZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy92YWxpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9pbmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZGlmZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9tYWpvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9taW5vci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wcmVyZWxlYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvbXBhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcmNvbXBhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29tcGFyZS1sb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLWJ1aWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcnNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZ3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbmVxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9sdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY21wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvZXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy90cnVuY2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2xydWNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9yYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvY29tcGFyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdG8tY29tcGFyYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWF4LXNhdGlzZnlpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXNhdGlzZnlpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdmFsaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvb3V0c2lkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9ndHIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbHRyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL2ludGVyc2VjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc2ltcGxpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc3Vic2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW5kZXguanMiLCAiLi4vc3JjL21haW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL2NvbW1hbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9wcm94eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvcGxhdGZvcm0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL3Rvb2xydW5uZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vc3JjL2lvLXV0aWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL2V4ZWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvY29udGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL3NyYy9pbnRlcm5hbC91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLXVzZXItYWdlbnQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9qc29uLXdpdGgtYmlnaW50L2pzb24td2l0aC1iaWdpbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QtZXJyb3IvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2F1dGgtdG9rZW4vZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL3ZlcnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvZ2l0aHViLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy90b29sLWNhY2hlL3NyYy90b29sLWNhY2hlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy90b29sLWNhY2hlL3NyYy9tYW5pZmVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvdG9vbC1jYWNoZS9zcmMvcmV0cnktaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3R1bm5lbCcpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga0Rlc3Ryb3k6IFN5bWJvbCgnZGVzdHJveScpLFxuICBrRGlzcGF0Y2g6IFN5bWJvbCgnZGlzcGF0Y2gnKSxcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga1dyaXRpbmc6IFN5bWJvbCgnd3JpdGluZycpLFxuICBrUmVzdW1pbmc6IFN5bWJvbCgncmVzdW1pbmcnKSxcbiAga1F1ZXVlOiBTeW1ib2woJ3F1ZXVlJyksXG4gIGtDb25uZWN0OiBTeW1ib2woJ2Nvbm5lY3QnKSxcbiAga0Nvbm5lY3Rpbmc6IFN5bWJvbCgnY29ubmVjdGluZycpLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQ6IFN5bWJvbCgnZGVmYXVsdCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQ6IFN5bWJvbCgnbWF4IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZDogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQgdGhyZXNob2xkJyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWU6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmU6IFN5bWJvbCgna2VlcCBhbGl2ZScpLFxuICBrSGVhZGVyc1RpbWVvdXQ6IFN5bWJvbCgnaGVhZGVycyB0aW1lb3V0JyksXG4gIGtCb2R5VGltZW91dDogU3ltYm9sKCdib2R5IHRpbWVvdXQnKSxcbiAga1NlcnZlck5hbWU6IFN5bWJvbCgnc2VydmVyIG5hbWUnKSxcbiAga0xvY2FsQWRkcmVzczogU3ltYm9sKCdsb2NhbCBhZGRyZXNzJyksXG4gIGtIb3N0OiBTeW1ib2woJ2hvc3QnKSxcbiAga05vUmVmOiBTeW1ib2woJ25vIHJlZicpLFxuICBrQm9keVVzZWQ6IFN5bWJvbCgndXNlZCcpLFxuICBrQm9keTogU3ltYm9sKCdhYnN0cmFjdGVkIHJlcXVlc3QgYm9keScpLFxuICBrUnVubmluZzogU3ltYm9sKCdydW5uaW5nJyksXG4gIGtCbG9ja2luZzogU3ltYm9sKCdibG9ja2luZycpLFxuICBrUGVuZGluZzogU3ltYm9sKCdwZW5kaW5nJyksXG4gIGtTaXplOiBTeW1ib2woJ3NpemUnKSxcbiAga0J1c3k6IFN5bWJvbCgnYnVzeScpLFxuICBrUXVldWVkOiBTeW1ib2woJ3F1ZXVlZCcpLFxuICBrRnJlZTogU3ltYm9sKCdmcmVlJyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJyksXG4gIGtDbG9zZWQ6IFN5bWJvbCgnY2xvc2VkJyksXG4gIGtOZWVkRHJhaW46IFN5bWJvbCgnbmVlZCBkcmFpbicpLFxuICBrUmVzZXQ6IFN5bWJvbCgncmVzZXQnKSxcbiAga0Rlc3Ryb3llZDogU3ltYm9sLmZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKSxcbiAga1Jlc3VtZTogU3ltYm9sKCdyZXN1bWUnKSxcbiAga09uRXJyb3I6IFN5bWJvbCgnb24gZXJyb3InKSxcbiAga01heEhlYWRlcnNTaXplOiBTeW1ib2woJ21heCBoZWFkZXJzIHNpemUnKSxcbiAga1J1bm5pbmdJZHg6IFN5bWJvbCgncnVubmluZyBpbmRleCcpLFxuICBrUGVuZGluZ0lkeDogU3ltYm9sKCdwZW5kaW5nIGluZGV4JyksXG4gIGtFcnJvcjogU3ltYm9sKCdlcnJvcicpLFxuICBrQ2xpZW50czogU3ltYm9sKCdjbGllbnRzJyksXG4gIGtDbGllbnQ6IFN5bWJvbCgnY2xpZW50JyksXG4gIGtQYXJzZXI6IFN5bWJvbCgncGFyc2VyJyksXG4gIGtPbkRlc3Ryb3llZDogU3ltYm9sKCdkZXN0cm95IGNhbGxiYWNrcycpLFxuICBrUGlwZWxpbmluZzogU3ltYm9sKCdwaXBlbGluaW5nJyksXG4gIGtTb2NrZXQ6IFN5bWJvbCgnc29ja2V0JyksXG4gIGtIb3N0SGVhZGVyOiBTeW1ib2woJ2hvc3QgaGVhZGVyJyksXG4gIGtDb25uZWN0b3I6IFN5bWJvbCgnY29ubmVjdG9yJyksXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoOiBTeW1ib2woJ3N0cmljdCBjb250ZW50IGxlbmd0aCcpLFxuICBrTWF4UmVkaXJlY3Rpb25zOiBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpLFxuICBrTWF4UmVxdWVzdHM6IFN5bWJvbCgnbWF4UmVxdWVzdHNQZXJDbGllbnQnKSxcbiAga1Byb3h5OiBTeW1ib2woJ3Byb3h5IGFnZW50IG9wdGlvbnMnKSxcbiAga0NvdW50ZXI6IFN5bWJvbCgnc29ja2V0IHJlcXVlc3QgY291bnRlcicpLFxuICBrSW50ZXJjZXB0b3JzOiBTeW1ib2woJ2Rpc3BhdGNoIGludGVyY2VwdG9ycycpLFxuICBrTWF4UmVzcG9uc2VTaXplOiBTeW1ib2woJ21heCByZXNwb25zZSBzaXplJyksXG4gIGtIVFRQMlNlc3Npb246IFN5bWJvbCgnaHR0cDJTZXNzaW9uJyksXG4gIGtIVFRQMlNlc3Npb25TdGF0ZTogU3ltYm9sKCdodHRwMlNlc3Npb24gc3RhdGUnKSxcbiAga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeTogU3ltYm9sKCdyZXRyeSBhZ2VudCBkZWZhdWx0IHJldHJ5JyksXG4gIGtDb25zdHJ1Y3Q6IFN5bWJvbCgnY29uc3RydWN0YWJsZScpLFxuICBrTGlzdGVuZXJzOiBTeW1ib2woJ2xpc3RlbmVycycpLFxuICBrSFRUUENvbnRleHQ6IFN5bWJvbCgnaHR0cCBjb250ZXh0JyksXG4gIGtNYXhDb25jdXJyZW50U3RyZWFtczogU3ltYm9sKCdtYXggY29uY3VycmVudCBzdHJlYW1zJyksXG4gIGtOb1Byb3h5QWdlbnQ6IFN5bWJvbCgnbm8gcHJveHkgYWdlbnQnKSxcbiAga0h0dHBQcm94eUFnZW50OiBTeW1ib2woJ2h0dHAgcHJveHkgYWdlbnQnKSxcbiAga0h0dHBzUHJveHlBZ2VudDogU3ltYm9sKCdodHRwcyBwcm94eSBhZ2VudCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGtVbmRpY2lFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSJylcbmNsYXNzIFVuZGljaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1VuZGljaUVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrVW5kaWNpRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1VuZGljaUVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0Nvbm5lY3RUaW1lb3V0RXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnKVxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdDb25uZWN0VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0Nvbm5lY3QgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tDb25uZWN0VGltZW91dEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tDb25uZWN0VGltZW91dEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0hlYWRlcnNUaW1lb3V0RXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnKVxuY2xhc3MgSGVhZGVyc1RpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzVGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tIZWFkZXJzVGltZW91dEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tIZWFkZXJzVGltZW91dEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0hlYWRlcnNPdmVyZmxvd0Vycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfSEVBREVSU19PVkVSRkxPVycpXG5jbGFzcyBIZWFkZXJzT3ZlcmZsb3dFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzT3ZlcmZsb3dFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIE92ZXJmbG93IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfT1ZFUkZMT1cnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tIZWFkZXJzT3ZlcmZsb3dFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrSGVhZGVyc092ZXJmbG93RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrQm9keVRpbWVvdXRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX0JPRFlfVElNRU9VVCcpXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0JvZHlUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQm9keSBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0JPRFlfVElNRU9VVCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0JvZHlUaW1lb3V0RXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba0JvZHlUaW1lb3V0RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERScpXG5jbGFzcyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIGJvZHkpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZVN0YXR1c0NvZGVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBTdGF0dXMgQ29kZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERSdcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXNwb25zZVN0YXR1c0NvZGVFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtJbnZhbGlkQXJndW1lbnRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX0lOVkFMSURfQVJHJylcbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tJbnZhbGlkQXJndW1lbnRFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrSW52YWxpZEFyZ3VtZW50RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrSW52YWxpZFJldHVyblZhbHVlRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRScpXG5jbGFzcyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIFJldHVybiBWYWx1ZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0ludmFsaWRSZXR1cm5WYWx1ZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtBYm9ydEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQUJPUlQnKVxuY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQUJPUlQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tBYm9ydEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tBYm9ydEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga1JlcXVlc3RBYm9ydGVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9BQk9SVEVEJylcbmNsYXNzIFJlcXVlc3RBYm9ydGVkRXJyb3IgZXh0ZW5kcyBBYm9ydEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYWJvcnRlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9BQk9SVEVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrUmVxdWVzdEFib3J0ZWRFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrUmVxdWVzdEFib3J0ZWRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtJbmZvcm1hdGlvbmFsRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9JTkZPJylcbmNsYXNzIEluZm9ybWF0aW9uYWxFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrSW5mb3JtYXRpb25hbEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tJbmZvcm1hdGlvbmFsRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJylcbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCcpXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrQ2xpZW50RGVzdHJveWVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9ERVNUUk9ZRUQnKVxuY2xhc3MgQ2xpZW50RGVzdHJveWVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50RGVzdHJveWVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBkZXN0cm95ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfREVTVFJPWUVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrQ2xpZW50RGVzdHJveWVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba0NsaWVudERlc3Ryb3llZEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0NsaWVudENsb3NlZEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQ0xPU0VEJylcbmNsYXNzIENsaWVudENsb3NlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudENsb3NlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgY2xvc2VkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NMT1NFRCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0NsaWVudENsb3NlZEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tDbGllbnRDbG9zZWRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtTb2NrZXRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1NPQ0tFVCcpXG5jbGFzcyBTb2NrZXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHNvY2tldCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1NvY2tldEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1NvY2tldCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9TT0NLRVQnXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1NvY2tldEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tTb2NrZXRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtOb3RTdXBwb3J0ZWRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX05PVF9TVVBQT1JURUQnKVxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrTm90U3VwcG9ydGVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba05vdFN1cHBvcnRlZEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0JhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nKVxuY2xhc3MgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1Vwc3RyZWFtRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm8gdXBzdHJlYW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIEJhbGFuY2VkUG9vbCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CUExfTUlTU0lOR19VUFNUUkVBTSdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0JhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtIVFRQUGFyc2VyRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9IVFRQX1BBUlNFUicpXG5jbGFzcyBIVFRQUGFyc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnSFRUUFBhcnNlckVycm9yJ1xuICAgIHRoaXMuY29kZSA9IGNvZGUgPyBgSFBFXyR7Y29kZX1gIDogdW5kZWZpbmVkXG4gICAgdGhpcy5kYXRhID0gZGF0YSA/IGRhdGEudG9TdHJpbmcoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrSFRUUFBhcnNlckVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tIVFRQUGFyc2VyRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1JFU19FWENFRURFRF9NQVhfU0laRScpXG5jbGFzcyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga1JlcXVlc3RSZXRyeUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVRX1JFVFJZJylcbmNsYXNzIFJlcXVlc3RSZXRyeUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgeyBoZWFkZXJzLCBkYXRhIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0UmV0cnlFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IHJldHJ5IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9SRVRSWSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1JlcXVlc3RSZXRyeUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXF1ZXN0UmV0cnlFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtSZXNwb25zZUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVTUE9OU0UnKVxuY2xhc3MgUmVzcG9uc2VFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIHsgaGVhZGVycywgZGF0YSB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1Jlc3BvbnNlRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9QUlhfVExTJylcbmNsYXNzIFNlY3VyZVByb3h5Q29ubmVjdGlvbkVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoY2F1c2UsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlLCAuLi4ob3B0aW9ucyA/PyB7fSkgfSlcbiAgICB0aGlzLm5hbWUgPSAnU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnU2VjdXJlIFByb3h5IENvbm5lY3Rpb24gZmFpbGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1BSWF9UTFMnXG4gICAgdGhpcy5jYXVzZSA9IGNhdXNlXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfV1NfTUVTU0FHRV9TSVpFX0VYQ0VFREVEJylcbmNsYXNzIE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTWF4IGRlY29tcHJlc3NlZCBtZXNzYWdlIHNpemUgZXhjZWVkZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfV1NfTUVTU0FHRV9TSVpFX0VYQ0VFREVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgZ2V0IFtrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXSAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQWJvcnRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBVbmRpY2lFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQ29ubmVjdFRpbWVvdXRFcnJvcixcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvcixcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIFJlcXVlc3RSZXRyeUVycm9yLFxuICBSZXNwb25zZUVycm9yLFxuICBTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcixcbiAgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNsYXNzIFRzdE5vZGUge1xuICAvKiogQHR5cGUge2FueX0gKi9cbiAgdmFsdWUgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVsbCB8IFRzdE5vZGV9ICovXG4gIGxlZnQgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVsbCB8IFRzdE5vZGV9ICovXG4gIG1pZGRsZSA9IG51bGxcbiAgLyoqIEB0eXBlIHtudWxsIHwgVHN0Tm9kZX0gKi9cbiAgcmlnaHQgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBjb2RlXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICovXG4gIGNvbnN0cnVjdG9yIChrZXksIHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkIHx8IGluZGV4ID49IGtleS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VucmVhY2hhYmxlJylcbiAgICB9XG4gICAgY29uc3QgY29kZSA9IHRoaXMuY29kZSA9IGtleS5jaGFyQ29kZUF0KGluZGV4KVxuICAgIC8vIGNoZWNrIGNvZGUgaXMgYXNjaWkgc3RyaW5nXG4gICAgaWYgKGNvZGUgPiAweDdGKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZXkgbXVzdCBiZSBhc2NpaSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gKytpbmRleCkge1xuICAgICAgdGhpcy5taWRkbGUgPSBuZXcgVHN0Tm9kZShrZXksIHZhbHVlLCBpbmRleClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBhZGQgKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBsZW5ndGggPSBrZXkubGVuZ3RoXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5yZWFjaGFibGUnKVxuICAgIH1cbiAgICBsZXQgaW5kZXggPSAwXG4gICAgbGV0IG5vZGUgPSB0aGlzXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBrZXkuY2hhckNvZGVBdChpbmRleClcbiAgICAgIC8vIGNoZWNrIGNvZGUgaXMgYXNjaWkgc3RyaW5nXG4gICAgICBpZiAoY29kZSA+IDB4N0YpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2V5IG11c3QgYmUgYXNjaWkgc3RyaW5nJylcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNvZGUgPT09IGNvZGUpIHtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gKytpbmRleCkge1xuICAgICAgICAgIG5vZGUudmFsdWUgPSB2YWx1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5taWRkbGUgIT09IG51bGwpIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5taWRkbGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLm1pZGRsZSA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jb2RlIDwgY29kZSkge1xuICAgICAgICBpZiAobm9kZS5sZWZ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUubGVmdFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUubGVmdCA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlID0gbm9kZS5yaWdodFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yaWdodCA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleVxuICAgKiBAcmV0dXJuIHtUc3ROb2RlIHwgbnVsbH1cbiAgICovXG4gIHNlYXJjaCAoa2V5KSB7XG4gICAgY29uc3Qga2V5bGVuZ3RoID0ga2V5Lmxlbmd0aFxuICAgIGxldCBpbmRleCA9IDBcbiAgICBsZXQgbm9kZSA9IHRoaXNcbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCAmJiBpbmRleCA8IGtleWxlbmd0aCkge1xuICAgICAgbGV0IGNvZGUgPSBrZXlbaW5kZXhdXG4gICAgICAvLyBBLVpcbiAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIGl0IGlzIGJpZ2dlciB0aGFuIDB4NWEuXG4gICAgICAvLyBMb3dlcmNhc2UgbGV0dGVycyBoYXZlIGhpZ2hlciBjaGFyIGNvZGVzIHRoYW4gdXBwZXJjYXNlIG9uZXMuXG4gICAgICAvLyBBbHNvIHdlIGFzc3VtZSB0aGF0IGhlYWRlcnMgd2lsbCBtb3N0bHkgY29udGFpbiBsb3dlcmNhc2UgY2hhcmFjdGVycy5cbiAgICAgIGlmIChjb2RlIDw9IDB4NWEgJiYgY29kZSA+PSAweDQxKSB7XG4gICAgICAgIC8vIExvd2VyY2FzZSBmb3IgdXBwZXJjYXNlLlxuICAgICAgICBjb2RlIHw9IDMyXG4gICAgICB9XG4gICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoY29kZSA9PT0gbm9kZS5jb2RlKSB7XG4gICAgICAgICAgaWYgKGtleWxlbmd0aCA9PT0gKytpbmRleCkge1xuICAgICAgICAgICAgLy8gUmV0dXJucyBOb2RlIHNpbmNlIGl0IGlzIHRoZSBsYXN0IGtleS5cbiAgICAgICAgICAgIHJldHVybiBub2RlXG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUgPSBub2RlLm1pZGRsZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUuY29kZSA8IGNvZGUgPyBub2RlLmxlZnQgOiBub2RlLnJpZ2h0XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY2xhc3MgVGVybmFyeVNlYXJjaFRyZWUge1xuICAvKiogQHR5cGUge1RzdE5vZGUgfCBudWxsfSAqL1xuICBub2RlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiAqL1xuICBpbnNlcnQgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5ub2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLm5vZGUgPSBuZXcgVHN0Tm9kZShrZXksIHZhbHVlLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vZGUuYWRkKGtleSwgdmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEByZXR1cm4ge2FueX1cbiAgICovXG4gIGxvb2t1cCAoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZT8uc2VhcmNoKGtleSk/LnZhbHVlID8/IG51bGxcbiAgfVxufVxuXG5jb25zdCB0cmVlID0gbmV3IFRlcm5hcnlTZWFyY2hUcmVlKClcblxuZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWxsa25vd25IZWFkZXJOYW1lcy5sZW5ndGg7ICsraSkge1xuICBjb25zdCBrZXkgPSBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt3ZWxsa25vd25IZWFkZXJOYW1lc1tpXV1cbiAgdHJlZS5pbnNlcnQoa2V5LCBrZXkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBUZXJuYXJ5U2VhcmNoVHJlZSxcbiAgdHJlZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCwga0xpc3RlbmVycywga0JvZHkgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEluY29taW5nTWVzc2FnZSB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25vZGU6bmV0JylcbmNvbnN0IHsgQmxvYiB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ25vZGU6cXVlcnlzdHJpbmcnKVxuY29uc3QgeyBFdmVudEVtaXR0ZXI6IEVFIH0gPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IHRyZWUgfSA9IHJlcXVpcmUoJy4vdHJlZScpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmNsYXNzIEJvZHlBc3luY0l0ZXJhYmxlIHtcbiAgY29uc3RydWN0b3IgKGJvZHkpIHtcbiAgICB0aGlzW2tCb2R5XSA9IGJvZHlcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSBmYWxzZVxuICB9XG5cbiAgYXN5bmMgKiBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdICgpIHtcbiAgICBhc3NlcnQoIXRoaXNba0JvZHlVc2VkXSwgJ2Rpc3R1cmJlZCcpXG4gICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgIHlpZWxkICogdGhpc1trQm9keV1cbiAgfVxufVxuXG5mdW5jdGlvbiB3cmFwUmVxdWVzdEJvZHkgKGJvZHkpIHtcbiAgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgLy8gVE9ETyAoZml4KTogUHJvdmlkZSBzb21lIHdheSBmb3IgdGhlIHVzZXIgdG8gY2FjaGUgdGhlIGZpbGUgdG8gZS5nLiAvdG1wXG4gICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIDEwMC1leHBlY3Qgc3VwcG9ydCB0byBwcm92aWRlIGEgd2F5IHRvIGRvIHRoaXMgcHJvcGVybHk/XG4gICAgaWYgKGJvZHlMZW5ndGgoYm9keSkgPT09IDApIHtcbiAgICAgIGJvZHlcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFzc2VydChmYWxzZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIGJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICBFRS5wcm90b3R5cGUub24uY2FsbChib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keVxuICB9IGVsc2UgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVE9ETyAoZml4KTogV2UgY2FuJ3QgYWNjZXNzIFJlYWRhYmxlU3RyZWFtIGludGVybmFsIHN0YXRlXG4gICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGRpc3R1cmJlZC4gVGhpcyBpcyBqdXN0XG4gICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgIHJldHVybiBuZXcgQm9keUFzeW5jSXRlcmFibGUoYm9keSlcbiAgfSBlbHNlIGlmIChcbiAgICBib2R5ICYmXG4gICAgdHlwZW9mIGJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgIUFycmF5QnVmZmVyLmlzVmlldyhib2R5KSAmJlxuICAgIGlzSXRlcmFibGUoYm9keSlcbiAgKSB7XG4gICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgIC8vIG9yIHRocm91Z2ggc29tZSBvdGhlciBmbGFnP1xuICAgIHJldHVybiBuZXcgQm9keUFzeW5jSXRlcmFibGUoYm9keSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYm9keVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzVGFnID0gb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ11cblxuICAgIHJldHVybiAoc1RhZyA9PT0gJ0Jsb2InIHx8IHNUYWcgPT09ICdGaWxlJykgJiYgKFxuICAgICAgKCdzdHJlYW0nIGluIG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykgfHxcbiAgICAgICgnYXJyYXlCdWZmZXInIGluIG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKVxuICAgIClcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFVSTCAodXJsLCBxdWVyeVBhcmFtcykge1xuICBpZiAodXJsLmluY2x1ZGVzKCc/JykgfHwgdXJsLmluY2x1ZGVzKCcjJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IHBhcmFtcyBjYW5ub3QgYmUgcGFzc2VkIHdoZW4gdXJsIGFscmVhZHkgY29udGFpbnMgXCI/XCIgb3IgXCIjXCIuJylcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zKVxuXG4gIGlmIChzdHJpbmdpZmllZCkge1xuICAgIHVybCArPSAnPycgKyBzdHJpbmdpZmllZFxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkUG9ydCAocG9ydCkge1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHBvcnQsIDEwKVxuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSBOdW1iZXIocG9ydCkgJiZcbiAgICB2YWx1ZSA+PSAwICYmXG4gICAgdmFsdWUgPD0gNjU1MzVcbiAgKVxufVxuXG5mdW5jdGlvbiBpc0h0dHBPckh0dHBzUHJlZml4ZWQgKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT0gbnVsbCAmJlxuICAgIHZhbHVlWzBdID09PSAnaCcgJiZcbiAgICB2YWx1ZVsxXSA9PT0gJ3QnICYmXG4gICAgdmFsdWVbMl0gPT09ICd0JyAmJlxuICAgIHZhbHVlWzNdID09PSAncCcgJiZcbiAgICAoXG4gICAgICB2YWx1ZVs0XSA9PT0gJzonIHx8XG4gICAgICAoXG4gICAgICAgIHZhbHVlWzRdID09PSAncycgJiZcbiAgICAgICAgdmFsdWVbNV0gPT09ICc6J1xuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVVSTCAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHVybCA9IG5ldyBVUkwodXJsKVxuXG4gICAgaWYgKCFpc0h0dHBPckh0dHBzUHJlZml4ZWQodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgaWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBUaGUgVVJMIGFyZ3VtZW50IG11c3QgYmUgYSBub24tbnVsbCBvYmplY3QuJylcbiAgfVxuXG4gIGlmICghKHVybCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICBpZiAodXJsLnBvcnQgIT0gbnVsbCAmJiB1cmwucG9ydCAhPT0gJycgJiYgaXNWYWxpZFBvcnQodXJsLnBvcnQpID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogcG9ydCBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciBvciBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRoICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRoOiB0aGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRobmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGhuYW1lOiB0aGUgcGF0aG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwuaG9zdG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLmhvc3RuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBob3N0bmFtZTogdGhlIGhvc3RuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLm9yaWdpbiAhPSBudWxsICYmIHR5cGVvZiB1cmwub3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBvcmlnaW46IHRoZSBvcmlnaW4gbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICghaXNIdHRwT3JIdHRwc1ByZWZpeGVkKHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSB1cmwucG9ydCAhPSBudWxsXG4gICAgICA/IHVybC5wb3J0XG4gICAgICA6ICh1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApXG4gICAgbGV0IG9yaWdpbiA9IHVybC5vcmlnaW4gIT0gbnVsbFxuICAgICAgPyB1cmwub3JpZ2luXG4gICAgICA6IGAke3VybC5wcm90b2NvbCB8fCAnJ30vLyR7dXJsLmhvc3RuYW1lIHx8ICcnfToke3BvcnR9YFxuICAgIGxldCBwYXRoID0gdXJsLnBhdGggIT0gbnVsbFxuICAgICAgPyB1cmwucGF0aFxuICAgICAgOiBgJHt1cmwucGF0aG5hbWUgfHwgJyd9JHt1cmwuc2VhcmNoIHx8ICcnfWBcblxuICAgIGlmIChvcmlnaW5bb3JpZ2luLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zbGljZSgwLCBvcmlnaW4ubGVuZ3RoIC0gMSlcbiAgICB9XG5cbiAgICBpZiAocGF0aCAmJiBwYXRoWzBdICE9PSAnLycpIHtcbiAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgfVxuICAgIC8vIG5ldyBVUkwocGF0aCwgb3JpZ2luKSBpcyB1bnNhZmUgd2hlbiBgcGF0aGAgY29udGFpbnMgYW4gYWJzb2x1dGUgVVJMXG4gICAgLy8gRnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML1VSTDpcbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYSByZWxhdGl2ZSBVUkwsIHNlY29uZCBwYXJhbSBpcyByZXF1aXJlZCwgYW5kIHdpbGwgYmUgdXNlZCBhcyB0aGUgYmFzZSBVUkwuXG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGFuIGFic29sdXRlIFVSTCwgYSBnaXZlbiBzZWNvbmQgcGFyYW0gd2lsbCBiZSBpZ25vcmVkLlxuICAgIHJldHVybiBuZXcgVVJMKGAke29yaWdpbn0ke3BhdGh9YClcbiAgfVxuXG4gIGlmICghaXNIdHRwT3JIdHRwc1ByZWZpeGVkKHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VPcmlnaW4gKHVybCkge1xuICB1cmwgPSBwYXJzZVVSTCh1cmwpXG5cbiAgaWYgKHVybC5wYXRobmFtZSAhPT0gJy8nIHx8IHVybC5zZWFyY2ggfHwgdXJsLmhhc2gpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdG5hbWUgKGhvc3QpIHtcbiAgaWYgKGhvc3RbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMSwgaWR4KVxuICB9XG5cbiAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCc6JylcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBob3N0XG5cbiAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDAsIGlkeClcbn1cblxuLy8gSVAgYWRkcmVzc2VzIGFyZSBub3QgdmFsaWQgc2VydmVyIG5hbWVzIHBlciBSRkM2MDY2XG4vLyA+IEN1cnJlbnRseSwgdGhlIG9ubHkgc2VydmVyIG5hbWVzIHN1cHBvcnRlZCBhcmUgRE5TIGhvc3RuYW1lc1xuZnVuY3Rpb24gZ2V0U2VydmVyTmFtZSAoaG9zdCkge1xuICBpZiAoIWhvc3QpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYXNzZXJ0KHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJylcblxuICBjb25zdCBzZXJ2ZXJuYW1lID0gZ2V0SG9zdG5hbWUoaG9zdClcbiAgaWYgKG5ldC5pc0lQKHNlcnZlcm5hbWUpKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gc2VydmVybmFtZVxufVxuXG5mdW5jdGlvbiBkZWVwQ2xvbmUgKG9iaikge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKVxufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpXG59XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgKHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykpXG59XG5cbmZ1bmN0aW9uIGJvZHlMZW5ndGggKGJvZHkpIHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oYm9keSkpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUub2JqZWN0TW9kZSA9PT0gZmFsc2UgJiYgc3RhdGUuZW5kZWQgPT09IHRydWUgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXRlLmxlbmd0aClcbiAgICAgID8gc3RhdGUubGVuZ3RoXG4gICAgICA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZSAhPSBudWxsID8gYm9keS5zaXplIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZXN0cm95ZWQgKGJvZHkpIHtcbiAgcmV0dXJuIGJvZHkgJiYgISEoYm9keS5kZXN0cm95ZWQgfHwgYm9keVtrRGVzdHJveWVkXSB8fCAoc3RyZWFtLmlzRGVzdHJveWVkPy4oYm9keSkpKVxufVxuXG5mdW5jdGlvbiBkZXN0cm95IChzdHJlYW0sIGVycikge1xuICBpZiAoc3RyZWFtID09IG51bGwgfHwgIWlzU3RyZWFtKHN0cmVhbSkgfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3RyZWFtKS5jb25zdHJ1Y3RvciA9PT0gSW5jb21pbmdNZXNzYWdlKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM4NTA1L2ZpbGVzXG4gICAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIH1cblxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChzdHJlYW0uZGVzdHJveWVkICE9PSB0cnVlKSB7XG4gICAgc3RyZWFtW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5cbmNvbnN0IEtFRVBBTElWRV9USU1FT1VUX0VYUFIgPSAvdGltZW91dD0oXFxkKykvXG5mdW5jdGlvbiBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQgKHZhbCkge1xuICBjb25zdCBtID0gdmFsLnRvU3RyaW5nKCkubWF0Y2goS0VFUEFMSVZFX1RJTUVPVVRfRVhQUilcbiAgcmV0dXJuIG0gPyBwYXJzZUludChtWzFdLCAxMCkgKiAxMDAwIDogbnVsbFxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGhlYWRlciBuYW1lIGFuZCByZXR1cm5zIGl0cyBsb3dlcmNhc2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gdmFsdWUgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGhlYWRlck5hbWVUb1N0cmluZyAodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICA/IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW3ZhbHVlXSA/PyB2YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgOiB0cmVlLmxvb2t1cCh2YWx1ZSkgPz8gdmFsdWUudG9TdHJpbmcoJ2xhdGluMScpLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBSZWNlaXZlIHRoZSBidWZmZXIgYXMgYSBzdHJpbmcgYW5kIHJldHVybiBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lICh2YWx1ZSkge1xuICByZXR1cm4gdHJlZS5sb29rdXAodmFsdWUpID8/IHZhbHVlLnRvU3RyaW5nKCdsYXRpbjEnKS50b0xvd2VyQ2FzZSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4gfCAoQnVmZmVyIHwgc3RyaW5nIHwgKEJ1ZmZlciB8IHN0cmluZylbXSlbXX0gaGVhZGVyc1xuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT59IFtvYmpdXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fVxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaikge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIG9iaiA9IHt9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXJzW2ldKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKHZhbCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbCA9IFt2YWxdXG4gICAgICAgIG9ialtrZXldID0gdmFsXG4gICAgICB9XG4gICAgICB2YWwucHVzaChoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzVmFsdWUgPSBoZWFkZXJzW2kgKyAxXVxuICAgICAgaWYgKHR5cGVvZiBoZWFkZXJzVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1ZhbHVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IEFycmF5LmlzQXJyYXkoaGVhZGVyc1ZhbHVlKSA/IGhlYWRlcnNWYWx1ZS5tYXAoeCA9PiB4LnRvU3RyaW5nKCd1dGY4JykpIDogaGVhZGVyc1ZhbHVlLnRvU3RyaW5nKCd1dGY4JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IGxlbiA9IGhlYWRlcnMubGVuZ3RoXG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheShsZW4pXG5cbiAgbGV0IGhhc0NvbnRlbnRMZW5ndGggPSBmYWxzZVxuICBsZXQgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gLTFcbiAgbGV0IGtleVxuICBsZXQgdmFsXG4gIGxldCBrTGVuID0gMFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGtleSA9IGhlYWRlcnNbbl1cbiAgICB2YWwgPSBoZWFkZXJzW24gKyAxXVxuXG4gICAgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycgJiYgKGtleSA9IGtleS50b1N0cmluZygpKVxuICAgIHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnICYmICh2YWwgPSB2YWwudG9TdHJpbmcoJ3V0ZjgnKSlcblxuICAgIGtMZW4gPSBrZXkubGVuZ3RoXG4gICAgaWYgKGtMZW4gPT09IDE0ICYmIGtleVs3XSA9PT0gJy0nICYmIChrZXkgPT09ICdjb250ZW50LWxlbmd0aCcgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa0xlbiA9PT0gMTkgJiYga2V5WzddID09PSAnLScgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSBuICsgMVxuICAgIH1cbiAgICByZXRbbl0gPSBrZXlcbiAgICByZXRbbiArIDFdID0gdmFsXG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKGhhc0NvbnRlbnRMZW5ndGggJiYgY29udGVudERpc3Bvc2l0aW9uSWR4ICE9PSAtMSkge1xuICAgIHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdID0gQnVmZmVyLmZyb20ocmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoYnVmZmVyKSB7XG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9wdWxsLzMxOVxuICByZXR1cm4gYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUhhbmRsZXIgKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSkge1xuICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db25uZWN0IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gJ2Z1bmN0aW9uJyAmJiBoYW5kbGVyLm9uQm9keVNlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkJvZHlTZW50IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vblVwZ3JhZGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvblVwZ3JhZGUgbWV0aG9kJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uSGVhZGVycyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSGVhZGVycyBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkRhdGEgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25Db21wbGV0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29tcGxldGUgbWV0aG9kJylcbiAgICB9XG4gIH1cbn1cblxuLy8gQSBib2R5IGlzIGRpc3R1cmJlZCBpZiBpdCBoYXMgYmVlbiByZWFkIGZyb20gYW5kIGl0IGNhbm5vdFxuLy8gYmUgcmUtdXNlZCB3aXRob3V0IGxvc2luZyBzdGF0ZSBvciBkYXRhLlxuZnVuY3Rpb24gaXNEaXN0dXJiZWQgKGJvZHkpIHtcbiAgLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gIHJldHVybiAhIShib2R5ICYmIChzdHJlYW0uaXNEaXN0dXJiZWQoYm9keSkgfHwgYm9keVtrQm9keVVzZWRdKSlcbn1cblxuZnVuY3Rpb24gaXNFcnJvcmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIHN0cmVhbS5pc0Vycm9yZWQoYm9keSkpXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGUgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgc3RyZWFtLmlzUmVhZGFibGUoYm9keSkpXG59XG5cbmZ1bmN0aW9uIGdldFNvY2tldEluZm8gKHNvY2tldCkge1xuICByZXR1cm4ge1xuICAgIGxvY2FsQWRkcmVzczogc29ja2V0LmxvY2FsQWRkcmVzcyxcbiAgICBsb2NhbFBvcnQ6IHNvY2tldC5sb2NhbFBvcnQsXG4gICAgcmVtb3RlQWRkcmVzczogc29ja2V0LnJlbW90ZUFkZHJlc3MsXG4gICAgcmVtb3RlUG9ydDogc29ja2V0LnJlbW90ZVBvcnQsXG4gICAgcmVtb3RlRmFtaWx5OiBzb2NrZXQucmVtb3RlRmFtaWx5LFxuICAgIHRpbWVvdXQ6IHNvY2tldC50aW1lb3V0LFxuICAgIGJ5dGVzV3JpdHRlbjogc29ja2V0LmJ5dGVzV3JpdHRlbixcbiAgICBieXRlc1JlYWQ6IHNvY2tldC5ieXRlc1JlYWRcbiAgfVxufVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ1JlYWRhYmxlU3RyZWFtJ119ICovXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZyb20gKGl0ZXJhYmxlKSB7XG4gIC8vIFdlIGNhbm5vdCB1c2UgUmVhZGFibGVTdHJlYW0uZnJvbSBoZXJlIGJlY2F1c2UgaXQgZG9lcyBub3QgcmV0dXJuIGEgYnl0ZSBzdHJlYW0uXG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuYnlvYlJlcXVlc3Q/LnJlc3BvbmQoMClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogJ2J5dGVzJ1xuICAgIH1cbiAgKVxufVxuXG4vLyBUaGUgY2h1bmsgc2hvdWxkIGJlIGEgRm9ybURhdGEgaW5zdGFuY2UgYW5kIGNvbnRhaW5zXG4vLyBhbGwgdGhlIHJlcXVpcmVkIG1ldGhvZHMuXG5mdW5jdGlvbiBpc0Zvcm1EYXRhTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZGVsZXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuaGFzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5zZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJ1xuICApXG59XG5cbmZ1bmN0aW9uIGFkZEFib3J0TGlzdGVuZXIgKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgaWYgKCdhZGRFdmVudExpc3RlbmVyJyBpbiBzaWduYWwpIHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pXG4gICAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICB9XG4gIHNpZ25hbC5hZGRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbn1cblxuY29uc3QgaGFzVG9XZWxsRm9ybWVkID0gdHlwZW9mIFN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkID09PSAnZnVuY3Rpb24nXG5jb25zdCBoYXNJc1dlbGxGb3JtZWQgPSB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQgPT09ICdmdW5jdGlvbidcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKi9cbmZ1bmN0aW9uIHRvVVNWU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIGhhc1RvV2VsbEZvcm1lZCA/IGAke3ZhbH1gLnRvV2VsbEZvcm1lZCgpIDogbm9kZVV0aWwudG9VU1ZTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqL1xuLy8gVE9ETzogbW92ZSB0aGlzIHRvIHdlYmlkbFxuZnVuY3Rpb24gaXNVU1ZTdHJpbmcgKHZhbCkge1xuICByZXR1cm4gaGFzSXNXZWxsRm9ybWVkID8gYCR7dmFsfWAuaXNXZWxsRm9ybWVkKCkgOiB0b1VTVlN0cmluZyh2YWwpID09PSBgJHt2YWx9YFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNoYXJDb2RlIChjKSB7XG4gIHN3aXRjaCAoYykge1xuICAgIGNhc2UgMHgyMjpcbiAgICBjYXNlIDB4Mjg6XG4gICAgY2FzZSAweDI5OlxuICAgIGNhc2UgMHgyYzpcbiAgICBjYXNlIDB4MmY6XG4gICAgY2FzZSAweDNhOlxuICAgIGNhc2UgMHgzYjpcbiAgICBjYXNlIDB4M2M6XG4gICAgY2FzZSAweDNkOlxuICAgIGNhc2UgMHgzZTpcbiAgICBjYXNlIDB4M2Y6XG4gICAgY2FzZSAweDQwOlxuICAgIGNhc2UgMHg1YjpcbiAgICBjYXNlIDB4NWM6XG4gICAgY2FzZSAweDVkOlxuICAgIGNhc2UgMHg3YjpcbiAgICBjYXNlIDB4N2Q6XG4gICAgICAvLyBEUVVPVEUgYW5kIFwiKCksLzo7PD0+P0BbXFxde31cIlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZDSEFSICV4MjEtN0VcbiAgICAgIHJldHVybiBjID49IDB4MjEgJiYgYyA8PSAweDdlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSFRUUFRva2VuIChjaGFyYWN0ZXJzKSB7XG4gIGlmIChjaGFyYWN0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghaXNUb2tlbkNoYXJDb2RlKGNoYXJhY3RlcnMuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBoZWFkZXJDaGFyUmVnZXggaGF2ZSBiZWVuIGxpZnRlZCBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYWluL2xpYi9faHR0cF9jb21tb24uanNcblxuLyoqXG4gKiBNYXRjaGVzIGlmIHZhbCBjb250YWlucyBhbiBpbnZhbGlkIGZpZWxkLXZjaGFyXG4gKiAgZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKVxuICogIGZpZWxkLWNvbnRlbnQgID0gZmllbGQtdmNoYXIgWyAxKiggU1AgLyBIVEFCICkgZmllbGQtdmNoYXIgXVxuICogIGZpZWxkLXZjaGFyICAgID0gVkNIQVIgLyBvYnMtdGV4dFxuICovXG5jb25zdCBoZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKGNoYXJhY3RlcnMpIHtcbiAgcmV0dXJuICFoZWFkZXJDaGFyUmVnZXgudGVzdChjaGFyYWN0ZXJzKVxufVxuXG4vLyBQYXJzZWQgYWNjb3JkaW5nbHkgdG8gUkZDIDkxMTBcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwI2ZpZWxkLmNvbnRlbnQtcmFuZ2VcbmZ1bmN0aW9uIHBhcnNlUmFuZ2VIZWFkZXIgKHJhbmdlKSB7XG4gIGlmIChyYW5nZSA9PSBudWxsIHx8IHJhbmdlID09PSAnJykgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogbnVsbCwgc2l6ZTogbnVsbCB9XG5cbiAgY29uc3QgbSA9IHJhbmdlID8gcmFuZ2UubWF0Y2goL15ieXRlcyAoXFxkKyktKFxcZCspXFwvKFxcZCspPyQvKSA6IG51bGxcbiAgcmV0dXJuIG1cbiAgICA/IHtcbiAgICAgICAgc3RhcnQ6IHBhcnNlSW50KG1bMV0pLFxuICAgICAgICBlbmQ6IG1bMl0gPyBwYXJzZUludChtWzJdKSA6IG51bGwsXG4gICAgICAgIHNpemU6IG1bM10gPyBwYXJzZUludChtWzNdKSA6IG51bGxcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZnVuY3Rpb24gYWRkTGlzdGVuZXIgKG9iaiwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgY29uc3QgbGlzdGVuZXJzID0gKG9ialtrTGlzdGVuZXJzXSA/Pz0gW10pXG4gIGxpc3RlbmVycy5wdXNoKFtuYW1lLCBsaXN0ZW5lcl0pXG4gIG9iai5vbihuYW1lLCBsaXN0ZW5lcilcbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMgKG9iaikge1xuICBmb3IgKGNvbnN0IFtuYW1lLCBsaXN0ZW5lcl0gb2Ygb2JqW2tMaXN0ZW5lcnNdID8/IFtdKSB7XG4gICAgb2JqLnJlbW92ZUxpc3RlbmVyKG5hbWUsIGxpc3RlbmVyKVxuICB9XG4gIG9ialtrTGlzdGVuZXJzXSA9IG51bGxcbn1cblxuZnVuY3Rpb24gZXJyb3JSZXF1ZXN0IChjbGllbnQsIHJlcXVlc3QsIGVycikge1xuICB0cnkge1xuICAgIHJlcXVlc3Qub25FcnJvcihlcnIpXG4gICAgYXNzZXJ0KHJlcXVlc3QuYWJvcnRlZClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2xpZW50LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9XG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbmNvbnN0IG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSA9IHtcbiAgZGVsZXRlOiAnREVMRVRFJyxcbiAgREVMRVRFOiAnREVMRVRFJyxcbiAgZ2V0OiAnR0VUJyxcbiAgR0VUOiAnR0VUJyxcbiAgaGVhZDogJ0hFQUQnLFxuICBIRUFEOiAnSEVBRCcsXG4gIG9wdGlvbnM6ICdPUFRJT05TJyxcbiAgT1BUSU9OUzogJ09QVElPTlMnLFxuICBwb3N0OiAnUE9TVCcsXG4gIFBPU1Q6ICdQT1NUJyxcbiAgcHV0OiAnUFVUJyxcbiAgUFVUOiAnUFVUJ1xufVxuXG5jb25zdCBub3JtYWxpemVkTWV0aG9kUmVjb3JkcyA9IHtcbiAgLi4ubm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLFxuICBwYXRjaDogJ3BhdGNoJyxcbiAgUEFUQ0g6ICdQQVRDSCdcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2Yobm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLCBudWxsKVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzLCBudWxsKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbm9wLFxuICBpc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICB0b1VTVlN0cmluZyxcbiAgaXNVU1ZTdHJpbmcsXG4gIGlzQmxvYkxpa2UsXG4gIHBhcnNlT3JpZ2luLFxuICBwYXJzZVVSTCxcbiAgZ2V0U2VydmVyTmFtZSxcbiAgaXNTdHJlYW0sXG4gIGlzSXRlcmFibGUsXG4gIGlzQXN5bmNJdGVyYWJsZSxcbiAgaXNEZXN0cm95ZWQsXG4gIGhlYWRlck5hbWVUb1N0cmluZyxcbiAgYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSxcbiAgYWRkTGlzdGVuZXIsXG4gIHJlbW92ZUFsbExpc3RlbmVycyxcbiAgZXJyb3JSZXF1ZXN0LFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICBhZGRBYm9ydExpc3RlbmVyLFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGlzVG9rZW5DaGFyQ29kZSxcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLFxuICBub3JtYWxpemVkTWV0aG9kUmVjb3JkcyxcbiAgaXNWYWxpZFBvcnQsXG4gIGlzSHR0cE9ySHR0cHNQcmVmaXhlZCxcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIHNhZmVIVFRQTWV0aG9kczogWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10sXG4gIHdyYXBSZXF1ZXN0Qm9keVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnbm9kZTpkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCB1bmRpY2lEZWJ1Z0xvZyA9IHV0aWwuZGVidWdsb2coJ3VuZGljaScpXG5jb25zdCBmZXRjaERlYnVnbG9nID0gdXRpbC5kZWJ1Z2xvZygnZmV0Y2gnKVxuY29uc3Qgd2Vic29ja2V0RGVidWdsb2cgPSB1dGlsLmRlYnVnbG9nKCd3ZWJzb2NrZXQnKVxubGV0IGlzQ2xpZW50U2V0ID0gZmFsc2VcbmNvbnN0IGNoYW5uZWxzID0ge1xuICAvLyBDbGllbnRcbiAgYmVmb3JlQ29ubmVjdDogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLFxuICBjb25uZWN0ZWQ6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpLFxuICBjb25uZWN0RXJyb3I6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpLFxuICBzZW5kSGVhZGVyczogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKSxcbiAgLy8gUmVxdWVzdFxuICBjcmVhdGU6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpjcmVhdGUnKSxcbiAgYm9keVNlbnQ6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpib2R5U2VudCcpLFxuICBoZWFkZXJzOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpLFxuICB0cmFpbGVyczogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJyksXG4gIGVycm9yOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6ZXJyb3InKSxcbiAgLy8gV2ViU29ja2V0XG4gIG9wZW46IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0Om9wZW4nKSxcbiAgY2xvc2U6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OmNsb3NlJyksXG4gIHNvY2tldEVycm9yOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKSxcbiAgcGluZzogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpLFxuICBwb25nOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcbn1cblxuaWYgKHVuZGljaURlYnVnTG9nLmVuYWJsZWQgfHwgZmV0Y2hEZWJ1Z2xvZy5lbmFibGVkKSB7XG4gIGNvbnN0IGRlYnVnbG9nID0gZmV0Y2hEZWJ1Z2xvZy5lbmFibGVkID8gZmV0Y2hEZWJ1Z2xvZyA6IHVuZGljaURlYnVnTG9nXG5cbiAgLy8gVHJhY2sgYWxsIENsaWVudCBldmVudHNcbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHsgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQsIGhvc3QgfVxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdjb25uZWN0aW5nIHRvICVzIHVzaW5nICVzJXMnLFxuICAgICAgYCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9YCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmVyc2lvblxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH1cbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coXG4gICAgICAnY29ubmVjdGVkIHRvICVzIHVzaW5nICVzJXMnLFxuICAgICAgYCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9YCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmVyc2lvblxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH0sXG4gICAgICBlcnJvclxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdjb25uZWN0aW9uIHRvICVzIHVzaW5nICVzJXMgZXJyb3JlZCAtICVzJyxcbiAgICAgIGAke2hvc3R9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfWAsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIHZlcnNpb24sXG4gICAgICBlcnJvci5tZXNzYWdlXG4gICAgKVxuICB9KVxuXG4gIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OnNlbmRIZWFkZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKCdzZW5kaW5nIHJlcXVlc3QgdG8gJXMgJXMvJXMnLCBtZXRob2QsIG9yaWdpbiwgcGF0aClcbiAgfSlcblxuICAvLyBUcmFjayBSZXF1ZXN0IGV2ZW50c1xuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kLCBwYXRoLCBvcmlnaW4gfSxcbiAgICAgIHJlc3BvbnNlOiB7IHN0YXR1c0NvZGUgfVxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdyZWNlaXZlZCByZXNwb25zZSB0byAlcyAlcy8lcyAtIEhUVFAgJWQnLFxuICAgICAgbWV0aG9kLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aCxcbiAgICAgIHN0YXR1c0NvZGVcbiAgICApXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKCd0cmFpbGVycyByZWNlaXZlZCBmcm9tICVzICVzLyVzJywgbWV0aG9kLCBvcmlnaW4sIHBhdGgpXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9LFxuICAgICAgZXJyb3JcbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coXG4gICAgICAncmVxdWVzdCB0byAlcyAlcy8lcyBlcnJvcmVkIC0gJXMnLFxuICAgICAgbWV0aG9kLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aCxcbiAgICAgIGVycm9yLm1lc3NhZ2VcbiAgICApXG4gIH0pXG5cbiAgaXNDbGllbnRTZXQgPSB0cnVlXG59XG5cbmlmICh3ZWJzb2NrZXREZWJ1Z2xvZy5lbmFibGVkKSB7XG4gIGlmICghaXNDbGllbnRTZXQpIHtcbiAgICBjb25zdCBkZWJ1Z2xvZyA9IHVuZGljaURlYnVnTG9nLmVuYWJsZWQgPyB1bmRpY2lEZWJ1Z0xvZyA6IHdlYnNvY2tldERlYnVnbG9nXG4gICAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH1cbiAgICAgIH0gPSBldnRcbiAgICAgIGRlYnVnbG9nKFxuICAgICAgICAnY29ubmVjdGluZyB0byAlcyVzIHVzaW5nICVzJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdFBhcmFtczogeyB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCwgaG9zdCB9XG4gICAgICB9ID0gZXZ0XG4gICAgICBkZWJ1Z2xvZyhcbiAgICAgICAgJ2Nvbm5lY3RlZCB0byAlcyVzIHVzaW5nICVzJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdFBhcmFtczogeyB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCwgaG9zdCB9LFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IGV2dFxuICAgICAgZGVidWdsb2coXG4gICAgICAgICdjb25uZWN0aW9uIHRvICVzJXMgdXNpbmcgJXMlcyBlcnJvcmVkIC0gJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgZXJyb3IubWVzc2FnZVxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZXF1ZXN0OiB7IG1ldGhvZCwgcGF0aCwgb3JpZ2luIH1cbiAgICAgIH0gPSBldnRcbiAgICAgIGRlYnVnbG9nKCdzZW5kaW5nIHJlcXVlc3QgdG8gJXMgJXMvJXMnLCBtZXRob2QsIG9yaWdpbiwgcGF0aClcbiAgICB9KVxuICB9XG5cbiAgLy8gVHJhY2sgYWxsIFdlYlNvY2tldCBldmVudHNcbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6b3BlbicpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFkZHJlc3M6IHsgYWRkcmVzcywgcG9ydCB9XG4gICAgfSA9IGV2dFxuICAgIHdlYnNvY2tldERlYnVnbG9nKCdjb25uZWN0aW9uIG9wZW5lZCAlcyVzJywgYWRkcmVzcywgcG9ydCA/IGA6JHtwb3J0fWAgOiAnJylcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpjbG9zZScpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHsgd2Vic29ja2V0LCBjb2RlLCByZWFzb24gfSA9IGV2dFxuICAgIHdlYnNvY2tldERlYnVnbG9nKFxuICAgICAgJ2Nsb3NlZCBjb25uZWN0aW9uIHRvICVzIC0gJXMgJXMnLFxuICAgICAgd2Vic29ja2V0LnVybCxcbiAgICAgIGNvZGUsXG4gICAgICByZWFzb25cbiAgICApXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6c29ja2V0X2Vycm9yJykuc3Vic2NyaWJlKGVyciA9PiB7XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ2Nvbm5lY3Rpb24gZXJyb3JlZCAtICVzJywgZXJyLm1lc3NhZ2UpXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIHdlYnNvY2tldERlYnVnbG9nKCdwaW5nIHJlY2VpdmVkJylcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ3BvbmcgcmVjZWl2ZWQnKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2hhbm5lbHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZSxcbiAgaXNTdHJlYW0sXG4gIGRlc3Ryb3ksXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhTGlrZSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNCbG9iTGlrZSxcbiAgYnVpbGRVUkwsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U2VydmVyTmFtZSxcbiAgbm9ybWFsaXplZE1ldGhvZFJlY29yZHNcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi9kaWFnbm9zdGljcy5qcycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbi8vIFZlcmlmaWVzIHRoYXQgYSBnaXZlbiBwYXRoIGlzIHZhbGlkIGRvZXMgbm90IGNvbnRhaW4gY29udHJvbCBjaGFycyBcXHgwMCB0byBcXHgyMFxuY29uc3QgaW52YWxpZFBhdGhSZWdleCA9IC9bXlxcdTAwMjEtXFx1MDBmZl0vXG5cbmNvbnN0IGtIYW5kbGVyID0gU3ltYm9sKCdoYW5kbGVyJylcblxuY2xhc3MgUmVxdWVzdCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnksXG4gICAgaWRlbXBvdGVudCxcbiAgICBibG9ja2luZyxcbiAgICB1cGdyYWRlLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIGJvZHlUaW1lb3V0LFxuICAgIHJlc2V0LFxuICAgIHRocm93T25FcnJvcixcbiAgICBleHBlY3RDb250aW51ZSxcbiAgICBzZXJ2ZXJuYW1lXG4gIH0sIGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHBhdGhbMF0gIT09ICcvJyAmJlxuICAgICAgIShwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpICYmXG4gICAgICBtZXRob2QgIT09ICdDT05ORUNUJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJMIG9yIHN0YXJ0IHdpdGggYSBzbGFzaCcpXG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUGF0aFJlZ2V4LnRlc3QocGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IHBhdGgnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWV0aG9kICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtZXRob2QgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChub3JtYWxpemVkTWV0aG9kUmVjb3Jkc1ttZXRob2RdID09PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiAhaXNWYWxpZEhlYWRlclZhbHVlKHVwZ3JhZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXBncmFkZSBoZWFkZXInKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyc1RpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgYm9keVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChyZXNldCAhPSBudWxsICYmIHR5cGVvZiByZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVzZXQnKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RDb250aW51ZSAhPSBudWxsICYmIHR5cGVvZiBleHBlY3RDb250aW51ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZXhwZWN0Q29udGludWUnKVxuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyc1RpbWVvdXQgPSBoZWFkZXJzVGltZW91dFxuXG4gICAgdGhpcy5ib2R5VGltZW91dCA9IGJvZHlUaW1lb3V0XG5cbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciA9PT0gdHJ1ZVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcblxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgfSBlbHNlIGlmIChpc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIGRlc3Ryb3kodGhpcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkub24oJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnIgPT4ge1xuICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5Lm9uKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IGJvZHkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnVmZmVyLmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5sZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IGlzSXRlcmFibGUoYm9keSkgfHwgaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgUmVhZGFibGUgc3RyZWFtLCBhbiBpdGVyYWJsZSwgb3IgYW4gYXN5bmMgaXRlcmFibGUnKVxuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGVkID0gZmFsc2VcblxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLnVwZ3JhZGUgPSB1cGdyYWRlIHx8IG51bGxcblxuICAgIHRoaXMucGF0aCA9IHF1ZXJ5ID8gYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGhlYWRlcnNbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJzKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikgfHwgaGVhZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgaW4ga2V5LXZhbHVlIHBhaXIgZm9ybWF0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5c1tpXSwgaGVhZGVyc1trZXlzW2ldXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIHZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpXG5cbiAgICB0aGlzLnNlcnZlcm5hbWUgPSBzZXJ2ZXJuYW1lIHx8IGdldFNlcnZlck5hbWUodGhpcy5ob3N0KVxuXG4gICAgdGhpc1trSGFuZGxlcl0gPSBoYW5kbGVyXG5cbiAgICBpZiAoY2hhbm5lbHMuY3JlYXRlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jcmVhdGUucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudChjaHVuaylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAoY2hhbm5lbHMuYm9keVNlbnQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmJvZHlTZW50LnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICBhYm9ydCh0aGlzLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbm5lY3QoYWJvcnQpXG4gICAgfVxuICB9XG5cbiAgb25SZXNwb25zZVN0YXJ0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlc3BvbnNlU3RhcnRlZD8uKClcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmIChjaGFubmVscy5oZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5oZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCByZXNwb25zZTogeyBzdGF0dXNDb2RlLCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25EYXRhKGNodW5rKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWVcbiAgICBpZiAoY2hhbm5lbHMudHJhaWxlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLnRyYWlsZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCB0cmFpbGVycyB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFRoaXMgbWlnaHQgYmUgYSBiYWQgaWRlYT9cbiAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBpZiAoY2hhbm5lbHMuZXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmVycm9yLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCBlcnJvciB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uRmluYWxseSAoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgdGhpcy5lbmRIYW5kbGVyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFkZEhlYWRlciAoa2V5LCB2YWx1ZSkge1xuICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIgKHJlcXVlc3QsIGtleSwgdmFsKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgaGVhZGVyTmFtZSA9IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV1cblxuICBpZiAoaGVhZGVyTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaGVhZGVyTmFtZSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2hlYWRlck5hbWVdID09PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRIVFRQVG9rZW4oaGVhZGVyTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXIga2V5JylcbiAgICB9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgY29uc3QgYXJyID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbFtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gICAgICAgIH1cbiAgICAgICAgYXJyLnB1c2godmFsW2ldKVxuICAgICAgfSBlbHNlIGlmICh2YWxbaV0gPT09IG51bGwpIHtcbiAgICAgICAgYXJyLnB1c2goJycpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENvZXJjZSBwcmltaXRpdmVzIChhbmQgcmVqZWN0IHVuc2FmZSBjb2VyY2lvbnMgc3VjaCBhcyBmdW5jdGlvbnNcbiAgICAgICAgLy8gd2l0aCBhIGNyYWZ0ZWQgdG9TdHJpbmcvU3ltYm9sLnRvUHJpbWl0aXZlKS5cbiAgICAgICAgY29uc3Qgc3RyID0gYCR7dmFsW2ldfWBcbiAgICAgICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUoc3RyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICAgICAgfVxuICAgICAgICBhcnIucHVzaChzdHIpXG4gICAgICB9XG4gICAgfVxuICAgIHZhbCA9IGFyclxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgfSBlbHNlIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICB2YWwgPSAnJ1xuICB9IGVsc2Uge1xuICAgIC8vIENvZXJjZSBwcmltaXRpdmVzIChhbmQgcmVqZWN0IHVuc2FmZSBjb2VyY2lvbnMgc3VjaCBhcyBmdW5jdGlvbnNcbiAgICAvLyB3aXRoIGEgY3JhZnRlZCB0b1N0cmluZy9TeW1ib2wudG9QcmltaXRpdmUpLlxuICAgIHZhbCA9IGAke3ZhbH1gXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgfVxuXG4gIGlmIChoZWFkZXJOYW1lID09PSAnaG9zdCcpIHtcbiAgICBpZiAocmVxdWVzdC5ob3N0ICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2R1cGxpY2F0ZSBob3N0IGhlYWRlcicpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhvc3QgaGVhZGVyJylcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykge1xuICAgIGlmIChyZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZHVwbGljYXRlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9IHBhcnNlSW50KHZhbCwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmVxdWVzdC5jb250ZW50TGVuZ3RoKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuY29udGVudFR5cGUgPT09IG51bGwgJiYgaGVhZGVyTmFtZSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID0gdmFsXG4gICAgcmVxdWVzdC5oZWFkZXJzLnB1c2goa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJyB8fCBoZWFkZXJOYW1lID09PSAna2VlcC1hbGl2ZScgfHwgaGVhZGVyTmFtZSA9PT0gJ3VwZ3JhZGUnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7aGVhZGVyTmFtZX0gaGVhZGVyYClcbiAgfSBlbHNlIGlmIChoZWFkZXJOYW1lID09PSAnY29ubmVjdGlvbicpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnRvTG93ZXJDYXNlKCkgOiBudWxsXG4gICAgaWYgKHZhbHVlICE9PSAnY2xvc2UnICYmIHZhbHVlICE9PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9uIGhlYWRlcicpXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnY2xvc2UnKSB7XG4gICAgICByZXF1ZXN0LnJlc2V0ID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJOYW1lID09PSAnZXhwZWN0Jykge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcignZXhwZWN0IGhlYWRlciBub3Qgc3VwcG9ydGVkJylcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0LmhlYWRlcnMucHVzaChrZXksIHZhbClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RcbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJylcblxuY2xhc3MgRGlzcGF0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGRpc3BhdGNoICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBjbG9zZSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgY29tcG9zZSAoLi4uYXJncykge1xuICAgIC8vIFNvIHdlIGhhbmRsZSBbaW50ZXJjZXB0b3IxLCBpbnRlcmNlcHRvcjJdIG9yIGludGVyY2VwdG9yMSwgaW50ZXJjZXB0b3IyLCAuLi5cbiAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pID8gYXJnc1swXSA6IGFyZ3NcbiAgICBsZXQgZGlzcGF0Y2ggPSB0aGlzLmRpc3BhdGNoLmJpbmQodGhpcylcblxuICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICBpZiAoaW50ZXJjZXB0b3IgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZXJjZXB0b3IsIGV4cGVjdGVkIGZ1bmN0aW9uIHJlY2VpdmVkICR7dHlwZW9mIGludGVyY2VwdG9yfWApXG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoID0gaW50ZXJjZXB0b3IoZGlzcGF0Y2gpXG5cbiAgICAgIGlmIChkaXNwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBkaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJyB8fCBkaXNwYXRjaC5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpbnRlcmNlcHRvcicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb21wb3NlZERpc3BhdGNoZXIodGhpcywgZGlzcGF0Y2gpXG4gIH1cbn1cblxuY2xhc3MgQ29tcG9zZWREaXNwYXRjaGVyIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gICNkaXNwYXRjaGVyID0gbnVsbFxuICAjZGlzcGF0Y2ggPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIsIGRpc3BhdGNoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuI2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy4jZGlzcGF0Y2ggPSBkaXNwYXRjaFxuICB9XG5cbiAgZGlzcGF0Y2ggKC4uLmFyZ3MpIHtcbiAgICB0aGlzLiNkaXNwYXRjaCguLi5hcmdzKVxuICB9XG5cbiAgY2xvc2UgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzcGF0Y2hlci5jbG9zZSguLi5hcmdzKVxuICB9XG5cbiAgZGVzdHJveSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNkaXNwYXRjaGVyLmRlc3Ryb3koLi4uYXJncylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpXG5jb25zdCB7XG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtEZXN0cm95LCBrQ2xvc2UsIGtDbG9zZWQsIGtEZXN0cm95ZWQsIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga09uRGVzdHJveWVkID0gU3ltYm9sKCdvbkRlc3Ryb3llZCcpXG5jb25zdCBrT25DbG9zZWQgPSBTeW1ib2woJ29uQ2xvc2VkJylcbmNvbnN0IGtJbnRlcmNlcHRlZERpc3BhdGNoID0gU3ltYm9sKCdJbnRlcmNlcHRlZCBEaXNwYXRjaCcpXG5jb25zdCBrV2ViU29ja2V0T3B0aW9ucyA9IFN5bWJvbCgnd2ViU29ja2V0T3B0aW9ucycpXG5cbmNsYXNzIERpc3BhdGNoZXJCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IGZhbHNlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgIHRoaXNba0Nsb3NlZF0gPSBmYWxzZVxuICAgIHRoaXNba09uQ2xvc2VkXSA9IFtdXG4gICAgdGhpc1trV2ViU29ja2V0T3B0aW9uc10gPSBvcHRzPy53ZWJTb2NrZXQgPz8ge31cbiAgfVxuXG4gIGdldCB3ZWJTb2NrZXRPcHRpb25zICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF4RnJhZ21lbnRzOiB0aGlzW2tXZWJTb2NrZXRPcHRpb25zXS5tYXhGcmFnbWVudHMgPz8gMTMxMDcyLFxuICAgICAgbWF4UGF5bG9hZFNpemU6IHRoaXNba1dlYlNvY2tldE9wdGlvbnNdLm1heFBheWxvYWRTaXplID8/IDEyOCAqIDEwMjQgKiAxMDI0XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgb2ZmZXJzIGFuIG9wdGltaXplZCB0aW1lciBpbXBsZW1lbnRhdGlvbiBkZXNpZ25lZCBmb3Igc2NlbmFyaW9zXG4gKiB3aGVyZSBoaWdoIHByZWNpc2lvbiBpcyBub3QgY3JpdGljYWwuXG4gKlxuICogVGhlIHRpbWVyIGFjaGlldmVzIGZhc3RlciBwZXJmb3JtYW5jZSBieSB1c2luZyBhIGxvdy1yZXNvbHV0aW9uIGFwcHJvYWNoLFxuICogd2l0aCBhbiBhY2N1cmFjeSB0YXJnZXQgb2Ygd2l0aGluIDUwMG1zLiBUaGlzIG1ha2VzIGl0IHBhcnRpY3VsYXJseSB1c2VmdWxcbiAqIGZvciB0aW1lcnMgd2l0aCBkZWxheXMgb2YgMSBzZWNvbmQgb3IgbW9yZSwgd2hlcmUgZXhhY3QgdGltaW5nIGlzIGxlc3NcbiAqIGNydWNpYWwuXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IE5vZGUuanMgdGltZXJzIGFyZSBpbmhlcmVudGx5IGltcHJlY2lzZSwgYXNcbiAqIGRlbGF5cyBjYW4gb2NjdXIgZHVlIHRvIHRoZSBldmVudCBsb29wIGJlaW5nIGJsb2NrZWQgYnkgb3RoZXIgb3BlcmF0aW9ucy5cbiAqIENvbnNlcXVlbnRseSwgdGltZXJzIG1heSB0cmlnZ2VyIGxhdGVyIHRoYW4gdGhlaXIgc2NoZWR1bGVkIHRpbWUuXG4gKi9cblxuLyoqXG4gKiBUaGUgZmFzdE5vdyB2YXJpYWJsZSBjb250YWlucyB0aGUgaW50ZXJuYWwgZmFzdCB0aW1lciBjbG9jayB2YWx1ZS5cbiAqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgZmFzdE5vdyA9IDBcblxuLyoqXG4gKiBSRVNPTFVUSU9OX01TIHJlcHJlc2VudHMgdGhlIHRhcmdldCByZXNvbHV0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdCAxMDAwXG4gKi9cbmNvbnN0IFJFU09MVVRJT05fTVMgPSAxZTNcblxuLyoqXG4gKiBUSUNLX01TIGRlZmluZXMgdGhlIGRlc2lyZWQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gZWFjaCB0aWNrLlxuICogVGhlIHRhcmdldCB2YWx1ZSBpcyBzZXQgdG8gaGFsZiB0aGUgcmVzb2x1dGlvbiB0aW1lLCBtaW51cyAxIG1zLCB0byBhY2NvdW50XG4gKiBmb3IgcG90ZW50aWFsIGV2ZW50IGxvb3Agb3ZlcmhlYWQuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0IDQ5OVxuICovXG5jb25zdCBUSUNLX01TID0gKFJFU09MVVRJT05fTVMgPj4gMSkgLSAxXG5cbi8qKlxuICogZmFzdE5vd1RpbWVvdXQgaXMgYSBOb2RlLmpzIHRpbWVyIHVzZWQgdG8gbWFuYWdlIGFuZCBwcm9jZXNzXG4gKiB0aGUgRmFzdFRpbWVycyBzdG9yZWQgaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS5cbiAqXG4gKiBAdHlwZSB7Tm9kZUpTLlRpbWVvdXR9XG4gKi9cbmxldCBmYXN0Tm93VGltZW91dFxuXG4vKipcbiAqIFRoZSBrRmFzdFRpbWVyIHN5bWJvbCBpcyB1c2VkIHRvIGlkZW50aWZ5IEZhc3RUaW1lciBpbnN0YW5jZXMuXG4gKlxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qga0Zhc3RUaW1lciA9IFN5bWJvbCgna0Zhc3RUaW1lcicpXG5cbi8qKlxuICogVGhlIGZhc3RUaW1lcnMgYXJyYXkgY29udGFpbnMgYWxsIGFjdGl2ZSBGYXN0VGltZXJzLlxuICpcbiAqIEB0eXBlIHtGYXN0VGltZXJbXX1cbiAqL1xuY29uc3QgZmFzdFRpbWVycyA9IFtdXG5cbi8qKlxuICogVGhlc2UgY29uc3RhbnRzIHJlcHJlc2VudCB0aGUgdmFyaW91cyBzdGF0ZXMgb2YgYSBGYXN0VGltZXIuXG4gKi9cblxuLyoqXG4gKiBUaGUgYE5PVF9JTl9MSVNUYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIG5vdCBpbmNsdWRlZFxuICogaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS4gVGltZXJzIHdpdGggdGhpcyBzdGF0dXMgd2lsbCBub3QgYmUgcHJvY2Vzc2VkXG4gKiBkdXJpbmcgdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uXG4gKlxuICogQSBGYXN0VGltZXIgY2FuIGJlIHJlLWFkZGVkIHRvIHRoZSBgZmFzdFRpbWVyc2AgYXJyYXkgYnkgaW52b2tpbmcgdGhlXG4gKiBgcmVmcmVzaGAgbWV0aG9kIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0yfVxuICovXG5jb25zdCBOT1RfSU5fTElTVCA9IC0yXG5cbi8qKlxuICogVGhlIGBUT19CRV9DTEVBUkVEYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIHNjaGVkdWxlZFxuICogZm9yIHJlbW92YWwgZnJvbSB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LiBBIEZhc3RUaW1lciBpbiB0aGlzIHN0YXRlIHdpbGxcbiAqIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24gYW5kIHdpbGwgbm8gbG9uZ2VyXG4gKiBiZSBwcm9jZXNzZWQuXG4gKlxuICogVGhpcyBzdGF0dXMgaXMgYWxzbyBzZXQgd2hlbiB0aGUgYGNsZWFyYCBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0xfVxuICovXG5jb25zdCBUT19CRV9DTEVBUkVEID0gLTFcblxuLyoqXG4gKiBUaGUgYFBFTkRJTkdgIGNvbnN0YW50IHNpZ25pZmllcyB0aGF0IHRoZSBGYXN0VGltZXIgaXMgYXdhaXRpbmcgcHJvY2Vzc2luZ1xuICogaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uIFRpbWVycyB3aXRoIHRoaXMgc3RhdHVzIHdpbGwgaGF2ZVxuICogdGhlaXIgYF9pZGxlU3RhcnRgIHZhbHVlIHNldCBhbmQgdGhlaXIgc3RhdHVzIHVwZGF0ZWQgdG8gYEFDVElWRWAgaW4gdGhlIG5leHQgdGljay5cbiAqXG4gKiBAdHlwZSB7MH1cbiAqL1xuY29uc3QgUEVORElORyA9IDBcblxuLyoqXG4gKiBUaGUgYEFDVElWRWAgY29uc3RhbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEZhc3RUaW1lciBpcyBhY3RpdmUgYW5kIHdhaXRpbmdcbiAqIGZvciBpdHMgdGltZXIgdG8gZXhwaXJlLiBEdXJpbmcgdGhlIG5leHQgdGljaywgdGhlIGBvblRpY2tgIGZ1bmN0aW9uIHdpbGxcbiAqIGNoZWNrIGlmIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgYW5kIGlmIHNvLCBpdCB3aWxsIGV4ZWN1dGUgdGhlIGFzc29jaWF0ZWQgY2FsbGJhY2suXG4gKlxuICogQHR5cGUgezF9XG4gKi9cbmNvbnN0IEFDVElWRSA9IDFcblxuLyoqXG4gKiBUaGUgb25UaWNrIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZmFzdFRpbWVycyBhcnJheS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gb25UaWNrICgpIHtcbiAgLyoqXG4gICAqIEluY3JlbWVudCB0aGUgZmFzdE5vdyB2YWx1ZSBieSB0aGUgVElDS19NUyB2YWx1ZSwgZGVzcGl0ZSB0aGUgYWN0dWFsIHRpbWVcbiAgICogdGhhdCBoYXMgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IHRpY2suIFRoaXMgYXBwcm9hY2ggZW5zdXJlcyBpbmRlcGVuZGVuY2VcbiAgICogZnJvbSB0aGUgc3lzdGVtIGNsb2NrIGFuZCBkZWxheXMgY2F1c2VkIGJ5IGEgYmxvY2tlZCBldmVudCBsb29wLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZmFzdE5vdyArPSBUSUNLX01TXG5cbiAgLyoqXG4gICAqIFRoZSBgaWR4YCB2YXJpYWJsZSBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LlxuICAgKiBFeHBpcmVkIHRpbWVycyBhcmUgcmVtb3ZlZCBieSByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGFycmF5LlxuICAgKiBDb25zZXF1ZW50bHksIGBpZHhgIGlzIG9ubHkgaW5jcmVtZW50ZWQgd2hlbiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5vdCByZW1vdmVkLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgbGV0IGlkeCA9IDBcblxuICAvKipcbiAgICogVGhlIGxlbiB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgZmFzdFRpbWVycyBhcnJheVxuICAgKiBhbmQgd2lsbCBiZSBkZWNyZW1lbnRlZCB3aGVuIGEgRmFzdFRpbWVyIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlXG4gICAqIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcblxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgKi9cbiAgICBjb25zdCB0aW1lciA9IGZhc3RUaW1lcnNbaWR4XVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIGluIHRoZSBBQ1RJVkUgc3RhdGUgYW5kIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgaXQgd2lsbFxuICAgIC8vIGJlIHByb2Nlc3NlZCBpbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmICh0aW1lci5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICAgIC8vIFNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byB0aGUgZmFzdE5vdyB2YWx1ZSBtaW51cyB0aGUgVElDS19NUyB2YWx1ZVxuICAgICAgLy8gdG8gYWNjb3VudCBmb3IgdGhlIHRpbWUgdGhlIHRpbWVyIHdhcyBpbiB0aGUgUEVORElORyBzdGF0ZS5cbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSBmYXN0Tm93IC0gVElDS19NU1xuICAgICAgdGltZXIuX3N0YXRlID0gQUNUSVZFXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRpbWVyLl9zdGF0ZSA9PT0gQUNUSVZFICYmXG4gICAgICBmYXN0Tm93ID49IHRpbWVyLl9pZGxlU3RhcnQgKyB0aW1lci5faWRsZVRpbWVvdXRcbiAgICApIHtcbiAgICAgIHRpbWVyLl9zdGF0ZSA9IFRPX0JFX0NMRUFSRURcbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSAtMVxuICAgICAgdGltZXIuX29uVGltZW91dCh0aW1lci5fdGltZXJBcmcpXG4gICAgfVxuXG4gICAgaWYgKHRpbWVyLl9zdGF0ZSA9PT0gVE9fQkVfQ0xFQVJFRCkge1xuICAgICAgdGltZXIuX3N0YXRlID0gTk9UX0lOX0xJU1RcblxuICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50IHRvIHRoZSBjdXJyZW50IGluZGV4IGFuZCBkZWNyZW1lbnQgbGVuIGlmIGl0IGlzXG4gICAgICAvLyBub3QgdGhlIG9ubHkgZWxlbWVudCBpbiB0aGUgYXJyYXkuXG4gICAgICBpZiAoLS1sZW4gIT09IDApIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVyc1tsZW5dXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICsraWR4XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHRoZSBsZW5ndGggb2YgdGhlIGZhc3RUaW1lcnMgYXJyYXkgdG8gdGhlIG5ldyBsZW5ndGggYW5kIHRodXNcbiAgLy8gcmVtb3ZpbmcgdGhlIGV4Y2VzcyBGYXN0VGltZXJzIGVsZW1lbnRzIGZyb20gdGhlIGFycmF5LlxuICBmYXN0VGltZXJzLmxlbmd0aCA9IGxlblxuXG4gIC8vIElmIHRoZXJlIGFyZSBzdGlsbCBhY3RpdmUgRmFzdFRpbWVycyBpbiB0aGUgYXJyYXksIHJlZnJlc2ggdGhlIFRpbWVyLlxuICAvLyBJZiB0aGVyZSBhcmUgbm8gYWN0aXZlIEZhc3RUaW1lcnMsIHRoZSB0aW1lciB3aWxsIGJlIHJlZnJlc2hlZCBhZ2FpblxuICAvLyB3aGVuIGEgbmV3IEZhc3RUaW1lciBpcyBpbnN0YW50aWF0ZWQuXG4gIGlmIChmYXN0VGltZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZyZXNoVGltZW91dCAoKSB7XG4gIC8vIElmIHRoZSBmYXN0Tm93VGltZW91dCBpcyBhbHJlYWR5IHNldCwgcmVmcmVzaCBpdC5cbiAgaWYgKGZhc3ROb3dUaW1lb3V0KSB7XG4gICAgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCgpXG4gIC8vIGZhc3ROb3dUaW1lb3V0IGlzIG5vdCBpbnN0YW50aWF0ZWQgeWV0LCBjcmVhdGUgYSBuZXcgVGltZXIuXG4gIH0gZWxzZSB7XG4gICAgY2xlYXJUaW1lb3V0KGZhc3ROb3dUaW1lb3V0KVxuICAgIGZhc3ROb3dUaW1lb3V0ID0gc2V0VGltZW91dChvblRpY2ssIFRJQ0tfTVMpXG5cbiAgICAvLyBJZiB0aGUgVGltZXIgaGFzIGFuIHVucmVmIG1ldGhvZCwgY2FsbCBpdCB0byBhbGxvdyB0aGUgcHJvY2VzcyB0byBleGl0IGlmXG4gICAgLy8gdGhlcmUgYXJlIG5vIG90aGVyIGFjdGl2ZSBoYW5kbGVzLlxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBgRmFzdFRpbWVyYCBjbGFzcyBpcyBhIGRhdGEgc3RydWN0dXJlIGRlc2lnbmVkIHRvIHN0b3JlIGFuZCBtYW5hZ2VcbiAqIHRpbWVyIGluZm9ybWF0aW9uLlxuICovXG5jbGFzcyBGYXN0VGltZXIge1xuICBba0Zhc3RUaW1lcl0gPSB0cnVlXG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBvZiB0aGUgdGltZXIsIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICogLSBOT1RfSU5fTElTVCAoLTIpXG4gICAqIC0gVE9fQkVfQ0xFQVJFRCAoLTEpXG4gICAqIC0gUEVORElORyAoMClcbiAgICogLSBBQ1RJVkUgKDEpXG4gICAqXG4gICAqIEB0eXBlIHstMnwtMXwwfDF9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhdGUgPSBOT1RfSU5fTElTVFxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBjYWxsaW5nIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pZGxlVGltZW91dCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB3aGVuIHRoZSB0aW1lciB3YXMgc3RhcnRlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvXG4gICAqIGNhbGN1bGF0ZSB3aGVuIHRoZSB0aW1lciBzaG91bGQgZXhwaXJlLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAtMVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lkbGVTdGFydCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSB0aW1lciBleHBpcmVzLlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25UaW1lb3V0XG5cbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqXG4gICAqIEB0eXBlIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RpbWVyQXJnXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGQgd2FpdFxuICAgKiBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IGFyZ1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgdGhpcy5fb25UaW1lb3V0ID0gY2FsbGJhY2tcbiAgICB0aGlzLl9pZGxlVGltZW91dCA9IGRlbGF5XG4gICAgdGhpcy5fdGltZXJBcmcgPSBhcmdcblxuICAgIHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGltZXIncyBzdGFydCB0aW1lIHRvIHRoZSBjdXJyZW50IHRpbWUsIGFuZCByZXNjaGVkdWxlcyB0aGUgdGltZXJcbiAgICogdG8gY2FsbCBpdHMgY2FsbGJhY2sgYXQgdGhlIHByZXZpb3VzbHkgc3BlY2lmaWVkIGR1cmF0aW9uIGFkanVzdGVkIHRvIHRoZVxuICAgKiBjdXJyZW50IHRpbWUuXG4gICAqIFVzaW5nIHRoaXMgb24gYSB0aW1lciB0aGF0IGhhcyBhbHJlYWR5IGNhbGxlZCBpdHMgY2FsbGJhY2sgd2lsbCByZWFjdGl2YXRlXG4gICAqIHRoZSB0aW1lci5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWZyZXNoICgpIHtcbiAgICAvLyBJbiB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgdGhlIHRpbWVyIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhY3RpdmUgdGltZXJzLFxuICAgIC8vIGFkZCBpdCBiYWNrIHRvIHRoZSBhcnJheSB0byBiZSBwcm9jZXNzZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgb25UaWNrXG4gICAgLy8gZnVuY3Rpb24uXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBOT1RfSU5fTElTVCkge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIHRoZSBvbmx5IGFjdGl2ZSB0aW1lciwgcmVmcmVzaCB0aGUgZmFzdE5vd1RpbWVvdXQgZm9yXG4gICAgLy8gYmV0dGVyIHJlc29sdXRpb24uXG4gICAgaWYgKCFmYXN0Tm93VGltZW91dCB8fCBmYXN0VGltZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmVmcmVzaFRpbWVvdXQoKVxuICAgIH1cblxuICAgIC8vIFNldHRpbmcgdGhlIHN0YXRlIHRvIFBFTkRJTkcgd2lsbCBjYXVzZSB0aGUgdGltZXIgdG8gYmUgcmVzZXQgaW4gdGhlXG4gICAgLy8gbmV4dCB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBQRU5ESU5HXG4gIH1cblxuICAvKipcbiAgICogVGhlIGBjbGVhcmAgbWV0aG9kIGNhbmNlbHMgdGhlIHRpbWVyLCBwcmV2ZW50aW5nIGl0IGZyb20gZXhlY3V0aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFyICgpIHtcbiAgICAvLyBTZXQgdGhlIHN0YXRlIHRvIFRPX0JFX0NMRUFSRUQgdG8gbWFyayB0aGUgdGltZXIgZm9yIHJlbW92YWwgaW4gdGhlIG5leHRcbiAgICAvLyB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBUT19CRV9DTEVBUkVEXG5cbiAgICAvLyBSZXNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0aW1lciBpcyBubyBsb25nZXJcbiAgICAvLyBhY3RpdmUuXG4gICAgdGhpcy5faWRsZVN0YXJ0ID0gLTFcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXRUaW1lb3V0IGFuZCBjbGVhclRpbWVvdXQgZnVuY3Rpb24gdGhhdCBjYW4gYmVcbiAqIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIGZ1bmN0aW9ucy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgc2V0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgdGltZXIgd2hpY2ggZXhlY3V0ZXMgYSBmdW5jdGlvbiBvbmNlIHRoZVxuICAgKiB0aW1lciBleHBpcmVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGRcbiAgICogd2FpdCBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IFthcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogd2hlbiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHJldHVybnMge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn1cbiAgICovXG4gIHNldFRpbWVvdXQgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgLy8gSWYgdGhlIGRlbGF5IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgUkVTT0xVVElPTl9NUyB2YWx1ZSByZXR1cm4gYVxuICAgIC8vIG5hdGl2ZSBOb2RlLmpzIFRpbWVyIGluc3RhbmNlLlxuICAgIHJldHVybiBkZWxheSA8PSBSRVNPTFVUSU9OX01TXG4gICAgICA/IHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gICAgICA6IG5ldyBGYXN0VGltZXIoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgY2xlYXJUaW1lb3V0IG1ldGhvZCBjYW5jZWxzIGFuIGluc3RhbnRpYXRlZCBUaW1lciBwcmV2aW91c2x5IGNyZWF0ZWRcbiAgICogYnkgY2FsbGluZyBzZXRUaW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn0gdGltZW91dFxuICAgKi9cbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgLy8gSWYgdGhlIHRpbWVvdXQgaXMgYSBGYXN0VGltZXIsIGNhbGwgaXRzIG93biBjbGVhciBtZXRob2QuXG4gICAgaWYgKHRpbWVvdXRba0Zhc3RUaW1lcl0pIHtcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgICAqL1xuICAgICAgdGltZW91dC5jbGVhcigpXG4gICAgICAvLyBPdGhlcndpc2UgaXQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBuYXRpdmUgTm9kZUpTLlRpbWVvdXQsIHNvIGNhbGwgdGhlXG4gICAgICAvLyBOb2RlLmpzIG5hdGl2ZSBjbGVhclRpbWVvdXQgZnVuY3Rpb24uXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgIH1cbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBzZXRGYXN0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgZmFzdFRpbWVyIHdoaWNoIGV4ZWN1dGVzIGEgZnVuY3Rpb24gb25jZVxuICAgKiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGltZXJcbiAgICogZXhwaXJlcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IFRoZSB0aW1lLCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgdGltZXIgc2hvdWxkXG4gICAqIHdhaXQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gb3IgY29kZSBpcyBleGVjdXRlZC5cbiAgICogQHBhcmFtIHsqfSBbYXJnXSBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqIEByZXR1cm5zIHtGYXN0VGltZXJ9XG4gICAqL1xuICBzZXRGYXN0VGltZW91dCAoY2FsbGJhY2ssIGRlbGF5LCBhcmcpIHtcbiAgICByZXR1cm4gbmV3IEZhc3RUaW1lcihjYWxsYmFjaywgZGVsYXksIGFyZylcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBjbGVhclRpbWVvdXQgbWV0aG9kIGNhbmNlbHMgYW4gaW5zdGFudGlhdGVkIEZhc3RUaW1lciBwcmV2aW91c2x5XG4gICAqIGNyZWF0ZWQgYnkgY2FsbGluZyBzZXRGYXN0VGltZW91dC5cbiAgICpcbiAgICogQHBhcmFtIHtGYXN0VGltZXJ9IHRpbWVvdXRcbiAgICovXG4gIGNsZWFyRmFzdFRpbWVvdXQgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsZWFyKClcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBub3cgbWV0aG9kIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcm5hbCBmYXN0IHRpbWVyIGNsb2NrLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgbm93ICgpIHtcbiAgICByZXR1cm4gZmFzdE5vd1xuICB9LFxuICAvKipcbiAgICogVHJpZ2dlciB0aGUgb25UaWNrIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqIEV4cG9ydGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG4gICAqIE1hcmtpbmcgYXMgZGVwcmVjYXRlZCB0byBkaXNjb3VyYWdlIGFueSB1c2Ugb3V0c2lkZSBvZiB0ZXN0aW5nLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlbGF5PTBdIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gYWRkIHRvIHRoZSBub3cgdmFsdWUuXG4gICAqL1xuICB0aWNrIChkZWxheSA9IDApIHtcbiAgICBmYXN0Tm93ICs9IGRlbGF5IC0gUkVTT0xVVElPTl9NUyArIDFcbiAgICBvblRpY2soKVxuICAgIG9uVGljaygpXG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCBGYXN0VGltZXJzLlxuICAgKiBFeHBvcnRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHJlc2V0ICgpIHtcbiAgICBmYXN0Tm93ID0gMFxuICAgIGZhc3RUaW1lcnMubGVuZ3RoID0gMFxuICAgIGNsZWFyVGltZW91dChmYXN0Tm93VGltZW91dClcbiAgICBmYXN0Tm93VGltZW91dCA9IG51bGxcbiAgfSxcbiAgLyoqXG4gICAqIEV4cG9ydGluZyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGtGYXN0VGltZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbm9kZTpuZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBDb25uZWN0VGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB0aW1lcnMgPSByZXF1aXJlKCcuLi91dGlsL3RpbWVycycpXG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxubGV0IHRscyAvLyBpbmNsdWRlIHRscyBjb25kaXRpb25hbGx5IHNpbmNlIGl0IGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlXG5cbi8vIFRPRE86IHNlc3Npb24gcmUtdXNlIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBmaXJzdFxuLy8gY29ubmVjdGlvbiB0byByZXNvbHZlIHRoZSBzZXNzaW9uIGFuZCBtaWdodCB0aGVyZWZvcmVcbi8vIHJlc29sdmUgdGhlIHNhbWUgc2VydmVybmFtZSBtdWx0aXBsZSB0aW1lcyBldmVuIHdoZW5cbi8vIHJlLXVzZSBpcyBlbmFibGVkLlxuXG5sZXQgU2Vzc2lvbkNhY2hlXG4vLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbmlmIChnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgIShwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFIHx8IHByb2Nlc3MuZW52LlVORElDSV9OT19GRykpIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgV2Vha1Nlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeSA9IG5ldyBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkoKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPCB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChrZXkpXG4gICAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgICByZXR1cm4gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgbmV3IFdlYWtSZWYoc2Vzc2lvbikpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkucmVnaXN0ZXIoc2Vzc2lvbiwgc2Vzc2lvbktleSlcbiAgICB9XG4gIH1cbn0gZWxzZSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFNpbXBsZVNlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA+PSB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAvLyByZW1vdmUgdGhlIG9sZGVzdCBzZXNzaW9uXG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IG9sZGVzdEtleSB9ID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmtleXMoKS5uZXh0KClcbiAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDb25uZWN0b3IgKHsgYWxsb3dIMiwgbWF4Q2FjaGVkU2Vzc2lvbnMsIHNvY2tldFBhdGgsIHRpbWVvdXQsIHNlc3Npb246IGN1c3RvbVNlc3Npb24sIC4uLm9wdHMgfSkge1xuICBpZiAobWF4Q2FjaGVkU2Vzc2lvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4Q2FjaGVkU2Vzc2lvbnMpIHx8IG1heENhY2hlZFNlc3Npb25zIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENhY2hlZFNlc3Npb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogc29ja2V0UGF0aCwgLi4ub3B0cyB9XG4gIGNvbnN0IHNlc3Npb25DYWNoZSA9IG5ldyBTZXNzaW9uQ2FjaGUobWF4Q2FjaGVkU2Vzc2lvbnMgPT0gbnVsbCA/IDEwMCA6IG1heENhY2hlZFNlc3Npb25zKVxuICB0aW1lb3V0ID0gdGltZW91dCA9PSBudWxsID8gMTBlMyA6IHRpbWVvdXRcbiAgYWxsb3dIMiA9IGFsbG93SDIgIT0gbnVsbCA/IGFsbG93SDIgOiBmYWxzZVxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdCAoeyBob3N0bmFtZSwgaG9zdCwgcHJvdG9jb2wsIHBvcnQsIHNlcnZlcm5hbWUsIGxvY2FsQWRkcmVzcywgaHR0cFNvY2tldCB9LCBjYWxsYmFjaykge1xuICAgIGxldCBzb2NrZXRcbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICBpZiAoIXRscykge1xuICAgICAgICB0bHMgPSByZXF1aXJlKCdub2RlOnRscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGFzc2VydChzZXNzaW9uS2V5KVxuXG4gICAgICBjb25zdCBzZXNzaW9uID0gY3VzdG9tU2Vzc2lvbiB8fCBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgcG9ydCA9IHBvcnQgfHwgNDQzXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuXG4gICAgICBzb2NrZXRcbiAgICAgICAgLm9uKCdzZXNzaW9uJywgZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBDYW4gYSBzZXNzaW9uIGJlY29tZSBpbnZhbGlkIG9uY2UgZXN0YWJsaXNoZWQ/IERvbid0IHRoaW5rIHNvP1xuICAgICAgICAgIHNlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KCFodHRwU29ja2V0LCAnaHR0cFNvY2tldCBjYW4gb25seSBiZSBzZW50IG9uIFRMUyB1cGRhdGUnKVxuXG4gICAgICBwb3J0ID0gcG9ydCB8fCA4MFxuXG4gICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDY0ICogMTAyNCwgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICBwb3J0LFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTZXQgVENQIGtlZXAgYWxpdmUgb3B0aW9ucyBvbiB0aGUgc29ja2V0IGhlcmUgaW5zdGVhZCBvZiBpbiBjb25uZWN0KCkgZm9yIHRoZSBjYXNlIG9mIGFzc2lnbmluZyB0aGUgc29ja2V0XG4gICAgaWYgKG9wdGlvbnMua2VlcEFsaXZlID09IG51bGwgfHwgb3B0aW9ucy5rZWVwQWxpdmUpIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZUluaXRpYWxEZWxheSA9IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5ID09PSB1bmRlZmluZWQgPyA2MGUzIDogb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXlcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwga2VlcEFsaXZlSW5pdGlhbERlbGF5KVxuICAgIH1cblxuICAgIGNvbnN0IGNsZWFyQ29ubmVjdFRpbWVvdXQgPSBzZXR1cENvbm5lY3RUaW1lb3V0KG5ldyBXZWFrUmVmKHNvY2tldCksIHsgdGltZW91dCwgaG9zdG5hbWUsIHBvcnQgfSlcblxuICAgIHNvY2tldFxuICAgICAgLnNldE5vRGVsYXkodHJ1ZSlcbiAgICAgIC5vbmNlKHByb3RvY29sID09PSAnaHR0cHM6JyA/ICdzZWN1cmVDb25uZWN0JyA6ICdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhjbGVhckNvbm5lY3RUaW1lb3V0KVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihudWxsLCB0aGlzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2xlYXJDb25uZWN0VGltZW91dClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtXZWFrUmVmPG5ldC5Tb2NrZXQ+fSBzb2NrZXRXZWFrUmVmXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMudGltZW91dFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuaG9zdG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLnBvcnRcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICovXG5jb25zdCBzZXR1cENvbm5lY3RUaW1lb3V0ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICA/IChzb2NrZXRXZWFrUmVmLCBvcHRzKSA9PiB7XG4gICAgICBpZiAoIW9wdHMudGltZW91dCkge1xuICAgICAgICByZXR1cm4gbm9vcFxuICAgICAgfVxuXG4gICAgICBsZXQgczEgPSBudWxsXG4gICAgICBsZXQgczIgPSBudWxsXG4gICAgICBjb25zdCBmYXN0VGltZXIgPSB0aW1lcnMuc2V0RmFzdFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc2V0SW1tZWRpYXRlIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHByaW9yaXRpemUgc29ja2V0IGVycm9yIGV2ZW50cyBvdmVyIHRpbWVvdXRzXG4gICAgICAgIHMxID0gc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgLy8gV2luZG93cyBuZWVkcyBhbiBleHRyYSBzZXRJbW1lZGlhdGUgcHJvYmFibHkgZHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIGluIHRoZSBzb2NrZXQgbG9naWNcbiAgICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldFdlYWtSZWYuZGVyZWYoKSwgb3B0cykpXG4gICAgICAgIH0pXG4gICAgICB9LCBvcHRzLnRpbWVvdXQpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aW1lcnMuY2xlYXJGYXN0VGltZW91dChmYXN0VGltZXIpXG4gICAgICAgIGNsZWFySW1tZWRpYXRlKHMxKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMilcbiAgICAgIH1cbiAgICB9XG4gIDogKHNvY2tldFdlYWtSZWYsIG9wdHMpID0+IHtcbiAgICAgIGlmICghb3B0cy50aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiBub29wXG4gICAgICB9XG5cbiAgICAgIGxldCBzMSA9IG51bGxcbiAgICAgIGNvbnN0IGZhc3RUaW1lciA9IHRpbWVycy5zZXRGYXN0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3JpdGl6ZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICAgICAgczEgPSBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgIG9uQ29ubmVjdFRpbWVvdXQoc29ja2V0V2Vha1JlZi5kZXJlZigpLCBvcHRzKVxuICAgICAgICB9KVxuICAgICAgfSwgb3B0cy50aW1lb3V0KVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGltZXJzLmNsZWFyRmFzdFRpbWVvdXQoZmFzdFRpbWVyKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMSlcbiAgICAgIH1cbiAgICB9XG5cbi8qKlxuICogQHBhcmFtIHtuZXQuU29ja2V0fSBzb2NrZXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0cy50aW1lb3V0XG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5ob3N0bmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMucG9ydFxuICovXG5mdW5jdGlvbiBvbkNvbm5lY3RUaW1lb3V0IChzb2NrZXQsIG9wdHMpIHtcbiAgLy8gVGhlIHNvY2tldCBjb3VsZCBiZSBhbHJlYWR5IGdhcmJhZ2UgY29sbGVjdGVkXG4gIGlmIChzb2NrZXQgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IG1lc3NhZ2UgPSAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICBpZiAoQXJyYXkuaXNBcnJheShzb2NrZXQuYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRlZEFkZHJlc3NlcykpIHtcbiAgICBtZXNzYWdlICs9IGAgKGF0dGVtcHRlZCBhZGRyZXNzZXM6ICR7c29ja2V0LmF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0ZWRBZGRyZXNzZXMuam9pbignLCAnKX0sYFxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgKz0gYCAoYXR0ZW1wdGVkIGFkZHJlc3M6ICR7b3B0cy5ob3N0bmFtZX06JHtvcHRzLnBvcnR9LGBcbiAgfVxuXG4gIG1lc3NhZ2UgKz0gYCB0aW1lb3V0OiAke29wdHMudGltZW91dH1tcylgXG5cbiAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IENvbm5lY3RUaW1lb3V0RXJyb3IobWVzc2FnZSkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW51bVRvTWFwID0gdm9pZCAwO1xuZnVuY3Rpb24gZW51bVRvTWFwKG9iaikge1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZW51bVRvTWFwID0gZW51bVRvTWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSBleHBvcnRzLkhFQURFUl9TVEFURSA9IGV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SID0gZXhwb3J0cy5DT05ORUNUSU9OX1RPS0VOX0NIQVJTID0gZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBleHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBleHBvcnRzLkhFWCA9IGV4cG9ydHMuVVJMX0NIQVIgPSBleHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IGV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLk1BUksgPSBleHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5OVU0gPSBleHBvcnRzLkhFWF9NQVAgPSBleHBvcnRzLk5VTV9NQVAgPSBleHBvcnRzLkFMUEhBID0gZXhwb3J0cy5GSU5JU0ggPSBleHBvcnRzLkhfTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EU19SVFNQID0gZXhwb3J0cy5NRVRIT0RTX0lDRSA9IGV4cG9ydHMuTUVUSE9EU19IVFRQID0gZXhwb3J0cy5NRVRIT0RTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5GTEFHUyA9IGV4cG9ydHMuVFlQRSA9IGV4cG9ydHMuRVJST1IgPSB2b2lkIDA7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vLyBDIGhlYWRlcnNcbnZhciBFUlJPUjtcbihmdW5jdGlvbiAoRVJST1IpIHtcbiAgICBFUlJPUltFUlJPUltcIk9LXCJdID0gMF0gPSBcIk9LXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlRFUk5BTFwiXSA9IDFdID0gXCJJTlRFUk5BTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiU1RSSUNUXCJdID0gMl0gPSBcIlNUUklDVFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiTEZfRVhQRUNURURcIl0gPSAzXSA9IFwiTEZfRVhQRUNURURcIjtcbiAgICBFUlJPUltFUlJPUltcIlVORVhQRUNURURfQ09OVEVOVF9MRU5HVEhcIl0gPSA0XSA9IFwiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0xPU0VEX0NPTk5FQ1RJT05cIl0gPSA1XSA9IFwiQ0xPU0VEX0NPTk5FQ1RJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfTUVUSE9EXCJdID0gNl0gPSBcIklOVkFMSURfTUVUSE9EXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1VSTFwiXSA9IDddID0gXCJJTlZBTElEX1VSTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05TVEFOVFwiXSA9IDhdID0gXCJJTlZBTElEX0NPTlNUQU5UXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1ZFUlNJT05cIl0gPSA5XSA9IFwiSU5WQUxJRF9WRVJTSU9OXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiXSA9IDEwXSA9IFwiSU5WQUxJRF9IRUFERVJfVE9LRU5cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIl0gPSAxMV0gPSBcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ0hVTktfU0laRVwiXSA9IDEyXSA9IFwiSU5WQUxJRF9DSFVOS19TSVpFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1NUQVRVU1wiXSA9IDEzXSA9IFwiSU5WQUxJRF9TVEFUVVNcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfRU9GX1NUQVRFXCJdID0gMTRdID0gXCJJTlZBTElEX0VPRl9TVEFURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiXSA9IDE1XSA9IFwiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9CRUdJTlwiXSA9IDE2XSA9IFwiQ0JfTUVTU0FHRV9CRUdJTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfSEVBREVSU19DT01QTEVURVwiXSA9IDE3XSA9IFwiQ0JfSEVBREVSU19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9DT01QTEVURVwiXSA9IDE4XSA9IFwiQ0JfTUVTU0FHRV9DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfSEVBREVSXCJdID0gMTldID0gXCJDQl9DSFVOS19IRUFERVJcIjtcbiAgICBFUlJPUltFUlJPUltcIkNCX0NIVU5LX0NPTVBMRVRFXCJdID0gMjBdID0gXCJDQl9DSFVOS19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEXCJdID0gMjFdID0gXCJQQVVTRURcIjtcbiAgICBFUlJPUltFUlJPUltcIlBBVVNFRF9VUEdSQURFXCJdID0gMjJdID0gXCJQQVVTRURfVVBHUkFERVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX0gyX1VQR1JBREVcIl0gPSAyM10gPSBcIlBBVVNFRF9IMl9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJVU0VSXCJdID0gMjRdID0gXCJVU0VSXCI7XG59KShFUlJPUiA9IGV4cG9ydHMuRVJST1IgfHwgKGV4cG9ydHMuRVJST1IgPSB7fSkpO1xudmFyIFRZUEU7XG4oZnVuY3Rpb24gKFRZUEUpIHtcbiAgICBUWVBFW1RZUEVbXCJCT1RIXCJdID0gMF0gPSBcIkJPVEhcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVFVRVNUXCJdID0gMV0gPSBcIlJFUVVFU1RcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVNQT05TRVwiXSA9IDJdID0gXCJSRVNQT05TRVwiO1xufSkoVFlQRSA9IGV4cG9ydHMuVFlQRSB8fCAoZXhwb3J0cy5UWVBFID0ge30pKTtcbnZhciBGTEFHUztcbihmdW5jdGlvbiAoRkxBR1MpIHtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDFdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSAyXSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9VUEdSQURFXCJdID0gNF0gPSBcIkNPTk5FQ1RJT05fVVBHUkFERVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ0hVTktFRFwiXSA9IDhdID0gXCJDSFVOS0VEXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJVUEdSQURFXCJdID0gMTZdID0gXCJVUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05URU5UX0xFTkdUSFwiXSA9IDMyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlNLSVBCT0RZXCJdID0gNjRdID0gXCJTS0lQQk9EWVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiVFJBSUxJTkdcIl0gPSAxMjhdID0gXCJUUkFJTElOR1wiO1xuICAgIC8vIDEgPDwgOCBpcyB1bnVzZWRcbiAgICBGTEFHU1tGTEFHU1tcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gNTEyXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbn0pKEZMQUdTID0gZXhwb3J0cy5GTEFHUyB8fCAoZXhwb3J0cy5GTEFHUyA9IHt9KSk7XG52YXIgTEVOSUVOVF9GTEFHUztcbihmdW5jdGlvbiAoTEVOSUVOVF9GTEFHUykge1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkhFQURFUlNcIl0gPSAxXSA9IFwiSEVBREVSU1wiO1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkNIVU5LRURfTEVOR1RIXCJdID0gMl0gPSBcIkNIVU5LRURfTEVOR1RIXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiS0VFUF9BTElWRVwiXSA9IDRdID0gXCJLRUVQX0FMSVZFXCI7XG59KShMRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTIHx8IChleHBvcnRzLkxFTklFTlRfRkxBR1MgPSB7fSkpO1xudmFyIE1FVEhPRFM7XG4oZnVuY3Rpb24gKE1FVEhPRFMpIHtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERUxFVEVcIl0gPSAwXSA9IFwiREVMRVRFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUXCJdID0gMV0gPSBcIkdFVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkhFQURcIl0gPSAyXSA9IFwiSEVBRFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBPU1RcIl0gPSAzXSA9IFwiUE9TVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVVFwiXSA9IDRdID0gXCJQVVRcIjtcbiAgICAvKiBwYXRob2xvZ2ljYWwgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJDT05ORUNUXCJdID0gNV0gPSBcIkNPTk5FQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJPUFRJT05TXCJdID0gNl0gPSBcIk9QVElPTlNcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJUUkFDRVwiXSA9IDddID0gXCJUUkFDRVwiO1xuICAgIC8qIFdlYkRBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPUFlcIl0gPSA4XSA9IFwiQ09QWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxPQ0tcIl0gPSA5XSA9IFwiTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ09MXCJdID0gMTBdID0gXCJNS0NPTFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1PVkVcIl0gPSAxMV0gPSBcIk1PVkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QRklORFwiXSA9IDEyXSA9IFwiUFJPUEZJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QUEFUQ0hcIl0gPSAxM10gPSBcIlBST1BQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFQVJDSFwiXSA9IDE0XSA9IFwiU0VBUkNIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MT0NLXCJdID0gMTVdID0gXCJVTkxPQ0tcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJCSU5EXCJdID0gMTZdID0gXCJCSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVCSU5EXCJdID0gMTddID0gXCJSRUJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkJJTkRcIl0gPSAxOF0gPSBcIlVOQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkFDTFwiXSA9IDE5XSA9IFwiQUNMXCI7XG4gICAgLyogc3VidmVyc2lvbiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlJFUE9SVFwiXSA9IDIwXSA9IFwiUkVQT1JUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtBQ1RJVklUWVwiXSA9IDIxXSA9IFwiTUtBQ1RJVklUWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNIRUNLT1VUXCJdID0gMjJdID0gXCJDSEVDS09VVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1FUkdFXCJdID0gMjNdID0gXCJNRVJHRVwiO1xuICAgIC8qIHVwbnAgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNLVNFQVJDSFwiXSA9IDI0XSA9IFwiTS1TRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJOT1RJRllcIl0gPSAyNV0gPSBcIk5PVElGWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNVQlNDUklCRVwiXSA9IDI2XSA9IFwiU1VCU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5TVUJTQ1JJQkVcIl0gPSAyN10gPSBcIlVOU1VCU0NSSUJFXCI7XG4gICAgLyogUkZDLTU3ODkgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQQVRDSFwiXSA9IDI4XSA9IFwiUEFUQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQVVJHRVwiXSA9IDI5XSA9IFwiUFVSR0VcIjtcbiAgICAvKiBDYWxEQVYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0NBTEVOREFSXCJdID0gMzBdID0gXCJNS0NBTEVOREFSXCI7XG4gICAgLyogUkZDLTIwNjgsIHNlY3Rpb24gMTkuNi4xLjIgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJMSU5LXCJdID0gMzFdID0gXCJMSU5LXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MSU5LXCJdID0gMzJdID0gXCJVTkxJTktcIjtcbiAgICAvKiBpY2VjYXN0ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU09VUkNFXCJdID0gMzNdID0gXCJTT1VSQ0VcIjtcbiAgICAvKiBSRkMtNzU0MCwgc2VjdGlvbiAxMS42ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFJJXCJdID0gMzRdID0gXCJQUklcIjtcbiAgICAvKiBSRkMtMjMyNiBSVFNQICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiREVTQ1JJQkVcIl0gPSAzNV0gPSBcIkRFU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQU5OT1VOQ0VcIl0gPSAzNl0gPSBcIkFOTk9VTkNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VUVVBcIl0gPSAzN10gPSBcIlNFVFVQXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUExBWVwiXSA9IDM4XSA9IFwiUExBWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVVNFXCJdID0gMzldID0gXCJQQVVTRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRFQVJET1dOXCJdID0gNDBdID0gXCJURUFSRE9XTlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkdFVF9QQVJBTUVURVJcIl0gPSA0MV0gPSBcIkdFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRfUEFSQU1FVEVSXCJdID0gNDJdID0gXCJTRVRfUEFSQU1FVEVSXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVESVJFQ1RcIl0gPSA0M10gPSBcIlJFRElSRUNUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVDT1JEXCJdID0gNDRdID0gXCJSRUNPUkRcIjtcbiAgICAvKiBSQU9QICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiRkxVU0hcIl0gPSA0NV0gPSBcIkZMVVNIXCI7XG59KShNRVRIT0RTID0gZXhwb3J0cy5NRVRIT0RTIHx8IChleHBvcnRzLk1FVEhPRFMgPSB7fSkpO1xuZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBbXG4gICAgTUVUSE9EUy5ERUxFVEUsXG4gICAgTUVUSE9EUy5HRVQsXG4gICAgTUVUSE9EUy5IRUFELFxuICAgIE1FVEhPRFMuUE9TVCxcbiAgICBNRVRIT0RTLlBVVCxcbiAgICBNRVRIT0RTLkNPTk5FQ1QsXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuVFJBQ0UsXG4gICAgTUVUSE9EUy5DT1BZLFxuICAgIE1FVEhPRFMuTE9DSyxcbiAgICBNRVRIT0RTLk1LQ09MLFxuICAgIE1FVEhPRFMuTU9WRSxcbiAgICBNRVRIT0RTLlBST1BGSU5ELFxuICAgIE1FVEhPRFMuUFJPUFBBVENILFxuICAgIE1FVEhPRFMuU0VBUkNILFxuICAgIE1FVEhPRFMuVU5MT0NLLFxuICAgIE1FVEhPRFMuQklORCxcbiAgICBNRVRIT0RTLlJFQklORCxcbiAgICBNRVRIT0RTLlVOQklORCxcbiAgICBNRVRIT0RTLkFDTCxcbiAgICBNRVRIT0RTLlJFUE9SVCxcbiAgICBNRVRIT0RTLk1LQUNUSVZJVFksXG4gICAgTUVUSE9EUy5DSEVDS09VVCxcbiAgICBNRVRIT0RTLk1FUkdFLFxuICAgIE1FVEhPRFNbJ00tU0VBUkNIJ10sXG4gICAgTUVUSE9EUy5OT1RJRlksXG4gICAgTUVUSE9EUy5TVUJTQ1JJQkUsXG4gICAgTUVUSE9EUy5VTlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlBBVENILFxuICAgIE1FVEhPRFMuUFVSR0UsXG4gICAgTUVUSE9EUy5NS0NBTEVOREFSLFxuICAgIE1FVEhPRFMuTElOSyxcbiAgICBNRVRIT0RTLlVOTElOSyxcbiAgICBNRVRIT0RTLlBSSSxcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBzaG91bGQgd2UgYWxsb3cgaXQgd2l0aCBIVFRQP1xuICAgIE1FVEhPRFMuU09VUkNFLFxuXTtcbmV4cG9ydHMuTUVUSE9EU19JQ0UgPSBbXG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBbXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuREVTQ1JJQkUsXG4gICAgTUVUSE9EUy5BTk5PVU5DRSxcbiAgICBNRVRIT0RTLlNFVFVQLFxuICAgIE1FVEhPRFMuUExBWSxcbiAgICBNRVRIT0RTLlBBVVNFLFxuICAgIE1FVEhPRFMuVEVBUkRPV04sXG4gICAgTUVUSE9EUy5HRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuU0VUX1BBUkFNRVRFUixcbiAgICBNRVRIT0RTLlJFRElSRUNULFxuICAgIE1FVEhPRFMuUkVDT1JELFxuICAgIE1FVEhPRFMuRkxVU0gsXG4gICAgLy8gRm9yIEFpclBsYXlcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLlBPU1QsXG5dO1xuZXhwb3J0cy5NRVRIT0RfTUFQID0gdXRpbHNfMS5lbnVtVG9NYXAoTUVUSE9EUyk7XG5leHBvcnRzLkhfTUVUSE9EX01BUCA9IHt9O1xuT2JqZWN0LmtleXMoZXhwb3J0cy5NRVRIT0RfTUFQKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoL15ILy50ZXN0KGtleSkpIHtcbiAgICAgICAgZXhwb3J0cy5IX01FVEhPRF9NQVBba2V5XSA9IGV4cG9ydHMuTUVUSE9EX01BUFtrZXldO1xuICAgIH1cbn0pO1xudmFyIEZJTklTSDtcbihmdW5jdGlvbiAoRklOSVNIKSB7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVcIl0gPSAwXSA9IFwiU0FGRVwiO1xuICAgIEZJTklTSFtGSU5JU0hbXCJTQUZFX1dJVEhfQ0JcIl0gPSAxXSA9IFwiU0FGRV9XSVRIX0NCXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlVOU0FGRVwiXSA9IDJdID0gXCJVTlNBRkVcIjtcbn0pKEZJTklTSCA9IGV4cG9ydHMuRklOSVNIIHx8IChleHBvcnRzLkZJTklTSCA9IHt9KSk7XG5leHBvcnRzLkFMUEhBID0gW107XG5mb3IgKGxldCBpID0gJ0EnLmNoYXJDb2RlQXQoMCk7IGkgPD0gJ1onLmNoYXJDb2RlQXQoMCk7IGkrKykge1xuICAgIC8vIFVwcGVyIGNhc2VcbiAgICBleHBvcnRzLkFMUEhBLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XG4gICAgLy8gTG93ZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkgKyAweDIwKSk7XG59XG5leHBvcnRzLk5VTV9NQVAgPSB7XG4gICAgMDogMCwgMTogMSwgMjogMiwgMzogMywgNDogNCxcbiAgICA1OiA1LCA2OiA2LCA3OiA3LCA4OiA4LCA5OiA5LFxufTtcbmV4cG9ydHMuSEVYX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG4gICAgQTogMFhBLCBCOiAwWEIsIEM6IDBYQywgRDogMFhELCBFOiAwWEUsIEY6IDBYRixcbiAgICBhOiAweGEsIGI6IDB4YiwgYzogMHhjLCBkOiAweGQsIGU6IDB4ZSwgZjogMHhmLFxufTtcbmV4cG9ydHMuTlVNID0gW1xuICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5Jyxcbl07XG5leHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5BTFBIQS5jb25jYXQoZXhwb3J0cy5OVU0pO1xuZXhwb3J0cy5NQVJLID0gWyctJywgJ18nLCAnLicsICchJywgJ34nLCAnKicsICdcXCcnLCAnKCcsICcpJ107XG5leHBvcnRzLlVTRVJJTkZPX0NIQVJTID0gZXhwb3J0cy5BTFBIQU5VTVxuICAgIC5jb25jYXQoZXhwb3J0cy5NQVJLKVxuICAgIC5jb25jYXQoWyclJywgJzsnLCAnOicsICcmJywgJz0nLCAnKycsICckJywgJywnXSk7XG4vLyBUT0RPKGluZHV0bnkpOiB1c2UgUkZDXG5leHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IFtcbiAgICAnIScsICdcIicsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcoJywgJyknLCAnKicsICcrJywgJywnLCAnLScsICcuJywgJy8nLFxuICAgICc6JywgJzsnLCAnPCcsICc9JywgJz4nLFxuICAgICdAJywgJ1snLCAnXFxcXCcsICddJywgJ14nLCAnXycsXG4gICAgJ2AnLFxuICAgICd7JywgJ3wnLCAnfScsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSXG4gICAgLmNvbmNhdChbJ1xcdCcsICdcXGYnXSk7XG4vLyBBbGwgY2hhcmFjdGVycyB3aXRoIDB4ODAgYml0IHNldCB0byAxXG5mb3IgKGxldCBpID0gMHg4MDsgaSA8PSAweGZmOyBpKyspIHtcbiAgICBleHBvcnRzLlVSTF9DSEFSLnB1c2goaSk7XG59XG5leHBvcnRzLkhFWCA9IGV4cG9ydHMuTlVNLmNvbmNhdChbJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJ10pO1xuLyogVG9rZW5zIGFzIGRlZmluZWQgYnkgcmZjIDI2MTYuIEFsc28gbG93ZXJjYXNlcyB0aGVtLlxuICogICAgICAgIHRva2VuICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiAqICAgICBzZXBhcmF0b3JzICAgICA9IFwiKFwiIHwgXCIpXCIgfCBcIjxcIiB8IFwiPlwiIHwgXCJAXCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAqICAgICAgICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwie1wiIHwgXCJ9XCIgfCBTUCB8IEhUXG4gKi9cbmV4cG9ydHMuU1RSSUNUX1RPS0VOID0gW1xuICAgICchJywgJyMnLCAnJCcsICclJywgJyYnLCAnXFwnJyxcbiAgICAnKicsICcrJywgJy0nLCAnLicsXG4gICAgJ14nLCAnXycsICdgJyxcbiAgICAnfCcsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5UT0tFTiA9IGV4cG9ydHMuU1RSSUNUX1RPS0VOLmNvbmNhdChbJyAnXSk7XG4vKlxuICogVmVyaWZ5IHRoYXQgYSBjaGFyIGlzIGEgdmFsaWQgdmlzaWJsZSAocHJpbnRhYmxlKSBVUy1BU0NJSVxuICogY2hhcmFjdGVyIG9yICV4ODAtRkZcbiAqL1xuZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBbJ1xcdCddO1xuZm9yIChsZXQgaSA9IDMyOyBpIDw9IDI1NTsgaSsrKSB7XG4gICAgaWYgKGkgIT09IDEyNykge1xuICAgICAgICBleHBvcnRzLkhFQURFUl9DSEFSUy5wdXNoKGkpO1xuICAgIH1cbn1cbi8vICcsJyA9IFxceDQ0XG5leHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUy5maWx0ZXIoKGMpID0+IGMgIT09IDQ0KTtcbmV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLk5VTV9NQVA7XG5leHBvcnRzLk1JTk9SID0gZXhwb3J0cy5NQUpPUjtcbnZhciBIRUFERVJfU1RBVEU7XG4oZnVuY3Rpb24gKEhFQURFUl9TVEFURSkge1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJHRU5FUkFMXCJdID0gMF0gPSBcIkdFTkVSQUxcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTlwiXSA9IDFdID0gXCJDT05ORUNUSU9OXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTlRFTlRfTEVOR1RIXCJdID0gMl0gPSBcIkNPTlRFTlRfTEVOR1RIXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gM10gPSBcIlRSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlVQR1JBREVcIl0gPSA0XSA9IFwiVVBHUkFERVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIl0gPSA1XSA9IFwiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSA2XSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA3XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HX0NIVU5LRURcIl0gPSA4XSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiO1xufSkoSEVBREVSX1NUQVRFID0gZXhwb3J0cy5IRUFERVJfU1RBVEUgfHwgKGV4cG9ydHMuSEVBREVSX1NUQVRFID0ge30pKTtcbmV4cG9ydHMuU1BFQ0lBTF9IRUFERVJTID0ge1xuICAgICdjb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ2NvbnRlbnQtbGVuZ3RoJzogSEVBREVSX1NUQVRFLkNPTlRFTlRfTEVOR1RILFxuICAgICdwcm94eS1jb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ3RyYW5zZmVyLWVuY29kaW5nJzogSEVBREVSX1NUQVRFLlRSQU5TRkVSX0VOQ09ESU5HLFxuICAgICd1cGdyYWRlJzogSEVBREVSX1NUQVRFLlVQR1JBREUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzA3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3RYQUNBQVFSaHFRZ0EzQXdBZ0FFSUFOd01BSUFCQk9HcENBRGNEQUNBQVFUQnFRZ0EzQXdBZ0FFRW9ha0lBTndNQUlBQkJJR3BDQURjREFDQUFRUkJxUWdBM0F3QWdBRUVJYWtJQU53TUFJQUJCM1FFMkFod0xCZ0FnQUJBeUM1b3RBUXQvSXdCQkVHc2lDaVFBUWFUUUFDZ0NBQ0lKUlFSQVFlVFRBQ2dDQUNJRlJRUkFRZkRUQUVKL053SUFRZWpUQUVLQWdJU0FnSURBQURjQ0FFSGswd0FnQ2tFSWFrRndjVUhZcXRXcUJYTWlCVFlDQUVINDB3QkJBRFlDQUVISTB3QkJBRFlDQUF0QnpOTUFRWURVQkRZQ0FFR2MwQUJCZ05RRU5nSUFRYkRRQUNBRk5nSUFRYXpRQUVGL05nSUFRZERUQUVHQXJBTTJBZ0FEUUNBQlFjalFBR29nQVVHODBBQnFJZ0kyQWdBZ0FpQUJRYlRRQUdvaUF6WUNBQ0FCUWNEUUFHb2dBellDQUNBQlFkRFFBR29nQVVIRTBBQnFJZ00yQWdBZ0F5QUNOZ0lBSUFGQjJOQUFhaUFCUWN6UUFHb2lBallDQUNBQ0lBTTJBZ0FnQVVIVTBBQnFJQUkyQWdBZ0FVRWdhaUlCUVlBQ1J3MEFDMEdNMUFSQndhc0ROZ0lBUWFqUUFFSDAwd0FvQWdBMkFnQkJtTkFBUWNDckF6WUNBRUdrMEFCQmlOUUVOZ0lBUWN6L0IwRTROZ0lBUVlqVUJDRUpDd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI3QUZOQkVCQmpOQUFLQUlBSWdaQkVDQUFRUk5xUVhCeElBQkJDMGtiSWdSQkEzWWlBSFlpQVVFRGNRUkFBa0FnQVVFQmNTQUFja0VCY3lJQ1FRTjBJZ0JCdE5BQWFpSUJJQUJCdk5BQWFpZ0NBQ0lBS0FJSUlnTkdCRUJCak5BQUlBWkJmaUFDZDNFMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBRUVJYWlFQklBQWdBa0VEZENJQ1FRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREJFTFFaVFFBQ2dDQUNJSUlBUlBEUUVnQVFSQUFrQkJBaUFBZENJQ1FRQWdBbXR5SUFFZ0FIUnhhQ0lBUVFOMElnSkJ0TkFBYWlJQklBSkJ2TkFBYWlnQ0FDSUNLQUlJSWdOR0JFQkJqTkFBSUFaQmZpQUFkM0VpQmpZQ0FBd0JDeUFCSUFNMkFnZ2dBeUFCTmdJTUN5QUNJQVJCQTNJMkFnUWdBRUVEZENJQUlBUnJJUVVnQUNBQ2FpQUZOZ0lBSUFJZ0JHb2lCQ0FGUVFGeU5nSUVJQWdFUUNBSVFYaHhRYlRRQUdvaEFFR2cwQUFvQWdBaEF3Si9RUUVnQ0VFRGRuUWlBU0FHY1VVRVFFR00wQUFnQVNBR2NqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0F6WUNEQ0FBSUFNMkFnZ2dBeUFBTmdJTUlBTWdBVFlDQ0FzZ0FrRUlhaUVCUWFEUUFDQUVOZ0lBUVpUUUFDQUZOZ0lBREJFTFFaRFFBQ2dDQUNJTFJRMEJJQXRvUVFKMFFielNBR29vQWdBaUFDZ0NCRUY0Y1NBRWF5RUZJQUFoQWdOQUFrQWdBaWdDRUNJQlJRUkFJQUpCRkdvb0FnQWlBVVVOQVFzZ0FTZ0NCRUY0Y1NBRWF5SURJQVZKSVFJZ0F5QUZJQUliSVFVZ0FTQUFJQUliSVFBZ0FTRUNEQUVMQ3lBQUtBSVlJUWtnQUNnQ0RDSURJQUJIQkVCQm5OQUFLQUlBR2lBRElBQW9BZ2dpQVRZQ0NDQUJJQU0yQWd3TUVBc2dBRUVVYWlJQ0tBSUFJZ0ZGQkVBZ0FDZ0NFQ0lCUlEwRElBQkJFR29oQWdzRFFDQUNJUWNnQVNJRFFSUnFJZ0lvQWdBaUFRMEFJQU5CRUdvaEFpQURLQUlRSWdFTkFBc2dCMEVBTmdJQURBOExRWDhoQkNBQVFiOS9TdzBBSUFCQkUyb2lBVUZ3Y1NFRVFaRFFBQ2dDQUNJSVJRMEFRUUFnQkdzaEJRSkFBa0FDUUFKL1FRQWdCRUdBQWtrTkFCcEJIeUFFUWYvLy93ZExEUUFhSUFSQkppQUJRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9MSWdaQkFuUkJ2TklBYWlnQ0FDSUNSUVJBUVFBaEFVRUFJUU1NQVF0QkFDRUJJQVJCR1NBR1FRRjJhMEVBSUFaQkgwY2JkQ0VBUVFBaEF3TkFBa0FnQWlnQ0JFRjRjU0FFYXlJSElBVlBEUUFnQWlFRElBY2lCUTBBUVFBaEJTQUNJUUVNQXdzZ0FTQUNRUlJxS0FJQUlnY2dCeUFDSUFCQkhYWkJCSEZxUVJCcUtBSUFJZ0pHR3lBQklBY2JJUUVnQUVFQmRDRUFJQUlOQUFzTElBRWdBM0pGQkVCQkFDRURRUUlnQm5RaUFFRUFJQUJyY2lBSWNTSUFSUTBESUFCb1FRSjBRYnpTQUdvb0FnQWhBUXNnQVVVTkFRc0RRQ0FCS0FJRVFYaHhJQVJySWdJZ0JVa2hBQ0FDSUFVZ0FCc2hCU0FCSUFNZ0FCc2hBeUFCS0FJUUlnQUVmeUFBQlNBQlFSUnFLQUlBQ3lJQkRRQUxDeUFEUlEwQUlBVkJsTkFBS0FJQUlBUnJUdzBBSUFNb0FoZ2hCeUFESUFNb0Fnd2lBRWNFUUVHYzBBQW9BZ0FhSUFBZ0F5Z0NDQ0lCTmdJSUlBRWdBRFlDREF3T0N5QURRUlJxSWdJb0FnQWlBVVVFUUNBREtBSVFJZ0ZGRFFNZ0EwRVFhaUVDQ3dOQUlBSWhCaUFCSWdCQkZHb2lBaWdDQUNJQkRRQWdBRUVRYWlFQ0lBQW9BaEFpQVEwQUN5QUdRUUEyQWdBTURRdEJsTkFBS0FJQUlnTWdCRThFUUVHZzBBQW9BZ0FoQVFKQUlBTWdCR3NpQWtFUVR3UkFJQUVnQkdvaUFDQUNRUUZ5TmdJRUlBRWdBMm9nQWpZQ0FDQUJJQVJCQTNJMkFnUU1BUXNnQVNBRFFRTnlOZ0lFSUFFZ0Eyb2lBQ0FBS0FJRVFRRnlOZ0lFUVFBaEFFRUFJUUlMUVpUUUFDQUNOZ0lBUWFEUUFDQUFOZ0lBSUFGQkNHb2hBUXdQQzBHWTBBQW9BZ0FpQXlBRVN3UkFJQVFnQ1dvaUFDQURJQVJySWdGQkFYSTJBZ1JCcE5BQUlBQTJBZ0JCbU5BQUlBRTJBZ0FnQ1NBRVFRTnlOZ0lFSUFsQkNHb2hBUXdQQzBFQUlRRWdCQUovUWVUVEFDZ0NBQVJBUWV6VEFDZ0NBQXdCQzBIdzB3QkNmemNDQUVIbzB3QkNnSUNFZ0lDQXdBQTNBZ0JCNU5NQUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmalRBRUVBTmdJQVFjalRBRUVBTmdJQVFZQ0FCQXNpQUNBRVFjY0FhaUlGYWlJR1FRQWdBR3NpQjNFaUFrOEVRRUg4MHdCQk1EWUNBQXdQQ3dKQVFjVFRBQ2dDQUNJQlJRMEFRYnpUQUNnQ0FDSUlJQUpxSVFBZ0FDQUJUU0FBSUFoTGNRMEFRUUFoQVVIODB3QkJNRFlDQUF3UEMwSEkwd0F0QUFCQkJIRU5CQUpBQWtBZ0NRUkFRY3pUQUNFQkEwQWdBU2dDQUNJQUlBbE5CRUFnQUNBQktBSUVhaUFKU3cwREN5QUJLQUlJSWdFTkFBc0xRUUFRTXlJQVFYOUdEUVVnQWlFR1FlalRBQ2dDQUNJQlFRRnJJZ01nQUhFRVFDQUNJQUJySUFBZ0EycEJBQ0FCYTNGcUlRWUxJQVFnQms4TkJTQUdRZjcvLy84SFN3MEZRY1RUQUNnQ0FDSURCRUJCdk5NQUtBSUFJZ2NnQm1vaEFTQUJJQWRORFFZZ0FTQURTdzBHQ3lBR0VETWlBU0FBUncwQkRBY0xJQVlnQTJzZ0IzRWlCa0grLy8vL0Iwc05CQ0FHRURNaEFDQUFJQUVvQWdBZ0FTZ0NCR3BHRFFNZ0FDRUJDd0pBSUFZZ0JFSElBR3BQRFFBZ0FVRi9SZzBBUWV6VEFDZ0NBQ0lBSUFVZ0JtdHFRUUFnQUd0eElnQkIvdi8vL3dkTEJFQWdBU0VBREFjTElBQVFNMEYvUndSQUlBQWdCbW9oQmlBQklRQU1Cd3RCQUNBR2F4QXpHZ3dFQ3lBQklnQkJmMGNOQlF3REMwRUFJUU1NREF0QkFDRUFEQW9MSUFCQmYwY05BZ3RCeU5NQVFjalRBQ2dDQUVFRWNqWUNBQXNnQWtIKy8vLy9CMHNOQVNBQ0VETWhBRUVBRURNaEFTQUFRWDlHRFFFZ0FVRi9SZzBCSUFBZ0FVOE5BU0FCSUFCcklnWWdCRUU0YWswTkFRdEJ2Tk1BUWJ6VEFDZ0NBQ0FHYWlJQk5nSUFRY0RUQUNnQ0FDQUJTUVJBUWNEVEFDQUJOZ0lBQ3dKQUFrQUNRRUdrMEFBb0FnQWlBZ1JBUWN6VEFDRUJBMEFnQUNBQktBSUFJZ01nQVNnQ0JDSUZha1lOQWlBQktBSUlJZ0VOQUFzTUFndEJuTkFBS0FJQUlnRkJBRWNnQUNBQlQzRkZCRUJCbk5BQUlBQTJBZ0FMUVFBaEFVSFEwd0FnQmpZQ0FFSE0wd0FnQURZQ0FFR3MwQUJCZnpZQ0FFR3cwQUJCNU5NQUtBSUFOZ0lBUWRqVEFFRUFOZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCZUNBQWEwRVBjU0lCSUFCcUlnSWdCa0U0YXlJRElBRnJJZ0ZCQVhJMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBVFlDQUVHazBBQWdBallDQUNBQUlBTnFRVGcyQWdRTUFnc2dBQ0FDVFEwQUlBSWdBMGtOQUNBQktBSU1RUWh4RFFCQmVDQUNhMEVQY1NJQUlBSnFJZ05CbU5BQUtBSUFJQVpxSWdjZ0FHc2lBRUVCY2pZQ0JDQUJJQVVnQm1vMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBRFlDQUVHazBBQWdBellDQUNBQ0lBZHFRVGcyQWdRTUFRc2dBRUdjMEFBb0FnQkpCRUJCbk5BQUlBQTJBZ0FMSUFBZ0Jtb2hBMEhNMHdBaEFRSkFBa0FDUUFOQUlBTWdBU2dDQUVjRVFDQUJLQUlJSWdFTkFRd0NDd3NnQVMwQURFRUljVVVOQVF0QnpOTUFJUUVEUUNBQktBSUFJZ01nQWswRVFDQURJQUVvQWdScUlnVWdBa3NOQXdzZ0FTZ0NDQ0VCREFBTEFBc2dBU0FBTmdJQUlBRWdBU2dDQkNBR2FqWUNCQ0FBUVhnZ0FHdEJEM0ZxSWdrZ0JFRURjallDQkNBRFFYZ2dBMnRCRDNGcUlnWWdCQ0FKYWlJRWF5RUJJQUlnQmtZRVFFR2swQUFnQkRZQ0FFR1kwQUJCbU5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVEQWdMUWFEUUFDZ0NBQ0FHUmdSQVFhRFFBQ0FFTmdJQVFaVFFBRUdVMEFBb0FnQWdBV29pQURZQ0FDQUVJQUJCQVhJMkFnUWdBQ0FFYWlBQU5nSUFEQWdMSUFZb0FnUWlCVUVEY1VFQlJ3MEdJQVZCZUhFaENDQUZRZjhCVFFSQUlBVkJBM1loQXlBR0tBSUlJZ0FnQmlnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJ3c2dBaUFBTmdJSUlBQWdBallDREF3R0N5QUdLQUlZSVFjZ0JpQUdLQUlNSWdCSEJFQWdBQ0FHS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQVVMSUFaQkZHb2lBaWdDQUNJRlJRUkFJQVlvQWhBaUJVVU5CQ0FHUVJCcUlRSUxBMEFnQWlFRElBVWlBRUVVYWlJQ0tBSUFJZ1VOQUNBQVFSQnFJUUlnQUNnQ0VDSUZEUUFMSUFOQkFEWUNBQXdFQzBGNElBQnJRUTl4SWdFZ0FHb2lCeUFHUVRocklnTWdBV3NpQVVFQmNqWUNCQ0FBSUFOcVFUZzJBZ1FnQWlBRlFUY2dCV3RCRDNGcVFUOXJJZ01nQXlBQ1FSQnFTUnNpQTBFak5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQWMyQWdBZ0EwRVFha0hVMHdBcEFnQTNBZ0FnQTBITTB3QXBBZ0EzQWdoQjFOTUFJQU5CQ0dvMkFnQkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkIyTk1BUVFBMkFnQWdBMEVrYWlFQkEwQWdBVUVITmdJQUlBVWdBVUVFYWlJQlN3MEFDeUFDSUFOR0RRQWdBeUFES0FJRVFYNXhOZ0lFSUFNZ0F5QUNheUlGTmdJQUlBSWdCVUVCY2pZQ0JDQUZRZjhCVFFSQUlBVkJlSEZCdE5BQWFpRUFBbjlCak5BQUtBSUFJZ0ZCQVNBRlFRTjJkQ0lEY1VVRVFFR00wQUFnQVNBRGNqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUVnQlVILy8vOEhUUVJBSUFWQkppQUZRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQVFzZ0FpQUJOZ0ljSUFKQ0FEY0NFQ0FCUVFKMFFielNBR29oQUVHUTBBQW9BZ0FpQTBFQklBRjBJZ1p4UlFSQUlBQWdBallDQUVHUTBBQWdBeUFHY2pZQ0FDQUNJQUEyQWhnZ0FpQUNOZ0lJSUFJZ0FqWUNEQXdCQ3lBRlFSa2dBVUVCZG10QkFDQUJRUjlIRzNRaEFTQUFLQUlBSVFNQ1FBTkFJQU1pQUNnQ0JFRjRjU0FGUmcwQklBRkJIWFloQXlBQlFRRjBJUUVnQUNBRFFRUnhha0VRYWlJR0tBSUFJZ01OQUFzZ0JpQUNOZ0lBSUFJZ0FEWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUFvQWdnaUFTQUNOZ0lNSUFBZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFBTmdJTUlBSWdBVFlDQ0F0Qm1OQUFLQUlBSWdFZ0JFME5BRUdrMEFBb0FnQWlBQ0FFYWlJQ0lBRWdCR3NpQVVFQmNqWUNCRUdZMEFBZ0FUWUNBRUdrMEFBZ0FqWUNBQ0FBSUFSQkEzSTJBZ1FnQUVFSWFpRUJEQWdMUVFBaEFVSDgwd0JCTURZQ0FBd0hDMEVBSVFBTElBZEZEUUFDUUNBR0tBSWNJZ0pCQW5SQnZOSUFhaUlES0FJQUlBWkdCRUFnQXlBQU5nSUFJQUFOQVVHUTBBQkJrTkFBS0FJQVFYNGdBbmR4TmdJQURBSUxJQWRCRUVFVUlBY29BaEFnQmtZYmFpQUFOZ0lBSUFCRkRRRUxJQUFnQnpZQ0dDQUdLQUlRSWdJRVFDQUFJQUkyQWhBZ0FpQUFOZ0lZQ3lBR1FSUnFLQUlBSWdKRkRRQWdBRUVVYWlBQ05nSUFJQUlnQURZQ0dBc2dBU0FJYWlFQklBWWdDR29pQmlnQ0JDRUZDeUFHSUFWQmZuRTJBZ1FnQVNBRWFpQUJOZ0lBSUFRZ0FVRUJjallDQkNBQlFmOEJUUVJBSUFGQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FCUVFOMmRDSUJjVVVFUUVHTTBBQWdBU0FDY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQkRZQ0RDQUFJQVEyQWdnZ0JDQUFOZ0lNSUFRZ0FUWUNDQXdCQzBFZklRVWdBVUgvLy84SFRRUkFJQUZCSmlBQlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hCUXNnQkNBRk5nSWNJQVJDQURjQ0VDQUZRUUowUWJ6U0FHb2hBRUdRMEFBb0FnQWlBa0VCSUFWMElnTnhSUVJBSUFBZ0JEWUNBRUdRMEFBZ0FpQURjallDQUNBRUlBQTJBaGdnQkNBRU5nSUlJQVFnQkRZQ0RBd0JDeUFCUVJrZ0JVRUJkbXRCQUNBRlFSOUhHM1FoQlNBQUtBSUFJUUFDUUFOQUlBQWlBaWdDQkVGNGNTQUJSZzBCSUFWQkhYWWhBQ0FGUVFGMElRVWdBaUFBUVFSeGFrRVFhaUlES0FJQUlnQU5BQXNnQXlBRU5nSUFJQVFnQWpZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFFTElBSW9BZ2dpQUNBRU5nSU1JQUlnQkRZQ0NDQUVRUUEyQWhnZ0JDQUNOZ0lNSUFRZ0FEWUNDQXNnQ1VFSWFpRUJEQUlMQWtBZ0IwVU5BQUpBSUFNb0Fod2lBVUVDZEVHODBnQnFJZ0lvQWdBZ0EwWUVRQ0FDSUFBMkFnQWdBQTBCUVpEUUFDQUlRWDRnQVhkeElnZzJBZ0FNQWdzZ0IwRVFRUlFnQnlnQ0VDQURSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUhOZ0lZSUFNb0FoQWlBUVJBSUFBZ0FUWUNFQ0FCSUFBMkFoZ0xJQU5CRkdvb0FnQWlBVVVOQUNBQVFSUnFJQUUyQWdBZ0FTQUFOZ0lZQ3dKQUlBVkJEMDBFUUNBRElBUWdCV29pQUVFRGNqWUNCQ0FBSUFOcUlnQWdBQ2dDQkVFQmNqWUNCQXdCQ3lBRElBUnFJZ0lnQlVFQmNqWUNCQ0FESUFSQkEzSTJBZ1FnQWlBRmFpQUZOZ0lBSUFWQi93Rk5CRUFnQlVGNGNVRzAwQUJxSVFBQ2YwR00wQUFvQWdBaUFVRUJJQVZCQTNaMElnVnhSUVJBUVl6UUFDQUJJQVZ5TmdJQUlBQU1BUXNnQUNnQ0NBc2lBU0FDTmdJTUlBQWdBallDQ0NBQ0lBQTJBZ3dnQWlBQk5nSUlEQUVMUVI4aEFTQUZRZi8vL3dkTkJFQWdCVUVtSUFWQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2FpRUJDeUFDSUFFMkFod2dBa0lBTndJUUlBRkJBblJCdk5JQWFpRUFRUUVnQVhRaUJDQUljVVVFUUNBQUlBSTJBZ0JCa05BQUlBUWdDSEkyQWdBZ0FpQUFOZ0lZSUFJZ0FqWUNDQ0FDSUFJMkFnd01BUXNnQlVFWklBRkJBWFpyUVFBZ0FVRWZSeHQwSVFFZ0FDZ0NBQ0VFQWtBRFFDQUVJZ0FvQWdSQmVIRWdCVVlOQVNBQlFSMTJJUVFnQVVFQmRDRUJJQUFnQkVFRWNXcEJFR29pQmlnQ0FDSUVEUUFMSUFZZ0FqWUNBQ0FDSUFBMkFoZ2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUFLQUlJSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBa0VBTmdJWUlBSWdBRFlDRENBQ0lBRTJBZ2dMSUFOQkNHb2hBUXdCQ3dKQUlBbEZEUUFDUUNBQUtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBQkdCRUFnQWlBRE5nSUFJQU1OQVVHUTBBQWdDMEYrSUFGM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBQkdHMm9nQXpZQ0FDQURSUTBCQ3lBRElBazJBaGdnQUNnQ0VDSUJCRUFnQXlBQk5nSVFJQUVnQXpZQ0dBc2dBRUVVYWlnQ0FDSUJSUTBBSUFOQkZHb2dBVFlDQUNBQklBTTJBaGdMQWtBZ0JVRVBUUVJBSUFBZ0JDQUZhaUlCUVFOeU5nSUVJQUFnQVdvaUFTQUJLQUlFUVFGeU5nSUVEQUVMSUFBZ0JHb2lCeUFGUVFGeU5nSUVJQUFnQkVFRGNqWUNCQ0FGSUFkcUlBVTJBZ0FnQ0FSQUlBaEJlSEZCdE5BQWFpRUJRYURRQUNnQ0FDRURBbjlCQVNBSVFRTjJkQ0lDSUFaeFJRUkFRWXpRQUNBQ0lBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaUFpQUROZ0lNSUFFZ0F6WUNDQ0FESUFFMkFnd2dBeUFDTmdJSUMwR2cwQUFnQnpZQ0FFR1UwQUFnQlRZQ0FBc2dBRUVJYWlFQkN5QUtRUkJxSkFBZ0FRdERBQ0FBUlFSQVB3QkJFSFFQQ3dKQUlBQkIvLzhEY1EwQUlBQkJBRWdOQUNBQVFSQjJRQUFpQUVGL1JnUkFRZnpUQUVFd05nSUFRWDhQQ3lBQVFSQjBEd3NBQ3d2Y1B5SUFRWUFJQ3drQkFBQUFBZ0FBQUFNQVFaUUlDd1VFQUFBQUJRQkJwQWdMQ1FZQUFBQUhBQUFBQ0FCQjNBZ0xpaTFKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhGMVpYSjVBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZbTlrZVFCRGIyNTBaVzUwTFV4bGJtZDBhQ0J2ZG1WeVpteHZkd0JEYUhWdWF5QnphWHBsSUc5MlpYSm1iRzkzQUZKbGMzQnZibk5sSUc5MlpYSm1iRzkzQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCSVZGUlFMM2d1ZUNCeVpYRjFaWE4wQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCU1ZGTlFMM2d1ZUNCeVpYRjFaWE4wQUVWNGNHVmpkR1ZrSUZOUFZWSkRSU0J0WlhSb2IyUWdabTl5SUVsRFJTOTRMbmdnY21WeGRXVnpkQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUdaeVlXZHRaVzUwSUhOMFlYSjBBRVY0Y0dWamRHVmtJR1J2ZEFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNOMFlYUjFjd0JKYm5aaGJHbGtJSEpsYzNCdmJuTmxJSE4wWVhSMWN3QkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpBRlZ6WlhJZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzSmxjMlYwWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmYUdWaFpHVnlZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWemMyRm5aVjlpWldkcGJtQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzTjBZWFIxYzE5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTFjbXhmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJobFlXUmxjbDkyWVd4MVpWOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsYzNOaFoyVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlvWldGa1pYSmZabWxsYkdSZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFWVzVsZUhCbFkzUmxaQ0JqYUdGeUlHbHVJSFZ5YkNCelpYSjJaWElBU1c1MllXeHBaQ0JvWldGa1pYSWdkbUZzZFdVZ1kyaGhjZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQm1hV1ZzWkNCamFHRnlBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMXBibTl5SUhabGNuTnBiMjRBU1c1MllXeHBaQ0J0WVdwdmNpQjJaWEp6YVc5dUFFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJSFpsY25OcGIyNEFSWGh3WldOMFpXUWdRMUpNUmlCaFpuUmxjaUIyWlhKemFXOXVBRWx1ZG1Gc2FXUWdTRlJVVUNCMlpYSnphVzl1QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFJ2YTJWdUFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmRYSnNBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnljeUJwYmlCMWNtd0FWVzVsZUhCbFkzUmxaQ0J6ZEdGeWRDQmphR0Z5SUdsdUlIVnliQUJFYjNWaWJHVWdRQ0JwYmlCMWNtd0FSVzF3ZEhrZ1EyOXVkR1Z1ZEMxTVpXNW5kR2dBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1EyOXVkR1Z1ZEMxTVpXNW5kR2dBUkhWd2JHbGpZWFJsSUVOdmJuUmxiblF0VEdWdVozUm9BRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnY0dGMGFBQkRiMjUwWlc1MExVeGxibWQwYUNCallXNG5kQ0JpWlNCd2NtVnpaVzUwSUhkcGRHZ2dWSEpoYm5ObVpYSXRSVzVqYjJScGJtY0FTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2djMmw2WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJobFlXUmxjbDkyWVd4MVpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5MllXeDFaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUhaaGJIVmxBRTFwYzNOcGJtY2daWGh3WldOMFpXUWdURVlnWVdaMFpYSWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUNCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpTQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsWkNCMllXeDFaUUJRWVhWelpXUWdZbmtnYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFCSmJuWmhiR2xrSUVWUFJpQnpkR0YwWlFCdmJsOXlaWE5sZENCd1lYVnpaUUJ2Ymw5amFIVnVhMTlvWldGa1pYSWdjR0YxYzJVQWIyNWZiV1Z6YzJGblpWOWlaV2RwYmlCd1lYVnpaUUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVWdjR0YxYzJVQWIyNWZjM1JoZEhWelgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmRYSnNYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMk5vZFc1clgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyaGxZV1JsY2w5MllXeDFaVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMjFsZEdodlpGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZlptbGxiR1JmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldVZ2NHRjFjMlVBVlc1bGVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQnpkR0Z5ZENCc2FXNWxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCdVlXMWxBRkJoZFhObElHOXVJRU5QVGs1RlExUXZWWEJuY21Ga1pRQlFZWFZ6WlNCdmJpQlFVa2t2VlhCbmNtRmtaUUJGZUhCbFkzUmxaQ0JJVkZSUUx6SWdRMjl1Ym1WamRHbHZiaUJRY21WbVlXTmxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZiV1YwYUc5a0FFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJRzFsZEdodlpBQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyaGxZV1JsY2w5bWFXVnNaQUJRWVhWelpXUUFTVzUyWVd4cFpDQjNiM0prSUdWdVkyOTFiblJsY21Wa0FFbHVkbUZzYVdRZ2JXVjBhRzlrSUdWdVkyOTFiblJsY21Wa0FGVnVaWGh3WldOMFpXUWdZMmhoY2lCcGJpQjFjbXdnYzJOb1pXMWhBRkpsY1hWbGMzUWdhR0Z6SUdsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUFCVFYwbFVRMGhmVUZKUFdGa0FWVk5GWDFCU1QxaFpBRTFMUVVOVVNWWkpWRmtBVlU1UVVrOURSVk5UUVVKTVJWOUZUbFJKVkZrQVEwOVFXUUJOVDFaRlJGOVFSVkpOUVU1RlRsUk1XUUJVVDA5ZlJVRlNURmtBVGs5VVNVWlpBRVpCU1V4RlJGOUVSVkJGVGtSRlRrTlpBRUpCUkY5SFFWUkZWMEZaQUZCTVFWa0FVRlZVQUVOSVJVTkxUMVZVQUVkQlZFVlhRVmxmVkVsTlJVOVZWQUJTUlZGVlJWTlVYMVJKVFVWUFZWUUFUa1ZVVjA5U1MxOURUMDVPUlVOVVgxUkpUVVZQVlZRQVEwOU9Ua1ZEVkVsUFRsOVVTVTFGVDFWVUFFeFBSMGxPWDFSSlRVVlBWVlFBVGtWVVYwOVNTMTlTUlVGRVgxUkpUVVZQVlZRQVVFOVRWQUJOU1ZORVNWSkZRMVJGUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDB4UFFVUmZRa0ZNUVU1RFJVUmZVa1ZSVlVWVFZBQkNRVVJmVWtWUlZVVlRWQUJJVkZSUVgxSkZVVlZGVTFSZlUwVk9WRjlVVDE5SVZGUlFVMTlRVDFKVUFGSkZVRTlTVkFCSlRWOUJYMVJGUVZCUFZBQlNSVk5GVkY5RFQwNVVSVTVVQUU1UFgwTlBUbFJGVGxRQVVFRlNWRWxCVEY5RFQwNVVSVTVVQUVoUVJWOUpUbFpCVEVsRVgwTlBUbE5VUVU1VUFFaFFSVjlEUWw5U1JWTkZWQUJIUlZRQVNGQkZYMU5VVWtsRFZBQkRUMDVHVEVsRFZBQlVSVTFRVDFKQlVsbGZVa1ZFU1ZKRlExUUFVRVZTVFVGT1JVNVVYMUpGUkVsU1JVTlVBRU5QVGs1RlExUUFUVlZNVkVsZlUxUkJWRlZUQUVoUVJWOUpUbFpCVEVsRVgxTlVRVlJWVXdCVVQwOWZUVUZPV1Y5U1JWRlZSVk5VVXdCRlFWSk1XVjlJU1U1VVV3QlZUa0ZXUVVsTVFVSk1SVjlHVDFKZlRFVkhRVXhmVWtWQlUwOU9Vd0JQVUZSSlQwNVRBRk5YU1ZSRFNFbE9SMTlRVWs5VVQwTlBURk1BVmtGU1NVRk9WRjlCVEZOUFgwNUZSMDlVU1VGVVJWTUFUVlZNVkVsUVRFVmZRMGhQU1VORlV3QkpUbFJGVWs1QlRGOVRSVkpXUlZKZlJWSlNUMUlBVjBWQ1gxTkZVbFpGVWw5VlRrdE9UMWRPWDBWU1VrOVNBRkpCU1V4SFZVNWZSVkpTVDFJQVNVUkZUbFJKVkZsZlVGSlBWa2xFUlZKZlFWVlVTRVZPVkVsRFFWUkpUMDVmUlZKU1QxSUFVMU5NWDBORlVsUkpSa2xEUVZSRlgwVlNVazlTQUVsT1ZrRk1TVVJmV0Y5R1QxSlhRVkpFUlVSZlJrOVNBRk5GVkY5UVFWSkJUVVZVUlZJQVIwVlVYMUJCVWtGTlJWUkZVZ0JJVUVWZlZWTkZVZ0JUUlVWZlQxUklSVklBU0ZCRlgwTkNYME5JVlU1TFgwaEZRVVJGVWdCTlMwTkJURVZPUkVGU0FGTkZWRlZRQUZkRlFsOVRSVkpXUlZKZlNWTmZSRTlYVGdCVVJVRlNSRTlYVGdCSVVFVmZRMHhQVTBWRVgwTlBUazVGUTFSSlQwNEFTRVZWVWtsVFZFbERYMFZZVUVsU1FWUkpUMDRBUkVsVFEwOU9Ua1ZEVkVWRVgwOVFSVkpCVkVsUFRnQk9UMDVmUVZWVVNFOVNTVlJCVkVsV1JWOUpUa1pQVWsxQlZFbFBUZ0JJVUVWZlNVNVdRVXhKUkY5V1JWSlRTVTlPQUVoUVJWOURRbDlOUlZOVFFVZEZYMEpGUjBsT0FGTkpWRVZmU1ZOZlJsSlBXa1ZPQUVoUVJWOUpUbFpCVEVsRVgwaEZRVVJGVWw5VVQwdEZUZ0JKVGxaQlRFbEVYMVJQUzBWT0FFWlBVa0pKUkVSRlRnQkZUa2hCVGtORlgxbFBWVkpmUTBGTVRRQklVRVZmU1U1V1FVeEpSRjlWVWt3QVFreFBRMHRGUkY5Q1dWOVFRVkpGVGxSQlRGOURUMDVVVWs5TUFFMUxRMDlNQUVGRFRBQklVRVZmU1U1VVJWSk9RVXdBVWtWUlZVVlRWRjlJUlVGRVJWSmZSa2xGVEVSVFgxUlBUMTlNUVZKSFJWOVZUazlHUmtsRFNVRk1BRWhRUlY5UFN3QlZUa3hKVGtzQVZVNU1UME5MQUZCU1NRQlNSVlJTV1Y5WFNWUklBRWhRUlY5SlRsWkJURWxFWDBOUFRsUkZUbFJmVEVWT1IxUklBRWhRUlY5VlRrVllVRVZEVkVWRVgwTlBUbFJGVGxSZlRFVk9SMVJJQUVaTVZWTklBRkJTVDFCUVFWUkRTQUJOTFZORlFWSkRTQUJWVWtsZlZFOVBYMHhQVGtjQVVGSlBRMFZUVTBsT1J3Qk5TVk5EUlV4TVFVNUZUMVZUWDFCRlVsTkpVMVJGVGxSZlYwRlNUa2xPUndCTlNWTkRSVXhNUVU1RlQxVlRYMWRCVWs1SlRrY0FTRkJGWDBsT1ZrRk1TVVJmVkZKQlRsTkdSVkpmUlU1RFQwUkpUa2NBUlhod1pXTjBaV1FnUTFKTVJnQklVRVZmU1U1V1FVeEpSRjlEU0ZWT1MxOVRTVnBGQUUxUFZrVUFRMDlPVkVsT1ZVVUFTRkJGWDBOQ1gxTlVRVlJWVTE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNVMTlEVDAxUVRFVlVSUUJJVUVWZlEwSmZWa1ZTVTBsUFRsOURUMDFRVEVWVVJRQklVRVZmUTBKZlZWSk1YME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNYMVpCVEZWRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5RFNGVk9TMTlGV0ZSRlRsTkpUMDVmVmtGTVZVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBWWVZFVk9VMGxQVGw5T1FVMUZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOU5SVk5UUVVkRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5TlJWUklUMFJmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsOUdTVVZNUkY5RFQwMVFURVZVUlFCRVJVeEZWRVVBU0ZCRlgwbE9Wa0ZNU1VSZlJVOUdYMU5VUVZSRkFFbE9Wa0ZNU1VSZlUxTk1YME5GVWxSSlJrbERRVlJGQUZCQlZWTkZBRTVQWDFKRlUxQlBUbE5GQUZWT1UxVlFVRTlTVkVWRVgwMUZSRWxCWDFSWlVFVUFSMDlPUlFCT1QxUmZRVU5EUlZCVVFVSk1SUUJUUlZKV1NVTkZYMVZPUVZaQlNVeEJRa3hGQUZKQlRrZEZYMDVQVkY5VFFWUkpVMFpKUVVKTVJRQlBVa2xIU1U1ZlNWTmZWVTVTUlVGRFNFRkNURVVBVWtWVFVFOU9VMFZmU1ZOZlUxUkJURVVBVUZWU1IwVUFUVVZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmUmtsRlRFUlRYMVJQVDE5TVFWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOVVUMDlmVEVGU1IwVUFVRUZaVEU5QlJGOVVUMDlmVEVGU1IwVUFTVTVUVlVaR1NVTkpSVTVVWDFOVVQxSkJSMFVBU0ZCRlgxQkJWVk5GUkY5VlVFZFNRVVJGQUVoUVJWOVFRVlZUUlVSZlNESmZWVkJIVWtGRVJRQlRUMVZTUTBVQVFVNU9UMVZPUTBVQVZGSkJRMFVBU0ZCRlgxVk9SVmhRUlVOVVJVUmZVMUJCUTBVQVJFVlRRMUpKUWtVQVZVNVRWVUpUUTFKSlFrVUFVa1ZEVDFKRUFFaFFSVjlKVGxaQlRFbEVYMDFGVkVoUFJBQk9UMVJmUms5VlRrUUFVRkpQVUVaSlRrUUFWVTVDU1U1RUFGSkZRa2xPUkFCVlRrRlZWRWhQVWtsYVJVUUFUVVZVU0U5RVgwNVBWRjlCVEV4UFYwVkVBRWhVVkZCZlZrVlNVMGxQVGw5T1QxUmZVMVZRVUU5U1ZFVkVBRUZNVWtWQlJGbGZVa1ZRVDFKVVJVUUFRVU5EUlZCVVJVUUFUazlVWDBsTlVFeEZUVVZPVkVWRUFFeFBUMUJmUkVWVVJVTlVSVVFBU0ZCRlgwTlNYMFZZVUVWRFZFVkVBRWhRUlY5TVJsOUZXRkJGUTFSRlJBQkRVa1ZCVkVWRUFFbE5YMVZUUlVRQVNGQkZYMUJCVlZORlJBQlVTVTFGVDFWVVgwOURRMVZTUlVRQVVFRlpUVVZPVkY5U1JWRlZTVkpGUkFCUVVrVkRUMDVFU1ZSSlQwNWZVa1ZSVlVsU1JVUUFVRkpQV0ZsZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVGtWVVYwOVNTMTlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk1SVTVIVkVoZlVrVlJWVWxTUlVRQVUxTk1YME5GVWxSSlJrbERRVlJGWDFKRlVWVkpVa1ZFQUZWUVIxSkJSRVZmVWtWUlZVbFNSVVFBVUVGSFJWOUZXRkJKVWtWRUFGQlNSVU5QVGtSSlZFbFBUbDlHUVVsTVJVUUFSVmhRUlVOVVFWUkpUMDVmUmtGSlRFVkVBRkpGVmtGTVNVUkJWRWxQVGw5R1FVbE1SVVFBVTFOTVgwaEJUa1JUU0VGTFJWOUdRVWxNUlVRQVRFOURTMFZFQUZSU1FVNVRSazlTVFVGVVNVOU9YMEZRVUV4SlJVUUFUazlVWDAxUFJFbEdTVVZFQUU1UFZGOUZXRlJGVGtSRlJBQkNRVTVFVjBsRVZFaGZURWxOU1ZSZlJWaERSVVZFUlVRQVUwbFVSVjlKVTE5UFZrVlNURTlCUkVWRUFFaEZRVVFBUlhod1pXTjBaV1FnU0ZSVVVDOEFBRjRUQUFBbUV3QUFNQkFBQVBBWEFBQ2RFd0FBRlJJQUFEa1hBQUR3RWdBQUNoQUFBSFVTQUFDdEVnQUFnaE1BQUU4VUFBQi9FQUFBb0JVQUFDTVVBQUNKRWdBQWl4UUFBRTBWQUFEVUVRQUF6eFFBQUJBWUFBREpGZ0FBM0JZQUFNRVJBQURnRndBQXV4UUFBSFFVQUFCOEZRQUE1UlFBQUFnWEFBQWZFQUFBWlJVQUFLTVVBQUFvRlFBQUFoVUFBSmtWQUFBc0VBQUFpeGtBQUU4UEFBRFVEZ0FBYWhBQUFNNFFBQUFDRndBQWlRNEFBRzRUQUFBY0V3QUFaaFFBQUZZWEFBREJFd0FBelJNQUFHd1RBQUJvRndBQVpoY0FBRjhYQUFBaUV3QUF6ZzhBQUdrT0FBRFlEZ0FBWXhZQUFNc1RBQUNxRGdBQUtCY0FBQ1lYQUFERkV3QUFYUllBQU9nUkFBQm5Fd0FBWlJNQUFQSVdBQUJ6RXdBQUhSY0FBUGtXQUFEekVRQUF6dzRBQU00VkFBQU1FZ0FBc3hFQUFLVVJBQUJoRUFBQU1oY0FBTHNUQUVINU5Rc0JBUUJCa0RZTDRBRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQkIvVGNMQVFFQVFaRTRDMTRDQXdJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQVFBQUFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSDlPUXNCQVFCQmtUb0xYZ0lBQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFBd0FFQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQVFmQTdDdzFzYjNObFpXVndMV0ZzYVhabEFFR0pQQXNCQVFCQm9Ed0w0QUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCaVQ0TEFRRUFRYUErQytjQkFRRUJBUUVCQVFFQkFRRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGamFIVnVhMlZrQUVHd3dBQUxYd0VCQUFFQkFRRUJBQUFCQVFBQkFRQUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFBQkFFR1F3Z0FMSVdWamRHbHZibVZ1ZEMxc1pXNW5kR2h2Ym5KdmVIa3RZMjl1Ym1WamRHbHZiZ0JCd01JQUN5MXlZVzV6Wm1WeUxXVnVZMjlrYVc1bmNHZHlZV1JsRFFvTkNnMEtVMDBOQ2cwS1ZGUlFMME5GTDFSVFVDOEFRZm5DQUFzRkFRSUFBUU1BUVpEREFBdmdBUVFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg1eEFBTEJRRUNBQUVEQUVHUXhRQUw0QUVFQVFFRkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NZQUN3UUJBQUFCQUVHUnh3QUwzd0VCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg2eUFBTEJBRUFBQUlBUVpESkFBdGZBd1FBQUFRRUJBUUVCQVFFQkFRRUJRUUVCQVFFQkFRRUJBUUVCQUFFQUFZSEJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUFCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFRQVFmcktBQXNFQVFBQUFRQkJrTXNBQ3dFQkFFR3F5d0FMUVFJQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSDZ6QUFMQkFFQUFBRUFRWkROQUFzQkFRQkJtczBBQ3dZQ0FBQUFBQUlBUWJITkFBczZBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdCQjhNNEFDNVlCVGs5VlRrTkZSVU5MVDFWVVRrVkRWRVZVUlVOU1NVSkZURlZUU0VWVVJVRkVVMFZCVWtOSVVrZEZRMVJKVmtsVVdVeEZUa1JCVWxaRlQxUkpSbGxRVkVsUFRsTkRTRk5GUVZsVFZFRlVRMGhIUlU5U1JFbFNSVU5VVDFKVVVrTklVRUZTUVUxRlZFVlNWVkpEUlVKVFExSkpRa1ZCVWtSUFYwNUJRMFZKVGtST1MwTkxWVUpUUTFKSlFrVklWRlJRTDBGRVZGQXYnLCAnYmFzZTY0JylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzc3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3R6QUNBQVFSQnEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNEQUNBQS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVRCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVNCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUWQwQk5nSWNDd1lBSUFBUU1ndWFMUUVMZnlNQVFSQnJJZ29rQUVHazBBQW9BZ0FpQ1VVRVFFSGswd0FvQWdBaUJVVUVRRUh3MHdCQ2Z6Y0NBRUhvMHdCQ2dJQ0VnSUNBd0FBM0FnQkI1Tk1BSUFwQkNHcEJjSEZCMktyVnFnVnpJZ1UyQWdCQitOTUFRUUEyQWdCQnlOTUFRUUEyQWdBTFFjelRBRUdBMUFRMkFnQkJuTkFBUVlEVUJEWUNBRUd3MEFBZ0JUWUNBRUdzMEFCQmZ6WUNBRUhRMHdCQmdLd0ROZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCak5RRVFjR3JBellDQUVHbzBBQkI5Tk1BS0FJQU5nSUFRWmpRQUVIQXF3TTJBZ0JCcE5BQVFZalVCRFlDQUVITS93ZEJPRFlDQUVHSTFBUWhDUXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUFRZXdCVFFSQVFZelFBQ2dDQUNJR1FSQWdBRUVUYWtGd2NTQUFRUXRKR3lJRVFRTjJJZ0IySWdGQkEzRUVRQUpBSUFGQkFYRWdBSEpCQVhNaUFrRURkQ0lBUWJUUUFHb2lBU0FBUWJ6UUFHb29BZ0FpQUNnQ0NDSURSZ1JBUVl6UUFDQUdRWDRnQW5keE5nSUFEQUVMSUFFZ0F6WUNDQ0FESUFFMkFnd0xJQUJCQ0dvaEFTQUFJQUpCQTNRaUFrRURjallDQkNBQUlBSnFJZ0FnQUNnQ0JFRUJjallDQkF3UkMwR1UwQUFvQWdBaUNDQUVUdzBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQUVFRGRDSUNRYlRRQUdvaUFTQUNRYnpRQUdvb0FnQWlBaWdDQ0NJRFJnUkFRWXpRQUNBR1FYNGdBSGR4SWdZMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBaUFFUVFOeU5nSUVJQUJCQTNRaUFDQUVheUVGSUFBZ0Ftb2dCVFlDQUNBQ0lBUnFJZ1FnQlVFQmNqWUNCQ0FJQkVBZ0NFRjRjVUcwMEFCcUlRQkJvTkFBS0FJQUlRTUNmMEVCSUFoQkEzWjBJZ0VnQm5GRkJFQkJqTkFBSUFFZ0JuSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBTTJBZ3dnQUNBRE5nSUlJQU1nQURZQ0RDQURJQUUyQWdnTElBSkJDR29oQVVHZzBBQWdCRFlDQUVHVTBBQWdCVFlDQUF3UkMwR1EwQUFvQWdBaUMwVU5BU0FMYUVFQ2RFRzgwZ0JxS0FJQUlnQW9BZ1JCZUhFZ0JHc2hCU0FBSVFJRFFBSkFJQUlvQWhBaUFVVUVRQ0FDUVJScUtBSUFJZ0ZGRFFFTElBRW9BZ1JCZUhFZ0JHc2lBeUFGU1NFQ0lBTWdCU0FDR3lFRklBRWdBQ0FDR3lFQUlBRWhBZ3dCQ3dzZ0FDZ0NHQ0VKSUFBb0Fnd2lBeUFBUndSQVFaelFBQ2dDQUJvZ0F5QUFLQUlJSWdFMkFnZ2dBU0FETmdJTURCQUxJQUJCRkdvaUFpZ0NBQ0lCUlFSQUlBQW9BaEFpQVVVTkF5QUFRUkJxSVFJTEEwQWdBaUVISUFFaUEwRVVhaUlDS0FJQUlnRU5BQ0FEUVJCcUlRSWdBeWdDRUNJQkRRQUxJQWRCQURZQ0FBd1BDMEYvSVFRZ0FFRy9mMHNOQUNBQVFSTnFJZ0ZCY0hFaEJFR1EwQUFvQWdBaUNFVU5BRUVBSUFScklRVUNRQUpBQWtBQ2YwRUFJQVJCZ0FKSkRRQWFRUjhnQkVILy8vOEhTdzBBR2lBRVFTWWdBVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxQ3lJR1FRSjBRYnpTQUdvb0FnQWlBa1VFUUVFQUlRRkJBQ0VEREFFTFFRQWhBU0FFUVJrZ0JrRUJkbXRCQUNBR1FSOUhHM1FoQUVFQUlRTURRQUpBSUFJb0FnUkJlSEVnQkdzaUJ5QUZUdzBBSUFJaEF5QUhJZ1VOQUVFQUlRVWdBaUVCREFNTElBRWdBa0VVYWlnQ0FDSUhJQWNnQWlBQVFSMTJRUVJ4YWtFUWFpZ0NBQ0lDUmhzZ0FTQUhHeUVCSUFCQkFYUWhBQ0FDRFFBTEN5QUJJQU55UlFSQVFRQWhBMEVDSUFaMElnQkJBQ0FBYTNJZ0NIRWlBRVVOQXlBQWFFRUNkRUc4MGdCcUtBSUFJUUVMSUFGRkRRRUxBMEFnQVNnQ0JFRjRjU0FFYXlJQ0lBVkpJUUFnQWlBRklBQWJJUVVnQVNBRElBQWJJUU1nQVNnQ0VDSUFCSDhnQUFVZ0FVRVVhaWdDQUFzaUFRMEFDd3NnQTBVTkFDQUZRWlRRQUNnQ0FDQUVhMDhOQUNBREtBSVlJUWNnQXlBREtBSU1JZ0JIQkVCQm5OQUFLQUlBR2lBQUlBTW9BZ2dpQVRZQ0NDQUJJQUEyQWd3TURnc2dBMEVVYWlJQ0tBSUFJZ0ZGQkVBZ0F5Z0NFQ0lCUlEwRElBTkJFR29oQWdzRFFDQUNJUVlnQVNJQVFSUnFJZ0lvQWdBaUFRMEFJQUJCRUdvaEFpQUFLQUlRSWdFTkFBc2dCa0VBTmdJQURBMExRWlRRQUNnQ0FDSURJQVJQQkVCQm9OQUFLQUlBSVFFQ1FDQURJQVJySWdKQkVFOEVRQ0FCSUFScUlnQWdBa0VCY2pZQ0JDQUJJQU5xSUFJMkFnQWdBU0FFUVFOeU5nSUVEQUVMSUFFZ0EwRURjallDQkNBQklBTnFJZ0FnQUNnQ0JFRUJjallDQkVFQUlRQkJBQ0VDQzBHVTBBQWdBallDQUVHZzBBQWdBRFlDQUNBQlFRaHFJUUVNRHd0Qm1OQUFLQUlBSWdNZ0JFc0VRQ0FFSUFscUlnQWdBeUFFYXlJQlFRRnlOZ0lFUWFUUUFDQUFOZ0lBUVpqUUFDQUJOZ0lBSUFrZ0JFRURjallDQkNBSlFRaHFJUUVNRHd0QkFDRUJJQVFDZjBIazB3QW9BZ0FFUUVIczB3QW9BZ0FNQVF0QjhOTUFRbjgzQWdCQjZOTUFRb0NBaElDQWdNQUFOd0lBUWVUVEFDQUtRUXhxUVhCeFFkaXExYW9GY3pZQ0FFSDQwd0JCQURZQ0FFSEkwd0JCQURZQ0FFR0FnQVFMSWdBZ0JFSEhBR29pQldvaUJrRUFJQUJySWdkeElnSlBCRUJCL05NQVFUQTJBZ0FNRHdzQ1FFSEUwd0FvQWdBaUFVVU5BRUc4MHdBb0FnQWlDQ0FDYWlFQUlBQWdBVTBnQUNBSVMzRU5BRUVBSVFGQi9OTUFRVEEyQWdBTUR3dEJ5Tk1BTFFBQVFRUnhEUVFDUUFKQUlBa0VRRUhNMHdBaEFRTkFJQUVvQWdBaUFDQUpUUVJBSUFBZ0FTZ0NCR29nQ1VzTkF3c2dBU2dDQ0NJQkRRQUxDMEVBRURNaUFFRi9SZzBGSUFJaEJrSG8wd0FvQWdBaUFVRUJheUlESUFCeEJFQWdBaUFBYXlBQUlBTnFRUUFnQVd0eGFpRUdDeUFFSUFaUERRVWdCa0grLy8vL0Iwc05CVUhFMHdBb0FnQWlBd1JBUWJ6VEFDZ0NBQ0lISUFacUlRRWdBU0FIVFEwR0lBRWdBMHNOQmdzZ0JoQXpJZ0VnQUVjTkFRd0hDeUFHSUFOcklBZHhJZ1pCL3YvLy93ZExEUVFnQmhBeklRQWdBQ0FCS0FJQUlBRW9BZ1JxUmcwRElBQWhBUXNDUUNBR0lBUkJ5QUJxVHcwQUlBRkJmMFlOQUVIczB3QW9BZ0FpQUNBRklBWnJha0VBSUFCcmNTSUFRZjcvLy84SFN3UkFJQUVoQUF3SEN5QUFFRE5CZjBjRVFDQUFJQVpxSVFZZ0FTRUFEQWNMUVFBZ0Jtc1FNeG9NQkFzZ0FTSUFRWDlIRFFVTUF3dEJBQ0VEREF3TFFRQWhBQXdLQ3lBQVFYOUhEUUlMUWNqVEFFSEkwd0FvQWdCQkJISTJBZ0FMSUFKQi92Ly8vd2RMRFFFZ0FoQXpJUUJCQUJBeklRRWdBRUYvUmcwQklBRkJmMFlOQVNBQUlBRlBEUUVnQVNBQWF5SUdJQVJCT0dwTkRRRUxRYnpUQUVHODB3QW9BZ0FnQm1vaUFUWUNBRUhBMHdBb0FnQWdBVWtFUUVIQTB3QWdBVFlDQUFzQ1FBSkFBa0JCcE5BQUtBSUFJZ0lFUUVITTB3QWhBUU5BSUFBZ0FTZ0NBQ0lESUFFb0FnUWlCV3BHRFFJZ0FTZ0NDQ0lCRFFBTERBSUxRWnpRQUNnQ0FDSUJRUUJISUFBZ0FVOXhSUVJBUVp6UUFDQUFOZ0lBQzBFQUlRRkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkJyTkFBUVg4MkFnQkJzTkFBUWVUVEFDZ0NBRFlDQUVIWTB3QkJBRFlDQUFOQUlBRkJ5TkFBYWlBQlFielFBR29pQWpZQ0FDQUNJQUZCdE5BQWFpSUROZ0lBSUFGQndOQUFhaUFETmdJQUlBRkIwTkFBYWlBQlFjVFFBR29pQXpZQ0FDQURJQUkyQWdBZ0FVSFkwQUJxSUFGQnpOQUFhaUlDTmdJQUlBSWdBellDQUNBQlFkVFFBR29nQWpZQ0FDQUJRU0JxSWdGQmdBSkhEUUFMUVhnZ0FHdEJEM0VpQVNBQWFpSUNJQVpCT0dzaUF5QUJheUlCUVFGeU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQUkyQWdBZ0FDQURha0U0TmdJRURBSUxJQUFnQWswTkFDQUNJQU5KRFFBZ0FTZ0NERUVJY1EwQVFYZ2dBbXRCRDNFaUFDQUNhaUlEUVpqUUFDZ0NBQ0FHYWlJSElBQnJJZ0JCQVhJMkFnUWdBU0FGSUFacU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUEyQWdCQnBOQUFJQU0yQWdBZ0FpQUhha0U0TmdJRURBRUxJQUJCbk5BQUtBSUFTUVJBUVp6UUFDQUFOZ0lBQ3lBQUlBWnFJUU5Cek5NQUlRRUNRQUpBQWtBRFFDQURJQUVvQWdCSEJFQWdBU2dDQ0NJQkRRRU1BZ3NMSUFFdEFBeEJDSEZGRFFFTFFjelRBQ0VCQTBBZ0FTZ0NBQ0lESUFKTkJFQWdBeUFCS0FJRWFpSUZJQUpMRFFNTElBRW9BZ2doQVF3QUN3QUxJQUVnQURZQ0FDQUJJQUVvQWdRZ0JtbzJBZ1FnQUVGNElBQnJRUTl4YWlJSklBUkJBM0kyQWdRZ0EwRjRJQU5yUVE5eGFpSUdJQVFnQ1dvaUJHc2hBU0FDSUFaR0JFQkJwTkFBSUFRMkFnQkJtTkFBUVpqUUFDZ0NBQ0FCYWlJQU5nSUFJQVFnQUVFQmNqWUNCQXdJQzBHZzBBQW9BZ0FnQmtZRVFFR2cwQUFnQkRZQ0FFR1UwQUJCbE5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVJQUFnQkdvZ0FEWUNBQXdJQ3lBR0tBSUVJZ1ZCQTNGQkFVY05CaUFGUVhoeElRZ2dCVUgvQVUwRVFDQUZRUU4ySVFNZ0JpZ0NDQ0lBSUFZb0Fnd2lBa1lFUUVHTTBBQkJqTkFBS0FJQVFYNGdBM2R4TmdJQURBY0xJQUlnQURZQ0NDQUFJQUkyQWd3TUJnc2dCaWdDR0NFSElBWWdCaWdDRENJQVJ3UkFJQUFnQmlnQ0NDSUNOZ0lJSUFJZ0FEWUNEQXdGQ3lBR1FSUnFJZ0lvQWdBaUJVVUVRQ0FHS0FJUUlnVkZEUVFnQmtFUWFpRUNDd05BSUFJaEF5QUZJZ0JCRkdvaUFpZ0NBQ0lGRFFBZ0FFRVFhaUVDSUFBb0FoQWlCUTBBQ3lBRFFRQTJBZ0FNQkF0QmVDQUFhMEVQY1NJQklBQnFJZ2NnQmtFNGF5SURJQUZySWdGQkFYSTJBZ1FnQUNBRGFrRTROZ0lFSUFJZ0JVRTNJQVZyUVE5eGFrRS9heUlESUFNZ0FrRVFha2tiSWdOQkl6WUNCRUdvMEFCQjlOTUFLQUlBTmdJQVFaalFBQ0FCTmdJQVFhVFFBQ0FITmdJQUlBTkJFR3BCMU5NQUtRSUFOd0lBSUFOQnpOTUFLUUlBTndJSVFkVFRBQ0FEUVFocU5nSUFRZERUQUNBR05nSUFRY3pUQUNBQU5nSUFRZGpUQUVFQU5nSUFJQU5CSkdvaEFRTkFJQUZCQnpZQ0FDQUZJQUZCQkdvaUFVc05BQXNnQWlBRFJnMEFJQU1nQXlnQ0JFRitjVFlDQkNBRElBTWdBbXNpQlRZQ0FDQUNJQVZCQVhJMkFnUWdCVUgvQVUwRVFDQUZRWGh4UWJUUUFHb2hBQUovUVl6UUFDZ0NBQ0lCUVFFZ0JVRURkblFpQTNGRkJFQkJqTkFBSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBSTJBZ3dnQUNBQ05nSUlJQUlnQURZQ0RDQUNJQUUyQWdnTUFRdEJIeUVCSUFWQi8vLy9CMDBFUUNBRlFTWWdCVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFFTElBSWdBVFlDSENBQ1FnQTNBaEFnQVVFQ2RFRzgwZ0JxSVFCQmtOQUFLQUlBSWdOQkFTQUJkQ0lHY1VVRVFDQUFJQUkyQWdCQmtOQUFJQU1nQm5JMkFnQWdBaUFBTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQVFzZ0JVRVpJQUZCQVhaclFRQWdBVUVmUnh0MElRRWdBQ2dDQUNFREFrQURRQ0FESWdBb0FnUkJlSEVnQlVZTkFTQUJRUjEySVFNZ0FVRUJkQ0VCSUFBZ0EwRUVjV3BCRUdvaUJpZ0NBQ0lERFFBTElBWWdBallDQUNBQ0lBQTJBaGdnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFBS0FJSUlnRWdBallDRENBQUlBSTJBZ2dnQWtFQU5nSVlJQUlnQURZQ0RDQUNJQUUyQWdnTFFaalFBQ2dDQUNJQklBUk5EUUJCcE5BQUtBSUFJZ0FnQkdvaUFpQUJJQVJySWdGQkFYSTJBZ1JCbU5BQUlBRTJBZ0JCcE5BQUlBSTJBZ0FnQUNBRVFRTnlOZ0lFSUFCQkNHb2hBUXdJQzBFQUlRRkIvTk1BUVRBMkFnQU1Cd3RCQUNFQUN5QUhSUTBBQWtBZ0JpZ0NIQ0lDUVFKMFFielNBR29pQXlnQ0FDQUdSZ1JBSUFNZ0FEWUNBQ0FBRFFGQmtOQUFRWkRRQUNnQ0FFRitJQUozY1RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFaR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFjMkFoZ2dCaWdDRUNJQ0JFQWdBQ0FDTmdJUUlBSWdBRFlDR0FzZ0JrRVVhaWdDQUNJQ1JRMEFJQUJCRkdvZ0FqWUNBQ0FDSUFBMkFoZ0xJQUVnQ0dvaEFTQUdJQWhxSWdZb0FnUWhCUXNnQmlBRlFYNXhOZ0lFSUFFZ0JHb2dBVFlDQUNBRUlBRkJBWEkyQWdRZ0FVSC9BVTBFUUNBQlFYaHhRYlRRQUdvaEFBSi9RWXpRQUNnQ0FDSUNRUUVnQVVFRGRuUWlBWEZGQkVCQmpOQUFJQUVnQW5JMkFnQWdBQXdCQ3lBQUtBSUlDeUlCSUFRMkFnd2dBQ0FFTmdJSUlBUWdBRFlDRENBRUlBRTJBZ2dNQVF0Qkh5RUZJQUZCLy8vL0IwMEVRQ0FCUVNZZ0FVRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUVVMSUFRZ0JUWUNIQ0FFUWdBM0FoQWdCVUVDZEVHODBnQnFJUUJCa05BQUtBSUFJZ0pCQVNBRmRDSURjVVVFUUNBQUlBUTJBZ0JCa05BQUlBSWdBM0kyQWdBZ0JDQUFOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01BUXNnQVVFWklBVkJBWFpyUVFBZ0JVRWZSeHQwSVFVZ0FDZ0NBQ0VBQWtBRFFDQUFJZ0lvQWdSQmVIRWdBVVlOQVNBRlFSMTJJUUFnQlVFQmRDRUZJQUlnQUVFRWNXcEJFR29pQXlnQ0FDSUFEUUFMSUFNZ0JEWUNBQ0FFSUFJMkFoZ2dCQ0FFTmdJTUlBUWdCRFlDQ0F3QkN5QUNLQUlJSWdBZ0JEWUNEQ0FDSUFRMkFnZ2dCRUVBTmdJWUlBUWdBallDRENBRUlBQTJBZ2dMSUFsQkNHb2hBUXdDQ3dKQUlBZEZEUUFDUUNBREtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBTkdCRUFnQWlBQU5nSUFJQUFOQVVHUTBBQWdDRUYrSUFGM2NTSUlOZ0lBREFJTElBZEJFRUVVSUFjb0FoQWdBMFliYWlBQU5nSUFJQUJGRFFFTElBQWdCellDR0NBREtBSVFJZ0VFUUNBQUlBRTJBaEFnQVNBQU5nSVlDeUFEUVJScUtBSUFJZ0ZGRFFBZ0FFRVVhaUFCTmdJQUlBRWdBRFlDR0FzQ1FDQUZRUTlOQkVBZ0F5QUVJQVZxSWdCQkEzSTJBZ1FnQUNBRGFpSUFJQUFvQWdSQkFYSTJBZ1FNQVFzZ0F5QUVhaUlDSUFWQkFYSTJBZ1FnQXlBRVFRTnlOZ0lFSUFJZ0JXb2dCVFlDQUNBRlFmOEJUUVJBSUFWQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnRkJBU0FGUVFOMmRDSUZjVVVFUUVHTTBBQWdBU0FGY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQWpZQ0RDQUFJQUkyQWdnZ0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRRWdCVUgvLy84SFRRUkFJQVZCSmlBRlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBUXNnQWlBQk5nSWNJQUpDQURjQ0VDQUJRUUowUWJ6U0FHb2hBRUVCSUFGMElnUWdDSEZGQkVBZ0FDQUNOZ0lBUVpEUUFDQUVJQWh5TmdJQUlBSWdBRFlDR0NBQ0lBSTJBZ2dnQWlBQ05nSU1EQUVMSUFWQkdTQUJRUUYyYTBFQUlBRkJIMGNiZENFQklBQW9BZ0FoQkFKQUEwQWdCQ0lBS0FJRVFYaHhJQVZHRFFFZ0FVRWRkaUVFSUFGQkFYUWhBU0FBSUFSQkJIRnFRUkJxSWdZb0FnQWlCQTBBQ3lBR0lBSTJBZ0FnQWlBQU5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFRc2dBQ2dDQ0NJQklBSTJBZ3dnQUNBQ05nSUlJQUpCQURZQ0dDQUNJQUEyQWd3Z0FpQUJOZ0lJQ3lBRFFRaHFJUUVNQVFzQ1FDQUpSUTBBQWtBZ0FDZ0NIQ0lCUVFKMFFielNBR29pQWlnQ0FDQUFSZ1JBSUFJZ0F6WUNBQ0FERFFGQmtOQUFJQXRCZmlBQmQzRTJBZ0FNQWdzZ0NVRVFRUlFnQ1NnQ0VDQUFSaHRxSUFNMkFnQWdBMFVOQVFzZ0F5QUpOZ0lZSUFBb0FoQWlBUVJBSUFNZ0FUWUNFQ0FCSUFNMkFoZ0xJQUJCRkdvb0FnQWlBVVVOQUNBRFFSUnFJQUUyQWdBZ0FTQUROZ0lZQ3dKQUlBVkJEMDBFUUNBQUlBUWdCV29pQVVFRGNqWUNCQ0FBSUFGcUlnRWdBU2dDQkVFQmNqWUNCQXdCQ3lBQUlBUnFJZ2NnQlVFQmNqWUNCQ0FBSUFSQkEzSTJBZ1FnQlNBSGFpQUZOZ0lBSUFnRVFDQUlRWGh4UWJUUUFHb2hBVUdnMEFBb0FnQWhBd0ovUVFFZ0NFRURkblFpQWlBR2NVVUVRRUdNMEFBZ0FpQUdjallDQUNBQkRBRUxJQUVvQWdnTElnSWdBellDRENBQklBTTJBZ2dnQXlBQk5nSU1JQU1nQWpZQ0NBdEJvTkFBSUFjMkFnQkJsTkFBSUFVMkFnQUxJQUJCQ0dvaEFRc2dDa0VRYWlRQUlBRUxRd0FnQUVVRVFEOEFRUkIwRHdzQ1FDQUFRZi8vQTNFTkFDQUFRUUJJRFFBZ0FFRVFka0FBSWdCQmYwWUVRRUg4MHdCQk1EWUNBRUYvRHdzZ0FFRVFkQThMQUFzTDNEOGlBRUdBQ0FzSkFRQUFBQUlBQUFBREFFR1VDQXNGQkFBQUFBVUFRYVFJQ3drR0FBQUFCd0FBQUFnQVFkd0lDNG90U1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCeGRXVnllUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMkp2WkhrQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnYjNabGNtWnNiM2NBUTJoMWJtc2djMmw2WlNCdmRtVnlabXh2ZHdCU1pYTndiMjV6WlNCdmRtVnlabXh2ZHdCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1NGUlVVQzk0TG5nZ2NtVnhkV1Z6ZEFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1VsUlRVQzk0TG5nZ2NtVnhkV1Z6ZEFCRmVIQmxZM1JsWkNCVFQxVlNRMFVnYldWMGFHOWtJR1p2Y2lCSlEwVXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCbWNtRm5iV1Z1ZENCemRHRnlkQUJGZUhCbFkzUmxaQ0JrYjNRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5emRHRjBkWE1BU1c1MllXeHBaQ0J5WlhOd2IyNXpaU0J6ZEdGMGRYTUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjd0JWYzJWeUlHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXlaWE5sZEdBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJobFlXUmxjbUFnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGMzTmhaMlZmWW1WbmFXNWdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkWEpzWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBRlZ1Wlhod1pXTjBaV1FnWTJoaGNpQnBiaUIxY213Z2MyVnlkbVZ5QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFpoYkhWbElHTm9ZWElBU1c1MllXeHBaQ0JvWldGa1pYSWdabWxsYkdRZ1kyaGhjZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1psY25OcGIyNEFTVzUyWVd4cFpDQnRhVzV2Y2lCMlpYSnphVzl1QUVsdWRtRnNhV1FnYldGcWIzSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUIyWlhKemFXOXVBRVY0Y0dWamRHVmtJRU5TVEVZZ1lXWjBaWElnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRWhVVkZBZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUdobFlXUmxjaUIwYjJ0bGJnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzVnliQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjbk1nYVc0Z2RYSnNBRlZ1Wlhod1pXTjBaV1FnYzNSaGNuUWdZMmhoY2lCcGJpQjFjbXdBUkc5MVlteGxJRUFnYVc0Z2RYSnNBRVZ0Y0hSNUlFTnZiblJsYm5RdFRHVnVaM1JvQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlFTnZiblJsYm5RdFRHVnVaM1JvQUVSMWNHeHBZMkYwWlNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhCaGRHZ0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ1kyRnVKM1FnWW1VZ2NISmxjMlZ1ZENCM2FYUm9JRlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJSE5wZW1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCMllXeDFaUUJOYVhOemFXNW5JR1Y0Y0dWamRHVmtJRXhHSUdGbWRHVnlJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBZ2FHVmhaR1Z5SUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVWdkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QnhkVzkwWldRZ2RtRnNkV1VBVUdGMWMyVmtJR0o1SUc5dVgyaGxZV1JsY25OZlkyOXRjR3hsZEdVQVNXNTJZV3hwWkNCRlQwWWdjM1JoZEdVQWIyNWZjbVZ6WlhRZ2NHRjFjMlVBYjI1ZlkyaDFibXRmYUdWaFpHVnlJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZbVZuYVc0Z2NHRjFjMlVBYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxJSEJoZFhObEFHOXVYM04wWVhSMWMxOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzVnliRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbElIQmhkWE5sQUZWdVpYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdjM1JoY25RZ2JHbHVaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2JtRnRaUUJRWVhWelpTQnZiaUJEVDA1T1JVTlVMMVZ3WjNKaFpHVUFVR0YxYzJVZ2IyNGdVRkpKTDFWd1ozSmhaR1VBUlhod1pXTjBaV1FnU0ZSVVVDOHlJRU52Ym01bFkzUnBiMjRnVUhKbFptRmpaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMjFsZEdodlpBQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUJ0WlhSb2IyUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZlptbGxiR1FBVUdGMWMyVmtBRWx1ZG1Gc2FXUWdkMjl5WkNCbGJtTnZkVzUwWlhKbFpBQkpiblpoYkdsa0lHMWxkR2h2WkNCbGJtTnZkVzUwWlhKbFpBQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhOamFHVnRZUUJTWlhGMVpYTjBJR2hoY3lCcGJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBQVUxZEpWRU5JWDFCU1QxaFpBRlZUUlY5UVVrOVlXUUJOUzBGRFZFbFdTVlJaQUZWT1VGSlBRMFZUVTBGQ1RFVmZSVTVVU1ZSWkFFTlBVRmtBVFU5V1JVUmZVRVZTVFVGT1JVNVVURmtBVkU5UFgwVkJVa3haQUU1UFZFbEdXUUJHUVVsTVJVUmZSRVZRUlU1RVJVNURXUUJDUVVSZlIwRlVSVmRCV1FCUVRFRlpBRkJWVkFCRFNFVkRTMDlWVkFCSFFWUkZWMEZaWDFSSlRVVlBWVlFBVWtWUlZVVlRWRjlVU1UxRlQxVlVBRTVGVkZkUFVrdGZRMDlPVGtWRFZGOVVTVTFGVDFWVUFFTlBUazVGUTFSSlQwNWZWRWxOUlU5VlZBQk1UMGRKVGw5VVNVMUZUMVZVQUU1RlZGZFBVa3RmVWtWQlJGOVVTVTFGVDFWVUFGQlBVMVFBVFVsVFJFbFNSVU5VUlVSZlVrVlJWVVZUVkFCRFRFbEZUbFJmUTB4UFUwVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5TVQwRkVYMEpCVEVGT1EwVkVYMUpGVVZWRlUxUUFRa0ZFWDFKRlVWVkZVMVFBU0ZSVVVGOVNSVkZWUlZOVVgxTkZUbFJmVkU5ZlNGUlVVRk5mVUU5U1ZBQlNSVkJQVWxRQVNVMWZRVjlVUlVGUVQxUUFVa1ZUUlZSZlEwOU9WRVZPVkFCT1QxOURUMDVVUlU1VUFGQkJVbFJKUVV4ZlEwOU9WRVZPVkFCSVVFVmZTVTVXUVV4SlJGOURUMDVUVkVGT1ZBQklVRVZmUTBKZlVrVlRSVlFBUjBWVUFFaFFSVjlUVkZKSlExUUFRMDlPUmt4SlExUUFWRVZOVUU5U1FWSlpYMUpGUkVsU1JVTlVBRkJGVWsxQlRrVk9WRjlTUlVSSlVrVkRWQUJEVDA1T1JVTlVBRTFWVEZSSlgxTlVRVlJWVXdCSVVFVmZTVTVXUVV4SlJGOVRWRUZVVlZNQVZFOVBYMDFCVGxsZlVrVlJWVVZUVkZNQVJVRlNURmxmU0VsT1ZGTUFWVTVCVmtGSlRFRkNURVZmUms5U1gweEZSMEZNWDFKRlFWTlBUbE1BVDFCVVNVOU9Vd0JUVjBsVVEwaEpUa2RmVUZKUFZFOURUMHhUQUZaQlVrbEJUbFJmUVV4VFQxOU9SVWRQVkVsQlZFVlRBRTFWVEZSSlVFeEZYME5JVDBsRFJWTUFTVTVVUlZKT1FVeGZVMFZTVmtWU1gwVlNVazlTQUZkRlFsOVRSVkpXUlZKZlZVNUxUazlYVGw5RlVsSlBVZ0JTUVVsTVIxVk9YMFZTVWs5U0FFbEVSVTVVU1ZSWlgxQlNUMVpKUkVWU1gwRlZWRWhGVGxSSlEwRlVTVTlPWDBWU1VrOVNBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOUZVbEpQVWdCSlRsWkJURWxFWDFoZlJrOVNWMEZTUkVWRVgwWlBVZ0JUUlZSZlVFRlNRVTFGVkVWU0FFZEZWRjlRUVZKQlRVVlVSVklBU0ZCRlgxVlRSVklBVTBWRlgwOVVTRVZTQUVoUVJWOURRbDlEU0ZWT1MxOUlSVUZFUlZJQVRVdERRVXhGVGtSQlVnQlRSVlJWVUFCWFJVSmZVMFZTVmtWU1gwbFRYMFJQVjA0QVZFVkJVa1JQVjA0QVNGQkZYME5NVDFORlJGOURUMDVPUlVOVVNVOU9BRWhGVlZKSlUxUkpRMTlGV0ZCSlVrRlVTVTlPQUVSSlUwTlBUazVGUTFSRlJGOVBVRVZTUVZSSlQwNEFUazlPWDBGVlZFaFBVa2xVUVZSSlZrVmZTVTVHVDFKTlFWUkpUMDRBU0ZCRlgwbE9Wa0ZNU1VSZlZrVlNVMGxQVGdCSVVFVmZRMEpmVFVWVFUwRkhSVjlDUlVkSlRnQlRTVlJGWDBsVFgwWlNUMXBGVGdCSVVFVmZTVTVXUVV4SlJGOUlSVUZFUlZKZlZFOUxSVTRBU1U1V1FVeEpSRjlVVDB0RlRnQkdUMUpDU1VSRVJVNEFSVTVJUVU1RFJWOVpUMVZTWDBOQlRFMEFTRkJGWDBsT1ZrRk1TVVJmVlZKTUFFSk1UME5MUlVSZlFsbGZVRUZTUlU1VVFVeGZRMDlPVkZKUFRBQk5TME5QVEFCQlEwd0FTRkJGWDBsT1ZFVlNUa0ZNQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVmZWVTVQUmtaSlEwbEJUQUJJVUVWZlQwc0FWVTVNU1U1TEFGVk9URTlEU3dCUVVra0FVa1ZVVWxsZlYwbFVTQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJJVUVWZlZVNUZXRkJGUTFSRlJGOURUMDVVUlU1VVgweEZUa2RVU0FCR1RGVlRTQUJRVWs5UVVFRlVRMGdBVFMxVFJVRlNRMGdBVlZKSlgxUlBUMTlNVDA1SEFGQlNUME5GVTFOSlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5UVJWSlRTVk5VUlU1VVgxZEJVazVKVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlYUVZKT1NVNUhBRWhRUlY5SlRsWkJURWxFWDFSU1FVNVRSa1ZTWDBWT1EwOUVTVTVIQUVWNGNHVmpkR1ZrSUVOU1RFWUFTRkJGWDBsT1ZrRk1TVVJmUTBoVlRrdGZVMGxhUlFCTlQxWkZBRU5QVGxSSlRsVkZBRWhRUlY5RFFsOVRWRUZVVlZOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbE5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVpGVWxOSlQwNWZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxVlNURjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDFaQlRGVkZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RldGUkZUbE5KVDA1ZlRrRk5SVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZUVTBGSFJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlVTRTlFWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZSa2xGVEVSZlEwOU5VRXhGVkVVQVJFVk1SVlJGQUVoUVJWOUpUbFpCVEVsRVgwVlBSbDlUVkVGVVJRQkpUbFpCVEVsRVgxTlRURjlEUlZKVVNVWkpRMEZVUlFCUVFWVlRSUUJPVDE5U1JWTlFUMDVUUlFCVlRsTlZVRkJQVWxSRlJGOU5SVVJKUVY5VVdWQkZBRWRQVGtVQVRrOVVYMEZEUTBWUVZFRkNURVVBVTBWU1ZrbERSVjlWVGtGV1FVbE1RVUpNUlFCU1FVNUhSVjlPVDFSZlUwRlVTVk5HU1VGQ1RFVUFUMUpKUjBsT1gwbFRYMVZPVWtWQlEwaEJRa3hGQUZKRlUxQlBUbE5GWDBsVFgxTlVRVXhGQUZCVlVrZEZBRTFGVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFVBVWtWUlZVVlRWRjlJUlVGRVJWSmZWRTlQWDB4QlVrZEZBRkJCV1V4UFFVUmZWRTlQWDB4QlVrZEZBRWxPVTFWR1JrbERTVVZPVkY5VFZFOVNRVWRGQUVoUVJWOVFRVlZUUlVSZlZWQkhVa0ZFUlFCSVVFVmZVRUZWVTBWRVgwZ3lYMVZRUjFKQlJFVUFVMDlWVWtORkFFRk9UazlWVGtORkFGUlNRVU5GQUVoUVJWOVZUa1ZZVUVWRFZFVkVYMU5RUVVORkFFUkZVME5TU1VKRkFGVk9VMVZDVTBOU1NVSkZBRkpGUTA5U1JBQklVRVZmU1U1V1FVeEpSRjlOUlZSSVQwUUFUazlVWDBaUFZVNUVBRkJTVDFCR1NVNUVBRlZPUWtsT1JBQlNSVUpKVGtRQVZVNUJWVlJJVDFKSldrVkVBRTFGVkVoUFJGOU9UMVJmUVV4TVQxZEZSQUJJVkZSUVgxWkZVbE5KVDA1ZlRrOVVYMU5WVUZCUFVsUkZSQUJCVEZKRlFVUlpYMUpGVUU5U1ZFVkVBRUZEUTBWUVZFVkVBRTVQVkY5SlRWQk1SVTFGVGxSRlJBQk1UMDlRWDBSRlZFVkRWRVZFQUVoUVJWOURVbDlGV0ZCRlExUkZSQUJJVUVWZlRFWmZSVmhRUlVOVVJVUUFRMUpGUVZSRlJBQkpUVjlWVTBWRUFFaFFSVjlRUVZWVFJVUUFWRWxOUlU5VlZGOVBRME5WVWtWRUFGQkJXVTFGVGxSZlVrVlJWVWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMUpGVVZWSlVrVkVBRkJTVDFoWlgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUU1RlZGZFBVa3RmUVZWVVNFVk9WRWxEUVZSSlQwNWZVa1ZSVlVsU1JVUUFURVZPUjFSSVgxSkZVVlZKVWtWRUFGTlRURjlEUlZKVVNVWkpRMEZVUlY5U1JWRlZTVkpGUkFCVlVFZFNRVVJGWDFKRlVWVkpVa1ZFQUZCQlIwVmZSVmhRU1ZKRlJBQlFVa1ZEVDA1RVNWUkpUMDVmUmtGSlRFVkVBRVZZVUVWRFZFRlVTVTlPWDBaQlNVeEZSQUJTUlZaQlRFbEVRVlJKVDA1ZlJrRkpURVZFQUZOVFRGOUlRVTVFVTBoQlMwVmZSa0ZKVEVWRUFFeFBRMHRGUkFCVVVrRk9VMFpQVWsxQlZFbFBUbDlCVUZCTVNVVkVBRTVQVkY5TlQwUkpSa2xGUkFCT1QxUmZSVmhVUlU1RVJVUUFRa0ZPUkZkSlJGUklYMHhKVFVsVVgwVllRMFZGUkVWRUFGTkpWRVZmU1ZOZlQxWkZVa3hQUVVSRlJBQklSVUZFQUVWNGNHVmpkR1ZrSUVoVVZGQXZBQUJlRXdBQUpoTUFBREFRQUFEd0Z3QUFuUk1BQUJVU0FBQTVGd0FBOEJJQUFBb1FBQUIxRWdBQXJSSUFBSUlUQUFCUEZBQUFmeEFBQUtBVkFBQWpGQUFBaVJJQUFJc1VBQUJORlFBQTFCRUFBTThVQUFBUUdBQUF5UllBQU53V0FBREJFUUFBNEJjQUFMc1VBQUIwRkFBQWZCVUFBT1VVQUFBSUZ3QUFIeEFBQUdVVkFBQ2pGQUFBS0JVQUFBSVZBQUNaRlFBQUxCQUFBSXNaQUFCUER3QUExQTRBQUdvUUFBRE9FQUFBQWhjQUFJa09BQUJ1RXdBQUhCTUFBR1lVQUFCV0Z3QUF3Uk1BQU0wVEFBQnNFd0FBYUJjQUFHWVhBQUJmRndBQUloTUFBTTRQQUFCcERnQUEyQTRBQUdNV0FBRExFd0FBcWc0QUFDZ1hBQUFtRndBQXhSTUFBRjBXQUFEb0VRQUFaeE1BQUdVVEFBRHlGZ0FBY3hNQUFCMFhBQUQ1RmdBQTh4RUFBTThPQUFET0ZRQUFEQklBQUxNUkFBQ2xFUUFBWVJBQUFESVhBQUM3RXdCQitUVUxBUUVBUVpBMkMrQUJBUUVDQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFRZjAzQ3dFQkFFR1JPQXRlQWdNQ0FnSUNBZ0FBQWdJQUFnSUFBZ0lDQWdJQ0FnSUNBZ0FFQUFBQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFJQUFnQkIvVGtMQVFFQVFaRTZDMTRDQUFJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQU1BQkFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSHdPd3NOYkc5elpXVmxjQzFoYkdsMlpRQkJpVHdMQVFFQVFhQThDK0FCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUVlrK0N3RUJBRUdnUGd2bkFRRUJBUUVCQVFFQkFRRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQlkyaDFibXRsWkFCQnNNQUFDMThCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQkJrTUlBQ3lGbFkzUnBiMjVsYm5RdGJHVnVaM1JvYjI1eWIzaDVMV052Ym01bFkzUnBiMjRBUWNEQ0FBc3RjbUZ1YzJabGNpMWxibU52WkdsdVozQm5jbUZrWlEwS0RRb05DbE5ORFFvTkNsUlVVQzlEUlM5VVUxQXZBRUg1d2dBTEJRRUNBQUVEQUVHUXd3QUw0QUVFQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NRQUN3VUJBZ0FCQXdCQmtNVUFDK0FCQkFFQkJRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUWZuR0FBc0VBUUFBQVFCQmtjY0FDOThCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK3NnQUN3UUJBQUFDQUVHUXlRQUxYd01FQUFBRUJBUUVCQVFFQkFRRUJBVUVCQVFFQkFRRUJBUUVCQVFBQkFBR0J3UUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUFFSDZ5Z0FMQkFFQUFBRUFRWkRMQUFzQkFRQkJxc3NBQzBFQ0FBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QkIrc3dBQ3dRQkFBQUJBRUdRelFBTEFRRUFRWnJOQUFzR0FnQUFBQUFDQUVHeHpRQUxPZ01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQVFmRE9BQXVXQVU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09JywgJ2Jhc2U2NCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ0dFVCcsICdIRUFEJywgJ1BPU1QnXSlcbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCA9IG5ldyBTZXQoY29yc1NhZmVMaXN0ZWRNZXRob2RzKVxuXG5jb25zdCBudWxsQm9keVN0YXR1cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbMTAxLCAyMDQsIDIwNSwgMzA0XSlcblxuY29uc3QgcmVkaXJlY3RTdGF0dXMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XSlcbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNibG9jay1iYWQtcG9ydFxuICovXG5jb25zdCBiYWRQb3J0cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcxJywgJzcnLCAnOScsICcxMScsICcxMycsICcxNScsICcxNycsICcxOScsICcyMCcsICcyMScsICcyMicsICcyMycsICcyNScsICczNycsICc0MicsICc0MycsICc1MycsICc2OScsICc3NycsICc3OScsXG4gICc4NycsICc5NScsICcxMDEnLCAnMTAyJywgJzEwMycsICcxMDQnLCAnMTA5JywgJzExMCcsICcxMTEnLCAnMTEzJywgJzExNScsICcxMTcnLCAnMTE5JywgJzEyMycsICcxMzUnLCAnMTM3JyxcbiAgJzEzOScsICcxNDMnLCAnMTYxJywgJzE3OScsICczODknLCAnNDI3JywgJzQ2NScsICc1MTInLCAnNTEzJywgJzUxNCcsICc1MTUnLCAnNTI2JywgJzUzMCcsICc1MzEnLCAnNTMyJyxcbiAgJzU0MCcsICc1NDgnLCAnNTU0JywgJzU1NicsICc1NjMnLCAnNTg3JywgJzYwMScsICc2MzYnLCAnOTg5JywgJzk5MCcsICc5OTMnLCAnOTk1JywgJzE3MTknLCAnMTcyMCcsICcxNzIzJyxcbiAgJzIwNDknLCAnMzY1OScsICc0MDQ1JywgJzQxOTAnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY3OScsXG4gICc2Njk3JywgJzEwMDgwJ1xuXSlcbmNvbnN0IGJhZFBvcnRzU2V0ID0gbmV3IFNldChiYWRQb3J0cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY2llc1xuICovXG5jb25zdCByZWZlcnJlclBvbGljeSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcnLFxuICAnbm8tcmVmZXJyZXInLFxuICAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnLFxuICAnc2FtZS1vcmlnaW4nLFxuICAnb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4nLFxuICAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAndW5zYWZlLXVybCdcbl0pXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ2ZvbGxvdycsICdtYW51YWwnLCAnZXJyb3InXSlcblxuY29uc3Qgc2FmZU1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10pXG5jb25zdCBzYWZlTWV0aG9kc1NldCA9IG5ldyBTZXQoc2FmZU1ldGhvZHMpXG5cbmNvbnN0IHJlcXVlc3RNb2RlID0gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFsnbmF2aWdhdGUnLCAnc2FtZS1vcmlnaW4nLCAnbm8tY29ycycsICdjb3JzJ10pXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ29taXQnLCAnc2FtZS1vcmlnaW4nLCAnaW5jbHVkZSddKVxuXG5jb25zdCByZXF1ZXN0Q2FjaGUgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtYm9keS1oZWFkZXItbmFtZVxuICovXG5jb25zdCByZXF1ZXN0Qm9keUhlYWRlciA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LXR5cGUnLFxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMjFcbiAgLy8gJ0NvbnRlbnQtTGVuZ3RoJyBpcyBhIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgd2hpY2ggaXMgdHlwaWNhbGx5XG4gIC8vIHJlbW92ZWQgaW4gdGhlIEhlYWRlcnMgaW1wbGVtZW50YXRpb24uIEhvd2V2ZXIsIHVuZGljaSBkb2Vzbid0XG4gIC8vIGZpbHRlciBvdXQgaGVhZGVycywgc28gd2UgYWRkIGl0IGhlcmUuXG4gICdjb250ZW50LWxlbmd0aCdcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZW51bWRlZi1yZXF1ZXN0ZHVwbGV4XG4gKi9cbmNvbnN0IHJlcXVlc3REdXBsZXggPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnaGFsZidcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG4gKi9cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ10pXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzU2V0ID0gbmV3IFNldChmb3JiaWRkZW5NZXRob2RzKVxuXG5jb25zdCBzdWJyZXNvdXJjZSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdhdWRpbycsXG4gICdhdWRpb3dvcmtsZXQnLFxuICAnZm9udCcsXG4gICdpbWFnZScsXG4gICdtYW5pZmVzdCcsXG4gICdwYWludHdvcmtsZXQnLFxuICAnc2NyaXB0JyxcbiAgJ3N0eWxlJyxcbiAgJ3RyYWNrJyxcbiAgJ3ZpZGVvJyxcbiAgJ3hzbHQnLFxuICAnJ1xuXSlcbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN1YnJlc291cmNlLFxuICBmb3JiaWRkZW5NZXRob2RzLFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZWRpcmVjdFN0YXR1cyxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzLFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHMsXG4gIGJhZFBvcnRzLFxuICByZXF1ZXN0RHVwbGV4LFxuICBzdWJyZXNvdXJjZVNldCxcbiAgYmFkUG9ydHNTZXQsXG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHNhZmVNZXRob2RzU2V0LFxuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeVNldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsIGluY3JlYXNlIHRoZSB2ZXJzaW9uXG4vLyBudW1iZXIgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsT3JpZ2luID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbE9yaWdpbi4xJylcblxuZnVuY3Rpb24gZ2V0R2xvYmFsT3JpZ2luICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsT3JpZ2luXVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxPcmlnaW4gKG5ld09yaWdpbikge1xuICBpZiAobmV3T3JpZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG5ld09yaWdpbilcblxuICBpZiAocGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cDonICYmIHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IGh0dHAgJiBodHRwcyB1cmxzIGFyZSBhbGxvd2VkLCByZWNlaXZlZCAke3BhcnNlZFVSTC5wcm90b2NvbH1gKVxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgIHZhbHVlOiBwYXJzZWRVUkwsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0R2xvYmFsT3JpZ2luLFxuICBzZXRHbG9iYWxPcmlnaW5cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorXFwtLl5ffH5BLVphLXowLTldKyQvXG5jb25zdCBIVFRQX1dISVRFU1BBQ0VfUkVHRVggPSAvW1xcdTAwMEFcXHUwMDBEXFx1MDAwOVxcdTAwMjBdLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5jb25zdCBBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVggPSAvW1xcdTAwMDlcXHUwMDBBXFx1MDAwQ1xcdTAwMERcXHUwMDIwXS9nIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcXVvdGVkLXN0cmluZy10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdFXFx1MDA4MC1cXHUwMEZGXSskLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1wcm9jZXNzb3Jcbi8qKiBAcGFyYW0ge1VSTH0gZGF0YVVSTCAqL1xuZnVuY3Rpb24gZGF0YVVSTFByb2Nlc3NvciAoZGF0YVVSTCkge1xuICAvLyAxLiBBc3NlcnQ6IGRhdGFVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIi5cbiAgYXNzZXJ0KGRhdGFVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpXG5cbiAgLy8gMi4gTGV0IGlucHV0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgVVJMXG4gIC8vIHNlcmlhbGl6ZXIgb24gZGF0YVVSTCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnRcbiAgLy8gc2V0IHRvIHRydWUuXG4gIGxldCBpbnB1dCA9IFVSTFNlcmlhbGl6ZXIoZGF0YVVSTCwgdHJ1ZSlcblxuICAvLyAzLiBSZW1vdmUgdGhlIGxlYWRpbmcgXCJkYXRhOlwiIHN0cmluZyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IGlucHV0LnNsaWNlKDUpXG5cbiAgLy8gNC4gTGV0IHBvc2l0aW9uIHBvaW50IGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyA1LiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IGVxdWFsXG4gIC8vIHRvIFUrMDAyQyAoLCksIGdpdmVuIHBvc2l0aW9uLlxuICBsZXQgbWltZVR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLCcsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDYuIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBtaW1lVHlwZS5cbiAgLy8gVW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHdlIG5lZWQgdG8gc3RvcmUgdGhlXG4gIC8vIGxlbmd0aCBiZWNhdXNlIGlmIHRoZSBtaW1ldHlwZSBoYXMgc3BhY2VzIHJlbW92ZWQsXG4gIC8vIHRoZSB3cm9uZyBhbW91bnQgd2lsbCBiZSBzbGljZWQgZnJvbSB0aGUgaW5wdXQgaW5cbiAgLy8gc3RlcCAjOVxuICBjb25zdCBtaW1lVHlwZUxlbmd0aCA9IG1pbWVUeXBlLmxlbmd0aFxuICBtaW1lVHlwZSA9IHJlbW92ZUFTQ0lJV2hpdGVzcGFjZShtaW1lVHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyA3LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW5cbiAgLy8gcmV0dXJuIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDkuIExldCBlbmNvZGVkQm9keSBiZSB0aGUgcmVtYWluZGVyIG9mIGlucHV0LlxuICBjb25zdCBlbmNvZGVkQm9keSA9IGlucHV0LnNsaWNlKG1pbWVUeXBlTGVuZ3RoICsgMSlcblxuICAvLyAxMC4gTGV0IGJvZHkgYmUgdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgZW5jb2RlZEJvZHkuXG4gIGxldCBib2R5ID0gc3RyaW5nUGVyY2VudERlY29kZShlbmNvZGVkQm9keSlcblxuICAvLyAxMS4gSWYgbWltZVR5cGUgZW5kcyB3aXRoIFUrMDAzQiAoOyksIGZvbGxvd2VkIGJ5XG4gIC8vIHplcm8gb3IgbW9yZSBVKzAwMjAgU1BBQ0UsIGZvbGxvd2VkIGJ5IGFuIEFTQ0lJXG4gIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIFwiYmFzZTY0XCIsIHRoZW46XG4gIGlmICgvOyhcXHUwMDIwKXswLH1iYXNlNjQkL2kudGVzdChtaW1lVHlwZSkpIHtcbiAgICAvLyAxLiBMZXQgc3RyaW5nQm9keSBiZSB0aGUgaXNvbW9ycGhpYyBkZWNvZGUgb2YgYm9keS5cbiAgICBjb25zdCBzdHJpbmdCb2R5ID0gaXNvbW9ycGhpY0RlY29kZShib2R5KVxuXG4gICAgLy8gMi4gU2V0IGJvZHkgdG8gdGhlIGZvcmdpdmluZy1iYXNlNjQgZGVjb2RlIG9mXG4gICAgLy8gc3RyaW5nQm9keS5cbiAgICBib2R5ID0gZm9yZ2l2aW5nQmFzZTY0KHN0cmluZ0JvZHkpXG5cbiAgICAvLyAzLiBJZiBib2R5IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGJvZHkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDQuIFJlbW92ZSB0aGUgbGFzdCA2IGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtNilcblxuICAgIC8vIDUuIFJlbW92ZSB0cmFpbGluZyBVKzAwMjAgU1BBQ0UgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZSxcbiAgICAvLyBpZiBhbnkuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5yZXBsYWNlKC8oXFx1MDAyMCkrJC8sICcnKVxuXG4gICAgLy8gNi4gUmVtb3ZlIHRoZSBsYXN0IFUrMDAzQiAoOykgY29kZSBwb2ludCBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTEpXG4gIH1cblxuICAvLyAxMi4gSWYgbWltZVR5cGUgc3RhcnRzIHdpdGggVSswMDNCICg7KSwgdGhlbiBwcmVwZW5kXG4gIC8vIFwidGV4dC9wbGFpblwiIHRvIG1pbWVUeXBlLlxuICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgnOycpKSB7XG4gICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbicgKyBtaW1lVHlwZVxuICB9XG5cbiAgLy8gMTMuIExldCBtaW1lVHlwZVJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgLy8gbWltZVR5cGUuXG4gIGxldCBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgLy8gMTQuIElmIG1pbWVUeXBlUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gc2V0XG4gIC8vIG1pbWVUeXBlUmVjb3JkIHRvIHRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSS5cbiAgaWYgKG1pbWVUeXBlUmVjb3JkID09PSAnZmFpbHVyZScpIHtcbiAgICBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUoJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScpXG4gIH1cblxuICAvLyAxNS4gUmV0dXJuIGEgbmV3IGRhdGE6IFVSTCBzdHJ1Y3Qgd2hvc2UgTUlNRVxuICAvLyB0eXBlIGlzIG1pbWVUeXBlUmVjb3JkIGFuZCBib2R5IGlzIGJvZHkuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1zdHJ1Y3RcbiAgcmV0dXJuIHsgbWltZVR5cGU6IG1pbWVUeXBlUmVjb3JkLCBib2R5IH1cbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4vKipcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIFVSTFNlcmlhbGl6ZXIgKHVybCwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgaWYgKCFleGNsdWRlRnJhZ21lbnQpIHtcbiAgICByZXR1cm4gdXJsLmhyZWZcbiAgfVxuXG4gIGNvbnN0IGhyZWYgPSB1cmwuaHJlZlxuICBjb25zdCBoYXNoTGVuZ3RoID0gdXJsLmhhc2gubGVuZ3RoXG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IGhhc2hMZW5ndGggPT09IDAgPyBocmVmIDogaHJlZi5zdWJzdHJpbmcoMCwgaHJlZi5sZW5ndGggLSBoYXNoTGVuZ3RoKVxuXG4gIGlmICghaGFzaExlbmd0aCAmJiBocmVmLmVuZHNXaXRoKCcjJykpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplZC5zbGljZSgwLCAtMSlcbiAgfVxuXG4gIHJldHVybiBzZXJpYWxpemVkXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWEtc2VxdWVuY2Utb2YtY29kZS1wb2ludHNcbi8qKlxuICogQHBhcmFtIHsoY2hhcjogc3RyaW5nKSA9PiBib29sZWFufSBjb25kaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgcmVzdWx0ID0gJydcblxuICAvLyAyLiBXaGlsZSBwb3NpdGlvbiBkb2Vzblx1MjAxOXQgcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGlucHV0IGFuZCB0aGVcbiAgLy8gY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgbWVldHMgdGhlIGNvbmRpdGlvbiBjb25kaXRpb246XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCAmJiBjb25kaXRpb24oaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dKSkge1xuICAgIC8vIDEuIEFwcGVuZCB0aGF0IGNvZGUgcG9pbnQgdG8gdGhlIGVuZCBvZiByZXN1bHQuXG4gICAgcmVzdWx0ICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDMuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBBIGZhc3RlciBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIHRoYXQgb25seSB3b3JrcyB3aGVuIGNvbXBhcmluZyBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCAoY2hhciwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGNvbnN0IGlkeCA9IGlucHV0LmluZGV4T2YoY2hhciwgcG9zaXRpb24ucG9zaXRpb24pXG4gIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uID0gaW5wdXQubGVuZ3RoXG4gICAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0KVxuICB9XG5cbiAgcG9zaXRpb24ucG9zaXRpb24gPSBpZHhcbiAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdHJpbmctcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHN0cmluZ1BlcmNlbnREZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgaW5wdXQuXG4gIGNvbnN0IGJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGJ5dGVzLlxuICByZXR1cm4gcGVyY2VudERlY29kZShieXRlcylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYnl0ZVxuICovXG5mdW5jdGlvbiBpc0hleENoYXJCeXRlIChieXRlKSB7XG4gIC8vIDAtOSBBLUYgYS1mXG4gIHJldHVybiAoYnl0ZSA+PSAweDMwICYmIGJ5dGUgPD0gMHgzOSkgfHwgKGJ5dGUgPj0gMHg0MSAmJiBieXRlIDw9IDB4NDYpIHx8IChieXRlID49IDB4NjEgJiYgYnl0ZSA8PSAweDY2KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBieXRlXG4gKi9cbmZ1bmN0aW9uIGhleEJ5dGVUb051bWJlciAoYnl0ZSkge1xuICByZXR1cm4gKFxuICAgIC8vIDAtOVxuICAgIGJ5dGUgPj0gMHgzMCAmJiBieXRlIDw9IDB4MzlcbiAgICAgID8gKGJ5dGUgLSA0OClcbiAgICAvLyBDb252ZXJ0IHRvIHVwcGVyY2FzZVxuICAgIC8vICgoYnl0ZSAmIDB4REYpIC0gNjUpICsgMTBcbiAgICAgIDogKChieXRlICYgMHhERikgLSA1NSlcbiAgKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIC8vIDEuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqL1xuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGxldCBqID0gMFxuICAvLyAyLiBGb3IgZWFjaCBieXRlIGJ5dGUgaW4gaW5wdXQ6XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBieXRlID0gaW5wdXRbaV1cblxuICAgIC8vIDEuIElmIGJ5dGUgaXMgbm90IDB4MjUgKCUpLCB0aGVuIGFwcGVuZCBieXRlIHRvIG91dHB1dC5cbiAgICBpZiAoYnl0ZSAhPT0gMHgyNSkge1xuICAgICAgb3V0cHV0W2orK10gPSBieXRlXG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJ5dGUgaXMgMHgyNSAoJSkgYW5kIHRoZSBuZXh0IHR3byBieXRlc1xuICAgIC8vIGFmdGVyIGJ5dGUgaW4gaW5wdXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2VzXG4gICAgLy8gMHgzMCAoMCkgdG8gMHgzOSAoOSksIDB4NDEgKEEpIHRvIDB4NDYgKEYpLFxuICAgIC8vIGFuZCAweDYxIChhKSB0byAweDY2IChmKSwgYWxsIGluY2x1c2l2ZSwgYXBwZW5kIGJ5dGVcbiAgICAvLyB0byBvdXRwdXQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ5dGUgPT09IDB4MjUgJiZcbiAgICAgICEoaXNIZXhDaGFyQnl0ZShpbnB1dFtpICsgMV0pICYmIGlzSGV4Q2hhckJ5dGUoaW5wdXRbaSArIDJdKSlcbiAgICApIHtcbiAgICAgIG91dHB1dFtqKytdID0gMHgyNVxuXG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBMZXQgYnl0ZVBvaW50IGJlIHRoZSB0d28gYnl0ZXMgYWZ0ZXIgYnl0ZSBpbiBpbnB1dCxcbiAgICAgIC8vIGRlY29kZWQsIGFuZCB0aGVuIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsIG51bWJlci5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dFtqKytdID0gKGhleEJ5dGVUb051bWJlcihpbnB1dFtpICsgMV0pIDw8IDQpIHwgaGV4Qnl0ZVRvTnVtYmVyKGlucHV0W2kgKyAyXSlcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gbGVuZ3RoID09PSBqID8gb3V0cHV0IDogb3V0cHV0LnN1YmFycmF5KDAsIGopXG59XG5cbi8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtYS1taW1lLXR5cGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHBhcnNlTUlNRVR5cGUgKGlucHV0KSB7XG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gaW5wdXQuXG4gIGlucHV0ID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UoaW5wdXQsIHRydWUsIHRydWUpXG5cbiAgLy8gMi4gTGV0IHBvc2l0aW9uIGJlIGEgcG9zaXRpb24gdmFyaWFibGUgZm9yIGlucHV0LFxuICAvLyBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGlucHV0LlxuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gIC8vIDMuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlXG4gIC8vIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMkYgKC8pIGZyb21cbiAgLy8gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCB0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJy8nLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA0LiBJZiB0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAgaWYgKHR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdCh0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDUuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiByZXR1cm5cbiAgLy8gZmFpbHVyZVxuICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDJGICgvKS4pXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBMZXQgc3VidHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZlxuICAvLyBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlblxuICAvLyBwb3NpdGlvbi5cbiAgbGV0IHN1YnR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnOycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDguIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gc3VidHlwZS5cbiAgc3VidHlwZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHN1YnR5cGUsIGZhbHNlLCB0cnVlKVxuXG4gIC8vIDkuIElmIHN1YnR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoc3VidHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHN1YnR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgdHlwZUxvd2VyY2FzZSA9IHR5cGUudG9Mb3dlckNhc2UoKVxuICBjb25zdCBzdWJ0eXBlTG93ZXJjYXNlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gMTAuIExldCBtaW1lVHlwZSBiZSBhIG5ldyBNSU1FIHR5cGUgcmVjb3JkIHdob3NlIHR5cGVcbiAgLy8gaXMgdHlwZSwgaW4gQVNDSUkgbG93ZXJjYXNlLCBhbmQgc3VidHlwZSBpcyBzdWJ0eXBlLFxuICAvLyBpbiBBU0NJSSBsb3dlcmNhc2UuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlXG4gIGNvbnN0IG1pbWVUeXBlID0ge1xuICAgIHR5cGU6IHR5cGVMb3dlcmNhc2UsXG4gICAgc3VidHlwZTogc3VidHlwZUxvd2VyY2FzZSxcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgcGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlLWVzc2VuY2VcbiAgICBlc3NlbmNlOiBgJHt0eXBlTG93ZXJjYXNlfS8ke3N1YnR5cGVMb3dlcmNhc2V9YFxuICB9XG5cbiAgLy8gMTEuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDEuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0IgKDspLilcbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgSFRUUFxuICAgIC8vIHdoaXRlc3BhY2UgZnJvbSBpbnB1dCBnaXZlbiBwb3NpdGlvbi5cbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICAgICAgY2hhciA9PiBIVFRQX1dISVRFU1BBQ0VfUkVHRVgudGVzdChjaGFyKSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAzLiBMZXQgcGFyYW1ldGVyTmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYVxuICAgIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgLy8gb3IgVSswMDNEICg9KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICBsZXQgcGFyYW1ldGVyTmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJzsnICYmIGNoYXIgIT09ICc9JyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA0LiBTZXQgcGFyYW1ldGVyTmFtZSB0byBwYXJhbWV0ZXJOYW1lLCBpbiBBU0NJSVxuICAgIC8vIGxvd2VyY2FzZS5cbiAgICBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuOlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgLy8gMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgICAvLyBVKzAwM0IgKDspLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJzsnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0QgKD0pLilcbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgICB9XG5cbiAgICAvLyA2LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIC8vIDcuIExldCBwYXJhbWV0ZXJWYWx1ZSBiZSBudWxsLlxuICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IG51bGxcblxuICAgIC8vIDguIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgIC8vIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGFuIEhUVFAgcXVvdGVkIHN0cmluZyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvblxuICAgICAgLy8gYW5kIHRoZSBleHRyYWN0LXZhbHVlIGZsYWcuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcoaW5wdXQsIHBvc2l0aW9uLCB0cnVlKVxuXG4gICAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90XG4gICAgICAvLyBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAvLyA5LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAgIC8vIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgICAgLy8gMi4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBwYXJhbWV0ZXJWYWx1ZS5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UocGFyYW1ldGVyVmFsdWUsIGZhbHNlLCB0cnVlKVxuXG4gICAgICAvLyAzLiBJZiBwYXJhbWV0ZXJWYWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBzb2xlbHkgY29udGFpbnMgSFRUUCB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gcGFyYW1ldGVyVmFsdWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgcXVvdGVkLXN0cmluZyB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gZG9lcyBub3QgZXhpc3RcbiAgICAvLyB0aGVuIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSB0byBwYXJhbWV0ZXJWYWx1ZS5cbiAgICBpZiAoXG4gICAgICBwYXJhbWV0ZXJOYW1lLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QocGFyYW1ldGVyTmFtZSkgJiZcbiAgICAgIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDAgfHwgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUy50ZXN0KHBhcmFtZXRlclZhbHVlKSkgJiZcbiAgICAgICFtaW1lVHlwZS5wYXJhbWV0ZXJzLmhhcyhwYXJhbWV0ZXJOYW1lKVxuICAgICkge1xuICAgICAgbWltZVR5cGUucGFyYW1ldGVycy5zZXQocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNmb3JnaXZpbmctYmFzZTY0LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICovXG5mdW5jdGlvbiBmb3JnaXZpbmdCYXNlNjQgKGRhdGEpIHtcbiAgLy8gMS4gUmVtb3ZlIGFsbCBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gZGF0YS5cbiAgZGF0YSA9IGRhdGEucmVwbGFjZShBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVgsICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGxldCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGhcbiAgLy8gMi4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gbm8gcmVtYWluZGVyLCB0aGVuOlxuICBpZiAoZGF0YUxlbmd0aCAlIDQgPT09IDApIHtcbiAgICAvLyAxLiBJZiBkYXRhIGVuZHMgd2l0aCBvbmUgb3IgdHdvIFUrMDAzRCAoPSkgY29kZSBwb2ludHMsXG4gICAgLy8gdGhlbiByZW1vdmUgdGhlbSBmcm9tIGRhdGEuXG4gICAgaWYgKGRhdGEuY2hhckNvZGVBdChkYXRhTGVuZ3RoIC0gMSkgPT09IDB4MDAzRCkge1xuICAgICAgLS1kYXRhTGVuZ3RoXG4gICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KGRhdGFMZW5ndGggLSAxKSA9PT0gMHgwMDNEKSB7XG4gICAgICAgIC0tZGF0YUxlbmd0aFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIGEgcmVtYWluZGVyIG9mIDEsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhTGVuZ3RoICUgNCA9PT0gMSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDQuIElmIGRhdGEgY29udGFpbnMgYSBjb2RlIHBvaW50IHRoYXQgaXMgbm90IG9uZSBvZlxuICAvLyAgVSswMDJCICgrKVxuICAvLyAgVSswMDJGICgvKVxuICAvLyAgQVNDSUkgYWxwaGFudW1lcmljXG4gIC8vIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICgvW14rLzAtOUEtWmEtel0vLnRlc3QoZGF0YS5sZW5ndGggPT09IGRhdGFMZW5ndGggPyBkYXRhIDogZGF0YS5zdWJzdHJpbmcoMCwgZGF0YUxlbmd0aCkpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSwgJ2Jhc2U2NCcpXG4gIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZVx1MjAxOXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBlXHUyMDE5cyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIFx1MjE5MiB2YWx1ZSBvZiBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VycmVuY2Ugb2YgVSswMDIyIChcIikgb3JcbiAgICAgIC8vICAgIFUrMDA1QyAoXFwpIGluIHZhbHVlIHdpdGggVSswMDVDIChcXCkuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhcXFxcfFwiKS9nLCAnXFxcXCQxJylcblxuICAgICAgLy8gMi4gUHJlcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlID0gJ1wiJyArIHZhbHVlXG5cbiAgICAgIC8vIDMuIEFwcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9ICdcIidcbiAgICB9XG5cbiAgICAvLyA1LiBBcHBlbmQgdmFsdWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IHZhbHVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gc2VyaWFsaXphdGlvbi5cbiAgcmV0dXJuIHNlcmlhbGl6YXRpb25cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2UgKGNoYXIpIHtcbiAgLy8gXCJcXHJcXG5cXHQgXCJcbiAgcmV0dXJuIGNoYXIgPT09IDB4MDBkIHx8IGNoYXIgPT09IDB4MDBhIHx8IGNoYXIgPT09IDB4MDA5IHx8IGNoYXIgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsZWFkaW5nPXRydWVdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmFpbGluZz10cnVlXVxuICovXG5mdW5jdGlvbiByZW1vdmVIVFRQV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0hUVFBXaGl0ZVNwYWNlKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIC8vIFwiXFxyXFxuXFx0XFxmIFwiXG4gIHJldHVybiBjaGFyID09PSAweDAwZCB8fCBjaGFyID09PSAweDAwYSB8fCBjaGFyID09PSAweDAwOSB8fCBjaGFyID09PSAweDAwYyB8fCBjaGFyID09PSAweDAyMFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWxlYWRpbmctYW5kLXRyYWlsaW5nLWFzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlYWRpbmc9dHJ1ZV1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYWlsaW5nPXRydWVdXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0FTQ0lJV2hpdGVzcGFjZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKHN0ciwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgc3RyLmxlbmd0aCAmJiBwcmVkaWNhdGUoc3RyLmNoYXJDb2RlQXQobGVhZCkpKSBsZWFkKytcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIHdoaWxlICh0cmFpbCA+IDAgJiYgcHJlZGljYXRlKHN0ci5jaGFyQ29kZUF0KHRyYWlsKSkpIHRyYWlsLS1cbiAgfVxuXG4gIHJldHVybiBsZWFkID09PSAwICYmIHRyYWlsID09PSBzdHIubGVuZ3RoIC0gMSA/IHN0ciA6IHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNEZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIFRvIGlzb21vcnBoaWMgZGVjb2RlIGEgYnl0ZSBzZXF1ZW5jZSBpbnB1dCwgcmV0dXJuIGEgc3RyaW5nIHdob3NlIGNvZGUgcG9pbnRcbiAgLy8gICAgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBsZW5ndGggYW5kIHdob3NlIGNvZGUgcG9pbnRzIGhhdmUgdGhlIHNhbWUgdmFsdWVzXG4gIC8vICAgIGFzIHRoZSB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGJ5dGVzLCBpbiB0aGUgc2FtZSBvcmRlci5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIGlmICgoMiA8PCAxNSkgLSAxID4gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgaW5wdXQpXG4gIH1cbiAgbGV0IHJlc3VsdCA9ICcnOyBsZXQgaSA9IDBcbiAgbGV0IGFkZGl0aW9uID0gKDIgPDwgMTUpIC0gMVxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGlmIChpICsgYWRkaXRpb24gPiBsZW5ndGgpIHtcbiAgICAgIGFkZGl0aW9uID0gbGVuZ3RoIC0gaVxuICAgIH1cbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBpbnB1dC5zdWJhcnJheShpLCBpICs9IGFkZGl0aW9uKSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbmltaXplLWEtc3VwcG9ydGVkLW1pbWUtdHlwZVxuICogQHBhcmFtIHtFeGNsdWRlPFJldHVyblR5cGU8dHlwZW9mIHBhcnNlTUlNRVR5cGU+LCAnZmFpbHVyZSc+fSBtaW1lVHlwZVxuICovXG5mdW5jdGlvbiBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIChtaW1lVHlwZSkge1xuICBzd2l0Y2ggKG1pbWVUeXBlLmVzc2VuY2UpIHtcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9lY21hc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQnOlxuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9lY21hc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQnOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMCc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS4xJzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjInOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMyc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS40JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjUnOlxuICAgIGNhc2UgJ3RleHQvanNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9saXZlc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L3gtZWNtYXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC94LWphdmFzY3JpcHQnOlxuICAgICAgLy8gMS4gSWYgbWltZVR5cGUgaXMgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZSwgdGhlbiByZXR1cm4gXCJ0ZXh0L2phdmFzY3JpcHRcIi5cbiAgICAgIHJldHVybiAndGV4dC9qYXZhc2NyaXB0J1xuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxuICAgIGNhc2UgJ3RleHQvanNvbic6XG4gICAgICAvLyAyLiBJZiBtaW1lVHlwZSBpcyBhIEpTT04gTUlNRSB0eXBlLCB0aGVuIHJldHVybiBcImFwcGxpY2F0aW9uL2pzb25cIi5cbiAgICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgICBjYXNlICdpbWFnZS9zdmcreG1sJzpcbiAgICAgIC8vIDMuIElmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwiaW1hZ2Uvc3ZnK3htbFwiLCB0aGVuIHJldHVybiBcImltYWdlL3N2Zyt4bWxcIi5cbiAgICAgIHJldHVybiAnaW1hZ2Uvc3ZnK3htbCdcbiAgICBjYXNlICd0ZXh0L3htbCc6XG4gICAgY2FzZSAnYXBwbGljYXRpb24veG1sJzpcbiAgICAgIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlIGlzIGEgSlNPTiBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiLlxuICBpZiAobWltZVR5cGUuc3VidHlwZS5lbmRzV2l0aCgnK2pzb24nKSkge1xuICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgfVxuXG4gIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gIGlmIChtaW1lVHlwZS5zdWJ0eXBlLmVuZHNXaXRoKCcreG1sJykpIHtcbiAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDUuIElmIG1pbWVUeXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgdXNlciBhZ2VudCwgdGhlbiByZXR1cm4gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gIC8vIFRlY2huaWNhbGx5LCBub2RlIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgbWltZXR5cGVzLlxuXG4gIC8vIDYuIFJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICByZXR1cm4gJydcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRhdGFVUkxQcm9jZXNzb3IsXG4gIFVSTFNlcmlhbGl6ZXIsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0LFxuICBzdHJpbmdQZXJjZW50RGVjb2RlLFxuICBwYXJzZU1JTUVUeXBlLFxuICBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLFxuICBzZXJpYWxpemVBTWltZVR5cGUsXG4gIHJlbW92ZUNoYXJzLFxuICByZW1vdmVIVFRQV2hpdGVzcGFjZSxcbiAgbWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZSxcbiAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLFxuICBpc29tb3JwaGljRGVjb2RlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdHlwZXMsIGluc3BlY3QgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IG1hcmtBc1VuY2xvbmVhYmxlIH0gPSByZXF1aXJlKCdub2RlOndvcmtlcl90aHJlYWRzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi8uLi90eXBlcy93ZWJpZGwnKS5XZWJpZGx9ICovXG5jb25zdCB3ZWJpZGwgPSB7fVxud2ViaWRsLmNvbnZlcnRlcnMgPSB7fVxud2ViaWRsLnV0aWwgPSB7fVxud2ViaWRsLmVycm9ycyA9IHt9XG5cbndlYmlkbC5lcnJvcnMuZXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYCR7bWVzc2FnZS5oZWFkZXJ9OiAke21lc3NhZ2UubWVzc2FnZX1gKVxufVxuXG53ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCBwbHVyYWwgPSBjb250ZXh0LnR5cGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJyBvbmUgb2YnXG4gIGNvbnN0IG1lc3NhZ2UgPVxuICAgIGAke2NvbnRleHQuYXJndW1lbnR9IGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG9gICtcbiAgICBgJHtwbHVyYWx9OiAke2NvbnRleHQudHlwZXMuam9pbignLCAnKX0uYFxuXG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbndlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2U6IGBcIiR7Y29udGV4dC52YWx1ZX1cIiBpcyBhbiBpbnZhbGlkICR7Y29udGV4dC50eXBlfS5gXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaW1wbGVtZW50c1xud2ViaWRsLmJyYW5kQ2hlY2sgPSBmdW5jdGlvbiAoViwgSSwgb3B0cykge1xuICBpZiAob3B0cz8uc3RyaWN0ICE9PSBmYWxzZSkge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBJKSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChWPy5bU3ltYm9sLnRvU3RyaW5nVGFnXSAhPT0gSS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbndlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrID0gZnVuY3Rpb24gKHsgbGVuZ3RoIH0sIG1pbiwgY3R4KSB7XG4gIGlmIChsZW5ndGggPCBtaW4pIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBtZXNzYWdlOiBgJHttaW59IGFyZ3VtZW50JHttaW4gIT09IDEgPyAncycgOiAnJ30gcmVxdWlyZWQsIGAgK1xuICAgICAgICAgICAgICAgYGJ1dCR7bGVuZ3RoID8gJyBvbmx5JyA6ICcnfSAke2xlbmd0aH0gZm91bmQuYCxcbiAgICAgIGhlYWRlcjogY3R4XG4gICAgfSlcbiAgfVxufVxuXG53ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiAnVHlwZUVycm9yJyxcbiAgICBtZXNzYWdlOiAnSWxsZWdhbCBjb25zdHJ1Y3RvcidcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWRhdGEtdHlwZXMtYW5kLXZhbHVlc1xud2ViaWRsLnV0aWwuVHlwZSA9IGZ1bmN0aW9uIChWKSB7XG4gIHN3aXRjaCAodHlwZW9mIFYpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gJ1VuZGVmaW5lZCdcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuICdCb29sZWFuJ1xuICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiAnU3RyaW5nJ1xuICAgIGNhc2UgJ3N5bWJvbCc6IHJldHVybiAnU3ltYm9sJ1xuICAgIGNhc2UgJ251bWJlcic6IHJldHVybiAnTnVtYmVyJ1xuICAgIGNhc2UgJ2JpZ2ludCc6IHJldHVybiAnQmlnSW50J1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ051bGwnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnT2JqZWN0J1xuICAgIH1cbiAgfVxufVxuXG53ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSA9IG1hcmtBc1VuY2xvbmVhYmxlIHx8ICgoKSA9PiB7fSlcbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzKSB7XG4gIGxldCB1cHBlckJvdW5kXG4gIGxldCBsb3dlckJvdW5kXG5cbiAgLy8gMS4gSWYgYml0TGVuZ3RoIGlzIDY0LCB0aGVuOlxuICBpZiAoYml0TGVuZ3RoID09PSA2NCkge1xuICAgIC8vIDEuIExldCB1cHBlckJvdW5kIGJlIDJeNTMgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIDUzKSAtIDFcblxuICAgIC8vIDIuIElmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuIGxldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAgIGxvd2VyQm91bmQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSBsZXQgbG93ZXJCb3VuZCBiZSBcdTIyMTIyXjUzICsgMS5cbiAgICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgNTMpICsgMVxuICAgIH1cbiAgfSBlbHNlIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbjpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgbG93ZXJCb3VuZCA9IDBcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIC0yXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIGJpdExlbmd0aCkgLSAxXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMSBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSkgLSAxXG4gIH1cblxuICAvLyA0LiBMZXQgeCBiZSA/IFRvTnVtYmVyKFYpLlxuICBsZXQgeCA9IE51bWJlcihWKVxuXG4gIC8vIDUuIElmIHggaXMgXHUyMjEyMCwgdGhlbiBzZXQgeCB0byArMC5cbiAgaWYgKHggPT09IDApIHtcbiAgICB4ID0gMFxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbRW5mb3JjZVJhbmdlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmIChvcHRzPy5lbmZvcmNlUmFuZ2UgPT09IHRydWUpIHtcbiAgICAvLyAxLiBJZiB4IGlzIE5hTiwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBjb252ZXJ0ICR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSB0byBhbiBpbnRlZ2VyLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gICAgeCA9IHdlYmlkbC51dGlsLkludGVnZXJQYXJ0KHgpXG5cbiAgICAvLyAzLiBJZiB4IDwgbG93ZXJCb3VuZCBvciB4ID4gdXBwZXJCb3VuZCwgdGhlblxuICAgIC8vICAgIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdJbnRlZ2VyIGNvbnZlcnNpb24nLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgbXVzdCBiZSBiZXR3ZWVuICR7bG93ZXJCb3VuZH0tJHt1cHBlckJvdW5kfSwgZ290ICR7eH0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gNy4gSWYgeCBpcyBub3QgTmFOIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJRExcbiAgLy8gICAgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIFtDbGFtcF0gZXh0ZW5kZWRcbiAgLy8gICAgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAoIU51bWJlci5pc05hTih4KSAmJiBvcHRzPy5jbGFtcCA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIFNldCB4IHRvIG1pbihtYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpLlxuICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZClcblxuICAgIC8vIDIuIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlXG4gICAgLy8gICAgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byxcbiAgICAvLyAgICBhbmQgY2hvb3NpbmcgKzAgcmF0aGVyIHRoYW4gXHUyMjEyMC5cbiAgICBpZiAoTWF0aC5mbG9vcih4KSAlIDIgPT09IDApIHtcbiAgICAgIHggPSBNYXRoLmZsb29yKHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBNYXRoLmNlaWwoeClcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gOC4gSWYgeCBpcyBOYU4sICswLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gcmV0dXJuICswLlxuICBpZiAoXG4gICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgKHggPT09IDAgJiYgT2JqZWN0LmlzKDAsIHgpKSB8fFxuICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICApIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gOS4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gIC8vIDEwLiBTZXQgeCB0byB4IG1vZHVsbyAyXmJpdExlbmd0aC5cbiAgeCA9IHggJSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG5cbiAgLy8gMTEuIElmIHNpZ25lZG5lc3MgaXMgXCJzaWduZWRcIiBhbmQgeCBcdTIyNjUgMl5iaXRMZW5ndGggXHUyMjEyIDEsXG4gIC8vICAgIHRoZW4gcmV0dXJuIHggXHUyMjEyIDJeYml0TGVuZ3RoLlxuICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3NpZ25lZCcgJiYgeCA+PSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMSkge1xuICAgIHJldHVybiB4IC0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuICB9XG5cbiAgLy8gMTIuIE90aGVyd2lzZSwgcmV0dXJuIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtaW50ZWdlcnBhcnRcbndlYmlkbC51dGlsLkludGVnZXJQYXJ0ID0gZnVuY3Rpb24gKG4pIHtcbiAgLy8gMS4gTGV0IHIgYmUgZmxvb3IoYWJzKG4pKS5cbiAgY29uc3QgciA9IE1hdGguZmxvb3IoTWF0aC5hYnMobikpXG5cbiAgLy8gMi4gSWYgbiA8IDAsIHRoZW4gcmV0dXJuIC0xIFx1MDBENyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG53ZWJpZGwudXRpbC5TdHJpbmdpZnkgPSBmdW5jdGlvbiAoVikge1xuICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShWKVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgICByZXR1cm4gYFN5bWJvbCgke1YuZGVzY3JpcHRpb259KWBcbiAgICBjYXNlICdPYmplY3QnOlxuICAgICAgcmV0dXJuIGluc3BlY3QoVilcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgcmV0dXJuIGBcIiR7Vn1cImBcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAke1Z9YFxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtc2VxdWVuY2VcbndlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWLCBwcmVmaXgsIGFyZ3VtZW50LCBJdGVyYWJsZSkgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gKCR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSkgaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSB0eXBlb2YgSXRlcmFibGUgPT09ICdmdW5jdGlvbicgPyBJdGVyYWJsZSgpIDogVj8uW1N5bWJvbC5pdGVyYXRvcl0/LigpXG4gICAgY29uc3Qgc2VxID0gW11cbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICAvLyAzLiBJZiBtZXRob2QgaXMgdW5kZWZpbmVkLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBtZXRob2QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdHlwZW9mIG1ldGhvZC5uZXh0ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH1bJHtpbmRleCsrfV1gKSlcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy10by1yZWNvcmRcbndlYmlkbC5yZWNvcmRDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoa2V5Q29udmVydGVyLCB2YWx1ZUNvbnZlcnRlcikge1xuICByZXR1cm4gKE8sIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IHByZWZpeCxcbiAgICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IChcIiR7d2ViaWRsLnV0aWwuVHlwZShPKX1cIikgaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LlxuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBpZiAoIXR5cGVzLmlzUHJveHkoTykpIHtcbiAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS5cbiAgICAgIGNvbnN0IGtleXMgPSBbLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTyksIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTyldXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5LCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSwgcHJlZml4LCBhcmd1bWVudClcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXksIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCwgb3B0cykgPT4ge1xuICAgIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIGkpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpIHRvIGJlIGFuIGluc3RhbmNlIG9mICR7aS5uYW1lfS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBWXG4gIH1cbn1cblxud2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVycykge1xuICByZXR1cm4gKGRpY3Rpb25hcnksIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShkaWN0aW9uYXJ5KVxuICAgIGNvbnN0IGRpY3QgPSB7fVxuXG4gICAgaWYgKHR5cGUgPT09ICdOdWxsJyB8fCB0eXBlID09PSAnVW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRpY3RcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtkaWN0aW9uYXJ5fSB0byBiZSBvbmUgb2Y6IE51bGwsIFVuZGVmaW5lZCwgT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvcHRpb25zIG9mIGNvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnN0IHsga2V5LCBkZWZhdWx0VmFsdWUsIHJlcXVpcmVkLCBjb252ZXJ0ZXIgfSA9IG9wdGlvbnNcblxuICAgICAgaWYgKHJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093bihkaWN0aW9uYXJ5LCBrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBrZXkgXCIke2tleX1cIi5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWUgPSBkaWN0aW9uYXJ5W2tleV1cbiAgICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBPYmplY3QuaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA/Pz0gZGVmYXVsdFZhbHVlKClcbiAgICAgIH1cblxuICAgICAgLy8gQSBrZXkgY2FuIGJlIG9wdGlvbmFsIGFuZCBoYXZlIG5vIGRlZmF1bHQgdmFsdWUuXG4gICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZG8gbm90IHBlcmZvcm0gYSBjb252ZXJzaW9uLFxuICAgICAgLy8gYW5kIGRvIG5vdCBhc3NpZ24gdGhlIGtleSBhIHZhbHVlLlxuICAgICAgaWYgKHJlcXVpcmVkIHx8IGhhc0RlZmF1bHQgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH0uJHtrZXl9YClcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkVmFsdWVzICYmXG4gICAgICAgICAgIW9wdGlvbnMuYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt2YWx1ZX0gaXMgbm90IGFuIGFjY2VwdGVkIHR5cGUuIEV4cGVjdGVkIG9uZSBvZiAke29wdGlvbnMuYWxsb3dlZFZhbHVlcy5qb2luKCcsICcpfS5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpY3RcbiAgfVxufVxuXG53ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCkgPT4ge1xuICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gVlxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0ZXIoViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLURPTVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgViBpcyBudWxsIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZVxuICAvLyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFtMZWdhY3lOdWxsVG9FbXB0eVN0cmluZ11cbiAgLy8gICAgZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuIHJldHVybiB0aGUgRE9NU3RyaW5nIHZhbHVlXG4gIC8vICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoViA9PT0gbnVsbCAmJiBvcHRzPy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IGlzIGEgc3ltYm9sLCB3aGljaCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgRE9NU3RyaW5nLmBcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBhcmd1bWVudCkge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbi8vIFRPRE86IHJld3JpdGUgdGhpcyBzbyB3ZSBjYW4gY29udHJvbCB0aGUgZXJyb3JzIHRocm93blxud2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nID0gdG9VU1ZTdHJpbmdcblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ib29sZWFuXG53ZWJpZGwuY29udmVydGVycy5ib29sZWFuID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgVG9Cb29sZWFuKFYpLlxuICBjb25zdCB4ID0gQm9vbGVhbihWKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGJvb2xlYW4gdmFsdWUgdGhhdCBpcyB0aGUgb25lIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSB0cnV0aCB2YWx1ZSBhcyB0aGUgRUNNQVNjcmlwdCBCb29sZWFuIHZhbHVlIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYW55XG53ZWJpZGwuY29udmVydGVycy5hbnkgPSBmdW5jdGlvbiAoVikge1xuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwic2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAnc2lnbmVkJywgdW5kZWZpbmVkLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGxvbmcgbG9uZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtc2hvcnRcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMTYsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMTYsICd1bnNpZ25lZCcsIG9wdHMsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgc2hvcnQgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpZGwtQXJyYXlCdWZmZXJcbndlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzPy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICBpZiAoVi5yZXNpemFibGUgfHwgVi5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBUXHUyMDE5cyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHtuYW1lfSAoXCIke3dlYmlkbC51dGlsLlN0cmluZ2lmeShWKX1cIilgLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDUuIFJldHVybiB0aGUgSURMIHZhbHVlIG9mIHR5cGUgVCB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIG5hbWUsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW0RhdGFWaWV3XV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8ICF0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICBtZXNzYWdlOiBgJHtuYW1lfSBpcyBub3QgYSBEYXRhVmlldy5gXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIERhdGFWaWV3IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jQnVmZmVyU291cmNlXG53ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIGlmICh0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyKFYsIHByZWZpeCwgbmFtZSwgeyAuLi5vcHRzLCBhbGxvd1NoYXJlZDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmICh0eXBlcy5pc1R5cGVkQXJyYXkoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheShWLCBWLmNvbnN0cnVjdG9yLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgIHByZWZpeCxcbiAgICBhcmd1bWVudDogYCR7bmFtZX0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICB0eXBlczogWydCdWZmZXJTb3VyY2UnXVxuICB9KVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ25vZGU6emxpYicpXG5jb25zdCB7IHJlZGlyZWN0U3RhdHVzU2V0LCByZWZlcnJlclBvbGljeVNldDogcmVmZXJyZXJQb2xpY3lUb2tlbnMsIGJhZFBvcnRzU2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzLCBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLCByZW1vdmVDaGFycywgcGFyc2VNSU1FVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IHBlcmZvcm1hbmNlIH0gPSByZXF1aXJlKCdub2RlOnBlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCBSZWFkYWJsZVN0cmVhbUZyb20sIGlzVmFsaWRIVFRQVG9rZW4sIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCdub2RlOnV0aWwvdHlwZXMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbiAgY29uc3QgcG9zc2libGVSZWxldmFudEhhc2hlcyA9IFsnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInXVxuICBzdXBwb3J0ZWRIYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCkuZmlsdGVyKChoYXNoKSA9PiBwb3NzaWJsZVJlbGV2YW50SGFzaGVzLmluY2x1ZGVzKGhhc2gpKVxuLyogYzggaWdub3JlIG5leHQgMyAqL1xufSBjYXRjaCB7XG5cbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VVUkwgKHJlc3BvbnNlKSB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZXNcbiAgLy8gQSByZXNwb25zZSBoYXMgYW4gYXNzb2NpYXRlZCBVUkwuIEl0IGlzIGEgcG9pbnRlciB0byB0aGUgbGFzdCBVUkxcbiAgLy8gaW4gcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGFuZCBudWxsIGlmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eS5cbiAgY29uc3QgdXJsTGlzdCA9IHJlc3BvbnNlLnVybExpc3RcbiAgY29uc3QgbGVuZ3RoID0gdXJsTGlzdC5sZW5ndGhcbiAgcmV0dXJuIGxlbmd0aCA9PT0gMCA/IG51bGwgOiB1cmxMaXN0W2xlbmd0aCAtIDFdLnRvU3RyaW5nKClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtbG9jYXRpb24tdXJsXG5mdW5jdGlvbiByZXNwb25zZUxvY2F0aW9uVVJMIChyZXNwb25zZSwgcmVxdWVzdEZyYWdtZW50KSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHJldHVybiBudWxsLlxuICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDIuIExldCBsb2NhdGlvbiBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuXG4gIC8vIGBMb2NhdGlvbmAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgbGV0IGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdsb2NhdGlvbicsIHRydWUpXG5cbiAgLy8gMy4gSWYgbG9jYXRpb24gaXMgYSBoZWFkZXIgdmFsdWUsIHRoZW4gc2V0IGxvY2F0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgcGFyc2luZyBsb2NhdGlvbiB3aXRoIHJlc3BvbnNlXHUyMDE5cyBVUkwuXG4gIGlmIChsb2NhdGlvbiAhPT0gbnVsbCAmJiBpc1ZhbGlkSGVhZGVyVmFsdWUobG9jYXRpb24pKSB7XG4gICAgaWYgKCFpc1ZhbGlkRW5jb2RlZFVSTChsb2NhdGlvbikpIHtcbiAgICAgIC8vIFNvbWUgd2Vic2l0ZXMgcmVzcG9uZCBsb2NhdGlvbiBoZWFkZXIgaW4gVVRGLTggZm9ybSB3aXRob3V0IGVuY29kaW5nIHRoZW0gYXMgQVNDSUlcbiAgICAgIC8vIGFuZCBtYWpvciBicm93c2VycyByZWRpcmVjdCB0aGVtIHRvIGNvcnJlY3RseSBVVEYtOCBlbmNvZGVkIGFkZHJlc3Nlcy5cbiAgICAgIC8vIEhlcmUsIHdlIGhhbmRsZSB0aGF0IGJlaGF2aW9yIGluIHRoZSBzYW1lIHdheS5cbiAgICAgIGxvY2F0aW9uID0gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4KGxvY2F0aW9uKVxuICAgIH1cbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9uXHUyMDE5c1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMTczOCNzZWN0aW9uLTIuMlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbmNvZGVkVVJMICh1cmwpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmwubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gdXJsLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPiAweDdFIHx8IC8vIE5vbi1VUy1BU0NJSSArIERFTFxuICAgICAgY29kZSA8IDB4MjAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzIE5VTCAtIFVTXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBJZiBzdHJpbmcgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGFzc3VtZXMgaXQncyBVVEYtOCBlbmNvZGVkIGFuZCBkZWNvZGVzIGl0LlxuICogU2luY2UgVVRGLTggaXMgYSBzdXBlcnNldCBvZiBBU0NJSSwgdGhpcyB3aWxsIHdvcmsgZm9yIEFTQ0lJIHN0cmluZ3MgYXMgd2VsbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4ICh2YWx1ZSkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsICdiaW5hcnknKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJsXHUyMDE5cyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gaXNWYWxpZEhUVFBUb2tlblxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci12YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gLSBIYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBIVFRQIHRhYiBvciBzcGFjZSBieXRlcy5cbiAgLy8gLSBDb250YWlucyBubyAweDAwIChOVUwpIG9yIEhUVFAgbmV3bGluZSBieXRlcy5cbiAgcmV0dXJuIChcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJ1xcdCcgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJyAnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICdcXHQnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICcgJyB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXG4nKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXHInKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXDAnKVxuICApID09PSBmYWxzZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc2V0LXJlcXVlc3RzLXJlZmVycmVyLXBvbGljeS1vbi1yZWRpcmVjdFxuZnVuY3Rpb24gc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCAocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpIHtcbiAgLy8gIEdpdmVuIGEgcmVxdWVzdCByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlIGFjdHVhbFJlc3BvbnNlLCB0aGlzIGFsZ29yaXRobVxuICAvLyAgdXBkYXRlcyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgYWNjb3JkaW5nIHRvIHRoZSBSZWZlcnJlci1Qb2xpY3lcbiAgLy8gIGhlYWRlciAoaWYgYW55KSBpbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyAxLiBMZXQgcG9saWN5IGJlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIFx1MDBBNyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JywgdHJ1ZSkgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHJcdTIwMTlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHJcdTIwMTlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiByXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlciwgdHJ1ZSlcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXG4gIC8vICAgIHdpdGggcmVxdWVzdC5cbiAgLy8gVE9ETzogaW1wbGVtZW50IFwiYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXCJcbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIC0gXCInY2xpZW50JyBpcyBjaGFuZ2VkIHRvIGFuIG9yaWdpbiBkdXJpbmcgZmV0Y2hpbmcuXCJcbiAgLy8gICBUaGlzIGRvZXNuJ3QgaGFwcGVuIGluIHVuZGljaSAoaW4gbW9zdCBjYXNlcykgYmVjYXVzZSB1bmRpY2ksIGJ5IGRlZmF1bHQsXG4gIC8vICAgaGFzIG5vIGNvbmNlcHQgb2Ygb3JpZ2luLlxuICAvLyAtIHJlcXVlc3Qub3JpZ2luIGNhbiBhbHNvIGJlIHNldCB0byByZXF1ZXN0LmNsaWVudC5vcmlnaW4gKGNsaWVudCBiZWluZ1xuICAvLyAgIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCksIHdoaWNoIGlzIHVuZGVmaW5lZCB3aXRob3V0IHVzaW5nXG4gIC8vICAgc2V0R2xvYmFsT3JpZ2luLlxuICBpZiAoc2VyaWFsaXplZE9yaWdpbiA9PT0gJ2NsaWVudCcgfHwgc2VyaWFsaXplZE9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBvciByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwid2Vic29ja2V0XCIsXG4gIC8vICAgIHRoZW4gYXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbiwgdHJ1ZSlcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZFxuICAgICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0XG4gICAgICAgIC8vIHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXNcbiAgICAgICAgLy8gb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4sIHRydWUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2hyLXRpbWUvI2Rmbi1jb2Fyc2VuLXRpbWVcbmZ1bmN0aW9uIGNvYXJzZW5UaW1lICh0aW1lc3RhbXAsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHRpbWVzdGFtcFxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY2xhbXAtYW5kLWNvYXJzZW4tY29ubmVjdGlvbi10aW1pbmctaW5mb1xuZnVuY3Rpb24gY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8gKGNvbm5lY3Rpb25UaW1pbmdJbmZvLCBkZWZhdWx0U3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICBpZiAoIWNvbm5lY3Rpb25UaW1pbmdJbmZvPy5zdGFydFRpbWUgfHwgY29ubmVjdGlvblRpbWluZ0luZm8uc3RhcnRUaW1lIDwgZGVmYXVsdFN0YXJ0VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGRlZmF1bHRTdGFydFRpbWUsXG4gICAgICBkb21haW5Mb29rdXBFbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgY29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIGNvbm5lY3Rpb25FbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvPy5BTFBOTmVnb3RpYXRlZFByb3RvY29sXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cFN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIGRvbWFpbkxvb2t1cEVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cEVuZFRpbWUsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSxcbiAgICBjb25uZWN0aW9uU3RhcnRUaW1lOiBjb2Fyc2VuVGltZShjb25uZWN0aW9uVGltaW5nSW5mby5jb25uZWN0aW9uU3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgY29ubmVjdGlvbkVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmNvbm5lY3Rpb25FbmRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogY29hcnNlblRpbWUoY29ubmVjdGlvblRpbWluZ0luZm8uc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvLkFMUE5OZWdvdGlhdGVkUHJvdG9jb2xcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vaHItdGltZS8jZGZuLWNvYXJzZW5lZC1zaGFyZWQtY3VycmVudC10aW1lXG5mdW5jdGlvbiBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSAoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpIHtcbiAgcmV0dXJuIGNvYXJzZW5UaW1lKHBlcmZvcm1hbmNlLm5vdygpLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1hbi1vcGFxdWUtdGltaW5nLWluZm9cbmZ1bmN0aW9uIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8gKHRpbWluZ0luZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgcmVkaXJlY3RTdGFydFRpbWU6IDAsXG4gICAgcmVkaXJlY3RFbmRUaW1lOiAwLFxuICAgIHBvc3RSZWRpcmVjdFN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICBmaW5hbFNlcnZpY2VXb3JrZXJTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVzcG9uc2VTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZTogMCxcbiAgICBlbmRUaW1lOiAwLFxuICAgIGVuY29kZWRCb2R5U2l6ZTogMCxcbiAgICBkZWNvZGVkQm9keVNpemU6IDAsXG4gICAgZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbzogbnVsbFxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3BvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIG1ha2VQb2xpY3lDb250YWluZXIgKCkge1xuICAvLyBOb3RlOiB0aGUgZmV0Y2ggc3BlYyBkb2Vzbid0IG1ha2UgdXNlIG9mIGVtYmVkZGVyIHBvbGljeSBvciBDU1AgbGlzdFxuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNjbG9uZS1hLXBvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIGNsb25lUG9saWN5Q29udGFpbmVyIChwb2xpY3lDb250YWluZXIpIHtcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogcG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI2RldGVybWluZS1yZXF1ZXN0cy1yZWZlcnJlclxuZnVuY3Rpb24gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgcG9saWN5IGJlIHJlcXVlc3QncyByZWZlcnJlciBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeSA9IHJlcXVlc3QucmVmZXJyZXJQb2xpY3lcblxuICAvLyBOb3RlOiBwb2xpY3kgY2Fubm90IChzaG91bGRuJ3QpIGJlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICBhc3NlcnQocG9saWN5KVxuXG4gIC8vIDIuIExldCBlbnZpcm9ubWVudCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnQuXG5cbiAgbGV0IHJlZmVycmVyU291cmNlID0gbnVsbFxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlcjpcbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gTm90ZTogbm9kZSBpc24ndCBhIGJyb3dzZXIgYW5kIGRvZXNuJ3QgaW1wbGVtZW50IGRvY3VtZW50L2lmcmFtZXMsXG4gICAgLy8gc28gd2UgYnlwYXNzIHRoaXMgc3RlcCBhbmQgcmVwbGFjZSBpdCB3aXRoIG91ciBvd24uXG5cbiAgICBjb25zdCBnbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgaWYgKCFnbG9iYWxPcmlnaW4gfHwgZ2xvYmFsT3JpZ2luLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgIH1cblxuICAgIC8vIG5vdGU6IHdlIG5lZWQgdG8gY2xvbmUgaXQgYXMgaXQncyBtdXRhdGVkXG4gICAgcmVmZXJyZXJTb3VyY2UgPSBuZXcgVVJMKGdsb2JhbE9yaWdpbilcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgLy8gTGV0IHJlZmVycmVyU291cmNlIGJlIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgIHJlZmVycmVyU291cmNlID0gcmVxdWVzdC5yZWZlcnJlclxuICB9XG5cbiAgLy8gNC4gTGV0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyVVJMIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvclxuICAvLyAgICB1c2UgYXMgYSByZWZlcnJlci5cbiAgbGV0IHJlZmVycmVyVVJMID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSlcblxuICAvLyA1LiBMZXQgcmVmZXJyZXJPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yIHVzZSBhc1xuICAvLyAgICBhIHJlZmVycmVyLCB3aXRoIHRoZSBvcmlnaW4tb25seSBmbGFnIHNldCB0byB0cnVlLlxuICBjb25zdCByZWZlcnJlck9yaWdpbiA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG5cbiAgLy8gNi4gSWYgdGhlIHJlc3VsdCBvZiBzZXJpYWxpemluZyByZWZlcnJlclVSTCBpcyBhIHN0cmluZyB3aG9zZSBsZW5ndGggaXNcbiAgLy8gICAgZ3JlYXRlciB0aGFuIDQwOTYsIHNldCByZWZlcnJlclVSTCB0byByZWZlcnJlck9yaWdpbi5cbiAgaWYgKHJlZmVycmVyVVJMLnRvU3RyaW5nKCkubGVuZ3RoID4gNDA5Nikge1xuICAgIHJlZmVycmVyVVJMID0gcmVmZXJyZXJPcmlnaW5cbiAgfVxuXG4gIGNvbnN0IGFyZVNhbWVPcmlnaW4gPSBzYW1lT3JpZ2luKHJlcXVlc3QsIHJlZmVycmVyVVJMKVxuICBjb25zdCBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPSBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmXG4gICAgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZXF1ZXN0LnVybClcblxuICAvLyA4LiBFeGVjdXRlIHRoZSBzd2l0Y2ggc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiBwb2xpY3k6XG4gIHN3aXRjaCAocG9saWN5KSB7XG4gICAgY2FzZSAnb3JpZ2luJzogcmV0dXJuIHJlZmVycmVyT3JpZ2luICE9IG51bGwgPyByZWZlcnJlck9yaWdpbiA6IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG4gICAgY2FzZSAndW5zYWZlLXVybCc6IHJldHVybiByZWZlcnJlclVSTFxuICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJPcmlnaW4gOiAnbm8tcmVmZXJyZXInXG4gICAgY2FzZSAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJVUkwgOiByZWZlcnJlck9yaWdpblxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gMS4gSWYgdGhlIG9yaWdpbiBvZiByZWZlcnJlclVSTCBhbmQgdGhlIG9yaWdpbiBvZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gICAgICAvLyAgICBVUkwgYXJlIHRoZSBzYW1lLCB0aGVuIHJldHVybiByZWZlcnJlclVSTC5cbiAgICAgIGlmIChzYW1lT3JpZ2luKHJlZmVycmVyVVJMLCBjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kIHJlcXVlc3RcdTIwMTlzXG4gICAgICAvLyAgICBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIHRoZW4gcmV0dXJuIG5vXG4gICAgICAvLyAgICByZWZlcnJlci5cbiAgICAgIGlmIChpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICAgIH1cblxuICAgICAgLy8gMy4gUmV0dXJuIHJlZmVycmVyT3JpZ2luLlxuICAgICAgcmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgfVxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgICAqL1xuICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAqL1xuXG4gICAgZGVmYXVsdDogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA/ICduby1yZWZlcnJlcicgOiByZWZlcnJlck9yaWdpblxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc3RyaXAtdXJsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvcmlnaW5Pbmx5XG4gKi9cbmZ1bmN0aW9uIHN0cmlwVVJMRm9yUmVmZXJyZXIgKHVybCwgb3JpZ2luT25seSkge1xuICAvLyAxLiBBc3NlcnQ6IHVybCBpcyBhIFVSTC5cbiAgYXNzZXJ0KHVybCBpbnN0YW5jZW9mIFVSTClcblxuICB1cmwgPSBuZXcgVVJMKHVybClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhIGxvY2FsIHNjaGVtZSwgdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgdXJsLnByb3RvY29sID09PSAnYWJvdXQ6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdibGFuazonKSB7XG4gICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgfVxuXG4gIC8vIDMuIFNldCB1cmxcdTIwMTlzIHVzZXJuYW1lIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC51c2VybmFtZSA9ICcnXG5cbiAgLy8gNC4gU2V0IHVybFx1MjAxOXMgcGFzc3dvcmQgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnBhc3N3b3JkID0gJydcblxuICAvLyA1LiBTZXQgdXJsXHUyMDE5cyBmcmFnbWVudCB0byBudWxsLlxuICB1cmwuaGFzaCA9ICcnXG5cbiAgLy8gNi4gSWYgdGhlIG9yaWdpbi1vbmx5IGZsYWcgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKG9yaWdpbk9ubHkpIHtcbiAgICAvLyAxLiBTZXQgdXJsXHUyMDE5cyBwYXRoIHRvIFx1MDBBQiB0aGUgZW1wdHkgc3RyaW5nIFx1MDBCQi5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybFx1MjAxOXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZVttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCBcdTAwQUIgdmFsdWUgXHUwMEJCKS5cbiAgY29uc3QgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG5cbiAgLy8gMi4gSWYgcmVzdWx0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlJylcbiAgfVxuXG4gIC8vIDMuIEFzc2VydDogcmVzdWx0IGlzIGEgc3RyaW5nLlxuICBhc3NlcnQodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpXG5cbiAgLy8gNC4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSUyNWl0ZXJhdG9ycHJvdG90eXBlJTI1LW9iamVjdFxuY29uc3QgZXNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yIChuYW1lLCBrSW50ZXJuYWxJdGVyYXRvciwga2V5SW5kZXggPSAwLCB2YWx1ZUluZGV4ID0gMSkge1xuICBjbGFzcyBGYXN0SXRlcmFibGVJdGVyYXRvciB7XG4gICAgLyoqIEB0eXBlIHthbnl9ICovXG4gICAgI3RhcmdldFxuICAgIC8qKiBAdHlwZSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9ICovXG4gICAgI2tpbmRcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICAjaW5kZXhcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4tZGVmYXVsdC1pdGVyYXRvci1vYmplY3RcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IHRhcmdldFxuICAgICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciAodGFyZ2V0LCBraW5kKSB7XG4gICAgICB0aGlzLiN0YXJnZXQgPSB0YXJnZXRcbiAgICAgIHRoaXMuI2tpbmQgPSBraW5kXG4gICAgICB0aGlzLiNpbmRleCA9IDBcbiAgICB9XG5cbiAgICBuZXh0ICgpIHtcbiAgICAgIC8vIDEuIExldCBpbnRlcmZhY2UgYmUgdGhlIGludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZXhpc3RzLlxuICAgICAgLy8gMi4gTGV0IHRoaXNWYWx1ZSBiZSB0aGUgdGhpcyB2YWx1ZS5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuICAgICAgLy8gNC4gSWYgb2JqZWN0IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuIHBlcmZvcm0gYSBzZWN1cml0eVxuICAgICAgLy8gICAgY2hlY2ssIHBhc3Npbmc6XG4gICAgICAvLyA1LiBJZiBvYmplY3QgaXMgbm90IGEgZGVmYXVsdCBpdGVyYXRvciBvYmplY3QgZm9yIGludGVyZmFjZSxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAodHlwZW9mIHRoaXMgIT09ICdvYmplY3QnIHx8IHRoaXMgPT09IG51bGwgfHwgISgjdGFyZ2V0IGluIHRoaXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCduZXh0JyBjYWxsZWQgb24gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGludGVyZmFjZSAke25hbWV9IEl0ZXJhdG9yLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBMZXQgaW5kZXggYmUgb2JqZWN0XHUyMDE5cyBpbmRleC5cbiAgICAgIC8vIDcuIExldCBraW5kIGJlIG9iamVjdFx1MjAxOXMga2luZC5cbiAgICAgIC8vIDguIExldCB2YWx1ZXMgYmUgb2JqZWN0XHUyMDE5cyB0YXJnZXQncyB2YWx1ZSBwYWlycyB0byBpdGVyYXRlIG92ZXIuXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2luZGV4XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLiN0YXJnZXRba0ludGVybmFsSXRlcmF0b3JdXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAxMS4gTGV0IHBhaXIgYmUgdGhlIGVudHJ5IGluIHZhbHVlcyBhdCBpbmRleCBpbmRleC5cbiAgICAgIGNvbnN0IHsgW2tleUluZGV4XToga2V5LCBbdmFsdWVJbmRleF06IHZhbHVlIH0gPSB2YWx1ZXNbaW5kZXhdXG5cbiAgICAgIC8vIDEyLiBTZXQgb2JqZWN0XHUyMDE5cyBpbmRleCB0byBpbmRleCArIDEuXG4gICAgICB0aGlzLiNpbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG5cbiAgICAgIC8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaXRlcmF0b3ItcmVzdWx0XG5cbiAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBraW5kOlxuICAgICAgbGV0IHJlc3VsdFxuICAgICAgc3dpdGNoICh0aGlzLiNraW5kKSB7XG4gICAgICAgIGNhc2UgJ2tleSc6XG4gICAgICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWlyXHUyMDE5cyBrZXkuXG4gICAgICAgICAgLy8gMi4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgICAgIHJlc3VsdCA9IGtleVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAna2V5K3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA1LiBMZXQgYXJyYXkgYmUgISBBcnJheUNyZWF0ZSgyKS5cbiAgICAgICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgICAgICAvLyA3LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjFcIiwgdmFsdWUpLlxuICAgICAgICAgIC8vIDguIHJlc3VsdCBpcyBhcnJheS5cbiAgICAgICAgICByZXN1bHQgPSBba2V5LCB2YWx1ZV1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBSZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIGZhbHNlKS5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4taXRlcmF0b3ItcHJvdG90eXBlLW9iamVjdFxuICAvLyBAdHMtaWdub3JlXG4gIGRlbGV0ZSBGYXN0SXRlcmFibGVJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3JcblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRmFzdEl0ZXJhYmxlSXRlcmF0b3IucHJvdG90eXBlLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZhc3RJdGVyYWJsZUl0ZXJhdG9yLnByb3RvdHlwZSwge1xuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgICB9LFxuICAgIG5leHQ6IHsgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9XG4gIH0pXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICogQHJldHVybnMge0l0ZXJhYmxlSXRlcmF0b3I8YW55Pn1cbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBraW5kKSB7XG4gICAgcmV0dXJuIG5ldyBGYXN0SXRlcmFibGVJdGVyYXRvcih0YXJnZXQsIGtpbmQpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge2FueX0gb2JqZWN0IGNsYXNzXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yTWl4aW4gKG5hbWUsIG9iamVjdCwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4ID0gMCwgdmFsdWVJbmRleCA9IDEpIHtcbiAgY29uc3QgbWFrZUl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IobmFtZSwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4LCB2YWx1ZUluZGV4KVxuXG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAga2V5czoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGtleXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleScpXG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ3ZhbHVlJylcbiAgICAgIH1cbiAgICB9LFxuICAgIGVudHJpZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnRyaWVzICgpIHtcbiAgICAgICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgb2JqZWN0KVxuICAgICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKVxuICAgICAgfVxuICAgIH0sXG4gICAgZm9yRWFjaDoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZvckVhY2ggKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIG9iamVjdClcbiAgICAgICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBgJHtuYW1lfS5mb3JFYWNoYClcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFja2ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJyR7bmFtZX0nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB7IDA6IGtleSwgMTogdmFsdWUgfSBvZiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleSt2YWx1ZScpKSB7XG4gICAgICAgICAgY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsIHZhbHVlLCBrZXksIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC4uLnByb3BlcnRpZXMsXG4gICAgW1N5bWJvbC5pdGVyYXRvcl06IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogcHJvcGVydGllcy5lbnRyaWVzLnZhbHVlXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktZnVsbHktcmVhZFxuICovXG5hc3luYyBmdW5jdGlvbiBmdWxseVJlYWRCb2R5IChib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcikge1xuICAvLyAxLiBJZiB0YXNrRGVzdGluYXRpb24gaXMgbnVsbCwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvXG4gIC8vICAgIHRoZSByZXN1bHQgb2Ygc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG5cbiAgLy8gMi4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXMgYmUgdG8gcXVldWUgYVxuICAvLyAgICBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keSBnaXZlbiBieXRlcywgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IHByb2Nlc3NCb2R5XG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgYmUgdG8gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keUVycm9yLFxuICAvLyAgICB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IHByb2Nlc3NCb2R5RXJyb3JcblxuICAvLyA0LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmb3IgYm9keVx1MjAxOXMgc3RyZWFtLlxuICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwcyB3aXRoIHRoYXRcbiAgLy8gICAgZXhjZXB0aW9uIGFuZCByZXR1cm4uXG4gIGxldCByZWFkZXJcblxuICB0cnkge1xuICAgIHJlYWRlciA9IGJvZHkuc3RyZWFtLmdldFJlYWRlcigpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA1LiBSZWFkIGFsbCBieXRlcyBmcm9tIHJlYWRlciwgZ2l2ZW4gc3VjY2Vzc1N0ZXBzIGFuZCBlcnJvclN0ZXBzLlxuICB0cnkge1xuICAgIHN1Y2Nlc3NTdGVwcyhhd2FpdCByZWFkQWxsQnl0ZXMocmVhZGVyKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZSAoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCAoXG4gICAgc3RyZWFtW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdSZWFkYWJsZVN0cmVhbScgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLnRlZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgIGNvbnRyb2xsZXIuYnlvYlJlcXVlc3Q/LnJlc3BvbmQoMClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVE9ETzogYWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhpcyBlcnJvciBvY2N1cnMuXG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29udHJvbGxlciBpcyBhbHJlYWR5IGNsb3NlZCcpICYmICFlcnIubWVzc2FnZS5pbmNsdWRlcygnUmVhZGFibGVTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQnKSkge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleCA9IC9bXlxceDAwLVxceEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBhc3NlcnQoIWludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleC50ZXN0KGlucHV0KSlcblxuICAvLyAyLiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIHdob3NlIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgY29kZVxuICAvLyAgICBwb2ludCBsZW5ndGggYW5kIHdob3NlIGJ5dGVzIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAvLyAgICB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGNvZGUgcG9pbnRzLCBpbiB0aGUgc2FtZSBvcmRlclxuICByZXR1cm4gaW5wdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtZGVmYXVsdHJlYWRlci1yZWFkLWFsbC1ieXRlc1xuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkLWxvb3BcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyfSByZWFkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEJ5dGVzIChyZWFkZXIpIHtcbiAgY29uc3QgYnl0ZXMgPSBbXVxuICBsZXQgYnl0ZUxlbmd0aCA9IDBcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IGNodW5rIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gMS4gQ2FsbCBzdWNjZXNzU3RlcHMgd2l0aCBieXRlcy5cbiAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ5dGVzLCBieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNodW5rIGlzIG5vdCBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBjYWxsIGZhaWx1cmVTdGVwc1xuICAgIC8vICAgIHdpdGggYSBUeXBlRXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVjZWl2ZWQgbm9uLVVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCB0aGUgYnl0ZXMgcmVwcmVzZW50ZWQgYnkgY2h1bmsgdG8gYnl0ZXMuXG4gICAgYnl0ZXMucHVzaChjaHVuaylcbiAgICBieXRlTGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuXG4gICAgLy8gMy4gUmVhZC1sb29wIGdpdmVuIHJlYWRlciwgYnl0ZXMsIHN1Y2Nlc3NTdGVwcywgYW5kIGZhaWx1cmVTdGVwcy5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2lzLWxvY2FsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzTG9jYWwgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnYWJvdXQ6JyB8fCBwcm90b2NvbCA9PT0gJ2Jsb2I6JyB8fCBwcm90b2NvbCA9PT0gJ2RhdGE6J1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICByZXR1cm4gKFxuICAgIChcbiAgICAgIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmXG4gICAgICB1cmxbNV0gPT09ICc6JyAmJlxuICAgICAgdXJsWzBdID09PSAnaCcgJiZcbiAgICAgIHVybFsxXSA9PT0gJ3QnICYmXG4gICAgICB1cmxbMl0gPT09ICd0JyAmJlxuICAgICAgdXJsWzNdID09PSAncCcgJiZcbiAgICAgIHVybFs0XSA9PT0gJ3MnXG4gICAgKSB8fFxuICAgIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNzaW1wbGUtcmFuZ2UtaGVhZGVyLXZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsb3dXaGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUgKHZhbHVlLCBhbGxvd1doaXRlc3BhY2UpIHtcbiAgLy8gMS4gTGV0IGRhdGEgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2Rpbmcgb2YgdmFsdWUuXG4gIC8vIE5vdGU6IGlzb21vcnBoaWMgZGVjb2RpbmcgdGFrZXMgYSBzZXF1ZW5jZSBvZiBieXRlcyAoaWUuIGEgVWludDhBcnJheSkgYW5kIHR1cm5zIGl0IGludG8gYSBzdHJpbmcsXG4gIC8vIG5vdGhpbmcgbW9yZS4gV2Ugb2J2aW91c2x5IGRvbid0IG5lZWQgdG8gZG8gdGhhdCBpZiB2YWx1ZSBpcyBhIHN0cmluZyBhbHJlYWR5LlxuICBjb25zdCBkYXRhID0gdmFsdWVcblxuICAvLyAyLiBJZiBkYXRhIGRvZXMgbm90IHN0YXJ0IHdpdGggXCJieXRlc1wiLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoIWRhdGEuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDMuIExldCBwb3NpdGlvbiBiZSBhIHBvc2l0aW9uIHZhcmlhYmxlIGZvciBkYXRhLCBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIDV0aCBjb2RlIHBvaW50IG9mIGRhdGEuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogNSB9XG5cbiAgLy8gNC4gSWYgYWxsb3dXaGl0ZXNwYWNlIGlzIHRydWUsIGNvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQIHRhYiBvciBzcGFjZSxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyA1LiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gZGF0YSBpcyBub3QgVSswMDNEICg9KSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKGRhdGEuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgIT09IDB4M0QpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLCBmcm9tXG4gIC8vICAgIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIGlmIChhbGxvd1doaXRlc3BhY2UpIHtcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICcgJyxcbiAgICAgIGRhdGEsXG4gICAgICBwb3NpdGlvblxuICAgIClcbiAgfVxuXG4gIC8vIDguIExldCByYW5nZVN0YXJ0IGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEFTQ0lJIGRpZ2l0cyxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCByYW5nZVN0YXJ0ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOS4gTGV0IHJhbmdlU3RhcnRWYWx1ZSBiZSByYW5nZVN0YXJ0LCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VTdGFydCBpcyBub3QgdGhlXG4gIC8vICAgIGVtcHR5IHN0cmluZzsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IHJhbmdlU3RhcnRWYWx1ZSA9IHJhbmdlU3RhcnQubGVuZ3RoID8gTnVtYmVyKHJhbmdlU3RhcnQpIDogbnVsbFxuXG4gIC8vIDEwLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLFxuICAvLyAgICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyAxMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGRhdGEgaXMgbm90IFUrMDAyRCAoLSksIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhLmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pICE9PSAweDJEKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDEzLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiXG4gIC8vICAgICBvciBzcGFjZSwgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICAvLyBOb3RlIGZyb20gS2hhZnJhOiBpdHMgdGhlIHNhbWUgc3RlcCBhcyBpbiAjOCBhZ2FpbiBsb2xcbiAgaWYgKGFsbG93V2hpdGVzcGFjZSkge1xuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnLFxuICAgICAgZGF0YSxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICB9XG5cbiAgLy8gMTQuIExldCByYW5nZUVuZCBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZVxuICAvLyAgICAgQVNDSUkgZGlnaXRzLCBmcm9tIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIC8vIE5vdGUgZnJvbSBLaGFmcmE6IHlvdSB3b3VsZG4ndCBndWVzcyBpdCwgYnV0IHRoaXMgaXMgYWxzbyB0aGUgc2FtZSBzdGVwIGFzICM4XG4gIGNvbnN0IHJhbmdlRW5kID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gMTUuIExldCByYW5nZUVuZFZhbHVlIGJlIHJhbmdlRW5kLCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VFbmRcbiAgLy8gICAgIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nOyBvdGhlcndpc2UgbnVsbC5cbiAgLy8gTm90ZSBmcm9tIEtoYWZyYTogVEhFIFNBTUUgU1RFUCwgQUdBSU4hISFcbiAgLy8gTm90ZTogd2h5IGludGVycHJldCBhcyBhIGRlY2ltYWwgaWYgd2Ugb25seSBjb2xsZWN0IGFzY2lpIGRpZ2l0cz9cbiAgY29uc3QgcmFuZ2VFbmRWYWx1ZSA9IHJhbmdlRW5kLmxlbmd0aCA/IE51bWJlcihyYW5nZUVuZCkgOiBudWxsXG5cbiAgLy8gMTYuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgZGF0YSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxNy4gSWYgcmFuZ2VFbmRWYWx1ZSBhbmQgcmFuZ2VTdGFydFZhbHVlIGFyZSBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAocmFuZ2VFbmRWYWx1ZSA9PT0gbnVsbCAmJiByYW5nZVN0YXJ0VmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxOC4gSWYgcmFuZ2VTdGFydFZhbHVlIGFuZCByYW5nZUVuZFZhbHVlIGFyZSBudW1iZXJzLCBhbmQgcmFuZ2VTdGFydFZhbHVlIGlzXG4gIC8vICAgICBncmVhdGVyIHRoYW4gcmFuZ2VFbmRWYWx1ZSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gTm90ZTogLi4uIHdoZW4gY2FuIHRoZXkgbm90IGJlIG51bWJlcnM/XG4gIGlmIChyYW5nZVN0YXJ0VmFsdWUgPiByYW5nZUVuZFZhbHVlKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTkuIFJldHVybiAocmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlKS5cbiAgcmV0dXJuIHsgcmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNidWlsZC1hLWNvbnRlbnQtcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZVN0YXJ0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2VFbmRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmdWxsTGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29udGVudFJhbmdlIChyYW5nZVN0YXJ0LCByYW5nZUVuZCwgZnVsbExlbmd0aCkge1xuICAvLyAxLiBMZXQgY29udGVudFJhbmdlIGJlIGBieXRlcyBgLlxuICBsZXQgY29udGVudFJhbmdlID0gJ2J5dGVzICdcblxuICAvLyAyLiBBcHBlbmQgcmFuZ2VTdGFydCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLCB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSBpc29tb3JwaGljRW5jb2RlKGAke3JhbmdlU3RhcnR9YClcblxuICAvLyAzLiBBcHBlbmQgMHgyRCAoLSkgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gJy0nXG5cbiAgLy8gNC4gQXBwZW5kIHJhbmdlRW5kLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gaXNvbW9ycGhpY0VuY29kZShgJHtyYW5nZUVuZH1gKVxuXG4gIC8vIDUuIEFwcGVuZCAweDJGICgvKSB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSAnLydcblxuICAvLyA2LiBBcHBlbmQgZnVsbExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkIHRvIGNvbnRlbnRSYW5nZS5cbiAgY29udGVudFJhbmdlICs9IGlzb21vcnBoaWNFbmNvZGUoYCR7ZnVsbExlbmd0aH1gKVxuXG4gIC8vIDcuIFJldHVybiBjb250ZW50UmFuZ2UuXG4gIHJldHVybiBjb250ZW50UmFuZ2Vcbn1cblxuLy8gQSBTdHJlYW0sIHdoaWNoIHBpcGVzIHRoZSByZXNwb25zZSB0byB6bGliLmNyZWF0ZUluZmxhdGUoKSBvclxuLy8gemxpYi5jcmVhdGVJbmZsYXRlUmF3KCkgZGVwZW5kaW5nIG9uIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBCdWZmZXIuXG4vLyBJZiB0aGUgbG93ZXIgYnl0ZSBvZiB0aGUgZmlyc3QgYnl0ZSBpcyAweDA4LCB0aGVuIHRoZSBzdHJlYW0gaXNcbi8vIGludGVycHJldGVkIGFzIGEgemxpYiBzdHJlYW0sIG90aGVyd2lzZSBpdCdzIGludGVycHJldGVkIGFzIGFcbi8vIHJhdyBkZWZsYXRlIHN0cmVhbS5cbmNsYXNzIEluZmxhdGVTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAjemxpYk9wdGlvbnNcblxuICAvKiogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdICovXG4gIGNvbnN0cnVjdG9yICh6bGliT3B0aW9ucykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLiN6bGliT3B0aW9ucyA9IHpsaWJPcHRpb25zXG4gIH1cblxuICBfdHJhbnNmb3JtIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9pbmZsYXRlU3RyZWFtKSB7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtID0gKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDhcbiAgICAgICAgPyB6bGliLmNyZWF0ZUluZmxhdGUodGhpcy4jemxpYk9wdGlvbnMpXG4gICAgICAgIDogemxpYi5jcmVhdGVJbmZsYXRlUmF3KHRoaXMuI3psaWJPcHRpb25zKVxuXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdkYXRhJywgdGhpcy5wdXNoLmJpbmQodGhpcykpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB0aGlzLnB1c2gobnVsbCkpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHRoaXMuZGVzdHJveShlcnIpKVxuICAgIH1cblxuICAgIHRoaXMuX2luZmxhdGVTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgfVxuXG4gIF9maW5hbCAoY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5faW5mbGF0ZVN0cmVhbSkge1xuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbS5lbmQoKVxuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbSA9IG51bGxcbiAgICB9XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdXG4gKiBAcmV0dXJucyB7SW5mbGF0ZVN0cmVhbX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5mbGF0ZSAoemxpYk9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBJbmZsYXRlU3RyZWFtKHpsaWJPcHRpb25zKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWV4dHJhY3QtbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9oZWFkZXJzJykuSGVhZGVyc0xpc3R9IGhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1pbWVUeXBlIChoZWFkZXJzKSB7XG4gIC8vIDEuIExldCBjaGFyc2V0IGJlIG51bGwuXG4gIGxldCBjaGFyc2V0ID0gbnVsbFxuXG4gIC8vIDIuIExldCBlc3NlbmNlIGJlIG51bGwuXG4gIGxldCBlc3NlbmNlID0gbnVsbFxuXG4gIC8vIDMuIExldCBtaW1lVHlwZSBiZSBudWxsLlxuICBsZXQgbWltZVR5cGUgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHZhbHVlcyBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIGBDb250ZW50LVR5cGVgIGZyb20gaGVhZGVycy5cbiAgY29uc3QgdmFsdWVzID0gZ2V0RGVjb2RlU3BsaXQoJ2NvbnRlbnQtdHlwZScsIGhlYWRlcnMpXG5cbiAgLy8gNS4gSWYgdmFsdWVzIGlzIG51bGwsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgLy8gNi4xLiBMZXQgdGVtcG9yYXJ5TWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHZhbHVlLlxuICAgIGNvbnN0IHRlbXBvcmFyeU1pbWVUeXBlID0gcGFyc2VNSU1FVHlwZSh2YWx1ZSlcblxuICAgIC8vIDYuMi4gSWYgdGVtcG9yYXJ5TWltZVR5cGUgaXMgZmFpbHVyZSBvciBpdHMgZXNzZW5jZSBpcyBcIiovKlwiLCB0aGVuIGNvbnRpbnVlLlxuICAgIGlmICh0ZW1wb3JhcnlNaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnIHx8IHRlbXBvcmFyeU1pbWVUeXBlLmVzc2VuY2UgPT09ICcqLyonKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIDYuMy4gU2V0IG1pbWVUeXBlIHRvIHRlbXBvcmFyeU1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gdGVtcG9yYXJ5TWltZVR5cGVcblxuICAgIC8vIDYuNC4gSWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgbm90IGVzc2VuY2UsIHRoZW46XG4gICAgaWYgKG1pbWVUeXBlLmVzc2VuY2UgIT09IGVzc2VuY2UpIHtcbiAgICAgIC8vIDYuNC4xLiBTZXQgY2hhcnNldCB0byBudWxsLlxuICAgICAgY2hhcnNldCA9IG51bGxcblxuICAgICAgLy8gNi40LjIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBleGlzdHMsIHRoZW4gc2V0IGNoYXJzZXQgdG9cbiAgICAgIC8vICAgICAgICBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICBpZiAobWltZVR5cGUucGFyYW1ldGVycy5oYXMoJ2NoYXJzZXQnKSkge1xuICAgICAgICBjaGFyc2V0ID0gbWltZVR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKVxuICAgICAgfVxuXG4gICAgICAvLyA2LjQuMy4gU2V0IGVzc2VuY2UgdG8gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gICAgICBlc3NlbmNlID0gbWltZVR5cGUuZXNzZW5jZVxuICAgIH0gZWxzZSBpZiAoIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKCdjaGFyc2V0JykgJiYgY2hhcnNldCAhPT0gbnVsbCkge1xuICAgICAgLy8gNi41LiBPdGhlcndpc2UsIGlmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBkb2VzIG5vdCBleGlzdCwgYW5kXG4gICAgICAvLyAgICAgIGNoYXJzZXQgaXMgbm9uLW51bGwsIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0gdG8gY2hhcnNldC5cbiAgICAgIG1pbWVUeXBlLnBhcmFtZXRlcnMuc2V0KCdjaGFyc2V0JywgY2hhcnNldClcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBtaW1lVHlwZSBpcyBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAobWltZVR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLXZhbHVlLWdldC1kZWNvZGUtYW5kLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXR0aW5nRGVjb2RpbmdTcGxpdHRpbmcgKHZhbHVlKSB7XG4gIC8vIDEuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIGlzb21vcnBoaWMgZGVjb2RpbmcgdmFsdWUuXG4gIGNvbnN0IGlucHV0ID0gdmFsdWVcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHZhbHVlcyBiZSBhIGxpc3Qgb2Ygc3RyaW5ncywgaW5pdGlhbGx5IGVtcHR5LlxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIC8vIDQuIExldCB0ZW1wb3JhcnlWYWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdGVtcG9yYXJ5VmFsdWUgPSAnJ1xuXG4gIC8vIDUuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDUuMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMjIgKFwiKVxuICAgIC8vICAgICAgb3IgVSswMDJDICgsKSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbiwgdG8gdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnXCInICYmIGNoYXIgIT09ICcsJyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA1LjIuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyA1LjIuMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pID09PSAweDIyKSB7XG4gICAgICAgIC8vIDUuMi4xLjEuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLCB0byB0ZW1wb3JhcnlWYWx1ZS5cbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gNS4yLjEuMi4gSWYgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBjb250aW51ZS5cbiAgICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4yLjIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyA1LjIuMi4xLiBBc3NlcnQ6IHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpcyBVKzAwMkMgKCwpLlxuICAgICAgICBhc3NlcnQoaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgPT09IDB4MkMpXG5cbiAgICAgICAgLy8gNS4yLjIuMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4zLiBSZW1vdmUgYWxsIEhUVFAgdGFiIG9yIHNwYWNlIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgPSByZW1vdmVDaGFycyh0ZW1wb3JhcnlWYWx1ZSwgdHJ1ZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgLy8gNS40LiBBcHBlbmQgdGVtcG9yYXJ5VmFsdWUgdG8gdmFsdWVzLlxuICAgIHZhbHVlcy5wdXNoKHRlbXBvcmFyeVZhbHVlKVxuXG4gICAgLy8gNS42LiBTZXQgdGVtcG9yYXJ5VmFsdWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICB0ZW1wb3JhcnlWYWx1ZSA9ICcnXG4gIH1cblxuICAvLyA2LiBSZXR1cm4gdmFsdWVzLlxuICByZXR1cm4gdmFsdWVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXQtZGVjb2RlLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBsb3dlcmNhc2UgaGVhZGVyIG5hbWVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2hlYWRlcnMnKS5IZWFkZXJzTGlzdH0gbGlzdFxuICovXG5mdW5jdGlvbiBnZXREZWNvZGVTcGxpdCAobmFtZSwgbGlzdCkge1xuICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuICBjb25zdCB2YWx1ZSA9IGxpc3QuZ2V0KG5hbWUsIHRydWUpXG5cbiAgLy8gMi4gSWYgdmFsdWUgaXMgbnVsbCwgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIHZhbHVlLlxuICByZXR1cm4gZ2V0dGluZ0RlY29kaW5nU3BsaXR0aW5nKHZhbHVlKVxufVxuXG5jb25zdCB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIHV0ZjhEZWNvZGVCeXRlcyAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAxLiBMZXQgYnVmZmVyIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyB0aHJlZSBieXRlcyBmcm9tXG4gIC8vICAgIGlvUXVldWUsIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG5cbiAgLy8gMi4gSWYgYnVmZmVyIGlzIDB4RUYgMHhCQiAweEJGLCB0aGVuIHJlYWQgdGhyZWVcbiAgLy8gICAgYnl0ZXMgZnJvbSBpb1F1ZXVlLiAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgaWYgKGJ1ZmZlclswXSA9PT0gMHhFRiAmJiBidWZmZXJbMV0gPT09IDB4QkIgJiYgYnVmZmVyWzJdID09PSAweEJGKSB7XG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDMpXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBVVEYtOFx1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuICBjb25zdCBvdXRwdXQgPSB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuY2xhc3MgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2Uge1xuICBnZXQgYmFzZVVybCAoKSB7XG4gICAgcmV0dXJuIGdldEdsb2JhbE9yaWdpbigpXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgfVxuXG4gIHBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxufVxuXG5jbGFzcyBFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IHtcbiAgc2V0dGluZ3NPYmplY3QgPSBuZXcgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2UoKVxufVxuXG5jb25zdCBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0ID0gbmV3IEVudmlyb25tZW50U2V0dGluZ3NPYmplY3QoKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNWYWxpZEVuY29kZWRVUkwsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNsYW1wQW5kQ29hcnNlbkNvbm5lY3Rpb25UaW1pbmdJbmZvLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIFRBT0NoZWNrLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICByZXNwb25zZVVSTCxcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgaXNCbG9iTGlrZSxcbiAgaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5LFxuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXRlcmF0b3JNaXhpbixcbiAgY3JlYXRlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICBieXRlc01hdGNoLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSGFzSHR0cHNTY2hlbWUsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICByZWFkQWxsQnl0ZXMsXG4gIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUsXG4gIGJ1aWxkQ29udGVudFJhbmdlLFxuICBwYXJzZU1ldGFkYXRhLFxuICBjcmVhdGVJbmZsYXRlLFxuICBleHRyYWN0TWltZVR5cGUsXG4gIGdldERlY29kZVNwbGl0LFxuICB1dGY4RGVjb2RlQnl0ZXMsXG4gIGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtIZWFkZXJzOiBTeW1ib2woJ2hlYWRlcnMnKSxcbiAga1NpZ25hbDogU3ltYm9sKCdzaWduYWwnKSxcbiAga1N0YXRlOiBTeW1ib2woJ3N0YXRlJyksXG4gIGtEaXNwYXRjaGVyOiBTeW1ib2woJ2Rpc3BhdGNoZXInKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJsb2IsIEZpbGUgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxuLy8gVE9ETyhAS2hhZnJhRGV2KTogcmVtb3ZlXG5jbGFzcyBGaWxlTGlrZSB7XG4gIGNvbnN0cnVjdG9yIChibG9iTGlrZSwgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRPRE86IGFyZ3VtZW50IGlkbCB0eXBlIGNoZWNrXG5cbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgVE9ET1xuICAgIGNvbnN0IHQgPSBvcHRpb25zLnR5cGVcblxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIC8vICAgIFRPRE9cblxuICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgIGNvbnN0IGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA/PyBEYXRlLm5vdygpXG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBibG9iTGlrZSxcbiAgICAgIG5hbWU6IG4sXG4gICAgICB0eXBlOiB0LFxuICAgICAgbGFzdE1vZGlmaWVkOiBkXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnN0cmVhbSguLi5hcmdzKVxuICB9XG5cbiAgYXJyYXlCdWZmZXIgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UuYXJyYXlCdWZmZXIoLi4uYXJncylcbiAgfVxuXG4gIHNsaWNlICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNsaWNlKC4uLmFyZ3MpXG4gIH1cblxuICB0ZXh0ICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnRleHQoLi4uYXJncylcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2l6ZVxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50eXBlXG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuICdGaWxlJ1xuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2IgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKEJsb2IpXG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAob2JqZWN0IGluc3RhbmNlb2YgRmlsZSkgfHxcbiAgICAoXG4gICAgICBvYmplY3QgJiZcbiAgICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZSdcbiAgICApXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc0Jsb2JMaWtlLCBpdGVyYXRvck1peGluIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTmF0aXZlRmlsZVxuXG4vLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2Zvcm1kYXRhXG5jbGFzcyBGb3JtRGF0YSB7XG4gIGNvbnN0cnVjdG9yIChmb3JtKSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnRm9ybURhdGEuYXBwZW5kJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHByZWZpeCwgJ3ZhbHVlJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZW5hbWUsIHByZWZpeCwgJ2ZpbGVuYW1lJylcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoXG4gICAgLy8gbmFtZSwgdmFsdWUsIGFuZCBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBBcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgfVxuXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0Zvcm1EYXRhLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyBUaGUgZGVsZXRlKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzIHdob3NlIG5hbWVcbiAgICAvLyBpcyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSB0aGlzW2tTdGF0ZV0uZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gIH1cblxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXRBbGwnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gdGhlIGVtcHR5IGxpc3QuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGVudHJpZXMgd2hvc2UgbmFtZSBpcyBuYW1lLCBpbiBvcmRlcixcbiAgICAvLyBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudmFsdWUpXG4gIH1cblxuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5oYXMnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gVGhlIGhhcyhuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFuIGVudHJ5XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3Q7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpICE9PSAtMVxuICB9XG5cbiAgc2V0IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5zZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCBwcmVmaXgpXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBUaGUgc2V0KG5hbWUsIHZhbHVlKSBhbmQgc2V0KG5hbWUsIGJsb2JWYWx1ZSwgZmlsZW5hbWUpIG1ldGhvZCBzdGVwc1xuICAgIC8vIGFyZTpcblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCBwcmVmaXgsICduYW1lJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAnbmFtZScpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlbmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aCBuYW1lLCB2YWx1ZSwgYW5kXG4gICAgLy8gZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCB3aG9zZSBuYW1lIGlzIG5hbWUsIHRoZW5cbiAgICAvLyByZXBsYWNlIHRoZSBmaXJzdCBzdWNoIGVudHJ5IHdpdGggZW50cnkgYW5kIHJlbW92ZSB0aGUgb3RoZXJzLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSBbXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZSgwLCBpZHgpLFxuICAgICAgICBlbnRyeSxcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKGlkeCArIDEpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgYXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgICB9XG4gIH1cblxuICBbbm9kZVV0aWwuaW5zcGVjdC5jdXN0b21dIChkZXB0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpc1trU3RhdGVdLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgaWYgKGFbYi5uYW1lXSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhW2IubmFtZV0pKSB7XG4gICAgICAgICAgYVtiLm5hbWVdLnB1c2goYi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhW2IubmFtZV0gPSBbYVtiLm5hbWVdLCBiLnZhbHVlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW2IubmFtZV0gPSBiLnZhbHVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhXG4gICAgfSwgeyBfX3Byb3RvX186IG51bGwgfSlcblxuICAgIG9wdGlvbnMuZGVwdGggPz89IGRlcHRoXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IG91dHB1dCA9IG5vZGVVdGlsLmZvcm1hdFdpdGhPcHRpb25zKG9wdGlvbnMsIHN0YXRlKVxuXG4gICAgLy8gcmVtb3ZlIFtPYmplY3QgbnVsbCBwcm90b3R5cGVdXG4gICAgcmV0dXJuIGBGb3JtRGF0YSAke291dHB1dC5zbGljZShvdXRwdXQuaW5kZXhPZignXScpICsgMil9YFxuICB9XG59XG5cbml0ZXJhdG9yTWl4aW4oJ0Zvcm1EYXRhJywgRm9ybURhdGEsIGtTdGF0ZSwgJ25hbWUnLCAndmFsdWUnKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGb3JtRGF0YS5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0QWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Zvcm1EYXRhJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2NyZWF0ZS1hbi1lbnRyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfEJsb2J9IHZhbHVlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGZpbGVuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBtYWtlRW50cnkgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSkge1xuICAvLyAxLiBTZXQgbmFtZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbmFtZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuXG4gIC8vIDIuIElmIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGVuIHNldCB2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmdcbiAgLy8gICAgdmFsdWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIElmIHZhbHVlIGlzIG5vdCBhIEZpbGUgb2JqZWN0LCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIHZhbHVlIGlzIFwiYmxvYlwiXG4gICAgaWYgKCFpc0ZpbGVMaWtlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSBpcyBmaWxlbmFtZS5cbiAgICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLyoqIEB0eXBlIHtGaWxlUHJvcGVydHlCYWd9ICovXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZFxuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgTmF0aXZlRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhLCBtYWtlRW50cnkgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzVVNWU3RyaW5nLCBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyB1dGY4RGVjb2RlQnl0ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEhUVFBfVE9LRU5fQ09ERVBPSU5UUywgaXNvbW9ycGhpY0RlY29kZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IG1ha2VFbnRyeSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IEZpbGU6IE5vZGVGaWxlIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTm9kZUZpbGVcblxuY29uc3QgZm9ybURhdGFOYW1lQnVmZmVyID0gQnVmZmVyLmZyb20oJ2Zvcm0tZGF0YTsgbmFtZT1cIicpXG5jb25zdCBmaWxlbmFtZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKCc7IGZpbGVuYW1lJylcbmNvbnN0IGRkID0gQnVmZmVyLmZyb20oJy0tJylcbmNvbnN0IGRkY3JsZiA9IEJ1ZmZlci5mcm9tKCctLVxcclxcbicpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJzXG4gKi9cbmZ1bmN0aW9uIGlzQXNjaWlTdHJpbmcgKGNoYXJzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGNoYXJzLmNoYXJDb2RlQXQoaSkgJiB+MHg3RikgIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNtdWx0aXBhcnQtZm9ybS1kYXRhLWJvdW5kYXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRhcnlcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb3VuZGFyeSAoYm91bmRhcnkpIHtcbiAgY29uc3QgbGVuZ3RoID0gYm91bmRhcnkubGVuZ3RoXG5cbiAgLy8gLSBpdHMgbGVuZ3RoIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMjcgYW5kIGxlc3NlciBvciBlcXVhbCB0byA3MCwgYW5kXG4gIGlmIChsZW5ndGggPCAyNyB8fCBsZW5ndGggPiA3MCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gLSBpdCBpcyBjb21wb3NlZCBieSBieXRlcyBpbiB0aGUgcmFuZ2VzIDB4MzAgdG8gMHgzOSwgMHg0MSB0byAweDVBLCBvclxuICAvLyAgIDB4NjEgdG8gMHg3QSwgaW5jbHVzaXZlIChBU0NJSSBhbHBoYW51bWVyaWMpLCBvciB3aGljaCBhcmUgMHgyNyAoJyksXG4gIC8vICAgMHgyRCAoLSkgb3IgMHg1RiAoXykuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjcCA9IGJvdW5kYXJ5LmNoYXJDb2RlQXQoaSlcblxuICAgIGlmICghKFxuICAgICAgKGNwID49IDB4MzAgJiYgY3AgPD0gMHgzOSkgfHxcbiAgICAgIChjcCA+PSAweDQxICYmIGNwIDw9IDB4NWEpIHx8XG4gICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdhKSB8fFxuICAgICAgY3AgPT09IDB4MjcgfHxcbiAgICAgIGNwID09PSAweDJkIHx8XG4gICAgICBjcCA9PT0gMHg1ZlxuICAgICkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2FuZHJldWJvdGVsbGEuZ2l0aHViLmlvL211bHRpcGFydC1mb3JtLWRhdGEvI211bHRpcGFydC1mb3JtLWRhdGEtcGFyc2VyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW5wdXRcbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTxpbXBvcnQoJy4vZGF0YS11cmwnKVsncGFyc2VNSU1FVHlwZSddPn0gbWltZVR5cGVcbiAqL1xuZnVuY3Rpb24gbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgKGlucHV0LCBtaW1lVHlwZSkge1xuICAvLyAxLiBBc3NlcnQ6IG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLlxuICBhc3NlcnQobWltZVR5cGUgIT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZS5lc3NlbmNlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG5cbiAgY29uc3QgYm91bmRhcnlTdHJpbmcgPSBtaW1lVHlwZS5wYXJhbWV0ZXJzLmdldCgnYm91bmRhcnknKVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0gZG9lcyBub3QgZXhpc3QsIHJldHVybiBmYWlsdXJlLlxuICAvLyAgICBPdGhlcndpc2UsIGxldCBib3VuZGFyeSBiZSB0aGUgcmVzdWx0IG9mIFVURi04IGRlY29kaW5nIG1pbWVUeXBlXHUyMDE5c1xuICAvLyAgICBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0uXG4gIGlmIChib3VuZGFyeVN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYm91bmRhcnkgPSBCdWZmZXIuZnJvbShgLS0ke2JvdW5kYXJ5U3RyaW5nfWAsICd1dGY4JylcblxuICAvLyAzLiBMZXQgZW50cnkgbGlzdCBiZSBhbiBlbXB0eSBlbnRyeSBsaXN0LlxuICBjb25zdCBlbnRyeUxpc3QgPSBbXVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIgdG8gYSBieXRlIGluIGlucHV0LCBpbml0aWFsbHkgcG9pbnRpbmcgYXRcbiAgLy8gICAgdGhlIGZpcnN0IGJ5dGUuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gTm90ZTogdW5kaWNpIGFkZGl0aW9uLCBhbGxvd3MgbGVhZGluZyBhbmQgdHJhaWxpbmcgQ1JMRnMuXG4gIHdoaWxlIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcbiAgfVxuXG4gIGxldCB0cmFpbGluZyA9IGlucHV0Lmxlbmd0aFxuXG4gIHdoaWxlIChpbnB1dFt0cmFpbGluZyAtIDFdID09PSAweDBhICYmIGlucHV0W3RyYWlsaW5nIC0gMl0gPT09IDB4MGQpIHtcbiAgICB0cmFpbGluZyAtPSAyXG4gIH1cblxuICBpZiAodHJhaWxpbmcgIT09IGlucHV0Lmxlbmd0aCkge1xuICAgIGlucHV0ID0gaW5wdXQuc3ViYXJyYXkoMCwgdHJhaWxpbmcpXG4gIH1cblxuICAvLyA1LiBXaGlsZSB0cnVlOlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIDUuMS4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aCAweDJEIDB4MkRcbiAgICAvLyAgICAgIChgLS1gKSBmb2xsb3dlZCBieSBib3VuZGFyeSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyICsgdGhlIGxlbmd0aCBvZlxuICAgIC8vICAgICAgYm91bmRhcnkuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgLy8gTm90ZTogYm91bmRhcnkgaXMgcGFkZGVkIHdpdGggMiBkYXNoZXMgYWxyZWFkeSwgbm8gbmVlZCB0byBhZGQgMi5cbiAgICBpZiAoaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIHBvc2l0aW9uLnBvc2l0aW9uICsgYm91bmRhcnkubGVuZ3RoKS5lcXVhbHMoYm91bmRhcnkpKSB7XG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbiArPSBib3VuZGFyeS5sZW5ndGhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDUuMi4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIHRoZSBzZXF1ZW5jZSBvZiBieXRlcyAweDJEIDB4MkQgMHgwRCAweDBBXG4gICAgLy8gICAgICAoYC0tYCBmb2xsb3dlZCBieSBDUiBMRikgZm9sbG93ZWQgYnkgdGhlIGVuZCBvZiBpbnB1dCwgcmV0dXJuIGVudHJ5IGxpc3QuXG4gICAgLy8gTm90ZTogYSBib2R5IGRvZXMgTk9UIG5lZWQgdG8gZW5kIHdpdGggQ1JMRi4gSXQgY2FuIGVuZCB3aXRoIC0tLlxuICAgIGlmIChcbiAgICAgIChwb3NpdGlvbi5wb3NpdGlvbiA9PT0gaW5wdXQubGVuZ3RoIC0gMiAmJiBidWZmZXJTdGFydHNXaXRoKGlucHV0LCBkZCwgcG9zaXRpb24pKSB8fFxuICAgICAgKHBvc2l0aW9uLnBvc2l0aW9uID09PSBpbnB1dC5sZW5ndGggLSA0ICYmIGJ1ZmZlclN0YXJ0c1dpdGgoaW5wdXQsIGRkY3JsZiwgcG9zaXRpb24pKVxuICAgICkge1xuICAgICAgcmV0dXJuIGVudHJ5TGlzdFxuICAgIH1cblxuICAgIC8vIDUuMy4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MERcbiAgICAvLyAgICAgIDB4MEEgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSAhPT0gMHgwZCB8fCBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbiArIDFdICE9PSAweDBhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gNS40LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIG5ld2xpbmUuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcblxuICAgIC8vIDUuNS4gTGV0IG5hbWUsIGZpbGVuYW1lIGFuZCBjb250ZW50VHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgICAvLyAgICAgIG11bHRpcGFydC9mb3JtLWRhdGEgaGVhZGVycyBvbiBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHRcbiAgICAvLyAgICAgIGlzIG5vdCBmYWlsdXJlLiBPdGhlcndpc2UsIHJldHVybiBmYWlsdXJlLlxuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFIZWFkZXJzKGlucHV0LCBwb3NpdGlvbilcblxuICAgIGlmIChyZXN1bHQgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIGxldCB7IG5hbWUsIGZpbGVuYW1lLCBjb250ZW50VHlwZSwgZW5jb2RpbmcgfSA9IHJlc3VsdFxuXG4gICAgLy8gNS42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIGVtcHR5IGxpbmUgdGhhdCBtYXJrc1xuICAgIC8vICAgICAgdGhlIGVuZCBvZiB0aGUgaGVhZGVycy4pXG4gICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuXG4gICAgLy8gNS43LiBMZXQgYm9keSBiZSB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgICBsZXQgYm9keVxuXG4gICAgLy8gNS44LiBCb2R5IGxvb3A6IFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gICAgLy8gVE9ETzogdGhlIHN0ZXBzIGhlcmUgYXJlIGNvbXBsZXRlbHkgd3JvbmdcbiAgICB7XG4gICAgICBjb25zdCBib3VuZGFyeUluZGV4ID0gaW5wdXQuaW5kZXhPZihib3VuZGFyeS5zdWJhcnJheSgyKSwgcG9zaXRpb24ucG9zaXRpb24pXG5cbiAgICAgIGlmIChib3VuZGFyeUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIGJvZHkgPSBpbnB1dC5zdWJhcnJheShwb3NpdGlvbi5wb3NpdGlvbiwgYm91bmRhcnlJbmRleCAtIDQpXG5cbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IGJvZHkubGVuZ3RoXG5cbiAgICAgIC8vIE5vdGU6IHBvc2l0aW9uIG11c3QgYmUgYWR2YW5jZWQgYnkgdGhlIGJvZHkncyBsZW5ndGggYmVmb3JlIGJlaW5nXG4gICAgICAvLyBkZWNvZGVkLCBvdGhlcndpc2UgdGhlIHBhcnNpbmcgd2lsbCBmYWlsLlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0Jykge1xuICAgICAgICBib2R5ID0gQnVmZmVyLmZyb20oYm9keS50b1N0cmluZygpLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjkuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgIC8vICAgICAgMHgwRCAweDBBIChDUiBMRiksIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGFkdmFuY2UgcG9zaXRpb24gYnkgMi5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkIHx8IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cblxuICAgIC8vIDUuMTAuIElmIGZpbGVuYW1lIGlzIG5vdCBudWxsOlxuICAgIGxldCB2YWx1ZVxuXG4gICAgaWYgKGZpbGVuYW1lICE9PSBudWxsKSB7XG4gICAgICAvLyA1LjEwLjEuIElmIGNvbnRlbnRUeXBlIGlzIG51bGwsIHNldCBjb250ZW50VHlwZSB0byBcInRleHQvcGxhaW5cIi5cbiAgICAgIGNvbnRlbnRUeXBlID8/PSAndGV4dC9wbGFpbidcblxuICAgICAgLy8gNS4xMC4yLiBJZiBjb250ZW50VHlwZSBpcyBub3QgYW4gQVNDSUkgc3RyaW5nLCBzZXQgY29udGVudFR5cGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgLy8gTm90ZTogYGJ1ZmZlci5pc0FzY2lpYCBjYW4gYmUgdXNlZCBhdCB6ZXJvLWNvc3QsIGJ1dCBjb252ZXJ0aW5nIGEgc3RyaW5nIHRvIGEgYnVmZmVyIGlzIGEgaGlnaCBvdmVyaGVhZC5cbiAgICAgIC8vIENvbnRlbnQtVHlwZSBpcyBhIHJlbGF0aXZlbHkgc21hbGwgc3RyaW5nLCBzbyBpdCBpcyBmYXN0ZXIgdG8gdXNlIGBTdHJpbmcjY2hhckNvZGVBdGAuXG4gICAgICBpZiAoIWlzQXNjaWlTdHJpbmcoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gJydcbiAgICAgIH1cblxuICAgICAgLy8gNS4xMC4zLiBMZXQgdmFsdWUgYmUgYSBuZXcgRmlsZSBvYmplY3Qgd2l0aCBuYW1lIGZpbGVuYW1lLCB0eXBlIGNvbnRlbnRUeXBlLCBhbmQgYm9keSBib2R5LlxuICAgICAgdmFsdWUgPSBuZXcgRmlsZShbYm9keV0sIGZpbGVuYW1lLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDUuMTEuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNS4xMS4xLiBMZXQgdmFsdWUgYmUgdGhlIFVURi04IGRlY29kaW5nIHdpdGhvdXQgQk9NIG9mIGJvZHkuXG4gICAgICB2YWx1ZSA9IHV0ZjhEZWNvZGVCeXRlcyhCdWZmZXIuZnJvbShib2R5KSlcbiAgICB9XG5cbiAgICAvLyA1LjEyLiBBc3NlcnQ6IG5hbWUgaXMgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIGFuZCB2YWx1ZSBpcyBlaXRoZXIgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIG9yIGEgRmlsZSBvYmplY3QuXG4gICAgYXNzZXJ0KGlzVVNWU3RyaW5nKG5hbWUpKVxuICAgIGFzc2VydCgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBpc1VTVlN0cmluZyh2YWx1ZSkpIHx8IGlzRmlsZUxpa2UodmFsdWUpKVxuXG4gICAgLy8gNS4xMy4gQ3JlYXRlIGFuIGVudHJ5IHdpdGggbmFtZSBhbmQgdmFsdWUsIGFuZCBhcHBlbmQgaXQgdG8gZW50cnkgbGlzdC5cbiAgICBlbnRyeUxpc3QucHVzaChtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1tdWx0aXBhcnQtZm9ybS1kYXRhLWhlYWRlcnNcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VNdWx0aXBhcnRGb3JtRGF0YUhlYWRlcnMgKGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlIGJlIG51bGwuXG4gIGxldCBuYW1lID0gbnVsbFxuICBsZXQgZmlsZW5hbWUgPSBudWxsXG4gIGxldCBjb250ZW50VHlwZSA9IG51bGxcbiAgbGV0IGVuY29kaW5nID0gbnVsbFxuXG4gIC8vIDIuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMi4xLiBJZiBwb3NpdGlvbiBwb2ludHMgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQSAoQ1IgTEYpOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgICAgLy8gMi4xLjEuIElmIG5hbWUgaXMgbnVsbCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIC8vIDIuMS4yLiBSZXR1cm4gbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlLlxuICAgICAgcmV0dXJuIHsgbmFtZSwgZmlsZW5hbWUsIGNvbnRlbnRUeXBlLCBlbmNvZGluZyB9XG4gICAgfVxuXG4gICAgLy8gMi4yLiBMZXQgaGVhZGVyIG5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmVcbiAgICAvLyAgICAgIG5vdCAweDBBIChMRiksIDB4MEQgKENSKSBvciAweDNBICg6KSwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgbGV0IGhlYWRlck5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQgJiYgY2hhciAhPT0gMHgzYSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAyLjMuIFJlbW92ZSBhbnkgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb3IgZW5kIG9mIGhlYWRlciBuYW1lLlxuICAgIGhlYWRlck5hbWUgPSByZW1vdmVDaGFycyhoZWFkZXJOYW1lLCB0cnVlLCB0cnVlLCAoY2hhcikgPT4gY2hhciA9PT0gMHg5IHx8IGNoYXIgPT09IDB4MjApXG5cbiAgICAvLyAyLjQuIElmIGhlYWRlciBuYW1lIGRvZXMgbm90IG1hdGNoIHRoZSBmaWVsZC1uYW1lIHRva2VuIHByb2R1Y3Rpb24sIHJldHVybiBmYWlsdXJlLlxuICAgIGlmICghSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QoaGVhZGVyTmFtZS50b1N0cmluZygpKSkge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDIuNS4gSWYgdGhlIGJ5dGUgYXQgcG9zaXRpb24gaXMgbm90IDB4M0EgKDopLCByZXR1cm4gZmFpbHVyZS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDNhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gMi42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gMi43LiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmUgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZ2l2ZW4gcG9zaXRpb24uXG4gICAgLy8gICAgICAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAweDIwIHx8IGNoYXIgPT09IDB4MDksXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi44LiBCeXRlLWxvd2VyY2FzZSBoZWFkZXIgbmFtZSBhbmQgc3dpdGNoIG9uIHRoZSByZXN1bHQ6XG4gICAgc3dpdGNoIChidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGhlYWRlck5hbWUpKSB7XG4gICAgICBjYXNlICdjb250ZW50LWRpc3Bvc2l0aW9uJzoge1xuICAgICAgICAvLyAxLiBTZXQgbmFtZSBhbmQgZmlsZW5hbWUgdG8gbnVsbC5cbiAgICAgICAgbmFtZSA9IGZpbGVuYW1lID0gbnVsbFxuXG4gICAgICAgIC8vIDIuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgICAgICAvLyAgICBgZm9ybS1kYXRhOyBuYW1lPVwiYCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgIGlmICghYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZm9ybURhdGFOYW1lQnVmZmVyLCBwb3NpdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIHNvIGl0IHBvaW50cyBhdCB0aGUgYnl0ZSBhZnRlciB0aGUgbmV4dCAweDIyIChcIilcbiAgICAgICAgLy8gICAgYnl0ZSAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDE3XG5cbiAgICAgICAgLy8gNC4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBuYW1lIGdpdmVuXG4gICAgICAgIC8vICAgIGlucHV0IGFuZCBwb3NpdGlvbiwgaWYgdGhlIHJlc3VsdCBpcyBub3QgZmFpbHVyZS4gT3RoZXJ3aXNlLCByZXR1cm5cbiAgICAgICAgLy8gICAgZmFpbHVyZS5cbiAgICAgICAgbmFtZSA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFOYW1lKGlucHV0LCBwb3NpdGlvbilcblxuICAgICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIElmIHBvc2l0aW9uIHBvaW50cyB0byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHN0YXJ0aW5nIHdpdGggYDsgZmlsZW5hbWU9XCJgOlxuICAgICAgICBpZiAoYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZmlsZW5hbWVCdWZmZXIsIHBvc2l0aW9uKSkge1xuICAgICAgICAgIC8vIE5vdGU6IHVuZGljaSBhbHNvIGhhbmRsZXMgZmlsZW5hbWUqXG4gICAgICAgICAgbGV0IGNoZWNrID0gcG9zaXRpb24ucG9zaXRpb24gKyBmaWxlbmFtZUJ1ZmZlci5sZW5ndGhcblxuICAgICAgICAgIGlmIChpbnB1dFtjaGVja10gPT09IDB4MmEpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDFcbiAgICAgICAgICAgIGNoZWNrICs9IDFcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5wdXRbY2hlY2tdICE9PSAweDNkIHx8IGlucHV0W2NoZWNrICsgMV0gIT09IDB4MjIpIHsgLy8gPVwiXG4gICAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBzbyBpdCBwb2ludHMgYXQgdGhlIGJ5dGUgYWZ0ZXIgdGhlIG5leHQgMHgyMiAoXCIpIGJ5dGVcbiAgICAgICAgICAvLyAgICAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMTJcblxuICAgICAgICAgIC8vIDIuIFNldCBmaWxlbmFtZSB0byB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBtdWx0aXBhcnQvZm9ybS1kYXRhIG5hbWUgZ2l2ZW5cbiAgICAgICAgICAvLyAgICBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHQgaXMgbm90IGZhaWx1cmUuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZShpbnB1dCwgcG9zaXRpb24pXG5cbiAgICAgICAgICBpZiAoZmlsZW5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10eXBlJzoge1xuICAgICAgICAvLyAxLiBMZXQgaGVhZGVyIHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlXG4gICAgICAgIC8vICAgIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gMi4gUmVtb3ZlIGFueSBIVFRQIHRhYiBvciBzcGFjZSBieXRlcyBmcm9tIHRoZSBlbmQgb2YgaGVhZGVyIHZhbHVlLlxuICAgICAgICBoZWFkZXJWYWx1ZSA9IHJlbW92ZUNoYXJzKGhlYWRlclZhbHVlLCBmYWxzZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgICAgIC8vIDMuIFNldCBjb250ZW50VHlwZSB0byB0aGUgaXNvbW9ycGhpYyBkZWNvZGluZyBvZiBoZWFkZXIgdmFsdWUuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gaXNvbW9ycGhpY0RlY29kZShoZWFkZXJWYWx1ZSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyc6IHtcbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgaGVhZGVyVmFsdWUgPSByZW1vdmVDaGFycyhoZWFkZXJWYWx1ZSwgZmFsc2UsIHRydWUsIChjaGFyKSA9PiBjaGFyID09PSAweDkgfHwgY2hhciA9PT0gMHgyMClcblxuICAgICAgICBlbmNvZGluZyA9IGlzb21vcnBoaWNEZWNvZGUoaGVhZGVyVmFsdWUpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgLy8gKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgICAgIGNvbGxlY3RBU2VxdWVuY2VPZkJ5dGVzKFxuICAgICAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQsXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuOS4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQVxuICAgIC8vICAgICAgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyIChwYXN0IHRoZSBuZXdsaW5lKS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkICYmIGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1hLW11bHRpcGFydC1mb3JtLWRhdGEtbmFtZVxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZSAoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIC8vIDEuIEFzc2VydDogVGhlIGJ5dGUgYXQgKHBvc2l0aW9uIC0gMSkgaXMgMHgyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gLSAxXSA9PT0gMHgyMilcblxuICAvLyAyLiBMZXQgbmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBieXRlcyB0aGF0IGFyZSBub3QgMHgwQSAoTEYpLCAweDBEIChDUikgb3IgMHgyMiAoXCIpLCBnaXZlbiBwb3NpdGlvbi5cbiAgLyoqIEB0eXBlIHtzdHJpbmcgfCBCdWZmZXJ9ICovXG4gIGxldCBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCAmJiBjaGFyICE9PSAweDIyLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyAzLiBJZiB0aGUgYnl0ZSBhdCBwb3NpdGlvbiBpcyBub3QgMHgyMiAoXCIpLCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBhZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gIT09IDB4MjIpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBuYW1lIGNvdWxkIGJlICdmYWlsdXJlJ1xuICB9IGVsc2Uge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDQuIFJlcGxhY2UgYW55IG9jY3VycmVuY2Ugb2YgdGhlIGZvbGxvd2luZyBzdWJzZXF1ZW5jZXMgaW4gbmFtZSB3aXRoIHRoZSBnaXZlbiBieXRlOlxuICAvLyAtIGAlMEFgOiAweDBBIChMRilcbiAgLy8gLSBgJTBEYDogMHgwRCAoQ1IpXG4gIC8vIC0gYCUyMmA6IDB4MjIgKFwiKVxuICBuYW1lID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5hbWUpXG4gICAgLnJlcGxhY2UoLyUwQS9pZywgJ1xcbicpXG4gICAgLnJlcGxhY2UoLyUwRC9pZywgJ1xccicpXG4gICAgLnJlcGxhY2UoLyUyMi9nLCAnXCInKVxuXG4gIC8vIDUuIFJldHVybiB0aGUgVVRGLTggZGVjb2Rpbmcgd2l0aG91dCBCT00gb2YgbmFtZS5cbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBudW1iZXIpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgbGV0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICB3aGlsZSAoc3RhcnQgPCBpbnB1dC5sZW5ndGggJiYgY29uZGl0aW9uKGlucHV0W3N0YXJ0XSkpIHtcbiAgICArK3N0YXJ0XG4gIH1cblxuICByZXR1cm4gaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIChwb3NpdGlvbi5wb3NpdGlvbiA9IHN0YXJ0KSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKGJ1ZiwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gYnVmLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgYnVmLmxlbmd0aCAmJiBwcmVkaWNhdGUoYnVmW2xlYWRdKSkgbGVhZCsrXG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICB3aGlsZSAodHJhaWwgPiAwICYmIHByZWRpY2F0ZShidWZbdHJhaWxdKSkgdHJhaWwtLVxuICB9XG5cbiAgcmV0dXJuIGxlYWQgPT09IDAgJiYgdHJhaWwgPT09IGJ1Zi5sZW5ndGggLSAxID8gYnVmIDogYnVmLnN1YmFycmF5KGxlYWQsIHRyYWlsICsgMSlcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYge0BwYXJhbSBidWZmZXJ9IHN0YXJ0cyB3aXRoIHtAcGFyYW0gc3RhcnR9XG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc3RhcnRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlclN0YXJ0c1dpdGggKGJ1ZmZlciwgc3RhcnQsIHBvc2l0aW9uKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgc3RhcnQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0W2ldICE9PSBidWZmZXJbcG9zaXRpb24ucG9zaXRpb24gKyBpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG11bHRpcGFydEZvcm1EYXRhUGFyc2VyLFxuICB2YWxpZGF0ZUJvdW5kYXJ5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQmxvYkxpa2UsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGV4dHJhY3RNaW1lVHlwZSxcbiAgdXRmOERlY29kZUJ5dGVzXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGlzRXJyb3JlZCwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsL3R5cGVzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsgbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEtcGFyc2VyJylcbmxldCByYW5kb21cblxudHJ5IHtcbiAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnbm9kZTpjcnlwdG8nKVxuICByYW5kb20gPSAobWF4KSA9PiBjcnlwdG8ucmFuZG9tSW50KDAsIG1heClcbn0gY2F0Y2gge1xuICByYW5kb20gPSAobWF4KSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKG1heCkpXG59XG5cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuY29uc3QgaGFzRmluYWxpemF0aW9uUmVnaXN0cnkgPSBnbG9iYWxUaGlzLkZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MTgnKSAhPT0gMFxubGV0IHN0cmVhbVJlZ2lzdHJ5XG5cbmlmIChoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSkge1xuICBzdHJlYW1SZWdpc3RyeSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgod2Vha1JlZikgPT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHdlYWtSZWYuZGVyZWYoKVxuICAgIGlmIChzdHJlYW0gJiYgIXN0cmVhbS5sb2NrZWQgJiYgIWlzRGlzdHVyYmVkKHN0cmVhbSkgJiYgIWlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICBzdHJlYW0uY2FuY2VsKCdSZXNwb25zZSBvYmplY3QgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQnKS5jYXRjaChub29wKVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHN0cmVhbSBiZSBudWxsLlxuICBsZXQgc3RyZWFtID0gbnVsbFxuXG4gIC8vIDIuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbiBzZXQgc3RyZWFtIHRvIG9iamVjdC5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgc3RyZWFtID0gb2JqZWN0XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBvYmplY3QgaXMgYSBCbG9iIG9iamVjdCwgc2V0IHN0cmVhbSB0byB0aGVcbiAgICAvLyAgICByZXN1bHQgb2YgcnVubmluZyBvYmplY3RcdTIwMTlzIGdldCBzdHJlYW0uXG4gICAgc3RyZWFtID0gb2JqZWN0LnN0cmVhbSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgc3RyZWFtIHRvIGEgbmV3IFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgYW5kIHNldFxuICAgIC8vICAgIHVwIHN0cmVhbSB3aXRoIGJ5dGUgcmVhZGluZyBzdXBwb3J0LlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnID8gdGV4dEVuY29kZXIuZW5jb2RlKHNvdXJjZSkgOiBzb3VyY2VcblxuICAgICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYnVmZmVyKVxuICAgICAgICB9XG5cbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6ICdieXRlcydcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gQXNzZXJ0OiBzdHJlYW0gaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QuXG4gIGFzc2VydChpc1JlYWRhYmxlU3RyZWFtTGlrZShzdHJlYW0pKVxuXG4gIC8vIDYuIExldCBhY3Rpb24gYmUgbnVsbC5cbiAgbGV0IGFjdGlvbiA9IG51bGxcblxuICAvLyA3LiBMZXQgc291cmNlIGJlIG51bGwuXG4gIGxldCBzb3VyY2UgPSBudWxsXG5cbiAgLy8gOC4gTGV0IGxlbmd0aCBiZSBudWxsLlxuICBsZXQgbGVuZ3RoID0gbnVsbFxuXG4gIC8vIDkuIExldCB0eXBlIGJlIG51bGwuXG4gIGxldCB0eXBlID0gbnVsbFxuXG4gIC8vIDEwLiBTd2l0Y2ggb24gb2JqZWN0OlxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBvYmplY3QuXG4gICAgLy8gTm90ZTogc2V0dGluZyBzb3VyY2UgdG8gYSBVaW50OEFycmF5IGhlcmUgYnJlYWtzIHNvbWUgbW9ja2luZyBhc3N1bXB0aW9ucy5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCB0eXBlIHRvIGB0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIC8vIFVSTFNlYXJjaFBhcmFtc1xuXG4gICAgLy8gc3BlYyBzYXlzIHRvIHJ1biBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb24gYm9keS5saXN0XG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBOb2RlLmpzIGFzIGFwYXJ0IG9mIGFuIFVSTFNlYXJjaFBhcmFtcyBpbnN0YW5jZSB0b1N0cmluZyBtZXRob2RcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMNDkwXG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMMTEwMFxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBzZXJpYWxpemVyIHdpdGggb2JqZWN0XHUyMDE5cyBsaXN0LlxuICAgIHNvdXJjZSA9IG9iamVjdC50b1N0cmluZygpXG5cbiAgICAvLyBTZXQgdHlwZSB0byBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LnNsaWNlKCkpXG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJWaWV3XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LmJ1ZmZlci5zbGljZShvYmplY3QuYnl0ZU9mZnNldCwgb2JqZWN0LmJ5dGVPZmZzZXQgKyBvYmplY3QuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShvYmplY3QpKSB7XG4gICAgY29uc3QgYm91bmRhcnkgPSBgLS0tLWZvcm1kYXRhLXVuZGljaS0wJHtgJHtyYW5kb20oMWUxMSl9YC5wYWRTdGFydCgxMSwgJzAnKX1gXG4gICAgY29uc3QgcHJlZml4ID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGFgXG5cbiAgICAvKiEgZm9ybWRhdGEtcG9seWZpbGwuIE1JVCBMaWNlbnNlLiBKaW1teSBXXHUwMEU0cnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdFx1MjAxOXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ1JMRiBpcyBhcHBlbmRlZCB0byB0aGUgYm9keSB0byBmdW5jdGlvbiB3aXRoIGxlZ2FjeSBzZXJ2ZXJzIGFuZCBtYXRjaCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9ibG9iLzM0MzRjNmI0NmU2ODI0NTI5NzM5NzJlODMxMzYxM2RmYTU4Y2Q2OTAvbGliL21pbWUuYyNMMTAyOS1MMTAzMFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy82M1xuICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAtLSR7Ym91bmRhcnl9LS1cXHJcXG5gKVxuICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rKVxuICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgaWYgKGhhc1Vua25vd25TaXplVmFsdWUpIHtcbiAgICAgIGxlbmd0aCA9IG51bGxcbiAgICB9XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGJsb2JQYXJ0cykge1xuICAgICAgICBpZiAocGFydC5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHBhcnQuc3RyZWFtKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB5aWVsZCBwYXJ0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdHlwZSB0byBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9YCxcbiAgICAvLyBmb2xsb3dlZCBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBib3VuZGFyeSBzdHJpbmcgZ2VuZXJhdGVkXG4gICAgLy8gYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgZW5jb2RpbmcgYWxnb3JpdGhtLlxuICAgIHR5cGUgPSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gQmxvYlxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICAvLyBTZXQgbGVuZ3RoIHRvIG9iamVjdFx1MjAxOXMgc2l6ZS5cbiAgICBsZW5ndGggPSBvYmplY3Quc2l6ZVxuXG4gICAgLy8gSWYgb2JqZWN0XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSBpcyBub3QgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIHNldFxuICAgIC8vIHR5cGUgdG8gaXRzIHZhbHVlLlxuICAgIGlmIChvYmplY3QudHlwZSkge1xuICAgICAgdHlwZSA9IG9iamVjdC50eXBlXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3RbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYga2VlcGFsaXZlIGlzIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGtlZXBhbGl2ZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2VlcGFsaXZlJylcbiAgICB9XG5cbiAgICAvLyBJZiBvYmplY3QgaXMgZGlzdHVyYmVkIG9yIGxvY2tlZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpIHx8IG9iamVjdC5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdSZXNwb25zZSBib2R5IG9iamVjdCBzaG91bGQgbm90IGJlIGRpc3R1cmJlZCBvciBsb2NrZWQnXG4gICAgICApXG4gICAgfVxuXG4gICAgc3RyZWFtID1cbiAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtID8gb2JqZWN0IDogUmVhZGFibGVTdHJlYW1Gcm9tKG9iamVjdClcbiAgfVxuXG4gIC8vIDExLiBJZiBzb3VyY2UgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCBhY3Rpb24gdG8gYVxuICAvLyBzdGVwIHRoYXQgcmV0dXJucyBzb3VyY2UgYW5kIGxlbmd0aCB0byBzb3VyY2VcdTIwMTlzIGxlbmd0aC5cbiAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnIHx8IHV0aWwuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHNvdXJjZSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBhY3Rpb24gaXMgbm9uLW51bGwsIHRoZW4gcnVuIHRoZXNlIHN0ZXBzIGluIGluIHBhcmFsbGVsOlxuICBpZiAoYWN0aW9uICE9IG51bGwpIHtcbiAgICAvLyBSdW4gYWN0aW9uLlxuICAgIGxldCBpdGVyYXRvclxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gYWN0aW9uKG9iamVjdClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIFdoZW4gcnVubmluZyBhY3Rpb24gaXMgZG9uZSwgY2xvc2Ugc3RyZWFtLlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgICAgY29udHJvbGxlci5ieW9iUmVxdWVzdD8ucmVzcG9uZCgwKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgb25lIG9yIG1vcmUgYnl0ZXMgYXJlIGF2YWlsYWJsZSBhbmQgc3RyZWFtIGlzIG5vdCBlcnJvcmVkLFxuICAgICAgICAgIC8vIGVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZVxuICAgICAgICAgIC8vIGJ5dGVzIGludG8gc3RyZWFtLlxuICAgICAgICAgIGlmICghaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHZhbHVlKVxuICAgICAgICAgICAgaWYgKGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShidWZmZXIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogJ2J5dGVzJ1xuICAgIH0pXG4gIH1cblxuICAvLyAxMy4gTGV0IGJvZHkgYmUgYSBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0sIHNvdXJjZSBpcyBzb3VyY2UsXG4gIC8vIGFuZCBsZW5ndGggaXMgbGVuZ3RoLlxuICBjb25zdCBib2R5ID0geyBzdHJlYW0sIHNvdXJjZSwgbGVuZ3RoIH1cblxuICAvLyAxNC4gUmV0dXJuIChib2R5LCB0eXBlKS5cbiAgcmV0dXJuIFtib2R5LCB0eXBlXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXQtc2FmZWx5LWV4dHJhY3RcbmZ1bmN0aW9uIHNhZmVseUV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIC8vIFRvIHNhZmVseSBleHRyYWN0IGEgYm9keSBhbmQgYSBgQ29udGVudC1UeXBlYCB2YWx1ZSBmcm9tXG4gIC8vIGEgYnl0ZSBzZXF1ZW5jZSBvciBCb2R5SW5pdCBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuOlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBBc3NlcnQ6IG9iamVjdCBpcyBuZWl0aGVyIGRpc3R1cmJlZCBub3IgbG9ja2VkLlxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCF1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCksICdUaGUgYm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLicpXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIW9iamVjdC5sb2NrZWQsICdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGV4dHJhY3Rpbmcgb2JqZWN0LlxuICByZXR1cm4gZXh0cmFjdEJvZHkob2JqZWN0LCBrZWVwYWxpdmUpXG59XG5cbmZ1bmN0aW9uIGNsb25lQm9keSAoaW5zdGFuY2UsIGJvZHkpIHtcbiAgLy8gVG8gY2xvbmUgYSBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNsb25lXG5cbiAgLy8gMS4gTGV0IFx1MDBBQiBvdXQxLCBvdXQyIFx1MDBCQiBiZSB0aGUgcmVzdWx0IG9mIHRlZWluZyBib2R5XHUyMDE5cyBzdHJlYW0uXG4gIGNvbnN0IFtvdXQxLCBvdXQyXSA9IGJvZHkuc3RyZWFtLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHlcdTIwMTlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogb3V0MixcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxufVxuXG5mdW5jdGlvbiBib2R5TWl4aW5NZXRob2RzIChpbnN0YW5jZSkge1xuICBjb25zdCBtZXRob2RzID0ge1xuICAgIGJsb2IgKCkge1xuICAgICAgLy8gVGhlIGJsb2IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBCbG9iIHdob3NlXG4gICAgICAvLyBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHdob3NlIHR5cGUgYXR0cmlidXRlIGlzIHRoaXNcdTIwMTlzXG4gICAgICAvLyBNSU1FIHR5cGUuXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG1pbWVUeXBlID0gJydcbiAgICAgICAgfSBlbHNlIGlmIChtaW1lVHlwZSkge1xuICAgICAgICAgIG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKG1pbWVUeXBlKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgQmxvYiB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHR5cGUgYXR0cmlidXRlXG4gICAgICAgIC8vIGlzIG1pbWVUeXBlLlxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiBtaW1lVHlwZSB9KVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFycmF5QnVmZmVyICgpIHtcbiAgICAgIC8vIFRoZSBhcnJheUJ1ZmZlcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHRcbiAgICAgIC8vIG9mIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIG5ldyBBcnJheUJ1ZmZlclxuICAgICAgLy8gd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBjb25zdW1lQm9keSh0aGlzLCB1dGY4RGVjb2RlQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBqc29uICgpIHtcbiAgICAgIC8vIFRoZSBqc29uKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBwYXJzZSBKU09OIGZyb20gYnl0ZXMuXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgcGFyc2VKU09ORnJvbUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgZm9ybURhdGEgKCkge1xuICAgICAgLy8gVGhlIGZvcm1EYXRhKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXAgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsICh2YWx1ZSkgPT4ge1xuICAgICAgICAvLyAxLiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBnZXQgdGhlIE1JTUUgdHlwZSB3aXRoIHRoaXMuXG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gYm9keU1pbWVUeXBlKHRoaXMpXG5cbiAgICAgICAgLy8gMi4gSWYgbWltZVR5cGUgaXMgbm9uLW51bGwsIHRoZW4gc3dpdGNoIG9uIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGFuZCBydW5cbiAgICAgICAgLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgc3RlcHM6XG4gICAgICAgIGlmIChtaW1lVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN3aXRjaCAobWltZVR5cGUuZXNzZW5jZSkge1xuICAgICAgICAgICAgY2FzZSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc6IHtcbiAgICAgICAgICAgICAgLy8gMS4gLi4uIFtsb25nIHN0ZXBdXG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IG11bHRpcGFydEZvcm1EYXRhUGFyc2VyKHZhbHVlLCBtaW1lVHlwZSlcblxuICAgICAgICAgICAgICAvLyAyLiBJZiB0aGF0IGZhaWxzIGZvciBzb21lIHJlYXNvbiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICAgICAgaWYgKHBhcnNlZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIGJvZHkgYXMgRm9ybURhdGEuJylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIDMuIFJldHVybiBhIG5ldyBGb3JtRGF0YSBvYmplY3QsIGFwcGVuZGluZyBlYWNoIGVudHJ5LFxuICAgICAgICAgICAgICAvLyAgICByZXN1bHRpbmcgZnJvbSB0aGUgcGFyc2luZyBvcGVyYXRpb24sIHRvIGl0cyBlbnRyeSBsaXN0LlxuICAgICAgICAgICAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgICAgICAgIGZkW2tTdGF0ZV0gPSBwYXJzZWRcblxuICAgICAgICAgICAgICByZXR1cm4gZmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IHtcbiAgICAgICAgICAgICAgLy8gMS4gTGV0IGVudHJpZXMgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGJ5dGVzLlxuICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh2YWx1ZS50b1N0cmluZygpKVxuXG4gICAgICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cblxuICAgICAgICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJ5IGxpc3QgaXMgZW50cmllcy5cbiAgICAgICAgICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgZmQuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSB3YXMgbm90IG9uZSBvZiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBvciBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLidcbiAgICAgICAgKVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGJ5dGVzICgpIHtcbiAgICAgIC8vIFRoZSBieXRlcygpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBjb25zdW1lIGJvZHlcbiAgICAgIC8vIHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIHRoZVxuICAgICAgLy8gcmVzdWx0IG9mIGNyZWF0aW5nIGEgVWludDhBcnJheSBmcm9tIGJ5dGVzIGluIHRoaXNcdTIwMTlzIHJlbGV2YW50IHJlYWxtLlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0aG9kc1xufVxuXG5mdW5jdGlvbiBtaXhpbkJvZHkgKHByb3RvdHlwZSkge1xuICBPYmplY3QuYXNzaWduKHByb3RvdHlwZS5wcm90b3R5cGUsIGJvZHlNaXhpbk1ldGhvZHMocHJvdG90eXBlKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IG9iamVjdFxuICogQHBhcmFtIHsodmFsdWU6IHVua25vd24pID0+IHVua25vd259IGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBpbnN0YW5jZVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBpcyB1bnVzYWJsZTogQm9keSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQnKVxuICB9XG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN0XHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMoQnVmZmVyLmFsbG9jVW5zYWZlKDApKVxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCBvYmplY3RcdTIwMTlzIGJvZHkgZ2l2ZW4gc3VjY2Vzc1N0ZXBzLFxuICAvLyAgICBlcnJvclN0ZXBzLCBhbmQgb2JqZWN0XHUyMDE5cyByZWxldmFudCBnbG9iYWwgb2JqZWN0LlxuICBhd2FpdCBmdWxseVJlYWRCb2R5KG9iamVjdFtrU3RhdGVdLmJvZHksIHN1Y2Nlc3NTdGVwcywgZXJyb3JTdGVwcylcblxuICAvLyA3LiBSZXR1cm4gcHJvbWlzZS5cbiAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gYm9keVVudXNhYmxlIChvYmplY3QpIHtcbiAgY29uc3QgYm9keSA9IG9iamVjdFtrU3RhdGVdLmJvZHlcblxuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keVx1MjAxOXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1qc29uLWJ5dGVzLXRvLWEtamF2YXNjcmlwdC12YWx1ZVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICovXG5mdW5jdGlvbiBwYXJzZUpTT05Gcm9tQnl0ZXMgKGJ5dGVzKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHV0ZjhEZWNvZGVCeXRlcyhieXRlcykpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LW1pbWUtdHlwZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vcmVzcG9uc2UnKS5SZXNwb25zZXxpbXBvcnQoJy4vcmVxdWVzdCcpLlJlcXVlc3R9IHJlcXVlc3RPclJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAocmVxdWVzdE9yUmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgbnVsbC5cbiAgLy8gMi4gSWYgcmVxdWVzdE9yUmVzcG9uc2UgaXMgYSBSZXF1ZXN0IG9iamVjdCwgdGhlbiBzZXQgaGVhZGVycyB0byByZXF1ZXN0T3JSZXNwb25zZVx1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDMuIE90aGVyd2lzZSwgc2V0IGhlYWRlcnMgdG8gcmVxdWVzdE9yUmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vaGVhZGVycycpLkhlYWRlcnNMaXN0fSAqL1xuICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdE9yUmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdFxuXG4gIC8vIDQuIExldCBtaW1lVHlwZSBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYSBNSU1FIHR5cGUgZnJvbSBoZWFkZXJzLlxuICBjb25zdCBtaW1lVHlwZSA9IGV4dHJhY3RNaW1lVHlwZShoZWFkZXJzKVxuXG4gIC8vIDUuIElmIG1pbWVUeXBlIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBleHRyYWN0Qm9keSxcbiAgc2FmZWx5RXh0cmFjdEJvZHksXG4gIGNsb25lQm9keSxcbiAgbWl4aW5Cb2R5LFxuICBzdHJlYW1SZWdpc3RyeSxcbiAgaGFzRmluYWxpemF0aW9uUmVnaXN0cnksXG4gIGJvZHlVbnVzYWJsZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiBnbG9iYWwgV2ViQXNzZW1ibHkgKi9cblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbC5qcycpXG5jb25zdCB7IGNoYW5uZWxzIH0gPSByZXF1aXJlKCcuLi9jb3JlL2RpYWdub3N0aWNzLmpzJylcbmNvbnN0IHRpbWVycyA9IHJlcXVpcmUoJy4uL3V0aWwvdGltZXJzLmpzJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzLmpzJylcbmNvbnN0IHtcbiAga1VybCxcbiAga1Jlc2V0LFxuICBrQ2xpZW50LFxuICBrUGFyc2VyLFxuICBrQmxvY2tpbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtOb1JlZixcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0LFxuICBrSG9zdEhlYWRlcixcbiAga1BlbmRpbmdJZHgsXG4gIGtSdW5uaW5nSWR4LFxuICBrRXJyb3IsXG4gIGtQaXBlbGluaW5nLFxuICBrU29ja2V0LFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlLFxuICBrTWF4SGVhZGVyc1NpemUsXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0LFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAga0hlYWRlcnNUaW1lb3V0LFxuICBrQm9keVRpbWVvdXQsXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoLFxuICBrTWF4UmVxdWVzdHMsXG4gIGtDb3VudGVyLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrT25FcnJvcixcbiAga1Jlc3VtZSxcbiAga0hUVFBDb250ZXh0XG59ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzLmpzJylcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi4vbGxodHRwL2NvbnN0YW50cy5qcycpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5jb25zdCBhZGRMaXN0ZW5lciA9IHV0aWwuYWRkTGlzdGVuZXJcbmNvbnN0IHJlbW92ZUFsbExpc3RlbmVycyA9IHV0aWwucmVtb3ZlQWxsTGlzdGVuZXJzXG5jb25zdCBrSWRsZVNvY2tldFZhbGlkYXRpb24gPSBTeW1ib2woJ2tJZGxlU29ja2V0VmFsaWRhdGlvbicpXG5jb25zdCBrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0ID0gU3ltYm9sKCdrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0JylcbmNvbnN0IGtTb2NrZXRVc2VkID0gU3ltYm9sKCdrU29ja2V0VXNlZCcpXG5cbmxldCBleHRyYWN0Qm9keVxuXG5hc3luYyBmdW5jdGlvbiBsYXp5bGxodHRwICgpIHtcbiAgY29uc3QgbGxodHRwV2FzbURhdGEgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA/IHJlcXVpcmUoJy4uL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUocmVxdWlyZSgnLi4vbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMnKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSB0aGUgc2ltZCBvcHRpb24gbm90XG4gICAgLy8gYmVpbmcgZW5hYmxlZCwgYnV0IHRoZSBvY2N1cnJpbmcgb2YgdGhpcyBvdGhlciBlcnJvclxuICAgIC8vICogaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL2lzc3Vlcy8xMTQ5NVxuICAgIC8vIGdvdCBtZSB0byByZW1vdmUgdGhhdCBjaGVjayB0byBhdm9pZCBicmVha2luZyBOb2RlIDEyLlxuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUobGxodHRwV2FzbURhdGEgfHwgcmVxdWlyZSgnLi4vbGxodHRwL2xsaHR0cC13YXNtLmpzJykpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kLCB7XG4gICAgZW52OiB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cblxuICAgICAgd2FzbV9vbl91cmw6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9zdGF0dXM6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25TdGF0dXMobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2JlZ2luOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUJlZ2luKCkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX2ZpZWxkOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyRmllbGQobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfdmFsdWU6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJWYWx1ZShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcnNfY29tcGxldGU6IChwLCBzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlcnNDb21wbGV0ZShzdGF0dXNDb2RlLCBCb29sZWFuKHVwZ3JhZGUpLCBCb29sZWFuKHNob3VsZEtlZXBBbGl2ZSkpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2JvZHk6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25Cb2R5KG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZTogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpIHx8IDBcbiAgICAgIH1cblxuICAgICAgLyogZXNsaW50LWVuYWJsZSBjYW1lbGNhc2UgKi9cbiAgICB9XG4gIH0pXG59XG5cbmxldCBsbGh0dHBJbnN0YW5jZSA9IG51bGxcbmxldCBsbGh0dHBQcm9taXNlID0gbGF6eWxsaHR0cCgpXG5sbGh0dHBQcm9taXNlLmNhdGNoKClcblxubGV0IGN1cnJlbnRQYXJzZXIgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyU2l6ZSA9IDBcbmxldCBjdXJyZW50QnVmZmVyUHRyID0gbnVsbFxuXG5jb25zdCBVU0VfTkFUSVZFX1RJTUVSID0gMFxuY29uc3QgVVNFX0ZBU1RfVElNRVIgPSAxXG5cbi8vIFVzZSBmYXN0IHRpbWVycyBmb3IgaGVhZGVycyBhbmQgYm9keSB0byB0YWtlIGV2ZW50dWFsIGV2ZW50IGxvb3Bcbi8vIGxhdGVuY3kgaW50byBhY2NvdW50LlxuY29uc3QgVElNRU9VVF9IRUFERVJTID0gMiB8IFVTRV9GQVNUX1RJTUVSXG5jb25zdCBUSU1FT1VUX0JPRFkgPSA0IHwgVVNFX0ZBU1RfVElNRVJcblxuLy8gVXNlIG5hdGl2ZSB0aW1lcnMgdG8gaWdub3JlIGV2ZW50IGxvb3AgbGF0ZW5jeSBmb3Iga2VlcC1hbGl2ZVxuLy8gaGFuZGxpbmcuXG5jb25zdCBUSU1FT1VUX0tFRVBfQUxJVkUgPSA4IHwgVVNFX05BVElWRV9USU1FUlxuXG5jbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoY2xpZW50LCBzb2NrZXQsIHsgZXhwb3J0cyB9KSB7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShjbGllbnRba01heEhlYWRlcnNTaXplXSkgJiYgY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0gPiAwKVxuXG4gICAgdGhpcy5sbGh0dHAgPSBleHBvcnRzXG4gICAgdGhpcy5wdHIgPSB0aGlzLmxsaHR0cC5sbGh0dHBfYWxsb2MoY29uc3RhbnRzLlRZUEUuUkVTUE9OU0UpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMudXBncmFkZSA9IGZhbHNlXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuICAgIHRoaXMuaGVhZGVyc01heFNpemUgPSBjbGllbnRba01heEhlYWRlcnNTaXplXVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gZmFsc2VcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXN1bWUgPSB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG4gICAgdGhpcy5tYXhSZXNwb25zZVNpemUgPSBjbGllbnRba01heFJlc3BvbnNlU2l6ZV1cbiAgfVxuXG4gIHNldFRpbWVvdXQgKGRlbGF5LCB0eXBlKSB7XG4gICAgLy8gSWYgdGhlIGV4aXN0aW5nIHRpbWVyIGFuZCB0aGUgbmV3IHRpbWVyIGFyZSBvZiBkaWZmZXJlbnQgdGltZXIgdHlwZVxuICAgIC8vIChmYXN0IG9yIG5hdGl2ZSkgb3IgaGF2ZSBkaWZmZXJlbnQgZGVsYXksIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4aXN0aW5nXG4gICAgLy8gdGltZXIgYW5kIHNldCBhIG5ldyBvbmUuXG4gICAgaWYgKFxuICAgICAgZGVsYXkgIT09IHRoaXMudGltZW91dFZhbHVlIHx8XG4gICAgICAodHlwZSAmIFVTRV9GQVNUX1RJTUVSKSBeICh0aGlzLnRpbWVvdXRUeXBlICYgVVNFX0ZBU1RfVElNRVIpXG4gICAgKSB7XG4gICAgICAvLyBJZiBhIHRpbWVvdXQgaXMgYWxyZWFkeSBzZXQsIGNsZWFyIGl0IHdpdGggY2xlYXJUaW1lb3V0IG9mIHRoZSBmYXN0XG4gICAgICAvLyB0aW1lciBpbXBsZW1lbnRhdGlvbiwgYXMgaXQgY2FuIGNsZWFyIGZhc3QgYW5kIG5hdGl2ZSB0aW1lcnMuXG4gICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmIChkZWxheSkge1xuICAgICAgICBpZiAodHlwZSAmIFVTRV9GQVNUX1RJTUVSKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldEZhc3RUaW1lb3V0KG9uUGFyc2VyVGltZW91dCwgZGVsYXksIG5ldyBXZWFrUmVmKHRoaXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCBkZWxheSwgbmV3IFdlYWtSZWYodGhpcykpXG4gICAgICAgICAgdGhpcy50aW1lb3V0LnVucmVmKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IGRlbGF5XG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX3Jlc3VtZSh0aGlzLnB0cilcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnNvY2tldC5yZWFkKCkgfHwgRU1QVFlfQlVGKSAvLyBGbHVzaCBwYXJzZXIuXG4gICAgdGhpcy5yZWFkTW9yZSgpXG4gIH1cblxuICByZWFkTW9yZSAoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiB0aGlzLnB0cikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLnNvY2tldC5yZWFkKClcbiAgICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgdGhpcy5leGVjdXRlKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGUgKGRhdGEpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG5cbiAgICBjb25zdCB7IHNvY2tldCwgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiBjdXJyZW50QnVmZmVyU2l6ZSkge1xuICAgICAgaWYgKGN1cnJlbnRCdWZmZXJQdHIpIHtcbiAgICAgICAgbGxodHRwLmZyZWUoY3VycmVudEJ1ZmZlclB0cilcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCdWZmZXJTaXplID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gNDA5NikgKiA0MDk2XG4gICAgICBjdXJyZW50QnVmZmVyUHRyID0gbGxodHRwLm1hbGxvYyhjdXJyZW50QnVmZmVyU2l6ZSlcbiAgICB9XG5cbiAgICBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgY3VycmVudEJ1ZmZlclB0ciwgY3VycmVudEJ1ZmZlclNpemUpLnNldChkYXRhKVxuXG4gICAgLy8gQ2FsbCBgZXhlY3V0ZWAgb24gdGhlIHdhc20gcGFyc2VyLlxuICAgIC8vIFdlIHBhc3MgdGhlIGBsbGh0dHBfcGFyc2VyYCBwb2ludGVyIGFkZHJlc3MsIHRoZSBwb2ludGVyIGFkZHJlc3Mgb2YgYnVmZmVyIHZpZXcgZGF0YSxcbiAgICAvLyBhbmQgZmluYWxseSB0aGUgbGVuZ3RoIG9mIGJ5dGVzIHRvIHBhcnNlLlxuICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgY29kZSBvciBgY29uc3RhbnRzLkVSUk9SLk9LYC5cbiAgICB0cnkge1xuICAgICAgbGV0IHJldFxuXG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gZGF0YVxuICAgICAgICBjdXJyZW50UGFyc2VyID0gdGhpc1xuICAgICAgICByZXQgPSBsbGh0dHAubGxodHRwX2V4ZWN1dGUodGhpcy5wdHIsIGN1cnJlbnRCdWZmZXJQdHIsIGRhdGEubGVuZ3RoKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYXRjaCAqL1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBvZmZzZXQgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9wb3ModGhpcy5wdHIpIC0gY3VycmVudEJ1ZmZlclB0clxuXG4gICAgICBpZiAocmV0ICE9PSBjb25zdGFudHMuRVJST1IuT0spIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0KVxuXG4gICAgICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRURfVVBHUkFERSkge1xuICAgICAgICAgIHRoaXMub25VcGdyYWRlKGJvZHkpXG4gICAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlXG4gICAgICAgICAgc29ja2V0LnVuc2hpZnQoYm9keSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKHJldCwgYm9keSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGZpbmlzaCAoKSB7XG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT09IG51bGwpXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcblxuICAgIGNvbnN0IHsgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBsZXQgcmV0XG5cbiAgICB0cnkge1xuICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgIHJldCA9IGxsaHR0cC5sbGh0dHBfZmluaXNoKHRoaXMucHRyKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5PSykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEIHx8IHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICB0aGlzLnBhdXNlZCA9IHRydWVcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRXJyb3IocmV0LCBFTVBUWV9CVUYpXG4gIH1cblxuICBjcmVhdGVFcnJvciAocmV0LCBkYXRhKSB7XG4gICAgY29uc3QgeyBsbGh0dHAsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCB9ID0gdGhpc1xuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgYnl0ZXNSZWFkICE9PSBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkpIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgcHRyID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcmVhc29uKHRoaXMucHRyKVxuICAgIGxldCBtZXNzYWdlID0gJydcbiAgICBpZiAocHRyKSB7XG4gICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgJ1Jlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHRoZSBIVFRQLzEuMSBwcm90b2NvbCAoJyArXG4gICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICcpJ1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGhpcy50aW1lb3V0ICYmIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICB9XG5cbiAgb25TdGF0dXMgKGJ1Zikge1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IGJ1Zi50b1N0cmluZygpXG4gIH1cblxuICBvbk1lc3NhZ2VCZWdpbiAoKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgcmVzcG9uc2UnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXF1ZXN0Lm9uUmVzcG9uc2VTdGFydGVkKClcbiAgfVxuXG4gIG9uSGVhZGVyRmllbGQgKGJ1Zikge1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDApIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIG9uSGVhZGVyVmFsdWUgKGJ1Zikge1xuICAgIGxldCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAxKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgICBsZW4gKz0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gdGhpcy5oZWFkZXJzW2xlbiAtIDJdXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDEwKSB7XG4gICAgICBjb25zdCBoZWFkZXJOYW1lID0gdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSlcbiAgICAgIGlmIChoZWFkZXJOYW1lID09PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgICAgdGhpcy5rZWVwQWxpdmUgKz0gYnVmLnRvU3RyaW5nKClcbiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiArPSBidWYudG9TdHJpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYgdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG4gICAgYXNzZXJ0KGNsaWVudFtrU29ja2V0XSA9PT0gc29ja2V0KVxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuICAgIGFzc2VydCgoaGVhZGVycy5sZW5ndGggJiAxKSA9PT0gMClcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuICAgIGFzc2VydChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gbnVsbFxuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgc29ja2V0LnVuc2hpZnQoaGVhZClcblxuICAgIHNvY2tldFtrUGFyc2VyXS5kZXN0cm95KClcbiAgICBzb2NrZXRba1BhcnNlcl0gPSBudWxsXG5cbiAgICBzb2NrZXRba0NsaWVudF0gPSBudWxsXG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoc29ja2V0KVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICAgIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbCAvLyBUT0RPIChmaXgpOiBUaGlzIGlzIGhhY2t5Li4uXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID09PSAwKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCByZXNwb25zZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KCh0aGlzLmhlYWRlcnMubGVuZ3RoICYgMSkgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHRoaXMuc2hvdWxkS2VlcEFsaXZlICYmIGNsaWVudFtrUGlwZWxpbmluZ10pIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZVRpbWVvdXQgPSB0aGlzLmtlZXBBbGl2ZSA/IHV0aWwucGFyc2VLZWVwQWxpdmVUaW1lb3V0KHRoaXMua2VlcEFsaXZlKSA6IG51bGxcblxuICAgICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gTWF0aC5taW4oXG4gICAgICAgICAga2VlcEFsaXZlVGltZW91dCAtIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0sXG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVNYXhUaW1lb3V0XVxuICAgICAgICApXG4gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aW1lb3V0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IGNsaWVudFtrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3AgbW9yZSByZXF1ZXN0cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwYXVzZSA9IHJlcXVlc3Qub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHRoaXMucmVzdW1lLCBzdGF0dXNUZXh0KSA9PT0gZmFsc2VcblxuICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICB9XG5cbiAgICByZXR1cm4gcGF1c2UgPyBjb25zdGFudHMuRVJST1IuUEFVU0VEIDogMFxuICB9XG5cbiAgb25Cb2R5IChidWYpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCBtYXhSZXNwb25zZVNpemUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMjAwKVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSA+IC0xICYmIHRoaXMuYnl0ZXNSZWFkICsgYnVmLmxlbmd0aCA+IG1heFJlc3BvbnNlU2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ1Zi5sZW5ndGhcblxuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShidWYpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9XG4gIH1cblxuICBvbk1lc3NhZ2VDb21wbGV0ZSAoKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgaGVhZGVycywgY29udGVudExlbmd0aCwgYnl0ZXNSZWFkLCBzaG91bGRLZWVwQWxpdmUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkICYmICghc3RhdHVzQ29kZSB8fCBzaG91bGRLZWVwQWxpdmUpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuICAgIGFzc2VydCgodGhpcy5oZWFkZXJzLmxlbmd0aCAmIDEpID09PSAwKVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgYmUgaGFuZGxlZCBieSBsbGh0dHA/ICovXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgY29udGVudExlbmd0aCAmJiBieXRlc1JlYWQgIT09IHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Db21wbGV0ZShoZWFkZXJzKVxuXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBzb2NrZXRba1NvY2tldFVzZWRdID0gdHJ1ZVxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09IG51bGwgfHwgY2xpZW50W2tQaXBlbGluaW5nXSA9PT0gMSkge1xuICAgICAgLy8gV2UgbXVzdCB3YWl0IGEgZnVsbCBldmVudCBsb29wIGN5Y2xlIHRvIHJldXNlIHRoaXMgc29ja2V0IHRvIG1ha2Ugc3VyZVxuICAgICAgLy8gdGhhdCBub24tc3BlYyBjb21wbGlhbnQgc2VydmVycyBhcmUgbm90IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gZXZlbiBpZiB0aGV5XG4gICAgICAvLyBzYWlkIHRoZXkgd29uJ3QuXG4gICAgICBzZXRJbW1lZGlhdGUoKCkgPT4gY2xpZW50W2tSZXN1bWVdKCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uUGFyc2VyVGltZW91dCAocGFyc2VyKSB7XG4gIGNvbnN0IHsgc29ja2V0LCB0aW1lb3V0VHlwZSwgY2xpZW50LCBwYXVzZWQgfSA9IHBhcnNlci5kZXJlZigpXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICBpZiAoIXNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0LndyaXRhYmxlTmVlZERyYWluIHx8IGNsaWVudFtrUnVubmluZ10gPiAxKSB7XG4gICAgICBhc3NlcnQoIXBhdXNlZCwgJ2Nhbm5vdCBiZSBwYXVzZWQgd2hpbGUgd2FpdGluZyBmb3IgaGVhZGVycycpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSGVhZGVyc1RpbWVvdXRFcnJvcigpKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKSB7XG4gICAgaWYgKCFwYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0tFRVBfQUxJVkUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3RIMSAoY2xpZW50LCBzb2NrZXQpIHtcbiAgY2xpZW50W2tTb2NrZXRdID0gc29ja2V0XG5cbiAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgIGxsaHR0cEluc3RhbmNlID0gYXdhaXQgbGxodHRwUHJvbWlzZVxuICAgIGxsaHR0cFByb21pc2UgPSBudWxsXG4gIH1cblxuICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAwXG4gIHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0XSA9IG51bGxcbiAgc29ja2V0W2tTb2NrZXRVc2VkXSA9IGZhbHNlXG4gIHNvY2tldFtrUGFyc2VyXSA9IG5ldyBQYXJzZXIoY2xpZW50LCBzb2NrZXQsIGxsaHR0cEluc3RhbmNlKVxuXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgY29uc3QgcGFyc2VyID0gdGhpc1trUGFyc2VyXVxuXG4gICAgLy8gT24gTWFjIE9TLCB3ZSBnZXQgYW4gRUNPTk5SRVNFVCBldmVuIGlmIHRoZXJlIGlzIGEgZnVsbCBib2R5IHRvIGJlIGZvcndhcmRlZFxuICAgIC8vIHRvIHRoZSB1c2VyLlxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICBjb25zdCBwYXJzZXJFcnIgPSBwYXJzZXIuZmluaXNoKClcbiAgICAgIGlmIChwYXJzZXJFcnIpIHtcbiAgICAgICAgdGhpc1trRXJyb3JdID0gcGFyc2VyRXJyXG4gICAgICAgIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKHBhcnNlckVycilcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gICAgdGhpc1trQ2xpZW50XVtrT25FcnJvcl0oZXJyKVxuICB9KVxuICBhZGRMaXN0ZW5lcihzb2NrZXQsICdyZWFkYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJzZXIgPSB0aGlzW2tQYXJzZXJdXG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICBwYXJzZXIucmVhZE1vcmUoKVxuICAgIH1cbiAgfSlcbiAgYWRkTGlzdGVuZXIoc29ja2V0LCAnZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhcnNlciA9IHRoaXNba1BhcnNlcl1cblxuICAgIGlmIChwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgY29uc3QgcGFyc2VyRXJyID0gcGFyc2VyLmZpbmlzaCgpXG4gICAgICBpZiAocGFyc2VyRXJyKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBwYXJzZXJFcnIpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSkpXG4gIH0pXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cbiAgICBjb25zdCBwYXJzZXIgPSB0aGlzW2tQYXJzZXJdXG5cbiAgICBjbGVhcklkbGVTb2NrZXRWYWxpZGF0aW9uKHRoaXMpXG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgICB0aGlzW2tFcnJvcl0gPSBwYXJzZXIuZmluaXNoKCkgfHwgdGhpc1trRXJyb3JdXG4gICAgICB9XG5cbiAgICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgICB0aGlzW2tQYXJzZXJdID0gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgICBjbGllbnRba0hUVFBDb250ZXh0XSA9IG51bGwgLy8gVE9ETyAoZml4KTogVGhpcyBpcyBoYWNreS4uLlxuXG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuXG4gICAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG5cbiAgICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0pXG5cbiAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJ2gxJyxcbiAgICBkZWZhdWx0UGlwZWxpbmluZzogMSxcbiAgICB3cml0ZSAoLi4uYXJncykge1xuICAgICAgcmV0dXJuIHdyaXRlSDEoY2xpZW50LCAuLi5hcmdzKVxuICAgIH0sXG4gICAgcmVzdW1lICgpIHtcbiAgICAgIHJlc3VtZUgxKGNsaWVudClcbiAgICB9LFxuICAgIGRlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChjbG9zZWQpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQuZGVzdHJveShlcnIpLm9uKCdjbG9zZScsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgICByZXR1cm4gc29ja2V0LmRlc3Ryb3llZFxuICAgIH0sXG4gICAgYnVzeSAocmVxdWVzdCkge1xuICAgICAgaWYgKHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tCbG9ja2luZ10gfHwgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmICFyZXF1ZXN0LmlkZW1wb3RlbnQpIHtcbiAgICAgICAgICAvLyBOb24taWRlbXBvdGVudCByZXF1ZXN0IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgICAgICAvLyBjb3VsZCBjYXVzZSBmYWlsdXJlLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgICAgIC8vIERvbid0IGRpc3BhdGNoIGFuIHVwZ3JhZGUgdW50aWwgYWxsIHByZWNlZGluZyByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgICAgICAvLyBBIG1pc2JlaGF2aW5nIHNlcnZlciBtaWdodCB1cGdyYWRlIHRoZSBjb25uZWN0aW9uIGJlZm9yZSBhbGwgcGlwZWxpbmVkXG4gICAgICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgdXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgIT09IDAgJiZcbiAgICAgICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkgfHwgdXRpbC5pc0Zvcm1EYXRhTGlrZShyZXF1ZXN0LmJvZHkpKSkge1xuICAgICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW4gZXJyb3Igd2hpbGUgb3RoZXIgcmVxdWVzdHNcbiAgICAgICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbiBieSB3YWl0aW5nIGZvciBpbmZsaWdodFxuICAgICAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBkaXNwYXRjaGluZy5cblxuICAgICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBubyBvdGhlciByZXF1ZXN0cyBhcmUgaW5mbGlnaHQgYW5kXG4gICAgICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhcklkbGVTb2NrZXRWYWxpZGF0aW9uIChzb2NrZXQpIHtcbiAgaWYgKHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0XSkge1xuICAgIGNsZWFyVGltZW91dChzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0pXG4gICAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvblRpbWVvdXRdID0gbnVsbFxuICB9XG5cbiAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAwXG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSWRsZVNvY2tldFZhbGlkYXRpb24gKGNsaWVudCwgc29ja2V0KSB7XG4gIHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25dID0gMVxuICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0gPSBudWxsXG4gICAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAyXG5cbiAgICBpZiAoY2xpZW50W2tTb2NrZXRdID09PSBzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gICAgfVxuICB9LCAwKVxuICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0udW5yZWY/LigpXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vY2xpZW50LmpzJyl9IGNsaWVudFxuICovXG5mdW5jdGlvbiByZXN1bWVIMSAoY2xpZW50KSB7XG4gIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgc29ja2V0LnVucmVmKClcbiAgICAgICAgc29ja2V0W2tOb1JlZl0gPSB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQucmVmKSB7XG4gICAgICBzb2NrZXQucmVmKClcbiAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba1BlbmRpbmddID4gMCAmJiBzb2NrZXRba1NvY2tldFVzZWRdKSB7XG4gICAgICBpZiAoc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPT09IDApIHtcbiAgICAgICAgc2NoZWR1bGVJZGxlU29ja2V0VmFsaWRhdGlvbihjbGllbnQsIHNvY2tldClcbiAgICAgICAgc29ja2V0W2tQYXJzZXJdLnJlYWRNb3JlKClcbiAgICAgICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25dID09PSAxKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5yZWFkTW9yZSgpXG4gICAgICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIHNvY2tldFtrUGFyc2VyXS5yZWFkTW9yZSgpXG4gICAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9LRUVQX0FMSVZFKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSwgVElNRU9VVF9LRUVQX0FMSVZFKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgIT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICA/IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXRcbiAgICAgICAgICA6IGNsaWVudFtrSGVhZGVyc1RpbWVvdXRdXG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlSDEgKGNsaWVudCwgcmVxdWVzdCkge1xuICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgbGV0IHsgYm9keSwgaGVhZGVycywgY29udGVudExlbmd0aCB9ID0gcmVxdWVzdFxuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCcgfHxcbiAgICBtZXRob2QgPT09ICdRVUVSWScgfHxcbiAgICBtZXRob2QgPT09ICdQUk9QRklORCcgfHxcbiAgICBtZXRob2QgPT09ICdQUk9QUEFUQ0gnXG4gIClcblxuICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShib2R5KSkge1xuICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgIGV4dHJhY3RCb2R5ID0gcmVxdWlyZSgnLi4vd2ViL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuICAgIH1cblxuICAgIGNvbnN0IFtib2R5U3RyZWFtLCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgIGlmIChyZXF1ZXN0LmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMucHVzaCgnY29udGVudC10eXBlJywgY29udGVudFR5cGUpXG4gICAgfVxuICAgIGJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgIGNvbnRlbnRMZW5ndGggPSBib2R5U3RyZWFtLmxlbmd0aFxuICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiByZXF1ZXN0LmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGJvZHkudHlwZVxuICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgY29uc3QgY29udGVudFR5cGVWYWx1ZSA9IGAke2NvbnRlbnRUeXBlfWBcbiAgICAgIGlmICghdXRpbC5pc1ZhbGlkSGVhZGVyVmFsdWUoY29udGVudFR5cGVWYWx1ZSkpIHtcbiAgICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29udGVudC10eXBlIGhlYWRlcicpKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGhlYWRlcnMucHVzaCgnY29udGVudC10eXBlJywgY29udGVudFR5cGVWYWx1ZSlcbiAgICB9XG4gIH1cblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBjb25zdCBib2R5TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgY29udGVudExlbmd0aCA9IGJvZHlMZW5ndGggPz8gY29udGVudExlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cbiAgY2xlYXJJZGxlU29ja2V0VmFsaWRhdGlvbihzb2NrZXQpXG5cbiAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ2Fib3J0ZWQnKSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9pc3N1ZXMvMjU4XG4gICAgLy8gQ2xvc2UgYWZ0ZXIgYSBIRUFEIHJlcXVlc3QgdG8gaW50ZXJvcCB3aXRoIG1pc2JlaGF2aW5nIHNlcnZlcnNcbiAgICAvLyB0aGF0IG1heSBzZW5kIGEgYm9keSBpbiB0aGUgcmVzcG9uc2UuXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgLy8gT24gQ09OTkVDVCBvciB1cGdyYWRlLCBibG9jayBwaXBlbGluZSBmcm9tIGRpc3BhdGNoaW5nIGZ1cnRoZXJcbiAgICAvLyByZXF1ZXN0cyBvbiB0aGlzIGNvbm5lY3Rpb24uXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChyZXNldCAhPSBudWxsKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSByZXNldFxuICB9XG5cbiAgaWYgKGNsaWVudFtrTWF4UmVxdWVzdHNdICYmIHNvY2tldFtrQ291bnRlcl0rKyA+PSBjbGllbnRba01heFJlcXVlc3RzXSkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGJsb2NraW5nKSB7XG4gICAgc29ja2V0W2tCbG9ja2luZ10gPSB0cnVlXG4gIH1cblxuICBsZXQgaGVhZGVyID0gYCR7bWV0aG9kfSAke3BhdGh9IEhUVFAvMS4xXFxyXFxuYFxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBoZWFkZXIgKz0gYGhvc3Q6ICR7aG9zdH1cXHJcXG5gXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9IGNsaWVudFtrSG9zdEhlYWRlcl1cbiAgfVxuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgaGVhZGVyICs9IGBjb25uZWN0aW9uOiB1cGdyYWRlXFxyXFxudXBncmFkZTogJHt1cGdyYWRlfVxcclxcbmBcbiAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddICYmICFzb2NrZXRba1Jlc2V0XSkge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjoga2VlcC1hbGl2ZVxcclxcbidcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGNsb3NlXFxyXFxuJ1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnMubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbbiArIDBdXG4gICAgICBjb25zdCB2YWwgPSBoZWFkZXJzW24gKyAxXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsW2ldfVxcclxcbmBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsfVxcclxcbmBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY2hhbm5lbHMuc2VuZEhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zZW5kSGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdCwgaGVhZGVyczogaGVhZGVyLCBzb2NrZXQgfSlcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBhc3NlcnRpb24gKi9cbiAgaWYgKCFib2R5IHx8IGJvZHlMZW5ndGggPT09IDApIHtcbiAgICB3cml0ZUJ1ZmZlcihhYm9ydCwgbnVsbCwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIHdyaXRlQnVmZmVyKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LnN0cmVhbSgpLCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbSAoYWJvcnQsIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuXG4gIGNvbnN0IG9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSAmJiB0aGlzLnBhdXNlKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMsIGVycilcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25EcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5LnJlc3VtZSkge1xuICAgICAgYm9keS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICdjbG9zZScgbWlnaHQgYmUgZW1pdHRlZCAqYmVmb3JlKiAnZXJyb3InIGZvclxuICAgIC8vIGJyb2tlbiBzdHJlYW1zLiBXYWl0IGEgdGljayB0byBhdm9pZCB0aGlzIGNhc2UuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gSXQncyBvbmx5IHNhZmUgdG8gcmVtb3ZlICdlcnJvcicgbGlzdGVuZXIgYWZ0ZXJcbiAgICAgIC8vICdjbG9zZScuXG4gICAgICBib2R5LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgfSlcblxuICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IG9uRmluaXNoZWQoZXJyKSlcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25GaW5pc2hlZCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgYXNzZXJ0KHNvY2tldC5kZXN0cm95ZWQgfHwgKHNvY2tldFtrV3JpdGluZ10gJiYgY2xpZW50W2tSdW5uaW5nXSA8PSAxKSlcblxuICAgIHNvY2tldFxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgICAgLm9mZignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gICAgYm9keVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2UpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkNsb3NlKVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gIGlmIChib2R5LmVycm9yRW1pdHRlZCA/PyBib2R5LmVycm9yZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChib2R5LmVycm9yZWQpKVxuICB9IGVsc2UgaWYgKGJvZHkuZW5kRW1pdHRlZCA/PyBib2R5LnJlYWRhYmxlRW5kZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChudWxsKSlcbiAgfVxuXG4gIGlmIChib2R5LmNsb3NlRW1pdHRlZCA/PyBib2R5LmNsb3NlZCkge1xuICAgIHNldEltbWVkaWF0ZShvbkNsb3NlKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgICBzb2NrZXQuY29yaygpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG5cbiAgICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVCbG9iIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBjb250ZW50TGVuZ3RoICE9PSBib2R5LnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IGJvZHkuYXJyYXlCdWZmZXIoKSlcblxuICAgIHNvY2tldC5jb3JrKClcbiAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICBzb2NrZXQudW5jb3JrKClcblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFib3J0KGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ2l0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgbGV0IGNhbGxiYWNrID0gbnVsbFxuICBmdW5jdGlvbiBvbkRyYWluICgpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgY2IoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JEcmFpbiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhc3NlcnQoY2FsbGJhY2sgPT09IG51bGwpXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHJlamVjdChzb2NrZXRba0Vycm9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlXG4gICAgfVxuICB9KVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuICB0cnkge1xuICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gc29tZWhvdyBhYm9ydCB0aGUgYXN5bmMgaXRlcmFibGUuXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICAgIH1cblxuICAgICAgaWYgKCF3cml0ZXIud3JpdGUoY2h1bmspKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmVuZCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHdyaXRlci5kZXN0cm95KGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5jbGFzcyBBc3luY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yICh7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KSB7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aFxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwXG4gICAgdGhpcy5leHBlY3RzUGF5bG9hZCA9IGV4cGVjdHNQYXlsb2FkXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSB0cnVlXG4gIH1cblxuICB3cml0ZSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgaWYgKCFsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIGRlZmVyIHdyaXRpbmcgY2h1bmtzLlxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiArIGxlbiA+IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICB9XG5cbiAgICBzb2NrZXQuY29yaygpXG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoIWV4cGVjdHNQYXlsb2FkICYmIHJlcXVlc3QucmVzZXQgIT09IGZhbHNlKSB7XG4gICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfXRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZShgXFxyXFxuJHtsZW4udG9TdHJpbmcoMTYpfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGxlblxuXG4gICAgY29uc3QgcmV0ID0gc29ja2V0LndyaXRlKGNodW5rKVxuXG4gICAgc29ja2V0LnVuY29yaygpXG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG5cbiAgICBpZiAoIXJldCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBlbmQgKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciwgcmVxdWVzdCB9ID0gdGhpc1xuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKGV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBzZW5kIGEgQ29udGVudC1MZW5ndGggaW4gYSByZXF1ZXN0IG1lc3NhZ2Ugd2hlblxuICAgICAgICAvLyBubyBUcmFuc2Zlci1FbmNvZGluZyBpcyBzZW50IGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgZGVmaW5lcyBhIG1lYW5pbmdcbiAgICAgICAgLy8gZm9yIGFuIGVuY2xvc2VkIHBheWxvYWQgYm9keS5cblxuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKCdcXHJcXG4wXFxyXFxuXFxyXFxuJywgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgYWJvcnQoZXJyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsLmpzJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMuanMnKVxuY29uc3Qge1xuICBrVXJsLFxuICBrUmVzZXQsXG4gIGtDbGllbnQsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1F1ZXVlLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1NvY2tldCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtPbkVycm9yLFxuICBrTWF4Q29uY3VycmVudFN0cmVhbXMsXG4gIGtIVFRQMlNlc3Npb24sXG4gIGtSZXN1bWUsXG4gIGtTaXplLFxuICBrSFRUUENvbnRleHRcbn0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMuanMnKVxuXG5jb25zdCBrT3BlblN0cmVhbXMgPSBTeW1ib2woJ29wZW4gc3RyZWFtcycpXG5cbmxldCBleHRyYWN0Qm9keVxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ25vZGU6aHR0cDInKVxufSBjYXRjaCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cDIgPSB7IGNvbnN0YW50czoge30gfVxufVxuXG5jb25zdCB7XG4gIGNvbnN0YW50czoge1xuICAgIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gICAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgICBIVFRQMl9IRUFERVJfU0NIRU1FLFxuICAgIEhUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSCxcbiAgICBIVFRQMl9IRUFERVJfRVhQRUNULFxuICAgIEhUVFAyX0hFQURFUl9TVEFUVVNcbiAgfVxufSA9IGh0dHAyXG5cbmZ1bmN0aW9uIHBhcnNlSDJIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgLy8gaDIgbWF5IGNvbmNhdCB0aGUgaGVhZGVyIHZhbHVlIGJ5IGFycmF5XG4gICAgLy8gZS5nLiBTZXQtQ29va2llXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gcHJvdmlkZSBlYWNoIGhlYWRlciB2YWx1ZSBvZiBoZWFkZXIgbmFtZVxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBoZWFkZXJzIGhhbmRsZXIgZXhwZWN0IG5hbWUtdmFsdWUgcGFpclxuICAgICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20oc3VidmFsdWUpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20odmFsdWUpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29ubmVjdEgyIChjbGllbnQsIHNvY2tldCkge1xuICBjbGllbnRba1NvY2tldF0gPSBzb2NrZXRcblxuICBpZiAoIWgyRXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgaDJFeHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICBjb2RlOiAnVU5ESUNJLUgyJ1xuICAgIH0pXG4gIH1cblxuICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdChjbGllbnRba1VybF0sIHtcbiAgICBjcmVhdGVDb25uZWN0aW9uOiAoKSA9PiBzb2NrZXQsXG4gICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba01heENvbmN1cnJlbnRTdHJlYW1zXVxuICB9KVxuXG4gIHNlc3Npb25ba09wZW5TdHJlYW1zXSA9IDBcbiAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICBzZXNzaW9uW2tTb2NrZXRdID0gc29ja2V0XG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzZXNzaW9uLCAnZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdmcmFtZUVycm9yJywgb25IdHRwMkZyYW1lRXJyb3IpXG4gIHV0aWwuYWRkTGlzdGVuZXIoc2Vzc2lvbiwgJ2VuZCcsIG9uSHR0cDJTZXNzaW9uRW5kKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50IH0gPSB0aGlzXG4gICAgY29uc3QgeyBba1NvY2tldF06IHNvY2tldCB9ID0gY2xpZW50XG5cbiAgICBjb25zdCBlcnIgPSB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gfHwgdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpXG5cbiAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG5cbiAgICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBzZXNzaW9uLnVucmVmKClcblxuICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBzZXNzaW9uXG4gIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cblxuICB1dGlsLmFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgdGhpc1trRXJyb3JdID0gZXJyXG5cbiAgICB0aGlzW2tDbGllbnRdW2tPbkVycm9yXShlcnIpXG4gIH0pXG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzb2NrZXQsICdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpKVxuICB9KVxuXG4gIHV0aWwuYWRkTGlzdGVuZXIoc29ja2V0LCAnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXJyID0gdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuXG4gICAgaWYgKHRoaXNba0hUVFAyU2Vzc2lvbl0gIT0gbnVsbCkge1xuICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXS5kZXN0cm95KGVycilcbiAgICB9XG5cbiAgICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0pXG5cbiAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJ2gyJyxcbiAgICBkZWZhdWx0UGlwZWxpbmluZzogSW5maW5pdHksXG4gICAgd3JpdGUgKC4uLmFyZ3MpIHtcbiAgICAgIHJldHVybiB3cml0ZUgyKGNsaWVudCwgLi4uYXJncylcbiAgICB9LFxuICAgIHJlc3VtZSAoKSB7XG4gICAgICByZXN1bWVIMihjbGllbnQpXG4gICAgfSxcbiAgICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoY2xvc2VkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVzdHJveWluZyB0aGUgc29ja2V0IHdpbGwgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICAgICAgICBzb2NrZXQuZGVzdHJveShlcnIpLm9uKCdjbG9zZScsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgICByZXR1cm4gc29ja2V0LmRlc3Ryb3llZFxuICAgIH0sXG4gICAgYnVzeSAoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lSDIgKGNsaWVudCkge1xuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICBpZiAoc29ja2V0Py5kZXN0cm95ZWQgPT09IGZhbHNlKSB7XG4gICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDAgJiYgY2xpZW50W2tNYXhDb25jdXJyZW50U3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0udW5yZWYoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzb2NrZXQucmVmKClcbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXS5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKGVycilcbn1cblxuZnVuY3Rpb24gb25IdHRwMkZyYW1lRXJyb3IgKHR5cGUsIGNvZGUsIGlkKSB7XG4gIGlmIChpZCA9PT0gMCkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG4gICAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gICAgdGhpc1trQ2xpZW50XVtrT25FcnJvcl0oZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgY29uc3QgZXJyID0gbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzW2tTb2NrZXRdKSlcbiAgdGhpcy5kZXN0cm95KGVycilcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIGVycilcbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSByb290IGNhdXNlIG9mICMzMDExXG4gKiBXZSBuZWVkIHRvIGhhbmRsZSBHT0FXQVkgZnJhbWVzIHByb3Blcmx5LCBhbmQgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICogYWxvbmcgd2l0aCB0aGUgc29ja2V0IHJpZ2h0IGF3YXlcbiAqL1xuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICAvLyBXZSBjYW5ub3QgcmVjb3Zlciwgc28gYmVzdCB0byBjbG9zZSB0aGUgc2Vzc2lvbiBhbmQgdGhlIHNvY2tldFxuICBjb25zdCBlcnIgPSB0aGlzW2tFcnJvcl0gfHwgbmV3IFNvY2tldEVycm9yKGBIVFRQLzI6IFwiR09BV0FZXCIgZnJhbWUgcmVjZWl2ZWQgd2l0aCBjb2RlICR7Y29kZX1gLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpXG4gIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbFxuXG4gIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dLmRlc3Ryb3koZXJyKVxuICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gIH1cblxuICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XSwgZXJyKVxuXG4gIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPCBjbGllbnRba1F1ZXVlXS5sZW5ndGgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gIH1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICBjbGllbnRba1Jlc3VtZV0oKVxufVxuXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG5mdW5jdGlvbiBzaG91bGRTZW5kQ29udGVudExlbmd0aCAobWV0aG9kKSB7XG4gIHJldHVybiBtZXRob2QgIT09ICdHRVQnICYmIG1ldGhvZCAhPT0gJ0hFQUQnICYmIG1ldGhvZCAhPT0gJ09QVElPTlMnICYmIG1ldGhvZCAhPT0gJ1RSQUNFJyAmJiBtZXRob2QgIT09ICdDT05ORUNUJ1xufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IGNsaWVudFtrSFRUUDJTZXNzaW9uXVxuICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgZXhwZWN0Q29udGludWUsIHNpZ25hbCwgaGVhZGVyczogcmVxSGVhZGVycyB9ID0gcmVxdWVzdFxuICBsZXQgeyBib2R5IH0gPSByZXF1ZXN0XG5cbiAgaWYgKHVwZ3JhZGUpIHtcbiAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IHt9XG4gIGZvciAobGV0IG4gPSAwOyBuIDwgcmVxSGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGNvbnN0IGtleSA9IHJlcUhlYWRlcnNbbiArIDBdXG4gICAgY29uc3QgdmFsID0gcmVxSGVhZGVyc1tuICsgMV1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW2tleV0pIHtcbiAgICAgICAgICBoZWFkZXJzW2tleV0gKz0gYCwke3ZhbFtpXX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsW2ldXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyc1trZXldID0gdmFsXG4gICAgfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuXG4gIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0IHx8IGAke2hvc3RuYW1lfSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlcnIgPSBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoc3RyZWFtICE9IG51bGwpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG5cbiAgICAvLyBXZSBkbyBub3QgZGVzdHJveSB0aGUgc29ja2V0IGFzIHdlIGNhbiBjb250aW51ZSB1c2luZyB0aGUgc2Vzc2lvblxuICAgIC8vIHRoZSBzdHJlYW0gZ2V0J3MgZGVzdHJveWVkIGFuZCB0aGUgc2Vzc2lvbiByZW1haW5zIHRvIGNyZWF0ZSBuZXcgc3RyZWFtc1xuICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBXZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHN0cmVhbXMgYXJlIHBlbmRpbmcuXG4gICAgLy8gV2UgY2FuIGNhbGwgb24gY29ubmVjdCwgYW5kIHdhaXQgZm9yIGFib3J0XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgc2Vzc2lvbi5yZWYoKVxuICAgIC8vIFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc3RyZWFtcyBhcmUgcGVuZGluZywgZmlyc3QgcmVxdWVzdFxuICAgIC8vIHdpbGwgY3JlYXRlIGEgbmV3IHN0cmVhbS4gV2UgdHJpZ2dlciBhIHJlcXVlc3QgdG8gY3JlYXRlIHRoZSBzdHJlYW0gYW5kIHdhaXQgdW50aWxcbiAgICAvLyBgcmVhZHlgIGV2ZW50IGlzIHRyaWdnZXJlZFxuICAgIC8vIFdlIGRpc2FibGVkIGVuZFN0cmVhbSB0byBhbGxvdyB0aGUgdXNlciB0byB3cml0ZSB0byB0aGUgc3RyZWFtXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBmYWxzZSwgc2lnbmFsIH0pXG5cbiAgICBpZiAoc3RyZWFtLmlkICYmICFzdHJlYW0ucGVuZGluZykge1xuICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgKytzZXNzaW9uW2tPcGVuU3RyZWFtc11cbiAgICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbmNlKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgICArK3Nlc3Npb25ba09wZW5TdHJlYW1zXVxuICAgICAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkgc2Vzc2lvbi51bnJlZigpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTguM1xuICAvLyA6cGF0aCBhbmQgOnNjaGVtZSBoZWFkZXJzIG11c3QgYmUgb21pdHRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoYm9keSkpIHtcbiAgICBleHRyYWN0Qm9keSA/Pz0gcmVxdWlyZSgnLi4vd2ViL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuXG4gICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBjb250ZW50VHlwZVxuXG4gICAgYm9keSA9IGJvZHlTdHJlYW0uc3RyZWFtXG4gICAgY29udGVudExlbmd0aCA9IGJvZHlTdHJlYW0ubGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgfHwgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBhc3NlcnQoYm9keSwgJ25vIGJvZHkgbXVzdCBub3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEhdID0gYCR7Y29udGVudExlbmd0aH1gXG4gIH1cblxuICBzZXNzaW9uLnJlZigpXG5cbiAgY29uc3Qgc2hvdWxkRW5kU3RyZWFtID0gbWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJyB8fCBib2R5ID09PSBudWxsXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc3RyZWFtcyBvcGVuXG4gICsrc2Vzc2lvbltrT3BlblN0cmVhbXNdXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG4gICAgcmVxdWVzdC5vblJlc3BvbnNlU3RhcnRlZCgpXG5cbiAgICAvLyBEdWUgdG8gdGhlIHN0cmVhbSBuYXR1cmUsIGl0IGlzIHBvc3NpYmxlIHdlIGZhY2UgYSByYWNlIGNvbmRpdGlvblxuICAgIC8vIHdoZXJlIHRoZSBzdHJlYW0gaGFzIGJlZW4gYXNzaWduZWQsIGJ1dCB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkXG4gICAgLy8gdGhlIHJlcXVlc3QgcmVtYWlucyBpbi1mbGlnaHQgYW5kIGhlYWRlcnMgaGFzbid0IGJlZW4gcmVjZWl2ZWQgeWV0XG4gICAgLy8gZm9yIHRob3NlIHNjZW5hcmlvcywgYmVzdCBlZmZvcnQgaXMgdG8gZGVzdHJveSB0aGUgc3RyZWFtIGltbWVkaWF0ZWx5XG4gICAgLy8gYXMgdGhlcmUncyBubyB2YWx1ZSB0byBrZWVwIGl0IG9wZW4uXG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCBwYXJzZUgySGVhZGVycyhyZWFsSGVhZGVycyksIHN0cmVhbS5yZXN1bWUuYmluZChzdHJlYW0pLCAnJykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cblxuICAgIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKHJlcXVlc3Qub25EYXRhKGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgLy8gV2hlbiBzdGF0ZSBpcyBudWxsLCBpdCBtZWFucyB3ZSBoYXZlbid0IGNvbnN1bWVkIGJvZHkgYW5kIHRoZSBzdHJlYW0gc3RpbGwgZG8gbm90IGhhdmVcbiAgICAvLyBhIHN0YXRlLlxuICAgIC8vIFByZXNlbnQgc3BlY2lhbGx5IHdoZW4gdXNpbmcgcGlwZWxpbmUgb3Igc3RyZWFtXG4gICAgaWYgKHN0cmVhbS5zdGF0ZT8uc3RhdGUgPT0gbnVsbCB8fCBzdHJlYW0uc3RhdGUuc3RhdGUgPCA2KSB7XG4gICAgICByZXF1ZXN0Lm9uQ29tcGxldGUoW10pXG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkge1xuICAgICAgLy8gU3RyZWFtIGlzIGNsb3NlZCBvciBoYWxmLWNsb3NlZC1yZW1vdGUgKDYpLCBkZWNyZW1lbnQgY291bnRlciBhbmQgY2xlYW51cFxuICAgICAgLy8gSXQgZG9lcyBub3QgaGF2ZSBzZW5zZSB0byBjb250aW51ZSB3b3JraW5nIHdpdGggdGhlIHN0cmVhbSBhcyB3ZSBkbyBub3RcbiAgICAgIC8vIGhhdmUgeWV0IFJTVF9TVFJFQU0gc3VwcG9ydCBvbiBjbGllbnQtc2lkZVxuXG4gICAgICBzZXNzaW9uLnVucmVmKClcbiAgICB9XG5cbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdIVFRQLzI6IHN0cmVhbSBoYWxmLWNsb3NlZCAocmVtb3RlKScpKVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgIGlmIChzZXNzaW9uW2tPcGVuU3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdmcmFtZUVycm9yJywgKHR5cGUsIGNvZGUpID0+IHtcbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKSlcbiAgfSlcblxuICAvLyBzdHJlYW0ub24oJ2Fib3J0ZWQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IGFib3J0ZWRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRpbWVvdXRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3B1c2gnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgcHVzaFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndHJhaWxlcnMnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdHJhaWxlcnNcbiAgLy8gfSlcblxuICByZXR1cm4gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHdyaXRlQm9keUgyICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gICAgaWYgKCFib2R5IHx8IGNvbnRlbnRMZW5ndGggPT09IDApIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBudWxsLFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3cml0ZUl0ZXJhYmxlKFxuICAgICAgICAgIGFib3J0LFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYihcbiAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjbGllbnRba1NvY2tldF0sXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB3cml0ZVN0cmVhbShcbiAgICAgICAgYWJvcnQsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoXG4gICAgICApXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoXG4gICAgICAgIGFib3J0LFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBleHBlY3RzUGF5bG9hZCkge1xuICB0cnkge1xuICAgIGlmIChib2R5ICE9IG51bGwgJiYgdXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBoMnN0cmVhbS5jb3JrKClcbiAgICAgIGgyc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBoMnN0cmVhbS51bmNvcmsoKVxuICAgICAgaDJzdHJlYW0uZW5kKClcblxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGFib3J0KGVycm9yKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtIChhYm9ydCwgc29ja2V0LCBleHBlY3RzUGF5bG9hZCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgY29udGVudExlbmd0aCkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCAhPT0gMCB8fCBjbGllbnRba1J1bm5pbmddID09PSAwLCAnc3RyZWFtIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICBjb25zdCBwaXBlID0gcGlwZWxpbmUoXG4gICAgYm9keSxcbiAgICBoMnN0cmVhbSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShwaXBlLCBlcnIpXG4gICAgICAgIGFib3J0KGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwucmVtb3ZlQWxsTGlzdGVuZXJzKHBpcGUpXG4gICAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICB1dGlsLmFkZExpc3RlbmVyKHBpcGUsICdkYXRhJywgb25QaXBlRGF0YSlcblxuICBmdW5jdGlvbiBvblBpcGVEYXRhIChjaHVuaykge1xuICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LnNpemUsICdibG9iIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcblxuICB0cnkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCAhPT0gYm9keS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCBib2R5LmFycmF5QnVmZmVyKCkpXG5cbiAgICBoMnN0cmVhbS5jb3JrKClcbiAgICBoMnN0cmVhbS53cml0ZShidWZmZXIpXG4gICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICBoMnN0cmVhbS5lbmQoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJ1ZmZlcilcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSXRlcmFibGUgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBoMnN0cmVhbVxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBoMnN0cmVhbS53cml0ZShjaHVuaylcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaDJzdHJlYW0uZW5kKClcblxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMlxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG4gICAgdGhpcy5yZWRpcmVjdGlvbkxpbWl0UmVhY2hlZCA9IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMudGhyb3dPbk1heFJlZGlyZWN0ICYmIHRoaXMuaGlzdG9yeS5sZW5ndGggPj0gdGhpcy5tYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmFib3J0KG5ldyBFcnJvcignbWF4IHJlZGlyZWN0cycpKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJlZGlyZWN0aW9uTGltaXRSZWFjaGVkID0gdHJ1ZVxuICAgICAgdGhpcy5hYm9ydChuZXcgRXJyb3IoJ21heCByZWRpcmVjdHMnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGx5IGNob29zZXMgbm90IHRvIHNwZWNpZnkgYSBmb3JtYXQgZm9yIHN1Y2ggYm9keSBhbmQgbGVhdmUgaXQgdG9cbiAgICAgICAgc2VydmVycyBhbmQgYnJvd3NlcnMgaW1wbGVtZW50b3JzLCB3ZSBpZ25vcmUgdGhlIGJvZHkgYXMgdGhlcmUgaXMgbm8gc3BlY2lmaWVkIHdheSB0byBldmVudHVhbGx5IHBhcnNlIGl0LlxuICAgICAgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIHRyYWlsZXJzIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCBpbiBjYXNlIG9mIHJlZGlyZWN0aW9uc1xuICAgICAgICBhbmQgbmVpdGhlciBhcmUgdXNlZnVsIGlmIHByZXNlbnQuXG5cbiAgICAgICAgU2VlIGNvbW1lbnQgb24gb25EYXRhIG1ldGhvZCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbi5cbiAgICAgICovXG5cbiAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2F0aW9uIChzdGF0dXNDb2RlLCBoZWFkZXJzKSB7XG4gIGlmIChyZWRpcmVjdGFibGVTdGF0dXNDb2Rlcy5pbmRleE9mKHN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoaGVhZGVyc1tpXS5sZW5ndGggPT09IDggJiYgdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyc1tpXSkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVIZWFkZXIgKGhlYWRlciwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBpZiAoaGVhZGVyLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpID09PSAnaG9zdCdcbiAgfVxuICBpZiAocmVtb3ZlQ29udGVudCAmJiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpLnN0YXJ0c1dpdGgoJ2NvbnRlbnQtJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh1bmtub3duT3JpZ2luICYmIChoZWFkZXIubGVuZ3RoID09PSAxMyB8fCBoZWFkZXIubGVuZ3RoID09PSA2IHx8IGhlYWRlci5sZW5ndGggPT09IDE5KSkge1xuICAgIGNvbnN0IG5hbWUgPSB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpXG4gICAgcmV0dXJuIG5hbWUgPT09ICdhdXRob3JpemF0aW9uJyB8fCBuYW1lID09PSAnY29va2llJyB8fCBuYW1lID09PSAncHJveHktYXV0aG9yaXphdGlvbidcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbmZ1bmN0aW9uIGNsZWFuUmVxdWVzdEhlYWRlcnMgKGhlYWRlcnMsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGhlYWRlcnNbaV0sIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihrZXksIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoaGVhZGVycyA9PSBudWxsLCAnaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZGlyZWN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXInKVxuXG5mdW5jdGlvbiBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yICh7IG1heFJlZGlyZWN0aW9uczogZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gSW50ZXJjZXB0IChvcHRzLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCB7IG1heFJlZGlyZWN0aW9ucyA9IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSA9IG9wdHNcblxuICAgICAgaWYgKCFtYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZGlyZWN0SGFuZGxlciA9IG5ldyBSZWRpcmVjdEhhbmRsZXIoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcilcbiAgICAgIG9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIFN0b3Agc3ViIGRpc3BhdGNoZXIgZnJvbSBhbHNvIHJlZGlyZWN0aW5nLlxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG4iLCAiLy8gQHRzLWNoZWNrXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCBuZXQgPSByZXF1aXJlKCdub2RlOm5ldCcpXG5jb25zdCBodHRwID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwuanMnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi4vY29yZS9kaWFnbm9zdGljcy5qcycpXG5jb25zdCBSZXF1ZXN0ID0gcmVxdWlyZSgnLi4vY29yZS9yZXF1ZXN0LmpzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzLmpzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi4vY29yZS9jb25uZWN0LmpzJylcbmNvbnN0IHtcbiAga1VybCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrQ29ubmVjdCxcbiAga1Jlc3VtaW5nLFxuICBrUnVubmluZyxcbiAga1BlbmRpbmcsXG4gIGtTaXplLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQsXG4gIGtIb3N0SGVhZGVyLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1BpcGVsaW5pbmcsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWUsXG4gIGtNYXhIZWFkZXJzU2l6ZSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkLFxuICBrSGVhZGVyc1RpbWVvdXQsXG4gIGtCb2R5VGltZW91dCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtDb25uZWN0b3IsXG4gIGtNYXhSZWRpcmVjdGlvbnMsXG4gIGtNYXhSZXF1ZXN0cyxcbiAga0NvdW50ZXIsXG4gIGtDbG9zZSxcbiAga0Rlc3Ryb3ksXG4gIGtEaXNwYXRjaCxcbiAga0ludGVyY2VwdG9ycyxcbiAga0xvY2FsQWRkcmVzcyxcbiAga01heFJlc3BvbnNlU2l6ZSxcbiAga09uRXJyb3IsXG4gIGtIVFRQQ29udGV4dCxcbiAga01heENvbmN1cnJlbnRTdHJlYW1zLFxuICBrUmVzdW1lXG59ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzLmpzJylcbmNvbnN0IGNvbm5lY3RIMSA9IHJlcXVpcmUoJy4vY2xpZW50LWgxLmpzJylcbmNvbnN0IGNvbm5lY3RIMiA9IHJlcXVpcmUoJy4vY2xpZW50LWgyLmpzJylcbmxldCBkZXByZWNhdGVkSW50ZXJjZXB0b3JXYXJuZWQgPSBmYWxzZVxuXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgna0Nsb3NlZFJlc29sdmUnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZnVuY3Rpb24gZ2V0UGlwZWxpbmluZyAoY2xpZW50KSB7XG4gIHJldHVybiBjbGllbnRba1BpcGVsaW5pbmddID8/IGNsaWVudFtrSFRUUENvbnRleHRdPy5kZWZhdWx0UGlwZWxpbmluZyA/PyAxXG59XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2xpZW50LmpzJykuZGVmYXVsdH1cbiAqL1xuY2xhc3MgQ2xpZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NsaWVudC5qcycpLkNsaWVudC5PcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCB7XG4gICAgaW50ZXJjZXB0b3JzLFxuICAgIG1heEhlYWRlclNpemUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgc29ja2V0VGltZW91dCxcbiAgICByZXF1ZXN0VGltZW91dCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICBpZGxlVGltZW91dCxcbiAgICBrZWVwQWxpdmUsXG4gICAga2VlcEFsaXZlVGltZW91dCxcbiAgICBtYXhLZWVwQWxpdmVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZU1heFRpbWVvdXQsXG4gICAga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAgICBzb2NrZXRQYXRoLFxuICAgIHBpcGVsaW5pbmcsXG4gICAgdGxzLFxuICAgIHN0cmljdENvbnRlbnRMZW5ndGgsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgIGNvbm5lY3QsXG4gICAgbWF4UmVxdWVzdHNQZXJDbGllbnQsXG4gICAgbG9jYWxBZGRyZXNzLFxuICAgIG1heFJlc3BvbnNlU2l6ZSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICAvLyBoMlxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zLFxuICAgIGFsbG93SDIsXG4gICAgd2ViU29ja2V0XG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKHsgd2ViU29ja2V0IH0pXG5cbiAgICBpZiAoa2VlcEFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQga2VlcEFsaXZlLCB1c2UgcGlwZWxpbmluZz0wIGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgc29ja2V0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgcmVxdWVzdFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChpZGxlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGlkbGVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlVGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4S2VlcEFsaXZlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG1heEtlZXBBbGl2ZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVNYXhUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhIZWFkZXJTaXplICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShtYXhIZWFkZXJTaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1heEhlYWRlclNpemUnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRQYXRoICE9IG51bGwgJiYgdHlwZW9mIHNvY2tldFBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgc29ja2V0UGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3RUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdFRpbWVvdXQpIHx8IGNvbm5lY3RUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0KSB8fCBrZWVwQWxpdmVUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZU1heFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVNYXhUaW1lb3V0KSB8fCBrZWVwQWxpdmVNYXhUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlTWF4VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCcpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnNUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZWRpcmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlcXVlc3RzUGVyQ2xpZW50ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlcXVlc3RzUGVyQ2xpZW50KSB8fCBtYXhSZXF1ZXN0c1BlckNsaWVudCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlcXVlc3RzUGVyQ2xpZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChsb2NhbEFkZHJlc3MgIT0gbnVsbCAmJiAodHlwZW9mIGxvY2FsQWRkcmVzcyAhPT0gJ3N0cmluZycgfHwgbmV0LmlzSVAobG9jYWxBZGRyZXNzKSA9PT0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbG9jYWxBZGRyZXNzIG11c3QgYmUgdmFsaWQgc3RyaW5nIElQIGFkZHJlc3MnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVzcG9uc2VTaXplKSB8fCBtYXhSZXNwb25zZVNpemUgPCAtMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVzcG9uc2VTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCAhPSBudWxsICYmXG4gICAgICAoIU51bWJlci5pc0ludGVnZXIoYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0KSB8fCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgPCAtMSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIC8vIGgyXG4gICAgaWYgKGFsbG93SDIgIT0gbnVsbCAmJiB0eXBlb2YgYWxsb3dIMiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2FsbG93SDIgbXVzdCBiZSBhIHZhbGlkIGJvb2xlYW4gdmFsdWUnKVxuICAgIH1cblxuICAgIGlmIChtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsICYmICh0eXBlb2YgbWF4Q29uY3VycmVudFN0cmVhbXMgIT09ICdudW1iZXInIHx8IG1heENvbmN1cnJlbnRTdHJlYW1zIDwgMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q29uY3VycmVudFN0cmVhbXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4oYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChpbnRlcmNlcHRvcnM/LkNsaWVudCAmJiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9ycy5DbGllbnQpKSB7XG4gICAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgaWYgKCFkZXByZWNhdGVkSW50ZXJjZXB0b3JXYXJuZWQpIHtcbiAgICAgICAgZGVwcmVjYXRlZEludGVyY2VwdG9yV2FybmVkID0gdHJ1ZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdDbGllbnQuT3B0aW9ucyNpbnRlcmNlcHRvciBpcyBkZXByZWNhdGVkLiBVc2UgRGlzcGF0Y2hlciNjb21wb3NlIGluc3RlYWQuJywge1xuICAgICAgICAgIGNvZGU6ICdVTkRJQ0ktQ0xJRU5ULUlOVEVSQ0VQVE9SLURFUFJFQ0FURUQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB9XG5cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tQaXBlbGluaW5nXSA9IHBpcGVsaW5pbmcgIT0gbnVsbCA/IHBpcGVsaW5pbmcgOiAxXG4gICAgdGhpc1trTWF4SGVhZGVyc1NpemVdID0gbWF4SGVhZGVyU2l6ZSB8fCBodHRwLm1heEhlYWRlclNpemVcbiAgICB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF0gPSBrZWVwQWxpdmVUaW1lb3V0ID09IG51bGwgPyA0ZTMgOiBrZWVwQWxpdmVUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlTWF4VGltZW91dF0gPSBrZWVwQWxpdmVNYXhUaW1lb3V0ID09IG51bGwgPyA2MDBlMyA6IGtlZXBBbGl2ZU1heFRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXSA9IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgPT0gbnVsbCA/IDJlMyA6IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgdGhpc1trU2VydmVyTmFtZV0gPSBudWxsXG4gICAgdGhpc1trTG9jYWxBZGRyZXNzXSA9IGxvY2FsQWRkcmVzcyAhPSBudWxsID8gbG9jYWxBZGRyZXNzIDogbnVsbFxuICAgIHRoaXNba1Jlc3VtaW5nXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trTmVlZERyYWluXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trSG9zdEhlYWRlcl0gPSBgaG9zdDogJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9XFxyXFxuYFxuICAgIHRoaXNba0JvZHlUaW1lb3V0XSA9IGJvZHlUaW1lb3V0ICE9IG51bGwgPyBib2R5VGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trSGVhZGVyc1RpbWVvdXRdID0gaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCA/IGhlYWRlcnNUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tTdHJpY3RDb250ZW50TGVuZ3RoXSA9IHN0cmljdENvbnRlbnRMZW5ndGggPT0gbnVsbCA/IHRydWUgOiBzdHJpY3RDb250ZW50TGVuZ3RoXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba01heFJlcXVlc3RzXSA9IG1heFJlcXVlc3RzUGVyQ2xpZW50XG4gICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgdGhpc1trTWF4UmVzcG9uc2VTaXplXSA9IG1heFJlc3BvbnNlU2l6ZSA+IC0xID8gbWF4UmVzcG9uc2VTaXplIDogLTFcbiAgICB0aGlzW2tNYXhDb25jdXJyZW50U3RyZWFtc10gPSBtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsID8gbWF4Q29uY3VycmVudFN0cmVhbXMgOiAxMDAgLy8gTWF4IHBlZXJDb25jdXJyZW50U3RyZWFtcyBmb3IgYSBOb2RlIGgyIHNlcnZlclxuICAgIHRoaXNba0hUVFBDb250ZXh0XSA9IG51bGxcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcblxuICAgIHRoaXNba1Jlc3VtZV0gPSAoc3luYykgPT4gcmVzdW1lKHRoaXMsIHN5bmMpXG4gICAgdGhpc1trT25FcnJvcl0gPSAoZXJyKSA9PiBvbkVycm9yKHRoaXMsIGVycilcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICB0aGlzW2tSZXN1bWVdKHRydWUpXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tQZW5kaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tQZW5kaW5nSWR4XSAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuICEhdGhpc1trSFRUUENvbnRleHRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trSFRUUENvbnRleHRdLmRlc3Ryb3llZFxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpc1trSFRUUENvbnRleHRdPy5idXN5KG51bGwpIHx8XG4gICAgICAodGhpc1trU2l6ZV0gPj0gKGdldFBpcGVsaW5pbmcodGhpcykgfHwgMSkpIHx8XG4gICAgICB0aGlzW2tQZW5kaW5nXSA+IDBcbiAgICApXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmU6IG9ubHkgdXNlZCBmb3IgdGVzdCAqL1xuICBba0Nvbm5lY3RdIChjYikge1xuICAgIGNvbm5lY3QodGhpcylcbiAgICB0aGlzLm9uY2UoJ2Nvbm5lY3QnLCBjYilcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gb3B0cy5vcmlnaW4gfHwgdGhpc1trVXJsXS5vcmlnaW5cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgdGhpc1trUXVldWVdLnB1c2gocmVxdWVzdClcbiAgICBpZiAodGhpc1trUmVzdW1pbmddKSB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAodXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgPT0gbnVsbCAmJiB1dGlsLmlzSXRlcmFibGUocmVxdWVzdC5ib2R5KSkge1xuICAgICAgLy8gV2FpdCBhIHRpY2sgaW4gY2FzZSBzdHJlYW0vaXRlcmF0b3IgaXMgZW5kZWQgaW4gdGhlIHNhbWUgdGljay5cbiAgICAgIHRoaXNba1Jlc3VtaW5nXSA9IDFcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHJlc3VtZSh0aGlzKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trUmVzdW1lXSh0cnVlKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tSZXN1bWluZ10gJiYgdGhpc1trTmVlZERyYWluXSAhPT0gMiAmJiB0aGlzW2tCdXN5XSkge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IDJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXSA8IDJcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICAvLyBUT0RPOiBmb3IgSDIgd2UgbmVlZCB0byBncmFjZWZ1bGx5IGZsdXNoIHRoZSByZW1haW5pbmcgZW5xdWV1ZWRcbiAgICAvLyByZXF1ZXN0IGFuZCBjbG9zZSBlYWNoIHN0cmVhbS5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzW2tTaXplXSkge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICB1dGlsLmVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trQ2xvc2VkUmVzb2x2ZV0pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBTaG91bGQgd2UgZXJyb3IgaGVyZSB3aXRoIENsaWVudERlc3Ryb3llZEVycm9yP1xuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQQ29udGV4dF0pIHtcbiAgICAgICAgdGhpc1trSFRUUENvbnRleHRdLmRlc3Ryb3koZXJyLCBjYWxsYmFjaylcbiAgICAgICAgdGhpc1trSFRUUENvbnRleHRdID0gbnVsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9XG5cbiAgICAgIHRoaXNba1Jlc3VtZV0oKVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4uL2ludGVyY2VwdG9yL3JlZGlyZWN0LWludGVyY2VwdG9yLmpzJylcblxuZnVuY3Rpb24gb25FcnJvciAoY2xpZW50LCBlcnIpIHtcbiAgaWYgKFxuICAgIGNsaWVudFtrUnVubmluZ10gPT09IDAgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfU09DS0VUJ1xuICApIHtcbiAgICAvLyBFcnJvciBpcyBub3QgY2F1c2VkIGJ5IHJ1bm5pbmcgcmVxdWVzdCBhbmQgbm90IGEgcmVjb3ZlcmFibGVcbiAgICAvLyBzb2NrZXQgZXJyb3IuXG5cbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nSWR4XSA9PT0gY2xpZW50W2tSdW5uaW5nSWR4XSlcblxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgICBhc3NlcnQoY2xpZW50W2tTaXplXSA9PT0gMClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Q2xpZW50fSBjbGllbnRcbiAqIEByZXR1cm5zXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKGNsaWVudCkge1xuICBhc3NlcnQoIWNsaWVudFtrQ29ubmVjdGluZ10pXG4gIGFzc2VydCghY2xpZW50W2tIVFRQQ29udGV4dF0pXG5cbiAgbGV0IHsgaG9zdCwgaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0IH0gPSBjbGllbnRba1VybF1cblxuICAvLyBSZXNvbHZlIGlwdjZcbiAgaWYgKGhvc3RuYW1lWzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0bmFtZS5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIGNvbnN0IGlwID0gaG9zdG5hbWUuc3Vic3RyaW5nKDEsIGlkeClcblxuICAgIGFzc2VydChuZXQuaXNJUChpcCkpXG4gICAgaG9zdG5hbWUgPSBpcFxuICB9XG5cbiAgY2xpZW50W2tDb25uZWN0aW5nXSA9IHRydWVcblxuICBpZiAoY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QucHVibGlzaCh7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgdmVyc2lvbjogY2xpZW50W2tIVFRQQ29udGV4dF0/LnZlcnNpb24sXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LFxuICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl1cbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjbGllbnRba0Nvbm5lY3Rvcl0oe1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LCAoZXJyLCBzb2NrZXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0Lm9uKCdlcnJvcicsIG5vb3ApLCBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydChzb2NrZXQpXG5cbiAgICB0cnkge1xuICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0gPSBzb2NrZXQuYWxwblByb3RvY29sID09PSAnaDInXG4gICAgICAgID8gYXdhaXQgY29ubmVjdEgyKGNsaWVudCwgc29ja2V0KVxuICAgICAgICA6IGF3YWl0IGNvbm5lY3RIMShjbGllbnQsIHNvY2tldClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNvY2tldC5kZXN0cm95KCkub24oJ2Vycm9yJywgbm9vcClcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIGNsaWVudFtrQ29ubmVjdGluZ10gPSBmYWxzZVxuXG4gICAgc29ja2V0W2tDb3VudGVyXSA9IDBcbiAgICBzb2NrZXRba01heFJlcXVlc3RzXSA9IGNsaWVudFtrTWF4UmVxdWVzdHNdXG4gICAgc29ja2V0W2tDbGllbnRdID0gY2xpZW50XG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdGVkLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0ZWQucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgdmVyc2lvbjogY2xpZW50W2tIVFRQQ29udGV4dF0/LnZlcnNpb24sXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgc29ja2V0XG4gICAgICB9KVxuICAgIH1cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RFcnJvci5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICB2ZXJzaW9uOiBjbGllbnRba0hUVFBDb250ZXh0XT8udmVyc2lvbixcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcbiAgICAgIHdoaWxlIChjbGllbnRba1BlbmRpbmddID4gMCAmJiBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXS5zZXJ2ZXJuYW1lID09PSBjbGllbnRba1NlcnZlck5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdKytdXG4gICAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkVycm9yKGNsaWVudCwgZXJyKVxuICAgIH1cblxuICAgIGNsaWVudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBlcnIpXG4gIH1cblxuICBjbGllbnRba1Jlc3VtZV0oKVxufVxuXG5mdW5jdGlvbiBlbWl0RHJhaW4gKGNsaWVudCkge1xuICBjbGllbnRba05lZWREcmFpbl0gPSAwXG4gIGNsaWVudC5lbWl0KCdkcmFpbicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG59XG5cbmZ1bmN0aW9uIHJlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIGlmIChjbGllbnRba1Jlc3VtaW5nXSA9PT0gMikge1xuICAgIHJldHVyblxuICB9XG5cbiAgY2xpZW50W2tSZXN1bWluZ10gPSAyXG5cbiAgX3Jlc3VtZShjbGllbnQsIHN5bmMpXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMFxuXG4gIGlmIChjbGllbnRba1J1bm5pbmdJZHhdID4gMjU2KSB7XG4gICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKDAsIGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSAtPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gICAgY2xpZW50W2tSdW5uaW5nSWR4XSA9IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDbG9zZWRSZXNvbHZlXSAmJiAhY2xpZW50W2tTaXplXSkge1xuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrSFRUUENvbnRleHRdKSB7XG4gICAgICBjbGllbnRba0hUVFBDb250ZXh0XS5yZXN1bWUoKVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0J1c3ldKSB7XG4gICAgICBjbGllbnRba05lZWREcmFpbl0gPSAyXG4gICAgfSBlbHNlIGlmIChjbGllbnRba05lZWREcmFpbl0gPT09IDIpIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDFcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZW1pdERyYWluKGNsaWVudCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGdldFBpcGVsaW5pbmcoY2xpZW50KSB8fCAxKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dXG5cbiAgICBpZiAoY2xpZW50W2tVcmxdLnByb3RvY29sID09PSAnaHR0cHM6JyAmJiBjbGllbnRba1NlcnZlck5hbWVdICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY2xpZW50W2tTZXJ2ZXJOYW1lXSA9IHJlcXVlc3Quc2VydmVybmFtZVxuICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0/LmRlc3Ryb3kobmV3IEluZm9ybWF0aW9uYWxFcnJvcignc2VydmVybmFtZSBjaGFuZ2VkJyksICgpID0+IHtcbiAgICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0gPSBudWxsXG4gICAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nvbm5lY3RpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWNsaWVudFtrSFRUUENvbnRleHRdKSB7XG4gICAgICBjb25uZWN0KGNsaWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0hUVFBDb250ZXh0XS5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0hUVFBDb250ZXh0XS5idXN5KHJlcXVlc3QpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiBjbGllbnRba0hUVFBDb250ZXh0XS53cml0ZShyZXF1ZXN0KSkge1xuICAgICAgY2xpZW50W2tQZW5kaW5nSWR4XSsrXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1BlbmRpbmdJZHhdLCAxKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFxuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vLyBFeHRyYWN0ZWQgZnJvbSBub2RlL2xpYi9pbnRlcm5hbC9maXhlZF9xdWV1ZS5qc1xuXG4vLyBDdXJyZW50bHkgb3B0aW1hbCBxdWV1ZSBzaXplLCB0ZXN0ZWQgb24gVjggNi4wIC0gNi42LiBNdXN0IGJlIHBvd2VyIG9mIHR3by5cbmNvbnN0IGtTaXplID0gMjA0ODtcbmNvbnN0IGtNYXNrID0ga1NpemUgLSAxO1xuXG4vLyBUaGUgRml4ZWRRdWV1ZSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBmaXhlZC1zaXplXG4vLyBjaXJjdWxhciBidWZmZXJzLiBJdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuLy9cbi8vICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxcbi8vICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLy8gICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2XG4vLyArLS0tLS0tLS0tLS0rIDwtLS0tLVxcICAgICAgICstLS0tLS0tLS0tLSsgPC0tLS0tLVxcICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgXFwtLS0tLSB8ICAgbmV4dCAgICB8ICAgICAgICAgXFwtLS0tLS0tIHwgICBuZXh0ICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8IDwtLSB0b3AgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gT3IsIGlmIHRoZXJlIGlzIG9ubHkgb25lIGNpcmN1bGFyIGJ1ZmZlciwgaXQgbG9va3Mgc29tZXRoaW5nXG4vLyBsaWtlIGVpdGhlciBvZiB0aGVzZTpcbi8vXG4vLyAgaGVhZCAgIHRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICAgdGFpbFxuLy8gICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8XG4vLyAgICB2ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbbnVsbF0gICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgICAgICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIEFkZGluZyBhIHZhbHVlIG1lYW5zIG1vdmluZyBgdG9wYCBmb3J3YXJkIGJ5IG9uZSwgcmVtb3ZpbmcgbWVhbnNcbi8vIG1vdmluZyBgYm90dG9tYCBmb3J3YXJkIGJ5IG9uZS4gQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCwgdGhlIHF1ZXVlXG4vLyB3cmFwcyBhcm91bmQuXG4vL1xuLy8gV2hlbiBgdG9wID09PSBib3R0b21gIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGVtcHR5IGFuZCB3aGVuXG4vLyBgdG9wICsgMSA9PT0gYm90dG9tYCBpdCdzIGZ1bGwuIFRoaXMgd2FzdGVzIGEgc2luZ2xlIHNwYWNlIG9mIHN0b3JhZ2Vcbi8vIGJ1dCBhbGxvd3MgbXVjaCBxdWlja2VyIGNoZWNrcy5cblxuY2xhc3MgRml4ZWRDaXJjdWxhckJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYm90dG9tID0gMDtcbiAgICB0aGlzLnRvcCA9IDA7XG4gICAgdGhpcy5saXN0ID0gbmV3IEFycmF5KGtTaXplKTtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy50b3AgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgaXNGdWxsKCkge1xuICAgIHJldHVybiAoKHRoaXMudG9wICsgMSkgJiBrTWFzaykgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgdGhpcy5saXN0W3RoaXMudG9wXSA9IGRhdGE7XG4gICAgdGhpcy50b3AgPSAodGhpcy50b3AgKyAxKSAmIGtNYXNrO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLmxpc3RbdGhpcy5ib3R0b21dO1xuICAgIGlmIChuZXh0SXRlbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5saXN0W3RoaXMuYm90dG9tXSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJvdHRvbSA9ICh0aGlzLmJvdHRvbSArIDEpICYga01hc2s7XG4gICAgcmV0dXJuIG5leHRJdGVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuaXNFbXB0eSgpO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgaWYgKHRoaXMuaGVhZC5pc0Z1bGwoKSkge1xuICAgICAgLy8gSGVhZCBpcyBmdWxsOiBDcmVhdGVzIGEgbmV3IHF1ZXVlLCBzZXRzIHRoZSBvbGQgcXVldWUncyBgLm5leHRgIHRvIGl0LFxuICAgICAgLy8gYW5kIHNldHMgaXQgYXMgdGhlIG5ldyBtYWluIHF1ZXVlLlxuICAgICAgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICAgIH1cbiAgICB0aGlzLmhlYWQucHVzaChkYXRhKTtcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgY29uc3QgbmV4dCA9IHRhaWwuc2hpZnQoKTtcbiAgICBpZiAodGFpbC5pc0VtcHR5KCkgJiYgdGFpbC5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhbm90aGVyIHF1ZXVlLCBpdCBmb3JtcyB0aGUgbmV3IHRhaWwuXG4gICAgICB0aGlzLnRhaWwgPSB0YWlsLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0O1xuICB9XG59O1xuIiwgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBrUG9vbCA9IFN5bWJvbCgncG9vbCcpXG5cbmNsYXNzIFBvb2xTdGF0cyB7XG4gIGNvbnN0cnVjdG9yIChwb29sKSB7XG4gICAgdGhpc1trUG9vbF0gPSBwb29sXG4gIH1cblxuICBnZXQgY29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIGdldCBmcmVlICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0ZyZWVdXG4gIH1cblxuICBnZXQgcGVuZGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tQZW5kaW5nXVxuICB9XG5cbiAgZ2V0IHF1ZXVlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tRdWV1ZWRdXG4gIH1cblxuICBnZXQgcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tSdW5uaW5nXVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrU2l6ZV1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xTdGF0c1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL2ZpeGVkLXF1ZXVlJylcbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUsIGtSdW5uaW5nLCBrUGVuZGluZywga1F1ZXVlZCwga0J1c3ksIGtGcmVlLCBrVXJsLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBQb29sU3RhdHMgPSByZXF1aXJlKCcuL3Bvb2wtc3RhdHMnKVxuXG5jb25zdCBrQ2xpZW50cyA9IFN5bWJvbCgnY2xpZW50cycpXG5jb25zdCBrTmVlZERyYWluID0gU3ltYm9sKCduZWVkRHJhaW4nKVxuY29uc3Qga1F1ZXVlID0gU3ltYm9sKCdxdWV1ZScpXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgnY2xvc2VkIHJlc29sdmUnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtHZXREaXNwYXRjaGVyID0gU3ltYm9sKCdnZXQgZGlzcGF0Y2hlcicpXG5jb25zdCBrQWRkQ2xpZW50ID0gU3ltYm9sKCdhZGQgY2xpZW50JylcbmNvbnN0IGtSZW1vdmVDbGllbnQgPSBTeW1ib2woJ3JlbW92ZSBjbGllbnQnKVxuY29uc3Qga1N0YXRzID0gU3ltYm9sKCdzdGF0cycpXG5cbmNsYXNzIFBvb2xCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBuZXcgRml4ZWRRdWV1ZSgpXG4gICAgdGhpc1trQ2xpZW50c10gPSBbXVxuICAgIHRoaXNba1F1ZXVlZF0gPSAwXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSBmdW5jdGlvbiBvbkRyYWluIChvcmlnaW4sIHRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHF1ZXVlID0gcG9vbFtrUXVldWVdXG5cbiAgICAgIGxldCBuZWVkRHJhaW4gPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIW5lZWREcmFpbikge1xuICAgICAgICBjb25zdCBpdGVtID0gcXVldWUuc2hpZnQoKVxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHBvb2xba1F1ZXVlZF0tLVxuICAgICAgICBuZWVkRHJhaW4gPSAhdGhpcy5kaXNwYXRjaChpdGVtLm9wdHMsIGl0ZW0uaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpc1trTmVlZERyYWluXSA9IG5lZWREcmFpblxuXG4gICAgICBpZiAoIXRoaXNba05lZWREcmFpbl0gJiYgcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBwb29sW2tOZWVkRHJhaW5dID0gZmFsc2VcbiAgICAgICAgcG9vbC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgICAgfVxuXG4gICAgICBpZiAocG9vbFtrQ2xvc2VkUmVzb2x2ZV0gJiYgcXVldWUuaXNFbXB0eSgpKSB7XG4gICAgICAgIFByb21pc2VcbiAgICAgICAgICAuYWxsKHBvb2xba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgICAgICAgLnRoZW4ocG9vbFtrQ2xvc2VkUmVzb2x2ZV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uRGlzY29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdHNdID0gbmV3IFBvb2xTdGF0cyh0aGlzKVxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrRnJlZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSAmJiAhY2xpZW50W2tOZWVkRHJhaW5dKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1BlbmRpbmddOiBwZW5kaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBwZW5kaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICBsZXQgcmV0ID0gMFxuICAgIGZvciAoY29uc3QgeyBba1J1bm5pbmddOiBydW5uaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBydW5uaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1NpemVdOiBzaXplIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBzaXplXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBzdGF0cyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1N0YXRzXVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGlmICh0aGlzW2tRdWV1ZV0uaXNFbXB0eSgpKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzW2tRdWV1ZV0uc2hpZnQoKVxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpdGVtLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpc1trQ2xpZW50c10ubWFwKGMgPT4gYy5kZXN0cm95KGVycikpKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trUXVldWVdLnB1c2goeyBvcHRzLCBoYW5kbGVyIH0pXG4gICAgICB0aGlzW2tRdWV1ZWRdKytcbiAgICB9IGVsc2UgaWYgKCFkaXNwYXRjaGVyLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpKSB7XG4gICAgICBkaXNwYXRjaGVyW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trTmVlZERyYWluXSA9ICF0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBba0FkZENsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudFxuICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgIC5vbignZGlzY29ubmVjdCcsIHRoaXNba09uRGlzY29ubmVjdF0pXG4gICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgIHRoaXNba0NsaWVudHNdLnB1c2goY2xpZW50KVxuXG4gICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgICAgICB0aGlzW2tPbkRyYWluXShjbGllbnRba1VybF0sIFt0aGlzLCBjbGllbnRdKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBba1JlbW92ZUNsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudC5jbG9zZSgoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKGNsaWVudClcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXNba05lZWREcmFpbl0gPSB0aGlzW2tDbGllbnRzXS5zb21lKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrQ29ubmVjdGlvbnMgPSBTeW1ib2woJ2Nvbm5lY3Rpb25zJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBjb25uZWN0aW9ucyxcbiAgICBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksXG4gICAgY29ubmVjdCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICB0bHMsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgc29ja2V0UGF0aCxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICBhbGxvd0gyLFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgaWYgKGNvbm5lY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdGlvbnMpIHx8IGNvbm5lY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9ucycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4oYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHN1cGVyKG9wdGlvbnMpXG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM/LlBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sKVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trQ29ubmVjdGlvbnNdID0gY29ubmVjdGlvbnMgfHwgbnVsbFxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKG9yaWdpbilcbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QsIGFsbG93SDIgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIHRoaXMub24oJ2Nvbm5lY3Rpb25FcnJvcicsIChvcmlnaW4sIHRhcmdldHMsIGVycm9yKSA9PiB7XG4gICAgICAvLyBJZiBhIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJzLCB3ZSByZW1vdmUgdGhlIGNsaWVudCBmcm9tIHRoZSBwb29sLFxuICAgICAgLy8gYW5kIGVtaXQgYSBjb25uZWN0aW9uRXJyb3IgZXZlbnQuIFRoZXkgd2lsbCBub3QgYmUgcmUtdXNlZC5cbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8zODk1XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIC8vIERvIG5vdCB1c2Uga1JlbW92ZUNsaWVudCBoZXJlLCBhcyBpdCB3aWxsIGNsb3NlIHRoZSBjbGllbnQsXG4gICAgICAgIC8vIGJ1dCB0aGUgY2xpZW50IGNhbm5vdCBiZSBjbG9zZWQgaW4gdGhpcyBzdGF0ZS5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZih0YXJnZXQpXG4gICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgaWYgKCFjbGllbnRba05lZWREcmFpbl0pIHtcbiAgICAgICAgcmV0dXJuIGNsaWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHBhcnNlT3JpZ2luIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrR3JlYXRlc3RDb21tb25EaXZpc29yID0gU3ltYm9sKCdrR3JlYXRlc3RDb21tb25EaXZpc29yJylcbmNvbnN0IGtDdXJyZW50V2VpZ2h0ID0gU3ltYm9sKCdrQ3VycmVudFdlaWdodCcpXG5jb25zdCBrSW5kZXggPSBTeW1ib2woJ2tJbmRleCcpXG5jb25zdCBrV2VpZ2h0ID0gU3ltYm9sKCdrV2VpZ2h0JylcbmNvbnN0IGtNYXhXZWlnaHRQZXJTZXJ2ZXIgPSBTeW1ib2woJ2tNYXhXZWlnaHRQZXJTZXJ2ZXInKVxuY29uc3Qga0Vycm9yUGVuYWx0eSA9IFN5bWJvbCgna0Vycm9yUGVuYWx0eScpXG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gbnVtYmVycyBieVxuICogdXNpbmcgdGhlIEV1Y2xpZGVhbiBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGEgPT09IDApIHJldHVybiBiXG5cbiAgd2hpbGUgKGIgIT09IDApIHtcbiAgICBjb25zdCB0ID0gYlxuICAgIGIgPSBhICUgYlxuICAgIGEgPSB0XG4gIH1cbiAgcmV0dXJuIGFcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh1cHN0cmVhbXMgPSBbXSwgeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIC4uLm9wdHMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSBvcHRzXG4gICAgdGhpc1trSW5kZXhdID0gLTFcbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IDBcblxuICAgIHRoaXNba01heFdlaWdodFBlclNlcnZlcl0gPSB0aGlzW2tPcHRpb25zXS5tYXhXZWlnaHRQZXJTZXJ2ZXIgfHwgMTAwXG4gICAgdGhpc1trRXJyb3JQZW5hbHR5XSA9IHRoaXNba09wdGlvbnNdLmVycm9yUGVuYWx0eSB8fCAxNVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVwc3RyZWFtcykpIHtcbiAgICAgIHVwc3RyZWFtcyA9IFt1cHN0cmVhbXNdXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzPy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIGxldCByZXN1bHQgPSAwXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzW2tDbGllbnRzXS5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ID0gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yKHRoaXNba0NsaWVudHNdW2ldW2tXZWlnaHRdLCByZXN1bHQpXG4gICAgfVxuXG4gICAgdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXSA9IHJlc3VsdFxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrQ2xpZW50cywga1J1bm5pbmcsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvcicpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIG9wdHMuY29ubmVjdGlvbnMgPT09IDFcbiAgICA/IG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxuICAgIDogbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCBtYXhSZWRpcmVjdGlvbnMgPSAwLCBjb25uZWN0LCAuLi5vcHRpb25zIH0gPSB7fSkge1xuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM/LkFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0IH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuICAgIHRoaXNba0NsaWVudHNdID0gbmV3IE1hcCgpXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFt0aGlzLCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgcmV0ICs9IGNsaWVudFtrUnVubmluZ11cbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBsZXQga2V5XG4gICAgaWYgKG9wdHMub3JpZ2luICYmICh0eXBlb2Ygb3B0cy5vcmlnaW4gPT09ICdzdHJpbmcnIHx8IG9wdHMub3JpZ2luIGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAga2V5ID0gU3RyaW5nKG9wdHMub3JpZ2luKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMub3JpZ2luIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIFVSTC4nKVxuICAgIH1cblxuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9wdHMub3JpZ2luLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgICAgLy8gVGhpcyBpbnRyb2R1Y2VzIGEgdGlueSBtZW1vcnkgbGVhaywgYXMgZGlzcGF0Y2hlcnMgYXJlIG5ldmVyIHJlbW92ZWQgZnJvbSB0aGUgbWFwLlxuICAgICAgLy8gVE9ETyhtY29sbGluYSk6IHJlbW92ZSB0ZSB0aW1lciB3aGVuIHRoZSBjbGllbnQvcG9vbCBkbyBub3QgaGF2ZSBhbnkgbW9yZVxuICAgICAgLy8gYWN0aXZlIGNvbm5lY3Rpb25zLlxuICAgICAgdGhpc1trQ2xpZW50c10uc2V0KGtleSwgZGlzcGF0Y2hlcilcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjbG9zZVByb21pc2VzLnB1c2goY2xpZW50LmNsb3NlKCkpXG4gICAgfVxuICAgIHRoaXNba0NsaWVudHNdLmNsZWFyKClcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgIH1cbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChkZXN0cm95UHJvbWlzZXMpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBZ2VudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtQcm94eSwga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBVUkwgfSA9IHJlcXVpcmUoJ25vZGU6dXJsJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi4vY29yZS9jb25uZWN0JylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcblxuY29uc3Qga0FnZW50ID0gU3ltYm9sKCdwcm94eSBhZ2VudCcpXG5jb25zdCBrQ2xpZW50ID0gU3ltYm9sKCdwcm94eSBjbGllbnQnKVxuY29uc3Qga1Byb3h5SGVhZGVycyA9IFN5bWJvbCgncHJveHkgaGVhZGVycycpXG5jb25zdCBrUmVxdWVzdFRscyA9IFN5bWJvbCgncmVxdWVzdCB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga1Byb3h5VGxzID0gU3ltYm9sKCdwcm94eSB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga0Nvbm5lY3RFbmRwb2ludCA9IFN5bWJvbCgnY29ubmVjdCBlbmRwb2ludCBmdW5jdGlvbicpXG5jb25zdCBrVHVubmVsUHJveHkgPSBTeW1ib2woJ3R1bm5lbCBwcm94eScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm90b2NvbFBvcnQgKHByb3RvY29sKSB7XG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MFxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5mdW5jdGlvbiBkZWZhdWx0QWdlbnRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgaWYgKG9wdHMuY29ubmVjdGlvbnMgPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG4gIH1cbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgSHR0cDFQcm94eVdyYXBwZXIgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gICNjbGllbnRcblxuICBjb25zdHJ1Y3RvciAocHJveHlVcmwsIHsgaGVhZGVycyA9IHt9LCBjb25uZWN0LCBmYWN0b3J5IH0pIHtcbiAgICBzdXBlcigpXG4gICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBVUkwgaXMgbWFuZGF0b3J5JylcbiAgICB9XG5cbiAgICB0aGlzW2tQcm94eUhlYWRlcnNdID0gaGVhZGVyc1xuICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICB0aGlzLiNjbGllbnQgPSBmYWN0b3J5KHByb3h5VXJsLCB7IGNvbm5lY3QgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jY2xpZW50ID0gbmV3IENsaWVudChwcm94eVVybCwgeyBjb25uZWN0IH0pXG4gICAgfVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvbkhlYWRlcnMgPSBoYW5kbGVyLm9uSGVhZGVyc1xuICAgIGhhbmRsZXIub25IZWFkZXJzID0gZnVuY3Rpb24gKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3VtZSkge1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwNykge1xuICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGhhbmRsZXIub25FcnJvcihuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkICg0MDcpJykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25IZWFkZXJzKSBvbkhlYWRlcnMuY2FsbCh0aGlzLCBzdGF0dXNDb2RlLCBkYXRhLCByZXN1bWUpXG4gICAgfVxuXG4gICAgLy8gUmV3cml0ZSByZXF1ZXN0IGFzIGFuIEhUVFAxIFByb3h5IHJlcXVlc3QsIHdpdGhvdXQgdHVubmVsaW5nLlxuICAgIGNvbnN0IHtcbiAgICAgIG9yaWdpbixcbiAgICAgIHBhdGggPSAnLycsXG4gICAgICBoZWFkZXJzID0ge31cbiAgICB9ID0gb3B0c1xuXG4gICAgb3B0cy5wYXRoID0gb3JpZ2luICsgcGF0aFxuXG4gICAgaWYgKCEoJ2hvc3QnIGluIGhlYWRlcnMpICYmICEoJ0hvc3QnIGluIGhlYWRlcnMpKSB7XG4gICAgICBjb25zdCB7IGhvc3QgfSA9IG5ldyBVUkwob3JpZ2luKVxuICAgICAgaGVhZGVycy5ob3N0ID0gaG9zdFxuICAgIH1cbiAgICBvcHRzLmhlYWRlcnMgPSB7IC4uLnRoaXNba1Byb3h5SGVhZGVyc10sIC4uLmhlYWRlcnMgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudFtrRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudC5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICByZXR1cm4gdGhpcy4jY2xpZW50LmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmNsYXNzIFByb3h5QWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKCFvcHRzIHx8ICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgIShvcHRzIGluc3RhbmNlb2YgVVJMKSAmJiAhb3B0cy51cmkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IHVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG4gICAgaWYgKHR5cGVvZiBjbGllbnRGYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMuY2xpZW50RmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHByb3h5VHVubmVsID0gdHJ1ZSB9ID0gb3B0c1xuXG4gICAgY29uc3QgdXJsID0gdGhpcy4jZ2V0VXJsKG9wdHMpXG4gICAgY29uc3QgeyBocmVmLCBvcmlnaW4sIHBvcnQsIHByb3RvY29sLCB1c2VybmFtZSwgcGFzc3dvcmQsIGhvc3RuYW1lOiBwcm94eUhvc3RuYW1lIH0gPSB1cmxcblxuICAgIHRoaXNba1Byb3h5XSA9IHsgdXJpOiBocmVmLCBwcm90b2NvbCB9XG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzPy5Qcm94eUFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudFxuICAgICAgOiBbXVxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cbiAgICB0aGlzW2tUdW5uZWxQcm94eV0gPSBwcm94eVR1bm5lbFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG5cbiAgICBjb25zdCBhZ2VudEZhY3RvcnkgPSBvcHRzLmZhY3RvcnkgfHwgZGVmYXVsdEFnZW50RmFjdG9yeVxuICAgIGNvbnN0IGZhY3RvcnkgPSAob3JpZ2luLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCB7IHByb3RvY29sIH0gPSBuZXcgVVJMKG9yaWdpbilcbiAgICAgIGlmICghdGhpc1trVHVubmVsUHJveHldICYmIHByb3RvY29sID09PSAnaHR0cDonICYmIHRoaXNba1Byb3h5XS5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHAxUHJveHlXcmFwcGVyKHRoaXNba1Byb3h5XS51cmksIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgIGNvbm5lY3QsXG4gICAgICAgICAgZmFjdG9yeTogYWdlbnRGYWN0b3J5XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gYWdlbnRGYWN0b3J5KG9yaWdpbiwgb3B0aW9ucylcbiAgICB9XG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkodXJsLCB7IGNvbm5lY3QgfSlcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGZhY3RvcnksXG4gICAgICBjb25uZWN0OiBhc3luYyAob3B0cywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZFBhdGggPSBvcHRzLmhvc3RcbiAgICAgICAgaWYgKCFvcHRzLnBvcnQpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRQYXRoICs9IGA6JHtkZWZhdWx0UHJvdG9jb2xQb3J0KG9wdHMucHJvdG9jb2wpfWBcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgc29ja2V0LCBzdGF0dXNDb2RlIH0gPSBhd2FpdCB0aGlzW2tDbGllbnRdLmNvbm5lY3Qoe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHJlcXVlc3RlZFBhdGgsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgICAgICBob3N0OiBvcHRzLmhvc3RcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXJ2ZXJuYW1lOiB0aGlzW2tQcm94eVRsc10/LnNlcnZlcm5hbWUgfHwgcHJveHlIb3N0bmFtZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIG5vb3ApLmRlc3Ryb3koKVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoYFByb3h5IHJlc3BvbnNlICgke3N0YXR1c0NvZGV9KSAhPT0gMjAwIHdoZW4gSFRUUCBUdW5uZWxpbmdgKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdHMucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzb2NrZXQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHNlcnZlcm5hbWVcbiAgICAgICAgICBpZiAodGhpc1trUmVxdWVzdFRsc10pIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSB0aGlzW2tSZXF1ZXN0VGxzXS5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSh7IC4uLm9wdHMsIHNlcnZlcm5hbWUsIGh0dHBTb2NrZXQ6IHNvY2tldCB9LCBjYWxsYmFjaylcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpIHtcbiAgICAgICAgICAgIC8vIFRocm93IGEgY3VzdG9tIGVycm9yIHRvIGF2b2lkIGxvb3AgaW4gY2xpZW50LmpzI2Nvbm5lY3RcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcihlcnIpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IGJ1aWxkSGVhZGVycyhvcHRzLmhlYWRlcnMpXG4gICAgdGhyb3dJZlByb3h5QXV0aElzU2VudChoZWFkZXJzKVxuXG4gICAgaWYgKGhlYWRlcnMgJiYgISgnaG9zdCcgaW4gaGVhZGVycykgJiYgISgnSG9zdCcgaW4gaGVhZGVycykpIHtcbiAgICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICAgIGhlYWRlcnMuaG9zdCA9IGhvc3RcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBoZWFkZXJzXG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvcHJveHktYWdlbnQnKS5Qcm94eUFnZW50Lk9wdGlvbnMgfCBzdHJpbmcgfCBVUkx9IG9wdHNcbiAgICogQHJldHVybnMge1VSTH1cbiAgICovXG4gICNnZXRVcmwgKG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChvcHRzKVxuICAgIH0gZWxzZSBpZiAob3B0cyBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgcmV0dXJuIG9wdHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBVUkwob3B0cy51cmkpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uZGVzdHJveSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5kZXN0cm95KClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzIChoZWFkZXJzKSB7XG4gIC8vIFdoZW4gdXNpbmcgdW5kaWNpLmZldGNoLCB0aGUgaGVhZGVycyBsaXN0IGlzIHN0b3JlZFxuICAvLyBhcyBhbiBhcnJheS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3QgaGVhZGVyc1BhaXIgPSB7fVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBoZWFkZXJzUGFpcltoZWFkZXJzW2ldXSA9IGhlYWRlcnNbaSArIDFdXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNQYWlyXG4gIH1cblxuICByZXR1cm4gaGVhZGVyc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICpcbiAqIFByZXZpb3VzIHZlcnNpb25zIG9mIFByb3h5QWdlbnQgc3VnZ2VzdHMgdGhlIFByb3h5LUF1dGhvcml6YXRpb24gaW4gcmVxdWVzdCBoZWFkZXJzXG4gKiBOZXZlcnRoZWxlc3MsIGl0IHdhcyBjaGFuZ2VkIGFuZCB0byBhdm9pZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYnkgZW5kIHVzZXJzXG4gKiB0aGlzIGNoZWNrIHdhcyBjcmVhdGVkLlxuICogSXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICovXG5mdW5jdGlvbiB0aHJvd0lmUHJveHlBdXRoSXNTZW50IChoZWFkZXJzKSB7XG4gIGNvbnN0IGV4aXN0UHJveHlBdXRoID0gaGVhZGVycyAmJiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5maW5kKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSAncHJveHktYXV0aG9yaXphdGlvbicpXG4gIGlmIChleGlzdFByb3h5QXV0aCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgYmUgc2VudCBpbiBQcm94eUFnZW50IGNvbnN0cnVjdG9yJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3h5QWdlbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IGtDbG9zZSwga0Rlc3Ryb3ksIGtDbG9zZWQsIGtEZXN0cm95ZWQsIGtEaXNwYXRjaCwga05vUHJveHlBZ2VudCwga0h0dHBQcm94eUFnZW50LCBrSHR0cHNQcm94eUFnZW50IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vcHJveHktYWdlbnQnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuY29uc3QgREVGQVVMVF9QT1JUUyA9IHtcbiAgJ2h0dHA6JzogODAsXG4gICdodHRwczonOiA0NDNcbn1cblxubGV0IGV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNsYXNzIEVudkh0dHBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAjbm9Qcm94eVZhbHVlID0gbnVsbFxuICAjbm9Qcm94eUVudHJpZXMgPSBudWxsXG4gICNvcHRzID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy4jb3B0cyA9IG9wdHNcblxuICAgIGlmICghZXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICBleHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdFbnZIdHRwUHJveHlBZ2VudCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgIGNvZGU6ICdVTkRJQ0ktRUhQQSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgeyBodHRwUHJveHksIGh0dHBzUHJveHksIG5vUHJveHksIC4uLmFnZW50T3B0cyB9ID0gb3B0c1xuXG4gICAgdGhpc1trTm9Qcm94eUFnZW50XSA9IG5ldyBBZ2VudChhZ2VudE9wdHMpXG5cbiAgICBjb25zdCBIVFRQX1BST1hZID0gaHR0cFByb3h5ID8/IHByb2Nlc3MuZW52Lmh0dHBfcHJveHkgPz8gcHJvY2Vzcy5lbnYuSFRUUF9QUk9YWVxuICAgIGlmIChIVFRQX1BST1hZKSB7XG4gICAgICB0aGlzW2tIdHRwUHJveHlBZ2VudF0gPSBuZXcgUHJveHlBZ2VudCh7IC4uLmFnZW50T3B0cywgdXJpOiBIVFRQX1BST1hZIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0h0dHBQcm94eUFnZW50XSA9IHRoaXNba05vUHJveHlBZ2VudF1cbiAgICB9XG5cbiAgICBjb25zdCBIVFRQU19QUk9YWSA9IGh0dHBzUHJveHkgPz8gcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHkgPz8gcHJvY2Vzcy5lbnYuSFRUUFNfUFJPWFlcbiAgICBpZiAoSFRUUFNfUFJPWFkpIHtcbiAgICAgIHRoaXNba0h0dHBzUHJveHlBZ2VudF0gPSBuZXcgUHJveHlBZ2VudCh7IC4uLmFnZW50T3B0cywgdXJpOiBIVFRQU19QUk9YWSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdID0gdGhpc1trSHR0cFByb3h5QWdlbnRdXG4gICAgfVxuXG4gICAgdGhpcy4jcGFyc2VOb1Byb3h5KClcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBhZ2VudCA9IHRoaXMuI2dldFByb3h5QWdlbnRGb3JVcmwodXJsKVxuICAgIHJldHVybiBhZ2VudC5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba05vUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIGlmICghdGhpc1trSHR0cFByb3h5QWdlbnRdW2tDbG9zZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIH1cbiAgICBpZiAoIXRoaXNba0h0dHBzUHJveHlBZ2VudF1ba0Nsb3NlZF0pIHtcbiAgICAgIGF3YWl0IHRoaXNba0h0dHBzUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIGF3YWl0IHRoaXNba05vUHJveHlBZ2VudF0uZGVzdHJveShlcnIpXG4gICAgaWYgKCF0aGlzW2tIdHRwUHJveHlBZ2VudF1ba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGF3YWl0IHRoaXNba0h0dHBQcm94eUFnZW50XS5kZXN0cm95KGVycilcbiAgICB9XG4gICAgaWYgKCF0aGlzW2tIdHRwc1Byb3h5QWdlbnRdW2tEZXN0cm95ZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdLmRlc3Ryb3koZXJyKVxuICAgIH1cbiAgfVxuXG4gICNnZXRQcm94eUFnZW50Rm9yVXJsICh1cmwpIHtcbiAgICBsZXQgeyBwcm90b2NvbCwgaG9zdDogaG9zdG5hbWUsIHBvcnQgfSA9IHVybFxuXG4gICAgLy8gU3RyaXBwaW5nIHBvcnRzIGluIHRoaXMgd2F5IGluc3RlYWQgb2YgdXNpbmcgcGFyc2VkVXJsLmhvc3RuYW1lIHRvIG1ha2VcbiAgICAvLyBzdXJlIHRoYXQgdGhlIGJyYWNrZXRzIGFyb3VuZCBJUHY2IGFkZHJlc3NlcyBhcmUga2VwdC5cbiAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoLzpcXGQqJC8sICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgcG9ydCA9IE51bWJlci5wYXJzZUludChwb3J0LCAxMCkgfHwgREVGQVVMVF9QT1JUU1twcm90b2NvbF0gfHwgMFxuICAgIGlmICghdGhpcy4jc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpKSB7XG4gICAgICByZXR1cm4gdGhpc1trTm9Qcm94eUFnZW50XVxuICAgIH1cbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICByZXR1cm4gdGhpc1trSHR0cHNQcm94eUFnZW50XVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1trSHR0cFByb3h5QWdlbnRdXG4gIH1cblxuICAjc2hvdWxkUHJveHkgKGhvc3RuYW1lLCBwb3J0KSB7XG4gICAgaWYgKHRoaXMuI25vUHJveHlDaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNwYXJzZU5vUHJveHkoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLiNub1Byb3h5RW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlIC8vIEFsd2F5cyBwcm94eSBpZiBOT19QUk9YWSBpcyBub3Qgc2V0IG9yIGVtcHR5LlxuICAgIH1cbiAgICBpZiAodGhpcy4jbm9Qcm94eVZhbHVlID09PSAnKicpIHtcbiAgICAgIHJldHVybiBmYWxzZSAvLyBOZXZlciBwcm94eSBpZiB3aWxkY2FyZCBpcyBzZXQuXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNub1Byb3h5RW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiNub1Byb3h5RW50cmllc1tpXVxuICAgICAgaWYgKGVudHJ5LnBvcnQgJiYgZW50cnkucG9ydCAhPT0gcG9ydCkge1xuICAgICAgICBjb250aW51ZSAvLyBTa2lwIGlmIHBvcnRzIGRvbid0IG1hdGNoLlxuICAgICAgfVxuICAgICAgaWYgKCEvXlsuKl0vLnRlc3QoZW50cnkuaG9zdG5hbWUpKSB7XG4gICAgICAgIC8vIE5vIHdpbGRjYXJkcywgc28gZG9uJ3QgcHJveHkgb25seSBpZiB0aGVyZSBpcyBub3QgYW4gZXhhY3QgbWF0Y2guXG4gICAgICAgIGlmIChob3N0bmFtZSA9PT0gZW50cnkuaG9zdG5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG9uJ3QgcHJveHkgaWYgdGhlIGhvc3RuYW1lIGVuZHMgd2l0aCB0aGUgbm9fcHJveHkgaG9zdC5cbiAgICAgICAgaWYgKGhvc3RuYW1lLmVuZHNXaXRoKGVudHJ5Lmhvc3RuYW1lLnJlcGxhY2UoL15cXCovLCAnJykpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgI3BhcnNlTm9Qcm94eSAoKSB7XG4gICAgY29uc3Qgbm9Qcm94eVZhbHVlID0gdGhpcy4jb3B0cy5ub1Byb3h5ID8/IHRoaXMuI25vUHJveHlFbnZcbiAgICBjb25zdCBub1Byb3h5U3BsaXQgPSBub1Byb3h5VmFsdWUuc3BsaXQoL1ssXFxzXS8pXG4gICAgY29uc3Qgbm9Qcm94eUVudHJpZXMgPSBbXVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub1Byb3h5U3BsaXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gbm9Qcm94eVNwbGl0W2ldXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBwYXJzZWQgPSBlbnRyeS5tYXRjaCgvXiguKyk6KFxcZCspJC8pXG4gICAgICBub1Byb3h5RW50cmllcy5wdXNoKHtcbiAgICAgICAgaG9zdG5hbWU6IChwYXJzZWQgPyBwYXJzZWRbMV0gOiBlbnRyeSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcG9ydDogcGFyc2VkID8gTnVtYmVyLnBhcnNlSW50KHBhcnNlZFsyXSwgMTApIDogMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLiNub1Byb3h5VmFsdWUgPSBub1Byb3h5VmFsdWVcbiAgICB0aGlzLiNub1Byb3h5RW50cmllcyA9IG5vUHJveHlFbnRyaWVzXG4gIH1cblxuICBnZXQgI25vUHJveHlDaGFuZ2VkICgpIHtcbiAgICBpZiAodGhpcy4jb3B0cy5ub1Byb3h5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jbm9Qcm94eVZhbHVlICE9PSB0aGlzLiNub1Byb3h5RW52XG4gIH1cblxuICBnZXQgI25vUHJveHlFbnYgKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5ub19wcm94eSA/PyBwcm9jZXNzLmVudi5OT19QUk9YWSA/PyAnJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW52SHR0cFByb3h5QWdlbnRcbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuY29uc3QgeyBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBSZXF1ZXN0UmV0cnlFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBpc0Rpc3R1cmJlZCxcbiAgcGFyc2VIZWFkZXJzLFxuICBwYXJzZVJhbmdlSGVhZGVyLFxuICB3cmFwUmVxdWVzdEJvZHlcbn0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyIChyZXRyeUFmdGVyKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBEYXRlLm5vdygpXG4gIHJldHVybiBuZXcgRGF0ZShyZXRyeUFmdGVyKS5nZXRUaW1lKCkgLSBjdXJyZW50XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aCAoaGVhZGVycywgcmFuZ2UsIHN0YXR1c0NvZGUsIHJldHJ5Q291bnQpIHtcbiAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShyYW5nZS5zdGFydCkgfHwgIU51bWJlci5pc0Zpbml0ZShyYW5nZS5lbmQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aCA9IE51bWJlcihjb250ZW50TGVuZ3RoKVxuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IHJhbmdlLmVuZCAtIHJhbmdlLnN0YXJ0ICsgMVxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShsZW5ndGgpIHx8IGxlbmd0aCAhPT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LUxlbmd0aCBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBkYXRhOiB7IGNvdW50OiByZXRyeUNvdW50IH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY2xhc3MgUmV0cnlIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXJzKSB7XG4gICAgY29uc3QgeyByZXRyeU9wdGlvbnMsIC4uLmRpc3BhdGNoT3B0cyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIFJldHJ5IHNjb3BlZFxuICAgICAgcmV0cnk6IHJldHJ5Rm4sXG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIG1pblRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgLy8gUmVzcG9uc2Ugc2NvcGVkXG4gICAgICBtZXRob2RzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIHJldHJ5QWZ0ZXIsXG4gICAgICBzdGF0dXNDb2Rlc1xuICAgIH0gPSByZXRyeU9wdGlvbnMgPz8ge31cblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBoYW5kbGVycy5kaXNwYXRjaFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJzLmhhbmRsZXJcbiAgICB0aGlzLm9wdHMgPSB7IC4uLmRpc3BhdGNoT3B0cywgYm9keTogd3JhcFJlcXVlc3RCb2R5KG9wdHMuYm9keSkgfVxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcbiAgICB0aGlzLnJldHJ5T3B0cyA9IHtcbiAgICAgIHJldHJ5OiByZXRyeUZuID8/IFJldHJ5SGFuZGxlcltrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSxcbiAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXIgPz8gdHJ1ZSxcbiAgICAgIG1heFRpbWVvdXQ6IG1heFRpbWVvdXQgPz8gMzAgKiAxMDAwLCAvLyAzMHMsXG4gICAgICBtaW5UaW1lb3V0OiBtaW5UaW1lb3V0ID8/IDUwMCwgLy8gLjVzXG4gICAgICB0aW1lb3V0RmFjdG9yOiB0aW1lb3V0RmFjdG9yID8/IDIsXG4gICAgICBtYXhSZXRyaWVzOiBtYXhSZXRyaWVzID8/IDUsXG4gICAgICAvLyBXaGF0IGVycm9ycyB3ZSBzaG91bGQgcmV0cnlcbiAgICAgIG1ldGhvZHM6IG1ldGhvZHMgPz8gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BVVCcsICdERUxFVEUnLCAnVFJBQ0UnXSxcbiAgICAgIC8vIEluZGljYXRlcyB3aGljaCBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIHN0YXR1c0NvZGVzOiBzdGF0dXNDb2RlcyA/PyBbNTAwLCA1MDIsIDUwMywgNTA0LCA0MjldLFxuICAgICAgLy8gTGlzdCBvZiBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIGVycm9yQ29kZXM6IGVycm9yQ29kZXMgPz8gW1xuICAgICAgICAnRUNPTk5SRVNFVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VORVRET1dOJyxcbiAgICAgICAgJ0VORVRVTlJFQUNIJyxcbiAgICAgICAgJ0VIT1NURE9XTicsXG4gICAgICAgICdFSE9TVFVOUkVBQ0gnLFxuICAgICAgICAnRVBJUEUnLFxuICAgICAgICAnVU5EX0VSUl9TT0NLRVQnXG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWluVGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBjb25zdCB7IGNvdW50ZXIgfSA9IHN0YXRlXG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoY29kZSAmJiBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmICFlcnJvckNvZGVzLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBtZXRob2QgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBtZXRob2QgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWV0aG9kcykgJiYgIW1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2Ygc3RhdHVzIGNvZGUgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBzdGF0dXMgY29kZSBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoXG4gICAgICBzdGF0dXNDb2RlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdHVzQ29kZXMpICYmXG4gICAgICAhc3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgcmV0cmllc1xuICAgIGlmIChjb3VudGVyID4gbWF4UmV0cmllcykge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzPy5bJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlci5pc05hTihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA/IGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgOiByZXRyeUFmdGVySGVhZGVyICogMWUzIC8vIFJldHJ5LUFmdGVyIGlzIGluIHNlY29uZHNcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVRpbWVvdXQgPVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA+IDBcbiAgICAgICAgPyBNYXRoLm1pbihyZXRyeUFmdGVySGVhZGVyLCBtYXhUaW1lb3V0KVxuICAgICAgICA6IE1hdGgubWluKG1pblRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIChjb3VudGVyIC0gMSksIG1heFRpbWVvdXQpXG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IGNiKG51bGwpLCByZXRyeVRpbWVvdXQpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBwYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgIGlmICh0aGlzLnJldHJ5T3B0cy5zdGF0dXNDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrcG9pbnQgZm9yIHJlc3VtZSBmcm9tIHdoZXJlIHdlIGxlZnQgaXRcbiAgICBpZiAodGhpcy5yZXN1bWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAgIC8vIE9ubHkgUGFydGlhbCBDb250ZW50IDIwNiBzdXBwb3NlZCB0byBwcm92aWRlIENvbnRlbnQtUmFuZ2UsXG4gICAgICAvLyBhbnkgb3RoZXIgc3RhdHVzIGNvZGUgdGhhdCBwYXJ0aWFsbHkgY29uc3VtZWQgdGhlIHBheWxvYWRcbiAgICAgIC8vIHNob3VsZCBub3QgYmUgcmV0cnkgYmVjYXVzZSBpdCB3b3VsZCByZXN1bHQgaW4gZG93bnN0cmVhbVxuICAgICAgLy8gd3JvbmdseSBjb25jYXRhbmV0ZSBtdWx0aXBsZSByZXNwb25zZXMuXG4gICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjA2ICYmICh0aGlzLnN0YXJ0ID4gMCB8fCBzdGF0dXNDb2RlICE9PSAyMDApKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmFuZ2UgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCB3YXMgcGFydGlhbGx5IGNvbnN1bWVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IHsgY291bnQ6IHRoaXMucmV0cnlDb3VudCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG4gICAgICAvLyBJZiBubyBjb250ZW50IHJhbmdlXG4gICAgICBpZiAoIWNvbnRlbnRSYW5nZSkge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignQ29udGVudC1SYW5nZSBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggYSB3ZWFrIGV0YWcgY2hlY2tcbiAgICAgIGlmICh0aGlzLmV0YWcgIT0gbnVsbCAmJiB0aGlzLmV0YWcgIT09IGhlYWRlcnMuZXRhZykge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignRVRhZyBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhFcnJvciA9IHZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aChoZWFkZXJzLCBjb250ZW50UmFuZ2UsIHN0YXR1c0NvZGUsIHRoaXMucmV0cnlDb3VudClcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmFib3J0KGNvbnRlbnRMZW5ndGhFcnJvcilcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgLSAxIH0gPSBjb250ZW50UmFuZ2VcblxuICAgICAgYXNzZXJ0KHRoaXMuc3RhcnQgPT09IHN0YXJ0LCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG4gICAgICBhc3NlcnQodGhpcy5lbmQgPT0gbnVsbCB8fCB0aGlzLmVuZCA9PT0gZW5kLCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA2KSB7XG4gICAgICAgIC8vIEZpcnN0IHRpbWUgd2UgcmVjZWl2ZSAyMDZcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcblxuICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgICAgICByZXN1bWUsXG4gICAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aEVycm9yID0gdmFsaWRhdGVQYXJ0aWFsUmVzcG9uc2VDb250ZW50TGVuZ3RoKGhlYWRlcnMsIHJhbmdlLCBzdGF0dXNDb2RlLCB0aGlzLnJldHJ5Q291bnQpXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoY29udGVudExlbmd0aEVycm9yKVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSAtIDEgfSA9IHJhbmdlXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCksXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KGVuZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShlbmQpLCAnaW52YWxpZCBjb250ZW50LWxlbmd0aCcpXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSAtIDEgOiBudWxsXG4gICAgICB9XG5cbiAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUodGhpcy5zdGFydCkpXG4gICAgICBhc3NlcnQoXG4gICAgICAgIHRoaXMuZW5kID09IG51bGwgfHwgTnVtYmVyLmlzRmluaXRlKHRoaXMuZW5kKSxcbiAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICApXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICB0aGlzLmV0YWcgPSBoZWFkZXJzLmV0YWcgIT0gbnVsbCA/IGhlYWRlcnMuZXRhZyA6IG51bGxcblxuICAgICAgLy8gV2VhayBldGFncyBhcmUgbm90IHVzZWZ1bCBmb3IgY29tcGFyaXNvbiBub3IgY2FjaGVcbiAgICAgIC8vIGZvciBpbnN0YW5jZSBub3Qgc2FmZSB0byBhc3N1bWUgaWYgdGhlIHJlc3BvbnNlIGlzIGJ5dGUtcGVyLWJ5dGVcbiAgICAgIC8vIGVxdWFsXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnLnN0YXJ0c1dpdGgoJ1cvJykpIHtcbiAgICAgICAgdGhpcy5ldGFnID0gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgIH0pXG5cbiAgICB0aGlzLmFib3J0KGVycilcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuc3RhcnQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHJhd1RyYWlsZXJzKSB7XG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZShyYXdUcmFpbGVycylcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGlmICh0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIC8vIFdlIHJlY29uY2lsZSBpbiBjYXNlIG9mIGEgbWl4IGJldHdlZW4gbmV0d29yayBlcnJvcnNcbiAgICAvLyBhbmQgc2VydmVyIGVycm9yIHJlc3BvbnNlXG4gICAgaWYgKHRoaXMucmV0cnlDb3VudCAtIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQgPiAwKSB7XG4gICAgICAvLyBXZSBjb3VudCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsYXN0IGNoZWNrcG9pbnQgYW5kIHRoZSBjdXJyZW50IHJldHJ5IGNvdW50XG4gICAgICB0aGlzLnJldHJ5Q291bnQgPVxuICAgICAgICB0aGlzLnJldHJ5Q291bnRDaGVja3BvaW50ICtcbiAgICAgICAgKHRoaXMucmV0cnlDb3VudCAtIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCB9LFxuICAgICAgICBvcHRzOiB7IHJldHJ5T3B0aW9uczogdGhpcy5yZXRyeU9wdHMsIC4uLnRoaXMub3B0cyB9XG4gICAgICB9LFxuICAgICAgb25SZXRyeS5iaW5kKHRoaXMpXG4gICAgKVxuXG4gICAgZnVuY3Rpb24gb25SZXRyeSAoZXJyKSB7XG4gICAgICBpZiAoZXJyICE9IG51bGwgfHwgdGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCAhPT0gMCkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0geyByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gIH1cblxuICAgICAgICAvLyBXZWFrIGV0YWcgY2hlY2sgLSB3ZWFrIGV0YWdzIHdpbGwgbWFrZSBjb21wYXJpc29uIGFsZ29yaXRobXMgbmV2ZXIgbWF0Y2hcbiAgICAgICAgaWYgKHRoaXMuZXRhZyAhPSBudWxsKSB7XG4gICAgICAgICAgaGVhZGVyc1snaWYtbWF0Y2gnXSA9IHRoaXMuZXRhZ1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRzID0ge1xuICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdHMuaGVhZGVycyxcbiAgICAgICAgICAgIC4uLmhlYWRlcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50Q2hlY2twb2ludCA9IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmV0cnlIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXInKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9yZXRyeS1oYW5kbGVyJylcblxuY2xhc3MgUmV0cnlBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICAjYWdlbnQgPSBudWxsXG4gICNvcHRpb25zID0gbnVsbFxuICBjb25zdHJ1Y3RvciAoYWdlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKG9wdGlvbnMpXG4gICAgdGhpcy4jYWdlbnQgPSBhZ2VudFxuICAgIHRoaXMuI29wdGlvbnMgPSBvcHRpb25zXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHJldHJ5ID0gbmV3IFJldHJ5SGFuZGxlcih7XG4gICAgICAuLi5vcHRzLFxuICAgICAgcmV0cnlPcHRpb25zOiB0aGlzLiNvcHRpb25zXG4gICAgfSwge1xuICAgICAgZGlzcGF0Y2g6IHRoaXMuI2FnZW50LmRpc3BhdGNoLmJpbmQodGhpcy4jYWdlbnQpLFxuICAgICAgaGFuZGxlclxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXMuI2FnZW50LmRpc3BhdGNoKG9wdHMsIHJldHJ5KVxuICB9XG5cbiAgY2xvc2UgKCkge1xuICAgIHJldHVybiB0aGlzLiNhZ2VudC5jbG9zZSgpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICByZXR1cm4gdGhpcy4jYWdlbnQuZGVzdHJveSgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUFnZW50XG4iLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC85MDdcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yLCBBYm9ydEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jb25zdCBrQ29uc3VtZSA9IFN5bWJvbCgna0NvbnN1bWUnKVxuY29uc3Qga1JlYWRpbmcgPSBTeW1ib2woJ2tSZWFkaW5nJylcbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdrQm9keScpXG5jb25zdCBrQWJvcnQgPSBTeW1ib2woJ2tBYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5jb25zdCBrQ29udGVudExlbmd0aCA9IFN5bWJvbCgna0NvbnRlbnRMZW5ndGgnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY2xhc3MgQm9keVJlYWRhYmxlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHJlc3VtZSxcbiAgICBhYm9ydCxcbiAgICBjb250ZW50VHlwZSA9ICcnLFxuICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgaGlnaFdhdGVyTWFyayA9IDY0ICogMTAyNCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICB9KSB7XG4gICAgc3VwZXIoe1xuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiByZXN1bWUsXG4gICAgICBoaWdoV2F0ZXJNYXJrXG4gICAgfSlcblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSBmYWxzZVxuXG4gICAgdGhpc1trQWJvcnRdID0gYWJvcnRcbiAgICB0aGlzW2tDb25zdW1lXSA9IG51bGxcbiAgICB0aGlzW2tCb2R5XSA9IG51bGxcbiAgICB0aGlzW2tDb250ZW50VHlwZV0gPSBjb250ZW50VHlwZVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gY29udGVudExlbmd0aFxuXG4gICAgLy8gSXMgc3RyZWFtIGJlaW5nIGNvbnN1bWVkIHRocm91Z2ggUmVhZGFibGUgQVBJP1xuICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHRoYXQgd2UgYXZvaWQgY2hlY2tpbmdcbiAgICAvLyBmb3IgJ2RhdGEnIGFuZCAncmVhZGFibGUnIGxpc3RlbmVycyBpbiB0aGUgaG90IHBhdGhcbiAgICAvLyBpbnNpZGUgcHVzaCgpLlxuICAgIHRoaXNba1JlYWRpbmddID0gZmFsc2VcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzW2tBYm9ydF0oKVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5kZXN0cm95KGVycilcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgTm9kZSBcImJ1Z1wiLiBJZiB0aGUgc3RyZWFtIGlzIGRlc3Ryb3llZCBpbiBzYW1lXG4gICAgLy8gdGljayBhcyBpdCBpcyBjcmVhdGVkLCB0aGVuIGEgdXNlciB3aG8gaXMgd2FpdGluZyBmb3IgYVxuICAgIC8vIHByb21pc2UgKGkuZSBtaWNybyB0aWNrKSBmb3IgaW5zdGFsbGluZyBhICdlcnJvcicgbGlzdGVuZXIgd2lsbFxuICAgIC8vIG5ldmVyIGdldCBhIGNoYW5jZSBhbmQgd2lsbCBhbHdheXMgZW5jb3VudGVyIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgaWYgKCF0aGlzW2tSZWFkaW5nXSkge1xuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uIChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgYWRkTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvZmYgKGV2LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCAuLi5hcmdzKVxuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IChcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwIHx8XG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgcHVzaCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trQ29uc3VtZV0gJiYgY2h1bmsgIT09IG51bGwpIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ieXRlc1xuICBhc3luYyBieXRlcyAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2J5dGVzJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBhc3luYyBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gTnVtYmVyLmlzRmluaXRlKG9wdHM/LmxpbWl0KSA/IG9wdHMubGltaXQgOiAxMjggKiAxMDI0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cz8uc2lnbmFsXG5cbiAgICBpZiAoc2lnbmFsICE9IG51bGwgJiYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICB9XG5cbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKClcblxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlRW1pdHRlZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXNba0NvbnRlbnRMZW5ndGhdID4gbGltaXQpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShzaWduYWwucmVhc29uID8/IG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICB9XG4gICAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydClcblxuICAgICAgdGhpc1xuICAgICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KVxuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uID8/IG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZXJyb3InLCBub29wKVxuICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICBsaW1pdCAtPSBjaHVuay5sZW5ndGhcbiAgICAgICAgICBpZiAobGltaXQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXN1bWUoKVxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tbG9ja2VkXG5mdW5jdGlvbiBpc0xvY2tlZCAoc2VsZikge1xuICAvLyBDb25zdW1lIGlzIGFuIGltcGxpY2l0IGxvY2suXG4gIHJldHVybiAoc2VsZltrQm9keV0gJiYgc2VsZltrQm9keV0ubG9ja2VkID09PSB0cnVlKSB8fCBzZWxmW2tDb25zdW1lXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gaXNVbnVzYWJsZSAoc2VsZikge1xuICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZChzZWxmKSB8fCBpc0xvY2tlZChzZWxmKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lIChzdHJlYW0sIHR5cGUpIHtcbiAgYXNzZXJ0KCFzdHJlYW1ba0NvbnN1bWVdKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGlzVW51c2FibGUoc3RyZWFtKSkge1xuICAgICAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoclN0YXRlLmRlc3Ryb3llZCAmJiByU3RhdGUuY2xvc2VFbWl0dGVkID09PSBmYWxzZSkge1xuICAgICAgICBzdHJlYW1cbiAgICAgICAgICAub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgICAub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJykpXG4gICAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChyU3RhdGUuZXJyb3JlZCA/PyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHN0cmVhbVtrQ29uc3VtZV0gPSB7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgIGJvZHk6IFtdXG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1cbiAgICAgICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICBjb25zdW1lU3RhcnQoc3RyZWFtW2tDb25zdW1lXSlcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgaWYgKHN0YXRlLmJ1ZmZlckluZGV4KSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzdGF0ZS5idWZmZXJJbmRleFxuICAgIGNvbnN0IGVuZCA9IHN0YXRlLmJ1ZmZlci5sZW5ndGhcbiAgICBmb3IgKGxldCBuID0gc3RhcnQ7IG4gPCBlbmQ7IG4rKykge1xuICAgICAgY29uc3VtZVB1c2goY29uc3VtZSwgc3RhdGUuYnVmZmVyW25dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIHN0YXRlLmJ1ZmZlcikge1xuICAgICAgY29uc3VtZVB1c2goY29uc3VtZSwgY2h1bmspXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUuc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICAgIH0pXG4gIH1cblxuICBjb25zdW1lLnN0cmVhbS5yZXN1bWUoKVxuXG4gIHdoaWxlIChjb25zdW1lLnN0cmVhbS5yZWFkKCkgIT0gbnVsbCkge1xuICAgIC8vIExvb3BcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyW119IGNodW5rc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5mdW5jdGlvbiBjaHVua3NEZWNvZGUgKGNodW5rcywgbGVuZ3RoKSB7XG4gIGlmIChjaHVua3MubGVuZ3RoID09PSAwIHx8IGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IGNodW5rcy5sZW5ndGggPT09IDEgPyBjaHVua3NbMF0gOiBCdWZmZXIuY29uY2F0KGNodW5rcywgbGVuZ3RoKVxuICBjb25zdCBidWZmZXJMZW5ndGggPSBidWZmZXIubGVuZ3RoXG5cbiAgLy8gU2tpcCBCT00uXG4gIGNvbnN0IHN0YXJ0ID1cbiAgICBidWZmZXJMZW5ndGggPiAyICYmXG4gICAgYnVmZmVyWzBdID09PSAweGVmICYmXG4gICAgYnVmZmVyWzFdID09PSAweGJiICYmXG4gICAgYnVmZmVyWzJdID09PSAweGJmXG4gICAgICA/IDNcbiAgICAgIDogMFxuICByZXR1cm4gYnVmZmVyLnV0ZjhTbGljZShzdGFydCwgYnVmZmVyTGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyW119IGNodW5rc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGNodW5rc0NvbmNhdCAoY2h1bmtzLCBsZW5ndGgpIHtcbiAgaWYgKGNodW5rcy5sZW5ndGggPT09IDAgfHwgbGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApXG4gIH1cbiAgaWYgKGNodW5rcy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyBmYXN0LXBhdGhcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY2h1bmtzWzBdKVxuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cobGVuZ3RoKS5idWZmZXIpXG5cbiAgbGV0IG9mZnNldCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXVxuICAgIGJ1ZmZlci5zZXQoY2h1bmssIG9mZnNldClcbiAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVFbmQgKGNvbnN1bWUpIHtcbiAgY29uc3QgeyB0eXBlLCBib2R5LCByZXNvbHZlLCBzdHJlYW0sIGxlbmd0aCB9ID0gY29uc3VtZVxuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcmVzb2x2ZShjaHVua3NEZWNvZGUoYm9keSwgbGVuZ3RoKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdqc29uJykge1xuICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGNodW5rc0RlY29kZShib2R5LCBsZW5ndGgpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgIHJlc29sdmUoY2h1bmtzQ29uY2F0KGJvZHksIGxlbmd0aCkuYnVmZmVyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICByZXNvbHZlKG5ldyBCbG9iKGJvZHksIHsgdHlwZTogc3RyZWFtW2tDb250ZW50VHlwZV0gfSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYnl0ZXMnKSB7XG4gICAgICByZXNvbHZlKGNodW5rc0NvbmNhdChib2R5LCBsZW5ndGgpKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVhZGFibGU6IEJvZHlSZWFkYWJsZSwgY2h1bmtzRGVjb2RlIH1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7XG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCB7IGNodW5rc0RlY29kZSB9ID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCBDSFVOS19MSU1JVCA9IDEyOCAqIDEwMjRcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrICh7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9KSB7XG4gIGFzc2VydChib2R5KVxuXG4gIGxldCBjaHVua3MgPSBbXVxuICBsZXQgbGVuZ3RoID0gMFxuXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgIGxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgICAgIGlmIChsZW5ndGggPiBDSFVOS19MSU1JVCkge1xuICAgICAgICBjaHVua3MgPSBbXVxuICAgICAgICBsZW5ndGggPSAwXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBjaHVua3MgPSBbXVxuICAgIGxlbmd0aCA9IDBcbiAgICAvLyBEbyBub3RoaW5nLi4uLlxuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gXG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWxlbmd0aCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSkpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzdGFja1RyYWNlTGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXRcbiAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gMFxuICBsZXQgcGF5bG9hZFxuXG4gIHRyeSB7XG4gICAgaWYgKGlzQ29udGVudFR5cGVBcHBsaWNhdGlvbkpzb24oY29udGVudFR5cGUpKSB7XG4gICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShjaHVua3NEZWNvZGUoY2h1bmtzLCBsZW5ndGgpKVxuICAgIH0gZWxzZSBpZiAoaXNDb250ZW50VHlwZVRleHQoY29udGVudFR5cGUpKSB7XG4gICAgICBwYXlsb2FkID0gY2h1bmtzRGVjb2RlKGNodW5rcywgbGVuZ3RoKVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gcHJvY2VzcyBpbiBhIGNhbGxiYWNrIHRvIGF2b2lkIHRocm93aW5nIGluIHRoZSBtaWNyb3Rhc2sgcXVldWVcbiAgfSBmaW5hbGx5IHtcbiAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBzdGFja1RyYWNlTGltaXRcbiAgfVxuICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpKVxufVxuXG5jb25zdCBpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uID0gKGNvbnRlbnRUeXBlKSA9PiB7XG4gIHJldHVybiAoXG4gICAgY29udGVudFR5cGUubGVuZ3RoID4gMTUgJiZcbiAgICBjb250ZW50VHlwZVsxMV0gPT09ICcvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzBdID09PSAnYScgJiZcbiAgICBjb250ZW50VHlwZVsxXSA9PT0gJ3AnICYmXG4gICAgY29udGVudFR5cGVbMl0gPT09ICdwJyAmJlxuICAgIGNvbnRlbnRUeXBlWzNdID09PSAnbCcgJiZcbiAgICBjb250ZW50VHlwZVs0XSA9PT0gJ2knICYmXG4gICAgY29udGVudFR5cGVbNV0gPT09ICdjJyAmJlxuICAgIGNvbnRlbnRUeXBlWzZdID09PSAnYScgJiZcbiAgICBjb250ZW50VHlwZVs3XSA9PT0gJ3QnICYmXG4gICAgY29udGVudFR5cGVbOF0gPT09ICdpJyAmJlxuICAgIGNvbnRlbnRUeXBlWzldID09PSAnbycgJiZcbiAgICBjb250ZW50VHlwZVsxMF0gPT09ICduJyAmJlxuICAgIGNvbnRlbnRUeXBlWzEyXSA9PT0gJ2onICYmXG4gICAgY29udGVudFR5cGVbMTNdID09PSAncycgJiZcbiAgICBjb250ZW50VHlwZVsxNF0gPT09ICdvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzE1XSA9PT0gJ24nXG4gIClcbn1cblxuY29uc3QgaXNDb250ZW50VHlwZVRleHQgPSAoY29udGVudFR5cGUpID0+IHtcbiAgcmV0dXJuIChcbiAgICBjb250ZW50VHlwZS5sZW5ndGggPiA0ICYmXG4gICAgY29udGVudFR5cGVbNF0gPT09ICcvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzBdID09PSAndCcgJiZcbiAgICBjb250ZW50VHlwZVsxXSA9PT0gJ2UnICYmXG4gICAgY29udGVudFR5cGVbMl0gPT09ICd4JyAmJlxuICAgIGNvbnRlbnRUeXBlWzNdID09PSAndCdcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLFxuICBpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uLFxuICBpc0NvbnRlbnRUeXBlVGV4dFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ25vZGU6YXN5bmNfaG9va3MnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMudHJhaWxlcnMgPSB7fVxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3JcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5zaWduYWwgPSBzaWduYWxcbiAgICB0aGlzLnJlYXNvbiA9IG51bGxcbiAgICB0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIgPSBudWxsXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNpZ25hbCkge1xuICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLnNpZ25hbC5yZWFzb24gPz8gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyID0gdXRpbC5hZGRBYm9ydExpc3RlbmVyKHRoaXMuc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLnNpZ25hbC5yZWFzb24gPz8gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgICAgIGlmICh0aGlzLnJlcykge1xuICAgICAgICAgICAgdXRpbC5kZXN0cm95KHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKSwgdGhpcy5yZWFzb24pXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICB0aGlzLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzPy5vZmYoJ2Nsb3NlJywgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKClcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lciA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcGFyc2VkSGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgIGNvbnN0IHJlcyA9IG5ldyBSZWFkYWJsZSh7XG4gICAgICByZXN1bWUsXG4gICAgICBhYm9ydCxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgY29udGVudExlbmd0aDogdGhpcy5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoXG4gICAgICAgID8gTnVtYmVyKGNvbnRlbnRMZW5ndGgpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcikge1xuICAgICAgcmVzLm9uKCdjbG9zZScsIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcilcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIHRoaXMucmVzID0gcmVzXG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB0cmFpbGVyczogdGhpcy50cmFpbGVycyxcbiAgICAgICAgICBvcGFxdWUsXG4gICAgICAgICAgYm9keTogcmVzLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzLCB0aGlzLnRyYWlsZXJzKVxuICAgIHRoaXMucmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgYm9keSwgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHF1ZXVlTWljcm90YXNrP1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAvLyBFbnN1cmUgYWxsIHF1ZXVlZCBoYW5kbGVycyBhcmUgaW52b2tlZCBiZWZvcmUgZGVzdHJveWluZyByZXMuXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcikge1xuICAgICAgcmVzPy5vZmYoJ2Nsb3NlJywgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKVxuICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKClcbiAgICAgIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lciA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBSZXF1ZXN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwgImNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCBrTGlzdGVuZXIgPSBTeW1ib2woJ2tMaXN0ZW5lcicpXG5jb25zdCBrU2lnbmFsID0gU3ltYm9sKCdrU2lnbmFsJylcblxuZnVuY3Rpb24gYWJvcnQgKHNlbGYpIHtcbiAgaWYgKHNlbGYuYWJvcnQpIHtcbiAgICBzZWxmLmFib3J0KHNlbGZba1NpZ25hbF0/LnJlYXNvbilcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnJlYXNvbiA9IHNlbGZba1NpZ25hbF0/LnJlYXNvbiA/PyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gIH1cbiAgcmVtb3ZlU2lnbmFsKHNlbGYpXG59XG5cbmZ1bmN0aW9uIGFkZFNpZ25hbCAoc2VsZiwgc2lnbmFsKSB7XG4gIHNlbGYucmVhc29uID0gbnVsbFxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcblxuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgYWJvcnQoc2VsZilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBzaWduYWxcbiAgc2VsZltrTGlzdGVuZXJdID0gKCkgPT4ge1xuICAgIGFib3J0KHNlbGYpXG4gIH1cblxuICBhZGRBYm9ydExpc3RlbmVyKHNlbGZba1NpZ25hbF0sIHNlbGZba0xpc3RlbmVyXSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2lnbmFsIChzZWxmKSB7XG4gIGlmICghc2VsZltrU2lnbmFsXSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCdyZW1vdmVFdmVudExpc3RlbmVyJyBpbiBzZWxmW2tTaWduYWxdKSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfSBlbHNlIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFkZFNpZ25hbCxcbiAgcmVtb3ZlU2lnbmFsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgZmluaXNoZWQsIFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFN0cmVhbUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBmYWN0b3J5JylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1NUUkVBTScpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeVxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMudHJhaWxlcnMgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciB8fCBmYWxzZVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBmYWN0b3J5LCBvcGFxdWUsIGNvbnRleHQsIGNhbGxiYWNrLCByZXNwb25zZUhlYWRlcnMgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGxldCByZXNcblxuICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICAgIHJlcyA9IG5ldyBQYXNzVGhyb3VnaCgpXG5cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFjdG9yeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoZmFjdG9yeSwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgIXJlcyB8fFxuICAgICAgICB0eXBlb2YgcmVzLndyaXRlICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMuZW5kICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMub24gIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFdyaXRhYmxlJylcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogQXZvaWQgZmluaXNoZWQuIEl0IHJlZ2lzdGVycyBhbiB1bm5lY2Vzc2FyeSBhbW91bnQgb2YgbGlzdGVuZXJzLlxuICAgICAgZmluaXNoZWQocmVzLCB7IHJlYWRhYmxlOiBmYWxzZSB9LCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHJlcywgb3BhcXVlLCB0cmFpbGVycywgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgICAgaWYgKGVyciB8fCAhcmVzLnJlYWRhYmxlKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciB8fCBudWxsLCB7IG9wYXF1ZSwgdHJhaWxlcnMgfSlcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJlcy5vbignZHJhaW4nLCByZXN1bWUpXG5cbiAgICB0aGlzLnJlcyA9IHJlc1xuXG4gICAgY29uc3QgbmVlZERyYWluID0gcmVzLndyaXRhYmxlTmVlZERyYWluICE9PSB1bmRlZmluZWRcbiAgICAgID8gcmVzLndyaXRhYmxlTmVlZERyYWluXG4gICAgICA6IHJlcy5fd3JpdGFibGVTdGF0ZT8ubmVlZERyYWluXG5cbiAgICByZXR1cm4gbmVlZERyYWluICE9PSB0cnVlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJldHVybiByZXMgPyByZXMud3JpdGUoY2h1bmspIDogdHJ1ZVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy50cmFpbGVycyA9IHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzKVxuXG4gICAgcmVzLmVuZCgpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIG9wYXF1ZSwgYm9keSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyZWFtIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0uY2FsbCh0aGlzLCBvcHRzLCBmYWN0b3J5LCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgU3RyZWFtSGFuZGxlcihvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgUGFzc1Rocm91Z2hcbn0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdub2RlOmFzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuY29uc3Qga1Jlc3VtZSA9IFN5bWJvbCgncmVzdW1lJylcblxuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0IGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuXG4gICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICBjb25zdCB7IFtrUmVzdW1lXTogcmVzdW1lIH0gPSB0aGlzXG5cbiAgICBpZiAocmVzdW1lKSB7XG4gICAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICAgICAgcmVzdW1lKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3JlYWQoKVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lUmVzcG9uc2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChyZXN1bWUpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG4gICAgdGhpc1trUmVzdW1lXSA9IHJlc3VtZVxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIHRoaXNba1Jlc3VtZV0oKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoYW5kbGVyJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfUElQRUxJTkUnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuXG4gICAgdGhpcy5yZXEgPSBuZXcgUGlwZWxpbmVSZXF1ZXN0KCkub24oJ2Vycm9yJywgdXRpbC5ub3ApXG5cbiAgICB0aGlzLnJldCA9IG5ldyBEdXBsZXgoe1xuICAgICAgcmVhZGFibGVPYmplY3RNb2RlOiBvcHRzLm9iamVjdE1vZGUsXG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKGJvZHk/LnJlc3VtZSkge1xuICAgICAgICAgIGJvZHkucmVzdW1lKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHdyaXRlOiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChyZXEucHVzaChjaHVuaywgZW5jb2RpbmcpIHx8IHJlcS5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxW2tSZXN1bWVdID0gY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IChlcnIsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSwgcmVxLCByZXMsIHJldCwgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIWVyciAmJiAhcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWJvcnQgJiYgZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG5cbiAgICAgICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfVxuICAgIH0pLm9uKCdwcmVmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAvLyBOb2RlIDwgMTUgZG9lcyBub3QgY2FsbCBfZmluYWwgaW4gc2FtZSB0aWNrLlxuICAgICAgcmVxLnB1c2gobnVsbClcbiAgICB9KVxuXG4gICAgdGhpcy5yZXMgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgcmV0LCByZXMgfSA9IHRoaXNcblxuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQoIXJlcywgJ3BpcGVsaW5lIGNhbm5vdCBiZSByZXRyaWVkJylcbiAgICBhc3NlcnQoIXJldC5kZXN0cm95ZWQpXG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSkge1xuICAgIGNvbnN0IHsgb3BhcXVlLCBoYW5kbGVyLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSBuZXcgUGlwZWxpbmVSZXNwb25zZShyZXN1bWUpXG5cbiAgICBsZXQgYm9keVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgYm9keSA9IHRoaXMucnVuSW5Bc3luY1Njb3BlKGhhbmRsZXIsIG51bGwsIHtcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgb3BhcXVlLFxuICAgICAgICBib2R5OiB0aGlzLnJlcyxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5Lm9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFJlYWRhYmxlJylcbiAgICB9XG5cbiAgICBib2R5XG4gICAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQsIGJvZHkgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5wdXNoKGNodW5rKSAmJiBib2R5LnBhdXNlKSB7XG4gICAgICAgICAgYm9keS5wYXVzZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgICAgIH0pXG4gICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICByZXQucHVzaChudWxsKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kZWQpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcGlwZWxpbmUgKG9wdHMsIGhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaXBlbGluZUhhbmRsZXIgPSBuZXcgUGlwZWxpbmVIYW5kbGVyKG9wdHMsIGhhbmRsZXIpXG4gICAgdGhpcy5kaXNwYXRjaCh7IC4uLm9wdHMsIGJvZHk6IHBpcGVsaW5lSGFuZGxlci5yZXEgfSwgcGlwZWxpbmVIYW5kbGVyKVxuICAgIHJldHVybiBwaXBlbGluZUhhbmRsZXIucmV0XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBuZXcgUGFzc1Rocm91Z2goKS5kZXN0cm95KGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ25vZGU6YXN5bmNfaG9va3MnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5cbmNsYXNzIFVwZ3JhZGVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfVVBHUkFERScpXG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGFib3J0KHRoaXMucmVhc29uKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuY2FsbGJhY2spXG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIHVwZ3JhZGUnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA9PT0gMTAxKVxuXG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGUgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwZ3JhZGUuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBncmFkZUhhbmRsZXIgPSBuZXcgVXBncmFkZUhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgIHVwZ3JhZGU6IG9wdHMucHJvdG9jb2wgfHwgJ1dlYnNvY2tldCdcbiAgICB9LCB1cGdyYWRlSGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHM/Lm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIENvbm5lY3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfQ09OTkVDVCcpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgY29ubmVjdCcsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuXG4gICAgbGV0IGhlYWRlcnMgPSByYXdIZWFkZXJzXG4gICAgLy8gSW5kaWNhdGVzIGlzIGFuIEhUVFAyU2Vzc2lvblxuICAgIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgfVxuXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29ubmVjdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29ubmVjdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25uZWN0SGFuZGxlciA9IG5ldyBDb25uZWN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgbWV0aG9kOiAnQ09OTkVDVCcgfSwgY29ubmVjdEhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWlyZSgnLi9hcGktcmVxdWVzdCcpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL2FwaS1zdHJlYW0nKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSByZXF1aXJlKCcuL2FwaS1waXBlbGluZScpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gcmVxdWlyZSgnLi9hcGktdXBncmFkZScpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gcmVxdWlyZSgnLi9hcGktY29ubmVjdCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga01vY2tOb3RNYXRjaGVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX01PQ0tfRVJSX01PQ0tfTk9UX01BVENIRUQnKVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGRvZXMgbm90IG1hdGNoIGFueSByZWdpc3RlcmVkIG1vY2sgZGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja05vdE1hdGNoZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE1vY2tOb3RNYXRjaGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01vY2tOb3RNYXRjaGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIHJlcXVlc3QgZG9lcyBub3QgbWF0Y2ggYW55IHJlZ2lzdGVyZWQgbW9jayBkaXNwYXRjaGVzJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfTU9DS19FUlJfTU9DS19OT1RfTUFUQ0hFRCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba01vY2tOb3RNYXRjaGVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba01vY2tOb3RNYXRjaGVkRXJyb3JdID0gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTW9ja05vdE1hdGNoZWRFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNb2NrTm90TWF0Y2hlZEVycm9yIH0gPSByZXF1aXJlKCcuL21vY2stZXJyb3JzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrT3JpZ2luLFxuICBrR2V0TmV0Q29ubmVjdFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgYnVpbGRVUkwgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHtcbiAgdHlwZXM6IHtcbiAgICBpc1Byb21pc2VcbiAgfVxufSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmZ1bmN0aW9uIG1hdGNoVmFsdWUgKG1hdGNoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBtYXRjaCA9PT0gdmFsdWVcbiAgfVxuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gbWF0Y2gudGVzdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIG1hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1hdGNoKHZhbHVlKSA9PT0gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBsb3dlckNhc2VFbnRyaWVzIChoZWFkZXJzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoaGVhZGVycykubWFwKChbaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4gW2hlYWRlck5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSwgaGVhZGVyVmFsdWVdXG4gICAgfSlcbiAgKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9pbmRleCcpLkhlYWRlcnN8c3RyaW5nW118UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJCeU5hbWUgKGhlYWRlcnMsIGtleSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKGhlYWRlcnNbaV0udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0ga2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9IGVsc2UgaWYgKHR5cGVvZiBoZWFkZXJzLmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBoZWFkZXJzLmdldChrZXkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycylba2V5LnRvTG9jYWxlTG93ZXJDYXNlKCldXG4gIH1cbn1cblxuLyoqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlcnMgKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVyc0Zyb21BcnJheSAoaGVhZGVycykgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICBjb25zdCBjbG9uZSA9IGhlYWRlcnMuc2xpY2UoKVxuICBjb25zdCBlbnRyaWVzID0gW11cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNsb25lLmxlbmd0aDsgaW5kZXggKz0gMikge1xuICAgIGVudHJpZXMucHVzaChbY2xvbmVbaW5kZXhdLCBjbG9uZVtpbmRleCArIDFdXSlcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpXG59XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVycyAobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKSB7XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICAgICAgaGVhZGVycyA9IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShoZWFkZXJzKVxuICAgIH1cbiAgICByZXR1cm4gbW9ja0Rpc3BhdGNoLmhlYWRlcnMoaGVhZGVycyA/IGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycykgOiB7fSlcbiAgfVxuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHR5cGVvZiBoZWFkZXJzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IFttYXRjaEhlYWRlck5hbWUsIG1hdGNoSGVhZGVyVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1vY2tEaXNwYXRjaC5oZWFkZXJzKSkge1xuICAgIGNvbnN0IGhlYWRlclZhbHVlID0gZ2V0SGVhZGVyQnlOYW1lKGhlYWRlcnMsIG1hdGNoSGVhZGVyTmFtZSlcblxuICAgIGlmICghbWF0Y2hWYWx1ZShtYXRjaEhlYWRlclZhbHVlLCBoZWFkZXJWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBzYWZlVXJsIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnPycpXG5cbiAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcXAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhdGhTZWdtZW50cy5wb3AoKSlcbiAgcXAuc29ydCgpXG4gIHJldHVybiBbLi4ucGF0aFNlZ21lbnRzLCBxcC50b1N0cmluZygpXS5qb2luKCc/Jylcbn1cblxuZnVuY3Rpb24gbWF0Y2hLZXkgKG1vY2tEaXNwYXRjaCwgeyBwYXRoLCBtZXRob2QsIGJvZHksIGhlYWRlcnMgfSkge1xuICBjb25zdCBwYXRoTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5wYXRoLCBwYXRoKVxuICBjb25zdCBtZXRob2RNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLm1ldGhvZCwgbWV0aG9kKVxuICBjb25zdCBib2R5TWF0Y2ggPSB0eXBlb2YgbW9ja0Rpc3BhdGNoLmJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2guYm9keSwgYm9keSkgOiB0cnVlXG4gIGNvbnN0IGhlYWRlcnNNYXRjaCA9IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpXG4gIHJldHVybiBwYXRoTWF0Y2ggJiYgbWV0aG9kTWF0Y2ggJiYgYm9keU1hdGNoICYmIGhlYWRlcnNNYXRjaFxufVxuXG5mdW5jdGlvbiBnZXRSZXNwb25zZURhdGEgKGRhdGEpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBiYXNlUGF0aCA9IGtleS5xdWVyeSA/IGJ1aWxkVVJMKGtleS5wYXRoLCBrZXkucXVlcnkpIDoga2V5LnBhdGhcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdHlwZW9mIGJhc2VQYXRoID09PSAnc3RyaW5nJyA/IHNhZmVVcmwoYmFzZVBhdGgpIDogYmFzZVBhdGhcblxuICAvLyBNYXRjaCBwYXRoXG4gIGxldCBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgY29uc3VtZWQgfSkgPT4gIWNvbnN1bWVkKS5maWx0ZXIoKHsgcGF0aCB9KSA9PiBtYXRjaFZhbHVlKHNhZmVVcmwocGF0aCksIHJlc29sdmVkUGF0aCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggbWV0aG9kXG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgbWV0aG9kIH0pID0+IG1hdGNoVmFsdWUobWV0aG9kLCBrZXkubWV0aG9kKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgbWV0aG9kICcke2tleS5tZXRob2R9JyBvbiBwYXRoICcke3Jlc29sdmVkUGF0aH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nIG9uIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggaGVhZGVyc1xuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKChtb2NrRGlzcGF0Y2gpID0+IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGtleS5oZWFkZXJzKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzXG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7aGVhZGVyc30nIG9uIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldXG4gICAgY29uc3QgbmFtZSA9IEJ1ZmZlci5mcm9tKGAke2tleX1gKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7ICsraikge1xuICAgICAgICByZXN1bHQucHVzaChuYW1lLCBCdWZmZXIuZnJvbShgJHt2YWx1ZVtqXX1gKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2gobmFtZSwgQnVmZmVyLmZyb20oYCR7dmFsdWV9YCkpXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvU3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzQ29kZVxuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNUZXh0IChzdGF0dXNDb2RlKSB7XG4gIHJldHVybiBTVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gfHwgJ3Vua25vd24nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlIChib2R5KSB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBbXVxuICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgYm9keSkge1xuICAgIGJ1ZmZlcnMucHVzaChkYXRhKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpLnRvU3RyaW5nKCd1dGY4Jylcbn1cblxuLyoqXG4gKiBNb2NrIGRpc3BhdGNoIGZ1bmN0aW9uIHVzZWQgdG8gc2ltdWxhdGUgdW5kaWNpIGRpc3BhdGNoZXNcbiAqL1xuZnVuY3Rpb24gbW9ja0Rpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gIC8vIEdldCBtb2NrIGRpc3BhdGNoIGZyb20gYnVpbHQga2V5XG4gIGNvbnN0IGtleSA9IGJ1aWxkS2V5KG9wdHMpXG4gIGNvbnN0IG1vY2tEaXNwYXRjaCA9IGdldE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuXG4gIG1vY2tEaXNwYXRjaC50aW1lc0ludm9rZWQrK1xuXG4gIC8vIEhlcmUncyB3aGVyZSB3ZSByZXNvbHZlIGEgY2FsbGJhY2sgaWYgYSBjYWxsYmFjayBpcyBwcmVzZW50IGZvciB0aGUgZGlzcGF0Y2ggZGF0YS5cbiAgaWYgKG1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKSB7XG4gICAgbW9ja0Rpc3BhdGNoLmRhdGEgPSB7IC4uLm1vY2tEaXNwYXRjaC5kYXRhLCAuLi5tb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjayhvcHRzKSB9XG4gIH1cblxuICAvLyBQYXJzZSBtb2NrRGlzcGF0Y2ggZGF0YVxuICBjb25zdCB7IGRhdGE6IHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMsIGVycm9yIH0sIGRlbGF5LCBwZXJzaXN0IH0gPSBtb2NrRGlzcGF0Y2hcbiAgY29uc3QgeyB0aW1lc0ludm9rZWQsIHRpbWVzIH0gPSBtb2NrRGlzcGF0Y2hcblxuICAvLyBJZiBpdCdzIHVzZWQgdXAgYW5kIG5vdCBwZXJzaXN0ZW50LCBtYXJrIGFzIGNvbnN1bWVkXG4gIG1vY2tEaXNwYXRjaC5jb25zdW1lZCA9ICFwZXJzaXN0ICYmIHRpbWVzSW52b2tlZCA+PSB0aW1lc1xuICBtb2NrRGlzcGF0Y2gucGVuZGluZyA9IHRpbWVzSW52b2tlZCA8IHRpbWVzXG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB0cmlnZ2VyIGRpc3BhdGNoIGVycm9yXG4gIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuICAgIGhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IHdpdGggYSBkZWxheSBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgICB9LCBkZWxheSlcbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlcGx5IChtb2NrRGlzcGF0Y2hlcywgX2RhdGEgPSBkYXRhKSB7XG4gICAgLy8gZmV0Y2gncyBIZWFkZXJzTGlzdCBpcyBhIDFEIHN0cmluZyBhcnJheVxuICAgIGNvbnN0IG9wdHNIZWFkZXJzID0gQXJyYXkuaXNBcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA/IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA6IG9wdHMuaGVhZGVyc1xuICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgX2RhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gX2RhdGEoeyAuLi5vcHRzLCBoZWFkZXJzOiBvcHRzSGVhZGVycyB9KVxuICAgICAgOiBfZGF0YVxuXG4gICAgLy8gdXRpbC50eXBlcy5pc1Byb21pc2UgaXMgbGlrZWx5IG5lZWRlZCBmb3IgamVzdC5cbiAgICBpZiAoaXNQcm9taXNlKGJvZHkpKSB7XG4gICAgICAvLyBJZiBoYW5kbGVSZXBseSBpcyBhc3luY2hyb25vdXMsIHRocm93aW5nIGFuIGVycm9yXG4gICAgICAvLyBpbiB0aGUgY2FsbGJhY2sgd2lsbCByZWplY3QgdGhlIHByb21pc2UsIHJhdGhlciB0aGFuXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRocm93IHRoZSBlcnJvciwgd2hpY2ggYnJlYWtzIHNvbWUgdGVzdHMuXG4gICAgICAvLyBSYXRoZXIsIHdlIHdhaXQgZm9yIHRoZSBjYWxsYmFjayB0byByZXNvbHZlIGlmIGl0IGlzIGFcbiAgICAgIC8vIHByb21pc2UsIGFuZCB0aGVuIHJlLXJ1biBoYW5kbGVSZXBseSB3aXRoIHRoZSBuZXcgYm9keS5cbiAgICAgIGJvZHkudGhlbigobmV3RGF0YSkgPT4gaGFuZGxlUmVwbHkobW9ja0Rpc3BhdGNoZXMsIG5ld0RhdGEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGJvZHkpXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXMoaGVhZGVycylcbiAgICBjb25zdCByZXNwb25zZVRyYWlsZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXModHJhaWxlcnMpXG5cbiAgICBoYW5kbGVyLm9uQ29ubmVjdD8uKGVyciA9PiBoYW5kbGVyLm9uRXJyb3IoZXJyKSwgbnVsbClcbiAgICBoYW5kbGVyLm9uSGVhZGVycz8uKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhPy4oQnVmZmVyLmZyb20ocmVzcG9uc2VEYXRhKSlcbiAgICBoYW5kbGVyLm9uQ29tcGxldGU/LihyZXNwb25zZVRyYWlsZXJzKVxuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaChtb2NrRGlzcGF0Y2hlcywga2V5KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lICgpIHt9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrRGlzcGF0Y2ggKCkge1xuICBjb25zdCBhZ2VudCA9IHRoaXNba01vY2tBZ2VudF1cbiAgY29uc3Qgb3JpZ2luID0gdGhpc1trT3JpZ2luXVxuICBjb25zdCBvcmlnaW5hbERpc3BhdGNoID0gdGhpc1trT3JpZ2luYWxEaXNwYXRjaF1cblxuICByZXR1cm4gZnVuY3Rpb24gZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoYWdlbnQuaXNNb2NrQWN0aXZlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBtb2NrRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTW9ja05vdE1hdGNoZWRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG5ldENvbm5lY3QgPSBhZ2VudFtrR2V0TmV0Q29ubmVjdF0oKVxuICAgICAgICAgIGlmIChuZXRDb25uZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgZGlzYWJsZWQpYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoZWNrTmV0Q29ubmVjdChuZXRDb25uZWN0LCBvcmlnaW4pKSB7XG4gICAgICAgICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgaXMgbm90IGVuYWJsZWQgZm9yIHRoaXMgb3JpZ2luKWApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrTmV0Q29ubmVjdCAobmV0Q29ubmVjdCwgb3JpZ2luKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwob3JpZ2luKVxuICBpZiAobmV0Q29ubmVjdCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXRDb25uZWN0KSAmJiBuZXRDb25uZWN0LnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoVmFsdWUobWF0Y2hlciwgdXJsLmhvc3QpKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja09wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKG9wdHMpIHtcbiAgICBjb25zdCB7IGFnZW50LCAuLi5tb2NrT3B0aW9ucyB9ID0gb3B0c1xuICAgIHJldHVybiBtb2NrT3B0aW9uc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRSZXNwb25zZURhdGEsXG4gIGdldE1vY2tEaXNwYXRjaCxcbiAgYWRkTW9ja0Rpc3BhdGNoLFxuICBkZWxldGVNb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkS2V5LFxuICBnZW5lcmF0ZUtleVZhbHVlcyxcbiAgbWF0Y2hWYWx1ZSxcbiAgZ2V0UmVzcG9uc2UsXG4gIGdldFN0YXR1c1RleHQsXG4gIG1vY2tEaXNwYXRjaCxcbiAgYnVpbGRNb2NrRGlzcGF0Y2gsXG4gIGNoZWNrTmV0Q29ubmVjdCxcbiAgYnVpbGRNb2NrT3B0aW9ucyxcbiAgZ2V0SGVhZGVyQnlOYW1lLFxuICBidWlsZEhlYWRlcnNGcm9tQXJyYXlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBnZXRSZXNwb25zZURhdGEsIGJ1aWxkS2V5LCBhZGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrRGlzcGF0Y2hLZXksXG4gIGtEZWZhdWx0SGVhZGVycyxcbiAga0RlZmF1bHRUcmFpbGVycyxcbiAga0NvbnRlbnRMZW5ndGgsXG4gIGtNb2NrRGlzcGF0Y2hcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGJ1aWxkVVJMIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG4vKipcbiAqIERlZmluZXMgdGhlIHNjb3BlIEFQSSBmb3IgYW4gaW50ZXJjZXB0b3IgcmVwbHlcbiAqL1xuY2xhc3MgTW9ja1Njb3BlIHtcbiAgY29uc3RydWN0b3IgKG1vY2tEaXNwYXRjaCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0gPSBtb2NrRGlzcGF0Y2hcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheSBhIHJlcGx5IGJ5IGEgc2V0IGFtb3VudCBpbiBtcy5cbiAgICovXG4gIGRlbGF5ICh3YWl0SW5Ncykge1xuICAgIGlmICh0eXBlb2Ygd2FpdEluTXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHdhaXRJbk1zKSB8fCB3YWl0SW5NcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3dhaXRJbk1zIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5kZWxheSA9IHdhaXRJbk1zXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBkZWZpbmVkIHJlcGx5LCBuZXZlciBtYXJrIGFzIGNvbnN1bWVkLlxuICAgKi9cbiAgcGVyc2lzdCAoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5wZXJzaXN0ID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb25lIHRvIGRlZmluZSBhIHJlcGx5IGZvciBhIHNldCBhbW91bnQgb2YgbWF0Y2hpbmcgcmVxdWVzdHMuXG4gICAqL1xuICB0aW1lcyAocmVwZWF0VGltZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGVhdFRpbWVzICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRUaW1lcykgfHwgcmVwZWF0VGltZXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBlYXRUaW1lcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0udGltZXMgPSByZXBlYXRUaW1lc1xuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGludGVyY2VwdG9yIGZvciBhIE1vY2tcbiAqL1xuY2xhc3MgTW9ja0ludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIG1vY2tEaXNwYXRjaGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMucGF0aCBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzEyNDVcbiAgICAvLyBBcyBwZXIgUkZDIDM5ODYsIGNsaWVudHMgYXJlIG5vdCBzdXBwb3NlZCB0byBzZW5kIFVSSVxuICAgIC8vIGZyYWdtZW50cyB0byBzZXJ2ZXJzIHdoZW4gdGhleSByZXRyaWV2ZSBhIGRvY3VtZW50LFxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgICAgb3B0cy5wYXRoID0gYnVpbGRVUkwob3B0cy5wYXRoLCBvcHRzLnF1ZXJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iL21haW4vbGliL3dlYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoeyBzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMgfSkge1xuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShkYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzW2tDb250ZW50TGVuZ3RoXSA/IHsgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VEYXRhLmxlbmd0aCB9IDoge31cbiAgICBjb25zdCBoZWFkZXJzID0geyAuLi50aGlzW2tEZWZhdWx0SGVhZGVyc10sIC4uLmNvbnRlbnRMZW5ndGgsIC4uLnJlc3BvbnNlT3B0aW9ucy5oZWFkZXJzIH1cbiAgICBjb25zdCB0cmFpbGVycyA9IHsgLi4udGhpc1trRGVmYXVsdFRyYWlsZXJzXSwgLi4ucmVzcG9uc2VPcHRpb25zLnRyYWlsZXJzIH1cblxuICAgIHJldHVybiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzIH1cbiAgfVxuXG4gIHZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzIChyZXBseVBhcmFtZXRlcnMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGx5UGFyYW1ldGVycy5zdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVwbHlQYXJhbWV0ZXJzLnJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgcmVwbHlQYXJhbWV0ZXJzLnJlc3BvbnNlT3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXNwb25zZU9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIHJlcGx5LlxuICAgKi9cbiAgcmVwbHkgKHJlcGx5T3B0aW9uc0NhbGxiYWNrT3JTdGF0dXNDb2RlKSB7XG4gICAgLy8gVmFsdWVzIG9mIHJlcGx5IGFyZW4ndCBhdmFpbGFibGUgcmlnaHQgbm93IGFzIHRoZXlcbiAgICAvLyBjYW4gb25seSBiZSBhdmFpbGFibGUgd2hlbiB0aGUgcmVwbHkgY2FsbGJhY2sgaXMgaW52b2tlZC5cbiAgICBpZiAodHlwZW9mIHJlcGx5T3B0aW9uc0NhbGxiYWNrT3JTdGF0dXNDb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlPcHRpb25zQ2FsbGJhY2tPclN0YXR1c0NvZGUob3B0cylcblxuICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBpbiB0aGUgcmlnaHQgZm9ybWF0XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZWREYXRhICE9PSAnb2JqZWN0JyB8fCByZXNvbHZlZERhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcGx5UGFyYW1ldGVycyA9IHsgZGF0YTogJycsIHJlc3BvbnNlT3B0aW9uczoge30sIC4uLnJlc29sdmVkRGF0YSB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMocmVwbHlQYXJhbWV0ZXJzKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShyZXBseVBhcmFtZXRlcnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCByZXBseVBhcmFtZXRlcnMgPSB7XG4gICAgICBzdGF0dXNDb2RlOiByZXBseU9wdGlvbnNDYWxsYmFja09yU3RhdHVzQ29kZSxcbiAgICAgIGRhdGE6IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gJycgOiBhcmd1bWVudHNbMV0sXG4gICAgICByZXNwb25zZU9wdGlvbnM6IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMl1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhyZXBseVBhcmFtZXRlcnMpXG5cbiAgICAvLyBTZW5kIGluLWFscmVhZHkgcHJvdmlkZWQgZGF0YSBsaWtlIHVzdWFsXG4gICAgY29uc3QgZGlzcGF0Y2hEYXRhID0gdGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEocmVwbHlQYXJhbWV0ZXJzKVxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCBkaXNwYXRjaERhdGEpXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgZXJyb3IuXG4gICAqL1xuICByZXBseVdpdGhFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdlcnJvciBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB7IGVycm9yIH0pXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IGhlYWRlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseUhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSBoZWFkZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSB0cmFpbGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5VHJhaWxlcnMgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHR5cGVvZiB0cmFpbGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndHJhaWxlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0gdHJhaWxlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXBseSBjb250ZW50IGxlbmd0aCBoZWFkZXIgZm9yIHJlcGxpZXMgb24gdGhlIGludGVyY2VwdG9yXG4gICAqL1xuICByZXBseUNvbnRlbnRMZW5ndGggKCkge1xuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuTW9ja0ludGVyY2VwdG9yID0gTW9ja0ludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5Nb2NrU2NvcGUgPSBNb2NrU2NvcGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyL2NsaWVudCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tDbGllbnQgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgQ2xpZW50IHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tDbGllbnQgZXh0ZW5kcyBDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQ2xpZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXIvcG9vbCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tQb29sIHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIFBvb2wgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja1Bvb2wgZXh0ZW5kcyBQb29sIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja1Bvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgc2luZ3VsYXJzID0ge1xuICBwcm9ub3VuOiAnaXQnLFxuICBpczogJ2lzJyxcbiAgd2FzOiAnd2FzJyxcbiAgdGhpczogJ3RoaXMnXG59XG5cbmNvbnN0IHBsdXJhbHMgPSB7XG4gIHByb25vdW46ICd0aGV5JyxcbiAgaXM6ICdhcmUnLFxuICB3YXM6ICd3ZXJlJyxcbiAgdGhpczogJ3RoZXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBsdXJhbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoc2luZ3VsYXIsIHBsdXJhbCkge1xuICAgIHRoaXMuc2luZ3VsYXIgPSBzaW5ndWxhclxuICAgIHRoaXMucGx1cmFsID0gcGx1cmFsXG4gIH1cblxuICBwbHVyYWxpemUgKGNvdW50KSB7XG4gICAgY29uc3Qgb25lID0gY291bnQgPT09IDFcbiAgICBjb25zdCBrZXlzID0gb25lID8gc2luZ3VsYXJzIDogcGx1cmFsc1xuICAgIGNvbnN0IG5vdW4gPSBvbmUgPyB0aGlzLnNpbmd1bGFyIDogdGhpcy5wbHVyYWxcbiAgICByZXR1cm4geyAuLi5rZXlzLCBjb3VudCwgbm91biB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgQ29uc29sZSB9ID0gcmVxdWlyZSgnbm9kZTpjb25zb2xlJylcblxuY29uc3QgUEVSU0lTVEVOVCA9IHByb2Nlc3MudmVyc2lvbnMuaWN1ID8gJ1x1MjcwNScgOiAnWSAnXG5jb25zdCBOT1RfUEVSU0lTVEVOVCA9IHByb2Nlc3MudmVyc2lvbnMuaWN1ID8gJ1x1Mjc0QycgOiAnTiAnXG5cbi8qKlxuICogR2V0cyB0aGUgb3V0cHV0IG9mIGBjb25zb2xlLnRhYmxlKFx1MjAyNilgIGFzIGEgc3RyaW5nLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBkaXNhYmxlQ29sb3JzIH0gPSB7fSkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSh7XG4gICAgICB0cmFuc2Zvcm0gKGNodW5rLCBfZW5jLCBjYikge1xuICAgICAgICBjYihudWxsLCBjaHVuaylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgQ29uc29sZSh7XG4gICAgICBzdGRvdXQ6IHRoaXMudHJhbnNmb3JtLFxuICAgICAgaW5zcGVjdE9wdGlvbnM6IHtcbiAgICAgICAgY29sb3JzOiAhZGlzYWJsZUNvbG9ycyAmJiAhcHJvY2Vzcy5lbnYuQ0lcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZm9ybWF0IChwZW5kaW5nSW50ZXJjZXB0b3JzKSB7XG4gICAgY29uc3Qgd2l0aFByZXR0eUhlYWRlcnMgPSBwZW5kaW5nSW50ZXJjZXB0b3JzLm1hcChcbiAgICAgICh7IG1ldGhvZCwgcGF0aCwgZGF0YTogeyBzdGF0dXNDb2RlIH0sIHBlcnNpc3QsIHRpbWVzLCB0aW1lc0ludm9rZWQsIG9yaWdpbiB9KSA9PiAoe1xuICAgICAgICBNZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgT3JpZ2luOiBvcmlnaW4sXG4gICAgICAgIFBhdGg6IHBhdGgsXG4gICAgICAgICdTdGF0dXMgY29kZSc6IHN0YXR1c0NvZGUsXG4gICAgICAgIFBlcnNpc3RlbnQ6IHBlcnNpc3QgPyBQRVJTSVNURU5UIDogTk9UX1BFUlNJU1RFTlQsXG4gICAgICAgIEludm9jYXRpb25zOiB0aW1lc0ludm9rZWQsXG4gICAgICAgIFJlbWFpbmluZzogcGVyc2lzdCA/IEluZmluaXR5IDogdGltZXMgLSB0aW1lc0ludm9rZWRcbiAgICAgIH0pKVxuXG4gICAgdGhpcy5sb2dnZXIudGFibGUod2l0aFByZXR0eUhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlYWQoKS50b1N0cmluZygpXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9hZ2VudCcpXG5jb25zdCB7XG4gIGtBZ2VudCxcbiAga01vY2tBZ2VudFNldCxcbiAga01vY2tBZ2VudEdldCxcbiAga0Rpc3BhdGNoZXMsXG4gIGtJc01vY2tBY3RpdmUsXG4gIGtOZXRDb25uZWN0LFxuICBrR2V0TmV0Q29ubmVjdCxcbiAga09wdGlvbnMsXG4gIGtGYWN0b3J5XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL21vY2stcG9vbCcpXG5jb25zdCB7IG1hdGNoVmFsdWUsIGJ1aWxkTW9ja09wdGlvbnMgfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlcicpXG5jb25zdCBQbHVyYWxpemVyID0gcmVxdWlyZSgnLi9wbHVyYWxpemVyJylcbmNvbnN0IFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSByZXF1aXJlKCcuL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlcicpXG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzPy5hZ2VudCAmJiB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuICAgIGNvbnN0IGFnZW50ID0gb3B0cz8uYWdlbnQgPyBvcHRzLmFnZW50IDogbmV3IEFnZW50KG9wdHMpXG4gICAgdGhpc1trQWdlbnRdID0gYWdlbnRcblxuICAgIHRoaXNba0NsaWVudHNdID0gYWdlbnRba0NsaWVudHNdXG4gICAgdGhpc1trT3B0aW9uc10gPSBidWlsZE1vY2tPcHRpb25zKG9wdHMpXG4gIH1cblxuICBnZXQgKG9yaWdpbikge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trTW9ja0FnZW50R2V0XShvcmlnaW4pXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICB9XG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gQ2FsbCBNb2NrQWdlbnQuZ2V0IHRvIHBlcmZvcm0gYWRkaXRpb25hbCBzZXR1cCBiZWZvcmUgZGlzcGF0Y2hpbmcgYXMgbm9ybWFsXG4gICAgdGhpcy5nZXQob3B0cy5vcmlnaW4pXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgY2xvc2UgKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgdGhpc1trQ2xpZW50c10uY2xlYXIoKVxuICB9XG5cbiAgZGVhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IGZhbHNlXG4gIH1cblxuICBhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IHRydWVcbiAgfVxuXG4gIGVuYWJsZU5ldENvbm5lY3QgKG1hdGNoZXIpIHtcbiAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBtYXRjaGVyID09PSAnZnVuY3Rpb24nIHx8IG1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXNba05ldENvbm5lY3RdKSkge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XS5wdXNoKG1hdGNoZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IFttYXRjaGVyXVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdVbnN1cHBvcnRlZCBtYXRjaGVyLiBNdXN0IGJlIG9uZSBvZiBTdHJpbmd8RnVuY3Rpb258UmVnRXhwLicpXG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZU5ldENvbm5lY3QgKCkge1xuICAgIHRoaXNba05ldENvbm5lY3RdID0gZmFsc2VcbiAgfVxuXG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gYnlwYXNzIGlzc3VlcyBjYXVzZWQgYnkgdXNpbmcgZ2xvYmFsIHN5bWJvbHMgLSBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNDQ3XG4gIGdldCBpc01vY2tBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzW2tJc01vY2tBY3RpdmVdXG4gIH1cblxuICBba01vY2tBZ2VudFNldF0gKG9yaWdpbiwgZGlzcGF0Y2hlcikge1xuICAgIHRoaXNba0NsaWVudHNdLnNldChvcmlnaW4sIGRpc3BhdGNoZXIpXG4gIH1cblxuICBba0ZhY3RvcnldIChvcmlnaW4pIHtcbiAgICBjb25zdCBtb2NrT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBhZ2VudDogdGhpcyB9LCB0aGlzW2tPcHRpb25zXSlcbiAgICByZXR1cm4gdGhpc1trT3B0aW9uc10gJiYgdGhpc1trT3B0aW9uc10uY29ubmVjdGlvbnMgPT09IDFcbiAgICAgID8gbmV3IE1vY2tDbGllbnQob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgICAgIDogbmV3IE1vY2tQb29sKG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gIH1cblxuICBba01vY2tBZ2VudEdldF0gKG9yaWdpbikge1xuICAgIC8vIEZpcnN0IGNoZWNrIGlmIHdlIGNhbiBpbW1lZGlhdGVseSBmaW5kIGl0XG4gICAgY29uc3QgY2xpZW50ID0gdGhpc1trQ2xpZW50c10uZ2V0KG9yaWdpbilcbiAgICBpZiAoY2xpZW50KSB7XG4gICAgICByZXR1cm4gY2xpZW50XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXREaXNwYXRjaGVyXSBvZiBBcnJheS5mcm9tKHRoaXNba0NsaWVudHNdKSkge1xuICAgICAgaWYgKG5vbkV4cGxpY2l0RGlzcGF0Y2hlciAmJiB0eXBlb2Yga2V5TWF0Y2hlciAhPT0gJ3N0cmluZycgJiYgbWF0Y2hWYWx1ZShrZXlNYXRjaGVyLCBvcmlnaW4pKSB7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgICBkaXNwYXRjaGVyW2tEaXNwYXRjaGVzXSA9IG5vbkV4cGxpY2l0RGlzcGF0Y2hlcltrRGlzcGF0Y2hlc11cbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBba0dldE5ldENvbm5lY3RdICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmV0Q29ubmVjdF1cbiAgfVxuXG4gIHBlbmRpbmdJbnRlcmNlcHRvcnMgKCkge1xuICAgIGNvbnN0IG1vY2tBZ2VudENsaWVudHMgPSB0aGlzW2tDbGllbnRzXVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obW9ja0FnZW50Q2xpZW50cy5lbnRyaWVzKCkpXG4gICAgICAuZmxhdE1hcCgoW29yaWdpbiwgc2NvcGVdKSA9PiBzY29wZVtrRGlzcGF0Y2hlc10ubWFwKGRpc3BhdGNoID0+ICh7IC4uLmRpc3BhdGNoLCBvcmlnaW4gfSkpKVxuICAgICAgLmZpbHRlcigoeyBwZW5kaW5nIH0pID0+IHBlbmRpbmcpXG4gIH1cblxuICBhc3NlcnROb1BlbmRpbmdJbnRlcmNlcHRvcnMgKHsgcGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IG5ldyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyKCkgfSA9IHt9KSB7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ0ludGVyY2VwdG9ycygpXG5cbiAgICBpZiAocGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBsdXJhbGl6ZXIgPSBuZXcgUGx1cmFsaXplcignaW50ZXJjZXB0b3InLCAnaW50ZXJjZXB0b3JzJykucGx1cmFsaXplKHBlbmRpbmcubGVuZ3RoKVxuXG4gICAgdGhyb3cgbmV3IFVuZGljaUVycm9yKGBcbiR7cGx1cmFsaXplci5jb3VudH0gJHtwbHVyYWxpemVyLm5vdW59ICR7cGx1cmFsaXplci5pc30gcGVuZGluZzpcblxuJHtwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyLmZvcm1hdChwZW5kaW5nKX1cbmAudHJpbSgpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0FnZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXIvYWdlbnQnKVxuXG5pZiAoZ2V0R2xvYmFsRGlzcGF0Y2hlcigpID09PSB1bmRlZmluZWQpIHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcihuZXcgQWdlbnQoKSlcbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsRGlzcGF0Y2hlciAoYWdlbnQpIHtcbiAgaWYgKCFhZ2VudCB8fCB0eXBlb2YgYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IGFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsRGlzcGF0Y2hlciwge1xuICAgIHZhbHVlOiBhZ2VudCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERpc3BhdGNoZXIgKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxEaXNwYXRjaGVyXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcixcbiAgZ2V0R2xvYmFsRGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERlY29yYXRvckhhbmRsZXIge1xuICAjaGFuZGxlclxuXG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0JyB8fCBoYW5kbGVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgdGhpcy4jaGFuZGxlciA9IGhhbmRsZXJcbiAgfVxuXG4gIG9uQ29ubmVjdCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uQ29ubmVjdD8uKC4uLmFyZ3MpXG4gIH1cblxuICBvbkVycm9yICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25FcnJvcj8uKC4uLmFyZ3MpXG4gIH1cblxuICBvblVwZ3JhZGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vblVwZ3JhZGU/LiguLi5hcmdzKVxuICB9XG5cbiAgb25SZXNwb25zZVN0YXJ0ZWQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vblJlc3BvbnNlU3RhcnRlZD8uKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkhlYWRlcnM/LiguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25EYXRhPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkNvbXBsZXRlPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkJvZHlTZW50Py4oLi4uYXJncylcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgUmVkaXJlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9yZWRpcmVjdC1oYW5kbGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBvcHRzID0+IHtcbiAgY29uc3QgZ2xvYmFsTWF4UmVkaXJlY3Rpb25zID0gb3B0cz8ubWF4UmVkaXJlY3Rpb25zXG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJlZGlyZWN0SW50ZXJjZXB0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZ2xvYmFsTWF4UmVkaXJlY3Rpb25zLCAuLi5iYXNlT3B0cyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgaGFuZGxlclxuICAgICAgKVxuXG4gICAgICByZXR1cm4gZGlzcGF0Y2goYmFzZU9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IFJldHJ5SGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvcmV0cnktaGFuZGxlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsT3B0cyA9PiB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJldHJ5SW50ZXJjZXB0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaChcbiAgICAgICAgb3B0cyxcbiAgICAgICAgbmV3IFJldHJ5SGFuZGxlcihcbiAgICAgICAgICB7IC4uLm9wdHMsIHJldHJ5T3B0aW9uczogeyAuLi5nbG9iYWxPcHRzLCAuLi5vcHRzLnJldHJ5T3B0aW9ucyB9IH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIGRpc3BhdGNoXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXInKVxuXG5jbGFzcyBEdW1wSGFuZGxlciBleHRlbmRzIERlY29yYXRvckhhbmRsZXIge1xuICAjbWF4U2l6ZSA9IDEwMjQgKiAxMDI0XG4gICNhYm9ydCA9IG51bGxcbiAgI2R1bXBlZCA9IGZhbHNlXG4gICNhYm9ydGVkID0gZmFsc2VcbiAgI3NpemUgPSAwXG4gICNyZWFzb24gPSBudWxsXG4gICNoYW5kbGVyID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yICh7IG1heFNpemUgfSwgaGFuZGxlcikge1xuICAgIHN1cGVyKGhhbmRsZXIpXG5cbiAgICBpZiAobWF4U2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKG1heFNpemUpIHx8IG1heFNpemUgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhTaXplIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAnKVxuICAgIH1cblxuICAgIHRoaXMuI21heFNpemUgPSBtYXhTaXplID8/IHRoaXMuI21heFNpemVcbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIHRoaXMuI2Fib3J0ID0gYWJvcnRcblxuICAgIHRoaXMuI2hhbmRsZXIub25Db25uZWN0KHRoaXMuI2N1c3RvbUFib3J0LmJpbmQodGhpcykpXG4gIH1cblxuICAjY3VzdG9tQWJvcnQgKHJlYXNvbikge1xuICAgIHRoaXMuI2Fib3J0ZWQgPSB0cnVlXG4gICAgdGhpcy4jcmVhc29uID0gcmVhc29uXG4gIH1cblxuICAvLyBUT0RPOiB3aWxsIHJlcXVpcmUgYWRqdXN0bWVudCBhZnRlciBuZXcgaG9va3MgYXJlIG91dFxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggPiB0aGlzLiNtYXhTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcihcbiAgICAgICAgYFJlc3BvbnNlIHNpemUgKCR7Y29udGVudExlbmd0aH0pIGxhcmdlciB0aGFuIG1heFNpemUgKCR7XG4gICAgICAgICAgdGhpcy4jbWF4U2l6ZVxuICAgICAgICB9KWBcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICBzdGF0dXNDb2RlLFxuICAgICAgcmF3SGVhZGVycyxcbiAgICAgIHJlc3VtZSxcbiAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICApXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBpZiAodGhpcy4jZHVtcGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlcnIgPSB0aGlzLiNyZWFzb24gPz8gZXJyXG5cbiAgICB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuI3NpemUgPSB0aGlzLiNzaXplICsgY2h1bmsubGVuZ3RoXG5cbiAgICBpZiAodGhpcy4jc2l6ZSA+PSB0aGlzLiNtYXhTaXplKSB7XG4gICAgICB0aGlzLiNkdW1wZWQgPSB0cnVlXG5cbiAgICAgIGlmICh0aGlzLiNhYm9ydGVkKSB7XG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcih0aGlzLiNyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNoYW5kbGVyLm9uQ29tcGxldGUoW10pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMuI2R1bXBlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2Fib3J0ZWQpIHtcbiAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcih0aGlzLnJlYXNvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuI2hhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEdW1wSW50ZXJjZXB0b3IgKFxuICB7IG1heFNpemU6IGRlZmF1bHRNYXhTaXplIH0gPSB7XG4gICAgbWF4U2l6ZTogMTAyNCAqIDEwMjRcbiAgfVxuKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEludGVyY2VwdCAob3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3QgeyBkdW1wTWF4U2l6ZSA9IGRlZmF1bHRNYXhTaXplIH0gPVxuICAgICAgICBvcHRzXG5cbiAgICAgIGNvbnN0IGR1bXBIYW5kbGVyID0gbmV3IER1bXBIYW5kbGVyKFxuICAgICAgICB7IG1heFNpemU6IGR1bXBNYXhTaXplIH0sXG4gICAgICAgIGhhbmRsZXJcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGR1bXBIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUR1bXBJbnRlcmNlcHRvclxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgeyBpc0lQIH0gPSByZXF1aXJlKCdub2RlOm5ldCcpXG5jb25zdCB7IGxvb2t1cCB9ID0gcmVxdWlyZSgnbm9kZTpkbnMnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXInKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgSW5mb3JtYXRpb25hbEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBtYXhJbnQgPSBNYXRoLnBvdygyLCAzMSkgLSAxXG5cbmNsYXNzIEROU0luc3RhbmNlIHtcbiAgI21heFRUTCA9IDBcbiAgI21heEl0ZW1zID0gMFxuICAjcmVjb3JkcyA9IG5ldyBNYXAoKVxuICBkdWFsU3RhY2sgPSB0cnVlXG4gIGFmZmluaXR5ID0gbnVsbFxuICBsb29rdXAgPSBudWxsXG4gIHBpY2sgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICB0aGlzLiNtYXhUVEwgPSBvcHRzLm1heFRUTFxuICAgIHRoaXMuI21heEl0ZW1zID0gb3B0cy5tYXhJdGVtc1xuICAgIHRoaXMuZHVhbFN0YWNrID0gb3B0cy5kdWFsU3RhY2tcbiAgICB0aGlzLmFmZmluaXR5ID0gb3B0cy5hZmZpbml0eVxuICAgIHRoaXMubG9va3VwID0gb3B0cy5sb29rdXAgPz8gdGhpcy4jZGVmYXVsdExvb2t1cFxuICAgIHRoaXMucGljayA9IG9wdHMucGljayA/PyB0aGlzLiNkZWZhdWx0UGlja1xuICB9XG5cbiAgZ2V0IGZ1bGwgKCkge1xuICAgIHJldHVybiB0aGlzLiNyZWNvcmRzLnNpemUgPT09IHRoaXMuI21heEl0ZW1zXG4gIH1cblxuICBydW5Mb29rdXAgKG9yaWdpbiwgb3B0cywgY2IpIHtcbiAgICBjb25zdCBpcHMgPSB0aGlzLiNyZWNvcmRzLmdldChvcmlnaW4uaG9zdG5hbWUpXG5cbiAgICAvLyBJZiBmdWxsLCB3ZSBqdXN0IHJldHVybiB0aGUgb3JpZ2luXG4gICAgaWYgKGlwcyA9PSBudWxsICYmIHRoaXMuZnVsbCkge1xuICAgICAgY2IobnVsbCwgb3JpZ2luLm9yaWdpbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdHMgPSB7XG4gICAgICBhZmZpbml0eTogdGhpcy5hZmZpbml0eSxcbiAgICAgIGR1YWxTdGFjazogdGhpcy5kdWFsU3RhY2ssXG4gICAgICBsb29rdXA6IHRoaXMubG9va3VwLFxuICAgICAgcGljazogdGhpcy5waWNrLFxuICAgICAgLi4ub3B0cy5kbnMsXG4gICAgICBtYXhUVEw6IHRoaXMuI21heFRUTCxcbiAgICAgIG1heEl0ZW1zOiB0aGlzLiNtYXhJdGVtc1xuICAgIH1cblxuICAgIC8vIElmIG5vIElQcyB3ZSBsb29rdXBcbiAgICBpZiAoaXBzID09IG51bGwpIHtcbiAgICAgIHRoaXMubG9va3VwKG9yaWdpbiwgbmV3T3B0cywgKGVyciwgYWRkcmVzc2VzKSA9PiB7XG4gICAgICAgIGlmIChlcnIgfHwgYWRkcmVzc2VzID09IG51bGwgfHwgYWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNiKGVyciA/PyBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdObyBETlMgZW50cmllcyBmb3VuZCcpKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRSZWNvcmRzKG9yaWdpbiwgYWRkcmVzc2VzKVxuICAgICAgICBjb25zdCByZWNvcmRzID0gdGhpcy4jcmVjb3Jkcy5nZXQob3JpZ2luLmhvc3RuYW1lKVxuXG4gICAgICAgIGNvbnN0IGlwID0gdGhpcy5waWNrKFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIG5ld09wdHMuYWZmaW5pdHlcbiAgICAgICAgKVxuXG4gICAgICAgIGxldCBwb3J0XG4gICAgICAgIGlmICh0eXBlb2YgaXAucG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBwb3J0ID0gYDoke2lwLnBvcnR9YFxuICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbi5wb3J0ICE9PSAnJykge1xuICAgICAgICAgIHBvcnQgPSBgOiR7b3JpZ2luLnBvcnR9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvcnQgPSAnJ1xuICAgICAgICB9XG5cbiAgICAgICAgY2IoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBgJHtvcmlnaW4ucHJvdG9jb2x9Ly8ke1xuICAgICAgICAgICAgaXAuZmFtaWx5ID09PSA2ID8gYFske2lwLmFkZHJlc3N9XWAgOiBpcC5hZGRyZXNzXG4gICAgICAgICAgfSR7cG9ydH1gXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgSVBzIHdlIHBpY2tcbiAgICAgIGNvbnN0IGlwID0gdGhpcy5waWNrKFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGlwcyxcbiAgICAgICAgbmV3T3B0cy5hZmZpbml0eVxuICAgICAgKVxuXG4gICAgICAvLyBJZiBubyBJUHMgd2UgbG9va3VwIC0gZGVsZXRpbmcgb2xkIHJlY29yZHNcbiAgICAgIGlmIChpcCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuI3JlY29yZHMuZGVsZXRlKG9yaWdpbi5ob3N0bmFtZSlcbiAgICAgICAgdGhpcy5ydW5Mb29rdXAob3JpZ2luLCBvcHRzLCBjYilcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBwb3J0XG4gICAgICBpZiAodHlwZW9mIGlwLnBvcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHBvcnQgPSBgOiR7aXAucG9ydH1gXG4gICAgICB9IGVsc2UgaWYgKG9yaWdpbi5wb3J0ICE9PSAnJykge1xuICAgICAgICBwb3J0ID0gYDoke29yaWdpbi5wb3J0fWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvcnQgPSAnJ1xuICAgICAgfVxuXG4gICAgICBjYihcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYCR7b3JpZ2luLnByb3RvY29sfS8vJHtcbiAgICAgICAgICBpcC5mYW1pbHkgPT09IDYgPyBgWyR7aXAuYWRkcmVzc31dYCA6IGlwLmFkZHJlc3NcbiAgICAgICAgfSR7cG9ydH1gXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgI2RlZmF1bHRMb29rdXAgKG9yaWdpbiwgb3B0cywgY2IpIHtcbiAgICBsb29rdXAoXG4gICAgICBvcmlnaW4uaG9zdG5hbWUsXG4gICAgICB7XG4gICAgICAgIGFsbDogdHJ1ZSxcbiAgICAgICAgZmFtaWx5OiB0aGlzLmR1YWxTdGFjayA9PT0gZmFsc2UgPyB0aGlzLmFmZmluaXR5IDogMCxcbiAgICAgICAgb3JkZXI6ICdpcHY0Zmlyc3QnXG4gICAgICB9LFxuICAgICAgKGVyciwgYWRkcmVzc2VzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBNYXAoKVxuXG4gICAgICAgIGZvciAoY29uc3QgYWRkciBvZiBhZGRyZXNzZXMpIHtcbiAgICAgICAgICAvLyBPbiBsaW51eCB3ZSBmb3VuZCBkdXBsaWNhdGVzLCB3ZSBhdHRlbXB0IHRvIHJlbW92ZSB0aGVtIHdpdGhcbiAgICAgICAgICAvLyB0aGUgbGF0ZXN0IHJlY29yZFxuICAgICAgICAgIHJlc3VsdHMuc2V0KGAke2FkZHIuYWRkcmVzc306JHthZGRyLmZhbWlseX1gLCBhZGRyKVxuICAgICAgICB9XG5cbiAgICAgICAgY2IobnVsbCwgcmVzdWx0cy52YWx1ZXMoKSlcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICAjZGVmYXVsdFBpY2sgKG9yaWdpbiwgaG9zdG5hbWVSZWNvcmRzLCBhZmZpbml0eSkge1xuICAgIGxldCBpcCA9IG51bGxcbiAgICBjb25zdCB7IHJlY29yZHMsIG9mZnNldCB9ID0gaG9zdG5hbWVSZWNvcmRzXG5cbiAgICBsZXQgZmFtaWx5XG4gICAgaWYgKHRoaXMuZHVhbFN0YWNrKSB7XG4gICAgICBpZiAoYWZmaW5pdHkgPT0gbnVsbCkge1xuICAgICAgICAvLyBCYWxhbmNlIGJldHdlZW4gaXAgZmFtaWxpZXNcbiAgICAgICAgaWYgKG9mZnNldCA9PSBudWxsIHx8IG9mZnNldCA9PT0gbWF4SW50KSB7XG4gICAgICAgICAgaG9zdG5hbWVSZWNvcmRzLm9mZnNldCA9IDBcbiAgICAgICAgICBhZmZpbml0eSA9IDRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBob3N0bmFtZVJlY29yZHMub2Zmc2V0KytcbiAgICAgICAgICBhZmZpbml0eSA9IChob3N0bmFtZVJlY29yZHMub2Zmc2V0ICYgMSkgPT09IDEgPyA2IDogNFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmRzW2FmZmluaXR5XSAhPSBudWxsICYmIHJlY29yZHNbYWZmaW5pdHldLmlwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZhbWlseSA9IHJlY29yZHNbYWZmaW5pdHldXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYW1pbHkgPSByZWNvcmRzW2FmZmluaXR5ID09PSA0ID8gNiA6IDRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhbWlseSA9IHJlY29yZHNbYWZmaW5pdHldXG4gICAgfVxuXG4gICAgLy8gSWYgbm8gSVBzIHdlIHJldHVybiBudWxsXG4gICAgaWYgKGZhbWlseSA9PSBudWxsIHx8IGZhbWlseS5pcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gaXBcbiAgICB9XG5cbiAgICBpZiAoZmFtaWx5Lm9mZnNldCA9PSBudWxsIHx8IGZhbWlseS5vZmZzZXQgPT09IG1heEludCkge1xuICAgICAgZmFtaWx5Lm9mZnNldCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgZmFtaWx5Lm9mZnNldCsrXG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb24gPSBmYW1pbHkub2Zmc2V0ICUgZmFtaWx5Lmlwcy5sZW5ndGhcbiAgICBpcCA9IGZhbWlseS5pcHNbcG9zaXRpb25dID8/IG51bGxcblxuICAgIGlmIChpcCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaXBcbiAgICB9XG5cbiAgICBpZiAoRGF0ZS5ub3coKSAtIGlwLnRpbWVzdGFtcCA+IGlwLnR0bCkgeyAvLyByZWNvcmQgVFRMIGlzIGFscmVhZHkgaW4gbXNcbiAgICAgIC8vIFdlIGRlbGV0ZSBleHBpcmVkIHJlY29yZHNcbiAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhleSBoYXZlIGRpZmZlcmVudCBUVEwsIHNvIHdlIG1hbmFnZSB0aGVtIGluZGl2aWR1YWxseVxuICAgICAgZmFtaWx5Lmlwcy5zcGxpY2UocG9zaXRpb24sIDEpXG4gICAgICByZXR1cm4gdGhpcy5waWNrKG9yaWdpbiwgaG9zdG5hbWVSZWNvcmRzLCBhZmZpbml0eSlcbiAgICB9XG5cbiAgICByZXR1cm4gaXBcbiAgfVxuXG4gIHNldFJlY29yZHMgKG9yaWdpbiwgYWRkcmVzc2VzKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IHJlY29yZHMgPSB7IHJlY29yZHM6IHsgNDogbnVsbCwgNjogbnVsbCB9IH1cbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBhZGRyZXNzZXMpIHtcbiAgICAgIHJlY29yZC50aW1lc3RhbXAgPSB0aW1lc3RhbXBcbiAgICAgIGlmICh0eXBlb2YgcmVjb3JkLnR0bCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgLy8gVGhlIHJlY29yZCBUVEwgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gbXNcbiAgICAgICAgcmVjb3JkLnR0bCA9IE1hdGgubWluKHJlY29yZC50dGwsIHRoaXMuI21heFRUTClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZC50dGwgPSB0aGlzLiNtYXhUVExcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmFtaWx5UmVjb3JkcyA9IHJlY29yZHMucmVjb3Jkc1tyZWNvcmQuZmFtaWx5XSA/PyB7IGlwczogW10gfVxuXG4gICAgICBmYW1pbHlSZWNvcmRzLmlwcy5wdXNoKHJlY29yZClcbiAgICAgIHJlY29yZHMucmVjb3Jkc1tyZWNvcmQuZmFtaWx5XSA9IGZhbWlseVJlY29yZHNcbiAgICB9XG5cbiAgICB0aGlzLiNyZWNvcmRzLnNldChvcmlnaW4uaG9zdG5hbWUsIHJlY29yZHMpXG4gIH1cblxuICBnZXRIYW5kbGVyIChtZXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBETlNEaXNwYXRjaEhhbmRsZXIodGhpcywgbWV0YSwgb3B0cylcbiAgfVxufVxuXG5jbGFzcyBETlNEaXNwYXRjaEhhbmRsZXIgZXh0ZW5kcyBEZWNvcmF0b3JIYW5kbGVyIHtcbiAgI3N0YXRlID0gbnVsbFxuICAjb3B0cyA9IG51bGxcbiAgI2Rpc3BhdGNoID0gbnVsbFxuICAjaGFuZGxlciA9IG51bGxcbiAgI29yaWdpbiA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoc3RhdGUsIHsgb3JpZ2luLCBoYW5kbGVyLCBkaXNwYXRjaCB9LCBvcHRzKSB7XG4gICAgc3VwZXIoaGFuZGxlcilcbiAgICB0aGlzLiNvcmlnaW4gPSBvcmlnaW5cbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuI29wdHMgPSB7IC4uLm9wdHMgfVxuICAgIHRoaXMuI3N0YXRlID0gc3RhdGVcbiAgICB0aGlzLiNkaXNwYXRjaCA9IGRpc3BhdGNoXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICBjYXNlICdFVElNRURPVVQnOlxuICAgICAgY2FzZSAnRUNPTk5SRUZVU0VEJzoge1xuICAgICAgICBpZiAodGhpcy4jc3RhdGUuZHVhbFN0YWNrKSB7XG4gICAgICAgICAgLy8gV2UgZGVsZXRlIHRoZSByZWNvcmQgYW5kIHJldHJ5XG4gICAgICAgICAgdGhpcy4jc3RhdGUucnVuTG9va3VwKHRoaXMuI29yaWdpbiwgdGhpcy4jb3B0cywgKGVyciwgbmV3T3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaXNwYXRjaE9wdHMgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuI29wdHMsXG4gICAgICAgICAgICAgIG9yaWdpbjogbmV3T3JpZ2luXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuI2Rpc3BhdGNoKGRpc3BhdGNoT3B0cywgdGhpcylcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gaWYgZHVhbC1zdGFjayBkaXNhYmxlZCwgd2UgZXJyb3Igb3V0XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VOT1RGT1VORCc6XG4gICAgICAgIHRoaXMuI3N0YXRlLmRlbGV0ZVJlY29yZCh0aGlzLiNvcmlnaW4pXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJjZXB0b3JPcHRzID0+IHtcbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubWF4VFRMICE9IG51bGwgJiZcbiAgICAodHlwZW9mIGludGVyY2VwdG9yT3B0cz8ubWF4VFRMICE9PSAnbnVtYmVyJyB8fCBpbnRlcmNlcHRvck9wdHM/Lm1heFRUTCA8IDApXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBtYXhUVEwuIE11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgIT0gbnVsbCAmJlxuICAgICh0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5tYXhJdGVtcyAhPT0gJ251bWJlcicgfHxcbiAgICAgIGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgPCAxKVxuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnSW52YWxpZCBtYXhJdGVtcy4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBhbmQgZ3JlYXRlciB0aGFuIHplcm8nXG4gICAgKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgIT0gbnVsbCAmJlxuICAgIGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgIT09IDQgJiZcbiAgICBpbnRlcmNlcHRvck9wdHM/LmFmZmluaXR5ICE9PSA2XG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBhZmZpbml0eS4gTXVzdCBiZSBlaXRoZXIgNCBvciA2JylcbiAgfVxuXG4gIGlmIChcbiAgICBpbnRlcmNlcHRvck9wdHM/LmR1YWxTdGFjayAhPSBudWxsICYmXG4gICAgdHlwZW9mIGludGVyY2VwdG9yT3B0cz8uZHVhbFN0YWNrICE9PSAnYm9vbGVhbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIGR1YWxTdGFjay4gTXVzdCBiZSBhIGJvb2xlYW4nKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubG9va3VwICE9IG51bGwgJiZcbiAgICB0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5sb29rdXAgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIGxvb2t1cC4gTXVzdCBiZSBhIGZ1bmN0aW9uJylcbiAgfVxuXG4gIGlmIChcbiAgICBpbnRlcmNlcHRvck9wdHM/LnBpY2sgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBpbnRlcmNlcHRvck9wdHM/LnBpY2sgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIHBpY2suIE11c3QgYmUgYSBmdW5jdGlvbicpXG4gIH1cblxuICBjb25zdCBkdWFsU3RhY2sgPSBpbnRlcmNlcHRvck9wdHM/LmR1YWxTdGFjayA/PyB0cnVlXG4gIGxldCBhZmZpbml0eVxuICBpZiAoZHVhbFN0YWNrKSB7XG4gICAgYWZmaW5pdHkgPSBpbnRlcmNlcHRvck9wdHM/LmFmZmluaXR5ID8/IG51bGxcbiAgfSBlbHNlIHtcbiAgICBhZmZpbml0eSA9IGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgPz8gNFxuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBtYXhUVEw6IGludGVyY2VwdG9yT3B0cz8ubWF4VFRMID8/IDEwZTMsIC8vIEV4cHJlc3NlZCBpbiBtc1xuICAgIGxvb2t1cDogaW50ZXJjZXB0b3JPcHRzPy5sb29rdXAgPz8gbnVsbCxcbiAgICBwaWNrOiBpbnRlcmNlcHRvck9wdHM/LnBpY2sgPz8gbnVsbCxcbiAgICBkdWFsU3RhY2ssXG4gICAgYWZmaW5pdHksXG4gICAgbWF4SXRlbXM6IGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgPz8gSW5maW5pdHlcbiAgfVxuXG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IEROU0luc3RhbmNlKG9wdHMpXG5cbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZG5zSW50ZXJjZXB0b3IgKG9yaWdEaXNwYXRjaE9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9XG4gICAgICAgIG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luLmNvbnN0cnVjdG9yID09PSBVUkxcbiAgICAgICAgICA/IG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luXG4gICAgICAgICAgOiBuZXcgVVJMKG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luKVxuXG4gICAgICBpZiAoaXNJUChvcmlnaW4uaG9zdG5hbWUpICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChvcmlnRGlzcGF0Y2hPcHRzLCBoYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5ydW5Mb29rdXAob3JpZ2luLCBvcmlnRGlzcGF0Y2hPcHRzLCAoZXJyLCBuZXdPcmlnaW4pID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRpc3BhdGNoT3B0cyA9IG51bGxcbiAgICAgICAgZGlzcGF0Y2hPcHRzID0ge1xuICAgICAgICAgIC4uLm9yaWdEaXNwYXRjaE9wdHMsXG4gICAgICAgICAgc2VydmVybmFtZTogb3JpZ2luLmhvc3RuYW1lLCAvLyBGb3IgU05JIG9uIFRMU1xuICAgICAgICAgIG9yaWdpbjogbmV3T3JpZ2luLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIGhvc3Q6IG9yaWdpbi5ob3N0bmFtZSxcbiAgICAgICAgICAgIC4uLm9yaWdEaXNwYXRjaE9wdHMuaGVhZGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGRpc3BhdGNoT3B0cyxcbiAgICAgICAgICBpbnN0YW5jZS5nZXRIYW5kbGVyKHsgb3JpZ2luLCBkaXNwYXRjaCwgaGFuZGxlciB9LCBvcmlnRGlzcGF0Y2hPcHRzKVxuICAgICAgICApXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgaXRlcmF0b3JNaXhpbixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlclx1MjAxOXMgZmlyc3QgaXRlbSwgaGVhZGVyXHUyMDE5cyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSBcdTIxOTIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgLy8gICAgVE9ET1xuICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgaWYgKGdldEhlYWRlcnNHdWFyZChoZWFkZXJzKSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cblxuICAvLyA3LiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmV0dXJuIGdldEhlYWRlcnNMaXN0KGhlYWRlcnMpLmFwcGVuZChuYW1lLCB2YWx1ZSwgZmFsc2UpXG5cbiAgLy8gOC4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIGhlYWRlcnNcbn1cblxuZnVuY3Rpb24gY29tcGFyZUhlYWRlck5hbWUgKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPCBiWzBdID8gLTEgOiAxXG59XG5cbmNsYXNzIEhlYWRlcnNMaXN0IHtcbiAgLyoqIEB0eXBlIHtbc3RyaW5nLCBzdHJpbmddW118bnVsbH0gKi9cbiAgY29va2llcyA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoaW5pdCkge1xuICAgIGlmIChpbml0IGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0W2tIZWFkZXJzTWFwXSlcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gaW5pdFtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHRoaXMuY29va2llcyA9IGluaXQuY29va2llcyA9PT0gbnVsbCA/IG51bGwgOiBbLi4uaW5pdC5jb29raWVzXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdClcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbGlzdC1jb250YWluc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqL1xuICBjb250YWlucyAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0uaGFzKGlzTG93ZXJDYXNlID8gbmFtZSA6IG5hbWUudG9Mb3dlckNhc2UoKSlcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5jbGVhcigpXG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgdGhpcy5jb29raWVzID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtYXBwZW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqL1xuICBhcHBlbmQgKG5hbWUsIHZhbHVlLCBpc0xvd2VyQ2FzZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVyXHUyMDE5cyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBpc0xvd2VyQ2FzZSA/IG5hbWUgOiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICh0aGlzLmNvb2tpZXMgPz89IFtdKS5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvd2VyQ2FzZVxuICAgKi9cbiAgc2V0IChuYW1lLCB2YWx1ZSwgaXNMb3dlckNhc2UpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gaXNMb3dlckNhc2UgPyBuYW1lIDogbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBbdmFsdWVdXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCB0aGUgdmFsdWUgb2ZcbiAgICAvLyAgICB0aGUgZmlyc3Qgc3VjaCBoZWFkZXIgdG8gdmFsdWUgYW5kIHJlbW92ZSB0aGVcbiAgICAvLyAgICBvdGhlcnMuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBhcHBlbmQgaGVhZGVyIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZGVsZXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb3dlckNhc2VcbiAgICovXG4gIGRlbGV0ZSAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBpZiAoIWlzTG93ZXJDYXNlKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvd2VyQ2FzZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG4gIGdldCAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmdldChpc0xvd2VyQ2FzZSA/IG5hbWUgOiBuYW1lLnRvTG93ZXJDYXNlKCkpPy52YWx1ZSA/PyBudWxsXG4gIH1cblxuICAqIFtTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAvLyB1c2UgdGhlIGxvd2VyY2FzZWQgbmFtZVxuICAgIGZvciAoY29uc3QgeyAwOiBuYW1lLCAxOiB7IHZhbHVlIH0gfSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplICE9PSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgcmF3VmFsdWVzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0udmFsdWVzKClcbiAgfVxuXG4gIGdldCBlbnRyaWVzTGlzdCAoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICBpZiAodGhpc1trSGVhZGVyc01hcF0uc2l6ZSAhPT0gMCkge1xuICAgICAgZm9yIChjb25zdCB7IDA6IGxvd2VyTmFtZSwgMTogeyBuYW1lLCB2YWx1ZSB9IH0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgICAgaWYgKGxvd2VyTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb29raWUgb2YgdGhpcy5jb29raWVzKSB7XG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIGNvb2tpZV0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgdmFsdWVdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb252ZXJ0LWhlYWRlci1uYW1lcy10by1hLXNvcnRlZC1sb3dlcmNhc2Utc2V0XG4gIHRvU29ydGVkQXJyYXkgKCkge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzW2tIZWFkZXJzTWFwXS5zaXplXG4gICAgY29uc3QgYXJyYXkgPSBuZXcgQXJyYXkoc2l6ZSlcbiAgICAvLyBJbiBtb3N0IGNhc2VzLCB5b3Ugd2lsbCB1c2UgdGhlIGZhc3QtcGF0aC5cbiAgICAvLyBmYXN0LXBhdGg6IFVzZSBiaW5hcnkgaW5zZXJ0aW9uIHNvcnQgZm9yIHNtYWxsIGFycmF5cy5cbiAgICBpZiAoc2l6ZSA8PSAzMikge1xuICAgICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgICAgLy8gSWYgZW1wdHksIGl0IGlzIGFuIGVtcHR5IGFycmF5LiBUbyBhdm9pZCB0aGUgZmlyc3QgaW5kZXggYXNzaWdubWVudC5cbiAgICAgICAgcmV0dXJuIGFycmF5XG4gICAgICB9XG4gICAgICAvLyBJbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHVucm9sbGluZyBsb29wIGFuZCBhdm9pZGluZyBkb3VibGUtbG9vcC5cbiAgICAgIC8vIERvdWJsZS1sb29wLWxlc3MgdmVyc2lvbiBvZiB0aGUgYmluYXJ5IGluc2VydGlvbiBzb3J0LlxuICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzW2tIZWFkZXJzTWFwXVtTeW1ib2wuaXRlcmF0b3JdKClcbiAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWVcbiAgICAgIC8vIHNldCBbbmFtZSwgdmFsdWVdIHRvIGZpcnN0IGluZGV4LlxuICAgICAgYXJyYXlbMF0gPSBbZmlyc3RWYWx1ZVswXSwgZmlyc3RWYWx1ZVsxXS52YWx1ZV1cbiAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNvcnQtYW5kLWNvbWJpbmVcbiAgICAgIC8vIDMuMi4yLiBBc3NlcnQ6IHZhbHVlIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGZpcnN0VmFsdWVbMV0udmFsdWUgIT09IG51bGwpXG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgaSA9IDEsIGogPSAwLCByaWdodCA9IDAsIGxlZnQgPSAwLCBwaXZvdCA9IDAsIHgsIHZhbHVlO1xuICAgICAgICBpIDwgc2l6ZTtcbiAgICAgICAgKytpXG4gICAgICApIHtcbiAgICAgICAgLy8gZ2V0IG5leHQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWVcbiAgICAgICAgLy8gc2V0IFtuYW1lLCB2YWx1ZV0gdG8gY3VycmVudCBpbmRleC5cbiAgICAgICAgeCA9IGFycmF5W2ldID0gW3ZhbHVlWzBdLCB2YWx1ZVsxXS52YWx1ZV1cbiAgICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICAgICAgICAvLyAzLjIuMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHhbMV0gIT09IG51bGwpXG4gICAgICAgIGxlZnQgPSAwXG4gICAgICAgIHJpZ2h0ID0gaVxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoXG4gICAgICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcbiAgICAgICAgICAvLyBtaWRkbGUgaW5kZXhcbiAgICAgICAgICBwaXZvdCA9IGxlZnQgKyAoKHJpZ2h0IC0gbGVmdCkgPj4gMSlcbiAgICAgICAgICAvLyBjb21wYXJlIGhlYWRlciBuYW1lXG4gICAgICAgICAgaWYgKGFycmF5W3Bpdm90XVswXSA8PSB4WzBdKSB7XG4gICAgICAgICAgICBsZWZ0ID0gcGl2b3QgKyAxXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJpZ2h0ID0gcGl2b3RcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBpdm90KSB7XG4gICAgICAgICAgaiA9IGlcbiAgICAgICAgICB3aGlsZSAoaiA+IGxlZnQpIHtcbiAgICAgICAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXVxuICAgICAgICAgIH1cbiAgICAgICAgICBhcnJheVtsZWZ0XSA9IHhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogYzggaWdub3JlIG5leHQgNCAqL1xuICAgICAgaWYgKCFpdGVyYXRvci5uZXh0KCkuZG9uZSkge1xuICAgICAgICAvLyBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgYW5kIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnJlYWNoYWJsZScpXG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBjYXNlIHdvdWxkIGJlIGEgcmFyZSBvY2N1cnJlbmNlLlxuICAgICAgLy8gc2xvdy1wYXRoOiBmYWxsYmFja1xuICAgICAgbGV0IGkgPSAwXG4gICAgICBmb3IgKGNvbnN0IHsgMDogbmFtZSwgMTogeyB2YWx1ZSB9IH0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgICAgYXJyYXlbaSsrXSA9IFtuYW1lLCB2YWx1ZV1cbiAgICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICAgICAgICAvLyAzLjIuMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHZhbHVlICE9PSBudWxsKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5LnNvcnQoY29tcGFyZUhlYWRlck5hbWUpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgI2d1YXJkXG4gICNoZWFkZXJzTGlzdFxuXG4gIGNvbnN0cnVjdG9yIChpbml0ID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGlmIChpbml0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLiNoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXMuI2d1YXJkID0gJ25vbmUnXG5cbiAgICAvLyAyLiBJZiBpbml0IGlzIGdpdmVuLCB0aGVuIGZpbGwgdGhpcyB3aXRoIGluaXQuXG4gICAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KGluaXQsICdIZWFkZXJzIGNvbnRydWN0b3InLCAnaW5pdCcpXG4gICAgICBmaWxsKHRoaXMsIGluaXQpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgJ0hlYWRlcnMuYXBwZW5kJylcblxuICAgIGNvbnN0IHByZWZpeCA9ICdIZWFkZXJzLmFwcGVuZCdcbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUsIHByZWZpeCwgJ3ZhbHVlJylcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmRlbGV0ZScpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5kZWxldGUnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5kZWxldGUnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgbmFtZVxuICAgIC8vICAgIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlciBuYW1lLCBhbmRcbiAgICAvLyAgICBuYW1lIGlzIG5vdCBhIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpc1xuICAgIC8vICAgIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXMuI2d1YXJkID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9XG5cbiAgICAvLyA2LiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW5cbiAgICAvLyAgICByZXR1cm4uXG4gICAgaWYgKCF0aGlzLiNoZWFkZXJzTGlzdC5jb250YWlucyhuYW1lLCBmYWxzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDcuIERlbGV0ZSBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpcy5cbiAgICB0aGlzLiNoZWFkZXJzTGlzdC5kZWxldGUobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmdldCcpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5nZXQnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzLiNoZWFkZXJzTGlzdC5nZXQobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmhhcycpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5oYXMnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBuYW1lO1xuICAgIC8vICAgIG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpcy4jaGVhZGVyc0xpc3QuY29udGFpbnMobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCAnSGVhZGVycy5zZXQnKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0hlYWRlcnMuc2V0J1xuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXMuI2d1YXJkID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9XG5cbiAgICAvLyA3LiBTZXQgKG5hbWUsIHZhbHVlKSBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzXG4gICAgdGhpcy4jaGVhZGVyc0xpc3Quc2V0KG5hbWUsIHZhbHVlLCBmYWxzZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRzZXRjb29raWVcbiAgZ2V0U2V0Q29va2llICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgU2V0LUNvb2tpZWAsIHRoZW4gcmV0dXJuIFx1MDBBQiBcdTAwQkIuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGhlYWRlcnMgaW4gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3Qgd2hvc2UgbmFtZSBpc1xuICAgIC8vICAgIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBgU2V0LUNvb2tpZWAsIGluIG9yZGVyLlxuXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuI2hlYWRlcnNMaXN0LmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdKSB7XG4gICAgICByZXR1cm4gdGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYW4gZW1wdHkgbGlzdCBvZiBoZWFkZXJzIHdpdGggdGhlIGtleSBiZWluZyB0aGUgbmFtZVxuICAgIC8vICAgIGFuZCB2YWx1ZSB0aGUgdmFsdWUuXG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICAvLyAyLiBMZXQgbmFtZXMgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0IGhlYWRlciBuYW1lcyB0byBhIHNvcnRlZC1sb3dlcmNhc2VcbiAgICAvLyAgICBzZXQgd2l0aCBhbGwgdGhlIG5hbWVzIG9mIHRoZSBoZWFkZXJzIGluIGxpc3QuXG4gICAgY29uc3QgbmFtZXMgPSB0aGlzLiNoZWFkZXJzTGlzdC50b1NvcnRlZEFycmF5KClcblxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzLiNoZWFkZXJzTGlzdC5jb29raWVzXG5cbiAgICAvLyBmYXN0LXBhdGhcbiAgICBpZiAoY29va2llcyA9PT0gbnVsbCB8fCBjb29raWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gTm90ZTogVGhlIG5vbi1udWxsIGFzc2VydGlvbiBvZiB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgYnkgYEhlYWRlcnNMaXN0I3RvU29ydGVkQXJyYXlgXG4gICAgICByZXR1cm4gKHRoaXMuI2hlYWRlcnNMaXN0W2tIZWFkZXJzU29ydGVkTWFwXSA9IG5hbWVzKVxuICAgIH1cblxuICAgIC8vIDMuIEZvciBlYWNoIG5hbWUgb2YgbmFtZXM6XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgeyAwOiBuYW1lLCAxOiB2YWx1ZSB9ID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIC8vIE5vdGU6IFRoaXMgb3BlcmF0aW9uIHdhcyBkb25lIGJ5IGBIZWFkZXJzTGlzdCN0b1NvcnRlZEFycmF5YC5cblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gaGVhZGVycy5cbiAgICByZXR1cm4gKHRoaXMuI2hlYWRlcnNMaXN0W2tIZWFkZXJzU29ydGVkTWFwXSA9IGhlYWRlcnMpXG4gIH1cblxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV0gKGRlcHRoLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucy5kZXB0aCA/Pz0gZGVwdGhcblxuICAgIHJldHVybiBgSGVhZGVycyAke3V0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgdGhpcy4jaGVhZGVyc0xpc3QuZW50cmllcyl9YFxuICB9XG5cbiAgc3RhdGljIGdldEhlYWRlcnNHdWFyZCAobykge1xuICAgIHJldHVybiBvLiNndWFyZFxuICB9XG5cbiAgc3RhdGljIHNldEhlYWRlcnNHdWFyZCAobywgZ3VhcmQpIHtcbiAgICBvLiNndWFyZCA9IGd1YXJkXG4gIH1cblxuICBzdGF0aWMgZ2V0SGVhZGVyc0xpc3QgKG8pIHtcbiAgICByZXR1cm4gby4jaGVhZGVyc0xpc3RcbiAgfVxuXG4gIHN0YXRpYyBzZXRIZWFkZXJzTGlzdCAobywgbGlzdCkge1xuICAgIG8uI2hlYWRlcnNMaXN0ID0gbGlzdFxuICB9XG59XG5cbmNvbnN0IHsgZ2V0SGVhZGVyc0d1YXJkLCBzZXRIZWFkZXJzR3VhcmQsIGdldEhlYWRlcnNMaXN0LCBzZXRIZWFkZXJzTGlzdCB9ID0gSGVhZGVyc1xuUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShIZWFkZXJzLCAnZ2V0SGVhZGVyc0d1YXJkJylcblJlZmxlY3QuZGVsZXRlUHJvcGVydHkoSGVhZGVycywgJ3NldEhlYWRlcnNHdWFyZCcpXG5SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KEhlYWRlcnMsICdnZXRIZWFkZXJzTGlzdCcpXG5SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KEhlYWRlcnMsICdzZXRIZWFkZXJzTGlzdCcpXG5cbml0ZXJhdG9yTWl4aW4oJ0hlYWRlcnMnLCBIZWFkZXJzLCBrSGVhZGVyc1NvcnRlZE1hcCwgMCwgMSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSGVhZGVycy5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldFNldENvb2tpZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0hlYWRlcnMnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV06IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdCA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gUmVmbGVjdC5nZXQoViwgU3ltYm9sLml0ZXJhdG9yKVxuXG4gICAgLy8gQSB3b3JrLWFyb3VuZCB0byBlbnN1cmUgd2Ugc2VuZCB0aGUgcHJvcGVybHktY2FzZWQgSGVhZGVycyB3aGVuIFYgaXMgYSBIZWFkZXJzIG9iamVjdC5cbiAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvMzE1OSNpc3N1ZWNvbW1lbnQtMjA3NTUzNzIyNiBiZWZvcmUgdG91Y2hpbmcsIHBsZWFzZS5cbiAgICBpZiAoIXV0aWwudHlwZXMuaXNQcm94eShWKSAmJiBpdGVyYXRvciA9PT0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllcykgeyAvLyBIZWFkZXJzIG9iamVjdFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEhlYWRlcnNMaXN0KFYpLmVudHJpZXNMaXN0XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gZmFsbC10aHJvdWdoXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nXShWLCBwcmVmaXgsIGFyZ3VtZW50LCBpdGVyYXRvci5iaW5kKFYpKVxuICAgIH1cblxuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J10oViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxuXG4gIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZpbGwsXG4gIC8vIGZvciB0ZXN0LlxuICBjb21wYXJlSGVhZGVyTmFtZSxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3QsXG4gIGdldEhlYWRlcnNHdWFyZCxcbiAgc2V0SGVhZGVyc0d1YXJkLFxuICBzZXRIZWFkZXJzTGlzdCxcbiAgZ2V0SGVhZGVyc0xpc3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBIZWFkZXJzLCBIZWFkZXJzTGlzdCwgZmlsbCwgZ2V0SGVhZGVyc0d1YXJkLCBzZXRIZWFkZXJzR3VhcmQsIHNldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBleHRyYWN0Qm9keSwgY2xvbmVCb2R5LCBtaXhpbkJvZHksIGhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5LCBzdHJlYW1SZWdpc3RyeSwgYm9keVVudXNhYmxlIH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCBub2RlVXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHtcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBpc0Vycm9yTGlrZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdDogcmVsZXZhbnRSZWFsbVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1c1xufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY2xhc3NcbmNsYXNzIFJlc3BvbnNlIHtcbiAgLy8gQ3JlYXRlcyBuZXR3b3JrIGVycm9yIFJlc3BvbnNlLlxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIC8vIFRoZSBzdGF0aWMgZXJyb3IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFcbiAgICAvLyBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IG5ldHdvcmsgZXJyb3IsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5c1xuICAgIC8vIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gZnJvbUlubmVyUmVzcG9uc2UobWFrZU5ldHdvcmtFcnJvcigpLCAnaW1tdXRhYmxlJylcblxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdSZXNwb25zZS5qc29uJylcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBmcm9tSW5uZXJSZXNwb25zZShtYWtlUmVzcG9uc2Uoe30pLCAncmVzcG9uc2UnKVxuXG4gICAgLy8gNC4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2VPYmplY3QsIGluaXQsIGFuZCAoYm9keSwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLlxuICAgIGluaXRpYWxpemVSZXNwb25zZShyZXNwb25zZU9iamVjdCwgaW5pdCwgeyBib2R5OiBib2R5WzBdLCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSlcblxuICAgIC8vIDUuIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSByZWRpcmVjdCBSZXNwb25zZSB0aGF0IHJlZGlyZWN0cyB0byB1cmwgd2l0aCBzdGF0dXMgc3RhdHVzLlxuICBzdGF0aWMgcmVkaXJlY3QgKHVybCwgc3RhdHVzID0gMzAyKSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnUmVzcG9uc2UucmVkaXJlY3QnKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBzdGF0dXMgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShzdGF0dXMpXG5cbiAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB1cmwgd2l0aCBjdXJyZW50IHNldHRpbmdzXG4gICAgLy8gb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gVE9ETzogYmFzZS1VUkw/XG4gICAgbGV0IHBhcnNlZFVSTFxuICAgIHRyeSB7XG4gICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKHVybCwgcmVsZXZhbnRSZWFsbS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICR7dXJsfWAsIHsgY2F1c2U6IGVyciB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gdGhyb3cgYSBSYW5nZUVycm9yLlxuICAgIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHN0YXR1cyBjb2RlICR7c3RhdHVzfWApXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IGZyb21Jbm5lclJlc3BvbnNlKG1ha2VSZXNwb25zZSh7fSksICdpbW11dGFibGUnKVxuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIHN0YXR1cy5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLnN0YXR1cyA9IHN0YXR1c1xuXG4gICAgLy8gNi4gTGV0IHZhbHVlIGJlIHBhcnNlZFVSTCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgIGNvbnN0IHZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShVUkxTZXJpYWxpemVyKHBhcnNlZFVSTCkpXG5cbiAgICAvLyA3LiBBcHBlbmQgYExvY2F0aW9uYC92YWx1ZSB0byByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdsb2NhdGlvbicsIHZhbHVlLCB0cnVlKVxuXG4gICAgLy8gOC4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZVxuICBjb25zdHJ1Y3RvciAoYm9keSA9IG51bGwsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgaWYgKGJvZHkgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5ICE9PSBudWxsKSB7XG4gICAgICBib2R5ID0gd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQoYm9keSlcbiAgICB9XG5cbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgcmVzcG9uc2UgdG8gYSBuZXcgcmVzcG9uc2UuXG4gICAgdGhpc1trU3RhdGVdID0gbWFrZVJlc3BvbnNlKHt9KVxuXG4gICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkXG4gICAgLy8gaXMgXCJyZXNwb25zZVwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICBzZXRIZWFkZXJzR3VhcmQodGhpc1trSGVhZGVyc10sICdyZXNwb25zZScpXG4gICAgc2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10sIHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdClcblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoYm9keVVudXNhYmxlKHRoaXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc1x1MjAxOXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIE5vdGU6IFRvIHJlLXJlZ2lzdGVyIGJlY2F1c2Ugb2YgYSBuZXcgc3RyZWFtLlxuICAgIGlmIChoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSAmJiB0aGlzW2tTdGF0ZV0uYm9keT8uc3RyZWFtKSB7XG4gICAgICBzdHJlYW1SZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCBuZXcgV2Vha1JlZih0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pKVxuICAgIH1cblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIHJldHVybiBmcm9tSW5uZXJSZXNwb25zZShjbG9uZWRSZXNwb25zZSwgZ2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdKSlcbiAgfVxuXG4gIFtub2RlVXRpbC5pbnNwZWN0LmN1c3RvbV0gKGRlcHRoLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZGVwdGggPT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGggPSAyXG4gICAgfVxuXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgYm9keTogdGhpcy5ib2R5LFxuICAgICAgYm9keVVzZWQ6IHRoaXMuYm9keVVzZWQsXG4gICAgICBvazogdGhpcy5vayxcbiAgICAgIHJlZGlyZWN0ZWQ6IHRoaXMucmVkaXJlY3RlZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9XG5cbiAgICByZXR1cm4gYFJlc3BvbnNlICR7bm9kZVV0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgcHJvcGVydGllcyl9YFxuICB9XG59XG5cbm1peGluQm9keShSZXNwb25zZSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG4gIHR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvazoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3RlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVzcG9uc2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZSwge1xuICBqc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlc3BvbnNlIChyZXNwb25zZSkge1xuICAvLyBUbyBjbG9uZSBhIHJlc3BvbnNlIHJlc3BvbnNlLCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSwgdGhlbiByZXR1cm4gYSBuZXcgaWRlbnRpY2FsXG4gIC8vIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsIHJlc3BvbnNlIGlzIGEgY2xvbmUgb2YgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLlxuICBpZiAocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHJldHVybiBmaWx0ZXJSZXNwb25zZShcbiAgICAgIGNsb25lUmVzcG9uc2UocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSksXG4gICAgICByZXNwb25zZS50eXBlXG4gICAgKVxuICB9XG5cbiAgLy8gMi4gTGV0IG5ld1Jlc3BvbnNlIGJlIGEgY29weSBvZiByZXNwb25zZSwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyAuLi5yZXNwb25zZSwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBuZXdSZXNwb25zZVx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXNwb25zZS5ib2R5ID0gY2xvbmVCb2R5KG5ld1Jlc3BvbnNlLCByZXNwb25zZS5ib2R5KVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5ld1Jlc3BvbnNlLlxuICByZXR1cm4gbmV3UmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gbWFrZVJlc3BvbnNlIChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgcmFuZ2VSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93UGFzc2VkOiBmYWxzZSxcbiAgICByZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFsczogZmFsc2UsXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIHN0YXR1czogMjAwLFxuICAgIHRpbWluZ0luZm86IG51bGwsXG4gICAgY2FjaGVTdGF0ZTogJycsXG4gICAgc3RhdHVzVGV4dDogJycsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdD8uaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQ/LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKSxcbiAgICB1cmxMaXN0OiBpbml0Py51cmxMaXN0ID8gWy4uLmluaXQudXJsTGlzdF0gOiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXR3b3JrRXJyb3IgKHJlYXNvbikge1xuICBjb25zdCBpc0Vycm9yID0gaXNFcnJvckxpa2UocmVhc29uKVxuICByZXR1cm4gbWFrZVJlc3BvbnNlKHtcbiAgICB0eXBlOiAnZXJyb3InLFxuICAgIHN0YXR1czogMCxcbiAgICBlcnJvcjogaXNFcnJvclxuICAgICAgPyByZWFzb25cbiAgICAgIDogbmV3IEVycm9yKHJlYXNvbiA/IFN0cmluZyhyZWFzb24pIDogcmVhc29uKSxcbiAgICBhYm9ydGVkOiByZWFzb24gJiYgcmVhc29uLm5hbWUgPT09ICdBYm9ydEVycm9yJ1xuICB9KVxufVxuXG4vLyBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIGlzTmV0d29ya0Vycm9yIChyZXNwb25zZSkge1xuICByZXR1cm4gKFxuICAgIC8vIEEgbmV0d29yayBlcnJvciBpcyBhIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJlcnJvclwiLFxuICAgIHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiZcbiAgICAvLyBzdGF0dXMgaXMgMFxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMFxuICApXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWx0ZXJlZFJlc3BvbnNlIChyZXNwb25zZSwgc3RhdGUpIHtcbiAgc3RhdGUgPSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgLi4uc3RhdGVcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICBnZXQgKHRhcmdldCwgcCkge1xuICAgICAgcmV0dXJuIHAgaW4gc3RhdGUgPyBzdGF0ZVtwXSA6IHRhcmdldFtwXVxuICAgIH0sXG4gICAgc2V0ICh0YXJnZXQsIHAsIHZhbHVlKSB7XG4gICAgICBhc3NlcnQoIShwIGluIHN0YXRlKSlcbiAgICAgIHRhcmdldFtwXSA9IHZhbHVlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZmlsdGVyZWQtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbHRlclJlc3BvbnNlIChyZXNwb25zZSwgdHlwZSkge1xuICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICBpZiAodHlwZSA9PT0gJ2Jhc2ljJykge1xuICAgIC8vIEEgYmFzaWMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiYmFzaWNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3RcbiAgICAvLyB3aG9zZSBuYW1lIGlzIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnYmFzaWMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY29ycycpIHtcbiAgICAvLyBBIENPUlMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiY29yc1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJcbiAgICAvLyBsaXN0IHdob3NlIG5hbWUgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lLCBnaXZlblxuICAgIC8vIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdC5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2NvcnMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlJykge1xuICAgIC8vIEFuIG9wYXF1ZSBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXNcbiAgICAvLyBcIm9wYXF1ZVwiLCBVUkwgbGlzdCBpcyB0aGUgZW1wdHkgbGlzdCwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlXG4gICAgLy8gaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlJyxcbiAgICAgIHVybExpc3Q6IE9iamVjdC5mcmVlemUoW10pLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlcmVkaXJlY3QnKSB7XG4gICAgLy8gQW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZVxuICAgIC8vIGlzIFwib3BhcXVlcmVkaXJlY3RcIiwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlIGlzIHRoZSBlbXB0eSBieXRlXG4gICAgLy8gc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlcmVkaXJlY3QnLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBoZWFkZXJzTGlzdDogW10sXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcHJvcHJpYXRlLW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvciAoZmV0Y2hQYXJhbXMsIGVyciA9IG51bGwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZC5cbiAgYXNzZXJ0KGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSlcblxuICAvLyAyLiBSZXR1cm4gYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yIGlmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQ7XG4gIC8vIG90aGVyd2lzZSByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICByZXR1cm4gaXNBYm9ydGVkKGZldGNoUGFyYW1zKVxuICAgID8gbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSwgeyBjYXVzZTogZXJyIH0pKVxuICAgIDogbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1JlcXVlc3Qgd2FzIGNhbmNlbGxlZC4nKSwgeyBjYXVzZTogZXJyIH0pKVxufVxuXG4vLyBodHRwczovL3doYXRwci5vcmcvZmV0Y2gvMTM5Mi5odG1sI2luaXRpYWxpemUtYS1yZXNwb25zZVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlc3BvbnNlIChyZXNwb25zZSwgaW5pdCwgYm9keSkge1xuICAvLyAxLiBJZiBpbml0W1wic3RhdHVzXCJdIGlzIG5vdCBpbiB0aGUgcmFuZ2UgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLCB0aGVuXG4gIC8vICAgIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgaWYgKGluaXQuc3RhdHVzICE9PSBudWxsICYmIChpbml0LnN0YXR1cyA8IDIwMCB8fCBpbml0LnN0YXR1cyA+IDU5OSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5pdFtcInN0YXR1c1wiXSBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiAyMDAgdG8gNTk5LCBpbmNsdXNpdmUuJylcbiAgfVxuXG4gIC8vIDIuIElmIGluaXRbXCJzdGF0dXNUZXh0XCJdIGRvZXMgbm90IG1hdGNoIHRoZSByZWFzb24tcGhyYXNlIHRva2VuIHByb2R1Y3Rpb24sXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIC8vIFNlZSwgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4xLjI6XG4gICAgLy8gICByZWFzb24tcGhyYXNlICA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICAgIGlmICghaXNWYWxpZFJlYXNvblBocmFzZShTdHJpbmcoaW5pdC5zdGF0dXNUZXh0KSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RhdHVzVGV4dCcpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIGluaXRbXCJzdGF0dXNcIl0uXG4gIGlmICgnc3RhdHVzJyBpbiBpbml0ICYmIGluaXQuc3RhdHVzICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1cyA9IGluaXQuc3RhdHVzXG4gIH1cblxuICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZSB0byBpbml0W1wic3RhdHVzVGV4dFwiXS5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXNUZXh0ID0gaW5pdC5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyA1LiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gZmlsbCByZXNwb25zZVx1MjAxOXMgaGVhZGVycyB3aXRoIGluaXRbXCJoZWFkZXJzXCJdLlxuICBpZiAoJ2hlYWRlcnMnIGluIGluaXQgJiYgaW5pdC5oZWFkZXJzICE9IG51bGwpIHtcbiAgICBmaWxsKHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5pdC5oZWFkZXJzKVxuICB9XG5cbiAgLy8gNi4gSWYgYm9keSB3YXMgZ2l2ZW4sIHRoZW46XG4gIGlmIChib2R5KSB7XG4gICAgLy8gMS4gSWYgcmVzcG9uc2UncyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9YFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UncyBib2R5IHRvIGJvZHkncyBib2R5LlxuICAgIHJlc3BvbnNlW2tTdGF0ZV0uYm9keSA9IGJvZHkuYm9keVxuXG4gICAgLy8gMy4gSWYgYm9keSdzIHR5cGUgaXMgbm9uLW51bGwgYW5kIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpblxuICAgIC8vICAgIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtVHlwZWAsIGJvZHkncyB0eXBlKSB0byByZXNwb25zZSdzIGhlYWRlciBsaXN0LlxuICAgIGlmIChib2R5LnR5cGUgIT0gbnVsbCAmJiAhcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5jb250YWlucygnY29udGVudC10eXBlJywgdHJ1ZSkpIHtcbiAgICAgIHJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LXR5cGUnLCBib2R5LnR5cGUsIHRydWUpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY3JlYXRlXG4gKiBAcGFyYW0ge2FueX0gaW5uZXJSZXNwb25zZVxuICogQHBhcmFtIHsncmVxdWVzdCcgfCAnaW1tdXRhYmxlJyB8ICdyZXF1ZXN0LW5vLWNvcnMnIHwgJ3Jlc3BvbnNlJyB8ICdub25lJ30gZ3VhcmRcbiAqIEByZXR1cm5zIHtSZXNwb25zZX1cbiAqL1xuZnVuY3Rpb24gZnJvbUlubmVyUmVzcG9uc2UgKGlubmVyUmVzcG9uc2UsIGd1YXJkKSB7XG4gIGNvbnN0IHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGtDb25zdHJ1Y3QpXG4gIHJlc3BvbnNlW2tTdGF0ZV0gPSBpbm5lclJlc3BvbnNlXG4gIHJlc3BvbnNlW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gIHNldEhlYWRlcnNMaXN0KHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdClcbiAgc2V0SGVhZGVyc0d1YXJkKHJlc3BvbnNlW2tIZWFkZXJzXSwgZ3VhcmQpXG5cbiAgaWYgKGhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmIGlubmVyUmVzcG9uc2UuYm9keT8uc3RyZWFtKSB7XG4gICAgLy8gSWYgdGhlIHRhcmdldCAocmVzcG9uc2UpIGlzIHJlY2xhaW1lZCwgdGhlIGNsZWFudXAgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IHdpdGhcbiAgICAvLyB0aGUgaGVsZCB2YWx1ZSBwcm92aWRlZCBmb3IgaXQgKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pLiBUaGUgaGVsZCB2YWx1ZSBjYW4gYmUgYW55IHZhbHVlOlxuICAgIC8vIGEgcHJpbWl0aXZlIG9yIGFuIG9iamVjdCwgZXZlbiB1bmRlZmluZWQuIElmIHRoZSBoZWxkIHZhbHVlIGlzIGFuIG9iamVjdCwgdGhlIHJlZ2lzdHJ5IGtlZXBzXG4gICAgLy8gYSBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0IChzbyBpdCBjYW4gcGFzcyBpdCB0byB0aGUgY2xlYW51cCBjYWxsYmFjayBsYXRlcikuIFJld29yZGVkIGZyb21cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GaW5hbGl6YXRpb25SZWdpc3RyeVxuICAgIHN0cmVhbVJlZ2lzdHJ5LnJlZ2lzdGVyKHJlc3BvbnNlLCBuZXcgV2Vha1JlZihpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSlcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlYWRhYmxlU3RyZWFtXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgRm9ybURhdGFcbilcblxud2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgVVJMU2VhcmNoUGFyYW1zXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyN0eXBlZGVmZGVmLXhtbGh0dHByZXF1ZXN0Ym9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIHByZWZpeCwgbmFtZSlcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgcHJlZml4LCBuYW1lLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoViwgcHJlZml4LCBuYW1lKVxuICB9XG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEoViwgcHJlZml4LCBuYW1lLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyhWLCBwcmVmaXgsIG5hbWUpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgbmFtZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdCA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmIChWIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0oViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaW5jbHVkZSBhc3luYyBpdGVyYWJsZXMsXG4gIC8vIHRoaXMgaXMgYW4gdW5kaWNpIGV4dGVuc2lvbi5cbiAgaWYgKFY/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gVlxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQoViwgcHJlZml4LCBhcmd1bWVudClcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMjAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzdGF0dXNUZXh0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNOZXR3b3JrRXJyb3IsXG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2UsXG4gIGZyb21Jbm5lclJlc3BvbnNlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyIChrZXkpIHt9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgYmFja3BvcnRlZCB0byB2MThcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSAmJiBwcm9jZXNzLnZlcnNpb24uc3RhcnRzV2l0aCgndjE4JykpIHtcbiAgICBwcm9jZXNzLl9yYXdEZWJ1ZygnVXNpbmcgY29tcGF0aWJpbGl0eSBXZWFrUmVmIGFuZCBGaW5hbGl6YXRpb25SZWdpc3RyeScpXG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH1cbn1cbiIsICIvKiBnbG9iYWxzIEFib3J0Q29udHJvbGxlciAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBleHRyYWN0Qm9keSwgbWl4aW5Cb2R5LCBjbG9uZUJvZHksIGJvZHlVbnVzYWJsZSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHsgSGVhZGVycywgZmlsbDogZmlsbEhlYWRlcnMsIEhlYWRlcnNMaXN0LCBzZXRIZWFkZXJzR3VhcmQsIGdldEhlYWRlcnNHdWFyZCwgc2V0SGVhZGVyc0xpc3QsIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBGaW5hbGl6YXRpb25SZWdpc3RyeSB9ID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IG5vZGVVdGlsID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHtcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgc2FtZU9yaWdpbixcbiAgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZXF1ZXN0RHVwbGV4XG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UsIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzIH0gPSB1dGlsXG5jb25zdCB7IGtIZWFkZXJzLCBrU2lnbmFsLCBrU3RhdGUsIGtEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGdldE1heExpc3RlbmVycywgc2V0TWF4TGlzdGVuZXJzLCBnZXRFdmVudExpc3RlbmVycywgZGVmYXVsdE1heExpc3RlbmVycyB9ID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKVxuXG5jb25zdCBrQWJvcnRDb250cm9sbGVyID0gU3ltYm9sKCdhYm9ydENvbnRyb2xsZXInKVxuXG5jb25zdCByZXF1ZXN0RmluYWxpemVyID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KCh7IHNpZ25hbCwgYWJvcnQgfSkgPT4ge1xuICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydClcbn0pXG5cbmNvbnN0IGRlcGVuZGVudENvbnRyb2xsZXJNYXAgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGJ1aWxkQWJvcnQgKGFjUmVmKSB7XG4gIHJldHVybiBhYm9ydFxuXG4gIGZ1bmN0aW9uIGFib3J0ICgpIHtcbiAgICBjb25zdCBhYyA9IGFjUmVmLmRlcmVmKClcbiAgICBpZiAoYWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3VycmVudGx5LCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBGaW5hbGl6YXRpb25SZWdpc3RyeS5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDc3NDhcbiAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGFib3J0LCB0aGUgZmlyc3Qgc3RlcCBpcyB0byB1bnJlZ2lzdGVyIGZyb20gaXQuXG4gICAgICAvLyBJZiB0aGUgY29udHJvbGxlciBjYW4gcmVmZXIgdG8gaXQsIGl0IGlzIHN0aWxsIHJlZ2lzdGVyZWQuXG4gICAgICAvLyBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIHJlcXVlc3RGaW5hbGl6ZXIudW5yZWdpc3RlcihhYm9ydClcblxuICAgICAgLy8gVW5zdWJzY3JpYmUgYSBsaXN0ZW5lci5cbiAgICAgIC8vIEZpbmFsaXphdGlvblJlZ2lzdHJ5IHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZCwgc28gdGhpcyBtdXN0IGJlIGRvbmUuXG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG5cbiAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuXG4gICAgICBjb25zdCBjb250cm9sbGVyTGlzdCA9IGRlcGVuZGVudENvbnRyb2xsZXJNYXAuZ2V0KGFjLnNpZ25hbClcblxuICAgICAgaWYgKGNvbnRyb2xsZXJMaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXJMaXN0LnNpemUgIT09IDApIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBjb250cm9sbGVyTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHJlZi5kZXJlZigpXG4gICAgICAgICAgICBpZiAoY3RybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN0cmwuYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xsZXJMaXN0LmNsZWFyKClcbiAgICAgICAgfVxuICAgICAgICBkZXBlbmRlbnRDb250cm9sbGVyTWFwLmRlbGV0ZShhYy5zaWduYWwpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmxldCBwYXRjaE1ldGhvZFdhcm5pbmcgPSBmYWxzZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgaWYgKGlucHV0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSAnUmVxdWVzdCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGlucHV0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8oaW5wdXQsIHByZWZpeCwgJ2lucHV0JylcbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQoaW5pdCwgcHJlZml4LCAnaW5pdCcpXG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5iYXNlVXJsXG5cbiAgICAvLyA0LiBMZXQgc2lnbmFsIGJlIG51bGwuXG4gICAgbGV0IHNpZ25hbCA9IG51bGxcblxuICAgIC8vIDUuIElmIGlucHV0IGlzIGEgc3RyaW5nLCB0aGVuOlxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzW2tEaXNwYXRjaGVyXSA9IGluaXQuZGlzcGF0Y2hlclxuXG4gICAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBpbnB1dCB3aXRoIGJhc2VVUkwuXG4gICAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGxldCBwYXJzZWRVUkxcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwoaW5wdXQsIGJhc2VVcmwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyBpbnB1dCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHBhcnNlZFVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGZyb20gYSBVUkwgdGhhdCBpbmNsdWRlcyBjcmVkZW50aWFsczogJyArXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2hvc2UgVVJMIGlzIHBhcnNlZFVSTC5cbiAgICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IHVybExpc3Q6IFtwYXJzZWRVUkxdIH0pXG5cbiAgICAgIC8vIDUuIFNldCBmYWxsYmFja01vZGUgdG8gXCJjb3JzXCIuXG4gICAgICBmYWxsYmFja01vZGUgPSAnY29ycydcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRGlzcGF0Y2hlcl0gPSBpbml0LmRpc3BhdGNoZXIgfHwgaW5wdXRba0Rpc3BhdGNoZXJdXG5cbiAgICAgIC8vIDYuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNy4gQXNzZXJ0OiBpbnB1dCBpcyBhIFJlcXVlc3Qgb2JqZWN0LlxuICAgICAgYXNzZXJ0KGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdClcblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3QgdG8gaW5wdXRcdTIwMTlzIHJlcXVlc3QuXG4gICAgICByZXF1ZXN0ID0gaW5wdXRba1N0YXRlXVxuXG4gICAgICAvLyA5LiBTZXQgc2lnbmFsIHRvIGlucHV0XHUyMDE5cyBzaWduYWwuXG4gICAgICBzaWduYWwgPSBpbnB1dFtrU2lnbmFsXVxuICAgIH1cblxuICAgIC8vIDcuIExldCBvcmlnaW4gYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBvcmlnaW4uXG4gICAgY29uc3Qgb3JpZ2luID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdFx1MjAxOXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0LFxuICAgICAgLy8gd2luZG93IHdpbmRvdy5cbiAgICAgIHdpbmRvdyxcbiAgICAgIC8vIHByaW9yaXR5IHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5LlxuICAgICAgcHJpb3JpdHk6IHJlcXVlc3QucHJpb3JpdHksXG4gICAgICAvLyBvcmlnaW4gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLiBUaGUgcHJvcGFnYXRpb24gb2YgdGhlIG9yaWdpbiBpcyBvbmx5IHNpZ25pZmljYW50IGZvciBuYXZpZ2F0aW9uIHJlcXVlc3RzXG4gICAgICAvLyBiZWluZyBoYW5kbGVkIGJ5IGEgc2VydmljZSB3b3JrZXIuIEluIHRoaXMgc2NlbmFyaW8gYSByZXF1ZXN0IGNhbiBoYXZlIGFuIG9yaWdpbiB0aGF0IGlzIGRpZmZlcmVudFxuICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCBjbGllbnQuXG4gICAgICBvcmlnaW46IHJlcXVlc3Qub3JpZ2luLFxuICAgICAgLy8gcmVmZXJyZXIgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgICByZWZlcnJlcjogcmVxdWVzdC5yZWZlcnJlcixcbiAgICAgIC8vIHJlZmVycmVyIHBvbGljeSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgICByZWZlcnJlclBvbGljeTogcmVxdWVzdC5yZWZlcnJlclBvbGljeSxcbiAgICAgIC8vIG1vZGUgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICAgIG1vZGU6IHJlcXVlc3QubW9kZSxcbiAgICAgIC8vIGNyZWRlbnRpYWxzIG1vZGUgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0LmNyZWRlbnRpYWxzLFxuICAgICAgLy8gY2FjaGUgbW9kZSByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgICAgY2FjaGU6IHJlcXVlc3QuY2FjaGUsXG4gICAgICAvLyByZWRpcmVjdCBtb2RlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgICByZWRpcmVjdDogcmVxdWVzdC5yZWRpcmVjdCxcbiAgICAgIC8vIGludGVncml0eSBtZXRhZGF0YSByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEuXG4gICAgICBpbnRlZ3JpdHk6IHJlcXVlc3QuaW50ZWdyaXR5LFxuICAgICAgLy8ga2VlcGFsaXZlIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGtlZXBhbGl2ZTogcmVxdWVzdC5rZWVwYWxpdmUsXG4gICAgICAvLyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZWxvYWROYXZpZ2F0aW9uOiByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24sXG4gICAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIGhpc3RvcnlOYXZpZ2F0aW9uOiByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uLFxuICAgICAgLy8gVVJMIGxpc3QgQSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgICAgIHVybExpc3Q6IFsuLi5yZXF1ZXN0LnVybExpc3RdXG4gICAgfSlcblxuICAgIGNvbnN0IGluaXRIYXNLZXkgPSBPYmplY3Qua2V5cyhpbml0KS5sZW5ndGggIT09IDBcblxuICAgIC8vIDEzLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gc2V0IGl0IHRvIFwic2FtZS1vcmlnaW5cIi5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgICAgcmVxdWVzdC5tb2RlID0gJ3NhbWUtb3JpZ2luJ1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBVbnNldCByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gMy4gVW5zZXQgcmVxdWVzdFx1MjAxOXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byBcImNsaWVudFwiLlxuICAgICAgcmVxdWVzdC5vcmlnaW4gPSAnY2xpZW50J1xuXG4gICAgICAvLyA1LiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIlxuICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDYuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSAnJ1xuXG4gICAgICAvLyA3LiBTZXQgcmVxdWVzdFx1MjAxOXMgVVJMIHRvIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbcmVxdWVzdC51cmxMaXN0Lmxlbmd0aCAtIDFdXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgcmVxdWVzdFx1MjAxOXMgVVJMIFx1MDBCQi5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Quc2V0dGluZ3NPYmplY3QuYmFzZVVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnY2xpZW50J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIDQuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIHBhcnNlZFJlZmVycmVyLlxuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSBwYXJzZWRSZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTUuIElmIGluaXRbXCJyZWZlcnJlclBvbGljeVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZmVycmVyUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSBpbml0LnJlZmVycmVyUG9saWN5XG4gICAgfVxuXG4gICAgLy8gMTYuIExldCBtb2RlIGJlIGluaXRbXCJtb2RlXCJdIGlmIGl0IGV4aXN0cywgYW5kIGZhbGxiYWNrTW9kZSBvdGhlcndpc2UuXG4gICAgbGV0IG1vZGVcbiAgICBpZiAoaW5pdC5tb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1vZGUgPSBpbml0Lm1vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kZSA9IGZhbGxiYWNrTW9kZVxuICAgIH1cblxuICAgIC8vIDE3LiBJZiBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgcmVxdWVzdCBtb2RlIG5hdmlnYXRlLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMTguIElmIG1vZGUgaXMgbm9uLW51bGwsIHNldCByZXF1ZXN0XHUyMDE5cyBtb2RlIHRvIG1vZGUuXG4gICAgaWYgKG1vZGUgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5tb2RlID0gbW9kZVxuICAgIH1cblxuICAgIC8vIDE5LiBJZiBpbml0W1wiY3JlZGVudGlhbHNcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlXG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQuY3JlZGVudGlhbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jcmVkZW50aWFscyA9IGluaXQuY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgaW5pdFtcImNhY2hlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5jYWNoZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNhY2hlID0gaW5pdC5jYWNoZVxuICAgIH1cblxuICAgIC8vIDIxLiBJZiByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiBhbmQgcmVxdWVzdFx1MjAxOXMgbW9kZSBpc1xuICAgIC8vIG5vdCBcInNhbWUtb3JpZ2luXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHJlcXVlc3QuY2FjaGUgPT09ICdvbmx5LWlmLWNhY2hlZCcgJiYgcmVxdWVzdC5tb2RlICE9PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIidvbmx5LWlmLWNhY2hlZCcgY2FuIGJlIHNldCBvbmx5IHdpdGggJ3NhbWUtb3JpZ2luJyBtb2RlXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAyMi4gSWYgaW5pdFtcInJlZGlyZWN0XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWRpcmVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZGlyZWN0ID0gaW5pdC5yZWRpcmVjdFxuICAgIH1cblxuICAgIC8vIDIzLiBJZiBpbml0W1wiaW50ZWdyaXR5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIHRvIGl0LlxuICAgIGlmIChpbml0LmludGVncml0eSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0LmludGVncml0eSA9IFN0cmluZyhpbml0LmludGVncml0eSlcbiAgICB9XG5cbiAgICAvLyAyNC4gSWYgaW5pdFtcImtlZXBhbGl2ZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZSB0byBpdC5cbiAgICBpZiAoaW5pdC5rZWVwYWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5rZWVwYWxpdmUgPSBCb29sZWFuKGluaXQua2VlcGFsaXZlKVxuICAgIH1cblxuICAgIC8vIDI1LiBJZiBpbml0W1wibWV0aG9kXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IG1ldGhvZCBiZSBpbml0W1wibWV0aG9kXCJdLlxuICAgICAgbGV0IG1ldGhvZCA9IGluaXQubWV0aG9kXG5cbiAgICAgIGNvbnN0IG1heUJlTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzW21ldGhvZF1cblxuICAgICAgaWYgKG1heUJlTm9ybWFsaXplZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIE5vdGU6IEJ5cGFzcyB2YWxpZGF0aW9uIERFTEVURSwgR0VULCBIRUFELCBPUFRJT05TLCBQT1NULCBQVVQsIFBBVENIIGFuZCB0aGVzZSBsb3dlcmNhc2Ugb25lc1xuICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9IG1heUJlTm9ybWFsaXplZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAgIC8vIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBpZiAoIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cHBlckNhc2UgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuXG4gICAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0Lmhhcyh1cHBlckNhc2UpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIE5vcm1hbGl6ZSBtZXRob2QuXG4gICAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAgICAgICAgLy8gTm90ZTogbXVzdCBiZSBpbiB1cHBlcmNhc2VcbiAgICAgICAgbWV0aG9kID0gbm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlW3VwcGVyQ2FzZV0gPz8gbWV0aG9kXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG1ldGhvZCB0byBtZXRob2QuXG4gICAgICAgIHJlcXVlc3QubWV0aG9kID0gbWV0aG9kXG4gICAgICB9XG5cbiAgICAgIGlmICghcGF0Y2hNZXRob2RXYXJuaW5nICYmIHJlcXVlc3QubWV0aG9kID09PSAncGF0Y2gnKSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1VzaW5nIGBwYXRjaGAgaXMgaGlnaGx5IGxpa2VseSB0byByZXN1bHQgaW4gYSBgNDA1IE1ldGhvZCBOb3QgQWxsb3dlZGAuIGBQQVRDSGAgaXMgbXVjaCBtb3JlIGxpa2VseSB0byBzdWNjZWVkLicsIHtcbiAgICAgICAgICBjb2RlOiAnVU5ESUNJLUZFVENILXBhdGNoJ1xuICAgICAgICB9KVxuXG4gICAgICAgIHBhdGNoTWV0aG9kV2FybmluZyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXNcdTIwMTlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc1x1MjAxOXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBidWlsZEFib3J0KGFjUmVmKVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTUwMCwgc2lnbmFsKVxuICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0RXZlbnRMaXN0ZW5lcnMoc2lnbmFsLCAnYWJvcnQnKS5sZW5ndGggPj0gZGVmYXVsdE1heExpc3RlbmVycykge1xuICAgICAgICAgICAgc2V0TWF4TGlzdGVuZXJzKDE1MDAsIHNpZ25hbClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBhYm9ydClcbiAgICAgICAgLy8gVGhlIHRoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSByZWdpc3RyeSBrZXkgdG8gYmUgdW5yZWdpc3RlcmVkLlxuICAgICAgICAvLyBXaXRob3V0IGl0LCB5b3UgY2Fubm90IHVucmVnaXN0ZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ZpbmFsaXphdGlvblJlZ2lzdHJ5XG4gICAgICAgIC8vIGFib3J0IGlzIHVzZWQgYXMgdGhlIHVucmVnaXN0ZXIga2V5LiAoYmVjYXVzZSBpdCBpcyB1bmlxdWUpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9LCBhYm9ydClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMC4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmQgaXNcbiAgICAvLyBcInJlcXVlc3RcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgc2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10sIHJlcXVlc3QuaGVhZGVyc0xpc3QpXG4gICAgc2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdLCAncmVxdWVzdCcpXG5cbiAgICAvLyAzMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgc2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdLCAncmVxdWVzdC1uby1jb3JzJylcbiAgICB9XG5cbiAgICAvLyAzMi4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGVhZGVyc0xpc3R9ICovXG4gICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IGdldEhlYWRlcnNMaXN0KHRoaXNba0hlYWRlcnNdKVxuICAgICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYSBjb3B5IG9mIHRoaXNcdTIwMTlzIGhlYWRlcnMgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlclxuICAgICAgLy8gbGlzdC5cbiAgICAgIC8vIDIuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBzZXQgaGVhZGVycyB0byBpbml0W1wiaGVhZGVyc1wiXS5cbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBpbml0LmhlYWRlcnMgIT09IHVuZGVmaW5lZCA/IGluaXQuaGVhZGVycyA6IG5ldyBIZWFkZXJzTGlzdChoZWFkZXJzTGlzdClcblxuICAgICAgLy8gMy4gRW1wdHkgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICBoZWFkZXJzTGlzdC5jbGVhcigpXG5cbiAgICAgIC8vIDQuIElmIGhlYWRlcnMgaXMgYSBIZWFkZXJzIG9iamVjdCwgdGhlbiBmb3IgZWFjaCBoZWFkZXIgaW4gaXRzIGhlYWRlclxuICAgICAgLy8gbGlzdCwgYXBwZW5kIGhlYWRlclx1MjAxOXMgbmFtZS9oZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGhlYWRlcnMucmF3VmFsdWVzKCkpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQobmFtZSwgdmFsdWUsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IENvcHkgdGhlIGBzZXQtY29va2llYCBtZXRhLWRhdGEuXG4gICAgICAgIGhlYWRlcnNMaXN0LmNvb2tpZXMgPSBoZWFkZXJzLmNvb2tpZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDUuIE90aGVyd2lzZSwgZmlsbCB0aGlzXHUyMDE5cyBoZWFkZXJzIHdpdGggaGVhZGVycy5cbiAgICAgICAgZmlsbEhlYWRlcnModGhpc1trSGVhZGVyc10sIGhlYWRlcnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzMuIExldCBpbnB1dEJvZHkgYmUgaW5wdXRcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgaWYgaW5wdXQgaXMgYSBSZXF1ZXN0XG4gICAgLy8gb2JqZWN0OyBvdGhlcndpc2UgbnVsbC5cbiAgICBjb25zdCBpbnB1dEJvZHkgPSBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpbnB1dFtrU3RhdGVdLmJvZHkgOiBudWxsXG5cbiAgICAvLyAzNC4gSWYgZWl0aGVyIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwgb3IgaW5wdXRCb2R5IGlzXG4gICAgLy8gbm9uLW51bGwsIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYEdFVGAgb3IgYEhFQURgLCB0aGVuIHRocm93IGFcbiAgICAvLyBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgKGluaXQuYm9keSAhPSBudWxsIHx8IGlucHV0Qm9keSAhPSBudWxsKSAmJlxuICAgICAgKHJlcXVlc3QubWV0aG9kID09PSAnR0VUJyB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5LicpXG4gICAgfVxuXG4gICAgLy8gMzUuIExldCBpbml0Qm9keSBiZSBudWxsLlxuICAgIGxldCBpbml0Qm9keSA9IG51bGxcblxuICAgIC8vIDM2LiBJZiBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0LmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMS4gTGV0IENvbnRlbnQtVHlwZSBiZSBudWxsLlxuICAgICAgLy8gMi4gU2V0IGluaXRCb2R5IGFuZCBDb250ZW50LVR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nXG4gICAgICAvLyBpbml0W1wiYm9keVwiXSwgd2l0aCBrZWVwYWxpdmUgc2V0IHRvIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShcbiAgICAgICAgaW5pdC5ib2R5LFxuICAgICAgICByZXF1ZXN0LmtlZXBhbGl2ZVxuICAgICAgKVxuICAgICAgaW5pdEJvZHkgPSBleHRyYWN0ZWRCb2R5XG5cbiAgICAgIC8vIDMsIElmIENvbnRlbnQtVHlwZSBpcyBub24tbnVsbCBhbmQgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lc1xuICAgICAgLy8gbm90IGNvbnRhaW4gYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIGBDb250ZW50LVR5cGVgL0NvbnRlbnQtVHlwZSB0b1xuICAgICAgLy8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChjb250ZW50VHlwZSAmJiAhZ2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10pLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnLCB0cnVlKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHlcdTIwMTlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChib2R5VW51c2FibGUoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIC8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWNyZWF0ZS1hLXByb3h5XG4gICAgICBjb25zdCBpZGVudGl0eVRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oKVxuICAgICAgaW5wdXRCb2R5LnN0cmVhbS5waXBlVGhyb3VnaChpZGVudGl0eVRyYW5zZm9ybSlcbiAgICAgIGZpbmFsQm9keSA9IHtcbiAgICAgICAgc291cmNlOiBpbnB1dEJvZHkuc291cmNlLFxuICAgICAgICBsZW5ndGg6IGlucHV0Qm9keS5sZW5ndGgsXG4gICAgICAgIHN0cmVhbTogaWRlbnRpdHlUcmFuc2Zvcm0ucmVhZGFibGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0MS4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gZmluYWxCb2R5LlxuICAgIHRoaXNba1N0YXRlXS5ib2R5ID0gZmluYWxCb2R5XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIEhUVFAgbWV0aG9kLCB3aGljaCBpcyBcIkdFVFwiIGJ5IGRlZmF1bHQuXG4gIGdldCBtZXRob2QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbWV0aG9kIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1ldGhvZFxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgVVJMIG9mIHJlcXVlc3QgYXMgYSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tTdGF0ZV0udXJsKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIEhlYWRlcnMgb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGhlYWRlcnMgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIE5vdGUgdGhhdCBoZWFkZXJzIGFkZGVkIGluIHRoZSBuZXR3b3JrIGxheWVyIGJ5IHRoZSB1c2VyIGFnZW50IHdpbGwgbm90XG4gIC8vIGJlIGFjY291bnRlZCBmb3IgaW4gdGhpcyBvYmplY3QsIGUuZy4sIHRoZSBcIkhvc3RcIiBoZWFkZXIuXG4gIGdldCBoZWFkZXJzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGtpbmQgb2YgcmVzb3VyY2UgcmVxdWVzdGVkIGJ5IHJlcXVlc3QsIGUuZy4sIFwiZG9jdW1lbnRcIlxuICAvLyBvciBcInNjcmlwdFwiLlxuICBnZXQgZGVzdGluYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgZGVzdGluYXRpb24gZ2V0dGVyIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24uXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5kZXN0aW5hdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgb2YgcmVxdWVzdC4gSXRzIHZhbHVlIGNhbiBiZSBhIHNhbWUtb3JpZ2luIFVSTCBpZlxuICAvLyBleHBsaWNpdGx5IHNldCBpbiBpbml0LCB0aGUgZW1wdHkgc3RyaW5nIHRvIGluZGljYXRlIG5vIHJlZmVycmVyLCBhbmRcbiAgLy8gXCJhYm91dDpjbGllbnRcIiB3aGVuIGRlZmF1bHRpbmcgdG8gdGhlIGdsb2JhbFx1MjAxOXMgZGVmYXVsdC4gVGhpcyBpcyB1c2VkXG4gIC8vIGR1cmluZyBmZXRjaGluZyB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoZSBgUmVmZXJlcmAgaGVhZGVyIG9mIHRoZVxuICAvLyByZXF1ZXN0IGJlaW5nIG1hZGUuXG4gIGdldCByZWZlcnJlciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwibm8tcmVmZXJyZXJcIiwgdGhlbiByZXR1cm4gdGhlXG4gICAgLy8gZW1wdHkgc3RyaW5nLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICduby1yZWZlcnJlcicpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwiY2xpZW50XCIsIHRoZW4gcmV0dXJuXG4gICAgLy8gXCJhYm91dDpjbGllbnRcIi5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnY2xpZW50Jykge1xuICAgICAgcmV0dXJuICdhYm91dDpjbGllbnQnXG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXIudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBUaGlzIGlzIHVzZWQgZHVyaW5nIGZldGNoaW5nIHRvIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlci5cbiAgZ2V0IHJlZmVycmVyUG9saWN5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZmVycmVyUG9saWN5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyUG9saWN5XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nXG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3Qgd2lsbCB1c2UgQ09SUywgb3Igd2lsbCBiZSByZXN0cmljdGVkIHRvIHNhbWUtb3JpZ2luXG4gIC8vIFVSTHMuXG4gIGdldCBtb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1vZGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1vZGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNyZWRlbnRpYWxzIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGVcbiAgLy8gcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgZ2V0IGNyZWRlbnRpYWxzICgpIHtcbiAgICAvLyBUaGUgY3JlZGVudGlhbHMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjYWNoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyB0aGUgcmVxdWVzdCB3aWxsXG4gIC8vIGludGVyYWN0IHdpdGggdGhlIGJyb3dzZXJcdTIwMTlzIGNhY2hlIHdoZW4gZmV0Y2hpbmcuXG4gIGdldCBjYWNoZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBjYWNoZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY2FjaGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZGlyZWN0IG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHJlZGlyZWN0cyBmb3IgdGhlXG4gIC8vIHJlcXVlc3Qgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBmZXRjaGluZy4gQSByZXF1ZXN0XG4gIC8vIHdpbGwgZm9sbG93IHJlZGlyZWN0cyBieSBkZWZhdWx0LlxuICBnZXQgcmVkaXJlY3QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZGlyZWN0XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIHN1YnJlc291cmNlIGludGVncml0eSBtZXRhZGF0YSwgd2hpY2ggaXMgYVxuICAvLyBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIHJlc291cmNlIGJlaW5nIGZldGNoZWQuIEl0cyB2YWx1ZVxuICAvLyBjb25zaXN0cyBvZiBtdWx0aXBsZSBoYXNoZXMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuIFtTUkldXG4gIGdldCBpbnRlZ3JpdHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaW50ZWdyaXR5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGludGVncml0eVxuICAgIC8vIG1ldGFkYXRhLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaW50ZWdyaXR5XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgY2FuIG91dGxpdmUgdGhlXG4gIC8vIGdsb2JhbCBpbiB3aGljaCBpdCB3YXMgY3JlYXRlZC5cbiAgZ2V0IGtlZXBhbGl2ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBrZWVwYWxpdmUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ua2VlcGFsaXZlXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgcmVsb2FkXG4gIC8vIG5hdmlnYXRpb24uXG4gIGdldCBpc1JlbG9hZE5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNSZWxvYWROYXZpZ2F0aW9uIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVsb2FkTmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIGhpc3RvcnlcbiAgLy8gbmF2aWdhdGlvbiAoYS5rLmEuIGJhY2stZm9yd2FyZCBuYXZpZ2F0aW9uKS5cbiAgZ2V0IGlzSGlzdG9yeU5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNIaXN0b3J5TmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5oaXN0b3J5TmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgc2lnbmFsIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhbiBBYm9ydFNpZ25hbFxuICAvLyBvYmplY3QgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQsIGFuZCBpdHNcbiAgLy8gYWJvcnQgZXZlbnQgaGFuZGxlci5cbiAgZ2V0IHNpZ25hbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBzaWduYWwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIHJldHVybiB0aGlzW2tTaWduYWxdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgZ2V0IGR1cGxleCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAnaGFsZidcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXF1ZXN0LlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGJvZHlVbnVzYWJsZSh0aGlzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW51c2FibGUnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXF1ZXN0IGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXF1ZXN0LlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gTGV0IGNsb25lZFJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlcXVlc3Qgb2JqZWN0LFxuICAgIC8vIGdpdmVuIGNsb25lZFJlcXVlc3QsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWwgZm9sbG93IHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsaXN0ID0gZGVwZW5kZW50Q29udHJvbGxlck1hcC5nZXQodGhpcy5zaWduYWwpXG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxpc3QgPSBuZXcgU2V0KClcbiAgICAgICAgZGVwZW5kZW50Q29udHJvbGxlck1hcC5zZXQodGhpcy5zaWduYWwsIGxpc3QpXG4gICAgICB9XG4gICAgICBjb25zdCBhY1JlZiA9IG5ldyBXZWFrUmVmKGFjKVxuICAgICAgbGlzdC5hZGQoYWNSZWYpXG4gICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoXG4gICAgICAgIGFjLnNpZ25hbCxcbiAgICAgICAgYnVpbGRBYm9ydChhY1JlZilcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdC5cbiAgICByZXR1cm4gZnJvbUlubmVyUmVxdWVzdChjbG9uZWRSZXF1ZXN0LCBhYy5zaWduYWwsIGdldEhlYWRlcnNHdWFyZCh0aGlzW2tIZWFkZXJzXSkpXG4gIH1cblxuICBbbm9kZVV0aWwuaW5zcGVjdC5jdXN0b21dIChkZXB0aCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmRlcHRoID09PSBudWxsKSB7XG4gICAgICBvcHRpb25zLmRlcHRoID0gMlxuICAgIH1cblxuICAgIG9wdGlvbnMuY29sb3JzID8/PSB0cnVlXG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICBkZXN0aW5hdGlvbjogdGhpcy5kZXN0aW5hdGlvbixcbiAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgcmVmZXJyZXJQb2xpY3k6IHRoaXMucmVmZXJyZXJQb2xpY3ksXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgcmVkaXJlY3Q6IHRoaXMucmVkaXJlY3QsXG4gICAgICBpbnRlZ3JpdHk6IHRoaXMuaW50ZWdyaXR5LFxuICAgICAga2VlcGFsaXZlOiB0aGlzLmtlZXBhbGl2ZSxcbiAgICAgIGlzUmVsb2FkTmF2aWdhdGlvbjogdGhpcy5pc1JlbG9hZE5hdmlnYXRpb24sXG4gICAgICBpc0hpc3RvcnlOYXZpZ2F0aW9uOiB0aGlzLmlzSGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICBzaWduYWw6IHRoaXMuc2lnbmFsXG4gICAgfVxuXG4gICAgcmV0dXJuIGBSZXF1ZXN0ICR7bm9kZVV0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgcHJvcGVydGllcyl9YFxuICB9XG59XG5cbm1peGluQm9keShSZXF1ZXN0KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHNcbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0IChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBpbml0Lm1ldGhvZCA/PyAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBpbml0LmxvY2FsVVJMc09ubHkgPz8gZmFsc2UsXG4gICAgdW5zYWZlUmVxdWVzdDogaW5pdC51bnNhZmVSZXF1ZXN0ID8/IGZhbHNlLFxuICAgIGJvZHk6IGluaXQuYm9keSA/PyBudWxsLFxuICAgIGNsaWVudDogaW5pdC5jbGllbnQgPz8gbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogaW5pdC5yZXNlcnZlZENsaWVudCA/PyBudWxsLFxuICAgIHJlcGxhY2VzQ2xpZW50SWQ6IGluaXQucmVwbGFjZXNDbGllbnRJZCA/PyAnJyxcbiAgICB3aW5kb3c6IGluaXQud2luZG93ID8/ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogaW5pdC5rZWVwYWxpdmUgPz8gZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6IGluaXQuc2VydmljZVdvcmtlcnMgPz8gJ2FsbCcsXG4gICAgaW5pdGlhdG9yOiBpbml0LmluaXRpYXRvciA/PyAnJyxcbiAgICBkZXN0aW5hdGlvbjogaW5pdC5kZXN0aW5hdGlvbiA/PyAnJyxcbiAgICBwcmlvcml0eTogaW5pdC5wcmlvcml0eSA/PyBudWxsLFxuICAgIG9yaWdpbjogaW5pdC5vcmlnaW4gPz8gJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiBpbml0LnBvbGljeUNvbnRhaW5lciA/PyAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogaW5pdC5yZWZlcnJlciA/PyAnY2xpZW50JyxcbiAgICByZWZlcnJlclBvbGljeTogaW5pdC5yZWZlcnJlclBvbGljeSA/PyAnJyxcbiAgICBtb2RlOiBpbml0Lm1vZGUgPz8gJ25vLWNvcnMnLFxuICAgIHVzZUNPUlNQcmVmbGlnaHRGbGFnOiBpbml0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID8/IGZhbHNlLFxuICAgIGNyZWRlbnRpYWxzOiBpbml0LmNyZWRlbnRpYWxzID8/ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGluaXQudXNlQ3JlZGVudGlhbHMgPz8gZmFsc2UsXG4gICAgY2FjaGU6IGluaXQuY2FjaGUgPz8gJ2RlZmF1bHQnLFxuICAgIHJlZGlyZWN0OiBpbml0LnJlZGlyZWN0ID8/ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogaW5pdC5pbnRlZ3JpdHkgPz8gJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiBpbml0LmNyeXB0b0dyYXBoaWNzTm9uY2VNZXRhZGF0YSA/PyAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogaW5pdC5wYXJzZXJNZXRhZGF0YSA/PyAnJyxcbiAgICByZWxvYWROYXZpZ2F0aW9uOiBpbml0LnJlbG9hZE5hdmlnYXRpb24gPz8gZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGluaXQuaGlzdG9yeU5hdmlnYXRpb24gPz8gZmFsc2UsXG4gICAgdXNlckFjdGl2YXRpb246IGluaXQudXNlckFjdGl2YXRpb24gPz8gZmFsc2UsXG4gICAgdGFpbnRlZE9yaWdpbjogaW5pdC50YWludGVkT3JpZ2luID8/IGZhbHNlLFxuICAgIHJlZGlyZWN0Q291bnQ6IGluaXQucmVkaXJlY3RDb3VudCA/PyAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6IGluaXQucmVzcG9uc2VUYWludGluZyA/PyAnYmFzaWMnLFxuICAgIHByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uOiBpbml0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uID8/IGZhbHNlLFxuICAgIGRvbmU6IGluaXQuZG9uZSA/PyBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd0ZhaWxlZDogaW5pdC50aW1pbmdBbGxvd0ZhaWxlZCA/PyBmYWxzZSxcbiAgICB1cmxMaXN0OiBpbml0LnVybExpc3QsXG4gICAgdXJsOiBpbml0LnVybExpc3RbMF0sXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXF1ZXN0IChyZXF1ZXN0KSB7XG4gIC8vIFRvIGNsb25lIGEgcmVxdWVzdCByZXF1ZXN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gTGV0IG5ld1JlcXVlc3QgYmUgYSBjb3B5IG9mIHJlcXVlc3QsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1JlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IC4uLnJlcXVlc3QsIGJvZHk6IG51bGwgfSlcblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBzZXQgbmV3UmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVxdWVzdFx1MjAxOXMgYm9keS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVxdWVzdC5ib2R5ID0gY2xvbmVCb2R5KG5ld1JlcXVlc3QsIHJlcXVlc3QuYm9keSlcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBuZXdSZXF1ZXN0LlxuICByZXR1cm4gbmV3UmVxdWVzdFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtY3JlYXRlXG4gKiBAcGFyYW0ge2FueX0gaW5uZXJSZXF1ZXN0XG4gKiBAcGFyYW0ge0Fib3J0U2lnbmFsfSBzaWduYWxcbiAqIEBwYXJhbSB7J3JlcXVlc3QnIHwgJ2ltbXV0YWJsZScgfCAncmVxdWVzdC1uby1jb3JzJyB8ICdyZXNwb25zZScgfCAnbm9uZSd9IGd1YXJkXG4gKiBAcmV0dXJucyB7UmVxdWVzdH1cbiAqL1xuZnVuY3Rpb24gZnJvbUlubmVyUmVxdWVzdCAoaW5uZXJSZXF1ZXN0LCBzaWduYWwsIGd1YXJkKSB7XG4gIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChrQ29uc3RydWN0KVxuICByZXF1ZXN0W2tTdGF0ZV0gPSBpbm5lclJlcXVlc3RcbiAgcmVxdWVzdFtrU2lnbmFsXSA9IHNpZ25hbFxuICByZXF1ZXN0W2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gIHNldEhlYWRlcnNMaXN0KHJlcXVlc3Rba0hlYWRlcnNdLCBpbm5lclJlcXVlc3QuaGVhZGVyc0xpc3QpXG4gIHNldEhlYWRlcnNHdWFyZChyZXF1ZXN0W2tIZWFkZXJzXSwgZ3VhcmQpXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlcXVlc3QucHJvdG90eXBlLCB7XG4gIG1ldGhvZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNpZ25hbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZHVwbGV4OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZXN0aW5hdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzSGlzdG9yeU5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzUmVsb2FkTmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2VlcGFsaXZlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbnRlZ3JpdHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNhY2hlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYXR0cmlidXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlclBvbGljeToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1vZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXF1ZXN0JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlcXVlc3RcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RpbmZvXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdChWLCBwcmVmaXgsIGFyZ3VtZW50KVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBwcmVmaXgsIGFyZ3VtZW50KVxufVxuXG53ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEFib3J0U2lnbmFsXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdtZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9LFxuICB7XG4gICAga2V5OiAnYm9keScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdFxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXJQb2xpY3knLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY3lcbiAgICBhbGxvd2VkVmFsdWVzOiByZWZlcnJlclBvbGljeVxuICB9LFxuICB7XG4gICAga2V5OiAnbW9kZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1tb2RlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdE1vZGVcbiAgfSxcbiAge1xuICAgIGtleTogJ2NyZWRlbnRpYWxzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNyZWRlbnRpYWxzXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENyZWRlbnRpYWxzXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYWNoZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjYWNoZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDYWNoZVxuICB9LFxuICB7XG4gICAga2V5OiAncmVkaXJlY3QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0cmVkaXJlY3RcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0UmVkaXJlY3RcbiAgfSxcbiAge1xuICAgIGtleTogJ2ludGVncml0eScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2tlZXBhbGl2ZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzaWduYWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgKHNpZ25hbCkgPT4gd2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwoXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgJ1JlcXVlc3RJbml0JyxcbiAgICAgICAgJ3NpZ25hbCcsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9XG4gICAgICApXG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAnd2luZG93JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9LFxuICB7XG4gICAga2V5OiAnZHVwbGV4JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0RHVwbGV4XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJywgLy8gdW5kaWNpIHNwZWNpZmljIG9wdGlvblxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0geyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCwgZnJvbUlubmVyUmVxdWVzdCwgY2xvbmVSZXF1ZXN0IH1cbiIsICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIG1ha2VSZXNwb25zZSxcbiAgZnJvbUlubmVyUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IFJlcXVlc3QsIGNsb25lUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9yZXF1ZXN0JylcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCdub2RlOnpsaWInKVxuY29uc3Qge1xuICBieXRlc01hdGNoLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIFRBT0NoZWNrLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgaXNCbG9iTGlrZSxcbiAgc2FtZU9yaWdpbixcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8sXG4gIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUsXG4gIGJ1aWxkQ29udGVudFJhbmdlLFxuICBjcmVhdGVJbmZsYXRlLFxuICBleHRyYWN0TWltZVR5cGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUsIGtEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSwgZXh0cmFjdEJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICBzdWJyZXNvdXJjZVNldFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKVxuY29uc3QgeyBSZWFkYWJsZSwgcGlwZWxpbmUsIGZpbmlzaGVkIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGFkZEFib3J0TGlzdGVuZXIsIGlzRXJyb3JlZCwgaXNSZWFkYWJsZSwgYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZGF0YVVSTFByb2Nlc3Nvciwgc2VyaWFsaXplQU1pbWVUeXBlLCBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vLi4vZ2xvYmFsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IEdFVF9PUl9IRUFEID0gWydHRVQnLCAnSEVBRCddXG5cbmNvbnN0IGRlZmF1bHRVc2VyQWdlbnQgPSB0eXBlb2YgX19VTkRJQ0lfSVNfTk9ERV9fICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXNidWlsZERldGVjdGlvbiAhPT0gJ3VuZGVmaW5lZCdcbiAgPyAnbm9kZSdcbiAgOiAndW5kaWNpJ1xuXG4vKiogQHR5cGUge2ltcG9ydCgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTH0gKi9cbmxldCByZXNvbHZlT2JqZWN0VVJMXG5cbmNsYXNzIEZldGNoIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2hlcikge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsXG4gICAgdGhpcy5kdW1wID0gZmFsc2VcbiAgICB0aGlzLnN0YXRlID0gJ29uZ29pbmcnXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZldGNoRG9uZSAocmVzcG9uc2UpIHtcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHVuZGVmaW5lZCkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdnbG9iYWxUaGlzLmZldGNoJylcblxuICAvLyAxLiBMZXQgcCBiZSBhIG5ldyBwcm9taXNlLlxuICBsZXQgcCA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZlxuICAvLyBSZXF1ZXN0IGFzIGNvbnN0cnVjdG9yIHdpdGggaW5wdXQgYW5kIGluaXQgYXMgYXJndW1lbnRzLiBJZiB0aGlzIHRocm93c1xuICAvLyBhbiBleGNlcHRpb24sIHJlamVjdCBwIHdpdGggaXQgYW5kIHJldHVybiBwLlxuICBsZXQgcmVxdWVzdE9iamVjdFxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgcC5yZWplY3QoZSlcbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyAzLiBMZXQgcmVxdWVzdCBiZSByZXF1ZXN0T2JqZWN0XHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNC4gSWYgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICBpZiAocmVxdWVzdE9iamVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgIC8vIDEuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCBudWxsLCBhbmRcbiAgICAvLyAgICByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIG51bGwsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgIC8vIDIuIFJldHVybiBwLlxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDUuIExldCBnbG9iYWxPYmplY3QgYmUgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICBjb25zdCBnbG9iYWxPYmplY3QgPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAvLyA2LiBJZiBnbG9iYWxPYmplY3QgaXMgYSBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgb2JqZWN0LCB0aGVuIHNldFxuICAvLyByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgaWYgKGdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUnKSB7XG4gICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICB9XG5cbiAgLy8gNy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIG51bGwuXG4gIGxldCByZXNwb25zZU9iamVjdCA9IG51bGxcblxuICAvLyA4LiBMZXQgcmVsZXZhbnRSZWFsbSBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cblxuICAvLyA5LiBMZXQgbG9jYWxseUFib3J0ZWQgYmUgZmFsc2UuXG4gIGxldCBsb2NhbGx5QWJvcnRlZCA9IGZhbHNlXG5cbiAgLy8gMTAuIExldCBjb250cm9sbGVyIGJlIG51bGwuXG4gIGxldCBjb250cm9sbGVyID0gbnVsbFxuXG4gIC8vIDExLiBBZGQgdGhlIGZvbGxvd2luZyBhYm9ydCBzdGVwcyB0byByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWw6XG4gIGFkZEFib3J0TGlzdGVuZXIoXG4gICAgcmVxdWVzdE9iamVjdC5zaWduYWwsXG4gICAgKCkgPT4ge1xuICAgICAgLy8gMS4gU2V0IGxvY2FsbHlBYm9ydGVkIHRvIHRydWUuXG4gICAgICBsb2NhbGx5QWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gQXNzZXJ0OiBjb250cm9sbGVyIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT0gbnVsbClcblxuICAgICAgLy8gMy4gQWJvcnQgY29udHJvbGxlciB3aXRoIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgY29udHJvbGxlci5hYm9ydChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAgIGNvbnN0IHJlYWxSZXNwb25zZSA9IHJlc3BvbnNlT2JqZWN0Py5kZXJlZigpXG5cbiAgICAgIC8vIDQuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCxcbiAgICAgIC8vICAgIGFuZCByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVhbFJlc3BvbnNlLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICAvLyBzZWUgZnVuY3Rpb24gaGFuZGxlRmV0Y2hEb25lXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNlXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcsIHsgY2F1c2U6IHJlc3BvbnNlLmVycm9yIH0pKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFdlYWtSZWYoZnJvbUlubmVyUmVzcG9uc2UocmVzcG9uc2UsICdpbW11dGFibGUnKSlcblxuICAgIC8vIDUuIFJlc29sdmUgcCB3aXRoIHJlc3BvbnNlT2JqZWN0LlxuICAgIHAucmVzb2x2ZShyZXNwb25zZU9iamVjdC5kZXJlZigpKVxuICAgIHAgPSBudWxsXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IHJlcXVlc3RPYmplY3Rba0Rpc3BhdGNoZXJdIC8vIHVuZGljaVxuICB9KVxuXG4gIC8vIDE0LiBSZXR1cm4gcC5cbiAgcmV0dXJuIHAucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtYW5kLXJlcG9ydC10aW1pbmdcbmZ1bmN0aW9uIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nIChyZXNwb25zZSwgaW5pdGlhdG9yVHlwZSA9ICdvdGhlcicpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiYgcmVzcG9uc2UuYWJvcnRlZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIG51bGwgb3IgZW1wdHksIHRoZW4gcmV0dXJuLlxuICBpZiAoIXJlc3BvbnNlLnVybExpc3Q/Lmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMy4gTGV0IG9yaWdpbmFsVVJMIGJlIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdFswXS5cbiAgY29uc3Qgb3JpZ2luYWxVUkwgPSByZXNwb25zZS51cmxMaXN0WzBdXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBsZXQgdGltaW5nSW5mbyA9IHJlc3BvbnNlLnRpbWluZ0luZm9cblxuICAvLyA1LiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gIGxldCBjYWNoZVN0YXRlID0gcmVzcG9uc2UuY2FjaGVTdGF0ZVxuXG4gIC8vIDYuIElmIG9yaWdpbmFsVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShvcmlnaW5hbFVSTCkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDcuIElmIHRpbWluZ0luZm8gaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmICh0aW1pbmdJbmZvID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA4LiBJZiByZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnIGlzIG5vdCBzZXQsIHRoZW46XG4gIGlmICghcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQpIHtcbiAgICAvLyAgMS4gU2V0IHRpbWluZ0luZm8gdG8gYSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmcgaW5mbyBmb3IgdGltaW5nSW5mby5cbiAgICB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcblxuICAgIC8vICAyLiBTZXQgY2FjaGVTdGF0ZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIGNhY2hlU3RhdGUgPSAnJ1xuICB9XG5cbiAgLy8gOS4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGVuZCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZVxuICAvLyBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIC8vIFRPRE86IGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eT9cbiAgdGltaW5nSW5mby5lbmRUaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoKVxuXG4gIC8vIDEwLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTEuIE1hcmsgcmVzb3VyY2UgdGltaW5nIGZvciB0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSxcbiAgLy8gZ2xvYmFsLCBhbmQgY2FjaGVTdGF0ZS5cbiAgbWFya1Jlc291cmNlVGltaW5nKFxuICAgIHRpbWluZ0luZm8sXG4gICAgb3JpZ2luYWxVUkwuaHJlZixcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuY29uc3QgbWFya1Jlc291cmNlVGltaW5nID0gcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhYm9ydC1mZXRjaFxuZnVuY3Rpb24gYWJvcnRGZXRjaCAocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGVycm9yKSB7XG4gIC8vIDEuIFJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIGlmIChwKSB7XG4gICAgLy8gV2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoZSBwcm9taXNlIGF0IHRoaXMgc3RhZ2VcbiAgICBwLnJlamVjdChlcnJvcilcbiAgfVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGNhbmNlbCByZXF1ZXN0XHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlcXVlc3QuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlcXVlc3QuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlT2JqZWN0IGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2VPYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZS5cbiAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNS4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXNwb25zZS5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVzcG9uc2UuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2hpbmdcbmZ1bmN0aW9uIGZldGNoaW5nICh7XG4gIHJlcXVlc3QsXG4gIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlLFxuICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICB1c2VQYXJhbGxlbFF1ZXVlID0gZmFsc2UsXG4gIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG59KSB7XG4gIC8vIEVuc3VyZSB0aGF0IHRoZSBkaXNwYXRjaGVyIGlzIHNldCBhY2NvcmRpbmdseVxuICBhc3NlcnQoZGlzcGF0Y2hlcilcblxuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVudFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbiAgY29uc3QgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgIHN0YXJ0VGltZTogY3VycmVudFRpbWVcbiAgfSlcblxuICAvLyA2LiBMZXQgZmV0Y2hQYXJhbXMgYmUgYSBuZXcgZmV0Y2ggcGFyYW1zIHdob3NlXG4gIC8vIHJlcXVlc3QgaXMgcmVxdWVzdCxcbiAgLy8gdGltaW5nIGluZm8gaXMgdGltaW5nSW5mbyxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGJvZHkgY2h1bmsgbGVuZ3RoIGlzIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgaXMgcHJvY2Vzc1Jlc3BvbnNlLFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIC8vIHRhc2sgZGVzdGluYXRpb24gaXMgdGFza0Rlc3RpbmF0aW9uLFxuICAvLyBhbmQgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkgaXMgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGZldGNoUGFyYW1zID0ge1xuICAgIGNvbnRyb2xsZXI6IG5ldyBGZXRjaChkaXNwYXRjaGVyKSxcbiAgICByZXF1ZXN0LFxuICAgIHRpbWluZ0luZm8sXG4gICAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gICAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgICB0YXNrRGVzdGluYXRpb24sXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvXG4gIC8vICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAvLyBOT1RFOiBTaW5jZSBmZXRjaGluZyBpcyBvbmx5IGNhbGxlZCBmcm9tIGZldGNoLCBib2R5IHNob3VsZCBhbHJlYWR5IGJlXG4gIC8vIGV4dHJhY3RlZC5cbiAgYXNzZXJ0KCFyZXF1ZXN0LmJvZHkgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSlcblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudCwgaWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0IGlzIGEgV2luZG93IG9iamVjdDsgb3RoZXJ3aXNlXG4gIC8vIFwibm8td2luZG93XCIuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC53aW5kb3cgPVxuICAgICAgcmVxdWVzdC5jbGllbnQ/Lmdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdXaW5kb3cnXG4gICAgICAgID8gcmVxdWVzdC5jbGllbnRcbiAgICAgICAgOiAnbm8td2luZG93J1xuICB9XG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyBjbGllbnRcdTIwMTlzIG9yaWdpbi5cbiAgaWYgKHJlcXVlc3Qub3JpZ2luID09PSAnY2xpZW50Jykge1xuICAgIHJlcXVlc3Qub3JpZ2luID0gcmVxdWVzdC5jbGllbnQub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnLCB0cnVlKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUsIHRydWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScsIHRydWUpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJywgdHJ1ZSlcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lclx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3RcdTIwMTlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3RcdTIwMTlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNlXHUyMDE5cyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJywgdHJ1ZSlcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgXHUwMEFCIChgQ29udGVudC1UeXBlYCwgYHRleHQvaHRtbDtjaGFyc2V0PXV0Zi04YCkgXHUwMEJCLFxuICAgICAgLy8gYW5kIGJvZHkgaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UgYXMgYSBib2R5LlxuXG4gICAgICAvLyBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Fib3V0IHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkJykpXG4gICAgfVxuICAgIGNhc2UgJ2Jsb2I6Jzoge1xuICAgICAgaWYgKCFyZXNvbHZlT2JqZWN0VVJMKSB7XG4gICAgICAgIHJlc29sdmVPYmplY3RVUkwgPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpLnJlc29sdmVPYmplY3RVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMS4gTGV0IGJsb2JVUkxFbnRyeSBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgYmxvYiBVUkwgZW50cnkuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnkgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iLzdiMGViYWNjYzYyYjU2NmExOTY1Mzk2ZTViZTdiYjJiYzA2Zjg0MWYvRmlsZUFQSS91cmwvcmVzb3VyY2VzL2ZldGNoLXRlc3RzLmpzI0w1Mi1MNTZcbiAgICAgIC8vIEJ1ZmZlci5yZXNvbHZlT2JqZWN0VVJMIGRvZXMgbm90IGlnbm9yZSBVUkwgcXVlcmllcy5cbiAgICAgIGlmIChibG9iVVJMRW50cnkuc2VhcmNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJykpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJsb2IgPSByZXNvbHZlT2JqZWN0VVJMKGJsb2JVUkxFbnRyeS50b1N0cmluZygpKVxuXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgLCBibG9iVVJMRW50cnkgaXMgbnVsbCwgb3IgYmxvYlVSTEVudHJ5XHUyMDE5c1xuICAgICAgLy8gICAgb2JqZWN0IGlzIG5vdCBhIEJsb2Igb2JqZWN0LCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnIHx8ICFpc0Jsb2JMaWtlKGJsb2IpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJsb2IgYmUgYmxvYlVSTEVudHJ5XHUyMDE5cyBvYmplY3QuXG4gICAgICAvLyBOb3RlOiBkb25lIGFib3ZlXG5cbiAgICAgIC8vIDQuIExldCByZXNwb25zZSBiZSBhIG5ldyByZXNwb25zZS5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKClcblxuICAgICAgLy8gNS4gTGV0IGZ1bGxMZW5ndGggYmUgYmxvYlx1MjAxOXMgc2l6ZS5cbiAgICAgIGNvbnN0IGZ1bGxMZW5ndGggPSBibG9iLnNpemVcblxuICAgICAgLy8gNi4gTGV0IHNlcmlhbGl6ZWRGdWxsTGVuZ3RoIGJlIGZ1bGxMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRGdWxsTGVuZ3RoID0gaXNvbW9ycGhpY0VuY29kZShgJHtmdWxsTGVuZ3RofWApXG5cbiAgICAgIC8vIDcuIExldCB0eXBlIGJlIGJsb2JcdTIwMTlzIHR5cGUuXG4gICAgICBjb25zdCB0eXBlID0gYmxvYi50eXBlXG5cbiAgICAgIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYDpcbiAgICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnLCB0cnVlKSkge1xuICAgICAgICAvLyAxLiBMZXQgYm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgYmxvYi5cbiAgICAgICAgLy8gTm90ZTogaW4gdGhlIEZpbGVBUEkgYSBibG9iIFwib2JqZWN0XCIgaXMgYSBCbG9iICpvciogYSBNZWRpYVNvdXJjZS5cbiAgICAgICAgLy8gSW4gbm9kZSwgdGhpcyBjYW4gb25seSBldmVyIGJlIGEgQmxvYi4gVGhlcmVmb3JlIHdlIGNhbiBzYWZlbHlcbiAgICAgICAgLy8gdXNlIGV4dHJhY3RCb2R5IGRpcmVjdGx5LlxuICAgICAgICBjb25zdCBib2R5V2l0aFR5cGUgPSBleHRyYWN0Qm9keShibG9iKVxuXG4gICAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UgdG8gYE9LYC5cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dCA9ICdPSydcblxuICAgICAgICAvLyAzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYm9keVdpdGhUeXBlXHUyMDE5cyBib2R5LlxuICAgICAgICByZXNwb25zZS5ib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCB0byBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIHNlcmlhbGl6ZWRGdWxsTGVuZ3RoKSwgKGBDb250ZW50LVR5cGVgLCB0eXBlKSBcdTAwQkIuXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1sZW5ndGgnLCBzZXJpYWxpemVkRnVsbExlbmd0aCwgdHJ1ZSlcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVyc0xpc3Quc2V0KCdjb250ZW50LXR5cGUnLCB0eXBlLCB0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgICAgICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gMi4gTGV0IHJhbmdlSGVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBgUmFuZ2VgIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAgIGNvbnN0IHJhbmdlSGVhZGVyID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoJ3JhbmdlJywgdHJ1ZSlcblxuICAgICAgICAvLyAzLiBMZXQgcmFuZ2VWYWx1ZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBzaW5nbGUgcmFuZ2UgaGVhZGVyIHZhbHVlIGdpdmVuIHJhbmdlSGVhZGVyIGFuZCB0cnVlLlxuICAgICAgICBjb25zdCByYW5nZVZhbHVlID0gc2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZShyYW5nZUhlYWRlciwgdHJ1ZSlcblxuICAgICAgICAvLyA0LiBJZiByYW5nZVZhbHVlIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgaWYgKHJhbmdlVmFsdWUgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignZmFpbGVkIHRvIGZldGNoIHRoZSBkYXRhIFVSTCcpKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gTGV0IChyYW5nZVN0YXJ0LCByYW5nZUVuZCkgYmUgcmFuZ2VWYWx1ZS5cbiAgICAgICAgbGV0IHsgcmFuZ2VTdGFydFZhbHVlOiByYW5nZVN0YXJ0LCByYW5nZUVuZFZhbHVlOiByYW5nZUVuZCB9ID0gcmFuZ2VWYWx1ZVxuXG4gICAgICAgIC8vIDYuIElmIHJhbmdlU3RhcnQgaXMgbnVsbDpcbiAgICAgICAgLy8gNy4gT3RoZXJ3aXNlOlxuICAgICAgICBpZiAocmFuZ2VTdGFydCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIDEuIFNldCByYW5nZVN0YXJ0IHRvIGZ1bGxMZW5ndGggXHUyMjEyIHJhbmdlRW5kLlxuICAgICAgICAgIHJhbmdlU3RhcnQgPSBmdWxsTGVuZ3RoIC0gcmFuZ2VFbmRcblxuICAgICAgICAgIC8vIDIuIFNldCByYW5nZUVuZCB0byByYW5nZVN0YXJ0ICsgcmFuZ2VFbmQgXHUyMjEyIDEuXG4gICAgICAgICAgcmFuZ2VFbmQgPSByYW5nZVN0YXJ0ICsgcmFuZ2VFbmQgLSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gMS4gSWYgcmFuZ2VTdGFydCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gZnVsbExlbmd0aCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICAgIGlmIChyYW5nZVN0YXJ0ID49IGZ1bGxMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignUmFuZ2Ugc3RhcnQgaXMgZ3JlYXRlciB0aGFuIHRoZSBibG9iXFwncyBzaXplLicpKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuIElmIHJhbmdlRW5kIGlzIG51bGwgb3IgcmFuZ2VFbmQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGZ1bGxMZW5ndGgsIHRoZW4gc2V0XG4gICAgICAgICAgLy8gICAgcmFuZ2VFbmQgdG8gZnVsbExlbmd0aCBcdTIyMTIgMS5cbiAgICAgICAgICBpZiAocmFuZ2VFbmQgPT09IG51bGwgfHwgcmFuZ2VFbmQgPj0gZnVsbExlbmd0aCkge1xuICAgICAgICAgICAgcmFuZ2VFbmQgPSBmdWxsTGVuZ3RoIC0gMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDguIExldCBzbGljZWRCbG9iIGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgc2xpY2UgYmxvYiBnaXZlbiBibG9iLCByYW5nZVN0YXJ0LFxuICAgICAgICAvLyAgICByYW5nZUVuZCArIDEsIGFuZCB0eXBlLlxuICAgICAgICBjb25zdCBzbGljZWRCbG9iID0gYmxvYi5zbGljZShyYW5nZVN0YXJ0LCByYW5nZUVuZCwgdHlwZSlcblxuICAgICAgICAvLyA5LiBMZXQgc2xpY2VkQm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3Rpbmcgc2xpY2VkQmxvYi5cbiAgICAgICAgLy8gTm90ZTogc2FtZSByZWFzb24gYXMgbWVudGlvbmVkIGFib3ZlIGFzIHRvIHdoeSB3ZSB1c2UgZXh0cmFjdEJvZHlcbiAgICAgICAgY29uc3Qgc2xpY2VkQm9keVdpdGhUeXBlID0gZXh0cmFjdEJvZHkoc2xpY2VkQmxvYilcblxuICAgICAgICAvLyAxMC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHNsaWNlZEJvZHlXaXRoVHlwZVx1MjAxOXMgYm9keS5cbiAgICAgICAgcmVzcG9uc2UuYm9keSA9IHNsaWNlZEJvZHlXaXRoVHlwZVswXVxuXG4gICAgICAgIC8vIDExLiBMZXQgc2VyaWFsaXplZFNsaWNlZExlbmd0aCBiZSBzbGljZWRCbG9iXHUyMDE5cyBzaXplLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRTbGljZWRMZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke3NsaWNlZEJsb2Iuc2l6ZX1gKVxuXG4gICAgICAgIC8vIDEyLiBMZXQgY29udGVudFJhbmdlIGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgYnVpbGQgYSBjb250ZW50IHJhbmdlIGdpdmVuIHJhbmdlU3RhcnQsXG4gICAgICAgIC8vICAgICByYW5nZUVuZCwgYW5kIGZ1bGxMZW5ndGguXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSYW5nZSA9IGJ1aWxkQ29udGVudFJhbmdlKHJhbmdlU3RhcnQsIHJhbmdlRW5kLCBmdWxsTGVuZ3RoKVxuXG4gICAgICAgIC8vIDEzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyB0byAyMDYuXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cyA9IDIwNlxuXG4gICAgICAgIC8vIDE0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlIHRvIGBQYXJ0aWFsIENvbnRlbnRgLlxuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0ID0gJ1BhcnRpYWwgQ29udGVudCdcblxuICAgICAgICAvLyAxNS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCB0byBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIHNlcmlhbGl6ZWRTbGljZWRMZW5ndGgpLFxuICAgICAgICAvLyAgICAgKGBDb250ZW50LVR5cGVgLCB0eXBlKSwgKGBDb250ZW50LVJhbmdlYCwgY29udGVudFJhbmdlKSBcdTAwQkIuXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1sZW5ndGgnLCBzZXJpYWxpemVkU2xpY2VkTGVuZ3RoLCB0cnVlKVxuICAgICAgICByZXNwb25zZS5oZWFkZXJzTGlzdC5zZXQoJ2NvbnRlbnQtdHlwZScsIHR5cGUsIHRydWUpXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1yYW5nZScsIGNvbnRlbnRSYW5nZSwgdHJ1ZSlcbiAgICAgIH1cblxuICAgICAgLy8gMTAuIFJldHVybiByZXNwb25zZS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgfVxuICAgIGNhc2UgJ2RhdGE6Jzoge1xuICAgICAgLy8gMS4gTGV0IGRhdGFVUkxTdHJ1Y3QgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZVxuICAgICAgLy8gICAgZGF0YTogVVJMIHByb2Nlc3NvciBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgICAgY29uc3QgZGF0YVVSTFN0cnVjdCA9IGRhdGFVUkxQcm9jZXNzb3IoY3VycmVudFVSTClcblxuICAgICAgLy8gMi4gSWYgZGF0YVVSTFN0cnVjdCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhXG4gICAgICAvLyAgICBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKGRhdGFVUkxTdHJ1Y3QgPT09ICdmYWlsdXJlJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCB0aGUgZGF0YSBVUkwnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IG1pbWVUeXBlIGJlIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIE1JTUUgdHlwZSwgc2VyaWFsaXplZC5cbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKGRhdGFVUkxTdHJ1Y3QubWltZVR5cGUpXG5cbiAgICAgIC8vIDQuIFJldHVybiBhIHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgXHUwMEJCLFxuICAgICAgLy8gICAgYW5kIGJvZHkgaXMgZGF0YVVSTFN0cnVjdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogbWltZVR5cGUgfV1cbiAgICAgICAgXSxcbiAgICAgICAgYm9keTogc2FmZWx5RXh0cmFjdEJvZHkoZGF0YVVSTFN0cnVjdC5ib2R5KVswXVxuICAgICAgfSkpXG4gICAgfVxuICAgIGNhc2UgJ2ZpbGU6Jzoge1xuICAgICAgLy8gRm9yIG5vdywgdW5mb3J0dW5hdGUgYXMgaXQgaXMsIGZpbGUgVVJMcyBhcmUgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci5cbiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ25vdCBpbXBsZW1lbnRlZC4uLiB5ZXQuLi4nKSlcbiAgICB9XG4gICAgY2FzZSAnaHR0cDonOlxuICAgIGNhc2UgJ2h0dHBzOic6IHtcbiAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cblxuICAgICAgcmV0dXJuIGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCd1bmtub3duIHNjaGVtZScpKVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbmFsaXplUmVzcG9uc2UgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gIC8vIDIsIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgaXMgbm90IG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaFxuICAvLyB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGdpdmVuIHJlc3BvbnNlLCB3aXRoXG4gIC8vIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZShyZXNwb25zZSkpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWZpbmFsZVxuZnVuY3Rpb24gZmV0Y2hGaW5hbGUgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgYSBzZWN1cmUgY29udGV4dCxcbiAgLy8gICAgdGhlbiBzZXQgdGltaW5nSW5mb1x1MjAxOXMgc2VydmVyLXRpbWluZyBoZWFkZXJzIHRvIHRoZSByZXN1bHQgb2YgZ2V0dGluZywgZGVjb2RpbmcsIGFuZCBzcGxpdHRpbmdcbiAgLy8gICAgYFNlcnZlci1UaW1pbmdgIGZyb20gcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDMuIExldCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgYmUgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgIC8vIDEuIExldCB1bnNhZmVFbmRUaW1lIGJlIHRoZSB1bnNhZmUgc2hhcmVkIGN1cnJlbnQgdGltZS5cbiAgICBjb25zdCB1bnNhZmVFbmRUaW1lID0gRGF0ZS5ub3coKSAvLyA/XG5cbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24gaXMgXCJkb2N1bWVudFwiLCB0aGVuIHNldCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlclx1MjAxOXNcbiAgICAvLyAgICBmdWxsIHRpbWluZyBpbmZvIHRvIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucmVxdWVzdC5kZXN0aW5hdGlvbiA9PT0gJ2RvY3VtZW50Jykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5mdWxsVGltaW5nSW5mbyA9IHRpbWluZ0luZm9cbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXJcdTIwMTlzIHJlcG9ydCB0aW1pbmcgc3RlcHMgdG8gdGhlIGZvbGxvd2luZyBzdGVwcyBnaXZlbiBhIGdsb2JhbCBvYmplY3QgZ2xvYmFsOlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVwb3J0VGltaW5nU3RlcHMgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBlbmQgdGltZSB0byB0aGUgcmVsYXRpdmUgaGlnaCByZXNvbHV0aW9uIHRpbWUgZ2l2ZW4gdW5zYWZlRW5kVGltZSBhbmQgZ2xvYmFsLlxuICAgICAgdGltaW5nSW5mby5lbmRUaW1lID0gdW5zYWZlRW5kVGltZVxuXG4gICAgICAvLyAzLiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gICAgICBsZXQgY2FjaGVTdGF0ZSA9IHJlc3BvbnNlLmNhY2hlU3RhdGVcblxuICAgICAgLy8gNC4gTGV0IGJvZHlJbmZvIGJlIHJlc3BvbnNlXHUyMDE5cyBib2R5IGluZm8uXG4gICAgICBjb25zdCBib2R5SW5mbyA9IHJlc3BvbnNlLmJvZHlJbmZvXG5cbiAgICAgIC8vIDUuIElmIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbiBzZXQgdGltaW5nSW5mbyB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuXG4gICAgICAvLyAgICBvcGFxdWUgdGltaW5nIGluZm8gZm9yIHRpbWluZ0luZm8gYW5kIHNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICBpZiAoIXJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkKSB7XG4gICAgICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHRpbWluZ0luZm8pXG5cbiAgICAgICAgY2FjaGVTdGF0ZSA9ICcnXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIExldCByZXNwb25zZVN0YXR1cyBiZSAwLlxuICAgICAgbGV0IHJlc3BvbnNlU3RhdHVzID0gMFxuXG4gICAgICAvLyA3LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBub3QgXCJuYXZpZ2F0ZVwiIG9yIHJlc3BvbnNlXHUyMDE5cyBoYXMtY3Jvc3Mtb3JpZ2luLXJlZGlyZWN0cyBpcyBmYWxzZTpcbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0Lm1vZGUgIT09ICduYXZpZ2F0b3InIHx8ICFyZXNwb25zZS5oYXNDcm9zc09yaWdpblJlZGlyZWN0cykge1xuICAgICAgICAvLyAxLiBTZXQgcmVzcG9uc2VTdGF0dXMgdG8gcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgICAgICAgcmVzcG9uc2VTdGF0dXMgPSByZXNwb25zZS5zdGF0dXNcblxuICAgICAgICAvLyAyLiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGEgTUlNRSB0eXBlIGZyb20gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgICBjb25zdCBtaW1lVHlwZSA9IGV4dHJhY3RNaW1lVHlwZShyZXNwb25zZS5oZWFkZXJzTGlzdClcblxuICAgICAgICAvLyAzLiBJZiBtaW1lVHlwZSBpcyBub3QgZmFpbHVyZSwgdGhlbiBzZXQgYm9keUluZm9cdTIwMTlzIGNvbnRlbnQgdHlwZSB0byB0aGUgcmVzdWx0IG9mIG1pbmltaXppbmcgYSBzdXBwb3J0ZWQgTUlNRSB0eXBlIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBpZiAobWltZVR5cGUgIT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIGJvZHlJbmZvLmNvbnRlbnRUeXBlID0gbWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZShtaW1lVHlwZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA4LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIHR5cGUgaXMgbm9uLW51bGwsIHRoZW4gbWFyayByZXNvdXJjZSB0aW1pbmcgZ2l2ZW4gdGltaW5nSW5mbyxcbiAgICAgIC8vICAgIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwsIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgdHlwZSwgZ2xvYmFsLCBjYWNoZVN0YXRlLCBib2R5SW5mbyxcbiAgICAgIC8vICAgIGFuZCByZXNwb25zZVN0YXR1cy5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUgIT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiB1cGRhdGUgbWFya3Jlc291cmNldGltaW5nXG4gICAgICAgIG1hcmtSZXNvdXJjZVRpbWluZyh0aW1pbmdJbmZvLCBmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybC5ocmVmLCBmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUsIGJvZHlJbmZvLCByZXNwb25zZVN0YXR1cylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2sgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgICAgIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAgICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzXG4gICAgICAvLyAgICByZXNwb25zZSBlbmQtb2YtYm9keSBnaXZlbiByZXNwb25zZS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgIT0gbnVsbCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkocmVzcG9uc2UpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIHR5cGUgaXMgbm9uLW51bGwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzXG4gICAgICAvLyAgICBnbG9iYWwgb2JqZWN0IGlzIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLCB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlclx1MjAxOXMgcmVwb3J0XG4gICAgICAvLyAgICB0aW1pbmcgc3RlcHMgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUgIT0gbnVsbCkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlcG9ydFRpbWluZ1N0ZXBzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBRdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2sgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2soKSlcbiAgfVxuXG4gIC8vIDQuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGlzIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vICAgIHByb2Nlc3MgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZShyZXNwb25zZSlcbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSA9IG51bGxcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcjsgb3RoZXJ3aXNlIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZS5cbiAgY29uc3QgaW50ZXJuYWxSZXNwb25zZSA9IHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgPyByZXNwb25zZSA6IChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlID8/IHJlc3BvbnNlKVxuXG4gIC8vIDYuIElmIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAvLyA3LiBPdGhlcndpc2U6XG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gbWNvbGxpbmE6IGFsbCB0aGUgZm9sbG93aW5nIHN0ZXBzIG9mIHRoZSBzcGVjcyBhcmUgc2tpcHBlZC5cbiAgICAvLyBUaGUgaW50ZXJuYWwgdHJhbnNmb3JtIHN0cmVhbSBpcyBub3QgbmVlZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzMwOTMjaXNzdWVjb21tZW50LTIwNTAxOTg1NDFcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgVHJhbnNmb3JtU3RyZWFtLlxuICAgIC8vIDIuIExldCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gd2hpY2gsIGdpdmVuIGNodW5rLCBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgLy8gMy4gU2V0IHVwIHRyYW5zZm9ybVN0cmVhbSB3aXRoIHRyYW5zZm9ybUFsZ29yaXRobSBzZXQgdG8gaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYW5kIGZsdXNoQWxnb3JpdGhtXG4gICAgLy8gICAgc2V0IHRvIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgICAvLyA0LiBTZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keVx1MjAxOXMgc3RyZWFtIHRvIHRoZSByZXN1bHQgb2YgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keVx1MjAxOXMgc3RyZWFtIHBpcGVkIHRocm91Z2ggdHJhbnNmb3JtU3RyZWFtLlxuXG4gICAgZmluaXNoZWQoaW50ZXJuYWxSZXNwb25zZS5ib2R5LnN0cmVhbSwgKCkgPT4ge1xuICAgICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdFx1MjAxOXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2VcdTIwMTlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLCByZXF1ZXN0XHUyMDE5cyBjbGllbnQsIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3kodW5kZWZpbmVkLCBmYWxzZSlcbiAgICB9XG5cbiAgICAvLyAyLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZTpcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigndW5leHBlY3RlZCByZWRpcmVjdCcpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnbWFudWFsJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbFxuICAgICAgLy8gcmVzcG9uc2UgaXMgYWN0dWFsUmVzcG9uc2UuXG4gICAgICAvLyBOT1RFKHNwZWMpOiBPbiB0aGUgd2ViIHRoaXMgd291bGQgcmV0dXJuIGFuIGBvcGFxdWVyZWRpcmVjdGAgcmVzcG9uc2UsXG4gICAgICAvLyBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2VydmVyIHNpZGUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzExOTMuXG4gICAgICByZXNwb25zZSA9IGFjdHVhbFJlc3BvbnNlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLXJlZGlyZWN0IGZldGNoIGdpdmVuXG4gICAgICAvLyBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBSZWRpcmVjdEZldGNoKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDkuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcmVkaXJlY3QtZmV0Y2hcbmZ1bmN0aW9uIGh0dHBSZWRpcmVjdEZldGNoIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZCByZXNwb25zZSxcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGNvbnN0IGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgID8gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgIDogcmVzcG9uc2VcblxuICAvLyAzLiBMZXQgbG9jYXRpb25VUkwgYmUgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIGxvY2F0aW9uIFVSTCBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gIC8vIFVSTFx1MjAxOXMgZnJhZ21lbnQuXG4gIGxldCBsb2NhdGlvblVSTFxuXG4gIHRyeSB7XG4gICAgbG9jYXRpb25VUkwgPSByZXNwb25zZUxvY2F0aW9uVVJMKFxuICAgICAgYWN0dWFsUmVzcG9uc2UsXG4gICAgICByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KS5oYXNoXG4gICAgKVxuXG4gICAgLy8gNC4gSWYgbG9jYXRpb25VUkwgaXMgbnVsbCwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gICAgaWYgKGxvY2F0aW9uVVJMID09IG51bGwpIHtcbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gNS4gSWYgbG9jYXRpb25VUkwgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICB9XG5cbiAgLy8gNi4gSWYgbG9jYXRpb25VUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyBlcnJvci5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShsb2NhdGlvblVSTCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJykpXG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBjb3VudCBpcyAyMCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAyMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigncmVkaXJlY3QgY291bnQgZXhjZWVkZWQnKSlcbiAgfVxuXG4gIC8vIDguIEluY3JlYXNlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGJ5IDEuXG4gIHJlcXVlc3QucmVkaXJlY3RDb3VudCArPSAxXG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcImNvcnNcIiwgbG9jYXRpb25VUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIGFuZFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiByZXR1cm5cbiAgLy8gIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QubW9kZSA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKSAmJlxuICAgICFzYW1lT3JpZ2luKHJlcXVlc3QsIGxvY2F0aW9uVVJMKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Nyb3NzIG9yaWdpbiBub3QgYWxsb3dlZCBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJykpXG4gIH1cblxuICAvLyAxMC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGxvY2F0aW9uVVJMIGluY2x1ZGVzXG4gIC8vIGNyZWRlbnRpYWxzLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgJ1VSTCBjYW5ub3QgY29udGFpbiBjcmVkZW50aWFscyBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJ1xuICAgICkpXG4gIH1cblxuICAvLyAxMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIGFjdHVhbFJlc3BvbnNlLnN0YXR1cyAhPT0gMzAzICYmXG4gICAgcmVxdWVzdC5ib2R5ICE9IG51bGwgJiZcbiAgICByZXF1ZXN0LmJvZHkuc291cmNlID09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCkpXG4gIH1cblxuICAvLyAxMi4gSWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZVxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAxIG9yIDMwMiBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYFxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAzIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgIG9yIGBIRUFEYFxuICBpZiAoXG4gICAgKFszMDEsIDMwMl0uaW5jbHVkZXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB8fFxuICAgIChhY3R1YWxSZXNwb25zZS5zdGF0dXMgPT09IDMwMyAmJlxuICAgICAgIUdFVF9PUl9IRUFELmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSlcbiAgKSB7XG4gICAgLy8gdGhlbjpcbiAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIGBHRVRgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIG51bGwuXG4gICAgcmVxdWVzdC5tZXRob2QgPSAnR0VUJ1xuICAgIHJlcXVlc3QuYm9keSA9IG51bGxcblxuICAgIC8vIDIuIEZvciBlYWNoIGhlYWRlck5hbWUgb2YgcmVxdWVzdC1ib2R5LWhlYWRlciBuYW1lLCBkZWxldGUgaGVhZGVyTmFtZSBmcm9tXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIHJlcXVlc3RCb2R5SGVhZGVyKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZShoZWFkZXJOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJMXHUyMDE5c1xuICAvLyAgICAgb3JpZ2luLCB0aGVuIGZvciBlYWNoIGhlYWRlck5hbWUgb2YgQ09SUyBub24td2lsZGNhcmQgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgLy8gICAgIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSwgbG9jYXRpb25VUkwpKSB7XG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvcnMtbm9uLXdpbGRjYXJkLXJlcXVlc3QtaGVhZGVyLW5hbWVcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnYXV0aG9yaXphdGlvbicsIHRydWUpXG5cbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXV0aGVudGljYXRpb24tZW50cmllc1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdwcm94eS1hdXRob3JpemF0aW9uJywgdHJ1ZSlcblxuICAgIC8vIFwiQ29va2llXCIgYW5kIFwiSG9zdFwiIGFyZSBmb3JiaWRkZW4gcmVxdWVzdC1oZWFkZXJzLCB3aGljaCB1bmRpY2kgZG9lc24ndCBpbXBsZW1lbnQuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2Nvb2tpZScsIHRydWUpXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnLCB0cnVlKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlIGZpcnN0IHJldHVyblxuICAvLyB2YWx1ZSBvZiBzYWZlbHkgZXh0cmFjdGluZyByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIGFzc2VydChyZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICAgcmVxdWVzdC5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkocmVxdWVzdC5ib2R5LnNvdXJjZSlbMF1cbiAgfVxuXG4gIC8vIDE1LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gMTYuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBlbmQgdGltZSBhbmQgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRoZVxuICAvLyBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIHRpbWluZ0luZm8ucmVkaXJlY3RFbmRUaW1lID0gdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUgPVxuICAgIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gIC8vIDE3LiBJZiB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBzdGFydCB0aW1lIGlzIDAsIHRoZW4gc2V0IHRpbWluZ0luZm9cdTIwMTlzXG4gIC8vICByZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRpbWluZ0luZm9cdTIwMTlzIHN0YXJ0IHRpbWUuXG4gIGlmICh0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID09PSAwKSB7XG4gICAgdGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gIH1cblxuICAvLyAxOC4gQXBwZW5kIGxvY2F0aW9uVVJMIHRvIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICByZXF1ZXN0LnVybExpc3QucHVzaChsb2NhdGlvblVSTClcblxuICAvLyAxOS4gSW52b2tlIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgb24gcmVkaXJlY3Qgb24gcmVxdWVzdCBhbmRcbiAgLy8gYWN0dWFsUmVzcG9uc2UuXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpXG5cbiAgLy8gMjAuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgcmV0dXJuIG1haW5GZXRjaChmZXRjaFBhcmFtcywgdHJ1ZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1vci1jYWNoZS1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaXNBdXRoZW50aWNhdGlvbkZldGNoID0gZmFsc2UsXG4gIGlzTmV3Q29ubmVjdGlvbkZldGNoID0gZmFsc2Vcbikge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgaHR0cEZldGNoUGFyYW1zIGJlIG51bGwuXG4gIGxldCBodHRwRmV0Y2hQYXJhbXMgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGh0dHBSZXF1ZXN0IGJlIG51bGwuXG4gIGxldCBodHRwUmVxdWVzdCA9IG51bGxcblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdG9yZWRSZXNwb25zZSBiZSBudWxsLlxuICAvLyBUT0RPOiBjYWNoZVxuXG4gIC8vIDYuIExldCBodHRwQ2FjaGUgYmUgbnVsbC5cbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDcuIExldCB0aGUgcmV2YWxpZGF0aW5nRmxhZyBiZSB1bnNldC5cbiAgY29uc3QgcmV2YWxpZGF0aW5nRmxhZyA9IGZhbHNlXG5cbiAgLy8gOC4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiIGFuZCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzXG4gIC8vICAgIFwiZXJyb3JcIiwgdGhlbiBzZXQgaHR0cEZldGNoUGFyYW1zIHRvIGZldGNoUGFyYW1zIGFuZCBodHRwUmVxdWVzdCB0b1xuICAvLyAgICByZXF1ZXN0LlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnICYmIHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICBodHRwRmV0Y2hQYXJhbXMgPSBmZXRjaFBhcmFtc1xuICAgIGh0dHBSZXF1ZXN0ID0gcmVxdWVzdFxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFNldCBodHRwUmVxdWVzdCB0byBhIGNsb25lIG9mIHJlcXVlc3QuXG4gICAgaHR0cFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QocmVxdWVzdClcblxuICAgIC8vIDIuIFNldCBodHRwRmV0Y2hQYXJhbXMgdG8gYSBjb3B5IG9mIGZldGNoUGFyYW1zLlxuICAgIGh0dHBGZXRjaFBhcmFtcyA9IHsgLi4uZmV0Y2hQYXJhbXMgfVxuXG4gICAgLy8gMy4gU2V0IGh0dHBGZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdCB0byBodHRwUmVxdWVzdC5cbiAgICBodHRwRmV0Y2hQYXJhbXMucmVxdWVzdCA9IGh0dHBSZXF1ZXN0XG4gIH1cblxuICAvLyAgICAzLiBMZXQgaW5jbHVkZUNyZWRlbnRpYWxzIGJlIHRydWUgaWYgb25lIG9mXG4gIGNvbnN0IGluY2x1ZGVDcmVkZW50aWFscyA9XG4gICAgcmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnIHx8XG4gICAgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdzYW1lLW9yaWdpbicgJiZcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJylcblxuICAvLyAgICA0LiBMZXQgY29udGVudExlbmd0aCBiZSBodHRwUmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgbGVuZ3RoLCBpZiBodHRwUmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgYm9keSBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBodHRwUmVxdWVzdC5ib2R5ID8gaHR0cFJlcXVlc3QuYm9keS5sZW5ndGggOiBudWxsXG5cbiAgLy8gICAgNS4gTGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBiZSBudWxsLlxuICBsZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gbnVsbFxuXG4gIC8vICAgIDYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgIG9yXG4gIC8vICAgIGBQVVRgLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gYDBgLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuYm9keSA9PSBudWxsICYmXG4gICAgWydQT1NUJywgJ1BVVCddLmluY2x1ZGVzKGh0dHBSZXF1ZXN0Lm1ldGhvZClcbiAgKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gJzAnXG4gIH1cblxuICAvLyAgICA3LiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG9cbiAgLy8gICAgY29udGVudExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShgJHtjb250ZW50TGVuZ3RofWApXG4gIH1cblxuICAvLyAgICA4LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDb250ZW50LUxlbmd0aGAvY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgaWYgKGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSAhPSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LWxlbmd0aCcsIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSwgdHJ1ZSlcbiAgfVxuXG4gIC8vICAgIDkuIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LUxlbmd0aGAsXG4gIC8vICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSkgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDEwLiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIGlzIHRydWUsXG4gIC8vICAgIHRoZW46XG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgaHR0cFJlcXVlc3Qua2VlcGFsaXZlKSB7XG4gICAgLy8gTk9URToga2VlcGFsaXZlIGlzIGEgbm9vcCBvdXRzaWRlIG9mIGJyb3dzZXIgY29udGV4dC5cbiAgfVxuXG4gIC8vICAgIDExLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgYSBVUkwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBSZWZlcmVyYC9odHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZCxcbiAgLy8gICAgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdyZWZlcmVyJywgaXNvbW9ycGhpY0VuY29kZShodHRwUmVxdWVzdC5yZWZlcnJlci5ocmVmKSwgdHJ1ZSlcbiAgfVxuXG4gIC8vICAgIDEyLiBBcHBlbmQgYSByZXF1ZXN0IGBPcmlnaW5gIGhlYWRlciBmb3IgaHR0cFJlcXVlc3QuXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTMuIEFwcGVuZCB0aGUgRmV0Y2ggbWV0YWRhdGEgaGVhZGVycyBmb3IgaHR0cFJlcXVlc3QuIFtGRVRDSC1NRVRBREFUQV1cbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YShodHRwUmVxdWVzdClcblxuICAvLyAgICAxNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFVzZXItQWdlbnRgLCB0aGVuXG4gIC8vICAgIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYFVzZXItQWdlbnRgL2RlZmF1bHQgYFVzZXItQWdlbnRgIHZhbHVlIHRvXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygndXNlci1hZ2VudCcsIHRydWUpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCd1c2VyLWFnZW50JywgZGVmYXVsdFVzZXJBZ2VudClcbiAgfVxuXG4gIC8vICAgIDE1LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcImRlZmF1bHRcIiBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0IGNvbnRhaW5zIGBJZi1Nb2RpZmllZC1TaW5jZWAsIGBJZi1Ob25lLU1hdGNoYCxcbiAgLy8gICAgYElmLVVubW9kaWZpZWQtU2luY2VgLCBgSWYtTWF0Y2hgLCBvciBgSWYtUmFuZ2VgLCB0aGVuIHNldFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ2RlZmF1bHQnICYmXG4gICAgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tb2RpZmllZC1zaW5jZScsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbm9uZS1tYXRjaCcsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtdW5tb2RpZmllZC1zaW5jZScsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbWF0Y2gnLCB0cnVlKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXJhbmdlJywgdHJ1ZSkpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMTYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tY2FjaGVcIiwgaHR0cFJlcXVlc3RcdTIwMTlzIHByZXZlbnRcbiAgLy8gICAgbm8tY2FjaGUgY2FjaGUtY29udHJvbCBoZWFkZXIgbW9kaWZpY2F0aW9uIGZsYWcgaXMgdW5zZXQsIGFuZFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDYWNoZS1Db250cm9sYC9gbWF4LWFnZT0wYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLWNhY2hlJyAmJlxuICAgICFodHRwUmVxdWVzdC5wcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbiAmJlxuICAgICFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcsIHRydWUpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICdtYXgtYWdlPTAnLCB0cnVlKVxuICB9XG5cbiAgLy8gICAgMTcuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiBvciBcInJlbG9hZFwiLCB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1zdG9yZScgfHwgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdyZWxvYWQnKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFByYWdtYWAsIHRoZW4gYXBwZW5kXG4gICAgLy8gYFByYWdtYWAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncHJhZ21hJywgdHJ1ZSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncHJhZ21hJywgJ25vLWNhY2hlJywgdHJ1ZSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsXG4gICAgLy8gdGhlbiBhcHBlbmQgYENhY2hlLUNvbnRyb2xgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnLCB0cnVlKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ25vLWNhY2hlJywgdHJ1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAgICAxOC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBBY2NlcHQtRW5jb2RpbmdgL2BpZGVudGl0eWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJywgdHJ1ZSkpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdpZGVudGl0eScsIHRydWUpXG4gIH1cblxuICAvLyAgICAxOS4gTW9kaWZ5IGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBwZXIgSFRUUC4gRG8gbm90IGFwcGVuZCBhIGdpdmVuXG4gIC8vICAgIGhlYWRlciBpZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgdGhhdCBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gIC8vICAgIFRPRE86IGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODUjaXNzdWVjb21tZW50LTg5NjU2MDEyOVxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtZW5jb2RpbmcnLCB0cnVlKSkge1xuICAgIGlmICh1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChodHRwUmVxdWVzdCkpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdiciwgZ3ppcCwgZGVmbGF0ZScsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsIGRlZmxhdGUnLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcsIHRydWUpXG5cbiAgLy8gICAgMjAuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCB0aGVuOlxuICBpZiAoaW5jbHVkZUNyZWRlbnRpYWxzKSB7XG4gICAgLy8gMS4gSWYgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gYmxvY2sgY29va2llcyBmb3IgaHR0cFJlcXVlc3RcbiAgICAvLyAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyAgICAyMS4gSWYgdGhlcmVcdTIwMTlzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnksIHVzZSBpdCBhcyBhcHByb3ByaWF0ZS5cbiAgLy8gICAgVE9ETzogcHJveHktYXV0aGVudGljYXRpb25cblxuICAvLyAgICAyMi4gU2V0IGh0dHBDYWNoZSB0byB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlXG4gIC8vICAgIHBhcnRpdGlvbiwgZ2l2ZW4gaHR0cFJlcXVlc3QuXG4gIC8vICAgIFRPRE86IGNhY2hlXG5cbiAgLy8gICAgMjMuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0b1xuICAvLyAgICBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMjQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIG5laXRoZXIgXCJuby1zdG9yZVwiIG5vciBcInJlbG9hZFwiLFxuICAvLyAgICB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgIT09ICduby1zdG9yZScgJiYgaHR0cFJlcXVlc3QuY2FjaGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnb25seS1pZi1jYWNoZWQnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignb25seSBpZiBjYWNoZWQnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBmb3J3YXJkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yayBmZXRjaFxuICAgIC8vIGdpdmVuIGh0dHBGZXRjaFBhcmFtcywgaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgaXNOZXdDb25uZWN0aW9uRmV0Y2guXG4gICAgY29uc3QgZm9yd2FyZFJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtGZXRjaChcbiAgICAgIGh0dHBGZXRjaFBhcmFtcyxcbiAgICAgIGluY2x1ZGVDcmVkZW50aWFscyxcbiAgICAgIGlzTmV3Q29ubmVjdGlvbkZldGNoXG4gICAgKVxuXG4gICAgLy8gMy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyB1bnNhZmUgYW5kIGZvcndhcmRSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzXG4gICAgLy8gaW4gdGhlIHJhbmdlIDIwMCB0byAzOTksIGluY2x1c2l2ZSwgaW52YWxpZGF0ZSBhcHByb3ByaWF0ZSBzdG9yZWRcbiAgICAvLyByZXNwb25zZXMgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlIFwiSW52YWxpZGF0aW9uXCIgY2hhcHRlciBvZiBIVFRQXG4gICAgLy8gQ2FjaGluZywgYW5kIHNldCBzdG9yZWRSZXNwb25zZSB0byBudWxsLiBbSFRUUC1DQUNISU5HXVxuICAgIGlmIChcbiAgICAgICFzYWZlTWV0aG9kc1NldC5oYXMoaHR0cFJlcXVlc3QubWV0aG9kKSAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPD0gMzk5XG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDQuIElmIHRoZSByZXZhbGlkYXRpbmdGbGFnIGlzIHNldCBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzA0LFxuICAgIC8vIHRoZW46XG4gICAgaWYgKHJldmFsaWRhdGluZ0ZsYWcgJiYgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDUuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZSB0byBmb3J3YXJkUmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGZvcndhcmRSZXNwb25zZVxuXG4gICAgICAvLyAyLiBTdG9yZSBodHRwUmVxdWVzdCBhbmQgZm9yd2FyZFJlc3BvbnNlIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZVxuICAgICAgLy8gXCJTdG9yaW5nIFJlc3BvbnNlcyBpbiBDYWNoZXNcIiBjaGFwdGVyIG9mIEhUVFAgQ2FjaGluZy4gW0hUVFAtQ0FDSElOR11cbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuICB9XG5cbiAgLy8gMTEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gYSBjbG9uZSBvZiBodHRwUmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlc3BvbnNlLnVybExpc3QgPSBbLi4uaHR0cFJlcXVlc3QudXJsTGlzdF1cblxuICAvLyAxMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5c1xuICAvLyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScsIHRydWUpKSB7XG4gICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXF1ZXN0LWluY2x1ZGVzLWNyZWRlbnRpYWxzIHRvIGluY2x1ZGVDcmVkZW50aWFscy5cbiAgcmVzcG9uc2UucmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHMgPSBpbmNsdWRlQ3JlZGVudGlhbHNcblxuICAvLyAxNC4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MDEsIGh0dHBSZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBub3RcbiAgLy8gXCJjb3JzXCIsIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCBhbmQgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50XG4gIC8vIHNldHRpbmdzIG9iamVjdCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwNywgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA3KSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgfVxuXG4gICAgLy8gMi4gPz8/XG5cbiAgICAvLyAzLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gNC4gUHJvbXB0IHRoZSBlbmQgdXNlciBhcyBhcHByb3ByaWF0ZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgYW5kIHN0b3JlXG4gICAgLy8gdGhlIHJlc3VsdCBhcyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LiBbSFRUUC1BVVRIXVxuICAgIC8vIFRPRE86IEludm9rZSBzb21lIGtpbmQgb2YgY2FsbGJhY2s/XG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlblxuICAgIC8vIGZldGNoUGFyYW1zLlxuICAgIC8vIFRPRE9cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncHJveHkgYXV0aGVudGljYXRpb24gcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gMTYuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gIGlmIChcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQyMVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDIxICYmXG4gICAgLy8gaXNOZXdDb25uZWN0aW9uRmV0Y2ggaXMgZmFsc2VcbiAgICAhaXNOZXdDb25uZWN0aW9uRmV0Y2ggJiZcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwsIG9yIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBub24tbnVsbFxuICAgIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCB8fCByZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICkge1xuICAgIC8vIHRoZW46XG5cbiAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGVcbiAgICAvLyBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcywgaXNBdXRoZW50aWNhdGlvbkZldGNoLCBhbmQgdHJ1ZS5cblxuICAgIC8vIFRPRE8gKHNwZWMpOiBUaGUgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBidXQgd2UgbmVlZCB0byBjYW5jZWxcbiAgICAvLyB0aGUgYWN0aXZlIHJlc3BvbnNlIGJlZm9yZSB3ZSBjYW4gc3RhcnQgYSBuZXcgb25lLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyOTNcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKFxuICAgICAgZmV0Y2hQYXJhbXMsXG4gICAgICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsXG4gICAgICB0cnVlXG4gICAgKVxuICB9XG5cbiAgLy8gMTcuIElmIGlzQXV0aGVudGljYXRpb25GZXRjaCBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBhdXRoZW50aWNhdGlvbiBlbnRyeVxuICBpZiAoaXNBdXRoZW50aWNhdGlvbkZldGNoKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTguIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaW5jbHVkZUNyZWRlbnRpYWxzID0gZmFsc2UsXG4gIGZvcmNlTmV3Q29ubmVjdGlvbiA9IGZhbHNlXG4pIHtcbiAgYXNzZXJ0KCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gfHwgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3llZClcblxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gPSB7XG4gICAgYWJvcnQ6IG51bGwsXG4gICAgZGVzdHJveWVkOiBmYWxzZSxcbiAgICBkZXN0cm95IChlcnIsIGFib3J0ID0gdHJ1ZSkge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgaWYgKGFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA0LiBMZXQgaHR0cENhY2hlIGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGUgcGFydGl0aW9uLFxuICAvLyBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPOiBjYWNoZVxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNS4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICByZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gNi4gTGV0IG5ldHdvcmtQYXJ0aXRpb25LZXkgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgbmV0d29ya1xuICAvLyBwYXJ0aXRpb24ga2V5IGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA3LiBMZXQgbmV3Q29ubmVjdGlvbiBiZSBcInllc1wiIGlmIGZvcmNlTmV3Q29ubmVjdGlvbiBpcyB0cnVlOyBvdGhlcndpc2VcbiAgLy8gXCJub1wiLlxuICBjb25zdCBuZXdDb25uZWN0aW9uID0gZm9yY2VOZXdDb25uZWN0aW9uID8gJ3llcycgOiAnbm8nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvLyA4LiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgbW9kZTpcbiAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLFxuICAgIC8vIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgIC8vIFRPRE9cbiAgfSBlbHNlIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIGNvbm5lY3Rpb24sIGdpdmVuXG4gICAgLy8gbmV0d29ya1BhcnRpdGlvbktleSwgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbixcbiAgICAvLyBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBmb3JjZU5ld0Nvbm5lY3Rpb24uXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gOS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIGNvbm5lY3Rpb24gaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgY2FsbGluZyBjbGFtcCBhbmQgY29hcnNlbiBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXNcbiAgLy8gICAgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSwgYW5kIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyAgICBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cblxuICAvLyAgICAzLiBJZiBjb25uZWN0aW9uIGlzIG5vdCBhbiBIVFRQLzIgY29ubmVjdGlvbiwgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gICAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIGFwcGVuZCAoYFRyYW5zZmVyLUVuY29kaW5nYCxcbiAgLy8gICAgYGNodW5rZWRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICA0LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gICAgY2FwYWJpbGl0eS5cblxuICAvLyAgICA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBtYWtpbmcgYW4gSFRUUCByZXF1ZXN0IG92ZXIgY29ubmVjdGlvblxuICAvLyAgICB1c2luZyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBjYXZlYXRzOlxuXG4gIC8vICAgICAgICAtIEZvbGxvdyB0aGUgcmVsZXZhbnQgcmVxdWlyZW1lbnRzIGZyb20gSFRUUC4gW0hUVFBdIFtIVFRQLVNFTUFOVElDU11cbiAgLy8gICAgICAgIFtIVFRQLUNPTkRdIFtIVFRQLUNBQ0hJTkddIFtIVFRQLUFVVEhdXG5cbiAgLy8gICAgICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLFxuICAvLyAgICAgICAgdGhlbiB0aGUgdXNlciBhZ2VudCBtYXkgaGF2ZSBhIGJ1ZmZlciBvZiB1cCB0byA2NCBraWJpYnl0ZXMgYW5kIHN0b3JlXG4gIC8vICAgICAgICBhIHBhcnQgb2YgcmVxdWVzdFx1MjAxOXMgYm9keSBpbiB0aGF0IGJ1ZmZlci4gSWYgdGhlIHVzZXIgYWdlbnQgcmVhZHMgZnJvbVxuICAvLyAgICAgICAgcmVxdWVzdFx1MjAxOXMgYm9keSBiZXlvbmQgdGhhdCBidWZmZXJcdTIwMTlzIHNpemUgYW5kIHRoZSB1c2VyIGFnZW50IG5lZWRzIHRvXG4gIC8vICAgICAgICByZXNlbmQgcmVxdWVzdCwgdGhlbiBpbnN0ZWFkIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgICAgIC0gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgICAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSxcbiAgLy8gICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB1c2VyIGFnZW50XHUyMDE5cyBIVFRQIHBhcnNlciByZWNlaXZlcyB0aGUgZmlyc3QgYnl0ZVxuICAvLyAgICAgICAgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXIgYnl0ZXMgZm9yIEhUVFAvMiBvciByZXNwb25zZSBzdGF0dXNcbiAgLy8gICAgICAgIGxpbmUgZm9yIEhUVFAvMS54KS5cblxuICAvLyAgICAgICAgLSBXYWl0IHVudGlsIGFsbCB0aGUgaGVhZGVycyBhcmUgdHJhbnNtaXR0ZWQuXG5cbiAgLy8gICAgICAgIC0gQW55IHJlc3BvbnNlcyB3aG9zZSBzdGF0dXMgaXMgaW4gdGhlIHJhbmdlIDEwMCB0byAxOTksIGluY2x1c2l2ZSxcbiAgLy8gICAgICAgIGFuZCBpcyBub3QgMTAxLCBhcmUgdG8gYmUgaWdub3JlZCwgZXhjZXB0IGZvciB0aGUgcHVycG9zZXMgb2Ygc2V0dGluZ1xuICAvLyAgICAgICAgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIGFib3ZlLlxuXG4gIC8vICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFRyYW5zZmVyLUVuY29kaW5nYC9gY2h1bmtlZGAgYW5kXG4gIC8vICAgIHJlc3BvbnNlIGlzIHRyYW5zZmVycmVkIHZpYSBIVFRQLzEuMCBvciBvbGRlciwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vICAgIGVycm9yLlxuXG4gIC8vICAgIC0gSWYgdGhlIEhUVFAgcmVxdWVzdCByZXN1bHRzIGluIGEgVExTIGNsaWVudCBjZXJ0aWZpY2F0ZSBkaWFsb2csIHRoZW46XG5cbiAgLy8gICAgICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QsIG1ha2UgdGhlXG4gIC8vICAgICAgICBkaWFsb2cgYXZhaWxhYmxlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cblxuICAvLyAgICAgICAgMi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vIFRvIHRyYW5zbWl0IHJlcXVlc3RcdTIwMTlzIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuICBsZXQgcmVxdWVzdEJvZHkgPSBudWxsXG4gIC8vIDEuIElmIGJvZHkgaXMgbnVsbCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpc1xuICAvLyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdFxuICAvLyBlbmQtb2YtYm9keSBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KCkpXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJvZHkgaXMgbm9uLW51bGw6XG5cbiAgICAvLyAgICAxLiBMZXQgcHJvY2Vzc0JvZHlDaHVuayBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUNodW5rID0gYXN5bmMgZnVuY3Rpb24gKiAoYnl0ZXMpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOiB0cmFuc21pdCBieXRlcy5cbiAgICAgIHlpZWxkIGJ5dGVzXG5cbiAgICAgIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBpcyBub24tbnVsbCwgdGhlbiBydW5cbiAgICAgIC8vIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBnaXZlbiBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGg/LihieXRlcy5ieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBwcm9jZXNzRW5kT2ZCb2R5IGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsXG4gICAgICAvLyB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5LlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBnaXZlbiBlIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZSkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBlIGlzIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbiwgdGhlbiBhYm9ydCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlci5cbiAgICAgIGlmIChlLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSW5jcmVtZW50YWxseSByZWFkIHJlcXVlc3RcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHlDaHVuaywgcHJvY2Vzc0VuZE9mQm9keSxcbiAgICAvLyBwcm9jZXNzQm9keUVycm9yLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgcmVxdWVzdEJvZHkgPSAoYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGJ5dGVzIG9mIHJlcXVlc3QuYm9keS5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHByb2Nlc3NCb2R5Q2h1bmsoYnl0ZXMpXG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0VuZE9mQm9keSgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzb2NrZXQgaXMgb25seSBwcm92aWRlZCBmb3Igd2Vic29ja2V0c1xuICAgIGNvbnN0IHsgYm9keSwgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0gPSBhd2FpdCBkaXNwYXRjaCh7IGJvZHk6IHJlcXVlc3RCb2R5IH0pXG5cbiAgICBpZiAoc29ja2V0KSB7XG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IGJvZHlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCA9ICgpID0+IGl0ZXJhdG9yLm5leHQoKVxuXG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QgfSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDEwLiBJZiBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAvLyAxLiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICAgIC8vIDIuIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zLCBlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoZXJyKVxuICB9XG5cbiAgLy8gMTEuIExldCBwdWxsQWxnb3JpdGhtIGJlIGFuIGFjdGlvbiB0aGF0IHJlc3VtZXMgdGhlIG9uZ29pbmcgZmV0Y2hcbiAgLy8gaWYgaXQgaXMgc3VzcGVuZGVkLlxuICBjb25zdCBwdWxsQWxnb3JpdGhtID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lKClcbiAgfVxuXG4gIC8vIDEyLiBMZXQgY2FuY2VsQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFib3J0cyBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gY29udHJvbGxlciB3aXRoIHJlYXNvbiwgZ2l2ZW4gcmVhc29uLlxuICBjb25zdCBjYW5jZWxBbGdvcml0aG0gPSAocmVhc29uKSA9PiB7XG4gICAgLy8gSWYgdGhlIGFib3J0ZWQgZmV0Y2ggd2FzIGFscmVhZHkgdGVybWluYXRlZCwgdGhlbiB3ZSBkbyBub3RcbiAgICAvLyBuZWVkIHRvIGRvIGFueXRoaW5nLlxuICAgIGlmICghaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KHJlYXNvbilcbiAgICB9XG4gIH1cblxuICAvLyAxMy4gTGV0IGhpZ2hXYXRlck1hcmsgYmUgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4gbnVtYmVyLCBjaG9zZW4gYnlcbiAgLy8gdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNC4gTGV0IHNpemVBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWNjZXB0cyBhIGNodW5rIG9iamVjdFxuICAvLyBhbmQgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiwgbm9uLWluZmluaXRlIG51bWJlciwgY2hvc2VuIGJ5IHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIExldCBzdHJlYW0gYmUgYSBuZXcgUmVhZGFibGVTdHJlYW0uXG4gIC8vIDE2LiBTZXQgdXAgc3RyZWFtIHdpdGggYnl0ZSByZWFkaW5nIHN1cHBvcnQgd2l0aCBwdWxsQWxnb3JpdGhtIHNldCB0byBwdWxsQWxnb3JpdGhtLFxuICAvLyAgICAgY2FuY2VsQWxnb3JpdGhtIHNldCB0byBjYW5jZWxBbGdvcml0aG0uXG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoY29udHJvbGxlcikge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBhd2FpdCBwdWxsQWxnb3JpdGhtKGNvbnRyb2xsZXIpXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgY2FuY2VsQWxnb3JpdGhtKHJlYXNvbilcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnYnl0ZXMnXG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0sIHNvdXJjZTogbnVsbCwgbGVuZ3RoOiBudWxsIH1cblxuICAvLyAgICAyLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzXG4gIC8vICAgIG5vdCBcIm5vLXN0b3JlXCIsIHRoZW4gdXBkYXRlIHJlc3BvbnNlIGluIGh0dHBDYWNoZSBmb3IgcmVxdWVzdC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vICAgIDMuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlIGFuZCB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZFxuICAvLyAgICB0byBibG9jayBjb29raWVzIGZvciByZXF1ZXN0IChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW4gcnVuIHRoZVxuICAvLyAgICBcInNldC1jb29raWUtc3RyaW5nXCIgcGFyc2luZyBhbGdvcml0aG0gKHNlZSBzZWN0aW9uIDUuMiBvZiBbQ09PS0lFU10pIG9uXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiBlYWNoIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAvLyAgICBgU2V0LUNvb2tpZWAgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LCBpZiBhbnksIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vIDE4LiBJZiBhYm9ydGVkLCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTkuIFJ1biB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbDpcblxuICAvLyAgICAxLiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkOlxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZCA9IG9uQWJvcnRlZFxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgb25BYm9ydGVkKVxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSA9IGFzeW5jICgpID0+IHtcbiAgICAvLyAxLiBXaGlsZSB0cnVlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIDEtMy4gU2VlIG9uRGF0YS4uLlxuXG4gICAgICAvLyA0LiBTZXQgYnl0ZXMgdG8gdGhlIHJlc3VsdCBvZiBoYW5kbGluZyBjb250ZW50IGNvZGluZ3MgZ2l2ZW5cbiAgICAgIC8vIGNvZGluZ3MgYW5kIGJ5dGVzLlxuICAgICAgbGV0IGJ5dGVzXG4gICAgICBsZXQgaXNGYWlsdXJlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQoKVxuXG4gICAgICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzID0gZG9uZSA/IHVuZGVmaW5lZCA6IHZhbHVlXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgJiYgIXRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplKSB7XG4gICAgICAgICAgLy8gemxpYiBkb2Vzbid0IGxpa2UgZW1wdHkgc3RyZWFtcy5cbiAgICAgICAgICBieXRlcyA9IHVuZGVmaW5lZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5dGVzID0gZXJyXG5cbiAgICAgICAgICAvLyBlcnIgbWF5IGJlIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgcmVhZGFibGVzdHJlYW0uY2FuY2VsLFxuICAgICAgICAgIC8vIHdoaWNoIG1pZ2h0IG5vdCBiZSBhbiBlcnJvci4gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMDlcbiAgICAgICAgICBpc0ZhaWx1cmUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGUgYnl0ZXMgdHJhbnNtaXNzaW9uIGZvciByZXNwb25zZVx1MjAxOXMgbWVzc2FnZVxuICAgICAgICAvLyBib2R5IGlzIGRvbmUgbm9ybWFsbHkgYW5kIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBjbG9zZVxuICAgICAgICAvLyBzdHJlYW0sIGZpbmFsaXplIHJlc3BvbnNlIGZvciBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UsIGFuZFxuICAgICAgICAvLyBhYm9ydCB0aGVzZSBpbi1wYXJhbGxlbCBzdGVwcy5cbiAgICAgICAgcmVhZGFibGVTdHJlYW1DbG9zZShmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIpXG5cbiAgICAgICAgZmluYWxpemVSZXNwb25zZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIEluY3JlYXNlIHRpbWluZ0luZm9cdTIwMTlzIGRlY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICB0aW1pbmdJbmZvLmRlY29kZWRCb2R5U2l6ZSArPSBieXRlcz8uYnl0ZUxlbmd0aCA/PyAwXG5cbiAgICAgIC8vIDYuIElmIGJ5dGVzIGlzIGZhaWx1cmUsIHRoZW4gdGVybWluYXRlIGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGlzRmFpbHVyZSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShieXRlcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDcuIEVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgYnl0ZXNcbiAgICAgIC8vIGludG8gc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpXG4gICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVucXVldWUoYnVmZmVyKVxuICAgICAgfVxuXG4gICAgICAvLyA4LiBJZiBzdHJlYW0gaXMgZXJyb3JlZCwgdGhlbiB0ZXJtaW5hdGUgdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gOS4gSWYgc3RyZWFtIGRvZXNuXHUyMDE5dCBuZWVkIG1vcmUgZGF0YSBhc2sgdGhlIHVzZXIgYWdlbnQgdG8gc3VzcGVuZFxuICAgICAgLy8gdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplIDw9IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gICAgMi4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgZnVuY3Rpb24gb25BYm9ydGVkIChyZWFzb24pIHtcbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZy5cbiAgICAgIHJlc3BvbnNlLmFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIElmIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciBzdHJlYW0gd2l0aCB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5c1xuICAgICAgLy8gICAgY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kIGFuXG4gICAgICAvLyAgICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJlYWxtLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IoXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHN0cmVhbSBpcyByZWFkYWJsZSwgZXJyb3Igc3RyZWFtIHdpdGggYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihuZXcgVHlwZUVycm9yKCd0ZXJtaW5hdGVkJywge1xuICAgICAgICAgIGNhdXNlOiBpc0Vycm9yTGlrZShyZWFzb24pID8gcmVhc29uIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyA1LiBPdGhlcndpc2UsIHRoZSB1c2VyIGFnZW50IHNob3VsZCBjbG9zZSBjb25uZWN0aW9uIHVubGVzcyBpdCB3b3VsZCBiZSBiYWQgZm9yIHBlcmZvcm1hbmNlIHRvIGRvIHNvLlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgfVxuXG4gIC8vIDIwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoICh7IGJvZHkgfSkge1xuICAgIGNvbnN0IHVybCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uJykuQWdlbnR9ICovXG4gICAgY29uc3QgYWdlbnQgPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXJcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBhZ2VudC5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCxcbiAgICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICBib2R5OiBhZ2VudC5pc01vY2tBY3RpdmUgPyByZXF1ZXN0LmJvZHkgJiYgKHJlcXVlc3QuYm9keS5zb3VyY2UgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSkgOiBib2R5LFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnNMaXN0LmVudHJpZXMsXG4gICAgICAgIG1heFJlZGlyZWN0aW9uczogMCxcbiAgICAgICAgdXBncmFkZTogcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JyA/ICd3ZWJzb2NrZXQnIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBib2R5OiBudWxsLFxuICAgICAgICBhYm9ydDogbnVsbCxcblxuICAgICAgICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCBjb25uZWN0aW9uIGhlcmU/XG4gICAgICAgICAgY29uc3QgeyBjb25uZWN0aW9uIH0gPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW5cbiAgICAgICAgICAvLyBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXMgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnRcbiAgICAgICAgICAvLyB0aW1lLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgICAgICAgIC8vIFRPRE86IGltcGxlbWVudCBjb25uZWN0aW9uIHRpbWluZ1xuICAgICAgICAgIHRpbWluZ0luZm8uZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbyA9IGNsYW1wQW5kQ29hcnNlbkNvbm5lY3Rpb25UaW1pbmdJbmZvKHVuZGVmaW5lZCwgdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUsIGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBhYm9ydChuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBhYm9ydClcbiAgICAgICAgICAgIHRoaXMuYWJvcnQgPSBjb25uZWN0aW9uLmFib3J0ID0gYWJvcnRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuXG4gICAgICAgICAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgICAgICAgIHRpbWluZ0luZm8uZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uUmVzcG9uc2VTdGFydGVkICgpIHtcbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnRcbiAgICAgICAgICAvLyB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICAgICAgICAgLy8gdXNlciBhZ2VudFx1MjAxOXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXJcbiAgICAgICAgICAvLyBieXRlcyBmb3IgSFRUUC8yIG9yIHJlc3BvbnNlIHN0YXR1cyBsaW5lIGZvciBIVFRQLzEueCkuXG4gICAgICAgICAgdGltaW5nSW5mby5maW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzIDwgMjAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbG9jYXRpb24gPSAnJ1xuXG4gICAgICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdIZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZShyYXdIZWFkZXJzW2ldKSwgcmF3SGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ2xhdGluMScpLCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBsb2NhdGlvbiA9IGhlYWRlcnNMaXN0LmdldCgnbG9jYXRpb24nLCB0cnVlKVxuXG4gICAgICAgICAgdGhpcy5ib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVhZDogcmVzdW1lIH0pXG5cbiAgICAgICAgICBjb25zdCBkZWNvZGVycyA9IFtdXG5cbiAgICAgICAgICBjb25zdCB3aWxsRm9sbG93ID0gbG9jYXRpb24gJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycgJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgY29uc3QgY29udGVudEVuY29kaW5nID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LWVuY29kaW5nJywgdHJ1ZSlcbiAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgICAgICAgICAgY29uc3QgY29kaW5ncyA9IGNvbnRlbnRFbmNvZGluZyA/IGNvbnRlbnRFbmNvZGluZy50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykgOiBbXVxuXG4gICAgICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbnRlbnQtZW5jb2RpbmdzIHRvIHByZXZlbnQgcmVzb3VyY2UgZXhoYXVzdGlvbi5cbiAgICAgICAgICAgIC8vIENWRSBmaXggc2ltaWxhciB0byB1cmxsaWIzIChHSFNBLWdtNjIteHYyai00dzUzKSBhbmQgY3VybCAoQ1ZFLTIwMjItMzIyMDYpLlxuICAgICAgICAgICAgY29uc3QgbWF4Q29udGVudEVuY29kaW5ncyA9IDVcbiAgICAgICAgICAgIGlmIChjb2RpbmdzLmxlbmd0aCA+IG1heENvbnRlbnRFbmNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdG9vIG1hbnkgY29udGVudC1lbmNvZGluZ3MgaW4gcmVzcG9uc2U6ICR7Y29kaW5ncy5sZW5ndGh9LCBtYXhpbXVtIGFsbG93ZWQgaXMgJHttYXhDb250ZW50RW5jb2RpbmdzfWApKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY29kaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICBjb25zdCBjb2RpbmcgPSBjb2RpbmdzW2ldLnRyaW0oKVxuICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMi5odG1sI3NlY3Rpb24tNy4yXG4gICAgICAgICAgICAgIGlmIChjb2RpbmcgPT09ICd4LWd6aXAnIHx8IGNvZGluZyA9PT0gJ2d6aXAnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUd1bnppcCh7XG4gICAgICAgICAgICAgICAgICAvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcbiAgICAgICAgICAgICAgICAgIC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgLy8gYnkgY29tbW9uIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cbiAgICAgICAgICAgICAgICAgIGZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnZGVmbGF0ZScpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKGNyZWF0ZUluZmxhdGUoe1xuICAgICAgICAgICAgICAgICAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0hcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyh7XG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuQlJPVExJX09QRVJBVElPTl9GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5CUk9UTElfT1BFUkFUSU9OX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMubGVuZ3RoID0gMFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBvbkVycm9yID0gdGhpcy5vbkVycm9yLmJpbmQodGhpcylcblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0LFxuICAgICAgICAgICAgYm9keTogZGVjb2RlcnMubGVuZ3RoXG4gICAgICAgICAgICAgID8gcGlwZWxpbmUodGhpcy5ib2R5LCAuLi5kZWNvZGVycywgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgICAgICA6IHRoaXMuYm9keS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRGF0YSAoY2h1bmspIHtcbiAgICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAxLiBJZiBvbmUgb3IgbW9yZSBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgZnJvbSByZXNwb25zZVx1MjAxOXNcbiAgICAgICAgICAvLyBtZXNzYWdlIGJvZHksIHRoZW46XG5cbiAgICAgICAgICAvLyAgMS4gTGV0IGJ5dGVzIGJlIHRoZSB0cmFuc21pdHRlZCBieXRlcy5cbiAgICAgICAgICBjb25zdCBieXRlcyA9IGNodW5rXG5cbiAgICAgICAgICAvLyAgMi4gTGV0IGNvZGluZ3MgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgICAgIC8vICBnaXZlbiBgQ29udGVudC1FbmNvZGluZ2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgICAgICAvLyAgU2VlIHB1bGxBbGdvcml0aG0uXG5cbiAgICAgICAgICAvLyAgMy4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZW5jb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgICAgICB0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSArPSBieXRlcy5ieXRlTGVuZ3RoXG5cbiAgICAgICAgICAvLyAgNC4gU2VlIHB1bGxBbGdvcml0aG0uLi5cblxuICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkucHVzaChieXRlcylcbiAgICAgICAgfSxcblxuICAgICAgICBvbkNvbXBsZXRlICgpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5ib2R5LnB1c2gobnVsbClcbiAgICAgICAgfSxcblxuICAgICAgICBvbkVycm9yIChlcnJvcikge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5Py5kZXN0cm95KGVycm9yKVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyb3IpXG5cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25VcGdyYWRlIChzdGF0dXMsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09IDEwMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdIZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZShyYXdIZWFkZXJzW2ldKSwgcmF3SGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ2xhdGluMScpLCB0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdCxcbiAgICAgICAgICAgIHNvY2tldFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmV0Y2gsXG4gIEZldGNoLFxuICBmZXRjaGluZyxcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuXG5jb25zdCBrU3RhdGUgPSBTeW1ib2woJ1Byb2dyZXNzRXZlbnQgc3RhdGUnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNwcm9ncmVzc2V2ZW50XG4gKi9cbmNsYXNzIFByb2dyZXNzRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUsICdQcm9ncmVzc0V2ZW50IGNvbnN0cnVjdG9yJywgJ3R5cGUnKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVuY29kaW5nLWdldFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBsYWJlbFxuICovXG5mdW5jdGlvbiBnZXRFbmNvZGluZyAobGFiZWwpIHtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAvLyAyLiBJZiBsYWJlbCBpcyBhbiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBhbnkgb2YgdGhlXG4gIC8vICAgIGxhYmVscyBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgY29ycmVzcG9uZGluZyBlbmNvZGluZzsgb3RoZXJ3aXNlIHJldHVybiBmYWlsdXJlLlxuICBzd2l0Y2ggKGxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAndW5pY29kZS0xLTEtdXRmLTgnOlxuICAgIGNhc2UgJ3VuaWNvZGUxMXV0ZjgnOlxuICAgIGNhc2UgJ3VuaWNvZGUyMHV0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd4LXVuaWNvZGUyMHV0ZjgnOlxuICAgICAgcmV0dXJuICdVVEYtOCdcbiAgICBjYXNlICc4NjYnOlxuICAgIGNhc2UgJ2NwODY2JzpcbiAgICBjYXNlICdjc2libTg2Nic6XG4gICAgY2FzZSAnaWJtODY2JzpcbiAgICAgIHJldHVybiAnSUJNODY2J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4yJzpcbiAgICBjYXNlICdpc28tODg1OS0yJzpcbiAgICBjYXNlICdpc28taXItMTAxJzpcbiAgICBjYXNlICdpc284ODU5LTInOlxuICAgIGNhc2UgJ2lzbzg4NTkyJzpcbiAgICBjYXNlICdpc29fODg1OS0yJzpcbiAgICBjYXNlICdpc29fODg1OS0yOjE5ODcnOlxuICAgIGNhc2UgJ2wyJzpcbiAgICBjYXNlICdsYXRpbjInOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0yJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4zJzpcbiAgICBjYXNlICdpc28tODg1OS0zJzpcbiAgICBjYXNlICdpc28taXItMTA5JzpcbiAgICBjYXNlICdpc284ODU5LTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkzJzpcbiAgICBjYXNlICdpc29fODg1OS0zJzpcbiAgICBjYXNlICdpc29fODg1OS0zOjE5ODgnOlxuICAgIGNhc2UgJ2wzJzpcbiAgICBjYXNlICdsYXRpbjMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0zJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW40JzpcbiAgICBjYXNlICdpc28tODg1OS00JzpcbiAgICBjYXNlICdpc28taXItMTEwJzpcbiAgICBjYXNlICdpc284ODU5LTQnOlxuICAgIGNhc2UgJ2lzbzg4NTk0JzpcbiAgICBjYXNlICdpc29fODg1OS00JzpcbiAgICBjYXNlICdpc29fODg1OS00OjE5ODgnOlxuICAgIGNhc2UgJ2w0JzpcbiAgICBjYXNlICdsYXRpbjQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS00J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5jeXJpbGxpYyc6XG4gICAgY2FzZSAnY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTUnOlxuICAgIGNhc2UgJ2lzby1pci0xNDQnOlxuICAgIGNhc2UgJ2lzbzg4NTktNSc6XG4gICAgY2FzZSAnaXNvODg1OTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTU6MTk4OCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTUnXG4gICAgY2FzZSAnYXJhYmljJzpcbiAgICBjYXNlICdhc21vLTcwOCc6XG4gICAgY2FzZSAnY3Npc284ODU5NmUnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZpJzpcbiAgICBjYXNlICdjc2lzb2xhdGluYXJhYmljJzpcbiAgICBjYXNlICdlY21hLTExNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNic6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1lJzpcbiAgICBjYXNlICdpc28tODg1OS02LWknOlxuICAgIGNhc2UgJ2lzby1pci0xMjcnOlxuICAgIGNhc2UgJ2lzbzg4NTktNic6XG4gICAgY2FzZSAnaXNvODg1OTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTY6MTk4Nyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTYnXG4gICAgY2FzZSAnY3Npc29sYXRpbmdyZWVrJzpcbiAgICBjYXNlICdlY21hLTExOCc6XG4gICAgY2FzZSAnZWxvdF85MjgnOlxuICAgIGNhc2UgJ2dyZWVrJzpcbiAgICBjYXNlICdncmVlazgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTcnOlxuICAgIGNhc2UgJ2lzby1pci0xMjYnOlxuICAgIGNhc2UgJ2lzbzg4NTktNyc6XG4gICAgY2FzZSAnaXNvODg1OTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTc6MTk4Nyc6XG4gICAgY2FzZSAnc3VuX2V1X2dyZWVrJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNydcbiAgICBjYXNlICdjc2lzbzg4NTk4ZSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmhlYnJldyc6XG4gICAgY2FzZSAnaGVicmV3JzpcbiAgICBjYXNlICdpc28tODg1OS04JzpcbiAgICBjYXNlICdpc28tODg1OS04LWUnOlxuICAgIGNhc2UgJ2lzby1pci0xMzgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOCc6XG4gICAgY2FzZSAnaXNvODg1OTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTg6MTk4OCc6XG4gICAgY2FzZSAndmlzdWFsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOCdcbiAgICBjYXNlICdjc2lzbzg4NTk4aSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1pJzpcbiAgICBjYXNlICdsb2dpY2FsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOC1JJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW42JzpcbiAgICBjYXNlICdpc28tODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvLWlyLTE1Nyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvODg1OTEwJzpcbiAgICBjYXNlICdsNic6XG4gICAgY2FzZSAnbGF0aW42JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTAnXG4gICAgY2FzZSAnaXNvLTg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEzJ1xuICAgIGNhc2UgJ2lzby04ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5MTQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNCdcbiAgICBjYXNlICdjc2lzb2xhdGluOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMTUnOlxuICAgIGNhc2UgJ2w5JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTUnXG4gICAgY2FzZSAnaXNvLTg4NTktMTYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNidcbiAgICBjYXNlICdjc2tvaThyJzpcbiAgICBjYXNlICdrb2knOlxuICAgIGNhc2UgJ2tvaTgnOlxuICAgIGNhc2UgJ2tvaTgtcic6XG4gICAgY2FzZSAna29pOF9yJzpcbiAgICAgIHJldHVybiAnS09JOC1SJ1xuICAgIGNhc2UgJ2tvaTgtcnUnOlxuICAgIGNhc2UgJ2tvaTgtdSc6XG4gICAgICByZXR1cm4gJ0tPSTgtVSdcbiAgICBjYXNlICdjc21hY2ludG9zaCc6XG4gICAgY2FzZSAnbWFjJzpcbiAgICBjYXNlICdtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ3gtbWFjLXJvbWFuJzpcbiAgICAgIHJldHVybiAnbWFjaW50b3NoJ1xuICAgIGNhc2UgJ2lzby04ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5MTEnOlxuICAgIGNhc2UgJ3Rpcy02MjAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtODc0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy04NzQnXG4gICAgY2FzZSAnY3AxMjUwJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTAnOlxuICAgIGNhc2UgJ3gtY3AxMjUwJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUwJ1xuICAgIGNhc2UgJ2NwMTI1MSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUxJzpcbiAgICBjYXNlICd4LWNwMTI1MSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MSdcbiAgICBjYXNlICdhbnNpX3gzLjQtMTk2OCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2NwMTI1Mic6XG4gICAgY2FzZSAnY3A4MTknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW4xJzpcbiAgICBjYXNlICdpYm04MTknOlxuICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgIGNhc2UgJ2lzby1pci0xMDAnOlxuICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgY2FzZSAnaXNvODg1OTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgY2FzZSAnbDEnOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAndXMtYXNjaWknOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTInXG4gICAgY2FzZSAnY3AxMjUzJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTMnOlxuICAgIGNhc2UgJ3gtY3AxMjUzJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUzJ1xuICAgIGNhc2UgJ2NwMTI1NCc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTknOlxuICAgIGNhc2UgJ2lzby1pci0xNDgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOSc6XG4gICAgY2FzZSAnaXNvODg1OTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTk6MTk4OSc6XG4gICAgY2FzZSAnbDUnOlxuICAgIGNhc2UgJ2xhdGluNSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU0JzpcbiAgICBjYXNlICd4LWNwMTI1NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NCdcbiAgICBjYXNlICdjcDEyNTUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NSc6XG4gICAgY2FzZSAneC1jcDEyNTUnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTUnXG4gICAgY2FzZSAnY3AxMjU2JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTYnOlxuICAgIGNhc2UgJ3gtY3AxMjU2JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU2J1xuICAgIGNhc2UgJ2NwMTI1Nyc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU3JzpcbiAgICBjYXNlICd4LWNwMTI1Nyc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NydcbiAgICBjYXNlICdjcDEyNTgnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1OCc6XG4gICAgY2FzZSAneC1jcDEyNTgnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTgnXG4gICAgY2FzZSAneC1tYWMtY3lyaWxsaWMnOlxuICAgIGNhc2UgJ3gtbWFjLXVrcmFpbmlhbic6XG4gICAgICByZXR1cm4gJ3gtbWFjLWN5cmlsbGljJ1xuICAgIGNhc2UgJ2NoaW5lc2UnOlxuICAgIGNhc2UgJ2NzZ2IyMzEyJzpcbiAgICBjYXNlICdjc2lzbzU4Z2IyMzEyODAnOlxuICAgIGNhc2UgJ2diMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMi04MCc6XG4gICAgY2FzZSAnZ2JrJzpcbiAgICBjYXNlICdpc28taXItNTgnOlxuICAgIGNhc2UgJ3gtZ2JrJzpcbiAgICAgIHJldHVybiAnR0JLJ1xuICAgIGNhc2UgJ2diMTgwMzAnOlxuICAgICAgcmV0dXJuICdnYjE4MDMwJ1xuICAgIGNhc2UgJ2JpZzUnOlxuICAgIGNhc2UgJ2JpZzUtaGtzY3MnOlxuICAgIGNhc2UgJ2NuLWJpZzUnOlxuICAgIGNhc2UgJ2NzYmlnNSc6XG4gICAgY2FzZSAneC14LWJpZzUnOlxuICAgICAgcmV0dXJuICdCaWc1J1xuICAgIGNhc2UgJ2NzZXVjcGtkZm10amFwYW5lc2UnOlxuICAgIGNhc2UgJ2V1Yy1qcCc6XG4gICAgY2FzZSAneC1ldWMtanAnOlxuICAgICAgcmV0dXJuICdFVUMtSlAnXG4gICAgY2FzZSAnY3Npc28yMDIyanAnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWpwJzpcbiAgICAgIHJldHVybiAnSVNPLTIwMjItSlAnXG4gICAgY2FzZSAnY3NzaGlmdGppcyc6XG4gICAgY2FzZSAnbXM5MzInOlxuICAgIGNhc2UgJ21zX2thbmppJzpcbiAgICBjYXNlICdzaGlmdC1qaXMnOlxuICAgIGNhc2UgJ3NoaWZ0X2ppcyc6XG4gICAgY2FzZSAnc2ppcyc6XG4gICAgY2FzZSAnd2luZG93cy0zMWonOlxuICAgIGNhc2UgJ3gtc2ppcyc6XG4gICAgICByZXR1cm4gJ1NoaWZ0X0pJUydcbiAgICBjYXNlICdjc2V1Y2tyJzpcbiAgICBjYXNlICdjc2tzYzU2MDExOTg3JzpcbiAgICBjYXNlICdldWMta3InOlxuICAgIGNhc2UgJ2lzby1pci0xNDknOlxuICAgIGNhc2UgJ2tvcmVhbic6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODcnOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg5JzpcbiAgICBjYXNlICdrc2M1NjAxJzpcbiAgICBjYXNlICdrc2NfNTYwMSc6XG4gICAgY2FzZSAnd2luZG93cy05NDknOlxuICAgICAgcmV0dXJuICdFVUMtS1InXG4gICAgY2FzZSAnY3Npc28yMDIya3InOlxuICAgIGNhc2UgJ2h6LWdiLTIzMTInOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbi1leHQnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWtyJzpcbiAgICBjYXNlICdyZXBsYWNlbWVudCc6XG4gICAgICByZXR1cm4gJ3JlcGxhY2VtZW50J1xuICAgIGNhc2UgJ3VuaWNvZGVmZmZlJzpcbiAgICBjYXNlICd1dGYtMTZiZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICAgIGNhc2UgJ2NzdW5pY29kZSc6XG4gICAgY2FzZSAnaXNvLTEwNjQ2LXVjcy0yJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndW5pY29kZSc6XG4gICAgY2FzZSAndW5pY29kZWZlZmYnOlxuICAgIGNhc2UgJ3V0Zi0xNic6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgICBjYXNlICd4LXVzZXItZGVmaW5lZCc6XG4gICAgICByZXR1cm4gJ3gtdXNlci1kZWZpbmVkJ1xuICAgIGRlZmF1bHQ6IHJldHVybiAnZmFpbHVyZSdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0RW5jb2Rpbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBrU3RhdGUsXG4gIGtFcnJvcixcbiAga1Jlc3VsdCxcbiAga0Fib3J0ZWQsXG4gIGtMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgUHJvZ3Jlc3NFdmVudCB9ID0gcmVxdWlyZSgnLi9wcm9ncmVzc2V2ZW50JylcbmNvbnN0IHsgZ2V0RW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4vZW5jb2RpbmcnKVxuY29uc3QgeyBzZXJpYWxpemVBTWltZVR5cGUsIHBhcnNlTUlNRVR5cGUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJylcbmNvbnN0IHsgYnRvYSB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRPcGVyYXRpb25cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSBmclxuICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiByZWFkT3BlcmF0aW9uIChmciwgYmxvYiwgdHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBcImxvYWRpbmdcIiwgdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3JcbiAgLy8gICAgRE9NRXhjZXB0aW9uLlxuICBpZiAoZnJba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBzdGF0ZScsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gIH1cblxuICAvLyAyLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwibG9hZGluZ1wiLlxuICBmcltrU3RhdGVdID0gJ2xvYWRpbmcnXG5cbiAgLy8gMy4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gbnVsbC5cbiAgZnJba1Jlc3VsdF0gPSBudWxsXG5cbiAgLy8gNC4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBudWxsLlxuICBmcltrRXJyb3JdID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdHJlYW0gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGdldCBzdHJlYW0gb24gYmxvYi5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbX0gKi9cbiAgY29uc3Qgc3RyZWFtID0gYmxvYi5zdHJlYW0oKVxuXG4gIC8vIDYuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZyb20gc3RyZWFtLlxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAvLyA3LiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyA4LiBMZXQgY2h1bmtQcm9taXNlIGJlIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhIGNodW5rIGZyb21cbiAgLy8gICAgc3RyZWFtIHdpdGggcmVhZGVyLlxuICBsZXQgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuXG4gIC8vIDkuIExldCBpc0ZpcnN0Q2h1bmsgYmUgdHJ1ZS5cbiAgbGV0IGlzRmlyc3RDaHVuayA9IHRydWVcblxuICAvLyAxMC4gSW4gcGFyYWxsZWwsIHdoaWxlIHRydWU6XG4gIC8vIE5vdGU6IFwiSW4gcGFyYWxsZWxcIiBqdXN0IG1lYW5zIG5vbi1ibG9ja2luZ1xuICAvLyBOb3RlIDI6IHJlYWRPcGVyYXRpb24gaXRzZWxmIGNhbm5vdCBiZSBhc3luYyBhcyBkb3VibGVcbiAgLy8gcmVhZGluZyB0aGUgYm9keSB3b3VsZCB0aGVuIHJlamVjdCB0aGUgcHJvbWlzZSwgaW5zdGVhZFxuICAvLyBvZiB0aHJvd2luZyBhbiBlcnJvci5cbiAgOyhhc3luYyAoKSA9PiB7XG4gICAgd2hpbGUgKCFmcltrQWJvcnRlZF0pIHtcbiAgICAgIC8vIDEuIFdhaXQgZm9yIGNodW5rUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBjaHVua1Byb21pc2VcblxuICAgICAgICAvLyAyLiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkLCBhbmQgaXNGaXJzdENodW5rIGlzXG4gICAgICAgIC8vICAgIHRydWUsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkXG4gICAgICAgIC8vICAgIGxvYWRzdGFydCBhdCBmci5cbiAgICAgICAgaWYgKGlzRmlyc3RDaHVuayAmJiAhZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2Fkc3RhcnQnLCBmcilcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gU2V0IGlzRmlyc3RDaHVuayB0byBmYWxzZS5cbiAgICAgICAgaXNGaXJzdENodW5rID0gZmFsc2VcblxuICAgICAgICAvLyA0LiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW4gb2JqZWN0IHdob3NlXG4gICAgICAgIC8vICAgIGRvbmUgcHJvcGVydHkgaXMgZmFsc2UgYW5kIHdob3NlIHZhbHVlIHByb3BlcnR5IGlzXG4gICAgICAgIC8vICAgIGEgVWludDhBcnJheSBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcbiAgICAgICAgaWYgKCFkb25lICYmIHR5cGVzLmlzVWludDhBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyAxLiBMZXQgYnMgYmUgdGhlIGJ5dGUgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlXG4gICAgICAgICAgLy8gICAgVWludDhBcnJheSBvYmplY3QuXG5cbiAgICAgICAgICAvLyAyLiBBcHBlbmQgYnMgdG8gYnl0ZXMuXG4gICAgICAgICAgYnl0ZXMucHVzaCh2YWx1ZSlcblxuICAgICAgICAgIC8vIDMuIElmIHJvdWdobHkgNTBtcyBoYXZlIHBhc3NlZCBzaW5jZSB0aGVzZSBzdGVwc1xuICAgICAgICAgIC8vICAgIHdlcmUgbGFzdCBpbnZva2VkLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhXG4gICAgICAgICAgLy8gICAgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHByb2dyZXNzIGF0IGZyLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgRGF0ZS5ub3coKSAtIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA+PSA1MFxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIWZyW2tBYm9ydGVkXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ3Byb2dyZXNzJywgZnIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuIFNldCBjaHVua1Byb21pc2UgdG8gdGhlIHJlc3VsdCBvZiByZWFkaW5nIGFcbiAgICAgICAgICAvLyAgICBjaHVuayBmcm9tIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgICAgICAgICBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG4gICAgICAgIH0gZWxzZSBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuXG4gICAgICAgICAgLy8gICAgb2JqZWN0IHdob3NlIGRvbmUgcHJvcGVydHkgaXMgdHJ1ZSwgcXVldWUgYSB0YXNrXG4gICAgICAgICAgLy8gICAgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAgIC8vIDIuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiBwYWNrYWdlIGRhdGEgZ2l2ZW5cbiAgICAgICAgICAgIC8vICAgIGJ5dGVzLCB0eXBlLCBibG9iXHUyMDE5cyB0eXBlLCBhbmQgZW5jb2RpbmdOYW1lLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFja2FnZURhdGEoYnl0ZXMsIHR5cGUsIGJsb2IudHlwZSwgZW5jb2RpbmdOYW1lKVxuXG4gICAgICAgICAgICAgIC8vIDQuIEVsc2U6XG5cbiAgICAgICAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gcmVzdWx0LlxuICAgICAgICAgICAgICBmcltrUmVzdWx0XSA9IHJlc3VsdFxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgbG9hZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZCcsIGZyKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gMy4gSWYgcGFja2FnZSBkYXRhIHRocmV3IGFuIGV4Y2VwdGlvbiBlcnJvcjpcblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDUuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCBhblxuICAgICAgICAvLyAgICBlcnJvciBlcnJvciwgcXVldWUgYSB0YXNrIHRvIHJ1biB0aGUgZm9sbG93aW5nXG4gICAgICAgIC8vICAgIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgLy8gMi4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgIC8vIDMuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuXG4gICAgICAgICAgLy8gNC4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgZnIuXG4gICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9KSgpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZmlyZS1hLXByb2dyZXNzLWV2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSByZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmlyZUFQcm9ncmVzc0V2ZW50IChlLCByZWFkZXIpIHtcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgZG9lcyBub3QgYnViYmxlLiBlLmJ1YmJsZXMgbXVzdCBiZSBmYWxzZVxuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBpcyBOT1QgY2FuY2VsYWJsZS4gZS5jYW5jZWxhYmxlIG11c3QgYmUgZmFsc2VcbiAgY29uc3QgZXZlbnQgPSBuZXcgUHJvZ3Jlc3NFdmVudChlLCB7XG4gICAgYnViYmxlczogZmFsc2UsXG4gICAgY2FuY2VsYWJsZTogZmFsc2VcbiAgfSlcblxuICByZWFkZXIuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNibG9iLXBhY2thZ2UtZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBtaW1lVHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcGFja2FnZURhdGEgKGJ5dGVzLCB0eXBlLCBtaW1lVHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIEEgQmxvYiBoYXMgYW4gYXNzb2NpYXRlZCBwYWNrYWdlIGRhdGEgYWxnb3JpdGhtLCBnaXZlblxuICAvLyAgICBieXRlcywgYSB0eXBlLCBhIG9wdGlvbmFsIG1pbWVUeXBlLCBhbmQgYSBvcHRpb25hbFxuICAvLyAgICBlbmNvZGluZ05hbWUsIHdoaWNoIHN3aXRjaGVzIG9uIHR5cGUgYW5kIHJ1bnMgdGhlXG4gIC8vICAgIGFzc29jaWF0ZWQgc3RlcHM6XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnRGF0YVVSTCc6IHtcbiAgICAgIC8vIDEuIFJldHVybiBieXRlcyBhcyBhIERhdGFVUkwgW1JGQzIzOTddIHN1YmplY3QgdG9cbiAgICAgIC8vICAgIHRoZSBjb25zaWRlcmF0aW9ucyBiZWxvdzpcbiAgICAgIC8vICAqIFVzZSBtaW1lVHlwZSBhcyBwYXJ0IG9mIHRoZSBEYXRhIFVSTCBpZiBpdCBpc1xuICAgICAgLy8gICAgYXZhaWxhYmxlIGluIGtlZXBpbmcgd2l0aCB0aGUgRGF0YSBVUkxcbiAgICAgIC8vICAgIHNwZWNpZmljYXRpb24gW1JGQzIzOTddLlxuICAgICAgLy8gICogSWYgbWltZVR5cGUgaXMgbm90IGF2YWlsYWJsZSByZXR1cm4gYSBEYXRhIFVSTFxuICAgICAgLy8gICAgd2l0aG91dCBhIG1lZGlhLXR5cGUuIFtSRkMyMzk3XS5cblxuICAgICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3I3NlY3Rpb24tM1xuICAgICAgLy8gZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICAgICAgLy8gbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gICAgICAvLyBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gICAgICAvLyBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICAgICAgbGV0IGRhdGFVUkwgPSAnZGF0YTonXG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpXG5cbiAgICAgIGlmIChwYXJzZWQgIT09ICdmYWlsdXJlJykge1xuICAgICAgICBkYXRhVVJMICs9IHNlcmlhbGl6ZUFNaW1lVHlwZShwYXJzZWQpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gJztiYXNlNjQsJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIud3JpdGUoY2h1bmspKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci5lbmQoKSlcblxuICAgICAgcmV0dXJuIGRhdGFVUkxcbiAgICB9XG4gICAgY2FzZSAnVGV4dCc6IHtcbiAgICAgIC8vIDEuIExldCBlbmNvZGluZyBiZSBmYWlsdXJlXG4gICAgICBsZXQgZW5jb2RpbmcgPSAnZmFpbHVyZSdcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuY29kaW5nTmFtZSBpcyBwcmVzZW50LCBzZXQgZW5jb2RpbmcgdG8gdGhlXG4gICAgICAvLyAgICByZXN1bHQgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIGVuY29kaW5nTmFtZS5cbiAgICAgIGlmIChlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIGFuZCBtaW1lVHlwZSBpcyBwcmVzZW50OlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScgJiYgbWltZVR5cGUpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzZSBhIE1JTUUgdHlwZVxuICAgICAgICAvLyAgICBnaXZlbiBtaW1lVHlwZS5cbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgICAgICAgLy8gMi4gSWYgdHlwZSBpcyBub3QgZmFpbHVyZSwgc2V0IGVuY29kaW5nIHRvIHRoZSByZXN1bHRcbiAgICAgICAgLy8gICAgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIHR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbXCJjaGFyc2V0XCJdLlxuICAgICAgICBpZiAodHlwZSAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyh0eXBlLnBhcmFtZXRlcnMuZ2V0KCdjaGFyc2V0JykpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgdGhlbiBzZXQgZW5jb2RpbmcgdG8gVVRGLTguXG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJykge1xuICAgICAgICBlbmNvZGluZyA9ICdVVEYtOCdcbiAgICAgIH1cblxuICAgICAgLy8gNS4gRGVjb2RlIGJ5dGVzIHVzaW5nIGZhbGxiYWNrIGVuY29kaW5nIGVuY29kaW5nLCBhbmRcbiAgICAgIC8vICAgIHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgcmV0dXJuIGRlY29kZShieXRlcywgZW5jb2RpbmcpXG4gICAgfVxuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzoge1xuICAgICAgLy8gUmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIGNvbnN0IHNlcXVlbmNlID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoYnl0ZXMpXG5cbiAgICAgIHJldHVybiBzZXF1ZW5jZS5idWZmZXJcbiAgICB9XG4gICAgY2FzZSAnQmluYXJ5U3RyaW5nJzoge1xuICAgICAgLy8gUmV0dXJuIGJ5dGVzIGFzIGEgYmluYXJ5IHN0cmluZywgaW4gd2hpY2ggZXZlcnkgYnl0ZVxuICAgICAgLy8gIGlzIHJlcHJlc2VudGVkIGJ5IGEgY29kZSB1bml0IG9mIGVxdWFsIHZhbHVlIFswLi4yNTVdLlxuICAgICAgbGV0IGJpbmFyeVN0cmluZyA9ICcnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICAgIH1cblxuICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIuZW5kKClcblxuICAgICAgcmV0dXJuIGJpbmFyeVN0cmluZ1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2RlY29kZVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGlvUXVldWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICovXG5mdW5jdGlvbiBkZWNvZGUgKGlvUXVldWUsIGVuY29kaW5nKSB7XG4gIGNvbnN0IGJ5dGVzID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoaW9RdWV1ZSlcblxuICAvLyAxLiBMZXQgQk9NRW5jb2RpbmcgYmUgdGhlIHJlc3VsdCBvZiBCT00gc25pZmZpbmcgaW9RdWV1ZS5cbiAgY29uc3QgQk9NRW5jb2RpbmcgPSBCT01TbmlmZmluZyhieXRlcylcblxuICBsZXQgc2xpY2UgPSAwXG5cbiAgLy8gMi4gSWYgQk9NRW5jb2RpbmcgaXMgbm9uLW51bGw6XG4gIGlmIChCT01FbmNvZGluZyAhPT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCBlbmNvZGluZyB0byBCT01FbmNvZGluZy5cbiAgICBlbmNvZGluZyA9IEJPTUVuY29kaW5nXG5cbiAgICAvLyAyLiBSZWFkIHRocmVlIGJ5dGVzIGZyb20gaW9RdWV1ZSwgaWYgQk9NRW5jb2RpbmcgaXNcbiAgICAvLyAgICBVVEYtODsgb3RoZXJ3aXNlIHJlYWQgdHdvIGJ5dGVzLlxuICAgIC8vICAgIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICAgIHNsaWNlID0gQk9NRW5jb2RpbmcgPT09ICdVVEYtOCcgPyAzIDogMlxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgZW5jb2RpbmdcdTIwMTlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuXG4gIGNvbnN0IHNsaWNlZCA9IGJ5dGVzLnNsaWNlKHNsaWNlKVxuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nKS5kZWNvZGUoc2xpY2VkKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JvbS1zbmlmZlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBpb1F1ZXVlXG4gKi9cbmZ1bmN0aW9uIEJPTVNuaWZmaW5nIChpb1F1ZXVlKSB7XG4gIC8vIDEuIExldCBCT00gYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIDMgYnl0ZXMgZnJvbSBpb1F1ZXVlLFxuICAvLyAgICBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuICBjb25zdCBbYSwgYiwgY10gPSBpb1F1ZXVlXG5cbiAgLy8gMi4gRm9yIGVhY2ggb2YgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJlbG93LCBzdGFydGluZyB3aXRoXG4gIC8vICAgIHRoZSBmaXJzdCBvbmUgYW5kIGdvaW5nIGRvd24sIGlmIEJPTSBzdGFydHMgd2l0aCB0aGVcbiAgLy8gICAgYnl0ZXMgZ2l2ZW4gaW4gdGhlIGZpcnN0IGNvbHVtbiwgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGVuY29kaW5nIGdpdmVuIGluIHRoZSBjZWxsIGluIHRoZSBzZWNvbmQgY29sdW1uIG9mIHRoYXRcbiAgLy8gICAgcm93LiBPdGhlcndpc2UsIHJldHVybiBudWxsLlxuICBpZiAoYSA9PT0gMHhFRiAmJiBiID09PSAweEJCICYmIGMgPT09IDB4QkYpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkUgJiYgYiA9PT0gMHhGRikge1xuICAgIHJldHVybiAnVVRGLTE2QkUnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRiAmJiBiID09PSAweEZFKSB7XG4gICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtVaW50OEFycmF5W119IHNlcXVlbmNlc1xuICovXG5mdW5jdGlvbiBjb21iaW5lQnl0ZVNlcXVlbmNlcyAoc2VxdWVuY2VzKSB7XG4gIGNvbnN0IHNpemUgPSBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEgKyBiLmJ5dGVMZW5ndGhcbiAgfSwgMClcblxuICBsZXQgb2Zmc2V0ID0gMFxuXG4gIHJldHVybiBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgYS5zZXQoYiwgb2Zmc2V0KVxuICAgIG9mZnNldCArPSBiLmJ5dGVMZW5ndGhcbiAgICByZXR1cm4gYVxuICB9LCBuZXcgVWludDhBcnJheShzaXplKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyJylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdGaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZycpXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nLCAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JywgJ2VuY29kaW5nJylcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVhZEFzVGV4dChibG9iLCBlbmNvZGluZykgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggVGV4dCBhbmQgZW5jb2RpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnVGV4dCcsIGVuY29kaW5nKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNEYXRhVVJMXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNEYXRhVVJMIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcpXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNEYXRhVVJMKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLCBtdXN0XG4gICAgLy8gaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIERhdGFVUkwuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnRGF0YVVSTCcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLWFib3J0XG4gICAqL1xuICBhYm9ydCAoKSB7XG4gICAgLy8gMS4gSWYgdGhpcydzIHN0YXRlIGlzIFwiZW1wdHlcIiBvciBpZiB0aGlzJ3Mgc3RhdGUgaXNcbiAgICAvLyAgICBcImRvbmVcIiBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsIGFuZCB0ZXJtaW5hdGVcbiAgICAvLyAgICB0aGlzIGFsZ29yaXRobS5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnZW1wdHknIHx8IHRoaXNba1N0YXRlXSA9PT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpcydzIHN0YXRlIGlzIFwibG9hZGluZ1wiIHNldCB0aGlzJ3Mgc3RhdGUgdG9cbiAgICAvLyAgICBcImRvbmVcIiBhbmQgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbC5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9ICdkb25lJ1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgYW55IHRhc2tzIGZyb20gdGhpcyBvbiB0aGUgZmlsZSByZWFkaW5nXG4gICAgLy8gICAgdGFzayBzb3VyY2UgaW4gYW4gYWZmaWxpYXRlZCB0YXNrIHF1ZXVlLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHRob3NlIHRhc2tzIGZyb20gdGhhdCB0YXNrIHF1ZXVlLlxuICAgIHRoaXNba0Fib3J0ZWRdID0gdHJ1ZVxuXG4gICAgLy8gNC4gVGVybWluYXRlIHRoZSBhbGdvcml0aG0gZm9yIHRoZSByZWFkIG1ldGhvZCBiZWluZyBwcm9jZXNzZWQuXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gNS4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBhYm9ydCBhdCB0aGlzLlxuICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnYWJvcnQnLCB0aGlzKVxuXG4gICAgLy8gNi4gSWYgdGhpcydzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhpcy5cbiAgICBpZiAodGhpc1trU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlYWR5c3RhdGVcbiAgICovXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgc3dpdGNoICh0aGlzW2tTdGF0ZV0pIHtcbiAgICAgIGNhc2UgJ2VtcHR5JzogcmV0dXJuIHRoaXMuRU1QVFlcbiAgICAgIGNhc2UgJ2xvYWRpbmcnOiByZXR1cm4gdGhpcy5MT0FESU5HXG4gICAgICBjYXNlICdkb25lJzogcmV0dXJuIHRoaXMuRE9ORVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZXN1bHRcbiAgICovXG4gIGdldCByZXN1bHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgcmVzdWx0IGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIHJlc3VsdC5cbiAgICByZXR1cm4gdGhpc1trUmVzdWx0XVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVycm9yXG4gICAqL1xuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgZXJyb3IgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgZXJyb3IuXG4gICAgcmV0dXJuIHRoaXNba0Vycm9yXVxuICB9XG5cbiAgZ2V0IG9ubG9hZGVuZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRlbmRcbiAgfVxuXG4gIHNldCBvbmxvYWRlbmQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRlbmQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIHRoaXNba0V2ZW50c10ubG9hZGVuZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzW2tFdmVudHNdLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWRzdGFydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRzdGFydFxuICB9XG5cbiAgc2V0IG9ubG9hZHN0YXJ0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ucHJvZ3Jlc3MgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5wcm9ncmVzc1xuICB9XG5cbiAgc2V0IG9ucHJvZ3Jlc3MgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLnByb2dyZXNzKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpc1trRXZlbnRzXS5wcm9ncmVzcylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2FkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZFxuICB9XG5cbiAgc2V0IG9ubG9hZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpc1trRXZlbnRzXS5sb2FkKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmFib3J0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uYWJvcnRcbiAgfVxuXG4gIHNldCBvbmFib3J0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5hYm9ydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXNba0V2ZW50c10uYWJvcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lbXB0eVxuRmlsZVJlYWRlci5FTVBUWSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkVNUFRZID0gMFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWxvYWRpbmdcbkZpbGVSZWFkZXIuTE9BRElORyA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkxPQURJTkcgPSAxXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZG9uZVxuRmlsZVJlYWRlci5ET05FID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRE9ORSA9IDJcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlci5wcm90b3R5cGUsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRBc0FycmF5QnVmZmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNCaW5hcnlTdHJpbmc6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0RhdGFVUkw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZXN1bHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRzdGFydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25wcm9ncmVzczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlUmVhZGVyJyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGaWxlUmVhZGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi8uLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgeyBpc1ZhbGlkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLWVxdWFsc1xuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IGV4Y2x1ZGVGcmFnbWVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVybEVxdWFscyAoQSwgQiwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgY29uc3Qgc2VyaWFsaXplZEEgPSBVUkxTZXJpYWxpemVyKEEsIGV4Y2x1ZGVGcmFnbWVudClcblxuICBjb25zdCBzZXJpYWxpemVkQiA9IFVSTFNlcmlhbGl6ZXIoQiwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIHJldHVybiBzZXJpYWxpemVkQSA9PT0gc2VyaWFsaXplZEJcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzY5NGQyMGQxMzRjYjU1M2Q4ZDg5ZTU1MDBiOTE0ODAxMmIxYmEyOTkvY29udGVudC9icm93c2VyL2NhY2hlX3N0b3JhZ2UvY2FjaGVfc3RvcmFnZV9jYWNoZS5jYyNMMjYwLUwyNjJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZXMgKGhlYWRlcikge1xuICBhc3NlcnQoaGVhZGVyICE9PSBudWxsKVxuXG4gIGNvbnN0IHZhbHVlcyA9IFtdXG5cbiAgZm9yIChsZXQgdmFsdWUgb2YgaGVhZGVyLnNwbGl0KCcsJykpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKGlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXJsRXF1YWxzLFxuICBnZXRGaWVsZFZhbHVlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHVybEVxdWFscywgZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFJlc3BvbnNlLCBjbG9uZVJlc3BvbnNlLCBmcm9tSW5uZXJSZXNwb25zZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBSZXF1ZXN0LCBmcm9tSW5uZXJSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tY2FjaGUtYmF0Y2gtb3BlcmF0aW9uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYWNoZUJhdGNoT3BlcmF0aW9uXG4gKiBAcHJvcGVydHkgeydkZWxldGUnIHwgJ3B1dCd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXF1ZXN0XG4gKiBAcHJvcGVydHkge2FueX0gcmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gKiBAdHlwZWRlZiB7W2FueSwgYW55XVtdfSByZXF1ZXN0UmVzcG9uc2VMaXN0XG4gKi9cblxuY2xhc3MgQ2FjaGUge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICAgKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBhcmd1bWVudHNbMV1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZS5tYXRjaCdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICBjb25zdCBwID0gdGhpcy4jaW50ZXJuYWxNYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zLCAxKVxuXG4gICAgaWYgKHAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gcFswXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2hBbGwgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLm1hdGNoQWxsJ1xuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICByZXR1cm4gdGhpcy4jaW50ZXJuYWxNYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zKVxuICB9XG5cbiAgYXN5bmMgYWRkIChyZXF1ZXN0KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGUuYWRkJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QsIHByZWZpeCwgJ3JlcXVlc3QnKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IFtyZXF1ZXN0XVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXNwb25zZUFycmF5UHJvbWlzZSA9IHRoaXMuYWRkQWxsKHJlcXVlc3RzKVxuXG4gICAgLy8gMy5cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2VBcnJheVByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGFkZEFsbCAocmVxdWVzdHMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZS5hZGRBbGwnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZXMgPSBbXVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAvLyAzLlxuICAgIGZvciAobGV0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgICB0eXBlczogWyd1bmRlZmluZWQgaXMgbm90IGFsbG93ZWQnXVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAzLjFcbiAgICAgIGNvbnN0IHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgLy8gMy4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSB8fCByLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lLidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gNS40XG4gICAgICByLmluaXRpYXRvciA9ICdmZXRjaCdcbiAgICAgIHIuZGVzdGluYXRpb24gPSAnc3VicmVzb3VyY2UnXG5cbiAgICAgIC8vIDUuNVxuICAgICAgcmVxdWVzdExpc3QucHVzaChyKVxuXG4gICAgICAvLyA1LjZcbiAgICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAgIC8vIDUuN1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5wdXNoKGZldGNoaW5nKHtcbiAgICAgICAgcmVxdWVzdDogcixcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgfHwgcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+IDI5OSkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhbiBpbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHRoZSByZXF1ZXN0IGZhaWxlZC4nXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHsgLy8gMi5cbiAgICAgICAgICAgIC8vIDIuMVxuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgICAgICAgLy8gMi4yXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgZmV0Y2hDb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ2Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMi5cbiAgICAgICAgICByZXNwb25zZVByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIC8vIDUuOFxuICAgICAgcmVzcG9uc2VQcm9taXNlcy5wdXNoKHJlc3BvbnNlUHJvbWlzZS5wcm9taXNlKVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgY29uc3QgcCA9IFByb21pc2UuYWxsKHJlc3BvbnNlUHJvbWlzZXMpXG5cbiAgICAvLyA3LlxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IHBcblxuICAgIC8vIDcuMVxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gNy4yXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgLy8gNy4zXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDcuMy4xXG4gICAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdwdXQnLCAvLyA3LjMuMlxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0TGlzdFtpbmRleF0sIC8vIDcuMy4zXG4gICAgICAgIHJlc3BvbnNlIC8vIDcuMy40XG4gICAgICB9XG5cbiAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pIC8vIDcuMy41XG5cbiAgICAgIGluZGV4KysgLy8gNy4zLjZcbiAgICB9XG5cbiAgICAvLyA3LjVcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNy42LjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gNy42LjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gNy42LjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA3LjYuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDcuNi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDcuN1xuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgcHV0IChyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLnB1dCdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICByZXNwb25zZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlKHJlc3BvbnNlLCBwcmVmaXgsICdyZXNwb25zZScpXG5cbiAgICAvLyAxLlxuICAgIGxldCBpbm5lclJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaW5uZXJSZXF1ZXN0ID0gcmVxdWVzdFtrU3RhdGVdXG4gICAgfSBlbHNlIHsgLy8gMy5cbiAgICAgIGlubmVyUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoaW5uZXJSZXF1ZXN0LnVybCkgfHwgaW5uZXJSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBhbiBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgY29uc3QgaW5uZXJSZXNwb25zZSA9IHJlc3BvbnNlW2tTdGF0ZV1cblxuICAgIC8vIDYuXG4gICAgaWYgKGlubmVyUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiAnR290ICogdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOC5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICYmIChpc0Rpc3R1cmJlZChpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSB8fCBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtLmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNwb25zZSBib2R5IGlzIGxvY2tlZCBvciBkaXN0dXJiZWQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDkuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKGlubmVyUmVzcG9uc2UpXG5cbiAgICAvLyAxMC5cbiAgICBjb25zdCBib2R5UmVhZFByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTEuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxMS4xXG4gICAgICBjb25zdCBzdHJlYW0gPSBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtXG5cbiAgICAgIC8vIDExLjJcbiAgICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gICAgICAvLyAxMS4zXG4gICAgICByZWFkQWxsQnl0ZXMocmVhZGVyKS50aGVuKGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlLCBib2R5UmVhZFByb21pc2UucmVqZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICBib2R5UmVhZFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLy8gMTIuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyAxMy5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ3B1dCcsIC8vIDE0LlxuICAgICAgcmVxdWVzdDogaW5uZXJSZXF1ZXN0LCAvLyAxNS5cbiAgICAgIHJlc3BvbnNlOiBjbG9uZWRSZXNwb25zZSAvLyAxNi5cbiAgICB9XG5cbiAgICAvLyAxNy5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgLy8gMTkuXG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBib2R5UmVhZFByb21pc2UucHJvbWlzZVxuXG4gICAgaWYgKGNsb25lZFJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgY2xvbmVkUmVzcG9uc2UuYm9keS5zb3VyY2UgPSBieXRlc1xuICAgIH1cblxuICAgIC8vIDE5LjFcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTkuMi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDE5LjIuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyAxOS4yLjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyAxOS4yLjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9IGVsc2UgeyAvLyAxOS4yLjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBkZWxldGUgKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8cmVhZG9ubHkgUmVxdWVzdFtdPn1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLmtleXMnXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdCwgcHJlZml4LCAncmVxdWVzdCcpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMsIHByZWZpeCwgJ29wdGlvbnMnKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMi4xXG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7IC8vIDIuMlxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlcXVlc3RzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgLy8gNS4yLjEuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAvLyA1LjMuMi4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDUuNC4xXG4gICAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAgIC8vIDUuNC4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9iamVjdCA9IGZyb21Jbm5lclJlcXVlc3QoXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsLFxuICAgICAgICAgICdpbW11dGFibGUnXG4gICAgICAgIClcbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gICNpbnRlcm5hbE1hdGNoQWxsIChyZXF1ZXN0LCBvcHRpb25zLCBtYXhSZXNwb25zZXMgPSBJbmZpbml0eSkge1xuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgLy8gV2UgZG9uJ3QgaW1wbGVtZW50IENPUnMgc28gd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgdGhlIHJlc3BvbnNlcywgeWF5IVxuXG4gICAgLy8gNS41LjFcbiAgICBjb25zdCByZXNwb25zZUxpc3QgPSBbXVxuXG4gICAgLy8gNS41LjJcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNS41LjIuMVxuICAgICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBmcm9tSW5uZXJSZXNwb25zZShyZXNwb25zZSwgJ2ltbXV0YWJsZScpXG5cbiAgICAgIHJlc3BvbnNlTGlzdC5wdXNoKHJlc3BvbnNlT2JqZWN0LmNsb25lKCkpXG5cbiAgICAgIGlmIChyZXNwb25zZUxpc3QubGVuZ3RoID49IG1heFJlc3BvbnNlcykge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocmVzcG9uc2VMaXN0KVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbWF0Y2hBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwdXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuY29uc3QgY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMgPSBbXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVTZWFyY2gnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVNZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVWYXJ5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzLFxuICB7XG4gICAga2V5OiAnY2FjaGVOYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoUmVzcG9uc2UpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm9cbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgQ2FjaGUgfSA9IHJlcXVpcmUoJy4vY2FjaGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIENhY2hlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtbmFtZS10by1jYWNoZS1tYXBcbiAgICogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydCgnLi9jYWNoZScpLnJlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjY2FjaGVzID0gbmV3IE1hcCgpXG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0NhY2hlU3RvcmFnZS5tYXRjaCcpXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBpZiAob3B0aW9ucy5jYWNoZU5hbWUgIT0gbnVsbCkge1xuICAgICAgLy8gMS4xLjEuMVxuICAgICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMob3B0aW9ucy5jYWNoZU5hbWUpKSB7XG4gICAgICAgIC8vIDEuMS4xLjEuMVxuICAgICAgICBjb25zdCBjYWNoZUxpc3QgPSB0aGlzLiNjYWNoZXMuZ2V0KG9wdGlvbnMuY2FjaGVOYW1lKVxuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gMi5cbiAgICAgIC8vIDIuMlxuICAgICAgZm9yIChjb25zdCBjYWNoZUxpc3Qgb2YgdGhpcy4jY2FjaGVzLnZhbHVlcygpKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICAvLyAyLjIuMS4yXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcblxuICAgICAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtaGFzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBoYXMgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZVN0b3JhZ2UuaGFzJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSwgcHJlZml4LCAnY2FjaGVOYW1lJylcblxuICAgIC8vIDIuMS4xXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZXN0b3JhZ2Utb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlPn1cbiAgICovXG4gIGFzeW5jIG9wZW4gKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZVN0b3JhZ2Uub3BlbidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUsIHByZWZpeCwgJ2NhY2hlTmFtZScpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGVTdG9yYWdlLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUsIHByZWZpeCwgJ2NhY2hlTmFtZScpXG5cbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmRlbGV0ZShjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1rZXlzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIC8vIDIuMVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLiNjYWNoZXMua2V5cygpXG5cbiAgICAvLyAyLjJcbiAgICByZXR1cm4gWy4uLmtleXNdXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVTdG9yYWdlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGVTdG9yYWdlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVTdG9yYWdlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1hdHRyaWJ1dGUtdmFsdWUtc2l6ZVxuY29uc3QgbWF4QXR0cmlidXRlVmFsdWVTaXplID0gMTAyNFxuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tbmFtZS12YWx1ZS1wYWlyLXNpemVcbmNvbnN0IG1heE5hbWVWYWx1ZVBhaXJTaXplID0gNDA5NlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWF4QXR0cmlidXRlVmFsdWVTaXplLFxuICBtYXhOYW1lVmFsdWVQYWlyU2l6ZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSAweDAwICYmIGNvZGUgPD0gMHgwOCkgfHxcbiAgICAgIChjb2RlID49IDB4MEEgJiYgY29kZSA8PSAweDFGKSB8fFxuICAgICAgY29kZSA9PT0gMHg3RlxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuIENIQVIgICAgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiB0b2tlbiAgICAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gc2VwYXJhdG9ycyAgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gICAgICAgICAgICAgICAgfCBcIixcIiB8IFwiO1wiIHwgXCI6XCIgfCBcIlxcXCIgfCA8XCI+XG4gICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVOYW1lIChuYW1lKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSBuYW1lLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8IC8vIGV4Y2x1ZGUgQ1RMcyAoMC0zMSksIFNQIGFuZCBIVFxuICAgICAgY29kZSA+IDB4N0UgfHwgLy8gZXhjbHVkZSBub24tYXNjaWkgYW5kIERFTFxuICAgICAgY29kZSA9PT0gMHgyMiB8fCAvLyBcIlxuICAgICAgY29kZSA9PT0gMHgyOCB8fCAvLyAoXG4gICAgICBjb2RlID09PSAweDI5IHx8IC8vIClcbiAgICAgIGNvZGUgPT09IDB4M0MgfHwgLy8gPFxuICAgICAgY29kZSA9PT0gMHgzRSB8fCAvLyA+XG4gICAgICBjb2RlID09PSAweDQwIHx8IC8vIEBcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgzQiB8fCAvLyA7XG4gICAgICBjb2RlID09PSAweDNBIHx8IC8vIDpcbiAgICAgIGNvZGUgPT09IDB4NUMgfHwgLy8gXFxcbiAgICAgIGNvZGUgPT09IDB4MkYgfHwgLy8gL1xuICAgICAgY29kZSA9PT0gMHg1QiB8fCAvLyBbXG4gICAgICBjb2RlID09PSAweDVEIHx8IC8vIF1cbiAgICAgIGNvZGUgPT09IDB4M0YgfHwgLy8gP1xuICAgICAgY29kZSA9PT0gMHgzRCB8fCAvLyA9XG4gICAgICBjb2RlID09PSAweDdCIHx8IC8vIHtcbiAgICAgIGNvZGUgPT09IDB4N0QgLy8gfVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBuYW1lJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gY29va2llLXZhbHVlICAgICAgPSAqY29va2llLW9jdGV0IC8gKCBEUVVPVEUgKmNvb2tpZS1vY3RldCBEUVVPVEUgKVxuIGNvb2tpZS1vY3RldCAgICAgID0gJXgyMSAvICV4MjMtMkIgLyAleDJELTNBIC8gJXgzQy01QiAvICV4NUQtN0VcbiAgICAgICAgICAgICAgICAgICAgICAgOyBVUy1BU0NJSSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBDVExzLFxuICAgICAgICAgICAgICAgICAgICAgICA7IHdoaXRlc3BhY2UgRFFVT1RFLCBjb21tYSwgc2VtaWNvbG9uLFxuICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBiYWNrc2xhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVZhbHVlICh2YWx1ZSkge1xuICBsZXQgbGVuID0gdmFsdWUubGVuZ3RoXG4gIGxldCBpID0gMFxuXG4gIC8vIGlmIHRoZSB2YWx1ZSBpcyB3cmFwcGVkIGluIERRVU9URVxuICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICBpZiAobGVuID09PSAxIHx8IHZhbHVlW2xlbiAtIDFdICE9PSAnXCInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHZhbHVlJylcbiAgICB9XG4gICAgLS1sZW5cbiAgICArK2lcbiAgfVxuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgY29uc3QgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaSsrKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA+IDB4N0UgfHwgLy8gbm9uLWFzY2lpIGFuZCBERUwgKDEyNylcbiAgICAgIGNvZGUgPT09IDB4MjIgfHwgLy8gXCJcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgzQiB8fCAvLyA7XG4gICAgICBjb2RlID09PSAweDVDIC8vIFxcXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMCB8fCAvLyBleGNsdWRlIENUTHMgKDAtMzEpXG4gICAgICBjb2RlID4gMHg3RSB8fCAvLyBleGNsdWRlIERFTCBhbmQgbm9uLWFzY2lpXG4gICAgICBjb2RlID09PSAweDNCIC8vIDtcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogPGxldC1kaWc+IDo6PSA8bGV0dGVyPiB8IDxkaWdpdD5cbiAqXG4gKiA8bGV0dGVyPiA6Oj0gYW55IG9uZSBvZiB0aGUgNTIgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIEEgdGhyb3VnaCBaIGluXG4gKiB1cHBlciBjYXNlIGFuZCBhIHRocm91Z2ggeiBpbiBsb3dlciBjYXNlXG4gKlxuICogPGRpZ2l0PiA6Oj0gYW55IG9uZSBvZiB0aGUgdGVuIGRpZ2l0cyAwIHRocm91Z2ggOXJcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMxMDM0I3NlY3Rpb24tMy41XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0xldHRlck9yRGlnaXQgKGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICAoY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOSkgfHwgLy8gMC05XG4gICAgKGNvZGUgPj0gMHg0MSAmJiBjb2RlIDw9IDB4NUEpIHx8IC8vIEEtWlxuICAgIChjb2RlID49IDB4NjEgJiYgY29kZSA8PSAweDdBKSAvLyBhLXpcbiAgKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGNvb2tpZSBkb21haW4gYWdhaW5zdCB0aGUgXCJwcmVmZXJyZWQgbmFtZSBzeW50YXhcIi5cbiAqXG4gKiA8ZG9tYWluPiAgICAgIDo6PSA8c3ViZG9tYWluPiB8IFwiIFwiXG4gKiA8c3ViZG9tYWluPiAgIDo6PSA8bGFiZWw+IHwgPHN1YmRvbWFpbj4gXCIuXCIgPGxhYmVsPlxuICogPGxhYmVsPiAgICAgICA6Oj0gPGxldC1kaWc+IFsgWyA8bGRoLXN0cj4gXSA8bGV0LWRpZz4gXVxuICogPGxkaC1zdHI+ICAgICA6Oj0gPGxldC1kaWctaHlwPiB8IDxsZXQtZGlnLWh5cD4gPGxkaC1zdHI+XG4gKiA8bGV0LWRpZy1oeXA+IDo6PSA8bGV0LWRpZz4gfCBcIi1cIlxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzEwMzQjc2VjdGlvbi0zLjVcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzExMjMjc2VjdGlvbi0yLjFcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzEwMzUjc2VjdGlvbi0yLjMuNFxuICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZURvbWFpbiAoZG9tYWluKSB7XG4gIC8vIDxkb21haW4+IDo6PSA8c3ViZG9tYWluPiB8IFwiIFwiXG4gIGlmIChkb21haW4gPT09ICcgJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGRvbWFpbi5sZW5ndGggPiAyNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gIH1cblxuICBsZXQgbGFiZWxMZW5ndGggPSAwXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21haW4ubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gZG9tYWluLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChjb2RlID09PSAweDJFKSB7XG4gICAgICBpZiAobGFiZWxMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoZG9tYWluLmNoYXJDb2RlQXQoaSAtIDEpID09PSAweDJEKSB7IC8vIFwiLVwiXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgICAgIH1cblxuICAgICAgbGFiZWxMZW5ndGggPSAwXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChsYWJlbExlbmd0aCA9PT0gMCAmJiAhaXNMZXR0ZXJPckRpZ2l0KGNvZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gICAgfVxuXG4gICAgaWYgKCFpc0xldHRlck9yRGlnaXQoY29kZSkgJiYgY29kZSAhPT0gMHgyRCkgeyAvLyBcIi1cIlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICAgIH1cblxuICAgIGlmICgrK2xhYmVsTGVuZ3RoID4gNjMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgICB9XG4gIH1cblxuICBpZiAobGFiZWxMZW5ndGggPT09IDAgfHwgZG9tYWluLmNoYXJDb2RlQXQoZG9tYWluLmxlbmd0aCAtIDEpID09PSAweDJEKSB7IC8vIFwiLVwiXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbmNvbnN0IElNRkRheXMgPSBbXG4gICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLFxuICAnVGh1JywgJ0ZyaScsICdTYXQnXG5dXG5cbmNvbnN0IElNRk1vbnRocyA9IFtcbiAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ1xuXVxuXG5jb25zdCBJTUZQYWRkZWROdW1iZXJzID0gQXJyYXkoNjEpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMVxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGF0ZVxuICBJTUYtZml4ZGF0ZSAgPSBkYXktbmFtZSBcIixcIiBTUCBkYXRlMSBTUCB0aW1lLW9mLWRheSBTUCBHTVRcbiAgOyBmaXhlZCBsZW5ndGgvem9uZS9jYXBpdGFsaXphdGlvbiBzdWJzZXQgb2YgdGhlIGZvcm1hdFxuICA7IHNlZSBTZWN0aW9uIDMuMyBvZiBbUkZDNTMyMl1cblxuICBkYXktbmFtZSAgICAgPSAleDRELjZGLjZFIDsgXCJNb25cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0Ljc1LjY1IDsgXCJUdWVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU3LjY1LjY0IDsgXCJXZWRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0LjY4Ljc1IDsgXCJUaHVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjcyLjY5IDsgXCJGcmlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjYxLjc0IDsgXCJTYXRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjc1LjZFIDsgXCJTdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgZGF0ZTEgICAgICAgID0gZGF5IFNQIG1vbnRoIFNQIHllYXJcbiAgICAgICAgICAgICAgICAgIDsgZS5nLiwgMDIgSnVuIDE5ODJcblxuICBkYXkgICAgICAgICAgPSAyRElHSVRcbiAgbW9udGggICAgICAgID0gJXg0QS42MS42RSA7IFwiSmFuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni42NS42MiA7IFwiRmViXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43MiA7IFwiTWFyXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43MC43MiA7IFwiQXByXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43OSA7IFwiTWF5XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42RSA7IFwiSnVuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42QyA7IFwiSnVsXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43NS42NyA7IFwiQXVnXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42NS43MCA7IFwiU2VwXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ri42My43NCA7IFwiT2N0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RS42Ri43NiA7IFwiTm92XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0NC42NS42MyA7IFwiRGVjXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIHllYXIgICAgICAgICA9IDRESUdJVFxuXG4gIEdNVCAgICAgICAgICA9ICV4NDcuNEQuNTQgOyBcIkdNVFwiLCBjYXNlLXNlbnNpdGl2ZVxuXG4gIHRpbWUtb2YtZGF5ICA9IGhvdXIgXCI6XCIgbWludXRlIFwiOlwiIHNlY29uZFxuICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NjAgKGxlYXAgc2Vjb25kKVxuXG4gIGhvdXIgICAgICAgICA9IDJESUdJVFxuICBtaW51dGUgICAgICAgPSAyRElHSVRcbiAgc2Vjb25kICAgICAgID0gMkRJR0lUXG4gKi9cbmZ1bmN0aW9uIHRvSU1GRGF0ZSAoZGF0ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG4gIH1cblxuICByZXR1cm4gYCR7SU1GRGF5c1tkYXRlLmdldFVUQ0RheSgpXX0sICR7SU1GUGFkZGVkTnVtYmVyc1tkYXRlLmdldFVUQ0RhdGUoKV19ICR7SU1GTW9udGhzW2RhdGUuZ2V0VVRDTW9udGgoKV19ICR7ZGF0ZS5nZXRVVENGdWxsWWVhcigpfSAke0lNRlBhZGRlZE51bWJlcnNbZGF0ZS5nZXRVVENIb3VycygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDTWludXRlcygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDU2Vjb25kcygpXX0gR01UYFxufVxuXG4vKipcbiBtYXgtYWdlLWF2ICAgICAgICA9IFwiTWF4LUFnZT1cIiBub24temVyby1kaWdpdCAqRElHSVRcbiAgICAgICAgICAgICAgICAgICAgICAgOyBJbiBwcmFjdGljZSwgYm90aCBleHBpcmVzLWF2IGFuZCBtYXgtYWdlLWF2XG4gICAgICAgICAgICAgICAgICAgICAgIDsgYXJlIGxpbWl0ZWQgdG8gZGF0ZXMgcmVwcmVzZW50YWJsZSBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgOyB1c2VyIGFnZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IG1heEFnZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU1heEFnZSAobWF4QWdlKSB7XG4gIGlmIChtYXhBZ2UgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBtYXgtYWdlJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjUjc2VjdGlvbi00LjEuMVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Db29raWV9IGNvb2tpZVxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkgKGNvb2tpZSkge1xuICBpZiAoY29va2llLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhbGlkYXRlQ29va2llTmFtZShjb29raWUubmFtZSlcbiAgdmFsaWRhdGVDb29raWVWYWx1ZShjb29raWUudmFsdWUpXG5cbiAgY29uc3Qgb3V0ID0gW2Ake2Nvb2tpZS5uYW1lfT0ke2Nvb2tpZS52YWx1ZX1gXVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMVxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjJcbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fU2VjdXJlLScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgfVxuXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX0hvc3QtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICAgIGNvb2tpZS5kb21haW4gPSBudWxsXG4gICAgY29va2llLnBhdGggPSAnLydcbiAgfVxuXG4gIGlmIChjb29raWUuc2VjdXJlKSB7XG4gICAgb3V0LnB1c2goJ1NlY3VyZScpXG4gIH1cblxuICBpZiAoY29va2llLmh0dHBPbmx5KSB7XG4gICAgb3V0LnB1c2goJ0h0dHBPbmx5JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29va2llLm1heEFnZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZU1heEFnZShjb29raWUubWF4QWdlKVxuICAgIG91dC5wdXNoKGBNYXgtQWdlPSR7Y29va2llLm1heEFnZX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5kb21haW4pIHtcbiAgICB2YWxpZGF0ZUNvb2tpZURvbWFpbihjb29raWUuZG9tYWluKVxuICAgIG91dC5wdXNoKGBEb21haW49JHtjb29raWUuZG9tYWlufWApXG4gIH1cblxuICBpZiAoY29va2llLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZVBhdGgoY29va2llLnBhdGgpXG4gICAgb3V0LnB1c2goYFBhdGg9JHtjb29raWUucGF0aH1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5leHBpcmVzICYmIGNvb2tpZS5leHBpcmVzLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgb3V0LnB1c2goYEV4cGlyZXM9JHt0b0lNRkRhdGUoY29va2llLmV4cGlyZXMpfWApXG4gIH1cblxuICBpZiAoY29va2llLnNhbWVTaXRlKSB7XG4gICAgb3V0LnB1c2goYFNhbWVTaXRlPSR7Y29va2llLnNhbWVTaXRlfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgY29va2llLnVucGFyc2VkKSB7XG4gICAgaWYgKCFwYXJ0LmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bnBhcnNlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgW2tleSwgLi4udmFsdWVdID0gcGFydC5zcGxpdCgnPScpXG5cbiAgICBjb25zdCB0cmltbWVkS2V5ID0ga2V5LnRyaW0oKVxuICAgIGNvbnN0IGpvaW5lZFZhbHVlID0gdmFsdWUuam9pbignPScpXG5cbiAgICB2YWxpZGF0ZUNvb2tpZU5hbWUodHJpbW1lZEtleSlcbiAgICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGpvaW5lZFZhbHVlKVxuXG4gICAgb3V0LnB1c2goYCR7dHJpbW1lZEtleX09JHtqb2luZWRWYWx1ZX1gKVxuICB9XG5cbiAgcmV0dXJuIG91dC5qb2luKCc7ICcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0NUTEV4Y2x1ZGluZ0h0YWIsXG4gIHZhbGlkYXRlQ29va2llTmFtZSxcbiAgdmFsaWRhdGVDb29raWVQYXRoLFxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlLFxuICB0b0lNRkRhdGUsXG4gIHN0cmluZ2lmeVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heE5hbWVWYWx1ZVBhaXJTaXplLCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgaXNDVExFeGNsdWRpbmdIdGFiIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgdGhlIGZpZWxkLXZhbHVlIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlciBzdHJpbmcuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEByZXR1cm5zIGlmIHRoZSBoZWFkZXIgaXMgaW52YWxpZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2V0Q29va2llIChoZWFkZXIpIHtcbiAgLy8gMS4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgwMC0wOCAvICV4MEEtMUYgLyAleDdGXG4gIC8vICAgIGNoYXJhY3RlciAoQ1RMIGNoYXJhY3RlcnMgZXhjbHVkaW5nIEhUQUIpOiBBYm9ydCB0aGVzZSBzdGVwcyBhbmRcbiAgLy8gICAgaWdub3JlIHRoZSBzZXQtY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKGlzQ1RMRXhjbHVkaW5nSHRhYihoZWFkZXIpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBuYW1lVmFsdWVQYWlyID0gJydcbiAgbGV0IHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIGxldCBuYW1lID0gJydcbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAyLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyOlxuICBpZiAoaGVhZGVyLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0byxcbiAgICAvLyAgICBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSwgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgICAvLyAgICAoaW5jbHVkaW5nIHRoZSAleDNCIChcIjtcIikgaW4gcXVlc3Rpb24pLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBuYW1lVmFsdWVQYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBoZWFkZXIsIHBvc2l0aW9uKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IGhlYWRlci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnNcbiAgICAvLyAgICBjb250YWluZWQgaW4gdGhlIHNldC1jb29raWUtc3RyaW5nLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICBuYW1lVmFsdWVQYWlyID0gaGVhZGVyXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBsYWNrcyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIHRoZW5cbiAgLy8gICAgdGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5LCBhbmQgdGhlIHZhbHVlIHN0cmluZyBpcyB0aGUgdmFsdWUgb2ZcbiAgLy8gICAgbmFtZS12YWx1ZS1wYWlyLlxuICBpZiAoIW5hbWVWYWx1ZVBhaXIuaW5jbHVkZXMoJz0nKSkge1xuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpclxuICB9IGVsc2Uge1xuICAgIC8vICAgIE90aGVyd2lzZSwgdGhlIG5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHlcbiAgICAvLyAgICBlbXB0eSkgdmFsdWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdFxuICAgIC8vICAgICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cbiAgICBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBuYW1lVmFsdWVQYWlyLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfVxuXG4gIC8vIDQuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBuYW1lXG4gIC8vICAgIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZy5cbiAgbmFtZSA9IG5hbWUudHJpbSgpXG4gIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgLy8gNS4gSWYgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgbmFtZSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmdcbiAgLy8gICAgaXMgbW9yZSB0aGFuIDQwOTYgb2N0ZXRzLCBhYm9ydCB0aGVzZSBzdGVwcyBhbmQgaWdub3JlIHRoZSBzZXQtXG4gIC8vICAgIGNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChuYW1lLmxlbmd0aCArIHZhbHVlLmxlbmd0aCA+IG1heE5hbWVWYWx1ZVBhaXJTaXplKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFRoZSBjb29raWUtbmFtZSBpcyB0aGUgbmFtZSBzdHJpbmcsIGFuZCB0aGUgY29va2llLXZhbHVlIGlzIHRoZVxuICAvLyAgICB2YWx1ZSBzdHJpbmcuXG4gIHJldHVybiB7XG4gICAgbmFtZSwgdmFsdWUsIC4uLnBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcylcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlclxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1tPYmplY3QuPHN0cmluZywgdW5rbm93bj5dPXt9fSBjb29raWVBdHRyaWJ1dGVMaXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzICh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QgPSB7fSkge1xuICAvLyAxLiBJZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyBzdHJpbmcgaXMgZW1wdHksIHNraXAgdGhlIHJlc3Qgb2ZcbiAgLy8gICAgdGhlc2Ugc3RlcHMuXG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAgfVxuXG4gIC8vIDIuIERpc2NhcmQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyAod2hpY2hcbiAgLy8gICAgd2lsbCBiZSBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIpLlxuICBhc3NlcnQodW5wYXJzZWRBdHRyaWJ1dGVzWzBdID09PSAnOycpXG4gIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZSgxKVxuXG4gIGxldCBjb29raWVBdiA9ICcnXG5cbiAgLy8gMy4gSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gIC8vICAgIGNoYXJhY3RlcjpcbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgY29va2llQXYgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc7JyxcbiAgICAgIHVucGFyc2VkQXR0cmlidXRlcyxcbiAgICAgIHsgcG9zaXRpb246IDAgfVxuICAgIClcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoY29va2llQXYubGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIENvbnN1bWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcy5cbiAgICBjb29raWVBdiA9IHVucGFyc2VkQXR0cmlidXRlc1xuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIH1cblxuICAvLyBMZXQgdGhlIGNvb2tpZS1hdiBzdHJpbmcgYmUgdGhlIGNoYXJhY3RlcnMgY29uc3VtZWQgaW4gdGhpcyBzdGVwLlxuXG4gIGxldCBhdHRyaWJ1dGVOYW1lID0gJydcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gJydcblxuICAvLyA0LiBJZiB0aGUgY29va2llLWF2IHN0cmluZyBjb250YWlucyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXI6XG4gIGlmIChjb29raWVBdi5pbmNsdWRlcygnPScpKSB7XG4gICAgLy8gMS4gVGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZVxuICAgIC8vICAgIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLXZhbHVlIHN0cmluZ1xuICAgIC8vICAgIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIGNvb2tpZUF2LFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgYXR0cmlidXRlVmFsdWUgPSBjb29raWVBdi5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGNvb2tpZS1hdlxuICAgIC8vICAgIHN0cmluZywgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nIGlzIGVtcHR5LlxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb29raWVBdlxuICB9XG5cbiAgLy8gNS4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZS1cbiAgLy8gICAgbmFtZSBzdHJpbmcgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nLlxuICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50cmltKClcbiAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS50cmltKClcblxuICAvLyA2LiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGxvbmdlciB0aGFuIDEwMjQgb2N0ZXRzLCBpZ25vcmUgdGhlXG4gIC8vICAgIGNvb2tpZS1hdiBzdHJpbmcgYW5kIHJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPiBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUpIHtcbiAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICB9XG5cbiAgLy8gNy4gUHJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWUgYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlXG4gIC8vICAgIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiAgKE5vdGljZSB0aGF0XG4gIC8vICAgIGF0dHJpYnV0ZXMgd2l0aCB1bnJlY29nbml6ZWQgYXR0cmlidXRlLW5hbWVzIGFyZSBpZ25vcmVkLilcbiAgY29uc3QgYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMVxuICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAvLyBcIkV4cGlyZXNcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cbiAgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdleHBpcmVzJykge1xuICAgIC8vIDEuIExldCB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUtdmFsdWVcbiAgICAvLyAgICBhcyBjb29raWUtZGF0ZSAoc2VlIFNlY3Rpb24gNS4xLjEpLlxuICAgIGNvbnN0IGV4cGlyeVRpbWUgPSBuZXcgRGF0ZShhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDIuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZVxuICAgIC8vICAgIHRoZSBjb29raWUtYXYuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmV4cGlyZXMgPSBleHBpcnlUaW1lXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ21heC1hZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4yXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJNYXgtXG4gICAgLy8gQWdlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYVxuICAgIC8vICAgIFwiLVwiIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgY29uc3QgY2hhckNvZGUgPSBhdHRyaWJ1dGVWYWx1ZS5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgYXR0cmlidXRlVmFsdWVbMF0gIT09ICctJykge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhIG5vbi1ESUdJVFxuICAgIC8vICAgIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVsdGEtc2Vjb25kcyBiZSB0aGUgYXR0cmlidXRlLXZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLlxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDQuIExldCBjb29raWUtYWdlLWxpbWl0IGJlIHRoZSBtYXhpbXVtIGFnZSBvZiB0aGUgY29va2llICh3aGljaFxuICAgIC8vICAgIFNIT1VMRCBiZSA0MDAgZGF5cyBvciBsZXNzLCBzZWUgU2VjdGlvbiA0LjEuMi4yKS5cblxuICAgIC8vIDUuIFNldCBkZWx0YS1zZWNvbmRzIHRvIHRoZSBzbWFsbGVyIG9mIGl0cyBwcmVzZW50IHZhbHVlIGFuZCBjb29raWUtXG4gICAgLy8gICAgYWdlLWxpbWl0LlxuICAgIC8vIGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhU2Vjb25kcyAqIDEwMDAsIG1heEV4cGlyZXNNcylcblxuICAgIC8vIDYuIElmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LVxuICAgIC8vICAgIHRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgZGF0ZSBhbmQgdGltZS4gIE90aGVyd2lzZSwgbGV0XG4gICAgLy8gICAgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcGx1cyBkZWx0YS1zZWNvbmRzXG4gICAgLy8gICAgc2Vjb25kcy5cbiAgICAvLyBjb25zdCBleHBpcnlUaW1lID0gZGVsdGFTZWNvbmRzIDw9IDAgPyBEYXRlLm5vdygpIDogRGF0ZS5ub3coKSArIGRlbHRhU2Vjb25kc1xuXG4gICAgLy8gNy4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBNYXgtQWdlIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgZXhwaXJ5LXRpbWUuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5tYXhBZ2UgPSBkZWx0YVNlY29uZHNcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZG9tYWluJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuM1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiRG9tYWluXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIExldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgbGV0IGNvb2tpZURvbWFpbiA9IGF0dHJpYnV0ZVZhbHVlXG5cbiAgICAvLyAyLiBJZiBjb29raWUtZG9tYWluIHN0YXJ0cyB3aXRoICV4MkUgKFwiLlwiKSwgbGV0IGNvb2tpZS1kb21haW4gYmVcbiAgICAvLyAgICBjb29raWUtZG9tYWluIHdpdGhvdXQgaXRzIGxlYWRpbmcgJXgyRSAoXCIuXCIpLlxuICAgIGlmIChjb29raWVEb21haW5bMF0gPT09ICcuJykge1xuICAgICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnNsaWNlKDEpXG4gICAgfVxuXG4gICAgLy8gMy4gQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlxuICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA0LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIERvbWFpbiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1kb21haW4uXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5kb21haW4gPSBjb29raWVEb21haW5cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAncGF0aCcpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjRcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlBhdGhcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAgIC8vICAgIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgIGxldCBjb29raWVQYXRoID0gJydcbiAgICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID09PSAwIHx8IGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLycpIHtcbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICAgICAgY29va2llUGF0aCA9ICcvJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgICAgY29va2llUGF0aCA9IGF0dHJpYnV0ZVZhbHVlXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLXBhdGguXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5wYXRoID0gY29va2llUGF0aFxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzZWN1cmUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC41XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgIC8vIHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgU2VjdXJlIGFuZCBhbiBlbXB0eSBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNlY3VyZSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnaHR0cG9ubHknKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC42XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIkh0dHBPbmx5XCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLVxuICAgIC8vIGF0dHJpYnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgSHR0cE9ubHkgYW5kIGFuIGVtcHR5XG4gICAgLy8gYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5odHRwT25seSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2FtZXNpdGUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC43XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIlNhbWVTaXRlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3M6XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDEuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJOb25lXCIsIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgXCJOb25lXCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID09PSAnbm9uZScpIHtcbiAgICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSAnTm9uZSdcbiAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID09PSAnc3RyaWN0Jykge1xuICAgICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAgIC8vICAgIFwiU3RyaWN0XCIsIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoXG4gICAgICAvLyAgICBhbiBhdHRyaWJ1dGUtbmFtZSBvZiBcIlNhbWVTaXRlXCIgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZlxuICAgICAgLy8gICAgXCJTdHJpY3RcIi5cbiAgICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSAnU3RyaWN0J1xuICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPT09ICdsYXgnKSB7XG4gICAgICAvLyAzLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgICAgLy8gICAgXCJMYXhcIiwgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIFwiU2FtZVNpdGVcIiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIFwiTGF4XCIuXG4gICAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gJ0xheCdcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZCA/Pz0gW11cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQucHVzaChgJHthdHRyaWJ1dGVOYW1lfT0ke2F0dHJpYnV0ZVZhbHVlfWApXG4gIH1cblxuICAvLyA4LiBSZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2VTZXRDb29raWUsXG4gIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29va2llXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAcHJvcGVydHkge0RhdGV8bnVtYmVyfHVuZGVmaW5lZH0gZXhwaXJlc1xuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBtYXhBZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gZG9tYWluXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IHBhdGhcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IHNlY3VyZVxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gaHR0cE9ubHlcbiAqIEBwcm9wZXJ0eSB7J1N0cmljdCd8J0xheCd8J05vbmUnfSBzYW1lU2l0ZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gdW5wYXJzZWRcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnZ2V0Q29va2llcycpXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llID0gaGVhZGVycy5nZXQoJ2Nvb2tpZScpXG4gIGNvbnN0IG91dCA9IHt9XG5cbiAgaWYgKCFjb29raWUpIHtcbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGNvb2tpZS5zcGxpdCgnOycpKSB7XG4gICAgY29uc3QgW25hbWUsIC4uLnZhbHVlXSA9IHBpZWNlLnNwbGl0KCc9JylcblxuICAgIG91dFtuYW1lLnRyaW0oKV0gPSB2YWx1ZS5qb2luKCc9JylcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3sgcGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nIH18dW5kZWZpbmVkfSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZGVsZXRlQ29va2llIChoZWFkZXJzLCBuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IHByZWZpeCA9ICdkZWxldGVDb29raWUnXG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gIGF0dHJpYnV0ZXMgPSB3ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpXG5cbiAgLy8gTWF0Y2hlcyBiZWhhdmlvciBvZlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVub19zdGQvYmxvYi82MzgyN2IxNjMzMGI4MjQ4OWEwNDYxNDAyN2MzM2I3OTA0ZTA4YmU1L2h0dHAvY29va2llLnRzI0wyNzhcbiAgc2V0Q29va2llKGhlYWRlcnMsIHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiAnJyxcbiAgICBleHBpcmVzOiBuZXcgRGF0ZSgwKSxcbiAgICAuLi5hdHRyaWJ1dGVzXG4gIH0pXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7Q29va2llW119XG4gKi9cbmZ1bmN0aW9uIGdldFNldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnZ2V0U2V0Q29va2llcycpXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llcyA9IGhlYWRlcnMuZ2V0U2V0Q29va2llKClcblxuICBpZiAoIWNvb2tpZXMpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBjb29raWVzLm1hcCgocGFpcikgPT4gcGFyc2VTZXRDb29raWUocGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCAnc2V0Q29va2llJylcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyKVxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5Db29raWUgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICduYW1lJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAndmFsdWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcigodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10odmFsdWUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSlcbiAgICB9KSxcbiAgICBrZXk6ICdleHBpcmVzJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSksXG4gICAga2V5OiAnbWF4QWdlJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdzZWN1cmUnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnaHR0cE9ubHknLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAga2V5OiAnc2FtZVNpdGUnLFxuICAgIGFsbG93ZWRWYWx1ZXM6IFsnU3RyaWN0JywgJ0xheCcsICdOb25lJ11cbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAndW5wYXJzZWQnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb29raWVzLFxuICBkZWxldGVDb29raWUsXG4gIGdldFNldENvb2tpZXMsXG4gIHNldENvb2tpZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgTWVzc2FnZVBvcnQgfSA9IHJlcXVpcmUoJ25vZGU6d29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIGlmICh0eXBlID09PSBrQ29uc3RydWN0KSB7XG4gICAgICBzdXBlcihhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSlcbiAgICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSAnTWVzc2FnZUV2ZW50IGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlLCBwcmVmaXgsICd0eXBlJylcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdChldmVudEluaXREaWN0LCBwcmVmaXgsICdldmVudEluaXREaWN0JylcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgfVxuXG4gIGdldCBkYXRhICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmRhdGFcbiAgfVxuXG4gIGdldCBvcmlnaW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQub3JpZ2luXG4gIH1cblxuICBnZXQgbGFzdEV2ZW50SWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGFzdEV2ZW50SWRcbiAgfVxuXG4gIGdldCBzb3VyY2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuc291cmNlXG4gIH1cblxuICBnZXQgcG9ydHMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHRoaXMuI2V2ZW50SW5pdC5wb3J0cykpIHtcbiAgICAgIE9iamVjdC5mcmVlemUodGhpcy4jZXZlbnRJbml0LnBvcnRzKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucG9ydHNcbiAgfVxuXG4gIGluaXRNZXNzYWdlRXZlbnQgKFxuICAgIHR5cGUsXG4gICAgYnViYmxlcyA9IGZhbHNlLFxuICAgIGNhbmNlbGFibGUgPSBmYWxzZSxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBvcmlnaW4gPSAnJyxcbiAgICBsYXN0RXZlbnRJZCA9ICcnLFxuICAgIHNvdXJjZSA9IG51bGwsXG4gICAgcG9ydHMgPSBbXVxuICApIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdNZXNzYWdlRXZlbnQuaW5pdE1lc3NhZ2VFdmVudCcpXG5cbiAgICByZXR1cm4gbmV3IE1lc3NhZ2VFdmVudCh0eXBlLCB7XG4gICAgICBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVGYXN0TWVzc2FnZUV2ZW50ICh0eXBlLCBpbml0KSB7XG4gICAgY29uc3QgbWVzc2FnZUV2ZW50ID0gbmV3IE1lc3NhZ2VFdmVudChrQ29uc3RydWN0LCB0eXBlLCBpbml0KVxuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0ID0gaW5pdFxuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0LmRhdGEgPz89IG51bGxcbiAgICBtZXNzYWdlRXZlbnQuI2V2ZW50SW5pdC5vcmlnaW4gPz89ICcnXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQubGFzdEV2ZW50SWQgPz89ICcnXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQuc291cmNlID8/PSBudWxsXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQucG9ydHMgPz89IFtdXG4gICAgcmV0dXJuIG1lc3NhZ2VFdmVudFxuICB9XG59XG5cbmNvbnN0IHsgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCB9ID0gTWVzc2FnZUV2ZW50XG5kZWxldGUgTWVzc2FnZUV2ZW50LmNyZWF0ZUZhc3RNZXNzYWdlRXZlbnRcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIGNvbnN0IHByZWZpeCA9ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlLCBwcmVmaXgsICd0eXBlJylcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2xvc2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICBjb25zdCBwcmVmaXggPSAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSwgcHJlZml4LCAndHlwZScpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICd3YXNDbGVhbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWFzb24nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ21lc3NhZ2UnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2ZpbGVuYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsaW5lbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbG5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlcnJvcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1lc3NhZ2VFdmVudCxcbiAgQ2xvc2VFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUaGlzIGlzIGEgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIgdW5pcXVlIHVzZWRcbi8vIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGVuZHBvaW50IGFjY2VwdHMgd2Vic29ja2V0XG4vLyBjb25uZWN0aW9ucy5cbi8vIFNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tMS4zXG5jb25zdCB1aWQgPSAnMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExJ1xuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG5jb25zdCBzdGF0ZXMgPSB7XG4gIENPTk5FQ1RJTkc6IDAsXG4gIE9QRU46IDEsXG4gIENMT1NJTkc6IDIsXG4gIENMT1NFRDogM1xufVxuXG5jb25zdCBzZW50Q2xvc2VGcmFtZVN0YXRlID0ge1xuICBOT1RfU0VOVDogMCxcbiAgUFJPQ0VTU0lORzogMSxcbiAgU0VOVDogMlxufVxuXG5jb25zdCBvcGNvZGVzID0ge1xuICBDT05USU5VQVRJT046IDB4MCxcbiAgVEVYVDogMHgxLFxuICBCSU5BUlk6IDB4MixcbiAgQ0xPU0U6IDB4OCxcbiAgUElORzogMHg5LFxuICBQT05HOiAweEFcbn1cblxuY29uc3QgbWF4VW5zaWduZWQxNkJpdCA9IDIgKiogMTYgLSAxIC8vIDY1NTM1XG5cbmNvbnN0IHBhcnNlclN0YXRlcyA9IHtcbiAgSU5GTzogMCxcbiAgUEFZTE9BRExFTkdUSF8xNjogMixcbiAgUEFZTE9BRExFTkdUSF82NDogMyxcbiAgUkVBRF9EQVRBOiA0XG59XG5cbmNvbnN0IGVtcHR5QnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG5cbmNvbnN0IHNlbmRIaW50cyA9IHtcbiAgc3RyaW5nOiAxLFxuICB0eXBlZEFycmF5OiAyLFxuICBhcnJheUJ1ZmZlcjogMyxcbiAgYmxvYjogNFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdWlkLFxuICBzZW50Q2xvc2VGcmFtZVN0YXRlLFxuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBzdGF0ZXMsXG4gIG9wY29kZXMsXG4gIG1heFVuc2lnbmVkMTZCaXQsXG4gIHBhcnNlclN0YXRlcyxcbiAgZW1wdHlCdWZmZXIsXG4gIHNlbmRIaW50c1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga0NvbnRyb2xsZXIsIGtSZXNwb25zZSwga0JpbmFyeVR5cGUsIGtXZWJTb2NrZXRVUkwgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHN0YXRlcywgb3Bjb2RlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBFcnJvckV2ZW50LCBjcmVhdGVGYXN0TWVzc2FnZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IGlzVXRmOCB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCwgcmVtb3ZlSFRUUFdoaXRlc3BhY2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcblxuLyogZ2xvYmFscyBCbG9iICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGluZyAod3MpIHtcbiAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIG5vdCB5ZXQgZXN0YWJsaXNoZWQsIGFuZCB0aGUgY29ubmVjdGlvblxuICAvLyBpcyBub3QgeWV0IGNsb3NlZCwgdGhlbiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENPTk5FQ1RJTkcgc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DT05ORUNUSU5HXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRXN0YWJsaXNoZWQgKHdzKSB7XG4gIC8vIElmIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBpcyB2YWxpZGF0ZWQgYXMgcHJvdmlkZWQgZm9yIGFib3ZlLCBpdCBpc1xuICAvLyBzYWlkIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBFc3RhYmxpc2hlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIGluIHRoZSBPUEVOIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuT1BFTlxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDbG9zZWQgKHdzKSB7XG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TRURcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0geyguLi5hcmdzOiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIEV2ZW50PikgPT4gRXZlbnR9IGV2ZW50RmFjdG9yeVxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50RmFjdG9yeSA9ICh0eXBlLCBpbml0KSA9PiBuZXcgRXZlbnQodHlwZSwgaW5pdCksIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW50XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IGV2ZW50RmFjdG9yeShlLCBldmVudEluaXREaWN0KVxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSB1dGY4RGVjb2RlKGRhdGEpXG4gICAgfSBjYXRjaCB7XG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGludmFsaWQgVVRGLTggaW4gdGV4dCBmcmFtZS4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IG9wY29kZXMuQklOQVJZKSB7XG4gICAgaWYgKHdzW2tCaW5hcnlUeXBlXSA9PT0gJ2Jsb2InKSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJibG9iXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQmxvYiBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgICAgb2JqZWN0LCB0aGF0IHJlcHJlc2VudHMgZGF0YSBhcyBpdHMgcmF3IGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBCbG9iKFtkYXRhXSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYXJyYXlidWZmZXJcIlxuICAgICAgLy8gICAgICBhIG5ldyBBcnJheUJ1ZmZlciBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZVxuICAgICAgLy8gICAgICBXZWJTb2NrZXQgb2JqZWN0LCB3aG9zZSBjb250ZW50cyBhcmUgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gdG9BcnJheUJ1ZmZlcihkYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgbWVzc2FnZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCwgdXNpbmcgTWVzc2FnZUV2ZW50LFxuICAvLyAgICB3aXRoIHRoZSBvcmlnaW4gYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgb2JqZWN0XHUyMDE5cyB1cmwncyBvcmlnaW4sIGFuZCB0aGUgZGF0YSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gZGF0YUZvckV2ZW50LlxuICBmaXJlRXZlbnQoJ21lc3NhZ2UnLCB3cywgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG5mdW5jdGlvbiB0b0FycmF5QnVmZmVyIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5ieXRlTGVuZ3RoID09PSBidWZmZXIuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gYnVmZmVyLmJ1ZmZlclxuICB9XG4gIHJldHVybiBidWZmZXIuYnVmZmVyLnNsaWNlKGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZU9mZnNldCArIGJ1ZmZlci5ieXRlTGVuZ3RoKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm90b2NvbC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSBwcm90b2NvbC5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fCAvLyBDVEwsIGNvbnRhaW5zIFNQICgweDIwKSBhbmQgSFQgKDB4MDkpXG4gICAgICBjb2RlID4gMHg3RSB8fFxuICAgICAgY29kZSA9PT0gMHgyMiB8fCAvLyBcIlxuICAgICAgY29kZSA9PT0gMHgyOCB8fCAvLyAoXG4gICAgICBjb2RlID09PSAweDI5IHx8IC8vIClcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgyRiB8fCAvLyAvXG4gICAgICBjb2RlID09PSAweDNBIHx8IC8vIDpcbiAgICAgIGNvZGUgPT09IDB4M0IgfHwgLy8gO1xuICAgICAgY29kZSA9PT0gMHgzQyB8fCAvLyA8XG4gICAgICBjb2RlID09PSAweDNEIHx8IC8vID1cbiAgICAgIGNvZGUgPT09IDB4M0UgfHwgLy8gPlxuICAgICAgY29kZSA9PT0gMHgzRiB8fCAvLyA/XG4gICAgICBjb2RlID09PSAweDQwIHx8IC8vIEBcbiAgICAgIGNvZGUgPT09IDB4NUIgfHwgLy8gW1xuICAgICAgY29kZSA9PT0gMHg1QyB8fCAvLyBcXFxuICAgICAgY29kZSA9PT0gMHg1RCB8fCAvLyBdXG4gICAgICBjb2RlID09PSAweDdCIHx8IC8vIHtcbiAgICAgIGNvZGUgPT09IDB4N0QgLy8gfVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTctNFxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN0YXR1c0NvZGUgKGNvZGUpIHtcbiAgaWYgKGNvZGUgPj0gMTAwMCAmJiBjb2RlIDwgMTAxNSkge1xuICAgIHJldHVybiAoXG4gICAgICBjb2RlICE9PSAxMDA0ICYmIC8vIHJlc2VydmVkXG4gICAgICBjb2RlICE9PSAxMDA1ICYmIC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgICAgY29kZSAhPT0gMTAwNiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICApXG4gIH1cblxuICByZXR1cm4gY29kZSA+PSAzMDAwICYmIGNvZGUgPD0gNDk5OVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gKi9cbmZ1bmN0aW9uIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uICh3cywgcmVhc29uKSB7XG4gIGNvbnN0IHsgW2tDb250cm9sbGVyXTogY29udHJvbGxlciwgW2tSZXNwb25zZV06IHJlc3BvbnNlIH0gPSB3c1xuXG4gIGNvbnRyb2xsZXIuYWJvcnQoKVxuXG4gIGlmIChyZXNwb25zZT8uc29ja2V0ICYmICFyZXNwb25zZS5zb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3koKVxuICB9XG5cbiAgaWYgKHJlYXNvbikge1xuICAgIC8vIFRPRE86IHByb2Nlc3MubmV4dFRpY2tcbiAgICBmaXJlRXZlbnQoJ2Vycm9yJywgd3MsICh0eXBlLCBpbml0KSA9PiBuZXcgRXJyb3JFdmVudCh0eXBlLCBpbml0KSwge1xuICAgICAgZXJyb3I6IG5ldyBFcnJvcihyZWFzb24pLFxuICAgICAgbWVzc2FnZTogcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS41XG4gKiBAcGFyYW0ge251bWJlcn0gb3Bjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzQ29udHJvbEZyYW1lIChvcGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICBvcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UgfHxcbiAgICBvcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgIG9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HXG4gIClcbn1cblxuZnVuY3Rpb24gaXNDb250aW51YXRpb25GcmFtZSAob3Bjb2RlKSB7XG4gIHJldHVybiBvcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG59XG5cbmZ1bmN0aW9uIGlzVGV4dEJpbmFyeUZyYW1lIChvcGNvZGUpIHtcbiAgcmV0dXJuIG9wY29kZSA9PT0gb3Bjb2Rlcy5URVhUIHx8IG9wY29kZSA9PT0gb3Bjb2Rlcy5CSU5BUllcbn1cblxuZnVuY3Rpb24gaXNWYWxpZE9wY29kZSAob3Bjb2RlKSB7XG4gIHJldHVybiBpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpIHx8IGlzQ29udGludWF0aW9uRnJhbWUob3Bjb2RlKSB8fCBpc0NvbnRyb2xGcmFtZShvcGNvZGUpXG59XG5cbi8qKlxuICogUGFyc2VzIGEgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIGhlYWRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHRlbnNpb25zXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuLy8gVE9ETyhAVXpsb3BhaywgQEtoYWZyYURldik6IG1ha2UgY29tcGxpYW50IGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTkuMVxuZnVuY3Rpb24gcGFyc2VFeHRlbnNpb25zIChleHRlbnNpb25zKSB7XG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gIGNvbnN0IGV4dGVuc2lvbkxpc3QgPSBuZXcgTWFwKClcblxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBleHRlbnNpb25zLmxlbmd0aCkge1xuICAgIGNvbnN0IHBhaXIgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCgnOycsIGV4dGVuc2lvbnMsIHBvc2l0aW9uKVxuICAgIGNvbnN0IFtuYW1lLCB2YWx1ZSA9ICcnXSA9IHBhaXIuc3BsaXQoJz0nKVxuXG4gICAgZXh0ZW5zaW9uTGlzdC5zZXQoXG4gICAgICByZW1vdmVIVFRQV2hpdGVzcGFjZShuYW1lLCB0cnVlLCBmYWxzZSksXG4gICAgICByZW1vdmVIVFRQV2hpdGVzcGFjZSh2YWx1ZSwgZmFsc2UsIHRydWUpXG4gICAgKVxuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgcmV0dXJuIGV4dGVuc2lvbkxpc3Rcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3NjkyI3NlY3Rpb24tNy4xLjIuMlxuICogQGRlc2NyaXB0aW9uIFwiY2xpZW50LW1heC13aW5kb3ctYml0cyA9IDEqRElHSVRcIlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRDbGllbnRXaW5kb3dCaXRzICh2YWx1ZSkge1xuICAvLyBNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlclxuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBDaGVjayBhbGwgY2hhcmFjdGVycyBhcmUgQVNDSUkgZGlnaXRzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBieXRlID0gdmFsdWUuY2hhckNvZGVBdChpKVxuXG4gICAgaWYgKGJ5dGUgPCAweDMwIHx8IGJ5dGUgPiAweDM5KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBudW1lcmljIHJhbmdlOiB6bGliIHJlcXVpcmVzIHdpbmRvd0JpdHMgaW4gcmFuZ2UgOC0xNVxuICBjb25zdCBudW0gPSBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKVxuICByZXR1cm4gbnVtID49IDggJiYgbnVtIDw9IDE1XG59XG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaW50bC5odG1sI2RldGVjdGluZy1pbnRlcm5hdGlvbmFsaXphdGlvbi1zdXBwb3J0XG5jb25zdCBoYXNJbnRsID0gdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMuaWN1ID09PSAnc3RyaW5nJ1xuY29uc3QgZmF0YWxEZWNvZGVyID0gaGFzSW50bCA/IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pIDogdW5kZWZpbmVkXG5cbi8qKlxuICogQ29udmVydHMgYSBCdWZmZXIgdG8gdXRmLTgsIGV2ZW4gb24gcGxhdGZvcm1zIHdpdGhvdXQgaWN1LlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICovXG5jb25zdCB1dGY4RGVjb2RlID0gaGFzSW50bFxuICA/IGZhdGFsRGVjb2Rlci5kZWNvZGUuYmluZChmYXRhbERlY29kZXIpXG4gIDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuICAgIGlmIChpc1V0ZjgoYnVmZmVyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygndXRmLTgnKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHV0Zi04IHJlY2VpdmVkLicpXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ29ubmVjdGluZyxcbiAgaXNFc3RhYmxpc2hlZCxcbiAgaXNDbG9zaW5nLFxuICBpc0Nsb3NlZCxcbiAgZmlyZUV2ZW50LFxuICBpc1ZhbGlkU3VicHJvdG9jb2wsXG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkLFxuICB1dGY4RGVjb2RlLFxuICBpc0NvbnRyb2xGcmFtZSxcbiAgaXNDb250aW51YXRpb25GcmFtZSxcbiAgaXNUZXh0QmluYXJ5RnJhbWUsXG4gIGlzVmFsaWRPcGNvZGUsXG4gIHBhcnNlRXh0ZW5zaW9ucyxcbiAgaXNWYWxpZENsaWVudFdpbmRvd0JpdHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhVbnNpZ25lZDE2Qml0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IEJVRkZFUl9TSVpFID0gMTYzODZcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xubGV0IGJ1ZmZlciA9IG51bGxcbmxldCBidWZJZHggPSBCVUZGRVJfU0laRVxuXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdub2RlOmNyeXB0bycpXG4vKiBjOCBpZ25vcmUgbmV4dCAzICovXG59IGNhdGNoIHtcbiAgY3J5cHRvID0ge1xuICAgIC8vIG5vdCBmdWxsIGNvbXBhdGliaWxpdHksIGJ1dCBtaW5pbXVtLlxuICAgIHJhbmRvbUZpbGxTeW5jOiBmdW5jdGlvbiByYW5kb21GaWxsU3luYyAoYnVmZmVyLCBfb2Zmc2V0LCBfc2l6ZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW2ldID0gTWF0aC5yYW5kb20oKSAqIDI1NSB8IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWZmZXJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVNYXNrICgpIHtcbiAgaWYgKGJ1ZklkeCA9PT0gQlVGRkVSX1NJWkUpIHtcbiAgICBidWZJZHggPSAwXG4gICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKChidWZmZXIgPz89IEJ1ZmZlci5hbGxvY1Vuc2FmZShCVUZGRVJfU0laRSkpLCAwLCBCVUZGRVJfU0laRSlcbiAgfVxuICByZXR1cm4gW2J1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK11dXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgZnJhbWVEYXRhID0gdGhpcy5mcmFtZURhdGFcbiAgICBjb25zdCBtYXNrS2V5ID0gZ2VuZXJhdGVNYXNrKClcbiAgICBjb25zdCBib2R5TGVuZ3RoID0gZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gbWFza0tleVswXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAzXSA9IG1hc2tLZXlbMV1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMl0gPSBtYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gbWFza0tleVszXVxuXG4gICAgYnVmZmVyWzFdID0gcGF5bG9hZExlbmd0aFxuXG4gICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2QkUoYm9keUxlbmd0aCwgMilcbiAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgLy8gQ2xlYXIgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGhcbiAgICAgIGJ1ZmZlclsyXSA9IGJ1ZmZlclszXSA9IDBcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnRCRShib2R5TGVuZ3RoLCA0LCA2KVxuICAgIH1cblxuICAgIGJ1ZmZlclsxXSB8PSAweDgwIC8vIE1BU0tcblxuICAgIC8vIG1hc2sgYm9keVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keUxlbmd0aDsgKytpKSB7XG4gICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSBmcmFtZURhdGFbaV0gXiBtYXNrS2V5W2kgJiAzXVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdWlkLCBzdGF0ZXMsIHNlbnRDbG9zZUZyYW1lU3RhdGUsIGVtcHR5QnVmZmVyLCBvcGNvZGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtSZWFkeVN0YXRlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlcixcbiAga1JlY2VpdmVkQ2xvc2UsXG4gIGtSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGZpcmVFdmVudCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIGlzQ2xvc2luZywgaXNDbG9zZWQsIGlzRXN0YWJsaXNoZWQsIHBhcnNlRXh0ZW5zaW9ucyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY2hhbm5lbHMgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvZGlhZ25vc3RpY3MnKVxuY29uc3QgeyBDbG9zZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgSGVhZGVycywgZ2V0SGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXREZWNvZGVTcGxpdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xuXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXdlYnNvY2tldC1lc3RhYmxpc2hcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7KHJlc3BvbnNlOiBhbnksIGV4dGVuc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA9PiB2b2lkfSBvbkVzdGFibGlzaFxuICogQHBhcmFtIHtQYXJ0aWFsPGltcG9ydCgnLi4vLi4vdHlwZXMvd2Vic29ja2V0JykuV2ViU29ja2V0SW5pdD59IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiAodXJsLCBwcm90b2NvbHMsIGNsaWVudCwgd3MsIG9uRXN0YWJsaXNoLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0VVJMIGJlIGEgY29weSBvZiB1cmwsIHdpdGggaXRzIHNjaGVtZSBzZXQgdG8gXCJodHRwXCIsIGlmIHVybFx1MjAxOXNcbiAgLy8gICAgc2NoZW1lIGlzIFwid3NcIiwgYW5kIHRvIFwiaHR0cHNcIiBvdGhlcndpc2UuXG4gIGNvbnN0IHJlcXVlc3RVUkwgPSB1cmxcblxuICByZXF1ZXN0VVJMLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSAnd3M6JyA/ICdodHRwOicgOiAnaHR0cHM6J1xuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGEgbmV3IHJlcXVlc3QsIHdob3NlIFVSTCBpcyByZXF1ZXN0VVJMLCBjbGllbnQgaXMgY2xpZW50LFxuICAvLyAgICBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcIm5vbmVcIiwgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCBtb2RlIGlzXG4gIC8vICAgIFwid2Vic29ja2V0XCIsIGNyZWRlbnRpYWxzIG1vZGUgaXMgXCJpbmNsdWRlXCIsIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiICxcbiAgLy8gICAgYW5kIHJlZGlyZWN0IG1vZGUgaXMgXCJlcnJvclwiLlxuICBjb25zdCByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgIHVybExpc3Q6IFtyZXF1ZXN0VVJMXSxcbiAgICBjbGllbnQsXG4gICAgc2VydmljZVdvcmtlcnM6ICdub25lJyxcbiAgICByZWZlcnJlcjogJ25vLXJlZmVycmVyJyxcbiAgICBtb2RlOiAnd2Vic29ja2V0JyxcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICAgIHJlZGlyZWN0OiAnZXJyb3InXG4gIH0pXG5cbiAgLy8gTm90ZTogdW5kaWNpIGV4dGVuc2lvbiwgYWxsb3cgc2V0dGluZyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gZ2V0SGVhZGVyc0xpc3QobmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKSlcblxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QgPSBoZWFkZXJzTGlzdFxuICB9XG5cbiAgLy8gMy4gQXBwZW5kIChgVXBncmFkZWAsIGB3ZWJzb2NrZXRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gNC4gQXBwZW5kIChgQ29ubmVjdGlvbmAsIGBVcGdyYWRlYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIE5vdGU6IGJvdGggb2YgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdW5kaWNpIGN1cnJlbnRseS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi82OGMyNjljNDE0NGM0NDZmM2YxMjIwOTUxMzM4ZGFlZjRhNmI1ZWM0L2xpYi9jbGllbnQuanMjTDEzOTdcblxuICAvLyA1LiBMZXQga2V5VmFsdWUgYmUgYSBub25jZSBjb25zaXN0aW5nIG9mIGEgcmFuZG9tbHkgc2VsZWN0ZWRcbiAgLy8gICAgMTYtYnl0ZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIGZvcmdpdmluZy1iYXNlNjQtZW5jb2RlZCBhbmRcbiAgLy8gICAgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBjb25zdCBrZXlWYWx1ZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpXG5cbiAgLy8gNi4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1LZXlgLCBrZXlWYWx1ZSkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWtleScsIGtleVZhbHVlKVxuXG4gIC8vIDcuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtVmVyc2lvbmAsIGAxM2ApIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC12ZXJzaW9uJywgJzEzJylcblxuICAvLyA4LiBGb3IgZWFjaCBwcm90b2NvbCBpbiBwcm90b2NvbHMsIGNvbWJpbmVcbiAgLy8gICAgKGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCwgcHJvdG9jb2wpIGluIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBmb3IgKGNvbnN0IHByb3RvY29sIG9mIHByb3RvY29scykge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXByb3RvY29sJywgcHJvdG9jb2wpXG4gIH1cblxuICAvLyA5LiBMZXQgcGVybWVzc2FnZURlZmxhdGUgYmUgYSB1c2VyLWFnZW50IGRlZmluZWRcbiAgLy8gICAgXCJwZXJtZXNzYWdlLWRlZmxhdGVcIiBleHRlbnNpb24gaGVhZGVyIHZhbHVlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi9jZTc4MjM0ZjVlNjUzYTVkMzkxNjgxM2ZmOTkwZjA1MzUxMDIyN2JjL25ldHdlcmsvcHJvdG9jb2wvd2Vic29ja2V0L1dlYlNvY2tldENoYW5uZWwuY3BwI0wyNjczXG4gIGNvbnN0IHBlcm1lc3NhZ2VEZWZsYXRlID0gJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgY2xpZW50X21heF93aW5kb3dfYml0cydcblxuICAvLyAxMC4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zYCwgcGVybWVzc2FnZURlZmxhdGUpIHRvXG4gIC8vICAgICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycsIHBlcm1lc3NhZ2VEZWZsYXRlKVxuXG4gIC8vIDExLiBGZXRjaCByZXF1ZXN0IHdpdGggdXNlUGFyYWxsZWxRdWV1ZSBzZXQgdG8gdHJ1ZSwgYW5kXG4gIC8vICAgICBwcm9jZXNzUmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3RlcHM6XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICB1c2VQYXJhbGxlbFF1ZXVlOiB0cnVlLFxuICAgIGRpc3BhdGNoZXI6IG9wdGlvbnMuZGlzcGF0Y2hlcixcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2VcdTIwMTlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcbiAgICAgIGxldCBleHRlbnNpb25zXG5cbiAgICAgIGlmIChzZWNFeHRlbnNpb24gIT09IG51bGwpIHtcbiAgICAgICAgZXh0ZW5zaW9ucyA9IHBhcnNlRXh0ZW5zaW9ucyhzZWNFeHRlbnNpb24pXG5cbiAgICAgICAgaWYgKCFleHRlbnNpb25zLmhhcygncGVybWVzc2FnZS1kZWZsYXRlJykpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXIgZG9lcyBub3QgbWF0Y2guJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm90b2NvbHMgPSBnZXREZWNvZGVTcGxpdCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcsIHJlcXVlc3QuaGVhZGVyc0xpc3QpXG5cbiAgICAgICAgLy8gVGhlIGNsaWVudCBjYW4gcmVxdWVzdCB0aGF0IHRoZSBzZXJ2ZXIgdXNlIGEgc3BlY2lmaWMgc3VicHJvdG9jb2wgYnlcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgZmllbGQgaW4gaXRzIGhhbmRzaGFrZS4gIElmIGl0XG4gICAgICAgIC8vIGlzIHNwZWNpZmllZCwgdGhlIHNlcnZlciBuZWVkcyB0byBpbmNsdWRlIHRoZSBzYW1lIGZpZWxkIGFuZCBvbmUgb2ZcbiAgICAgICAgLy8gdGhlIHNlbGVjdGVkIHN1YnByb3RvY29sIHZhbHVlcyBpbiBpdHMgcmVzcG9uc2UgZm9yIHRoZSBjb25uZWN0aW9uIHRvXG4gICAgICAgIC8vIGJlIGVzdGFibGlzaGVkLlxuICAgICAgICBpZiAoIXJlcXVlc3RQcm90b2NvbHMuaW5jbHVkZXMoc2VjUHJvdG9jb2wpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdQcm90b2NvbCB3YXMgbm90IHNldCBpbiB0aGUgb3BlbmluZyBoYW5kc2hha2UuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSwgZXh0ZW5zaW9ucylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuZnVuY3Rpb24gY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uICh3cywgY29kZSwgcmVhc29uLCByZWFzb25CeXRlTGVuZ3RoKSB7XG4gIGlmIChpc0Nsb3Npbmcod3MpIHx8IGlzQ2xvc2VkKHdzKSkge1xuICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgLy8gRG8gbm90aGluZy5cbiAgfSBlbHNlIGlmICghaXNFc3RhYmxpc2hlZCh3cykpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgbm90IHlldCBlc3RhYmxpc2hlZFxuICAgIC8vIEZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGFuZCBzZXQgdGhpcydzIHJlYWR5IHN0YXRlXG4gICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIGl0IHdhcyBlc3RhYmxpc2hlZC4nKVxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSBpZiAod3Nba1NlbnRDbG9zZV0gPT09IHNlbnRDbG9zZUZyYW1lU3RhdGUuTk9UX1NFTlQpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZFxuICAgIC8vIFN0YXJ0IHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgYW5kIHNldCB0aGlzJ3MgcmVhZHlcbiAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAvLyAtIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAvLyAgIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG4gICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAvLyAgIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAvLyAtIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgd3Nba1NlbnRDbG9zZV0gPSBzZW50Q2xvc2VGcmFtZVN0YXRlLlBST0NFU1NJTkdcblxuICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgLy8gbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cblxuICAgIC8vIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgfSBlbHNlIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIgKyByZWFzb25CeXRlTGVuZ3RoKVxuICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGUocmVhc29uLCAyLCAndXRmLTgnKVxuICAgIH0gZWxzZSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgY29uc3Qgc29ja2V0ID0gd3Nba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIHNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSlcblxuICAgIHdzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UXG5cbiAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlXG4gICAgLy8gU2V0IHRoaXMncyByZWFkeSBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0RGF0YSAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLndzW2tCeXRlUGFyc2VyXS53cml0ZShjaHVuaykpIHtcbiAgICB0aGlzLnBhdXNlKClcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjRcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcbiAgY29uc3QgeyBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignZGF0YScsIG9uU29ja2V0RGF0YSlcbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICByZXNwb25zZS5zb2NrZXQub2ZmKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG5cbiAgLy8gSWYgdGhlIFRDUCBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWZ0ZXIgdGhlXG4gIC8vIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSB3YXMgY29tcGxldGVkLCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAgLy8gaXMgc2FpZCB0byBoYXZlIGJlZW4gY2xvc2VkIF9jbGVhbmx5Xy5cbiAgY29uc3Qgd2FzQ2xlYW4gPSB3c1trU2VudENsb3NlXSA9PT0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UICYmIHdzW2tSZWNlaXZlZENsb3NlXVxuXG4gIGxldCBjb2RlID0gMTAwNVxuICBsZXQgcmVhc29uID0gJydcblxuICBjb25zdCByZXN1bHQgPSB3c1trQnl0ZVBhcnNlcl0uY2xvc2luZ0luZm9cblxuICBpZiAocmVzdWx0ICYmICFyZXN1bHQuZXJyb3IpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgLy8gSWYgX1RoZSBXZWJTb2NrZXRcbiAgICAvLyBDb25uZWN0aW9uIGlzIENsb3NlZF8gYW5kIG5vIENsb3NlIGNvbnRyb2wgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZVxuICAgIC8vIGVuZHBvaW50IChzdWNoIGFzIGNvdWxkIG9jY3VyIGlmIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uXG4gICAgLy8gaXMgbG9zdCksIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXMgY29uc2lkZXJlZCB0byBiZVxuICAgIC8vIDEwMDYuXG4gICAgY29kZSA9IDEwMDZcbiAgfVxuXG4gIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gQ0xPU0VEICgzKS5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NFRFxuXG4gIC8vIDIuIElmIHRoZSB1c2VyIGFnZW50IHdhcyByZXF1aXJlZCB0byBmYWlsIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgY29ubmVjdGlvbiwgb3IgaWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHdhcyBjbG9zZWRcbiAgLy8gICAgYWZ0ZXIgYmVpbmcgZmxhZ2dlZCBhcyBmdWxsLCBmaXJlIGFuIGV2ZW50IG5hbWVkIGVycm9yXG4gIC8vICAgIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAvLyBUT0RPXG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBjbG9zZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCxcbiAgLy8gICAgdXNpbmcgQ2xvc2VFdmVudCwgd2l0aCB0aGUgd2FzQ2xlYW4gYXR0cmlidXRlXG4gIC8vICAgIGluaXRpYWxpemVkIHRvIHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gY2xvc2VkIGNsZWFubHlcbiAgLy8gICAgYW5kIGZhbHNlIG90aGVyd2lzZSwgdGhlIGNvZGUgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvXG4gIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZSBjb2RlLCBhbmQgdGhlIHJlYXNvblxuICAvLyAgICBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBVVEYtOFxuICAvLyAgICBkZWNvZGUgd2l0aG91dCBCT00gdG8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlXG4gIC8vICAgIHJlYXNvbi5cbiAgLy8gVE9ETzogcHJvY2Vzcy5uZXh0VGlja1xuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsICh0eXBlLCBpbml0KSA9PiBuZXcgQ2xvc2VFdmVudCh0eXBlLCBpbml0KSwge1xuICAgIHdhc0NsZWFuLCBjb2RlLCByZWFzb25cbiAgfSlcblxuICBpZiAoY2hhbm5lbHMuY2xvc2UuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5jbG9zZS5wdWJsaXNoKHtcbiAgICAgIHdlYnNvY2tldDogd3MsXG4gICAgICBjb2RlLFxuICAgICAgcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnJvcikge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcblxuICBpZiAoY2hhbm5lbHMuc29ja2V0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zb2NrZXRFcnJvci5wdWJsaXNoKGVycm9yKVxuICB9XG5cbiAgdGhpcy5kZXN0cm95KClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24sXG4gIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGNyZWF0ZUluZmxhdGVSYXcsIFpfREVGQVVMVF9XSU5ET1dCSVRTIH0gPSByZXF1aXJlKCdub2RlOnpsaWInKVxuY29uc3QgeyBpc1ZhbGlkQ2xpZW50V2luZG93Qml0cyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL2Vycm9ycycpXG5cbmNvbnN0IHRhaWwgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHhmZiwgMHhmZl0pXG5jb25zdCBrQnVmZmVyID0gU3ltYm9sKCdrQnVmZmVyJylcbmNvbnN0IGtMZW5ndGggPSBTeW1ib2woJ2tMZW5ndGgnKVxuXG5jbGFzcyBQZXJNZXNzYWdlRGVmbGF0ZSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOnpsaWInKS5JbmZsYXRlUmF3fSAqL1xuICAjaW5mbGF0ZVxuXG4gICNvcHRpb25zID0ge31cblxuICAjbWF4UGF5bG9hZFNpemUgPSAwXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gZXh0ZW5zaW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dGVuc2lvbnMsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNvcHRpb25zLnNlcnZlck5vQ29udGV4dFRha2VvdmVyID0gZXh0ZW5zaW9ucy5oYXMoJ3NlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyJylcbiAgICB0aGlzLiNvcHRpb25zLnNlcnZlck1heFdpbmRvd0JpdHMgPSBleHRlbnNpb25zLmdldCgnc2VydmVyX21heF93aW5kb3dfYml0cycpXG5cbiAgICB0aGlzLiNtYXhQYXlsb2FkU2l6ZSA9IG9wdGlvbnMubWF4UGF5bG9hZFNpemVcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXByZXNzIGEgY29tcHJlc3NlZCBwYXlsb2FkLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmsgQ29tcHJlc3NlZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluIEZpbmFsIGZyYWdtZW50IGZsYWdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb25cbiAgICovXG4gIGRlY29tcHJlc3MgKGNodW5rLCBmaW4sIGNhbGxiYWNrKSB7XG4gICAgLy8gQW4gZW5kcG9pbnQgdXNlcyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSB0byBkZWNvbXByZXNzIGEgbWVzc2FnZS5cbiAgICAvLyAxLiAgQXBwZW5kIDQgb2N0ZXRzIG9mIDB4MDAgMHgwMCAweGZmIDB4ZmYgdG8gdGhlIHRhaWwgZW5kIG9mIHRoZVxuICAgIC8vICAgICBwYXlsb2FkIG9mIHRoZSBtZXNzYWdlLlxuICAgIC8vIDIuICBEZWNvbXByZXNzIHRoZSByZXN1bHRpbmcgZGF0YSB1c2luZyBERUZMQVRFLlxuICAgIGlmICghdGhpcy4jaW5mbGF0ZSkge1xuICAgICAgbGV0IHdpbmRvd0JpdHMgPSBaX0RFRkFVTFRfV0lORE9XQklUU1xuXG4gICAgICBpZiAodGhpcy4jb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzKSB7IC8vIGVtcHR5IHZhbHVlcyBkZWZhdWx0IHRvIFpfREVGQVVMVF9XSU5ET1dCSVRTXG4gICAgICAgIGlmICghaXNWYWxpZENsaWVudFdpbmRvd0JpdHModGhpcy4jb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzKSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignSW52YWxpZCBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3dCaXRzID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuI29wdGlvbnMuc2VydmVyTWF4V2luZG93Qml0cylcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy4jaW5mbGF0ZSA9IGNyZWF0ZUluZmxhdGVSYXcoeyB3aW5kb3dCaXRzIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0gPSBbXVxuICAgICAgdGhpcy4jaW5mbGF0ZVtrTGVuZ3RoXSA9IDBcblxuICAgICAgdGhpcy4jaW5mbGF0ZS5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuI2luZmxhdGVba0xlbmd0aF0gKz0gZGF0YS5sZW5ndGhcblxuICAgICAgICBpZiAodGhpcy4jbWF4UGF5bG9hZFNpemUgPiAwICYmIHRoaXMuI2luZmxhdGVba0xlbmd0aF0gPiB0aGlzLiNtYXhQYXlsb2FkU2l6ZSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3IoKSlcbiAgICAgICAgICB0aGlzLiNpbmZsYXRlLnJlbW92ZUFsbExpc3RlbmVycygpXG4gICAgICAgICAgdGhpcy4jaW5mbGF0ZSA9IG51bGxcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0ucHVzaChkYXRhKVxuICAgICAgfSlcblxuICAgICAgdGhpcy4jaW5mbGF0ZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuI2luZmxhdGUgPSBudWxsXG4gICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy4jaW5mbGF0ZS53cml0ZShjaHVuaylcbiAgICBpZiAoZmluKSB7XG4gICAgICB0aGlzLiNpbmZsYXRlLndyaXRlKHRhaWwpXG4gICAgfVxuXG4gICAgdGhpcy4jaW5mbGF0ZS5mbHVzaCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuI2luZmxhdGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGwgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2luZmxhdGVba0J1ZmZlcl0sIHRoaXMuI2luZmxhdGVba0xlbmd0aF0pXG5cbiAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0ubGVuZ3RoID0gMFxuICAgICAgdGhpcy4jaW5mbGF0ZVtrTGVuZ3RoXSA9IDBcblxuICAgICAgY2FsbGJhY2sobnVsbCwgZnVsbClcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBQZXJNZXNzYWdlRGVmbGF0ZSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV3JpdGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgcGFyc2VyU3RhdGVzLCBvcGNvZGVzLCBzdGF0ZXMsIGVtcHR5QnVmZmVyLCBzZW50Q2xvc2VGcmFtZVN0YXRlIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrU2VudENsb3NlLCBrUmVzcG9uc2UsIGtSZWNlaXZlZENsb3NlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9kaWFnbm9zdGljcycpXG5jb25zdCB7XG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBpc1ZhbGlkT3Bjb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkLFxuICB1dGY4RGVjb2RlLFxuICBpc0NvbnRyb2xGcmFtZSxcbiAgaXNUZXh0QmluYXJ5RnJhbWUsXG4gIGlzQ29udGludWF0aW9uRnJhbWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuY29uc3QgeyBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFBlck1lc3NhZ2VEZWZsYXRlIH0gPSByZXF1aXJlKCcuL3Blcm1lc3NhZ2UtZGVmbGF0ZScpXG5jb25zdCB7IE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9lcnJvcnMnKVxuXG5mdW5jdGlvbiBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlICh3cywgY29kZSwgcmVhc29uKSB7XG4gIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvbih3cywgY29kZSwgcmVhc29uLCBCdWZmZXIuYnl0ZUxlbmd0aChyZWFzb24pKVxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgcmVhc29uKVxufVxuXG4vLyBUaGlzIGNvZGUgd2FzIGluZmx1ZW5jZWQgYnkgd3MgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEVpbmFyIE90dG8gU3Rhbmd2aWsgPGVpbmFyb3NAZ21haWwuY29tPlxuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFybm91dCBLYXplbWllciBhbmQgY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYgTHVpZ2kgUGluY2EgYW5kIGNvbnRyaWJ1dG9yc1xuXG5jbGFzcyBCeXRlUGFyc2VyIGV4dGVuZHMgV3JpdGFibGUge1xuICAjYnVmZmVycyA9IFtdXG4gICNmcmFnbWVudHNCeXRlcyA9IDBcbiAgI2J5dGVPZmZzZXQgPSAwXG4gICNsb29wID0gZmFsc2VcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQZXJNZXNzYWdlRGVmbGF0ZT59ICovXG4gICNleHRlbnNpb25zXG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICNtYXhGcmFnbWVudHNcblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgI21heFBheWxvYWRTaXplXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBzdHJpbmc+fG51bGx9IGV4dGVuc2lvbnNcbiAgICogQHBhcmFtIHt7IG1heEZyYWdtZW50cz86IG51bWJlciwgbWF4UGF5bG9hZFNpemU/OiBudW1iZXIgfX0gW29wdGlvbnNdXG4gICAqL1xuICBjb25zdHJ1Y3RvciAod3MsIGV4dGVuc2lvbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMud3MgPSB3c1xuICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zID09IG51bGwgPyBuZXcgTWFwKCkgOiBleHRlbnNpb25zXG4gICAgdGhpcy4jbWF4RnJhZ21lbnRzID0gb3B0aW9ucy5tYXhGcmFnbWVudHMgPz8gMFxuICAgIHRoaXMuI21heFBheWxvYWRTaXplID0gb3B0aW9ucy5tYXhQYXlsb2FkU2l6ZSA/PyAwXG5cbiAgICBpZiAodGhpcy4jZXh0ZW5zaW9ucy5oYXMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpKSB7XG4gICAgICB0aGlzLiNleHRlbnNpb25zLnNldCgncGVybWVzc2FnZS1kZWZsYXRlJywgbmV3IFBlck1lc3NhZ2VEZWZsYXRlKGV4dGVuc2lvbnMsIG9wdGlvbnMpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKi9cbiAgX3dyaXRlIChjaHVuaywgXywgY2FsbGJhY2spIHtcbiAgICB0aGlzLiNidWZmZXJzLnB1c2goY2h1bmspXG4gICAgdGhpcy4jYnl0ZU9mZnNldCArPSBjaHVuay5sZW5ndGhcbiAgICB0aGlzLiNsb29wID0gdHJ1ZVxuXG4gICAgdGhpcy5ydW4oY2FsbGJhY2spXG4gIH1cblxuICAjdmFsaWRhdGVQYXlsb2FkTGVuZ3RoICgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNtYXhQYXlsb2FkU2l6ZSA+IDAgJiZcbiAgICAgICFpc0NvbnRyb2xGcmFtZSh0aGlzLiNpbmZvLm9wY29kZSkgJiZcbiAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCArIHRoaXMuI2ZyYWdtZW50c0J5dGVzID4gdGhpcy4jbWF4UGF5bG9hZFNpemVcbiAgICApIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOSwgJ1BheWxvYWQgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVuZXZlciBhIG5ldyBjaHVuayBpcyByZWNlaXZlZC5cbiAgICogQ2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBubyBtb3JlIGNodW5rcyBidWZmZXJpbmcsXG4gICAqIG9yIG5vdCBlbm91Z2ggYnl0ZXMgYXJlIGJ1ZmZlcmVkIHRvIHBhcnNlLlxuICAgKi9cbiAgcnVuIChjYWxsYmFjaykge1xuICAgIHdoaWxlICh0aGlzLiNsb29wKSB7XG4gICAgICBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5JTkZPKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZW4ndCBlbm91Z2ggYnl0ZXMgdG8gcGFyc2UgdGhlIHBheWxvYWQgbGVuZ3RoLCBldGMuXG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcbiAgICAgICAgY29uc3QgZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIGNvbnN0IG9wY29kZSA9IGJ1ZmZlclswXSAmIDB4MEZcbiAgICAgICAgY29uc3QgbWFza2VkID0gKGJ1ZmZlclsxXSAmIDB4ODApID09PSAweDgwXG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnRlZCA9ICFmaW4gJiYgb3Bjb2RlICE9PSBvcGNvZGVzLkNPTlRJTlVBVElPTlxuICAgICAgICBjb25zdCBwYXlsb2FkTGVuZ3RoID0gYnVmZmVyWzFdICYgMHg3RlxuXG4gICAgICAgIGNvbnN0IHJzdjEgPSBidWZmZXJbMF0gJiAweDQwXG4gICAgICAgIGNvbnN0IHJzdjIgPSBidWZmZXJbMF0gJiAweDIwXG4gICAgICAgIGNvbnN0IHJzdjMgPSBidWZmZXJbMF0gJiAweDEwXG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkT3Bjb2RlKG9wY29kZSkpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnSW52YWxpZCBvcGNvZGUgcmVjZWl2ZWQnKVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWFza2VkKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ZyYW1lIGNhbm5vdCBiZSBtYXNrZWQnKVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBNVVNUIGJlIDAgdW5sZXNzIGFuIGV4dGVuc2lvbiBpcyBuZWdvdGlhdGVkIHRoYXQgZGVmaW5lcyBtZWFuaW5nc1xuICAgICAgICAvLyBmb3Igbm9uLXplcm8gdmFsdWVzLiAgSWYgYSBub256ZXJvIHZhbHVlIGlzIHJlY2VpdmVkIGFuZCBub25lIG9mXG4gICAgICAgIC8vIHRoZSBuZWdvdGlhdGVkIGV4dGVuc2lvbnMgZGVmaW5lcyB0aGUgbWVhbmluZyBvZiBzdWNoIGEgbm9uemVyb1xuICAgICAgICAvLyB2YWx1ZSwgdGhlIHJlY2VpdmluZyBlbmRwb2ludCBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXRcbiAgICAgICAgLy8gQ29ubmVjdGlvbl8uXG4gICAgICAgIC8vIFRoaXMgZG9jdW1lbnQgYWxsb2NhdGVzIHRoZSBSU1YxIGJpdCBvZiB0aGUgV2ViU29ja2V0IGhlYWRlciBmb3JcbiAgICAgICAgLy8gUE1DRXMgYW5kIGNhbGxzIHRoZSBiaXQgdGhlIFwiUGVyLU1lc3NhZ2UgQ29tcHJlc3NlZFwiIGJpdC4gIE9uIGFcbiAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gd2hlcmUgYSBQTUNFIGlzIGluIHVzZSwgdGhpcyBiaXQgaW5kaWNhdGVzXG4gICAgICAgIC8vIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgICAgICBpZiAocnN2MSAhPT0gMCAmJiAhdGhpcy4jZXh0ZW5zaW9ucy5oYXMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0V4cGVjdGVkIFJTVjEgdG8gYmUgY2xlYXIuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyc3YyICE9PSAwIHx8IHJzdjMgIT09IDApIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUlNWMSwgUlNWMiwgUlNWMyBtdXN0IGJlIGNsZWFyJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnbWVudGVkICYmICFpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpKSB7XG4gICAgICAgICAgLy8gT25seSB0ZXh0IGFuZCBiaW5hcnkgZnJhbWVzIGNhbiBiZSBmcmFnbWVudGVkXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ludmFsaWQgZnJhbWUgdHlwZSB3YXMgZnJhZ21lbnRlZC4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgcGFyc2luZyBhIHRleHQvYmluYXJ5IGZyYW1lIGFuZCBkbyBub3QgcmVjZWl2ZSBlaXRoZXJcbiAgICAgICAgLy8gYSBjb250aW51YXRpb24gZnJhbWUgb3IgY2xvc2UgZnJhbWUsIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG4gICAgICAgIGlmIChpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpICYmIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0V4cGVjdGVkIGNvbnRpbnVhdGlvbiBmcmFtZScpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIGZyYWdtZW50ZWQpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFwiQWxsIGNvbnRyb2wgZnJhbWVzIE1VU1QgaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBvciBsZXNzXG4gICAgICAgIC8vIGFuZCBNVVNUIE5PVCBiZSBmcmFnbWVudGVkLlwiXG4gICAgICAgIGlmICgocGF5bG9hZExlbmd0aCA+IDEyNSB8fCBmcmFnbWVudGVkKSAmJiBpc0NvbnRyb2xGcmFtZShvcGNvZGUpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0NvbnRyb2wgZnJhbWUgZWl0aGVyIHRvbyBsYXJnZSBvciBmcmFnbWVudGVkJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvbnRpbnVhdGlvbkZyYW1lKG9wY29kZSkgJiYgdGhpcy4jZnJhZ21lbnRzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy4jaW5mby5jb21wcmVzc2VkKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1VuZXhwZWN0ZWQgY29udGludWF0aW9uIGZyYW1lJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoIDw9IDEyNSkge1xuICAgICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IHBheWxvYWRMZW5ndGhcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcblxuICAgICAgICAgIGlmICghdGhpcy4jdmFsaWRhdGVQYXlsb2FkTGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2XG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVGV4dEJpbmFyeUZyYW1lKG9wY29kZSkpIHtcbiAgICAgICAgICB0aGlzLiNpbmZvLmJpbmFyeVR5cGUgPSBvcGNvZGVcbiAgICAgICAgICB0aGlzLiNpbmZvLmNvbXByZXNzZWQgPSByc3YxICE9PSAwXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9IG9wY29kZVxuICAgICAgICB0aGlzLiNpbmZvLm1hc2tlZCA9IG1hc2tlZFxuICAgICAgICB0aGlzLiNpbmZvLmZpbiA9IGZpblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSBmcmFnbWVudGVkXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcblxuICAgICAgICBpZiAoIXRoaXMuI3ZhbGlkYXRlUGF5bG9hZExlbmd0aCgpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG4gICAgICAgIGNvbnN0IGxvd2VyID0gYnVmZmVyLnJlYWRVSW50MzJCRSg0KVxuXG4gICAgICAgIC8vIDJeMzEgaXMgdGhlIG1heGltdW0gYnl0ZXMgYW4gYXJyYXlidWZmZXIgY2FuIGNvbnRhaW5cbiAgICAgICAgLy8gb24gMzItYml0IHN5c3RlbXMuIEFsdGhvdWdoLCBvbiA2NC1iaXQgc3lzdGVtcywgdGhpcyBpc1xuICAgICAgICAvLyAyXjUzLTEgYnl0ZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9JbnZhbGlkX2FycmF5X2xlbmd0aFxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvY29tbW9uL2dsb2JhbHMuaDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZTticHY9MTticHQ9MTtsPTEyNzVcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLmg7bD0zNDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZVxuICAgICAgICBpZiAodXBwZXIgIT09IDAgfHwgbG93ZXIgPiAyICoqIDMxIC0gMSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBwYXlsb2FkIGxlbmd0aCA+IDJeMzEgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IGxvd2VyXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuXG4gICAgICAgIGlmICghdGhpcy4jdmFsaWRhdGVQYXlsb2FkTGVuZ3RoKCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlJFQURfREFUQSkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aClcblxuICAgICAgICBpZiAoaXNDb250cm9sRnJhbWUodGhpcy4jaW5mby5vcGNvZGUpKSB7XG4gICAgICAgICAgdGhpcy4jbG9vcCA9IHRoaXMucGFyc2VDb250cm9sRnJhbWUoYm9keSlcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmNvbXByZXNzZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy53cml0ZUZyYWdtZW50cyhib2R5KSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuI21heFBheWxvYWRTaXplID4gMCAmJiB0aGlzLiNmcmFnbWVudHNCeXRlcyA+IHRoaXMuI21heFBheWxvYWRTaXplKSB7XG4gICAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOSwgbmV3IE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvcigpLm1lc3NhZ2UpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgbm90IGZyYWdtZW50ZWQsIGEgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cbiAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyBmcmFnbWVudGVkLCBpdCB3aWxsIHRlcm1pbmF0ZSB3aXRoIGEgZmluIGJpdCBzZXRcbiAgICAgICAgICAgIC8vIGFuZCBhbiBvcGNvZGUgb2YgMCAoY29udGludWF0aW9uKSwgdGhlcmVmb3JlIHdlIGhhbmRsZSB0aGF0IHdoZW5cbiAgICAgICAgICAgIC8vIHBhcnNpbmcgY29udGludWF0aW9uIGZyYW1lcywgbm90IGhlcmUuXG4gICAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLmZpbikge1xuICAgICAgICAgICAgICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQodGhpcy53cywgdGhpcy4jaW5mby5iaW5hcnlUeXBlLCB0aGlzLmNvbnN1bWVGcmFnbWVudHMoKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNleHRlbnNpb25zLmdldCgncGVybWVzc2FnZS1kZWZsYXRlJykuZGVjb21wcmVzcyhcbiAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgdGhpcy4jaW5mby5maW4sXG4gICAgICAgICAgICAgIChlcnJvciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGVycm9yIGluc3RhbmNlb2YgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yID8gMTAwOSA6IDEwMDdcbiAgICAgICAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgY29kZSwgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy53cml0ZUZyYWdtZW50cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI21heFBheWxvYWRTaXplID4gMCAmJiB0aGlzLiNmcmFnbWVudHNCeXRlcyA+IHRoaXMuI21heFBheWxvYWRTaXplKSB7XG4gICAgICAgICAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlKHRoaXMud3MsIDEwMDksIG5ldyBNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3IoKS5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmZpbikge1xuICAgICAgICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgICAgICAgICAgdGhpcy4jbG9vcCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8uYmluYXJ5VHlwZSwgdGhpcy5jb25zdW1lRnJhZ21lbnRzKCkpXG5cbiAgICAgICAgICAgICAgICB0aGlzLiNsb29wID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cbiAgICAgICAgICAgICAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICB0aGlzLiNsb29wID0gZmFsc2VcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgbiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBCdWZmZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxlZCBjb25zdW1lKCkgYmVmb3JlIGJ1ZmZlcnMgc2F0aWF0ZWQuJylcbiAgICB9IGVsc2UgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIGlmICh0aGlzLiNidWZmZXJzWzBdLmxlbmd0aCA9PT0gbikge1xuICAgICAgdGhpcy4jYnl0ZU9mZnNldCAtPSB0aGlzLiNidWZmZXJzWzBdLmxlbmd0aFxuICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlcnMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKVxuICAgIGxldCBvZmZzZXQgPSAwXG5cbiAgICB3aGlsZSAob2Zmc2V0ICE9PSBuKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy4jYnVmZmVyc1swXVxuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG5leHRcblxuICAgICAgaWYgKGxlbmd0aCArIG9mZnNldCA9PT0gbikge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggKyBvZmZzZXQgPiBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQobmV4dC5zdWJhcnJheSgwLCBuIC0gb2Zmc2V0KSwgb2Zmc2V0KVxuICAgICAgICB0aGlzLiNidWZmZXJzWzBdID0gbmV4dC5zdWJhcnJheShuIC0gb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgb2Zmc2V0ICs9IG5leHQubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jYnl0ZU9mZnNldCAtPSBuXG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICB3cml0ZUZyYWdtZW50cyAoZnJhZ21lbnQpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNtYXhGcmFnbWVudHMgPiAwICYmXG4gICAgICB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID09PSB0aGlzLiNtYXhGcmFnbWVudHNcbiAgICApIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOCwgJ1RvbyBtYW55IG1lc3NhZ2UgZnJhZ21lbnRzJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMuI2ZyYWdtZW50c0J5dGVzICs9IGZyYWdtZW50Lmxlbmd0aFxuICAgIHRoaXMuI2ZyYWdtZW50cy5wdXNoKGZyYWdtZW50KVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdW1lRnJhZ21lbnRzICgpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB0aGlzLiNmcmFnbWVudHNcblxuICAgIGlmIChmcmFnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLiNmcmFnbWVudHNCeXRlcyA9IDBcbiAgICAgIHJldHVybiBmcmFnbWVudHMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoZnJhZ21lbnRzLCB0aGlzLiNmcmFnbWVudHNCeXRlcylcbiAgICB0aGlzLiNmcmFnbWVudHMgPSBbXVxuICAgIHRoaXMuI2ZyYWdtZW50c0J5dGVzID0gMFxuXG4gICAgcmV0dXJuIG91dHB1dFxuICB9XG5cbiAgcGFyc2VDbG9zZUJvZHkgKGRhdGEpIHtcbiAgICBhc3NlcnQoZGF0YS5sZW5ndGggIT09IDEpXG5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgY29kZVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoID49IDIpIHtcbiAgICAgIC8vIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXNcbiAgICAgIC8vIGRlZmluZWQgYXMgdGhlIHN0YXR1cyBjb2RlIChTZWN0aW9uIDcuNCkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBDbG9zZVxuICAgICAgLy8gY29udHJvbCBmcmFtZSByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb25cbiAgICAgIGNvZGUgPSBkYXRhLnJlYWRVSW50MTZCRSgwKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4geyBjb2RlOiAxMDAyLCByZWFzb246ICdJbnZhbGlkIHN0YXR1cyBjb2RlJywgZXJyb3I6IHRydWUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZWFzb24gPSB1dGY4RGVjb2RlKHJlYXNvbilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IDEwMDcsIHJlYXNvbjogJ0ludmFsaWQgVVRGLTgnLCBlcnJvcjogdHJ1ZSB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZSwgcmVhc29uLCBlcnJvcjogZmFsc2UgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBjb250cm9sIGZyYW1lcy5cbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJvZHlcbiAgICovXG4gIHBhcnNlQ29udHJvbEZyYW1lIChib2R5KSB7XG4gICAgY29uc3QgeyBvcGNvZGUsIHBheWxvYWRMZW5ndGggfSA9IHRoaXMuI2luZm9cblxuICAgIGlmIChvcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBjbG9zZSBmcmFtZSB3aXRoIGEgMS1ieXRlIGJvZHkuJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2luZm8uY2xvc2VJbmZvID0gdGhpcy5wYXJzZUNsb3NlQm9keShib2R5KVxuXG4gICAgICBpZiAodGhpcy4jaW5mby5jbG9zZUluZm8uZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBjb2RlLCByZWFzb24gfSA9IHRoaXMuI2luZm8uY2xvc2VJbmZvXG5cbiAgICAgICAgY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsIGNvZGUsIHJlYXNvbiwgcmVhc29uLmxlbmd0aClcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgcmVhc29uKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMud3Nba1NlbnRDbG9zZV0gIT09IHNlbnRDbG9zZUZyYW1lU3RhdGUuU0VOVCkge1xuICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgIC8vIENsb3NlIGZyYW1lLCB0aGUgZW5kcG9pbnQgTVVTVCBzZW5kIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UuICAoV2hlblxuICAgICAgICAvLyBzZW5kaW5nIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UsIHRoZSBlbmRwb2ludCB0eXBpY2FsbHkgZWNob3MgdGhlXG4gICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgbGV0IGJvZHkgPSBlbXB0eUJ1ZmZlclxuICAgICAgICBpZiAodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSkge1xuICAgICAgICAgIGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICBib2R5LndyaXRlVUludDE2QkUodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSwgMClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9zZUZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoXG4gICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0gPSB0cnVlXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAob3Bjb2RlID09PSBvcGNvZGVzLlBJTkcpIHtcbiAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgIC8vIHJlc3BvbnNlLCB1bmxlc3MgaXQgYWxyZWFkeSByZWNlaXZlZCBhIENsb3NlIGZyYW1lLlxuICAgICAgLy8gQSBQb25nIGZyYW1lIHNlbnQgaW4gcmVzcG9uc2UgdG8gYSBQaW5nIGZyYW1lIG11c3QgaGF2ZSBpZGVudGljYWxcbiAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgIGlmICghdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0pIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgIGlmIChjaGFubmVscy5waW5nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgY2hhbm5lbHMucGluZy5wdWJsaXNoKHtcbiAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcGNvZGUgPT09IG9wY29kZXMuUE9ORykge1xuICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgLy8gdW5pZGlyZWN0aW9uYWwgaGVhcnRiZWF0LiAgQSByZXNwb25zZSB0byBhbiB1bnNvbGljaXRlZCBQb25nIGZyYW1lIGlzXG4gICAgICAvLyBub3QgZXhwZWN0ZWQuXG5cbiAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgIGNoYW5uZWxzLnBvbmcucHVibGlzaCh7XG4gICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBnZXQgY2xvc2luZ0luZm8gKCkge1xuICAgIHJldHVybiB0aGlzLiNpbmZvLmNsb3NlSW5mb1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCeXRlUGFyc2VyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcbmNvbnN0IHsgb3Bjb2Rlcywgc2VuZEhpbnRzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCBGaXhlZFF1ZXVlID0gcmVxdWlyZSgnLi4vLi4vZGlzcGF0Y2hlci9maXhlZC1xdWV1ZScpXG5cbi8qKiBAdHlwZSB7dHlwZW9mIFVpbnQ4QXJyYXl9ICovXG5jb25zdCBGYXN0QnVmZmVyID0gQnVmZmVyW1N5bWJvbC5zcGVjaWVzXVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlbmRRdWV1ZU5vZGVcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTx2b2lkPiB8IG51bGx9IHByb21pc2VcbiAqIEBwcm9wZXJ0eSB7KCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KX0gY2FsbGJhY2tcbiAqIEBwcm9wZXJ0eSB7QnVmZmVyIHwgbnVsbH0gZnJhbWVcbiAqL1xuXG5jbGFzcyBTZW5kUXVldWUge1xuICAvKipcbiAgICogQHR5cGUge0ZpeGVkUXVldWV9XG4gICAqL1xuICAjcXVldWUgPSBuZXcgRml4ZWRRdWV1ZSgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgI3J1bm5pbmcgPSBmYWxzZVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOm5ldCcpLlNvY2tldH0gKi9cbiAgI3NvY2tldFxuXG4gIGNvbnN0cnVjdG9yIChzb2NrZXQpIHtcbiAgICB0aGlzLiNzb2NrZXQgPSBzb2NrZXRcbiAgfVxuXG4gIGFkZCAoaXRlbSwgY2IsIGhpbnQpIHtcbiAgICBpZiAoaGludCAhPT0gc2VuZEhpbnRzLmJsb2IpIHtcbiAgICAgIGNvbnN0IGZyYW1lID0gY3JlYXRlRnJhbWUoaXRlbSwgaGludClcbiAgICAgIGlmICghdGhpcy4jcnVubmluZykge1xuICAgICAgICAvLyBmYXN0LXBhdGhcbiAgICAgICAgdGhpcy4jc29ja2V0LndyaXRlKGZyYW1lLCBjYilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qKiBAdHlwZSB7U2VuZFF1ZXVlTm9kZX0gKi9cbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgICAgICBmcmFtZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3F1ZXVlLnB1c2gobm9kZSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7U2VuZFF1ZXVlTm9kZX0gKi9cbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgcHJvbWlzZTogaXRlbS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIG5vZGUucHJvbWlzZSA9IG51bGxcbiAgICAgICAgbm9kZS5mcmFtZSA9IGNyZWF0ZUZyYW1lKGFiLCBoaW50KVxuICAgICAgfSksXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBmcmFtZTogbnVsbFxuICAgIH1cblxuICAgIHRoaXMuI3F1ZXVlLnB1c2gobm9kZSlcblxuICAgIGlmICghdGhpcy4jcnVubmluZykge1xuICAgICAgdGhpcy4jcnVuKClcbiAgICB9XG4gIH1cblxuICBhc3luYyAjcnVuICgpIHtcbiAgICB0aGlzLiNydW5uaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHF1ZXVlID0gdGhpcy4jcXVldWVcbiAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgIC8vIHdhaXQgcGVuZGluZyBwcm9taXNlXG4gICAgICBpZiAobm9kZS5wcm9taXNlICE9PSBudWxsKSB7XG4gICAgICAgIGF3YWl0IG5vZGUucHJvbWlzZVxuICAgICAgfVxuICAgICAgLy8gd3JpdGVcbiAgICAgIHRoaXMuI3NvY2tldC53cml0ZShub2RlLmZyYW1lLCBub2RlLmNhbGxiYWNrKVxuICAgICAgLy8gY2xlYW51cFxuICAgICAgbm9kZS5jYWxsYmFjayA9IG5vZGUuZnJhbWUgPSBudWxsXG4gICAgfVxuICAgIHRoaXMuI3J1bm5pbmcgPSBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYW1lIChkYXRhLCBoaW50KSB7XG4gIHJldHVybiBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHRvQnVmZmVyKGRhdGEsIGhpbnQpKS5jcmVhdGVGcmFtZShoaW50ID09PSBzZW5kSGludHMuc3RyaW5nID8gb3Bjb2Rlcy5URVhUIDogb3Bjb2Rlcy5CSU5BUlkpXG59XG5cbmZ1bmN0aW9uIHRvQnVmZmVyIChkYXRhLCBoaW50KSB7XG4gIHN3aXRjaCAoaGludCkge1xuICAgIGNhc2Ugc2VuZEhpbnRzLnN0cmluZzpcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKVxuICAgIGNhc2Ugc2VuZEhpbnRzLmFycmF5QnVmZmVyOlxuICAgIGNhc2Ugc2VuZEhpbnRzLmJsb2I6XG4gICAgICByZXR1cm4gbmV3IEZhc3RCdWZmZXIoZGF0YSlcbiAgICBjYXNlIHNlbmRIaW50cy50eXBlZEFycmF5OlxuICAgICAgcmV0dXJuIG5ldyBGYXN0QnVmZmVyKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgU2VuZFF1ZXVlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcbmNvbnN0IHsgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCB7IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsIHN0YXRlcywgc2VudENsb3NlRnJhbWVTdGF0ZSwgc2VuZEhpbnRzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtXZWJTb2NrZXRVUkwsXG4gIGtSZWFkeVN0YXRlLFxuICBrQ29udHJvbGxlcixcbiAga0JpbmFyeVR5cGUsXG4gIGtSZXNwb25zZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXJcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3Qge1xuICBpc0Nvbm5lY3RpbmcsXG4gIGlzRXN0YWJsaXNoZWQsXG4gIGlzQ2xvc2luZyxcbiAgaXNWYWxpZFN1YnByb3RvY29sLFxuICBmaXJlRXZlbnRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uLCBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi8uLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHsgRXJyb3JFdmVudCwgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBTZW5kUXVldWUgfSA9IHJlcXVpcmUoJy4vc2VuZGVyJylcblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLWRlZmluaXRpb25cbmNsYXNzIFdlYlNvY2tldCBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgI2V2ZW50cyA9IHtcbiAgICBvcGVuOiBudWxsLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGNsb3NlOiBudWxsLFxuICAgIG1lc3NhZ2U6IG51bGxcbiAgfVxuXG4gICNidWZmZXJlZEFtb3VudCA9IDBcbiAgI3Byb3RvY29sID0gJydcbiAgI2V4dGVuc2lvbnMgPSAnJ1xuXG4gIC8qKiBAdHlwZSB7U2VuZFF1ZXVlfSAqL1xuICAjc2VuZFF1ZXVlXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSh0aGlzKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ1dlYlNvY2tldCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddKHByb3RvY29scywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsLCBwcmVmaXgsICd1cmwnKVxuICAgIHByb3RvY29scyA9IG9wdGlvbnMucHJvdG9jb2xzXG5cbiAgICAvLyAxLiBMZXQgYmFzZVVSTCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0J3MgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVUkwgPSBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3JkXHUyMDE5cyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgY29uc3QgY2xpZW50ID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdFxuXG4gICAgLy8gMTIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6XG5cbiAgICAvLyAgICAxLiBFc3RhYmxpc2ggYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBnaXZlbiB1cmxSZWNvcmQsIHByb3RvY29scyxcbiAgICAvLyAgICAgICBhbmQgY2xpZW50LlxuICAgIHRoaXNba0NvbnRyb2xsZXJdID0gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihcbiAgICAgIHVybFJlY29yZCxcbiAgICAgIHByb3RvY29scyxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRoaXMsXG4gICAgICAocmVzcG9uc2UsIGV4dGVuc2lvbnMpID0+IHRoaXMuI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkKHJlc3BvbnNlLCBleHRlbnNpb25zKSxcbiAgICAgIG9wdGlvbnNcbiAgICApXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgcmVhZHkgc3RhdGUsIHdoaWNoIGlzIGFcbiAgICAvLyBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4gSW5pdGlhbGx5IGl0IG11c3RcbiAgICAvLyBiZSBDT05ORUNUSU5HICgwKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DT05ORUNUSU5HXG5cbiAgICB0aGlzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5OT1RfU0VOVFxuXG4gICAgLy8gVGhlIGV4dGVuc2lvbnMgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gVGhlIHByb3RvY29sIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCBiaW5hcnkgdHlwZSwgd2hpY2ggaXMgYVxuICAgIC8vIEJpbmFyeVR5cGUuIEluaXRpYWxseSBpdCBtdXN0IGJlIFwiYmxvYlwiLlxuICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlXG4gICAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICAgKi9cbiAgY2xvc2UgKGNvZGUgPSB1bmRlZmluZWQsIHJlYXNvbiA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGNvbnN0IHByZWZpeCA9ICdXZWJTb2NrZXQuY2xvc2UnXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgcHJlZml4LCAnY29kZScsIHsgY2xhbXA6IHRydWUgfSlcbiAgICB9XG5cbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlYXNvbiA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhyZWFzb24sIHByZWZpeCwgJ3JlYXNvbicpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY29kZSBpcyBwcmVzZW50LCBidXQgaXMgbmVpdGhlciBhbiBpbnRlZ2VyIGVxdWFsIHRvIDEwMDAgbm9yIGFuXG4gICAgLy8gICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMzAwMCB0byA0OTk5LCBpbmNsdXNpdmUsIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkQWNjZXNzRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvZGUgIT09IDEwMDAgJiYgKGNvZGUgPCAzMDAwIHx8IGNvZGUgPiA0OTk5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdpbnZhbGlkIGNvZGUnLCAnSW52YWxpZEFjY2Vzc0Vycm9yJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVhc29uQnl0ZUxlbmd0aCA9IDBcblxuICAgIC8vIDIuIElmIHJlYXNvbiBpcyBwcmVzZW50LCB0aGVuIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWFzb25CeXRlcyBiZSB0aGUgcmVzdWx0IG9mIGVuY29kaW5nIHJlYXNvbi5cbiAgICAgIC8vIDIuIElmIHJlYXNvbkJ5dGVzIGlzIGxvbmdlciB0aGFuIDEyMyBieXRlcywgdGhlbiB0aHJvdyBhXG4gICAgICAvLyAgICBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgcmVhc29uQnl0ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlYXNvbilcblxuICAgICAgaWYgKHJlYXNvbkJ5dGVMZW5ndGggPiAxMjMpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgICBgUmVhc29uIG11c3QgYmUgbGVzcyB0aGFuIDEyMyBieXRlczsgcmVjZWl2ZWQgJHtyZWFzb25CeXRlTGVuZ3RofWAsXG4gICAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUnVuIHRoZSBmaXJzdCBtYXRjaGluZyBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24odGhpcywgY29kZSwgcmVhc29uLCByZWFzb25CeXRlTGVuZ3RoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1zZW5kXG4gICAqIEBwYXJhbSB7Tm9kZUpTLlR5cGVkQXJyYXl8QXJyYXlCdWZmZXJ8QmxvYnxzdHJpbmd9IGRhdGFcbiAgICovXG4gIHNlbmQgKGRhdGEpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnV2ViU29ja2V0LnNlbmQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBkYXRhID0gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEoZGF0YSwgcHJlZml4LCAnZGF0YScpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGlzQ29ubmVjdGluZyh0aGlzKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBkYXRhIGlzIGEgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgdGhlIGRhdGEgYXJndW1lbnRcbiAgICAgIC8vIHVzaW5nIGEgdGV4dCBmcmFtZSBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuXG4gICAgICAvLyBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCxcbiAgICAgIC8vIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2VcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhXG4gICAgICAvLyBzdHJpbmcgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZVxuICAgICAgLy8gdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0b1xuICAgICAgLy8gZXhwcmVzcyB0aGUgYXJndW1lbnQgYXMgVVRGLTguXG5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IGxlbmd0aFxuICAgICAgdGhpcy4jc2VuZFF1ZXVlLmFkZChkYXRhLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IGxlbmd0aFxuICAgICAgfSwgc2VuZEhpbnRzLnN0cmluZylcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZFxuICAgICAgLy8gdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgLy8gVGhlIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBkZXNjcmliZWRcbiAgICAgIC8vIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QuIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYW5cbiAgICAgIC8vIEFycmF5QnVmZmVyIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3RcbiAgICAgIC8vIGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIGxlbmd0aCBvZiB0aGVcbiAgICAgIC8vIEFycmF5QnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIHRoaXMuI3NlbmRRdWV1ZS5hZGQoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIH0sIHNlbmRIaW50cy5hcnJheUJ1ZmZlcilcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YVx1MjAxOXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIHRoaXMuI3NlbmRRdWV1ZS5hZGQoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIH0sIHNlbmRIaW50cy50eXBlZEFycmF5KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3RcdTIwMTlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gZGF0YS5zaXplXG4gICAgICB0aGlzLiNzZW5kUXVldWUuYWRkKGRhdGEsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gZGF0YS5zaXplXG4gICAgICB9LCBzZW5kSGludHMuYmxvYilcbiAgICB9XG4gIH1cblxuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHJlYWR5U3RhdGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHJlYWR5IHN0YXRlLlxuICAgIHJldHVybiB0aGlzW2tSZWFkeVN0YXRlXVxuICB9XG5cbiAgZ2V0IGJ1ZmZlcmVkQW1vdW50ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jYnVmZmVyZWRBbW91bnRcbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHVybCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tXZWJTb2NrZXRVUkxdKVxuICB9XG5cbiAgZ2V0IGV4dGVuc2lvbnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNleHRlbnNpb25zXG4gIH1cblxuICBnZXQgcHJvdG9jb2wgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNwcm90b2NvbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy4jZXZlbnRzLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25jbG9zZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5jbG9zZVxuICB9XG5cbiAgc2V0IG9uY2xvc2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5jbG9zZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoaXMuI2V2ZW50cy5jbG9zZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5tZXNzYWdlXG4gIH1cblxuICBzZXQgb25tZXNzYWdlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMubWVzc2FnZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy4jZXZlbnRzLm1lc3NhZ2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBiaW5hcnlUeXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpc1trQmluYXJ5VHlwZV1cbiAgfVxuXG4gIHNldCBiaW5hcnlUeXBlICh0eXBlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHR5cGUgIT09ICdibG9iJyAmJiB0eXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9IHR5cGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICAgKi9cbiAgI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkIChyZXNwb25zZSwgcGFyc2VkRXh0ZW5zaW9ucykge1xuICAgIC8vIHByb2Nlc3NSZXNwb25zZSBpcyBjYWxsZWQgd2hlbiB0aGUgXCJyZXNwb25zZSdzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHdlYlNvY2tldE9wdGlvbnMgPSB0aGlzW2tDb250cm9sbGVyXT8uZGlzcGF0Y2hlcj8ud2ViU29ja2V0T3B0aW9uc1xuICAgIGNvbnN0IG1heEZyYWdtZW50cyA9IHdlYlNvY2tldE9wdGlvbnM/Lm1heEZyYWdtZW50c1xuICAgIGNvbnN0IG1heFBheWxvYWRTaXplID0gd2ViU29ja2V0T3B0aW9ucz8ubWF4UGF5bG9hZFNpemVcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMsIHBhcnNlZEV4dGVuc2lvbnMsIHtcbiAgICAgIG1heEZyYWdtZW50cyxcbiAgICAgIG1heFBheWxvYWRTaXplXG4gICAgfSlcbiAgICBwYXJzZXIub24oJ2RyYWluJywgb25QYXJzZXJEcmFpbilcbiAgICBwYXJzZXIub24oJ2Vycm9yJywgb25QYXJzZXJFcnJvci5iaW5kKHRoaXMpKVxuXG4gICAgcmVzcG9uc2Uuc29ja2V0LndzID0gdGhpc1xuICAgIHRoaXNba0J5dGVQYXJzZXJdID0gcGFyc2VyXG5cbiAgICB0aGlzLiNzZW5kUXVldWUgPSBuZXcgU2VuZFF1ZXVlKHJlc3BvbnNlLnNvY2tldClcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZVx1MjAxOXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcG9zYWwgbWFkZSBpbiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3dlYnNvY2tldHMvaXNzdWVzLzQyXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAncHJvdG9jb2xzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQpXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdChWKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJvdG9jb2xzOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXShWKSB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBcnJheUJ1ZmZlcihWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxuZnVuY3Rpb24gb25QYXJzZXJEcmFpbiAoKSB7XG4gIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQucmVzdW1lKClcbn1cblxuZnVuY3Rpb24gb25QYXJzZXJFcnJvciAoZXJyKSB7XG4gIGxldCBtZXNzYWdlXG4gIGxldCBjb2RlXG5cbiAgaWYgKGVyciBpbnN0YW5jZW9mIENsb3NlRXZlbnQpIHtcbiAgICBtZXNzYWdlID0gZXJyLnJlYXNvblxuICAgIGNvZGUgPSBlcnIuY29kZVxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZVxuICB9XG5cbiAgZmlyZUV2ZW50KCdlcnJvcicsIHRoaXMsICgpID0+IG5ldyBFcnJvckV2ZW50KCdlcnJvcicsIHsgZXJyb3I6IGVyciwgbWVzc2FnZSB9KSlcblxuICBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24odGhpcywgY29kZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdlYlNvY2tldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSB2YWxpZCBMYXN0RXZlbnRJZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRMYXN0RXZlbnRJZCAodmFsdWUpIHtcbiAgLy8gTGFzdEV2ZW50SWQgc2hvdWxkIG5vdCBjb250YWluIFUrMDAwMCBOVUxMXG4gIHJldHVybiB2YWx1ZS5pbmRleE9mKCdcXHUwMDAwJykgPT09IC0xXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGJhc2UgMTAgZGlnaXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0FTQ0lJTnVtYmVyICh2YWx1ZSkge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh2YWx1ZS5jaGFyQ29kZUF0KGkpIDwgMHgzMCB8fCB2YWx1ZS5jaGFyQ29kZUF0KGkpID4gMHgzOSkgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzI2NjRcbmZ1bmN0aW9uIGRlbGF5IChtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKS51bnJlZigpXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1ZhbGlkTGFzdEV2ZW50SWQsXG4gIGlzQVNDSUlOdW1iZXIsXG4gIGRlbGF5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBpc0FTQ0lJTnVtYmVyLCBpc1ZhbGlkTGFzdEV2ZW50SWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8qKlxuICogQHR5cGUge251bWJlcltdfSBCT01cbiAqL1xuY29uc3QgQk9NID0gWzB4RUYsIDB4QkIsIDB4QkZdXG4vKipcbiAqIEB0eXBlIHsxMH0gTEZcbiAqL1xuY29uc3QgTEYgPSAweDBBXG4vKipcbiAqIEB0eXBlIHsxM30gQ1JcbiAqL1xuY29uc3QgQ1IgPSAweDBEXG4vKipcbiAqIEB0eXBlIHs1OH0gQ09MT05cbiAqL1xuY29uc3QgQ09MT04gPSAweDNBXG4vKipcbiAqIEB0eXBlIHszMn0gU1BBQ0VcbiAqL1xuY29uc3QgU1BBQ0UgPSAweDIwXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRXZlbnRTb3VyY2VTdHJlYW1FdmVudFxuICogQHR5cGUge29iamVjdH1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXZlbnRdIFRoZSBldmVudCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhXSBUaGUgZGF0YSBvZiB0aGUgbWVzc2FnZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaWRdIEEgdW5pcXVlIElEIGZvciB0aGUgZXZlbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JldHJ5XSBUaGUgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIGV2ZW50U291cmNlU2V0dGluZ3NcbiAqIEB0eXBlIHtvYmplY3R9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFzdEV2ZW50SWQgVGhlIGxhc3QgZXZlbnQgSUQgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9yaWdpbiBUaGUgb3JpZ2luIG9mIHRoZSBldmVudCBzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVjb25uZWN0aW9uVGltZSBUaGUgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuXG5jbGFzcyBFdmVudFNvdXJjZVN0cmVhbSBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBAdHlwZSB7ZXZlbnRTb3VyY2VTZXR0aW5nc31cbiAgICovXG4gIHN0YXRlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBMZWFkaW5nIGJ5dGUtb3JkZXItbWFyayBjaGVjay5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBjaGVja0JPTSA9IHRydWVcblxuICAvKipcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBjcmxmQ2hlY2sgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGV2ZW50RW5kQ2hlY2sgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7QnVmZmVyfVxuICAgKi9cbiAgYnVmZmVyID0gbnVsbFxuXG4gIHBvcyA9IDBcblxuICBldmVudCA9IHtcbiAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICBpZDogdW5kZWZpbmVkLFxuICAgIHJldHJ5OiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2V2ZW50U291cmNlU2V0dGluZ3N9IG9wdGlvbnMuZXZlbnRTb3VyY2VTZXR0aW5nc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5wdXNoXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEVuYWJsZSBvYmplY3QgbW9kZSBhcyBFdmVudFNvdXJjZVN0cmVhbSBlbWl0cyBvYmplY3RzIG9mIHNoYXBlXG4gICAgLy8gRXZlbnRTb3VyY2VTdHJlYW1FdmVudFxuICAgIG9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlID0gdHJ1ZVxuXG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIHRoaXMuc3RhdGUgPSBvcHRpb25zLmV2ZW50U291cmNlU2V0dGluZ3MgfHwge31cbiAgICBpZiAob3B0aW9ucy5wdXNoKSB7XG4gICAgICB0aGlzLnB1c2ggPSBvcHRpb25zLnB1c2hcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfZW5jb2RpbmdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfdHJhbnNmb3JtIChjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgIGlmIChjaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhY2hlIHRoZSBjaHVuayBpbiB0aGUgYnVmZmVyLCBhcyB0aGUgZGF0YSBtaWdodCBub3QgYmUgY29tcGxldGUgd2hpbGVcbiAgICAvLyBwcm9jZXNzaW5nIGl0XG4gICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgaWYgdGhlcmUgaXMgYSBtb3JlIHBlcmZvcm1hbnQgd2F5IHRvIGhhbmRsZVxuICAgIC8vIGluY29taW5nIGNodW5rc1xuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzI2MzBcbiAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWZmZXIsIGNodW5rXSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWZmZXIgPSBjaHVua1xuICAgIH1cblxuICAgIC8vIFN0cmlwIGxlYWRpbmcgYnl0ZS1vcmRlci1tYXJrIGlmIHdlIG9wZW5lZCB0aGUgc3RyZWFtIGFuZCBzdGFydGVkXG4gICAgLy8gdGhlIHByb2Nlc3Npbmcgb2YgdGhlIGluY29taW5nIGRhdGFcbiAgICBpZiAodGhpcy5jaGVja0JPTSkge1xuICAgICAgc3dpdGNoICh0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBCT01cbiAgICAgICAgICBpZiAodGhpcy5idWZmZXJbMF0gPT09IEJPTVswXSkge1xuICAgICAgICAgICAgLy8gSWYgaXQgaXMsIHdlIG5lZWQgdG8gd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgIC8vIEJPTSBhbnltb3JlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG5cbiAgICAgICAgICAvLyBUaGUgYnVmZmVyIG9ubHkgY29udGFpbnMgb25lIGJ5dGUgc28gd2UgbmVlZCB0byB3YWl0IGZvciBtb3JlIGRhdGFcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlyc3QgdHdvIGJ5dGVzIGFyZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgdHdvIGJ5dGVzXG4gICAgICAgICAgLy8gb2YgdGhlIEJPTVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzBdID09PSBCT01bMF0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzFdID09PSBCT01bMV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIG1vcmUgZGF0YSwgYmVjYXVzZSB0aGUgdGhpcmQgYnl0ZVxuICAgICAgICAgICAgLy8gaXMgbmVlZGVkIHRvIGRldGVybWluZSBpZiBpdCBpcyB0aGUgQk9NIG9yIG5vdFxuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgIC8vIEJPTSBhbnltb3JlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaXJzdCB0aHJlZSBieXRlcyBhcmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHRocmVlXG4gICAgICAgICAgLy8gYnl0ZXMgb2YgdGhlIEJPTVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzBdID09PSBCT01bMF0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzFdID09PSBCT01bMV0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzJdID09PSBCT01bMl1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzLCB3ZSBjYW4gZHJvcCB0aGUgYnVmZmVyZWQgZGF0YSwgYXMgaXQgaXMgb25seSB0aGUgQk9NXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygwKVxuICAgICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgICAgLy8gQk9NIGFueW1vcmVcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCT00gPSBmYWxzZVxuXG4gICAgICAgICAgICAvLyBBd2FpdCBtb3JlIGRhdGFcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgdGhlIEJPTSwgd2UgY2FuIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIGRhdGFcbiAgICAgICAgICB0aGlzLmNoZWNrQk9NID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgbG9uZ2VyIHRoYW4gMyBieXRlcywgc28gd2UgY2FuIGRyb3AgdGhlIEJPTSBpZiBpdCBpc1xuICAgICAgICAgIC8vIHByZXNlbnRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclswXSA9PT0gQk9NWzBdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsxXSA9PT0gQk9NWzFdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsyXSA9PT0gQk9NWzJdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIEJPTSBmcm9tIHRoZSBidWZmZXJcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkoMylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZXQgdGhlIGNoZWNrQk9NIGZsYWcgdG8gZmFsc2UgYXMgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgdGhlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBsaW5lIGVuZGVkIHdpdGggYW4gZW5kLW9mLWxpbmUsIHdlIG5lZWQgdG8gY2hlY2tcbiAgICAgIC8vIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhbHNvIGFuIGVuZC1vZi1saW5lLlxuICAgICAgaWYgKHRoaXMuZXZlbnRFbmRDaGVjaykge1xuICAgICAgICAvLyBJZiB0aGUgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGFuIGVuZC1vZi1saW5lLCB0aGVuIHRoZSBldmVudFxuICAgICAgICAvLyBpcyBmaW5pc2hlZCBhbmQgd2UgY2FuIHByb2Nlc3MgaXRcblxuICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgbGluZSBlbmRlZCB3aXRoIGEgY2FycmlhZ2UgcmV0dXJuLCB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGxpbmUgZmVlZCBhbmQgcmVtb3ZlIGl0XG4gICAgICAgIC8vIGZyb20gdGhlIGJ1ZmZlci5cbiAgICAgICAgaWYgKHRoaXMuY3JsZkNoZWNrKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGEgbGluZSBmZWVkLCB3ZSBjYW4gcmVtb3ZlIGl0XG4gICAgICAgICAgLy8gZnJvbSB0aGUgYnVmZmVyIGFuZCByZXNldCB0aGUgY3JsZkNoZWNrIGZsYWdcbiAgICAgICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBMRikge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyArIDEpXG4gICAgICAgICAgICB0aGlzLnBvcyA9IDBcbiAgICAgICAgICAgIHRoaXMuY3JsZkNoZWNrID0gZmFsc2VcblxuICAgICAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgbGluZSBmZWVkIGlzIG5vdCB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAgICAgLy8gZXZlbnQuIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGFuXG4gICAgICAgICAgICAvLyBlbmQtb2YtbGluZSBjaGFyYWN0ZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBldmVudCBpc1xuICAgICAgICAgICAgLy8gZmluaXNoZWQuIFdlIHNpbXBseSBjb250aW51ZSB0aGUgbG9vcCB0byBjaGVjayB0aGUgbmV4dFxuICAgICAgICAgICAgLy8gY2hhcmFjdGVyLlxuXG4gICAgICAgICAgICAvLyBBcyB3ZSByZW1vdmVkIHRoZSBsaW5lIGZlZWQgZnJvbSB0aGUgYnVmZmVyIGFuZCBzZXQgdGhlXG4gICAgICAgICAgICAvLyBjcmxmQ2hlY2sgZmxhZyB0byBmYWxzZSwgd2UgYmFzaWNhbGx5IGRvbid0IG1ha2UgYW55XG4gICAgICAgICAgICAvLyBkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgbGluZSBmZWVkIGFuZCBhIGNhcnJpYWdlIHJldHVybi5cbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3JsZkNoZWNrID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IExGIHx8IHRoaXMuYnVmZmVyW3RoaXMucG9zXSA9PT0gQ1IpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgYSBjYXJyaWFnZSByZXR1cm4sIHdlIG5lZWQgdG9cbiAgICAgICAgICAvLyBzZXQgdGhlIGNybGZDaGVjayBmbGFnIHRvIHRydWUsIGFzIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gICAgICAgICAgLy8gbmV4dCBjaGFyYWN0ZXIgaXMgYSBsaW5lIGZlZWQgc28gd2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuICAgICAgICAgIC8vIGJ1ZmZlclxuICAgICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgICAgICB0aGlzLmNybGZDaGVjayA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zICsgMSlcbiAgICAgICAgICB0aGlzLnBvcyA9IDBcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmV2ZW50LmRhdGEgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmV2ZW50LmV2ZW50IHx8IHRoaXMuZXZlbnQuaWQgfHwgdGhpcy5ldmVudC5yZXRyeSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnQodGhpcy5ldmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jbGVhckV2ZW50KClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBub3QgYW4gZW5kLW9mLWxpbmUsIHRoZW4gdGhlIGV2ZW50XG4gICAgICAgIC8vIGlzIG5vdCBmaW5pc2hlZCBhbmQgd2UgaGF2ZSB0byByZXNldCB0aGUgZXZlbnRFbmRDaGVjayBmbGFnXG4gICAgICAgIHRoaXMuZXZlbnRFbmRDaGVjayA9IGZhbHNlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhbiBlbmQtb2YtbGluZSwgd2UgY2FuIHByb2Nlc3MgdGhlXG4gICAgICAvLyBsaW5lXG4gICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBMRiB8fCB0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGNhcnJpYWdlIHJldHVybiwgd2UgbmVlZCB0b1xuICAgICAgICAvLyBzZXQgdGhlIGNybGZDaGVjayBmbGFnIHRvIHRydWUsIGFzIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gICAgICAgIC8vIG5leHQgY2hhcmFjdGVyIGlzIGEgbGluZSBmZWVkXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgICAgdGhpcy5jcmxmQ2hlY2sgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBhbnkgY2FzZSwgd2UgY2FuIHByb2Nlc3MgdGhlIGxpbmUgYXMgd2UgcmVhY2hlZCBhblxuICAgICAgICAvLyBlbmQtb2YtbGluZSBjaGFyYWN0ZXJcbiAgICAgICAgdGhpcy5wYXJzZUxpbmUodGhpcy5idWZmZXIuc3ViYXJyYXkoMCwgdGhpcy5wb3MpLCB0aGlzLmV2ZW50KVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgcHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MgKyAxKVxuICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24gYXMgd2UgcmVtb3ZlZCB0aGUgcHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICAgIHRoaXMucG9zID0gMFxuICAgICAgICAvLyBBIGxpbmUgd2FzIHByb2Nlc3NlZCBhbmQgdGhpcyBjb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBldmVudC4gV2UgbmVlZFxuICAgICAgICAvLyB0byBjaGVjayBpZiB0aGUgbmV4dCBsaW5lIGlzIGVtcHR5IHRvIGRldGVybWluZSBpZiB0aGUgZXZlbnQgaXNcbiAgICAgICAgLy8gZmluaXNoZWQuXG4gICAgICAgIHRoaXMuZXZlbnRFbmRDaGVjayA9IHRydWVcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MrK1xuICAgIH1cblxuICAgIGNhbGxiYWNrKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gbGluZVxuICAgKiBAcGFyYW0ge0V2ZW50U3RyZWFtRXZlbnR9IGV2ZW50XG4gICAqL1xuICBwYXJzZUxpbmUgKGxpbmUsIGV2ZW50KSB7XG4gICAgLy8gSWYgdGhlIGxpbmUgaXMgZW1wdHkgKGEgYmxhbmsgbGluZSlcbiAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQsIGFzIGRlZmluZWQgYmVsb3cuXG4gICAgLy8gVGhpcyB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIF90cmFuc2Zvcm0gbWV0aG9kXG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbGluZSBzdGFydHMgd2l0aCBhIFUrMDAzQSBDT0xPTiBjaGFyYWN0ZXIgKDopXG4gICAgLy8gSWdub3JlIHRoZSBsaW5lLlxuICAgIGNvbnN0IGNvbG9uUG9zaXRpb24gPSBsaW5lLmluZGV4T2YoQ09MT04pXG4gICAgaWYgKGNvbG9uUG9zaXRpb24gPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBmaWVsZCA9ICcnXG4gICAgbGV0IHZhbHVlID0gJydcblxuICAgIC8vIElmIHRoZSBsaW5lIGNvbnRhaW5zIGEgVSswMDNBIENPTE9OIGNoYXJhY3RlciAoOilcbiAgICBpZiAoY29sb25Qb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgIC8vIENvbGxlY3QgdGhlIGNoYXJhY3RlcnMgb24gdGhlIGxpbmUgYmVmb3JlIHRoZSBmaXJzdCBVKzAwM0EgQ09MT05cbiAgICAgIC8vIGNoYXJhY3RlciAoOiksIGFuZCBsZXQgZmllbGQgYmUgdGhhdCBzdHJpbmcuXG4gICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSBpZiB0aGVyZSBpcyBhIG1vcmUgcGVyZm9ybWFudCB3YXkgdG8gZXh0cmFjdCB0aGVcbiAgICAgIC8vIGZpZWxkXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yNjMwXG4gICAgICBmaWVsZCA9IGxpbmUuc3ViYXJyYXkoMCwgY29sb25Qb3NpdGlvbikudG9TdHJpbmcoJ3V0ZjgnKVxuXG4gICAgICAvLyBDb2xsZWN0IHRoZSBjaGFyYWN0ZXJzIG9uIHRoZSBsaW5lIGFmdGVyIHRoZSBmaXJzdCBVKzAwM0EgQ09MT05cbiAgICAgIC8vIGNoYXJhY3RlciAoOiksIGFuZCBsZXQgdmFsdWUgYmUgdGhhdCBzdHJpbmcuXG4gICAgICAvLyBJZiB2YWx1ZSBzdGFydHMgd2l0aCBhIFUrMDAyMCBTUEFDRSBjaGFyYWN0ZXIsIHJlbW92ZSBpdCBmcm9tIHZhbHVlLlxuICAgICAgbGV0IHZhbHVlU3RhcnQgPSBjb2xvblBvc2l0aW9uICsgMVxuICAgICAgaWYgKGxpbmVbdmFsdWVTdGFydF0gPT09IFNQQUNFKSB7XG4gICAgICAgICsrdmFsdWVTdGFydFxuICAgICAgfVxuICAgICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgaWYgdGhlcmUgaXMgYSBtb3JlIHBlcmZvcm1hbnQgd2F5IHRvIGV4dHJhY3QgdGhlXG4gICAgICAvLyB2YWx1ZVxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjYzMFxuICAgICAgdmFsdWUgPSBsaW5lLnN1YmFycmF5KHZhbHVlU3RhcnQpLnRvU3RyaW5nKCd1dGY4JylcblxuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgc3RyaW5nIGlzIG5vdCBlbXB0eSBidXQgZG9lcyBub3QgY29udGFpbiBhIFUrMDAzQSBDT0xPTlxuICAgICAgLy8gY2hhcmFjdGVyICg6KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcm9jZXNzIHRoZSBmaWVsZCB1c2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGJlbG93LCB1c2luZyB0aGUgd2hvbGVcbiAgICAgIC8vIGxpbmUgYXMgdGhlIGZpZWxkIG5hbWUsIGFuZCB0aGUgZW1wdHkgc3RyaW5nIGFzIHRoZSBmaWVsZCB2YWx1ZS5cbiAgICAgIGZpZWxkID0gbGluZS50b1N0cmluZygndXRmOCcpXG4gICAgICB2YWx1ZSA9ICcnXG4gICAgfVxuXG4gICAgLy8gTW9kaWZ5IHRoZSBldmVudCB3aXRoIHRoZSBmaWVsZCBuYW1lIGFuZCB2YWx1ZS4gVGhlIHZhbHVlIGlzIGFsc29cbiAgICAvLyBkZWNvZGVkIGFzIFVURi04XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgIGlmIChldmVudFtmaWVsZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnRbZmllbGRdICs9IGBcXG4ke3ZhbHVlfWBcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmV0cnknOlxuICAgICAgICBpZiAoaXNBU0NJSU51bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICBldmVudFtmaWVsZF0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdpZCc6XG4gICAgICAgIGlmIChpc1ZhbGlkTGFzdEV2ZW50SWQodmFsdWUpKSB7XG4gICAgICAgICAgZXZlbnRbZmllbGRdID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZXZlbnQnOlxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFNvdXJjZVN0cmVhbUV2ZW50fSBldmVudFxuICAgKi9cbiAgcHJvY2Vzc0V2ZW50IChldmVudCkge1xuICAgIGlmIChldmVudC5yZXRyeSAmJiBpc0FTQ0lJTnVtYmVyKGV2ZW50LnJldHJ5KSkge1xuICAgICAgdGhpcy5zdGF0ZS5yZWNvbm5lY3Rpb25UaW1lID0gcGFyc2VJbnQoZXZlbnQucmV0cnksIDEwKVxuICAgIH1cblxuICAgIGlmIChldmVudC5pZCAmJiBpc1ZhbGlkTGFzdEV2ZW50SWQoZXZlbnQuaWQpKSB7XG4gICAgICB0aGlzLnN0YXRlLmxhc3RFdmVudElkID0gZXZlbnQuaWRcbiAgICB9XG5cbiAgICAvLyBvbmx5IGRpc3BhdGNoIGV2ZW50LCB3aGVuIGRhdGEgaXMgcHJvdmlkZWRcbiAgICBpZiAoZXZlbnQuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2goe1xuICAgICAgICB0eXBlOiBldmVudC5ldmVudCB8fCAnbWVzc2FnZScsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBkYXRhOiBldmVudC5kYXRhLFxuICAgICAgICAgIGxhc3RFdmVudElkOiB0aGlzLnN0YXRlLmxhc3RFdmVudElkLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5zdGF0ZS5vcmlnaW5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjbGVhckV2ZW50ICgpIHtcbiAgICB0aGlzLmV2ZW50ID0ge1xuICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICByZXRyeTogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFNvdXJjZVN0cmVhbVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaCcpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBFdmVudFNvdXJjZVN0cmVhbSB9ID0gcmVxdWlyZSgnLi9ldmVudHNvdXJjZS1zdHJlYW0nKVxuY29uc3QgeyBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhLXVybCcpXG5jb25zdCB7IGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQgfSA9IHJlcXVpcmUoJy4uL3dlYnNvY2tldC9ldmVudHMnKVxuY29uc3QgeyBpc05ldHdvcmtFcnJvciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBkZWxheSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vKipcbiAqIEEgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBtdXN0IGluaXRpYWxseSBiZSBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLFxuICogcHJvYmFibHkgaW4gdGhlIHJlZ2lvbiBvZiBhIGZldyBzZWNvbmRzLlxuICpcbiAqIEluIENvbXBhcmlzb246XG4gKiAtIENocm9tZSB1c2VzIDMwMDBtcy5cbiAqIC0gRGVubyB1c2VzIDUwMDBtcy5cbiAqXG4gKiBAdHlwZSB7MzAwMH1cbiAqL1xuY29uc3QgZGVmYXVsdFJlY29ubmVjdGlvblRpbWUgPSAzMDAwXG5cbi8qKlxuICogVGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLlxuICogQGVudW1cbiAqIEByZWFkb25seVxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNkb20tZXZlbnRzb3VyY2UtcmVhZHlzdGF0ZS1kZXZcbiAqL1xuXG4vKipcbiAqIFRoZSBjb25uZWN0aW9uIGhhcyBub3QgeWV0IGJlZW4gZXN0YWJsaXNoZWQsIG9yIGl0IHdhcyBjbG9zZWQgYW5kIHRoZSB1c2VyXG4gKiBhZ2VudCBpcyByZWNvbm5lY3RpbmcuXG4gKiBAdHlwZSB7MH1cbiAqL1xuY29uc3QgQ09OTkVDVElORyA9IDBcblxuLyoqXG4gKiBUaGUgdXNlciBhZ2VudCBoYXMgYW4gb3BlbiBjb25uZWN0aW9uIGFuZCBpcyBkaXNwYXRjaGluZyBldmVudHMgYXMgaXRcbiAqIHJlY2VpdmVzIHRoZW0uXG4gKiBAdHlwZSB7MX1cbiAqL1xuY29uc3QgT1BFTiA9IDFcblxuLyoqXG4gKiBUaGUgY29ubmVjdGlvbiBpcyBub3Qgb3BlbiwgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCB0cnlpbmcgdG8gcmVjb25uZWN0LlxuICogQHR5cGUgezJ9XG4gKi9cbmNvbnN0IENMT1NFRCA9IDJcblxuLyoqXG4gKiBSZXF1ZXN0cyBmb3IgdGhlIGVsZW1lbnQgd2lsbCBoYXZlIHRoZWlyIG1vZGUgc2V0IHRvIFwiY29yc1wiIGFuZCB0aGVpciBjcmVkZW50aWFscyBtb2RlIHNldCB0byBcInNhbWUtb3JpZ2luXCIuXG4gKiBAdHlwZSB7J2Fub255bW91cyd9XG4gKi9cbmNvbnN0IEFOT05ZTU9VUyA9ICdhbm9ueW1vdXMnXG5cbi8qKlxuICogUmVxdWVzdHMgZm9yIHRoZSBlbGVtZW50IHdpbGwgaGF2ZSB0aGVpciBtb2RlIHNldCB0byBcImNvcnNcIiBhbmQgdGhlaXIgY3JlZGVudGlhbHMgbW9kZSBzZXQgdG8gXCJpbmNsdWRlXCIuXG4gKiBAdHlwZSB7J3VzZS1jcmVkZW50aWFscyd9XG4gKi9cbmNvbnN0IFVTRV9DUkVERU5USUFMUyA9ICd1c2UtY3JlZGVudGlhbHMnXG5cbi8qKlxuICogVGhlIEV2ZW50U291cmNlIGludGVyZmFjZSBpcyB1c2VkIHRvIHJlY2VpdmUgc2VydmVyLXNlbnQgZXZlbnRzLiBJdFxuICogY29ubmVjdHMgdG8gYSBzZXJ2ZXIgb3ZlciBIVFRQIGFuZCByZWNlaXZlcyBldmVudHMgaW4gdGV4dC9ldmVudC1zdHJlYW1cbiAqIGZvcm1hdCB3aXRob3V0IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uXG4gKiBAZXh0ZW5kcyB7RXZlbnRUYXJnZXR9XG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI3NlcnZlci1zZW50LWV2ZW50c1xuICogQGFwaSBwdWJsaWNcbiAqL1xuY2xhc3MgRXZlbnRTb3VyY2UgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gICNldmVudHMgPSB7XG4gICAgb3BlbjogbnVsbCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsXG4gIH1cblxuICAjdXJsID0gbnVsbFxuICAjd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcblxuICAjcmVhZHlTdGF0ZSA9IENPTk5FQ1RJTkdcblxuICAjcmVxdWVzdCA9IG51bGxcbiAgI2NvbnRyb2xsZXIgPSBudWxsXG5cbiAgI2Rpc3BhdGNoZXJcblxuICAvKipcbiAgICogQHR5cGUge2ltcG9ydCgnLi9ldmVudHNvdXJjZS1zdHJlYW0nKS5ldmVudFNvdXJjZVNldHRpbmdzfVxuICAgKi9cbiAgI3N0YXRlXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRXZlbnRTb3VyY2Ugb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7RXZlbnRTb3VyY2VJbml0fSBbZXZlbnRTb3VyY2VJbml0RGljdF1cbiAgICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCN0aGUtZXZlbnRzb3VyY2UtaW50ZXJmYWNlXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCBldmVudFNvdXJjZUluaXREaWN0ID0ge30pIHtcbiAgICAvLyAxLiBMZXQgZXYgYmUgYSBuZXcgRXZlbnRTb3VyY2Ugb2JqZWN0LlxuICAgIHN1cGVyKClcblxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnRXZlbnRTb3VyY2UgY29uc3RydWN0b3InXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBpZiAoIWV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgZXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnRXZlbnRTb3VyY2UgaXMgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICBjb2RlOiAnVU5ESUNJLUVTJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsLCBwcmVmaXgsICd1cmwnKVxuICAgIGV2ZW50U291cmNlSW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5FdmVudFNvdXJjZUluaXREaWN0KGV2ZW50U291cmNlSW5pdERpY3QsIHByZWZpeCwgJ2V2ZW50U291cmNlSW5pdERpY3QnKVxuXG4gICAgdGhpcy4jZGlzcGF0Y2hlciA9IGV2ZW50U291cmNlSW5pdERpY3QuZGlzcGF0Y2hlclxuICAgIHRoaXMuI3N0YXRlID0ge1xuICAgICAgbGFzdEV2ZW50SWQ6ICcnLFxuICAgICAgcmVjb25uZWN0aW9uVGltZTogZGVmYXVsdFJlY29ubmVjdGlvblRpbWVcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgc2V0dGluZ3MgYmUgZXYncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIGNvbnN0IHNldHRpbmdzID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdFxuXG4gICAgbGV0IHVybFJlY29yZFxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIDMuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBlbmNvZGluZy1wYXJzaW5nIGEgVVJMIGdpdmVuIHVybCwgcmVsYXRpdmUgdG8gc2V0dGluZ3MuXG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgc2V0dGluZ3Muc2V0dGluZ3NPYmplY3QuYmFzZVVybClcbiAgICAgIHRoaXMuI3N0YXRlLm9yaWdpbiA9IHVybFJlY29yZC5vcmlnaW5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyA0LiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNS4gU2V0IGV2J3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzLiN1cmwgPSB1cmxSZWNvcmQuaHJlZlxuXG4gICAgLy8gNi4gTGV0IGNvcnNBdHRyaWJ1dGVTdGF0ZSBiZSBBbm9ueW1vdXMuXG4gICAgbGV0IGNvcnNBdHRyaWJ1dGVTdGF0ZSA9IEFOT05ZTU9VU1xuXG4gICAgLy8gNy4gSWYgdGhlIHZhbHVlIG9mIGV2ZW50U291cmNlSW5pdERpY3QncyB3aXRoQ3JlZGVudGlhbHMgbWVtYmVyIGlzIHRydWUsXG4gICAgLy8gdGhlbiBzZXQgY29yc0F0dHJpYnV0ZVN0YXRlIHRvIFVzZSBDcmVkZW50aWFscyBhbmQgc2V0IGV2J3NcbiAgICAvLyB3aXRoQ3JlZGVudGlhbHMgYXR0cmlidXRlIHRvIHRydWUuXG4gICAgaWYgKGV2ZW50U291cmNlSW5pdERpY3Qud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICBjb3JzQXR0cmlidXRlU3RhdGUgPSBVU0VfQ1JFREVOVElBTFNcbiAgICAgIHRoaXMuI3dpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9XG5cbiAgICAvLyA4LiBMZXQgcmVxdWVzdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcG90ZW50aWFsLUNPUlMgcmVxdWVzdCBnaXZlblxuICAgIC8vIHVybFJlY29yZCwgdGhlIGVtcHR5IHN0cmluZywgYW5kIGNvcnNBdHRyaWJ1dGVTdGF0ZS5cbiAgICBjb25zdCBpbml0UmVxdWVzdCA9IHtcbiAgICAgIHJlZGlyZWN0OiAnZm9sbG93JyxcbiAgICAgIGtlZXBhbGl2ZTogdHJ1ZSxcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdXJscy1hbmQtZmV0Y2hpbmcuaHRtbCNjb3JzLXNldHRpbmdzLWF0dHJpYnV0ZXNcbiAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICAgIGNyZWRlbnRpYWxzOiBjb3JzQXR0cmlidXRlU3RhdGUgPT09ICdhbm9ueW1vdXMnXG4gICAgICAgID8gJ3NhbWUtb3JpZ2luJ1xuICAgICAgICA6ICdvbWl0JyxcbiAgICAgIHJlZmVycmVyOiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gOS4gU2V0IHJlcXVlc3QncyBjbGllbnQgdG8gc2V0dGluZ3MuXG4gICAgaW5pdFJlcXVlc3QuY2xpZW50ID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdFxuXG4gICAgLy8gMTAuIFVzZXIgYWdlbnRzIG1heSBzZXQgKGBBY2NlcHRgLCBgdGV4dC9ldmVudC1zdHJlYW1gKSBpbiByZXF1ZXN0J3MgaGVhZGVyIGxpc3QuXG4gICAgaW5pdFJlcXVlc3QuaGVhZGVyc0xpc3QgPSBbWydhY2NlcHQnLCB7IG5hbWU6ICdhY2NlcHQnLCB2YWx1ZTogJ3RleHQvZXZlbnQtc3RyZWFtJyB9XV1cblxuICAgIC8vIDExLiBTZXQgcmVxdWVzdCdzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICAgIGluaXRSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuXG4gICAgLy8gMTIuIFNldCByZXF1ZXN0J3MgaW5pdGlhdG9yIHR5cGUgdG8gXCJvdGhlclwiLlxuICAgIGluaXRSZXF1ZXN0LmluaXRpYXRvciA9ICdvdGhlcidcblxuICAgIGluaXRSZXF1ZXN0LnVybExpc3QgPSBbbmV3IFVSTCh0aGlzLiN1cmwpXVxuXG4gICAgLy8gMTMuIFNldCBldidzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzLiNyZXF1ZXN0ID0gbWFrZVJlcXVlc3QoaW5pdFJlcXVlc3QpXG5cbiAgICB0aGlzLiNjb25uZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGlzIEV2ZW50U291cmNlIG9iamVjdCdzIGNvbm5lY3Rpb24uIEl0IGNhbiBoYXZlIHRoZVxuICAgKiB2YWx1ZXMgZGVzY3JpYmVkIGJlbG93LlxuICAgKiBAcmV0dXJucyB7MHwxfDJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHJldHVybiB0aGlzLiNyZWFkeVN0YXRlXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgVVJMIHByb3ZpZGluZyB0aGUgZXZlbnQgc3RyZWFtLlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldCB1cmwgKCkge1xuICAgIHJldHVybiB0aGlzLiN1cmxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIEV2ZW50U291cmNlIG9iamVjdCB3YXNcbiAgICogaW5zdGFudGlhdGVkIHdpdGggQ09SUyBjcmVkZW50aWFscyBzZXQgKHRydWUpLCBvciBub3QgKGZhbHNlLCB0aGUgZGVmYXVsdCkuXG4gICAqL1xuICBnZXQgd2l0aENyZWRlbnRpYWxzICgpIHtcbiAgICByZXR1cm4gdGhpcy4jd2l0aENyZWRlbnRpYWxzXG4gIH1cblxuICAjY29ubmVjdCAoKSB7XG4gICAgaWYgKHRoaXMuI3JlYWR5U3RhdGUgPT09IENMT1NFRCkgcmV0dXJuXG5cbiAgICB0aGlzLiNyZWFkeVN0YXRlID0gQ09OTkVDVElOR1xuXG4gICAgY29uc3QgZmV0Y2hQYXJhbXMgPSB7XG4gICAgICByZXF1ZXN0OiB0aGlzLiNyZXF1ZXN0LFxuICAgICAgZGlzcGF0Y2hlcjogdGhpcy4jZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIC8vIDE0LiBMZXQgcHJvY2Vzc0V2ZW50U291cmNlRW5kT2ZCb2R5IGdpdmVuIHJlc3BvbnNlIHJlcyBiZSB0aGUgZm9sbG93aW5nIHN0ZXA6IGlmIHJlcyBpcyBub3QgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uLlxuICAgIGNvbnN0IHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keSA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGlzTmV0d29ya0Vycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy4jcmVjb25uZWN0KClcbiAgICB9XG5cbiAgICAvLyAxNS4gRmV0Y2ggcmVxdWVzdCwgd2l0aCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgc2V0IHRvIHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keS4uLlxuICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSA9IHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keVxuXG4gICAgLy8gYW5kIHByb2Nlc3NSZXNwb25zZSBzZXQgdG8gdGhlIGZvbGxvd2luZyBzdGVwcyBnaXZlbiByZXNwb25zZSByZXM6XG4gICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyAxLiBJZiByZXMgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG5cbiAgICAgIGlmIChpc05ldHdvcmtFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgLy8gMS4gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gZmFpbCB0aGUgY29ubmVjdGlvbiwgdGhlIHVzZXIgYWdlbnRcbiAgICAgICAgLy8gbXVzdCBxdWV1ZSBhIHRhc2sgd2hpY2gsIGlmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYVxuICAgICAgICAvLyB2YWx1ZSBvdGhlciB0aGFuIENMT1NFRCwgc2V0cyB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gQ0xPU0VEXG4gICAgICAgIC8vIGFuZCBmaXJlcyBhbiBldmVudCBuYW1lZCBlcnJvciBhdCB0aGUgRXZlbnRTb3VyY2Ugb2JqZWN0LiBPbmNlIHRoZVxuICAgICAgICAvLyB1c2VyIGFnZW50IGhhcyBmYWlsZWQgdGhlIGNvbm5lY3Rpb24sIGl0IGRvZXMgbm90IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gcmVjb25uZWN0LlxuICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiByZXMgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlZXN0YWJsaXNoIHRoZVxuICAgICAgICAgIC8vIGNvbm5lY3Rpb24sIHVubGVzcyB0aGUgdXNlciBhZ2VudCBrbm93cyB0aGF0IHRvIGJlIGZ1dGlsZSwgaW5cbiAgICAgICAgICAvLyB3aGljaCBjYXNlIHRoZSB1c2VyIGFnZW50IG1heSBmYWlsIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI3JlY29ubmVjdCgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiByZXMncyBzdGF0dXMgaXMgbm90IDIwMCwgb3IgaWYgcmVzJ3MgYENvbnRlbnQtVHlwZWBcbiAgICAgIC8vIGlzIG5vdCBgdGV4dC9ldmVudC1zdHJlYW1gLCB0aGVuIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnY29udGVudC10eXBlJywgdHJ1ZSlcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gY29udGVudFR5cGUgIT09IG51bGwgPyBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKSA6ICdmYWlsdXJlJ1xuICAgICAgY29uc3QgY29udGVudFR5cGVWYWxpZCA9IG1pbWVUeXBlICE9PSAnZmFpbHVyZScgJiYgbWltZVR5cGUuZXNzZW5jZSA9PT0gJ3RleHQvZXZlbnQtc3RyZWFtJ1xuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDIwMCB8fFxuICAgICAgICBjb250ZW50VHlwZVZhbGlkID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhbm5vdW5jZSB0aGUgY29ubmVjdGlvbiBhbmQgaW50ZXJwcmV0IHJlcydzIGJvZHlcbiAgICAgIC8vIGxpbmUgYnkgbGluZS5cblxuICAgICAgLy8gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gYW5ub3VuY2UgdGhlIGNvbm5lY3Rpb24sIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHF1ZXVlIGEgdGFzayB3aGljaCwgaWYgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIGlzIHNldCB0byBhXG4gICAgICAvLyB2YWx1ZSBvdGhlciB0aGFuIENMT1NFRCwgc2V0cyB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gT1BFTlxuICAgICAgLy8gYW5kIGZpcmVzIGFuIGV2ZW50IG5hbWVkIG9wZW4gYXQgdGhlIEV2ZW50U291cmNlIG9iamVjdC5cbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VydmVyLXNlbnQtZXZlbnRzLmh0bWwjc3NlLXByb2Nlc3NpbmctbW9kZWxcbiAgICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBPUEVOXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdvcGVuJykpXG5cbiAgICAgIC8vIElmIHJlZGlyZWN0ZWQgdG8gYSBkaWZmZXJlbnQgb3JpZ2luLCBzZXQgdGhlIG9yaWdpbiB0byB0aGUgbmV3IG9yaWdpbi5cbiAgICAgIHRoaXMuI3N0YXRlLm9yaWdpbiA9IHJlc3BvbnNlLnVybExpc3RbcmVzcG9uc2UudXJsTGlzdC5sZW5ndGggLSAxXS5vcmlnaW5cblxuICAgICAgY29uc3QgZXZlbnRTb3VyY2VTdHJlYW0gPSBuZXcgRXZlbnRTb3VyY2VTdHJlYW0oe1xuICAgICAgICBldmVudFNvdXJjZVNldHRpbmdzOiB0aGlzLiNzdGF0ZSxcbiAgICAgICAgcHVzaDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQoXG4gICAgICAgICAgICBldmVudC50eXBlLFxuICAgICAgICAgICAgZXZlbnQub3B0aW9uc1xuICAgICAgICAgICkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHBpcGVsaW5lKHJlc3BvbnNlLmJvZHkuc3RyZWFtLFxuICAgICAgICBldmVudFNvdXJjZVN0cmVhbSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXJyb3I/LmFib3J0ZWQgPT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuI2NvbnRyb2xsZXIgPSBmZXRjaGluZyhmZXRjaFBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI3NzZS1wcm9jZXNzaW5nLW1vZGVsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgI3JlY29ubmVjdCAoKSB7XG4gICAgLy8gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gcmVlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24sIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAvLyBydW4gdGhlIGZvbGxvd2luZyBzdGVwcy4gVGhlc2Ugc3RlcHMgYXJlIHJ1biBpbiBwYXJhbGxlbCwgbm90IGFzIHBhcnQgb2ZcbiAgICAvLyBhIHRhc2suIChUaGUgdGFza3MgdGhhdCBpdCBxdWV1ZXMsIG9mIGNvdXJzZSwgYXJlIHJ1biBsaWtlIG5vcm1hbCB0YXNrc1xuICAgIC8vIGFuZCBub3QgdGhlbXNlbHZlcyBpbiBwYXJhbGxlbC4pXG5cbiAgICAvLyAxLiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAgIDEuIElmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gQ0xPU0VELCBhYm9ydCB0aGUgdGFzay5cbiAgICBpZiAodGhpcy4jcmVhZHlTdGF0ZSA9PT0gQ0xPU0VEKSByZXR1cm5cblxuICAgIC8vICAgMi4gU2V0IHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBDT05ORUNUSU5HLlxuICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBDT05ORUNUSU5HXG5cbiAgICAvLyAgIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3IgYXQgdGhlIEV2ZW50U291cmNlIG9iamVjdC5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuXG4gICAgLy8gMi4gV2FpdCBhIGRlbGF5IGVxdWFsIHRvIHRoZSByZWNvbm5lY3Rpb24gdGltZSBvZiB0aGUgZXZlbnQgc291cmNlLlxuICAgIGF3YWl0IGRlbGF5KHRoaXMuI3N0YXRlLnJlY29ubmVjdGlvblRpbWUpXG5cbiAgICAvLyA1LiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAgIDEuIElmIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IHRvXG4gICAgLy8gICAgICBDT05ORUNUSU5HLCB0aGVuIHJldHVybi5cbiAgICBpZiAodGhpcy4jcmVhZHlTdGF0ZSAhPT0gQ09OTkVDVElORykgcmV0dXJuXG5cbiAgICAvLyAgIDIuIExldCByZXF1ZXN0IGJlIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyByZXF1ZXN0LlxuICAgIC8vICAgMy4gSWYgdGhlIEV2ZW50U291cmNlIG9iamVjdCdzIGxhc3QgZXZlbnQgSUQgc3RyaW5nIGlzIG5vdCB0aGUgZW1wdHlcbiAgICAvLyAgICAgIHN0cmluZywgdGhlbjpcbiAgICAvLyAgICAgIDEuIExldCBsYXN0RXZlbnRJRFZhbHVlIGJlIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyBsYXN0IGV2ZW50IElEXG4gICAgLy8gICAgICAgICBzdHJpbmcsIGVuY29kZWQgYXMgVVRGLTguXG4gICAgLy8gICAgICAyLiBTZXQgKGBMYXN0LUV2ZW50LUlEYCwgbGFzdEV2ZW50SURWYWx1ZSkgaW4gcmVxdWVzdCdzIGhlYWRlclxuICAgIC8vICAgICAgICAgbGlzdC5cbiAgICBpZiAodGhpcy4jc3RhdGUubGFzdEV2ZW50SWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNyZXF1ZXN0LmhlYWRlcnNMaXN0LnNldCgnbGFzdC1ldmVudC1pZCcsIHRoaXMuI3N0YXRlLmxhc3RFdmVudElkLCB0cnVlKVxuICAgIH1cblxuICAgIC8vICAgNC4gRmV0Y2ggcmVxdWVzdCBhbmQgcHJvY2VzcyB0aGUgcmVzcG9uc2Ugb2J0YWluZWQgaW4gdGhpcyBmYXNoaW9uLCBpZiBhbnksIGFzIGRlc2NyaWJlZCBlYXJsaWVyIGluIHRoaXMgc2VjdGlvbi5cbiAgICB0aGlzLiNjb25uZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24sIGlmIGFueSwgYW5kIHNldHMgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHRvXG4gICAqIENMT1NFRC5cbiAgICovXG4gIGNsb3NlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFdmVudFNvdXJjZSlcblxuICAgIGlmICh0aGlzLiNyZWFkeVN0YXRlID09PSBDTE9TRUQpIHJldHVyblxuICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBDTE9TRURcbiAgICB0aGlzLiNjb250cm9sbGVyLmFib3J0KClcbiAgICB0aGlzLiNyZXF1ZXN0ID0gbnVsbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGNvbnN0YW50c1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIENPTk5FQ1RJTkc6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBDT05ORUNUSU5HLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9LFxuICBPUEVOOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogT1BFTixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSxcbiAgQ0xPU0VEOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogQ0xPU0VELFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEV2ZW50U291cmNlLCBjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzKVxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRXZlbnRTb3VyY2UucHJvdG90eXBlLCBjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFdmVudFNvdXJjZS5wcm90b3R5cGUsIHtcbiAgY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25vcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdpdGhDcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXZlbnRTb3VyY2VJbml0RGljdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3dpdGhDcmVkZW50aWFscycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2Rpc3BhdGNoZXInLCAvLyB1bmRpY2kgb25seVxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFNvdXJjZSxcbiAgZGVmYXVsdFJlY29ubmVjdGlvblRpbWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9jbGllbnQnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlcicpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9wb29sJylcbmNvbnN0IEJhbGFuY2VkUG9vbCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvYmFsYW5jZWQtcG9vbCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvYWdlbnQnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQnKVxuY29uc3QgRW52SHR0cFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50JylcbmNvbnN0IFJldHJ5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL3JldHJ5LWFnZW50JylcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoJy4vbGliL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2xpYi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gZXJyb3JzXG5jb25zdCBhcGkgPSByZXF1aXJlKCcuL2xpYi9hcGknKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Nvbm5lY3QnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja0FnZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWFnZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLXBvb2wnKVxuY29uc3QgbW9ja0Vycm9ycyA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1lcnJvcnMnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciwgc2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi9saWIvZ2xvYmFsJylcbmNvbnN0IERlY29yYXRvckhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL2RlY29yYXRvci1oYW5kbGVyJylcbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvcmVkaXJlY3QtaGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QtaW50ZXJjZXB0b3InKVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5FbnZIdHRwUHJveHlBZ2VudCA9IEVudkh0dHBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUFnZW50ID0gUmV0cnlBZ2VudFxubW9kdWxlLmV4cG9ydHMuUmV0cnlIYW5kbGVyID0gUmV0cnlIYW5kbGVyXG5cbm1vZHVsZS5leHBvcnRzLkRlY29yYXRvckhhbmRsZXIgPSBEZWNvcmF0b3JIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5SZWRpcmVjdEhhbmRsZXIgPSBSZWRpcmVjdEhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5pbnRlcmNlcHRvcnMgPSB7XG4gIHJlZGlyZWN0OiByZXF1aXJlKCcuL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdCcpLFxuICByZXRyeTogcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmV0cnknKSxcbiAgZHVtcDogcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvZHVtcCcpLFxuICBkbnM6IHJlcXVpcmUoJy4vbGliL2ludGVyY2VwdG9yL2RucycpXG59XG5cbm1vZHVsZS5leHBvcnRzLmJ1aWxkQ29ubmVjdG9yID0gYnVpbGRDb25uZWN0b3Jcbm1vZHVsZS5leHBvcnRzLmVycm9ycyA9IGVycm9yc1xubW9kdWxlLmV4cG9ydHMudXRpbCA9IHtcbiAgcGFyc2VIZWFkZXJzOiB1dGlsLnBhcnNlSGVhZGVycyxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nOiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZ1xufVxuXG5mdW5jdGlvbiBtYWtlRGlzcGF0Y2hlciAoZm4pIHtcbiAgcmV0dXJuICh1cmwsIG9wdHMsIGhhbmRsZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGhhbmRsZXIgPSBvcHRzXG4gICAgICBvcHRzID0gbnVsbFxuICAgIH1cblxuICAgIGlmICghdXJsIHx8ICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdXJsICE9PSAnb2JqZWN0JyAmJiAhKHVybCBpbnN0YW5jZW9mIFVSTCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAhPSBudWxsICYmIHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICYmIG9wdHMucGF0aCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMucGF0aCcpXG4gICAgICB9XG5cbiAgICAgIGxldCBwYXRoID0gb3B0cy5wYXRoXG4gICAgICBpZiAoIW9wdHMucGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICAgIH1cblxuICAgICAgdXJsID0gbmV3IFVSTCh1dGlsLnBhcnNlT3JpZ2luKHVybCkub3JpZ2luICsgcGF0aClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIG9wdHMgPSB0eXBlb2YgdXJsID09PSAnb2JqZWN0JyA/IHVybCA6IHt9XG4gICAgICB9XG5cbiAgICAgIHVybCA9IHV0aWwucGFyc2VVUkwodXJsKVxuICAgIH1cblxuICAgIGNvbnN0IHsgYWdlbnQsIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgfSA9IG9wdHNcblxuICAgIGlmIChhZ2VudCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBvcHRzLmFnZW50LiBEaWQgeW91IG1lYW4gb3B0cy5jbGllbnQ/JylcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uY2FsbChkaXNwYXRjaGVyLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgcGF0aDogdXJsLnNlYXJjaCA/IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCA6IHVybC5wYXRobmFtZSxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgKG9wdHMuYm9keSA/ICdQVVQnIDogJ0dFVCcpXG4gICAgfSwgaGFuZGxlcilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxEaXNwYXRjaGVyID0gc2V0R2xvYmFsRGlzcGF0Y2hlclxubW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsRGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXJcblxuY29uc3QgZmV0Y2hJbXBsID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoJykuZmV0Y2hcbm1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKGluaXQsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZmV0Y2hJbXBsKGluaXQsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgJiYgdHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycilcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaC9oZWFkZXJzJykuSGVhZGVyc1xubW9kdWxlLmV4cG9ydHMuUmVzcG9uc2UgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdCA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaC9yZXF1ZXN0JykuUmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvZm9ybWRhdGEnKS5Gb3JtRGF0YVxubW9kdWxlLmV4cG9ydHMuRmlsZSA9IGdsb2JhbFRoaXMuRmlsZSA/PyByZXF1aXJlKCdub2RlOmJ1ZmZlcicpLkZpbGVcbm1vZHVsZS5leHBvcnRzLkZpbGVSZWFkZXIgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG5jb25zdCB7IHNldEdsb2JhbE9yaWdpbiwgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsJylcblxubW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW5cblxuY29uc3QgeyBDYWNoZVN0b3JhZ2UgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvY2FjaGUvc3ltYm9scycpXG5cbi8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4vLyBpbiBhbiBvbGRlciB2ZXJzaW9uIG9mIE5vZGUsIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgdXNlIHdpdGhvdXQgZmV0Y2guXG5tb2R1bGUuZXhwb3J0cy5jYWNoZXMgPSBuZXcgQ2FjaGVTdG9yYWdlKGtDb25zdHJ1Y3QpXG5cbmNvbnN0IHsgZGVsZXRlQ29va2llLCBnZXRDb29raWVzLCBnZXRTZXRDb29raWVzLCBzZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9jb29raWVzJylcblxubW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG5tb2R1bGUuZXhwb3J0cy5nZXRDb29raWVzID0gZ2V0Q29va2llc1xubW9kdWxlLmV4cG9ydHMuZ2V0U2V0Q29va2llcyA9IGdldFNldENvb2tpZXNcbm1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoL2RhdGEtdXJsJylcblxubW9kdWxlLmV4cG9ydHMucGFyc2VNSU1FVHlwZSA9IHBhcnNlTUlNRVR5cGVcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUFNaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZVxuXG5jb25zdCB7IENsb3NlRXZlbnQsIEVycm9yRXZlbnQsIE1lc3NhZ2VFdmVudCB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMnKVxubW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gcmVxdWlyZSgnLi9saWIvd2ViL3dlYnNvY2tldC93ZWJzb2NrZXQnKS5XZWJTb2NrZXRcbm1vZHVsZS5leHBvcnRzLkNsb3NlRXZlbnQgPSBDbG9zZUV2ZW50XG5tb2R1bGUuZXhwb3J0cy5FcnJvckV2ZW50ID0gRXJyb3JFdmVudFxubW9kdWxlLmV4cG9ydHMuTWVzc2FnZUV2ZW50ID0gTWVzc2FnZUV2ZW50XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcblxuY29uc3QgeyBFdmVudFNvdXJjZSB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlJylcblxubW9kdWxlLmV4cG9ydHMuRXZlbnRTb3VyY2UgPSBFdmVudFNvdXJjZVxuIiwgbnVsbCwgbnVsbCwgIi8qIVxuICogY29udGVudC10eXBlXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuY29uc3QgVEVYVF9SRUdFWFAgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSokLztcbmNvbnN0IFRPS0VOX1JFR0VYUCA9IC9eWyEjJCUmJyorLl5fYHx+MC05QS1aYS16LV0rJC87XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIGNoYXJzIHRoYXQgbXVzdCBiZSBxdW90ZWQtcGFpciBpbiBSRkMgOTExMCBzZWMgNS42LjRcbiAqL1xuY29uc3QgUVVPVEVfUkVHRVhQID0gL1tcXFxcXCJdL2c7XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHR5cGUgaW4gUkZDIDkxMTAgc2VjIDguMy4xXG4gKlxuICogbWVkaWEtdHlwZSA9IHR5cGUgXCIvXCIgc3VidHlwZVxuICogdHlwZSAgICAgICA9IHRva2VuXG4gKiBzdWJ0eXBlICAgID0gdG9rZW5cbiAqL1xuY29uc3QgVFlQRV9SRUdFWFAgPVxuICAvXlshIyQlJicqKy5eX2B8fjAtOUEtWmEtei1dK1xcL1shIyQlJicqKy5eX2B8fjAtOUEtWmEtei1dKyQvO1xuXG4vKipcbiAqIE51bGwgb2JqZWN0IHBlcmYgb3B0aW1pemF0aW9uLiBGYXN0ZXIgdGhhbiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgYW5kIGB7IF9fcHJvdG9fXzogbnVsbCB9YC5cbiAqL1xuY29uc3QgTnVsbE9iamVjdCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICBjb25zdCBDID0gZnVuY3Rpb24gKCkge307XG4gIEMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIEM7XG59KSgpIGFzIHVua25vd24gYXMgeyBuZXcgKCk6IGFueSB9O1xuXG4vKipcbiAqIFRoZSBjb250ZW50IHR5cGUgb2JqZWN0IGNvbnRhaW5zIGEgdHlwZSBzdHJpbmcgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFR5cGUge1xuICB0eXBlOiBzdHJpbmc7XG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogRm9ybWF0IGFuIG9iamVjdCBpbnRvIGEgYENvbnRlbnQtVHlwZWAgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KG9iajogUGFydGlhbDxDb250ZW50VHlwZT4pOiBzdHJpbmcge1xuICBjb25zdCB7IHR5cGUsIHBhcmFtZXRlcnMgfSA9IG9iajtcblxuICBpZiAoIXR5cGUgfHwgIVRZUEVfUkVHRVhQLnRlc3QodHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSB0eXBlO1xuXG4gIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKSkge1xuICAgICAgaWYgKCFUT0tFTl9SRUdFWFAudGVzdChwYXJhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgbmFtZTogJHtwYXJhbX1gKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IGA7ICR7cGFyYW19PSR7cXN0cmluZyhwYXJhbWV0ZXJzW3BhcmFtXSl9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHBhcnNpbmcgYSBgQ29udGVudC1UeXBlYCBoZWFkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VPcHRpb25zIHtcbiAgcGFyYW1ldGVycz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSBgQ29udGVudC1UeXBlYCBoZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShoZWFkZXI6IHN0cmluZywgb3B0aW9ucz86IFBhcnNlT3B0aW9ucyk6IENvbnRlbnRUeXBlIHtcbiAgY29uc3QgbGVuID0gaGVhZGVyLmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gc2tpcE9XUyhoZWFkZXIsIDAsIGxlbik7XG5cbiAgY29uc3QgdmFsdWVTdGFydCA9IGluZGV4O1xuICBpbmRleCA9IHNraXBWYWx1ZShoZWFkZXIsIGluZGV4LCBsZW4pO1xuICBjb25zdCB2YWx1ZUVuZCA9IHRyYWlsaW5nT1dTKGhlYWRlciwgdmFsdWVTdGFydCwgaW5kZXgpO1xuICBjb25zdCB0eXBlID0gaGVhZGVyLnNsaWNlKHZhbHVlU3RhcnQsIHZhbHVlRW5kKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwYXJhbWV0ZXJzID1cbiAgICBvcHRpb25zPy5wYXJhbWV0ZXJzID09PSBmYWxzZVxuICAgICAgPyBuZXcgTnVsbE9iamVjdCgpXG4gICAgICA6IHBhcnNlUGFyYW1ldGVycyhoZWFkZXIsIGluZGV4LCBsZW4pO1xuXG4gIHJldHVybiB7IHR5cGUsIHBhcmFtZXRlcnMgfTtcbn1cblxuY29uc3QgU1AgPSAzMjsgLy8gXCIgXCJcbmNvbnN0IEhUQUIgPSA5OyAvLyBcIlxcdFwiXG5jb25zdCBTRU1JID0gNTk7IC8vIFwiO1wiXG5jb25zdCBFUSA9IDYxOyAvLyBcIj1cIlxuY29uc3QgRFFVT1RFID0gMzQ7IC8vICdcIidcbmNvbnN0IEJTTEFTSCA9IDkyOyAvLyBcIlxcXFxcIlxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcGFyYW1ldGVycyBvZiBhIGBDb250ZW50LVR5cGVgIGhlYWRlciBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVycyhcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIGluZGV4OiBudW1iZXIsXG4gIGxlbjogbnVtYmVyLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTnVsbE9iamVjdCgpO1xuXG4gIHBhcmFtZXRlcjogd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgaW5kZXggPSBza2lwT1dTKGhlYWRlciwgaW5kZXggKyAxIC8qIFNraXAgb3ZlciA7ICovLCBsZW4pO1xuXG4gICAgY29uc3Qga2V5U3RhcnQgPSBpbmRleDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbikge1xuICAgICAgY29uc3QgY29kZSA9IGhlYWRlci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgIGlmIChjb2RlID09PSBTRU1JKSBjb250aW51ZSBwYXJhbWV0ZXI7XG5cbiAgICAgIGlmIChjb2RlID09PSBFUSkge1xuICAgICAgICBjb25zdCBrZXlFbmQgPSB0cmFpbGluZ09XUyhoZWFkZXIsIGtleVN0YXJ0LCBpbmRleCk7XG4gICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZShrZXlTdGFydCwga2V5RW5kKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGluZGV4ID0gc2tpcE9XUyhoZWFkZXIsIGluZGV4ICsgMSwgbGVuKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBsZW4gJiYgaGVhZGVyLmNoYXJDb2RlQXQoaW5kZXgpID09PSBEUVVPVEUpIHtcbiAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBoZWFkZXIuY2hhckNvZGVBdChpbmRleCsrKTtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBEUVVPVEUpIHtcbiAgICAgICAgICAgICAgaW5kZXggPSBza2lwVmFsdWUoaGVhZGVyLCBpbmRleCwgbGVuKTtcbiAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNba2V5XSA9PT0gdW5kZWZpbmVkKSBwYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSBCU0xBU0ggJiYgaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgICAgdmFsdWUgKz0gaGVhZGVyW2luZGV4KytdO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZSBwYXJhbWV0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIGluZGV4ID0gc2tpcFZhbHVlKGhlYWRlciwgaW5kZXgsIGxlbik7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcnNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVFbmQgPSB0cmFpbGluZ09XUyhoZWFkZXIsIHZhbHVlU3RhcnQsIGluZGV4KTtcbiAgICAgICAgICBwYXJhbWV0ZXJzW2tleV0gPSBoZWFkZXIuc2xpY2UodmFsdWVTdGFydCwgdmFsdWVFbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWUgcGFyYW1ldGVyO1xuICAgICAgfVxuXG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG4vKipcbiAqIFNraXAgb3ZlciBjaGFyYWN0ZXJzIHVudGlsIGEgc2VtaWNvbG9uLlxuICovXG5mdW5jdGlvbiBza2lwVmFsdWUoc3RyOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICBpZiAoY2hhciA9PT0gU0VNSSkgYnJlYWs7XG4gICAgaW5kZXgrKztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbi8qKlxuICogU2tpcCBvcHRpb25hbCB3aGl0ZXNwYWNlIChPV1MpIGluIGFuIEhUVFAgaGVhZGVyIHZhbHVlLlxuICpcbiAqIE9XUyBpcyBkZWZpbmVkIGluIFJGQyA5MTEwIHNlYyA1LjYuMyBhcyBTUCAoXCIgXCIpIG9yIEhUQUIgKFwiXFx0XCIpLlxuICovXG5mdW5jdGlvbiBza2lwT1dTKGhlYWRlcjogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBsZW46IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChpbmRleCA8IGxlbikge1xuICAgIGNvbnN0IGNoYXIgPSBoZWFkZXIuY2hhckNvZGVBdChpbmRleCk7XG4gICAgaWYgKGNoYXIgIT09IFNQICYmIGNoYXIgIT09IEhUQUIpIGJyZWFrO1xuICAgIGluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFRyaW0gb3B0aW9uYWwgd2hpdGVzcGFjZSAoT1dTKSBmcm9tIHRoZSBlbmQgb2YgYSBzdWJzdHJpbmcuXG4gKlxuICogT1dTIGlzIGRlZmluZWQgaW4gUkZDIDkxMTAgc2VjIDUuNi4zIGFzIFNQIChcIiBcIikgb3IgSFRBQiAoXCJcXHRcIikuXG4gKi9cbmZ1bmN0aW9uIHRyYWlsaW5nT1dTKGhlYWRlcjogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChlbmQgPiBzdGFydCkge1xuICAgIGNvbnN0IGNoYXIgPSBoZWFkZXIuY2hhckNvZGVBdChlbmQgLSAxKTtcbiAgICBpZiAoY2hhciAhPT0gU1AgJiYgY2hhciAhPT0gSFRBQikgYnJlYWs7XG4gICAgZW5kLS07XG4gIH1cbiAgcmV0dXJuIGVuZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBwYXJhbWV0ZXIgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHFzdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoVE9LRU5fUkVHRVhQLnRlc3Qoc3RyKSkgcmV0dXJuIHN0cjtcbiAgaWYgKFRFWFRfUkVHRVhQLnRlc3Qoc3RyKSkgcmV0dXJuIGBcIiR7c3RyLnJlcGxhY2UoUVVPVEVfUkVHRVhQLCBcIlxcXFwkJlwiKX1cImA7XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgdmFsdWU6ICR7c3RyfWApO1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBOb3RlOiB0aGlzIGlzIHRoZSBzZW12ZXIub3JnIHZlcnNpb24gb2YgdGhlIHNwZWMgdGhhdCBpdCBpbXBsZW1lbnRzXG4vLyBOb3QgbmVjZXNzYXJpbHkgdGhlIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGNvZGUuXG5jb25zdCBTRU1WRVJfU1BFQ19WRVJTSU9OID0gJzIuMC4wJ1xuXG5jb25zdCBNQVhfTEVOR1RIID0gMjU2XG5jb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDkwMDcxOTkyNTQ3NDA5OTFcblxuLy8gTWF4IHNhZmUgc2VnbWVudCBsZW5ndGggZm9yIGNvZXJjaW9uLlxuY29uc3QgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCA9IDE2XG5cbi8vIE1heCBzYWZlIGxlbmd0aCBmb3IgYSBidWlsZCBpZGVudGlmaWVyLiBUaGUgbWF4IGxlbmd0aCBtaW51cyA2IGNoYXJhY3RlcnMgZm9yXG4vLyB0aGUgc2hvcnRlc3QgdmVyc2lvbiB3aXRoIGEgYnVpbGQgMC4wLjArQlVJTEQuXG5jb25zdCBNQVhfU0FGRV9CVUlMRF9MRU5HVEggPSBNQVhfTEVOR1RIIC0gNlxuXG5jb25zdCBSRUxFQVNFX1RZUEVTID0gW1xuICAnbWFqb3InLFxuICAncHJlbWFqb3InLFxuICAnbWlub3InLFxuICAncHJlbWlub3InLFxuICAncGF0Y2gnLFxuICAncHJlcGF0Y2gnLFxuICAncHJlcmVsZWFzZScsXG5dXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RILFxuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9TQUZFX0lOVEVHRVIsXG4gIFJFTEVBU0VfVFlQRVMsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT04sXG4gIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFOiAwYjAwMSxcbiAgRkxBR19MT09TRTogMGIwMTAsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlYnVnID0gKFxuICB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgcHJvY2Vzcy5lbnYgJiZcbiAgcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJlxuICAvXFxic2VtdmVyXFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKVxuKSA/ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKCdTRU1WRVInLCAuLi5hcmdzKVxuICA6ICgpID0+IHt9XG5cbm1vZHVsZS5leHBvcnRzID0gZGVidWdcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9MRU5HVEgsXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnJylcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHt9XG5cbi8vIFRoZSBhY3R1YWwgcmVnZXhwcyBnbyBvbiBleHBvcnRzLnJlXG5jb25zdCByZSA9IGV4cG9ydHMucmUgPSBbXVxuY29uc3Qgc2FmZVJlID0gZXhwb3J0cy5zYWZlUmUgPSBbXVxuY29uc3Qgc3JjID0gZXhwb3J0cy5zcmMgPSBbXVxuY29uc3Qgc2FmZVNyYyA9IGV4cG9ydHMuc2FmZVNyYyA9IFtdXG5jb25zdCB0ID0gZXhwb3J0cy50ID0ge31cbmxldCBSID0gMFxuXG5jb25zdCBMRVRURVJEQVNITlVNQkVSID0gJ1thLXpBLVowLTktXSdcblxuLy8gUmVwbGFjZSBzb21lIGdyZWVkeSByZWdleCB0b2tlbnMgdG8gcHJldmVudCByZWdleCBkb3MgaXNzdWVzLiBUaGVzZSByZWdleCBhcmVcbi8vIHVzZWQgaW50ZXJuYWxseSB2aWEgdGhlIHNhZmVSZSBvYmplY3Qgc2luY2UgYWxsIGlucHV0cyBpbiB0aGlzIGxpYnJhcnkgZ2V0XG4vLyBub3JtYWxpemVkIGZpcnN0IHRvIHRyaW0gYW5kIGNvbGxhcHNlIGFsbCBleHRyYSB3aGl0ZXNwYWNlLiBUaGUgb3JpZ2luYWxcbi8vIHJlZ2V4ZXMgYXJlIGV4cG9ydGVkIGZvciB1c2VybGFuZCBjb25zdW1wdGlvbiBhbmQgbG93ZXIgbGV2ZWwgdXNhZ2UuIEFcbi8vIGZ1dHVyZSBicmVha2luZyBjaGFuZ2UgY291bGQgZXhwb3J0IHRoZSBzYWZlciByZWdleCBvbmx5IHdpdGggYSBub3RlIHRoYXRcbi8vIGFsbCBpbnB1dCBzaG91bGQgaGF2ZSBleHRyYSB3aGl0ZXNwYWNlIHJlbW92ZWQuXG5jb25zdCBzYWZlUmVnZXhSZXBsYWNlbWVudHMgPSBbXG4gIFsnXFxcXHMnLCAxXSxcbiAgWydcXFxcZCcsIE1BWF9MRU5HVEhdLFxuICBbTEVUVEVSREFTSE5VTUJFUiwgTUFYX1NBRkVfQlVJTERfTEVOR1RIXSxcbl1cblxuY29uc3QgbWFrZVNhZmVSZWdleCA9ICh2YWx1ZSkgPT4ge1xuICBmb3IgKGNvbnN0IFt0b2tlbiwgbWF4XSBvZiBzYWZlUmVnZXhSZXBsYWNlbWVudHMpIHtcbiAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAuc3BsaXQoYCR7dG9rZW59KmApLmpvaW4oYCR7dG9rZW59ezAsJHttYXh9fWApXG4gICAgICAuc3BsaXQoYCR7dG9rZW59K2ApLmpvaW4oYCR7dG9rZW59ezEsJHttYXh9fWApXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmNvbnN0IGNyZWF0ZVRva2VuID0gKG5hbWUsIHZhbHVlLCBpc0dsb2JhbCkgPT4ge1xuICBjb25zdCBzYWZlID0gbWFrZVNhZmVSZWdleCh2YWx1ZSlcbiAgY29uc3QgaW5kZXggPSBSKytcbiAgZGVidWcobmFtZSwgaW5kZXgsIHZhbHVlKVxuICB0W25hbWVdID0gaW5kZXhcbiAgc3JjW2luZGV4XSA9IHZhbHVlXG4gIHNhZmVTcmNbaW5kZXhdID0gc2FmZVxuICByZVtpbmRleF0gPSBuZXcgUmVnRXhwKHZhbHVlLCBpc0dsb2JhbCA/ICdnJyA6IHVuZGVmaW5lZClcbiAgc2FmZVJlW2luZGV4XSA9IG5ldyBSZWdFeHAoc2FmZSwgaXNHbG9iYWwgPyAnZycgOiB1bmRlZmluZWQpXG59XG5cbi8vIFRoZSBmb2xsb3dpbmcgUmVndWxhciBFeHByZXNzaW9ucyBjYW4gYmUgdXNlZCBmb3IgdG9rZW5pemluZyxcbi8vIHZhbGlkYXRpbmcsIGFuZCBwYXJzaW5nIFNlbVZlciB2ZXJzaW9uIHN0cmluZ3MuXG5cbi8vICMjIE51bWVyaWMgSWRlbnRpZmllclxuLy8gQSBzaW5nbGUgYDBgLCBvciBhIG5vbi16ZXJvIGRpZ2l0IGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBkaWdpdHMuXG5cbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUicsICcwfFsxLTldXFxcXGQqJylcbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUkxPT1NFJywgJ1xcXFxkKycpXG5cbi8vICMjIE5vbi1udW1lcmljIElkZW50aWZpZXJcbi8vIFplcm8gb3IgbW9yZSBkaWdpdHMsIGZvbGxvd2VkIGJ5IGEgbGV0dGVyIG9yIGh5cGhlbiwgYW5kIHRoZW4gemVybyBvclxuLy8gbW9yZSBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMuXG5cbmNyZWF0ZVRva2VuKCdOT05OVU1FUklDSURFTlRJRklFUicsIGBcXFxcZCpbYS16QS1aLV0ke0xFVFRFUkRBU0hOVU1CRVJ9KmApXG5cbi8vICMjIE1haW4gVmVyc2lvblxuLy8gVGhyZWUgZG90LXNlcGFyYXRlZCBudW1lcmljIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignTUFJTlZFUlNJT04nLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuY3JlYXRlVG9rZW4oJ01BSU5WRVJTSU9OTE9PU0UnLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb24gSWRlbnRpZmllclxuLy8gQSBudW1lcmljIGlkZW50aWZpZXIsIG9yIGEgbm9uLW51bWVyaWMgaWRlbnRpZmllci5cbi8vIE5vbi1udW1lcmljIGlkZW50aWZpZXJzIGluY2x1ZGUgbnVtZXJpYyBpZGVudGlmaWVycyBidXQgY2FuIGJlIGxvbmdlci5cbi8vIFRoZXJlZm9yZSBub24tbnVtZXJpYyBpZGVudGlmaWVycyBtdXN0IGdvIGZpcnN0LlxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUlERU5USUZJRVInLCBgKD86JHtzcmNbdC5OT05OVU1FUklDSURFTlRJRklFUl1cbn18JHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KWApXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFJywgYCg/OiR7c3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdXG59fCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb25cbi8vIEh5cGhlbiwgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgZG90LXNlcGFyYXRlZCBwcmUtcmVsZWFzZSB2ZXJzaW9uXG4vLyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0UnLCBgKD86LSgke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSXVxufSg/OlxcXFwuJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUl19KSopKWApXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFTE9PU0UnLCBgKD86LT8oJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXVxufSg/OlxcXFwuJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXX0pKikpYClcblxuLy8gIyMgQnVpbGQgTWV0YWRhdGEgSWRlbnRpZmllclxuLy8gQW55IGNvbWJpbmF0aW9uIG9mIGRpZ2l0cywgbGV0dGVycywgb3IgaHlwaGVucy5cblxuY3JlYXRlVG9rZW4oJ0JVSUxESURFTlRJRklFUicsIGAke0xFVFRFUkRBU0hOVU1CRVJ9K2ApXG5cbi8vICMjIEJ1aWxkIE1ldGFkYXRhXG4vLyBQbHVzIHNpZ24sIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHBlcmlvZC1zZXBhcmF0ZWQgYnVpbGQgbWV0YWRhdGFcbi8vIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignQlVJTEQnLCBgKD86XFxcXCsoJHtzcmNbdC5CVUlMRElERU5USUZJRVJdXG59KD86XFxcXC4ke3NyY1t0LkJVSUxESURFTlRJRklFUl19KSopKWApXG5cbi8vICMjIEZ1bGwgVmVyc2lvbiBTdHJpbmdcbi8vIEEgbWFpbiB2ZXJzaW9uLCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiBhbmRcbi8vIGJ1aWxkIG1ldGFkYXRhLlxuXG4vLyBOb3RlIHRoYXQgdGhlIG9ubHkgbWFqb3IsIG1pbm9yLCBwYXRjaCwgYW5kIHByZS1yZWxlYXNlIHNlY3Rpb25zIG9mXG4vLyB0aGUgdmVyc2lvbiBzdHJpbmcgYXJlIGNhcHR1cmluZyBncm91cHMuICBUaGUgYnVpbGQgbWV0YWRhdGEgaXMgbm90IGFcbi8vIGNhcHR1cmluZyBncm91cCwgYmVjYXVzZSBpdCBzaG91bGQgbm90IGV2ZXIgYmUgdXNlZCBpbiB2ZXJzaW9uXG4vLyBjb21wYXJpc29uLlxuXG5jcmVhdGVUb2tlbignRlVMTFBMQUlOJywgYHY/JHtzcmNbdC5NQUlOVkVSU0lPTl1cbn0ke3NyY1t0LlBSRVJFTEVBU0VdfT8ke1xuICBzcmNbdC5CVUlMRF19P2ApXG5cbmNyZWF0ZVRva2VuKCdGVUxMJywgYF4ke3NyY1t0LkZVTExQTEFJTl19JGApXG5cbi8vIGxpa2UgZnVsbCwgYnV0IGFsbG93cyB2MS4yLjMgYW5kID0xLjIuMywgd2hpY2ggcGVvcGxlIGRvIHNvbWV0aW1lcy5cbi8vIGFsc28sIDEuMC4wYWxwaGExIChwcmVyZWxlYXNlIHdpdGhvdXQgdGhlIGh5cGhlbikgd2hpY2ggaXMgcHJldHR5XG4vLyBjb21tb24gaW4gdGhlIG5wbSByZWdpc3RyeS5cbmNyZWF0ZVRva2VuKCdMT09TRVBMQUlOJywgYFt2PVxcXFxzXSoke3NyY1t0Lk1BSU5WRVJTSU9OTE9PU0VdXG59JHtzcmNbdC5QUkVSRUxFQVNFTE9PU0VdfT8ke1xuICBzcmNbdC5CVUlMRF19P2ApXG5cbmNyZWF0ZVRva2VuKCdMT09TRScsIGBeJHtzcmNbdC5MT09TRVBMQUlOXX0kYClcblxuY3JlYXRlVG9rZW4oJ0dUTFQnLCAnKCg/Ojx8Pik/PT8pJylcblxuLy8gU29tZXRoaW5nIGxpa2UgXCIyLipcIiBvciBcIjEuMi54XCIuXG4vLyBOb3RlIHRoYXQgXCJ4LnhcIiBpcyBhIHZhbGlkIHhSYW5nZSBpZGVudGlmaWVyLCBtZWFuaW5nIFwiYW55IHZlcnNpb25cIlxuLy8gT25seSB0aGUgZmlyc3QgaXRlbSBpcyBzdHJpY3RseSByZXF1aXJlZC5cbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSTE9PU0UnLCBgJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX18eHxYfFxcXFwqYClcbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfXx4fFh8XFxcXCpgKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU4nLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/JHtcbiAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU5MT09TRScsIGBbdj1cXFxcc10qKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKT8pP2ApXG5cbmNyZWF0ZVRva2VuKCdYUkFOR0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignWFJBTkdFTE9PU0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ29lcmNpb24uXG4vLyBFeHRyYWN0IGFueXRoaW5nIHRoYXQgY291bGQgY29uY2VpdmFibHkgYmUgYSBwYXJ0IG9mIGEgdmFsaWQgc2VtdmVyXG5jcmVhdGVUb2tlbignQ09FUkNFUExBSU4nLCBgJHsnKF58W15cXFxcZF0pJyArXG4gICAgICAgICAgICAgICcoXFxcXGR7MSwnfSR7TUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSH19KWAgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2AgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2ApXG5jcmVhdGVUb2tlbignQ09FUkNFJywgYCR7c3JjW3QuQ09FUkNFUExBSU5dfSg/OiR8W15cXFxcZF0pYClcbmNyZWF0ZVRva2VuKCdDT0VSQ0VGVUxMJywgc3JjW3QuQ09FUkNFUExBSU5dICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRV19KT9gICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuQlVJTERdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMJywgc3JjW3QuQ09FUkNFXSwgdHJ1ZSlcbmNyZWF0ZVRva2VuKCdDT0VSQ0VSVExGVUxMJywgc3JjW3QuQ09FUkNFRlVMTF0sIHRydWUpXG5cbi8vIFRpbGRlIHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJyZWFzb25hYmx5IGF0IG9yIGdyZWF0ZXIgdGhhblwiXG5jcmVhdGVUb2tlbignTE9ORVRJTERFJywgJyg/On4+PyknKVxuXG5jcmVhdGVUb2tlbignVElMREVUUklNJywgYChcXFxccyopJHtzcmNbdC5MT05FVElMREVdfVxcXFxzK2AsIHRydWUpXG5leHBvcnRzLnRpbGRlVHJpbVJlcGxhY2UgPSAnJDF+J1xuXG5jcmVhdGVUb2tlbignVElMREUnLCBgXiR7c3JjW3QuTE9ORVRJTERFXX0ke3NyY1t0LlhSQU5HRVBMQUlOXX0kYClcbmNyZWF0ZVRva2VuKCdUSUxERUxPT1NFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ2FyZXQgcmFuZ2VzLlxuLy8gTWVhbmluZyBpcyBcImF0IGxlYXN0IGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoXCJcbmNyZWF0ZVRva2VuKCdMT05FQ0FSRVQnLCAnKD86XFxcXF4pJylcblxuY3JlYXRlVG9rZW4oJ0NBUkVUVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORUNBUkVUXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy5jYXJldFRyaW1SZXBsYWNlID0gJyQxXidcblxuY3JlYXRlVG9rZW4oJ0NBUkVUJywgYF4ke3NyY1t0LkxPTkVDQVJFVF19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignQ0FSRVRMT09TRScsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIEEgc2ltcGxlIGd0L2x0L2VxIHRoaW5nLCBvciBqdXN0IFwiXCIgdG8gaW5kaWNhdGUgXCJhbnkgdmVyc2lvblwiXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUkxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfSkkfF4kYClcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkZVTExQTEFJTl19KSR8XiRgKVxuXG4vLyBBbiBleHByZXNzaW9uIHRvIHN0cmlwIGFueSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIGd0bHQgYW5kIHRoZSB0aGluZ1xuLy8gaXQgbW9kaWZpZXMsIHNvIHRoYXQgYD4gMS4yLjNgID09PiBgPjEuMi4zYFxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JUUklNJywgYChcXFxccyopJHtzcmNbdC5HVExUXVxufVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfXwke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCwgdHJ1ZSlcbmV4cG9ydHMuY29tcGFyYXRvclRyaW1SZXBsYWNlID0gJyQxJDIkMydcblxuLy8gU29tZXRoaW5nIGxpa2UgYDEuMi4zIC0gMS4yLjRgXG4vLyBOb3RlIHRoYXQgdGhlc2UgYWxsIHVzZSB0aGUgbG9vc2UgZm9ybSwgYmVjYXVzZSB0aGV5J2xsIGJlXG4vLyBjaGVja2VkIGFnYWluc3QgZWl0aGVyIHRoZSBzdHJpY3Qgb3IgbG9vc2UgY29tcGFyYXRvciBmb3JtXG4vLyBsYXRlci5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRScsIGBeXFxcXHMqKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5YUkFOR0VQTEFJTl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuY3JlYXRlVG9rZW4oJ0hZUEhFTlJBTkdFTE9PU0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccystXFxcXHMrYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFxcXFxzKiRgKVxuXG4vLyBTdGFyIHJhbmdlcyBiYXNpY2FsbHkganVzdCBhbGxvdyBhbnl0aGluZyBhdCBhbGwuXG5jcmVhdGVUb2tlbignU1RBUicsICcoPHw+KT89P1xcXFxzKlxcXFwqJylcbi8vID49MC4wLjAgaXMgbGlrZSBhIHN0YXJcbmNyZWF0ZVRva2VuKCdHVEUwJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjBcXFxccyokJylcbmNyZWF0ZVRva2VuKCdHVEUwUFJFJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjAtMFxcXFxzKiQnKVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBwYXJzZSBvdXQganVzdCB0aGUgb3B0aW9ucyB3ZSBjYXJlIGFib3V0XG5jb25zdCBsb29zZU9wdGlvbiA9IE9iamVjdC5mcmVlemUoeyBsb29zZTogdHJ1ZSB9KVxuY29uc3QgZW1wdHlPcHRzID0gT2JqZWN0LmZyZWV6ZSh7IH0pXG5jb25zdCBwYXJzZU9wdGlvbnMgPSBvcHRpb25zID0+IHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuIGVtcHR5T3B0c1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBsb29zZU9wdGlvblxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VPcHRpb25zXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG51bWVyaWMgPSAvXlswLTldKyQvXG5jb25zdCBjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4ge1xuICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhID09PSBiID8gMCA6IGEgPCBiID8gLTEgOiAxXG4gIH1cblxuICBjb25zdCBhbnVtID0gbnVtZXJpYy50ZXN0KGEpXG4gIGNvbnN0IGJudW0gPSBudW1lcmljLnRlc3QoYilcblxuICBpZiAoYW51bSAmJiBibnVtKSB7XG4gICAgYSA9ICthXG4gICAgYiA9ICtiXG4gIH1cblxuICByZXR1cm4gYSA9PT0gYiA/IDBcbiAgICA6IChhbnVtICYmICFibnVtKSA/IC0xXG4gICAgOiAoYm51bSAmJiAhYW51bSkgPyAxXG4gICAgOiBhIDwgYiA/IC0xXG4gICAgOiAxXG59XG5cbmNvbnN0IHJjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4gY29tcGFyZUlkZW50aWZpZXJzKGIsIGEpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgeyBNQVhfTEVOR1RILCBNQVhfU0FGRV9JTlRFR0VSIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBjb21wYXJlSWRlbnRpZmllcnMgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2lkZW50aWZpZXJzJylcblxuY29uc3QgaXNQcmVyZWxlYXNlSWRlbnRpZmllciA9IChwcmVyZWxlYXNlLCBpZGVudGlmaWVyKSA9PiB7XG4gIGNvbnN0IGlkZW50aWZpZXJzID0gaWRlbnRpZmllci5zcGxpdCgnLicpXG4gIGlmIChpZGVudGlmaWVycy5sZW5ndGggPiBwcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjb21wYXJlSWRlbnRpZmllcnMocHJlcmVsZWFzZVtpXSwgaWRlbnRpZmllcnNbaV0pICE9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5jbGFzcyBTZW1WZXIge1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgICBpZiAodmVyc2lvbi5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlICYmXG4gICAgICAgIHZlcnNpb24uaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgICByZXR1cm4gdmVyc2lvblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24udmVyc2lvblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHZlcnNpb24uIE11c3QgYmUgYSBzdHJpbmcuIEdvdCB0eXBlIFwiJHt0eXBlb2YgdmVyc2lvbn1cIi5gKVxuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uLmxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGB2ZXJzaW9uIGlzIGxvbmdlciB0aGFuICR7TUFYX0xFTkdUSH0gY2hhcmFjdGVyc2BcbiAgICAgIClcbiAgICB9XG5cbiAgICBkZWJ1ZygnU2VtVmVyJywgdmVyc2lvbiwgb3B0aW9ucylcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5sb29zZSA9ICEhb3B0aW9ucy5sb29zZVxuICAgIC8vIHRoaXMgaXNuJ3QgYWN0dWFsbHkgcmVsZXZhbnQgZm9yIHZlcnNpb25zLCBidXQga2VlcCBpdCBzbyB0aGF0IHdlXG4gICAgLy8gZG9uJ3QgcnVuIGludG8gdHJvdWJsZSBwYXNzaW5nIHRoaXMub3B0aW9ucyBhcm91bmQuXG4gICAgdGhpcy5pbmNsdWRlUHJlcmVsZWFzZSA9ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuXG4gICAgY29uc3QgbSA9IHZlcnNpb24udHJpbSgpLm1hdGNoKG9wdGlvbnMubG9vc2UgPyByZVt0LkxPT1NFXSA6IHJlW3QuRlVMTF0pXG5cbiAgICBpZiAoIW0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgVmVyc2lvbjogJHt2ZXJzaW9ufWApXG4gICAgfVxuXG4gICAgdGhpcy5yYXcgPSB2ZXJzaW9uXG5cbiAgICAvLyB0aGVzZSBhcmUgYWN0dWFsbHkgbnVtYmVyc1xuICAgIHRoaXMubWFqb3IgPSArbVsxXVxuICAgIHRoaXMubWlub3IgPSArbVsyXVxuICAgIHRoaXMucGF0Y2ggPSArbVszXVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMubWFqb3IgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG1ham9yIHZlcnNpb24nKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1pbm9yID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLm1pbm9yIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBtaW5vciB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXRjaCA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5wYXRjaCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcGF0Y2ggdmVyc2lvbicpXG4gICAgfVxuXG4gICAgLy8gbnVtYmVyaWZ5IGFueSBwcmVyZWxlYXNlIG51bWVyaWMgaWRzXG4gICAgaWYgKCFtWzRdKSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBtWzRdLnNwbGl0KCcuJykubWFwKChpZCkgPT4ge1xuICAgICAgICBpZiAoL15bMC05XSskLy50ZXN0KGlkKSkge1xuICAgICAgICAgIGNvbnN0IG51bSA9ICtpZFxuICAgICAgICAgIGlmIChudW0gPj0gMCAmJiBudW0gPCBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkID0gbVs1XSA/IG1bNV0uc3BsaXQoJy4nKSA6IFtdXG4gICAgdGhpcy5mb3JtYXQoKVxuICB9XG5cbiAgZm9ybWF0ICgpIHtcbiAgICB0aGlzLnZlcnNpb24gPSBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5wYXRjaH1gXG4gICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbiArPSBgLSR7dGhpcy5wcmVyZWxlYXNlLmpvaW4oJy4nKX1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZlcnNpb25cbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uXG4gIH1cblxuICBjb21wYXJlIChvdGhlcikge1xuICAgIGRlYnVnKCdTZW1WZXIuY29tcGFyZScsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zLCBvdGhlcilcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3RoZXIgPT09ICdzdHJpbmcnICYmIG90aGVyID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZU1haW4ob3RoZXIpIHx8IHRoaXMuY29tcGFyZVByZShvdGhlcilcbiAgfVxuXG4gIGNvbXBhcmVNYWluIChvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPCBvdGhlci5tYWpvcikge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGlmICh0aGlzLm1ham9yID4gb3RoZXIubWFqb3IpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICAgIGlmICh0aGlzLm1pbm9yIDwgb3RoZXIubWlub3IpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICBpZiAodGhpcy5taW5vciA+IG90aGVyLm1pbm9yKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICBpZiAodGhpcy5wYXRjaCA8IG90aGVyLnBhdGNoKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgaWYgKHRoaXMucGF0Y2ggPiBvdGhlci5wYXRjaCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGNvbXBhcmVQcmUgKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBOT1QgaGF2aW5nIGEgcHJlcmVsZWFzZSBpcyA+IGhhdmluZyBvbmVcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGggJiYgb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMucHJlcmVsZWFzZVtpXVxuICAgICAgY29uc3QgYiA9IG90aGVyLnByZXJlbGVhc2VbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIGNvbXBhcmVCdWlsZCAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGxldCBpID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmJ1aWxkW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIuYnVpbGRbaV1cbiAgICAgIGRlYnVnKCdidWlsZCBjb21wYXJlJywgaSwgYSwgYilcbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQgJiYgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9IGVsc2UgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfSBlbHNlIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlSWRlbnRpZmllcnMoYSwgYilcbiAgICAgIH1cbiAgICB9IHdoaWxlICgrK2kpXG4gIH1cblxuICAvLyBwcmVtaW5vciB3aWxsIGJ1bXAgdGhlIHZlcnNpb24gdXAgdG8gdGhlIG5leHQgbWlub3IgcmVsZWFzZSwgYW5kIGltbWVkaWF0ZWx5XG4gIC8vIGRvd24gdG8gcHJlLXJlbGVhc2UuIHByZW1ham9yIGFuZCBwcmVwYXRjaCB3b3JrIHRoZSBzYW1lIHdheS5cbiAgaW5jIChyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkge1xuICAgIGlmIChyZWxlYXNlLnN0YXJ0c1dpdGgoJ3ByZScpKSB7XG4gICAgICBpZiAoIWlkZW50aWZpZXIgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgaXMgZW1wdHknKVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgYW4gaW52YWxpZCBzZW12ZXIgcmVzdWx0c1xuICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBgLSR7aWRlbnRpZmllcn1gLm1hdGNoKHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuUFJFUkVMRUFTRUxPT1NFXSA6IHJlW3QuUFJFUkVMRUFTRV0pXG4gICAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gIT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaWRlbnRpZmllcjogJHtpZGVudGlmaWVyfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlbGVhc2UpIHtcbiAgICAgIGNhc2UgJ3ByZW1ham9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZW1pbm9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZXBhdGNoJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbHJlYWR5IGEgcHJlcmVsZWFzZSwgaXQgd2lsbCBidW1wIHRvIHRoZSBuZXh0IHZlcnNpb25cbiAgICAgICAgLy8gZHJvcCBhbnkgcHJlcmVsZWFzZXMgdGhhdCBtaWdodCBhbHJlYWR5IGV4aXN0LCBzaW5jZSB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gcmVsZXZhbnQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBhIG5vbi1wcmVyZWxlYXNlIHZlcnNpb24sIHRoaXMgYWN0cyB0aGUgc2FtZSBhc1xuICAgICAgLy8gcHJlcGF0Y2guXG4gICAgICBjYXNlICdwcmVyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmluYygncGF0Y2gnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZlcnNpb24gJHt0aGlzLnJhd30gaXMgbm90IGEgcHJlcmVsZWFzZWApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbWFqb3InOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlLW1ham9yIHZlcnNpb24sIGJ1bXAgdXAgdG8gdGhlIHNhbWUgbWFqb3IgdmVyc2lvbi5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGluY3JlbWVudCBtYWpvci5cbiAgICAgICAgLy8gMS4wLjAtNSBidW1wcyB0byAxLjAuMFxuICAgICAgICAvLyAxLjEuMCBidW1wcyB0byAyLjAuMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5taW5vciAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucGF0Y2ggIT09IDAgfHxcbiAgICAgICAgICB0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdtaW5vcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWlub3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtaW5vciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1pbm9yLlxuICAgICAgICAvLyAxLjIuMC01IGJ1bXBzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4xIGJ1bXBzIHRvIDEuMy4wXG4gICAgICAgIGlmICh0aGlzLnBhdGNoICE9PSAwIHx8IHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLm1pbm9yKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdGNoID0gMFxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncGF0Y2gnOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIHByZS1yZWxlYXNlIHZlcnNpb24sIGl0IHdpbGwgaW5jcmVtZW50IHRoZSBwYXRjaC5cbiAgICAgICAgLy8gSWYgaXQgaXMgYSBwcmUtcmVsZWFzZSBpdCB3aWxsIGJ1bXAgdXAgdG8gdGhlIHNhbWUgcGF0Y2ggdmVyc2lvbi5cbiAgICAgICAgLy8gMS4yLjAtNSBwYXRjaGVzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4wIHBhdGNoZXMgdG8gMS4yLjFcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnBhdGNoKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgLy8gVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdXNlZCBwdWJsaWNseS5cbiAgICAgIC8vIDEuMC4wICdwcmUnIHdvdWxkIGJlY29tZSAxLjAuMC0wIHdoaWNoIGlzIHRoZSB3cm9uZyBkaXJlY3Rpb24uXG4gICAgICBjYXNlICdwcmUnOiB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBOdW1iZXIoaWRlbnRpZmllckJhc2UpID8gMSA6IDBcblxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtiYXNlXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBpID0gdGhpcy5wcmVyZWxlYXNlLmxlbmd0aFxuICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXJlbGVhc2VbaV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZVtpXSsrXG4gICAgICAgICAgICAgIGkgPSAtMlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIGRpZG4ndCBpbmNyZW1lbnQgYW55dGhpbmdcbiAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09PSB0aGlzLnByZXJlbGVhc2Uuam9pbignLicpICYmIGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGFscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5wdXNoKGJhc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgLy8gMS4yLjAtYmV0YS4xIGJ1bXBzIHRvIDEuMi4wLWJldGEuMixcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLmZvb2JseiBvciAxLjIuMC1iZXRhIGJ1bXBzIHRvIDEuMi4wLWJldGEuMFxuICAgICAgICAgIGxldCBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXIsIGJhc2VdXG4gICAgICAgICAgaWYgKGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcHJlcmVsZWFzZSA9IFtpZGVudGlmaWVyXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNQcmVyZWxlYXNlSWRlbnRpZmllcih0aGlzLnByZXJlbGVhc2UsIGlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVyZWxlYXNlQmFzZSA9IHRoaXMucHJlcmVsZWFzZVtpZGVudGlmaWVyLnNwbGl0KCcuJykubGVuZ3RoXVxuICAgICAgICAgICAgaWYgKGlzTmFOKHByZXJlbGVhc2VCYXNlKSkge1xuICAgICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IHByZXJlbGVhc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6ICR7cmVsZWFzZX1gKVxuICAgIH1cbiAgICB0aGlzLnJhdyA9IHRoaXMuZm9ybWF0KClcbiAgICBpZiAodGhpcy5idWlsZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmF3ICs9IGArJHt0aGlzLmJ1aWxkLmpvaW4oJy4nKX1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZW1WZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSAodmVyc2lvbiwgb3B0aW9ucywgdGhyb3dFcnJvcnMgPSBmYWxzZSkgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmICghdGhyb3dFcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHRocm93IGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgdmFsaWQgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB2ID0gcGFyc2UodmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIHYgPyB2LnZlcnNpb24gOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHZhbGlkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCBjbGVhbiA9ICh2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHMgPSBwYXJzZSh2ZXJzaW9uLnRyaW0oKS5yZXBsYWNlKC9eWz12XSsvLCAnJyksIG9wdGlvbnMpXG4gIHJldHVybiBzID8gcy52ZXJzaW9uIDogbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBjbGVhblxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IGluYyA9ICh2ZXJzaW9uLCByZWxlYXNlLCBvcHRpb25zLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkgPT4ge1xuICBpZiAodHlwZW9mIChvcHRpb25zKSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZGVudGlmaWVyQmFzZSA9IGlkZW50aWZpZXJcbiAgICBpZGVudGlmaWVyID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWRcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBTZW1WZXIoXG4gICAgICB2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyID8gdmVyc2lvbi52ZXJzaW9uIDogdmVyc2lvbixcbiAgICAgIG9wdGlvbnNcbiAgICApLmluYyhyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkudmVyc2lvblxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gaW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZS5qcycpXG5cbmNvbnN0IGRpZmYgPSAodmVyc2lvbjEsIHZlcnNpb24yKSA9PiB7XG4gIGNvbnN0IHYxID0gcGFyc2UodmVyc2lvbjEsIG51bGwsIHRydWUpXG4gIGNvbnN0IHYyID0gcGFyc2UodmVyc2lvbjIsIG51bGwsIHRydWUpXG4gIGNvbnN0IGNvbXBhcmlzb24gPSB2MS5jb21wYXJlKHYyKVxuXG4gIGlmIChjb21wYXJpc29uID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHYxSGlnaGVyID0gY29tcGFyaXNvbiA+IDBcbiAgY29uc3QgaGlnaFZlcnNpb24gPSB2MUhpZ2hlciA/IHYxIDogdjJcbiAgY29uc3QgbG93VmVyc2lvbiA9IHYxSGlnaGVyID8gdjIgOiB2MVxuICBjb25zdCBoaWdoSGFzUHJlID0gISFoaWdoVmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aFxuICBjb25zdCBsb3dIYXNQcmUgPSAhIWxvd1ZlcnNpb24ucHJlcmVsZWFzZS5sZW5ndGhcblxuICBpZiAobG93SGFzUHJlICYmICFoaWdoSGFzUHJlKSB7XG4gICAgLy8gR29pbmcgZnJvbSBwcmVyZWxlYXNlIC0+IG5vIHByZXJlbGVhc2UgcmVxdWlyZXMgc29tZSBzcGVjaWFsIGNhc2luZ1xuXG4gICAgLy8gSWYgdGhlIGxvdyB2ZXJzaW9uIGhhcyBvbmx5IGEgbWFqb3IsIHRoZW4gaXQgd2lsbCBhbHdheXMgYmUgYSBtYWpvclxuICAgIC8vIFNvbWUgZXhhbXBsZXM6XG4gICAgLy8gMS4wLjAtMSAtPiAxLjAuMFxuICAgIC8vIDEuMC4wLTEgLT4gMS4xLjFcbiAgICAvLyAxLjAuMC0xIC0+IDIuMC4wXG4gICAgaWYgKCFsb3dWZXJzaW9uLnBhdGNoICYmICFsb3dWZXJzaW9uLm1pbm9yKSB7XG4gICAgICByZXR1cm4gJ21ham9yJ1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBtYWluIHBhcnQgaGFzIG5vIGRpZmZlcmVuY2VcbiAgICBpZiAobG93VmVyc2lvbi5jb21wYXJlTWFpbihoaWdoVmVyc2lvbikgPT09IDApIHtcbiAgICAgIGlmIChsb3dWZXJzaW9uLm1pbm9yICYmICFsb3dWZXJzaW9uLnBhdGNoKSB7XG4gICAgICAgIHJldHVybiAnbWlub3InXG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BhdGNoJ1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCB0aGUgYHByZWAgcHJlZml4IGlmIHdlIGFyZSBnb2luZyB0byBhIHByZXJlbGVhc2UgdmVyc2lvblxuICBjb25zdCBwcmVmaXggPSBoaWdoSGFzUHJlID8gJ3ByZScgOiAnJ1xuXG4gIGlmICh2MS5tYWpvciAhPT0gdjIubWFqb3IpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ21ham9yJ1xuICB9XG5cbiAgaWYgKHYxLm1pbm9yICE9PSB2Mi5taW5vcikge1xuICAgIHJldHVybiBwcmVmaXggKyAnbWlub3InXG4gIH1cblxuICBpZiAodjEucGF0Y2ggIT09IHYyLnBhdGNoKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdwYXRjaCdcbiAgfVxuXG4gIC8vIGhpZ2ggYW5kIGxvdyBhcmUgcHJlcmVsZWFzZXNcbiAgcmV0dXJuICdwcmVyZWxlYXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgbWFqb3IgPSAoYSwgbG9vc2UpID0+IG5ldyBTZW1WZXIoYSwgbG9vc2UpLm1ham9yXG5tb2R1bGUuZXhwb3J0cyA9IG1ham9yXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IG1pbm9yID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5taW5vclxubW9kdWxlLmV4cG9ydHMgPSBtaW5vclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBwYXRjaCA9IChhLCBsb29zZSkgPT4gbmV3IFNlbVZlcihhLCBsb29zZSkucGF0Y2hcbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHByZXJlbGVhc2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZSh2ZXJzaW9uLCBvcHRpb25zKVxuICByZXR1cm4gKHBhcnNlZCAmJiBwYXJzZWQucHJlcmVsZWFzZS5sZW5ndGgpID8gcGFyc2VkLnByZXJlbGVhc2UgOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHByZXJlbGVhc2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT5cbiAgbmV3IFNlbVZlcihhLCBsb29zZSkuY29tcGFyZShuZXcgU2VtVmVyKGIsIGxvb3NlKSlcblxubW9kdWxlLmV4cG9ydHMgPSBjb21wYXJlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgcmNvbXBhcmUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYiwgYSwgbG9vc2UpXG5tb2R1bGUuZXhwb3J0cyA9IHJjb21wYXJlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgY29tcGFyZUxvb3NlID0gKGEsIGIpID0+IGNvbXBhcmUoYSwgYiwgdHJ1ZSlcbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUxvb3NlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IGNvbXBhcmVCdWlsZCA9IChhLCBiLCBsb29zZSkgPT4ge1xuICBjb25zdCB2ZXJzaW9uQSA9IG5ldyBTZW1WZXIoYSwgbG9vc2UpXG4gIGNvbnN0IHZlcnNpb25CID0gbmV3IFNlbVZlcihiLCBsb29zZSlcbiAgcmV0dXJuIHZlcnNpb25BLmNvbXBhcmUodmVyc2lvbkIpIHx8IHZlcnNpb25BLmNvbXBhcmVCdWlsZCh2ZXJzaW9uQilcbn1cbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUJ1aWxkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmVCdWlsZCA9IHJlcXVpcmUoJy4vY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChhLCBiLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHJzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChiLCBhLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHJzb3J0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3QgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID4gMFxubW9kdWxlLmV4cG9ydHMgPSBndFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGx0ID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA8IDBcbm1vZHVsZS5leHBvcnRzID0gbHRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBlcSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPT09IDBcbm1vZHVsZS5leHBvcnRzID0gZXFcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBuZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpICE9PSAwXG5tb2R1bGUuZXhwb3J0cyA9IG5lcVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGd0ZSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPj0gMFxubW9kdWxlLmV4cG9ydHMgPSBndGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBsdGUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpIDw9IDBcbm1vZHVsZS5leHBvcnRzID0gbHRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGVxID0gcmVxdWlyZSgnLi9lcScpXG5jb25zdCBuZXEgPSByZXF1aXJlKCcuL25lcScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4vZ3QnKVxuY29uc3QgZ3RlID0gcmVxdWlyZSgnLi9ndGUnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2x0JylcbmNvbnN0IGx0ZSA9IHJlcXVpcmUoJy4vbHRlJylcblxuY29uc3QgY21wID0gKGEsIG9wLCBiLCBsb29zZSkgPT4ge1xuICBzd2l0Y2ggKG9wKSB7XG4gICAgY2FzZSAnPT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSA9PT0gYlxuXG4gICAgY2FzZSAnIT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSAhPT0gYlxuXG4gICAgY2FzZSAnJzpcbiAgICBjYXNlICc9JzpcbiAgICBjYXNlICc9PSc6XG4gICAgICByZXR1cm4gZXEoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICchPSc6XG4gICAgICByZXR1cm4gbmVxKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPic6XG4gICAgICByZXR1cm4gZ3QoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc+PSc6XG4gICAgICByZXR1cm4gZ3RlKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPCc6XG4gICAgICByZXR1cm4gbHQoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc8PSc6XG4gICAgICByZXR1cm4gbHRlKGEsIGIsIGxvb3NlKVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgb3BlcmF0b3I6ICR7b3B9YClcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBjbXBcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuXG5jb25zdCBjb2VyY2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInKSB7XG4gICAgdmVyc2lvbiA9IFN0cmluZyh2ZXJzaW9uKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGxldCBtYXRjaCA9IG51bGxcbiAgaWYgKCFvcHRpb25zLnJ0bCkge1xuICAgIG1hdGNoID0gdmVyc2lvbi5tYXRjaChvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VGVUxMXSA6IHJlW3QuQ09FUkNFXSlcbiAgfSBlbHNlIHtcbiAgICAvLyBGaW5kIHRoZSByaWdodC1tb3N0IGNvZXJjaWJsZSBzdHJpbmcgdGhhdCBkb2VzIG5vdCBzaGFyZVxuICAgIC8vIGEgdGVybWludXMgd2l0aCBhIG1vcmUgbGVmdC13YXJkIGNvZXJjaWJsZSBzdHJpbmcuXG4gICAgLy8gRWcsICcxLjIuMy40JyB3YW50cyB0byBjb2VyY2UgJzIuMy40Jywgbm90ICczLjQnIG9yICc0J1xuICAgIC8vIFdpdGggaW5jbHVkZVByZXJlbGVhc2Ugb3B0aW9uIHNldCwgJzEuMi4zLjQtcmMnIHdhbnRzIHRvIGNvZXJjZSAnMi4zLjQtcmMnLCBub3QgJzIuMy40J1xuICAgIC8vXG4gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzdHJpbmcgY2hlY2tpbmcgd2l0aCBhIC9nIHJlZ2V4cFxuICAgIC8vIE1hbnVhbGx5IHNldCB0aGUgaW5kZXggc28gYXMgdG8gcGljayB1cCBvdmVybGFwcGluZyBtYXRjaGVzLlxuICAgIC8vIFN0b3Agd2hlbiB3ZSBnZXQgYSBtYXRjaCB0aGF0IGVuZHMgYXQgdGhlIHN0cmluZyBlbmQsIHNpbmNlIG5vXG4gICAgLy8gY29lcmNpYmxlIHN0cmluZyBjYW4gYmUgbW9yZSByaWdodC13YXJkIHdpdGhvdXQgdGhlIHNhbWUgdGVybWludXMuXG4gICAgY29uc3QgY29lcmNlUnRsUmVnZXggPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VSVExGVUxMXSA6IHJlW3QuQ09FUkNFUlRMXVxuICAgIGxldCBuZXh0XG4gICAgd2hpbGUgKChuZXh0ID0gY29lcmNlUnRsUmVnZXguZXhlYyh2ZXJzaW9uKSkgJiZcbiAgICAgICAgKCFtYXRjaCB8fCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPT0gdmVyc2lvbi5sZW5ndGgpXG4gICAgKSB7XG4gICAgICBpZiAoIW1hdGNoIHx8XG4gICAgICAgICAgICBuZXh0LmluZGV4ICsgbmV4dFswXS5sZW5ndGggIT09IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSB7XG4gICAgICAgIG1hdGNoID0gbmV4dFxuICAgICAgfVxuICAgICAgY29lcmNlUnRsUmVnZXgubGFzdEluZGV4ID0gbmV4dC5pbmRleCArIG5leHRbMV0ubGVuZ3RoICsgbmV4dFsyXS5sZW5ndGhcbiAgICB9XG4gICAgLy8gbGVhdmUgaXQgaW4gYSBjbGVhbiBzdGF0ZVxuICAgIGNvZXJjZVJ0bFJlZ2V4Lmxhc3RJbmRleCA9IC0xXG4gIH1cblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbWFqb3IgPSBtYXRjaFsyXVxuICBjb25zdCBtaW5vciA9IG1hdGNoWzNdIHx8ICcwJ1xuICBjb25zdCBwYXRjaCA9IG1hdGNoWzRdIHx8ICcwJ1xuICBjb25zdCBwcmVyZWxlYXNlID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJiBtYXRjaFs1XSA/IGAtJHttYXRjaFs1XX1gIDogJydcbiAgY29uc3QgYnVpbGQgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIG1hdGNoWzZdID8gYCske21hdGNoWzZdfWAgOiAnJ1xuXG4gIHJldHVybiBwYXJzZShgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0ke3ByZXJlbGVhc2V9JHtidWlsZH1gLCBvcHRpb25zKVxufVxubW9kdWxlLmV4cG9ydHMgPSBjb2VyY2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2NvbnN0YW50cycpXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IHRydW5jYXRlID0gKHZlcnNpb24sIHRydW5jYXRpb24sIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFjb25zdGFudHMuUkVMRUFTRV9UWVBFUy5pbmNsdWRlcyh0cnVuY2F0aW9uKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBjbG9uZWRWZXJzaW9uID0gY2xvbmVJbnB1dFZlcnNpb24odmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIGNsb25lZFZlcnNpb24gJiYgZG9UcnVuY2F0aW9uKGNsb25lZFZlcnNpb24sIHRydW5jYXRpb24pXG59XG5cbmNvbnN0IGNsb25lSW5wdXRWZXJzaW9uID0gKHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgdmVyc2lvblN0cmluZ1RvUGFyc2UgPSAoXG4gICAgdmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlciA/IHZlcnNpb24udmVyc2lvbiA6IHZlcnNpb25cbiAgKVxuXG4gIHJldHVybiBwYXJzZSh2ZXJzaW9uU3RyaW5nVG9QYXJzZSwgb3B0aW9ucylcbn1cblxuY29uc3QgZG9UcnVuY2F0aW9uID0gKHZlcnNpb24sIHRydW5jYXRpb24pID0+IHtcbiAgaWYgKGlzUHJlcmVsZWFzZSh0cnVuY2F0aW9uKSkge1xuICAgIHJldHVybiB2ZXJzaW9uLnZlcnNpb25cbiAgfVxuXG4gIHZlcnNpb24ucHJlcmVsZWFzZSA9IFtdXG5cbiAgc3dpdGNoICh0cnVuY2F0aW9uKSB7XG4gICAgY2FzZSAnbWFqb3InOlxuICAgICAgdmVyc2lvbi5taW5vciA9IDBcbiAgICAgIHZlcnNpb24ucGF0Y2ggPSAwXG4gICAgICBicmVha1xuICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgIHZlcnNpb24ucGF0Y2ggPSAwXG4gICAgICBicmVha1xuICB9XG5cbiAgcmV0dXJuIHZlcnNpb24uZm9ybWF0KClcbn1cblxuY29uc3QgaXNQcmVyZWxlYXNlID0gKHR5cGUpID0+IHtcbiAgcmV0dXJuIHR5cGUuc3RhcnRzV2l0aCgncHJlJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cnVuY2F0ZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBMUlVDYWNoZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLm1heCA9IDEwMDBcbiAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKVxuICB9XG5cbiAgZ2V0IChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubWFwLmdldChrZXkpXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgbWFwIGFuZCBhZGQgaXQgdG8gdGhlIGVuZFxuICAgICAgdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgICAgIHRoaXMubWFwLnNldChrZXksIHZhbHVlKVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICB9XG5cbiAgZGVsZXRlIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgfVxuXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLmRlbGV0ZShrZXkpXG5cbiAgICBpZiAoIWRlbGV0ZWQgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgY2FjaGUgaXMgZnVsbCwgZGVsZXRlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW1cbiAgICAgIGlmICh0aGlzLm1hcC5zaXplID49IHRoaXMubWF4KSB7XG4gICAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5tYXAua2V5cygpLm5leHQoKS52YWx1ZVxuICAgICAgICB0aGlzLmRlbGV0ZShmaXJzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXAuc2V0KGtleSwgdmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExSVUNhY2hlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNQQUNFX0NIQVJBQ1RFUlMgPSAvXFxzKy9nXG5cbi8vIGhvaXN0ZWQgY2xhc3MgZm9yIGN5Y2xpYyBkZXBlbmRlbmN5XG5jbGFzcyBSYW5nZSB7XG4gIGNvbnN0cnVjdG9yIChyYW5nZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UgJiZcbiAgICAgICAgcmFuZ2UuaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZS5yYXcsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJhbmdlIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgLy8ganVzdCBwdXQgaXQgaW4gdGhlIHNldCBhbmQgcmV0dXJuXG4gICAgICB0aGlzLnJhdyA9IHJhbmdlLnZhbHVlXG4gICAgICB0aGlzLnNldCA9IFtbcmFuZ2VdXVxuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSB1bmRlZmluZWRcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICAvLyBGaXJzdCByZWR1Y2UgYWxsIHdoaXRlc3BhY2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZWx5XG4gICAgLy8gb24gcG90ZW50aWFsbHkgc2xvdyByZWdleGVzIGxpa2UgXFxzKi4gVGhpcyBpcyB0aGVuIHN0b3JlZCBhbmQgdXNlZCBmb3JcbiAgICAvLyBmdXR1cmUgZXJyb3IgbWVzc2FnZXMgYXMgd2VsbC5cbiAgICB0aGlzLnJhdyA9IHJhbmdlLnRyaW0oKS5yZXBsYWNlKFNQQUNFX0NIQVJBQ1RFUlMsICcgJylcblxuICAgIC8vIEZpcnN0LCBzcGxpdCBvbiB8fFxuICAgIHRoaXMuc2V0ID0gdGhpcy5yYXdcbiAgICAgIC5zcGxpdCgnfHwnKVxuICAgICAgLy8gbWFwIHRoZSByYW5nZSB0byBhIDJkIGFycmF5IG9mIGNvbXBhcmF0b3JzXG4gICAgICAubWFwKHIgPT4gdGhpcy5wYXJzZVJhbmdlKHIudHJpbSgpKSlcbiAgICAgIC8vIHRocm93IG91dCBhbnkgY29tcGFyYXRvciBsaXN0cyB0aGF0IGFyZSBlbXB0eVxuICAgICAgLy8gdGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCBpdCB3YXMgbm90IGEgdmFsaWQgcmFuZ2UsIHdoaWNoIGlzIGFsbG93ZWRcbiAgICAgIC8vIGluIGxvb3NlIG1vZGUsIGJ1dCB3aWxsIHN0aWxsIHRocm93IGlmIHRoZSBXSE9MRSByYW5nZSBpcyBpbnZhbGlkLlxuICAgICAgLmZpbHRlcihjID0+IGMubGVuZ3RoKVxuXG4gICAgaWYgKCF0aGlzLnNldC5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgU2VtVmVyIFJhbmdlOiAke3RoaXMucmF3fWApXG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZSBhbnkgdGhhdCBhcmUgbm90IHRoZSBudWxsIHNldCwgdGhyb3cgb3V0IG51bGwgc2V0cy5cbiAgICBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgLy8ga2VlcCB0aGUgZmlyc3Qgb25lLCBpbiBjYXNlIHRoZXkncmUgYWxsIG51bGwgc2V0c1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLnNldFswXVxuICAgICAgdGhpcy5zZXQgPSB0aGlzLnNldC5maWx0ZXIoYyA9PiAhaXNOdWxsU2V0KGNbMF0pKVxuICAgICAgaWYgKHRoaXMuc2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNldCA9IFtmaXJzdF1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlIGFueSB0aGF0IGFyZSAqLCB0aGVuIHRoZSByYW5nZSBpcyBqdXN0ICpcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgaWYgKGMubGVuZ3RoID09PSAxICYmIGlzQW55KGNbMF0pKSB7XG4gICAgICAgICAgICB0aGlzLnNldCA9IFtjXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1hdHRlZCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0IHJhbmdlICgpIHtcbiAgICBpZiAodGhpcy5mb3JtYXR0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSAnJ1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnfHwnXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSB0aGlzLnNldFtpXVxuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNvbXBzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgaWYgKGsgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnICdcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JtYXR0ZWQgKz0gY29tcHNba10udG9TdHJpbmcoKS50cmltKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWRcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZVxuICB9XG5cbiAgcGFyc2VSYW5nZSAocmFuZ2UpIHtcbiAgICAvLyBzdHJpcCBidWlsZCBtZXRhZGF0YSBzbyBpdCBjYW4ndCBibGVlZCBpbnRvIHRoZSB2ZXJzaW9uXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKEJVSUxEU1RSSVBSRSwgJycpXG5cbiAgICAvLyBtZW1vaXplIHJhbmdlIHBhcnNpbmcgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIHRoaXMgaXMgYSB2ZXJ5IGhvdCBwYXRoLCBhbmQgZnVsbHkgZGV0ZXJtaW5pc3RpYy5cbiAgICBjb25zdCBtZW1vT3B0cyA9XG4gICAgICAodGhpcy5vcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFKSB8XG4gICAgICAodGhpcy5vcHRpb25zLmxvb3NlICYmIEZMQUdfTE9PU0UpXG4gICAgY29uc3QgbWVtb0tleSA9IG1lbW9PcHRzICsgJzonICsgcmFuZ2VcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQobWVtb0tleSlcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkXG4gICAgfVxuXG4gICAgY29uc3QgbG9vc2UgPSB0aGlzLm9wdGlvbnMubG9vc2VcbiAgICAvLyBgMS4yLjMgLSAxLjIuNGAgPT4gYD49MS4yLjMgPD0xLjIuNGBcbiAgICBjb25zdCBociA9IGxvb3NlID8gcmVbdC5IWVBIRU5SQU5HRUxPT1NFXSA6IHJlW3QuSFlQSEVOUkFOR0VdXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKGhyLCBoeXBoZW5SZXBsYWNlKHRoaXMub3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkpXG4gICAgZGVidWcoJ2h5cGhlbiByZXBsYWNlJywgcmFuZ2UpXG5cbiAgICAvLyBgPiAxLjIuMyA8IDEuMi41YCA9PiBgPjEuMi4zIDwxLjIuNWBcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DT01QQVJBVE9SVFJJTV0sIGNvbXBhcmF0b3JUcmltUmVwbGFjZSlcbiAgICBkZWJ1ZygnY29tcGFyYXRvciB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgfiAxLjIuM2AgPT4gYH4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5USUxERVRSSU1dLCB0aWxkZVRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCd0aWxkZSB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgXiAxLjIuM2AgPT4gYF4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DQVJFVFRSSU1dLCBjYXJldFRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCdjYXJldCB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmFuZ2UgaXMgY29tcGxldGVseSB0cmltbWVkIGFuZFxuICAgIC8vIHJlYWR5IHRvIGJlIHNwbGl0IGludG8gY29tcGFyYXRvcnMuXG5cbiAgICBsZXQgcmFuZ2VMaXN0ID0gcmFuZ2VcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKGNvbXAgPT4gcGFyc2VDb21wYXJhdG9yKGNvbXAsIHRoaXMub3B0aW9ucykpXG4gICAgICAuam9pbignICcpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLy8gPj0wLjAuMCBpcyBlcXVpdmFsZW50IHRvICpcbiAgICAgIC5tYXAoY29tcCA9PiByZXBsYWNlR1RFMChjb21wLCB0aGlzLm9wdGlvbnMpKVxuXG4gICAgaWYgKGxvb3NlKSB7XG4gICAgICAvLyBpbiBsb29zZSBtb2RlLCB0aHJvdyBvdXQgYW55IHRoYXQgYXJlIG5vdCB2YWxpZCBjb21wYXJhdG9yc1xuICAgICAgcmFuZ2VMaXN0ID0gcmFuZ2VMaXN0LmZpbHRlcihjb21wID0+IHtcbiAgICAgICAgZGVidWcoJ2xvb3NlIGludmFsaWQgZmlsdGVyJywgY29tcCwgdGhpcy5vcHRpb25zKVxuICAgICAgICByZXR1cm4gISFjb21wLm1hdGNoKHJlW3QuQ09NUEFSQVRPUkxPT1NFXSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGRlYnVnKCdyYW5nZSBsaXN0JywgcmFuZ2VMaXN0KVxuXG4gICAgLy8gaWYgYW55IGNvbXBhcmF0b3JzIGFyZSB0aGUgbnVsbCBzZXQsIHRoZW4gcmVwbGFjZSB3aXRoIEpVU1QgbnVsbCBzZXRcbiAgICAvLyBpZiBtb3JlIHRoYW4gb25lIGNvbXBhcmF0b3IsIHJlbW92ZSBhbnkgKiBjb21wYXJhdG9yc1xuICAgIC8vIGFsc28sIGRvbid0IGluY2x1ZGUgdGhlIHNhbWUgY29tcGFyYXRvciBtb3JlIHRoYW4gb25jZVxuICAgIGNvbnN0IHJhbmdlTWFwID0gbmV3IE1hcCgpXG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZUxpc3QubWFwKGNvbXAgPT4gbmV3IENvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKSlcbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcGFyYXRvcnMpIHtcbiAgICAgIGlmIChpc051bGxTZXQoY29tcCkpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wXVxuICAgICAgfVxuICAgICAgcmFuZ2VNYXAuc2V0KGNvbXAudmFsdWUsIGNvbXApXG4gICAgfVxuICAgIGlmIChyYW5nZU1hcC5zaXplID4gMSAmJiByYW5nZU1hcC5oYXMoJycpKSB7XG4gICAgICByYW5nZU1hcC5kZWxldGUoJycpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLnJhbmdlTWFwLnZhbHVlcygpXVxuICAgIGNhY2hlLnNldChtZW1vS2V5LCByZXN1bHQpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaW50ZXJzZWN0cyAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIShyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBSYW5nZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0LnNvbWUoKHRoaXNDb21wYXJhdG9ycykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNTYXRpc2ZpYWJsZSh0aGlzQ29tcGFyYXRvcnMsIG9wdGlvbnMpICYmXG4gICAgICAgIHJhbmdlLnNldC5zb21lKChyYW5nZUNvbXBhcmF0b3JzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzU2F0aXNmaWFibGUocmFuZ2VDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgICAgIHRoaXNDb21wYXJhdG9ycy5ldmVyeSgodGhpc0NvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlQ29tcGFyYXRvcnMuZXZlcnkoKHJhbmdlQ29tcGFyYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzQ29tcGFyYXRvci5pbnRlcnNlY3RzKHJhbmdlQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG4gIH1cblxuICAvLyBpZiBBTlkgb2YgdGhlIHNldHMgbWF0Y2ggQUxMIG9mIGl0cyBjb21wYXJhdG9ycywgdGhlbiBwYXNzXG4gIHRlc3QgKHZlcnNpb24pIHtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIHRoaXMub3B0aW9ucylcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0ZXN0U2V0KHRoaXMuc2V0W2ldLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VcblxuY29uc3QgTFJVID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvbHJ1Y2FjaGUnKVxuY29uc3QgY2FjaGUgPSBuZXcgTFJVKClcblxuY29uc3QgcGFyc2VPcHRpb25zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcGFyc2Utb3B0aW9ucycpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jb21wYXJhdG9yJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3Qge1xuICBzYWZlUmU6IHJlLFxuICBzcmMsXG4gIHQsXG4gIGNvbXBhcmF0b3JUcmltUmVwbGFjZSxcbiAgdGlsZGVUcmltUmVwbGFjZSxcbiAgY2FyZXRUcmltUmVwbGFjZSxcbn0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCB7IEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFLCBGTEFHX0xPT1NFIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuXG4vLyB1bmJvdW5kZWQgZ2xvYmFsIGJ1aWxkLW1ldGFkYXRhIHN0cmlwcGVyIHVzZWQgYnkgcGFyc2VSYW5nZVxuY29uc3QgQlVJTERTVFJJUFJFID0gbmV3IFJlZ0V4cChzcmNbdC5CVUlMRF0sICdnJylcblxuY29uc3QgaXNOdWxsU2V0ID0gYyA9PiBjLnZhbHVlID09PSAnPDAuMC4wLTAnXG5jb25zdCBpc0FueSA9IGMgPT4gYy52YWx1ZSA9PT0gJydcblxuLy8gdGFrZSBhIHNldCBvZiBjb21wYXJhdG9ycyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmVcbi8vIGV4aXN0cyBhIHZlcnNpb24gd2hpY2ggY2FuIHNhdGlzZnkgaXRcbmNvbnN0IGlzU2F0aXNmaWFibGUgPSAoY29tcGFyYXRvcnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlc3VsdCA9IHRydWVcbiAgY29uc3QgcmVtYWluaW5nQ29tcGFyYXRvcnMgPSBjb21wYXJhdG9ycy5zbGljZSgpXG4gIGxldCB0ZXN0Q29tcGFyYXRvciA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLnBvcCgpXG5cbiAgd2hpbGUgKHJlc3VsdCAmJiByZW1haW5pbmdDb21wYXJhdG9ycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSByZW1haW5pbmdDb21wYXJhdG9ycy5ldmVyeSgob3RoZXJDb21wYXJhdG9yKSA9PiB7XG4gICAgICByZXR1cm4gdGVzdENvbXBhcmF0b3IuaW50ZXJzZWN0cyhvdGhlckNvbXBhcmF0b3IsIG9wdGlvbnMpXG4gICAgfSlcblxuICAgIHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gY29tcHJpc2VkIG9mIHhyYW5nZXMsIHRpbGRlcywgc3RhcnMsIGFuZCBndGx0J3MgYXQgdGhpcyBwb2ludC5cbi8vIGFscmVhZHkgcmVwbGFjZWQgdGhlIGh5cGhlbiByYW5nZXNcbi8vIHR1cm4gaW50byBhIHNldCBvZiBKVVNUIGNvbXBhcmF0b3JzLlxuY29uc3QgcGFyc2VDb21wYXJhdG9yID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29tcCA9IGNvbXAucmVwbGFjZShyZVt0LkJVSUxEXSwgJycpXG4gIGRlYnVnKCdjb21wJywgY29tcCwgb3B0aW9ucylcbiAgY29tcCA9IHJlcGxhY2VDYXJldHMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ2NhcmV0JywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VUaWxkZXMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ3RpbGRlcycsIGNvbXApXG4gIGNvbXAgPSByZXBsYWNlWFJhbmdlcyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygneHJhbmdlJywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VTdGFycyhjb21wLCBvcHRpb25zKVxuICBkZWJ1Zygnc3RhcnMnLCBjb21wKVxuICByZXR1cm4gY29tcFxufVxuXG5jb25zdCBpc1ggPSBpZCA9PiAhaWQgfHwgaWQudG9Mb3dlckNhc2UoKSA9PT0gJ3gnIHx8IGlkID09PSAnKidcblxuY29uc3QgaW52YWxpZFhSYW5nZU9yZGVyID0gKE0sIG0sIHApID0+IChcbiAgKGlzWChNKSAmJiAhaXNYKG0pKSB8fFxuICAoaXNYKG0pICYmIHAgJiYgIWlzWChwKSlcbilcblxuLy8gfiwgfj4gLS0+ICogKGFueSwga2luZGEgc2lsbHkpXG4vLyB+MiwgfjIueCwgfjIueC54LCB+PjIsIH4+Mi54IH4+Mi54LnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIH4yLjAsIH4yLjAueCwgfj4yLjAsIH4+Mi4wLnggLS0+ID49Mi4wLjAgPDIuMS4wLTBcbi8vIH4xLjIsIH4xLjIueCwgfj4xLjIsIH4+MS4yLnggLS0+ID49MS4yLjAgPDEuMy4wLTBcbi8vIH4xLjIuMywgfj4xLjIuMyAtLT4gPj0xLjIuMyA8MS4zLjAtMFxuLy8gfjEuMi4wLCB+PjEuMi4wIC0tPiA+PTEuMi4wIDwxLjMuMC0wXG4vLyB+MC4wLjEgLS0+ID49MC4wLjEgPDAuMS4wLTBcbmNvbnN0IHJlcGxhY2VUaWxkZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VUaWxkZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VUaWxkZSA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5USUxERUxPT1NFXSA6IHJlW3QuVElMREVdXG4gIC8vIGlmIHdlJ3JlIGluY2x1ZGluZyBwcmVyZWxlYXNlcyBpbiB0aGUgbWF0Y2gsIHRoZW4gdGhlIGxvd2VyIGJvdW5kIGlzXG4gIC8vIC0wLCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByZXJlbGVhc2UgdmFsdWUsIGp1c3QgbGlrZSB4LXJhbmdlcyBhbmQgY2FyZXRzLlxuICAvLyB0aGlzIGtlZXBzIGB+MS4yYCBlcXVpdmFsZW50IHRvIHRoZSBgMS4yLnhgIHgtcmFuZ2UgaXQncyBkb2N1bWVudGVkIGFzLlxuICBjb25zdCB6ID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCd0aWxkZScsIGNvbXAsIF8sIE0sIG0sIHAsIHByKVxuICAgIGxldCByZXRcblxuICAgIGlmIChpc1goTSkpIHtcbiAgICAgIHJldCA9ICcnXG4gICAgfSBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICAvLyB+MS4yID09ID49MS4yLjAgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHt6fSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH0gZWxzZSBpZiAocHIpIHtcbiAgICAgIGRlYnVnKCdyZXBsYWNlVGlsZGUgcHInLCBwcilcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gfjEuMi4zID09ID49MS4yLjMgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3BcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9XG5cbiAgICBkZWJ1ZygndGlsZGUgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuLy8gXiAtLT4gKiAoYW55LCBraW5kYSBzaWxseSlcbi8vIF4yLCBeMi54LCBeMi54LnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIF4yLjAsIF4yLjAueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gXjEuMiwgXjEuMi54IC0tPiA+PTEuMi4wIDwyLjAuMC0wXG4vLyBeMS4yLjMgLS0+ID49MS4yLjMgPDIuMC4wLTBcbi8vIF4xLjIuMCAtLT4gPj0xLjIuMCA8Mi4wLjAtMFxuLy8gXjAuMC4xIC0tPiA+PTAuMC4xIDwwLjAuMi0wXG4vLyBeMC4xLjAgLS0+ID49MC4xLjAgPDAuMi4wLTBcbmNvbnN0IHJlcGxhY2VDYXJldHMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VDYXJldChjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VDYXJldCA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGRlYnVnKCdjYXJldCcsIGNvbXAsIG9wdGlvbnMpXG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5DQVJFVExPT1NFXSA6IHJlW3QuQ0FSRVRdXG4gIGNvbnN0IHogPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gJy0wJyA6ICcnXG4gIHJldHVybiBjb21wLnJlcGxhY2UociwgKF8sIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ2NhcmV0JywgY29tcCwgXywgTSwgbSwgcCwgcHIpXG4gICAgbGV0IHJldFxuXG4gICAgaWYgKGlzWChNKSkge1xuICAgICAgcmV0ID0gJydcbiAgICB9IGVsc2UgaWYgKGlzWChtKSkge1xuICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3p9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgfSBlbHNlIGlmIChpc1gocCkpIHtcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3p9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByKSB7XG4gICAgICBkZWJ1ZygncmVwbGFjZUNhcmV0IHByJywgcHIpXG4gICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgIGlmIChtID09PSAnMCcpIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICAgICAgfSA8JHtNfS4ke219LiR7K3AgKyAxfS0wYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgfSA8JHsrTSArIDF9LjAuMC0wYFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Zygnbm8gcHInKVxuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICBpZiAobSA9PT0gJzAnKSB7XG4gICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgICAgIH0gPCR7TX0uJHttfS4keytwICsgMX0tMGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgIH0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWJ1ZygnY2FyZXQgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuY29uc3QgcmVwbGFjZVhSYW5nZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZVhSYW5nZXMnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZVhSYW5nZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VYUmFuZ2UgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBjb21wID0gY29tcC50cmltKClcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LlhSQU5HRUxPT1NFXSA6IHJlW3QuWFJBTkdFXVxuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChyZXQsIGd0bHQsIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ3hSYW5nZScsIGNvbXAsIHJldCwgZ3RsdCwgTSwgbSwgcCwgcHIpXG4gICAgaWYgKGludmFsaWRYUmFuZ2VPcmRlcihNLCBtLCBwKSkge1xuICAgICAgcmV0dXJuIGNvbXBcbiAgICB9XG5cbiAgICBjb25zdCB4TSA9IGlzWChNKVxuICAgIGNvbnN0IHhtID0geE0gfHwgaXNYKG0pXG4gICAgY29uc3QgeHAgPSB4bSB8fCBpc1gocClcbiAgICBjb25zdCBhbnlYID0geHBcblxuICAgIGlmIChndGx0ID09PSAnPScgJiYgYW55WCkge1xuICAgICAgZ3RsdCA9ICcnXG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgaW5jbHVkaW5nIHByZXJlbGVhc2VzIGluIHRoZSBtYXRjaCwgdGhlbiB3ZSBuZWVkXG4gICAgLy8gdG8gZml4IHRoaXMgdG8gLTAsIHRoZSBsb3dlc3QgcG9zc2libGUgcHJlcmVsZWFzZSB2YWx1ZVxuICAgIHByID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuXG4gICAgaWYgKHhNKSB7XG4gICAgICBpZiAoZ3RsdCA9PT0gJz4nIHx8IGd0bHQgPT09ICc8Jykge1xuICAgICAgICAvLyBub3RoaW5nIGlzIGFsbG93ZWRcbiAgICAgICAgcmV0ID0gJzwwLjAuMC0wJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm90aGluZyBpcyBmb3JiaWRkZW5cbiAgICAgICAgcmV0ID0gJyonXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChndGx0ICYmIGFueVgpIHtcbiAgICAgIC8vIHdlIGtub3cgcGF0Y2ggaXMgYW4geCwgYmVjYXVzZSB3ZSBoYXZlIGFueSB4IGF0IGFsbC5cbiAgICAgIC8vIHJlcGxhY2UgWCB3aXRoIDBcbiAgICAgIGlmICh4bSkge1xuICAgICAgICBtID0gMFxuICAgICAgfVxuICAgICAgcCA9IDBcblxuICAgICAgaWYgKGd0bHQgPT09ICc+Jykge1xuICAgICAgICAvLyA+MSA9PiA+PTIuMC4wXG4gICAgICAgIC8vID4xLjIgPT4gPj0xLjMuMFxuICAgICAgICBndGx0ID0gJz49J1xuICAgICAgICBpZiAoeG0pIHtcbiAgICAgICAgICBNID0gK00gKyAxXG4gICAgICAgICAgbSA9IDBcbiAgICAgICAgICBwID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG0gPSArbSArIDFcbiAgICAgICAgICBwID0gMFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGd0bHQgPT09ICc8PScpIHtcbiAgICAgICAgLy8gPD0wLjcueCBpcyBhY3R1YWxseSA8MC44LjAsIHNpbmNlIGFueSAwLjcueCBzaG91bGRcbiAgICAgICAgLy8gcGFzcy4gIFNpbWlsYXJseSwgPD03LnggaXMgYWN0dWFsbHkgPDguMC4wLCBldGMuXG4gICAgICAgIGd0bHQgPSAnPCdcbiAgICAgICAgaWYgKHhtKSB7XG4gICAgICAgICAgTSA9ICtNICsgMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG0gPSArbSArIDFcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ3RsdCA9PT0gJzwnKSB7XG4gICAgICAgIHByID0gJy0wJ1xuICAgICAgfVxuXG4gICAgICByZXQgPSBgJHtndGx0ICsgTX0uJHttfS4ke3B9JHtwcn1gXG4gICAgfSBlbHNlIGlmICh4bSkge1xuICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3ByfSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoeHApIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHtwclxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH1cblxuICAgIGRlYnVnKCd4UmFuZ2UgcmV0dXJuJywgcmV0KVxuXG4gICAgcmV0dXJuIHJldFxuICB9KVxufVxuXG4vLyBCZWNhdXNlICogaXMgQU5ELWVkIHdpdGggZXZlcnl0aGluZyBlbHNlIGluIHRoZSBjb21wYXJhdG9yLFxuLy8gYW5kICcnIG1lYW5zIFwiYW55IHZlcnNpb25cIiwganVzdCByZW1vdmUgdGhlICpzIGVudGlyZWx5LlxuY29uc3QgcmVwbGFjZVN0YXJzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ3JlcGxhY2VTdGFycycsIGNvbXAsIG9wdGlvbnMpXG4gIC8vIExvb3NlbmVzcyBpcyBpZ25vcmVkIGhlcmUuICBzdGFyIGlzIGFsd2F5cyBhcyBsb29zZSBhcyBpdCBnZXRzIVxuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZShyZVt0LlNUQVJdLCAnJylcbn1cblxuY29uc3QgcmVwbGFjZUdURTAgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZUdURTAnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZShyZVtvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gdC5HVEUwUFJFIDogdC5HVEUwXSwgJycpXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIHN0cmluZy5yZXBsYWNlKHJlW3QuSFlQSEVOUkFOR0VdKVxuLy8gTSwgbSwgcGF0Y2gsIHByZXJlbGVhc2UsIGJ1aWxkXG4vLyAxLjIgLSAzLjQuNSA9PiA+PTEuMi4wIDw9My40LjVcbi8vIDEuMi4zIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wLTAgQW55IDMuNC54IHdpbGwgZG9cbi8vIDEuMiAtIDMuNCA9PiA+PTEuMi4wIDwzLjUuMC0wXG4vLyBUT0RPIGJ1aWxkP1xuY29uc3QgaHlwaGVuUmVwbGFjZSA9IGluY1ByID0+ICgkMCxcbiAgZnJvbSwgZk0sIGZtLCBmcCwgZnByLCBmYixcbiAgdG8sIHRNLCB0bSwgdHAsIHRwcikgPT4ge1xuICBpZiAoaXNYKGZNKSkge1xuICAgIGZyb20gPSAnJ1xuICB9IGVsc2UgaWYgKGlzWChmbSkpIHtcbiAgICBmcm9tID0gYD49JHtmTX0uMC4wJHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH0gZWxzZSBpZiAoaXNYKGZwKSkge1xuICAgIGZyb20gPSBgPj0ke2ZNfS4ke2ZtfS4wJHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH0gZWxzZSBpZiAoZnByKSB7XG4gICAgZnJvbSA9IGA+PSR7ZnJvbX1gXG4gIH0gZWxzZSB7XG4gICAgZnJvbSA9IGA+PSR7ZnJvbX0ke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfVxuXG4gIGlmIChpc1godE0pKSB7XG4gICAgdG8gPSAnJ1xuICB9IGVsc2UgaWYgKGlzWCh0bSkpIHtcbiAgICB0byA9IGA8JHsrdE0gKyAxfS4wLjAtMGBcbiAgfSBlbHNlIGlmIChpc1godHApKSB7XG4gICAgdG8gPSBgPCR7dE19LiR7K3RtICsgMX0uMC0wYFxuICB9IGVsc2UgaWYgKHRwcikge1xuICAgIHRvID0gYDw9JHt0TX0uJHt0bX0uJHt0cH0tJHt0cHJ9YFxuICB9IGVsc2UgaWYgKGluY1ByKSB7XG4gICAgdG8gPSBgPCR7dE19LiR7dG19LiR7K3RwICsgMX0tMGBcbiAgfSBlbHNlIHtcbiAgICB0byA9IGA8PSR7dG99YFxuICB9XG5cbiAgcmV0dXJuIGAke2Zyb219ICR7dG99YC50cmltKClcbn1cblxuY29uc3QgdGVzdFNldCA9IChzZXQsIHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXNldFtpXS50ZXN0KHZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBpZiAodmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgIC8vIEZpbmQgdGhlIHNldCBvZiB2ZXJzaW9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIGhhdmUgcHJlcmVsZWFzZXNcbiAgICAvLyBGb3IgZXhhbXBsZSwgXjEuMi4zLXByLjEgZGVzdWdhcnMgdG8gPj0xLjIuMy1wci4xIDwyLjAuMFxuICAgIC8vIFRoYXQgc2hvdWxkIGFsbG93IGAxLjIuMy1wci4yYCB0byBwYXNzLlxuICAgIC8vIEhvd2V2ZXIsIGAxLjIuNC1hbHBoYS5ub3RyZWFkeWAgc2hvdWxkIE5PVCBiZSBhbGxvd2VkLFxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0J3Mgd2l0aGluIHRoZSByYW5nZSBzZXQgYnkgdGhlIGNvbXBhcmF0b3JzLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWJ1ZyhzZXRbaV0uc2VtdmVyKVxuICAgICAgaWYgKHNldFtpXS5zZW12ZXIgPT09IENvbXBhcmF0b3IuQU5ZKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXRbaV0uc2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBhbGxvd2VkID0gc2V0W2ldLnNlbXZlclxuICAgICAgICBpZiAoYWxsb3dlZC5tYWpvciA9PT0gdmVyc2lvbi5tYWpvciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5taW5vciA9PT0gdmVyc2lvbi5taW5vciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5wYXRjaCA9PT0gdmVyc2lvbi5wYXRjaCkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWZXJzaW9uIGhhcyBhIC1wcmUsIGJ1dCBpdCdzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2UgbGlrZS5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEFOWSA9IFN5bWJvbCgnU2VtVmVyIEFOWScpXG4vLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgQ29tcGFyYXRvciB7XG4gIHN0YXRpYyBnZXQgQU5ZICgpIHtcbiAgICByZXR1cm4gQU5ZXG4gIH1cblxuICBjb25zdHJ1Y3RvciAoY29tcCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChjb21wIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgaWYgKGNvbXAubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSkge1xuICAgICAgICByZXR1cm4gY29tcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcCA9IGNvbXAudmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wID0gY29tcC50cmltKCkuc3BsaXQoL1xccysvKS5qb2luKCcgJylcbiAgICBkZWJ1ZygnY29tcGFyYXRvcicsIGNvbXAsIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLnBhcnNlKGNvbXApXG5cbiAgICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wZXJhdG9yICsgdGhpcy5zZW12ZXIudmVyc2lvblxuICAgIH1cblxuICAgIGRlYnVnKCdjb21wJywgdGhpcylcbiAgfVxuXG4gIHBhcnNlIChjb21wKSB7XG4gICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuQ09NUEFSQVRPUkxPT1NFXSA6IHJlW3QuQ09NUEFSQVRPUl1cbiAgICBjb25zdCBtID0gY29tcC5tYXRjaChyKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGNvbXBhcmF0b3I6ICR7Y29tcH1gKVxuICAgIH1cblxuICAgIHRoaXMub3BlcmF0b3IgPSBtWzFdICE9PSB1bmRlZmluZWQgPyBtWzFdIDogJydcbiAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJz0nKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiBpdCBsaXRlcmFsbHkgaXMganVzdCAnPicgb3IgJycgdGhlbiBhbGxvdyBhbnl0aGluZy5cbiAgICBpZiAoIW1bMl0pIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gQU5ZXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gbmV3IFNlbVZlcihtWzJdLCB0aGlzLm9wdGlvbnMubG9vc2UpXG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cblxuICB0ZXN0ICh2ZXJzaW9uKSB7XG4gICAgZGVidWcoJ0NvbXBhcmF0b3IudGVzdCcsIHZlcnNpb24sIHRoaXMub3B0aW9ucy5sb29zZSlcblxuICAgIGlmICh0aGlzLnNlbXZlciA9PT0gQU5ZIHx8IHZlcnNpb24gPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY21wKHZlcnNpb24sIHRoaXMub3BlcmF0b3IsIHRoaXMuc2VtdmVyLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbnRlcnNlY3RzIChjb21wLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGNvbXAudmFsdWUsIG9wdGlvbnMpLnRlc3QodGhpcy52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKGNvbXAub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICBpZiAoY29tcC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy52YWx1ZSwgb3B0aW9ucykudGVzdChjb21wLnNlbXZlcilcbiAgICB9XG5cbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyBTcGVjaWFsIGNhc2VzIHdoZXJlIG5vdGhpbmcgY2FuIHBvc3NpYmx5IGJlIGxvd2VyXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICAgICh0aGlzLnZhbHVlID09PSAnPDAuMC4wLTAnIHx8IGNvbXAudmFsdWUgPT09ICc8MC4wLjAtMCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmXG4gICAgICAodGhpcy52YWx1ZS5zdGFydHNXaXRoKCc8MC4wLjAnKSB8fCBjb21wLnZhbHVlLnN0YXJ0c1dpdGgoJzwwLjAuMCcpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gU2FtZSBkaXJlY3Rpb24gaW5jcmVhc2luZyAoPiBvciA+PSlcbiAgICBpZiAodGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykgJiYgY29tcC5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFNhbWUgZGlyZWN0aW9uIGRlY3JlYXNpbmcgKDwgb3IgPD0pXG4gICAgaWYgKHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBzYW1lIFNlbVZlciBhbmQgYm90aCBzaWRlcyBhcmUgaW5jbHVzaXZlICg8PSBvciA+PSlcbiAgICBpZiAoXG4gICAgICAodGhpcy5zZW12ZXIudmVyc2lvbiA9PT0gY29tcC5zZW12ZXIudmVyc2lvbikgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IuaW5jbHVkZXMoJz0nKSAmJiBjb21wLm9wZXJhdG9yLmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIG9wcG9zaXRlIGRpcmVjdGlvbnMgbGVzcyB0aGFuXG4gICAgaWYgKGNtcCh0aGlzLnNlbXZlciwgJzwnLCBjb21wLnNlbXZlciwgb3B0aW9ucykgJiZcbiAgICAgIHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zIGdyZWF0ZXIgdGhhblxuICAgIGlmIChjbXAodGhpcy5zZW12ZXIsICc+JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJz4nKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb21wYXJhdG9yXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCBjbXAgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL3JhbmdlJylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IHNhdGlzZmllcyA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiByYW5nZS50ZXN0KHZlcnNpb24pXG59XG5tb2R1bGUuZXhwb3J0cyA9IHNhdGlzZmllc1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuXG4vLyBNb3N0bHkganVzdCBmb3IgdGVzdGluZyBhbmQgbGVnYWN5IEFQSSByZWFzb25zXG5jb25zdCB0b0NvbXBhcmF0b3JzID0gKHJhbmdlLCBvcHRpb25zKSA9PlxuICBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnNldFxuICAgIC5tYXAoY29tcCA9PiBjb21wLm1hcChjID0+IGMudmFsdWUpLmpvaW4oJyAnKS50cmltKCkuc3BsaXQoJyAnKSlcblxubW9kdWxlLmV4cG9ydHMgPSB0b0NvbXBhcmF0b3JzXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbmNvbnN0IG1heFNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtYXggPSBudWxsXG4gIGxldCBtYXhTViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1heCB8fCBtYXhTVi5jb21wYXJlKHYpID09PSAtMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1heCwgdiwgdHJ1ZSlcbiAgICAgICAgbWF4ID0gdlxuICAgICAgICBtYXhTViA9IG5ldyBTZW1WZXIobWF4LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1heFxufVxubW9kdWxlLmV4cG9ydHMgPSBtYXhTYXRpc2Z5aW5nXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBtaW5TYXRpc2Z5aW5nID0gKHZlcnNpb25zLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICBsZXQgbWluID0gbnVsbFxuICBsZXQgbWluU1YgPSBudWxsXG4gIGxldCByYW5nZU9iaiA9IG51bGxcbiAgdHJ5IHtcbiAgICByYW5nZU9iaiA9IG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucylcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHZlcnNpb25zLmZvckVhY2goKHYpID0+IHtcbiAgICBpZiAocmFuZ2VPYmoudGVzdCh2KSkge1xuICAgICAgLy8gc2F0aXNmaWVzKHYsIHJhbmdlLCBvcHRpb25zKVxuICAgICAgaWYgKCFtaW4gfHwgbWluU1YuY29tcGFyZSh2KSA9PT0gMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1pbiwgdiwgdHJ1ZSlcbiAgICAgICAgbWluID0gdlxuICAgICAgICBtaW5TViA9IG5ldyBTZW1WZXIobWluLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1pblxufVxubW9kdWxlLmV4cG9ydHMgPSBtaW5TYXRpc2Z5aW5nXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndCcpXG5cbmNvbnN0IG1pblZlcnNpb24gPSAocmFuZ2UsIGxvb3NlKSA9PiB7XG4gIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBsb29zZSlcblxuICBsZXQgbWludmVyID0gbmV3IFNlbVZlcignMC4wLjAnKVxuICBpZiAocmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgbWludmVyID0gbmV3IFNlbVZlcignMC4wLjAtMCcpXG4gIGlmIChyYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICBtaW52ZXIgPSBudWxsXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2V0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZS5zZXRbaV1cblxuICAgIGxldCBzZXRNaW4gPSBudWxsXG4gICAgY29tcGFyYXRvcnMuZm9yRWFjaCgoY29tcGFyYXRvcikgPT4ge1xuICAgICAgLy8gQ2xvbmUgdG8gYXZvaWQgbWFuaXB1bGF0aW5nIHRoZSBjb21wYXJhdG9yJ3Mgc2VtdmVyIG9iamVjdC5cbiAgICAgIGNvbnN0IGNvbXB2ZXIgPSBuZXcgU2VtVmVyKGNvbXBhcmF0b3Iuc2VtdmVyLnZlcnNpb24pXG4gICAgICBzd2l0Y2ggKGNvbXBhcmF0b3Iub3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSAnPic6XG4gICAgICAgICAgaWYgKGNvbXB2ZXIucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbXB2ZXIucGF0Y2grK1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wdmVyLnByZXJlbGVhc2UucHVzaCgwKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb21wdmVyLnJhdyA9IGNvbXB2ZXIuZm9ybWF0KClcbiAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgICAgICBjYXNlICcnOlxuICAgICAgICBjYXNlICc+PSc6XG4gICAgICAgICAgaWYgKCFzZXRNaW4gfHwgZ3QoY29tcHZlciwgc2V0TWluKSkge1xuICAgICAgICAgICAgc2V0TWluID0gY29tcHZlclxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FzZSAnPD0nOlxuICAgICAgICAgIC8qIElnbm9yZSBtYXhpbXVtIHZlcnNpb25zICovXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb3BlcmF0aW9uOiAke2NvbXBhcmF0b3Iub3BlcmF0b3J9YClcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmIChzZXRNaW4gJiYgKCFtaW52ZXIgfHwgZ3QobWludmVyLCBzZXRNaW4pKSkge1xuICAgICAgbWludmVyID0gc2V0TWluXG4gICAgfVxuICB9XG5cbiAgaWYgKG1pbnZlciAmJiByYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBtaW5WZXJzaW9uXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCB2YWxpZFJhbmdlID0gKHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gUmV0dXJuICcqJyBpbnN0ZWFkIG9mICcnIHNvIHRoYXQgdHJ1dGhpbmVzcyB3b3Jrcy5cbiAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgaXQncyBpbnZhbGlkIGFueXdheVxuICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnJhbmdlIHx8ICcqJ1xuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRSYW5nZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9jb21wYXJhdG9yJylcbmNvbnN0IHsgQU5ZIH0gPSBDb21wYXJhdG9yXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3NhdGlzZmllcycpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndCcpXG5jb25zdCBsdCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBsdGUgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGd0ZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndGUnKVxuXG5jb25zdCBvdXRzaWRlID0gKHZlcnNpb24sIHJhbmdlLCBoaWxvLCBvcHRpb25zKSA9PiB7XG4gIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIG9wdGlvbnMpXG4gIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuXG4gIGxldCBndGZuLCBsdGVmbiwgbHRmbiwgY29tcCwgZWNvbXBcbiAgc3dpdGNoIChoaWxvKSB7XG4gICAgY2FzZSAnPic6XG4gICAgICBndGZuID0gZ3RcbiAgICAgIGx0ZWZuID0gbHRlXG4gICAgICBsdGZuID0gbHRcbiAgICAgIGNvbXAgPSAnPidcbiAgICAgIGVjb21wID0gJz49J1xuICAgICAgYnJlYWtcbiAgICBjYXNlICc8JzpcbiAgICAgIGd0Zm4gPSBsdFxuICAgICAgbHRlZm4gPSBndGVcbiAgICAgIGx0Zm4gPSBndFxuICAgICAgY29tcCA9ICc8J1xuICAgICAgZWNvbXAgPSAnPD0nXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHByb3ZpZGUgYSBoaWxvIHZhbCBvZiBcIjxcIiBvciBcIj5cIicpXG4gIH1cblxuICAvLyBJZiBpdCBzYXRpc2ZpZXMgdGhlIHJhbmdlIGl0IGlzIG5vdCBvdXRzaWRlXG4gIGlmIChzYXRpc2ZpZXModmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBGcm9tIG5vdyBvbiwgdmFyaWFibGUgdGVybXMgYXJlIGFzIGlmIHdlJ3JlIGluIFwiZ3RyXCIgbW9kZS5cbiAgLy8gYnV0IG5vdGUgdGhhdCBldmVyeXRoaW5nIGlzIGZsaXBwZWQgZm9yIHRoZSBcImx0clwiIGZ1bmN0aW9uLlxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2V0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZS5zZXRbaV1cblxuICAgIGxldCBoaWdoID0gbnVsbFxuICAgIGxldCBsb3cgPSBudWxsXG5cbiAgICBjb21wYXJhdG9ycy5mb3JFYWNoKChjb21wYXJhdG9yKSA9PiB7XG4gICAgICBpZiAoY29tcGFyYXRvci5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgICBjb21wYXJhdG9yID0gbmV3IENvbXBhcmF0b3IoJz49MC4wLjAnKVxuICAgICAgfVxuICAgICAgaGlnaCA9IGhpZ2ggfHwgY29tcGFyYXRvclxuICAgICAgbG93ID0gbG93IHx8IGNvbXBhcmF0b3JcbiAgICAgIGlmIChndGZuKGNvbXBhcmF0b3Iuc2VtdmVyLCBoaWdoLnNlbXZlciwgb3B0aW9ucykpIHtcbiAgICAgICAgaGlnaCA9IGNvbXBhcmF0b3JcbiAgICAgIH0gZWxzZSBpZiAobHRmbihjb21wYXJhdG9yLnNlbXZlciwgbG93LnNlbXZlciwgb3B0aW9ucykpIHtcbiAgICAgICAgbG93ID0gY29tcGFyYXRvclxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBJZiB0aGUgZWRnZSB2ZXJzaW9uIGNvbXBhcmF0b3IgaGFzIGEgb3BlcmF0b3IgdGhlbiBvdXIgdmVyc2lvblxuICAgIC8vIGlzbid0IG91dHNpZGUgaXRcbiAgICBpZiAoaGlnaC5vcGVyYXRvciA9PT0gY29tcCB8fCBoaWdoLm9wZXJhdG9yID09PSBlY29tcCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGxvd2VzdCB2ZXJzaW9uIGNvbXBhcmF0b3IgaGFzIGFuIG9wZXJhdG9yIGFuZCBvdXIgdmVyc2lvblxuICAgIC8vIGlzIGxlc3MgdGhhbiBpdCB0aGVuIGl0IGlzbid0IGhpZ2hlciB0aGFuIHRoZSByYW5nZVxuICAgIGlmICgoIWxvdy5vcGVyYXRvciB8fCBsb3cub3BlcmF0b3IgPT09IGNvbXApICYmXG4gICAgICAgIGx0ZWZuKHZlcnNpb24sIGxvdy5zZW12ZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYgKGxvdy5vcGVyYXRvciA9PT0gZWNvbXAgJiYgbHRmbih2ZXJzaW9uLCBsb3cuc2VtdmVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0c2lkZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2UuXG5jb25zdCBvdXRzaWRlID0gcmVxdWlyZSgnLi9vdXRzaWRlJylcbmNvbnN0IGd0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJz4nLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBndHJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBsZXNzIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbmNvbnN0IGx0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJzwnLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBsdHJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IGludGVyc2VjdHMgPSAocjEsIHIyLCBvcHRpb25zKSA9PiB7XG4gIHIxID0gbmV3IFJhbmdlKHIxLCBvcHRpb25zKVxuICByMiA9IG5ldyBSYW5nZShyMiwgb3B0aW9ucylcbiAgcmV0dXJuIHIxLmludGVyc2VjdHMocjIsIG9wdGlvbnMpXG59XG5tb2R1bGUuZXhwb3J0cyA9IGludGVyc2VjdHNcbiIsICIndXNlIHN0cmljdCdcblxuLy8gZ2l2ZW4gYSBzZXQgb2YgdmVyc2lvbnMgYW5kIGEgcmFuZ2UsIGNyZWF0ZSBhIFwic2ltcGxpZmllZFwiIHJhbmdlXG4vLyB0aGF0IGluY2x1ZGVzIHRoZSBzYW1lIHZlcnNpb25zIHRoYXQgdGhlIG9yaWdpbmFsIHJhbmdlIGRvZXNcbi8vIElmIHRoZSBvcmlnaW5hbCByYW5nZSBpcyBzaG9ydGVyIHRoYW4gdGhlIHNpbXBsaWZpZWQgb25lLCByZXR1cm4gdGhhdC5cbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcbm1vZHVsZS5leHBvcnRzID0gKHZlcnNpb25zLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBzZXQgPSBbXVxuICBsZXQgZmlyc3QgPSBudWxsXG4gIGxldCBwcmV2ID0gbnVsbFxuICBjb25zdCB2ID0gdmVyc2lvbnMuc29ydCgoYSwgYikgPT4gY29tcGFyZShhLCBiLCBvcHRpb25zKSlcbiAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHYpIHtcbiAgICBjb25zdCBpbmNsdWRlZCA9IHNhdGlzZmllcyh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucylcbiAgICBpZiAoaW5jbHVkZWQpIHtcbiAgICAgIHByZXYgPSB2ZXJzaW9uXG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIGZpcnN0ID0gdmVyc2lvblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICBzZXQucHVzaChbZmlyc3QsIHByZXZdKVxuICAgICAgfVxuICAgICAgcHJldiA9IG51bGxcbiAgICAgIGZpcnN0ID0gbnVsbFxuICAgIH1cbiAgfVxuICBpZiAoZmlyc3QpIHtcbiAgICBzZXQucHVzaChbZmlyc3QsIG51bGxdKVxuICB9XG5cbiAgY29uc3QgcmFuZ2VzID0gW11cbiAgZm9yIChjb25zdCBbbWluLCBtYXhdIG9mIHNldCkge1xuICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgcmFuZ2VzLnB1c2gobWluKVxuICAgIH0gZWxzZSBpZiAoIW1heCAmJiBtaW4gPT09IHZbMF0pIHtcbiAgICAgIHJhbmdlcy5wdXNoKCcqJylcbiAgICB9IGVsc2UgaWYgKCFtYXgpIHtcbiAgICAgIHJhbmdlcy5wdXNoKGA+PSR7bWlufWApXG4gICAgfSBlbHNlIGlmIChtaW4gPT09IHZbMF0pIHtcbiAgICAgIHJhbmdlcy5wdXNoKGA8PSR7bWF4fWApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlcy5wdXNoKGAke21pbn0gLSAke21heH1gKVxuICAgIH1cbiAgfVxuICBjb25zdCBzaW1wbGlmaWVkID0gcmFuZ2VzLmpvaW4oJyB8fCAnKVxuICBjb25zdCBvcmlnaW5hbCA9IHR5cGVvZiByYW5nZS5yYXcgPT09ICdzdHJpbmcnID8gcmFuZ2UucmF3IDogU3RyaW5nKHJhbmdlKVxuICByZXR1cm4gc2ltcGxpZmllZC5sZW5ndGggPCBvcmlnaW5hbC5sZW5ndGggPyBzaW1wbGlmaWVkIDogcmFuZ2Vcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlLmpzJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3IuanMnKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcblxuLy8gQ29tcGxleCByYW5nZSBgcjEgfHwgcjIgfHwgLi4uYCBpcyBhIHN1YnNldCBvZiBgUjEgfHwgUjIgfHwgLi4uYCBpZmY6XG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIGlzIGEgbnVsbCBzZXQsIE9SXG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIHdoaWNoIGlzIG5vdCBhIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mXG4vLyAgIHNvbWUgYFIxLCBSMiwgLi4uYFxuLy9cbi8vIFNpbXBsZSByYW5nZSBgYzEgYzIgLi4uYCBpcyBhIHN1YnNldCBvZiBzaW1wbGUgcmFuZ2UgYEMxIEMyIC4uLmAgaWZmOlxuLy8gLSBJZiBjIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gSWYgQyBpcyBvbmx5IHRoZSBBTlkgY29tcGFyYXRvciwgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIGlmIGluIHByZXJlbGVhc2UgbW9kZSwgcmV0dXJuIGZhbHNlXG4vLyAgIC0gZWxzZSByZXBsYWNlIGMgd2l0aCBgWz49MC4wLjBdYFxuLy8gLSBJZiBDIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gaWYgaW4gcHJlcmVsZWFzZSBtb2RlLCByZXR1cm4gdHJ1ZVxuLy8gICAtIGVsc2UgcmVwbGFjZSBDIHdpdGggYFs+PTAuMC4wXWBcbi8vIC0gTGV0IEVRIGJlIHRoZSBzZXQgb2YgPSBjb21wYXJhdG9ycyBpbiBjXG4vLyAtIElmIEVRIGlzIG1vcmUgdGhhbiBvbmUsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vIC0gTGV0IEdUIGJlIHRoZSBoaWdoZXN0ID4gb3IgPj0gY29tcGFyYXRvciBpbiBjXG4vLyAtIExldCBMVCBiZSB0aGUgbG93ZXN0IDwgb3IgPD0gY29tcGFyYXRvciBpbiBjXG4vLyAtIElmIEdUIGFuZCBMVCwgYW5kIEdULnNlbXZlciA+IExULnNlbXZlciwgcmV0dXJuIHRydWUgKG51bGwgc2V0KVxuLy8gLSBJZiBhbnkgQyBpcyBhID0gcmFuZ2UsIGFuZCBHVCBvciBMVCBhcmUgc2V0LCByZXR1cm4gZmFsc2Vcbi8vIC0gSWYgRVFcbi8vICAgLSBJZiBHVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgR1QsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBMVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgTFQsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBFUSBzYXRpc2ZpZXMgZXZlcnkgQywgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIHJldHVybiBmYWxzZVxuLy8gLSBJZiBHVFxuLy8gICAtIElmIEdULnNlbXZlciBpcyBsb3dlciB0aGFuIGFueSA+IG9yID49IGNvbXAgaW4gQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1QgaXMgPj0sIGFuZCBHVC5zZW12ZXIgZG9lcyBub3Qgc2F0aXNmeSBldmVyeSBDLCByZXR1cm4gZmFsc2Vcbi8vICAgLSBJZiBHVC5zZW12ZXIgaGFzIGEgcHJlcmVsZWFzZSwgYW5kIG5vdCBpbiBwcmVyZWxlYXNlIG1vZGVcbi8vICAgICAtIElmIG5vIEMgaGFzIGEgcHJlcmVsZWFzZSBhbmQgdGhlIEdULnNlbXZlciB0dXBsZSwgcmV0dXJuIGZhbHNlXG4vLyAtIElmIExUXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGlzIGdyZWF0ZXIgdGhhbiBhbnkgPCBvciA8PSBjb21wIGluIEMsIHJldHVybiBmYWxzZVxuLy8gICAtIElmIExUIGlzIDw9LCBhbmQgTFQuc2VtdmVyIGRvZXMgbm90IHNhdGlzZnkgZXZlcnkgQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGhhcyBhIHByZXJlbGVhc2UsIGFuZCBub3QgaW4gcHJlcmVsZWFzZSBtb2RlXG4vLyAgICAgLSBJZiBubyBDIGhhcyBhIHByZXJlbGVhc2UgYW5kIHRoZSBMVC5zZW12ZXIgdHVwbGUsIHJldHVybiBmYWxzZVxuLy8gLSBFbHNlIHJldHVybiB0cnVlXG5cbmNvbnN0IHN1YnNldCA9IChzdWIsIGRvbSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChzdWIgPT09IGRvbSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBzdWIgPSBuZXcgUmFuZ2Uoc3ViLCBvcHRpb25zKVxuICBkb20gPSBuZXcgUmFuZ2UoZG9tLCBvcHRpb25zKVxuICBsZXQgc2F3Tm9uTnVsbCA9IGZhbHNlXG5cbiAgT1VURVI6IGZvciAoY29uc3Qgc2ltcGxlU3ViIG9mIHN1Yi5zZXQpIHtcbiAgICBmb3IgKGNvbnN0IHNpbXBsZURvbSBvZiBkb20uc2V0KSB7XG4gICAgICBjb25zdCBpc1N1YiA9IHNpbXBsZVN1YnNldChzaW1wbGVTdWIsIHNpbXBsZURvbSwgb3B0aW9ucylcbiAgICAgIHNhd05vbk51bGwgPSBzYXdOb25OdWxsIHx8IGlzU3ViICE9PSBudWxsXG4gICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgY29udGludWUgT1VURVJcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mIGV2ZXJ5dGhpbmcsIGJ1dCBudWxsIHNpbXBsZSByYW5nZXMgaW5cbiAgICAvLyBhIGNvbXBsZXggcmFuZ2Ugc2hvdWxkIGJlIGlnbm9yZWQuICBzbyBpZiB3ZSBzYXcgYSBub24tbnVsbCByYW5nZSxcbiAgICAvLyB0aGVuIHdlIGtub3cgdGhpcyBpc24ndCBhIHN1YnNldCwgYnV0IGlmIEVWRVJZIHNpbXBsZSByYW5nZSB3YXMgbnVsbCxcbiAgICAvLyB0aGVuIGl0IGlzIGEgc3Vic2V0LlxuICAgIGlmIChzYXdOb25OdWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgbWluaW11bVZlcnNpb25XaXRoUHJlUmVsZWFzZSA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMC0wJyldXG5jb25zdCBtaW5pbXVtVmVyc2lvbiA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXVxuXG5jb25zdCBzaW1wbGVTdWJzZXQgPSAoc3ViLCBkb20sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN1YiA9PT0gZG9tKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdWIubGVuZ3RoID09PSAxICYmIHN1YlswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgIGlmIChkb20ubGVuZ3RoID09PSAxICYmIGRvbVswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgIHN1YiA9IG1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBpZiAoZG9tLmxlbmd0aCA9PT0gMSAmJiBkb21bMF0uc2VtdmVyID09PSBBTlkpIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBjb25zdCBlcVNldCA9IG5ldyBTZXQoKVxuICBsZXQgZ3QsIGx0XG4gIGZvciAoY29uc3QgYyBvZiBzdWIpIHtcbiAgICBpZiAoYy5vcGVyYXRvciA9PT0gJz4nIHx8IGMub3BlcmF0b3IgPT09ICc+PScpIHtcbiAgICAgIGd0ID0gaGlnaGVyR1QoZ3QsIGMsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgbHQgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBlcVNldC5hZGQoYy5zZW12ZXIpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVxU2V0LnNpemUgPiAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBndGx0Q29tcFxuICBpZiAoZ3QgJiYgbHQpIHtcbiAgICBndGx0Q29tcCA9IGNvbXBhcmUoZ3Quc2VtdmVyLCBsdC5zZW12ZXIsIG9wdGlvbnMpXG4gICAgaWYgKGd0bHRDb21wID4gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGd0bHRDb21wID09PSAwICYmIChndC5vcGVyYXRvciAhPT0gJz49JyB8fCBsdC5vcGVyYXRvciAhPT0gJzw9JykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gd2lsbCBpdGVyYXRlIG9uZSBvciB6ZXJvIHRpbWVzXG4gIGZvciAoY29uc3QgZXEgb2YgZXFTZXQpIHtcbiAgICBpZiAoZ3QgJiYgIXNhdGlzZmllcyhlcSwgU3RyaW5nKGd0KSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKGx0ICYmICFzYXRpc2ZpZXMoZXEsIFN0cmluZyhsdCksIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICAgIGlmICghc2F0aXNmaWVzKGVxLCBTdHJpbmcoYyksIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgaGlnaGVyLCBsb3dlclxuICBsZXQgaGFzRG9tTFQsIGhhc0RvbUdUXG4gIC8vIGlmIHRoZSBzdWJzZXQgaGFzIGEgcHJlcmVsZWFzZSwgd2UgbmVlZCBhIGNvbXBhcmF0b3IgaW4gdGhlIHN1cGVyc2V0XG4gIC8vIHdpdGggdGhlIHNhbWUgdHVwbGUgYW5kIGEgcHJlcmVsZWFzZSwgb3IgaXQncyBub3QgYSBzdWJzZXRcbiAgbGV0IG5lZWREb21MVFByZSA9IGx0ICYmXG4gICAgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICBsdC5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPyBsdC5zZW12ZXIgOiBmYWxzZVxuICBsZXQgbmVlZERvbUdUUHJlID0gZ3QgJiZcbiAgICAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJlxuICAgIGd0LnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA/IGd0LnNlbXZlciA6IGZhbHNlXG4gIC8vIGV4Y2VwdGlvbjogPDEuMi4zLTAgaXMgdGhlIHNhbWUgYXMgPDEuMi4zXG4gIGlmIChuZWVkRG9tTFRQcmUgJiYgbmVlZERvbUxUUHJlLnByZXJlbGVhc2UubGVuZ3RoID09PSAxICYmXG4gICAgICBsdC5vcGVyYXRvciA9PT0gJzwnICYmIG5lZWREb21MVFByZS5wcmVyZWxlYXNlWzBdID09PSAwKSB7XG4gICAgbmVlZERvbUxUUHJlID0gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICBoYXNEb21HVCA9IGhhc0RvbUdUIHx8IGMub3BlcmF0b3IgPT09ICc+JyB8fCBjLm9wZXJhdG9yID09PSAnPj0nXG4gICAgaGFzRG9tTFQgPSBoYXNEb21MVCB8fCBjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9J1xuICAgIGlmIChndCkge1xuICAgICAgaWYgKG5lZWREb21HVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21HVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21HVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21HVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21HVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPicgfHwgYy5vcGVyYXRvciA9PT0gJz49Jykge1xuICAgICAgICBoaWdoZXIgPSBoaWdoZXJHVChndCwgYywgb3B0aW9ucylcbiAgICAgICAgaWYgKGhpZ2hlciA9PT0gYyAmJiBoaWdoZXIgIT09IGd0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3Qub3BlcmF0b3IgPT09ICc+PScgJiYgIWMudGVzdChndC5zZW12ZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobHQpIHtcbiAgICAgIGlmIChuZWVkRG9tTFRQcmUpIHtcbiAgICAgICAgaWYgKGMuc2VtdmVyLnByZXJlbGVhc2UgJiYgYy5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLm1ham9yID09PSBuZWVkRG9tTFRQcmUubWFqb3IgJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLm1pbm9yID09PSBuZWVkRG9tTFRQcmUubWlub3IgJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLnBhdGNoID09PSBuZWVkRG9tTFRQcmUucGF0Y2gpIHtcbiAgICAgICAgICBuZWVkRG9tTFRQcmUgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYy5vcGVyYXRvciA9PT0gJzwnIHx8IGMub3BlcmF0b3IgPT09ICc8PScpIHtcbiAgICAgICAgbG93ZXIgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgICAgICBpZiAobG93ZXIgPT09IGMgJiYgbG93ZXIgIT09IGx0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobHQub3BlcmF0b3IgPT09ICc8PScgJiYgIWMudGVzdChsdC5zZW12ZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWMub3BlcmF0b3IgJiYgKGx0IHx8IGd0KSAmJiBndGx0Q29tcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlcmUgd2FzIGEgPCBvciA+LCBhbmQgbm90aGluZyBpbiB0aGUgZG9tLCB0aGVuIG11c3QgYmUgZmFsc2VcbiAgLy8gVU5MRVNTIGl0IHdhcyBsaW1pdGVkIGJ5IGFub3RoZXIgcmFuZ2UgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi5cbiAgLy8gRWcsID4xLjAuMCA8MS4wLjEgaXMgc3RpbGwgYSBzdWJzZXQgb2YgPDIuMC4wXG4gIGlmIChndCAmJiBoYXNEb21MVCAmJiAhbHQgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChsdCAmJiBoYXNEb21HVCAmJiAhZ3QgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIHdlIG5lZWRlZCBhIHByZXJlbGVhc2UgcmFuZ2UgaW4gYSBzcGVjaWZpYyB0dXBsZSwgYnV0IGRpZG4ndCBnZXQgb25lXG4gIC8vIHRoZW4gdGhpcyBpc24ndCBhIHN1YnNldC4gIGVnID49MS4yLjMtcHJlIGlzIG5vdCBhIHN1YnNldCBvZiA+PTEuMC4wLFxuICAvLyBiZWNhdXNlIGl0IGluY2x1ZGVzIHByZXJlbGVhc2VzIGluIHRoZSAxLjIuMyB0dXBsZVxuICBpZiAobmVlZERvbUdUUHJlIHx8IG5lZWREb21MVFByZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gPj0xLjIuMyBpcyBsb3dlciB0aGFuID4xLjIuM1xuY29uc3QgaGlnaGVyR1QgPSAoYSwgYiwgb3B0aW9ucykgPT4ge1xuICBpZiAoIWEpIHtcbiAgICByZXR1cm4gYlxuICB9XG4gIGNvbnN0IGNvbXAgPSBjb21wYXJlKGEuc2VtdmVyLCBiLnNlbXZlciwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXAgPiAwID8gYVxuICAgIDogY29tcCA8IDAgPyBiXG4gICAgOiBiLm9wZXJhdG9yID09PSAnPicgJiYgYS5vcGVyYXRvciA9PT0gJz49JyA/IGJcbiAgICA6IGFcbn1cblxuLy8gPD0xLjIuMyBpcyBoaWdoZXIgdGhhbiA8MS4yLjNcbmNvbnN0IGxvd2VyTFQgPSAoYSwgYiwgb3B0aW9ucykgPT4ge1xuICBpZiAoIWEpIHtcbiAgICByZXR1cm4gYlxuICB9XG4gIGNvbnN0IGNvbXAgPSBjb21wYXJlKGEuc2VtdmVyLCBiLnNlbXZlciwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXAgPCAwID8gYVxuICAgIDogY29tcCA+IDAgPyBiXG4gICAgOiBiLm9wZXJhdG9yID09PSAnPCcgJiYgYS5vcGVyYXRvciA9PT0gJzw9JyA/IGJcbiAgICA6IGFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdWJzZXRcbiIsICIndXNlIHN0cmljdCdcblxuLy8ganVzdCBwcmUtbG9hZCBhbGwgdGhlIHN0dWZmIHRoYXQgaW5kZXguanMgbGF6aWx5IGV4cG9ydHNcbmNvbnN0IGludGVybmFsUmUgPSByZXF1aXJlKCcuL2ludGVybmFsL3JlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29uc3RhbnRzJylcbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgaWRlbnRpZmllcnMgPSByZXF1aXJlKCcuL2ludGVybmFsL2lkZW50aWZpZXJzJylcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcGFyc2UnKVxuY29uc3QgdmFsaWQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy92YWxpZCcpXG5jb25zdCBjbGVhbiA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NsZWFuJylcbmNvbnN0IGluYyA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2luYycpXG5jb25zdCBkaWZmID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZGlmZicpXG5jb25zdCBtYWpvciA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL21ham9yJylcbmNvbnN0IG1pbm9yID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbWlub3InKVxuY29uc3QgcGF0Y2ggPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wYXRjaCcpXG5jb25zdCBwcmVyZWxlYXNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcHJlcmVsZWFzZScpXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZScpXG5jb25zdCByY29tcGFyZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jjb21wYXJlJylcbmNvbnN0IGNvbXBhcmVMb29zZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NvbXBhcmUtbG9vc2UnKVxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc29ydCcpXG5jb25zdCByc29ydCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jzb3J0JylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZ3QnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBlcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2VxJylcbmNvbnN0IG5lcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL25lcScpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9ndGUnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGNtcCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NtcCcpXG5jb25zdCBjb2VyY2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb2VyY2UnKVxuY29uc3QgdHJ1bmNhdGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy90cnVuY2F0ZScpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jbGFzc2VzL2NvbXBhcmF0b3InKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc2F0aXNmaWVzJylcbmNvbnN0IHRvQ29tcGFyYXRvcnMgPSByZXF1aXJlKCcuL3Jhbmdlcy90by1jb21wYXJhdG9ycycpXG5jb25zdCBtYXhTYXRpc2Z5aW5nID0gcmVxdWlyZSgnLi9yYW5nZXMvbWF4LXNhdGlzZnlpbmcnKVxuY29uc3QgbWluU2F0aXNmeWluZyA9IHJlcXVpcmUoJy4vcmFuZ2VzL21pbi1zYXRpc2Z5aW5nJylcbmNvbnN0IG1pblZlcnNpb24gPSByZXF1aXJlKCcuL3Jhbmdlcy9taW4tdmVyc2lvbicpXG5jb25zdCB2YWxpZFJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvdmFsaWQnKVxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL291dHNpZGUnKVxuY29uc3QgZ3RyID0gcmVxdWlyZSgnLi9yYW5nZXMvZ3RyJylcbmNvbnN0IGx0ciA9IHJlcXVpcmUoJy4vcmFuZ2VzL2x0cicpXG5jb25zdCBpbnRlcnNlY3RzID0gcmVxdWlyZSgnLi9yYW5nZXMvaW50ZXJzZWN0cycpXG5jb25zdCBzaW1wbGlmeVJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvc2ltcGxpZnknKVxuY29uc3Qgc3Vic2V0ID0gcmVxdWlyZSgnLi9yYW5nZXMvc3Vic2V0Jylcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZSxcbiAgdmFsaWQsXG4gIGNsZWFuLFxuICBpbmMsXG4gIGRpZmYsXG4gIG1ham9yLFxuICBtaW5vcixcbiAgcGF0Y2gsXG4gIHByZXJlbGVhc2UsXG4gIGNvbXBhcmUsXG4gIHJjb21wYXJlLFxuICBjb21wYXJlTG9vc2UsXG4gIGNvbXBhcmVCdWlsZCxcbiAgc29ydCxcbiAgcnNvcnQsXG4gIGd0LFxuICBsdCxcbiAgZXEsXG4gIG5lcSxcbiAgZ3RlLFxuICBsdGUsXG4gIGNtcCxcbiAgY29lcmNlLFxuICB0cnVuY2F0ZSxcbiAgQ29tcGFyYXRvcixcbiAgUmFuZ2UsXG4gIHNhdGlzZmllcyxcbiAgdG9Db21wYXJhdG9ycyxcbiAgbWF4U2F0aXNmeWluZyxcbiAgbWluU2F0aXNmeWluZyxcbiAgbWluVmVyc2lvbixcbiAgdmFsaWRSYW5nZSxcbiAgb3V0c2lkZSxcbiAgZ3RyLFxuICBsdHIsXG4gIGludGVyc2VjdHMsXG4gIHNpbXBsaWZ5UmFuZ2UsXG4gIHN1YnNldCxcbiAgU2VtVmVyLFxuICByZTogaW50ZXJuYWxSZS5yZSxcbiAgc3JjOiBpbnRlcm5hbFJlLnNyYyxcbiAgdG9rZW5zOiBpbnRlcm5hbFJlLnQsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT046IGNvbnN0YW50cy5TRU1WRVJfU1BFQ19WRVJTSU9OLFxuICBSRUxFQVNFX1RZUEVTOiBjb25zdGFudHMuUkVMRUFTRV9UWVBFUyxcbiAgY29tcGFyZUlkZW50aWZpZXJzOiBpZGVudGlmaWVycy5jb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnM6IGlkZW50aWZpZXJzLnJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjYgVGhlIHpiIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbiAqL1xuXG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ0BhY3Rpb25zL2NvcmUnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ0BhY3Rpb25zL2V4ZWMnO1xuaW1wb3J0IHsgZ2V0T2N0b2tpdCB9IGZyb20gJ0BhY3Rpb25zL2dpdGh1Yic7XG5pbXBvcnQgeyBkb3dubG9hZFRvb2wsIGV4dHJhY3RUYXIsIGV4dHJhY3RaaXAgfSBmcm9tICdAYWN0aW9ucy90b29sLWNhY2hlJztcblxuaW50ZXJmYWNlIFJlbGVhc2Uge1xuICB0YWdOYW1lOiBzdHJpbmc7XG4gIHJlbGVhc2VBc3NldHM6IFJlbGVhc2VBc3NldENvbm5lY3Rpb247XG59XG5cbmludGVyZmFjZSBSZWxlYXNlQXNzZXRDb25uZWN0aW9uIHtcbiAgbm9kZXM6IFJlbGVhc2VBc3NldFtdO1xufVxuXG5pbnRlcmZhY2UgUmVsZWFzZUFzc2V0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkb3dubG9hZFVybDogc3RyaW5nO1xufVxuXG5jb25zdCByZWxlYXNlRnJhZ21lbnQgPVxuICBgXG4gICAgZnJhZ21lbnQgcmVsZWFzZUZpZWxkcyBvbiBSZWxlYXNlIHtcbiAgICAgIHRhZ05hbWVcbiAgICAgIHJlbGVhc2VBc3NldHMoZmlyc3Q6IDUwKSB7XG4gICAgICAgIG5vZGVzIHtcbiAgICAgICAgICBuYW1lXG4gICAgICAgICAgZG93bmxvYWRVcmxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgYDtcblxuKGFzeW5jICgpID0+IHtcbiAgY29uc3Qgb2N0b2tpdCA9IGdldE9jdG9raXQoJycpO1xuXG4gIGNvbnN0IHZlcnNpb24gPSBjb3JlLmdldElucHV0KCd6Yi12ZXJzaW9uJyk7XG4gIGNvbnN0IGdyYXBocWxSZXF1ZXN0ID1cbiAgICB2ZXJzaW9uID9cbiAgICB7XG4gICAgICBxdWVyeTpcbiAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5IHJlbGVhc2VBc3NldHNGb3JWZXJzaW9uKCR0YWdOYW1lOiBTdHJpbmchKSB7XG4gICAgICAgICAgICByZXBvc2l0b3J5KG93bmVyOiBcIjI1NmxpZ2h0c1wiLCByZXBvOiBcInpiXCIpIHtcbiAgICAgICAgICAgICAgcmVsZWFzZSh0YWdOYW1lOiAkdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIC4uLnJlbGVhc2VGaWVsZHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICR7cmVsZWFzZUZyYWdtZW50fVxuICAgICAgICBgLFxuICAgICAgdGFnTmFtZTogJ3YnICsgdmVyc2lvbixcbiAgICB9IDpcbiAgICB7XG4gICAgICBxdWVyeTpcbiAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5IHJlbGVhc2VBc3NldHNGb3JMYXRlc3Qge1xuICAgICAgICAgICAgcmVwb3NpdG9yeShvd25lcjogXCIyNTZsaWdodHNcIiwgcmVwbzogXCJ6YlwiKSB7XG4gICAgICAgICAgICAgIHJlbGVhc2U6IGxhdGVzdFJlbGVhc2Uge1xuICAgICAgICAgICAgICAgIC4uLnJlbGVhc2VGaWVsZHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICR7cmVsZWFzZUZyYWdtZW50fVxuICAgICAgICBgLFxuICAgIH07XG4gIGNvbnN0IGdyYXBocWxSZXNwb25zZSA9IGF3YWl0IG9jdG9raXQuZ3JhcGhxbDx7XG4gICAgcmVwb3NpdG9yeToge1xuICAgICAgcmVsZWFzZTogUmVsZWFzZSB8IG51bGw7XG4gICAgfVxuICB9PihncmFwaHFsUmVxdWVzdCk7XG4gIGNvbnN0IHJlbGVhc2UgPSBncmFwaHFsUmVzcG9uc2UucmVwb3NpdG9yeS5yZWxlYXNlO1xuICBjb25zdCByZWxlYXNlQXNzZXRzID0gcmVsZWFzZT8ucmVsZWFzZUFzc2V0cz8ubm9kZXMgfHwgW107XG5cbiAgbGV0IGFzc2V0OiBSZWxlYXNlQXNzZXQgfCB1bmRlZmluZWQ7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyAmJiBwcm9jZXNzLmFyY2ggPT09ICdhcm02NCcpIHtcbiAgICBhc3NldCA9IHJlbGVhc2VBc3NldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUuaW5jbHVkZXMoJ2FhcmNoNjQtYXBwbGUtbWFjb3MnKSlcbiAgfSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnICYmIHByb2Nlc3MuYXJjaCA9PT0gJ3g2NCcpIHtcbiAgICBhc3NldCA9IHJlbGVhc2VBc3NldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUuaW5jbHVkZXMoJ3g4Nl82NC11bmtub3duLWxpbnV4JykpXG4gIH1cbiAgaWYgKCFhc3NldCkge1xuICAgIGNvcmUuc2V0RmFpbGVkKGBObyBkb3dubG9hZCBmb3VuZCBmb3IgJHtwcm9jZXNzLmFyY2h9LSR7cHJvY2Vzcy5wbGF0Zm9ybX0gdmVyc2lvbiAke3JlbGVhc2U/LnRhZ05hbWUgfHwgdmVyc2lvbn1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB6YkFyY2hpdmVQYXRoID0gYXdhaXQgZG93bmxvYWRUb29sKGFzc2V0LmRvd25sb2FkVXJsKTtcbiAgY29uc3QgemJFeHRyYWN0ZWRGb2xkZXJQYXRoID0gYXNzZXQuZG93bmxvYWRVcmwuZW5kc1dpdGgoJy56aXAnKSA/XG4gICAgYXdhaXQgZXh0cmFjdFppcCh6YkFyY2hpdmVQYXRoKSA6XG4gICAgYXdhaXQgZXh0cmFjdFRhcih6YkFyY2hpdmVQYXRoKTtcbiAgYXdhaXQgZXhlYyhwYXRoLmpvaW4oemJFeHRyYWN0ZWRGb2xkZXJQYXRoLCAnaW5zdGFsbCcpLCBbJy0tc2luZ2xlLXVzZXInLCAnLS1uby1zeXN0ZW1kJywgJy0tbm8tbGF1bmNoZCddKTtcbn0pKCk7XG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke1xuICAgICAgcHJvY2Vzcy5hcmNoXG4gICAgfSlgO1xuICB9XG5cbiAgcmV0dXJuIFwiPGVudmlyb25tZW50IHVuZGV0ZWN0YWJsZT5cIjtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKChjYWxsYmFjaywgbmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKChtZXRob2QsIHJlZ2lzdGVyZWQpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKHN0YXRlLCBraW5kLCBuYW1lLCBob29rKSB7XG4gIGNvbnN0IG9yaWcgPSBob29rO1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgc3RhdGUucmVnaXN0cnlbbmFtZV0gPSBbXTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImJlZm9yZVwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihvcmlnLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYWZ0ZXJcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbigocmVzdWx0XykgPT4ge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF87XG4gICAgICAgICAgcmV0dXJuIG9yaWcocmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiBvcmlnKGVycm9yLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnB1c2goe1xuICAgIGhvb2s6IGhvb2ssXG4gICAgb3JpZzogb3JpZyxcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gc3RhdGUucmVnaXN0cnlbbmFtZV1cbiAgICAubWFwKChyZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5vcmlnO1xuICAgIH0pXG4gICAgLmluZGV4T2YobWV0aG9kKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9saWIvcmVnaXN0ZXIuanNcIjtcbmltcG9ydCB7IGFkZEhvb2sgfSBmcm9tIFwiLi9saWIvYWRkLmpzXCI7XG5pbXBvcnQgeyByZW1vdmVIb29rIH0gZnJvbSBcIi4vbGliL3JlbW92ZS5qc1wiO1xuXG4vLyBiaW5kIHdpdGggYXJyYXkgb2YgYXJndW1lbnRzOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjE3OTI5MTNcbmNvbnN0IGJpbmQgPSBGdW5jdGlvbi5iaW5kO1xuY29uc3QgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgY29uc3QgcmVtb3ZlSG9va1JlZiA9IGJpbmRhYmxlKHJlbW92ZUhvb2ssIG51bGwpLmFwcGx5KFxuICAgIG51bGwsXG4gICAgbmFtZSA/IFtzdGF0ZSwgbmFtZV0gOiBbc3RhdGVdXG4gICk7XG4gIGhvb2suYXBpID0geyByZW1vdmU6IHJlbW92ZUhvb2tSZWYgfTtcbiAgaG9vay5yZW1vdmUgPSByZW1vdmVIb29rUmVmO1xuICBbXCJiZWZvcmVcIiwgXCJlcnJvclwiLCBcImFmdGVyXCIsIFwid3JhcFwiXS5mb3JFYWNoKChraW5kKSA9PiB7XG4gICAgY29uc3QgYXJncyA9IG5hbWUgPyBbc3RhdGUsIGtpbmQsIG5hbWVdIDogW3N0YXRlLCBraW5kXTtcbiAgICBob29rW2tpbmRdID0gaG9vay5hcGlba2luZF0gPSBiaW5kYWJsZShhZGRIb29rLCBudWxsKS5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFNpbmd1bGFyKCkge1xuICBjb25zdCBzaW5ndWxhckhvb2tOYW1lID0gU3ltYm9sKFwiU2luZ3VsYXJcIik7XG4gIGNvbnN0IHNpbmd1bGFySG9va1N0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcbiAgY29uc3Qgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24oKSB7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcblxuICBjb25zdCBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IFNpbmd1bGFyLCBDb2xsZWN0aW9uIH07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbnZhciBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIlxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9sb3dlcmNhc2Uta2V5cy5qc1xuZnVuY3Rpb24gbG93ZXJjYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbWVyZ2UtZGVlcC5qc1xuZnVuY3Rpb24gbWVyZ2VEZWVwKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9uc1trZXldKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGRlZmF1bHRzKSkgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICAgIGVsc2UgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9yZW1vdmUtdW5kZWZpbmVkLXByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9tZXJnZS5qc1xuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7IG1ldGhvZCwgdXJsIH0gOiB7IHVybDogbWV0aG9kIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH1cbiAgb3B0aW9ucy5oZWFkZXJzID0gbG93ZXJjYXNlS2V5cyhvcHRpb25zLmhlYWRlcnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMuaGVhZGVycyk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdHMgfHwge30sIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy51cmwgPT09IFwiL2dyYXBocWxcIikge1xuICAgIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKFxuICAgICAgICAocHJldmlldykgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpXG4gICAgICApLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gICAgfVxuICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gKG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzIHx8IFtdKS5tYXAoKHByZXZpZXcpID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnM7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2FkZC1xdWVyeS1wYXJhbWV0ZXJzLmpzXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHJldHVybiB1cmwgKyBzZXBhcmF0b3IgKyBuYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyc1tuYW1lXSl9YDtcbiAgfSkuam9pbihcIiZcIik7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2V4dHJhY3QtdXJsLXZhcmlhYmxlLW5hbWVzLmpzXG52YXIgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXnt9fV0rXFx9L2c7XG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC8oPzpeXFxXKyl8KD86KD88IVxcVylcXFcrJCkvZywgXCJcIikuc3BsaXQoLywvKTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXMubWFwKHJlbW92ZU5vbkNoYXJzKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL29taXQuanNcbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzVG9PbWl0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgX19wcm90b19fOiBudWxsIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICBpZiAoa2V5c1RvT21pdC5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC91cmwtdGVtcGxhdGUuanNcbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24ocGFydCkge1xuICAgIGlmICghLyVbMC05QS1GYS1mXS8udGVzdChwYXJ0KSkge1xuICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KS5yZXBsYWNlKC8lNUIvZywgXCJbXCIpLnJlcGxhY2UoLyU1RC9nLCBcIl1cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24oYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdm9pZCAwICYmIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIGtleSwgbW9kaWZpZXIpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLCByZXN1bHQgPSBbXTtcbiAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC8oPzwhW1xcdy1dKVtcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5leHBvcnQge1xuICBlbmRwb2ludFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IGVuZHBvaW50IH0gZnJvbSBcIkBvY3Rva2l0L2VuZHBvaW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMTAuMC4xMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciBkZWZhdWx0c19kZWZhdWx0ID0ge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSBcImNvbnRlbnQtdHlwZVwiO1xuaW1wb3J0IHsgSlNPTlBhcnNlLCBKU09OU3RyaW5naWZ5IH0gZnJvbSBcImpzb24td2l0aC1iaWdpbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG52YXIgbm9vcCA9ICgpID0+IFwiXCI7XG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoO1xuICBpZiAoIWZldGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJmZXRjaCBpcyBub3Qgc2V0LiBQbGVhc2UgcGFzcyBhIGZldGNoIGltcGxlbWVudGF0aW9uIGFzIG5ldyBPY3Rva2l0KHsgcmVxdWVzdDogeyBmZXRjaCB9fSkuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvb2N0b2tpdC5qcy8jZmV0Y2gtbWlzc2luZ1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5sb2cgfHwgY29uc29sZTtcbiAgY29uc3QgcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ICE9PSBmYWxzZTtcbiAgY29uc3QgYm9keSA9IGlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA/IEpTT05TdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSkgOiByZXF1ZXN0T3B0aW9ucy5ib2R5O1xuICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtcbiAgICAgIG5hbWUsXG4gICAgICBTdHJpbmcodmFsdWUpXG4gICAgXSlcbiAgKTtcbiAgbGV0IGZldGNoUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgZmV0Y2hSZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgICAgbWV0aG9kOiByZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgICBib2R5LFxuICAgICAgcmVkaXJlY3Q6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnJlZGlyZWN0LFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBzaWduYWw6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnNpZ25hbCxcbiAgICAgIC8vIGR1cGxleCBtdXN0IGJlIHNldCBpZiByZXF1ZXN0LmJvZHkgaXMgUmVhZGFibGVTdHJlYW0gb3IgQXN5bmMgSXRlcmFibGVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgICAgLi4ucmVxdWVzdE9wdGlvbnMuYm9keSAmJiB7IGR1cGxleDogXCJoYWxmXCIgfVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxldCBtZXNzYWdlID0gXCJVbmtub3duIEVycm9yXCI7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICBlcnJvci5zdGF0dXMgPSA1MDA7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2UubWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihtZXNzYWdlLCA1MDAsIHtcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gICAgcmVxdWVzdEVycm9yLmNhdXNlID0gZXJyb3I7XG4gICAgdGhyb3cgcmVxdWVzdEVycm9yO1xuICB9XG4gIGNvbnN0IHN0YXR1cyA9IGZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICBjb25zdCB1cmwgPSBmZXRjaFJlc3BvbnNlLnVybDtcbiAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGZldGNoUmVzcG9uc2UuaGVhZGVycykge1xuICAgIHJlc3BvbnNlSGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cbiAgY29uc3Qgb2N0b2tpdFJlc3BvbnNlID0ge1xuICAgIHVybCxcbiAgICBzdGF0dXMsXG4gICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgIGRhdGE6IFwiXCJcbiAgfTtcbiAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiByZXNwb25zZUhlYWRlcnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gcmVzcG9uc2VIZWFkZXJzLmxpbmsgJiYgcmVzcG9uc2VIZWFkZXJzLmxpbmsubWF0Y2goLzwoW148Pl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgbG9nLndhcm4oXG4gICAgICBgW0BvY3Rva2l0L3JlcXVlc3RdIFwiJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cmVxdWVzdE9wdGlvbnMudXJsfVwiIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIG9uICR7cmVzcG9uc2VIZWFkZXJzLnN1bnNldH0ke2RlcHJlY2F0aW9uTGluayA/IGAuIFNlZSAke2RlcHJlY2F0aW9uTGlua31gIDogXCJcIn1gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSAyMDQgfHwgc3RhdHVzID09PSAyMDUpIHtcbiAgICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xuICB9XG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihmZXRjaFJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMzA0KSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihcIk5vdCBtb2RpZmllZFwiLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcih0b0Vycm9yTWVzc2FnZShvY3Rva2l0UmVzcG9uc2UuZGF0YSksIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPyBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSkgOiBmZXRjaFJlc3BvbnNlLmJvZHk7XG4gIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKCFjb250ZW50VHlwZSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkuY2F0Y2gobm9vcCk7XG4gIH1cbiAgY29uc3QgbWltZXR5cGUgPSBwYXJzZShjb250ZW50VHlwZSk7XG4gIGlmIChpc0pTT05SZXNwb25zZShtaW1ldHlwZSkpIHtcbiAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICByZXR1cm4gSlNPTlBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbWV0eXBlLnR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpIHx8IG1pbWV0eXBlLnBhcmFtZXRlcnMuY2hhcnNldD8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaChub29wKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS5jYXRjaChcbiAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xuICAgICAgKCkgPT4gbmV3IEFycmF5QnVmZmVyKDApXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNKU09OUmVzcG9uc2UobWltZXR5cGUpIHtcbiAgcmV0dXJuIG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiIHx8IG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vc2NpbStqc29uXCI7XG59XG5mdW5jdGlvbiB0b0Vycm9yTWVzc2FnZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gXCJVbmtub3duIGVycm9yXCI7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIGRhdGEgIT09IG51bGwgJiYgXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGNvbnN0IG9iamVjdERhdGEgPSBkYXRhO1xuICAgIGNvbnN0IHN1ZmZpeCA9IFwiZG9jdW1lbnRhdGlvbl91cmxcIiBpbiBvYmplY3REYXRhID8gYCAtICR7b2JqZWN0RGF0YS5kb2N1bWVudGF0aW9uX3VybH1gIDogXCJcIjtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmplY3REYXRhLmVycm9ycykgPyBgJHtvYmplY3REYXRhLm1lc3NhZ2V9OiAke29iamVjdERhdGEuZXJyb3JzLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gIDogYCR7b2JqZWN0RGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LCBkZWZhdWx0c19kZWZhdWx0KTtcbmV4cG9ydCB7XG4gIHJlcXVlc3Rcbn07XG4vKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cbi8qIHY4IGlnbm9yZSBlbHNlIC0tIEBwcmVzZXJ2ZSAqL1xuIiwgImNvbnN0IGludFJlZ2V4ID0gL14tP1xcZCskLztcbmNvbnN0IG5vaXNlVmFsdWUgPSAvXi0/XFxkK24rJC87IC8vIE5vaXNlIC0gc3RyaW5ncyB0aGF0IG1hdGNoIHRoZSBjdXN0b20gZm9ybWF0IGJlZm9yZSBiZWluZyBjb252ZXJ0ZWQgdG8gaXRcbmNvbnN0IG9yaWdpbmFsU3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnk7XG5jb25zdCBvcmlnaW5hbFBhcnNlID0gSlNPTi5wYXJzZTtcbmNvbnN0IGN1c3RvbUZvcm1hdCA9IC9eLT9cXGQrbiQvO1xuXG5jb25zdCBiaWdJbnRzU3RyaW5naWZ5ID0gLyhbXFxbOl0pP1wiKC0/XFxkKyluXCIoJHxcXHMqWyxcXH1cXF1dKS9nO1xuY29uc3Qgbm9pc2VTdHJpbmdpZnkgPSAvKFtcXFs6XSk/KFwiLT9cXGQrbispbihcIiR8XCJcXHMqWyxcXH1cXF1dKS9nO1xuXG4vKipcbiAqIEB0eXBlZGVmIHsodGhpczogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSkgPT4gYW55fSBSZXBsYWNlclxuICogQHR5cGVkZWYgeyhrZXk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSwgY29udGV4dD86IHsgc291cmNlOiBzdHJpbmcgfSkgPT4gYW55fSBSZXZpdmVyXG4gKi9cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyB1bnN0cmluZ2lmaWFibGUgYWNjb3JkaW5nIHRvIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSBydWxlcy5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIGEgZnVuY3Rpb24sIG9yIGEgc3ltYm9sLlxuICovXG5jb25zdCBpc1Vuc3RyaW5naWZpYWJsZSA9ICh2YWwpID0+XG4gIHZhbCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgdmFsID09PSBcInN5bWJvbFwiO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgbmF0aXZlIEpTT04ucmF3SlNPTiBvYmplY3QgKE5vZGUuanMgMjIrKS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIFJhd0pTT04gaW5zdGFuY2UuXG4gKi9cbmNvbnN0IGlzUmF3SlNPTiA9ICh2YWwpID0+XG4gIHZhbCAhPT0gbnVsbCAmJlxuICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiICYmXG4gIHZhbC5jb25zdHJ1Y3RvciAmJlxuICB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gXCJSYXdKU09OXCI7XG5cbi8qKlxuICogSXRlcmF0aXZlbHkgY29udmVydHMgYSBKUyB2YWx1ZSB0byBhIEpTT04gc3RyaW5nLlxuICogVXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gdGhlIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSBoaXRzIHRoZSBNYXhpbXVtIENhbGwgU3RhY2sgc2l6ZS5cbiAqIEZ1bGx5IGNvbXBsaWFudCB3aXRoIEpTT04gZm9ybWF0dGluZyAoc3BhY2UpLCByZXBsYWNlcnMsIGFuZCB0b0pTT04gYmVoYXZpb3JzLlxuICpcbiAqIEBwYXJhbSB7YW55fSByb290VmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeS5cbiAqIEBwYXJhbSB7UmVwbGFjZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbH0gW3JlcGxhY2VyXSBVc2VyJ3MgY3VzdG9tIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IFtzcGFjZVBhcmFtXSBJbmRlbnRhdGlvbiBmb3IgcHJldHR5LXByaW50aW5nLlxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gVGhlIGdlbmVyYXRlZCBKU09OIHN0cmluZy5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5SXRlcmF0aXZlbHkgPSAocm9vdFZhbHVlLCByZXBsYWNlciwgc3BhY2VQYXJhbSkgPT4ge1xuICBsZXQgc3BhY2UgPSBcIlwiO1xuXG4gIGlmICh0eXBlb2Ygc3BhY2VQYXJhbSA9PT0gXCJudW1iZXJcIikge1xuICAgIHNwYWNlID0gXCIgXCIucmVwZWF0KE1hdGgubWluKDEwLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHNwYWNlUGFyYW0pKSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZVBhcmFtID09PSBcInN0cmluZ1wiKSB7XG4gICAgc3BhY2UgPSBzcGFjZVBhcmFtLnNsaWNlKDAsIDEwKTtcbiAgfVxuXG4gIGNvbnN0IGlzRnVuY3Rpb25SZXBsYWNlciA9IHR5cGVvZiByZXBsYWNlciA9PT0gXCJmdW5jdGlvblwiO1xuICBjb25zdCBwcm9wZXJ0eUxpc3QgPSBBcnJheS5pc0FycmF5KHJlcGxhY2VyKVxuICAgID8gbmV3IFNldChyZXBsYWNlci5tYXAoU3RyaW5nKSlcbiAgICA6IG51bGw7XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgdmFsdWUgZm9yIHN0cmluZ2lmaWNhdGlvbiBieSByZXNvbHZpbmcgdG9KU09OLCBoYW5kbGluZyBCaWdJbnRzLFxuICAgKiBhcHBseWluZyBjdXN0b20gcmVwbGFjZXJzLCBhbmQgdW53cmFwcGluZyBwcmltaXRpdmUgb2JqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R8QXJyYXl9IHBhcmVudCBUaGUgcGFyZW50IG9iamVjdCBvciBhcnJheSBob2xkaW5nIHRoZSB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgVGhlIHJhdyB2YWx1ZSB0byBwcm9jZXNzLlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgcHJvY2Vzc2VkIHZhbHVlIHJlYWR5IGZvciBzdHJpbmdpZmljYXRpb24uXG4gICAqL1xuICBjb25zdCBwcmVwYXJlVmFsID0gKHBhcmVudCwga2V5LCB2YWwpID0+IHtcbiAgICBjb25zdCBpc09iamVjdCA9IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiO1xuICAgIGNvbnN0IGhhc1RvSlNPTiA9IGlzT2JqZWN0ICYmIHR5cGVvZiB2YWwudG9KU09OID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICBpZiAoaGFzVG9KU09OKSB7XG4gICAgICB2YWwgPSB2YWwudG9KU09OKGtleSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOb2lzZSA9IHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgJiYgbm9pc2VWYWx1ZS50ZXN0KHZhbCk7XG5cbiAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIHZhbCArIFwiblwiO1xuXG4gICAgY29uc3QgaXNCaWdJbnQgPSB0eXBlb2YgdmFsID09PSBcImJpZ2ludFwiO1xuXG4gICAgaWYgKGlzQmlnSW50KSB7XG4gICAgICBjb25zdCBzdXBwb3J0c1Jhd0pTT04gPSBcInJhd0pTT05cIiBpbiBKU09OO1xuXG4gICAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSByZXR1cm4gSlNPTi5yYXdKU09OKHZhbC50b1N0cmluZygpKTtcblxuICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb25SZXBsYWNlcikge1xuICAgICAgdmFsID0gcmVwbGFjZXIuY2FsbChwYXJlbnQsIGtleSwgdmFsKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1Bvc3RSZXBsYWNlck9iamVjdCA9IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiO1xuXG4gICAgaWYgKGlzUG9zdFJlcGxhY2VyT2JqZWN0KSB7XG4gICAgICBjb25zdCBpc1ByaW1pdGl2ZVdyYXBwZXIgPVxuICAgICAgICB2YWwgaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgdmFsIGluc3RhbmNlb2YgU3RyaW5nIHx8XG4gICAgICAgIHZhbCBpbnN0YW5jZW9mIEJvb2xlYW47XG5cbiAgICAgIGlmIChpc1ByaW1pdGl2ZVdyYXBwZXIpIHtcbiAgICAgICAgdmFsID0gdmFsLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9O1xuXG4gIGNvbnN0IHJvb3RQcm9jZXNzZWQgPSBwcmVwYXJlVmFsKHsgXCJcIjogcm9vdFZhbHVlIH0sIFwiXCIsIHJvb3RWYWx1ZSk7XG5cbiAgaWYgKGlzVW5zdHJpbmdpZmlhYmxlKHJvb3RQcm9jZXNzZWQpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGlzUm9vdFByaW1pdGl2ZSA9XG4gICAgcm9vdFByb2Nlc3NlZCA9PT0gbnVsbCB8fCB0eXBlb2Ygcm9vdFByb2Nlc3NlZCAhPT0gXCJvYmplY3RcIjtcbiAgY29uc3QgaXNSb290TmF0aXZlUmF3SlNPTiA9IGlzUmF3SlNPTihyb290UHJvY2Vzc2VkKTtcblxuICBpZiAoaXNSb290UHJpbWl0aXZlIHx8IGlzUm9vdE5hdGl2ZVJhd0pTT04pIHtcbiAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmdpZnkocm9vdFByb2Nlc3NlZCk7XG4gIH1cblxuICBjb25zdCBjaHVua3MgPSBbXTtcbiAgbGV0IGxldmVsID0gMDtcblxuICBjb25zdCBzdGFjayA9IFtcbiAgICB7XG4gICAgICBwYXJlbnQ6IHsgXCJcIjogcm9vdFByb2Nlc3NlZCB9LFxuICAgICAga2V5OiBcIlwiLFxuICAgICAgdmFsOiByb290UHJvY2Vzc2VkLFxuICAgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheShyb290UHJvY2Vzc2VkKSxcbiAgICAgIGtleXM6IEFycmF5LmlzQXJyYXkocm9vdFByb2Nlc3NlZCkgPyBudWxsIDogT2JqZWN0LmtleXMocm9vdFByb2Nlc3NlZCksXG4gICAgICBpbmRleDogMCxcbiAgICAgIGZpcnN0OiB0cnVlLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KFtyb290UHJvY2Vzc2VkXSk7XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICBpZiAobm9kZS5pbmRleCA9PT0gMCkge1xuICAgICAgY2h1bmtzLnB1c2gobm9kZS5pc0FycmF5ID8gXCJbXCIgOiBcIntcIik7XG4gICAgICBsZXZlbCsrO1xuICAgIH1cblxuICAgIGxldCBpc0RvbmUgPSBmYWxzZTtcblxuICAgIGlmIChub2RlLmlzQXJyYXkpIHtcbiAgICAgIGlmIChub2RlLmluZGV4IDwgbm9kZS52YWwubGVuZ3RoKSB7XG4gICAgICAgIGlmICghbm9kZS5maXJzdCkgY2h1bmtzLnB1c2goXCIsXCIpO1xuXG4gICAgICAgIGlmIChzcGFjZSkgY2h1bmtzLnB1c2goXCJcXG5cIiArIHNwYWNlLnJlcGVhdChsZXZlbCkpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkUmF3ID0gbm9kZS52YWxbbm9kZS5pbmRleF07XG4gICAgICAgIGNvbnN0IGNoaWxkVmFsID0gcHJlcGFyZVZhbChub2RlLnZhbCwgU3RyaW5nKG5vZGUuaW5kZXgpLCBjaGlsZFJhdyk7XG5cbiAgICAgICAgaWYgKGlzVW5zdHJpbmdpZmlhYmxlKGNoaWxkVmFsKSkge1xuICAgICAgICAgIGNodW5rcy5wdXNoKFwibnVsbFwiKTtcbiAgICAgICAgICBub2RlLmZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzQ29tcGxleE9iamVjdCA9XG4gICAgICAgICAgICBjaGlsZFZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGRWYWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgICAgY29uc3QgaXNOYXRpdmVSYXcgPSBpc1Jhd0pTT04oY2hpbGRWYWwpO1xuXG4gICAgICAgICAgaWYgKGlzQ29tcGxleE9iamVjdCAmJiAhaXNOYXRpdmVSYXcpIHtcbiAgICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhjaGlsZFZhbCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKGNoaWxkVmFsKTtcblxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHBhcmVudDogbm9kZS52YWwsXG4gICAgICAgICAgICAgIGtleTogU3RyaW5nKG5vZGUuaW5kZXgpLFxuICAgICAgICAgICAgICB2YWw6IGNoaWxkVmFsLFxuICAgICAgICAgICAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKSxcbiAgICAgICAgICAgICAga2V5czogQXJyYXkuaXNBcnJheShjaGlsZFZhbCkgPyBudWxsIDogT2JqZWN0LmtleXMoY2hpbGRWYWwpLFxuICAgICAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAgICAgZmlyc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbm9kZS5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChvcmlnaW5hbFN0cmluZ2lmeShjaGlsZFZhbCkpO1xuICAgICAgICAgICAgbm9kZS5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNEb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKG5vZGUuaW5kZXggPCBub2RlLmtleXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGsgPSBub2RlLmtleXNbbm9kZS5pbmRleCsrXTtcblxuICAgICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0QnlBcnJheSA9IHByb3BlcnR5TGlzdCAmJiAhcHJvcGVydHlMaXN0LmhhcyhrKTtcblxuICAgICAgICBpZiAoaXNGaWx0ZXJlZE91dEJ5QXJyYXkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkUmF3ID0gbm9kZS52YWxba107XG4gICAgICAgIGNvbnN0IGNoaWxkVmFsID0gcHJlcGFyZVZhbChub2RlLnZhbCwgaywgY2hpbGRSYXcpO1xuXG4gICAgICAgIGlmIChpc1Vuc3RyaW5naWZpYWJsZShjaGlsZFZhbCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICghbm9kZS5maXJzdCkgY2h1bmtzLnB1c2goXCIsXCIpO1xuXG4gICAgICAgIGlmIChzcGFjZSkge1xuICAgICAgICAgIGNodW5rcy5wdXNoKFwiXFxuXCIgKyBzcGFjZS5yZXBlYXQobGV2ZWwpICsgb3JpZ2luYWxTdHJpbmdpZnkoaykgKyBcIjogXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rcy5wdXNoKG9yaWdpbmFsU3RyaW5naWZ5KGspICsgXCI6XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNDb21wbGV4T2JqZWN0ID1cbiAgICAgICAgICBjaGlsZFZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGRWYWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgIGNvbnN0IGlzTmF0aXZlUmF3ID0gaXNSYXdKU09OKGNoaWxkVmFsKTtcblxuICAgICAgICBpZiAoaXNDb21wbGV4T2JqZWN0ICYmICFpc05hdGl2ZVJhdykge1xuICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhjaGlsZFZhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZpc2l0ZWQuYWRkKGNoaWxkVmFsKTtcblxuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcGFyZW50OiBub2RlLnZhbCxcbiAgICAgICAgICAgIGtleTogayxcbiAgICAgICAgICAgIHZhbDogY2hpbGRWYWwsXG4gICAgICAgICAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKSxcbiAgICAgICAgICAgIGtleXM6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpID8gbnVsbCA6IE9iamVjdC5rZXlzKGNoaWxkVmFsKSxcbiAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgZmlyc3Q6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBub2RlLmZpcnN0ID0gZmFsc2U7XG5cbiAgICAgICAgICBicmVhazsgLy8gU3RvcCBjdXJyZW50IGxvb3AgbGV2ZWwgdG8gcHJvY2VzcyB0aGUgbmV3bHkgcHVzaGVkIHN0YWNrIG5vZGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaHVua3MucHVzaChvcmlnaW5hbFN0cmluZ2lmeShjaGlsZFZhbCkpO1xuICAgICAgICAgIG5vZGUuZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc05vZGVGdWxseVByb2Nlc3NlZCA9XG4gICAgICAgIG5vZGUuaW5kZXggPj0gbm9kZS5rZXlzLmxlbmd0aCAmJiBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9PT0gbm9kZTtcblxuICAgICAgaWYgKGlzTm9kZUZ1bGx5UHJvY2Vzc2VkKSB7XG4gICAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzRG9uZSkge1xuICAgICAgbGV2ZWwtLTtcblxuICAgICAgaWYgKCFub2RlLmZpcnN0ICYmIHNwYWNlKSBjaHVua3MucHVzaChcIlxcblwiICsgc3BhY2UucmVwZWF0KGxldmVsKSk7XG5cbiAgICAgIGNodW5rcy5wdXNoKG5vZGUuaXNBcnJheSA/IFwiXVwiIDogXCJ9XCIpO1xuICAgICAgdmlzaXRlZC5kZWxldGUobm9kZS52YWwpO1xuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNodW5rcy5qb2luKFwiXCIpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIEphdmFTY3JpcHQgdmFsdWUgdG8gYSBKU09OIHN0cmluZy5cbiAqXG4gKiBTdXBwb3J0cyBzZXJpYWxpemF0aW9uIG9mIEJpZ0ludCB2YWx1ZXMgdXNpbmcgdHdvIHN0cmF0ZWdpZXM6XG4gKiAxLiBDdXN0b20gZm9ybWF0IFwiMTIzblwiIFx1MjE5MiBcIjEyM1wiICh1bml2ZXJzYWwgZmFsbGJhY2spXG4gKiAyLiBOYXRpdmUgSlNPTi5yYXdKU09OKCkgKE5vZGUuanMgMjIrLCBmYXN0ZXN0KSB3aGVuIGF2YWlsYWJsZVxuICpcbiAqIEFsbCBvdGhlciB2YWx1ZXMgYXJlIHNlcmlhbGl6ZWQgZXhhY3RseSBsaWtlIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSgpLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBKU09OIHN0cmluZy5cbiAqIEBwYXJhbSB7UmVwbGFjZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbH0gW3JlcGxhY2VyXVxuICogQSBmdW5jdGlvbiB0aGF0IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN0cmluZ2lmaWNhdGlvbiBwcm9jZXNzLFxuICogb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy9udW1iZXJzIHRvIGluZGljYXRlIHByb3BlcnRpZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBbc3BhY2VdXG4gKiBBIHN0cmluZyBvciBudW1iZXIgdG8gc3BlY2lmeSBpbmRlbnRhdGlvbiBvciBwcmV0dHktcHJpbnRpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKi9cbmNvbnN0IEpTT05TdHJpbmdpZnkgPSAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN1cHBvcnRzUmF3SlNPTiA9IFwicmF3SlNPTlwiIGluIEpTT047XG5cbiAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmdpZnkoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAoa2V5LCB2YWwpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJiaWdpbnRcIikgcmV0dXJuIEpTT04ucmF3SlNPTih2YWwudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICBjb25zdCBoYXNGdW5jdGlvblJlcGxhY2VyID0gdHlwZW9mIHJlcGxhY2VyID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICAgICAgICBpZiAoaGFzRnVuY3Rpb25SZXBsYWNlcikgcmV0dXJuIHJlcGxhY2VyKGtleSwgdmFsKTtcblxuICAgICAgICAgIGNvbnN0IGlzS2V5SW5BcnJheVJlcGxhY2VyID1cbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVwbGFjZXIpICYmIHJlcGxhY2VyLmluY2x1ZGVzKGtleSk7XG5cbiAgICAgICAgICBpZiAoaXNLZXlJbkFycmF5UmVwbGFjZXIpIHJldHVybiB2YWw7XG5cbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBzcGFjZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG9yaWdpbmFsU3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpO1xuXG4gICAgY29uc3QgY29udmVydGVkVG9DdXN0b21KU09OID0gb3JpZ2luYWxTdHJpbmdpZnkoXG4gICAgICB2YWx1ZSxcbiAgICAgIChrZXksIHZhbCkgPT4ge1xuICAgICAgICBjb25zdCBpc05vaXNlID0gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiAmJiBub2lzZVZhbHVlLnRlc3QodmFsKTtcblxuICAgICAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7IC8vIE1hcmsgbm9pc2UgdmFsdWVzIHdpdGggYWRkaXRpb25hbCBcIm5cIiB0byBvZmZzZXQgdGhlIGRlbGV0aW9uIG9mIG9uZSBcIm5cIiBkdXJpbmcgdGhlIHByb2Nlc3NpbmdcblxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJiaWdpbnRcIikgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7XG5cbiAgICAgICAgY29uc3QgaGFzRnVuY3Rpb25SZXBsYWNlciA9IHR5cGVvZiByZXBsYWNlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICAgIGlmIChoYXNGdW5jdGlvblJlcGxhY2VyKSByZXR1cm4gcmVwbGFjZXIoa2V5LCB2YWwpO1xuXG4gICAgICAgIGNvbnN0IGlzS2V5SW5BcnJheVJlcGxhY2VyID1cbiAgICAgICAgICBBcnJheS5pc0FycmF5KHJlcGxhY2VyKSAmJiByZXBsYWNlci5pbmNsdWRlcyhrZXkpO1xuXG4gICAgICAgIGlmIChpc0tleUluQXJyYXlSZXBsYWNlcikgcmV0dXJuIHZhbDtcblxuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfSxcbiAgICAgIHNwYWNlLFxuICAgICk7XG5cbiAgICBjb25zdCBwcm9jZXNzZWRKU09OID0gY29udmVydGVkVG9DdXN0b21KU09OLnJlcGxhY2UoXG4gICAgICBiaWdJbnRzU3RyaW5naWZ5LFxuICAgICAgXCIkMSQyJDNcIixcbiAgICApOyAvLyBEZWxldGUgb25lIFwiblwiIG9mZiB0aGUgZW5kIG9mIGV2ZXJ5IEJpZ0ludCB2YWx1ZVxuXG4gICAgY29uc3QgZGVub2lzZWRKU09OID0gcHJvY2Vzc2VkSlNPTi5yZXBsYWNlKG5vaXNlU3RyaW5naWZ5LCBcIiQxJDIkM1wiKTsgLy8gUmVtb3ZlIG9uZSBcIm5cIiBvZmYgdGhlIGVuZCBvZiBldmVyeSBub2lzeSBzdHJpbmdcblxuICAgIHJldHVybiBkZW5vaXNlZEpTT047XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xuICAgICAgY29uc3QgY29udmVydGVkSlNPTiA9IHN0cmluZ2lmeUl0ZXJhdGl2ZWx5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpO1xuXG4gICAgICBpZiAoY29udmVydGVkSlNPTiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzdXBwb3J0c1Jhd0pTT04gPSBcInJhd0pTT05cIiBpbiBKU09OO1xuXG4gICAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSByZXR1cm4gY29udmVydGVkSlNPTjtcblxuICAgICAgY29uc3QgcHJvY2Vzc2VkSlNPTiA9IGNvbnZlcnRlZEpTT04ucmVwbGFjZShiaWdJbnRzU3RyaW5naWZ5LCBcIiQxJDIkM1wiKTtcblxuICAgICAgcmV0dXJuIHByb2Nlc3NlZEpTT04ucmVwbGFjZShub2lzZVN0cmluZ2lmeSwgXCIkMSQyJDNcIik7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGZlYXR1cmVDYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBEZXRlY3RzIGlmIHRoZSBjdXJyZW50IEpTT04ucGFyc2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgdGhlIGNvbnRleHQuc291cmNlIGZlYXR1cmUuXG4gKlxuICogVXNlcyB0b1N0cmluZygpIGZpbmdlcnByaW50aW5nIHRvIGNhY2hlIHJlc3VsdHMgYW5kIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHJ1bnRpbWVcbiAqIHJlcGxhY2VtZW50cyBvZiBKU09OLnBhcnNlIChwb2x5ZmlsbHMsIG1vY2tzLCBldGMuKS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBjb250ZXh0LnNvdXJjZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuY29uc3QgaXNDb250ZXh0U291cmNlU3VwcG9ydGVkID0gKCkgPT4ge1xuICBjb25zdCBwYXJzZUZpbmdlcnByaW50ID0gSlNPTi5wYXJzZS50b1N0cmluZygpO1xuXG4gIGlmIChmZWF0dXJlQ2FjaGUuaGFzKHBhcnNlRmluZ2VycHJpbnQpKSB7XG4gICAgcmV0dXJuIGZlYXR1cmVDYWNoZS5nZXQocGFyc2VGaW5nZXJwcmludCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoXG4gICAgICBcIjFcIixcbiAgICAgIChfLCBfXywgY29udGV4dCkgPT4gISFjb250ZXh0Py5zb3VyY2UgJiYgY29udGV4dC5zb3VyY2UgPT09IFwiMVwiLFxuICAgICk7XG4gICAgZmVhdHVyZUNhY2hlLnNldChwYXJzZUZpbmdlcnByaW50LCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCB7XG4gICAgZmVhdHVyZUNhY2hlLnNldChwYXJzZUZpbmdlcnByaW50LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogUmV2aXZlciBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGN1c3RvbS1mb3JtYXQgQmlnSW50IHN0cmluZ3MgYmFjayB0byBCaWdJbnQgdmFsdWVzLlxuICogQWxzbyBoYW5kbGVzIFwibm9pc2VcIiBzdHJpbmdzIHRoYXQgYWNjaWRlbnRhbGx5IG1hdGNoIHRoZSBCaWdJbnQgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkfSBrZXkgVGhlIG9iamVjdCBrZXkuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBiZWluZyBwYXJzZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIFBhcnNlIGNvbnRleHQgKGlmIHN1cHBvcnRlZCBieSBKU09OLnBhcnNlKS5cbiAqIEBwYXJhbSB7UmV2aXZlcn0gW3VzZXJSZXZpdmVyXSBVc2VyJ3MgY3VzdG9tIHJldml2ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7YW55fSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUuXG4gKi9cbmNvbnN0IGNvbnZlcnRNYXJrZWRCaWdJbnRzUmV2aXZlciA9IChrZXksIHZhbHVlLCBjb250ZXh0LCB1c2VyUmV2aXZlcikgPT4ge1xuICBjb25zdCBpc0N1c3RvbUZvcm1hdEJpZ0ludCA9XG4gICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIGN1c3RvbUZvcm1hdC50ZXN0KHZhbHVlKTtcblxuICBpZiAoaXNDdXN0b21Gb3JtYXRCaWdJbnQpIHJldHVybiBCaWdJbnQodmFsdWUuc2xpY2UoMCwgLTEpKTtcblxuICBjb25zdCBpc05vaXNlVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgbm9pc2VWYWx1ZS50ZXN0KHZhbHVlKTtcbiAgaWYgKGlzTm9pc2VWYWx1ZSkgcmV0dXJuIHZhbHVlLnNsaWNlKDAsIC0xKTtcblxuICBjb25zdCBoYXNVc2VyUmV2aXZlciA9IHR5cGVvZiB1c2VyUmV2aXZlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gIGlmICghaGFzVXNlclJldml2ZXIpIHJldHVybiB2YWx1ZTtcblxuICByZXR1cm4gdXNlclJldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIEZhc3QgSlNPTi5wYXJzZSBpbXBsZW1lbnRhdGlvbiAofjJ4IGZhc3RlciB0aGFuIGNsYXNzaWMgZmFsbGJhY2spLlxuICogVXNlcyBKU09OLnBhcnNlJ3MgY29udGV4dC5zb3VyY2UgZmVhdHVyZSB0byBkZXRlY3QgaW50ZWdlcnMgYW5kIGNvbnZlcnRcbiAqIGxhcmdlIG51bWJlcnMgZGlyZWN0bHkgdG8gQmlnSW50IHdpdGhvdXQgc3RyaW5nIG1hbmlwdWxhdGlvbi5cbiAqXG4gKiBEb2VzIG5vdCBzdXBwb3J0IGxlZ2FjeSBjdXN0b20gZm9ybWF0IGZyb20gdjEgb2YgdGhpcyBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IEpTT04gc3RyaW5nIHRvIHBhcnNlLlxuICogQHBhcmFtIHtSZXZpdmVyfSBbcmV2aXZlcl0gVHJhbnNmb3JtIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUuXG4gKiBAcmV0dXJucyB7YW55fSBQYXJzZWQgSmF2YVNjcmlwdCB2YWx1ZS5cbiAqL1xuY29uc3QgSlNPTlBhcnNlVjIgPSAodGV4dCwgcmV2aXZlcikgPT4ge1xuICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0LCAoa2V5LCB2YWx1ZSwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGlzTnVtYmVyID0gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlzT3V0T2ZCb3VuZHMgPVxuICAgICAgdmFsdWUgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCB2YWx1ZSA8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgIGNvbnN0IGlzQmlnTnVtYmVyID0gaXNOdW1iZXIgJiYgaXNPdXRPZkJvdW5kcztcbiAgICBjb25zdCBpc0ludCA9IGNvbnRleHQgJiYgaW50UmVnZXgudGVzdChjb250ZXh0LnNvdXJjZSk7XG4gICAgY29uc3QgaXNCaWdJbnQgPSBpc0JpZ051bWJlciAmJiBpc0ludDtcblxuICAgIGlmIChpc0JpZ0ludCkgcmV0dXJuIEJpZ0ludChjb250ZXh0LnNvdXJjZSk7XG5cbiAgICBjb25zdCBoYXNDdXN0b21SZXZpdmVyID0gdHlwZW9mIHJldml2ZXIgPT09IFwiZnVuY3Rpb25cIjtcblxuICAgIGlmICghaGFzQ3VzdG9tUmV2aXZlcikgcmV0dXJuIHZhbHVlO1xuXG4gICAgcmV0dXJuIHJldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuY29uc3QgTUFYX0lOVCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLnRvU3RyaW5nKCk7XG5jb25zdCBNQVhfRElHSVRTID0gTUFYX0lOVC5sZW5ndGg7XG5jb25zdCBzdHJpbmdzT3JMYXJnZU51bWJlcnMgPVxuICAvXCIoPzpcXFxcLnxbXlwiXSkqXCJ8LT8oMHxbMS05XVswLTldKikoXFwuWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8vZztcbmNvbnN0IG5vaXNlVmFsdWVXaXRoUXVvdGVzID0gL15cIi0/XFxkK24rXCIkLzsgLy8gTm9pc2UgLSBzdHJpbmdzIHRoYXQgbWF0Y2ggdGhlIGN1c3RvbSBmb3JtYXQgYmVmb3JlIGJlaW5nIGNvbnZlcnRlZCB0byBpdFxuXG4vKipcbiAqIEl0ZXJhdGl2ZWx5IHRyYXZlcnNlcyB0aGUgcGFyc2VkIG9iamVjdCBib3R0b20tdXAgKHBvc3Qtb3JkZXIpLFxuICogZW11bGF0aW5nIHRoZSBuYXRpdmUgSlNPTi5wYXJzZSByZXZpdmVyIGJlaGF2aW9yLlxuICogVGhpcyBhdm9pZHMgQ2FsbCBTdGFjayBvdmVyZmxvd3MgKFJhbmdlRXJyb3IpIG9uIGRlZXBseSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAqXG4gKiBAcGFyYW0ge2FueX0gcGFyc2VkIFRoZSBuYXRpdmVseSBwYXJzZWQgSlNPTiBvYmplY3QuXG4gKiBAcGFyYW0ge1Jldml2ZXJ9IFt1c2VyUmV2aXZlcl0gVXNlcidzIGN1c3RvbSByZXZpdmVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMge2FueX0gVGhlIGZ1bGx5IHByb2Nlc3NlZCBvYmplY3QuXG4gKi9cbmNvbnN0IGFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5ID0gKHBhcnNlZCwgdXNlclJldml2ZXIpID0+IHtcbiAgY29uc3Qgcm9vdEhvbGRlciA9IHsgXCJcIjogcGFyc2VkIH07XG4gIGNvbnN0IHN0YWNrID0gW3sgcGFyZW50OiByb290SG9sZGVyLCBrZXk6IFwiXCIsIHZpc2l0ZWQ6IGZhbHNlIH1dO1xuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKCFub2RlLnZpc2l0ZWQpIHtcbiAgICAgIG5vZGUudmlzaXRlZCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gbm9kZS5wYXJlbnRbbm9kZS5rZXldO1xuICAgICAgY29uc3QgaXNDb21wbGV4T2JqZWN0ID0gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xuXG4gICAgICBpZiAoaXNDb21wbGV4T2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGtleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHsgcGFyZW50OiB2YWx1ZSwga2V5OiBrZXlzW2ldLCB2aXNpdGVkOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHBhcmVudCwga2V5IH0gPSBub2RlO1xuICAgICAgbGV0IHZhbHVlID0gcGFyZW50W2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgaXNDdXN0b21Gb3JtYXRCaWdJbnQgPSBjdXN0b21Gb3JtYXQudGVzdCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGlzQ3VzdG9tRm9ybWF0QmlnSW50KSB7XG4gICAgICAgICAgdmFsdWUgPSBCaWdJbnQodmFsdWUuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpc05vaXNlID0gbm9pc2VWYWx1ZS50ZXN0KHZhbHVlKTtcblxuICAgICAgICAgIGlmIChpc05vaXNlKSB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNVc2VyUmV2aXZlciA9IHR5cGVvZiB1c2VyUmV2aXZlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICBpZiAoaGFzVXNlclJldml2ZXIpIHtcbiAgICAgICAgdmFsdWUgPSB1c2VyUmV2aXZlci5jYWxsKHBhcmVudCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRGVsZXRlZCA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0RlbGV0ZWQpIHtcbiAgICAgICAgZGVsZXRlIHBhcmVudFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3RIb2xkZXJbXCJcIl07XG59O1xuXG4vKipcbiAqIFByZS1wcm9jZXNzZXMgdGhlIEpTT04gc3RyaW5nIHRvIG1hcmsgbGFyZ2UgbnVtYmVycyB3aXRoIGFuICduJyBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHJhdyBKU09OIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzZXJpYWxpemVkIHN0cmluZyB3aXRoIG1hcmtlZCBCaWdJbnRzLlxuICovXG5jb25zdCBzZXJpYWxpemVCaWdJbnRzID0gKHRleHQpID0+IHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZShcbiAgICBzdHJpbmdzT3JMYXJnZU51bWJlcnMsXG4gICAgKG1hdGNoLCBkaWdpdHMsIGZyYWN0aW9uYWwsIGV4cG9uZW50aWFsKSA9PiB7XG4gICAgICBjb25zdCBpc1N0cmluZyA9IG1hdGNoWzBdID09PSAnXCInO1xuICAgICAgY29uc3QgaXNOb2lzZSA9IGlzU3RyaW5nICYmIG5vaXNlVmFsdWVXaXRoUXVvdGVzLnRlc3QobWF0Y2gpO1xuXG4gICAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIG1hdGNoLnN1YnN0cmluZygwLCBtYXRjaC5sZW5ndGggLSAxKSArICduXCInOyAvLyBNYXJrIG5vaXNlIHZhbHVlcyB3aXRoIGFkZGl0aW9uYWwgXCJuXCIgdG8gb2Zmc2V0IHRoZSBkZWxldGlvbiBvZiBvbmUgXCJuXCIgZHVyaW5nIHRoZSBwcm9jZXNzaW5nXG5cbiAgICAgIGNvbnN0IGhhc0ZyYWN0aW9uYWxPckV4cG9uZW50aWFsID0gZnJhY3Rpb25hbCB8fCBleHBvbmVudGlhbDtcblxuICAgICAgLy8gV2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMsIHdlIGNhbiBjb3JyZWN0bHkgdXNlIGxleGljb2dyYXBoaWNhbCBjb21wYXJpc29uIHRvIGRvIGEgbnVtZXJpYyBjb21wYXJpc29uXG4gICAgICBjb25zdCBpc0xlc3NUaGFuTWF4U2FmZUludCA9XG4gICAgICAgIGRpZ2l0cyAmJlxuICAgICAgICAoZGlnaXRzLmxlbmd0aCA8IE1BWF9ESUdJVFMgfHxcbiAgICAgICAgICAoZGlnaXRzLmxlbmd0aCA9PT0gTUFYX0RJR0lUUyAmJiBkaWdpdHMgPD0gTUFYX0lOVCkpO1xuXG4gICAgICBjb25zdCBpc1N0YW5kYXJkVmFsdWUgPVxuICAgICAgICBpc1N0cmluZyB8fCBoYXNGcmFjdGlvbmFsT3JFeHBvbmVudGlhbCB8fCBpc0xlc3NUaGFuTWF4U2FmZUludDtcblxuICAgICAgaWYgKGlzU3RhbmRhcmRWYWx1ZSkgcmV0dXJuIG1hdGNoO1xuXG4gICAgICByZXR1cm4gJ1wiJyArIG1hdGNoICsgJ25cIic7XG4gICAgfSxcbiAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBKU09OIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCB2YWx1ZS5cbiAqXG4gKiBTdXBwb3J0cyBwYXJzaW5nIG9mIGxhcmdlIGludGVnZXJzIHVzaW5nIHR3byBzdHJhdGVnaWVzOlxuICogMS4gQ2xhc3NpYyBmYWxsYmFjazogTWFya3MgbGFyZ2UgbnVtYmVycyB3aXRoIFwiMTIzblwiIGZvcm1hdCwgdGhlbiBjb252ZXJ0cyB0byBCaWdJbnRcbiAqIDIuIEZhc3QgcGF0aCAoSlNPTlBhcnNlVjIpOiBVc2VzIGNvbnRleHQuc291cmNlIGZlYXR1cmUgKH4yeCBmYXN0ZXIpIHdoZW4gYXZhaWxhYmxlXG4gKlxuICogQWxsIG90aGVyIEpTT04gdmFsdWVzIGFyZSBwYXJzZWQgZXhhY3RseSBsaWtlIG5hdGl2ZSBKU09OLnBhcnNlKCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgQSB2YWxpZCBKU09OIHN0cmluZy5cbiAqIEBwYXJhbSB7UmV2aXZlcn0gW3Jldml2ZXJdXG4gKiBBIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2ggbWVtYmVyXG4gKiBvZiB0aGUgb2JqZWN0LiBJZiBhIG1lbWJlciBjb250YWlucyBuZXN0ZWQgb2JqZWN0cywgdGhlIG5lc3RlZCBvYmplY3RzIGFyZVxuICogdHJhbnNmb3JtZWQgYmVmb3JlIHRoZSBwYXJlbnQgb2JqZWN0IGlzLlxuICogQHJldHVybnMge2FueX0gVGhlIHBhcnNlZCBKYXZhU2NyaXB0IHZhbHVlLlxuICogQHRocm93cyB7U3ludGF4RXJyb3J9IElmIHRleHQgaXMgbm90IHZhbGlkIEpTT04uXG4gKi9cbmNvbnN0IEpTT05QYXJzZSA9ICh0ZXh0LCByZXZpdmVyKSA9PiB7XG4gIGlmICghdGV4dCkgcmV0dXJuIG9yaWdpbmFsUGFyc2UodGV4dCwgcmV2aXZlcik7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaXNDb250ZXh0U291cmNlU3VwcG9ydGVkKCkpIHJldHVybiBKU09OUGFyc2VWMih0ZXh0LCByZXZpdmVyKTsgLy8gU2hvcnRjdXQgdG8gYSBmYXN0ZXIgKDJ4KSBhbmQgc2ltcGxlciB2ZXJzaW9uXG5cbiAgICAvLyBGaW5kIGFuZCBtYXJrIGJpZyBudW1iZXJzIHdpdGggXCJuXCJcbiAgICBjb25zdCBzZXJpYWxpemVkRGF0YSA9IHNlcmlhbGl6ZUJpZ0ludHModGV4dCk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWxQYXJzZShzZXJpYWxpemVkRGF0YSwgKGtleSwgdmFsdWUsIGNvbnRleHQpID0+XG4gICAgICBjb252ZXJ0TWFya2VkQmlnSW50c1Jldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCwgcmV2aXZlciksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSB7XG4gICAgICBjb25zdCBzZXJpYWxpemVkRGF0YSA9IHNlcmlhbGl6ZUJpZ0ludHModGV4dCk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBvcmlnaW5hbFBhcnNlKHNlcmlhbGl6ZWREYXRhKTtcblxuICAgICAgcmV0dXJuIGFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5KHBhcnNlZCwgcmV2aXZlcik7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCB7IEpTT05TdHJpbmdpZnksIEpTT05QYXJzZSB9O1xuIiwgImNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgbmFtZTtcbiAgLyoqXG4gICAqIGh0dHAgc3RhdHVzIGNvZGVcbiAgICovXG4gIHN0YXR1cztcbiAgLyoqXG4gICAqIFJlcXVlc3Qgb3B0aW9ucyB0aGF0IGxlYWQgdG8gdGhlIGVycm9yLlxuICAgKi9cbiAgcmVxdWVzdDtcbiAgLyoqXG4gICAqIFJlc3BvbnNlIG9iamVjdCBpZiBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxuICAgKi9cbiAgcmVzcG9uc2U7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlOiBvcHRpb25zLmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBOdW1iZXIucGFyc2VJbnQoc3RhdHVzQ29kZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih0aGlzLnN0YXR1cykpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIGVsc2UgLS0gQHByZXNlcnZlIC0tIEJ1ZyB3aXRoIHZpdGVzdCBjb3ZlcmFnZSB3aGVyZSBpdCBzZWVzIGFuIGVsc2UgYnJhbmNoIHRoYXQgZG9lc24ndCBleGlzdCAqL1xuICAgIGlmIChcInJlc3BvbnNlXCIgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0KTtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgcmVxdWVzdENvcHkuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLCB7XG4gICAgICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24ucmVwbGFjZShcbiAgICAgICAgICAvKD88ISApIC4qJC8sXG4gICAgICAgICAgXCIgW1JFREFDVEVEXVwiXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXF1ZXN0Q29weS51cmwgPSByZXF1ZXN0Q29weS51cmwucmVwbGFjZSgvXFxiY2xpZW50X3NlY3JldD1cXHcrL2csIFwiY2xpZW50X3NlY3JldD1bUkVEQUNURURdXCIpLnJlcGxhY2UoL1xcYmFjY2Vzc190b2tlbj1cXHcrL2csIFwiYWNjZXNzX3Rva2VuPVtSRURBQ1RFRF1cIik7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdENvcHk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIFJlcXVlc3RFcnJvclxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmltcG9ydCB7IHJlcXVlc3QgYXMgUmVxdWVzdDIgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBSZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2Vycm9yLmpzXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxuYCArIGRhdGEuZXJyb3JzLm1hcCgoZSkgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG52YXIgR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVxdWVzdDIsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDI7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnM7XG4gICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgfVxuICBuYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiO1xuICBlcnJvcnM7XG4gIGRhdGE7XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIE5PTl9WQVJJQUJMRV9PUFRJT05TID0gW1xuICBcIm1ldGhvZFwiLFxuICBcImJhc2VVcmxcIixcbiAgXCJ1cmxcIixcbiAgXCJoZWFkZXJzXCIsXG4gIFwicmVxdWVzdFwiLFxuICBcInF1ZXJ5XCIsXG4gIFwibWVkaWFUeXBlXCIsXG4gIFwib3BlcmF0aW9uTmFtZVwiXG5dO1xudmFyIEZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TID0gW1wicXVlcnlcIiwgXCJtZXRob2RcIiwgXCJ1cmxcIl07XG52YXIgR0hFU19WM19TVUZGSVhfUkVHRVggPSAvXFwvYXBpXFwvdjNcXC8/JC87XG5mdW5jdGlvbiBncmFwaHFsKHJlcXVlc3QyLCBxdWVyeSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgXCJxdWVyeVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKGBbQG9jdG9raXQvZ3JhcGhxbF0gXCJxdWVyeVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCFGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBbQG9jdG9raXQvZ3JhcGhxbF0gXCIke2tleX1cIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gT2JqZWN0LmFzc2lnbih7IHF1ZXJ5IH0sIG9wdGlvbnMpIDogcXVlcnk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmtleXMoXG4gICAgcGFyc2VkT3B0aW9uc1xuICApLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICBpZiAoTk9OX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoIXJlc3VsdC52YXJpYWJsZXMpIHtcbiAgICAgIHJlc3VsdC52YXJpYWJsZXMgPSB7fTtcbiAgICB9XG4gICAgcmVzdWx0LnZhcmlhYmxlc1trZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbiAgY29uc3QgYmFzZVVybCA9IHBhcnNlZE9wdGlvbnMuYmFzZVVybCB8fCByZXF1ZXN0Mi5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsO1xuICBpZiAoR0hFU19WM19TVUZGSVhfUkVHRVgudGVzdChiYXNlVXJsKSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnVybCA9IGJhc2VVcmwucmVwbGFjZShHSEVTX1YzX1NVRkZJWF9SRUdFWCwgXCIvYXBpL2dyYXBocWxcIik7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3QyKHJlcXVlc3RPcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9ycykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEdyYXBocWxSZXNwb25zZUVycm9yKFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcmVzcG9uc2UuZGF0YVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocmVxdWVzdDIsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0Mi5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IChxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBncmFwaHFsKG5ld1JlcXVlc3QsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIG5ld1JlcXVlc3QpLFxuICAgIGVuZHBvaW50OiBuZXdSZXF1ZXN0LmVuZHBvaW50XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBncmFwaHFsMiA9IHdpdGhEZWZhdWx0cyhyZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG5leHBvcnQge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcixcbiAgZ3JhcGhxbDIgYXMgZ3JhcGhxbCxcbiAgd2l0aEN1c3RvbVJlcXVlc3Rcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2lzLWp3dC5qc1xudmFyIGI2NHVybCA9IFwiKD86W2EtekEtWjAtOV8tXSspXCI7XG52YXIgc2VwID0gXCJcXFxcLlwiO1xudmFyIGp3dFJFID0gbmV3IFJlZ0V4cChgXiR7YjY0dXJsfSR7c2VwfSR7YjY0dXJsfSR7c2VwfSR7YjY0dXJsfSRgKTtcbnZhciBpc0pXVCA9IGp3dFJFLnRlc3QuYmluZChqd3RSRSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9hdXRoLmpzXG5hc3luYyBmdW5jdGlvbiBhdXRoKHRva2VuKSB7XG4gIGNvbnN0IGlzQXBwID0gaXNKV1QodG9rZW4pO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IHRva2VuLnN0YXJ0c1dpdGgoXCJ2MS5cIikgfHwgdG9rZW4uc3RhcnRzV2l0aChcImdoc19cIik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gdG9rZW4uc3RhcnRzV2l0aChcImdodV9cIik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtYXV0aG9yaXphdGlvbi1wcmVmaXguanNcbmZ1bmN0aW9uIHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKSB7XG4gIGlmICh0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGBiZWFyZXIgJHt0b2tlbn1gO1xuICB9XG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaG9vay5qc1xuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKFxuICAgIHJvdXRlLFxuICAgIHBhcmFtZXRlcnNcbiAgKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aDIodG9rZW4pIHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBObyB0b2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBUb2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoIGlzIG5vdCBhIHN0cmluZ1wiXG4gICAgKTtcbiAgfVxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG5leHBvcnQge1xuICBjcmVhdGVUb2tlbkF1dGhcbn07XG4iLCAiY29uc3QgVkVSU0lPTiA9IFwiNy4wLjZcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5pbXBvcnQgSG9vayBmcm9tIFwiYmVmb3JlLWFmdGVyLWhvb2tcIjtcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuaW1wb3J0IHsgd2l0aEN1c3RvbVJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvZ3JhcGhxbFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9rZW5BdXRoIH0gZnJvbSBcIkBvY3Rva2l0L2F1dGgtdG9rZW5cIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcbmNvbnN0IGNvbnNvbGVXYXJuID0gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG5jb25zdCBjb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIobG9nZ2VyID0ge30pIHtcbiAgaWYgKHR5cGVvZiBsb2dnZXIuZGVidWcgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5kZWJ1ZyA9IG5vb3A7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIuaW5mbyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmluZm8gPSBub29wO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLndhcm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci53YXJuID0gY29uc29sZVdhcm47XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIuZXJyb3IgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5lcnJvciA9IGNvbnNvbGVFcnJvcjtcbiAgfVxuICByZXR1cm4gbG9nZ2VyO1xufVxuY29uc3QgdXNlckFnZW50VHJhaWwgPSBgb2N0b2tpdC1jb3JlLmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gO1xuY2xhc3MgT2N0b2tpdCB7XG4gIHN0YXRpYyBWRVJTSU9OID0gVkVSU0lPTjtcbiAgc3RhdGljIGRlZmF1bHRzKGRlZmF1bHRzKSB7XG4gICAgY29uc3QgT2N0b2tpdFdpdGhEZWZhdWx0cyA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzBdIHx8IHt9O1xuICAgICAgICBpZiAodHlwZW9mIGRlZmF1bHRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzdXBlcihkZWZhdWx0cyhvcHRpb25zKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMudXNlckFnZW50ICYmIGRlZmF1bHRzLnVzZXJBZ2VudCA/IHtcbiAgICAgICAgICAgICAgdXNlckFnZW50OiBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHtkZWZhdWx0cy51c2VyQWdlbnR9YFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT2N0b2tpdFdpdGhEZWZhdWx0cztcbiAgfVxuICBzdGF0aWMgcGx1Z2lucyA9IFtdO1xuICAvKipcbiAgICogQXR0YWNoIGEgcGx1Z2luIChvciBtYW55KSB0byB5b3VyIE9jdG9raXQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IEFQSSA9IE9jdG9raXQucGx1Z2luKHBsdWdpbjEsIHBsdWdpbjIsIHBsdWdpbjMsIC4uLilcbiAgICovXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgc3RhdGljIHBsdWdpbnMgPSBjdXJyZW50UGx1Z2lucy5jb25jYXQoXG4gICAgICAgIG5ld1BsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKVxuICAgICAgKTtcbiAgICB9O1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGhvb2sgPSBuZXcgSG9vay5Db2xsZWN0aW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdERlZmF1bHRzID0ge1xuICAgICAgYmFzZVVybDogcmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXF1ZXN0OiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QsIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCB1c2FnZSBvbmx5LCBubyBuZWVkIHRvIHR5cGVcbiAgICAgICAgaG9vazogaG9vay5iaW5kKG51bGwsIFwicmVxdWVzdFwiKVxuICAgICAgfSksXG4gICAgICBtZWRpYVR5cGU6IHtcbiAgICAgICAgcHJldmlld3M6IFtdLFxuICAgICAgICBmb3JtYXQ6IFwiXCJcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widXNlci1hZ2VudFwiXSA9IG9wdGlvbnMudXNlckFnZW50ID8gYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7dXNlckFnZW50VHJhaWx9YCA6IHVzZXJBZ2VudFRyYWlsO1xuICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wcmV2aWV3cykge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG9wdGlvbnMucHJldmlld3M7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRpbWVab25lKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInRpbWUtem9uZVwiXSA9IG9wdGlvbnMudGltZVpvbmU7XG4gICAgfVxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmdyYXBocWwgPSB3aXRoQ3VzdG9tUmVxdWVzdCh0aGlzLnJlcXVlc3QpLmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5sb2cgPSBjcmVhdGVMb2dnZXIob3B0aW9ucy5sb2cpO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGNyZWF0ZVRva2VuQXV0aChvcHRpb25zLmF1dGgpO1xuICAgICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgYXV0aFN0cmF0ZWd5LCAuLi5vdGhlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBhdXRoID0gYXV0aFN0cmF0ZWd5KFxuICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcbiAgICAgICAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICAgICAgICAvLyB3ZSBwYXNzIHRoZSBjdXJyZW50IG9jdG9raXQgaW5zdGFuY2UgYXMgd2VsbCBhcyBpdHMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgICAgICAgLy8gdG8gYWxsb3cgZm9yIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWdpZXMgdGhhdCByZXR1cm4gYSBuZXcgb2N0b2tpdCBpbnN0YW5jZVxuICAgICAgICAgICAgLy8gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaW50ZXJuYWwgc3RhdGUgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGUgb3JpZ2luYWxcbiAgICAgICAgICAgIC8vIHJlcXVpcmVtZW50IGZvciB0aGlzIHdhcyB0aGUgXCJldmVudC1vY3Rva2l0XCIgYXV0aGVudGljYXRpb24gc3RyYXRlZ3lcbiAgICAgICAgICAgIC8vIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9ib3Qvb2N0b2tpdC1hdXRoLXByb2JvdC5cbiAgICAgICAgICAgIG9jdG9raXQ6IHRoaXMsXG4gICAgICAgICAgICBvY3Rva2l0T3B0aW9uczogb3RoZXJPcHRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25zLmF1dGhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzQ29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNsYXNzQ29uc3RydWN0b3IucGx1Z2luc1tpXSh0aGlzLCBvcHRpb25zKSk7XG4gICAgfVxuICB9XG4gIC8vIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3RvclxuICByZXF1ZXN0O1xuICBncmFwaHFsO1xuICBsb2c7XG4gIGhvb2s7XG4gIC8vIFRPRE86IHR5cGUgYG9jdG9raXQuYXV0aGAgYmFzZWQgb24gcGFzc2VkIG9wdGlvbnMuYXV0aFN0cmF0ZWd5XG4gIGF1dGg7XG59XG5leHBvcnQge1xuICBPY3Rva2l0XG59O1xuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxNy4wLjBcIjtcbiIsICJpbXBvcnQgdHlwZSB7IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmNvbnN0IEVuZHBvaW50czogRW5kcG9pbnRzRGVmYXVsdHNBbmREZWNvcmF0aW9ucyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgYWRkUmVwb0FjY2Vzc1RvU2VsZkhvc3RlZFJ1bm5lckdyb3VwSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiLFxuICAgIF0sXG4gICAgY2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiLFxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPcmdWYXJpYWJsZTogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvVmFyaWFibGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVdvcmtmbG93RGlzcGF0Y2g6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFydGlmYWN0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ3VzdG9tSW1hZ2VGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVDdXN0b21JbWFnZVZlcnNpb25Gcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9L3ZlcnNpb25zL3t2ZXJzaW9ufVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW46IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJ0aWZhY3Q6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIixcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiLFxuICAgIF0sXG4gICAgZm9yY2VDYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZm9yY2UtY2FuY2VsXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIixcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRDdXN0b21JbWFnZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy9pbWFnZXMvY3VzdG9tL3tpbWFnZV9kZWZpbml0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Q3VzdG9tSW1hZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9L3ZlcnNpb25zL3t2ZXJzaW9ufVwiLFxuICAgIF0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0dpdGh1Yk93bmVkSW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9naXRodWItb3duZWRcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNMaW1pdHNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbGltaXRzXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzTWFjaGluZVNwZWNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL21hY2hpbmUtc2l6ZXNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQYXJ0bmVySW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9wYXJ0bmVyXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzUGxhdGZvcm1zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3BsYXRmb3Jtc1wiLFxuICAgIF0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1ZhcmlhYmxlOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfSxcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCIsXG4gICAgXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW5Vc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEN1c3RvbUltYWdlVmVyc2lvbnNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2N1c3RvbS97aW1hZ2VfZGVmaW5pdGlvbl9pZH0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RDdXN0b21JbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2N1c3RvbVwiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RHaXRodWJIb3N0ZWRSdW5uZXJzSW5Hcm91cEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0SG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0T3JnVmFyaWFibGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25TZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5BcnRpZmFjdHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIixcbiAgICBdLFxuICAgIHJlUnVuV29ya2Zsb3c6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93RmFpbGVkSm9iczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCIsXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc0RvbmU6IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIlBVVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcXVlc3RzRm9yQXV0aGVudGljYXRlZEFwcDogW1xuICAgICAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl0sXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQmlsbGluZ1ByZW1pdW1SZXF1ZXN0VXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcHJlbWl1bV9yZXF1ZXN0L3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nUHJlbWl1bVJlcXVlc3RVc2FnZVJlcG9ydFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcHJlbWl1bV9yZXF1ZXN0L3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nVXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkJpbGxpbmdVc2FnZVJlcG9ydFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiLFxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiLFxuICAgIF0sXG4gIH0sXG4gIGNhbXBhaWduczoge1xuICAgIGNyZWF0ZUNhbXBhaWduOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiXSxcbiAgICBkZWxldGVDYW1wYWlnbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NhbXBhaWducy97Y2FtcGFpZ25fbnVtYmVyfVwiXSxcbiAgICBnZXRDYW1wYWlnblN1bW1hcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9jYW1wYWlnbnMve2NhbXBhaWduX251bWJlcn1cIl0sXG4gICAgbGlzdE9yZ0NhbXBhaWduczogW1wiR0VUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiXSxcbiAgICB1cGRhdGVDYW1wYWlnbjogW1wiUEFUQ0ggL29yZ3Mve29yZ30vY2FtcGFpZ25zL3tjYW1wYWlnbl9udW1iZXJ9XCJdLFxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiLFxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3ByZWZlcmVuY2VzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBjb21taXRBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXgvY29tbWl0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2ZpeDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBjcmVhdGVWYXJpYW50QW5hbHlzaXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5hbHlzaXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfSxcbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRBdXRvZml4OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeFwiLFxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGdldFZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzUmVwb1Rhc2s6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzL3tjb2RlcWxfdmFyaWFudF9hbmFseXNpc19pZH0vcmVwb3Mve3JlcG9fb3duZXJ9L3tyZXBvX25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCIsXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl0sXG4gIH0sXG4gIGNvZGVTZWN1cml0eToge1xuICAgIGF0dGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGF0dGFjaEVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiXSxcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQT1NUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZXRhY2hDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RldGFjaFwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25Gb3JSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zZWN1cml0eS1jb25maWd1cmF0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0ZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGdldERlZmF1bHRDb25maWd1cmF0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvc2l0b3JpZXNGb3JDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0U2luZ2xlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBzZXRDb25maWd1cmF0aW9uQXNEZWZhdWx0Rm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGNvZGVzT2ZDb25kdWN0OiB7XG4gICAgZ2V0QWxsQ29kZXNPZkNvbmR1Y3Q6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdFwiXSxcbiAgICBnZXRDb25kdWN0Q29kZTogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0L3trZXl9XCJdLFxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvckRldmNvbnRhaW5lcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvcGVybWlzc2lvbnNfY2hlY2tcIixcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCIsXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZ2V0RXhwb3J0RGV0YWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGxpc3RJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IG9yZ19pZDogXCJvcmdcIiB9IH0sXG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiLFxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIixcbiAgICBdLFxuICAgIHVwZGF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclRlYW1zOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCIsXG4gICAgXSxcbiAgICBsaXN0Q29waWxvdFNlYXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCJdLFxuICB9LFxuICBjcmVkZW50aWFsczogeyByZXZva2U6IFtcIlBPU1QgL2NyZWRlbnRpYWxzL3Jldm9rZVwiXSB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXBvc2l0b3J5QWNjZXNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnfS9kZXBlbmRhYm90L3JlcG9zaXRvcnktYWNjZXNzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3J5QWNjZXNzRGVmYXVsdExldmVsOiBbXG4gICAgICBcIlBVVCAvb3JnYW5pemF0aW9ucy97b3JnfS9kZXBlbmRhYm90L3JlcG9zaXRvcnktYWNjZXNzL2RlZmF1bHQtbGV2ZWxcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXBvc2l0b3J5QWNjZXNzRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdhbml6YXRpb25zL3tvcmd9L2RlcGVuZGFib3QvcmVwb3NpdG9yeS1hY2Nlc3NcIixcbiAgICBdLFxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIixcbiAgICBdLFxuICAgIGRpZmZSYW5nZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXSxcbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZW50ZXJwcmlzZVRlYW1NZW1iZXJzaGlwczoge1xuICAgIGFkZDogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBidWxrQWRkOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy9hZGRcIixcbiAgICBdLFxuICAgIGJ1bGtSZW1vdmU6IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzL3JlbW92ZVwiLFxuICAgIF0sXG4gICAgZ2V0OiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzXCJdLFxuICAgIHJlbW92ZTogW1xuICAgICAgXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgZW50ZXJwcmlzZVRlYW1Pcmdhbml6YXRpb25zOiB7XG4gICAgYWRkOiBbXG4gICAgICBcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMve29yZ31cIixcbiAgICBdLFxuICAgIGJ1bGtBZGQ6IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMvYWRkXCIsXG4gICAgXSxcbiAgICBidWxrUmVtb3ZlOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9vcmdhbml6YXRpb25zL3JlbW92ZVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMve29yZ31cIixcbiAgICBdLFxuICAgIGdldEFzc2lnbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve2VudGVycHJpc2UtdGVhbX0vb3JnYW5pemF0aW9ucy97b3JnfVwiLFxuICAgIF0sXG4gICAgZ2V0QXNzaWdubWVudHM6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve2VudGVycHJpc2UtdGVhbX0vb3JnYW5pemF0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIGVudGVycHJpc2VUZWFtczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtc1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIGdpc3RzOiB7XG4gICAgY2hlY2tJc1N0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9naXN0c1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZm9yazogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGdldDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldFJldmlzaW9uOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS97c2hhfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2dpc3RzXCJdLFxuICAgIGxpc3RDb21tZW50czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvZ2lzdHMvcHVibGljXCJdLFxuICAgIGxpc3RTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3N0YXJyZWRcIl0sXG4gICAgc3RhcjogW1wiUFVUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1bnN0YXI6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICB9LFxuICBnaXQ6IHtcbiAgICBjcmVhdGVCbG9iOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnNcIl0sXG4gICAgY3JlYXRlQ29tbWl0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0c1wiXSxcbiAgICBjcmVhdGVSZWY6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzXCJdLFxuICAgIGNyZWF0ZVRhZzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3NcIl0sXG4gICAgY3JlYXRlVHJlZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzXCJdLFxuICAgIGRlbGV0ZVJlZjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgICBnZXRCbG9iOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9icy97ZmlsZV9zaGF9XCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0cy97Y29tbWl0X3NoYX1cIl0sXG4gICAgZ2V0UmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWYve3JlZn1cIl0sXG4gICAgZ2V0VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzL3t0YWdfc2hhfVwiXSxcbiAgICBnZXRUcmVlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlcy97dHJlZV9zaGF9XCJdLFxuICAgIGxpc3RNYXRjaGluZ1JlZnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L21hdGNoaW5nLXJlZnMve3JlZn1cIl0sXG4gICAgdXBkYXRlUmVmOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdLFxuICB9LFxuICBob3N0ZWRDb21wdXRlOiB7XG4gICAgY3JlYXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVOZXR3b3JrQ29uZmlndXJhdGlvbkZyb21Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldE5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXROZXR3b3JrU2V0dGluZ3NGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstc2V0dGluZ3Mve25ldHdvcmtfc2V0dGluZ3NfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0TmV0d29ya0NvbmZpZ3VyYXRpb25zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICB1cGRhdGVOZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgaW50ZXJhY3Rpb25zOiB7XG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwiZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gIH0sXG4gIGlzc3Vlczoge1xuICAgIGFkZEFzc2lnbmVlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCIsXG4gICAgXSxcbiAgICBhZGRCbG9ja2VkQnlEZXBlbmRlbmN5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tlZF9ieVwiLFxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGFkZFN1Yklzc3VlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlcy97YXNzaWduZWV9XCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWRUb0lzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlcy97YXNzaWduZWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBnZXRQYXJlbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3BhcmVudFwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3REZXBlbmRlbmNpZXNCbG9ja2VkQnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnlcIixcbiAgICBdLFxuICAgIGxpc3REZXBlbmRlbmNpZXNCbG9ja2luZzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tpbmdcIixcbiAgICBdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbGlzdFN1Yklzc3VlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBsb2NrOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHJlbW92ZUFsbExhYmVsczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIHJlbW92ZURlcGVuZGVuY3lCbG9ja2VkQnk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnkve2lzc3VlX2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3ViSXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3VlXCIsXG4gICAgXSxcbiAgICByZXByaW9yaXRpemVTdWJJc3N1ZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZXMvcHJpb3JpdHlcIixcbiAgICBdLFxuICAgIHNldExhYmVsczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIHVubG9jazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlTGFiZWw6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHVwZGF0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXSxcbiAgfSxcbiAgbWFya2Rvd246IHtcbiAgICByZW5kZXI6IFtcIlBPU1QgL21hcmtkb3duXCJdLFxuICAgIHJlbmRlclJhdzogW1xuICAgICAgXCJQT1NUIC9tYXJrZG93bi9yYXdcIixcbiAgICAgIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIiB9IH0sXG4gICAgXSxcbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdLFxuICB9LFxuICBtaWdyYXRpb25zOiB7XG4gICAgZGVsZXRlQXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGdldEFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJtaWdyYXRpb25zXCIsIFwibGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCIsXG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIixcbiAgICBdLFxuICB9LFxuICBvaWRjOiB7XG4gICAgZ2V0T2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICAgIHVwZGF0ZU9pZGNDdXN0b21TdWJUZW1wbGF0ZUZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgfSxcbiAgb3Jnczoge1xuICAgIGFkZFNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5vcmdzLmFkZFNlY3VyaXR5TWFuYWdlclRlYW0oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL3NlY3VyaXR5LW1hbmFnZXJzI2FkZC1hLXNlY3VyaXR5LW1hbmFnZXItdGVhbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFzc2lnblRlYW1Ub09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfS97cm9sZV9pZH1cIixcbiAgICBdLFxuICAgIGFzc2lnblVzZXJUb09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlQXJ0aWZhY3RTdG9yYWdlUmVjb3JkOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYXJ0aWZhY3RzL21ldGFkYXRhL3N0b3JhZ2UtcmVjb3JkXCIsXG4gICAgXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZUlzc3VlVHlwZTogW1wiUE9TVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JPcmdzQ3JlYXRlT3JVcGRhdGVPcmdhbml6YXRpb25WYWx1ZXM6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ2FuaXphdGlvbnMve29yZ30vb3JnLXByb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yT3Jnc0dldE9yZ2FuaXphdGlvblZhbHVlczogW1xuICAgICAgXCJHRVQgL29yZ2FuaXphdGlvbnMve29yZ30vb3JnLXByb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NDcmVhdGVPclVwZGF0ZU9yZ2FuaXphdGlvbkRlZmluaXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlT3JnYW5pemF0aW9uRGVmaW5pdGlvbnM6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlT3JnYW5pemF0aW9uVmFsdWVzOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NEZWxldGVPcmdhbml6YXRpb25EZWZpbml0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NHZXRPcmdhbml6YXRpb25EZWZpbml0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NHZXRPcmdhbml6YXRpb25EZWZpbml0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0dldE9yZ2FuaXphdGlvblZhbHVlczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J1bGs6IFtcIlBPU1QgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL2RlbGV0ZS1yZXF1ZXN0XCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy97YXR0ZXN0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBdHRlc3RhdGlvbnNCeVN1YmplY3REaWdlc3Q6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy9kaWdlc3Qve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSXNzdWVUeXBlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUltbXV0YWJsZVJlbGVhc2VzT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlU2VsZWN0ZWRSZXBvc2l0b3J5SW1tdXRhYmxlUmVsZWFzZXNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRJbW11dGFibGVSZWxlYXNlc1NldHRpbmdzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIGdldEltbXV0YWJsZVJlbGVhc2VzU2V0dGluZ3NSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRIaXN0b3J5OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIl0sXG4gICAgZ2V0T3JnUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5L3t2ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEFydGlmYWN0U3RvcmFnZVJlY29yZHM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FydGlmYWN0cy97c3ViamVjdF9kaWdlc3R9L21ldGFkYXRhL3N0b3JhZ2UtcmVjb3Jkc1wiLFxuICAgIF0sXG4gICAgbGlzdEF0dGVzdGF0aW9uUmVwb3NpdG9yaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uc0J1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hdHRlc3RhdGlvbnMvYnVsay1saXN0ez9wZXJfcGFnZSxiZWZvcmUsYWZ0ZXJ9XCIsXG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RGYWlsZWRJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9vcmdzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvblRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCJdLFxuICAgIGxpc3RJc3N1ZVR5cGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGF0R3JhbnRSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MubGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNsaXN0LXNlY3VyaXR5LW1hbmFnZXItdGVhbXNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5yZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNyZW1vdmUtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZXZpZXdQYXRHcmFudFJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRJbW11dGFibGVSZWxlYXNlc1NldHRpbmdzOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIHNldEltbXV0YWJsZVJlbGVhc2VzU2V0dGluZ3NSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHVuYmxvY2tVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvb3Jncy97b3JnfVwiXSxcbiAgICB1cGRhdGVJc3N1ZVR5cGU6IFtcIlBVVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlcy97aXNzdWVfdHlwZV9pZH1cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIixcbiAgICBdLFxuICAgIHVwZGF0ZVBhdEFjY2VzczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9XCJdLFxuICAgIHVwZGF0ZVBhdEFjY2Vzc2VzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JPcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gIH0sXG4gIHBhY2thZ2VzOiB7XG4gICAgZGVsZXRlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5QW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicGFja2FnZXNcIiwgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZ1wiXSB9LFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5VGhlQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmVuYW1lZDogW1xuICAgICAgICAgIFwicGFja2FnZXNcIixcbiAgICAgICAgICBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIixcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeVVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgfSxcbiAgcHJpdmF0ZVJlZ2lzdHJpZXM6IHtcbiAgICBjcmVhdGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzXCJdLFxuICAgIGRlbGV0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldE9yZ1ByaXZhdGVSZWdpc3RyeTogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy9wdWJsaWMta2V5XCJdLFxuICAgIGxpc3RPcmdQcml2YXRlUmVnaXN0cmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiXSxcbiAgICB1cGRhdGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZEl0ZW1Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCJdLFxuICAgIGFkZEl0ZW1Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gICAgXSxcbiAgICBkZWxldGVJdGVtRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVJdGVtRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RmllbGRGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHMve2ZpZWxkX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RmllbGRGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vZmllbGRzL3tmaWVsZF9pZH1cIixcbiAgICBdLFxuICAgIGdldEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfVwiXSxcbiAgICBnZXRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9XCJdLFxuICAgIGdldE9yZ0l0ZW06IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCJdLFxuICAgIGdldFVzZXJJdGVtOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0RmllbGRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2ZpZWxkc1wiXSxcbiAgICBsaXN0RmllbGRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2ZpZWxkc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjJcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyXCJdLFxuICAgIGxpc3RJdGVtc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9pdGVtc1wiXSxcbiAgICBsaXN0SXRlbXNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUl0ZW1Gb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSXRlbUZvclVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIixcbiAgICBdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCIsXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGNoZWNrQ29sbGFib3JhdG9yOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ltbXV0YWJsZVJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltbXV0YWJsZS1yZWxlYXNlc1wiXSxcbiAgICBjaGVja1ByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUF0dGVzdGF0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnNcIl0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlT3JnUnVsZXNldDogW1wiUE9TVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVQYWdlc0RlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlUmVwb1J1bGVzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlUmVwb3NpdG9yeVZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0dldFJlcG9zaXRvcnlWYWx1ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbkVudmlyb25tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZURlcGxveW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnUnVsZXNldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlSW1tdXRhYmxlUmVsZWFzZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIGRpc2FibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIixcbiAgICBdLFxuICAgIGRpc2FibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRvd25sb2FkWmlwYmFsbEFyY2hpdmVcIl0gfSxcbiAgICBdLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZW5hYmxlSW1tdXRhYmxlUmVsZWFzZXM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1tdXRhYmxlLXJlbGVhc2VzXCJdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiLFxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgIF0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0Q3VzdG9tRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIixcbiAgICBdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlcy97c3RhdHVzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhZ2VzSGVhbHRoQ2hlY2s6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvaGVhbHRoXCJdLFxuICAgIGdldFBhcnRpY2lwYXRpb25TdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wYXJ0aWNpcGF0aW9uXCJdLFxuICAgIGdldFB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldEhpc3Rvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVzZXRWZXJzaW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgICBdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vYnJhbmNoZXMtd2hlcmUtaGVhZFwiLFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3RDdXN0b21EZXBsb3ltZW50UnVsZUludGVncmF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgcmVuYW1lQnJhbmNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9yZW5hbWVcIl0sXG4gICAgcmVwbGFjZUFsbFRvcGljczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgcmVxdWVzdFBhZ2VzQnVpbGQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBzZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJlbGVhc2U6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgdXBkYXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9LFxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIl0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl0sXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgY3JlYXRlUHVzaFByb3RlY3Rpb25CeXBhc3M6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3B1c2gtcHJvdGVjdGlvbi1ieXBhc3Nlc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRTY2FuSGlzdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvc2Nhbi1oaXN0b3J5XCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdQYXR0ZXJuQ29uZmlnczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL3BhdHRlcm4tY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdQYXR0ZXJuQ29uZmlnczogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvcGF0dGVybi1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHNlY3VyaXR5QWR2aXNvcmllczoge1xuICAgIGNyZWF0ZUZvcms6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vZm9ya3NcIixcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9zaXRvcnlBZHZpc29yeUN2ZVJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vY3ZlXCIsXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIixcbiAgICBdLFxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldERpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0RGlzY3Vzc2lvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3RlYW1zXCJdLFxuICAgIGxpc3RNZW1iZXJzSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vaW52aXRhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J1bGs6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMvZGVsZXRlLXJlcXVlc3RcIixcbiAgICBdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97YXR0ZXN0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBdHRlc3RhdGlvbnNCeVN1YmplY3REaWdlc3Q6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy9kaWdlc3Qve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgZGVsZXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlJZDogW1wiR0VUIC91c2VyL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnNCdWxrOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vYXR0ZXN0YXRpb25zL2J1bGstbGlzdHs/cGVyX3BhZ2UsYmVmb3JlLGFmdGVyfVwiLFxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCJdLFxuICAgIGxpc3RQdWJsaWNLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5c1wiXSxcbiAgICBsaXN0U29jaWFsQWNjb3VudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U29jaWFsQWNjb3VudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsXG4gICAgXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVuZHBvaW50cztcbiIsICJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludE9wdGlvbnMsIFJlcXVlc3RQYXJhbWV0ZXJzLCBSb3V0ZSB9IGZyb20gXCJAb2N0b2tpdC90eXBlc1wiO1xuaW1wb3J0IEVORFBPSU5UUyBmcm9tIFwiLi9nZW5lcmF0ZWQvZW5kcG9pbnRzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludE1ldGhvZHMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQvbWV0aG9kLXR5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50RGVjb3JhdGlvbnMgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vLyBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIHJlZmFjdG9yZWQgaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMuanMvcHVsbC82MjJcbi8vIHRvIG9wdGltaXNlIHRoZSBydW50aW1lIHBlcmZvcm1hbmNlIG9mIE9jdG9raXQgaW5pdGlhbGl6YXRpb24uXG4vL1xuLy8gVGhpcyBvcHRpbWl6YXRpb24gaW52b2x2ZXMgdHdvIGtleSBjaGFuZ2VzOlxuLy8gMS4gUHJlLUNvbXB1dGF0aW9uOiBUaGUgZW5kcG9pbnQgbWV0aG9kcyBhcmUgcHJlLWNvbXB1dGVkIG9uY2UgYXQgbW9kdWxlIGxvYWRcbi8vICAgIHRpbWUgaW5zdGVhZCBvZiBlYWNoIGludm9jYXRpb24gb2YgYGVuZHBvaW50c1RvTWV0aG9kcygpYC5cbi8vIDIuIExhenkgaW5pdGlhbGl6YXRpb24gYW5kIGNhY2hpbmc6IFdlIHVzZSBhIFByb3h5IGZvciBlYWNoIHNjb3BlIHRvIG9ubHlcbi8vICAgIGluaXRpYWxpemUgbWV0aG9kcyB0aGF0IGFyZSBhY3R1YWxseSBjYWxsZWQuIFRoaXMgcmVkdWNlcyBydW50aW1lIG92ZXJoZWFkXG4vLyAgICBhcyB0aGUgaW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgZGVlcCBtZXJnaW5nIG9mIG9iamVjdHMuIFRoZSBpbml0aWFsaXplZFxuLy8gICAgbWV0aG9kcyBhcmUgdGhlbiBjYWNoZWQgZm9yIGZ1dHVyZSB1c2UuXG5cbmNvbnN0IGVuZHBvaW50TWV0aG9kc01hcCA9IG5ldyBNYXAoKTtcbmZvciAoY29uc3QgW3Njb3BlLCBlbmRwb2ludHNdIG9mIE9iamVjdC5lbnRyaWVzKEVORFBPSU5UUykpIHtcbiAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgZW5kcG9pbnRdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50cykpIHtcbiAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICBjb25zdCBlbmRwb2ludERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHMsXG4gICAgKTtcblxuICAgIGlmICghZW5kcG9pbnRNZXRob2RzTWFwLmhhcyhzY29wZSkpIHtcbiAgICAgIGVuZHBvaW50TWV0aG9kc01hcC5zZXQoc2NvcGUsIG5ldyBNYXAoKSk7XG4gICAgfVxuXG4gICAgZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuc2V0KG1ldGhvZE5hbWUsIHtcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICBkZWNvcmF0aW9ucyxcbiAgICB9KTtcbiAgfVxufVxuXG50eXBlIFByb3h5VGFyZ2V0ID0ge1xuICBvY3Rva2l0OiBPY3Rva2l0O1xuICBzY29wZTogc3RyaW5nO1xuICBjYWNoZTogUmVjb3JkPHN0cmluZywgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+O1xufTtcblxuY29uc3QgaGFuZGxlciA9IHtcbiAgaGFzKHsgc2NvcGUgfTogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5oYXMobWV0aG9kTmFtZSk7XG4gIH0sXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHRoaXMuZ2V0KHRhcmdldCwgbWV0aG9kTmFtZSksIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0sXG4gIGRlZmluZVByb3BlcnR5KFxuICAgIHRhcmdldDogUHJveHlUYXJnZXQsXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcixcbiAgKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9OiBQcm94eVRhcmdldCkge1xuICAgIHJldHVybiBbLi4uZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkua2V5cygpXTtcbiAgfSxcbiAgc2V0KHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiAodGFyZ2V0LmNhY2hlW21ldGhvZE5hbWVdID0gdmFsdWUpO1xuICB9LFxuICBnZXQoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGUgfTogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIGlmIChjYWNoZVttZXRob2ROYW1lXSkge1xuICAgICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZCA9IGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmdldChtZXRob2ROYW1lKTtcbiAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gZGVjb3JhdGUoXG4gICAgICAgIG9jdG9raXQsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgICBkZWNvcmF0aW9ucyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgfSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IFJlc3RFbmRwb2ludE1ldGhvZHMge1xuICBjb25zdCBuZXdNZXRob2RzID0ge30gYXMgeyBba2V5OiBzdHJpbmddOiBvYmplY3QgfTtcblxuICBmb3IgKGNvbnN0IHNjb3BlIG9mIGVuZHBvaW50TWV0aG9kc01hcC5rZXlzKCkpIHtcbiAgICBuZXdNZXRob2RzW3Njb3BlXSA9IG5ldyBQcm94eSh7IG9jdG9raXQsIHNjb3BlLCBjYWNoZToge30gfSwgaGFuZGxlcik7XG4gIH1cblxuICByZXR1cm4gbmV3TWV0aG9kcyBhcyBSZXN0RW5kcG9pbnRNZXRob2RzO1xufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZShcbiAgb2N0b2tpdDogT2N0b2tpdCxcbiAgc2NvcGU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBkZWZhdWx0czogRW5kcG9pbnRPcHRpb25zLFxuICBkZWNvcmF0aW9uczogRW5kcG9pbnREZWNvcmF0aW9ucyxcbikge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiB3aXRoRGVjb3JhdGlvbnMoXG4gICAgLi4uYXJnczogW1JvdXRlLCBSZXF1ZXN0UGFyYW1ldGVycz9dIHwgW0VuZHBvaW50T3B0aW9uc11cbiAgKSB7XG4gICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgLy8gVGhlcmUgYXJlIGN1cnJlbnRseSBubyBvdGhlciBkZWNvcmF0aW9ucyB0aGFuIGAubWFwVG9EYXRhYFxuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzLFxuICAgICAgKSkge1xuICAgICAgICBpZiAobmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCEoYWxpYXMgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbYWxpYXNdID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKC4uLmFyZ3MpO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHdpdGhEZWNvcmF0aW9ucywgcmVxdWVzdFdpdGhEZWZhdWx0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBPY3Rva2l0IH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgeyBSZXN0RW5kcG9pbnRNZXRob2RUeXBlcyB9IGZyb20gXCIuL2dlbmVyYXRlZC9wYXJhbWV0ZXJzLWFuZC1yZXNwb25zZS10eXBlcy5qc1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGVuZHBvaW50c1RvTWV0aG9kcyB9IGZyb20gXCIuL2VuZHBvaW50cy10by1tZXRob2RzLmpzXCI7XG5cbi8vIEV4cG9ydCB0aGUgdHlwZSBmb3IgZG93bnN0cmVhbSB1c2VycyBpbiBvcmRlciB0byBmaXggYSBUeXBlU2NyaXB0IGVycm9yXG4vLyBUaGUgaW5mZXJyZWQgdHlwZSBvZiAnT2N0b2tpdCcgY2Fubm90IGJlIG5hbWVkIHdpdGhvdXQgYSByZWZlcmVuY2UgdG8gJy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3QtdHlwZXMvdHlwZXMuanMnLiBUaGlzIGlzIGxpa2VseSBub3QgcG9ydGFibGUuIEEgdHlwZSBhbm5vdGF0aW9uIGlzIG5lY2Vzc2FyeS5cbmV4cG9ydCB0eXBlIHsgQXBpIH07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBBcGkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpLFxuICB9O1xufVxucmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IEFwaVtcInJlc3RcIl0gJiBBcGkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgLi4uYXBpLFxuICAgIHJlc3Q6IGFwaSxcbiAgfTtcbn1cbmxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gKFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhIHx8IFwidG90YWxfY29tbWl0c1wiIGluIHJlc3BvbnNlLmRhdGEpICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IHRvdGFsQ29tbWl0cyA9IHJlc3BvbnNlLmRhdGEudG90YWxfY29tbWl0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvbW1pdHM7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY29tbWl0cyA9IHRvdGFsQ29tbWl0cztcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaXRlcmF0b3IuanNcbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKSByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0TWV0aG9kKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB1cmwgPSAoKG5vcm1hbGl6ZWRSZXNwb25zZS5oZWFkZXJzLmxpbmsgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAvPChbXjw+XSspPjtcXHMqcmVsPVwibmV4dFwiL1xuICAgICAgICAgICkgfHwgW10pWzFdO1xuICAgICAgICAgIGlmICghdXJsICYmIFwidG90YWxfY29tbWl0c1wiIGluIG5vcm1hbGl6ZWRSZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKG5vcm1hbGl6ZWRSZXNwb25zZS51cmwpO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gcGFyc2VkVXJsLnNlYXJjaFBhcmFtcztcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChwYXJhbXMuZ2V0KFwicGFnZVwiKSB8fCBcIjFcIiwgMTApO1xuICAgICAgICAgICAgY29uc3QgcGVyX3BhZ2UgPSBwYXJzZUludChwYXJhbXMuZ2V0KFwicGVyX3BhZ2VcIikgfHwgXCIyNTBcIiwgMTApO1xuICAgICAgICAgICAgaWYgKHBhZ2UgKiBwZXJfcGFnZSA8IG5vcm1hbGl6ZWRSZXNwb25zZS5kYXRhLnRvdGFsX2NvbW1pdHMpIHtcbiAgICAgICAgICAgICAgcGFyYW1zLnNldChcInBhZ2VcIiwgU3RyaW5nKHBhZ2UgKyAxKSk7XG4gICAgICAgICAgICAgIHVybCA9IHBhcnNlZFVybC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0ZS5qc1xuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGdhdGhlcihcbiAgICBvY3Rva2l0LFxuICAgIFtdLFxuICAgIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbiAgICBtYXBGblxuICApO1xufVxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yMi5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGVhcmx5RXhpdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoXG4gICAgICBtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YVxuICAgICk7XG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHJldHVybiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbik7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvY29tcG9zZS1wYWdpbmF0ZS5qc1xudmFyIGNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBPYmplY3QuYXNzaWduKHBhZ2luYXRlLCB7XG4gIGl0ZXJhdG9yXG59KTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dlbmVyYXRlZC9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xudmFyIHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXG4gIFwiR0VUIC9hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvYXNzaWdubWVudHMve2Fzc2lnbm1lbnRfaWR9L2FjY2VwdGVkX2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zL3tjbGFzc3Jvb21faWR9L2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnMve29yZ30vZGVwZW5kYWJvdC9yZXBvc2l0b3J5LWFjY2Vzc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGYtaG9zdGVkLXJ1bm5lcnMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vaG9zdGVkLXJ1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvbWV0cmljc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zaWdodHMvYXBpL3JvdXRlLXN0YXRzL3thY3Rvcl90eXBlfS97YWN0b3JfaWR9XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9zdWJqZWN0LXN0YXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS91c2VyLXN0YXRzL3t1c2VyX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1YyXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXNlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvZGV2Y29udGFpbmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tpbmdcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXG5dO1xuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuZnVuY3Rpb24gcGFnaW5hdGVSZXN0KG9jdG9raXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdpbmF0ZTogT2JqZWN0LmFzc2lnbihwYWdpbmF0ZS5iaW5kKG51bGwsIG9jdG9raXQpLCB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IuYmluZChudWxsLCBvY3Rva2l0KVxuICAgIH0pXG4gIH07XG59XG5wYWdpbmF0ZVJlc3QuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sCiAgIm1hcHBpbmdzIjogInlqQkFBQSxJQUFBQSxHQUFBQyxFQUFBQyxJQUFBLGNBRUEsSUFBSUMsR0FBTSxRQUFRLEtBQUssRUFDbkJDLEdBQU0sUUFBUSxLQUFLLEVBQ25CQyxHQUFPLFFBQVEsTUFBTSxFQUNyQkMsR0FBUSxRQUFRLE9BQU8sRUFDdkJDLEdBQVMsUUFBUSxRQUFRLEVBQ3pCQyxHQUFTLFFBQVEsUUFBUSxFQUN6QkMsR0FBTyxRQUFRLE1BQU0sRUFHekJQLEdBQVEsYUFBZVEsR0FDdkJSLEdBQVEsY0FBZ0JTLEdBQ3hCVCxHQUFRLGNBQWdCVSxHQUN4QlYsR0FBUSxlQUFpQlcsR0FHekIsU0FBU0gsR0FBYUksRUFBUyxDQUM3QixJQUFJQyxFQUFRLElBQUlDLEdBQWVGLENBQU8sRUFDdEMsT0FBQUMsRUFBTSxRQUFVVixHQUFLLFFBQ2RVLENBQ1QsQ0FFQSxTQUFTSixHQUFjRyxFQUFTLENBQzlCLElBQUlDLEVBQVEsSUFBSUMsR0FBZUYsQ0FBTyxFQUN0QyxPQUFBQyxFQUFNLFFBQVVWLEdBQUssUUFDckJVLEVBQU0sYUFBZUUsR0FDckJGLEVBQU0sWUFBYyxJQUNiQSxDQUNULENBRUEsU0FBU0gsR0FBY0UsRUFBUyxDQUM5QixJQUFJQyxFQUFRLElBQUlDLEdBQWVGLENBQU8sRUFDdEMsT0FBQUMsRUFBTSxRQUFVVCxHQUFNLFFBQ2ZTLENBQ1QsQ0FFQSxTQUFTRixHQUFlQyxFQUFTLENBQy9CLElBQUlDLEVBQVEsSUFBSUMsR0FBZUYsQ0FBTyxFQUN0QyxPQUFBQyxFQUFNLFFBQVVULEdBQU0sUUFDdEJTLEVBQU0sYUFBZUUsR0FDckJGLEVBQU0sWUFBYyxJQUNiQSxDQUNULENBR0EsU0FBU0MsR0FBZUYsRUFBUyxDQUMvQixJQUFJSSxFQUFPLEtBQ1hBLEVBQUssUUFBVUosR0FBVyxDQUFDLEVBQzNCSSxFQUFLLGFBQWVBLEVBQUssUUFBUSxPQUFTLENBQUMs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LEVBQVEsUUFBYSxDQUFDLEVBQUksVUFDbENBLEVBQVFBLEVBQVEsTUFBVyxDQUFDLEVBQUksUUFFaENBLEVBQVFBLEVBQVEsS0FBVSxDQUFDLEVBQUksT0FDL0JBLEVBQVFBLEVBQVEsS0FBVSxDQUFDLEVBQUksT0FDL0JBLEVBQVFBLEVBQVEsTUFBVyxFQUFFLEVBQUksUUFDakNBLEVBQVFBLEVBQVEsS0FBVSxFQUFFLEVBQUksT0FDaENBLEVBQVFBLEVBQVEsU0FBYyxFQUFFLEVBQUksV0FDcENBLEVBQVFBLEVBQVEsVUFBZSxFQUFFLEVBQUksWUFDckNBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsS0FBVSxFQUFFLEVBQUksT0FDaENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsSUFBUyxFQUFFLEVBQUksTUFFL0JBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsV0FBZ0IsRUFBRSxFQUFJLGFBQ3RDQSxFQUFRQSxFQUFRLFNBQWMsRUFBRSxFQUFJLFdBQ3BDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBRWpDQSxFQUFRQSxFQUFRLFVBQVUsRUFBSSxFQUFFLEVBQUksV0FDcENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsVUFBZSxFQUFFLEVBQUksWUFDckNBLEVBQVFBLEVBQVEsWUFBaUIsRUFBRSxFQUFJLGNBRXZDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBQ2pDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBRWpDQSxFQUFRQSxFQUFRLFdBQWdCLEVBQUUsRUFBSSxhQUV0Q0EsRUFBUUEsRUFBUSxLQUFVLEVBQUUsRUFBSSxPQUNoQ0EsRUFBUUEsRUFBUSxPQUFZLEVBQUUsRUFBSSxTQUVsQ0EsRUFBUUEs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QUFLLFdBQ0wsSUFBSyxhQUNMLElBQUssa0JBQ0wsSUFBSyxTQUNILE1BQU8sYUFDVCxJQUFLLGNBQ0wsSUFBSyxlQUNMLElBQUssVUFDSCxNQUFPLGVBQ1QsSUFBSyxjQUNMLElBQUssY0FDTCxJQUFLLGFBQ0wsSUFBSyxhQUNMLElBQUssWUFDTCxJQUFLLEtBQ0wsSUFBSyxTQUNILE1BQU8sY0FDVCxJQUFLLGNBQ0wsSUFBSyxhQUNMLElBQUssWUFDSCxNQUFPLGNBQ1QsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLFlBQ0gsTUFBTyxjQUNULElBQUssY0FDTCxJQUFLLGNBQ0wsSUFBSyxhQUNMLElBQUssWUFDTCxJQUFLLGNBQ0wsSUFBSyxLQUNILE1BQU8sY0FDVCxJQUFLLGNBQ0gsTUFBTyxjQUNULElBQUssVUFDTCxJQUFLLE1BQ0wsSUFBSyxPQUNMLElBQUssU0FDTCxJQUFLLFNBQ0gsTUFBTyxTQUNULElBQUssVUFDTCxJQUFLLFNBQ0gsTUFBTyxTQUNULElBQUssY0FDTCxJQUFLLE1BQ0wsSUFBSyxZQUNMLElBQUssY0FDSCxNQUFPLFlBQ1QsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLFlBQ0wsSUFBSyxVQUNMLElBQUssY0FDSCxNQUFPLGNBQ1QsSUFBSyxTQUNMLElBQUssZUFDTCxJQUFLLFdBQ0gsTUFBTyxlQUNULElBQUssU0FDTCxJQUFLLGVBQ0wsSUFBSyxXQUNILE1BQU8sZUFDVCxJQUFLLGlCQUNMLElBQUssUUFDTCxJQUFLLFNBQ0wsSUFBSyxRQUNMLElBQUssY0FDTCxJQUFLLFNBQ0wsSUFBSyxhQUNMLElBQUssYUFDTCxJQUFLLFlBQ0wsSUFBSyxXQUNMLElBQUssYUFDTCxJQUFLLGtCQUNMLElBQUssS0FDTCxJQUFLLFNBQ0wsSUFBSyxXQUNMLElBQUssZUFDTCxJQUFLLFdBQ0gsTUFBTyxlQUNULElBQUssU0FDTCxJQUFLLGVBQ0wsSUFBSyxXQUNILE1BQU8sZUFDVCxJQUFLLFNBQ0wsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLGFBQ0wsSUFBSyxZQUNMLElBQUssV0FD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QUNwREEsRUFBUUQsRUFBYyxLQUFLLENBQUMsQ0FBRSxLQUFBRSxDQUFLLElBQU1BLEVBQUssU0FBUyxxQkFBcUIsQ0FBQyxFQUM1RCxjQUFhLFNBQW1CLFVBQVMsUUFDMURELEVBQVFELEVBQWMsS0FBSyxDQUFDLENBQUUsS0FBQUUsQ0FBSyxJQUFNQSxFQUFLLFNBQVMsc0JBQXNCLENBQUMsR0FFNUUsQ0FBQ0QsRUFBTyxDQUNMRSxHQUFVLHlCQUFpQyxPQUFJLElBQVksV0FBUSxZQUFZSixHQUFTLFNBQVdILENBQU8sRUFBRSxFQUNqSCxNQUNGLENBRUEsSUFBTVEsRUFBZ0IsTUFBTUMsR0FBYUosRUFBTSxXQUFXLEVBQ3BESyxFQUF3QkwsRUFBTSxZQUFZLFNBQVMsTUFBTSxFQUM3RCxNQUFNTSxHQUFXSCxDQUFhLEVBQzlCLE1BQU1JLEdBQVdKLENBQWEsRUFDaEMsTUFBTUssR0FBSyxHQUFBQyxRQUFLLEtBQUtKLEVBQXVCLFNBQVMsRUFBRyxDQUFDLGdCQUFpQixlQUFnQixjQUFjLENBQUMsQ0FDM0csR0FBRyIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX3R1bm5lbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibmV0IiwgInRscyIsICJodHRwIiwgImh0dHBzIiwgImV2ZW50cyIsICJhc3NlcnQiLCAidXRpbCIsICJodHRwT3Zlckh0dHAiLCAiaHR0cHNPdmVySHR0cCIsICJodHRwT3Zlckh0dHBzIiwgImh0dHBzT3Zlckh0dHBzIiwgIm9wdGlvbnMiLCAiYWdlbnQiLCAiVHVubmVsaW5nQWdlbnQiLCAiY3JlYXRlU2VjdXJlU29ja2V0IiwgInNlbGYiLCAic29ja2V0IiwgImhvc3QiLCAicG9ydCIsICJsb2NhbEFkZHJlc3MiLCAidG9PcHRpb25zIiwgImkiLCAibGVuIiwgInBlbmRpbmciLCAicmVxIiwgIm1lcmdlT3B0aW9ucyIsICJvbkZyZWUiLCAib25DbG9zZU9yUmVtb3ZlIiwgImVyciIsICJjYiIsICJwbGFjZWhvbGRlciIsICJjb25uZWN0T3B0aW9ucyIsICJkZWJ1ZyIsICJjb25uZWN0UmVxIiwgIm9uUmVzcG9uc2UiLCAib25VcGdyYWRlIiwgIm9uQ29ubmVjdCIsICJvbkVycm9yIiwgInJlcyIsICJoZWFkIiwgImVycm9yIiwgImNhdXNlIiwgInBvcyIsICJob3N0SGVhZGVyIiwgInRsc09wdGlvbnMiLCAic2VjdXJlU29ja2V0IiwgInRhcmdldCIsICJvdmVycmlkZXMiLCAia2V5cyIsICJqIiwgImtleUxlbiIsICJrIiwgImFyZ3MiLCAicmVxdWlyZV90dW5uZWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2Vycm9ycyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtVbmRpY2lFcnJvciIsICJVbmRpY2lFcnJvciIsICJtZXNzYWdlIiwgImluc3RhbmNlIiwgImtDb25uZWN0VGltZW91dEVycm9yIiwgIkNvbm5lY3RUaW1lb3V0RXJyb3IiLCAia0hlYWRlcnNUaW1lb3V0RXJyb3IiLCAiSGVhZGVyc1RpbWVvdXRFcnJvciIsICJrSGVhZGVyc092ZXJmbG93RXJyb3IiLCAiSGVhZGVyc092ZXJmbG93RXJyb3IiLCAia0JvZHlUaW1lb3V0RXJyb3IiLCAiQm9keVRpbWVvdXRFcnJvciIsICJrUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAiUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAic3RhdHVzQ29kZSIsICJoZWFkZXJzIiwgImJvZHkiLCAia0ludmFsaWRBcmd1bWVudEVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJrQWJvcnRFcnJvciIsICJBYm9ydEVycm9yIiwgImtSZXF1ZXN0QWJvcnRlZEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAia0luZm9ybWF0aW9uYWxFcnJvciIsICJJbmZvcm1hdGlvbmFsRXJyb3IiLCAia1JlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciIsICJSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAia1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAiUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciIsICJrQ2xpZW50RGVzdHJveWVkRXJyb3IiLCAiQ2xpZW50RGVzdHJveWVkRXJyb3IiLCAia0NsaWVudENsb3NlZEVycm9yIiwgIkNsaWVudENsb3NlZEVycm9yIiwgImtTb2NrZXRFcnJvciIsICJTb2NrZXRFcnJvciIsICJzb2NrZXQiLCAia05vdFN1cHBvcnRlZEVycm9yIiwgIk5vdFN1cHBvcnRlZEVycm9yIiwgImtCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciIsICJCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciIsICJrSFRUUFBhcnNlckVycm9yIiwgIkhUVFBQYXJzZXJFcnJvciIsICJjb2RlIiwgImRhdGEiLCAia1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IiLCAiUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciIsICJrUmVxdWVzdFJldHJ5RXJyb3IiLCAiUmVxdWVzdFJldHJ5RXJyb3IiLCAia1Jlc3BvbnNlRXJyb3IiLCAiUmVzcG9uc2VFcnJvciIsICJrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IiLCAiU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IiLCAiY2F1c2UiLCAib3B0aW9ucyIsICJrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIiwgIk1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIiwgIndlbGxrbm93bkhlYWRlck5hbWVzIiwgImkiLCAia2V5IiwgImxvd2VyQ2FzZWRLZXkiLCAicmVxdWlyZV90cmVlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAid2VsbGtub3duSGVhZGVyTmFtZXMiLCAiaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQiLCAiVHN0Tm9kZSIsICJfVHN0Tm9kZSIsICJrZXkiLCAidmFsdWUiLCAiaW5kZXgiLCAibGVuZ3RoIiwgIm5vZGUiLCAiY29kZSIsICJrZXlsZW5ndGgiLCAiVGVybmFyeVNlYXJjaFRyZWUiLCAidHJlZSIsICJpIiwgInJlcXVpcmVfdXRpbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJrRGVzdHJveWVkIiwgImtCb2R5VXNlZCIsICJrTGlzdGVuZXJzIiwgImtCb2R5IiwgIkluY29taW5nTWVzc2FnZSIsICJzdHJlYW0iLCAibmV0IiwgIkJsb2IiLCAibm9kZVV0aWwiLCAic3RyaW5naWZ5IiwgIkVFIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIiwgInRyZWUiLCAibm9kZU1ham9yIiwgIm5vZGVNaW5vciIsICJ2IiwgIkJvZHlBc3luY0l0ZXJhYmxlIiwgImJvZHkiLCAid3JhcFJlcXVlc3RCb2R5IiwgImlzU3RyZWFtIiwgImJvZHlMZW5ndGgiLCAiaXNJdGVyYWJsZSIsICJub3AiLCAib2JqIiwgImlzQmxvYkxpa2UiLCAib2JqZWN0IiwgInNUYWciLCAiYnVpbGRVUkwiLCAidXJsIiwgInF1ZXJ5UGFyYW1zIiwgInN0cmluZ2lmaWVkIiwgImlzVmFsaWRQb3J0IiwgInBvcnQiLCAidmFsdWUiLCAiaXNIdHRwT3JIdHRwc1ByZWZpeGVkIiwgInBhcnNlVVJMIiwgIm9yaWdpbiIsICJwYXRoIiwgInBhcnNlT3JpZ2luIiwgImdldEhvc3RuYW1lIiwgImhvc3QiLCAiaWR4IiwgImdldFNlcnZlck5hbWUiLCAic2VydmVybmFtZSIsICJkZWVwQ2xvbmUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgInN0YXRlIiwgImlzQnVmZmVyIiwgImlzRGVzdHJveWVkIiwgImRlc3Ryb3kiLCAiZXJyIiwgIktFRVBBTElWRV9USU1FT1VUX0VYUFIiLCAicGFyc2VLZWVwQWxpdmVUaW1lb3V0IiwgInZhbCIsICJtIiwgImhlYWRlck5hbWVUb1N0cmluZyIsICJidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIiwgInBhcnNlSGVhZGVycyIsICJoZWFkZXJzIiwgImkiLCAia2V5IiwgImhlYWRlcnNWYWx1ZSIsICJ4IiwgInBhcnNlUmF3SGVhZGVycyIsICJsZW4iLCAicmV0IiwgImhhc0NvbnRlbnRMZW5ndGgiLCAiY29udGVudERpc3Bvc2l0aW9uSWR4IiwgImtMZW4iLCAibiIsICJidWZmZXIiLCAidmFsaWRhdGVIYW5kbGVyIiwgImhhbmRsZXIiLCAibWV0aG9kIiwgInVwZ3JhZGUiLCAiaXNEaXN0dXJiZWQiLCAiaXNFcnJvcmVkIiwgImlzUmVhZGFibGUiLCAiZ2V0U29ja2V0SW5mbyIsICJzb2NrZXQiLCAiUmVhZGFibGVTdHJlYW1Gcm9tIiwgIml0ZXJhYmxlIiwgIml0ZXJhdG9yIiwgImNvbnRyb2xsZXIiLCAiZG9uZSIsICJidWYiLCAicmVhc29uIiwgImlzRm9ybURhdGFMaWtlIiwgImFkZEFib3J0TGlzdGVuZXIiLCAic2lnbmFsIiwgImxpc3RlbmVyIiwgImhhc1RvV2VsbEZvcm1lZCIsICJoYXNJc1dlbGxGb3JtZWQiLCAidG9VU1ZTdHJpbmciLCAiaXNVU1ZTdHJpbmciLCAiaXNUb2tlbkNoYXJDb2RlIiwgImMiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJjaGFyYWN0ZXJzIiwgImhlYWRlckNoYXJSZWdleCIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAicGFyc2VSYW5nZUhlYWRlciIsICJyYW5nZSIsICJhZGRMaXN0ZW5lciIsICJuYW1lIiwgInJlbW92ZUFsbExpc3RlbmVycyIsICJlcnJvclJlcXVlc3QiLCAiY2xpZW50IiwgInJlcXVlc3QiLCAia0VudW1lcmFibGVQcm9wZXJ0eSIsICJub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UiLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHMiLCAicmVxdWlyZV9kaWFnbm9zdGljcyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImRpYWdub3N0aWNzQ2hhbm5lbCIsICJ1dGlsIiwgInVuZGljaURlYnVnTG9nIiwgImZldGNoRGVidWdsb2ciLCAid2Vic29ja2V0RGVidWdsb2ciLCAiaXNDbGllbnRTZXQiLCAiY2hhbm5lbHMiLCAiZGVidWdsb2ciLCAiZXZ0IiwgInZlcnNpb24iLCAicHJvdG9jb2wiLCAicG9ydCIsICJob3N0IiwgImVycm9yIiwgIm1ldGhvZCIsICJwYXRoIiwgIm9yaWdpbiIsICJzdGF0dXNDb2RlIiwgImFkZHJlc3MiLCAid2Vic29ja2V0IiwgImNvZGUiLCAicmVhc29uIiwgImVyciIsICJyZXF1aXJlX3JlcXVlc3QiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJOb3RTdXBwb3J0ZWRFcnJvciIsICJhc3NlcnQiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAiaXNTdHJlYW0iLCAiZGVzdHJveSIsICJpc0J1ZmZlciIsICJpc0Zvcm1EYXRhTGlrZSIsICJpc0l0ZXJhYmxlIiwgImlzQmxvYkxpa2UiLCAiYnVpbGRVUkwiLCAidmFsaWRhdGVIYW5kbGVyIiwgImdldFNlcnZlck5hbWUiLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHMiLCAiY2hhbm5lbHMiLCAiaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQiLCAiaW52YWxpZFBhdGhSZWdleCIsICJrSGFuZGxlciIsICJSZXF1ZXN0IiwgIm9yaWdpbiIsICJwYXRoIiwgIm1ldGhvZCIsICJib2R5IiwgImhlYWRlcnMiLCAicXVlcnkiLCAiaWRlbXBvdGVudCIsICJibG9ja2luZyIsICJ1cGdyYWRlIiwgImhlYWRlcnNUaW1lb3V0IiwgImJvZHlUaW1lb3V0IiwgInJlc2V0IiwgInRocm93T25FcnJvciIsICJleHBlY3RDb250aW51ZSIsICJzZXJ2ZXJuYW1lIiwgImhhbmRsZXIiLCAiclN0YXRlIiwgImVyciIsICJpIiwgInByb2Nlc3NIZWFkZXIiLCAiaGVhZGVyIiwgImtleXMiLCAiY2h1bmsiLCAiYWJvcnQiLCAic3RhdHVzQ29kZSIsICJyZXN1bWUiLCAic3RhdHVzVGV4dCIsICJzb2NrZXQiLCAidHJhaWxlcnMiLCAiZXJyb3IiLCAia2V5IiwgInZhbHVlIiwgInJlcXVlc3QiLCAidmFsIiwgImhlYWRlck5hbWUiLCAiYXJyIiwgInN0ciIsICJyZXF1aXJlX2Rpc3BhdGNoZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJFdmVudEVtaXR0ZXIiLCAiRGlzcGF0Y2hlciIsICJhcmdzIiwgImludGVyY2VwdG9ycyIsICJkaXNwYXRjaCIsICJpbnRlcmNlcHRvciIsICJDb21wb3NlZERpc3BhdGNoZXIiLCAiI2Rpc3BhdGNoZXIiLCAiI2Rpc3BhdGNoIiwgImRpc3BhdGNoZXIiLCAicmVxdWlyZV9kaXNwYXRjaGVyX2Jhc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJEaXNwYXRjaGVyIiwgIkNsaWVudERlc3Ryb3llZEVycm9yIiwgIkNsaWVudENsb3NlZEVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtEZXN0cm95IiwgImtDbG9zZSIsICJrQ2xvc2VkIiwgImtEZXN0cm95ZWQiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAia09uRGVzdHJveWVkIiwgImtPbkNsb3NlZCIsICJrSW50ZXJjZXB0ZWREaXNwYXRjaCIsICJrV2ViU29ja2V0T3B0aW9ucyIsICJEaXNwYXRjaGVyQmFzZSIsICJvcHRzIiwgIm5ld0ludGVyY2VwdG9ycyIsICJpIiwgImNhbGxiYWNrIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVyciIsICJkYXRhIiwgIm9uQ2xvc2VkIiwgImNhbGxiYWNrcyIsICJvbkRlc3Ryb3llZCIsICJoYW5kbGVyIiwgImRpc3BhdGNoIiwgInJlcXVpcmVfdGltZXJzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZmFzdE5vdyIsICJSRVNPTFVUSU9OX01TIiwgIlRJQ0tfTVMiLCAiZmFzdE5vd1RpbWVvdXQiLCAia0Zhc3RUaW1lciIsICJmYXN0VGltZXJzIiwgIk5PVF9JTl9MSVNUIiwgIlRPX0JFX0NMRUFSRUQiLCAiUEVORElORyIsICJBQ1RJVkUiLCAib25UaWNrIiwgImlkeCIsICJsZW4iLCAidGltZXIiLCAicmVmcmVzaFRpbWVvdXQiLCAiRmFzdFRpbWVyIiwgImNhbGxiYWNrIiwgImRlbGF5IiwgImFyZyIsICJ0aW1lb3V0IiwgInJlcXVpcmVfY29ubmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm5ldCIsICJhc3NlcnQiLCAidXRpbCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJDb25uZWN0VGltZW91dEVycm9yIiwgInRpbWVycyIsICJub29wIiwgInRscyIsICJTZXNzaW9uQ2FjaGUiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAia2V5IiwgInJlZiIsICJzZXNzaW9uS2V5IiwgInNlc3Npb24iLCAib2xkZXN0S2V5IiwgImJ1aWxkQ29ubmVjdG9yIiwgImFsbG93SDIiLCAic29ja2V0UGF0aCIsICJ0aW1lb3V0IiwgImN1c3RvbVNlc3Npb24iLCAib3B0cyIsICJvcHRpb25zIiwgInNlc3Npb25DYWNoZSIsICJob3N0bmFtZSIsICJob3N0IiwgInByb3RvY29sIiwgInBvcnQiLCAic2VydmVybmFtZSIsICJsb2NhbEFkZHJlc3MiLCAiaHR0cFNvY2tldCIsICJjYWxsYmFjayIsICJzb2NrZXQiLCAia2VlcEFsaXZlSW5pdGlhbERlbGF5IiwgImNsZWFyQ29ubmVjdFRpbWVvdXQiLCAic2V0dXBDb25uZWN0VGltZW91dCIsICJjYiIsICJlcnIiLCAic29ja2V0V2Vha1JlZiIsICJzMSIsICJzMiIsICJmYXN0VGltZXIiLCAib25Db25uZWN0VGltZW91dCIsICJtZXNzYWdlIiwgInJlcXVpcmVfdXRpbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgImVudW1Ub01hcCIsICJvYmoiLCAicmVzIiwgImtleSIsICJ2YWx1ZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAidXRpbHNfMSIsICJFUlJPUiIsICJUWVBFIiwgIkZMQUdTIiwgIkxFTklFTlRfRkxBR1MiLCAiTUVUSE9EUyIsICJrZXkiLCAiRklOSVNIIiwgImkiLCAiYyIsICJIRUFERVJfU1RBVEUiLCAicmVxdWlyZV9sbGh0dHBfd2FzbSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJ1ZmZlciIsICJyZXF1aXJlX2xsaHR0cF9zaW1kX3dhc20iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCdWZmZXIiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb3JzU2FmZUxpc3RlZE1ldGhvZHMiLCAiY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0IiwgIm51bGxCb2R5U3RhdHVzIiwgInJlZGlyZWN0U3RhdHVzIiwgInJlZGlyZWN0U3RhdHVzU2V0IiwgImJhZFBvcnRzIiwgImJhZFBvcnRzU2V0IiwgInJlZmVycmVyUG9saWN5IiwgInJlZmVycmVyUG9saWN5U2V0IiwgInJlcXVlc3RSZWRpcmVjdCIsICJzYWZlTWV0aG9kcyIsICJzYWZlTWV0aG9kc1NldCIsICJyZXF1ZXN0TW9kZSIsICJyZXF1ZXN0Q3JlZGVudGlhbHMiLCAicmVxdWVzdENhY2hlIiwgInJlcXVlc3RCb2R5SGVhZGVyIiwgInJlcXVlc3REdXBsZXgiLCAiZm9yYmlkZGVuTWV0aG9kcyIsICJmb3JiaWRkZW5NZXRob2RzU2V0IiwgInN1YnJlc291cmNlIiwgInN1YnJlc291cmNlU2V0IiwgInJlcXVpcmVfZ2xvYmFsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsT3JpZ2luIiwgImdldEdsb2JhbE9yaWdpbiIsICJzZXRHbG9iYWxPcmlnaW4iLCAibmV3T3JpZ2luIiwgInBhcnNlZFVSTCIsICJyZXF1aXJlX2RhdGFfdXJsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImVuY29kZXIiLCAiSFRUUF9UT0tFTl9DT0RFUE9JTlRTIiwgIkhUVFBfV0hJVEVTUEFDRV9SRUdFWCIsICJBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVgiLCAiSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyIsICJkYXRhVVJMUHJvY2Vzc29yIiwgImRhdGFVUkwiLCAiaW5wdXQiLCAiVVJMU2VyaWFsaXplciIsICJwb3NpdGlvbiIsICJtaW1lVHlwZSIsICJjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCIsICJtaW1lVHlwZUxlbmd0aCIsICJyZW1vdmVBU0NJSVdoaXRlc3BhY2UiLCAiZW5jb2RlZEJvZHkiLCAiYm9keSIsICJzdHJpbmdQZXJjZW50RGVjb2RlIiwgInN0cmluZ0JvZHkiLCAiaXNvbW9ycGhpY0RlY29kZSIsICJmb3JnaXZpbmdCYXNlNjQiLCAibWltZVR5cGVSZWNvcmQiLCAicGFyc2VNSU1FVHlwZSIsICJ1cmwiLCAiZXhjbHVkZUZyYWdtZW50IiwgImhyZWYiLCAiaGFzaExlbmd0aCIsICJzZXJpYWxpemVkIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMiLCAiY29uZGl0aW9uIiwgInJlc3VsdCIsICJjaGFyIiwgImlkeCIsICJzdGFydCIsICJieXRlcyIsICJwZXJjZW50RGVjb2RlIiwgImlzSGV4Q2hhckJ5dGUiLCAiYnl0ZSIsICJoZXhCeXRlVG9OdW1iZXIiLCAibGVuZ3RoIiwgIm91dHB1dCIsICJqIiwgImkiLCAicmVtb3ZlSFRUUFdoaXRlc3BhY2UiLCAidHlwZSIsICJzdWJ0eXBlIiwgInR5cGVMb3dlcmNhc2UiLCAic3VidHlwZUxvd2VyY2FzZSIsICJwYXJhbWV0ZXJOYW1lIiwgInBhcmFtZXRlclZhbHVlIiwgImNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmciLCAiZGF0YSIsICJkYXRhTGVuZ3RoIiwgImJ1ZmZlciIsICJleHRyYWN0VmFsdWUiLCAicG9zaXRpb25TdGFydCIsICJ2YWx1ZSIsICJxdW90ZU9yQmFja3NsYXNoIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJwYXJhbWV0ZXJzIiwgImVzc2VuY2UiLCAic2VyaWFsaXphdGlvbiIsICJuYW1lIiwgImlzSFRUUFdoaXRlU3BhY2UiLCAic3RyIiwgImxlYWRpbmciLCAidHJhaWxpbmciLCAicmVtb3ZlQ2hhcnMiLCAiaXNBU0NJSVdoaXRlc3BhY2UiLCAicHJlZGljYXRlIiwgImxlYWQiLCAidHJhaWwiLCAiYWRkaXRpb24iLCAibWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZSIsICJyZXF1aXJlX3dlYmlkbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInR5cGVzIiwgImluc3BlY3QiLCAibWFya0FzVW5jbG9uZWFibGUiLCAidG9VU1ZTdHJpbmciLCAid2ViaWRsIiwgIm1lc3NhZ2UiLCAiY29udGV4dCIsICJwbHVyYWwiLCAiViIsICJJIiwgIm9wdHMiLCAiZXJyIiwgImxlbmd0aCIsICJtaW4iLCAiY3R4IiwgImJpdExlbmd0aCIsICJzaWduZWRuZXNzIiwgInVwcGVyQm91bmQiLCAibG93ZXJCb3VuZCIsICJ4IiwgIm4iLCAiciIsICJjb252ZXJ0ZXIiLCAicHJlZml4IiwgImFyZ3VtZW50IiwgIkl0ZXJhYmxlIiwgIm1ldGhvZCIsICJzZXEiLCAiaW5kZXgiLCAiZG9uZSIsICJ2YWx1ZSIsICJrZXlDb252ZXJ0ZXIiLCAidmFsdWVDb252ZXJ0ZXIiLCAiTyIsICJyZXN1bHQiLCAia2V5cyIsICJrZXkiLCAidHlwZWRLZXkiLCAidHlwZWRWYWx1ZSIsICJpIiwgImNvbnZlcnRlcnMiLCAiZGljdGlvbmFyeSIsICJ0eXBlIiwgImRpY3QiLCAib3B0aW9ucyIsICJkZWZhdWx0VmFsdWUiLCAicmVxdWlyZWQiLCAiaGFzRGVmYXVsdCIsICJUIiwgIm5hbWUiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVHJhbnNmb3JtIiwgInpsaWIiLCAicmVkaXJlY3RTdGF0dXNTZXQiLCAicmVmZXJyZXJQb2xpY3lUb2tlbnMiLCAiYmFkUG9ydHNTZXQiLCAiZ2V0R2xvYmFsT3JpZ2luIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMiLCAiY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyIsICJyZW1vdmVDaGFycyIsICJwYXJzZU1JTUVUeXBlIiwgInBlcmZvcm1hbmNlIiwgImlzQmxvYkxpa2UiLCAiUmVhZGFibGVTdHJlYW1Gcm9tIiwgImlzVmFsaWRIVFRQVG9rZW4iLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlIiwgImFzc2VydCIsICJpc1VpbnQ4QXJyYXkiLCAid2ViaWRsIiwgInN1cHBvcnRlZEhhc2hlcyIsICJjcnlwdG8iLCAicG9zc2libGVSZWxldmFudEhhc2hlcyIsICJoYXNoIiwgInJlc3BvbnNlVVJMIiwgInJlc3BvbnNlIiwgInVybExpc3QiLCAibGVuZ3RoIiwgInJlc3BvbnNlTG9jYXRpb25VUkwiLCAicmVxdWVzdEZyYWdtZW50IiwgImxvY2F0aW9uIiwgImlzVmFsaWRIZWFkZXJWYWx1ZSIsICJpc1ZhbGlkRW5jb2RlZFVSTCIsICJub3JtYWxpemVCaW5hcnlTdHJpbmdUb1V0ZjgiLCAidXJsIiwgImkiLCAiY29kZSIsICJ2YWx1ZSIsICJyZXF1ZXN0Q3VycmVudFVSTCIsICJyZXF1ZXN0IiwgInJlcXVlc3RCYWRQb3J0IiwgInVybElzSHR0cEh0dHBzU2NoZW1lIiwgImlzRXJyb3JMaWtlIiwgIm9iamVjdCIsICJpc1ZhbGlkUmVhc29uUGhyYXNlIiwgInN0YXR1c1RleHQiLCAiYyIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJwb3RlbnRpYWxWYWx1ZSIsICJzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IiwgImFjdHVhbFJlc3BvbnNlIiwgImhlYWRlcnNMaXN0IiwgInBvbGljeUhlYWRlciIsICJwb2xpY3kiLCAidG9rZW4iLCAiY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrIiwgImNvcnNDaGVjayIsICJUQU9DaGVjayIsICJhcHBlbmRGZXRjaE1ldGFkYXRhIiwgImh0dHBSZXF1ZXN0IiwgImhlYWRlciIsICJhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIiwgInNlcmlhbGl6ZWRPcmlnaW4iLCAidXJsSGFzSHR0cHNTY2hlbWUiLCAic2FtZU9yaWdpbiIsICJjb2Fyc2VuVGltZSIsICJ0aW1lc3RhbXAiLCAiY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkiLCAiY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8iLCAiY29ubmVjdGlvblRpbWluZ0luZm8iLCAiZGVmYXVsdFN0YXJ0VGltZSIsICJjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSIsICJjcmVhdGVPcGFxdWVUaW1pbmdJbmZvIiwgInRpbWluZ0luZm8iLCAibWFrZVBvbGljeUNvbnRhaW5lciIsICJjbG9uZVBvbGljeUNvbnRhaW5lciIsICJwb2xpY3lDb250YWluZXIiLCAiZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciIsICJyZWZlcnJlclNvdXJjZSIsICJnbG9iYWxPcmlnaW4iLCAicmVmZXJyZXJVUkwiLCAic3RyaXBVUkxGb3JSZWZlcnJlciIsICJyZWZlcnJlck9yaWdpbiIsICJhcmVTYW1lT3JpZ2luIiwgImlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSIsICJpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkiLCAiY3VycmVudFVSTCIsICJvcmlnaW5Pbmx5IiwgImlzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeSIsICJvcmlnaW4iLCAib3JpZ2luQXNVUkwiLCAiYnl0ZXNNYXRjaCIsICJieXRlcyIsICJtZXRhZGF0YUxpc3QiLCAicGFyc2VkTWV0YWRhdGEiLCAicGFyc2VNZXRhZGF0YSIsICJzdHJvbmdlc3QiLCAiZ2V0U3Ryb25nZXN0TWV0YWRhdGEiLCAibWV0YWRhdGEiLCAiZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0iLCAiaXRlbSIsICJhbGdvcml0aG0iLCAiZXhwZWN0ZWRWYWx1ZSIsICJhY3R1YWxWYWx1ZSIsICJjb21wYXJlQmFzZTY0TWl4ZWQiLCAicGFyc2VIYXNoV2l0aE9wdGlvbnMiLCAicmVzdWx0IiwgImVtcHR5IiwgInBhcnNlZFRva2VuIiwgInBvcyIsICJ0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwiLCAiQSIsICJCIiwgImNyZWF0ZURlZmVycmVkUHJvbWlzZSIsICJyZXMiLCAicmVqIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImlzQWJvcnRlZCIsICJmZXRjaFBhcmFtcyIsICJpc0NhbmNlbGxlZCIsICJub3JtYWxpemVNZXRob2QiLCAibWV0aG9kIiwgInNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyIsICJlc0l0ZXJhdG9yUHJvdG90eXBlIiwgImNyZWF0ZUl0ZXJhdG9yIiwgIm5hbWUiLCAia0ludGVybmFsSXRlcmF0b3IiLCAia2V5SW5kZXgiLCAidmFsdWVJbmRleCIsICJGYXN0SXRlcmFibGVJdGVyYXRvciIsICIjdGFyZ2V0IiwgIiNraW5kIiwgIiNpbmRleCIsICJ0YXJnZXQiLCAia2luZCIsICJpbmRleCIsICJ2YWx1ZXMiLCAibGVuIiwgImtleSIsICJpdGVyYXRvck1peGluIiwgIm1ha2VJdGVyYXRvciIsICJwcm9wZXJ0aWVzIiwgImNhbGxiYWNrZm4iLCAidGhpc0FyZyIsICJmdWxseVJlYWRCb2R5IiwgImJvZHkiLCAicHJvY2Vzc0JvZHkiLCAicHJvY2Vzc0JvZHlFcnJvciIsICJzdWNjZXNzU3RlcHMiLCAiZXJyb3JTdGVwcyIsICJyZWFkZXIiLCAiZSIsICJyZWFkQWxsQnl0ZXMiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAic3RyZWFtIiwgInJlYWRhYmxlU3RyZWFtQ2xvc2UiLCAiY29udHJvbGxlciIsICJlcnIiLCAiaW52YWxpZElzb21vcnBoaWNFbmNvZGVWYWx1ZVJlZ2V4IiwgImlzb21vcnBoaWNFbmNvZGUiLCAiaW5wdXQiLCAiYnl0ZUxlbmd0aCIsICJkb25lIiwgImNodW5rIiwgInVybElzTG9jYWwiLCAicHJvdG9jb2wiLCAic2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZSIsICJhbGxvd1doaXRlc3BhY2UiLCAiZGF0YSIsICJwb3NpdGlvbiIsICJjaGFyIiwgInJhbmdlU3RhcnQiLCAicmFuZ2VTdGFydFZhbHVlIiwgInJhbmdlRW5kIiwgInJhbmdlRW5kVmFsdWUiLCAiYnVpbGRDb250ZW50UmFuZ2UiLCAiZnVsbExlbmd0aCIsICJjb250ZW50UmFuZ2UiLCAiSW5mbGF0ZVN0cmVhbSIsICIjemxpYk9wdGlvbnMiLCAiemxpYk9wdGlvbnMiLCAiZW5jb2RpbmciLCAiY2FsbGJhY2siLCAiY3JlYXRlSW5mbGF0ZSIsICJleHRyYWN0TWltZVR5cGUiLCAiaGVhZGVycyIsICJjaGFyc2V0IiwgImVzc2VuY2UiLCAibWltZVR5cGUiLCAiZ2V0RGVjb2RlU3BsaXQiLCAidGVtcG9yYXJ5TWltZVR5cGUiLCAiZ2V0dGluZ0RlY29kaW5nU3BsaXR0aW5nIiwgInRlbXBvcmFyeVZhbHVlIiwgImxpc3QiLCAidGV4dERlY29kZXIiLCAidXRmOERlY29kZUJ5dGVzIiwgImJ1ZmZlciIsICJFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0QmFzZSIsICJFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAicmVxdWlyZV9zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9maWxlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQmxvYiIsICJGaWxlIiwgImtTdGF0ZSIsICJ3ZWJpZGwiLCAiRmlsZUxpa2UiLCAiX0ZpbGVMaWtlIiwgImJsb2JMaWtlIiwgImZpbGVOYW1lIiwgIm9wdGlvbnMiLCAibiIsICJ0IiwgImQiLCAiYXJncyIsICJpc0ZpbGVMaWtlIiwgIm9iamVjdCIsICJyZXF1aXJlX2Zvcm1kYXRhIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNCbG9iTGlrZSIsICJpdGVyYXRvck1peGluIiwgImtTdGF0ZSIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIkZpbGVMaWtlIiwgImlzRmlsZUxpa2UiLCAid2ViaWRsIiwgIk5hdGl2ZUZpbGUiLCAibm9kZVV0aWwiLCAiRmlsZSIsICJGb3JtRGF0YSIsICJfRm9ybURhdGEiLCAiZm9ybSIsICJuYW1lIiwgInZhbHVlIiwgImZpbGVuYW1lIiwgInByZWZpeCIsICJlbnRyeSIsICJtYWtlRW50cnkiLCAiaWR4IiwgImRlcHRoIiwgIm9wdGlvbnMiLCAic3RhdGUiLCAiYSIsICJiIiwgIm91dHB1dCIsICJyZXF1aXJlX2Zvcm1kYXRhX3BhcnNlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzVVNWU3RyaW5nIiwgImJ1ZmZlclRvTG93ZXJDYXNlZEhlYWRlck5hbWUiLCAidXRmOERlY29kZUJ5dGVzIiwgIkhUVFBfVE9LRU5fQ09ERVBPSU5UUyIsICJpc29tb3JwaGljRGVjb2RlIiwgImlzRmlsZUxpa2UiLCAibWFrZUVudHJ5IiwgImFzc2VydCIsICJOb2RlRmlsZSIsICJGaWxlIiwgImZvcm1EYXRhTmFtZUJ1ZmZlciIsICJmaWxlbmFtZUJ1ZmZlciIsICJkZCIsICJkZGNybGYiLCAiaXNBc2NpaVN0cmluZyIsICJjaGFycyIsICJpIiwgInZhbGlkYXRlQm91bmRhcnkiLCAiYm91bmRhcnkiLCAibGVuZ3RoIiwgImNwIiwgIm11bHRpcGFydEZvcm1EYXRhUGFyc2VyIiwgImlucHV0IiwgIm1pbWVUeXBlIiwgImJvdW5kYXJ5U3RyaW5nIiwgImVudHJ5TGlzdCIsICJwb3NpdGlvbiIsICJ0cmFpbGluZyIsICJidWZmZXJTdGFydHNXaXRoIiwgInJlc3VsdCIsICJwYXJzZU11bHRpcGFydEZvcm1EYXRhSGVhZGVycyIsICJuYW1lIiwgImZpbGVuYW1lIiwgImNvbnRlbnRUeXBlIiwgImVuY29kaW5nIiwgImJvZHkiLCAiYm91bmRhcnlJbmRleCIsICJ2YWx1ZSIsICJoZWFkZXJOYW1lIiwgImNvbGxlY3RBU2VxdWVuY2VPZkJ5dGVzIiwgImNoYXIiLCAicmVtb3ZlQ2hhcnMiLCAicGFyc2VNdWx0aXBhcnRGb3JtRGF0YU5hbWUiLCAiY2hlY2siLCAiaGVhZGVyVmFsdWUiLCAiY29uZGl0aW9uIiwgInN0YXJ0IiwgImJ1ZiIsICJsZWFkaW5nIiwgInByZWRpY2F0ZSIsICJsZWFkIiwgInRyYWlsIiwgImJ1ZmZlciIsICJyZXF1aXJlX2JvZHkiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgIlJlYWRhYmxlU3RyZWFtRnJvbSIsICJpc0Jsb2JMaWtlIiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgInJlYWRhYmxlU3RyZWFtQ2xvc2UiLCAiY3JlYXRlRGVmZXJyZWRQcm9taXNlIiwgImZ1bGx5UmVhZEJvZHkiLCAiZXh0cmFjdE1pbWVUeXBlIiwgInV0ZjhEZWNvZGVCeXRlcyIsICJGb3JtRGF0YSIsICJrU3RhdGUiLCAid2ViaWRsIiwgIkJsb2IiLCAiYXNzZXJ0IiwgImlzRXJyb3JlZCIsICJpc0Rpc3R1cmJlZCIsICJpc0FycmF5QnVmZmVyIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJtdWx0aXBhcnRGb3JtRGF0YVBhcnNlciIsICJyYW5kb20iLCAiY3J5cHRvIiwgIm1heCIsICJ0ZXh0RW5jb2RlciIsICJub29wIiwgImhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgInN0cmVhbVJlZ2lzdHJ5IiwgIndlYWtSZWYiLCAic3RyZWFtIiwgImV4dHJhY3RCb2R5IiwgIm9iamVjdCIsICJrZWVwYWxpdmUiLCAiY29udHJvbGxlciIsICJidWZmZXIiLCAic291cmNlIiwgImFjdGlvbiIsICJsZW5ndGgiLCAidHlwZSIsICJib3VuZGFyeSIsICJwcmVmaXgiLCAiZXNjYXBlIiwgInN0ciIsICJub3JtYWxpemVMaW5lZmVlZHMiLCAidmFsdWUiLCAiYmxvYlBhcnRzIiwgInJuIiwgImhhc1Vua25vd25TaXplVmFsdWUiLCAibmFtZSIsICJjaHVuayIsICJwYXJ0IiwgIml0ZXJhdG9yIiwgImRvbmUiLCAicmVhc29uIiwgInNhZmVseUV4dHJhY3RCb2R5IiwgImNsb25lQm9keSIsICJpbnN0YW5jZSIsICJib2R5IiwgIm91dDEiLCAib3V0MiIsICJ0aHJvd0lmQWJvcnRlZCIsICJzdGF0ZSIsICJib2R5TWl4aW5NZXRob2RzIiwgImNvbnN1bWVCb2R5IiwgImJ5dGVzIiwgIm1pbWVUeXBlIiwgImJvZHlNaW1lVHlwZSIsICJwYXJzZUpTT05Gcm9tQnl0ZXMiLCAicGFyc2VkIiwgImZkIiwgImVudHJpZXMiLCAibWl4aW5Cb2R5IiwgInByb3RvdHlwZSIsICJjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUiLCAiYm9keVVudXNhYmxlIiwgInByb21pc2UiLCAiZXJyb3JTdGVwcyIsICJlcnJvciIsICJzdWNjZXNzU3RlcHMiLCAiZGF0YSIsICJlIiwgInJlcXVlc3RPclJlc3BvbnNlIiwgImhlYWRlcnMiLCAicmVxdWlyZV9jbGllbnRfaDEiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAidXRpbCIsICJjaGFubmVscyIsICJ0aW1lcnMiLCAiUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIiwgIlJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJIZWFkZXJzVGltZW91dEVycm9yIiwgIkhlYWRlcnNPdmVyZmxvd0Vycm9yIiwgIlNvY2tldEVycm9yIiwgIkluZm9ybWF0aW9uYWxFcnJvciIsICJCb2R5VGltZW91dEVycm9yIiwgIkhUVFBQYXJzZXJFcnJvciIsICJSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIiwgImtVcmwiLCAia1Jlc2V0IiwgImtDbGllbnQiLCAia1BhcnNlciIsICJrQmxvY2tpbmciLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1NpemUiLCAia1dyaXRpbmciLCAia1F1ZXVlIiwgImtOb1JlZiIsICJrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQiLCAia0hvc3RIZWFkZXIiLCAia1BlbmRpbmdJZHgiLCAia1J1bm5pbmdJZHgiLCAia0Vycm9yIiwgImtQaXBlbGluaW5nIiwgImtTb2NrZXQiLCAia0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSIsICJrTWF4SGVhZGVyc1NpemUiLCAia0tlZXBBbGl2ZU1heFRpbWVvdXQiLCAia0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQiLCAia0hlYWRlcnNUaW1lb3V0IiwgImtCb2R5VGltZW91dCIsICJrU3RyaWN0Q29udGVudExlbmd0aCIsICJrTWF4UmVxdWVzdHMiLCAia0NvdW50ZXIiLCAia01heFJlc3BvbnNlU2l6ZSIsICJrT25FcnJvciIsICJrUmVzdW1lIiwgImtIVFRQQ29udGV4dCIsICJjb25zdGFudHMiLCAiRU1QVFlfQlVGIiwgIkZhc3RCdWZmZXIiLCAiYWRkTGlzdGVuZXIiLCAicmVtb3ZlQWxsTGlzdGVuZXJzIiwgImtJZGxlU29ja2V0VmFsaWRhdGlvbiIsICJrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0IiwgImtTb2NrZXRVc2VkIiwgImV4dHJhY3RCb2R5IiwgImxhenlsbGh0dHAiLCAibGxodHRwV2FzbURhdGEiLCAibW9kIiwgInAiLCAiYXQiLCAibGVuIiwgImN1cnJlbnRQYXJzZXIiLCAic3RhcnQiLCAiY3VycmVudEJ1ZmZlclB0ciIsICJjdXJyZW50QnVmZmVyUmVmIiwgInN0YXR1c0NvZGUiLCAidXBncmFkZSIsICJzaG91bGRLZWVwQWxpdmUiLCAibGxodHRwSW5zdGFuY2UiLCAibGxodHRwUHJvbWlzZSIsICJjdXJyZW50QnVmZmVyU2l6ZSIsICJVU0VfTkFUSVZFX1RJTUVSIiwgIlVTRV9GQVNUX1RJTUVSIiwgIlRJTUVPVVRfSEVBREVSUyIsICJUSU1FT1VUX0JPRFkiLCAiVElNRU9VVF9LRUVQX0FMSVZFIiwgIlBhcnNlciIsICJjbGllbnQiLCAic29ja2V0IiwgImRlbGF5IiwgInR5cGUiLCAib25QYXJzZXJUaW1lb3V0IiwgImNodW5rIiwgImRhdGEiLCAibGxodHRwIiwgInJldCIsICJlcnIiLCAib2Zmc2V0IiwgImJvZHkiLCAiY29udGVudExlbmd0aCIsICJieXRlc1JlYWQiLCAicHRyIiwgIm1lc3NhZ2UiLCAiYnVmIiwgInJlcXVlc3QiLCAia2V5IiwgImhlYWRlck5hbWUiLCAiaGVhZCIsICJoZWFkZXJzIiwgInN0YXR1c1RleHQiLCAiYm9keVRpbWVvdXQiLCAia2VlcEFsaXZlVGltZW91dCIsICJ0aW1lb3V0IiwgInBhdXNlIiwgIm1heFJlc3BvbnNlU2l6ZSIsICJwYXJzZXIiLCAidGltZW91dFR5cGUiLCAicGF1c2VkIiwgImNvbm5lY3RIMSIsICJwYXJzZXJFcnIiLCAiY2xlYXJJZGxlU29ja2V0VmFsaWRhdGlvbiIsICJyZXF1ZXN0cyIsICJjbG9zZWQiLCAiYXJncyIsICJ3cml0ZUgxIiwgInJlc3VtZUgxIiwgImNhbGxiYWNrIiwgInNjaGVkdWxlSWRsZVNvY2tldFZhbGlkYXRpb24iLCAiaGVhZGVyc1RpbWVvdXQiLCAic2hvdWxkU2VuZENvbnRlbnRMZW5ndGgiLCAibWV0aG9kIiwgInBhdGgiLCAiaG9zdCIsICJibG9ja2luZyIsICJyZXNldCIsICJleHBlY3RzUGF5bG9hZCIsICJib2R5U3RyZWFtIiwgImNvbnRlbnRUeXBlIiwgImNvbnRlbnRUeXBlVmFsdWUiLCAiYm9keUxlbmd0aCIsICJhYm9ydCIsICJoZWFkZXIiLCAibiIsICJ2YWwiLCAiaSIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZUl0ZXJhYmxlIiwgIndyaXRlQmxvYiIsICJ3cml0ZVN0cmVhbSIsICJmaW5pc2hlZCIsICJ3cml0ZXIiLCAiQXN5bmNXcml0ZXIiLCAib25EYXRhIiwgIm9uRHJhaW4iLCAib25DbG9zZSIsICJvbkZpbmlzaGVkIiwgImVyIiwgImJ1ZmZlciIsICJjYiIsICJ3YWl0Rm9yRHJhaW4iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYnl0ZXNXcml0dGVuIiwgInJlcXVpcmVfY2xpZW50X2gyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgInBpcGVsaW5lIiwgInV0aWwiLCAiUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiU29ja2V0RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgImtVcmwiLCAia1Jlc2V0IiwgImtDbGllbnQiLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1F1ZXVlIiwgImtQZW5kaW5nSWR4IiwgImtSdW5uaW5nSWR4IiwgImtFcnJvciIsICJrU29ja2V0IiwgImtTdHJpY3RDb250ZW50TGVuZ3RoIiwgImtPbkVycm9yIiwgImtNYXhDb25jdXJyZW50U3RyZWFtcyIsICJrSFRUUDJTZXNzaW9uIiwgImtSZXN1bWUiLCAia1NpemUiLCAia0hUVFBDb250ZXh0IiwgImtPcGVuU3RyZWFtcyIsICJleHRyYWN0Qm9keSIsICJoMkV4cGVyaW1lbnRhbFdhcm5lZCIsICJodHRwMiIsICJIVFRQMl9IRUFERVJfQVVUSE9SSVRZIiwgIkhUVFAyX0hFQURFUl9NRVRIT0QiLCAiSFRUUDJfSEVBREVSX1BBVEgiLCAiSFRUUDJfSEVBREVSX1NDSEVNRSIsICJIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgiLCAiSFRUUDJfSEVBREVSX0VYUEVDVCIsICJIVFRQMl9IRUFERVJfU1RBVFVTIiwgInBhcnNlSDJIZWFkZXJzIiwgImhlYWRlcnMiLCAicmVzdWx0IiwgIm5hbWUiLCAidmFsdWUiLCAic3VidmFsdWUiLCAiY29ubmVjdEgyIiwgImNsaWVudCIsICJzb2NrZXQiLCAic2Vzc2lvbiIsICJvbkh0dHAyU2Vzc2lvbkVycm9yIiwgIm9uSHR0cDJGcmFtZUVycm9yIiwgIm9uSHR0cDJTZXNzaW9uRW5kIiwgIm9uSFRUUDJHb0F3YXkiLCAiZXJyIiwgInJlcXVlc3RzIiwgImkiLCAicmVxdWVzdCIsICJjbG9zZWQiLCAiYXJncyIsICJ3cml0ZUgyIiwgInJlc3VtZUgyIiwgImNhbGxiYWNrIiwgInR5cGUiLCAiY29kZSIsICJpZCIsICJzaG91bGRTZW5kQ29udGVudExlbmd0aCIsICJtZXRob2QiLCAicGF0aCIsICJob3N0IiwgInVwZ3JhZGUiLCAiZXhwZWN0Q29udGludWUiLCAic2lnbmFsIiwgInJlcUhlYWRlcnMiLCAiYm9keSIsICJuIiwgImtleSIsICJ2YWwiLCAic3RyZWFtIiwgImhvc3RuYW1lIiwgInBvcnQiLCAiYWJvcnQiLCAiZXhwZWN0c1BheWxvYWQiLCAiY29udGVudExlbmd0aCIsICJib2R5U3RyZWFtIiwgImNvbnRlbnRUeXBlIiwgInNob3VsZEVuZFN0cmVhbSIsICJ3cml0ZUJvZHlIMiIsICJzdGF0dXNDb2RlIiwgInJlYWxIZWFkZXJzIiwgImNodW5rIiwgIndyaXRlQnVmZmVyIiwgIndyaXRlSXRlcmFibGUiLCAid3JpdGVCbG9iIiwgIndyaXRlU3RyZWFtIiwgImgyc3RyZWFtIiwgImVycm9yIiwgInBpcGUiLCAib25QaXBlRGF0YSIsICJidWZmZXIiLCAib25EcmFpbiIsICJjYiIsICJ3YWl0Rm9yRHJhaW4iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAicmVzIiwgInJlcXVpcmVfcmVkaXJlY3RfaGFuZGxlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInV0aWwiLCAia0JvZHlVc2VkIiwgImFzc2VydCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJFRSIsICJyZWRpcmVjdGFibGVTdGF0dXNDb2RlcyIsICJrQm9keSIsICJCb2R5QXN5bmNJdGVyYWJsZSIsICJib2R5IiwgIlJlZGlyZWN0SGFuZGxlciIsICJkaXNwYXRjaCIsICJtYXhSZWRpcmVjdGlvbnMiLCAib3B0cyIsICJoYW5kbGVyIiwgImFib3J0IiwgInN0YXR1c0NvZGUiLCAiaGVhZGVycyIsICJzb2NrZXQiLCAiZXJyb3IiLCAicmVzdW1lIiwgInN0YXR1c1RleHQiLCAicGFyc2VMb2NhdGlvbiIsICJvcmlnaW4iLCAicGF0aG5hbWUiLCAic2VhcmNoIiwgInBhdGgiLCAiY2xlYW5SZXF1ZXN0SGVhZGVycyIsICJjaHVuayIsICJ0cmFpbGVycyIsICJpIiwgInNob3VsZFJlbW92ZUhlYWRlciIsICJoZWFkZXIiLCAicmVtb3ZlQ29udGVudCIsICJ1bmtub3duT3JpZ2luIiwgIm5hbWUiLCAicmV0IiwgImtleSIsICJyZXF1aXJlX3JlZGlyZWN0X2ludGVyY2VwdG9yIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmVkaXJlY3RIYW5kbGVyIiwgImNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IiLCAiZGVmYXVsdE1heFJlZGlyZWN0aW9ucyIsICJkaXNwYXRjaCIsICJvcHRzIiwgImhhbmRsZXIiLCAibWF4UmVkaXJlY3Rpb25zIiwgInJlZGlyZWN0SGFuZGxlciIsICJyZXF1aXJlX2NsaWVudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJuZXQiLCAiaHR0cCIsICJ1dGlsIiwgImNoYW5uZWxzIiwgIlJlcXVlc3QiLCAiRGlzcGF0Y2hlckJhc2UiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgIkNsaWVudERlc3Ryb3llZEVycm9yIiwgImJ1aWxkQ29ubmVjdG9yIiwgImtVcmwiLCAia1NlcnZlck5hbWUiLCAia0NsaWVudCIsICJrQnVzeSIsICJrQ29ubmVjdCIsICJrUmVzdW1pbmciLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1NpemUiLCAia1F1ZXVlIiwgImtDb25uZWN0ZWQiLCAia0Nvbm5lY3RpbmciLCAia05lZWREcmFpbiIsICJrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQiLCAia0hvc3RIZWFkZXIiLCAia1BlbmRpbmdJZHgiLCAia1J1bm5pbmdJZHgiLCAia0Vycm9yIiwgImtQaXBlbGluaW5nIiwgImtLZWVwQWxpdmVUaW1lb3V0VmFsdWUiLCAia01heEhlYWRlcnNTaXplIiwgImtLZWVwQWxpdmVNYXhUaW1lb3V0IiwgImtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkIiwgImtIZWFkZXJzVGltZW91dCIsICJrQm9keVRpbWVvdXQiLCAia1N0cmljdENvbnRlbnRMZW5ndGgiLCAia0Nvbm5lY3RvciIsICJrTWF4UmVkaXJlY3Rpb25zIiwgImtNYXhSZXF1ZXN0cyIsICJrQ291bnRlciIsICJrQ2xvc2UiLCAia0Rlc3Ryb3kiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAia0xvY2FsQWRkcmVzcyIsICJrTWF4UmVzcG9uc2VTaXplIiwgImtPbkVycm9yIiwgImtIVFRQQ29udGV4dCIsICJrTWF4Q29uY3VycmVudFN0cmVhbXMiLCAia1Jlc3VtZSIsICJjb25uZWN0SDEiLCAiY29ubmVjdEgyIiwgImRlcHJlY2F0ZWRJbnRlcmNlcHRvcldhcm5lZCIsICJrQ2xvc2VkUmVzb2x2ZSIsICJub29wIiwgImdldFBpcGVsaW5pbmciLCAiY2xpZW50IiwgIkNsaWVudCIsICJ1cmwiLCAiaW50ZXJjZXB0b3JzIiwgIm1heEhlYWRlclNpemUiLCAiaGVhZGVyc1RpbWVvdXQiLCAic29ja2V0VGltZW91dCIsICJyZXF1ZXN0VGltZW91dCIsICJjb25uZWN0VGltZW91dCIsICJib2R5VGltZW91dCIsICJpZGxlVGltZW91dCIsICJrZWVwQWxpdmUiLCAia2VlcEFsaXZlVGltZW91dCIsICJtYXhLZWVwQWxpdmVUaW1lb3V0IiwgImtlZXBBbGl2ZU1heFRpbWVvdXQiLCAia2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCIsICJzb2NrZXRQYXRoIiwgInBpcGVsaW5pbmciLCAidGxzIiwgInN0cmljdENvbnRlbnRMZW5ndGgiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAibWF4UmVkaXJlY3Rpb25zIiwgImNvbm5lY3QiLCAibWF4UmVxdWVzdHNQZXJDbGllbnQiLCAibG9jYWxBZGRyZXNzIiwgIm1heFJlc3BvbnNlU2l6ZSIsICJhdXRvU2VsZWN0RmFtaWx5IiwgImF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCIsICJtYXhDb25jdXJyZW50U3RyZWFtcyIsICJhbGxvd0gyIiwgIndlYlNvY2tldCIsICJjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yIiwgInN5bmMiLCAicmVzdW1lIiwgImVyciIsICJvbkVycm9yIiwgInZhbHVlIiwgImNiIiwgIm9wdHMiLCAiaGFuZGxlciIsICJvcmlnaW4iLCAicmVxdWVzdCIsICJyZXNvbHZlIiwgInJlcXVlc3RzIiwgImkiLCAiY2FsbGJhY2siLCAiaG9zdCIsICJob3N0bmFtZSIsICJwcm90b2NvbCIsICJwb3J0IiwgImlkeCIsICJpcCIsICJzb2NrZXQiLCAicmVqZWN0IiwgImVtaXREcmFpbiIsICJfcmVzdW1lIiwgInJlcXVpcmVfZml4ZWRfcXVldWUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJGaXhlZENpcmN1bGFyQnVmZmVyIiwgImRhdGEiLCAibmV4dEl0ZW0iLCAidGFpbCIsICJuZXh0IiwgInJlcXVpcmVfcG9vbF9zdGF0cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtGcmVlIiwgImtDb25uZWN0ZWQiLCAia1BlbmRpbmciLCAia1F1ZXVlZCIsICJrUnVubmluZyIsICJrU2l6ZSIsICJrUG9vbCIsICJQb29sU3RhdHMiLCAicG9vbCIsICJyZXF1aXJlX3Bvb2xfYmFzZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRpc3BhdGNoZXJCYXNlIiwgIkZpeGVkUXVldWUiLCAia0Nvbm5lY3RlZCIsICJrU2l6ZSIsICJrUnVubmluZyIsICJrUGVuZGluZyIsICJrUXVldWVkIiwgImtCdXN5IiwgImtGcmVlIiwgImtVcmwiLCAia0Nsb3NlIiwgImtEZXN0cm95IiwgImtEaXNwYXRjaCIsICJQb29sU3RhdHMiLCAia0NsaWVudHMiLCAia05lZWREcmFpbiIsICJrUXVldWUiLCAia0Nsb3NlZFJlc29sdmUiLCAia09uRHJhaW4iLCAia09uQ29ubmVjdCIsICJrT25EaXNjb25uZWN0IiwgImtPbkNvbm5lY3Rpb25FcnJvciIsICJrR2V0RGlzcGF0Y2hlciIsICJrQWRkQ2xpZW50IiwgImtSZW1vdmVDbGllbnQiLCAia1N0YXRzIiwgIlBvb2xCYXNlIiwgIm9wdHMiLCAicG9vbCIsICJvcmlnaW4iLCAidGFyZ2V0cyIsICJxdWV1ZSIsICJuZWVkRHJhaW4iLCAiaXRlbSIsICJjIiwgImVyciIsICJjbGllbnQiLCAicmV0IiwgInBlbmRpbmciLCAicnVubmluZyIsICJzaXplIiwgInJlc29sdmUiLCAiaGFuZGxlciIsICJkaXNwYXRjaGVyIiwgImlkeCIsICJyZXF1aXJlX3Bvb2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQb29sQmFzZSIsICJrQ2xpZW50cyIsICJrTmVlZERyYWluIiwgImtBZGRDbGllbnQiLCAia0dldERpc3BhdGNoZXIiLCAiQ2xpZW50IiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInV0aWwiLCAia1VybCIsICJrSW50ZXJjZXB0b3JzIiwgImJ1aWxkQ29ubmVjdG9yIiwgImtPcHRpb25zIiwgImtDb25uZWN0aW9ucyIsICJrRmFjdG9yeSIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJQb29sIiwgImNvbm5lY3Rpb25zIiwgImZhY3RvcnkiLCAiY29ubmVjdCIsICJjb25uZWN0VGltZW91dCIsICJ0bHMiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAic29ja2V0UGF0aCIsICJhdXRvU2VsZWN0RmFtaWx5IiwgImF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCIsICJhbGxvd0gyIiwgIm9wdGlvbnMiLCAidGFyZ2V0cyIsICJlcnJvciIsICJ0YXJnZXQiLCAiaWR4IiwgImNsaWVudCIsICJkaXNwYXRjaGVyIiwgInJlcXVpcmVfYmFsYW5jZWRfcG9vbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlBvb2xCYXNlIiwgImtDbGllbnRzIiwgImtOZWVkRHJhaW4iLCAia0FkZENsaWVudCIsICJrUmVtb3ZlQ2xpZW50IiwgImtHZXREaXNwYXRjaGVyIiwgIlBvb2wiLCAia1VybCIsICJrSW50ZXJjZXB0b3JzIiwgInBhcnNlT3JpZ2luIiwgImtGYWN0b3J5IiwgImtPcHRpb25zIiwgImtHcmVhdGVzdENvbW1vbkRpdmlzb3IiLCAia0N1cnJlbnRXZWlnaHQiLCAia0luZGV4IiwgImtXZWlnaHQiLCAia01heFdlaWdodFBlclNlcnZlciIsICJrRXJyb3JQZW5hbHR5IiwgImdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciIsICJhIiwgImIiLCAidCIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJCYWxhbmNlZFBvb2wiLCAidXBzdHJlYW1zIiwgImZhY3RvcnkiLCAidXBzdHJlYW0iLCAidXBzdHJlYW1PcmlnaW4iLCAicG9vbCIsICJhcmdzIiwgImVyciIsICJjbGllbnQiLCAicmVzdWx0IiwgImkiLCAiZGlzcGF0Y2hlciIsICJwIiwgImNvdW50ZXIiLCAibWF4V2VpZ2h0SW5kZXgiLCAicmVxdWlyZV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtDbGllbnRzIiwgImtSdW5uaW5nIiwgImtDbG9zZSIsICJrRGVzdHJveSIsICJrRGlzcGF0Y2giLCAia0ludGVyY2VwdG9ycyIsICJEaXNwYXRjaGVyQmFzZSIsICJQb29sIiwgIkNsaWVudCIsICJ1dGlsIiwgImNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IiLCAia09uQ29ubmVjdCIsICJrT25EaXNjb25uZWN0IiwgImtPbkNvbm5lY3Rpb25FcnJvciIsICJrTWF4UmVkaXJlY3Rpb25zIiwgImtPbkRyYWluIiwgImtGYWN0b3J5IiwgImtPcHRpb25zIiwgImRlZmF1bHRGYWN0b3J5IiwgIm9yaWdpbiIsICJvcHRzIiwgIkFnZW50IiwgImZhY3RvcnkiLCAibWF4UmVkaXJlY3Rpb25zIiwgImNvbm5lY3QiLCAib3B0aW9ucyIsICJ0YXJnZXRzIiwgImVyciIsICJyZXQiLCAiY2xpZW50IiwgImhhbmRsZXIiLCAia2V5IiwgImRpc3BhdGNoZXIiLCAiY2xvc2VQcm9taXNlcyIsICJkZXN0cm95UHJvbWlzZXMiLCAicmVxdWlyZV9wcm94eV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtQcm94eSIsICJrQ2xvc2UiLCAia0Rlc3Ryb3kiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAiVVJMIiwgIkFnZW50IiwgIlBvb2wiLCAiRGlzcGF0Y2hlckJhc2UiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvciIsICJidWlsZENvbm5lY3RvciIsICJDbGllbnQiLCAia0FnZW50IiwgImtDbGllbnQiLCAia1Byb3h5SGVhZGVycyIsICJrUmVxdWVzdFRscyIsICJrUHJveHlUbHMiLCAia0Nvbm5lY3RFbmRwb2ludCIsICJrVHVubmVsUHJveHkiLCAiZGVmYXVsdFByb3RvY29sUG9ydCIsICJwcm90b2NvbCIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJub29wIiwgImRlZmF1bHRBZ2VudEZhY3RvcnkiLCAiSHR0cDFQcm94eVdyYXBwZXIiLCAiI2NsaWVudCIsICJwcm94eVVybCIsICJoZWFkZXJzIiwgImNvbm5lY3QiLCAiZmFjdG9yeSIsICJoYW5kbGVyIiwgIm9uSGVhZGVycyIsICJzdGF0dXNDb2RlIiwgImRhdGEiLCAicmVzdW1lIiwgInBhdGgiLCAiaG9zdCIsICJlcnIiLCAiUHJveHlBZ2VudCIsICJjbGllbnRGYWN0b3J5IiwgInByb3h5VHVubmVsIiwgInVybCIsICIjZ2V0VXJsIiwgImhyZWYiLCAicG9ydCIsICJ1c2VybmFtZSIsICJwYXNzd29yZCIsICJwcm94eUhvc3RuYW1lIiwgImFnZW50RmFjdG9yeSIsICJvcHRpb25zIiwgImNhbGxiYWNrIiwgInJlcXVlc3RlZFBhdGgiLCAic29ja2V0IiwgInNlcnZlcm5hbWUiLCAiYnVpbGRIZWFkZXJzIiwgInRocm93SWZQcm94eUF1dGhJc1NlbnQiLCAiaGVhZGVyc1BhaXIiLCAiaSIsICJrZXkiLCAicmVxdWlyZV9lbnZfaHR0cF9wcm94eV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRpc3BhdGNoZXJCYXNlIiwgImtDbG9zZSIsICJrRGVzdHJveSIsICJrQ2xvc2VkIiwgImtEZXN0cm95ZWQiLCAia0Rpc3BhdGNoIiwgImtOb1Byb3h5QWdlbnQiLCAia0h0dHBQcm94eUFnZW50IiwgImtIdHRwc1Byb3h5QWdlbnQiLCAiUHJveHlBZ2VudCIsICJBZ2VudCIsICJERUZBVUxUX1BPUlRTIiwgImV4cGVyaW1lbnRhbFdhcm5lZCIsICJFbnZIdHRwUHJveHlBZ2VudCIsICIjbm9Qcm94eVZhbHVlIiwgIiNub1Byb3h5RW50cmllcyIsICIjb3B0cyIsICJvcHRzIiwgImh0dHBQcm94eSIsICJodHRwc1Byb3h5IiwgIm5vUHJveHkiLCAiYWdlbnRPcHRzIiwgIkhUVFBfUFJPWFkiLCAiSFRUUFNfUFJPWFkiLCAiI3BhcnNlTm9Qcm94eSIsICJoYW5kbGVyIiwgInVybCIsICIjZ2V0UHJveHlBZ2VudEZvclVybCIsICJlcnIiLCAicHJvdG9jb2wiLCAiaG9zdG5hbWUiLCAicG9ydCIsICIjc2hvdWxkUHJveHkiLCAiI25vUHJveHlDaGFuZ2VkIiwgImkiLCAiZW50cnkiLCAibm9Qcm94eVZhbHVlIiwgIiNub1Byb3h5RW52IiwgIm5vUHJveHlTcGxpdCIsICJub1Byb3h5RW50cmllcyIsICJwYXJzZWQiLCAicmVxdWlyZV9yZXRyeV9oYW5kbGVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnkiLCAiUmVxdWVzdFJldHJ5RXJyb3IiLCAiaXNEaXN0dXJiZWQiLCAicGFyc2VIZWFkZXJzIiwgInBhcnNlUmFuZ2VIZWFkZXIiLCAid3JhcFJlcXVlc3RCb2R5IiwgImNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIiLCAicmV0cnlBZnRlciIsICJjdXJyZW50IiwgInZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aCIsICJoZWFkZXJzIiwgInJhbmdlIiwgInN0YXR1c0NvZGUiLCAicmV0cnlDb3VudCIsICJjb250ZW50TGVuZ3RoIiwgImxlbmd0aCIsICJleHBlY3RlZExlbmd0aCIsICJSZXRyeUhhbmRsZXIiLCAiX1JldHJ5SGFuZGxlciIsICJvcHRzIiwgImhhbmRsZXJzIiwgInJldHJ5T3B0aW9ucyIsICJkaXNwYXRjaE9wdHMiLCAicmV0cnlGbiIsICJtYXhSZXRyaWVzIiwgIm1heFRpbWVvdXQiLCAibWluVGltZW91dCIsICJ0aW1lb3V0RmFjdG9yIiwgIm1ldGhvZHMiLCAiZXJyb3JDb2RlcyIsICJzdGF0dXNDb2RlcyIsICJyZWFzb24iLCAic29ja2V0IiwgImFib3J0IiwgImNodW5rIiwgImVyciIsICJzdGF0ZSIsICJjYiIsICJjb2RlIiwgIm1ldGhvZCIsICJjb3VudGVyIiwgInJldHJ5QWZ0ZXJIZWFkZXIiLCAicmV0cnlUaW1lb3V0IiwgInJhd0hlYWRlcnMiLCAicmVzdW1lIiwgInN0YXR1c01lc3NhZ2UiLCAiY29udGVudFJhbmdlIiwgImNvbnRlbnRMZW5ndGhFcnJvciIsICJzdGFydCIsICJzaXplIiwgImVuZCIsICJyYXdUcmFpbGVycyIsICJvblJldHJ5IiwgInJlcXVpcmVfcmV0cnlfYWdlbnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJEaXNwYXRjaGVyIiwgIlJldHJ5SGFuZGxlciIsICJSZXRyeUFnZW50IiwgIiNhZ2VudCIsICIjb3B0aW9ucyIsICJhZ2VudCIsICJvcHRpb25zIiwgIm9wdHMiLCAiaGFuZGxlciIsICJyZXRyeSIsICJyZXF1aXJlX3JlYWRhYmxlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgIlJlYWRhYmxlIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiTm90U3VwcG9ydGVkRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQWJvcnRFcnJvciIsICJ1dGlsIiwgIlJlYWRhYmxlU3RyZWFtRnJvbSIsICJrQ29uc3VtZSIsICJrUmVhZGluZyIsICJrQm9keSIsICJrQWJvcnQiLCAia0NvbnRlbnRUeXBlIiwgImtDb250ZW50TGVuZ3RoIiwgIm5vb3AiLCAiQm9keVJlYWRhYmxlIiwgInJlc3VtZSIsICJhYm9ydCIsICJjb250ZW50VHlwZSIsICJjb250ZW50TGVuZ3RoIiwgImhpZ2hXYXRlck1hcmsiLCAiZXJyIiwgImNhbGxiYWNrIiwgImV2IiwgImFyZ3MiLCAicmV0IiwgImNodW5rIiwgImNvbnN1bWVQdXNoIiwgImNvbnN1bWUiLCAib3B0cyIsICJsaW1pdCIsICJzaWduYWwiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib25BYm9ydCIsICJpc0xvY2tlZCIsICJzZWxmIiwgImlzVW51c2FibGUiLCAic3RyZWFtIiwgInR5cGUiLCAiclN0YXRlIiwgImNvbnN1bWVGaW5pc2giLCAiY29uc3VtZVN0YXJ0IiwgInN0YXRlIiwgInN0YXJ0IiwgImVuZCIsICJuIiwgImNvbnN1bWVFbmQiLCAiY2h1bmtzRGVjb2RlIiwgImNodW5rcyIsICJsZW5ndGgiLCAiYnVmZmVyIiwgImJ1ZmZlckxlbmd0aCIsICJjaHVua3NDb25jYXQiLCAib2Zmc2V0IiwgImkiLCAiYm9keSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAiY2h1bmtzRGVjb2RlIiwgIkNIVU5LX0xJTUlUIiwgImdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayIsICJjYWxsYmFjayIsICJib2R5IiwgImNvbnRlbnRUeXBlIiwgInN0YXR1c0NvZGUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgImNodW5rcyIsICJsZW5ndGgiLCAiY2h1bmsiLCAibWVzc2FnZSIsICJzdGFja1RyYWNlTGltaXQiLCAicGF5bG9hZCIsICJpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uIiwgImlzQ29udGVudFR5cGVUZXh0IiwgInJlcXVpcmVfYXBpX3JlcXVlc3QiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiUmVhZGFibGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJ1dGlsIiwgImdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayIsICJBc3luY1Jlc291cmNlIiwgIlJlcXVlc3RIYW5kbGVyIiwgIm9wdHMiLCAiY2FsbGJhY2siLCAic2lnbmFsIiwgIm1ldGhvZCIsICJvcGFxdWUiLCAiYm9keSIsICJvbkluZm8iLCAicmVzcG9uc2VIZWFkZXJzIiwgInRocm93T25FcnJvciIsICJoaWdoV2F0ZXJNYXJrIiwgImVyciIsICJhYm9ydCIsICJjb250ZXh0IiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgInBhcnNlZEhlYWRlcnMiLCAiY29udGVudFR5cGUiLCAiY29udGVudExlbmd0aCIsICJyZXMiLCAiY2h1bmsiLCAidHJhaWxlcnMiLCAicmVxdWVzdCIsICJyZXNvbHZlIiwgInJlamVjdCIsICJkYXRhIiwgInJlcXVpcmVfYWJvcnRfc2lnbmFsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYWRkQWJvcnRMaXN0ZW5lciIsICJSZXF1ZXN0QWJvcnRlZEVycm9yIiwgImtMaXN0ZW5lciIsICJrU2lnbmFsIiwgImFib3J0IiwgInNlbGYiLCAicmVtb3ZlU2lnbmFsIiwgImFkZFNpZ25hbCIsICJzaWduYWwiLCAicmVxdWlyZV9hcGlfc3RyZWFtIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImZpbmlzaGVkIiwgIlBhc3NUaHJvdWdoIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkludmFsaWRSZXR1cm5WYWx1ZUVycm9yIiwgInV0aWwiLCAiZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIiwgIkFzeW5jUmVzb3VyY2UiLCAiYWRkU2lnbmFsIiwgInJlbW92ZVNpZ25hbCIsICJTdHJlYW1IYW5kbGVyIiwgIm9wdHMiLCAiZmFjdG9yeSIsICJjYWxsYmFjayIsICJzaWduYWwiLCAibWV0aG9kIiwgIm9wYXF1ZSIsICJib2R5IiwgIm9uSW5mbyIsICJyZXNwb25zZUhlYWRlcnMiLCAidGhyb3dPbkVycm9yIiwgImVyciIsICJhYm9ydCIsICJjb250ZXh0IiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgInJlcyIsICJjb250ZW50VHlwZSIsICJ0cmFpbGVycyIsICJjaHVuayIsICJzdHJlYW0iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZGF0YSIsICJyZXF1aXJlX2FwaV9waXBlbGluZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJlYWRhYmxlIiwgIkR1cGxleCIsICJQYXNzVGhyb3VnaCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJSZXF1ZXN0QWJvcnRlZEVycm9yIiwgInV0aWwiLCAiQXN5bmNSZXNvdXJjZSIsICJhZGRTaWduYWwiLCAicmVtb3ZlU2lnbmFsIiwgImFzc2VydCIsICJrUmVzdW1lIiwgIlBpcGVsaW5lUmVxdWVzdCIsICJyZXN1bWUiLCAiZXJyIiwgImNhbGxiYWNrIiwgIlBpcGVsaW5lUmVzcG9uc2UiLCAiUGlwZWxpbmVIYW5kbGVyIiwgIm9wdHMiLCAiaGFuZGxlciIsICJzaWduYWwiLCAibWV0aG9kIiwgIm9wYXF1ZSIsICJvbkluZm8iLCAicmVzcG9uc2VIZWFkZXJzIiwgImJvZHkiLCAiY2h1bmsiLCAiZW5jb2RpbmciLCAicmVxIiwgInJlcyIsICJyZXQiLCAiYWJvcnQiLCAiY29udGV4dCIsICJzdGF0dXNDb2RlIiwgInJhd0hlYWRlcnMiLCAiaGVhZGVycyIsICJ0cmFpbGVycyIsICJwaXBlbGluZSIsICJwaXBlbGluZUhhbmRsZXIiLCAicmVxdWlyZV9hcGlfdXBncmFkZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlNvY2tldEVycm9yIiwgIkFzeW5jUmVzb3VyY2UiLCAidXRpbCIsICJhZGRTaWduYWwiLCAicmVtb3ZlU2lnbmFsIiwgImFzc2VydCIsICJVcGdyYWRlSGFuZGxlciIsICJvcHRzIiwgImNhbGxiYWNrIiwgInNpZ25hbCIsICJvcGFxdWUiLCAicmVzcG9uc2VIZWFkZXJzIiwgImFib3J0IiwgImNvbnRleHQiLCAic3RhdHVzQ29kZSIsICJyYXdIZWFkZXJzIiwgInNvY2tldCIsICJoZWFkZXJzIiwgImVyciIsICJ1cGdyYWRlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImRhdGEiLCAidXBncmFkZUhhbmRsZXIiLCAicmVxdWlyZV9hcGlfY29ubmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJBc3luY1Jlc291cmNlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlNvY2tldEVycm9yIiwgInV0aWwiLCAiYWRkU2lnbmFsIiwgInJlbW92ZVNpZ25hbCIsICJDb25uZWN0SGFuZGxlciIsICJvcHRzIiwgImNhbGxiYWNrIiwgInNpZ25hbCIsICJvcGFxdWUiLCAicmVzcG9uc2VIZWFkZXJzIiwgImFib3J0IiwgImNvbnRleHQiLCAic3RhdHVzQ29kZSIsICJyYXdIZWFkZXJzIiwgInNvY2tldCIsICJoZWFkZXJzIiwgImVyciIsICJjb25uZWN0IiwgInJlc29sdmUiLCAicmVqZWN0IiwgImRhdGEiLCAiY29ubmVjdEhhbmRsZXIiLCAicmVxdWlyZV9hcGkiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX21vY2tfZXJyb3JzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVW5kaWNpRXJyb3IiLCAia01vY2tOb3RNYXRjaGVkRXJyb3IiLCAiTW9ja05vdE1hdGNoZWRFcnJvciIsICJfTW9ja05vdE1hdGNoZWRFcnJvciIsICJtZXNzYWdlIiwgImluc3RhbmNlIiwgInJlcXVpcmVfbW9ja19zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9tb2NrX3V0aWxzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiTW9ja05vdE1hdGNoZWRFcnJvciIsICJrRGlzcGF0Y2hlcyIsICJrTW9ja0FnZW50IiwgImtPcmlnaW5hbERpc3BhdGNoIiwgImtPcmlnaW4iLCAia0dldE5ldENvbm5lY3QiLCAiYnVpbGRVUkwiLCAiU1RBVFVTX0NPREVTIiwgImlzUHJvbWlzZSIsICJtYXRjaFZhbHVlIiwgIm1hdGNoIiwgInZhbHVlIiwgImxvd2VyQ2FzZUVudHJpZXMiLCAiaGVhZGVycyIsICJoZWFkZXJOYW1lIiwgImhlYWRlclZhbHVlIiwgImdldEhlYWRlckJ5TmFtZSIsICJrZXkiLCAiaSIsICJidWlsZEhlYWRlcnNGcm9tQXJyYXkiLCAiY2xvbmUiLCAiZW50cmllcyIsICJpbmRleCIsICJtYXRjaEhlYWRlcnMiLCAibW9ja0Rpc3BhdGNoIiwgIm1hdGNoSGVhZGVyTmFtZSIsICJtYXRjaEhlYWRlclZhbHVlIiwgInNhZmVVcmwiLCAicGF0aCIsICJwYXRoU2VnbWVudHMiLCAicXAiLCAibWF0Y2hLZXkiLCAibWV0aG9kIiwgImJvZHkiLCAicGF0aE1hdGNoIiwgIm1ldGhvZE1hdGNoIiwgImJvZHlNYXRjaCIsICJoZWFkZXJzTWF0Y2giLCAiZ2V0UmVzcG9uc2VEYXRhIiwgImRhdGEiLCAiZ2V0TW9ja0Rpc3BhdGNoIiwgIm1vY2tEaXNwYXRjaGVzIiwgImJhc2VQYXRoIiwgInJlc29sdmVkUGF0aCIsICJtYXRjaGVkTW9ja0Rpc3BhdGNoZXMiLCAiY29uc3VtZWQiLCAiYWRkTW9ja0Rpc3BhdGNoIiwgImJhc2VEYXRhIiwgInJlcGx5RGF0YSIsICJuZXdNb2NrRGlzcGF0Y2giLCAiZGVsZXRlTW9ja0Rpc3BhdGNoIiwgImRpc3BhdGNoIiwgImJ1aWxkS2V5IiwgIm9wdHMiLCAicXVlcnkiLCAiZ2VuZXJhdGVLZXlWYWx1ZXMiLCAia2V5cyIsICJyZXN1bHQiLCAibmFtZSIsICJqIiwgImdldFN0YXR1c1RleHQiLCAic3RhdHVzQ29kZSIsICJnZXRSZXNwb25zZSIsICJidWZmZXJzIiwgImhhbmRsZXIiLCAidHJhaWxlcnMiLCAiZXJyb3IiLCAiZGVsYXkiLCAicGVyc2lzdCIsICJ0aW1lc0ludm9rZWQiLCAidGltZXMiLCAiaGFuZGxlUmVwbHkiLCAiX2RhdGEiLCAib3B0c0hlYWRlcnMiLCAibmV3RGF0YSIsICJyZXNwb25zZURhdGEiLCAicmVzcG9uc2VIZWFkZXJzIiwgInJlc3BvbnNlVHJhaWxlcnMiLCAiZXJyIiwgInJlc3VtZSIsICJidWlsZE1vY2tEaXNwYXRjaCIsICJhZ2VudCIsICJvcmlnaW4iLCAib3JpZ2luYWxEaXNwYXRjaCIsICJuZXRDb25uZWN0IiwgImNoZWNrTmV0Q29ubmVjdCIsICJ1cmwiLCAibWF0Y2hlciIsICJidWlsZE1vY2tPcHRpb25zIiwgIm1vY2tPcHRpb25zIiwgInJlcXVpcmVfbW9ja19pbnRlcmNlcHRvciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdldFJlc3BvbnNlRGF0YSIsICJidWlsZEtleSIsICJhZGRNb2NrRGlzcGF0Y2giLCAia0Rpc3BhdGNoZXMiLCAia0Rpc3BhdGNoS2V5IiwgImtEZWZhdWx0SGVhZGVycyIsICJrRGVmYXVsdFRyYWlsZXJzIiwgImtDb250ZW50TGVuZ3RoIiwgImtNb2NrRGlzcGF0Y2giLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiYnVpbGRVUkwiLCAiTW9ja1Njb3BlIiwgIm1vY2tEaXNwYXRjaCIsICJ3YWl0SW5NcyIsICJyZXBlYXRUaW1lcyIsICJNb2NrSW50ZXJjZXB0b3IiLCAib3B0cyIsICJtb2NrRGlzcGF0Y2hlcyIsICJwYXJzZWRVUkwiLCAic3RhdHVzQ29kZSIsICJkYXRhIiwgInJlc3BvbnNlT3B0aW9ucyIsICJyZXNwb25zZURhdGEiLCAiY29udGVudExlbmd0aCIsICJoZWFkZXJzIiwgInRyYWlsZXJzIiwgInJlcGx5UGFyYW1ldGVycyIsICJyZXBseU9wdGlvbnNDYWxsYmFja09yU3RhdHVzQ29kZSIsICJ3cmFwcGVkRGVmYXVsdHNDYWxsYmFjayIsICJyZXNvbHZlZERhdGEiLCAibmV3TW9ja0Rpc3BhdGNoIiwgImRpc3BhdGNoRGF0YSIsICJlcnJvciIsICJyZXF1aXJlX21vY2tfY2xpZW50IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicHJvbWlzaWZ5IiwgIkNsaWVudCIsICJidWlsZE1vY2tEaXNwYXRjaCIsICJrRGlzcGF0Y2hlcyIsICJrTW9ja0FnZW50IiwgImtDbG9zZSIsICJrT3JpZ2luYWxDbG9zZSIsICJrT3JpZ2luIiwgImtPcmlnaW5hbERpc3BhdGNoIiwgImtDb25uZWN0ZWQiLCAiTW9ja0ludGVyY2VwdG9yIiwgIlN5bWJvbHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiTW9ja0NsaWVudCIsICJvcmlnaW4iLCAib3B0cyIsICJyZXF1aXJlX21vY2tfcG9vbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInByb21pc2lmeSIsICJQb29sIiwgImJ1aWxkTW9ja0Rpc3BhdGNoIiwgImtEaXNwYXRjaGVzIiwgImtNb2NrQWdlbnQiLCAia0Nsb3NlIiwgImtPcmlnaW5hbENsb3NlIiwgImtPcmlnaW4iLCAia09yaWdpbmFsRGlzcGF0Y2giLCAia0Nvbm5lY3RlZCIsICJNb2NrSW50ZXJjZXB0b3IiLCAiU3ltYm9scyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJNb2NrUG9vbCIsICJvcmlnaW4iLCAib3B0cyIsICJyZXF1aXJlX3BsdXJhbGl6ZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzaW5ndWxhcnMiLCAicGx1cmFscyIsICJzaW5ndWxhciIsICJwbHVyYWwiLCAiY291bnQiLCAib25lIiwgImtleXMiLCAibm91biIsICJyZXF1aXJlX3BlbmRpbmdfaW50ZXJjZXB0b3JzX2Zvcm1hdHRlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlRyYW5zZm9ybSIsICJDb25zb2xlIiwgIlBFUlNJU1RFTlQiLCAiTk9UX1BFUlNJU1RFTlQiLCAiZGlzYWJsZUNvbG9ycyIsICJjaHVuayIsICJfZW5jIiwgImNiIiwgInBlbmRpbmdJbnRlcmNlcHRvcnMiLCAid2l0aFByZXR0eUhlYWRlcnMiLCAibWV0aG9kIiwgInBhdGgiLCAic3RhdHVzQ29kZSIsICJwZXJzaXN0IiwgInRpbWVzIiwgInRpbWVzSW52b2tlZCIsICJvcmlnaW4iLCAicmVxdWlyZV9tb2NrX2FnZW50IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia0NsaWVudHMiLCAiQWdlbnQiLCAia0FnZW50IiwgImtNb2NrQWdlbnRTZXQiLCAia01vY2tBZ2VudEdldCIsICJrRGlzcGF0Y2hlcyIsICJrSXNNb2NrQWN0aXZlIiwgImtOZXRDb25uZWN0IiwgImtHZXROZXRDb25uZWN0IiwgImtPcHRpb25zIiwgImtGYWN0b3J5IiwgIk1vY2tDbGllbnQiLCAiTW9ja1Bvb2wiLCAibWF0Y2hWYWx1ZSIsICJidWlsZE1vY2tPcHRpb25zIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlVuZGljaUVycm9yIiwgIkRpc3BhdGNoZXIiLCAiUGx1cmFsaXplciIsICJQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIiwgIk1vY2tBZ2VudCIsICJvcHRzIiwgImFnZW50IiwgIm9yaWdpbiIsICJkaXNwYXRjaGVyIiwgImhhbmRsZXIiLCAibWF0Y2hlciIsICJtb2NrT3B0aW9ucyIsICJjbGllbnQiLCAia2V5TWF0Y2hlciIsICJub25FeHBsaWNpdERpc3BhdGNoZXIiLCAibW9ja0FnZW50Q2xpZW50cyIsICJzY29wZSIsICJkaXNwYXRjaCIsICJwZW5kaW5nIiwgInBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIiLCAicGx1cmFsaXplciIsICJyZXF1aXJlX2dsb2JhbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbERpc3BhdGNoZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQWdlbnQiLCAiZ2V0R2xvYmFsRGlzcGF0Y2hlciIsICJzZXRHbG9iYWxEaXNwYXRjaGVyIiwgImFnZW50IiwgInJlcXVpcmVfZGVjb3JhdG9yX2hhbmRsZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIjaGFuZGxlciIsICJoYW5kbGVyIiwgImFyZ3MiLCAicmVxdWlyZV9yZWRpcmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJlZGlyZWN0SGFuZGxlciIsICJvcHRzIiwgImdsb2JhbE1heFJlZGlyZWN0aW9ucyIsICJkaXNwYXRjaCIsICJoYW5kbGVyIiwgIm1heFJlZGlyZWN0aW9ucyIsICJiYXNlT3B0cyIsICJyZWRpcmVjdEhhbmRsZXIiLCAicmVxdWlyZV9yZXRyeSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJldHJ5SGFuZGxlciIsICJnbG9iYWxPcHRzIiwgImRpc3BhdGNoIiwgIm9wdHMiLCAiaGFuZGxlciIsICJyZXF1aXJlX2R1bXAiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiRGVjb3JhdG9ySGFuZGxlciIsICJEdW1wSGFuZGxlciIsICIjbWF4U2l6ZSIsICIjYWJvcnQiLCAiI2R1bXBlZCIsICIjYWJvcnRlZCIsICIjc2l6ZSIsICIjcmVhc29uIiwgIiNoYW5kbGVyIiwgIm1heFNpemUiLCAiaGFuZGxlciIsICJhYm9ydCIsICIjY3VzdG9tQWJvcnQiLCAicmVhc29uIiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJjb250ZW50TGVuZ3RoIiwgImVyciIsICJjaHVuayIsICJ0cmFpbGVycyIsICJjcmVhdGVEdW1wSW50ZXJjZXB0b3IiLCAiZGVmYXVsdE1heFNpemUiLCAiZGlzcGF0Y2giLCAib3B0cyIsICJkdW1wTWF4U2l6ZSIsICJkdW1wSGFuZGxlciIsICJyZXF1aXJlX2RucyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzSVAiLCAibG9va3VwIiwgIkRlY29yYXRvckhhbmRsZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgIm1heEludCIsICJETlNJbnN0YW5jZSIsICIjbWF4VFRMIiwgIiNtYXhJdGVtcyIsICIjcmVjb3JkcyIsICJvcHRzIiwgIiNkZWZhdWx0TG9va3VwIiwgIiNkZWZhdWx0UGljayIsICJvcmlnaW4iLCAiY2IiLCAiaXBzIiwgIm5ld09wdHMiLCAiZXJyIiwgImFkZHJlc3NlcyIsICJyZWNvcmRzIiwgImlwIiwgInBvcnQiLCAicmVzdWx0cyIsICJhZGRyIiwgImhvc3RuYW1lUmVjb3JkcyIsICJhZmZpbml0eSIsICJvZmZzZXQiLCAiZmFtaWx5IiwgInBvc2l0aW9uIiwgInRpbWVzdGFtcCIsICJyZWNvcmQiLCAiZmFtaWx5UmVjb3JkcyIsICJtZXRhIiwgIkROU0Rpc3BhdGNoSGFuZGxlciIsICIjc3RhdGUiLCAiI29wdHMiLCAiI2Rpc3BhdGNoIiwgIiNoYW5kbGVyIiwgIiNvcmlnaW4iLCAic3RhdGUiLCAiaGFuZGxlciIsICJkaXNwYXRjaCIsICJuZXdPcmlnaW4iLCAiZGlzcGF0Y2hPcHRzIiwgImludGVyY2VwdG9yT3B0cyIsICJkdWFsU3RhY2siLCAiaW5zdGFuY2UiLCAib3JpZ0Rpc3BhdGNoT3B0cyIsICJyZXF1aXJlX2hlYWRlcnMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrQ29uc3RydWN0IiwgImtFbnVtZXJhYmxlUHJvcGVydHkiLCAiaXRlcmF0b3JNaXhpbiIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAid2ViaWRsIiwgImFzc2VydCIsICJ1dGlsIiwgImtIZWFkZXJzTWFwIiwgImtIZWFkZXJzU29ydGVkTWFwIiwgImlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZSIsICJjb2RlIiwgImhlYWRlclZhbHVlTm9ybWFsaXplIiwgInBvdGVudGlhbFZhbHVlIiwgImkiLCAiaiIsICJmaWxsIiwgImhlYWRlcnMiLCAib2JqZWN0IiwgImhlYWRlciIsICJhcHBlbmRIZWFkZXIiLCAia2V5cyIsICJuYW1lIiwgInZhbHVlIiwgImdldEhlYWRlcnNHdWFyZCIsICJnZXRIZWFkZXJzTGlzdCIsICJjb21wYXJlSGVhZGVyTmFtZSIsICJhIiwgImIiLCAiSGVhZGVyc0xpc3QiLCAiX0hlYWRlcnNMaXN0IiwgImluaXQiLCAiaXNMb3dlckNhc2UiLCAibG93ZXJjYXNlTmFtZSIsICJleGlzdHMiLCAiZGVsaW1pdGVyIiwgImxvd2VyTmFtZSIsICJjb29raWUiLCAic2l6ZSIsICJhcnJheSIsICJpdGVyYXRvciIsICJmaXJzdFZhbHVlIiwgInJpZ2h0IiwgImxlZnQiLCAicGl2b3QiLCAieCIsICJIZWFkZXJzIiwgIl9IZWFkZXJzIiwgIiNndWFyZCIsICIjaGVhZGVyc0xpc3QiLCAicHJlZml4IiwgImxpc3QiLCAibmFtZXMiLCAiY29va2llcyIsICJkZXB0aCIsICJvcHRpb25zIiwgIm8iLCAiZ3VhcmQiLCAic2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgIlYiLCAiYXJndW1lbnQiLCAicmVxdWlyZV9yZXNwb25zZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkhlYWRlcnMiLCAiSGVhZGVyc0xpc3QiLCAiZmlsbCIsICJnZXRIZWFkZXJzR3VhcmQiLCAic2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgImV4dHJhY3RCb2R5IiwgImNsb25lQm9keSIsICJtaXhpbkJvZHkiLCAiaGFzRmluYWxpemF0aW9uUmVnaXN0cnkiLCAic3RyZWFtUmVnaXN0cnkiLCAiYm9keVVudXNhYmxlIiwgInV0aWwiLCAibm9kZVV0aWwiLCAia0VudW1lcmFibGVQcm9wZXJ0eSIsICJpc1ZhbGlkUmVhc29uUGhyYXNlIiwgImlzQ2FuY2VsbGVkIiwgImlzQWJvcnRlZCIsICJpc0Jsb2JMaWtlIiwgInNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyIsICJpc0Vycm9yTGlrZSIsICJpc29tb3JwaGljRW5jb2RlIiwgInJlbGV2YW50UmVhbG0iLCAicmVkaXJlY3RTdGF0dXNTZXQiLCAibnVsbEJvZHlTdGF0dXMiLCAia1N0YXRlIiwgImtIZWFkZXJzIiwgIndlYmlkbCIsICJGb3JtRGF0YSIsICJVUkxTZXJpYWxpemVyIiwgImtDb25zdHJ1Y3QiLCAiYXNzZXJ0IiwgInR5cGVzIiwgInRleHRFbmNvZGVyIiwgIlJlc3BvbnNlIiwgIl9SZXNwb25zZSIsICJmcm9tSW5uZXJSZXNwb25zZSIsICJtYWtlTmV0d29ya0Vycm9yIiwgImRhdGEiLCAiaW5pdCIsICJieXRlcyIsICJib2R5IiwgInJlc3BvbnNlT2JqZWN0IiwgIm1ha2VSZXNwb25zZSIsICJpbml0aWFsaXplUmVzcG9uc2UiLCAidXJsIiwgInN0YXR1cyIsICJwYXJzZWRVUkwiLCAiZXJyIiwgInZhbHVlIiwgImJvZHlXaXRoVHlwZSIsICJleHRyYWN0ZWRCb2R5IiwgInR5cGUiLCAidXJsTGlzdCIsICJjbG9uZWRSZXNwb25zZSIsICJjbG9uZVJlc3BvbnNlIiwgImRlcHRoIiwgIm9wdGlvbnMiLCAicHJvcGVydGllcyIsICJyZXNwb25zZSIsICJmaWx0ZXJSZXNwb25zZSIsICJuZXdSZXNwb25zZSIsICJyZWFzb24iLCAiaXNFcnJvciIsICJpc05ldHdvcmtFcnJvciIsICJtYWtlRmlsdGVyZWRSZXNwb25zZSIsICJzdGF0ZSIsICJ0YXJnZXQiLCAicCIsICJtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IiLCAiZmV0Y2hQYXJhbXMiLCAiaW5uZXJSZXNwb25zZSIsICJndWFyZCIsICJWIiwgInByZWZpeCIsICJuYW1lIiwgImFyZ3VtZW50IiwgInJlcXVpcmVfZGlzcGF0Y2hlcl93ZWFrcmVmIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia0Nvbm5lY3RlZCIsICJrU2l6ZSIsICJDb21wYXRXZWFrUmVmIiwgInZhbHVlIiwgIkNvbXBhdEZpbmFsaXplciIsICJmaW5hbGl6ZXIiLCAiZGlzcGF0Y2hlciIsICJrZXkiLCAicmVxdWlyZV9yZXF1ZXN0IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXh0cmFjdEJvZHkiLCAibWl4aW5Cb2R5IiwgImNsb25lQm9keSIsICJib2R5VW51c2FibGUiLCAiSGVhZGVycyIsICJmaWxsSGVhZGVycyIsICJIZWFkZXJzTGlzdCIsICJzZXRIZWFkZXJzR3VhcmQiLCAiZ2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgImdldEhlYWRlcnNMaXN0IiwgIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgInV0aWwiLCAibm9kZVV0aWwiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJzYW1lT3JpZ2luIiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAiZm9yYmlkZGVuTWV0aG9kc1NldCIsICJjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQiLCAicmVmZXJyZXJQb2xpY3kiLCAicmVxdWVzdFJlZGlyZWN0IiwgInJlcXVlc3RNb2RlIiwgInJlcXVlc3RDcmVkZW50aWFscyIsICJyZXF1ZXN0Q2FjaGUiLCAicmVxdWVzdER1cGxleCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIm5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSIsICJub3JtYWxpemVkTWV0aG9kUmVjb3JkcyIsICJrSGVhZGVycyIsICJrU2lnbmFsIiwgImtTdGF0ZSIsICJrRGlzcGF0Y2hlciIsICJ3ZWJpZGwiLCAiVVJMU2VyaWFsaXplciIsICJrQ29uc3RydWN0IiwgImFzc2VydCIsICJnZXRNYXhMaXN0ZW5lcnMiLCAic2V0TWF4TGlzdGVuZXJzIiwgImdldEV2ZW50TGlzdGVuZXJzIiwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCAia0Fib3J0Q29udHJvbGxlciIsICJyZXF1ZXN0RmluYWxpemVyIiwgInNpZ25hbCIsICJhYm9ydCIsICJkZXBlbmRlbnRDb250cm9sbGVyTWFwIiwgImJ1aWxkQWJvcnQiLCAiYWNSZWYiLCAiYWMiLCAiY29udHJvbGxlckxpc3QiLCAicmVmIiwgImN0cmwiLCAicGF0Y2hNZXRob2RXYXJuaW5nIiwgIlJlcXVlc3QiLCAiX1JlcXVlc3QiLCAiaW5wdXQiLCAiaW5pdCIsICJwcmVmaXgiLCAicmVxdWVzdCIsICJmYWxsYmFja01vZGUiLCAiYmFzZVVybCIsICJwYXJzZWRVUkwiLCAiZXJyIiwgIm1ha2VSZXF1ZXN0IiwgIm9yaWdpbiIsICJ3aW5kb3ciLCAiaW5pdEhhc0tleSIsICJyZWZlcnJlciIsICJwYXJzZWRSZWZlcnJlciIsICJtb2RlIiwgIm1ldGhvZCIsICJtYXlCZU5vcm1hbGl6ZWQiLCAidXBwZXJDYXNlIiwgImhlYWRlcnNMaXN0IiwgImhlYWRlcnMiLCAibmFtZSIsICJ2YWx1ZSIsICJpbnB1dEJvZHkiLCAiaW5pdEJvZHkiLCAiZXh0cmFjdGVkQm9keSIsICJjb250ZW50VHlwZSIsICJpbnB1dE9ySW5pdEJvZHkiLCAiZmluYWxCb2R5IiwgImlkZW50aXR5VHJhbnNmb3JtIiwgImNsb25lZFJlcXVlc3QiLCAiY2xvbmVSZXF1ZXN0IiwgImxpc3QiLCAiZnJvbUlubmVyUmVxdWVzdCIsICJkZXB0aCIsICJvcHRpb25zIiwgInByb3BlcnRpZXMiLCAibmV3UmVxdWVzdCIsICJpbm5lclJlcXVlc3QiLCAiZ3VhcmQiLCAiViIsICJhcmd1bWVudCIsICJyZXF1aXJlX2ZldGNoIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibWFrZU5ldHdvcmtFcnJvciIsICJtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IiLCAiZmlsdGVyUmVzcG9uc2UiLCAibWFrZVJlc3BvbnNlIiwgImZyb21Jbm5lclJlc3BvbnNlIiwgIkhlYWRlcnNMaXN0IiwgIlJlcXVlc3QiLCAiY2xvbmVSZXF1ZXN0IiwgInpsaWIiLCAiYnl0ZXNNYXRjaCIsICJtYWtlUG9saWN5Q29udGFpbmVyIiwgImNsb25lUG9saWN5Q29udGFpbmVyIiwgInJlcXVlc3RCYWRQb3J0IiwgIlRBT0NoZWNrIiwgImFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIiLCAicmVzcG9uc2VMb2NhdGlvblVSTCIsICJyZXF1ZXN0Q3VycmVudFVSTCIsICJzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IiwgInRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCIsICJjcmVhdGVPcGFxdWVUaW1pbmdJbmZvIiwgImFwcGVuZEZldGNoTWV0YWRhdGEiLCAiY29yc0NoZWNrIiwgImNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayIsICJkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIiwgImNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIiwgImNyZWF0ZURlZmVycmVkUHJvbWlzZSIsICJpc0Jsb2JMaWtlIiwgInNhbWVPcmlnaW4iLCAiaXNDYW5jZWxsZWQiLCAiaXNBYm9ydGVkIiwgImlzRXJyb3JMaWtlIiwgImZ1bGx5UmVhZEJvZHkiLCAicmVhZGFibGVTdHJlYW1DbG9zZSIsICJpc29tb3JwaGljRW5jb2RlIiwgInVybElzTG9jYWwiLCAidXJsSXNIdHRwSHR0cHNTY2hlbWUiLCAidXJsSGFzSHR0cHNTY2hlbWUiLCAiY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8iLCAic2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZSIsICJidWlsZENvbnRlbnRSYW5nZSIsICJjcmVhdGVJbmZsYXRlIiwgImV4dHJhY3RNaW1lVHlwZSIsICJrU3RhdGUiLCAia0Rpc3BhdGNoZXIiLCAiYXNzZXJ0IiwgInNhZmVseUV4dHJhY3RCb2R5IiwgImV4dHJhY3RCb2R5IiwgInJlZGlyZWN0U3RhdHVzU2V0IiwgIm51bGxCb2R5U3RhdHVzIiwgInNhZmVNZXRob2RzU2V0IiwgInJlcXVlc3RCb2R5SGVhZGVyIiwgInN1YnJlc291cmNlU2V0IiwgIkVFIiwgIlJlYWRhYmxlIiwgInBpcGVsaW5lIiwgImZpbmlzaGVkIiwgImFkZEFib3J0TGlzdGVuZXIiLCAiaXNFcnJvcmVkIiwgImlzUmVhZGFibGUiLCAiYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSIsICJkYXRhVVJMUHJvY2Vzc29yIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIiwgImdldEdsb2JhbERpc3BhdGNoZXIiLCAid2ViaWRsIiwgIlNUQVRVU19DT0RFUyIsICJHRVRfT1JfSEVBRCIsICJkZWZhdWx0VXNlckFnZW50IiwgInJlc29sdmVPYmplY3RVUkwiLCAiRmV0Y2giLCAiZGlzcGF0Y2hlciIsICJyZWFzb24iLCAiZXJyb3IiLCAiaGFuZGxlRmV0Y2hEb25lIiwgInJlc3BvbnNlIiwgImZpbmFsaXplQW5kUmVwb3J0VGltaW5nIiwgImZldGNoIiwgImlucHV0IiwgImluaXQiLCAicCIsICJyZXF1ZXN0T2JqZWN0IiwgImUiLCAicmVxdWVzdCIsICJhYm9ydEZldGNoIiwgInJlc3BvbnNlT2JqZWN0IiwgImxvY2FsbHlBYm9ydGVkIiwgImNvbnRyb2xsZXIiLCAicmVhbFJlc3BvbnNlIiwgImZldGNoaW5nIiwgImluaXRpYXRvclR5cGUiLCAib3JpZ2luYWxVUkwiLCAidGltaW5nSW5mbyIsICJjYWNoZVN0YXRlIiwgIm1hcmtSZXNvdXJjZVRpbWluZyIsICJlcnIiLCAicHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgiLCAicHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkiLCAicHJvY2Vzc1Jlc3BvbnNlIiwgInByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSIsICJwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSIsICJ1c2VQYXJhbGxlbFF1ZXVlIiwgInRhc2tEZXN0aW5hdGlvbiIsICJjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSIsICJjdXJyZW50VGltZSIsICJmZXRjaFBhcmFtcyIsICJtYWluRmV0Y2giLCAicmVjdXJzaXZlIiwgImN1cnJlbnRVUkwiLCAic2NoZW1lRmV0Y2giLCAiaHR0cEZldGNoIiwgImludGVybmFsUmVzcG9uc2UiLCAicHJvY2Vzc0JvZHlFcnJvciIsICJmZXRjaEZpbmFsZSIsICJwcm9jZXNzQm9keSIsICJieXRlcyIsICJzY2hlbWUiLCAiYmxvYlVSTEVudHJ5IiwgImJsb2IiLCAiZnVsbExlbmd0aCIsICJzZXJpYWxpemVkRnVsbExlbmd0aCIsICJ0eXBlIiwgInJhbmdlSGVhZGVyIiwgInJhbmdlVmFsdWUiLCAicmFuZ2VTdGFydCIsICJyYW5nZUVuZCIsICJzbGljZWRCbG9iIiwgInNsaWNlZEJvZHlXaXRoVHlwZSIsICJzZXJpYWxpemVkU2xpY2VkTGVuZ3RoIiwgImNvbnRlbnRSYW5nZSIsICJib2R5V2l0aFR5cGUiLCAiZGF0YVVSTFN0cnVjdCIsICJtaW1lVHlwZSIsICJmaW5hbGl6ZVJlc3BvbnNlIiwgInVuc2FmZUVuZFRpbWUiLCAiYm9keUluZm8iLCAicmVzcG9uc2VTdGF0dXMiLCAicHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayIsICJhY3R1YWxSZXNwb25zZSIsICJodHRwTmV0d29ya09yQ2FjaGVGZXRjaCIsICJodHRwUmVkaXJlY3RGZXRjaCIsICJsb2NhdGlvblVSTCIsICJoZWFkZXJOYW1lIiwgImlzQXV0aGVudGljYXRpb25GZXRjaCIsICJpc05ld0Nvbm5lY3Rpb25GZXRjaCIsICJodHRwRmV0Y2hQYXJhbXMiLCAiaHR0cFJlcXVlc3QiLCAiaHR0cENhY2hlIiwgInJldmFsaWRhdGluZ0ZsYWciLCAiaW5jbHVkZUNyZWRlbnRpYWxzIiwgImNvbnRlbnRMZW5ndGgiLCAiY29udGVudExlbmd0aEhlYWRlclZhbHVlIiwgImZvcndhcmRSZXNwb25zZSIsICJodHRwTmV0d29ya0ZldGNoIiwgImZvcmNlTmV3Q29ubmVjdGlvbiIsICJhYm9ydCIsICJuZXdDb25uZWN0aW9uIiwgInJlcXVlc3RCb2R5IiwgInByb2Nlc3NCb2R5Q2h1bmsiLCAicHJvY2Vzc0VuZE9mQm9keSIsICJib2R5IiwgInN0YXR1cyIsICJzdGF0dXNUZXh0IiwgImhlYWRlcnNMaXN0IiwgInNvY2tldCIsICJkaXNwYXRjaCIsICJpdGVyYXRvciIsICJwdWxsQWxnb3JpdGhtIiwgImNhbmNlbEFsZ29yaXRobSIsICJzdHJlYW0iLCAib25BYm9ydGVkIiwgImlzRmFpbHVyZSIsICJkb25lIiwgInZhbHVlIiwgImJ1ZmZlciIsICJ1cmwiLCAiYWdlbnQiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiY29ubmVjdGlvbiIsICJyYXdIZWFkZXJzIiwgInJlc3VtZSIsICJsb2NhdGlvbiIsICJpIiwgImRlY29kZXJzIiwgIndpbGxGb2xsb3ciLCAiY29udGVudEVuY29kaW5nIiwgImNvZGluZ3MiLCAibWF4Q29udGVudEVuY29kaW5ncyIsICJjb2RpbmciLCAib25FcnJvciIsICJjaHVuayIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3Byb2dyZXNzZXZlbnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3ZWJpZGwiLCAia1N0YXRlIiwgIlByb2dyZXNzRXZlbnQiLCAiX1Byb2dyZXNzRXZlbnQiLCAidHlwZSIsICJldmVudEluaXREaWN0IiwgInJlcXVpcmVfZW5jb2RpbmciLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnZXRFbmNvZGluZyIsICJsYWJlbCIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrU3RhdGUiLCAia0Vycm9yIiwgImtSZXN1bHQiLCAia0Fib3J0ZWQiLCAia0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQiLCAiUHJvZ3Jlc3NFdmVudCIsICJnZXRFbmNvZGluZyIsICJzZXJpYWxpemVBTWltZVR5cGUiLCAicGFyc2VNSU1FVHlwZSIsICJ0eXBlcyIsICJTdHJpbmdEZWNvZGVyIiwgImJ0b2EiLCAic3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyIsICJyZWFkT3BlcmF0aW9uIiwgImZyIiwgImJsb2IiLCAidHlwZSIsICJlbmNvZGluZ05hbWUiLCAicmVhZGVyIiwgImJ5dGVzIiwgImNodW5rUHJvbWlzZSIsICJpc0ZpcnN0Q2h1bmsiLCAiZG9uZSIsICJ2YWx1ZSIsICJmaXJlQVByb2dyZXNzRXZlbnQiLCAicmVzdWx0IiwgInBhY2thZ2VEYXRhIiwgImVycm9yIiwgImUiLCAiZXZlbnQiLCAibWltZVR5cGUiLCAiZGF0YVVSTCIsICJwYXJzZWQiLCAiZGVjb2RlciIsICJjaHVuayIsICJlbmNvZGluZyIsICJkZWNvZGUiLCAiY29tYmluZUJ5dGVTZXF1ZW5jZXMiLCAiYmluYXJ5U3RyaW5nIiwgImlvUXVldWUiLCAiQk9NRW5jb2RpbmciLCAiQk9NU25pZmZpbmciLCAic2xpY2UiLCAic2xpY2VkIiwgImEiLCAiYiIsICJjIiwgInNlcXVlbmNlcyIsICJzaXplIiwgIm9mZnNldCIsICJyZXF1aXJlX2ZpbGVyZWFkZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzIiwgInJlYWRPcGVyYXRpb24iLCAiZmlyZUFQcm9ncmVzc0V2ZW50IiwgImtTdGF0ZSIsICJrRXJyb3IiLCAia1Jlc3VsdCIsICJrRXZlbnRzIiwgImtBYm9ydGVkIiwgIndlYmlkbCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIkZpbGVSZWFkZXIiLCAiX0ZpbGVSZWFkZXIiLCAiYmxvYiIsICJlbmNvZGluZyIsICJmbiIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiVVJMU2VyaWFsaXplciIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJ1cmxFcXVhbHMiLCAiQSIsICJCIiwgImV4Y2x1ZGVGcmFnbWVudCIsICJzZXJpYWxpemVkQSIsICJzZXJpYWxpemVkQiIsICJnZXRGaWVsZFZhbHVlcyIsICJoZWFkZXIiLCAidmFsdWVzIiwgInZhbHVlIiwgInJlcXVpcmVfY2FjaGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrQ29uc3RydWN0IiwgInVybEVxdWFscyIsICJnZXRGaWVsZFZhbHVlcyIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImlzRGlzdHVyYmVkIiwgIndlYmlkbCIsICJSZXNwb25zZSIsICJjbG9uZVJlc3BvbnNlIiwgImZyb21Jbm5lclJlc3BvbnNlIiwgIlJlcXVlc3QiLCAiZnJvbUlubmVyUmVxdWVzdCIsICJrU3RhdGUiLCAiZmV0Y2hpbmciLCAidXJsSXNIdHRwSHR0cHNTY2hlbWUiLCAiY3JlYXRlRGVmZXJyZWRQcm9taXNlIiwgInJlYWRBbGxCeXRlcyIsICJhc3NlcnQiLCAiQ2FjaGUiLCAiX0NhY2hlIiwgIiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QiLCAicmVxdWVzdCIsICJvcHRpb25zIiwgInByZWZpeCIsICJwIiwgIiNpbnRlcm5hbE1hdGNoQWxsIiwgInJlcXVlc3RzIiwgInJlc3BvbnNlUHJvbWlzZXMiLCAicmVxdWVzdExpc3QiLCAiciIsICJmZXRjaENvbnRyb2xsZXJzIiwgInJlc3BvbnNlUHJvbWlzZSIsICJyZXNwb25zZSIsICJmaWVsZFZhbHVlcyIsICJmaWVsZFZhbHVlIiwgImNvbnRyb2xsZXIiLCAicmVzcG9uc2VzIiwgIm9wZXJhdGlvbnMiLCAiaW5kZXgiLCAib3BlcmF0aW9uIiwgImNhY2hlSm9iUHJvbWlzZSIsICJlcnJvckRhdGEiLCAiI2JhdGNoQ2FjaGVPcGVyYXRpb25zIiwgImUiLCAiaW5uZXJSZXF1ZXN0IiwgImlubmVyUmVzcG9uc2UiLCAiY2xvbmVkUmVzcG9uc2UiLCAiYm9keVJlYWRQcm9taXNlIiwgInJlYWRlciIsICJieXRlcyIsICJyZXF1ZXN0UmVzcG9uc2VzIiwgInByb21pc2UiLCAicmVxdWVzdFJlc3BvbnNlIiwgIiNxdWVyeUNhY2hlIiwgInJlcXVlc3RPYmplY3QiLCAiY2FjaGUiLCAiYmFja3VwQ2FjaGUiLCAiYWRkZWRJdGVtcyIsICJyZXN1bHRMaXN0IiwgImlkeCIsICJyZXF1ZXN0UXVlcnkiLCAidGFyZ2V0U3RvcmFnZSIsICJzdG9yYWdlIiwgImNhY2hlZFJlcXVlc3QiLCAiY2FjaGVkUmVzcG9uc2UiLCAiI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbSIsICJxdWVyeVVSTCIsICJjYWNoZWRVUkwiLCAicmVxdWVzdFZhbHVlIiwgInF1ZXJ5VmFsdWUiLCAibWF4UmVzcG9uc2VzIiwgInJlc3BvbnNlTGlzdCIsICJyZXNwb25zZU9iamVjdCIsICJjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyIsICJyZXF1aXJlX2NhY2hlc3RvcmFnZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtDb25zdHJ1Y3QiLCAiQ2FjaGUiLCAid2ViaWRsIiwgImtFbnVtZXJhYmxlUHJvcGVydHkiLCAiQ2FjaGVTdG9yYWdlIiwgIl9DYWNoZVN0b3JhZ2UiLCAiI2NhY2hlcyIsICJyZXF1ZXN0IiwgIm9wdGlvbnMiLCAiY2FjaGVMaXN0IiwgInJlc3BvbnNlIiwgImNhY2hlTmFtZSIsICJwcmVmaXgiLCAiY2FjaGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc0NUTEV4Y2x1ZGluZ0h0YWIiLCAidmFsdWUiLCAiaSIsICJjb2RlIiwgInZhbGlkYXRlQ29va2llTmFtZSIsICJuYW1lIiwgInZhbGlkYXRlQ29va2llVmFsdWUiLCAibGVuIiwgInZhbGlkYXRlQ29va2llUGF0aCIsICJwYXRoIiwgImlzTGV0dGVyT3JEaWdpdCIsICJ2YWxpZGF0ZUNvb2tpZURvbWFpbiIsICJkb21haW4iLCAibGFiZWxMZW5ndGgiLCAiSU1GRGF5cyIsICJJTUZNb250aHMiLCAiSU1GUGFkZGVkTnVtYmVycyIsICJfIiwgInRvSU1GRGF0ZSIsICJkYXRlIiwgInZhbGlkYXRlQ29va2llTWF4QWdlIiwgIm1heEFnZSIsICJzdHJpbmdpZnkiLCAiY29va2llIiwgIm91dCIsICJwYXJ0IiwgImtleSIsICJ0cmltbWVkS2V5IiwgImpvaW5lZFZhbHVlIiwgInJlcXVpcmVfcGFyc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtYXhOYW1lVmFsdWVQYWlyU2l6ZSIsICJtYXhBdHRyaWJ1dGVWYWx1ZVNpemUiLCAiaXNDVExFeGNsdWRpbmdIdGFiIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IiwgImFzc2VydCIsICJwYXJzZVNldENvb2tpZSIsICJoZWFkZXIiLCAibmFtZVZhbHVlUGFpciIsICJ1bnBhcnNlZEF0dHJpYnV0ZXMiLCAibmFtZSIsICJ2YWx1ZSIsICJwb3NpdGlvbiIsICJwYXJzZVVucGFyc2VkQXR0cmlidXRlcyIsICJjb29raWVBdHRyaWJ1dGVMaXN0IiwgImNvb2tpZUF2IiwgImF0dHJpYnV0ZU5hbWUiLCAiYXR0cmlidXRlVmFsdWUiLCAiYXR0cmlidXRlTmFtZUxvd2VyY2FzZSIsICJleHBpcnlUaW1lIiwgImNoYXJDb2RlIiwgImRlbHRhU2Vjb25kcyIsICJjb29raWVEb21haW4iLCAiY29va2llUGF0aCIsICJhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSIsICJyZXF1aXJlX2Nvb2tpZXMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXJzZVNldENvb2tpZSIsICJzdHJpbmdpZnkiLCAid2ViaWRsIiwgIkhlYWRlcnMiLCAiZ2V0Q29va2llcyIsICJoZWFkZXJzIiwgImNvb2tpZSIsICJvdXQiLCAicGllY2UiLCAibmFtZSIsICJ2YWx1ZSIsICJkZWxldGVDb29raWUiLCAiYXR0cmlidXRlcyIsICJwcmVmaXgiLCAic2V0Q29va2llIiwgImdldFNldENvb2tpZXMiLCAiY29va2llcyIsICJwYWlyIiwgInN0ciIsICJyZXF1aXJlX2V2ZW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIndlYmlkbCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImtDb25zdHJ1Y3QiLCAiTWVzc2FnZVBvcnQiLCAiTWVzc2FnZUV2ZW50IiwgIl9NZXNzYWdlRXZlbnQiLCAiI2V2ZW50SW5pdCIsICJ0eXBlIiwgImV2ZW50SW5pdERpY3QiLCAicHJlZml4IiwgImJ1YmJsZXMiLCAiY2FuY2VsYWJsZSIsICJkYXRhIiwgIm9yaWdpbiIsICJsYXN0RXZlbnRJZCIsICJzb3VyY2UiLCAicG9ydHMiLCAiaW5pdCIsICJtZXNzYWdlRXZlbnQiLCAiY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCIsICJDbG9zZUV2ZW50IiwgIl9DbG9zZUV2ZW50IiwgIkVycm9yRXZlbnQiLCAiX0Vycm9yRXZlbnQiLCAiZXZlbnRJbml0IiwgInJlcXVpcmVfY29uc3RhbnRzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidWlkIiwgInN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAib3Bjb2RlcyIsICJtYXhVbnNpZ25lZDE2Qml0IiwgInBhcnNlclN0YXRlcyIsICJlbXB0eUJ1ZmZlciIsICJzZW5kSGludHMiLCAicmVxdWlyZV9zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia1JlYWR5U3RhdGUiLCAia0NvbnRyb2xsZXIiLCAia1Jlc3BvbnNlIiwgImtCaW5hcnlUeXBlIiwgImtXZWJTb2NrZXRVUkwiLCAic3RhdGVzIiwgIm9wY29kZXMiLCAiRXJyb3JFdmVudCIsICJjcmVhdGVGYXN0TWVzc2FnZUV2ZW50IiwgImlzVXRmOCIsICJjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCIsICJyZW1vdmVIVFRQV2hpdGVzcGFjZSIsICJpc0Nvbm5lY3RpbmciLCAid3MiLCAiaXNFc3RhYmxpc2hlZCIsICJpc0Nsb3NpbmciLCAiaXNDbG9zZWQiLCAiZmlyZUV2ZW50IiwgImUiLCAidGFyZ2V0IiwgImV2ZW50RmFjdG9yeSIsICJ0eXBlIiwgImluaXQiLCAiZXZlbnRJbml0RGljdCIsICJldmVudCIsICJ3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQiLCAiZGF0YSIsICJkYXRhRm9yRXZlbnQiLCAidXRmOERlY29kZSIsICJmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiIsICJ0b0FycmF5QnVmZmVyIiwgImJ1ZmZlciIsICJpc1ZhbGlkU3VicHJvdG9jb2wiLCAicHJvdG9jb2wiLCAiaSIsICJjb2RlIiwgImlzVmFsaWRTdGF0dXNDb2RlIiwgInJlYXNvbiIsICJjb250cm9sbGVyIiwgInJlc3BvbnNlIiwgImlzQ29udHJvbEZyYW1lIiwgIm9wY29kZSIsICJpc0NvbnRpbnVhdGlvbkZyYW1lIiwgImlzVGV4dEJpbmFyeUZyYW1lIiwgImlzVmFsaWRPcGNvZGUiLCAicGFyc2VFeHRlbnNpb25zIiwgImV4dGVuc2lvbnMiLCAicG9zaXRpb24iLCAiZXh0ZW5zaW9uTGlzdCIsICJwYWlyIiwgIm5hbWUiLCAidmFsdWUiLCAiaXNWYWxpZENsaWVudFdpbmRvd0JpdHMiLCAiYnl0ZSIsICJudW0iLCAiaGFzSW50bCIsICJmYXRhbERlY29kZXIiLCAicmVxdWlyZV9mcmFtZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm1heFVuc2lnbmVkMTZCaXQiLCAiQlVGRkVSX1NJWkUiLCAiY3J5cHRvIiwgImJ1ZmZlciIsICJidWZJZHgiLCAiX29mZnNldCIsICJfc2l6ZSIsICJpIiwgImdlbmVyYXRlTWFzayIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiZGF0YSIsICJvcGNvZGUiLCAiZnJhbWVEYXRhIiwgIm1hc2tLZXkiLCAiYm9keUxlbmd0aCIsICJwYXlsb2FkTGVuZ3RoIiwgIm9mZnNldCIsICJyZXF1aXJlX2Nvbm5lY3Rpb24iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1aWQiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAiZW1wdHlCdWZmZXIiLCAib3Bjb2RlcyIsICJrUmVhZHlTdGF0ZSIsICJrU2VudENsb3NlIiwgImtCeXRlUGFyc2VyIiwgImtSZWNlaXZlZENsb3NlIiwgImtSZXNwb25zZSIsICJmaXJlRXZlbnQiLCAiZmFpbFdlYnNvY2tldENvbm5lY3Rpb24iLCAiaXNDbG9zaW5nIiwgImlzQ2xvc2VkIiwgImlzRXN0YWJsaXNoZWQiLCAicGFyc2VFeHRlbnNpb25zIiwgImNoYW5uZWxzIiwgIkNsb3NlRXZlbnQiLCAibWFrZVJlcXVlc3QiLCAiZmV0Y2hpbmciLCAiSGVhZGVycyIsICJnZXRIZWFkZXJzTGlzdCIsICJnZXREZWNvZGVTcGxpdCIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiY3J5cHRvIiwgImVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24iLCAidXJsIiwgInByb3RvY29scyIsICJjbGllbnQiLCAid3MiLCAib25Fc3RhYmxpc2giLCAib3B0aW9ucyIsICJyZXF1ZXN0VVJMIiwgInJlcXVlc3QiLCAiaGVhZGVyc0xpc3QiLCAia2V5VmFsdWUiLCAicHJvdG9jb2wiLCAicmVzcG9uc2UiLCAic2VjV1NBY2NlcHQiLCAiZGlnZXN0IiwgInNlY0V4dGVuc2lvbiIsICJleHRlbnNpb25zIiwgInNlY1Byb3RvY29sIiwgIm9uU29ja2V0RGF0YSIsICJvblNvY2tldENsb3NlIiwgIm9uU29ja2V0RXJyb3IiLCAiY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uIiwgImNvZGUiLCAicmVhc29uIiwgInJlYXNvbkJ5dGVMZW5ndGgiLCAiZnJhbWUiLCAiY2h1bmsiLCAid2FzQ2xlYW4iLCAicmVzdWx0IiwgInR5cGUiLCAiaW5pdCIsICJlcnJvciIsICJyZXF1aXJlX3Blcm1lc3NhZ2VfZGVmbGF0ZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNyZWF0ZUluZmxhdGVSYXciLCAiWl9ERUZBVUxUX1dJTkRPV0JJVFMiLCAiaXNWYWxpZENsaWVudFdpbmRvd0JpdHMiLCAiTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIiwgInRhaWwiLCAia0J1ZmZlciIsICJrTGVuZ3RoIiwgIlBlck1lc3NhZ2VEZWZsYXRlIiwgIiNpbmZsYXRlIiwgIiNvcHRpb25zIiwgIiNtYXhQYXlsb2FkU2l6ZSIsICJleHRlbnNpb25zIiwgIm9wdGlvbnMiLCAiY2h1bmsiLCAiZmluIiwgImNhbGxiYWNrIiwgIndpbmRvd0JpdHMiLCAiZXJyIiwgImRhdGEiLCAiZnVsbCIsICJyZXF1aXJlX3JlY2VpdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiV3JpdGFibGUiLCAiYXNzZXJ0IiwgInBhcnNlclN0YXRlcyIsICJvcGNvZGVzIiwgInN0YXRlcyIsICJlbXB0eUJ1ZmZlciIsICJzZW50Q2xvc2VGcmFtZVN0YXRlIiwgImtSZWFkeVN0YXRlIiwgImtTZW50Q2xvc2UiLCAia1Jlc3BvbnNlIiwgImtSZWNlaXZlZENsb3NlIiwgImNoYW5uZWxzIiwgImlzVmFsaWRTdGF0dXNDb2RlIiwgImlzVmFsaWRPcGNvZGUiLCAiZmFpbFdlYnNvY2tldENvbm5lY3Rpb24iLCAid2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkIiwgInV0ZjhEZWNvZGUiLCAiaXNDb250cm9sRnJhbWUiLCAiaXNUZXh0QmluYXJ5RnJhbWUiLCAiaXNDb250aW51YXRpb25GcmFtZSIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uIiwgIlBlck1lc3NhZ2VEZWZsYXRlIiwgIk1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciIsICJmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlIiwgIndzIiwgImNvZGUiLCAicmVhc29uIiwgIkJ5dGVQYXJzZXIiLCAiI2J1ZmZlcnMiLCAiI2ZyYWdtZW50c0J5dGVzIiwgIiNieXRlT2Zmc2V0IiwgIiNsb29wIiwgIiNzdGF0ZSIsICIjaW5mbyIsICIjZnJhZ21lbnRzIiwgIiNleHRlbnNpb25zIiwgIiNtYXhGcmFnbWVudHMiLCAiI21heFBheWxvYWRTaXplIiwgImV4dGVuc2lvbnMiLCAib3B0aW9ucyIsICJjaHVuayIsICJfIiwgImNhbGxiYWNrIiwgIiN2YWxpZGF0ZVBheWxvYWRMZW5ndGgiLCAiYnVmZmVyIiwgImZpbiIsICJvcGNvZGUiLCAibWFza2VkIiwgImZyYWdtZW50ZWQiLCAicGF5bG9hZExlbmd0aCIsICJyc3YxIiwgInJzdjIiLCAicnN2MyIsICJ1cHBlciIsICJsb3dlciIsICJib2R5IiwgImVycm9yIiwgImRhdGEiLCAibiIsICJvZmZzZXQiLCAibmV4dCIsICJsZW5ndGgiLCAiZnJhZ21lbnQiLCAiZnJhZ21lbnRzIiwgIm91dHB1dCIsICJjbG9zZUZyYW1lIiwgImVyciIsICJmcmFtZSIsICJyZXF1aXJlX3NlbmRlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIldlYnNvY2tldEZyYW1lU2VuZCIsICJvcGNvZGVzIiwgInNlbmRIaW50cyIsICJGaXhlZFF1ZXVlIiwgIkZhc3RCdWZmZXIiLCAiU2VuZFF1ZXVlIiwgIiNxdWV1ZSIsICIjcnVubmluZyIsICIjc29ja2V0IiwgInNvY2tldCIsICJpdGVtIiwgImNiIiwgImhpbnQiLCAiZnJhbWUiLCAiY3JlYXRlRnJhbWUiLCAibm9kZSIsICJhYiIsICIjcnVuIiwgInF1ZXVlIiwgImRhdGEiLCAidG9CdWZmZXIiLCAicmVxdWlyZV93ZWJzb2NrZXQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3ZWJpZGwiLCAiVVJMU2VyaWFsaXplciIsICJlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IiwgInN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAic2VuZEhpbnRzIiwgImtXZWJTb2NrZXRVUkwiLCAia1JlYWR5U3RhdGUiLCAia0NvbnRyb2xsZXIiLCAia0JpbmFyeVR5cGUiLCAia1Jlc3BvbnNlIiwgImtTZW50Q2xvc2UiLCAia0J5dGVQYXJzZXIiLCAiaXNDb25uZWN0aW5nIiwgImlzRXN0YWJsaXNoZWQiLCAiaXNDbG9zaW5nIiwgImlzVmFsaWRTdWJwcm90b2NvbCIsICJmaXJlRXZlbnQiLCAiZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiIsICJjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24iLCAiQnl0ZVBhcnNlciIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImlzQmxvYkxpa2UiLCAiZ2V0R2xvYmFsRGlzcGF0Y2hlciIsICJ0eXBlcyIsICJFcnJvckV2ZW50IiwgIkNsb3NlRXZlbnQiLCAiU2VuZFF1ZXVlIiwgIldlYlNvY2tldCIsICJfV2ViU29ja2V0IiwgIiNldmVudHMiLCAiI2J1ZmZlcmVkQW1vdW50IiwgIiNwcm90b2NvbCIsICIjZXh0ZW5zaW9ucyIsICIjc2VuZFF1ZXVlIiwgInVybCIsICJwcm90b2NvbHMiLCAicHJlZml4IiwgIm9wdGlvbnMiLCAiYmFzZVVSTCIsICJ1cmxSZWNvcmQiLCAiZSIsICJwIiwgImNsaWVudCIsICJyZXNwb25zZSIsICJleHRlbnNpb25zIiwgIiNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCIsICJjb2RlIiwgInJlYXNvbiIsICJyZWFzb25CeXRlTGVuZ3RoIiwgImRhdGEiLCAibGVuZ3RoIiwgImZuIiwgInR5cGUiLCAicGFyc2VkRXh0ZW5zaW9ucyIsICJ3ZWJTb2NrZXRPcHRpb25zIiwgIm1heEZyYWdtZW50cyIsICJtYXhQYXlsb2FkU2l6ZSIsICJwYXJzZXIiLCAib25QYXJzZXJEcmFpbiIsICJvblBhcnNlckVycm9yIiwgInByb3RvY29sIiwgIlYiLCAiYXJndW1lbnQiLCAiZXJyIiwgIm1lc3NhZ2UiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNWYWxpZExhc3RFdmVudElkIiwgInZhbHVlIiwgImlzQVNDSUlOdW1iZXIiLCAiaSIsICJkZWxheSIsICJtcyIsICJyZXNvbHZlIiwgInJlcXVpcmVfZXZlbnRzb3VyY2Vfc3RyZWFtIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVHJhbnNmb3JtIiwgImlzQVNDSUlOdW1iZXIiLCAiaXNWYWxpZExhc3RFdmVudElkIiwgIkJPTSIsICJMRiIsICJDUiIsICJDT0xPTiIsICJTUEFDRSIsICJFdmVudFNvdXJjZVN0cmVhbSIsICJvcHRpb25zIiwgImNodW5rIiwgIl9lbmNvZGluZyIsICJjYWxsYmFjayIsICJsaW5lIiwgImV2ZW50IiwgImNvbG9uUG9zaXRpb24iLCAiZmllbGQiLCAidmFsdWUiLCAidmFsdWVTdGFydCIsICJyZXF1aXJlX2V2ZW50c291cmNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGlwZWxpbmUiLCAiZmV0Y2hpbmciLCAibWFrZVJlcXVlc3QiLCAid2ViaWRsIiwgIkV2ZW50U291cmNlU3RyZWFtIiwgInBhcnNlTUlNRVR5cGUiLCAiY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCIsICJpc05ldHdvcmtFcnJvciIsICJkZWxheSIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAiZXhwZXJpbWVudGFsV2FybmVkIiwgImRlZmF1bHRSZWNvbm5lY3Rpb25UaW1lIiwgIkNPTk5FQ1RJTkciLCAiT1BFTiIsICJDTE9TRUQiLCAiQU5PTllNT1VTIiwgIlVTRV9DUkVERU5USUFMUyIsICJFdmVudFNvdXJjZSIsICJfRXZlbnRTb3VyY2UiLCAiI2V2ZW50cyIsICIjdXJsIiwgIiN3aXRoQ3JlZGVudGlhbHMiLCAiI3JlYWR5U3RhdGUiLCAiI3JlcXVlc3QiLCAiI2NvbnRyb2xsZXIiLCAiI2Rpc3BhdGNoZXIiLCAiI3N0YXRlIiwgInVybCIsICJldmVudFNvdXJjZUluaXREaWN0IiwgInByZWZpeCIsICJzZXR0aW5ncyIsICJ1cmxSZWNvcmQiLCAiZSIsICJjb3JzQXR0cmlidXRlU3RhdGUiLCAiaW5pdFJlcXVlc3QiLCAiI2Nvbm5lY3QiLCAiZmV0Y2hQYXJhbXMiLCAicHJvY2Vzc0V2ZW50U291cmNlRW5kT2ZCb2R5IiwgInJlc3BvbnNlIiwgIiNyZWNvbm5lY3QiLCAiY29udGVudFR5cGUiLCAibWltZVR5cGUiLCAiY29udGVudFR5cGVWYWxpZCIsICJldmVudFNvdXJjZVN0cmVhbSIsICJldmVudCIsICJlcnJvciIsICJmbiIsICJjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzIiwgInJlcXVpcmVfdW5kaWNpIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQ2xpZW50IiwgIkRpc3BhdGNoZXIiLCAiUG9vbCIsICJCYWxhbmNlZFBvb2wiLCAiQWdlbnQiLCAiUHJveHlBZ2VudCIsICJFbnZIdHRwUHJveHlBZ2VudCIsICJSZXRyeUFnZW50IiwgImVycm9ycyIsICJ1dGlsIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImFwaSIsICJidWlsZENvbm5lY3RvciIsICJNb2NrQ2xpZW50IiwgIk1vY2tBZ2VudCIsICJNb2NrUG9vbCIsICJtb2NrRXJyb3JzIiwgIlJldHJ5SGFuZGxlciIsICJnZXRHbG9iYWxEaXNwYXRjaGVyIiwgInNldEdsb2JhbERpc3BhdGNoZXIiLCAiRGVjb3JhdG9ySGFuZGxlciIsICJSZWRpcmVjdEhhbmRsZXIiLCAiY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciIsICJtYWtlRGlzcGF0Y2hlciIsICJmbiIsICJ1cmwiLCAib3B0cyIsICJoYW5kbGVyIiwgInBhdGgiLCAiYWdlbnQiLCAiZGlzcGF0Y2hlciIsICJmZXRjaEltcGwiLCAiaW5pdCIsICJvcHRpb25zIiwgImVyciIsICJzZXRHbG9iYWxPcmlnaW4iLCAiZ2V0R2xvYmFsT3JpZ2luIiwgIkNhY2hlU3RvcmFnZSIsICJrQ29uc3RydWN0IiwgImRlbGV0ZUNvb2tpZSIsICJnZXRDb29raWVzIiwgImdldFNldENvb2tpZXMiLCAic2V0Q29va2llIiwgInBhcnNlTUlNRVR5cGUiLCAic2VyaWFsaXplQU1pbWVUeXBlIiwgIkNsb3NlRXZlbnQiLCAiRXJyb3JFdmVudCIsICJNZXNzYWdlRXZlbnQiLCAiRXZlbnRTb3VyY2UiLCAiZXhwb3J0cyIsICJnZXRQcm94eVVybCIsICJjaGVja0J5cGFzcyIsICJyZXFVcmwiLCAidXNpbmdTc2wiLCAicHJveHlWYXIiLCAiRGVjb2RlZFVSTCIsICJyZXFIb3N0IiwgImlzTG9vcGJhY2tBZGRyZXNzIiwgIm5vUHJveHkiLCAicmVxUG9ydCIsICJ1cHBlclJlcUhvc3RzIiwgInVwcGVyTm9Qcm94eUl0ZW0iLCAieCIsICJob3N0IiwgImhvc3RMb3dlciIsICJ1cmwiLCAiYmFzZSIsICJleHBvcnRzIiwgImdldFByb3h5VXJsIiwgImlzSHR0cHMiLCAiaHR0cCIsICJfX2ltcG9ydFN0YXIiLCAiaHR0cHMiLCAicG0iLCAidHVubmVsIiwgInVuZGljaV8xIiwgIkh0dHBDb2RlcyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAic2VydmVyVXJsIiwgInByb3h5VXJsIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgIkh0dHBSZXNwb25zZVJldHJ5Q29kZXMiLCAiUmV0cnlhYmxlSHR0cFZlcmJzIiwgIkV4cG9uZW50aWFsQmFja29mZkNlaWxpbmciLCAiRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlIiwgIkh0dHBDbGllbnRFcnJvciIsICJfSHR0cENsaWVudEVycm9yIiwgIm1lc3NhZ2UiLCAic3RhdHVzQ29kZSIsICJIdHRwQ2xpZW50UmVzcG9uc2UiLCAicmVzb2x2ZSIsICJfX2F3YWl0ZXIiLCAib3V0cHV0IiwgImNodW5rIiwgImNodW5rcyIsICJyZXF1ZXN0VXJsIiwgIkh0dHBDbGllbnQiLCAidXNlckFnZW50IiwgImhhbmRsZXJzIiwgInJlcXVlc3RPcHRpb25zIiwgImFkZGl0aW9uYWxIZWFkZXJzIiwgImRhdGEiLCAidmVyYiIsICJzdHJlYW0iLCAicmVxdWVzdFVybF8xIiwgInJlcyIsICJvYmpfMSIsICJvYmoiLCAiaGVhZGVycyIsICJwYXJzZWRVcmwiLCAiaW5mbyIsICJtYXhUcmllcyIsICJudW1UcmllcyIsICJyZXNwb25zZSIsICJhdXRoZW50aWNhdGlvbkhhbmRsZXIiLCAiaGFuZGxlciIsICJyZWRpcmVjdHNSZW1haW5pbmciLCAicmVkaXJlY3RVcmwiLCAicGFyc2VkUmVkaXJlY3RVcmwiLCAiaGVhZGVyIiwgInJlamVjdCIsICJjYWxsYmFja0ZvclJlc3VsdCIsICJlcnIiLCAib25SZXN1bHQiLCAiY2FsbGJhY2tDYWxsZWQiLCAiaGFuZGxlUmVzdWx0IiwgInJlcSIsICJtc2ciLCAic29ja2V0IiwgInNvY2siLCAibWV0aG9kIiwgInVzaW5nU3NsIiwgImRlZmF1bHRQb3J0IiwgImxvd2VyY2FzZUtleXMiLCAiX2RlZmF1bHQiLCAiY2xpZW50SGVhZGVyIiwgImhlYWRlclZhbHVlIiwgImFkZGl0aW9uYWxWYWx1ZSIsICJhZ2VudCIsICJ1c2VQcm94eSIsICJtYXhTb2NrZXRzIiwgImFnZW50T3B0aW9ucyIsICJ0dW5uZWxBZ2VudCIsICJvdmVySHR0cHMiLCAib3B0aW9ucyIsICJwcm94eUFnZW50IiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgInNhbml0aXplZElkIiwgInJldHJ5TnVtYmVyIiwgIm1zIiwgImRhdGVUaW1lRGVzZXJpYWxpemVyIiwgImtleSIsICJ2YWx1ZSIsICJhIiwgImNvbnRlbnRzIiwgImMiLCAiayIsICJleHBvcnRzIiwgImZvcm1hdCIsICJwYXJzZSIsICJURVhUX1JFR0VYUCIsICJUT0tFTl9SRUdFWFAiLCAiUVVPVEVfUkVHRVhQIiwgIlRZUEVfUkVHRVhQIiwgIk51bGxPYmplY3QiLCAiQyIsICJvYmoiLCAidHlwZSIsICJwYXJhbWV0ZXJzIiwgInJlc3VsdCIsICJwYXJhbSIsICJxc3RyaW5nIiwgImhlYWRlciIsICJvcHRpb25zIiwgImxlbiIsICJpbmRleCIsICJza2lwT1dTIiwgInZhbHVlU3RhcnQiLCAic2tpcFZhbHVlIiwgInZhbHVlRW5kIiwgInRyYWlsaW5nT1dTIiwgInBhcnNlUGFyYW1ldGVycyIsICJTUCIsICJIVEFCIiwgIlNFTUkiLCAiRVEiLCAiRFFVT1RFIiwgIkJTTEFTSCIsICJwYXJhbWV0ZXIiLCAia2V5U3RhcnQiLCAiY29kZSIsICJrZXlFbmQiLCAia2V5IiwgInZhbHVlIiwgInN0ciIsICJjaGFyIiwgInN0YXJ0IiwgImVuZCIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNFTVZFUl9TUEVDX1ZFUlNJT04iLCAiTUFYX1NBRkVfSU5URUdFUiIsICJNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIIiwgIk1BWF9TQUZFX0JVSUxEX0xFTkdUSCIsICJSRUxFQVNFX1RZUEVTIiwgInJlcXVpcmVfZGVidWciLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJkZWJ1ZyIsICJhcmdzIiwgInJlcXVpcmVfcmUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIIiwgIk1BWF9TQUZFX0JVSUxEX0xFTkdUSCIsICJNQVhfTEVOR1RIIiwgImRlYnVnIiwgInJlIiwgInNhZmVSZSIsICJzcmMiLCAic2FmZVNyYyIsICJ0IiwgIlIiLCAiTEVUVEVSREFTSE5VTUJFUiIsICJzYWZlUmVnZXhSZXBsYWNlbWVudHMiLCAibWFrZVNhZmVSZWdleCIsICJ2YWx1ZSIsICJ0b2tlbiIsICJtYXgiLCAiY3JlYXRlVG9rZW4iLCAibmFtZSIsICJpc0dsb2JhbCIsICJzYWZlIiwgImluZGV4IiwgInJlcXVpcmVfcGFyc2Vfb3B0aW9ucyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImxvb3NlT3B0aW9uIiwgImVtcHR5T3B0cyIsICJwYXJzZU9wdGlvbnMiLCAib3B0aW9ucyIsICJyZXF1aXJlX2lkZW50aWZpZXJzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibnVtZXJpYyIsICJjb21wYXJlSWRlbnRpZmllcnMiLCAiYSIsICJiIiwgImFudW0iLCAiYm51bSIsICJyY29tcGFyZUlkZW50aWZpZXJzIiwgInJlcXVpcmVfc2VtdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZGVidWciLCAiTUFYX0xFTkdUSCIsICJNQVhfU0FGRV9JTlRFR0VSIiwgInJlIiwgInQiLCAicGFyc2VPcHRpb25zIiwgImNvbXBhcmVJZGVudGlmaWVycyIsICJpc1ByZXJlbGVhc2VJZGVudGlmaWVyIiwgInByZXJlbGVhc2UiLCAiaWRlbnRpZmllciIsICJpZGVudGlmaWVycyIsICJpIiwgIlNlbVZlciIsICJfU2VtVmVyIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJtIiwgImlkIiwgIm51bSIsICJvdGhlciIsICJhIiwgImIiLCAicmVsZWFzZSIsICJpZGVudGlmaWVyQmFzZSIsICJtYXRjaCIsICJiYXNlIiwgInByZXJlbGVhc2VCYXNlIiwgInJlcXVpcmVfcGFyc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAicGFyc2UiLCAidmVyc2lvbiIsICJvcHRpb25zIiwgInRocm93RXJyb3JzIiwgImVyIiwgInJlcXVpcmVfdmFsaWQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXJzZSIsICJ2YWxpZCIsICJ2ZXJzaW9uIiwgIm9wdGlvbnMiLCAidiIsICJyZXF1aXJlX2NsZWFuIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAiY2xlYW4iLCAidmVyc2lvbiIsICJvcHRpb25zIiwgInMiLCAicmVxdWlyZV9pbmMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAiaW5jIiwgInZlcnNpb24iLCAicmVsZWFzZSIsICJvcHRpb25zIiwgImlkZW50aWZpZXIiLCAiaWRlbnRpZmllckJhc2UiLCAicmVxdWlyZV9kaWZmIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAiZGlmZiIsICJ2ZXJzaW9uMSIsICJ2ZXJzaW9uMiIsICJ2MSIsICJ2MiIsICJjb21wYXJpc29uIiwgInYxSGlnaGVyIiwgImhpZ2hWZXJzaW9uIiwgImxvd1ZlcnNpb24iLCAiaGlnaEhhc1ByZSIsICJwcmVmaXgiLCAicmVxdWlyZV9tYWpvciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJtYWpvciIsICJhIiwgImxvb3NlIiwgInJlcXVpcmVfbWlub3IiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAibWlub3IiLCAiYSIsICJsb29zZSIsICJyZXF1aXJlX3BhdGNoIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgInBhdGNoIiwgImEiLCAibG9vc2UiLCAicmVxdWlyZV9wcmVyZWxlYXNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAicHJlcmVsZWFzZSIsICJ2ZXJzaW9uIiwgIm9wdGlvbnMiLCAicGFyc2VkIiwgInJlcXVpcmVfY29tcGFyZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJjb21wYXJlIiwgImEiLCAiYiIsICJsb29zZSIsICJyZXF1aXJlX3Jjb21wYXJlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJyY29tcGFyZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9jb21wYXJlX2xvb3NlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJjb21wYXJlTG9vc2UiLCAiYSIsICJiIiwgInJlcXVpcmVfY29tcGFyZV9idWlsZCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJjb21wYXJlQnVpbGQiLCAiYSIsICJiIiwgImxvb3NlIiwgInZlcnNpb25BIiwgInZlcnNpb25CIiwgInJlcXVpcmVfc29ydCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvbXBhcmVCdWlsZCIsICJzb3J0IiwgImxpc3QiLCAibG9vc2UiLCAiYSIsICJiIiwgInJlcXVpcmVfcnNvcnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlQnVpbGQiLCAicnNvcnQiLCAibGlzdCIsICJsb29zZSIsICJhIiwgImIiLCAicmVxdWlyZV9ndCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvbXBhcmUiLCAiZ3QiLCAiYSIsICJiIiwgImxvb3NlIiwgInJlcXVpcmVfbHQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImx0IiwgImEiLCAiYiIsICJsb29zZSIsICJyZXF1aXJlX2VxIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJlcSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9uZXEiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgIm5lcSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9ndGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImd0ZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9sdGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImx0ZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9jbXAiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJlcSIsICJuZXEiLCAiZ3QiLCAiZ3RlIiwgImx0IiwgImx0ZSIsICJjbXAiLCAiYSIsICJvcCIsICJiIiwgImxvb3NlIiwgInJlcXVpcmVfY29lcmNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgInBhcnNlIiwgInJlIiwgInQiLCAiY29lcmNlIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJtYXRjaCIsICJjb2VyY2VSdGxSZWdleCIsICJuZXh0IiwgIm1ham9yIiwgIm1pbm9yIiwgInBhdGNoIiwgInByZXJlbGVhc2UiLCAiYnVpbGQiLCAicmVxdWlyZV90cnVuY2F0ZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhcnNlIiwgImNvbnN0YW50cyIsICJTZW1WZXIiLCAidHJ1bmNhdGUiLCAidmVyc2lvbiIsICJ0cnVuY2F0aW9uIiwgIm9wdGlvbnMiLCAiY2xvbmVkVmVyc2lvbiIsICJjbG9uZUlucHV0VmVyc2lvbiIsICJkb1RydW5jYXRpb24iLCAidmVyc2lvblN0cmluZ1RvUGFyc2UiLCAiaXNQcmVyZWxlYXNlIiwgInR5cGUiLCAicmVxdWlyZV9scnVjYWNoZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkxSVUNhY2hlIiwgImtleSIsICJ2YWx1ZSIsICJmaXJzdEtleSIsICJyZXF1aXJlX3JhbmdlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU1BBQ0VfQ0hBUkFDVEVSUyIsICJSYW5nZSIsICJfUmFuZ2UiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJwYXJzZU9wdGlvbnMiLCAiQ29tcGFyYXRvciIsICJyIiwgImMiLCAiZmlyc3QiLCAiaXNOdWxsU2V0IiwgImlzQW55IiwgImkiLCAiY29tcHMiLCAiayIsICJCVUlMRFNUUklQUkUiLCAibWVtb0tleSIsICJGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRSIsICJGTEFHX0xPT1NFIiwgImNhY2hlZCIsICJjYWNoZSIsICJsb29zZSIsICJociIsICJyZSIsICJ0IiwgImh5cGhlblJlcGxhY2UiLCAiZGVidWciLCAiY29tcGFyYXRvclRyaW1SZXBsYWNlIiwgInRpbGRlVHJpbVJlcGxhY2UiLCAiY2FyZXRUcmltUmVwbGFjZSIsICJyYW5nZUxpc3QiLCAiY29tcCIsICJwYXJzZUNvbXBhcmF0b3IiLCAicmVwbGFjZUdURTAiLCAicmFuZ2VNYXAiLCAiY29tcGFyYXRvcnMiLCAicmVzdWx0IiwgInRoaXNDb21wYXJhdG9ycyIsICJpc1NhdGlzZmlhYmxlIiwgInJhbmdlQ29tcGFyYXRvcnMiLCAidGhpc0NvbXBhcmF0b3IiLCAicmFuZ2VDb21wYXJhdG9yIiwgInZlcnNpb24iLCAiU2VtVmVyIiwgInRlc3RTZXQiLCAiTFJVIiwgInNyYyIsICJyZW1haW5pbmdDb21wYXJhdG9ycyIsICJ0ZXN0Q29tcGFyYXRvciIsICJvdGhlckNvbXBhcmF0b3IiLCAicmVwbGFjZUNhcmV0cyIsICJyZXBsYWNlVGlsZGVzIiwgInJlcGxhY2VYUmFuZ2VzIiwgInJlcGxhY2VTdGFycyIsICJpc1giLCAiaWQiLCAiaW52YWxpZFhSYW5nZU9yZGVyIiwgIk0iLCAibSIsICJwIiwgInJlcGxhY2VUaWxkZSIsICJ6IiwgIl8iLCAicHIiLCAicmV0IiwgInJlcGxhY2VDYXJldCIsICJyZXBsYWNlWFJhbmdlIiwgImd0bHQiLCAieE0iLCAieG0iLCAieHAiLCAiYW55WCIsICJpbmNQciIsICIkMCIsICJmcm9tIiwgImZNIiwgImZtIiwgImZwIiwgImZwciIsICJmYiIsICJ0byIsICJ0TSIsICJ0bSIsICJ0cCIsICJ0cHIiLCAic2V0IiwgImFsbG93ZWQiLCAicmVxdWlyZV9jb21wYXJhdG9yIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQU5ZIiwgIkNvbXBhcmF0b3IiLCAiX0NvbXBhcmF0b3IiLCAiY29tcCIsICJvcHRpb25zIiwgInBhcnNlT3B0aW9ucyIsICJkZWJ1ZyIsICJyZSIsICJ0IiwgIm0iLCAiU2VtVmVyIiwgInZlcnNpb24iLCAiY21wIiwgIlJhbmdlIiwgInJlcXVpcmVfc2F0aXNmaWVzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAic2F0aXNmaWVzIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX3RvX2NvbXBhcmF0b3JzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAidG9Db21wYXJhdG9ycyIsICJyYW5nZSIsICJvcHRpb25zIiwgImNvbXAiLCAiYyIsICJyZXF1aXJlX21heF9zYXRpc2Z5aW5nIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgIm1heFNhdGlzZnlpbmciLCAidmVyc2lvbnMiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJtYXgiLCAibWF4U1YiLCAicmFuZ2VPYmoiLCAidiIsICJyZXF1aXJlX21pbl9zYXRpc2Z5aW5nIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgIm1pblNhdGlzZnlpbmciLCAidmVyc2lvbnMiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJtaW4iLCAibWluU1YiLCAicmFuZ2VPYmoiLCAidiIsICJyZXF1aXJlX21pbl92ZXJzaW9uIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgImd0IiwgIm1pblZlcnNpb24iLCAicmFuZ2UiLCAibG9vc2UiLCAibWludmVyIiwgImkiLCAiY29tcGFyYXRvcnMiLCAic2V0TWluIiwgImNvbXBhcmF0b3IiLCAiY29tcHZlciIsICJyZXF1aXJlX3ZhbGlkIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAidmFsaWRSYW5nZSIsICJyYW5nZSIsICJvcHRpb25zIiwgInJlcXVpcmVfb3V0c2lkZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJDb21wYXJhdG9yIiwgIkFOWSIsICJSYW5nZSIsICJzYXRpc2ZpZXMiLCAiZ3QiLCAibHQiLCAibHRlIiwgImd0ZSIsICJvdXRzaWRlIiwgInZlcnNpb24iLCAicmFuZ2UiLCAiaGlsbyIsICJvcHRpb25zIiwgImd0Zm4iLCAibHRlZm4iLCAibHRmbiIsICJjb21wIiwgImVjb21wIiwgImkiLCAiY29tcGFyYXRvcnMiLCAiaGlnaCIsICJsb3ciLCAiY29tcGFyYXRvciIsICJyZXF1aXJlX2d0ciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm91dHNpZGUiLCAiZ3RyIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX2x0ciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm91dHNpZGUiLCAibHRyIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX2ludGVyc2VjdHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSYW5nZSIsICJpbnRlcnNlY3RzIiwgInIxIiwgInIyIiwgIm9wdGlvbnMiLCAicmVxdWlyZV9zaW1wbGlmeSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNhdGlzZmllcyIsICJjb21wYXJlIiwgInZlcnNpb25zIiwgInJhbmdlIiwgIm9wdGlvbnMiLCAic2V0IiwgImZpcnN0IiwgInByZXYiLCAidiIsICJhIiwgImIiLCAidmVyc2lvbiIsICJyYW5nZXMiLCAibWluIiwgIm1heCIsICJzaW1wbGlmaWVkIiwgIm9yaWdpbmFsIiwgInJlcXVpcmVfc3Vic2V0IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAiQ29tcGFyYXRvciIsICJBTlkiLCAic2F0aXNmaWVzIiwgImNvbXBhcmUiLCAic3Vic2V0IiwgInN1YiIsICJkb20iLCAib3B0aW9ucyIsICJzYXdOb25OdWxsIiwgIk9VVEVSIiwgInNpbXBsZVN1YiIsICJzaW1wbGVEb20iLCAiaXNTdWIiLCAic2ltcGxlU3Vic2V0IiwgIm1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2UiLCAibWluaW11bVZlcnNpb24iLCAiZXFTZXQiLCAiZ3QiLCAibHQiLCAiYyIsICJoaWdoZXJHVCIsICJsb3dlckxUIiwgImd0bHRDb21wIiwgImVxIiwgImhpZ2hlciIsICJsb3dlciIsICJoYXNEb21MVCIsICJoYXNEb21HVCIsICJuZWVkRG9tTFRQcmUiLCAibmVlZERvbUdUUHJlIiwgImEiLCAiYiIsICJjb21wIiwgInJlcXVpcmVfc2VtdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaW50ZXJuYWxSZSIsICJjb25zdGFudHMiLCAiU2VtVmVyIiwgImlkZW50aWZpZXJzIiwgInBhcnNlIiwgInZhbGlkIiwgImNsZWFuIiwgImluYyIsICJkaWZmIiwgIm1ham9yIiwgIm1pbm9yIiwgInBhdGNoIiwgInByZXJlbGVhc2UiLCAiY29tcGFyZSIsICJyY29tcGFyZSIsICJjb21wYXJlTG9vc2UiLCAiY29tcGFyZUJ1aWxkIiwgInNvcnQiLCAicnNvcnQiLCAiZ3QiLCAibHQiLCAiZXEiLCAibmVxIiwgImd0ZSIsICJsdGUiLCAiY21wIiwgImNvZXJjZSIsICJ0cnVuY2F0ZSIsICJDb21wYXJhdG9yIiwgIlJhbmdlIiwgInNhdGlzZmllcyIsICJ0b0NvbXBhcmF0b3JzIiwgIm1heFNhdGlzZnlpbmciLCAibWluU2F0aXNmeWluZyIsICJtaW5WZXJzaW9uIiwgInZhbGlkUmFuZ2UiLCAib3V0c2lkZSIsICJndHIiLCAibHRyIiwgImludGVyc2VjdHMiLCAic2ltcGxpZnlSYW5nZSIsICJzdWJzZXQiLCAicHJvY2VzcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgIm9zIiwgInRvQ29tbWFuZFZhbHVlIiwgImlucHV0IiwgInRvQ29tbWFuZFByb3BlcnRpZXMiLCAiYW5ub3RhdGlvblByb3BlcnRpZXMiLCAiaXNzdWVDb21tYW5kIiwgImNvbW1hbmQiLCAicHJvcGVydGllcyIsICJtZXNzYWdlIiwgImNtZCIsICJDb21tYW5kIiwgIkNNRF9TVFJJTkciLCAiQ29tbWFuZCIsICJjb21tYW5kIiwgInByb3BlcnRpZXMiLCAibWVzc2FnZSIsICJjbWRTdHIiLCAiZmlyc3QiLCAia2V5IiwgInZhbCIsICJlc2NhcGVQcm9wZXJ0eSIsICJlc2NhcGVEYXRhIiwgInMiLCAidG9Db21tYW5kVmFsdWUiLCAib3MiLCAiaHR0cCIsICJodHRwcyIsICJnZXRQcm94eVVybCIsICJyZXFVcmwiLCAidXNpbmdTc2wiLCAiY2hlY2tCeXBhc3MiLCAicHJveHlWYXIiLCAiRGVjb2RlZFVSTCIsICJyZXFIb3N0IiwgImlzTG9vcGJhY2tBZGRyZXNzIiwgIm5vUHJveHkiLCAicmVxUG9ydCIsICJ1cHBlclJlcUhvc3RzIiwgInVwcGVyTm9Qcm94eUl0ZW0iLCAieCIsICJob3N0IiwgImhvc3RMb3dlciIsICJ1cmwiLCAiYmFzZSIsICJ0dW5uZWwiLCAiaW1wb3J0X3VuZGljaSIsICJIdHRwQ29kZXMiLCAiSGVhZGVycyIsICJNZWRpYVR5cGVzIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgIkh0dHBDb2RlcyIsICJIdHRwUmVzcG9uc2VSZXRyeUNvZGVzIiwgIlJldHJ5YWJsZUh0dHBWZXJicyIsICJFeHBvbmVudGlhbEJhY2tvZmZDZWlsaW5nIiwgIkV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSIsICJIdHRwQ2xpZW50RXJyb3IiLCAiX0h0dHBDbGllbnRFcnJvciIsICJtZXNzYWdlIiwgInN0YXR1c0NvZGUiLCAiSHR0cENsaWVudFJlc3BvbnNlIiwgInJlc29sdmUiLCAiX19hd2FpdGVyIiwgIm91dHB1dCIsICJjaHVuayIsICJjaHVua3MiLCAiSHR0cENsaWVudCIsICJ1c2VyQWdlbnQiLCAiaGFuZGxlcnMiLCAicmVxdWVzdE9wdGlvbnMiLCAicmVxdWVzdFVybCIsICJhZGRpdGlvbmFsSGVhZGVycyIsICJkYXRhIiwgInZlcmIiLCAic3RyZWFtIiwgInJlcXVlc3RVcmxfMSIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAicmVzIiwgIm9ial8xIiwgIm9iaiIsICJoZWFkZXJzIiwgInBhcnNlZFVybCIsICJpbmZvIiwgIm1heFRyaWVzIiwgIlJldHJ5YWJsZUh0dHBWZXJicyIsICJudW1UcmllcyIsICJyZXNwb25zZSIsICJIdHRwQ29kZXMiLCAiYXV0aGVudGljYXRpb25IYW5kbGVyIiwgImhhbmRsZXIiLCAicmVkaXJlY3RzUmVtYWluaW5nIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgInJlZGlyZWN0VXJsIiwgInBhcnNlZFJlZGlyZWN0VXJsIiwgImhlYWRlciIsICJIdHRwUmVzcG9uc2VSZXRyeUNvZGVzIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImNhbGxiYWNrRm9yUmVzdWx0IiwgImVyciIsICJvblJlc3VsdCIsICJjYWxsYmFja0NhbGxlZCIsICJoYW5kbGVSZXN1bHQiLCAicmVxIiwgIm1zZyIsICJIdHRwQ2xpZW50UmVzcG9uc2UiLCAic29ja2V0IiwgInNvY2siLCAic2VydmVyVXJsIiwgInByb3h5VXJsIiwgImdldFByb3h5VXJsIiwgIm1ldGhvZCIsICJ1c2luZ1NzbCIsICJodHRwcyIsICJodHRwIiwgImRlZmF1bHRQb3J0IiwgImxvd2VyY2FzZUtleXMiLCAiX2RlZmF1bHQiLCAiY2xpZW50SGVhZGVyIiwgImhlYWRlclZhbHVlIiwgImFkZGl0aW9uYWxWYWx1ZSIsICJhZ2VudCIsICJ1c2VQcm94eSIsICJtYXhTb2NrZXRzIiwgImFnZW50T3B0aW9ucyIsICJ0dW5uZWxBZ2VudCIsICJvdmVySHR0cHMiLCAib3B0aW9ucyIsICJwcm94eUFnZW50IiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgInNhbml0aXplZElkIiwgInJldHJ5TnVtYmVyIiwgIkV4cG9uZW50aWFsQmFja29mZkNlaWxpbmciLCAibXMiLCAiRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlIiwgIl9fYXdhaXRlciIsICJzdGF0dXNDb2RlIiwgImRhdGVUaW1lRGVzZXJpYWxpemVyIiwgImtleSIsICJ2YWx1ZSIsICJhIiwgImNvbnRlbnRzIiwgIkh0dHBDbGllbnRFcnJvciIsICJjIiwgImsiLCAiaW1wb3J0X29zIiwgImltcG9ydF9mcyIsICJhY2Nlc3MiLCAiYXBwZW5kRmlsZSIsICJ3cml0ZUZpbGUiLCAiU1VNTUFSWV9FTlZfVkFSIiwgIlN1bW1hcnkiLCAicGF0aEZyb21FbnYiLCAiU1VNTUFSWV9FTlZfVkFSIiwgImFjY2VzcyIsICJ0YWciLCAiY29udGVudCIsICJhdHRycyIsICJodG1sQXR0cnMiLCAia2V5IiwgInZhbHVlIiwgIm9wdGlvbnMiLCAib3ZlcndyaXRlIiwgImZpbGVQYXRoIiwgIndyaXRlRmlsZSIsICJhcHBlbmRGaWxlIiwgInRleHQiLCAiYWRkRU9MIiwgImNvZGUiLCAibGFuZyIsICJlbGVtZW50IiwgIml0ZW1zIiwgIm9yZGVyZWQiLCAibGlzdEl0ZW1zIiwgIml0ZW0iLCAicm93cyIsICJ0YWJsZUJvZHkiLCAicm93IiwgImNlbGxzIiwgImNlbGwiLCAiaGVhZGVyIiwgImRhdGEiLCAiY29sc3BhbiIsICJyb3dzcGFuIiwgImxhYmVsIiwgInNyYyIsICJhbHQiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImxldmVsIiwgImFsbG93ZWRUYWciLCAiY2l0ZSIsICJocmVmIiwgIl9zdW1tYXJ5IiwgImltcG9ydF9vcyIsICJvcyIsICJldmVudHMiLCAiY2hpbGQiLCAicGF0aCIsICJpbXBvcnRfYXNzZXJ0IiwgInBhdGgiLCAiZnMiLCAicGF0aCIsICJjaG1vZCIsICJjb3B5RmlsZSIsICJsc3RhdCIsICJta2RpciIsICJvcGVuIiwgInJlYWRkaXIiLCAicmVuYW1lIiwgInJtIiwgInJtZGlyIiwgInN0YXQiLCAic3ltbGluayIsICJ1bmxpbmsiLCAiSVNfV0lORE9XUyIsICJSRUFET05MWSIsICJleGlzdHMiLCAiZnNQYXRoIiwgInN0YXQiLCAiZXJyIiwgImlzUm9vdGVkIiwgInAiLCAibm9ybWFsaXplU2VwYXJhdG9ycyIsICJJU19XSU5ET1dTIiwgInRyeUdldEV4ZWN1dGFibGVQYXRoIiwgImZpbGVQYXRoIiwgImV4dGVuc2lvbnMiLCAic3RhdHMiLCAic3RhdCIsICJlcnIiLCAidXBwZXJFeHQiLCAidmFsaWRFeHQiLCAiaXNVbml4RXhlY3V0YWJsZSIsICJvcmlnaW5hbEZpbGVQYXRoIiwgImV4dGVuc2lvbiIsICJkaXJlY3RvcnkiLCAidXBwZXJOYW1lIiwgImFjdHVhbE5hbWUiLCAicmVhZGRpciIsICJybVJGIiwgImlucHV0UGF0aCIsICJJU19XSU5ET1dTIiwgInJtIiwgImVyciIsICJta2RpclAiLCAiZnNQYXRoIiwgIm1rZGlyIiwgIndoaWNoIiwgInRvb2wiLCAiY2hlY2siLCAicmVzdWx0IiwgIm1hdGNoZXMiLCAiZmluZEluUGF0aCIsICJleHRlbnNpb25zIiwgImV4dGVuc2lvbiIsICJpc1Jvb3RlZCIsICJmaWxlUGF0aCIsICJ0cnlHZXRFeGVjdXRhYmxlUGF0aCIsICJkaXJlY3RvcmllcyIsICJwIiwgImRpcmVjdG9yeSIsICJpbXBvcnRfdGltZXJzIiwgIklTX1dJTkRPV1MiLCAiVG9vbFJ1bm5lciIsICJ0b29sUGF0aCIsICJhcmdzIiwgIm9wdGlvbnMiLCAibWVzc2FnZSIsICJub1ByZWZpeCIsICJjbWQiLCAiYSIsICJkYXRhIiwgInN0ckJ1ZmZlciIsICJvbkxpbmUiLCAibiIsICJsaW5lIiwgImVyciIsICJhcmdsaW5lIiwgInN0ciIsICJlbmQiLCAidXBwZXJUb29sUGF0aCIsICJhcmciLCAiY21kU3BlY2lhbENoYXJzIiwgIm5lZWRzUXVvdGVzIiwgImNoYXIiLCAieCIsICJyZXZlcnNlIiwgInF1b3RlSGl0IiwgImkiLCAicmVzdWx0IiwgImlzUm9vdGVkIiwgIndoaWNoIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIl9fYXdhaXRlciIsICJvcHRpb25zTm9uTnVsbCIsICJzdGF0ZSIsICJFeGVjU3RhdGUiLCAiZXhpc3RzIiwgImZpbGVOYW1lIiwgImNwIiwgInN0ZGJ1ZmZlciIsICJlcnJidWZmZXIiLCAiY29kZSIsICJlcnJvciIsICJleGl0Q29kZSIsICJhcmdTdHJpbmdUb0FycmF5IiwgImFyZ1N0cmluZyIsICJpblF1b3RlcyIsICJlc2NhcGVkIiwgImFwcGVuZCIsICJjIiwgIl9FeGVjU3RhdGUiLCAiZXhlYyIsICJjb21tYW5kTGluZSIsICJhcmdzIiwgIm9wdGlvbnMiLCAiY29tbWFuZEFyZ3MiLCAiYXJnU3RyaW5nVG9BcnJheSIsICJ0b29sUGF0aCIsICJUb29sUnVubmVyIiwgInBsYXRmb3JtIiwgIm9zIiwgImFyY2giLCAiRXhpdENvZGUiLCAiZ2V0SW5wdXQiLCAibmFtZSIsICJvcHRpb25zIiwgInZhbCIsICJzZXRGYWlsZWQiLCAibWVzc2FnZSIsICJFeGl0Q29kZSIsICJlcnJvciIsICJpc0RlYnVnIiwgImRlYnVnIiwgImlzc3VlQ29tbWFuZCIsICJwcm9wZXJ0aWVzIiwgInRvQ29tbWFuZFByb3BlcnRpZXMiLCAiaW5mbyIsICJtZXNzYWdlIiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiQ29udGV4dCIsICJwYXRoIiwgIl9hIiwgIl9iIiwgIl9jIiwgInBheWxvYWQiLCAib3duZXIiLCAicmVwbyIsICJodHRwQ2xpZW50IiwgImltcG9ydF91bmRpY2kiLCAiZ2V0QXV0aFN0cmluZyIsICJ0b2tlbiIsICJvcHRpb25zIiwgImdldFByb3h5QWdlbnQiLCAiZGVzdGluYXRpb25VcmwiLCAiZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIiLCAiZ2V0UHJveHlGZXRjaCIsICJodHRwRGlzcGF0Y2hlciIsICJ1cmwiLCAib3B0cyIsICJfX2F3YWl0ZXIiLCAiZ2V0QXBpQmFzZVVybCIsICJnZXRVc2VyQWdlbnRXaXRoT3JjaGVzdHJhdGlvbklkIiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgIl9hIiwgInRhZyIsICJnZXRVc2VyQWdlbnQiLCAicmVnaXN0ZXIiLCAic3RhdGUiLCAibmFtZSIsICJtZXRob2QiLCAib3B0aW9ucyIsICJjYWxsYmFjayIsICJyZWdpc3RlcmVkIiwgImFkZEhvb2siLCAic3RhdGUiLCAia2luZCIsICJuYW1lIiwgImhvb2siLCAib3JpZyIsICJtZXRob2QiLCAib3B0aW9ucyIsICJyZXN1bHQiLCAicmVzdWx0XyIsICJlcnJvciIsICJyZW1vdmVIb29rIiwgInN0YXRlIiwgIm5hbWUiLCAibWV0aG9kIiwgImluZGV4IiwgInJlZ2lzdGVyZWQiLCAiYmluZCIsICJiaW5kYWJsZSIsICJiaW5kQXBpIiwgImhvb2siLCAic3RhdGUiLCAibmFtZSIsICJyZW1vdmVIb29rUmVmIiwgInJlbW92ZUhvb2siLCAia2luZCIsICJhcmdzIiwgImFkZEhvb2siLCAiU2luZ3VsYXIiLCAic2luZ3VsYXJIb29rTmFtZSIsICJzaW5ndWxhckhvb2tTdGF0ZSIsICJzaW5ndWxhckhvb2siLCAicmVnaXN0ZXIiLCAiQ29sbGVjdGlvbiIsICJiZWZvcmVfYWZ0ZXJfaG9va19kZWZhdWx0IiwgIlZFUlNJT04iLCAidXNlckFnZW50IiwgImdldFVzZXJBZ2VudCIsICJERUZBVUxUUyIsICJsb3dlcmNhc2VLZXlzIiwgIm9iamVjdCIsICJuZXdPYmoiLCAia2V5IiwgImlzUGxhaW5PYmplY3QiLCAidmFsdWUiLCAicHJvdG8iLCAiQ3RvciIsICJtZXJnZURlZXAiLCAiZGVmYXVsdHMiLCAib3B0aW9ucyIsICJyZXN1bHQiLCAicmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyIsICJvYmoiLCAibWVyZ2UiLCAicm91dGUiLCAibWV0aG9kIiwgInVybCIsICJtZXJnZWRPcHRpb25zIiwgInByZXZpZXciLCAiYWRkUXVlcnlQYXJhbWV0ZXJzIiwgInBhcmFtZXRlcnMiLCAic2VwYXJhdG9yIiwgIm5hbWVzIiwgIm5hbWUiLCAidXJsVmFyaWFibGVSZWdleCIsICJyZW1vdmVOb25DaGFycyIsICJ2YXJpYWJsZU5hbWUiLCAiZXh0cmFjdFVybFZhcmlhYmxlTmFtZXMiLCAibWF0Y2hlcyIsICJhIiwgImIiLCAib21pdCIsICJrZXlzVG9PbWl0IiwgImVuY29kZVJlc2VydmVkIiwgInN0ciIsICJwYXJ0IiwgImVuY29kZVVucmVzZXJ2ZWQiLCAiYyIsICJlbmNvZGVWYWx1ZSIsICJvcGVyYXRvciIsICJpc0RlZmluZWQiLCAiaXNLZXlPcGVyYXRvciIsICJnZXRWYWx1ZXMiLCAiY29udGV4dCIsICJtb2RpZmllciIsICJ2YWx1ZTIiLCAiayIsICJ0bXAiLCAicGFyc2VVcmwiLCAidGVtcGxhdGUiLCAiZXhwYW5kIiwgIm9wZXJhdG9ycyIsICJfIiwgImV4cHJlc3Npb24iLCAibGl0ZXJhbCIsICJ2YWx1ZXMiLCAidmFyaWFibGUiLCAicGFyc2UiLCAiaGVhZGVycyIsICJib2R5IiwgInVybFZhcmlhYmxlTmFtZXMiLCAib21pdHRlZFBhcmFtZXRlcnMiLCAib3B0aW9uIiwgInJlbWFpbmluZ1BhcmFtZXRlcnMiLCAiZm9ybWF0IiwgInByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciIsICJlbmRwb2ludFdpdGhEZWZhdWx0cyIsICJ3aXRoRGVmYXVsdHMiLCAib2xkRGVmYXVsdHMiLCAibmV3RGVmYXVsdHMiLCAiREVGQVVMVFMyIiwgImVuZHBvaW50MiIsICJlbmRwb2ludCIsICJpbXBvcnRfY29udGVudF90eXBlIiwgImludFJlZ2V4IiwgIm5vaXNlVmFsdWUiLCAib3JpZ2luYWxTdHJpbmdpZnkiLCAib3JpZ2luYWxQYXJzZSIsICJjdXN0b21Gb3JtYXQiLCAiYmlnSW50c1N0cmluZ2lmeSIsICJub2lzZVN0cmluZ2lmeSIsICJpc1Vuc3RyaW5naWZpYWJsZSIsICJ2YWwiLCAiaXNSYXdKU09OIiwgInN0cmluZ2lmeUl0ZXJhdGl2ZWx5IiwgInJvb3RWYWx1ZSIsICJyZXBsYWNlciIsICJzcGFjZVBhcmFtIiwgInNwYWNlIiwgImlzRnVuY3Rpb25SZXBsYWNlciIsICJwcm9wZXJ0eUxpc3QiLCAicHJlcGFyZVZhbCIsICJwYXJlbnQiLCAia2V5IiwgInJvb3RQcm9jZXNzZWQiLCAiaXNSb290UHJpbWl0aXZlIiwgImlzUm9vdE5hdGl2ZVJhd0pTT04iLCAiY2h1bmtzIiwgImxldmVsIiwgInN0YWNrIiwgInZpc2l0ZWQiLCAibm9kZSIsICJpc0RvbmUiLCAiY2hpbGRSYXciLCAiY2hpbGRWYWwiLCAiaXNDb21wbGV4T2JqZWN0IiwgImlzTmF0aXZlUmF3IiwgImsiLCAiSlNPTlN0cmluZ2lmeSIsICJ2YWx1ZSIsICJlcnJvciIsICJjb252ZXJ0ZWRKU09OIiwgImZlYXR1cmVDYWNoZSIsICJpc0NvbnRleHRTb3VyY2VTdXBwb3J0ZWQiLCAicGFyc2VGaW5nZXJwcmludCIsICJyZXN1bHQiLCAiXyIsICJfXyIsICJjb250ZXh0IiwgImNvbnZlcnRNYXJrZWRCaWdJbnRzUmV2aXZlciIsICJ1c2VyUmV2aXZlciIsICJKU09OUGFyc2VWMiIsICJ0ZXh0IiwgInJldml2ZXIiLCAiaXNOdW1iZXIiLCAiaXNPdXRPZkJvdW5kcyIsICJpc0JpZ051bWJlciIsICJpc0ludCIsICJNQVhfSU5UIiwgIk1BWF9ESUdJVFMiLCAic3RyaW5nc09yTGFyZ2VOdW1iZXJzIiwgIm5vaXNlVmFsdWVXaXRoUXVvdGVzIiwgImFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5IiwgInBhcnNlZCIsICJyb290SG9sZGVyIiwgImtleXMiLCAiaSIsICJzZXJpYWxpemVCaWdJbnRzIiwgIm1hdGNoIiwgImRpZ2l0cyIsICJmcmFjdGlvbmFsIiwgImV4cG9uZW50aWFsIiwgImlzU3RyaW5nIiwgImhhc0ZyYWN0aW9uYWxPckV4cG9uZW50aWFsIiwgImlzTGVzc1RoYW5NYXhTYWZlSW50IiwgIkpTT05QYXJzZSIsICJzZXJpYWxpemVkRGF0YSIsICJSZXF1ZXN0RXJyb3IiLCAibWVzc2FnZSIsICJzdGF0dXNDb2RlIiwgIm9wdGlvbnMiLCAicmVxdWVzdENvcHkiLCAiVkVSU0lPTiIsICJkZWZhdWx0c19kZWZhdWx0IiwgImdldFVzZXJBZ2VudCIsICJpc1BsYWluT2JqZWN0IiwgInZhbHVlIiwgInByb3RvIiwgIkN0b3IiLCAibm9vcCIsICJmZXRjaFdyYXBwZXIiLCAicmVxdWVzdE9wdGlvbnMiLCAiZmV0Y2giLCAibG9nIiwgInBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSIsICJib2R5IiwgIkpTT05TdHJpbmdpZnkiLCAicmVxdWVzdEhlYWRlcnMiLCAibmFtZSIsICJmZXRjaFJlc3BvbnNlIiwgImVycm9yIiwgIm1lc3NhZ2UiLCAicmVxdWVzdEVycm9yIiwgIlJlcXVlc3RFcnJvciIsICJzdGF0dXMiLCAidXJsIiwgInJlc3BvbnNlSGVhZGVycyIsICJrZXkiLCAib2N0b2tpdFJlc3BvbnNlIiwgIm1hdGNoZXMiLCAiZGVwcmVjYXRpb25MaW5rIiwgImdldFJlc3BvbnNlRGF0YSIsICJ0b0Vycm9yTWVzc2FnZSIsICJyZXNwb25zZSIsICJjb250ZW50VHlwZSIsICJtaW1ldHlwZSIsICJpc0pTT05SZXNwb25zZSIsICJ0ZXh0IiwgIkpTT05QYXJzZSIsICJkYXRhIiwgIm9iamVjdERhdGEiLCAic3VmZml4IiwgInYiLCAid2l0aERlZmF1bHRzIiwgIm9sZEVuZHBvaW50IiwgIm5ld0RlZmF1bHRzIiwgImVuZHBvaW50MiIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgImVuZHBvaW50T3B0aW9ucyIsICJyZXF1ZXN0MiIsICJyb3V0ZTIiLCAicGFyYW1ldGVyczIiLCAicmVxdWVzdCIsICJlbmRwb2ludCIsICJWRVJTSU9OIiwgIl9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyIsICJkYXRhIiwgIkdyYXBocWxSZXNwb25zZUVycm9yIiwgInJlcXVlc3QyIiwgImhlYWRlcnMiLCAicmVzcG9uc2UiLCAiTk9OX1ZBUklBQkxFX09QVElPTlMiLCAiRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMiLCAiR0hFU19WM19TVUZGSVhfUkVHRVgiLCAiZ3JhcGhxbCIsICJxdWVyeSIsICJvcHRpb25zIiwgImtleSIsICJwYXJzZWRPcHRpb25zIiwgInJlcXVlc3RPcHRpb25zIiwgInJlc3VsdCIsICJiYXNlVXJsIiwgIndpdGhEZWZhdWx0cyIsICJuZXdEZWZhdWx0cyIsICJuZXdSZXF1ZXN0IiwgImdyYXBocWwyIiwgInJlcXVlc3QiLCAiZ2V0VXNlckFnZW50IiwgIndpdGhDdXN0b21SZXF1ZXN0IiwgImN1c3RvbVJlcXVlc3QiLCAiYjY0dXJsIiwgInNlcCIsICJqd3RSRSIsICJpc0pXVCIsICJhdXRoIiwgInRva2VuIiwgImlzQXBwIiwgImlzSW5zdGFsbGF0aW9uIiwgImlzVXNlclRvU2VydmVyIiwgIndpdGhBdXRob3JpemF0aW9uUHJlZml4IiwgImhvb2siLCAicmVxdWVzdCIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgImVuZHBvaW50IiwgImNyZWF0ZVRva2VuQXV0aCIsICJWRVJTSU9OIiwgIm5vb3AiLCAiY29uc29sZVdhcm4iLCAiY29uc29sZUVycm9yIiwgImNyZWF0ZUxvZ2dlciIsICJsb2dnZXIiLCAidXNlckFnZW50VHJhaWwiLCAiVkVSU0lPTiIsICJnZXRVc2VyQWdlbnQiLCAiT2N0b2tpdCIsICJkZWZhdWx0cyIsICJhcmdzIiwgIm9wdGlvbnMiLCAibmV3UGx1Z2lucyIsICJjdXJyZW50UGx1Z2lucyIsICJwbHVnaW4iLCAiaG9vayIsICJiZWZvcmVfYWZ0ZXJfaG9va19kZWZhdWx0IiwgInJlcXVlc3REZWZhdWx0cyIsICJyZXF1ZXN0IiwgIndpdGhDdXN0b21SZXF1ZXN0IiwgImF1dGhTdHJhdGVneSIsICJvdGhlck9wdGlvbnMiLCAiYXV0aCIsICJjcmVhdGVUb2tlbkF1dGgiLCAiY2xhc3NDb25zdHJ1Y3RvciIsICJpIiwgIlZFUlNJT04iLCAiRW5kcG9pbnRzIiwgImVuZHBvaW50c19kZWZhdWx0IiwgImVuZHBvaW50TWV0aG9kc01hcCIsICJzY29wZSIsICJlbmRwb2ludHMiLCAiZW5kcG9pbnRzX2RlZmF1bHQiLCAibWV0aG9kTmFtZSIsICJlbmRwb2ludCIsICJyb3V0ZSIsICJkZWZhdWx0cyIsICJkZWNvcmF0aW9ucyIsICJtZXRob2QiLCAidXJsIiwgImVuZHBvaW50RGVmYXVsdHMiLCAiaGFuZGxlciIsICJ0YXJnZXQiLCAiZGVzY3JpcHRvciIsICJ2YWx1ZSIsICJvY3Rva2l0IiwgImNhY2hlIiwgImRlY29yYXRlIiwgImVuZHBvaW50c1RvTWV0aG9kcyIsICJuZXdNZXRob2RzIiwgInJlcXVlc3RXaXRoRGVmYXVsdHMiLCAid2l0aERlY29yYXRpb25zIiwgImFyZ3MiLCAib3B0aW9ucyIsICJuZXdTY29wZSIsICJuZXdNZXRob2ROYW1lIiwgIm5hbWUiLCAiYWxpYXMiLCAicmVzdEVuZHBvaW50TWV0aG9kcyIsICJvY3Rva2l0IiwgImVuZHBvaW50c1RvTWV0aG9kcyIsICJWRVJTSU9OIiwgImxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMiLCAiYXBpIiwgIlZFUlNJT04iLCAibm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlIiwgInJlc3BvbnNlIiwgImluY29tcGxldGVSZXN1bHRzIiwgInJlcG9zaXRvcnlTZWxlY3Rpb24iLCAidG90YWxDb3VudCIsICJ0b3RhbENvbW1pdHMiLCAibmFtZXNwYWNlS2V5IiwgImRhdGEiLCAiaXRlcmF0b3IiLCAib2N0b2tpdCIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgIm9wdGlvbnMiLCAicmVxdWVzdE1ldGhvZCIsICJtZXRob2QiLCAiaGVhZGVycyIsICJ1cmwiLCAibm9ybWFsaXplZFJlc3BvbnNlIiwgInBhcnNlZFVybCIsICJwYXJhbXMiLCAicGFnZSIsICJwZXJfcGFnZSIsICJlcnJvciIsICJwYWdpbmF0ZSIsICJtYXBGbiIsICJnYXRoZXIiLCAicmVzdWx0cyIsICJpdGVyYXRvcjIiLCAicmVzdWx0IiwgImVhcmx5RXhpdCIsICJkb25lIiwgImNvbXBvc2VQYWdpbmF0ZVJlc3QiLCAicGFnaW5hdGVSZXN0IiwgIm9jdG9raXQiLCAicGFnaW5hdGUiLCAiaXRlcmF0b3IiLCAiVkVSU0lPTiIsICJjb250ZXh0IiwgIkNvbnRleHQiLCAiYmFzZVVybCIsICJnZXRBcGlCYXNlVXJsIiwgImRlZmF1bHRzIiwgImdldFByb3h5QWdlbnQiLCAiZ2V0UHJveHlGZXRjaCIsICJHaXRIdWIiLCAiT2N0b2tpdCIsICJyZXN0RW5kcG9pbnRNZXRob2RzIiwgInBhZ2luYXRlUmVzdCIsICJnZXRPY3Rva2l0T3B0aW9ucyIsICJ0b2tlbiIsICJvcHRpb25zIiwgIm9wdHMiLCAiYXV0aCIsICJnZXRBdXRoU3RyaW5nIiwgInVzZXJBZ2VudCIsICJnZXRVc2VyQWdlbnRXaXRoT3JjaGVzdHJhdGlvbklkIiwgImNvbnRleHQiLCAiQ29udGV4dCIsICJnZXRPY3Rva2l0IiwgInRva2VuIiwgIm9wdGlvbnMiLCAiYWRkaXRpb25hbFBsdWdpbnMiLCAiR2l0SHViV2l0aFBsdWdpbnMiLCAiR2l0SHViIiwgImdldE9jdG9raXRPcHRpb25zIiwgImNyeXB0byIsICJmcyIsICJzZW12ZXIiLCAicGF0aCIsICJzZW12ZXIiLCAic3RyZWFtIiwgInV0aWwiLCAiaW1wb3J0X2Fzc2VydCIsICJSZXRyeUhlbHBlciIsICJtYXhBdHRlbXB0cyIsICJtaW5TZWNvbmRzIiwgIm1heFNlY29uZHMiLCAiYWN0aW9uIiwgImlzUmV0cnlhYmxlIiwgImF0dGVtcHQiLCAiZXJyIiwgImluZm8iLCAic2Vjb25kcyIsICJyZXNvbHZlIiwgIkhUVFBFcnJvciIsICJodHRwU3RhdHVzQ29kZSIsICJJU19XSU5ET1dTIiwgIklTX01BQyIsICJ1c2VyQWdlbnQiLCAiZG93bmxvYWRUb29sIiwgInVybCIsICJkZXN0IiwgImF1dGgiLCAiaGVhZGVycyIsICJfZ2V0VGVtcERpcmVjdG9yeSIsICJta2RpclAiLCAiZGVidWciLCAibWF4QXR0ZW1wdHMiLCAibWluU2Vjb25kcyIsICJfZ2V0R2xvYmFsIiwgIm1heFNlY29uZHMiLCAiUmV0cnlIZWxwZXIiLCAiX19hd2FpdGVyIiwgImRvd25sb2FkVG9vbEF0dGVtcHQiLCAiZXJyIiwgImh0dHAiLCAiSHR0cENsaWVudCIsICJyZXNwb25zZSIsICJwaXBlbGluZSIsICJyZWFkU3RyZWFtIiwgInN1Y2NlZWRlZCIsICJybVJGIiwgImV4dHJhY3RUYXIiLCAiZmlsZV8xIiwgImRlc3RfMSIsICJmaWxlIiwgImRlc3QiLCAiZmxhZ3MiLCAiX2NyZWF0ZUV4dHJhY3RGb2xkZXIiLCAiZGVidWciLCAidmVyc2lvbk91dHB1dCIsICJleGVjIiwgImRhdGEiLCAiaXNHbnVUYXIiLCAiYXJncyIsICJpc0RlYnVnIiwgImRlc3RBcmciLCAiZmlsZUFyZyIsICJJU19XSU5ET1dTIiwgImV4dHJhY3RaaXAiLCAiZmlsZSIsICJkZXN0IiwgIl9jcmVhdGVFeHRyYWN0Rm9sZGVyIiwgIklTX1dJTkRPV1MiLCAiZXh0cmFjdFppcFdpbiIsICJleHRyYWN0WmlwTml4IiwgImVzY2FwZWRGaWxlIiwgImVzY2FwZWREZXN0IiwgInB3c2hQYXRoIiwgIndoaWNoIiwgImFyZ3MiLCAiZGVidWciLCAiZXhlYyIsICJwb3dlcnNoZWxsUGF0aCIsICJ1bnppcFBhdGgiLCAiaXNEZWJ1ZyIsICJfY3JlYXRlRXh0cmFjdEZvbGRlciIsICJkZXN0IiwgIl9nZXRUZW1wRGlyZWN0b3J5IiwgIm1rZGlyUCIsICJfZ2V0VGVtcERpcmVjdG9yeSIsICJ0ZW1wRGlyZWN0b3J5IiwgIl9nZXRHbG9iYWwiLCAia2V5IiwgImRlZmF1bHRWYWx1ZSIsICJ2YWx1ZSIsICJyZWxlYXNlRnJhZ21lbnQiLCAib2N0b2tpdCIsICJnZXRPY3Rva2l0IiwgInZlcnNpb24iLCAiZ2V0SW5wdXQiLCAiZ3JhcGhxbFJlcXVlc3QiLCAicmVsZWFzZSIsICJyZWxlYXNlQXNzZXRzIiwgImFzc2V0IiwgIm5hbWUiLCAic2V0RmFpbGVkIiwgInpiQXJjaGl2ZVBhdGgiLCAiZG93bmxvYWRUb29sIiwgInpiRXh0cmFjdGVkRm9sZGVyUGF0aCIsICJleHRyYWN0WmlwIiwgImV4dHJhY3RUYXIiLCAiZXhlYyIsICJwYXRoIl0KfQo= From f2bab21e2463cb37256ea0a2fd36f05d630708f8 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 16:53:11 -0700 Subject: [PATCH 10/23] Test with smol bundle --- .github/actions/setup-zb/dist/main.js | 106 +------------------------- .github/actions/setup-zb/src/main.ts | 96 +---------------------- 2 files changed, 3 insertions(+), 199 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index 6b1a65a..e91e7e9 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -1,109 +1,7 @@ -var Uy=Object.create;var bu=Object.defineProperty;var Gy=Object.getOwnPropertyDescriptor;var Ly=Object.getOwnPropertyNames;var My=Object.getPrototypeOf,vy=Object.prototype.hasOwnProperty;var B=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var xy=(t,e,r,A)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ly(e))!vy.call(t,s)&&s!==r&&bu(t,s,{get:()=>e[s],enumerable:!(A=Gy(e,s))||A.enumerable});return t};var W=(t,e,r)=>(r=t!=null?Uy(My(t)):{},xy(e||!t||!t.__esModule?bu(r,"default",{value:t,enumerable:!0}):r,t));var Lu=B(zr=>{"use strict";var aJ=require("net"),Hy=require("tls"),Wi=require("http"),Nu=require("https"),Vy=require("events"),cJ=require("assert"),qy=require("util");zr.httpOverHttp=Wy;zr.httpsOverHttp=zy;zr.httpOverHttps=Zy;zr.httpsOverHttps=jy;function Wy(t){var e=new yt(t);return e.request=Wi.request,e}function zy(t){var e=new yt(t);return e.request=Wi.request,e.createSocket=Uu,e.defaultPort=443,e}function Zy(t){var e=new yt(t);return e.request=Nu.request,e}function jy(t){var e=new yt(t);return e.request=Nu.request,e.createSocket=Uu,e.defaultPort=443,e}function yt(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||Wi.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(A,s,o,n){for(var i=Gu(s,o,n),a=0,c=e.requests.length;a=this.maxSockets){o.requests.push(n);return}o.createSocket(n,function(i){i.on("free",a),i.on("close",c),i.on("agentRemove",c),e.onSocket(i);function a(){o.emit("free",i,n)}function c(g){o.removeSocket(i),i.removeListener("free",a),i.removeListener("close",c),i.removeListener("agentRemove",c)}})};yt.prototype.createSocket=function(e,r){var A=this,s={};A.sockets.push(s);var o=zi({},A.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(o.localAddress=e.localAddress),o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")),Jt("making CONNECT request");var n=A.request(o);n.useChunkedEncodingByDefault=!1,n.once("response",i),n.once("upgrade",a),n.once("connect",c),n.once("error",g),n.end();function i(l){l.upgrade=!0}function a(l,u,E){process.nextTick(function(){c(l,u,E)})}function c(l,u,E){if(n.removeAllListeners(),u.removeAllListeners(),l.statusCode!==200){Jt("tunneling socket could not be established, statusCode=%d",l.statusCode),u.destroy();var h=new Error("tunneling socket could not be established, statusCode="+l.statusCode);h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}if(E.length>0){Jt("got illegal response body from proxy"),u.destroy();var h=new Error("got illegal response body from proxy");h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}return Jt("tunneling connection has established"),A.sockets[A.sockets.indexOf(s)]=u,r(u)}function g(l){n.removeAllListeners(),Jt(`tunneling socket could not be established, cause=%s -`,l.message,l.stack);var u=new Error("tunneling socket could not be established, cause="+l.message);u.code="ECONNRESET",e.request.emit("error",u),A.removeSocket(s)}};yt.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var A=this.requests.shift();A&&this.createSocket(A,function(s){A.request.onSocket(s)})}};function Uu(t,e){var r=this;yt.prototype.createSocket.call(r,t,function(A){var s=t.request.getHeader("host"),o=zi({},r.options,{socket:A,servername:s?s.replace(/:.*$/,""):t.host}),n=Hy.connect(0,o);r.sockets[r.sockets.indexOf(A)]=n,e(n)})}function Gu(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function zi(t){for(var e=1,r=arguments.length;e{Mu.exports=Lu()});var $=B((uJ,vu)=>{vu.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}});var Y=B((EJ,aE)=>{"use strict";var xu=Symbol.for("undici.error.UND_ERR"),ee=class extends Error{constructor(e){super(e),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&e[xu]===!0}[xu]=!0},Ou=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),ji=class extends ee{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ou]===!0}[Ou]=!0},Yu=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),Ki=class extends ee{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Yu]===!0}[Yu]=!0},_u=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Xi=class extends ee{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&e[_u]===!0}[_u]=!0},Ju=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),$i=class extends ee{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ju]===!0}[Ju]=!0},Pu=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),ea=class extends ee{constructor(e,r,A,s){super(e),this.name="ResponseStatusCodeError",this.message=e||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=s,this.status=r,this.statusCode=r,this.headers=A}static[Symbol.hasInstance](e){return e&&e[Pu]===!0}[Pu]=!0},Hu=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),ta=class extends ee{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&e[Hu]===!0}[Hu]=!0},Vu=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),ra=class extends ee{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&e[Vu]===!0}[Vu]=!0},qu=Symbol.for("undici.error.UND_ERR_ABORT"),Eo=class extends ee{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&e[qu]===!0}[qu]=!0},Wu=Symbol.for("undici.error.UND_ERR_ABORTED"),Aa=class extends Eo{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&e[Wu]===!0}[Wu]=!0},zu=Symbol.for("undici.error.UND_ERR_INFO"),sa=class extends ee{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&e[zu]===!0}[zu]=!0},Zu=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),oa=class extends ee{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[Zu]===!0}[Zu]=!0},ju=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),na=class extends ee{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[ju]===!0}[ju]=!0},Ku=Symbol.for("undici.error.UND_ERR_DESTROYED"),ia=class extends ee{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&e[Ku]===!0}[Ku]=!0},Xu=Symbol.for("undici.error.UND_ERR_CLOSED"),aa=class extends ee{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&e[Xu]===!0}[Xu]=!0},$u=Symbol.for("undici.error.UND_ERR_SOCKET"),ca=class extends ee{constructor(e,r){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=r}static[Symbol.hasInstance](e){return e&&e[$u]===!0}[$u]=!0},eE=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),ga=class extends ee{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&e[eE]===!0}[eE]=!0},tE=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),la=class extends ee{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&e[tE]===!0}[tE]=!0},rE=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),ua=class extends Error{constructor(e,r,A){super(e),this.name="HTTPParserError",this.code=r?`HPE_${r}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&e[rE]===!0}[rE]=!0},AE=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),Ea=class extends ee{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&e[AE]===!0}[AE]=!0},sE=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),ha=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[sE]===!0}[sE]=!0},oE=Symbol.for("undici.error.UND_ERR_RESPONSE"),Qa=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[oE]===!0}[oE]=!0},nE=Symbol.for("undici.error.UND_ERR_PRX_TLS"),Ba=class extends ee{constructor(e,r,A){super(r,{cause:e,...A??{}}),this.name="SecureProxyConnectionError",this.message=r||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&e[nE]===!0}[nE]=!0},iE=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),Ia=class extends ee{constructor(e){super(e),this.name="MessageSizeExceededError",this.message=e||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](e){return e&&e[iE]===!0}get[iE](){return!0}};aE.exports={AbortError:Eo,HTTPParserError:ua,UndiciError:ee,HeadersTimeoutError:Ki,HeadersOverflowError:Xi,BodyTimeoutError:$i,RequestContentLengthMismatchError:oa,ConnectTimeoutError:ji,ResponseStatusCodeError:ea,InvalidArgumentError:ta,InvalidReturnValueError:ra,RequestAbortedError:Aa,ClientDestroyedError:ia,ClientClosedError:aa,InformationalError:sa,SocketError:ca,NotSupportedError:ga,ResponseContentLengthMismatchError:na,BalancedPoolMissingUpstreamError:la,ResponseExceededMaxSizeError:Ea,RequestRetryError:ha,ResponseError:Qa,SecureProxyConnectionError:Ba,MessageSizeExceededError:Ia}});var Qo=B((hJ,cE)=>{"use strict";var ho={},Ca=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let t=0;t{"use strict";var{wellknownHeaderNames:gE,headerNameLowerCasedRecord:Ky}=Qo(),da=class t{value=null;left=null;middle=null;right=null;code;constructor(e,r,A){if(A===void 0||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new t(e,r,A):this.value=r}add(e,r){let A=e.length;if(A===0)throw new TypeError("Unreachable");let s=0,o=this;for(;;){let n=e.charCodeAt(s);if(n>127)throw new TypeError("key must be ascii string");if(o.code===n)if(A===++s){o.value=r;break}else if(o.middle!==null)o=o.middle;else{o.middle=new t(e,r,s);break}else if(o.code=65&&(o|=32);s!==null;){if(o===s.code){if(r===++A)return s;s=s.middle;break}s=s.code{"use strict";var KA=require("node:assert"),{kDestroyed:QE,kBodyUsed:Zr,kListeners:fa,kBody:hE}=$(),{IncomingMessage:Xy}=require("node:http"),fo=require("node:stream"),$y=require("node:net"),{Blob:eR}=require("node:buffer"),tR=require("node:util"),{stringify:rR}=require("node:querystring"),{EventEmitter:AR}=require("node:events"),{InvalidArgumentError:Ee}=Y(),{headerNameLowerCasedRecord:sR}=Qo(),{tree:BE}=EE(),[oR,nR]=process.versions.node.split(".").map(t=>Number(t)),Co=class{constructor(e){this[hE]=e,this[Zr]=!1}async*[Symbol.asyncIterator](){KA(!this[Zr],"disturbed"),this[Zr]=!0,yield*this[hE]}};function iR(t){return po(t)?(pE(t)===0&&t.on("data",function(){KA(!1)}),typeof t.readableDidRead!="boolean"&&(t[Zr]=!1,AR.prototype.on.call(t,"data",function(){this[Zr]=!0})),t):t&&typeof t.pipeTo=="function"?new Co(t):t&&typeof t!="string"&&!ArrayBuffer.isView(t)&&fE(t)?new Co(t):t}function aR(){}function po(t){return t&&typeof t=="object"&&typeof t.pipe=="function"&&typeof t.on=="function"}function IE(t){if(t===null)return!1;if(t instanceof eR)return!0;if(typeof t!="object")return!1;{let e=t[Symbol.toStringTag];return(e==="Blob"||e==="File")&&("stream"in t&&typeof t.stream=="function"||"arrayBuffer"in t&&typeof t.arrayBuffer=="function")}}function cR(t,e){if(t.includes("?")||t.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=rR(e);return r&&(t+="?"+r),t}function CE(t){let e=parseInt(t,10);return e===Number(t)&&e>=0&&e<=65535}function Io(t){return t!=null&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&(t[4]===":"||t[4]==="s"&&t[5]===":")}function dE(t){if(typeof t=="string"){if(t=new URL(t),!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}if(!t||typeof t!="object")throw new Ee("Invalid URL: The URL argument must be a non-null object.");if(!(t instanceof URL)){if(t.port!=null&&t.port!==""&&CE(t.port)===!1)throw new Ee("Invalid URL: port must be a valid integer or a string representation of an integer.");if(t.path!=null&&typeof t.path!="string")throw new Ee("Invalid URL path: the path must be a string or null/undefined.");if(t.pathname!=null&&typeof t.pathname!="string")throw new Ee("Invalid URL pathname: the pathname must be a string or null/undefined.");if(t.hostname!=null&&typeof t.hostname!="string")throw new Ee("Invalid URL hostname: the hostname must be a string or null/undefined.");if(t.origin!=null&&typeof t.origin!="string")throw new Ee("Invalid URL origin: the origin must be a string or null/undefined.");if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");let e=t.port!=null?t.port:t.protocol==="https:"?443:80,r=t.origin!=null?t.origin:`${t.protocol||""}//${t.hostname||""}:${e}`,A=t.path!=null?t.path:`${t.pathname||""}${t.search||""}`;return r[r.length-1]==="/"&&(r=r.slice(0,r.length-1)),A&&A[0]!=="/"&&(A=`/${A}`),new URL(`${r}${A}`)}if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}function gR(t){if(t=dE(t),t.pathname!=="/"||t.search||t.hash)throw new Ee("invalid url");return t}function lR(t){if(t[0]==="["){let r=t.indexOf("]");return KA(r!==-1),t.substring(1,r)}let e=t.indexOf(":");return e===-1?t:t.substring(0,e)}function uR(t){if(!t)return null;KA(typeof t=="string");let e=lR(t);return $y.isIP(e)?"":e}function ER(t){return JSON.parse(JSON.stringify(t))}function hR(t){return t!=null&&typeof t[Symbol.asyncIterator]=="function"}function fE(t){return t!=null&&(typeof t[Symbol.iterator]=="function"||typeof t[Symbol.asyncIterator]=="function")}function pE(t){if(t==null)return 0;if(po(t)){let e=t._readableState;return e&&e.objectMode===!1&&e.ended===!0&&Number.isFinite(e.length)?e.length:null}else{if(IE(t))return t.size!=null?t.size:null;if(yE(t))return t.byteLength}return null}function mE(t){return t&&!!(t.destroyed||t[QE]||fo.isDestroyed?.(t))}function QR(t,e){t==null||!po(t)||mE(t)||(typeof t.destroy=="function"?(Object.getPrototypeOf(t).constructor===Xy&&(t.socket=null),t.destroy(e)):e&&queueMicrotask(()=>{t.emit("error",e)}),t.destroyed!==!0&&(t[QE]=!0))}var BR=/timeout=(\d+)/;function IR(t){let e=t.toString().match(BR);return e?parseInt(e[1],10)*1e3:null}function wE(t){return typeof t=="string"?sR[t]??t.toLowerCase():BE.lookup(t)??t.toString("latin1").toLowerCase()}function CR(t){return BE.lookup(t)??t.toString("latin1").toLowerCase()}function dR(t,e){e===void 0&&(e={});for(let r=0;rn.toString("utf8")):o.toString("utf8")}}return"content-length"in e&&"content-disposition"in e&&(e["content-disposition"]=Buffer.from(e["content-disposition"]).toString("latin1")),e}function fR(t){let e=t.length,r=new Array(e),A=!1,s=-1,o,n,i=0;for(let a=0;a{r.close(),r.byobRequest?.respond(0)});else{let o=Buffer.isBuffer(s)?s:Buffer.from(s);o.byteLength&&r.enqueue(new Uint8Array(o))}return r.desiredSize>0},async cancel(r){await e.return()},type:"bytes"})}function TR(t){return t&&typeof t=="object"&&typeof t.append=="function"&&typeof t.delete=="function"&&typeof t.get=="function"&&typeof t.getAll=="function"&&typeof t.has=="function"&&typeof t.set=="function"&&t[Symbol.toStringTag]==="FormData"}function bR(t,e){return"addEventListener"in t?(t.addEventListener("abort",e,{once:!0}),()=>t.removeEventListener("abort",e)):(t.addListener("abort",e),()=>t.removeListener("abort",e))}var kR=typeof String.prototype.toWellFormed=="function",FR=typeof String.prototype.isWellFormed=="function";function RE(t){return kR?`${t}`.toWellFormed():tR.toUSVString(t)}function SR(t){return FR?`${t}`.isWellFormed():RE(t)===`${t}`}function DE(t){switch(t){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return t>=33&&t<=126}}function NR(t){if(t.length===0)return!1;for(let e=0;e{"use strict";var J=require("node:diagnostics_channel"),wa=require("node:util"),mo=wa.debuglog("undici"),ma=wa.debuglog("fetch"),Qr=wa.debuglog("websocket"),FE=!1,OR={beforeConnect:J.channel("undici:client:beforeConnect"),connected:J.channel("undici:client:connected"),connectError:J.channel("undici:client:connectError"),sendHeaders:J.channel("undici:client:sendHeaders"),create:J.channel("undici:request:create"),bodySent:J.channel("undici:request:bodySent"),headers:J.channel("undici:request:headers"),trailers:J.channel("undici:request:trailers"),error:J.channel("undici:request:error"),open:J.channel("undici:websocket:open"),close:J.channel("undici:websocket:close"),socketError:J.channel("undici:websocket:socket_error"),ping:J.channel("undici:websocket:ping"),pong:J.channel("undici:websocket:pong")};if(mo.enabled||ma.enabled){let t=ma.enabled?ma:mo;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s using %s%s errored - %s",`${o}${s?`:${s}`:""}`,A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)}),J.channel("undici:request:headers").subscribe(e=>{let{request:{method:r,path:A,origin:s},response:{statusCode:o}}=e;t("received response to %s %s/%s - HTTP %d",r,s,A,o)}),J.channel("undici:request:trailers").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("trailers received from %s %s/%s",r,s,A)}),J.channel("undici:request:error").subscribe(e=>{let{request:{method:r,path:A,origin:s},error:o}=e;t("request to %s %s/%s errored - %s",r,s,A,o.message)}),FE=!0}if(Qr.enabled){if(!FE){let t=mo.enabled?mo:Qr;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s%s using %s%s errored - %s",o,s?`:${s}`:"",A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)})}J.channel("undici:websocket:open").subscribe(t=>{let{address:{address:e,port:r}}=t;Qr("connection opened %s%s",e,r?`:${r}`:"")}),J.channel("undici:websocket:close").subscribe(t=>{let{websocket:e,code:r,reason:A}=t;Qr("closed connection to %s - %s %s",e.url,r,A)}),J.channel("undici:websocket:socket_error").subscribe(t=>{Qr("connection errored - %s",t.message)}),J.channel("undici:websocket:ping").subscribe(t=>{Qr("ping received")}),J.channel("undici:websocket:pong").subscribe(t=>{Qr("pong received")})}SE.exports={channels:OR}});var LE=B((CJ,GE)=>{"use strict";var{InvalidArgumentError:V,NotSupportedError:YR}=Y(),Rt=require("node:assert"),{isValidHTTPToken:UE,isValidHeaderValue:XA,isStream:_R,destroy:JR,isBuffer:PR,isFormDataLike:HR,isIterable:VR,isBlobLike:qR,buildURL:WR,validateHandler:zR,getServerName:ZR,normalizedMethodRecords:jR}=M(),{channels:lt}=jr(),{headerNameLowerCasedRecord:NE}=Qo(),KR=/[^\u0021-\u00ff]/,He=Symbol("handler"),ya=class{constructor(e,{path:r,method:A,body:s,headers:o,query:n,idempotent:i,blocking:a,upgrade:c,headersTimeout:g,bodyTimeout:l,reset:u,throwOnError:E,expectContinue:h,servername:C},I){if(typeof r!="string")throw new V("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&A!=="CONNECT")throw new V("path must be an absolute URL or start with a slash");if(KR.test(r))throw new V("invalid request path");if(typeof A!="string")throw new V("method must be a string");if(jR[A]===void 0&&!UE(A))throw new V("invalid request method");if(c&&typeof c!="string")throw new V("upgrade must be a string");if(c&&!XA(c))throw new V("invalid upgrade header");if(g!=null&&(!Number.isFinite(g)||g<0))throw new V("invalid headersTimeout");if(l!=null&&(!Number.isFinite(l)||l<0))throw new V("invalid bodyTimeout");if(u!=null&&typeof u!="boolean")throw new V("invalid reset");if(h!=null&&typeof h!="boolean")throw new V("invalid expectContinue");if(this.headersTimeout=g,this.bodyTimeout=l,this.throwOnError=E===!0,this.method=A,this.abort=null,s==null)this.body=null;else if(_R(s)){this.body=s;let Q=this.body._readableState;(!Q||!Q.autoDestroy)&&(this.endHandler=function(){JR(this)},this.body.on("end",this.endHandler)),this.errorHandler=f=>{this.abort?this.abort(f):this.error=f},this.body.on("error",this.errorHandler)}else if(PR(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if(typeof s=="string")this.body=s.length?Buffer.from(s):null;else if(HR(s)||VR(s)||qR(s))this.body=s;else throw new V("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=c||null,this.path=n?WR(r,n):r,this.origin=e,this.idempotent=i??(A==="HEAD"||A==="GET"),this.blocking=a??!1,this.reset=u??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=h??!1,Array.isArray(o)){if(o.length%2!==0)throw new V("headers array must be even");for(let Q=0;Q{"use strict";var XR=require("node:events"),yo=class extends XR{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){let r=Array.isArray(e[0])?e[0]:e,A=this.dispatch.bind(this);for(let s of r)if(s!=null){if(typeof s!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof s}`);if(A=s(A),A==null||typeof A!="function"||A.length!==2)throw new TypeError("invalid interceptor")}return new Ra(this,A)}},Ra=class extends yo{#e=null;#t=null;constructor(e,r){super(),this.#e=e,this.#t=r}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};ME.exports=yo});var eA=B((fJ,vE)=>{"use strict";var $R=$A(),{ClientDestroyedError:Da,ClientClosedError:eD,InvalidArgumentError:Kr}=Y(),{kDestroy:tD,kClose:rD,kClosed:es,kDestroyed:Xr,kDispatch:Ta,kInterceptors:Br}=$(),Dt=Symbol("onDestroyed"),$r=Symbol("onClosed"),Ro=Symbol("Intercepted Dispatch"),ba=Symbol("webSocketOptions"),ka=class extends $R{constructor(e){super(),this[Xr]=!1,this[Dt]=null,this[es]=!1,this[$r]=[],this[ba]=e?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[ba].maxFragments??131072,maxPayloadSize:this[ba].maxPayloadSize??128*1024*1024}}get destroyed(){return this[Xr]}get closed(){return this[es]}get interceptors(){return this[Br]}set interceptors(e){if(e){for(let r=e.length-1;r>=0;r--)if(typeof this[Br][r]!="function")throw new Kr("interceptor must be an function")}this[Br]=e}close(e){if(e===void 0)return new Promise((A,s)=>{this.close((o,n)=>o?s(o):A(n))});if(typeof e!="function")throw new Kr("invalid callback");if(this[Xr]){queueMicrotask(()=>e(new Da,null));return}if(this[es]){this[$r]?this[$r].push(e):queueMicrotask(()=>e(null,null));return}this[es]=!0,this[$r].push(e);let r=()=>{let A=this[$r];this[$r]=null;for(let s=0;sthis.destroy()).then(()=>{queueMicrotask(r)})}destroy(e,r){if(typeof e=="function"&&(r=e,e=null),r===void 0)return new Promise((s,o)=>{this.destroy(e,(n,i)=>n?o(n):s(i))});if(typeof r!="function")throw new Kr("invalid callback");if(this[Xr]){this[Dt]?this[Dt].push(r):queueMicrotask(()=>r(null,null));return}e||(e=new Da),this[Xr]=!0,this[Dt]=this[Dt]||[],this[Dt].push(r);let A=()=>{let s=this[Dt];this[Dt]=null;for(let o=0;o{queueMicrotask(A)})}[Ro](e,r){if(!this[Br]||this[Br].length===0)return this[Ro]=this[Ta],this[Ta](e,r);let A=this[Ta].bind(this);for(let s=this[Br].length-1;s>=0;s--)A=this[Br][s](A);return this[Ro]=A,A(e,r)}dispatch(e,r){if(!r||typeof r!="object")throw new Kr("handler must be an object");try{if(!e||typeof e!="object")throw new Kr("opts must be an object.");if(this[Xr]||this[Dt])throw new Da;if(this[es])throw new eD;return this[Ro](e,r)}catch(A){if(typeof r.onError!="function")throw new Kr("invalid onError method");return r.onError(A),!1}}};vE.exports=ka});var Ma=B((pJ,_E)=>{"use strict";var tA=0,Fa=1e3,Sa=(Fa>>1)-1,Tt,Na=Symbol("kFastTimer"),bt=[],Ua=-2,Ga=-1,OE=0,xE=1;function La(){tA+=Sa;let t=0,e=bt.length;for(;t=r._idleStart+r._idleTimeout&&(r._state=Ga,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===Ga?(r._state=Ua,--e!==0&&(bt[t]=bt[e])):++t}bt.length=e,bt.length!==0&&YE()}function YE(){Tt?Tt.refresh():(clearTimeout(Tt),Tt=setTimeout(La,Sa),Tt.unref&&Tt.unref())}var Do=class{[Na]=!0;_state=Ua;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,r,A){this._onTimeout=e,this._idleTimeout=r,this._timerArg=A,this.refresh()}refresh(){this._state===Ua&&bt.push(this),(!Tt||bt.length===1)&&YE(),this._state=OE}clear(){this._state=Ga,this._idleStart=-1}};_E.exports={setTimeout(t,e,r){return e<=Fa?setTimeout(t,e,r):new Do(t,e,r)},clearTimeout(t){t[Na]?t.clear():clearTimeout(t)},setFastTimeout(t,e,r){return new Do(t,e,r)},clearFastTimeout(t){t.clear()},now(){return tA},tick(t=0){tA+=t-Fa+1,La(),La()},reset(){tA=0,bt.length=0,clearTimeout(Tt),Tt=null},kFastTimer:Na}});var ts=B((yJ,qE)=>{"use strict";var AD=require("node:net"),JE=require("node:assert"),VE=M(),{InvalidArgumentError:sD,ConnectTimeoutError:oD}=Y(),To=Ma();function PE(){}var va,xa;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?xa=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry(r=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:A}=this._sessionCache.keys().next();this._sessionCache.delete(A)}this._sessionCache.set(e,r)}}};function nD({allowH2:t,maxCachedSessions:e,socketPath:r,timeout:A,session:s,...o}){if(e!=null&&(!Number.isInteger(e)||e<0))throw new sD("maxCachedSessions must be a positive integer or zero");let n={path:r,...o},i=new xa(e??100);return A=A??1e4,t=t??!1,function({hostname:c,host:g,protocol:l,port:u,servername:E,localAddress:h,httpSocket:C},I){let Q;if(l==="https:"){va||(va=require("node:tls")),E=E||n.servername||VE.getServerName(g)||null;let R=E||c;JE(R);let y=s||i.get(R)||null;u=u||443,Q=va.connect({highWaterMark:16384,...n,servername:E,session:y,localAddress:h,ALPNProtocols:t?["http/1.1","h2"]:["http/1.1"],socket:C,port:u,host:c}),Q.on("session",function(P){i.set(R,P)})}else JE(!C,"httpSocket can only be sent on TLS update"),u=u||80,Q=AD.connect({highWaterMark:64*1024,...n,localAddress:h,port:u,host:c});if(n.keepAlive==null||n.keepAlive){let R=n.keepAliveInitialDelay===void 0?6e4:n.keepAliveInitialDelay;Q.setKeepAlive(!0,R)}let f=iD(new WeakRef(Q),{timeout:A,hostname:c,port:u});return Q.setNoDelay(!0).once(l==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(f),I){let R=I;I=null,R(null,this)}}).on("error",function(R){if(queueMicrotask(f),I){let y=I;I=null,y(R)}}),Q}}var iD=process.platform==="win32"?(t,e)=>{if(!e.timeout)return PE;let r=null,A=null,s=To.setFastTimeout(()=>{r=setImmediate(()=>{A=setImmediate(()=>HE(t.deref(),e))})},e.timeout);return()=>{To.clearFastTimeout(s),clearImmediate(r),clearImmediate(A)}}:(t,e)=>{if(!e.timeout)return PE;let r=null,A=To.setFastTimeout(()=>{r=setImmediate(()=>{HE(t.deref(),e)})},e.timeout);return()=>{To.clearFastTimeout(A),clearImmediate(r)}};function HE(t,e){if(t==null)return;let r="Connect Timeout Error";Array.isArray(t.autoSelectFamilyAttemptedAddresses)?r+=` (attempted addresses: ${t.autoSelectFamilyAttemptedAddresses.join(", ")},`:r+=` (attempted address: ${e.hostname}:${e.port},`,r+=` timeout: ${e.timeout}ms)`,VE.destroy(t,new oD(r))}qE.exports=nD});var WE=B(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.enumToMap=void 0;function aD(t){let e={};return Object.keys(t).forEach(r=>{let A=t[r];typeof A=="number"&&(e[r]=A)}),e}bo.enumToMap=aD});var zE=B(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.SPECIAL_HEADERS=p.HEADER_STATE=p.MINOR=p.MAJOR=p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS=p.TOKEN=p.STRICT_TOKEN=p.HEX=p.URL_CHAR=p.STRICT_URL_CHAR=p.USERINFO_CHARS=p.MARK=p.ALPHANUM=p.NUM=p.HEX_MAP=p.NUM_MAP=p.ALPHA=p.FINISH=p.H_METHOD_MAP=p.METHOD_MAP=p.METHODS_RTSP=p.METHODS_ICE=p.METHODS_HTTP=p.METHODS=p.LENIENT_FLAGS=p.FLAGS=p.TYPE=p.ERROR=void 0;var cD=WE(),gD;(function(t){t[t.OK=0]="OK",t[t.INTERNAL=1]="INTERNAL",t[t.STRICT=2]="STRICT",t[t.LF_EXPECTED=3]="LF_EXPECTED",t[t.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",t[t.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",t[t.INVALID_METHOD=6]="INVALID_METHOD",t[t.INVALID_URL=7]="INVALID_URL",t[t.INVALID_CONSTANT=8]="INVALID_CONSTANT",t[t.INVALID_VERSION=9]="INVALID_VERSION",t[t.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",t[t.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",t[t.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",t[t.INVALID_STATUS=13]="INVALID_STATUS",t[t.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",t[t.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",t[t.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",t[t.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",t[t.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",t[t.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",t[t.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",t[t.PAUSED=21]="PAUSED",t[t.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",t[t.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",t[t.USER=24]="USER"})(gD=p.ERROR||(p.ERROR={}));var lD;(function(t){t[t.BOTH=0]="BOTH",t[t.REQUEST=1]="REQUEST",t[t.RESPONSE=2]="RESPONSE"})(lD=p.TYPE||(p.TYPE={}));var uD;(function(t){t[t.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",t[t.CHUNKED=8]="CHUNKED",t[t.UPGRADE=16]="UPGRADE",t[t.CONTENT_LENGTH=32]="CONTENT_LENGTH",t[t.SKIPBODY=64]="SKIPBODY",t[t.TRAILING=128]="TRAILING",t[t.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(uD=p.FLAGS||(p.FLAGS={}));var ED;(function(t){t[t.HEADERS=1]="HEADERS",t[t.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",t[t.KEEP_ALIVE=4]="KEEP_ALIVE"})(ED=p.LENIENT_FLAGS||(p.LENIENT_FLAGS={}));var k;(function(t){t[t.DELETE=0]="DELETE",t[t.GET=1]="GET",t[t.HEAD=2]="HEAD",t[t.POST=3]="POST",t[t.PUT=4]="PUT",t[t.CONNECT=5]="CONNECT",t[t.OPTIONS=6]="OPTIONS",t[t.TRACE=7]="TRACE",t[t.COPY=8]="COPY",t[t.LOCK=9]="LOCK",t[t.MKCOL=10]="MKCOL",t[t.MOVE=11]="MOVE",t[t.PROPFIND=12]="PROPFIND",t[t.PROPPATCH=13]="PROPPATCH",t[t.SEARCH=14]="SEARCH",t[t.UNLOCK=15]="UNLOCK",t[t.BIND=16]="BIND",t[t.REBIND=17]="REBIND",t[t.UNBIND=18]="UNBIND",t[t.ACL=19]="ACL",t[t.REPORT=20]="REPORT",t[t.MKACTIVITY=21]="MKACTIVITY",t[t.CHECKOUT=22]="CHECKOUT",t[t.MERGE=23]="MERGE",t[t["M-SEARCH"]=24]="M-SEARCH",t[t.NOTIFY=25]="NOTIFY",t[t.SUBSCRIBE=26]="SUBSCRIBE",t[t.UNSUBSCRIBE=27]="UNSUBSCRIBE",t[t.PATCH=28]="PATCH",t[t.PURGE=29]="PURGE",t[t.MKCALENDAR=30]="MKCALENDAR",t[t.LINK=31]="LINK",t[t.UNLINK=32]="UNLINK",t[t.SOURCE=33]="SOURCE",t[t.PRI=34]="PRI",t[t.DESCRIBE=35]="DESCRIBE",t[t.ANNOUNCE=36]="ANNOUNCE",t[t.SETUP=37]="SETUP",t[t.PLAY=38]="PLAY",t[t.PAUSE=39]="PAUSE",t[t.TEARDOWN=40]="TEARDOWN",t[t.GET_PARAMETER=41]="GET_PARAMETER",t[t.SET_PARAMETER=42]="SET_PARAMETER",t[t.REDIRECT=43]="REDIRECT",t[t.RECORD=44]="RECORD",t[t.FLUSH=45]="FLUSH"})(k=p.METHODS||(p.METHODS={}));p.METHODS_HTTP=[k.DELETE,k.GET,k.HEAD,k.POST,k.PUT,k.CONNECT,k.OPTIONS,k.TRACE,k.COPY,k.LOCK,k.MKCOL,k.MOVE,k.PROPFIND,k.PROPPATCH,k.SEARCH,k.UNLOCK,k.BIND,k.REBIND,k.UNBIND,k.ACL,k.REPORT,k.MKACTIVITY,k.CHECKOUT,k.MERGE,k["M-SEARCH"],k.NOTIFY,k.SUBSCRIBE,k.UNSUBSCRIBE,k.PATCH,k.PURGE,k.MKCALENDAR,k.LINK,k.UNLINK,k.PRI,k.SOURCE];p.METHODS_ICE=[k.SOURCE];p.METHODS_RTSP=[k.OPTIONS,k.DESCRIBE,k.ANNOUNCE,k.SETUP,k.PLAY,k.PAUSE,k.TEARDOWN,k.GET_PARAMETER,k.SET_PARAMETER,k.REDIRECT,k.RECORD,k.FLUSH,k.GET,k.POST];p.METHOD_MAP=cD.enumToMap(k);p.H_METHOD_MAP={};Object.keys(p.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(p.H_METHOD_MAP[t]=p.METHOD_MAP[t])});var hD;(function(t){t[t.SAFE=0]="SAFE",t[t.SAFE_WITH_CB=1]="SAFE_WITH_CB",t[t.UNSAFE=2]="UNSAFE"})(hD=p.FINISH||(p.FINISH={}));p.ALPHA=[];for(let t=65;t<=90;t++)p.ALPHA.push(String.fromCharCode(t)),p.ALPHA.push(String.fromCharCode(t+32));p.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};p.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};p.NUM=["0","1","2","3","4","5","6","7","8","9"];p.ALPHANUM=p.ALPHA.concat(p.NUM);p.MARK=["-","_",".","!","~","*","'","(",")"];p.USERINFO_CHARS=p.ALPHANUM.concat(p.MARK).concat(["%",";",":","&","=","+","$",","]);p.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(p.ALPHANUM);p.URL_CHAR=p.STRICT_URL_CHAR.concat([" ","\f"]);for(let t=128;t<=255;t++)p.URL_CHAR.push(t);p.HEX=p.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);p.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(p.ALPHANUM);p.TOKEN=p.STRICT_TOKEN.concat([" "]);p.HEADER_CHARS=[" "];for(let t=32;t<=255;t++)t!==127&&p.HEADER_CHARS.push(t);p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS.filter(t=>t!==44);p.MAJOR=p.NUM_MAP;p.MINOR=p.MAJOR;var rA;(function(t){t[t.GENERAL=0]="GENERAL",t[t.CONNECTION=1]="CONNECTION",t[t.CONTENT_LENGTH=2]="CONTENT_LENGTH",t[t.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",t[t.UPGRADE=4]="UPGRADE",t[t.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",t[t.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})(rA=p.HEADER_STATE||(p.HEADER_STATE={}));p.SPECIAL_HEADERS={connection:rA.CONNECTION,"content-length":rA.CONTENT_LENGTH,"proxy-connection":rA.CONNECTION,"transfer-encoding":rA.TRANSFER_ENCODING,upgrade:rA.UPGRADE}});var Oa=B((TJ,ZE)=>{"use strict";var{Buffer:QD}=require("node:buffer");ZE.exports=QD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var KE=B((bJ,jE)=>{"use strict";var{Buffer:BD}=require("node:buffer");jE.exports=BD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK77MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var rs=B((kJ,oh)=>{"use strict";var XE=["GET","HEAD","POST"],ID=new Set(XE),CD=[101,204,205,304],$E=[301,302,303,307,308],dD=new Set($E),eh=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],fD=new Set(eh),th=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],pD=new Set(th),mD=["follow","manual","error"],rh=["GET","HEAD","OPTIONS","TRACE"],wD=new Set(rh),yD=["navigate","same-origin","no-cors","cors"],RD=["omit","same-origin","include"],DD=["default","no-store","reload","no-cache","force-cache","only-if-cached"],TD=["content-encoding","content-language","content-location","content-type","content-length"],bD=["half"],Ah=["CONNECT","TRACE","TRACK"],kD=new Set(Ah),sh=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],FD=new Set(sh);oh.exports={subresource:sh,forbiddenMethods:Ah,requestBodyHeader:TD,referrerPolicy:th,requestRedirect:mD,requestMode:yD,requestCredentials:RD,requestCache:DD,redirectStatus:$E,corsSafeListedMethods:XE,nullBodyStatus:CD,safeMethods:rh,badPorts:eh,requestDuplex:bD,subresourceSet:FD,badPortsSet:fD,redirectStatusSet:dD,corsSafeListedMethodsSet:ID,safeMethodsSet:wD,forbiddenMethodsSet:kD,referrerPolicySet:pD}});var _a=B((FJ,nh)=>{"use strict";var Ya=Symbol.for("undici.globalOrigin.1");function SD(){return globalThis[Ya]}function ND(t){if(t===void 0){Object.defineProperty(globalThis,Ya,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let e=new URL(t);if(e.protocol!=="http:"&&e.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${e.protocol}`);Object.defineProperty(globalThis,Ya,{value:e,writable:!0,enumerable:!1,configurable:!1})}nh.exports={getGlobalOrigin:SD,setGlobalOrigin:ND}});var Te=B((SJ,Eh)=>{"use strict";var Fo=require("node:assert"),UD=new TextEncoder,As=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,GD=/[\u000A\u000D\u0009\u0020]/,LD=/[\u0009\u000A\u000C\u000D\u0020]/g,MD=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function vD(t){Fo(t.protocol==="data:");let e=ch(t,!0);e=e.slice(5);let r={position:0},A=AA(",",e,r),s=A.length;if(A=PD(A,!0,!0),r.position>=e.length)return"failure";r.position++;let o=e.slice(s+1),n=gh(o);if(/;(\u0020){0,}base64$/i.test(A)){let a=uh(n);if(n=OD(a),n==="failure")return"failure";A=A.slice(0,-6),A=A.replace(/(\u0020)+$/,""),A=A.slice(0,-1)}A.startsWith(";")&&(A="text/plain"+A);let i=Ja(A);return i==="failure"&&(i=Ja("text/plain;charset=US-ASCII")),{mimeType:i,body:n}}function ch(t,e=!1){if(!e)return t.href;let r=t.href,A=t.hash.length,s=A===0?r:r.substring(0,r.length-A);return!A&&r.endsWith("#")?s.slice(0,-1):s}function So(t,e,r){let A="";for(;r.position=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function ah(t){return t>=48&&t<=57?t-48:(t&223)-55}function xD(t){let e=t.length,r=new Uint8Array(e),A=0;for(let s=0;st.length)return"failure";e.position++;let A=AA(";",t,e);if(A=ko(A,!1,!0),A.length===0||!As.test(A))return"failure";let s=r.toLowerCase(),o=A.toLowerCase(),n={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;e.positionGD.test(c),t,e);let i=So(c=>c!==";"&&c!=="=",t,e);if(i=i.toLowerCase(),e.positiont.length)break;let a=null;if(t[e.position]==='"')a=lh(t,e,!0),AA(";",t,e);else if(a=AA(";",t,e),a=ko(a,!1,!0),a.length===0)continue;i.length!==0&&As.test(i)&&(a.length===0||MD.test(a))&&!n.parameters.has(i)&&n.parameters.set(i,a)}return n}function OD(t){t=t.replace(LD,"");let e=t.length;if(e%4===0&&t.charCodeAt(e-1)===61&&(--e,t.charCodeAt(e-1)===61&&--e),e%4===1||/[^+/0-9A-Za-z]/.test(t.length===e?t:t.substring(0,e)))return"failure";let r=Buffer.from(t,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function lh(t,e,r){let A=e.position,s="";for(Fo(t[e.position]==='"'),e.position++;s+=So(n=>n!=='"'&&n!=="\\",t,e),!(e.position>=t.length);){let o=t[e.position];if(e.position++,o==="\\"){if(e.position>=t.length){s+="\\";break}s+=t[e.position],e.position++}else{Fo(o==='"');break}}return r?s:t.slice(A,e.position)}function YD(t){Fo(t!=="failure");let{parameters:e,essence:r}=t,A=r;for(let[s,o]of e.entries())A+=";",A+=s,A+="=",As.test(o)||(o=o.replace(/(\\|")/g,"\\$1"),o='"'+o,o+='"'),A+=o;return A}function _D(t){return t===13||t===10||t===9||t===32}function ko(t,e=!0,r=!0){return Pa(t,e,r,_D)}function JD(t){return t===13||t===10||t===9||t===12||t===32}function PD(t,e=!0,r=!0){return Pa(t,e,r,JD)}function Pa(t,e,r,A){let s=0,o=t.length-1;if(e)for(;s0&&A(t.charCodeAt(o));)o--;return s===0&&o===t.length-1?t:t.slice(s,o+1)}function uh(t){let e=t.length;if(65535>e)return String.fromCharCode.apply(null,t);let r="",A=0,s=65535;for(;Ae&&(s=e-A),r+=String.fromCharCode.apply(null,t.subarray(A,A+=s));return r}function HD(t){switch(t.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return t.subtype.endsWith("+json")?"application/json":t.subtype.endsWith("+xml")?"application/xml":""}Eh.exports={dataURLProcessor:vD,URLSerializer:ch,collectASequenceOfCodePoints:So,collectASequenceOfCodePointsFast:AA,stringPercentDecode:gh,parseMIMEType:Ja,collectAnHTTPQuotedString:lh,serializeAMimeType:YD,removeChars:Pa,removeHTTPWhitespace:ko,minimizeSupportedMimeType:HD,HTTP_TOKEN_CODEPOINTS:As,isomorphicDecode:uh}});var Qe=B((NJ,hh)=>{"use strict";var{types:ut,inspect:VD}=require("node:util"),{markAsUncloneable:qD}=require("node:worker_threads"),{toUSVString:WD}=M(),d={};d.converters={};d.util={};d.errors={};d.errors.exception=function(t){return new TypeError(`${t.header}: ${t.message}`)};d.errors.conversionFailed=function(t){let e=t.types.length===1?"":" one of",r=`${t.argument} could not be converted to${e}: ${t.types.join(", ")}.`;return d.errors.exception({header:t.prefix,message:r})};d.errors.invalidArgument=function(t){return d.errors.exception({header:t.prefix,message:`"${t.value}" is an invalid ${t.type}.`})};d.brandCheck=function(t,e,r){if(r?.strict!==!1){if(!(t instanceof e)){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}}else if(t?.[Symbol.toStringTag]!==e.prototype[Symbol.toStringTag]){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}};d.argumentLengthCheck=function({length:t},e,r){if(t{});d.util.ConvertToInt=function(t,e,r,A){let s,o;e===64?(s=Math.pow(2,53)-1,r==="unsigned"?o=0:o=Math.pow(-2,53)+1):r==="unsigned"?(o=0,s=Math.pow(2,e)-1):(o=Math.pow(-2,e)-1,s=Math.pow(2,e-1)-1);let n=Number(t);if(n===0&&(n=0),A?.enforceRange===!0){if(Number.isNaN(n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY)throw d.errors.exception({header:"Integer conversion",message:`Could not convert ${d.util.Stringify(t)} to an integer.`});if(n=d.util.IntegerPart(n),ns)throw d.errors.exception({header:"Integer conversion",message:`Value must be between ${o}-${s}, got ${n}.`});return n}return!Number.isNaN(n)&&A?.clamp===!0?(n=Math.min(Math.max(n,o),s),Math.floor(n)%2===0?n=Math.floor(n):n=Math.ceil(n),n):Number.isNaN(n)||n===0&&Object.is(0,n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY?0:(n=d.util.IntegerPart(n),n=n%Math.pow(2,e),r==="signed"&&n>=Math.pow(2,e)-1?n-Math.pow(2,e):n)};d.util.IntegerPart=function(t){let e=Math.floor(Math.abs(t));return t<0?-1*e:e};d.util.Stringify=function(t){switch(d.util.Type(t)){case"Symbol":return`Symbol(${t.description})`;case"Object":return VD(t);case"String":return`"${t}"`;default:return`${t}`}};d.sequenceConverter=function(t){return(e,r,A,s)=>{if(d.util.Type(e)!=="Object")throw d.errors.exception({header:r,message:`${A} (${d.util.Stringify(e)}) is not iterable.`});let o=typeof s=="function"?s():e?.[Symbol.iterator]?.(),n=[],i=0;if(o===void 0||typeof o.next!="function")throw d.errors.exception({header:r,message:`${A} is not iterable.`});for(;;){let{done:a,value:c}=o.next();if(a)break;n.push(t(c,r,`${A}[${i++}]`))}return n}};d.recordConverter=function(t,e){return(r,A,s)=>{if(d.util.Type(r)!=="Object")throw d.errors.exception({header:A,message:`${s} ("${d.util.Type(r)}") is not an Object.`});let o={};if(!ut.isProxy(r)){let i=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let a of i){let c=t(a,A,s),g=e(r[a],A,s);o[c]=g}return o}let n=Reflect.ownKeys(r);for(let i of n)if(Reflect.getOwnPropertyDescriptor(r,i)?.enumerable){let c=t(i,A,s),g=e(r[i],A,s);o[c]=g}return o}};d.interfaceConverter=function(t){return(e,r,A,s)=>{if(s?.strict!==!1&&!(e instanceof t))throw d.errors.exception({header:r,message:`Expected ${A} ("${d.util.Stringify(e)}") to be an instance of ${t.name}.`});return e}};d.dictionaryConverter=function(t){return(e,r,A)=>{let s=d.util.Type(e),o={};if(s==="Null"||s==="Undefined")return o;if(s!=="Object")throw d.errors.exception({header:r,message:`Expected ${e} to be one of: Null, Undefined, Object.`});for(let n of t){let{key:i,defaultValue:a,required:c,converter:g}=n;if(c===!0&&!Object.hasOwn(e,i))throw d.errors.exception({header:r,message:`Missing required key "${i}".`});let l=e[i],u=Object.hasOwn(n,"defaultValue");if(u&&l!==null&&(l??=a()),c||u||l!==void 0){if(l=g(l,r,`${A}.${i}`),n.allowedValues&&!n.allowedValues.includes(l))throw d.errors.exception({header:r,message:`${l} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});o[i]=l}}return o}};d.nullableConverter=function(t){return(e,r,A)=>e===null?e:t(e,r,A)};d.converters.DOMString=function(t,e,r,A){if(t===null&&A?.legacyNullToEmptyString)return"";if(typeof t=="symbol")throw d.errors.exception({header:e,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(t)};d.converters.ByteString=function(t,e,r){let A=d.converters.DOMString(t,e,r);for(let s=0;s255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${s} has a value of ${A.charCodeAt(s)} which is greater than 255.`);return A};d.converters.USVString=WD;d.converters.boolean=function(t){return!!t};d.converters.any=function(t){return t};d.converters["long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"signed",void 0,e,r)};d.converters["unsigned long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"unsigned",void 0,e,r)};d.converters["unsigned long"]=function(t,e,r){return d.util.ConvertToInt(t,32,"unsigned",void 0,e,r)};d.converters["unsigned short"]=function(t,e,r,A){return d.util.ConvertToInt(t,16,"unsigned",A,e,r)};d.converters.ArrayBuffer=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isAnyArrayBuffer(t))throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["ArrayBuffer"]});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.resizable||t.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.TypedArray=function(t,e,r,A,s){if(d.util.Type(t)!=="Object"||!ut.isTypedArray(t)||t.constructor.name!==e.name)throw d.errors.conversionFailed({prefix:r,argument:`${A} ("${d.util.Stringify(t)}")`,types:[e.name]});if(s?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.DataView=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isDataView(t))throw d.errors.exception({header:e,message:`${r} is not a DataView.`});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.BufferSource=function(t,e,r,A){if(ut.isAnyArrayBuffer(t))return d.converters.ArrayBuffer(t,e,r,{...A,allowShared:!1});if(ut.isTypedArray(t))return d.converters.TypedArray(t,t.constructor,e,r,{...A,allowShared:!1});if(ut.isDataView(t))return d.converters.DataView(t,e,r,{...A,allowShared:!1});throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["BufferSource"]})};d.converters["sequence"]=d.sequenceConverter(d.converters.ByteString);d.converters["sequence>"]=d.sequenceConverter(d.converters["sequence"]);d.converters["record"]=d.recordConverter(d.converters.ByteString,d.converters.ByteString);hh.exports={webidl:d}});var Ge=B((UJ,bh)=>{"use strict";var{Transform:zD}=require("node:stream"),Qh=require("node:zlib"),{redirectStatusSet:ZD,referrerPolicySet:jD,badPortsSet:KD}=rs(),{getGlobalOrigin:Bh}=_a(),{collectASequenceOfCodePoints:Ir,collectAnHTTPQuotedString:XD,removeChars:$D,parseMIMEType:e0}=Te(),{performance:t0}=require("node:perf_hooks"),{isBlobLike:r0,ReadableStreamFrom:A0,isValidHTTPToken:Ih,normalizedMethodRecordsBase:s0}=M(),Cr=require("node:assert"),{isUint8Array:o0}=require("node:util/types"),{webidl:ss}=Qe(),Ch=[],Uo;try{Uo=require("node:crypto");let t=["sha256","sha384","sha512"];Ch=Uo.getHashes().filter(e=>t.includes(e))}catch{}function dh(t){let e=t.urlList,r=e.length;return r===0?null:e[r-1].toString()}function n0(t,e){if(!ZD.has(t.status))return null;let r=t.headersList.get("location",!0);return r!==null&&ph(r)&&(fh(r)||(r=i0(r)),r=new URL(r,dh(t))),r&&!r.hash&&(r.hash=e),r}function fh(t){for(let e=0;e126||r<32)return!1}return!0}function i0(t){return Buffer.from(t,"binary").toString("utf8")}function ns(t){return t.urlList[t.urlList.length-1]}function a0(t){let e=ns(t);return Dh(e)&&KD.has(e.port)?"blocked":"allowed"}function c0(t){return t instanceof Error||t?.constructor?.name==="Error"||t?.constructor?.name==="DOMException"}function g0(t){for(let e=0;e=32&&r<=126||r>=128&&r<=255))return!1}return!0}var l0=Ih;function ph(t){return(t[0]===" "||t[0]===" "||t[t.length-1]===" "||t[t.length-1]===" "||t.includes(` -`)||t.includes("\r")||t.includes("\0"))===!1}function u0(t,e){let{headersList:r}=e,A=(r.get("referrer-policy",!0)??"").split(","),s="";if(A.length>0)for(let o=A.length;o!==0;o--){let n=A[o-1].trim();if(jD.has(n)){s=n;break}}s!==""&&(t.referrerPolicy=s)}function E0(){return"allowed"}function h0(){return"success"}function Q0(){return"success"}function B0(t){let e=null;e=t.mode,t.headersList.set("sec-fetch-mode",e,!0)}function I0(t){let e=t.origin;if(!(e==="client"||e===void 0)){if(t.responseTainting==="cors"||t.mode==="websocket")t.headersList.append("origin",e,!0);else if(t.method!=="GET"&&t.method!=="HEAD"){switch(t.referrerPolicy){case"no-referrer":e=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":t.origin&&Va(t.origin)&&!Va(ns(t))&&(e=null);break;case"same-origin":Go(t,ns(t))||(e=null);break;default:}t.headersList.append("origin",e,!0)}}}function sA(t,e){return t}function C0(t,e,r){return!t?.startTime||t.startTime4096&&(A=s);let o=Go(t,A),n=os(A)&&!os(t.url);switch(e){case"origin":return s??Ha(r,!0);case"unsafe-url":return A;case"same-origin":return o?s:"no-referrer";case"origin-when-cross-origin":return o?A:s;case"strict-origin-when-cross-origin":{let i=ns(t);return Go(A,i)?A:os(A)&&!os(i)?"no-referrer":s}default:return n?"no-referrer":s}}function Ha(t,e){return Cr(t instanceof URL),t=new URL(t),t.protocol==="file:"||t.protocol==="about:"||t.protocol==="blank:"?"no-referrer":(t.username="",t.password="",t.hash="",e&&(t.pathname="",t.search=""),t)}function os(t){if(!(t instanceof URL))return!1;if(t.href==="about:blank"||t.href==="about:srcdoc"||t.protocol==="data:"||t.protocol==="file:")return!0;return e(t.origin);function e(r){if(r==null||r==="null")return!1;let A=new URL(r);return!!(A.protocol==="https:"||A.protocol==="wss:"||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(A.hostname)||A.hostname==="localhost"||A.hostname.includes("localhost.")||A.hostname.endsWith(".localhost"))}}function w0(t,e){if(Uo===void 0)return!0;let r=wh(e);if(r==="no metadata"||r.length===0)return!0;let A=R0(r),s=D0(r,A);for(let o of s){let n=o.algo,i=o.hash,a=Uo.createHash(n).update(t).digest("base64");if(a[a.length-1]==="="&&(a[a.length-2]==="="?a=a.slice(0,-2):a=a.slice(0,-1)),T0(a,i))return!0}return!1}var y0=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function wh(t){let e=[],r=!0;for(let A of t.split(" ")){r=!1;let s=y0.exec(A);if(s===null||s.groups===void 0||s.groups.algo===void 0)continue;let o=s.groups.algo.toLowerCase();Ch.includes(o)&&e.push(s.groups)}return r===!0?"no metadata":e}function R0(t){let e=t[0].algo;if(e[3]==="5")return e;for(let r=1;r{t=A,e=s}),resolve:t,reject:e}}function F0(t){return t.controller.state==="aborted"}function S0(t){return t.controller.state==="aborted"||t.controller.state==="terminated"}function N0(t){return s0[t.toLowerCase()]??t}function U0(t){let e=JSON.stringify(t);if(e===void 0)throw new TypeError("Value is not JSON serializable");return Cr(typeof e=="string"),e}var G0=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function yh(t,e,r=0,A=1){class s{#e;#t;#r;constructor(n,i){this.#e=n,this.#t=i,this.#r=0}next(){if(typeof this!="object"||this===null||!(#e in this))throw new TypeError(`'next' called on an object that does not implement interface ${t} Iterator.`);let n=this.#r,i=this.#e[e],a=i.length;if(n>=a)return{value:void 0,done:!0};let{[r]:c,[A]:g}=i[n];this.#r=n+1;let l;switch(this.#t){case"key":l=c;break;case"value":l=g;break;case"key+value":l=[c,g];break}return{value:l,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,G0),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${t} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(o,n){return new s(o,n)}}function L0(t,e,r,A=0,s=1){let o=yh(t,r,A,s),n={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(a,c=globalThis){if(ss.brandCheck(this,e),ss.argumentLengthCheck(arguments,1,`${t}.forEach`),typeof a!="function")throw new TypeError(`Failed to execute 'forEach' on '${t}': parameter 1 is not of type 'Function'.`);for(let{0:g,1:l}of o(this,"key+value"))a.call(c,l,g,this)}}};return Object.defineProperties(e.prototype,{...n,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:n.entries.value}})}async function M0(t,e,r){let A=e,s=r,o;try{o=t.stream.getReader()}catch(n){s(n);return}try{A(await Rh(o))}catch(n){s(n)}}function v0(t){return t instanceof ReadableStream||t[Symbol.toStringTag]==="ReadableStream"&&typeof t.tee=="function"}function x0(t){try{t.close(),t.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}}var O0=/[^\x00-\xFF]/;function No(t){return Cr(!O0.test(t)),t}async function Rh(t){let e=[],r=0;for(;;){let{done:A,value:s}=await t.read();if(A)return Buffer.concat(e,r);if(!o0(s))throw new TypeError("Received non-Uint8Array chunk");e.push(s),r+=s.length}}function Y0(t){Cr("protocol"in t);let e=t.protocol;return e==="about:"||e==="blob:"||e==="data:"}function Va(t){return typeof t=="string"&&t[5]===":"&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&t[4]==="s"||t.protocol==="https:"}function Dh(t){Cr("protocol"in t);let e=t.protocol;return e==="http:"||e==="https:"}function _0(t,e){let r=t;if(!r.startsWith("bytes"))return"failure";let A={position:5};if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==61)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let s=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),o=s.length?Number(s):null;if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==45)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let n=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),i=n.length?Number(n):null;return A.positioni?"failure":{rangeStartValue:o,rangeEndValue:i}}function J0(t,e,r){let A="bytes ";return A+=No(`${t}`),A+="-",A+=No(`${e}`),A+="/",A+=No(`${r}`),A}var qa=class extends zD{#e;constructor(e){super(),this.#e=e}_transform(e,r,A){if(!this._inflateStream){if(e.length===0){A();return}this._inflateStream=(e[0]&15)===8?Qh.createInflate(this.#e):Qh.createInflateRaw(this.#e),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",s=>this.destroy(s))}this._inflateStream.write(e,r,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}};function P0(t){return new qa(t)}function H0(t){let e=null,r=null,A=null,s=Th("content-type",t);if(s===null)return"failure";for(let o of s){let n=e0(o);n==="failure"||n.essence==="*/*"||(A=n,A.essence!==r?(e=null,A.parameters.has("charset")&&(e=A.parameters.get("charset")),r=A.essence):!A.parameters.has("charset")&&e!==null&&A.parameters.set("charset",e))}return A??"failure"}function V0(t){let e=t,r={position:0},A=[],s="";for(;r.positiono!=='"'&&o!==",",e,r),r.positiono===9||o===32),A.push(s),s=""}return A}function Th(t,e){let r=e.get(t,!0);return r===null?null:V0(r)}var q0=new TextDecoder;function W0(t){return t.length===0?"":(t[0]===239&&t[1]===187&&t[2]===191&&(t=t.subarray(3)),q0.decode(t))}var Wa=class{get baseUrl(){return Bh()}get origin(){return this.baseUrl?.origin}policyContainer=mh()},za=class{settingsObject=new Wa},z0=new za;bh.exports={isAborted:F0,isCancelled:S0,isValidEncodedURL:fh,createDeferredPromise:k0,ReadableStreamFrom:A0,tryUpgradeRequestToAPotentiallyTrustworthyURL:b0,clampAndCoarsenConnectionTimingInfo:C0,coarsenedSharedCurrentTime:d0,determineRequestsReferrer:m0,makePolicyContainer:mh,clonePolicyContainer:p0,appendFetchMetadata:B0,appendRequestOriginHeader:I0,TAOCheck:Q0,corsCheck:h0,crossOriginResourcePolicyCheck:E0,createOpaqueTimingInfo:f0,setRequestReferrerPolicyOnRedirect:u0,isValidHTTPToken:Ih,requestBadPort:a0,requestCurrentURL:ns,responseURL:dh,responseLocationURL:n0,isBlobLike:r0,isURLPotentiallyTrustworthy:os,isValidReasonPhrase:g0,sameOrigin:Go,normalizeMethod:N0,serializeJavascriptValueToJSONString:U0,iteratorMixin:L0,createIterator:yh,isValidHeaderName:l0,isValidHeaderValue:ph,isErrorLike:c0,fullyReadBody:M0,bytesMatch:w0,isReadableStreamLike:v0,readableStreamClose:x0,isomorphicEncode:No,urlIsLocal:Y0,urlHasHttpsScheme:Va,urlIsHttpHttpsScheme:Dh,readAllBytes:Rh,simpleRangeHeaderValue:_0,buildContentRange:J0,parseMetadata:wh,createInflate:P0,extractMimeType:H0,getDecodeSplit:Th,utf8DecodeBytes:W0,environmentSettingsObject:z0}});var Pt=B((GJ,kh)=>{"use strict";kh.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var ja=B((LJ,Fh)=>{"use strict";var{Blob:Z0,File:j0}=require("node:buffer"),{kState:kt}=Pt(),{webidl:Et}=Qe(),Za=class t{constructor(e,r,A={}){let s=r,o=A.type,n=A.lastModified??Date.now();this[kt]={blobLike:e,name:s,type:o,lastModified:n}}stream(...e){return Et.brandCheck(this,t),this[kt].blobLike.stream(...e)}arrayBuffer(...e){return Et.brandCheck(this,t),this[kt].blobLike.arrayBuffer(...e)}slice(...e){return Et.brandCheck(this,t),this[kt].blobLike.slice(...e)}text(...e){return Et.brandCheck(this,t),this[kt].blobLike.text(...e)}get size(){return Et.brandCheck(this,t),this[kt].blobLike.size}get type(){return Et.brandCheck(this,t),this[kt].blobLike.type}get name(){return Et.brandCheck(this,t),this[kt].name}get lastModified(){return Et.brandCheck(this,t),this[kt].lastModified}get[Symbol.toStringTag](){return"File"}};Et.converters.Blob=Et.interfaceConverter(Z0);function K0(t){return t instanceof j0||t&&(typeof t.stream=="function"||typeof t.arrayBuffer=="function")&&t[Symbol.toStringTag]==="File"}Fh.exports={FileLike:Za,isFileLike:K0}});var as=B((MJ,Lh)=>{"use strict";var{isBlobLike:Lo,iteratorMixin:X0}=Ge(),{kState:fe}=Pt(),{kEnumerableProperty:oA}=M(),{FileLike:Sh,isFileLike:$0}=ja(),{webidl:z}=Qe(),{File:Gh}=require("node:buffer"),Nh=require("node:util"),Uh=globalThis.File??Gh,is=class t{constructor(e){if(z.util.markAsUncloneable(this),e!==void 0)throw z.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[fe]=[]}append(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.append";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"value",{strict:!1}):z.converters.USVString(r,s,"value"),A=arguments.length===3?z.converters.USVString(A,s,"filename"):void 0;let o=Ka(e,r,A);this[fe].push(o)}delete(e){z.brandCheck(this,t);let r="FormData.delete";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe]=this[fe].filter(A=>A.name!==e)}get(e){z.brandCheck(this,t);let r="FormData.get";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name");let A=this[fe].findIndex(s=>s.name===e);return A===-1?null:this[fe][A].value}getAll(e){z.brandCheck(this,t);let r="FormData.getAll";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].filter(A=>A.name===e).map(A=>A.value)}has(e){z.brandCheck(this,t);let r="FormData.has";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].findIndex(A=>A.name===e)!==-1}set(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.set";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"name",{strict:!1}):z.converters.USVString(r,s,"name"),A=arguments.length===3?z.converters.USVString(A,s,"name"):void 0;let o=Ka(e,r,A),n=this[fe].findIndex(i=>i.name===e);n!==-1?this[fe]=[...this[fe].slice(0,n),o,...this[fe].slice(n+1).filter(i=>i.name!==e)]:this[fe].push(o)}[Nh.inspect.custom](e,r){let A=this[fe].reduce((o,n)=>(o[n.name]?Array.isArray(o[n.name])?o[n.name].push(n.value):o[n.name]=[o[n.name],n.value]:o[n.name]=n.value,o),{__proto__:null});r.depth??=e,r.colors??=!0;let s=Nh.formatWithOptions(r,A);return`FormData ${s.slice(s.indexOf("]")+2)}`}};X0("FormData",is,fe,"name","value");Object.defineProperties(is.prototype,{append:oA,delete:oA,get:oA,getAll:oA,has:oA,set:oA,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function Ka(t,e,r){if(typeof e!="string"){if($0(e)||(e=e instanceof Blob?new Uh([e],"blob",{type:e.type}):new Sh(e,"blob",{type:e.type})),r!==void 0){let A={type:e.type,lastModified:e.lastModified};e=e instanceof Gh?new Uh([e],r,A):new Sh(e,r,A)}}return{name:t,value:e}}Lh.exports={FormData:is,makeEntry:Ka}});var _h=B((vJ,Yh)=>{"use strict";var{isUSVString:Mh,bufferToLowerCasedHeaderName:eT}=M(),{utf8DecodeBytes:tT}=Ge(),{HTTP_TOKEN_CODEPOINTS:rT,isomorphicDecode:vh}=Te(),{isFileLike:AT}=ja(),{makeEntry:sT}=as(),Mo=require("node:assert"),{File:oT}=require("node:buffer"),nT=globalThis.File??oT,iT=Buffer.from('form-data; name="'),xh=Buffer.from("; filename"),aT=Buffer.from("--"),cT=Buffer.from(`--\r -`);function gT(t){for(let e=0;e70)return!1;for(let r=0;r=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===39||A===45||A===95))return!1}return!0}function uT(t,e){Mo(e!=="failure"&&e.essence==="multipart/form-data");let r=e.parameters.get("boundary");if(r===void 0)return"failure";let A=Buffer.from(`--${r}`,"utf8"),s=[],o={position:0};for(;t[o.position]===13&&t[o.position+1]===10;)o.position+=2;let n=t.length;for(;t[n-1]===10&&t[n-2]===13;)n-=2;for(n!==t.length&&(t=t.subarray(0,n));;){if(t.subarray(o.position,o.position+A.length).equals(A))o.position+=A.length;else return"failure";if(o.position===t.length-2&&vo(t,aT,o)||o.position===t.length-4&&vo(t,cT,o))return s;if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let i=ET(t,o);if(i==="failure")return"failure";let{name:a,filename:c,contentType:g,encoding:l}=i;o.position+=2;let u;{let h=t.indexOf(A.subarray(2),o.position);if(h===-1)return"failure";u=t.subarray(o.position,h-4),o.position+=u.length,l==="base64"&&(u=Buffer.from(u.toString(),"base64"))}if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let E;c!==null?(g??="text/plain",gT(g)||(g=""),E=new nT([u],c,{type:g})):E=tT(Buffer.from(u)),Mo(Mh(a)),Mo(typeof E=="string"&&Mh(E)||AT(E)),s.push(sT(a,E,c))}}function ET(t,e){let r=null,A=null,s=null,o=null;for(;;){if(t[e.position]===13&&t[e.position+1]===10)return r===null?"failure":{name:r,filename:A,contentType:s,encoding:o};let n=nA(i=>i!==10&&i!==13&&i!==58,t,e);if(n=Xa(n,!0,!0,i=>i===9||i===32),!rT.test(n.toString())||t[e.position]!==58)return"failure";switch(e.position++,nA(i=>i===32||i===9,t,e),eT(n)){case"content-disposition":{if(r=A=null,!vo(t,iT,e)||(e.position+=17,r=Oh(t,e),r===null))return"failure";if(vo(t,xh,e)){let i=e.position+xh.length;if(t[i]===42&&(e.position+=1,i+=1),t[i]!==61||t[i+1]!==34||(e.position+=12,A=Oh(t,e),A===null))return"failure"}break}case"content-type":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),s=vh(i);break}case"content-transfer-encoding":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),o=vh(i);break}default:nA(i=>i!==10&&i!==13,t,e)}if(t[e.position]!==13&&t[e.position+1]!==10)return"failure";e.position+=2}}function Oh(t,e){Mo(t[e.position-1]===34);let r=nA(A=>A!==10&&A!==13&&A!==34,t,e);return t[e.position]!==34?null:(e.position++,r=new TextDecoder().decode(r).replace(/%0A/ig,` -`).replace(/%0D/ig,"\r").replace(/%22/g,'"'),r)}function nA(t,e,r){let A=r.position;for(;A0&&A(t[o]);)o--;return s===0&&o===t.length-1?t:t.subarray(s,o+1)}function vo(t,e,r){if(t.length{"use strict";var cs=M(),{ReadableStreamFrom:hT,isBlobLike:Jh,isReadableStreamLike:QT,readableStreamClose:BT,createDeferredPromise:IT,fullyReadBody:CT,extractMimeType:dT,utf8DecodeBytes:Vh}=Ge(),{FormData:Ph}=as(),{kState:aA}=Pt(),{webidl:fT}=Qe(),{Blob:pT}=require("node:buffer"),$a=require("node:assert"),{isErrored:qh,isDisturbed:mT}=require("node:stream"),{isArrayBuffer:wT}=require("node:util/types"),{serializeAMimeType:yT}=Te(),{multipartFormDataParser:RT}=_h(),ec;try{let t=require("node:crypto");ec=e=>t.randomInt(0,e)}catch{ec=t=>Math.floor(Math.random(t))}var xo=new TextEncoder;function DT(){}var Wh=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,zh;Wh&&(zh=new FinalizationRegistry(t=>{let e=t.deref();e&&!e.locked&&!mT(e)&&!qh(e)&&e.cancel("Response object has been garbage collected").catch(DT)}));function Zh(t,e=!1){let r=null;t instanceof ReadableStream?r=t:Jh(t)?r=t.stream():r=new ReadableStream({async pull(a){let c=typeof s=="string"?xo.encode(s):s;c.byteLength&&a.enqueue(c),queueMicrotask(()=>BT(a))},start(){},type:"bytes"}),$a(QT(r));let A=null,s=null,o=null,n=null;if(typeof t=="string")s=t,n="text/plain;charset=UTF-8";else if(t instanceof URLSearchParams)s=t.toString(),n="application/x-www-form-urlencoded;charset=UTF-8";else if(wT(t))s=new Uint8Array(t.slice());else if(ArrayBuffer.isView(t))s=new Uint8Array(t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength));else if(cs.isFormDataLike(t)){let a=`----formdata-undici-0${`${ec(1e11)}`.padStart(11,"0")}`,c=`--${a}\r -Content-Disposition: form-data`;let g=I=>I.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),l=I=>I.replace(/\r?\n|\r/g,`\r -`),u=[],E=new Uint8Array([13,10]);o=0;let h=!1;for(let[I,Q]of t)if(typeof Q=="string"){let f=xo.encode(c+`; name="${g(l(I))}"\r -\r -${l(Q)}\r -`);u.push(f),o+=f.byteLength}else{let f=xo.encode(`${c}; name="${g(l(I))}"`+(Q.name?`; filename="${g(Q.name)}"`:"")+`\r -Content-Type: ${Q.type||"application/octet-stream"}\r -\r -`);u.push(f,Q,E),typeof Q.size=="number"?o+=f.byteLength+Q.size+E.byteLength:h=!0}let C=xo.encode(`--${a}--\r -`);u.push(C),o+=C.byteLength,h&&(o=null),s=t,A=async function*(){for(let I of u)I.stream?yield*I.stream():yield I},n=`multipart/form-data; boundary=${a}`}else if(Jh(t))s=t,o=t.size,t.type&&(n=t.type);else if(typeof t[Symbol.asyncIterator]=="function"){if(e)throw new TypeError("keepalive");if(cs.isDisturbed(t)||t.locked)throw new TypeError("Response body object should not be disturbed or locked");r=t instanceof ReadableStream?t:hT(t)}if((typeof s=="string"||cs.isBuffer(s))&&(o=Buffer.byteLength(s)),A!=null){let a;r=new ReadableStream({async start(){a=A(t)[Symbol.asyncIterator]()},async pull(c){let{value:g,done:l}=await a.next();if(l)queueMicrotask(()=>{c.close(),c.byobRequest?.respond(0)});else if(!qh(r)){let u=new Uint8Array(g);u.byteLength&&c.enqueue(u)}return c.desiredSize>0},async cancel(c){await a.return()},type:"bytes"})}return[{stream:r,source:s,length:o},n]}function TT(t,e=!1){return t instanceof ReadableStream&&($a(!cs.isDisturbed(t),"The body has already been consumed."),$a(!t.locked,"The stream is locked.")),Zh(t,e)}function bT(t,e){let[r,A]=e.stream.tee();return e.stream=r,{stream:A,length:e.length,source:e.source}}function kT(t){if(t.aborted)throw new DOMException("The operation was aborted.","AbortError")}function FT(t){return{blob(){return iA(this,r=>{let A=Hh(this);return A===null?A="":A&&(A=yT(A)),new pT([r],{type:A})},t)},arrayBuffer(){return iA(this,r=>new Uint8Array(r).buffer,t)},text(){return iA(this,Vh,t)},json(){return iA(this,NT,t)},formData(){return iA(this,r=>{let A=Hh(this);if(A!==null)switch(A.essence){case"multipart/form-data":{let s=RT(r,A);if(s==="failure")throw new TypeError("Failed to parse body as FormData.");let o=new Ph;return o[aA]=s,o}case"application/x-www-form-urlencoded":{let s=new URLSearchParams(r.toString()),o=new Ph;for(let[n,i]of s)o.append(n,i);return o}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')},t)},bytes(){return iA(this,r=>new Uint8Array(r),t)}}}function ST(t){Object.assign(t.prototype,FT(t))}async function iA(t,e,r){if(fT.brandCheck(t,r),jh(t))throw new TypeError("Body is unusable: Body has already been read");kT(t[aA]);let A=IT(),s=n=>A.reject(n),o=n=>{try{A.resolve(e(n))}catch(i){s(i)}};return t[aA].body==null?(o(Buffer.allocUnsafe(0)),A.promise):(await CT(t[aA].body,o,s),A.promise)}function jh(t){let e=t[aA].body;return e!=null&&(e.stream.locked||cs.isDisturbed(e.stream))}function NT(t){return JSON.parse(Vh(t))}function Hh(t){let e=t[aA].headersList,r=dT(e);return r==="failure"?null:r}Kh.exports={extractBody:Zh,safelyExtractBody:TT,cloneBody:bT,mixinBody:ST,streamRegistry:zh,hasFinalizationRegistry:Wh,bodyUnusable:jh}});var EQ=B((OJ,uQ)=>{"use strict";var b=require("node:assert"),F=M(),{channels:Xh}=jr(),tc=Ma(),{RequestContentLengthMismatchError:dr,ResponseContentLengthMismatchError:$h,RequestAbortedError:iQ,InvalidArgumentError:UT,HeadersTimeoutError:GT,HeadersOverflowError:LT,SocketError:gA,InformationalError:lA,BodyTimeoutError:MT,HTTPParserError:vT,ResponseExceededMaxSizeError:xT}=Y(),{kUrl:aQ,kReset:be,kClient:Jo,kParser:j,kBlocking:us,kRunning:ce,kPending:cQ,kSize:eQ,kWriting:Ht,kQueue:et,kNoRef:gs,kKeepAliveDefaultTimeout:OT,kHostHeader:YT,kPendingIdx:_T,kRunningIdx:Ve,kError:pe,kPipelining:Po,kSocket:pr,kKeepAliveTimeoutValue:Vo,kMaxHeadersSize:rc,kKeepAliveMaxTimeout:JT,kKeepAliveTimeoutThreshold:PT,kHeadersTimeout:HT,kBodyTimeout:VT,kStrictContentLength:oc,kMaxRequests:tQ,kCounter:qT,kMaxResponseSize:WT,kOnError:rQ,kResume:Ft,kHTTPContext:gQ}=$(),Le=zE(),AQ=Buffer.alloc(0),Oo=Buffer[Symbol.species],Yo=F.addListener,zT=F.removeAllListeners,mr=Symbol("kIdleSocketValidation"),fr=Symbol("kIdleSocketValidationTimeout"),cc=Symbol("kSocketUsed"),Ac;async function ZT(){let t=process.env.JEST_WORKER_ID?Oa():void 0,e;try{e=await WebAssembly.compile(KE())}catch{e=await WebAssembly.compile(t||Oa())}return await WebAssembly.instantiate(e,{env:{wasm_on_url:(r,A,s)=>0,wasm_on_status:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onStatus(new Oo(ht.buffer,o,s))||0},wasm_on_message_begin:r=>(b(se.ptr===r),se.onMessageBegin()||0),wasm_on_header_field:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderField(new Oo(ht.buffer,o,s))||0},wasm_on_header_value:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderValue(new Oo(ht.buffer,o,s))||0},wasm_on_headers_complete:(r,A,s,o)=>(b(se.ptr===r),se.onHeadersComplete(A,!!s,!!o)||0),wasm_on_body:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onBody(new Oo(ht.buffer,o,s))||0},wasm_on_message_complete:r=>(b(se.ptr===r),se.onMessageComplete()||0)}})}var sc=null,nc=ZT();nc.catch();var se=null,ht=null,_o=0,Qt=null,jT=0,ls=1,uA=2|ls,Ho=4|ls,ic=8|jT,ac=class{constructor(e,r,{exports:A}){b(Number.isFinite(e[rc])&&e[rc]>0),this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Le.TYPE.RESPONSE),this.client=e,this.socket=r,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[rc],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[WT]}setTimeout(e,r){e!==this.timeoutValue||r&ls^this.timeoutType&ls?(this.timeout&&(tc.clearTimeout(this.timeout),this.timeout=null),e&&(r&ls?this.timeout=tc.setFastTimeout(sQ,e,new WeakRef(this)):(this.timeout=setTimeout(sQ,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=r}resume(){this.socket.destroyed||!this.paused||(b(this.ptr!=null),b(se==null),this.llhttp.llhttp_resume(this.ptr),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||AQ),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){b(this.ptr!=null),b(se==null),b(!this.paused);let{socket:r,llhttp:A}=this;e.length>_o&&(Qt&&A.free(Qt),_o=Math.ceil(e.length/4096)*4096,Qt=A.malloc(_o)),new Uint8Array(A.memory.buffer,Qt,_o).set(e);try{let s;try{ht=e,se=this,s=A.llhttp_execute(this.ptr,Qt,e.length)}catch(n){throw n}finally{se=null,ht=null}let o=A.llhttp_get_error_pos(this.ptr)-Qt;if(s!==Le.ERROR.OK){let n=e.subarray(o);if(s===Le.ERROR.PAUSED_UPGRADE)this.onUpgrade(n);else if(s===Le.ERROR.PAUSED)this.paused=!0,r.unshift(n);else throw this.createError(s,n)}}catch(s){F.destroy(r,s)}}finish(){b(se===null),b(this.ptr!=null),b(!this.paused);let{llhttp:e}=this,r;try{se=this,r=e.llhttp_finish(this.ptr)}finally{se=null}return r===Le.ERROR.OK?null:r===Le.ERROR.PAUSED||r===Le.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,AQ)}createError(e,r){let{llhttp:A,contentLength:s,bytesRead:o}=this;if(s&&o!==parseInt(s,10))return new $h;let n=A.llhttp_get_error_reason(this.ptr),i="";if(n){let a=new Uint8Array(A.memory.buffer,n).indexOf(0);i="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,n,a).toString()+")"}return new vT(i,Le.ERROR[e],r)}destroy(){b(this.ptr!=null),b(se==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&tc.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:r}=this;if(e.destroyed)return-1;if(r[ce]===0)return F.destroy(e,new gA("bad response",F.getSocketInfo(e))),-1;let A=r[et][r[Ve]];if(!A)return-1;A.onResponseStarted()}onHeaderField(e){let r=this.headers.length;(r&1)===0?this.headers.push(e):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]),this.trackHeader(e.length)}onHeaderValue(e){let r=this.headers.length;(r&1)===1?(this.headers.push(e),r+=1):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]);let A=this.headers[r-2];if(A.length===10){let s=F.bufferToLowerCasedHeaderName(A);s==="keep-alive"?this.keepAlive+=e.toString():s==="connection"&&(this.connection+=e.toString())}else A.length===14&&F.bufferToLowerCasedHeaderName(A)==="content-length"&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&F.destroy(this.socket,new LT)}onUpgrade(e){let{upgrade:r,client:A,socket:s,headers:o,statusCode:n}=this;b(r),b(A[pr]===s),b(!s.destroyed),b(!this.paused),b((o.length&1)===0);let i=A[et][A[Ve]];b(i),b(i.upgrade||i.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,s.unshift(e),s[j].destroy(),s[j]=null,s[Jo]=null,s[pe]=null,zT(s),A[pr]=null,A[gQ]=null,A[et][A[Ve]++]=null,A.emit("disconnect",A[aQ],[A],new lA("upgrade"));try{i.onUpgrade(n,o,s)}catch(a){F.destroy(s,a)}A[Ft]()}onHeadersComplete(e,r,A){let{client:s,socket:o,headers:n,statusText:i}=this;if(o.destroyed)return-1;if(s[ce]===0)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;let a=s[et][s[Ve]];if(!a)return-1;if(b(!this.upgrade),b(this.statusCode<200),e===100)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;if(r&&!a.upgrade)return F.destroy(o,new gA("bad upgrade",F.getSocketInfo(o))),-1;if(b(this.timeoutType===uA),this.statusCode=e,this.shouldKeepAlive=A||a.method==="HEAD"&&!o[be]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let g=a.bodyTimeout!=null?a.bodyTimeout:s[VT];this.setTimeout(g,Ho)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(a.method==="CONNECT")return b(s[ce]===1),this.upgrade=!0,2;if(r)return b(s[ce]===1),this.upgrade=!0,2;if(b((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&s[Po]){let g=this.keepAlive?F.parseKeepAliveTimeout(this.keepAlive):null;if(g!=null){let l=Math.min(g-s[PT],s[JT]);l<=0?o[be]=!0:s[Vo]=l}else s[Vo]=s[OT]}else o[be]=!0;let c=a.onHeaders(e,n,this.resume,i)===!1;return a.aborted?-1:a.method==="HEAD"||e<200?1:(o[us]&&(o[us]=!1,s[Ft]()),c?Le.ERROR.PAUSED:0)}onBody(e){let{client:r,socket:A,statusCode:s,maxResponseSize:o}=this;if(A.destroyed)return-1;let n=r[et][r[Ve]];if(b(n),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),b(s>=200),o>-1&&this.bytesRead+e.length>o)return F.destroy(A,new xT),-1;if(this.bytesRead+=e.length,n.onData(e)===!1)return Le.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:r,statusCode:A,upgrade:s,headers:o,contentLength:n,bytesRead:i,shouldKeepAlive:a}=this;if(r.destroyed&&(!A||a))return-1;if(s)return;b(A>=100),b((this.headers.length&1)===0);let c=e[et][e[Ve]];if(b(c),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,!(A<200)){if(c.method!=="HEAD"&&n&&i!==parseInt(n,10))return F.destroy(r,new $h),-1;if(c.onComplete(o),e[et][e[Ve]++]=null,r[cc]=!0,r[Ht])return b(e[ce]===0),F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;if(a){if(r[be]&&e[ce]===0)return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;e[Po]==null||e[Po]===1?setImmediate(()=>e[Ft]()):e[Ft]()}else return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED}}};function sQ(t){let{socket:e,timeoutType:r,client:A,paused:s}=t.deref();r===uA?(!e[Ht]||e.writableNeedDrain||A[ce]>1)&&(b(!s,"cannot be paused while waiting for headers"),F.destroy(e,new GT)):r===Ho?s||F.destroy(e,new MT):r===ic&&(b(A[ce]===0&&A[Vo]),F.destroy(e,new lA("socket idle timeout")))}async function KT(t,e){t[pr]=e,sc||(sc=await nc,nc=null),e[gs]=!1,e[Ht]=!1,e[be]=!1,e[us]=!1,e[mr]=0,e[fr]=null,e[cc]=!1,e[j]=new ac(t,e,sc),Yo(e,"error",function(A){b(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let s=this[j];if(A.code==="ECONNRESET"&&s.statusCode&&!s.shouldKeepAlive){let o=s.finish();o&&(this[pe]=o,this[Jo][rQ](o));return}this[pe]=A,this[Jo][rQ](A)}),Yo(e,"readable",function(){let A=this[j];A&&A.readMore()}),Yo(e,"end",function(){let A=this[j];if(A.statusCode&&!A.shouldKeepAlive){let s=A.finish();s&&F.destroy(this,s);return}F.destroy(this,new gA("other side closed",F.getSocketInfo(this)))}),Yo(e,"close",function(){let A=this[Jo],s=this[j];lQ(this),s&&(!this[pe]&&s.statusCode&&!s.shouldKeepAlive&&(this[pe]=s.finish()||this[pe]),this[j].destroy(),this[j]=null);let o=this[pe]||new gA("closed",F.getSocketInfo(this));if(A[pr]=null,A[gQ]=null,A.destroyed){b(A[cQ]===0);let n=A[et].splice(A[Ve]);for(let i=0;i0&&o.code!=="UND_ERR_INFO"){let n=A[et][A[Ve]];A[et][A[Ve]++]=null,F.errorRequest(A,n,o)}A[_T]=A[Ve],b(A[ce]===0),A.emit("disconnect",A[aQ],[A],o),A[Ft]()});let r=!1;return e.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...A){return tb(t,...A)},resume(){$T(t)},destroy(A,s){r?queueMicrotask(s):e.destroy(A).on("close",s)},get destroyed(){return e.destroyed},busy(A){return!!(e[Ht]||e[be]||e[us]||e[mr]===1||A&&(t[ce]>0&&!A.idempotent||t[ce]>0&&(A.upgrade||A.method==="CONNECT")||t[ce]>0&&F.bodyLength(A.body)!==0&&(F.isStream(A.body)||F.isAsyncIterable(A.body)||F.isFormDataLike(A.body))))}}}function lQ(t){t[fr]&&(clearTimeout(t[fr]),t[fr]=null),t[mr]=0}function XT(t,e){e[mr]=1,e[fr]=setTimeout(()=>{e[fr]=null,e[mr]=2,t[pr]===e&&!e.destroyed&&t[Ft]()},0),e[fr].unref?.()}function $T(t){let e=t[pr];if(e&&!e.destroyed){if(t[eQ]===0?!e[gs]&&e.unref&&(e.unref(),e[gs]=!0):e[gs]&&e.ref&&(e.ref(),e[gs]=!1),t[ce]===0&&t[cQ]>0&&e[cc]){if(e[mr]===0)return XT(t,e),e[j].readMore(),e.destroyed,void 0;if(e[mr]===1)return e[j].readMore(),e.destroyed,void 0}if(t[ce]===0&&(e[j].readMore(),e.destroyed))return;if(t[eQ]===0)e[j].timeoutType!==ic&&e[j].setTimeout(t[Vo],ic);else if(t[ce]>0&&e[j].statusCode<200&&e[j].timeoutType!==uA){let r=t[et][t[Ve]],A=r.headersTimeout!=null?r.headersTimeout:t[HT];e[j].setTimeout(A,uA)}}}function eb(t){return t!=="GET"&&t!=="HEAD"&&t!=="OPTIONS"&&t!=="TRACE"&&t!=="CONNECT"}function tb(t,e){let{method:r,path:A,host:s,upgrade:o,blocking:n,reset:i}=e,{body:a,headers:c,contentLength:g}=e,l=r==="PUT"||r==="POST"||r==="PATCH"||r==="QUERY"||r==="PROPFIND"||r==="PROPPATCH";if(F.isFormDataLike(a)){Ac||(Ac=cA().extractBody);let[I,Q]=Ac(a);e.contentType==null&&c.push("content-type",Q),a=I.stream,g=I.length}else if(F.isBlobLike(a)&&e.contentType==null){let I=a.type;if(I){let Q=`${I}`;if(!F.isValidHeaderValue(Q))return F.errorRequest(t,e,new UT("invalid content-type header")),!1;c.push("content-type",Q)}}a&&typeof a.read=="function"&&a.read(0);let u=F.bodyLength(a);if(g=u??g,g===null&&(g=e.contentLength),g===0&&!l&&(g=null),eb(r)&&g>0&&e.contentLength!==null&&e.contentLength!==g){if(t[oc])return F.errorRequest(t,e,new dr),!1;process.emitWarning(new dr)}let E=t[pr];lQ(E);let h=I=>{e.aborted||e.completed||(F.errorRequest(t,e,I||new iQ),F.destroy(a),F.destroy(E,new lA("aborted")))};try{e.onConnect(h)}catch(I){F.errorRequest(t,e,I)}if(e.aborted)return!1;r==="HEAD"&&(E[be]=!0),(o||r==="CONNECT")&&(E[be]=!0),i!=null&&(E[be]=i),t[tQ]&&E[qT]++>=t[tQ]&&(E[be]=!0),n&&(E[us]=!0);let C=`${r} ${A} HTTP/1.1\r -`;if(typeof s=="string"?C+=`host: ${s}\r -`:C+=t[YT],o?C+=`connection: upgrade\r -upgrade: ${o}\r -`:t[Po]&&!E[be]?C+=`connection: keep-alive\r -`:C+=`connection: close\r -`,Array.isArray(c))for(let I=0;I{e.removeListener("error",E)}),!a){let h=new iQ;queueMicrotask(()=>E(h))}},E=function(h){if(!a){if(a=!0,b(s.destroyed||s[Ht]&&r[ce]<=1),s.off("drain",l).off("error",E),e.removeListener("data",g).removeListener("end",E).removeListener("close",u),!h)try{c.end()}catch(C){h=C}c.destroy(h),h&&(h.code!=="UND_ERR_INFO"||h.message!=="reset")?F.destroy(e,h):F.destroy(e)}};e.on("data",g).on("end",E).on("error",E).on("close",u),e.resume&&e.resume(),s.on("drain",l).on("error",E),e.errorEmitted??e.errored?setImmediate(()=>E(e.errored)):(e.endEmitted??e.readableEnded)&&setImmediate(()=>E(null)),(e.closeEmitted??e.closed)&&setImmediate(u)}function oQ(t,e,r,A,s,o,n,i){try{e?F.isBuffer(e)&&(b(o===e.byteLength,"buffer body must have content length"),s.cork(),s.write(`${n}content-length: ${o}\r -\r -`,"latin1"),s.write(e),s.uncork(),A.onBodySent(e),!i&&A.reset!==!1&&(s[be]=!0)):o===0?s.write(`${n}content-length: 0\r -\r -`,"latin1"):(b(o===null,"no body must not have content length"),s.write(`${n}\r -`,"latin1")),A.onRequestSent(),r[Ft]()}catch(a){t(a)}}async function Ab(t,e,r,A,s,o,n,i){b(o===e.size,"blob body must have content length");try{if(o!=null&&o!==e.size)throw new dr;let a=Buffer.from(await e.arrayBuffer());s.cork(),s.write(`${n}content-length: ${o}\r -\r -`,"latin1"),s.write(a),s.uncork(),A.onBodySent(a),A.onRequestSent(),!i&&A.reset!==!1&&(s[be]=!0),r[Ft]()}catch(a){t(a)}}async function nQ(t,e,r,A,s,o,n,i){b(o!==0||r[ce]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let u=a;a=null,u()}}let g=()=>new Promise((u,E)=>{b(a===null),s[pe]?E(s[pe]):a=u});s.on("close",c).on("drain",c);let l=new qo({abort:t,socket:s,request:A,contentLength:o,client:r,expectsPayload:i,header:n});try{for await(let u of e){if(s[pe])throw s[pe];l.write(u)||await g()}l.end()}catch(u){l.destroy(u)}finally{s.off("close",c).off("drain",c)}}var qo=class{constructor({abort:e,socket:r,request:A,contentLength:s,client:o,expectsPayload:n,header:i}){this.socket=r,this.request=A,this.contentLength=s,this.client=o,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,r[Ht]=!0}write(e){let{socket:r,request:A,contentLength:s,client:o,bytesWritten:n,expectsPayload:i,header:a}=this;if(r[pe])throw r[pe];if(r.destroyed)return!1;let c=Buffer.byteLength(e);if(!c)return!0;if(s!==null&&n+c>s){if(o[oc])throw new dr;process.emitWarning(new dr)}r.cork(),n===0&&(!i&&A.reset!==!1&&(r[be]=!0),s===null?r.write(`${a}transfer-encoding: chunked\r -`,"latin1"):r.write(`${a}content-length: ${s}\r -\r -`,"latin1")),s===null&&r.write(`\r -${c.toString(16)}\r -`,"latin1"),this.bytesWritten+=c;let g=r.write(e);return r.uncork(),A.onBodySent(e),g||r[j].timeout&&r[j].timeoutType===uA&&r[j].timeout.refresh&&r[j].timeout.refresh(),g}end(){let{socket:e,contentLength:r,client:A,bytesWritten:s,expectsPayload:o,header:n,request:i}=this;if(i.onRequestSent(),e[Ht]=!1,e[pe])throw e[pe];if(!e.destroyed){if(s===0?o?e.write(`${n}content-length: 0\r -\r -`,"latin1"):e.write(`${n}\r -`,"latin1"):r===null&&e.write(`\r -0\r -\r -`,"latin1"),r!==null&&s!==r){if(A[oc])throw new dr;process.emitWarning(new dr)}e[j].timeout&&e[j].timeoutType===uA&&e[j].timeout.refresh&&e[j].timeout.refresh(),A[Ft]()}}destroy(e){let{socket:r,client:A,abort:s}=this;r[Ht]=!1,e&&(b(A[ce]<=1,"pipeline should only contain this request"),s(e))}};uQ.exports=KT});var pQ=B((YJ,fQ)=>{"use strict";var qe=require("node:assert"),{pipeline:sb}=require("node:stream"),v=M(),{RequestContentLengthMismatchError:gc,RequestAbortedError:hQ,SocketError:Es,InformationalError:lc}=Y(),{kUrl:Wo,kReset:Zo,kClient:EA,kRunning:jo,kPending:ob,kQueue:Vt,kPendingIdx:uc,kRunningIdx:tt,kError:At,kSocket:he,kStrictContentLength:nb,kOnError:Ec,kMaxConcurrentStreams:dQ,kHTTP2Session:rt,kResume:qt,kSize:ib,kHTTPContext:ab}=$(),St=Symbol("open streams"),QQ,BQ=!1,zo;try{zo=require("node:http2")}catch{zo={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:cb,HTTP2_HEADER_METHOD:gb,HTTP2_HEADER_PATH:lb,HTTP2_HEADER_SCHEME:ub,HTTP2_HEADER_CONTENT_LENGTH:Eb,HTTP2_HEADER_EXPECT:hb,HTTP2_HEADER_STATUS:Qb}}=zo;function Bb(t){let e=[];for(let[r,A]of Object.entries(t))if(Array.isArray(A))for(let s of A)e.push(Buffer.from(r),Buffer.from(s));else e.push(Buffer.from(r),Buffer.from(A));return e}async function Ib(t,e){t[he]=e,BQ||(BQ=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=zo.connect(t[Wo],{createConnection:()=>e,peerMaxConcurrentStreams:t[dQ]});r[St]=0,r[EA]=t,r[he]=e,v.addListener(r,"error",db),v.addListener(r,"frameError",fb),v.addListener(r,"end",pb),v.addListener(r,"goaway",mb),v.addListener(r,"close",function(){let{[EA]:s}=this,{[he]:o}=s,n=this[he][At]||this[At]||new Es("closed",v.getSocketInfo(o));if(s[rt]=null,s.destroyed){qe(s[ob]===0);let i=s[Vt].splice(s[tt]);for(let a=0;a{A=!0}),{version:"h2",defaultPipelining:1/0,write(...s){return yb(t,...s)},resume(){Cb(t)},destroy(s,o){A?queueMicrotask(o):e.destroy(s).on("close",o)},get destroyed(){return e.destroyed},busy(){return!1}}}function Cb(t){let e=t[he];e?.destroyed===!1&&(t[ib]===0&&t[dQ]===0?(e.unref(),t[rt].unref()):(e.ref(),t[rt].ref()))}function db(t){qe(t.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[he][At]=t,this[EA][Ec](t)}function fb(t,e,r){if(r===0){let A=new lc(`HTTP/2: "frameError" received - type ${t}, code ${e}`);this[he][At]=A,this[EA][Ec](A)}}function pb(){let t=new Es("other side closed",v.getSocketInfo(this[he]));this.destroy(t),v.destroy(this[he],t)}function mb(t){let e=this[At]||new Es(`HTTP/2: "GOAWAY" frame received with code ${t}`,v.getSocketInfo(this)),r=this[EA];if(r[he]=null,r[ab]=null,this[rt]!=null&&(this[rt].destroy(e),this[rt]=null),v.destroy(this[he],e),r[tt]{e.aborted||e.completed||(y=y||new hQ,v.errorRequest(t,e,y),u!=null&&v.destroy(u,y),v.destroy(g,y),t[Vt][t[tt]++]=null,t[qt]())};try{e.onConnect(C)}catch(y){v.errorRequest(t,e,y)}if(e.aborted)return!1;if(A==="CONNECT")return r.ref(),u=r.request(l,{endStream:!1,signal:a}),u.id&&!u.pending?(e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null):u.once("ready",()=>{e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),!0;l[lb]=s,l[ub]="https";let I=A==="PUT"||A==="POST"||A==="PATCH";g&&typeof g.read=="function"&&g.read(0);let Q=v.bodyLength(g);if(v.isFormDataLike(g)){QQ??=cA().extractBody;let[y,P]=QQ(g);l["content-type"]=P,g=y.stream,Q=y.length}if(Q==null&&(Q=e.contentLength),(Q===0||!I)&&(Q=null),wb(A)&&Q>0&&e.contentLength!=null&&e.contentLength!==Q){if(t[nb])return v.errorRequest(t,e,new gc),!1;process.emitWarning(new gc)}Q!=null&&(qe(g,"no body must not have content length"),l[Eb]=`${Q}`),r.ref();let f=A==="GET"||A==="HEAD"||g===null;return i?(l[hb]="100-continue",u=r.request(l,{endStream:f,signal:a}),u.once("continue",R)):(u=r.request(l,{endStream:f,signal:a}),R()),++r[St],u.once("response",y=>{let{[Qb]:P,...Z}=y;if(e.onResponseStarted(),e.aborted){let Ae=new hQ;v.errorRequest(t,e,Ae),v.destroy(u,Ae);return}e.onHeaders(Number(P),Bb(Z),u.resume.bind(u),"")===!1&&u.pause(),u.on("data",Ae=>{e.onData(Ae)===!1&&u.pause()})}),u.once("end",()=>{(u.state?.state==null||u.state.state<6)&&e.onComplete([]),r[St]===0&&r.unref(),C(new lc("HTTP/2: stream half-closed (remote)")),t[Vt][t[tt]++]=null,t[uc]=t[tt],t[qt]()}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),u.once("error",function(y){C(y)}),u.once("frameError",(y,P)=>{C(new lc(`HTTP/2: "frameError" received - type ${y}, code ${P}`))}),!0;function R(){!g||Q===0?IQ(C,u,null,t,e,t[he],Q,I):v.isBuffer(g)?IQ(C,u,g,t,e,t[he],Q,I):v.isBlobLike(g)?typeof g.stream=="function"?CQ(C,u,g.stream(),t,e,t[he],Q,I):Db(C,u,g,t,e,t[he],Q,I):v.isStream(g)?Rb(C,t[he],I,u,g,t,e,Q):v.isIterable(g)?CQ(C,u,g,t,e,t[he],Q,I):qe(!1)}}function IQ(t,e,r,A,s,o,n,i){try{r!=null&&v.isBuffer(r)&&(qe(n===r.byteLength,"buffer body must have content length"),e.cork(),e.write(r),e.uncork(),e.end(),s.onBodySent(r)),i||(o[Zo]=!0),s.onRequestSent(),A[qt]()}catch(a){t(a)}}function Rb(t,e,r,A,s,o,n,i){qe(i!==0||o[jo]===0,"stream body cannot be pipelined");let a=sb(s,A,g=>{g?(v.destroy(a,g),t(g)):(v.removeAllListeners(a),n.onRequestSent(),r||(e[Zo]=!0),o[qt]())});v.addListener(a,"data",c);function c(g){n.onBodySent(g)}}async function Db(t,e,r,A,s,o,n,i){qe(n===r.size,"blob body must have content length");try{if(n!=null&&n!==r.size)throw new gc;let a=Buffer.from(await r.arrayBuffer());e.cork(),e.write(a),e.uncork(),e.end(),s.onBodySent(a),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(a){t(a)}}async function CQ(t,e,r,A,s,o,n,i){qe(n!==0||A[jo]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let l=a;a=null,l()}}let g=()=>new Promise((l,u)=>{qe(a===null),o[At]?u(o[At]):a=l});e.on("close",c).on("drain",c);try{for await(let l of r){if(o[At])throw o[At];let u=e.write(l);s.onBodySent(l),u||await g()}e.end(),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(l){t(l)}finally{e.off("close",c).off("drain",c)}}fQ.exports=Ib});var Xo=B((_J,yQ)=>{"use strict";var Bt=M(),{kBodyUsed:hs}=$(),Qc=require("node:assert"),{InvalidArgumentError:Tb}=Y(),bb=require("node:events"),kb=[300,301,302,303,307,308],mQ=Symbol("body"),Ko=class{constructor(e){this[mQ]=e,this[hs]=!1}async*[Symbol.asyncIterator](){Qc(!this[hs],"disturbed"),this[hs]=!0,yield*this[mQ]}},hc=class{constructor(e,r,A,s){if(r!=null&&(!Number.isInteger(r)||r<0))throw new Tb("maxRedirections must be a positive number");Bt.validateHandler(s,A.method,A.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...A,maxRedirections:0},this.maxRedirections=r,this.handler=s,this.history=[],this.redirectionLimitReached=!1,Bt.isStream(this.opts.body)?(Bt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){Qc(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[hs]=!1,bb.prototype.on.call(this.opts.body,"data",function(){this[hs]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Ko(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Bt.isIterable(this.opts.body)&&(this.opts.body=new Ko(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,r,A){this.handler.onUpgrade(e,r,A)}onError(e){this.handler.onError(e)}onHeaders(e,r,A,s){if(this.location=this.history.length>=this.maxRedirections||Bt.isDisturbed(this.opts.body)?null:Fb(e,r),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(new Error("max redirects")),this.redirectionLimitReached=!0,this.abort(new Error("max redirects"));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,r,A,s);let{origin:o,pathname:n,search:i}=Bt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),a=i?`${n}${i}`:n;this.opts.headers=Sb(this.opts.headers,e===303,this.opts.origin!==o),this.opts.path=a,this.opts.origin=o,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!=="HEAD"&&(this.opts.method="GET",this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function Fb(t,e){if(kb.indexOf(t)===-1)return null;for(let r=0;r{"use strict";var Nb=Xo();function Ub({maxRedirections:t}){return e=>function(A,s){let{maxRedirections:o=t}=A;if(!o)return e(A,s);let n=new Nb(e,o,A,s);return A={...A,maxRedirections:0},e(A,n)}}RQ.exports=Ub});var BA=B((PJ,LQ)=>{"use strict";var Nt=require("node:assert"),SQ=require("node:net"),Gb=require("node:http"),wr=M(),{channels:hA}=jr(),Lb=LE(),Mb=eA(),{InvalidArgumentError:oe,InformationalError:vb,ClientDestroyedError:xb}=Y(),Ob=ts(),{kUrl:It,kServerName:Wt,kClient:Yb,kBusy:Bc,kConnect:_b,kResuming:yr,kRunning:ds,kPending:fs,kSize:Cs,kQueue:st,kConnected:Jb,kConnecting:QA,kNeedDrain:Zt,kKeepAliveDefaultTimeout:DQ,kHostHeader:Pb,kPendingIdx:ot,kRunningIdx:Ut,kError:Hb,kPipelining:en,kKeepAliveTimeoutValue:Vb,kMaxHeadersSize:qb,kKeepAliveMaxTimeout:Wb,kKeepAliveTimeoutThreshold:zb,kHeadersTimeout:Zb,kBodyTimeout:jb,kStrictContentLength:Kb,kConnector:Qs,kMaxRedirections:Xb,kMaxRequests:Ic,kCounter:$b,kClose:ek,kDestroy:tk,kDispatch:rk,kInterceptors:TQ,kLocalAddress:Bs,kMaxResponseSize:Ak,kOnError:sk,kHTTPContext:ne,kMaxConcurrentStreams:ok,kResume:Is}=$(),nk=EQ(),ik=pQ(),bQ=!1,zt=Symbol("kClosedResolve"),kQ=()=>{};function NQ(t){return t[en]??t[ne]?.defaultPipelining??1}var Cc=class extends Mb{constructor(e,{interceptors:r,maxHeaderSize:A,headersTimeout:s,socketTimeout:o,requestTimeout:n,connectTimeout:i,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:l,maxKeepAliveTimeout:u,keepAliveMaxTimeout:E,keepAliveTimeoutThreshold:h,socketPath:C,pipelining:I,tls:Q,strictContentLength:f,maxCachedSessions:R,maxRedirections:y,connect:P,maxRequestsPerClient:Z,localAddress:Ae,maxResponseSize:gt,autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr,maxConcurrentStreams:_t,allowH2:De,webSocket:qr}={}){if(super({webSocket:qr}),g!==void 0)throw new oe("unsupported keepAlive, use pipelining=0 instead");if(o!==void 0)throw new oe("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(n!==void 0)throw new oe("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new oe("unsupported idleTimeout, use keepAliveTimeout instead");if(u!==void 0)throw new oe("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(A!=null&&!Number.isFinite(A))throw new oe("invalid maxHeaderSize");if(C!=null&&typeof C!="string")throw new oe("invalid socketPath");if(i!=null&&(!Number.isFinite(i)||i<0))throw new oe("invalid connectTimeout");if(l!=null&&(!Number.isFinite(l)||l<=0))throw new oe("invalid keepAliveTimeout");if(E!=null&&(!Number.isFinite(E)||E<=0))throw new oe("invalid keepAliveMaxTimeout");if(h!=null&&!Number.isFinite(h))throw new oe("invalid keepAliveTimeoutThreshold");if(s!=null&&(!Number.isInteger(s)||s<0))throw new oe("headersTimeout must be a positive integer or zero");if(a!=null&&(!Number.isInteger(a)||a<0))throw new oe("bodyTimeout must be a positive integer or zero");if(P!=null&&typeof P!="function"&&typeof P!="object")throw new oe("connect must be a function or an object");if(y!=null&&(!Number.isInteger(y)||y<0))throw new oe("maxRedirections must be a positive number");if(Z!=null&&(!Number.isInteger(Z)||Z<0))throw new oe("maxRequestsPerClient must be a positive number");if(Ae!=null&&(typeof Ae!="string"||SQ.isIP(Ae)===0))throw new oe("localAddress must be valid string IP address");if(gt!=null&&(!Number.isInteger(gt)||gt<-1))throw new oe("maxResponseSize must be a positive number");if(Vr!=null&&(!Number.isInteger(Vr)||Vr<-1))throw new oe("autoSelectFamilyAttemptTimeout must be a positive number");if(De!=null&&typeof De!="boolean")throw new oe("allowH2 must be a valid boolean value");if(_t!=null&&(typeof _t!="number"||_t<1))throw new oe("maxConcurrentStreams must be a positive integer, greater than 0");typeof P!="function"&&(P=Ob({...Q,maxCachedSessions:R,allowH2:De,socketPath:C,timeout:i,...wt?{autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr}:void 0,...P})),r?.Client&&Array.isArray(r.Client)?(this[TQ]=r.Client,bQ||(bQ=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[TQ]=[ak({maxRedirections:y})],this[It]=wr.parseOrigin(e),this[Qs]=P,this[en]=I??1,this[qb]=A||Gb.maxHeaderSize,this[DQ]=l??4e3,this[Wb]=E??6e5,this[zb]=h??2e3,this[Vb]=this[DQ],this[Wt]=null,this[Bs]=Ae??null,this[yr]=0,this[Zt]=0,this[Pb]=`host: ${this[It].hostname}${this[It].port?`:${this[It].port}`:""}\r -`,this[jb]=a??3e5,this[Zb]=s??3e5,this[Kb]=f??!0,this[Xb]=y,this[Ic]=Z,this[zt]=null,this[Ak]=gt>-1?gt:-1,this[ok]=_t??100,this[ne]=null,this[st]=[],this[Ut]=0,this[ot]=0,this[Is]=Wr=>dc(this,Wr),this[sk]=Wr=>UQ(this,Wr)}get pipelining(){return this[en]}set pipelining(e){this[en]=e,this[Is](!0)}get[fs](){return this[st].length-this[ot]}get[ds](){return this[ot]-this[Ut]}get[Cs](){return this[st].length-this[Ut]}get[Jb](){return!!this[ne]&&!this[QA]&&!this[ne].destroyed}get[Bc](){return!!(this[ne]?.busy(null)||this[Cs]>=(NQ(this)||1)||this[fs]>0)}[_b](e){GQ(this),this.once("connect",e)}[rk](e,r){let A=e.origin||this[It].origin,s=new Lb(A,e,r);return this[st].push(s),this[yr]||(wr.bodyLength(s.body)==null&&wr.isIterable(s.body)?(this[yr]=1,queueMicrotask(()=>dc(this))):this[Is](!0)),this[yr]&&this[Zt]!==2&&this[Bc]&&(this[Zt]=2),this[Zt]<2}async[ek](){return new Promise(e=>{this[Cs]?this[zt]=e:e(null)})}async[tk](e){return new Promise(r=>{let A=this[st].splice(this[ot]);for(let o=0;o{this[zt]&&(this[zt](),this[zt]=null),r(null)};this[ne]?(this[ne].destroy(e,s),this[ne]=null):queueMicrotask(s),this[Is]()})}},ak=$o();function UQ(t,e){if(t[ds]===0&&e.code!=="UND_ERR_INFO"&&e.code!=="UND_ERR_SOCKET"){Nt(t[ot]===t[Ut]);let r=t[st].splice(t[Ut]);for(let A=0;A{t[Qs]({host:e,hostname:r,protocol:A,port:s,servername:t[Wt],localAddress:t[Bs]},(a,c)=>{a?i(a):n(c)})});if(t.destroyed){wr.destroy(o.on("error",kQ),new xb);return}Nt(o);try{t[ne]=o.alpnProtocol==="h2"?await ik(t,o):await nk(t,o)}catch(n){throw o.destroy().on("error",kQ),n}t[QA]=!1,o[$b]=0,o[Ic]=t[Ic],o[Yb]=t,o[Hb]=null,hA.connected.hasSubscribers&&hA.connected.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],socket:o}),t.emit("connect",t[It],[t])}catch(o){if(t.destroyed)return;if(t[QA]=!1,hA.connectError.hasSubscribers&&hA.connectError.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],error:o}),o.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(Nt(t[ds]===0);t[fs]>0&&t[st][t[ot]].servername===t[Wt];){let n=t[st][t[ot]++];wr.errorRequest(t,n,o)}else UQ(t,o);t.emit("connectionError",t[It],[t],o)}t[Is]()}function FQ(t){t[Zt]=0,t.emit("drain",t[It],[t])}function dc(t,e){t[yr]!==2&&(t[yr]=2,ck(t,e),t[yr]=0,t[Ut]>256&&(t[st].splice(0,t[Ut]),t[ot]-=t[Ut],t[Ut]=0))}function ck(t,e){for(;;){if(t.destroyed){Nt(t[fs]===0);return}if(t[zt]&&!t[Cs]){t[zt](),t[zt]=null;return}if(t[ne]&&t[ne].resume(),t[Bc])t[Zt]=2;else if(t[Zt]===2){e?(t[Zt]=1,queueMicrotask(()=>FQ(t))):FQ(t);continue}if(t[fs]===0||t[ds]>=(NQ(t)||1))return;let r=t[st][t[ot]];if(t[It].protocol==="https:"&&t[Wt]!==r.servername){if(t[ds]>0)return;t[Wt]=r.servername,t[ne]?.destroy(new vb("servername changed"),()=>{t[ne]=null,dc(t)})}if(t[QA])return;if(!t[ne]){GQ(t);return}if(t[ne].destroyed||t[ne].busy(r))return;!r.aborted&&t[ne].write(r)?t[ot]++:t[st].splice(t[ot],1)}}LQ.exports=Cc});var fc=B((VJ,MQ)=>{"use strict";var tn=class{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&2047}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,e)}};MQ.exports=class{constructor(){this.head=this.tail=new tn}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new tn),this.head.push(e)}shift(){let e=this.tail,r=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),r}}});var xQ=B((qJ,vQ)=>{var{kFree:gk,kConnected:lk,kPending:uk,kQueued:Ek,kRunning:hk,kSize:Qk}=$(),Rr=Symbol("pool"),pc=class{constructor(e){this[Rr]=e}get connected(){return this[Rr][lk]}get free(){return this[Rr][gk]}get pending(){return this[Rr][uk]}get queued(){return this[Rr][Ek]}get running(){return this[Rr][hk]}get size(){return this[Rr][Qk]}};vQ.exports=pc});var Tc=B((WJ,zQ)=>{"use strict";var Bk=eA(),Ik=fc(),{kConnected:mc,kSize:OQ,kRunning:YQ,kPending:_Q,kQueued:ps,kBusy:Ck,kFree:dk,kUrl:fk,kClose:pk,kDestroy:mk,kDispatch:wk}=$(),yk=xQ(),ke=Symbol("clients"),me=Symbol("needDrain"),ms=Symbol("queue"),wc=Symbol("closed resolve"),yc=Symbol("onDrain"),JQ=Symbol("onConnect"),PQ=Symbol("onDisconnect"),HQ=Symbol("onConnectionError"),Rc=Symbol("get dispatcher"),qQ=Symbol("add client"),WQ=Symbol("remove client"),VQ=Symbol("stats"),Dc=class extends Bk{constructor(e){super(e),this[ms]=new Ik,this[ke]=[],this[ps]=0;let r=this;this[yc]=function(s,o){let n=r[ms],i=!1;for(;!i;){let a=n.shift();if(!a)break;r[ps]--,i=!this.dispatch(a.opts,a.handler)}this[me]=i,!this[me]&&r[me]&&(r[me]=!1,r.emit("drain",s,[r,...o])),r[wc]&&n.isEmpty()&&Promise.all(r[ke].map(a=>a.close())).then(r[wc])},this[JQ]=(A,s)=>{r.emit("connect",A,[r,...s])},this[PQ]=(A,s,o)=>{r.emit("disconnect",A,[r,...s],o)},this[HQ]=(A,s,o)=>{r.emit("connectionError",A,[r,...s],o)},this[VQ]=new yk(this)}get[Ck](){return this[me]}get[mc](){return this[ke].filter(e=>e[mc]).length}get[dk](){return this[ke].filter(e=>e[mc]&&!e[me]).length}get[_Q](){let e=this[ps];for(let{[_Q]:r}of this[ke])e+=r;return e}get[YQ](){let e=0;for(let{[YQ]:r}of this[ke])e+=r;return e}get[OQ](){let e=this[ps];for(let{[OQ]:r}of this[ke])e+=r;return e}get stats(){return this[VQ]}async[pk](){this[ms].isEmpty()?await Promise.all(this[ke].map(e=>e.close())):await new Promise(e=>{this[wc]=e})}async[mk](e){for(;;){let r=this[ms].shift();if(!r)break;r.handler.onError(e)}await Promise.all(this[ke].map(r=>r.destroy(e)))}[wk](e,r){let A=this[Rc]();return A?A.dispatch(e,r)||(A[me]=!0,this[me]=!this[Rc]()):(this[me]=!0,this[ms].push({opts:e,handler:r}),this[ps]++),!this[me]}[qQ](e){return e.on("drain",this[yc]).on("connect",this[JQ]).on("disconnect",this[PQ]).on("connectionError",this[HQ]),this[ke].push(e),this[me]&&queueMicrotask(()=>{this[me]&&this[yc](e[fk],[this,e])}),this}[WQ](e){e.close(()=>{let r=this[ke].indexOf(e);r!==-1&&this[ke].splice(r,1)}),this[me]=this[ke].some(r=>!r[me]&&r.closed!==!0&&r.destroyed!==!0)}};zQ.exports={PoolBase:Dc,kClients:ke,kNeedDrain:me,kAddClient:qQ,kRemoveClient:WQ,kGetDispatcher:Rc}});var IA=B((zJ,XQ)=>{"use strict";var{PoolBase:Rk,kClients:rn,kNeedDrain:Dk,kAddClient:Tk,kGetDispatcher:bk}=Tc(),kk=BA(),{InvalidArgumentError:bc}=Y(),ZQ=M(),{kUrl:jQ,kInterceptors:Fk}=$(),Sk=ts(),kc=Symbol("options"),Fc=Symbol("connections"),KQ=Symbol("factory");function Nk(t,e){return new kk(t,e)}var Sc=class extends Rk{constructor(e,{connections:r,factory:A=Nk,connect:s,connectTimeout:o,tls:n,maxCachedSessions:i,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g,allowH2:l,...u}={}){if(r!=null&&(!Number.isFinite(r)||r<0))throw new bc("invalid connections");if(typeof A!="function")throw new bc("factory must be a function.");if(s!=null&&typeof s!="function"&&typeof s!="object")throw new bc("connect must be a function or an object");typeof s!="function"&&(s=Sk({...n,maxCachedSessions:i,allowH2:l,socketPath:a,timeout:o,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g}:void 0,...s})),super(u),this[Fk]=u.interceptors?.Pool&&Array.isArray(u.interceptors.Pool)?u.interceptors.Pool:[],this[Fc]=r||null,this[jQ]=ZQ.parseOrigin(e),this[kc]={...ZQ.deepClone(u),connect:s,allowH2:l},this[kc].interceptors=u.interceptors?{...u.interceptors}:void 0,this[KQ]=A,this.on("connectionError",(E,h,C)=>{for(let I of h){let Q=this[rn].indexOf(I);Q!==-1&&this[rn].splice(Q,1)}})}[bk](){for(let e of this[rn])if(!e[Dk])return e;if(!this[Fc]||this[rn].length{"use strict";var{BalancedPoolMissingUpstreamError:Uk,InvalidArgumentError:Gk}=Y(),{PoolBase:Lk,kClients:Ce,kNeedDrain:ws,kAddClient:Mk,kRemoveClient:vk,kGetDispatcher:xk}=Tc(),Ok=IA(),{kUrl:Nc,kInterceptors:Yk}=$(),{parseOrigin:$Q}=M(),eB=Symbol("factory"),An=Symbol("options"),tB=Symbol("kGreatestCommonDivisor"),Dr=Symbol("kCurrentWeight"),Tr=Symbol("kIndex"),We=Symbol("kWeight"),sn=Symbol("kMaxWeightPerServer"),on=Symbol("kErrorPenalty");function _k(t,e){if(t===0)return e;for(;e!==0;){let r=e;e=t%e,t=r}return t}function Jk(t,e){return new Ok(t,e)}var Uc=class extends Lk{constructor(e=[],{factory:r=Jk,...A}={}){if(super(),this[An]=A,this[Tr]=-1,this[Dr]=0,this[sn]=this[An].maxWeightPerServer||100,this[on]=this[An].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof r!="function")throw new Gk("factory must be a function.");this[Yk]=A.interceptors?.BalancedPool&&Array.isArray(A.interceptors.BalancedPool)?A.interceptors.BalancedPool:[],this[eB]=r;for(let s of e)this.addUpstream(s);this._updateBalancedPoolStats()}addUpstream(e){let r=$Q(e).origin;if(this[Ce].find(s=>s[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0))return this;let A=this[eB](r,Object.assign({},this[An]));this[Mk](A),A.on("connect",()=>{A[We]=Math.min(this[sn],A[We]+this[on])}),A.on("connectionError",()=>{A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats()}),A.on("disconnect",(...s)=>{let o=s[2];o&&o.code==="UND_ERR_SOCKET"&&(A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats())});for(let s of this[Ce])s[We]=this[sn];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let r=0;rs[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0);return A&&this[vk](A),this}get upstreams(){return this[Ce].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[Nc].origin)}[xk](){if(this[Ce].length===0)throw new Uk;if(!this[Ce].find(o=>!o[ws]&&o.closed!==!0&&o.destroyed!==!0)||this[Ce].map(o=>o[ws]).reduce((o,n)=>o&&n,!0))return;let A=0,s=this[Ce].findIndex(o=>!o[ws]);for(;A++this[Ce][s][We]&&!o[ws]&&(s=this[Tr]),this[Tr]===0&&(this[Dr]=this[Dr]-this[tB],this[Dr]<=0&&(this[Dr]=this[sn])),o[We]>=this[Dr]&&!o[ws])return o}return this[Dr]=this[Ce][s][We],this[Tr]=s,this[Ce][s]}};rB.exports=Uc});var CA=B((jJ,gB)=>{"use strict";var{InvalidArgumentError:nn}=Y(),{kClients:jt,kRunning:sB,kClose:Pk,kDestroy:Hk,kDispatch:Vk,kInterceptors:qk}=$(),Wk=eA(),zk=IA(),Zk=BA(),jk=M(),Kk=$o(),oB=Symbol("onConnect"),nB=Symbol("onDisconnect"),iB=Symbol("onConnectionError"),Xk=Symbol("maxRedirections"),aB=Symbol("onDrain"),cB=Symbol("factory"),Gc=Symbol("options");function $k(t,e){return e&&e.connections===1?new Zk(t,e):new zk(t,e)}var Lc=class extends Wk{constructor({factory:e=$k,maxRedirections:r=0,connect:A,...s}={}){if(typeof e!="function")throw new nn("factory must be a function.");if(A!=null&&typeof A!="function"&&typeof A!="object")throw new nn("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new nn("maxRedirections must be a positive number");super(s),A&&typeof A!="function"&&(A={...A}),this[qk]=s.interceptors?.Agent&&Array.isArray(s.interceptors.Agent)?s.interceptors.Agent:[Kk({maxRedirections:r})],this[Gc]={...jk.deepClone(s),connect:A},this[Gc].interceptors=s.interceptors?{...s.interceptors}:void 0,this[Xk]=r,this[cB]=e,this[jt]=new Map,this[aB]=(o,n)=>{this.emit("drain",o,[this,...n])},this[oB]=(o,n)=>{this.emit("connect",o,[this,...n])},this[nB]=(o,n,i)=>{this.emit("disconnect",o,[this,...n],i)},this[iB]=(o,n,i)=>{this.emit("connectionError",o,[this,...n],i)}}get[sB](){let e=0;for(let r of this[jt].values())e+=r[sB];return e}[Vk](e,r){let A;if(e.origin&&(typeof e.origin=="string"||e.origin instanceof URL))A=String(e.origin);else throw new nn("opts.origin must be a non-empty string or URL.");let s=this[jt].get(A);return s||(s=this[cB](e.origin,this[Gc]).on("drain",this[aB]).on("connect",this[oB]).on("disconnect",this[nB]).on("connectionError",this[iB]),this[jt].set(A,s)),s.dispatch(e,r)}async[Pk](){let e=[];for(let r of this[jt].values())e.push(r.close());this[jt].clear(),await Promise.all(e)}async[Hk](e){let r=[];for(let A of this[jt].values())r.push(A.destroy(e));this[jt].clear(),await Promise.all(r)}};gB.exports=Lc});var Yc=B((KJ,pB)=>{"use strict";var{kProxy:Mc,kClose:BB,kDestroy:IB,kDispatch:lB,kInterceptors:eF}=$(),{URL:br}=require("node:url"),tF=CA(),CB=IA(),dB=eA(),{InvalidArgumentError:dA,RequestAbortedError:rF,SecureProxyConnectionError:AF}=Y(),uB=ts(),fB=BA(),an=Symbol("proxy agent"),cn=Symbol("proxy client"),Kt=Symbol("proxy headers"),vc=Symbol("request tls settings"),EB=Symbol("proxy tls settings"),hB=Symbol("connect endpoint function"),QB=Symbol("tunnel proxy");function sF(t){return t==="https:"?443:80}function oF(t,e){return new CB(t,e)}var nF=()=>{};function iF(t,e){return e.connections===1?new fB(t,e):new CB(t,e)}var xc=class extends dB{#e;constructor(e,{headers:r={},connect:A,factory:s}){if(super(),!e)throw new dA("Proxy URL is mandatory");this[Kt]=r,s?this.#e=s(e,{connect:A}):this.#e=new fB(e,{connect:A})}[lB](e,r){let A=r.onHeaders;r.onHeaders=function(i,a,c){if(i===407){typeof r.onError=="function"&&r.onError(new dA("Proxy Authentication Required (407)"));return}A&&A.call(this,i,a,c)};let{origin:s,path:o="/",headers:n={}}=e;if(e.path=s+o,!("host"in n)&&!("Host"in n)){let{host:i}=new br(s);n.host=i}return e.headers={...this[Kt],...n},this.#e[lB](e,r)}async[BB](){return this.#e.close()}async[IB](e){return this.#e.destroy(e)}},Oc=class extends dB{constructor(e){if(super(),!e||typeof e=="object"&&!(e instanceof br)&&!e.uri)throw new dA("Proxy uri is mandatory");let{clientFactory:r=oF}=e;if(typeof r!="function")throw new dA("Proxy opts.clientFactory must be a function.");let{proxyTunnel:A=!0}=e,s=this.#e(e),{href:o,origin:n,port:i,protocol:a,username:c,password:g,hostname:l}=s;if(this[Mc]={uri:o,protocol:a},this[eF]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[vc]=e.requestTls,this[EB]=e.proxyTls,this[Kt]=e.headers||{},this[QB]=A,e.auth&&e.token)throw new dA("opts.auth cannot be used in combination with opts.token");e.auth?this[Kt]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Kt]["proxy-authorization"]=e.token:c&&g&&(this[Kt]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(g)}`).toString("base64")}`);let u=uB({...e.proxyTls});this[hB]=uB({...e.requestTls});let E=e.factory||iF,h=(C,I)=>{let{protocol:Q}=new br(C);return!this[QB]&&Q==="http:"&&this[Mc].protocol==="http:"?new xc(this[Mc].uri,{headers:this[Kt],connect:u,factory:E}):E(C,I)};this[cn]=r(s,{connect:u}),this[an]=new tF({...e,factory:h,connect:async(C,I)=>{let Q=C.host;C.port||(Q+=`:${sF(C.protocol)}`);try{let{socket:f,statusCode:R}=await this[cn].connect({origin:n,port:i,path:Q,signal:C.signal,headers:{...this[Kt],host:C.host},servername:this[EB]?.servername||l});if(R!==200&&(f.on("error",nF).destroy(),I(new rF(`Proxy response (${R}) !== 200 when HTTP Tunneling`))),C.protocol!=="https:"){I(null,f);return}let y;this[vc]?y=this[vc].servername:y=C.servername,this[hB]({...C,servername:y,httpSocket:f},I)}catch(f){f.code==="ERR_TLS_CERT_ALTNAME_INVALID"?I(new AF(f)):I(f)}}})}dispatch(e,r){let A=aF(e.headers);if(cF(A),A&&!("host"in A)&&!("Host"in A)){let{host:s}=new br(e.origin);A.host=s}return this[an].dispatch({...e,headers:A},r)}#e(e){return typeof e=="string"?new br(e):e instanceof br?e:new br(e.uri)}async[BB](){await this[an].close(),await this[cn].close()}async[IB](){await this[an].destroy(),await this[cn].destroy()}};function aF(t){if(Array.isArray(t)){let e={};for(let r=0;rr.toLowerCase()==="proxy-authorization"))throw new dA("Proxy-Authorization should be sent in ProxyAgent constructor")}pB.exports=Oc});var TB=B((XJ,DB)=>{"use strict";var gF=eA(),{kClose:lF,kDestroy:uF,kClosed:mB,kDestroyed:wB,kDispatch:EF,kNoProxyAgent:ys,kHttpProxyAgent:Xt,kHttpsProxyAgent:kr}=$(),yB=Yc(),hF=CA(),QF={"http:":80,"https:":443},RB=!1,_c=class extends gF{#e=null;#t=null;#r=null;constructor(e={}){super(),this.#r=e,RB||(RB=!0,process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"}));let{httpProxy:r,httpsProxy:A,noProxy:s,...o}=e;this[ys]=new hF(o);let n=r??process.env.http_proxy??process.env.HTTP_PROXY;n?this[Xt]=new yB({...o,uri:n}):this[Xt]=this[ys];let i=A??process.env.https_proxy??process.env.HTTPS_PROXY;i?this[kr]=new yB({...o,uri:i}):this[kr]=this[Xt],this.#A()}[EF](e,r){let A=new URL(e.origin);return this.#o(A).dispatch(e,r)}async[lF](){await this[ys].close(),this[Xt][mB]||await this[Xt].close(),this[kr][mB]||await this[kr].close()}async[uF](e){await this[ys].destroy(e),this[Xt][wB]||await this[Xt].destroy(e),this[kr][wB]||await this[kr].destroy(e)}#o(e){let{protocol:r,host:A,port:s}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),s=Number.parseInt(s,10)||QF[r]||0,this.#s(A,s)?r==="https:"?this[kr]:this[Xt]:this[ys]}#s(e,r){if(this.#n&&this.#A(),this.#t.length===0)return!0;if(this.#e==="*")return!1;for(let A=0;A{"use strict";var fA=require("node:assert"),{kRetryHandlerDefaultRetry:bB}=$(),{RequestRetryError:pA}=Y(),{isDisturbed:kB,parseHeaders:BF,parseRangeHeader:FB,wrapRequestBody:IF}=M();function CF(t){let e=Date.now();return new Date(t).getTime()-e}function SB(t,e,r,A){let s=t["content-length"];if(s==null||!Number.isFinite(e.start)||!Number.isFinite(e.end))return null;let o=Number(s),n=e.end-e.start+1;return!Number.isFinite(o)||o!==n?new pA("Content-Length mismatch",r,{headers:t,data:{count:A}}):null}var Jc=class t{constructor(e,r){let{retryOptions:A,...s}=e,{retry:o,maxRetries:n,maxTimeout:i,minTimeout:a,timeoutFactor:c,methods:g,errorCodes:l,retryAfter:u,statusCodes:E}=A??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...s,body:IF(e.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??t[bB],retryAfter:u??!0,maxTimeout:i??30*1e3,minTimeout:a??500,timeoutFactor:c??2,maxRetries:n??5,methods:g??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:E??[500,502,503,504,429],errorCodes:l??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect(h=>{this.aborted=!0,this.abort?this.abort(h):this.reason=h})}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,r,A){this.handler.onUpgrade&&this.handler.onUpgrade(e,r,A)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[bB](e,{state:r,opts:A},s){let{statusCode:o,code:n,headers:i}=e,{method:a,retryOptions:c}=A,{maxRetries:g,minTimeout:l,maxTimeout:u,timeoutFactor:E,statusCodes:h,errorCodes:C,methods:I}=c,{counter:Q}=r;if(n&&n!=="UND_ERR_REQ_RETRY"&&!C.includes(n)){s(e);return}if(Array.isArray(I)&&!I.includes(a)){s(e);return}if(o!=null&&Array.isArray(h)&&!h.includes(o)){s(e);return}if(Q>g){s(e);return}let f=i?.["retry-after"];f&&(f=Number(f),f=Number.isNaN(f)?CF(f):f*1e3);let R=f>0?Math.min(f,u):Math.min(l*E**(Q-1),u);setTimeout(()=>s(null),R)}onHeaders(e,r,A,s){let o=BF(r);if(this.retryCount+=1,e>=300)return this.retryOpts.statusCodes.includes(e)===!1?this.handler.onHeaders(e,r,A,s):(this.abort(new pA("Request failed",e,{headers:o,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new pA("server does not support the range header and the payload was partially consumed",e,{headers:o,data:{count:this.retryCount}})),!1;let i=FB(o["content-range"]);if(!i)return this.abort(new pA("Content-Range mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==o.etag)return this.abort(new pA("ETag mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;return fA(this.start===c,"content-range mismatch"),fA(this.end==null||this.end===l,"content-range mismatch"),this.resume=A,!0}if(this.end==null){if(e===206){let i=FB(o["content-range"]);if(i==null)return this.handler.onHeaders(e,r,A,s);let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;fA(c!=null&&Number.isFinite(c),"content-range mismatch"),fA(l!=null&&Number.isFinite(l),"invalid content-length"),this.start=c,this.end=l}if(this.end==null){let i=o["content-length"];this.end=i!=null?Number(i)-1:null}return fA(Number.isFinite(this.start)),fA(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=A,this.etag=o.etag!=null?o.etag:null,this.etag!=null&&this.etag.startsWith("W/")&&(this.etag=null),this.handler.onHeaders(e,r,A,s)}let n=new pA("Request failed",e,{headers:o,data:{count:this.retryCount}});return this.abort(n),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||kB(this.opts.body))return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},r.bind(this));function r(A){if(A!=null||this.aborted||kB(this.opts.body))return this.handler.onError(A);if(this.start!==0){let s={range:`bytes=${this.start}-${this.end??""}`};this.etag!=null&&(s["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...s}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(s){this.handler.onError(s)}}}};NB.exports=Jc});var GB=B((eP,UB)=>{"use strict";var dF=$A(),fF=gn(),Pc=class extends dF{#e=null;#t=null;constructor(e,r={}){super(r),this.#e=e,this.#t=r}dispatch(e,r){let A=new fF({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:r});return this.#e.dispatch(e,A)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}};UB.exports=Pc});var Zc=B((tP,PB)=>{"use strict";var OB=require("node:assert"),{Readable:pF}=require("node:stream"),{RequestAbortedError:YB,NotSupportedError:mF,InvalidArgumentError:wF,AbortError:Hc}=Y(),_B=M(),{ReadableStreamFrom:yF}=M(),Me=Symbol("kConsume"),Rs=Symbol("kReading"),$t=Symbol("kBody"),LB=Symbol("kAbort"),JB=Symbol("kContentType"),MB=Symbol("kContentLength"),RF=()=>{},Vc=class extends pF{constructor({resume:e,abort:r,contentType:A="",contentLength:s,highWaterMark:o=64*1024}){super({autoDestroy:!0,read:e,highWaterMark:o}),this._readableState.dataEmitted=!1,this[LB]=r,this[Me]=null,this[$t]=null,this[JB]=A,this[MB]=s,this[Rs]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new YB),e&&this[LB](),super.destroy(e)}_destroy(e,r){this[Rs]?r(e):setImmediate(()=>{r(e)})}on(e,...r){return(e==="data"||e==="readable")&&(this[Rs]=!0),super.on(e,...r)}addListener(e,...r){return this.on(e,...r)}off(e,...r){let A=super.off(e,...r);return(e==="data"||e==="readable")&&(this[Rs]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,...r){return this.off(e,...r)}push(e){return this[Me]&&e!==null?(Wc(this[Me],e),this[Rs]?super.push(e):!0):super.push(e)}async text(){return Ds(this,"text")}async json(){return Ds(this,"json")}async blob(){return Ds(this,"blob")}async bytes(){return Ds(this,"bytes")}async arrayBuffer(){return Ds(this,"arrayBuffer")}async formData(){throw new mF}get bodyUsed(){return _B.isDisturbed(this)}get body(){return this[$t]||(this[$t]=yF(this),this[Me]&&(this[$t].getReader(),OB(this[$t].locked))),this[$t]}async dump(e){let r=Number.isFinite(e?.limit)?e.limit:131072,A=e?.signal;if(A!=null&&(typeof A!="object"||!("aborted"in A)))throw new wF("signal must be an AbortSignal");return A?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((s,o)=>{this[MB]>r&&this.destroy(new Hc);let n=()=>{this.destroy(A.reason??new Hc)};A?.addEventListener("abort",n),this.on("close",function(){A?.removeEventListener("abort",n),A?.aborted?o(A.reason??new Hc):s(null)}).on("error",RF).on("data",function(i){r-=i.length,r<=0&&this.destroy()}).resume()})}};function DF(t){return t[$t]&&t[$t].locked===!0||t[Me]}function TF(t){return _B.isDisturbed(t)||DF(t)}async function Ds(t,e){return OB(!t[Me]),new Promise((r,A)=>{if(TF(t)){let s=t._readableState;s.destroyed&&s.closeEmitted===!1?t.on("error",o=>{A(o)}).on("close",()=>{A(new TypeError("unusable"))}):A(s.errored??new TypeError("unusable"))}else queueMicrotask(()=>{t[Me]={type:e,stream:t,resolve:r,reject:A,length:0,body:[]},t.on("error",function(s){zc(this[Me],s)}).on("close",function(){this[Me].body!==null&&zc(this[Me],new YB)}),bF(t[Me])})})}function bF(t){if(t.body===null)return;let{_readableState:e}=t.stream;if(e.bufferIndex){let r=e.bufferIndex,A=e.buffer.length;for(let s=r;s2&&r[0]===239&&r[1]===187&&r[2]===191?3:0;return r.utf8Slice(s,A)}function vB(t,e){if(t.length===0||e===0)return new Uint8Array(0);if(t.length===1)return new Uint8Array(t[0]);let r=new Uint8Array(Buffer.allocUnsafeSlow(e).buffer),A=0;for(let s=0;s{var kF=require("node:assert"),{ResponseStatusCodeError:HB}=Y(),{chunksDecode:VB}=Zc(),FF=128*1024;async function SF({callback:t,body:e,contentType:r,statusCode:A,statusMessage:s,headers:o}){kF(e);let n=[],i=0;try{for await(let l of e)if(n.push(l),i+=l.length,i>FF){n=[],i=0;break}}catch{n=[],i=0}let a=`Response status code ${A}${s?`: ${s}`:""}`;if(A===204||!r||!i){queueMicrotask(()=>t(new HB(a,A,o)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let g;try{qB(r)?g=JSON.parse(VB(n,i)):WB(r)&&(g=VB(n,i))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>t(new HB(a,A,o,g)))}var qB=t=>t.length>15&&t[11]==="/"&&t[0]==="a"&&t[1]==="p"&&t[2]==="p"&&t[3]==="l"&&t[4]==="i"&&t[5]==="c"&&t[6]==="a"&&t[7]==="t"&&t[8]==="i"&&t[9]==="o"&&t[10]==="n"&&t[12]==="j"&&t[13]==="s"&&t[14]==="o"&&t[15]==="n",WB=t=>t.length>4&&t[4]==="/"&&t[0]==="t"&&t[1]==="e"&&t[2]==="x"&&t[3]==="t";zB.exports={getResolveErrorBodyCallback:SF,isContentTypeApplicationJson:qB,isContentTypeText:WB}});var KB=B((AP,Kc)=>{"use strict";var NF=require("node:assert"),{Readable:UF}=Zc(),{InvalidArgumentError:mA,RequestAbortedError:ZB}=Y(),ve=M(),{getResolveErrorBodyCallback:GF}=jc(),{AsyncResource:LF}=require("node:async_hooks"),ln=class extends LF{constructor(e,r){if(!e||typeof e!="object")throw new mA("invalid opts");let{signal:A,method:s,opaque:o,body:n,onInfo:i,responseHeaders:a,throwOnError:c,highWaterMark:g}=e;try{if(typeof r!="function")throw new mA("invalid callback");if(g&&(typeof g!="number"||g<0))throw new mA("invalid highWaterMark");if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new mA("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new mA("invalid method");if(i&&typeof i!="function")throw new mA("invalid onInfo callback");super("UNDICI_REQUEST")}catch(l){throw ve.isStream(n)&&ve.destroy(n.on("error",ve.nop),l),l}this.method=s,this.responseHeaders=a||null,this.opaque=o||null,this.callback=r,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=i||null,this.throwOnError=c,this.highWaterMark=g,this.signal=A,this.reason=null,this.removeAbortListener=null,ve.isStream(n)&&n.on("error",l=>{this.onError(l)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new ZB:this.removeAbortListener=ve.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new ZB,this.res?ve.destroy(this.res.on("error",ve.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&(this.res?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}))}onConnect(e,r){if(this.reason){e(this.reason);return}NF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{callback:o,opaque:n,abort:i,context:a,responseHeaders:c,highWaterMark:g}=this,l=c==="raw"?ve.parseRawHeaders(r):ve.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:l});return}let u=c==="raw"?ve.parseHeaders(r):l,E=u["content-type"],h=u["content-length"],C=new UF({resume:A,abort:i,contentType:E,contentLength:this.method!=="HEAD"&&h?Number(h):null,highWaterMark:g});this.removeAbortListener&&C.on("close",this.removeAbortListener),this.callback=null,this.res=C,o!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(GF,null,{callback:o,body:C,contentType:E,statusCode:e,statusMessage:s,headers:l}):this.runInAsyncScope(o,null,null,{statusCode:e,headers:l,trailers:this.trailers,opaque:n,body:C,context:a}))}onData(e){return this.res.push(e)}onComplete(e){ve.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:r,callback:A,body:s,opaque:o}=this;A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:o})})),r&&(this.res=null,queueMicrotask(()=>{ve.destroy(r,e)})),s&&(this.body=null,ve.destroy(s,e)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function jB(t,e){if(e===void 0)return new Promise((r,A)=>{jB.call(this,t,(s,o)=>s?A(s):r(o))});try{this.dispatch(t,new ln(t,e))}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}Kc.exports=jB;Kc.exports.RequestHandler=ln});var Ts=B((sP,eI)=>{var{addAbortListener:MF}=M(),{RequestAbortedError:vF}=Y(),wA=Symbol("kListener"),Ct=Symbol("kSignal");function XB(t){t.abort?t.abort(t[Ct]?.reason):t.reason=t[Ct]?.reason??new vF,$B(t)}function xF(t,e){if(t.reason=null,t[Ct]=null,t[wA]=null,!!e){if(e.aborted){XB(t);return}t[Ct]=e,t[wA]=()=>{XB(t)},MF(t[Ct],t[wA])}}function $B(t){t[Ct]&&("removeEventListener"in t[Ct]?t[Ct].removeEventListener("abort",t[wA]):t[Ct].removeListener("abort",t[wA]),t[Ct]=null,t[wA]=null)}eI.exports={addSignal:xF,removeSignal:$B}});var sI=B((oP,AI)=>{"use strict";var OF=require("node:assert"),{finished:YF,PassThrough:_F}=require("node:stream"),{InvalidArgumentError:yA,InvalidReturnValueError:JF}=Y(),nt=M(),{getResolveErrorBodyCallback:PF}=jc(),{AsyncResource:HF}=require("node:async_hooks"),{addSignal:VF,removeSignal:tI}=Ts(),Xc=class extends HF{constructor(e,r,A){if(!e||typeof e!="object")throw new yA("invalid opts");let{signal:s,method:o,opaque:n,body:i,onInfo:a,responseHeaders:c,throwOnError:g}=e;try{if(typeof A!="function")throw new yA("invalid callback");if(typeof r!="function")throw new yA("invalid factory");if(s&&typeof s.on!="function"&&typeof s.addEventListener!="function")throw new yA("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new yA("invalid method");if(a&&typeof a!="function")throw new yA("invalid onInfo callback");super("UNDICI_STREAM")}catch(l){throw nt.isStream(i)&&nt.destroy(i.on("error",nt.nop),l),l}this.responseHeaders=c||null,this.opaque=n||null,this.factory=r,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=i,this.onInfo=a||null,this.throwOnError=g||!1,nt.isStream(i)&&i.on("error",l=>{this.onError(l)}),VF(this,s)}onConnect(e,r){if(this.reason){e(this.reason);return}OF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{factory:o,opaque:n,context:i,callback:a,responseHeaders:c}=this,g=c==="raw"?nt.parseRawHeaders(r):nt.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:g});return}this.factory=null;let l;if(this.throwOnError&&e>=400){let h=(c==="raw"?nt.parseHeaders(r):g)["content-type"];l=new _F,this.callback=null,this.runInAsyncScope(PF,null,{callback:a,body:l,contentType:h,statusCode:e,statusMessage:s,headers:g})}else{if(o===null)return;if(l=this.runInAsyncScope(o,null,{statusCode:e,headers:g,opaque:n,context:i}),!l||typeof l.write!="function"||typeof l.end!="function"||typeof l.on!="function")throw new JF("expected Writable");YF(l,{readable:!1},E=>{let{callback:h,res:C,opaque:I,trailers:Q,abort:f}=this;this.res=null,(E||!C.readable)&&nt.destroy(C,E),this.callback=null,this.runInAsyncScope(h,null,E||null,{opaque:I,trailers:Q}),E&&f()})}return l.on("drain",A),this.res=l,(l.writableNeedDrain!==void 0?l.writableNeedDrain:l._writableState?.needDrain)!==!0}onData(e){let{res:r}=this;return r?r.write(e):!0}onComplete(e){let{res:r}=this;tI(this),r&&(this.trailers=nt.parseHeaders(e),r.end())}onError(e){let{res:r,callback:A,opaque:s,body:o}=this;tI(this),this.factory=null,r?(this.res=null,nt.destroy(r,e)):A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:s})})),o&&(this.body=null,nt.destroy(o,e))}};function rI(t,e,r){if(r===void 0)return new Promise((A,s)=>{rI.call(this,t,e,(o,n)=>o?s(o):A(n))});try{this.dispatch(t,new Xc(t,e,r))}catch(A){if(typeof r!="function")throw A;let s=t?.opaque;queueMicrotask(()=>r(A,{opaque:s}))}}AI.exports=rI});var aI=B((nP,iI)=>{"use strict";var{Readable:nI,Duplex:qF,PassThrough:WF}=require("node:stream"),{InvalidArgumentError:bs,InvalidReturnValueError:zF,RequestAbortedError:$c}=Y(),ze=M(),{AsyncResource:ZF}=require("node:async_hooks"),{addSignal:jF,removeSignal:KF}=Ts(),oI=require("node:assert"),RA=Symbol("resume"),eg=class extends nI{constructor(){super({autoDestroy:!0}),this[RA]=null}_read(){let{[RA]:e}=this;e&&(this[RA]=null,e())}_destroy(e,r){this._read(),r(e)}},tg=class extends nI{constructor(e){super({autoDestroy:!0}),this[RA]=e}_read(){this[RA]()}_destroy(e,r){!e&&!this._readableState.endEmitted&&(e=new $c),r(e)}},rg=class extends ZF{constructor(e,r){if(!e||typeof e!="object")throw new bs("invalid opts");if(typeof r!="function")throw new bs("invalid handler");let{signal:A,method:s,opaque:o,onInfo:n,responseHeaders:i}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new bs("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new bs("invalid method");if(n&&typeof n!="function")throw new bs("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=o||null,this.responseHeaders=i||null,this.handler=r,this.abort=null,this.context=null,this.onInfo=n||null,this.req=new eg().on("error",ze.nop),this.ret=new qF({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:a}=this;a?.resume&&a.resume()},write:(a,c,g)=>{let{req:l}=this;l.push(a,c)||l._readableState.destroyed?g():l[RA]=g},destroy:(a,c)=>{let{body:g,req:l,res:u,ret:E,abort:h}=this;!a&&!E._readableState.endEmitted&&(a=new $c),h&&a&&h(),ze.destroy(g,a),ze.destroy(l,a),ze.destroy(u,a),KF(this),c(a)}}).on("prefinish",()=>{let{req:a}=this;a.push(null)}),this.res=null,jF(this,A)}onConnect(e,r){let{ret:A,res:s}=this;if(this.reason){e(this.reason);return}oI(!s,"pipeline cannot be retried"),oI(!A.destroyed),this.abort=e,this.context=r}onHeaders(e,r,A){let{opaque:s,handler:o,context:n}=this;if(e<200){if(this.onInfo){let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);this.onInfo({statusCode:e,headers:a})}return}this.res=new tg(A);let i;try{this.handler=null;let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);i=this.runInAsyncScope(o,null,{statusCode:e,headers:a,opaque:s,body:this.res,context:n})}catch(a){throw this.res.on("error",ze.nop),a}if(!i||typeof i.on!="function")throw new zF("expected Readable");i.on("data",a=>{let{ret:c,body:g}=this;!c.push(a)&&g.pause&&g.pause()}).on("error",a=>{let{ret:c}=this;ze.destroy(c,a)}).on("end",()=>{let{ret:a}=this;a.push(null)}).on("close",()=>{let{ret:a}=this;a._readableState.ended||ze.destroy(a,new $c)}),this.body=i}onData(e){let{res:r}=this;return r.push(e)}onComplete(e){let{res:r}=this;r.push(null)}onError(e){let{ret:r}=this;this.handler=null,ze.destroy(r,e)}};function XF(t,e){try{let r=new rg(t,e);return this.dispatch({...t,body:r.req},r),r.ret}catch(r){return new WF().destroy(r)}}iI.exports=XF});var hI=B((iP,EI)=>{"use strict";var{InvalidArgumentError:Ag,SocketError:$F}=Y(),{AsyncResource:eS}=require("node:async_hooks"),cI=M(),{addSignal:tS,removeSignal:gI}=Ts(),lI=require("node:assert"),sg=class extends eS{constructor(e,r){if(!e||typeof e!="object")throw new Ag("invalid opts");if(typeof r!="function")throw new Ag("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new Ag("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=o||null,this.opaque=s||null,this.callback=r,this.abort=null,this.context=null,tS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}lI(this.callback),this.abort=e,this.context=null}onHeaders(){throw new $F("bad upgrade",null)}onUpgrade(e,r,A){lI(e===101);let{callback:s,opaque:o,context:n}=this;gI(this),this.callback=null;let i=this.responseHeaders==="raw"?cI.parseRawHeaders(r):cI.parseHeaders(r);this.runInAsyncScope(s,null,null,{headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;gI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function uI(t,e){if(e===void 0)return new Promise((r,A)=>{uI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new sg(t,e);this.dispatch({...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}EI.exports=uI});var dI=B((aP,CI)=>{"use strict";var rS=require("node:assert"),{AsyncResource:AS}=require("node:async_hooks"),{InvalidArgumentError:og,SocketError:sS}=Y(),QI=M(),{addSignal:oS,removeSignal:BI}=Ts(),ng=class extends AS{constructor(e,r){if(!e||typeof e!="object")throw new og("invalid opts");if(typeof r!="function")throw new og("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new og("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=s||null,this.responseHeaders=o||null,this.callback=r,this.abort=null,oS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}rS(this.callback),this.abort=e,this.context=r}onHeaders(){throw new sS("bad connect",null)}onUpgrade(e,r,A){let{callback:s,opaque:o,context:n}=this;BI(this),this.callback=null;let i=r;i!=null&&(i=this.responseHeaders==="raw"?QI.parseRawHeaders(r):QI.parseHeaders(r)),this.runInAsyncScope(s,null,null,{statusCode:e,headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;BI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function II(t,e){if(e===void 0)return new Promise((r,A)=>{II.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new ng(t,e);this.dispatch({...t,method:"CONNECT"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}CI.exports=II});var fI=B((cP,DA)=>{"use strict";DA.exports.request=KB();DA.exports.stream=sI();DA.exports.pipeline=aI();DA.exports.upgrade=hI();DA.exports.connect=dI()});var ag=B((gP,mI)=>{"use strict";var{UndiciError:nS}=Y(),pI=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),ig=class t extends nS{constructor(e){super(e),Error.captureStackTrace(this,t),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&e[pI]===!0}[pI]=!0};mI.exports={MockNotMatchedError:ig}});var TA=B((lP,wI)=>{"use strict";wI.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var ks=B((uP,GI)=>{"use strict";var{MockNotMatchedError:Fr}=ag(),{kDispatches:un,kMockAgent:iS,kOriginalDispatch:aS,kOrigin:cS,kGetNetConnect:gS}=TA(),{buildURL:lS}=M(),{STATUS_CODES:uS}=require("node:http"),{types:{isPromise:ES}}=require("node:util");function Gt(t,e){return typeof t=="string"?t===e:t instanceof RegExp?t.test(e):typeof t=="function"?t(e)===!0:!1}function RI(t){return Object.fromEntries(Object.entries(t).map(([e,r])=>[e.toLocaleLowerCase(),r]))}function DI(t,e){if(Array.isArray(t)){for(let r=0;r"u")return!0;if(typeof e!="object"||typeof t.headers!="object")return!1;for(let[r,A]of Object.entries(t.headers)){let s=DI(e,r);if(!Gt(A,s))return!1}return!0}function yI(t){if(typeof t!="string")return t;let e=t.split("?");if(e.length!==2)return t;let r=new URLSearchParams(e.pop());return r.sort(),[...e,r.toString()].join("?")}function hS(t,{path:e,method:r,body:A,headers:s}){let o=Gt(t.path,e),n=Gt(t.method,r),i=typeof t.body<"u"?Gt(t.body,A):!0,a=TI(t,s);return o&&n&&i&&a}function bI(t){return Buffer.isBuffer(t)||t instanceof Uint8Array||t instanceof ArrayBuffer?t:typeof t=="object"?JSON.stringify(t):t.toString()}function kI(t,e){let r=e.query?lS(e.path,e.query):e.path,A=typeof r=="string"?yI(r):r,s=t.filter(({consumed:o})=>!o).filter(({path:o})=>Gt(yI(o),A));if(s.length===0)throw new Fr(`Mock dispatch not matched for path '${A}'`);if(s=s.filter(({method:o})=>Gt(o,e.method)),s.length===0)throw new Fr(`Mock dispatch not matched for method '${e.method}' on path '${A}'`);if(s=s.filter(({body:o})=>typeof o<"u"?Gt(o,e.body):!0),s.length===0)throw new Fr(`Mock dispatch not matched for body '${e.body}' on path '${A}'`);if(s=s.filter(o=>TI(o,e.headers)),s.length===0){let o=typeof e.headers=="object"?JSON.stringify(e.headers):e.headers;throw new Fr(`Mock dispatch not matched for headers '${o}' on path '${A}'`)}return s[0]}function QS(t,e,r){let A={timesInvoked:0,times:1,persist:!1,consumed:!1},s=typeof r=="function"?{callback:r}:{...r},o={...A,...e,pending:!0,data:{error:null,...s}};return t.push(o),o}function cg(t,e){let r=t.findIndex(A=>A.consumed?hS(A,e):!1);r!==-1&&t.splice(r,1)}function FI(t){let{path:e,method:r,body:A,headers:s,query:o}=t;return{path:e,method:r,body:A,headers:s,query:o}}function gg(t){let e=Object.keys(t),r=[];for(let A=0;A=u,A.pending=l0?setTimeout(()=>{E(this[un])},c):E(this[un]);function E(C,I=o){let Q=Array.isArray(t.headers)?lg(t.headers):t.headers,f=typeof I=="function"?I({...t,headers:Q}):I;if(ES(f)){f.then(Z=>E(C,Z));return}let R=bI(f),y=gg(n),P=gg(i);e.onConnect?.(Z=>e.onError(Z),null),e.onHeaders?.(s,y,h,SI(s)),e.onData?.(Buffer.from(R)),e.onComplete?.(P),cg(C,r)}function h(){}return!0}function IS(){let t=this[iS],e=this[cS],r=this[aS];return function(s,o){if(t.isMockActive)try{NI.call(this,s,o)}catch(n){if(n instanceof Fr){let i=t[gS]();if(i===!1)throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect disabled)`);if(UI(i,e))r.call(this,s,o);else throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect is not enabled for this origin)`)}else throw n}else r.call(this,s,o)}}function UI(t,e){let r=new URL(e);return t===!0?!0:!!(Array.isArray(t)&&t.some(A=>Gt(A,r.host)))}function CS(t){if(t){let{agent:e,...r}=t;return r}}GI.exports={getResponseData:bI,getMockDispatch:kI,addMockDispatch:QS,deleteMockDispatch:cg,buildKey:FI,generateKeyValues:gg,matchValue:Gt,getResponse:BS,getStatusText:SI,mockDispatch:NI,buildMockDispatch:IS,checkNetConnect:UI,buildMockOptions:CS,getHeaderByName:DI,buildHeadersFromArray:lg}});var Cg=B((EP,Ig)=>{"use strict";var{getResponseData:dS,buildKey:fS,addMockDispatch:ug}=ks(),{kDispatches:En,kDispatchKey:hn,kDefaultHeaders:Eg,kDefaultTrailers:hg,kContentLength:Qg,kMockDispatch:Qn}=TA(),{InvalidArgumentError:dt}=Y(),{buildURL:pS}=M(),bA=class{constructor(e){this[Qn]=e}delay(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("waitInMs must be a valid integer > 0");return this[Qn].delay=e,this}persist(){return this[Qn].persist=!0,this}times(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("repeatTimes must be a valid integer > 0");return this[Qn].times=e,this}},Bg=class{constructor(e,r){if(typeof e!="object")throw new dt("opts must be an object");if(typeof e.path>"u")throw new dt("opts.path must be defined");if(typeof e.method>"u"&&(e.method="GET"),typeof e.path=="string")if(e.query)e.path=pS(e.path,e.query);else{let A=new URL(e.path,"data://");e.path=A.pathname+A.search}typeof e.method=="string"&&(e.method=e.method.toUpperCase()),this[hn]=fS(e),this[En]=r,this[Eg]={},this[hg]={},this[Qg]=!1}createMockScopeDispatchData({statusCode:e,data:r,responseOptions:A}){let s=dS(r),o=this[Qg]?{"content-length":s.length}:{},n={...this[Eg],...o,...A.headers},i={...this[hg],...A.trailers};return{statusCode:e,data:r,headers:n,trailers:i}}validateReplyParameters(e){if(typeof e.statusCode>"u")throw new dt("statusCode must be defined");if(typeof e.responseOptions!="object"||e.responseOptions===null)throw new dt("responseOptions must be an object")}reply(e){if(typeof e=="function"){let o=i=>{let a=e(i);if(typeof a!="object"||a===null)throw new dt("reply options callback must return an object");let c={data:"",responseOptions:{},...a};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},n=ug(this[En],this[hn],o);return new bA(n)}let r={statusCode:e,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(r);let A=this.createMockScopeDispatchData(r),s=ug(this[En],this[hn],A);return new bA(s)}replyWithError(e){if(typeof e>"u")throw new dt("error must be defined");let r=ug(this[En],this[hn],{error:e});return new bA(r)}defaultReplyHeaders(e){if(typeof e>"u")throw new dt("headers must be defined");return this[Eg]=e,this}defaultReplyTrailers(e){if(typeof e>"u")throw new dt("trailers must be defined");return this[hg]=e,this}replyContentLength(){return this[Qg]=!0,this}};Ig.exports.MockInterceptor=Bg;Ig.exports.MockScope=bA});var pg=B((hP,_I)=>{"use strict";var{promisify:mS}=require("node:util"),wS=BA(),{buildMockDispatch:yS}=ks(),{kDispatches:LI,kMockAgent:MI,kClose:vI,kOriginalClose:xI,kOrigin:OI,kOriginalDispatch:RS,kConnected:dg}=TA(),{MockInterceptor:DS}=Cg(),YI=$(),{InvalidArgumentError:TS}=Y(),fg=class extends wS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new TS("Argument opts.agent must implement Agent");this[MI]=r.agent,this[OI]=e,this[LI]=[],this[dg]=1,this[RS]=this.dispatch,this[xI]=this.close.bind(this),this.dispatch=yS.call(this),this.close=this[vI]}get[YI.kConnected](){return this[dg]}intercept(e){return new DS(e,this[LI])}async[vI](){await mS(this[xI])(),this[dg]=0,this[MI][YI.kClients].delete(this[OI])}};_I.exports=fg});var yg=B((QP,zI)=>{"use strict";var{promisify:bS}=require("node:util"),kS=IA(),{buildMockDispatch:FS}=ks(),{kDispatches:JI,kMockAgent:PI,kClose:HI,kOriginalClose:VI,kOrigin:qI,kOriginalDispatch:SS,kConnected:mg}=TA(),{MockInterceptor:NS}=Cg(),WI=$(),{InvalidArgumentError:US}=Y(),wg=class extends kS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new US("Argument opts.agent must implement Agent");this[PI]=r.agent,this[qI]=e,this[JI]=[],this[mg]=1,this[SS]=this.dispatch,this[VI]=this.close.bind(this),this.dispatch=FS.call(this),this.close=this[HI]}get[WI.kConnected](){return this[mg]}intercept(e){return new NS(e,this[JI])}async[HI](){await bS(this[VI])(),this[mg]=0,this[PI][WI.kClients].delete(this[qI])}};zI.exports=wg});var jI=B((IP,ZI)=>{"use strict";var GS={pronoun:"it",is:"is",was:"was",this:"this"},LS={pronoun:"they",is:"are",was:"were",this:"these"};ZI.exports=class{constructor(e,r){this.singular=e,this.plural=r}pluralize(e){let r=e===1,A=r?GS:LS,s=r?this.singular:this.plural;return{...A,count:e,noun:s}}}});var XI=B((dP,KI)=>{"use strict";var{Transform:MS}=require("node:stream"),{Console:vS}=require("node:console"),xS=process.versions.icu?"\u2705":"Y ",OS=process.versions.icu?"\u274C":"N ";KI.exports=class{constructor({disableColors:e}={}){this.transform=new MS({transform(r,A,s){s(null,r)}}),this.logger=new vS({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let r=e.map(({method:A,path:s,data:{statusCode:o},persist:n,times:i,timesInvoked:a,origin:c})=>({Method:A,Origin:c,Path:s,"Status code":o,Persistent:n?xS:OS,Invocations:a,Remaining:n?1/0:i-a}));return this.logger.table(r),this.transform.read().toString()}}});var rC=B((fP,tC)=>{"use strict";var{kClients:Sr}=$(),YS=CA(),{kAgent:Rg,kMockAgentSet:Bn,kMockAgentGet:$I,kDispatches:Dg,kIsMockActive:In,kNetConnect:Nr,kGetNetConnect:_S,kOptions:Cn,kFactory:dn}=TA(),JS=pg(),PS=yg(),{matchValue:HS,buildMockOptions:VS}=ks(),{InvalidArgumentError:eC,UndiciError:qS}=Y(),WS=$A(),zS=jI(),ZS=XI(),Tg=class extends WS{constructor(e){if(super(e),this[Nr]=!0,this[In]=!0,e?.agent&&typeof e.agent.dispatch!="function")throw new eC("Argument opts.agent must implement Agent");let r=e?.agent?e.agent:new YS(e);this[Rg]=r,this[Sr]=r[Sr],this[Cn]=VS(e)}get(e){let r=this[$I](e);return r||(r=this[dn](e),this[Bn](e,r)),r}dispatch(e,r){return this.get(e.origin),this[Rg].dispatch(e,r)}async close(){await this[Rg].close(),this[Sr].clear()}deactivate(){this[In]=!1}activate(){this[In]=!0}enableNetConnect(e){if(typeof e=="string"||typeof e=="function"||e instanceof RegExp)Array.isArray(this[Nr])?this[Nr].push(e):this[Nr]=[e];else if(typeof e>"u")this[Nr]=!0;else throw new eC("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[Nr]=!1}get isMockActive(){return this[In]}[Bn](e,r){this[Sr].set(e,r)}[dn](e){let r=Object.assign({agent:this},this[Cn]);return this[Cn]&&this[Cn].connections===1?new JS(e,r):new PS(e,r)}[$I](e){let r=this[Sr].get(e);if(r)return r;if(typeof e!="string"){let A=this[dn]("http://localhost:9999");return this[Bn](e,A),A}for(let[A,s]of Array.from(this[Sr]))if(s&&typeof A!="string"&&HS(A,e)){let o=this[dn](e);return this[Bn](e,o),o[Dg]=s[Dg],o}}[_S](){return this[Nr]}pendingInterceptors(){let e=this[Sr];return Array.from(e.entries()).flatMap(([r,A])=>A[Dg].map(s=>({...s,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new ZS}={}){let r=this.pendingInterceptors();if(r.length===0)return;let A=new zS("interceptor","interceptors").pluralize(r.length);throw new qS(` -${A.count} ${A.noun} ${A.is} pending: - -${e.format(r)} -`.trim())}};tC.exports=Tg});var fn=B((pP,nC)=>{"use strict";var AC=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:jS}=Y(),KS=CA();oC()===void 0&&sC(new KS);function sC(t){if(!t||typeof t.dispatch!="function")throw new jS("Argument agent must implement Agent");Object.defineProperty(globalThis,AC,{value:t,writable:!0,enumerable:!1,configurable:!1})}function oC(){return globalThis[AC]}nC.exports={setGlobalDispatcher:sC,getGlobalDispatcher:oC}});var pn=B((wP,iC)=>{"use strict";iC.exports=class{#e;constructor(e){if(typeof e!="object"||e===null)throw new TypeError("handler must be an object");this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}});var cC=B((yP,aC)=>{"use strict";var XS=Xo();aC.exports=t=>{let e=t?.maxRedirections;return r=>function(s,o){let{maxRedirections:n=e,...i}=s;if(!n)return r(s,o);let a=new XS(r,n,s,o);return r(i,a)}}});var lC=B((RP,gC)=>{"use strict";var $S=gn();gC.exports=t=>e=>function(A,s){return e(A,new $S({...A,retryOptions:{...t,...A.retryOptions}},{handler:s,dispatch:e}))}});var EC=B((DP,uC)=>{"use strict";var eN=M(),{InvalidArgumentError:tN,RequestAbortedError:rN}=Y(),AN=pn(),bg=class extends AN{#e=1024*1024;#t=null;#r=!1;#o=!1;#s=0;#A=null;#n=null;constructor({maxSize:e},r){if(super(r),e!=null&&(!Number.isFinite(e)||e<1))throw new tN("maxSize must be a number greater than 0");this.#e=e??this.#e,this.#n=r}onConnect(e){this.#t=e,this.#n.onConnect(this.#i.bind(this))}#i(e){this.#o=!0,this.#A=e}onHeaders(e,r,A,s){let n=eN.parseHeaders(r)["content-length"];if(n!=null&&n>this.#e)throw new rN(`Response size (${n}) larger than maxSize (${this.#e})`);return this.#o?!0:this.#n.onHeaders(e,r,A,s)}onError(e){this.#r||(e=this.#A??e,this.#n.onError(e))}onData(e){return this.#s=this.#s+e.length,this.#s>=this.#e&&(this.#r=!0,this.#o?this.#n.onError(this.#A):this.#n.onComplete([])),!0}onComplete(e){if(!this.#r){if(this.#o){this.#n.onError(this.reason);return}this.#n.onComplete(e)}}};function sN({maxSize:t}={maxSize:1024*1024}){return e=>function(A,s){let{dumpMaxSize:o=t}=A,n=new bg({maxSize:o},s);return e(A,n)}}uC.exports=sN});var BC=B((TP,QC)=>{"use strict";var{isIP:oN}=require("node:net"),{lookup:nN}=require("node:dns"),iN=pn(),{InvalidArgumentError:kA,InformationalError:aN}=Y(),hC=Math.pow(2,31)-1,kg=class{#e=0;#t=0;#r=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#o,this.pick=e.pick??this.#s}get full(){return this.#r.size===this.#t}runLookup(e,r,A){let s=this.#r.get(e.hostname);if(s==null&&this.full){A(null,e.origin);return}let o={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...r.dns,maxTTL:this.#e,maxItems:this.#t};if(s==null)this.lookup(e,o,(n,i)=>{if(n||i==null||i.length===0){A(n??new aN("No DNS entries found"));return}this.setRecords(e,i);let a=this.#r.get(e.hostname),c=this.pick(e,a,o.affinity),g;typeof c.port=="number"?g=`:${c.port}`:e.port!==""?g=`:${e.port}`:g="",A(null,`${e.protocol}//${c.family===6?`[${c.address}]`:c.address}${g}`)});else{let n=this.pick(e,s,o.affinity);if(n==null){this.#r.delete(e.hostname),this.runLookup(e,r,A);return}let i;typeof n.port=="number"?i=`:${n.port}`:e.port!==""?i=`:${e.port}`:i="",A(null,`${e.protocol}//${n.family===6?`[${n.address}]`:n.address}${i}`)}}#o(e,r,A){nN(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(s,o)=>{if(s)return A(s);let n=new Map;for(let i of o)n.set(`${i.address}:${i.family}`,i);A(null,n.values())})}#s(e,r,A){let s=null,{records:o,offset:n}=r,i;if(this.dualStack?(A==null&&(n==null||n===hC?(r.offset=0,A=4):(r.offset++,A=(r.offset&1)===1?6:4)),o[A]!=null&&o[A].ips.length>0?i=o[A]:i=o[A===4?6:4]):i=o[A],i==null||i.ips.length===0)return s;i.offset==null||i.offset===hC?i.offset=0:i.offset++;let a=i.offset%i.ips.length;return s=i.ips[a]??null,s==null?s:Date.now()-s.timestamp>s.ttl?(i.ips.splice(a,1),this.pick(e,r,A)):s}setRecords(e,r){let A=Date.now(),s={records:{4:null,6:null}};for(let o of r){o.timestamp=A,typeof o.ttl=="number"?o.ttl=Math.min(o.ttl,this.#e):o.ttl=this.#e;let n=s.records[o.family]??{ips:[]};n.ips.push(o),s.records[o.family]=n}this.#r.set(e.hostname,s)}getHandler(e,r){return new Fg(this,e,r)}},Fg=class extends iN{#e=null;#t=null;#r=null;#o=null;#s=null;constructor(e,{origin:r,handler:A,dispatch:s},o){super(A),this.#s=r,this.#o=A,this.#t={...o},this.#e=e,this.#r=s}onError(e){switch(e.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#s,this.#t,(r,A)=>{if(r)return this.#o.onError(r);let s={...this.#t,origin:A};this.#r(s,this)});return}this.#o.onError(e);return}case"ENOTFOUND":this.#e.deleteRecord(this.#s);default:this.#o.onError(e);break}}};QC.exports=t=>{if(t?.maxTTL!=null&&(typeof t?.maxTTL!="number"||t?.maxTTL<0))throw new kA("Invalid maxTTL. Must be a positive number");if(t?.maxItems!=null&&(typeof t?.maxItems!="number"||t?.maxItems<1))throw new kA("Invalid maxItems. Must be a positive number and greater than zero");if(t?.affinity!=null&&t?.affinity!==4&&t?.affinity!==6)throw new kA("Invalid affinity. Must be either 4 or 6");if(t?.dualStack!=null&&typeof t?.dualStack!="boolean")throw new kA("Invalid dualStack. Must be a boolean");if(t?.lookup!=null&&typeof t?.lookup!="function")throw new kA("Invalid lookup. Must be a function");if(t?.pick!=null&&typeof t?.pick!="function")throw new kA("Invalid pick. Must be a function");let e=t?.dualStack??!0,r;e?r=t?.affinity??null:r=t?.affinity??4;let A={maxTTL:t?.maxTTL??1e4,lookup:t?.lookup??null,pick:t?.pick??null,dualStack:e,affinity:r,maxItems:t?.maxItems??1/0},s=new kg(A);return o=>function(i,a){let c=i.origin.constructor===URL?i.origin:new URL(i.origin);return oN(c.hostname)!==0?o(i,a):(s.runLookup(c,i,(g,l)=>{if(g)return a.onError(g);let u=null;u={...i,servername:c.hostname,origin:l,headers:{host:c.hostname,...i.headers}},o(u,s.getHandler({origin:c,dispatch:o,handler:a},i))}),!0)}}});var Ur=B((bP,wC)=>{"use strict";var{kConstruct:cN}=$(),{kEnumerableProperty:FA}=M(),{iteratorMixin:gN,isValidHeaderName:Fs,isValidHeaderValue:CC}=Ge(),{webidl:O}=Qe(),Sg=require("node:assert"),mn=require("node:util"),ge=Symbol("headers map"),xe=Symbol("headers map sorted");function IC(t){return t===10||t===13||t===9||t===32}function dC(t){let e=0,r=t.length;for(;r>e&&IC(t.charCodeAt(r-1));)--r;for(;r>e&&IC(t.charCodeAt(e));)++e;return e===0&&r===t.length?t:t.substring(e,r)}function fC(t,e){if(Array.isArray(e))for(let r=0;r>","record"]})}function Ng(t,e,r){if(r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"});if(mC(t)==="immutable")throw new TypeError("immutable");return Ug(t).append(e,r,!1)}function pC(t,e){return t[0]>1),r[c][0]<=g[0]?a=c+1:i=c;if(o!==c){for(n=o;n>a;)r[n]=r[--n];r[a]=g}}if(!A.next().done)throw new TypeError("Unreachable");return r}else{let A=0;for(let{0:s,1:{value:o}}of this[ge])r[A++]=[s,o],Sg(o!==null);return r.sort(pC)}}},it=class t{#e;#t;constructor(e=void 0){O.util.markAsUncloneable(this),e!==cN&&(this.#t=new wn,this.#e="none",e!==void 0&&(e=O.converters.HeadersInit(e,"Headers contructor","init"),fC(this,e)))}append(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.append");let A="Headers.append";return e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),Ng(this,e,r)}delete(e){if(O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.delete"),e=O.converters.ByteString(e,"Headers.delete","name"),!Fs(e))throw O.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(e,!1)&&this.#t.delete(e,!1)}get(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.get(e,!1)}has(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.contains(e,!1)}set(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.set");let A="Headers.set";if(e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:A,value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(e,r,!1)}getSetCookie(){O.brandCheck(this,t);let e=this.#t.cookies;return e?[...e]:[]}get[xe](){if(this.#t[xe])return this.#t[xe];let e=[],r=this.#t.toSortedArray(),A=this.#t.cookies;if(A===null||A.length===1)return this.#t[xe]=r;for(let s=0;s>"](t,e,r,A.bind(t)):O.converters["record"](t,e,r)}throw O.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};wC.exports={fill:fC,compareHeaderName:pC,Headers:it,HeadersList:wn,getHeadersGuard:mC,setHeadersGuard:lN,setHeadersList:uN,getHeadersList:Ug}});var Ns=B((kP,LC)=>{"use strict";var{Headers:kC,HeadersList:yC,fill:EN,getHeadersGuard:hN,setHeadersGuard:FC,setHeadersList:SC}=Ur(),{extractBody:RC,cloneBody:QN,mixinBody:BN,hasFinalizationRegistry:NC,streamRegistry:UC,bodyUnusable:IN}=cA(),Gg=M(),DC=require("node:util"),{kEnumerableProperty:Oe}=Gg,{isValidReasonPhrase:CN,isCancelled:dN,isAborted:fN,isBlobLike:pN,serializeJavascriptValueToJSONString:mN,isErrorLike:wN,isomorphicEncode:yN,environmentSettingsObject:RN}=Ge(),{redirectStatusSet:DN,nullBodyStatus:TN}=rs(),{kState:te,kHeaders:Lt}=Pt(),{webidl:L}=Qe(),{FormData:bN}=as(),{URLSerializer:TC}=Te(),{kConstruct:Rn}=$(),Lg=require("node:assert"),{types:kN}=require("node:util"),FN=new TextEncoder("utf-8"),Gr=class t{static error(){return Ss(Dn(),"immutable")}static json(e,r={}){L.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=L.converters.ResponseInit(r));let A=FN.encode(mN(e)),s=RC(A),o=Ss(SA({}),"response");return bC(o,r,{body:s[0],type:"application/json"}),o}static redirect(e,r=302){L.argumentLengthCheck(arguments,1,"Response.redirect"),e=L.converters.USVString(e),r=L.converters["unsigned short"](r);let A;try{A=new URL(e,RN.settingsObject.baseUrl)}catch(n){throw new TypeError(`Failed to parse URL from ${e}`,{cause:n})}if(!DN.has(r))throw new RangeError(`Invalid status code ${r}`);let s=Ss(SA({}),"immutable");s[te].status=r;let o=yN(TC(A));return s[te].headersList.append("location",o,!0),s}constructor(e=null,r={}){if(L.util.markAsUncloneable(this),e===Rn)return;e!==null&&(e=L.converters.BodyInit(e)),r=L.converters.ResponseInit(r),this[te]=SA({}),this[Lt]=new kC(Rn),FC(this[Lt],"response"),SC(this[Lt],this[te].headersList);let A=null;if(e!=null){let[s,o]=RC(e);A={body:s,type:o}}bC(this,r,A)}get type(){return L.brandCheck(this,t),this[te].type}get url(){L.brandCheck(this,t);let e=this[te].urlList,r=e[e.length-1]??null;return r===null?"":TC(r,!0)}get redirected(){return L.brandCheck(this,t),this[te].urlList.length>1}get status(){return L.brandCheck(this,t),this[te].status}get ok(){return L.brandCheck(this,t),this[te].status>=200&&this[te].status<=299}get statusText(){return L.brandCheck(this,t),this[te].statusText}get headers(){return L.brandCheck(this,t),this[Lt]}get body(){return L.brandCheck(this,t),this[te].body?this[te].body.stream:null}get bodyUsed(){return L.brandCheck(this,t),!!this[te].body&&Gg.isDisturbed(this[te].body.stream)}clone(){if(L.brandCheck(this,t),IN(this))throw L.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let e=Mg(this[te]);return NC&&this[te].body?.stream&&UC.register(this,new WeakRef(this[te].body.stream)),Ss(e,hN(this[Lt]))}[DC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${DC.formatWithOptions(r,A)}`}};BN(Gr);Object.defineProperties(Gr.prototype,{type:Oe,url:Oe,status:Oe,ok:Oe,redirected:Oe,statusText:Oe,headers:Oe,clone:Oe,body:Oe,bodyUsed:Oe,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Gr,{json:Oe,redirect:Oe,error:Oe});function Mg(t){if(t.internalResponse)return GC(Mg(t.internalResponse),t.type);let e=SA({...t,body:null});return t.body!=null&&(e.body=QN(e,t.body)),e}function SA(t){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...t,headersList:t?.headersList?new yC(t?.headersList):new yC,urlList:t?.urlList?[...t.urlList]:[]}}function Dn(t){let e=wN(t);return SA({type:"error",status:0,error:e?t:new Error(t&&String(t)),aborted:t&&t.name==="AbortError"})}function SN(t){return t.type==="error"&&t.status===0}function yn(t,e){return e={internalResponse:t,...e},new Proxy(t,{get(r,A){return A in e?e[A]:r[A]},set(r,A,s){return Lg(!(A in e)),r[A]=s,!0}})}function GC(t,e){if(e==="basic")return yn(t,{type:"basic",headersList:t.headersList});if(e==="cors")return yn(t,{type:"cors",headersList:t.headersList});if(e==="opaque")return yn(t,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(e==="opaqueredirect")return yn(t,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});Lg(!1)}function NN(t,e=null){return Lg(dN(t)),fN(t)?Dn(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:e})):Dn(Object.assign(new DOMException("Request was cancelled."),{cause:e}))}function bC(t,e,r){if(e.status!==null&&(e.status<200||e.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in e&&e.statusText!=null&&!CN(String(e.statusText)))throw new TypeError("Invalid statusText");if("status"in e&&e.status!=null&&(t[te].status=e.status),"statusText"in e&&e.statusText!=null&&(t[te].statusText=e.statusText),"headers"in e&&e.headers!=null&&EN(t[Lt],e.headers),r){if(TN.includes(t.status))throw L.errors.exception({header:"Response constructor",message:`Invalid response status code ${t.status}`});t[te].body=r.body,r.type!=null&&!t[te].headersList.contains("content-type",!0)&&t[te].headersList.append("content-type",r.type,!0)}}function Ss(t,e){let r=new Gr(Rn);return r[te]=t,r[Lt]=new kC(Rn),SC(r[Lt],t.headersList),FC(r[Lt],e),NC&&t.body?.stream&&UC.register(r,new WeakRef(t.body.stream)),r}L.converters.ReadableStream=L.interfaceConverter(ReadableStream);L.converters.FormData=L.interfaceConverter(bN);L.converters.URLSearchParams=L.interfaceConverter(URLSearchParams);L.converters.XMLHttpRequestBodyInit=function(t,e,r){return typeof t=="string"?L.converters.USVString(t,e,r):pN(t)?L.converters.Blob(t,e,r,{strict:!1}):ArrayBuffer.isView(t)||kN.isArrayBuffer(t)?L.converters.BufferSource(t,e,r):Gg.isFormDataLike(t)?L.converters.FormData(t,e,r,{strict:!1}):t instanceof URLSearchParams?L.converters.URLSearchParams(t,e,r):L.converters.DOMString(t,e,r)};L.converters.BodyInit=function(t,e,r){return t instanceof ReadableStream?L.converters.ReadableStream(t,e,r):t?.[Symbol.asyncIterator]?t:L.converters.XMLHttpRequestBodyInit(t,e,r)};L.converters.ResponseInit=L.dictionaryConverter([{key:"status",converter:L.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:L.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:L.converters.HeadersInit}]);LC.exports={isNetworkError:SN,makeNetworkError:Dn,makeResponse:SA,makeAppropriateNetworkError:NN,filterResponse:GC,Response:Gr,cloneResponse:Mg,fromInnerResponse:Ss}});var OC=B((FP,xC)=>{"use strict";var{kConnected:MC,kSize:vC}=$(),vg=class{constructor(e){this.value=e}deref(){return this.value[MC]===0&&this.value[vC]===0?void 0:this.value}},xg=class{constructor(e){this.finalizer=e}register(e,r){e.on&&e.on("disconnect",()=>{e[MC]===0&&e[vC]===0&&this.finalizer(r)})}unregister(e){}};xC.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:vg,FinalizationRegistry:xg}):{WeakRef,FinalizationRegistry}}});var NA=B((SP,ed)=>{"use strict";var{extractBody:UN,mixinBody:GN,cloneBody:LN,bodyUnusable:YC}=cA(),{Headers:ZC,fill:MN,HeadersList:Fn,setHeadersGuard:Yg,getHeadersGuard:vN,setHeadersList:jC,getHeadersList:_C}=Ur(),{FinalizationRegistry:xN}=OC()(),bn=M(),JC=require("node:util"),{isValidHTTPToken:ON,sameOrigin:PC,environmentSettingsObject:Tn}=Ge(),{forbiddenMethodsSet:YN,corsSafeListedMethodsSet:_N,referrerPolicy:JN,requestRedirect:PN,requestMode:HN,requestCredentials:VN,requestCache:qN,requestDuplex:WN}=rs(),{kEnumerableProperty:le,normalizedMethodRecordsBase:zN,normalizedMethodRecords:ZN}=bn,{kHeaders:Ye,kSignal:kn,kState:K,kDispatcher:Og}=Pt(),{webidl:S}=Qe(),{URLSerializer:jN}=Te(),{kConstruct:Sn}=$(),KN=require("node:assert"),{getMaxListeners:HC,setMaxListeners:VC,getEventListeners:XN,defaultMaxListeners:qC}=require("node:events"),$N=Symbol("abortController"),KC=new xN(({signal:t,abort:e})=>{t.removeEventListener("abort",e)}),Nn=new WeakMap;function WC(t){return e;function e(){let r=t.deref();if(r!==void 0){KC.unregister(e),this.removeEventListener("abort",e),r.abort(this.reason);let A=Nn.get(r.signal);if(A!==void 0){if(A.size!==0){for(let s of A){let o=s.deref();o!==void 0&&o.abort(this.reason)}A.clear()}Nn.delete(r.signal)}}}}var zC=!1,er=class t{constructor(e,r={}){if(S.util.markAsUncloneable(this),e===Sn)return;let A="Request constructor";S.argumentLengthCheck(arguments,1,A),e=S.converters.RequestInfo(e,A,"input"),r=S.converters.RequestInit(r,A,"init");let s=null,o=null,n=Tn.settingsObject.baseUrl,i=null;if(typeof e=="string"){this[Og]=r.dispatcher;let Q;try{Q=new URL(e,n)}catch(f){throw new TypeError("Failed to parse URL from "+e,{cause:f})}if(Q.username||Q.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);s=Un({urlList:[Q]}),o="cors"}else this[Og]=r.dispatcher||e[Og],KN(e instanceof t),s=e[K],i=e[kn];let a=Tn.settingsObject.origin,c="client";if(s.window?.constructor?.name==="EnvironmentSettingsObject"&&PC(s.window,a)&&(c=s.window),r.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in r&&(c="no-window"),s=Un({method:s.method,headersList:s.headersList,unsafeRequest:s.unsafeRequest,client:Tn.settingsObject,window:c,priority:s.priority,origin:s.origin,referrer:s.referrer,referrerPolicy:s.referrerPolicy,mode:s.mode,credentials:s.credentials,cache:s.cache,redirect:s.redirect,integrity:s.integrity,keepalive:s.keepalive,reloadNavigation:s.reloadNavigation,historyNavigation:s.historyNavigation,urlList:[...s.urlList]});let g=Object.keys(r).length!==0;if(g&&(s.mode==="navigate"&&(s.mode="same-origin"),s.reloadNavigation=!1,s.historyNavigation=!1,s.origin="client",s.referrer="client",s.referrerPolicy="",s.url=s.urlList[s.urlList.length-1],s.urlList=[s.url]),r.referrer!==void 0){let Q=r.referrer;if(Q==="")s.referrer="no-referrer";else{let f;try{f=new URL(Q,n)}catch(R){throw new TypeError(`Referrer "${Q}" is not a valid URL.`,{cause:R})}f.protocol==="about:"&&f.hostname==="client"||a&&!PC(f,Tn.settingsObject.baseUrl)?s.referrer="client":s.referrer=f}}r.referrerPolicy!==void 0&&(s.referrerPolicy=r.referrerPolicy);let l;if(r.mode!==void 0?l=r.mode:l=o,l==="navigate")throw S.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(l!=null&&(s.mode=l),r.credentials!==void 0&&(s.credentials=r.credentials),r.cache!==void 0&&(s.cache=r.cache),s.cache==="only-if-cached"&&s.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(r.redirect!==void 0&&(s.redirect=r.redirect),r.integrity!=null&&(s.integrity=String(r.integrity)),r.keepalive!==void 0&&(s.keepalive=!!r.keepalive),r.method!==void 0){let Q=r.method,f=ZN[Q];if(f!==void 0)s.method=f;else{if(!ON(Q))throw new TypeError(`'${Q}' is not a valid HTTP method.`);let R=Q.toUpperCase();if(YN.has(R))throw new TypeError(`'${Q}' HTTP method is unsupported.`);Q=zN[R]??Q,s.method=Q}!zC&&s.method==="patch"&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),zC=!0)}r.signal!==void 0&&(i=r.signal),this[K]=s;let u=new AbortController;if(this[kn]=u.signal,i!=null){if(!i||typeof i.aborted!="boolean"||typeof i.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(i.aborted)u.abort(i.reason);else{this[$N]=u;let Q=new WeakRef(u),f=WC(Q);try{(typeof HC=="function"&&HC(i)===qC||XN(i,"abort").length>=qC)&&VC(1500,i)}catch{}bn.addAbortListener(i,f),KC.register(u,{signal:i,abort:f},f)}}if(this[Ye]=new ZC(Sn),jC(this[Ye],s.headersList),Yg(this[Ye],"request"),l==="no-cors"){if(!_N.has(s.method))throw new TypeError(`'${s.method} is unsupported in no-cors mode.`);Yg(this[Ye],"request-no-cors")}if(g){let Q=_C(this[Ye]),f=r.headers!==void 0?r.headers:new Fn(Q);if(Q.clear(),f instanceof Fn){for(let{name:R,value:y}of f.rawValues())Q.append(R,y,!1);Q.cookies=f.cookies}else MN(this[Ye],f)}let E=e instanceof t?e[K].body:null;if((r.body!=null||E!=null)&&(s.method==="GET"||s.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let h=null;if(r.body!=null){let[Q,f]=UN(r.body,s.keepalive);h=Q,f&&!_C(this[Ye]).contains("content-type",!0)&&this[Ye].append("content-type",f)}let C=h??E;if(C!=null&&C.source==null){if(h!=null&&r.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(s.mode!=="same-origin"&&s.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');s.useCORSPreflightFlag=!0}let I=C;if(h==null&&E!=null){if(YC(e))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let Q=new TransformStream;E.stream.pipeThrough(Q),I={source:E.source,length:E.length,stream:Q.readable}}this[K].body=I}get method(){return S.brandCheck(this,t),this[K].method}get url(){return S.brandCheck(this,t),jN(this[K].url)}get headers(){return S.brandCheck(this,t),this[Ye]}get destination(){return S.brandCheck(this,t),this[K].destination}get referrer(){return S.brandCheck(this,t),this[K].referrer==="no-referrer"?"":this[K].referrer==="client"?"about:client":this[K].referrer.toString()}get referrerPolicy(){return S.brandCheck(this,t),this[K].referrerPolicy}get mode(){return S.brandCheck(this,t),this[K].mode}get credentials(){return this[K].credentials}get cache(){return S.brandCheck(this,t),this[K].cache}get redirect(){return S.brandCheck(this,t),this[K].redirect}get integrity(){return S.brandCheck(this,t),this[K].integrity}get keepalive(){return S.brandCheck(this,t),this[K].keepalive}get isReloadNavigation(){return S.brandCheck(this,t),this[K].reloadNavigation}get isHistoryNavigation(){return S.brandCheck(this,t),this[K].historyNavigation}get signal(){return S.brandCheck(this,t),this[kn]}get body(){return S.brandCheck(this,t),this[K].body?this[K].body.stream:null}get bodyUsed(){return S.brandCheck(this,t),!!this[K].body&&bn.isDisturbed(this[K].body.stream)}get duplex(){return S.brandCheck(this,t),"half"}clone(){if(S.brandCheck(this,t),YC(this))throw new TypeError("unusable");let e=XC(this[K]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let A=Nn.get(this.signal);A===void 0&&(A=new Set,Nn.set(this.signal,A));let s=new WeakRef(r);A.add(s),bn.addAbortListener(r.signal,WC(s))}return $C(e,r.signal,vN(this[Ye]))}[JC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${JC.formatWithOptions(r,A)}`}};GN(er);function Un(t){return{method:t.method??"GET",localURLsOnly:t.localURLsOnly??!1,unsafeRequest:t.unsafeRequest??!1,body:t.body??null,client:t.client??null,reservedClient:t.reservedClient??null,replacesClientId:t.replacesClientId??"",window:t.window??"client",keepalive:t.keepalive??!1,serviceWorkers:t.serviceWorkers??"all",initiator:t.initiator??"",destination:t.destination??"",priority:t.priority??null,origin:t.origin??"client",policyContainer:t.policyContainer??"client",referrer:t.referrer??"client",referrerPolicy:t.referrerPolicy??"",mode:t.mode??"no-cors",useCORSPreflightFlag:t.useCORSPreflightFlag??!1,credentials:t.credentials??"same-origin",useCredentials:t.useCredentials??!1,cache:t.cache??"default",redirect:t.redirect??"follow",integrity:t.integrity??"",cryptoGraphicsNonceMetadata:t.cryptoGraphicsNonceMetadata??"",parserMetadata:t.parserMetadata??"",reloadNavigation:t.reloadNavigation??!1,historyNavigation:t.historyNavigation??!1,userActivation:t.userActivation??!1,taintedOrigin:t.taintedOrigin??!1,redirectCount:t.redirectCount??0,responseTainting:t.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:t.preventNoCacheCacheControlHeaderModification??!1,done:t.done??!1,timingAllowFailed:t.timingAllowFailed??!1,urlList:t.urlList,url:t.urlList[0],headersList:t.headersList?new Fn(t.headersList):new Fn}}function XC(t){let e=Un({...t,body:null});return t.body!=null&&(e.body=LN(e,t.body)),e}function $C(t,e,r){let A=new er(Sn);return A[K]=t,A[kn]=e,A[Ye]=new ZC(Sn),jC(A[Ye],t.headersList),Yg(A[Ye],r),A}Object.defineProperties(er.prototype,{method:le,url:le,headers:le,redirect:le,clone:le,signal:le,duplex:le,destination:le,body:le,bodyUsed:le,isHistoryNavigation:le,isReloadNavigation:le,keepalive:le,integrity:le,cache:le,credentials:le,attribute:le,referrerPolicy:le,referrer:le,mode:le,[Symbol.toStringTag]:{value:"Request",configurable:!0}});S.converters.Request=S.interfaceConverter(er);S.converters.RequestInfo=function(t,e,r){return typeof t=="string"?S.converters.USVString(t,e,r):t instanceof er?S.converters.Request(t,e,r):S.converters.USVString(t,e,r)};S.converters.AbortSignal=S.interfaceConverter(AbortSignal);S.converters.RequestInit=S.dictionaryConverter([{key:"method",converter:S.converters.ByteString},{key:"headers",converter:S.converters.HeadersInit},{key:"body",converter:S.nullableConverter(S.converters.BodyInit)},{key:"referrer",converter:S.converters.USVString},{key:"referrerPolicy",converter:S.converters.DOMString,allowedValues:JN},{key:"mode",converter:S.converters.DOMString,allowedValues:HN},{key:"credentials",converter:S.converters.DOMString,allowedValues:VN},{key:"cache",converter:S.converters.DOMString,allowedValues:qN},{key:"redirect",converter:S.converters.DOMString,allowedValues:PN},{key:"integrity",converter:S.converters.DOMString},{key:"keepalive",converter:S.converters.boolean},{key:"signal",converter:S.nullableConverter(t=>S.converters.AbortSignal(t,"RequestInit","signal",{strict:!1}))},{key:"window",converter:S.converters.any},{key:"duplex",converter:S.converters.DOMString,allowedValues:WN},{key:"dispatcher",converter:S.converters.any}]);ed.exports={Request:er,makeRequest:Un,fromInnerRequest:$C,cloneRequest:XC}});var Gs=B((NP,Qd)=>{"use strict";var{makeNetworkError:H,makeAppropriateNetworkError:Gn,filterResponse:_g,makeResponse:Ln,fromInnerResponse:eU}=Ns(),{HeadersList:td}=Ur(),{Request:tU,cloneRequest:rU}=NA(),tr=require("node:zlib"),{bytesMatch:AU,makePolicyContainer:sU,clonePolicyContainer:oU,requestBadPort:nU,TAOCheck:iU,appendRequestOriginHeader:aU,responseLocationURL:cU,requestCurrentURL:ft,setRequestReferrerPolicyOnRedirect:gU,tryUpgradeRequestToAPotentiallyTrustworthyURL:lU,createOpaqueTimingInfo:qg,appendFetchMetadata:uU,corsCheck:EU,crossOriginResourcePolicyCheck:hU,determineRequestsReferrer:QU,coarsenedSharedCurrentTime:Us,createDeferredPromise:BU,isBlobLike:IU,sameOrigin:Vg,isCancelled:Lr,isAborted:rd,isErrorLike:CU,fullyReadBody:dU,readableStreamClose:fU,isomorphicEncode:Mn,urlIsLocal:pU,urlIsHttpHttpsScheme:Wg,urlHasHttpsScheme:mU,clampAndCoarsenConnectionTimingInfo:wU,simpleRangeHeaderValue:yU,buildContentRange:RU,createInflate:DU,extractMimeType:TU}=Ge(),{kState:nd,kDispatcher:bU}=Pt(),Mr=require("node:assert"),{safelyExtractBody:zg,extractBody:Ad}=cA(),{redirectStatusSet:id,nullBodyStatus:ad,safeMethodsSet:kU,requestBodyHeader:FU,subresourceSet:SU}=rs(),NU=require("node:events"),{Readable:UU,pipeline:GU,finished:LU}=require("node:stream"),{addAbortListener:MU,isErrored:vU,isReadable:vn,bufferToLowerCasedHeaderName:sd}=M(),{dataURLProcessor:xU,serializeAMimeType:OU,minimizeSupportedMimeType:YU}=Te(),{getGlobalDispatcher:_U}=fn(),{webidl:JU}=Qe(),{STATUS_CODES:PU}=require("node:http"),HU=["GET","HEAD"],VU=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",Jg,xn=class extends NU{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){this.state==="ongoing"&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}};function qU(t){cd(t,"fetch")}function WU(t,e=void 0){JU.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=BU(),A;try{A=new tU(t,e)}catch(g){return r.reject(g),r.promise}let s=A[nd];if(A.signal.aborted)return Pg(r,s,null,A.signal.reason),r.promise;s.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(s.serviceWorkers="none");let n=null,i=!1,a=null;return MU(A.signal,()=>{i=!0,Mr(a!=null),a.abort(A.signal.reason);let g=n?.deref();Pg(r,s,g,A.signal.reason)}),a=ld({request:s,processResponseEndOfBody:qU,processResponse:g=>{if(!i){if(g.aborted){Pg(r,s,n,a.serializedAbortReason);return}if(g.type==="error"){r.reject(new TypeError("fetch failed",{cause:g.error}));return}n=new WeakRef(eU(g,"immutable")),r.resolve(n.deref()),r=null}},dispatcher:A[bU]}),r.promise}function cd(t,e="other"){if(t.type==="error"&&t.aborted||!t.urlList?.length)return;let r=t.urlList[0],A=t.timingInfo,s=t.cacheState;Wg(r)&&A!==null&&(t.timingAllowPassed||(A=qg({startTime:A.startTime}),s=""),A.endTime=Us(),t.timingInfo=A,gd(A,r.href,e,globalThis,s))}var gd=performance.markResourceTiming;function Pg(t,e,r,A){if(t&&t.reject(A),e.body!=null&&vn(e.body?.stream)&&e.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o}),r==null)return;let s=r[nd];s.body!=null&&vn(s.body?.stream)&&s.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o})}function ld({request:t,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseEndOfBody:s,processResponseConsumeBody:o,useParallelQueue:n=!1,dispatcher:i=_U()}){Mr(i);let a=null,c=!1;t.client!=null&&(a=t.client.globalObject,c=t.client.crossOriginIsolatedCapability);let g=Us(c),l=qg({startTime:g}),u={controller:new xn(i),request:t,timingInfo:l,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseConsumeBody:o,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};return Mr(!t.body||t.body.stream),t.window==="client"&&(t.window=t.client?.globalObject?.constructor?.name==="Window"?t.client:"no-window"),t.origin==="client"&&(t.origin=t.client.origin),t.policyContainer==="client"&&(t.client!=null?t.policyContainer=oU(t.client.policyContainer):t.policyContainer=sU()),t.headersList.contains("accept",!0)||t.headersList.append("accept","*/*",!0),t.headersList.contains("accept-language",!0)||t.headersList.append("accept-language","*",!0),t.priority,SU.has(t.destination),ud(u).catch(E=>{u.controller.terminate(E)}),u.controller}async function ud(t,e=!1){let r=t.request,A=null;if(r.localURLsOnly&&!pU(ft(r))&&(A=H("local URLs only")),lU(r),nU(r)==="blocked"&&(A=H("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=QU(r)),A===null&&(A=await(async()=>{let o=ft(r);return Vg(o,r.url)&&r.responseTainting==="basic"||o.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await od(t)):r.mode==="same-origin"?H('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?H('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await od(t)):Wg(ft(r))?(r.responseTainting="cors",await Ed(t)):H("URL scheme must be a HTTP(S) scheme")})()),e)return A;A.status!==0&&!A.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?A=_g(A,"basic"):r.responseTainting==="cors"?A=_g(A,"cors"):r.responseTainting==="opaque"?A=_g(A,"opaque"):Mr(!1));let s=A.status===0?A:A.internalResponse;if(s.urlList.length===0&&s.urlList.push(...r.urlList),r.timingAllowFailed||(A.timingAllowPassed=!0),A.type==="opaque"&&s.status===206&&s.rangeRequested&&!r.headers.contains("range",!0)&&(A=s=H()),A.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||ad.includes(s.status))&&(s.body=null,t.controller.dump=!0),r.integrity){let o=i=>Hg(t,H(i));if(r.responseTainting==="opaque"||A.body==null){o(A.error);return}let n=i=>{if(!AU(i,r.integrity)){o("integrity mismatch");return}A.body=zg(i)[0],Hg(t,A)};await dU(A.body,n,o)}else Hg(t,A)}function od(t){if(Lr(t)&&t.request.redirectCount===0)return Promise.resolve(Gn(t));let{request:e}=t,{protocol:r}=ft(e);switch(r){case"about:":return Promise.resolve(H("about scheme is not supported"));case"blob:":{Jg||(Jg=require("node:buffer").resolveObjectURL);let A=ft(e);if(A.search.length!==0)return Promise.resolve(H("NetworkError when attempting to fetch resource."));let s=Jg(A.toString());if(e.method!=="GET"||!IU(s))return Promise.resolve(H("invalid method"));let o=Ln(),n=s.size,i=Mn(`${n}`),a=s.type;if(e.headersList.contains("range",!0)){o.rangeRequested=!0;let c=e.headersList.get("range",!0),g=yU(c,!0);if(g==="failure")return Promise.resolve(H("failed to fetch the data URL"));let{rangeStartValue:l,rangeEndValue:u}=g;if(l===null)l=n-u,u=l+u-1;else{if(l>=n)return Promise.resolve(H("Range start is greater than the blob's size."));(u===null||u>=n)&&(u=n-1)}let E=s.slice(l,u,a),h=Ad(E);o.body=h[0];let C=Mn(`${E.size}`),I=RU(l,u,n);o.status=206,o.statusText="Partial Content",o.headersList.set("content-length",C,!0),o.headersList.set("content-type",a,!0),o.headersList.set("content-range",I,!0)}else{let c=Ad(s);o.statusText="OK",o.body=c[0],o.headersList.set("content-length",i,!0),o.headersList.set("content-type",a,!0)}return Promise.resolve(o)}case"data:":{let A=ft(e),s=xU(A);if(s==="failure")return Promise.resolve(H("failed to fetch the data URL"));let o=OU(s.mimeType);return Promise.resolve(Ln({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:o}]],body:zg(s.body)[0]}))}case"file:":return Promise.resolve(H("not implemented... yet..."));case"http:":case"https:":return Ed(t).catch(A=>H(A));default:return Promise.resolve(H("unknown scheme"))}}function zU(t,e){t.request.done=!0,t.processResponseDone!=null&&queueMicrotask(()=>t.processResponseDone(e))}function Hg(t,e){let r=t.timingInfo,A=()=>{let o=Date.now();t.request.destination==="document"&&(t.controller.fullTimingInfo=r),t.controller.reportTimingSteps=()=>{if(t.request.url.protocol!=="https:")return;r.endTime=o;let i=e.cacheState,a=e.bodyInfo;e.timingAllowPassed||(r=qg(r),i="");let c=0;if(t.request.mode!=="navigator"||!e.hasCrossOriginRedirects){c=e.status;let g=TU(e.headersList);g!=="failure"&&(a.contentType=YU(g))}t.request.initiatorType!=null&&gd(r,t.request.url.href,t.request.initiatorType,globalThis,i,a,c)};let n=()=>{t.request.done=!0,t.processResponseEndOfBody!=null&&queueMicrotask(()=>t.processResponseEndOfBody(e)),t.request.initiatorType!=null&&t.controller.reportTimingSteps()};queueMicrotask(()=>n())};t.processResponse!=null&&queueMicrotask(()=>{t.processResponse(e),t.processResponse=null});let s=e.type==="error"?e:e.internalResponse??e;s.body==null?A():LU(s.body.stream,()=>{A()})}async function Ed(t){let e=t.request,r=null,A=null,s=t.timingInfo;if(e.serviceWorkers,r===null){if(e.redirect==="follow"&&(e.serviceWorkers="none"),A=r=await hd(t),e.responseTainting==="cors"&&EU(e,r)==="failure")return H("cors failure");iU(e,r)==="failure"&&(e.timingAllowFailed=!0)}return(e.responseTainting==="opaque"||r.type==="opaque")&&hU(e.origin,e.client,e.destination,A)==="blocked"?H("blocked"):(id.has(A.status)&&(e.redirect!=="manual"&&t.controller.connection.destroy(void 0,!1),e.redirect==="error"?r=H("unexpected redirect"):e.redirect==="manual"?r=A:e.redirect==="follow"?r=await ZU(t,r):Mr(!1)),r.timingInfo=s,r)}function ZU(t,e){let r=t.request,A=e.internalResponse?e.internalResponse:e,s;try{if(s=cU(A,ft(r).hash),s==null)return e}catch(n){return Promise.resolve(H(n))}if(!Wg(s))return Promise.resolve(H("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(H("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(s.username||s.password)&&!Vg(r,s))return Promise.resolve(H('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(s.username||s.password))return Promise.resolve(H('URL cannot contain credentials for request mode "cors"'));if(A.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(H());if([301,302].includes(A.status)&&r.method==="POST"||A.status===303&&!HU.includes(r.method)){r.method="GET",r.body=null;for(let n of FU)r.headersList.delete(n)}Vg(ft(r),s)||(r.headersList.delete("authorization",!0),r.headersList.delete("proxy-authorization",!0),r.headersList.delete("cookie",!0),r.headersList.delete("host",!0)),r.body!=null&&(Mr(r.body.source!=null),r.body=zg(r.body.source)[0]);let o=t.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=Us(t.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(s),gU(r,A),ud(t,!0)}async function hd(t,e=!1,r=!1){let A=t.request,s=null,o=null,n=null,i=null,a=!1;A.window==="no-window"&&A.redirect==="error"?(s=t,o=A):(o=rU(A),s={...t},s.request=o);let c=A.credentials==="include"||A.credentials==="same-origin"&&A.responseTainting==="basic",g=o.body?o.body.length:null,l=null;if(o.body==null&&["POST","PUT"].includes(o.method)&&(l="0"),g!=null&&(l=Mn(`${g}`)),l!=null&&o.headersList.append("content-length",l,!0),g!=null&&o.keepalive,o.referrer instanceof URL&&o.headersList.append("referer",Mn(o.referrer.href),!0),aU(o),uU(o),o.headersList.contains("user-agent",!0)||o.headersList.append("user-agent",VU),o.cache==="default"&&(o.headersList.contains("if-modified-since",!0)||o.headersList.contains("if-none-match",!0)||o.headersList.contains("if-unmodified-since",!0)||o.headersList.contains("if-match",!0)||o.headersList.contains("if-range",!0))&&(o.cache="no-store"),o.cache==="no-cache"&&!o.preventNoCacheCacheControlHeaderModification&&!o.headersList.contains("cache-control",!0)&&o.headersList.append("cache-control","max-age=0",!0),(o.cache==="no-store"||o.cache==="reload")&&(o.headersList.contains("pragma",!0)||o.headersList.append("pragma","no-cache",!0),o.headersList.contains("cache-control",!0)||o.headersList.append("cache-control","no-cache",!0)),o.headersList.contains("range",!0)&&o.headersList.append("accept-encoding","identity",!0),o.headersList.contains("accept-encoding",!0)||(mU(ft(o))?o.headersList.append("accept-encoding","br, gzip, deflate",!0):o.headersList.append("accept-encoding","gzip, deflate",!0)),o.headersList.delete("host",!0),i==null&&(o.cache="no-store"),o.cache!=="no-store"&&o.cache,n==null){if(o.cache==="only-if-cached")return H("only if cached");let u=await jU(s,c,r);!kU.has(o.method)&&u.status>=200&&u.status<=399,a&&u.status,n==null&&(n=u)}if(n.urlList=[...o.urlList],o.headersList.contains("range",!0)&&(n.rangeRequested=!0),n.requestIncludesCredentials=c,n.status===407)return A.window==="no-window"?H():Lr(t)?Gn(t):H("proxy authentication required");if(n.status===421&&!r&&(A.body==null||A.body.source!=null)){if(Lr(t))return Gn(t);t.controller.connection.destroy(),n=await hd(t,e,!0)}return n}async function jU(t,e=!1,r=!1){Mr(!t.controller.connection||t.controller.connection.destroyed),t.controller.connection={abort:null,destroyed:!1,destroy(h,C=!0){this.destroyed||(this.destroyed=!0,C&&this.abort?.(h??new DOMException("The operation was aborted.","AbortError")))}};let A=t.request,s=null,o=t.timingInfo;null==null&&(A.cache="no-store");let i=r?"yes":"no";A.mode;let a=null;if(A.body==null&&t.processRequestEndOfBody)queueMicrotask(()=>t.processRequestEndOfBody());else if(A.body!=null){let h=async function*(Q){Lr(t)||(yield Q,t.processRequestBodyChunkLength?.(Q.byteLength))},C=()=>{Lr(t)||t.processRequestEndOfBody&&t.processRequestEndOfBody()},I=Q=>{Lr(t)||(Q.name==="AbortError"?t.controller.abort():t.controller.terminate(Q))};a=(async function*(){try{for await(let Q of A.body.stream)yield*h(Q);C()}catch(Q){I(Q)}})()}try{let{body:h,status:C,statusText:I,headersList:Q,socket:f}=await E({body:a});if(f)s=Ln({status:C,statusText:I,headersList:Q,socket:f});else{let R=h[Symbol.asyncIterator]();t.controller.next=()=>R.next(),s=Ln({status:C,statusText:I,headersList:Q})}}catch(h){return h.name==="AbortError"?(t.controller.connection.destroy(),Gn(t,h)):H(h)}let c=async()=>{await t.controller.resume()},g=h=>{Lr(t)||t.controller.abort(h)},l=new ReadableStream({async start(h){t.controller.controller=h},async pull(h){await c(h)},async cancel(h){await g(h)},type:"bytes"});s.body={stream:l,source:null,length:null},t.controller.onAborted=u,t.controller.on("terminated",u),t.controller.resume=async()=>{for(;;){let h,C;try{let{done:Q,value:f}=await t.controller.next();if(rd(t))break;h=Q?void 0:f}catch(Q){t.controller.ended&&!o.encodedBodySize?h=void 0:(h=Q,C=!0)}if(h===void 0){fU(t.controller.controller),zU(t,s);return}if(o.decodedBodySize+=h?.byteLength??0,C){t.controller.terminate(h);return}let I=new Uint8Array(h);if(I.byteLength&&t.controller.controller.enqueue(I),vU(l)){t.controller.terminate();return}if(t.controller.controller.desiredSize<=0)return}};function u(h){rd(t)?(s.aborted=!0,vn(l)&&t.controller.controller.error(t.controller.serializedAbortReason)):vn(l)&&t.controller.controller.error(new TypeError("terminated",{cause:CU(h)?h:void 0})),t.controller.connection.destroy()}return s;function E({body:h}){let C=ft(A),I=t.controller.dispatcher;return new Promise((Q,f)=>I.dispatch({path:C.pathname+C.search,origin:C.origin,method:A.method,body:I.isMockActive?A.body&&(A.body.source||A.body.stream):h,headers:A.headersList.entries,maxRedirections:0,upgrade:A.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(R){let{connection:y}=t.controller;o.finalConnectionTimingInfo=wU(void 0,o.postRedirectStartTime,t.crossOriginIsolatedCapability),y.destroyed?R(new DOMException("The operation was aborted.","AbortError")):(t.controller.on("terminated",R),this.abort=y.abort=R),o.finalNetworkRequestStartTime=Us(t.crossOriginIsolatedCapability)},onResponseStarted(){o.finalNetworkResponseStartTime=Us(t.crossOriginIsolatedCapability)},onHeaders(R,y,P,Z){if(R<200)return;let Ae="",gt=new td;for(let De=0;DeWr)return f(new Error(`too many content-encodings in response: ${qr.length}, maximum allowed is ${Wr}`)),!0;for(let Pi=qr.length-1;Pi>=0;--Pi){let lo=qr[Pi].trim();if(lo==="x-gzip"||lo==="gzip")wt.push(tr.createGunzip({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="deflate")wt.push(DU({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="br")wt.push(tr.createBrotliDecompress({flush:tr.constants.BROTLI_OPERATION_FLUSH,finishFlush:tr.constants.BROTLI_OPERATION_FLUSH}));else{wt.length=0;break}}}let _t=this.onError.bind(this);return Q({status:R,statusText:Z,headersList:gt,body:wt.length?GU(this.body,...wt,De=>{De&&this.onError(De)}).on("error",_t):this.body.on("error",_t)}),!0},onData(R){if(t.controller.dump)return;let y=R;return o.encodedBodySize+=y.byteLength,this.body.push(y)},onComplete(){this.abort&&t.controller.off("terminated",this.abort),t.controller.onAborted&&t.controller.off("terminated",t.controller.onAborted),t.controller.ended=!0,this.body.push(null)},onError(R){this.abort&&t.controller.off("terminated",this.abort),this.body?.destroy(R),t.controller.terminate(R),f(R)},onUpgrade(R,y,P){if(R!==101)return;let Z=new td;for(let Ae=0;Ae{"use strict";Bd.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var Cd=B((GP,Id)=>{"use strict";var{webidl:_e}=Qe(),On=Symbol("ProgressEvent state"),jg=class t extends Event{constructor(e,r={}){e=_e.converters.DOMString(e,"ProgressEvent constructor","type"),r=_e.converters.ProgressEventInit(r??{}),super(e,r),this[On]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return _e.brandCheck(this,t),this[On].lengthComputable}get loaded(){return _e.brandCheck(this,t),this[On].loaded}get total(){return _e.brandCheck(this,t),this[On].total}};_e.converters.ProgressEventInit=_e.dictionaryConverter([{key:"lengthComputable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:_e.converters.boolean,defaultValue:()=>!1}]);Id.exports={ProgressEvent:jg}});var fd=B((LP,dd)=>{"use strict";function KU(t){if(!t)return"failure";switch(t.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}dd.exports={getEncoding:KU}});var bd=B((MP,Td)=>{"use strict";var{kState:UA,kError:Kg,kResult:pd,kAborted:Ls,kLastProgressEventFired:Xg}=Zg(),{ProgressEvent:XU}=Cd(),{getEncoding:md}=fd(),{serializeAMimeType:$U,parseMIMEType:wd}=Te(),{types:eG}=require("node:util"),{StringDecoder:yd}=require("string_decoder"),{btoa:Rd}=require("node:buffer"),tG={enumerable:!0,writable:!1,configurable:!1};function rG(t,e,r,A){if(t[UA]==="loading")throw new DOMException("Invalid state","InvalidStateError");t[UA]="loading",t[pd]=null,t[Kg]=null;let o=e.stream().getReader(),n=[],i=o.read(),a=!0;(async()=>{for(;!t[Ls];)try{let{done:c,value:g}=await i;if(a&&!t[Ls]&&queueMicrotask(()=>{rr("loadstart",t)}),a=!1,!c&&eG.isUint8Array(g))n.push(g),(t[Xg]===void 0||Date.now()-t[Xg]>=50)&&!t[Ls]&&(t[Xg]=Date.now(),queueMicrotask(()=>{rr("progress",t)})),i=o.read();else if(c){queueMicrotask(()=>{t[UA]="done";try{let l=AG(n,r,e.type,A);if(t[Ls])return;t[pd]=l,rr("load",t)}catch(l){t[Kg]=l,rr("error",t)}t[UA]!=="loading"&&rr("loadend",t)});break}}catch(c){if(t[Ls])return;queueMicrotask(()=>{t[UA]="done",t[Kg]=c,rr("error",t),t[UA]!=="loading"&&rr("loadend",t)});break}})()}function rr(t,e){let r=new XU(t,{bubbles:!1,cancelable:!1});e.dispatchEvent(r)}function AG(t,e,r,A){switch(e){case"DataURL":{let s="data:",o=wd(r||"application/octet-stream");o!=="failure"&&(s+=$U(o)),s+=";base64,";let n=new yd("latin1");for(let i of t)s+=Rd(n.write(i));return s+=Rd(n.end()),s}case"Text":{let s="failure";if(A&&(s=md(A)),s==="failure"&&r){let o=wd(r);o!=="failure"&&(s=md(o.parameters.get("charset")))}return s==="failure"&&(s="UTF-8"),sG(t,s)}case"ArrayBuffer":return Dd(t).buffer;case"BinaryString":{let s="",o=new yd("latin1");for(let n of t)s+=o.write(n);return s+=o.end(),s}}}function sG(t,e){let r=Dd(t),A=oG(r),s=0;A!==null&&(e=A,s=A==="UTF-8"?3:2);let o=r.slice(s);return new TextDecoder(e).decode(o)}function oG(t){let[e,r,A]=t;return e===239&&r===187&&A===191?"UTF-8":e===254&&r===255?"UTF-16BE":e===255&&r===254?"UTF-16LE":null}function Dd(t){let e=t.reduce((A,s)=>A+s.byteLength,0),r=0;return t.reduce((A,s)=>(A.set(s,r),r+=s.byteLength,A),new Uint8Array(e))}Td.exports={staticPropertyDescriptors:tG,readOperation:rG,fireAProgressEvent:rr}});var Nd=B((vP,Sd)=>{"use strict";var{staticPropertyDescriptors:GA,readOperation:Yn,fireAProgressEvent:kd}=bd(),{kState:vr,kError:Fd,kResult:_n,kEvents:_,kAborted:nG}=Zg(),{webidl:q}=Qe(),{kEnumerableProperty:Fe}=M(),at=class t extends EventTarget{constructor(){super(),this[vr]="empty",this[_n]=null,this[Fd]=null,this[_]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"ArrayBuffer")}readAsBinaryString(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"BinaryString")}readAsText(e,r=void 0){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsText"),e=q.converters.Blob(e,{strict:!1}),r!==void 0&&(r=q.converters.DOMString(r,"FileReader.readAsText","encoding")),Yn(this,e,"Text",r)}readAsDataURL(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"DataURL")}abort(){if(this[vr]==="empty"||this[vr]==="done"){this[_n]=null;return}this[vr]==="loading"&&(this[vr]="done",this[_n]=null),this[nG]=!0,kd("abort",this),this[vr]!=="loading"&&kd("loadend",this)}get readyState(){switch(q.brandCheck(this,t),this[vr]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return q.brandCheck(this,t),this[_n]}get error(){return q.brandCheck(this,t),this[Fd]}get onloadend(){return q.brandCheck(this,t),this[_].loadend}set onloadend(e){q.brandCheck(this,t),this[_].loadend&&this.removeEventListener("loadend",this[_].loadend),typeof e=="function"?(this[_].loadend=e,this.addEventListener("loadend",e)):this[_].loadend=null}get onerror(){return q.brandCheck(this,t),this[_].error}set onerror(e){q.brandCheck(this,t),this[_].error&&this.removeEventListener("error",this[_].error),typeof e=="function"?(this[_].error=e,this.addEventListener("error",e)):this[_].error=null}get onloadstart(){return q.brandCheck(this,t),this[_].loadstart}set onloadstart(e){q.brandCheck(this,t),this[_].loadstart&&this.removeEventListener("loadstart",this[_].loadstart),typeof e=="function"?(this[_].loadstart=e,this.addEventListener("loadstart",e)):this[_].loadstart=null}get onprogress(){return q.brandCheck(this,t),this[_].progress}set onprogress(e){q.brandCheck(this,t),this[_].progress&&this.removeEventListener("progress",this[_].progress),typeof e=="function"?(this[_].progress=e,this.addEventListener("progress",e)):this[_].progress=null}get onload(){return q.brandCheck(this,t),this[_].load}set onload(e){q.brandCheck(this,t),this[_].load&&this.removeEventListener("load",this[_].load),typeof e=="function"?(this[_].load=e,this.addEventListener("load",e)):this[_].load=null}get onabort(){return q.brandCheck(this,t),this[_].abort}set onabort(e){q.brandCheck(this,t),this[_].abort&&this.removeEventListener("abort",this[_].abort),typeof e=="function"?(this[_].abort=e,this.addEventListener("abort",e)):this[_].abort=null}};at.EMPTY=at.prototype.EMPTY=0;at.LOADING=at.prototype.LOADING=1;at.DONE=at.prototype.DONE=2;Object.defineProperties(at.prototype,{EMPTY:GA,LOADING:GA,DONE:GA,readAsArrayBuffer:Fe,readAsBinaryString:Fe,readAsText:Fe,readAsDataURL:Fe,abort:Fe,readyState:Fe,result:Fe,error:Fe,onloadstart:Fe,onprogress:Fe,onload:Fe,onabort:Fe,onerror:Fe,onloadend:Fe,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(at,{EMPTY:GA,LOADING:GA,DONE:GA});Sd.exports={FileReader:at}});var Jn=B((xP,Ud)=>{"use strict";Ud.exports={kConstruct:$().kConstruct}});var Md=B((OP,Ld)=>{"use strict";var iG=require("node:assert"),{URLSerializer:Gd}=Te(),{isValidHeaderName:aG}=Ge();function cG(t,e,r=!1){let A=Gd(t,r),s=Gd(e,r);return A===s}function gG(t){iG(t!==null);let e=[];for(let r of t.split(","))r=r.trim(),aG(r)&&e.push(r);return e}Ld.exports={urlEquals:cG,getFieldValues:gG}});var Od=B((YP,xd)=>{"use strict";var{kConstruct:lG}=Jn(),{urlEquals:uG,getFieldValues:$g}=Md(),{kEnumerableProperty:xr,isDisturbed:EG}=M(),{webidl:T}=Qe(),{Response:hG,cloneResponse:QG,fromInnerResponse:BG}=Ns(),{Request:Mt,fromInnerRequest:IG}=NA(),{kState:ct}=Pt(),{fetching:CG}=Gs(),{urlIsHttpHttpsScheme:Pn,createDeferredPromise:LA,readAllBytes:dG}=Ge(),el=require("node:assert"),Hn=class t{#e;constructor(){arguments[0]!==lG&&T.illegalConstructor(),T.util.markAsUncloneable(this),this.#e=arguments[1]}async match(e,r={}){T.brandCheck(this,t);let A="Cache.match";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=this.#s(e,r,1);if(s.length!==0)return s[0]}async matchAll(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.matchAll";return e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options"),this.#s(e,r)}async add(e){T.brandCheck(this,t);let r="Cache.add";T.argumentLengthCheck(arguments,1,r),e=T.converters.RequestInfo(e,r,"request");let A=[e];return await this.addAll(A)}async addAll(e){T.brandCheck(this,t);let r="Cache.addAll";T.argumentLengthCheck(arguments,1,r);let A=[],s=[];for(let u of e){if(u===void 0)throw T.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(u=T.converters.RequestInfo(u),typeof u=="string")continue;let E=u[ct];if(!Pn(E.url)||E.method!=="GET")throw T.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let o=[];for(let u of e){let E=new Mt(u)[ct];if(!Pn(E.url))throw T.errors.exception({header:r,message:"Expected http/s scheme."});E.initiator="fetch",E.destination="subresource",s.push(E);let h=LA();o.push(CG({request:E,processResponse(C){if(C.type==="error"||C.status===206||C.status<200||C.status>299)h.reject(T.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(C.headersList.contains("vary")){let I=$g(C.headersList.get("vary"));for(let Q of I)if(Q==="*"){h.reject(T.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let f of o)f.abort();return}}},processResponseEndOfBody(C){if(C.aborted){h.reject(new DOMException("aborted","AbortError"));return}h.resolve(C)}})),A.push(h.promise)}let i=await Promise.all(A),a=[],c=0;for(let u of i){let E={type:"put",request:s[c],response:u};a.push(E),c++}let g=LA(),l=null;try{this.#t(a)}catch(u){l=u}return queueMicrotask(()=>{l===null?g.resolve(void 0):g.reject(l)}),g.promise}async put(e,r){T.brandCheck(this,t);let A="Cache.put";T.argumentLengthCheck(arguments,2,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.Response(r,A,"response");let s=null;if(e instanceof Mt?s=e[ct]:s=new Mt(e)[ct],!Pn(s.url)||s.method!=="GET")throw T.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});let o=r[ct];if(o.status===206)throw T.errors.exception({header:A,message:"Got 206 status"});if(o.headersList.contains("vary")){let E=$g(o.headersList.get("vary"));for(let h of E)if(h==="*")throw T.errors.exception({header:A,message:"Got * vary field value"})}if(o.body&&(EG(o.body.stream)||o.body.stream.locked))throw T.errors.exception({header:A,message:"Response body is locked or disturbed"});let n=QG(o),i=LA();if(o.body!=null){let h=o.body.stream.getReader();dG(h).then(i.resolve,i.reject)}else i.resolve(void 0);let a=[],c={type:"put",request:s,response:n};a.push(c);let g=await i.promise;n.body!=null&&(n.body.source=g);let l=LA(),u=null;try{this.#t(a)}catch(E){u=E}return queueMicrotask(()=>{u===null?l.resolve():l.reject(u)}),l.promise}async delete(e,r={}){T.brandCheck(this,t);let A="Cache.delete";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return!1}else el(typeof e=="string"),s=new Mt(e)[ct];let o=[],n={type:"delete",request:s,options:r};o.push(n);let i=LA(),a=null,c;try{c=this.#t(o)}catch(g){a=g}return queueMicrotask(()=>{a===null?i.resolve(!!c?.length):i.reject(a)}),i.promise}async keys(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.keys";e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=LA(),n=[];if(e===void 0)for(let i of this.#e)n.push(i[0]);else{let i=this.#r(s,r);for(let a of i)n.push(a[0])}return queueMicrotask(()=>{let i=[];for(let a of n){let c=IG(a,new AbortController().signal,"immutable");i.push(c)}o.resolve(Object.freeze(i))}),o.promise}#t(e){let r=this.#e,A=[...r],s=[],o=[];try{for(let n of e){if(n.type!=="delete"&&n.type!=="put")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(n.type==="delete"&&n.response!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#r(n.request,n.options,s).length)throw new DOMException("???","InvalidStateError");let i;if(n.type==="delete"){if(i=this.#r(n.request,n.options),i.length===0)return[];for(let a of i){let c=r.indexOf(a);el(c!==-1),r.splice(c,1)}}else if(n.type==="put"){if(n.response==null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=n.request;if(!Pn(a.url))throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(n.options!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});i=this.#r(n.request);for(let c of i){let g=r.indexOf(c);el(g!==-1),r.splice(g,1)}r.push([n.request,n.response]),s.push([n.request,n.response])}o.push([n.request,n.response])}return o}catch(n){throw this.#e.length=0,this.#e=A,n}}#r(e,r,A){let s=[],o=A??this.#e;for(let n of o){let[i,a]=n;this.#o(e,i,a,r)&&s.push(n)}return s}#o(e,r,A=null,s){let o=new URL(e.url),n=new URL(r.url);if(s?.ignoreSearch&&(n.search="",o.search=""),!uG(o,n,!0))return!1;if(A==null||s?.ignoreVary||!A.headersList.contains("vary"))return!0;let i=$g(A.headersList.get("vary"));for(let a of i){if(a==="*")return!1;let c=r.headersList.get(a),g=e.headersList.get(a);if(c!==g)return!1}return!0}#s(e,r,A=1/0){let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=[];if(e===void 0)for(let i of this.#e)o.push(i[1]);else{let i=this.#r(s,r);for(let a of i)o.push(a[1])}let n=[];for(let i of o){let a=BG(i,"immutable");if(n.push(a.clone()),n.length>=A)break}return Object.freeze(n)}};Object.defineProperties(Hn.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:xr,matchAll:xr,add:xr,addAll:xr,put:xr,delete:xr,keys:xr});var vd=[{key:"ignoreSearch",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:T.converters.boolean,defaultValue:()=>!1}];T.converters.CacheQueryOptions=T.dictionaryConverter(vd);T.converters.MultiCacheQueryOptions=T.dictionaryConverter([...vd,{key:"cacheName",converter:T.converters.DOMString}]);T.converters.Response=T.interfaceConverter(hG);T.converters["sequence"]=T.sequenceConverter(T.converters.RequestInfo);xd.exports={Cache:Hn}});var _d=B((_P,Yd)=>{"use strict";var{kConstruct:Ms}=Jn(),{Cache:Vn}=Od(),{webidl:de}=Qe(),{kEnumerableProperty:vs}=M(),qn=class t{#e=new Map;constructor(){arguments[0]!==Ms&&de.illegalConstructor(),de.util.markAsUncloneable(this)}async match(e,r={}){if(de.brandCheck(this,t),de.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=de.converters.RequestInfo(e),r=de.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let A=this.#e.get(r.cacheName);return await new Vn(Ms,A).match(e,r)}}else for(let A of this.#e.values()){let o=await new Vn(Ms,A).match(e,r);if(o!==void 0)return o}}async has(e){de.brandCheck(this,t);let r="CacheStorage.has";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)}async open(e){de.brandCheck(this,t);let r="CacheStorage.open";if(de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)){let s=this.#e.get(e);return new Vn(Ms,s)}let A=[];return this.#e.set(e,A),new Vn(Ms,A)}async delete(e){de.brandCheck(this,t);let r="CacheStorage.delete";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.delete(e)}async keys(){return de.brandCheck(this,t),[...this.#e.keys()]}};Object.defineProperties(qn.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:vs,has:vs,open:vs,delete:vs,keys:vs});Yd.exports={CacheStorage:qn}});var Pd=B((JP,Jd)=>{"use strict";Jd.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var Al=B((PP,Wd)=>{"use strict";function fG(t){for(let e=0;e=0&&r<=8||r>=10&&r<=31||r===127)return!0}return!1}function tl(t){for(let e=0;e126||r===34||r===40||r===41||r===60||r===62||r===64||r===44||r===59||r===58||r===92||r===47||r===91||r===93||r===63||r===61||r===123||r===125)throw new Error("Invalid cookie name")}}function rl(t){let e=t.length,r=0;if(t[0]==='"'){if(e===1||t[e-1]!=='"')throw new Error("Invalid cookie value");--e,++r}for(;r126||A===34||A===44||A===59||A===92)throw new Error("Invalid cookie value")}}function Vd(t){for(let e=0;e126||r===59)throw new Error("Invalid cookie path")}}function Hd(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function pG(t){if(t===" ")return;if(t.length>255)throw new Error("Invalid cookie domain");let e=0;for(let r=0;r63)throw new Error("Invalid cookie domain")}if(e===0||t.charCodeAt(t.length-1)===45)throw new Error("Invalid cookie domain")}var mG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wn=Array(61).fill(0).map((t,e)=>e.toString().padStart(2,"0"));function qd(t){return typeof t=="number"&&(t=new Date(t)),`${mG[t.getUTCDay()]}, ${Wn[t.getUTCDate()]} ${wG[t.getUTCMonth()]} ${t.getUTCFullYear()} ${Wn[t.getUTCHours()]}:${Wn[t.getUTCMinutes()]}:${Wn[t.getUTCSeconds()]} GMT`}function yG(t){if(t<0)throw new Error("Invalid cookie max-age")}function RG(t){if(t.name.length===0)return null;tl(t.name),rl(t.value);let e=[`${t.name}=${t.value}`];t.name.startsWith("__Secure-")&&(t.secure=!0),t.name.startsWith("__Host-")&&(t.secure=!0,t.domain=null,t.path="/"),t.secure&&e.push("Secure"),t.httpOnly&&e.push("HttpOnly"),typeof t.maxAge=="number"&&(yG(t.maxAge),e.push(`Max-Age=${t.maxAge}`)),t.domain&&(pG(t.domain),e.push(`Domain=${t.domain}`)),t.path&&(Vd(t.path),e.push(`Path=${t.path}`)),t.expires&&t.expires.toString()!=="Invalid Date"&&e.push(`Expires=${qd(t.expires)}`),t.sameSite&&e.push(`SameSite=${t.sameSite}`);for(let r of t.unparsed){if(!r.includes("="))throw new Error("Invalid unparsed");let[A,...s]=r.split("="),o=A.trim(),n=s.join("=");tl(o),rl(n),e.push(`${o}=${n}`)}return e.join("; ")}Wd.exports={isCTLExcludingHtab:fG,validateCookieName:tl,validateCookiePath:Vd,validateCookieValue:rl,toIMFDate:qd,stringify:RG}});var Zd=B((HP,zd)=>{"use strict";var{maxNameValuePairSize:DG,maxAttributeValueSize:TG}=Pd(),{isCTLExcludingHtab:bG}=Al(),{collectASequenceOfCodePointsFast:zn}=Te(),kG=require("node:assert");function FG(t){if(bG(t))return null;let e="",r="",A="",s="";if(t.includes(";")){let o={position:0};e=zn(";",t,o),r=t.slice(o.position)}else e=t;if(!e.includes("="))s=e;else{let o={position:0};A=zn("=",e,o),s=e.slice(o.position+1)}return A=A.trim(),s=s.trim(),A.length+s.length>DG?null:{name:A,value:s,...MA(r)}}function MA(t,e={}){if(t.length===0)return e;kG(t[0]===";"),t=t.slice(1);let r="";t.includes(";")?(r=zn(";",t,{position:0}),t=t.slice(r.length)):(r=t,t="");let A="",s="";if(r.includes("=")){let n={position:0};A=zn("=",r,n),s=r.slice(n.position+1)}else A=r;if(A=A.trim(),s=s.trim(),s.length>TG)return MA(t,e);let o=A.toLowerCase();if(o==="expires"){let n=new Date(s);e.expires=n}else if(o==="max-age"){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!=="-"||!/^\d+$/.test(s))return MA(t,e);let i=Number(s);e.maxAge=i}else if(o==="domain"){let n=s;n[0]==="."&&(n=n.slice(1)),n=n.toLowerCase(),e.domain=n}else if(o==="path"){let n="";s.length===0||s[0]!=="/"?n="/":n=s,e.path=n}else if(o==="secure")e.secure=!0;else if(o==="httponly")e.httpOnly=!0;else if(o==="samesite"){let n=s.toLowerCase();n==="none"?e.sameSite="None":n==="strict"?e.sameSite="Strict":n==="lax"&&(e.sameSite="Lax")}else e.unparsed??=[],e.unparsed.push(`${A}=${s}`);return MA(t,e)}zd.exports={parseSetCookie:FG,parseUnparsedAttributes:MA}});var Xd=B((VP,Kd)=>{"use strict";var{parseSetCookie:SG}=Zd(),{stringify:NG}=Al(),{webidl:x}=Qe(),{Headers:Zn}=Ur();function UG(t){x.argumentLengthCheck(arguments,1,"getCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.get("cookie"),r={};if(!e)return r;for(let A of e.split(";")){let[s,...o]=A.split("=");r[s.trim()]=o.join("=")}return r}function GG(t,e,r){x.brandCheck(t,Zn,{strict:!1});let A="deleteCookie";x.argumentLengthCheck(arguments,2,A),e=x.converters.DOMString(e,A,"name"),r=x.converters.DeleteCookieAttributes(r),jd(t,{name:e,value:"",expires:new Date(0),...r})}function LG(t){x.argumentLengthCheck(arguments,1,"getSetCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.getSetCookie();return e?e.map(r=>SG(r)):[]}function jd(t,e){x.argumentLengthCheck(arguments,2,"setCookie"),x.brandCheck(t,Zn,{strict:!1}),e=x.converters.Cookie(e);let r=NG(e);r&&t.append("Set-Cookie",r)}x.converters.DeleteCookieAttributes=x.dictionaryConverter([{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null}]);x.converters.Cookie=x.dictionaryConverter([{converter:x.converters.DOMString,key:"name"},{converter:x.converters.DOMString,key:"value"},{converter:x.nullableConverter(t=>typeof t=="number"?x.converters["unsigned long long"](t):new Date(t)),key:"expires",defaultValue:()=>null},{converter:x.nullableConverter(x.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"secure",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:x.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:x.sequenceConverter(x.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);Kd.exports={getCookies:UG,deleteCookie:GG,getSetCookies:LG,setCookie:jd}});var xA=B((qP,ef)=>{"use strict";var{webidl:D}=Qe(),{kEnumerableProperty:Se}=M(),{kConstruct:$d}=$(),{MessagePort:MG}=require("node:worker_threads"),vA=class t extends Event{#e;constructor(e,r={}){if(e===$d){super(arguments[1],arguments[2]),D.util.markAsUncloneable(this);return}let A="MessageEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.MessageEventInit(r,A,"eventInitDict"),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get data(){return D.brandCheck(this,t),this.#e.data}get origin(){return D.brandCheck(this,t),this.#e.origin}get lastEventId(){return D.brandCheck(this,t),this.#e.lastEventId}get source(){return D.brandCheck(this,t),this.#e.source}get ports(){return D.brandCheck(this,t),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(e,r=!1,A=!1,s=null,o="",n="",i=null,a=[]){return D.brandCheck(this,t),D.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new t(e,{bubbles:r,cancelable:A,data:s,origin:o,lastEventId:n,source:i,ports:a})}static createFastMessageEvent(e,r){let A=new t($d,e,r);return A.#e=r,A.#e.data??=null,A.#e.origin??="",A.#e.lastEventId??="",A.#e.source??=null,A.#e.ports??=[],A}},{createFastMessageEvent:vG}=vA;delete vA.createFastMessageEvent;var jn=class t extends Event{#e;constructor(e,r={}){let A="CloseEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.CloseEventInit(r),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get wasClean(){return D.brandCheck(this,t),this.#e.wasClean}get code(){return D.brandCheck(this,t),this.#e.code}get reason(){return D.brandCheck(this,t),this.#e.reason}},Kn=class t extends Event{#e;constructor(e,r){let A="ErrorEvent constructor";D.argumentLengthCheck(arguments,1,A),super(e,r),D.util.markAsUncloneable(this),e=D.converters.DOMString(e,A,"type"),r=D.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return D.brandCheck(this,t),this.#e.message}get filename(){return D.brandCheck(this,t),this.#e.filename}get lineno(){return D.brandCheck(this,t),this.#e.lineno}get colno(){return D.brandCheck(this,t),this.#e.colno}get error(){return D.brandCheck(this,t),this.#e.error}};Object.defineProperties(vA.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:Se,origin:Se,lastEventId:Se,source:Se,ports:Se,initMessageEvent:Se});Object.defineProperties(jn.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:Se,code:Se,wasClean:Se});Object.defineProperties(Kn.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:Se,filename:Se,lineno:Se,colno:Se,error:Se});D.converters.MessagePort=D.interfaceConverter(MG);D.converters["sequence"]=D.sequenceConverter(D.converters.MessagePort);var sl=[{key:"bubbles",converter:D.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:D.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:D.converters.boolean,defaultValue:()=>!1}];D.converters.MessageEventInit=D.dictionaryConverter([...sl,{key:"data",converter:D.converters.any,defaultValue:()=>null},{key:"origin",converter:D.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:D.converters.DOMString,defaultValue:()=>""},{key:"source",converter:D.nullableConverter(D.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:D.converters["sequence"],defaultValue:()=>new Array(0)}]);D.converters.CloseEventInit=D.dictionaryConverter([...sl,{key:"wasClean",converter:D.converters.boolean,defaultValue:()=>!1},{key:"code",converter:D.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:D.converters.USVString,defaultValue:()=>""}]);D.converters.ErrorEventInit=D.dictionaryConverter([...sl,{key:"message",converter:D.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:D.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:D.converters.any}]);ef.exports={MessageEvent:vA,CloseEvent:jn,ErrorEvent:Kn,createFastMessageEvent:vG}});var Or=B((WP,tf)=>{"use strict";var xG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",OG={enumerable:!0,writable:!1,configurable:!1},YG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},_G={NOT_SENT:0,PROCESSING:1,SENT:2},JG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},PG=2**16-1,HG={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},VG=Buffer.allocUnsafe(0),qG={string:1,typedArray:2,arrayBuffer:3,blob:4};tf.exports={uid:xG,sentCloseFrameState:_G,staticPropertyDescriptors:OG,states:YG,opcodes:JG,maxUnsigned16Bit:PG,parserStates:HG,emptyBuffer:VG,sendHints:qG}});var xs=B((zP,rf)=>{"use strict";rf.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var _s=B((ZP,uf)=>{"use strict";var{kReadyState:Os,kController:WG,kResponse:zG,kBinaryType:ZG,kWebSocketURL:jG}=xs(),{states:Ys,opcodes:Ar}=Or(),{ErrorEvent:KG,createFastMessageEvent:XG}=xA(),{isUtf8:$G}=require("node:buffer"),{collectASequenceOfCodePointsFast:eL,removeHTTPWhitespace:Af}=Te();function tL(t){return t[Os]===Ys.CONNECTING}function rL(t){return t[Os]===Ys.OPEN}function AL(t){return t[Os]===Ys.CLOSING}function sL(t){return t[Os]===Ys.CLOSED}function ol(t,e,r=(s,o)=>new Event(s,o),A={}){let s=r(t,A);e.dispatchEvent(s)}function oL(t,e,r){if(t[Os]!==Ys.OPEN)return;let A;if(e===Ar.TEXT)try{A=lf(r)}catch{of(t,"Received invalid UTF-8 in text frame.");return}else e===Ar.BINARY&&(t[ZG]==="blob"?A=new Blob([r]):A=nL(r));ol("message",t,XG,{origin:t[jG].origin,data:A})}function nL(t){return t.byteLength===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function iL(t){if(t.length===0)return!1;for(let e=0;e126||r===34||r===40||r===41||r===44||r===47||r===58||r===59||r===60||r===61||r===62||r===63||r===64||r===91||r===92||r===93||r===123||r===125)return!1}return!0}function aL(t){return t>=1e3&&t<1015?t!==1004&&t!==1005&&t!==1006:t>=3e3&&t<=4999}function of(t,e){let{[WG]:r,[zG]:A}=t;r.abort(),A?.socket&&!A.socket.destroyed&&A.socket.destroy(),e&&ol("error",t,(s,o)=>new KG(s,o),{error:new Error(e),message:e})}function nf(t){return t===Ar.CLOSE||t===Ar.PING||t===Ar.PONG}function af(t){return t===Ar.CONTINUATION}function cf(t){return t===Ar.TEXT||t===Ar.BINARY}function cL(t){return cf(t)||af(t)||nf(t)}function gL(t){let e={position:0},r=new Map;for(;e.position57)return!1}let e=Number.parseInt(t,10);return e>=8&&e<=15}var gf=typeof process.versions.icu=="string",sf=gf?new TextDecoder("utf-8",{fatal:!0}):void 0,lf=gf?sf.decode.bind(sf):function(t){if($G(t))return t.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};uf.exports={isConnecting:tL,isEstablished:rL,isClosing:AL,isClosed:sL,fireEvent:ol,isValidSubprotocol:iL,isValidStatusCode:aL,failWebsocketConnection:of,websocketMessageReceived:oL,utf8Decode:lf,isControlFrame:nf,isContinuationFrame:af,isTextBinaryFrame:cf,isValidOpcode:cL,parseExtensions:gL,isValidClientWindowBits:lL}});var $n=B((jP,Ef)=>{"use strict";var{maxUnsigned16Bit:uL}=Or(),Xn=16386,nl,Js=null,OA=Xn;try{nl=require("node:crypto")}catch{nl={randomFillSync:function(e,r,A){for(let s=0;suL?(n+=8,o=127):s>125&&(n+=2,o=126);let i=Buffer.allocUnsafe(s+n);i[0]=i[1]=0,i[0]|=128,i[0]=(i[0]&240)+e;i[n-4]=A[0],i[n-3]=A[1],i[n-2]=A[2],i[n-1]=A[3],i[1]=o,o===126?i.writeUInt16BE(s,2):o===127&&(i[2]=i[3]=0,i.writeUIntBE(s,4,6)),i[1]|=128;for(let a=0;a{"use strict";var{uid:hL,states:Ps,sentCloseFrameState:ei,emptyBuffer:QL,opcodes:BL}=Or(),{kReadyState:Hs,kSentClose:ti,kByteParser:Qf,kReceivedClose:hf,kResponse:Bf}=xs(),{fireEvent:IL,failWebsocketConnection:sr,isClosing:CL,isClosed:dL,isEstablished:fL,parseExtensions:pL}=_s(),{channels:YA}=jr(),{CloseEvent:mL}=xA(),{makeRequest:wL}=NA(),{fetching:yL}=Gs(),{Headers:RL,getHeadersList:DL}=Ur(),{getDecodeSplit:TL}=Ge(),{WebsocketFrameSend:bL}=$n(),al;try{al=require("node:crypto")}catch{}function kL(t,e,r,A,s,o){let n=t;n.protocol=t.protocol==="ws:"?"http:":"https:";let i=wL({urlList:[n],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(o.headers){let l=DL(new RL(o.headers));i.headersList=l}let a=al.randomBytes(16).toString("base64");i.headersList.append("sec-websocket-key",a),i.headersList.append("sec-websocket-version","13");for(let l of e)i.headersList.append("sec-websocket-protocol",l);return i.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),yL({request:i,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(l){if(l.type==="error"||l.status!==101){sr(A,"Received network error or non-101 status code.");return}if(e.length!==0&&!l.headersList.get("Sec-WebSocket-Protocol")){sr(A,"Server did not respond with sent protocols.");return}if(l.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){sr(A,'Server did not set Upgrade header to "websocket".');return}if(l.headersList.get("Connection")?.toLowerCase()!=="upgrade"){sr(A,'Server did not set Connection header to "upgrade".');return}let u=l.headersList.get("Sec-WebSocket-Accept"),E=al.createHash("sha1").update(a+hL).digest("base64");if(u!==E){sr(A,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let h=l.headersList.get("Sec-WebSocket-Extensions"),C;if(h!==null&&(C=pL(h),!C.has("permessage-deflate"))){sr(A,"Sec-WebSocket-Extensions header does not match.");return}let I=l.headersList.get("Sec-WebSocket-Protocol");if(I!==null&&!TL("sec-websocket-protocol",i.headersList).includes(I)){sr(A,"Protocol was not set in the opening handshake.");return}l.socket.on("data",If),l.socket.on("close",Cf),l.socket.on("error",df),YA.open.hasSubscribers&&YA.open.publish({address:l.socket.address(),protocol:I,extensions:h}),s(l,C)}})}function FL(t,e,r,A){if(!(CL(t)||dL(t)))if(!fL(t))sr(t,"Connection was closed before it was established."),t[Hs]=Ps.CLOSING;else if(t[ti]===ei.NOT_SENT){t[ti]=ei.PROCESSING;let s=new bL;e!==void 0&&r===void 0?(s.frameData=Buffer.allocUnsafe(2),s.frameData.writeUInt16BE(e,0)):e!==void 0&&r!==void 0?(s.frameData=Buffer.allocUnsafe(2+A),s.frameData.writeUInt16BE(e,0),s.frameData.write(r,2,"utf-8")):s.frameData=QL,t[Bf].socket.write(s.createFrame(BL.CLOSE)),t[ti]=ei.SENT,t[Hs]=Ps.CLOSING}else t[Hs]=Ps.CLOSING}function If(t){this.ws[Qf].write(t)||this.pause()}function Cf(){let{ws:t}=this,{[Bf]:e}=t;e.socket.off("data",If),e.socket.off("close",Cf),e.socket.off("error",df);let r=t[ti]===ei.SENT&&t[hf],A=1005,s="",o=t[Qf].closingInfo;o&&!o.error?(A=o.code??1005,s=o.reason):t[hf]||(A=1006),t[Hs]=Ps.CLOSED,IL("close",t,(n,i)=>new mL(n,i),{wasClean:r,code:A,reason:s}),YA.close.hasSubscribers&&YA.close.publish({websocket:t,code:A,reason:s})}function df(t){let{ws:e}=this;e[Hs]=Ps.CLOSING,YA.socketError.hasSubscribers&&YA.socketError.publish(t),this.destroy()}ff.exports={establishWebSocketConnection:kL,closeWebSocketConnection:FL}});var mf=B((XP,pf)=>{"use strict";var{createInflateRaw:SL,Z_DEFAULT_WINDOWBITS:NL}=require("node:zlib"),{isValidClientWindowBits:UL}=_s(),{MessageSizeExceededError:GL}=Y(),LL=Buffer.from([0,0,255,255]),ri=Symbol("kBuffer"),Vs=Symbol("kLength"),gl=class{#e;#t={};#r=0;constructor(e,r){this.#t.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=e.get("server_max_window_bits"),this.#r=r.maxPayloadSize}decompress(e,r,A){if(!this.#e){let s=NL;if(this.#t.serverMaxWindowBits){if(!UL(this.#t.serverMaxWindowBits)){A(new Error("Invalid server_max_window_bits"));return}s=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=SL({windowBits:s})}catch(o){A(o);return}this.#e[ri]=[],this.#e[Vs]=0,this.#e.on("data",o=>{if(this.#e[Vs]+=o.length,this.#r>0&&this.#e[Vs]>this.#r){A(new GL),this.#e.removeAllListeners(),this.#e=null;return}this.#e[ri].push(o)}),this.#e.on("error",o=>{this.#e=null,A(o)})}this.#e.write(e),r&&this.#e.write(LL),this.#e.flush(()=>{if(!this.#e)return;let s=Buffer.concat(this.#e[ri],this.#e[Vs]);this.#e[ri].length=0,this.#e[Vs]=0,A(null,s)})}};pf.exports={PerMessageDeflate:gl}});var Nf=B(($P,Sf)=>{"use strict";var{Writable:ML}=require("node:stream"),vL=require("node:assert"),{parserStates:Ne,opcodes:_A,states:xL,emptyBuffer:wf,sentCloseFrameState:yf}=Or(),{kReadyState:OL,kSentClose:Rf,kResponse:Df,kReceivedClose:Tf}=xs(),{channels:Ai}=jr(),{isValidStatusCode:YL,isValidOpcode:_L,failWebsocketConnection:Je,websocketMessageReceived:bf,utf8Decode:JL,isControlFrame:ll,isTextBinaryFrame:ul,isContinuationFrame:PL}=_s(),{WebsocketFrameSend:kf}=$n(),{closeWebSocketConnection:Ff}=cl(),{PerMessageDeflate:HL}=mf(),{MessageSizeExceededError:El}=Y();function qs(t,e,r){Ff(t,e,r,Buffer.byteLength(r)),Je(t,r)}var hl=class extends ML{#e=[];#t=0;#r=0;#o=!1;#s=Ne.INFO;#A={};#n=[];#i;#c;#a;constructor(e,r,A={}){super(),this.ws=e,this.#i=r??new Map,this.#c=A.maxFragments??0,this.#a=A.maxPayloadSize??0,this.#i.has("permessage-deflate")&&this.#i.set("permessage-deflate",new HL(r,A))}_write(e,r,A){this.#e.push(e),this.#r+=e.length,this.#o=!0,this.run(A)}#g(){return this.#a>0&&!ll(this.#A.opcode)&&this.#A.payloadLength+this.#t>this.#a?(qs(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(e){for(;this.#o;)if(this.#s===Ne.INFO){if(this.#r<2)return e();let r=this.consume(2),A=(r[0]&128)!==0,s=r[0]&15,o=(r[1]&128)===128,n=!A&&s!==_A.CONTINUATION,i=r[1]&127,a=r[0]&64,c=r[0]&32,g=r[0]&16;if(!_L(s))return Je(this.ws,"Invalid opcode received"),e();if(o)return Je(this.ws,"Frame cannot be masked"),e();if(a!==0&&!this.#i.has("permessage-deflate")){Je(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||g!==0){Je(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(n&&!ul(s)){Je(this.ws,"Invalid frame type was fragmented.");return}if(ul(s)&&this.#n.length>0){Je(this.ws,"Expected continuation frame");return}if(this.#A.fragmented&&n){Je(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((i>125||n)&&ll(s)){Je(this.ws,"Control frame either too large or fragmented");return}if(PL(s)&&this.#n.length===0&&!this.#A.compressed){Je(this.ws,"Unexpected continuation frame");return}if(i<=125){if(this.#A.payloadLength=i,this.#s=Ne.READ_DATA,!this.#g())return}else i===126?this.#s=Ne.PAYLOADLENGTH_16:i===127&&(this.#s=Ne.PAYLOADLENGTH_64);ul(s)&&(this.#A.binaryType=s,this.#A.compressed=a!==0),this.#A.opcode=s,this.#A.masked=o,this.#A.fin=A,this.#A.fragmented=n}else if(this.#s===Ne.PAYLOADLENGTH_16){if(this.#r<2)return e();let r=this.consume(2);if(this.#A.payloadLength=r.readUInt16BE(0),this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.PAYLOADLENGTH_64){if(this.#r<8)return e();let r=this.consume(8),A=r.readUInt32BE(0),s=r.readUInt32BE(4);if(A!==0||s>2**31-1){Je(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#A.payloadLength=s,this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.READ_DATA){if(this.#r{if(A){let o=A instanceof El?1009:1007;qs(this.ws,o,A.message);return}if(this.writeFragments(s)){if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}if(!this.#A.fin){this.#s=Ne.INFO,this.#o=!0,this.run(e);return}bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#o=!0,this.#s=Ne.INFO,this.run(e)}}),this.#o=!1;break}else{if(!this.writeFragments(r))return;if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}!this.#A.fragmented&&this.#A.fin&&bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#s=Ne.INFO}}}consume(e){if(e>this.#r)throw new Error("Called consume() before buffers satiated.");if(e===0)return wf;if(this.#e[0].length===e)return this.#r-=this.#e[0].length,this.#e.shift();let r=Buffer.allocUnsafe(e),A=0;for(;A!==e;){let s=this.#e[0],{length:o}=s;if(o+A===e){r.set(this.#e.shift(),A);break}else if(o+A>e){r.set(s.subarray(0,e-A),A),this.#e[0]=s.subarray(e-A);break}else r.set(this.#e.shift(),A),A+=s.length}return this.#r-=e,r}writeFragments(e){return this.#c>0&&this.#n.length===this.#c?(qs(this.ws,1008,"Too many message fragments"),!1):(this.#t+=e.length,this.#n.push(e),!0)}consumeFragments(){let e=this.#n;if(e.length===1)return this.#t=0,e.shift();let r=Buffer.concat(e,this.#t);return this.#n=[],this.#t=0,r}parseCloseBody(e){vL(e.length!==1);let r;if(e.length>=2&&(r=e.readUInt16BE(0)),r!==void 0&&!YL(r))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);A[0]===239&&A[1]===187&&A[2]===191&&(A=A.subarray(3));try{A=JL(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:r,reason:A,error:!1}}parseControlFrame(e){let{opcode:r,payloadLength:A}=this.#A;if(r===_A.CLOSE){if(A===1)return Je(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#A.closeInfo=this.parseCloseBody(e),this.#A.closeInfo.error){let{code:s,reason:o}=this.#A.closeInfo;return Ff(this.ws,s,o,o.length),Je(this.ws,o),!1}if(this.ws[Rf]!==yf.SENT){let s=wf;this.#A.closeInfo.code&&(s=Buffer.allocUnsafe(2),s.writeUInt16BE(this.#A.closeInfo.code,0));let o=new kf(s);this.ws[Df].socket.write(o.createFrame(_A.CLOSE),n=>{n||(this.ws[Rf]=yf.SENT)})}return this.ws[OL]=xL.CLOSING,this.ws[Tf]=!0,!1}else if(r===_A.PING){if(!this.ws[Tf]){let s=new kf(e);this.ws[Df].socket.write(s.createFrame(_A.PONG)),Ai.ping.hasSubscribers&&Ai.ping.publish({payload:e})}}else r===_A.PONG&&Ai.pong.hasSubscribers&&Ai.pong.publish({payload:e});return!0}get closingInfo(){return this.#A.closeInfo}};Sf.exports={ByteParser:hl}});var vf=B((eH,Mf)=>{"use strict";var{WebsocketFrameSend:VL}=$n(),{opcodes:Uf,sendHints:JA}=Or(),qL=fc(),Gf=Buffer[Symbol.species],Ql=class{#e=new qL;#t=!1;#r;constructor(e){this.#r=e}add(e,r,A){if(A!==JA.blob){let o=Lf(e,A);if(!this.#t)this.#r.write(o,r);else{let n={promise:null,callback:r,frame:o};this.#e.push(n)}return}let s={promise:e.arrayBuffer().then(o=>{s.promise=null,s.frame=Lf(o,A)}),callback:r,frame:null};this.#e.push(s),this.#t||this.#o()}async#o(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let r=e.shift();r.promise!==null&&await r.promise,this.#r.write(r.frame,r.callback),r.callback=r.frame=null}this.#t=!1}};function Lf(t,e){return new VL(WL(t,e)).createFrame(e===JA.string?Uf.TEXT:Uf.BINARY)}function WL(t,e){switch(e){case JA.string:return Buffer.from(t);case JA.arrayBuffer:case JA.blob:return new Gf(t);case JA.typedArray:return new Gf(t.buffer,t.byteOffset,t.byteLength)}}Mf.exports={SendQueue:Ql}});var Wf=B((tH,qf)=>{"use strict";var{webidl:U}=Qe(),{URLSerializer:zL}=Te(),{environmentSettingsObject:xf}=Ge(),{staticPropertyDescriptors:or,states:Ws,sentCloseFrameState:ZL,sendHints:si}=Or(),{kWebSocketURL:Of,kReadyState:Bl,kController:Yf,kBinaryType:oi,kResponse:_f,kSentClose:jL,kByteParser:KL}=xs(),{isConnecting:XL,isEstablished:$L,isClosing:eM,isValidSubprotocol:tM,fireEvent:Jf}=_s(),{establishWebSocketConnection:rM,closeWebSocketConnection:Pf}=cl(),{ByteParser:AM}=Nf(),{kEnumerableProperty:Ze,isBlobLike:Hf}=M(),{getGlobalDispatcher:sM}=fn(),{types:Vf}=require("node:util"),{ErrorEvent:oM,CloseEvent:nM}=xA(),{SendQueue:iM}=vf(),Pe=class t extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#o="";#s;constructor(e,r=[]){super(),U.util.markAsUncloneable(this);let A="WebSocket constructor";U.argumentLengthCheck(arguments,1,A);let s=U.converters["DOMString or sequence or WebSocketInit"](r,A,"options");e=U.converters.USVString(e,A,"url"),r=s.protocols;let o=xf.settingsObject.baseUrl,n;try{n=new URL(e,o)}catch(a){throw new DOMException(a,"SyntaxError")}if(n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),n.protocol!=="ws:"&&n.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${n.protocol}`,"SyntaxError");if(n.hash||n.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof r=="string"&&(r=[r]),r.length!==new Set(r.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(r.length>0&&!r.every(a=>tM(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[Of]=new URL(n.href);let i=xf.settingsObject;this[Yf]=rM(n,r,i,this,(a,c)=>this.#A(a,c),s),this[Bl]=t.CONNECTING,this[jL]=ZL.NOT_SENT,this[oi]="blob"}close(e=void 0,r=void 0){U.brandCheck(this,t);let A="WebSocket.close";if(e!==void 0&&(e=U.converters["unsigned short"](e,A,"code",{clamp:!0})),r!==void 0&&(r=U.converters.USVString(r,A,"reason")),e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");let s=0;if(r!==void 0&&(s=Buffer.byteLength(r),s>123))throw new DOMException(`Reason must be less than 123 bytes; received ${s}`,"SyntaxError");Pf(this,e,r,s)}send(e){U.brandCheck(this,t);let r="WebSocket.send";if(U.argumentLengthCheck(arguments,1,r),e=U.converters.WebSocketSendData(e,r,"data"),XL(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!$L(this)||eM(this)))if(typeof e=="string"){let A=Buffer.byteLength(e);this.#t+=A,this.#s.add(e,()=>{this.#t-=A},si.string)}else Vf.isArrayBuffer(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.arrayBuffer)):ArrayBuffer.isView(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.typedArray)):Hf(e)&&(this.#t+=e.size,this.#s.add(e,()=>{this.#t-=e.size},si.blob))}get readyState(){return U.brandCheck(this,t),this[Bl]}get bufferedAmount(){return U.brandCheck(this,t),this.#t}get url(){return U.brandCheck(this,t),zL(this[Of])}get extensions(){return U.brandCheck(this,t),this.#o}get protocol(){return U.brandCheck(this,t),this.#r}get onopen(){return U.brandCheck(this,t),this.#e.open}set onopen(e){U.brandCheck(this,t),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onerror(){return U.brandCheck(this,t),this.#e.error}set onerror(e){U.brandCheck(this,t),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}get onclose(){return U.brandCheck(this,t),this.#e.close}set onclose(e){U.brandCheck(this,t),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof e=="function"?(this.#e.close=e,this.addEventListener("close",e)):this.#e.close=null}get onmessage(){return U.brandCheck(this,t),this.#e.message}set onmessage(e){U.brandCheck(this,t),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get binaryType(){return U.brandCheck(this,t),this[oi]}set binaryType(e){U.brandCheck(this,t),e!=="blob"&&e!=="arraybuffer"?this[oi]="blob":this[oi]=e}#A(e,r){this[_f]=e;let A=this[Yf]?.dispatcher?.webSocketOptions,s=A?.maxFragments,o=A?.maxPayloadSize,n=new AM(this,r,{maxFragments:s,maxPayloadSize:o});n.on("drain",aM),n.on("error",cM.bind(this)),e.socket.ws=this,this[KL]=n,this.#s=new iM(e.socket),this[Bl]=Ws.OPEN;let i=e.headersList.get("sec-websocket-extensions");i!==null&&(this.#o=i);let a=e.headersList.get("sec-websocket-protocol");a!==null&&(this.#r=a),Jf("open",this)}};Pe.CONNECTING=Pe.prototype.CONNECTING=Ws.CONNECTING;Pe.OPEN=Pe.prototype.OPEN=Ws.OPEN;Pe.CLOSING=Pe.prototype.CLOSING=Ws.CLOSING;Pe.CLOSED=Pe.prototype.CLOSED=Ws.CLOSED;Object.defineProperties(Pe.prototype,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or,url:Ze,readyState:Ze,bufferedAmount:Ze,onopen:Ze,onerror:Ze,onclose:Ze,close:Ze,onmessage:Ze,binaryType:Ze,send:Ze,extensions:Ze,protocol:Ze,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Pe,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or});U.converters["sequence"]=U.sequenceConverter(U.converters.DOMString);U.converters["DOMString or sequence"]=function(t,e,r){return U.util.Type(t)==="Object"&&Symbol.iterator in t?U.converters["sequence"](t):U.converters.DOMString(t,e,r)};U.converters.WebSocketInit=U.dictionaryConverter([{key:"protocols",converter:U.converters["DOMString or sequence"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:U.converters.any,defaultValue:()=>sM()},{key:"headers",converter:U.nullableConverter(U.converters.HeadersInit)}]);U.converters["DOMString or sequence or WebSocketInit"]=function(t){return U.util.Type(t)==="Object"&&!(Symbol.iterator in t)?U.converters.WebSocketInit(t):{protocols:U.converters["DOMString or sequence"](t)}};U.converters.WebSocketSendData=function(t){if(U.util.Type(t)==="Object"){if(Hf(t))return U.converters.Blob(t,{strict:!1});if(ArrayBuffer.isView(t)||Vf.isArrayBuffer(t))return U.converters.BufferSource(t)}return U.converters.USVString(t)};function aM(){this.ws[_f].socket.resume()}function cM(t){let e,r;t instanceof nM?(e=t.reason,r=t.code):e=t.message,Jf("error",this,()=>new oM("error",{error:t,message:e})),Pf(this,r)}qf.exports={WebSocket:Pe}});var Il=B((rH,zf)=>{"use strict";function gM(t){return t.indexOf("\0")===-1}function lM(t){if(t.length===0)return!1;for(let e=0;e57)return!1;return!0}function uM(t){return new Promise(e=>{setTimeout(e,t).unref()})}zf.exports={isValidLastEventId:gM,isASCIINumber:lM,delay:uM}});var Xf=B((AH,Kf)=>{"use strict";var{Transform:EM}=require("node:stream"),{isASCIINumber:Zf,isValidLastEventId:jf}=Il(),vt=[239,187,191],Cl=10,ni=13,hM=58,QM=32,dl=class extends EM{state=null;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,r,A){if(e.length===0){A();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===vt[0]){A();return}this.checkBOM=!1,A();return;case 2:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]){A();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,A();return}this.checkBOM=!1;break;default:this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1;break}for(;this.pos0&&(r[s]=o);break}}processEvent(e){e.retry&&Zf(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&jf(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};Kf.exports={EventSourceStream:dl}});var np=B((sH,op)=>{"use strict";var{pipeline:BM}=require("node:stream"),{fetching:IM}=Gs(),{makeRequest:CM}=NA(),{webidl:xt}=Qe(),{EventSourceStream:dM}=Xf(),{parseMIMEType:fM}=Te(),{createFastMessageEvent:pM}=xA(),{isNetworkError:$f}=Ns(),{delay:mM}=Il(),{kEnumerableProperty:Yr}=M(),{environmentSettingsObject:ep}=Ge(),tp=!1,rp=3e3,zs=0,Ap=1,Zs=2,wM="anonymous",yM="use-credentials",PA=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#o=zs;#s=null;#A=null;#n;#i;constructor(e,r={}){super(),xt.util.markAsUncloneable(this);let A="EventSource constructor";xt.argumentLengthCheck(arguments,1,A),tp||(tp=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=xt.converters.USVString(e,A,"url"),r=xt.converters.EventSourceInitDict(r,A,"eventSourceInitDict"),this.#n=r.dispatcher,this.#i={lastEventId:"",reconnectionTime:rp};let s=ep,o;try{o=new URL(e,s.settingsObject.baseUrl),this.#i.origin=o.origin}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=o.href;let n=wM;r.withCredentials&&(n=yM,this.#r=!0);let i={redirect:"follow",keepalive:!0,mode:"cors",credentials:n==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};i.client=ep.settingsObject,i.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],i.cache="no-store",i.initiator="other",i.urlList=[new URL(this.#t)],this.#s=CM(i),this.#c()}get readyState(){return this.#o}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#o===Zs)return;this.#o=zs;let e={request:this.#s,dispatcher:this.#n},r=A=>{$f(A)&&(this.dispatchEvent(new Event("error")),this.close()),this.#a()};e.processResponseEndOfBody=r,e.processResponse=A=>{if($f(A))if(A.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#a();return}let s=A.headersList.get("content-type",!0),o=s!==null?fM(s):"failure",n=o!=="failure"&&o.essence==="text/event-stream";if(A.status!==200||n===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#o=Ap,this.dispatchEvent(new Event("open")),this.#i.origin=A.urlList[A.urlList.length-1].origin;let i=new dM({eventSourceSettings:this.#i,push:a=>{this.dispatchEvent(pM(a.type,a.options))}});BM(A.body.stream,i,a=>{a?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#A=IM(e)}async#a(){this.#o!==Zs&&(this.#o=zs,this.dispatchEvent(new Event("error")),await mM(this.#i.reconnectionTime),this.#o===zs&&(this.#i.lastEventId.length&&this.#s.headersList.set("last-event-id",this.#i.lastEventId,!0),this.#c()))}close(){xt.brandCheck(this,t),this.#o!==Zs&&(this.#o=Zs,this.#A.abort(),this.#s=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}},sp={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:zs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:Ap,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:Zs,writable:!1}};Object.defineProperties(PA,sp);Object.defineProperties(PA.prototype,sp);Object.defineProperties(PA.prototype,{close:Yr,onerror:Yr,onmessage:Yr,onopen:Yr,readyState:Yr,url:Yr,withCredentials:Yr});xt.converters.EventSourceInitDict=xt.dictionaryConverter([{key:"withCredentials",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:xt.converters.any}]);op.exports={EventSource:PA,defaultReconnectionTime:rp}});var ci=B((oH,N)=>{"use strict";var RM=BA(),ip=$A(),DM=IA(),TM=AB(),bM=CA(),kM=Yc(),FM=TB(),SM=GB(),ap=Y(),ai=M(),{InvalidArgumentError:ii}=ap,HA=fI(),NM=ts(),UM=pg(),GM=rC(),LM=yg(),MM=ag(),vM=gn(),{getGlobalDispatcher:cp,setGlobalDispatcher:xM}=fn(),OM=pn(),YM=Xo(),_M=$o();Object.assign(ip.prototype,HA);N.exports.Dispatcher=ip;N.exports.Client=RM;N.exports.Pool=DM;N.exports.BalancedPool=TM;N.exports.Agent=bM;N.exports.ProxyAgent=kM;N.exports.EnvHttpProxyAgent=FM;N.exports.RetryAgent=SM;N.exports.RetryHandler=vM;N.exports.DecoratorHandler=OM;N.exports.RedirectHandler=YM;N.exports.createRedirectInterceptor=_M;N.exports.interceptors={redirect:cC(),retry:lC(),dump:EC(),dns:BC()};N.exports.buildConnector=NM;N.exports.errors=ap;N.exports.util={parseHeaders:ai.parseHeaders,headerNameToString:ai.headerNameToString};function js(t){return(e,r,A)=>{if(typeof r=="function"&&(A=r,r=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new ii("invalid url");if(r!=null&&typeof r!="object")throw new ii("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new ii("invalid opts.path");let n=r.path;r.path.startsWith("/")||(n=`/${n}`),e=new URL(ai.parseOrigin(e).origin+n)}else r||(r=typeof e=="object"?e:{}),e=ai.parseURL(e);let{agent:s,dispatcher:o=cp()}=r;if(s)throw new ii("unsupported opts.agent. Did you mean opts.client?");return t.call(o,{...r,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:r.method||(r.body?"PUT":"GET")},A)}}N.exports.setGlobalDispatcher=xM;N.exports.getGlobalDispatcher=cp;var JM=Gs().fetch;N.exports.fetch=async function(e,r=void 0){try{return await JM(e,r)}catch(A){throw A&&typeof A=="object"&&Error.captureStackTrace(A),A}};N.exports.Headers=Ur().Headers;N.exports.Response=Ns().Response;N.exports.Request=NA().Request;N.exports.FormData=as().FormData;N.exports.File=globalThis.File??require("node:buffer").File;N.exports.FileReader=Nd().FileReader;var{setGlobalOrigin:PM,getGlobalOrigin:HM}=_a();N.exports.setGlobalOrigin=PM;N.exports.getGlobalOrigin=HM;var{CacheStorage:VM}=_d(),{kConstruct:qM}=Jn();N.exports.caches=new VM(qM);var{deleteCookie:WM,getCookies:zM,getSetCookies:ZM,setCookie:jM}=Xd();N.exports.deleteCookie=WM;N.exports.getCookies=zM;N.exports.getSetCookies=ZM;N.exports.setCookie=jM;var{parseMIMEType:KM,serializeAMimeType:XM}=Te();N.exports.parseMIMEType=KM;N.exports.serializeAMimeType=XM;var{CloseEvent:$M,ErrorEvent:ev,MessageEvent:tv}=xA();N.exports.WebSocket=Wf().WebSocket;N.exports.CloseEvent=$M;N.exports.ErrorEvent=ev;N.exports.MessageEvent=tv;N.exports.request=js(HA.request);N.exports.stream=js(HA.stream);N.exports.pipeline=js(HA.pipeline);N.exports.connect=js(HA.connect);N.exports.upgrade=js(HA.upgrade);N.exports.MockClient=UM;N.exports.MockPool=LM;N.exports.MockAgent=GM;N.exports.mockErrors=MM;var{EventSource:rv}=np();N.exports.EventSource=rv});var Up=B(Ci=>{"use strict";Object.defineProperty(Ci,"__esModule",{value:!0});Ci.getProxyUrl=Rv;Ci.checkBypass=Np;function Rv(t){let e=t.protocol==="https:";if(Np(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new Ii(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new Ii(`http://${r}`)}else return}function Np(t){if(!t.hostname)return!1;let e=t.hostname;if(Dv(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Dv(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var Ii=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}}});var Lp=B(re=>{"use strict";var Tv=re&&re.__createBinding||(Object.create?(function(t,e,r,A){A===void 0&&(A=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,A,s)}):(function(t,e,r,A){A===void 0&&(A=r),t[A]=e[r]})),bv=re&&re.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),mi=re&&re.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var A=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(A[A.length]=s);return A},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var A=t(e),s=0;sae(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ae(this,void 0,void 0,function*(){return new Promise(e=>ae(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};re.HttpClientResponse=pi;function Mv(t){return new URL(t).protocol==="https:"}var vl=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ae(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ae(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ae(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ae(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ae(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ae(this,arguments,void 0,function*(r,A={}){A[ye.Accept]=this._getExistingOrDefaultHeader(A,ye.Accept,Yt.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ae(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&Uv.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===Ke.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Sv.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!Nv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pi(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Ml.getProxyUrl(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?Gp:Ll;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},ro(this.requestOptions.headers),ro(e||{})):ro(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=ro(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=ro(this.requestOptions.headers)[ye.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[ye.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Ml.getProxyUrl(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||Ll.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?di.httpsOverHttps:di.httpsOverHttp:a=c?di.httpOverHttps:di.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new Gp.Agent(i):new Ll.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new kv.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ae(this,void 0,void 0,function*(){e=Math.min(Gv,e);let r=Lv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ae(this,void 0,void 0,function*(){return new Promise((A,s)=>ae(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===Ke.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fi(g,o);l.result=n.result,s(l)}else A(n)}))})}};re.HttpClient=vl;var ro=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{})});var nm=B(yi=>{"use strict";Object.defineProperty(yi,"__esModule",{value:!0});yi.format=sx;yi.parse=ox;var tx=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,tm=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rx=/[\\"]/g,Ax=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rm=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function sx(t){let{type:e,parameters:r}=t;if(!e||!Ax.test(e))throw new TypeError(`Invalid type: ${e}`);let A=e;if(r)for(let s of Object.keys(r)){if(!tm.test(s))throw new TypeError(`Invalid parameter name: ${s}`);A+=`; ${s}=${cx(r[s])}`}return A}function ox(t,e){let r=t.length,A=Pl(t,0,r),s=A;A=Jl(t,A,r);let o=Hl(t,s,A),n=t.slice(s,o).toLowerCase(),i=e?.parameters===!1?new rm:ax(t,A,r);return{type:n,parameters:i}}var Am=32,sm=9,om=59,nx=61,em=34,ix=92;function ax(t,e,r){let A=new rm;e:for(;ee;){let A=t.charCodeAt(r-1);if(A!==Am&&A!==sm)break;r--}return r}function cx(t){if(tm.test(t))return t;if(tx.test(t))return`"${t.replace(rx,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var zA=B((Y2,Sm)=>{"use strict";var Px="2.0.0",Hx=Number.MAX_SAFE_INTEGER||9007199254740991,Vx=16,qx=250,Wx=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Sm.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Vx,MAX_SAFE_BUILD_LENGTH:qx,MAX_SAFE_INTEGER:Hx,RELEASE_TYPES:Wx,SEMVER_SPEC_VERSION:Px,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var oo=B((_2,Nm)=>{"use strict";var zx=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};Nm.exports=zx});var ZA=B((mt,Um)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:ou,MAX_SAFE_BUILD_LENGTH:Zx,MAX_LENGTH:jx}=zA(),Kx=oo();mt=Um.exports={};var Xx=mt.re=[],$x=mt.safeRe=[],m=mt.src=[],eO=mt.safeSrc=[],w=mt.t={},tO=0,nu="[a-zA-Z0-9-]",rO=[["\\s",1],["\\d",jx],[nu,Zx]],AO=t=>{for(let[e,r]of rO)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},G=(t,e,r)=>{let A=AO(e),s=tO++;Kx(t,s,e),w[t]=s,m[s]=e,eO[s]=A,Xx[s]=new RegExp(e,r?"g":void 0),$x[s]=new RegExp(A,r?"g":void 0)};G("NUMERICIDENTIFIER","0|[1-9]\\d*");G("NUMERICIDENTIFIERLOOSE","\\d+");G("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${nu}*`);G("MAINVERSION",`(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})`);G("MAINVERSIONLOOSE",`(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASEIDENTIFIER",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIER]})`);G("PRERELEASEIDENTIFIERLOOSE",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASE",`(?:-(${m[w.PRERELEASEIDENTIFIER]}(?:\\.${m[w.PRERELEASEIDENTIFIER]})*))`);G("PRERELEASELOOSE",`(?:-?(${m[w.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${m[w.PRERELEASEIDENTIFIERLOOSE]})*))`);G("BUILDIDENTIFIER",`${nu}+`);G("BUILD",`(?:\\+(${m[w.BUILDIDENTIFIER]}(?:\\.${m[w.BUILDIDENTIFIER]})*))`);G("FULLPLAIN",`v?${m[w.MAINVERSION]}${m[w.PRERELEASE]}?${m[w.BUILD]}?`);G("FULL",`^${m[w.FULLPLAIN]}$`);G("LOOSEPLAIN",`[v=\\s]*${m[w.MAINVERSIONLOOSE]}${m[w.PRERELEASELOOSE]}?${m[w.BUILD]}?`);G("LOOSE",`^${m[w.LOOSEPLAIN]}$`);G("GTLT","((?:<|>)?=?)");G("XRANGEIDENTIFIERLOOSE",`${m[w.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);G("XRANGEIDENTIFIER",`${m[w.NUMERICIDENTIFIER]}|x|X|\\*`);G("XRANGEPLAIN",`[v=\\s]*(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:${m[w.PRERELEASE]})?${m[w.BUILD]}?)?)?`);G("XRANGEPLAINLOOSE",`[v=\\s]*(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:${m[w.PRERELEASELOOSE]})?${m[w.BUILD]}?)?)?`);G("XRANGE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAIN]}$`);G("XRANGELOOSE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAINLOOSE]}$`);G("COERCEPLAIN",`(^|[^\\d])(\\d{1,${ou}})(?:\\.(\\d{1,${ou}}))?(?:\\.(\\d{1,${ou}}))?`);G("COERCE",`${m[w.COERCEPLAIN]}(?:$|[^\\d])`);G("COERCEFULL",m[w.COERCEPLAIN]+`(?:${m[w.PRERELEASE]})?(?:${m[w.BUILD]})?(?:$|[^\\d])`);G("COERCERTL",m[w.COERCE],!0);G("COERCERTLFULL",m[w.COERCEFULL],!0);G("LONETILDE","(?:~>?)");G("TILDETRIM",`(\\s*)${m[w.LONETILDE]}\\s+`,!0);mt.tildeTrimReplace="$1~";G("TILDE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAIN]}$`);G("TILDELOOSE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAINLOOSE]}$`);G("LONECARET","(?:\\^)");G("CARETTRIM",`(\\s*)${m[w.LONECARET]}\\s+`,!0);mt.caretTrimReplace="$1^";G("CARET",`^${m[w.LONECARET]}${m[w.XRANGEPLAIN]}$`);G("CARETLOOSE",`^${m[w.LONECARET]}${m[w.XRANGEPLAINLOOSE]}$`);G("COMPARATORLOOSE",`^${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]})$|^$`);G("COMPARATOR",`^${m[w.GTLT]}\\s*(${m[w.FULLPLAIN]})$|^$`);G("COMPARATORTRIM",`(\\s*)${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]}|${m[w.XRANGEPLAIN]})`,!0);mt.comparatorTrimReplace="$1$2$3";G("HYPHENRANGE",`^\\s*(${m[w.XRANGEPLAIN]})\\s+-\\s+(${m[w.XRANGEPLAIN]})\\s*$`);G("HYPHENRANGELOOSE",`^\\s*(${m[w.XRANGEPLAINLOOSE]})\\s+-\\s+(${m[w.XRANGEPLAINLOOSE]})\\s*$`);G("STAR","(<|>)?=?\\s*\\*");G("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");G("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var bi=B((J2,Gm)=>{"use strict";var sO=Object.freeze({loose:!0}),oO=Object.freeze({}),nO=t=>t?typeof t!="object"?sO:t:oO;Gm.exports=nO});var iu=B((P2,vm)=>{"use strict";var Lm=/^[0-9]+$/,Mm=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:tMm(e,t);vm.exports={compareIdentifiers:Mm,rcompareIdentifiers:iO}});var Be=B((H2,Om)=>{"use strict";var ki=oo(),{MAX_LENGTH:xm,MAX_SAFE_INTEGER:Fi}=zA(),{safeRe:Si,t:Ni}=ZA(),aO=bi(),{compareIdentifiers:au}=iu(),cO=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let A=0;Axm)throw new TypeError(`version is longer than ${xm} characters`);ki("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let A=e.trim().match(r.loose?Si[Ni.LOOSE]:Si[Ni.FULL]);if(!A)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+A[1],this.minor=+A[2],this.patch=+A[3],this.major>Fi||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Fi||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Fi||this.patch<0)throw new TypeError("Invalid patch version");A[4]?this.prerelease=A[4].split(".").map(s=>{if(/^[0-9]+$/.test(s)){let o=+s;if(o>=0&&oe.major?1:this.minore.minor?1:this.patche.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let A=this.prerelease[r],s=e.prerelease[r];if(ki("prerelease compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let A=this.build[r],s=e.build[r];if(ki("build compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}inc(e,r,A){if(e.startsWith("pre")){if(!r&&A===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let s=`-${r}`.match(this.options.loose?Si[Ni.PRERELEASELOOSE]:Si[Ni.PRERELEASE]);if(!s||s[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,A);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,A);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,A),this.inc("pre",r,A);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,A),this.inc("pre",r,A);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let s=Number(A)?1:0;if(this.prerelease.length===0)this.prerelease=[s];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&A===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(s)}}if(r){let o=[r,s];if(A===!1&&(o=[r]),cO(this.prerelease,r)){let n=this.prerelease[r.split(".").length];isNaN(n)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};Om.exports=cu});var ur=B((V2,_m)=>{"use strict";var Ym=Be(),gO=(t,e,r=!1)=>{if(t instanceof Ym)return t;try{return new Ym(t,e)}catch(A){if(!r)return null;throw A}};_m.exports=gO});var Pm=B((q2,Jm)=>{"use strict";var lO=ur(),uO=(t,e)=>{let r=lO(t,e);return r?r.version:null};Jm.exports=uO});var Vm=B((W2,Hm)=>{"use strict";var EO=ur(),hO=(t,e)=>{let r=EO(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};Hm.exports=hO});var zm=B((z2,Wm)=>{"use strict";var qm=Be(),QO=(t,e,r,A,s)=>{typeof r=="string"&&(s=A,A=r,r=void 0);try{return new qm(t instanceof qm?t.version:t,r).inc(e,A,s).version}catch{return null}};Wm.exports=QO});var Km=B((Z2,jm)=>{"use strict";var Zm=ur(),BO=(t,e)=>{let r=Zm(t,null,!0),A=Zm(e,null,!0),s=r.compare(A);if(s===0)return null;let o=s>0,n=o?r:A,i=o?A:r,a=!!n.prerelease.length;if(!!i.prerelease.length&&!a){if(!i.patch&&!i.minor)return"major";if(i.compareMain(n)===0)return i.minor&&!i.patch?"minor":"patch"}let g=a?"pre":"";return r.major!==A.major?g+"major":r.minor!==A.minor?g+"minor":r.patch!==A.patch?g+"patch":"prerelease"};jm.exports=BO});var $m=B((j2,Xm)=>{"use strict";var IO=Be(),CO=(t,e)=>new IO(t,e).major;Xm.exports=CO});var tw=B((K2,ew)=>{"use strict";var dO=Be(),fO=(t,e)=>new dO(t,e).minor;ew.exports=fO});var Aw=B((X2,rw)=>{"use strict";var pO=Be(),mO=(t,e)=>new pO(t,e).patch;rw.exports=mO});var ow=B(($2,sw)=>{"use strict";var wO=ur(),yO=(t,e)=>{let r=wO(t,e);return r&&r.prerelease.length?r.prerelease:null};sw.exports=yO});var Xe=B((eV,iw)=>{"use strict";var nw=Be(),RO=(t,e,r)=>new nw(t,r).compare(new nw(e,r));iw.exports=RO});var cw=B((tV,aw)=>{"use strict";var DO=Xe(),TO=(t,e,r)=>DO(e,t,r);aw.exports=TO});var lw=B((rV,gw)=>{"use strict";var bO=Xe(),kO=(t,e)=>bO(t,e,!0);gw.exports=kO});var Ui=B((AV,Ew)=>{"use strict";var uw=Be(),FO=(t,e,r)=>{let A=new uw(t,r),s=new uw(e,r);return A.compare(s)||A.compareBuild(s)};Ew.exports=FO});var Qw=B((sV,hw)=>{"use strict";var SO=Ui(),NO=(t,e)=>t.sort((r,A)=>SO(r,A,e));hw.exports=NO});var Iw=B((oV,Bw)=>{"use strict";var UO=Ui(),GO=(t,e)=>t.sort((r,A)=>UO(A,r,e));Bw.exports=GO});var no=B((nV,Cw)=>{"use strict";var LO=Xe(),MO=(t,e,r)=>LO(t,e,r)>0;Cw.exports=MO});var Gi=B((iV,dw)=>{"use strict";var vO=Xe(),xO=(t,e,r)=>vO(t,e,r)<0;dw.exports=xO});var gu=B((aV,fw)=>{"use strict";var OO=Xe(),YO=(t,e,r)=>OO(t,e,r)===0;fw.exports=YO});var lu=B((cV,pw)=>{"use strict";var _O=Xe(),JO=(t,e,r)=>_O(t,e,r)!==0;pw.exports=JO});var Li=B((gV,mw)=>{"use strict";var PO=Xe(),HO=(t,e,r)=>PO(t,e,r)>=0;mw.exports=HO});var Mi=B((lV,ww)=>{"use strict";var VO=Xe(),qO=(t,e,r)=>VO(t,e,r)<=0;ww.exports=qO});var uu=B((uV,yw)=>{"use strict";var WO=gu(),zO=lu(),ZO=no(),jO=Li(),KO=Gi(),XO=Mi(),$O=(t,e,r,A)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return WO(t,r,A);case"!=":return zO(t,r,A);case">":return ZO(t,r,A);case">=":return jO(t,r,A);case"<":return KO(t,r,A);case"<=":return XO(t,r,A);default:throw new TypeError(`Invalid operator: ${e}`)}};yw.exports=$O});var Dw=B((EV,Rw)=>{"use strict";var eY=Be(),tY=ur(),{safeRe:vi,t:xi}=ZA(),rY=(t,e)=>{if(t instanceof eY)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?vi[xi.COERCEFULL]:vi[xi.COERCE]);else{let a=e.includePrerelease?vi[xi.COERCERTLFULL]:vi[xi.COERCERTL],c;for(;(c=a.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||c.index+c[0].length!==r.index+r[0].length)&&(r=c),a.lastIndex=c.index+c[1].length+c[2].length;a.lastIndex=-1}if(r===null)return null;let A=r[2],s=r[3]||"0",o=r[4]||"0",n=e.includePrerelease&&r[5]?`-${r[5]}`:"",i=e.includePrerelease&&r[6]?`+${r[6]}`:"";return tY(`${A}.${s}.${o}${n}${i}`,e)};Rw.exports=rY});var bw=B((hV,Tw)=>{"use strict";var AY=ur(),sY=zA(),oY=Be(),nY=(t,e,r)=>{if(!sY.RELEASE_TYPES.includes(e))return null;let A=iY(t,r);return A&&aY(A,e)},iY=(t,e)=>{let r=t instanceof oY?t.version:t;return AY(r,e)},aY=(t,e)=>{if(cY(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},cY=t=>t.startsWith("pre");Tw.exports=nY});var Fw=B((QV,kw)=>{"use strict";var Eu=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let s=this.map.keys().next().value;this.delete(s)}this.map.set(e,r)}return this}};kw.exports=Eu});var $e=B((BV,Gw)=>{"use strict";var gY=/\s+/g,hu=class t{constructor(e,r){if(r=uY(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof Qu)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(gY," "),this.set=this.raw.split("||").map(A=>this.parseRange(A.trim())).filter(A=>A.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let A=this.set[0];if(this.set=this.set.filter(s=>!Nw(s[0])),this.set.length===0)this.set=[A];else if(this.set.length>1){for(let s of this.set)if(s.length===1&&pY(s[0])){this.set=[s];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e0&&(this.formatted+="||");let r=this.set[e];for(let A=0;A0&&(this.formatted+=" "),this.formatted+=r[A].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(fY,"");let A=((this.options.includePrerelease&&CY)|(this.options.loose&&dY))+":"+e,s=Sw.get(A);if(s)return s;let o=this.options.loose,n=o?Re[Ie.HYPHENRANGELOOSE]:Re[Ie.HYPHENRANGE];e=e.replace(n,NY(this.options.includePrerelease)),X("hyphen replace",e),e=e.replace(Re[Ie.COMPARATORTRIM],QY),X("comparator trim",e),e=e.replace(Re[Ie.TILDETRIM],BY),X("tilde trim",e),e=e.replace(Re[Ie.CARETTRIM],IY),X("caret trim",e);let i=e.split(" ").map(l=>mY(l,this.options)).join(" ").split(/\s+/).map(l=>SY(l,this.options));o&&(i=i.filter(l=>(X("loose invalid filter",l,this.options),!!l.match(Re[Ie.COMPARATORLOOSE])))),X("range list",i);let a=new Map,c=i.map(l=>new Qu(l,this.options));for(let l of c){if(Nw(l))return[l];a.set(l.value,l)}a.size>1&&a.has("")&&a.delete("");let g=[...a.values()];return Sw.set(A,g),g}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(A=>Uw(A,r)&&e.set.some(s=>Uw(s,r)&&A.every(o=>s.every(n=>o.intersects(n,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new EY(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",pY=t=>t.value==="",Uw=(t,e)=>{let r=!0,A=t.slice(),s=A.pop();for(;r&&A.length;)r=A.every(o=>s.intersects(o,e)),s=A.pop();return r},mY=(t,e)=>(t=t.replace(Re[Ie.BUILD],""),X("comp",t,e),t=DY(t,e),X("caret",t),t=yY(t,e),X("tildes",t),t=bY(t,e),X("xrange",t),t=FY(t,e),X("stars",t),t),ue=t=>!t||t.toLowerCase()==="x"||t==="*",wY=(t,e,r)=>ue(t)&&!ue(e)||ue(e)&&r&&!ue(r),yY=(t,e)=>t.trim().split(/\s+/).map(r=>RY(r,e)).join(" "),RY=(t,e)=>{let r=e.loose?Re[Ie.TILDELOOSE]:Re[Ie.TILDE],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("tilde",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:a?(X("replaceTilde pr",a),c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`):c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`,X("tilde return",c),c})},DY=(t,e)=>t.trim().split(/\s+/).map(r=>TY(r,e)).join(" "),TY=(t,e)=>{X("caret",t,e);let r=e.loose?Re[Ie.CARETLOOSE]:Re[Ie.CARET],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("caret",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?o==="0"?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.0${A} <${+o+1}.0.0-0`:a?(X("replaceCaret pr",a),o==="0"?n==="0"?c=`>=${o}.${n}.${i}-${a} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i}-${a} <${+o+1}.0.0-0`):(X("no pr"),o==="0"?n==="0"?c=`>=${o}.${n}.${i} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i} <${+o+1}.0.0-0`),X("caret return",c),c})},bY=(t,e)=>(X("replaceXRanges",t,e),t.split(/\s+/).map(r=>kY(r,e)).join(" ")),kY=(t,e)=>{t=t.trim();let r=e.loose?Re[Ie.XRANGELOOSE]:Re[Ie.XRANGE];return t.replace(r,(A,s,o,n,i,a)=>{if(X("xRange",t,A,s,o,n,i,a),wY(o,n,i))return t;let c=ue(o),g=c||ue(n),l=g||ue(i),u=l;return s==="="&&u&&(s=""),a=e.includePrerelease?"-0":"",c?s===">"||s==="<"?A="<0.0.0-0":A="*":s&&u?(g&&(n=0),i=0,s===">"?(s=">=",g?(o=+o+1,n=0,i=0):(n=+n+1,i=0)):s==="<="&&(s="<",g?o=+o+1:n=+n+1),s==="<"&&(a="-0"),A=`${s+o}.${n}.${i}${a}`):g?A=`>=${o}.0.0${a} <${+o+1}.0.0-0`:l&&(A=`>=${o}.${n}.0${a} <${o}.${+n+1}.0-0`),X("xRange return",A),A})},FY=(t,e)=>(X("replaceStars",t,e),t.trim().replace(Re[Ie.STAR],"")),SY=(t,e)=>(X("replaceGTE0",t,e),t.trim().replace(Re[e.includePrerelease?Ie.GTE0PRE:Ie.GTE0],"")),NY=t=>(e,r,A,s,o,n,i,a,c,g,l,u)=>(ue(A)?r="":ue(s)?r=`>=${A}.0.0${t?"-0":""}`:ue(o)?r=`>=${A}.${s}.0${t?"-0":""}`:n?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,ue(c)?a="":ue(g)?a=`<${+c+1}.0.0-0`:ue(l)?a=`<${c}.${+g+1}.0-0`:u?a=`<=${c}.${g}.${l}-${u}`:t?a=`<${c}.${g}.${+l+1}-0`:a=`<=${a}`,`${r} ${a}`.trim()),UY=(t,e,r)=>{for(let A=0;A0){let s=t[A].semver;if(s.major===e.major&&s.minor===e.minor&&s.patch===e.patch)return!0}return!1}return!0}});var io=B((IV,Yw)=>{"use strict";var ao=Symbol("SemVer ANY"),Cu=class t{static get ANY(){return ao}constructor(e,r){if(r=Lw(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),Iu("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ao?this.value="":this.value=this.operator+this.semver.version,Iu("comp",this)}parse(e){let r=this.options.loose?Mw[vw.COMPARATORLOOSE]:Mw[vw.COMPARATOR],A=e.match(r);if(!A)throw new TypeError(`Invalid comparator: ${e}`);this.operator=A[1]!==void 0?A[1]:"",this.operator==="="&&(this.operator=""),A[2]?this.semver=new xw(A[2],this.options.loose):this.semver=ao}toString(){return this.value}test(e){if(Iu("Comparator.test",e,this.options.loose),this.semver===ao||e===ao)return!0;if(typeof e=="string")try{e=new xw(e,this.options)}catch{return!1}return Bu(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Ow(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new Ow(this.value,r).test(e.semver):(r=Lw(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||Bu(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||Bu(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Yw.exports=Cu;var Lw=bi(),{safeRe:Mw,t:vw}=ZA(),Bu=uu(),Iu=oo(),xw=Be(),Ow=$e()});var co=B((CV,_w)=>{"use strict";var GY=$e(),LY=(t,e,r)=>{try{e=new GY(e,r)}catch{return!1}return e.test(t)};_w.exports=LY});var Pw=B((dV,Jw)=>{"use strict";var MY=$e(),vY=(t,e)=>new MY(t,e).set.map(r=>r.map(A=>A.value).join(" ").trim().split(" "));Jw.exports=vY});var Vw=B((fV,Hw)=>{"use strict";var xY=Be(),OY=$e(),YY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new OY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===-1)&&(A=n,s=new xY(A,r))}),A};Hw.exports=YY});var Ww=B((pV,qw)=>{"use strict";var _Y=Be(),JY=$e(),PY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new JY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===1)&&(A=n,s=new _Y(A,r))}),A};qw.exports=PY});var jw=B((mV,Zw)=>{"use strict";var du=Be(),HY=$e(),zw=no(),VY=(t,e)=>{t=new HY(t,e);let r=new du("0.0.0");if(t.test(r)||(r=new du("0.0.0-0"),t.test(r)))return r;r=null;for(let A=0;A{let i=new du(n.semver.version);switch(n.operator){case">":i.prerelease.length===0?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!o||zw(i,o))&&(o=i);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${n.operator}`)}}),o&&(!r||zw(r,o))&&(r=o)}return r&&t.test(r)?r:null};Zw.exports=VY});var Xw=B((wV,Kw)=>{"use strict";var qY=$e(),WY=(t,e)=>{try{return new qY(t,e).range||"*"}catch{return null}};Kw.exports=WY});var Oi=B((yV,ry)=>{"use strict";var zY=Be(),ty=io(),{ANY:ZY}=ty,jY=$e(),KY=co(),$w=no(),ey=Gi(),XY=Mi(),$Y=Li(),e_=(t,e,r,A)=>{t=new zY(t,A),e=new jY(e,A);let s,o,n,i,a;switch(r){case">":s=$w,o=XY,n=ey,i=">",a=">=";break;case"<":s=ey,o=$Y,n=$w,i="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(KY(t,e,A))return!1;for(let c=0;c{E.semver===ZY&&(E=new ty(">=0.0.0")),l=l||E,u=u||E,s(E.semver,l.semver,A)?l=E:n(E.semver,u.semver,A)&&(u=E)}),l.operator===i||l.operator===a||(!u.operator||u.operator===i)&&o(t,u.semver))return!1;if(u.operator===a&&n(t,u.semver))return!1}return!0};ry.exports=e_});var sy=B((RV,Ay)=>{"use strict";var t_=Oi(),r_=(t,e,r)=>t_(t,e,">",r);Ay.exports=r_});var ny=B((DV,oy)=>{"use strict";var A_=Oi(),s_=(t,e,r)=>A_(t,e,"<",r);oy.exports=s_});var cy=B((TV,ay)=>{"use strict";var iy=$e(),o_=(t,e,r)=>(t=new iy(t,r),e=new iy(e,r),t.intersects(e,r));ay.exports=o_});var ly=B((bV,gy)=>{"use strict";var n_=co(),i_=Xe();gy.exports=(t,e,r)=>{let A=[],s=null,o=null,n=t.sort((g,l)=>i_(g,l,r));for(let g of n)n_(g,e,r)?(o=g,s||(s=g)):(o&&A.push([s,o]),o=null,s=null);s&&A.push([s,null]);let i=[];for(let[g,l]of A)g===l?i.push(g):!l&&g===n[0]?i.push("*"):l?g===n[0]?i.push(`<=${l}`):i.push(`${g} - ${l}`):i.push(`>=${g}`);let a=i.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return a.length{"use strict";var uy=$e(),mu=io(),{ANY:fu}=mu,pu=co(),wu=Xe(),a_=(t,e,r={})=>{if(t===e)return!0;t=new uy(t,r),e=new uy(e,r);let A=!1;e:for(let s of t.set){for(let o of e.set){let n=g_(s,o,r);if(A=A||n!==null,n)continue e}if(A)return!1}return!0},c_=[new mu(">=0.0.0-0")],Ey=[new mu(">=0.0.0")],g_=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===fu){if(e.length===1&&e[0].semver===fu)return!0;r.includePrerelease?t=c_:t=Ey}if(e.length===1&&e[0].semver===fu){if(r.includePrerelease)return!0;e=Ey}let A=new Set,s,o;for(let E of t)E.operator===">"||E.operator===">="?s=hy(s,E,r):E.operator==="<"||E.operator==="<="?o=Qy(o,E,r):A.add(E.semver);if(A.size>1)return null;let n;if(s&&o){if(n=wu(s.semver,o.semver,r),n>0)return null;if(n===0&&(s.operator!==">="||o.operator!=="<="))return null}for(let E of A){if(s&&!pu(E,String(s),r)||o&&!pu(E,String(o),r))return null;for(let h of e)if(!pu(E,String(h),r))return!1;return!0}let i,a,c,g,l=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,u=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1;l&&l.prerelease.length===1&&o.operator==="<"&&l.prerelease[0]===0&&(l=!1);for(let E of e){if(g=g||E.operator===">"||E.operator===">=",c=c||E.operator==="<"||E.operator==="<=",s){if(u&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===u.major&&E.semver.minor===u.minor&&E.semver.patch===u.patch&&(u=!1),E.operator===">"||E.operator===">="){if(i=hy(s,E,r),i===E&&i!==s)return!1}else if(s.operator===">="&&!E.test(s.semver))return!1}if(o){if(l&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===l.major&&E.semver.minor===l.minor&&E.semver.patch===l.patch&&(l=!1),E.operator==="<"||E.operator==="<="){if(a=Qy(o,E,r),a===E&&a!==o)return!1}else if(o.operator==="<="&&!E.test(o.semver))return!1}if(!E.operator&&(o||s)&&n!==0)return!1}return!(s&&c&&!o&&n!==0||o&&g&&!s&&n!==0||u||l)},hy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A>0?t:A<0||e.operator===">"&&t.operator===">="?e:t},Qy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A<0?t:A>0||e.operator==="<"&&t.operator==="<="?e:t};By.exports=a_});var Ru=B((FV,fy)=>{"use strict";var yu=ZA(),Cy=zA(),l_=Be(),dy=iu(),u_=ur(),E_=Pm(),h_=Vm(),Q_=zm(),B_=Km(),I_=$m(),C_=tw(),d_=Aw(),f_=ow(),p_=Xe(),m_=cw(),w_=lw(),y_=Ui(),R_=Qw(),D_=Iw(),T_=no(),b_=Gi(),k_=gu(),F_=lu(),S_=Li(),N_=Mi(),U_=uu(),G_=Dw(),L_=bw(),M_=io(),v_=$e(),x_=co(),O_=Pw(),Y_=Vw(),__=Ww(),J_=jw(),P_=Xw(),H_=Oi(),V_=sy(),q_=ny(),W_=cy(),z_=ly(),Z_=Iy();fy.exports={parse:u_,valid:E_,clean:h_,inc:Q_,diff:B_,major:I_,minor:C_,patch:d_,prerelease:f_,compare:p_,rcompare:m_,compareLoose:w_,compareBuild:y_,sort:R_,rsort:D_,gt:T_,lt:b_,eq:k_,neq:F_,gte:S_,lte:N_,cmp:U_,coerce:G_,truncate:L_,Comparator:M_,Range:v_,satisfies:x_,toComparators:O_,maxSatisfying:Y_,minSatisfying:__,minVersion:J_,validRange:P_,outside:H_,gtr:V_,ltr:q_,intersects:W_,simplifyRange:z_,subset:Z_,SemVer:l_,re:yu.re,src:yu.src,tokens:yu.t,SEMVER_SPEC_VERSION:Cy.SEMVER_SPEC_VERSION,RELEASE_TYPES:Cy.RELEASE_TYPES,compareIdentifiers:dy.compareIdentifiers,rcompareIdentifiers:dy.rcompareIdentifiers}});var hr=W(require("node:process")),Ny=W(require("node:path"));var Su=W(require("os"),1);function jA(t){return t==null?"":typeof t=="string"||t instanceof String?t:JSON.stringify(t)}function ku(t){return Object.keys(t).length?{title:t.title,file:t.file,line:t.startLine,endLine:t.endLine,col:t.startColumn,endColumn:t.endColumn}:{}}function Vi(t,e,r){let A=new Hi(t,e,r);process.stdout.write(A.toString()+Su.EOL)}var Fu="::",Hi=class{constructor(e,r,A){e||(e="missing.command"),this.command=e,this.properties=r,this.message=A}toString(){let e=Fu+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let r=!0;for(let A in this.properties)if(this.properties.hasOwnProperty(A)){let s=this.properties[A];s&&(r?r=!1:e+=",",e+=`${A}=${Yy(s)}`)}}return e+=`${Fu}${Oy(this.message)}`,e}};function Oy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function Yy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}var Tp=W(require("os"),1);var $s=W(require("http"),1),ml=W(require("https"),1);function qi(t){let e=t.protocol==="https:";if(_y(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new uo(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new uo(`http://${r}`)}else return}function _y(t){if(!t.hostname)return!1;let e=t.hostname;if(Jy(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Jy(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var uo=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}};var nr=W(Zi(),1),gp=W(ci(),1),ie=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},je;(function(t){t[t.OK=200]="OK",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.ResourceMoved=302]="ResourceMoved",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.SwitchProxy=306]="SwitchProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.TooManyRequests=429]="TooManyRequests",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout"})(je||(je={}));var we;(function(t){t.Accept="accept",t.ContentType="content-type"})(we||(we={}));var Ot;(function(t){t.ApplicationJson="application/json"})(Ot||(Ot={}));var Av=[je.MovedPermanently,je.ResourceMoved,je.SeeOther,je.TemporaryRedirect,je.PermanentRedirect],sv=[je.BadGateway,je.ServiceUnavailable,je.GatewayTimeout],ov=["OPTIONS","GET","DELETE","HEAD"],nv=10,iv=5,fl=class t extends Error{constructor(e,r){super(e),this.name="HttpClientError",this.statusCode=r,Object.setPrototypeOf(this,t.prototype)}},pl=class{constructor(e){this.message=e}readBody(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};var Xs=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ie(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ie(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ie(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ie(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ie(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ie(this,arguments,void 0,function*(r,A={}){A[we.Accept]=this._getExistingOrDefaultHeader(A,we.Accept,Ot.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ie(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&ov.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===je.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Av.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!sv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pl(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=qi(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?ml:$s;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},Ks(this.requestOptions.headers),Ks(e||{})):Ks(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=Ks(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=Ks(this.requestOptions.headers)[we.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[we.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=qi(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||$s.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?nr.httpsOverHttps:nr.httpsOverHttp:a=c?nr.httpOverHttps:nr.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new ml.Agent(i):new $s.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new gp.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ie(this,void 0,void 0,function*(){e=Math.min(nv,e);let r=iv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ie(this,void 0,void 0,function*(){return new Promise((A,s)=>ie(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===je.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fl(g,o);l.result=n.result,s(l)}else A(n)}))})}},Ks=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{});var up=require("os"),eo=require("fs"),wl=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{access:cv,appendFile:gv,writeFile:lv}=eo.promises,lp="GITHUB_STEP_SUMMARY";var yl=class{constructor(){this._buffer=""}filePath(){return wl(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[lp];if(!e)throw new Error(`Unable to find environment variable for $${lp}. Check if your runtime environment supports job summaries.`);try{yield cv(e,eo.constants.R_OK|eo.constants.W_OK)}catch{throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,r,A={}){let s=Object.entries(A).map(([o,n])=>` ${o}="${n}"`).join("");return r?`<${e}${s}>${r}`:`<${e}${s}>`}write(e){return wl(this,void 0,void 0,function*(){let r=!!e?.overwrite,A=yield this.filePath();return yield(r?lv:gv)(A,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return wl(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(e,r=!1){return this._buffer+=e,r?this.addEOL():this}addEOL(){return this.addRaw(up.EOL)}addCodeBlock(e,r){let A=Object.assign({},r&&{lang:r}),s=this.wrap("pre",this.wrap("code",e),A);return this.addRaw(s).addEOL()}addList(e,r=!1){let A=r?"ol":"ul",s=e.map(n=>this.wrap("li",n)).join(""),o=this.wrap(A,s);return this.addRaw(o).addEOL()}addTable(e){let r=e.map(s=>{let o=s.map(n=>{if(typeof n=="string")return this.wrap("td",n);let{header:i,data:a,colspan:c,rowspan:g}=n,l=i?"th":"td",u=Object.assign(Object.assign({},c&&{colspan:c}),g&&{rowspan:g});return this.wrap(l,a,u)}).join("");return this.wrap("tr",o)}).join(""),A=this.wrap("table",r);return this.addRaw(A).addEOL()}addDetails(e,r){let A=this.wrap("details",this.wrap("summary",e)+r);return this.addRaw(A).addEOL()}addImage(e,r,A){let{width:s,height:o}=A||{},n=Object.assign(Object.assign({},s&&{width:s}),o&&{height:o}),i=this.wrap("img",null,Object.assign({src:e,alt:r},n));return this.addRaw(i).addEOL()}addHeading(e,r){let A=`h${r}`,s=["h1","h2","h3","h4","h5","h6"].includes(A)?A:"h1",o=this.wrap(s,e);return this.addRaw(o).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,r){let A=Object.assign({},r&&{cite:r}),s=this.wrap("blockquote",e,A);return this.addRaw(s).addEOL()}addLink(e,r){let A=this.wrap("a",e,{href:r});return this.addRaw(A).addEOL()}},EH=new yl;var Fl=W(require("os"),1);var to=W(require("os"),1),kl=W(require("events"),1),wp=W(require("child_process"),1),yp=W(require("path"),1);var dp=require("assert"),pt=W(require("path"),1);var li=W(require("fs"),1),ar=W(require("path"),1),hp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{chmod:uv,copyFile:Ev,lstat:hv,mkdir:Qp,open:BH,readdir:Bp,rename:Qv,rm:Ip,rmdir:IH,stat:gi,symlink:Bv,unlink:Iv}=li.promises,ir=process.platform==="win32";var CH=li.constants.O_RDONLY;function Rl(t){return hp(this,void 0,void 0,function*(){try{yield gi(t)}catch(e){if(e.code==="ENOENT")return!1;throw e}return!0})}function ui(t){if(t=Cv(t),!t)throw new Error('isRooted() parameter "p" cannot be empty');return ir?t.startsWith("\\")||/^[A-Z]:/i.test(t):t.startsWith("/")}function Dl(t,e){return hp(this,void 0,void 0,function*(){let r;try{r=yield gi(t)}catch(s){s.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${s}`)}if(r&&r.isFile()){if(ir){let s=ar.extname(t).toUpperCase();if(e.some(o=>o.toUpperCase()===s))return t}else if(Ep(r))return t}let A=t;for(let s of e){t=A+s,r=void 0;try{r=yield gi(t)}catch(o){o.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${o}`)}if(r&&r.isFile()){if(ir){try{let o=ar.dirname(t),n=ar.basename(t).toUpperCase();for(let i of yield Bp(o))if(n===i.toUpperCase()){t=ar.join(o,i);break}}catch(o){console.log(`Unexpected error attempting to determine the actual case of the file '${t}': ${o}`)}return t}else if(Ep(r))return t}}return""})}function Cv(t){return t=t||"",ir?(t=t.replace(/\//g,"\\"),t.replace(/\\\\+/g,"\\")):t.replace(/\/\/+/g,"/")}function Ep(t){return(t.mode&1)>0||(t.mode&8)>0&&process.getgid!==void 0&&t.gid===process.getgid()||(t.mode&64)>0&&process.getuid!==void 0&&t.uid===process.getuid()}var Ei=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function fp(t){return Ei(this,void 0,void 0,function*(){if(ir&&/[*"<>|]/.test(t))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');try{yield Ip(t,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(e){throw new Error(`File was unable to be removed ${e}`)}})}function Tl(t){return Ei(this,void 0,void 0,function*(){(0,dp.ok)(t,"a path argument must be provided"),yield Qp(t,{recursive:!0})})}function _r(t,e){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");if(e){let A=yield _r(t,!1);if(!A)throw ir?new Error(`Unable to locate executable file: ${t}. 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.`):new Error(`Unable to locate executable file: ${t}. 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 A}let r=yield dv(t);return r&&r.length>0?r[0]:""})}function dv(t){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");let e=[];if(ir&&process.env.PATHEXT)for(let s of process.env.PATHEXT.split(pt.delimiter))s&&e.push(s);if(ui(t)){let s=yield Dl(t,e);return s?[s]:[]}if(t.includes(pt.sep))return[];let r=[];if(process.env.PATH)for(let s of process.env.PATH.split(pt.delimiter))s&&r.push(s);let A=[];for(let s of r){let o=yield Dl(pt.join(s,t),e);o&&A.push(o)}return A})}var Rp=require("timers"),mp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},hi=process.platform==="win32",Qi=class extends kl.EventEmitter{constructor(e,r,A){if(super(),!e)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=e,this.args=r||[],this.options=A||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,r){let A=this._getSpawnFileName(),s=this._getSpawnArgs(e),o=r?"":"[command]";if(hi)if(this._isCmdFile()){o+=A;for(let n of s)o+=` ${n}`}else if(e.windowsVerbatimArguments){o+=`"${A}"`;for(let n of s)o+=` ${n}`}else{o+=this._windowsQuoteCmdArg(A);for(let n of s)o+=` ${this._windowsQuoteCmdArg(n)}`}else{o+=A;for(let n of s)o+=` ${n}`}return o}_processLineBuffer(e,r,A){try{let s=r+e.toString(),o=s.indexOf(to.EOL);for(;o>-1;){let n=s.substring(0,o);A(n),s=s.substring(o+to.EOL.length),o=s.indexOf(to.EOL)}return s}catch(s){return this._debug(`error processing line. Failed with error ${s}`),""}}_getSpawnFileName(){return hi&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(e){if(hi&&this._isCmdFile()){let r=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let A of this.args)r+=" ",r+=e.windowsVerbatimArguments?A:this._windowsQuoteCmdArg(A);return r+='"',[r]}return this.args}_endsWith(e,r){return e.endsWith(r)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return'""';let r=[" "," ","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],A=!1;for(let n of e)if(r.some(i=>i===n)){A=!0;break}if(!A)return e;let s='"',o=!0;for(let n=e.length;n>0;n--)s+=e[n-1],o&&e[n-1]==="\\"?s+="\\":e[n-1]==='"'?(o=!0,s+='"'):o=!1;return s+='"',s.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e)return'""';if(!e.includes(" ")&&!e.includes(" ")&&!e.includes('"'))return e;if(!e.includes('"')&&!e.includes("\\"))return`"${e}"`;let r='"',A=!0;for(let s=e.length;s>0;s--)r+=e[s-1],A&&e[s-1]==="\\"?r+="\\":e[s-1]==='"'?(A=!0,r+="\\"):A=!1;return r+='"',r.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};let r={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return r.outStream=e.outStream||process.stdout,r.errStream=e.errStream||process.stderr,r}_getSpawnOptions(e,r){e=e||{};let A={};return A.cwd=e.cwd,A.env=e.env,A.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(A.argv0=`"${r}"`),A}exec(){return mp(this,void 0,void 0,function*(){return!ui(this.toolPath)&&(this.toolPath.includes("/")||hi&&this.toolPath.includes("\\"))&&(this.toolPath=yp.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield _r(this.toolPath,!0),new Promise((e,r)=>mp(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let c of this.args)this._debug(` ${c}`);let A=this._cloneExecOptions(this.options);!A.silent&&A.outStream&&A.outStream.write(this._getCommandString(A)+to.EOL);let s=new bl(A,this.toolPath);if(s.on("debug",c=>{this._debug(c)}),this.options.cwd&&!(yield Rl(this.options.cwd)))return r(new Error(`The cwd: ${this.options.cwd} does not exist!`));let o=this._getSpawnFileName(),n=wp.spawn(o,this._getSpawnArgs(A),this._getSpawnOptions(this.options,o)),i="";n.stdout&&n.stdout.on("data",c=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(c),!A.silent&&A.outStream&&A.outStream.write(c),i=this._processLineBuffer(c,i,g=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(g)})});let a="";if(n.stderr&&n.stderr.on("data",c=>{s.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(c),!A.silent&&A.errStream&&A.outStream&&(A.failOnStdErr?A.errStream:A.outStream).write(c),a=this._processLineBuffer(c,a,g=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(g)})}),n.on("error",c=>{s.processError=c.message,s.processExited=!0,s.processClosed=!0,s.CheckComplete()}),n.on("exit",c=>{s.processExitCode=c,s.processExited=!0,this._debug(`Exit code ${c} received from tool '${this.toolPath}'`),s.CheckComplete()}),n.on("close",c=>{s.processExitCode=c,s.processExited=!0,s.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),s.CheckComplete()}),s.on("done",(c,g)=>{i.length>0&&this.emit("stdline",i),a.length>0&&this.emit("errline",a),n.removeAllListeners(),c?r(c):e(g)}),this.options.input){if(!n.stdin)throw new Error("child process missing stdin");n.stdin.end(this.options.input)}}))})}};function Dp(t){let e=[],r=!1,A=!1,s="";function o(n){A&&n!=='"'&&(s+="\\"),s+=n,A=!1}for(let n=0;n0&&(e.push(s),s="");continue}o(i)}return s.length>0&&e.push(s.trim()),e}var bl=class t extends kl.EventEmitter{constructor(e,r){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!r)throw new Error("toolPath must not be empty");this.options=e,this.toolPath=r,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=(0,Rp.setTimeout)(t.HandleTimeout,this.delay,this)))}_debug(e){this.emit("debug",e)}_setResult(){let e;this.processExited&&(this.processError?e=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}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let r=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(r)}e._setResult()}}};var pv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function cr(t,e,r){return pv(this,void 0,void 0,function*(){let A=Dp(t);if(A.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let s=A[0];return e=A.slice(1).concat(e||[]),new Qi(s,e,r).exec()})}var mH=Fl.default.platform(),wH=Fl.default.arch();var Sl;(function(t){t[t.Success=0]="Success",t[t.Failure=1]="Failure"})(Sl||(Sl={}));function bp(t,e){let r=process.env[`INPUT_${t.replace(/ /g,"_").toUpperCase()}`]||"";if(e&&e.required&&!r)throw new Error(`Input required and not supplied: ${t}`);return e&&e.trimWhitespace===!1?r:r.trim()}function kp(t){process.exitCode=Sl.Failure,yv(t)}function Nl(){return process.env.RUNNER_DEBUG==="1"}function Ue(t){Vi("debug",{},t)}function yv(t,e={}){Vi("error",ku(e),t instanceof Error?t.toString():t)}function Ul(t){process.stdout.write(t+Tp.EOL)}var Bi=require("fs"),Fp=require("os"),VA=class{constructor(){var e,r,A;if(this.payload={},process.env.GITHUB_EVENT_PATH)if((0,Bi.existsSync)(process.env.GITHUB_EVENT_PATH))this.payload=JSON.parse((0,Bi.readFileSync)(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}));else{let s=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${s} does not exist${Fp.EOL}`)}this.eventName=process.env.GITHUB_EVENT_NAME,this.sha=process.env.GITHUB_SHA,this.ref=process.env.GITHUB_REF,this.workflow=process.env.GITHUB_WORKFLOW,this.action=process.env.GITHUB_ACTION,this.actor=process.env.GITHUB_ACTOR,this.job=process.env.GITHUB_JOB,this.runAttempt=parseInt(process.env.GITHUB_RUN_ATTEMPT,10),this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10),this.runId=parseInt(process.env.GITHUB_RUN_ID,10),this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:"https://api.github.com",this.serverUrl=(r=process.env.GITHUB_SERVER_URL)!==null&&r!==void 0?r:"https://github.com",this.graphqlUrl=(A=process.env.GITHUB_GRAPHQL_URL)!==null&&A!==void 0?A:"https://api.github.com/graphql"}get issue(){let e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){let[e,r]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:r}}if(this.payload.repository)return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name};throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}};var xl=W(Lp(),1),Mp=W(ci(),1),vv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function vp(t,e){if(!t&&!e.auth)throw new Error("Parameter token or opts.auth is required");if(t&&e.auth)throw new Error("Parameters token and opts.auth may not both be specified");return typeof e.auth=="string"?e.auth:`token ${t}`}function xp(t){return new xl.HttpClient().getAgent(t)}function xv(t){return new xl.HttpClient().getAgentDispatcher(t)}function Op(t){let e=xv(t);return(A,s)=>vv(this,void 0,void 0,function*(){return(0,Mp.fetch)(A,Object.assign(Object.assign({},s),{dispatcher:e}))})}function Yp(){return process.env.GITHUB_API_URL||"https://api.github.com"}function Ol(t){var e;let r=(e=process.env.ACTIONS_ORCHESTRATION_ID)===null||e===void 0?void 0:e.trim();if(r){let s=`actions_orchestration_id/${r.replace(/[^a-z0-9_.-]/gi,"_")}`;return t?.includes(s)?t:`${t?`${t} `:""}${s}`}return t}function gr(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}function wi(t,e,r,A){if(typeof r!="function")throw new Error("method for before hook must be a function");return A||(A={}),Array.isArray(e)?e.reverse().reduce((s,o)=>wi.bind(null,t,o,s,A),r)():Promise.resolve().then(()=>t.registry[e]?t.registry[e].reduce((s,o)=>o.hook.bind(null,s,A),r)():r(A))}function _p(t,e,r,A){let s=A;t.registry[r]||(t.registry[r]=[]),e==="before"&&(A=(o,n)=>Promise.resolve().then(s.bind(null,n)).then(o.bind(null,n))),e==="after"&&(A=(o,n)=>{let i;return Promise.resolve().then(o.bind(null,n)).then(a=>(i=a,s(i,n))).then(()=>i)}),e==="error"&&(A=(o,n)=>Promise.resolve().then(o.bind(null,n)).catch(i=>s(i,n))),t.registry[r].push({hook:A,orig:s})}function Jp(t,e,r){if(!t.registry[e])return;let A=t.registry[e].map(s=>s.orig).indexOf(r);A!==-1&&t.registry[e].splice(A,1)}var Pp=Function.bind,Hp=Pp.bind(Pp);function Vp(t,e,r){let A=Hp(Jp,null).apply(null,r?[e,r]:[e]);t.api={remove:A},t.remove=A,["before","error","after","wrap"].forEach(s=>{let o=r?[e,s,r]:[e,s];t[s]=t.api[s]=Hp(_p,null).apply(null,o)})}function Yv(){let t=Symbol("Singular"),e={registry:{}},r=wi.bind(null,e,t);return Vp(r,e,t),r}function _v(){let t={registry:{}},e=wi.bind(null,t);return Vp(e,t),e}var qp={Singular:Yv,Collection:_v};var Jv="0.0.0-development",Pv=`octokit-endpoint.js/${Jv} ${gr()}`,Hv={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Pv},mediaType:{format:""}};function Vv(t){return t?Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{}):{}}function qv(t){if(typeof t!="object"||t===null||Object.prototype.toString.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);if(e===null)return!0;let r=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.call(r)===Function.prototype.call(t)}function Zp(t,e){let r=Object.assign({},t);return Object.keys(e).forEach(A=>{qv(e[A])?A in t?r[A]=Zp(t[A],e[A]):Object.assign(r,{[A]:e[A]}):Object.assign(r,{[A]:e[A]})}),r}function Wp(t){for(let e in t)t[e]===void 0&&delete t[e];return t}function _l(t,e,r){if(typeof e=="string"){let[s,o]=e.split(" ");r=Object.assign(o?{method:s,url:o}:{url:s},r)}else r=Object.assign({},e);r.headers=Vv(r.headers),Wp(r),Wp(r.headers);let A=Zp(t||{},r);return r.url==="/graphql"&&(t&&t.mediaType.previews?.length&&(A.mediaType.previews=t.mediaType.previews.filter(s=>!A.mediaType.previews.includes(s)).concat(A.mediaType.previews)),A.mediaType.previews=(A.mediaType.previews||[]).map(s=>s.replace(/-preview/,""))),A}function Wv(t,e){let r=/\?/.test(t)?"&":"?",A=Object.keys(e);return A.length===0?t:t+r+A.map(s=>s==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${s}=${encodeURIComponent(e[s])}`).join("&")}var zv=/\{[^{}}]+\}/g;function Zv(t){return t.replace(/(?:^\W+)|(?:(?r.concat(A),[]):[]}function zp(t,e){let r={__proto__:null};for(let A of Object.keys(t))e.indexOf(A)===-1&&(r[A]=t[A]);return r}function jp(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function WA(t){return encodeURIComponent(t).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Ao(t,e,r){return e=t==="+"||t==="#"?jp(e):WA(e),r?WA(r)+"="+e:e}function qA(t){return t!=null}function Yl(t){return t===";"||t==="&"||t==="?"}function Kv(t,e,r,A){var s=t[r],o=[];if(qA(s)&&s!=="")if(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||typeof s=="boolean")s=s.toString(),A&&A!=="*"&&(s=s.substring(0,parseInt(A,10))),o.push(Ao(e,s,Yl(e)?r:""));else if(A==="*")Array.isArray(s)?s.filter(qA).forEach(function(n){o.push(Ao(e,n,Yl(e)?r:""))}):Object.keys(s).forEach(function(n){qA(s[n])&&o.push(Ao(e,s[n],n))});else{let n=[];Array.isArray(s)?s.filter(qA).forEach(function(i){n.push(Ao(e,i))}):Object.keys(s).forEach(function(i){qA(s[i])&&(n.push(WA(i)),n.push(Ao(e,s[i].toString())))}),Yl(e)?o.push(WA(r)+"="+n.join(",")):n.length!==0&&o.push(n.join(","))}else e===";"?qA(s)&&o.push(WA(r)):s===""&&(e==="&"||e==="?")?o.push(WA(r)+"="):s===""&&o.push("");return o}function Xv(t){return{expand:$v.bind(null,t)}}function $v(t,e){var r=["+","#",".","/",";","?","&"];return t=t.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(A,s,o){if(s){let i="",a=[];if(r.indexOf(s.charAt(0))!==-1&&(i=s.charAt(0),s=s.substr(1)),s.split(/,/g).forEach(function(c){var g=/([^:\*]*)(?::(\d+)|(\*))?/.exec(c);a.push(Kv(e,i,g[1],g[2]||g[3]))}),i&&i!=="+"){var n=",";return i==="?"?n="&":i!=="#"&&(n=i),(a.length!==0?i:"")+a.join(n)}else return a.join(",")}else return jp(o)}),t==="/"?t:t.replace(/\/$/,"")}function Kp(t){let e=t.method.toUpperCase(),r=(t.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),A=Object.assign({},t.headers),s,o=zp(t,["method","baseUrl","url","headers","request","mediaType"]),n=jv(r);r=Xv(r).expand(o),/^http/.test(r)||(r=t.baseUrl+r);let i=Object.keys(t).filter(g=>n.includes(g)).concat("baseUrl"),a=zp(o,i);if(!/application\/octet-stream/i.test(A.accept)&&(t.mediaType.format&&(A.accept=A.accept.split(/,/).map(g=>g.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${t.mediaType.format}`)).join(",")),r.endsWith("/graphql")&&t.mediaType.previews?.length)){let g=A.accept.match(/(?{let u=t.mediaType.format?`.${t.mediaType.format}`:"+json";return`application/vnd.github.${l}-preview${u}`}).join(",")}return["GET","HEAD"].includes(e)?r=Wv(r,a):"data"in a?s=a.data:Object.keys(a).length&&(s=a),!A["content-type"]&&typeof s<"u"&&(A["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof s>"u"&&(s=""),Object.assign({method:e,url:r,headers:A},typeof s<"u"?{body:s}:null,t.request?{request:t.request}:null)}function ex(t,e,r){return Kp(_l(t,e,r))}function Xp(t,e){let r=_l(t,e),A=ex.bind(null,r);return Object.assign(A,{DEFAULTS:r,defaults:Xp.bind(null,r),merge:_l.bind(null,r),parse:Kp})}var $p=Xp(null,Hv);var Im=W(nm(),1);var gx=/^-?\d+$/,Di=/^-?\d+n+$/,lr=JSON.stringify,Vl=JSON.parse,lm=/^-?\d+n$/,im=/([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g,am=/([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g,ql=t=>t===void 0||typeof t=="function"||typeof t=="symbol",Wl=t=>t!==null&&typeof t=="object"&&t.constructor&&t.constructor.name==="RawJSON",lx=(t,e,r)=>{let A="";typeof r=="number"?A=" ".repeat(Math.min(10,Math.max(0,Math.floor(r)))):typeof r=="string"&&(A=r.slice(0,10));let s=typeof e=="function",o=Array.isArray(e)?new Set(e.map(String)):null,n=(h,C,I)=>(I!==null&&typeof I=="object"&&typeof I.toJSON=="function"&&(I=I.toJSON(C)),typeof I=="string"&&Di.test(I)?I+"n":typeof I=="bigint"?"rawJSON"in JSON?JSON.rawJSON(I.toString()):I.toString()+"n":(s&&(I=e.call(h,C,I)),I!==null&&typeof I=="object"&&(I instanceof Number||I instanceof String||I instanceof Boolean)&&(I=I.valueOf()),I)),i=n({"":t},"",t);if(ql(i))return;let a=i===null||typeof i!="object",c=Wl(i);if(a||c)return lr(i);let g=[],l=0,u=[{parent:{"":i},key:"",val:i,isArray:Array.isArray(i),keys:Array.isArray(i)?null:Object.keys(i),index:0,first:!0}],E=new WeakSet([i]);for(;u.length>0;){let h=u[u.length-1];h.index===0&&(g.push(h.isArray?"[":"{"),l++);let C=!1;if(h.isArray)if(h.index=h.keys.length&&u[u.length-1]===h&&(C=!0)}C&&(l--,!h.first&&A&&g.push(` -`+A.repeat(l)),g.push(h.isArray?"]":"}"),E.delete(h.val),u.pop())}return g.join("")},um=(t,e,r)=>{try{return"rawJSON"in JSON?lr(t,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r):t?lr(t,(i,a)=>typeof a=="string"&&Di.test(a)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r).replace(im,"$1$2$3").replace(am,"$1$2$3"):lr(t,e,r)}catch(A){if(A instanceof RangeError){let s=lx(t,e,r);return s===void 0?void 0:"rawJSON"in JSON?s:s.replace(im,"$1$2$3").replace(am,"$1$2$3")}throw A}},Ri=new Map,ux=()=>{let t=JSON.parse.toString();if(Ri.has(t))return Ri.get(t);try{let e=JSON.parse("1",(r,A,s)=>!!s?.source&&s.source==="1");return Ri.set(t,e),e}catch{return Ri.set(t,!1),!1}},Ex=(t,e,r,A)=>typeof e=="string"&&lm.test(e)?BigInt(e.slice(0,-1)):typeof e=="string"&&Di.test(e)?e.slice(0,-1):typeof A=="function"?A(t,e,r):e,hx=(t,e)=>JSON.parse(t,(r,A,s)=>{let o=typeof A=="number",n=A>Number.MAX_SAFE_INTEGER||A{let r={"":t},A=[{parent:r,key:"",visited:!1}];for(;A.length>0;){let s=A[A.length-1];if(s.visited){let{parent:o,key:n}=s,i=o[n];typeof i=="string"&&(lm.test(i)?i=BigInt(i.slice(0,-1)):Di.test(i)&&(i=i.slice(0,-1))),typeof e=="function"&&(i=e.call(o,n,i)),i===void 0?delete o[n]:o[n]=i,A.pop()}else{s.visited=!0;let o=s.parent[s.key];if(o!==null&&typeof o=="object"){let i=Object.keys(o);for(let a=i.length-1;a>=0;a--)A.push({parent:o,key:i[a],visited:!1})}}}return r[""]},gm=t=>t.replace(Qx,(e,r,A,s)=>{let o=e[0]==='"';if(o&&Bx.test(e))return e.substring(0,e.length-1)+'n"';let i=A||s,a=r&&(r.length{if(!t)return Vl(t,e);try{if(ux())return hx(t,e);let r=gm(t);return Vl(r,(A,s,o)=>Ex(A,s,o,e))}catch(r){if(r instanceof RangeError){let A=gm(t),s=Vl(A);return Ix(s,e)}throw r}};var Jr=class extends Error{name;status;request;response;constructor(e,r,A){super(e,{cause:A.cause}),this.name="HttpError",this.status=Number.parseInt(r),Number.isNaN(this.status)&&(this.status=0);"response"in A&&(this.response=A.response);let s=Object.assign({},A.request);A.request.headers.authorization&&(s.headers=Object.assign({},A.request.headers,{authorization:A.request.headers.authorization.replace(/(?"";async function Bm(t){let e=t.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let r=t.request?.log||console,A=t.request?.parseSuccessResponseBody!==!1,s=fx(t.body)||Array.isArray(t.body)?um(t.body):t.body,o=Object.fromEntries(Object.entries(t.headers).map(([l,u])=>[l,String(u)])),n;try{n=await e(t.url,{method:t.method,body:s,redirect:t.request?.redirect,headers:o,signal:t.request?.signal,...t.body&&{duplex:"half"}})}catch(l){let u="Unknown Error";if(l instanceof Error){if(l.name==="AbortError")throw l.status=500,l;u=l.message,l.name==="TypeError"&&"cause"in l&&(l.cause instanceof Error?u=l.cause.message:typeof l.cause=="string"&&(u=l.cause))}let E=new Jr(u,500,{request:t});throw E.cause=l,E}let i=n.status,a=n.url,c={};for(let[l,u]of n.headers)c[l]=u;let g={url:a,status:i,headers:c,data:""};if("deprecation"in c){let l=c.link&&c.link.match(/<([^<>]+)>; rel="deprecation"/),u=l&&l.pop();r.warn(`[@octokit/request] "${t.method} ${t.url}" is deprecated. It is scheduled to be removed on ${c.sunset}${u?`. See ${u}`:""}`)}if(i===204||i===205)return g;if(t.method==="HEAD"){if(i<400)return g;throw new Jr(n.statusText,i,{response:g,request:t})}if(i===304)throw g.data=await zl(n),new Jr("Not modified",i,{response:g,request:t});if(i>=400)throw g.data=await zl(n),new Jr(mx(g.data),i,{response:g,request:t});return g.data=A?await zl(n):n.body,g}async function zl(t){let e=t.headers.get("content-type");if(!e)return t.text().catch(Qm);let r=(0,Im.parse)(e);if(px(r)){let A="";try{return A=await t.text(),hm(A)}catch{return A}}else return r.type.startsWith("text/")||r.parameters.charset?.toLowerCase()==="utf-8"?t.text().catch(Qm):t.arrayBuffer().catch(()=>new ArrayBuffer(0))}function px(t){return t.type==="application/json"||t.type==="application/scim+json"}function mx(t){if(typeof t=="string")return t;if(t instanceof ArrayBuffer)return"Unknown error";if(typeof t=="object"&&t!==null&&"message"in t){let e=t,r="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(A=>JSON.stringify(A)).join(", ")}${r}`:`${e.message}${r}`}return`Unknown error: ${JSON.stringify(t)}`}function Zl(t,e){let r=t.defaults(e);return Object.assign(function(s,o){let n=r.merge(s,o);if(!n.request||!n.request.hook)return Bm(r.parse(n));let i=(a,c)=>Bm(r.parse(r.merge(a,c)));return Object.assign(i,{endpoint:r,defaults:Zl.bind(null,r)}),n.request.hook(i,n)},{endpoint:r,defaults:Zl.bind(null,r)})}var so=Zl($p,dx);var wx="0.0.0-development";function yx(t){return`Request failed due to following response errors: -`+t.errors.map(e=>` - ${e.message}`).join(` -`)}var Rx=class extends Error{constructor(t,e,r){super(yx(r)),this.request=t,this.headers=e,this.response=r,this.errors=r.errors,this.data=r.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},Dx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],Tx=["query","method","url"],Cm=/\/api\/v3\/?$/;function bx(t,e,r){if(r){if(typeof e=="string"&&"query"in r)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let n in r)if(Tx.includes(n))return Promise.reject(new Error(`[@octokit/graphql] "${n}" cannot be used as variable name`))}let A=typeof e=="string"?Object.assign({query:e},r):e,s=Object.keys(A).reduce((n,i)=>Dx.includes(i)?(n[i]=A[i],n):(n.variables||(n.variables={}),n.variables[i]=A[i],n),{}),o=A.baseUrl||t.endpoint.DEFAULTS.baseUrl;return Cm.test(o)&&(s.url=o.replace(Cm,"/api/graphql")),t(s).then(n=>{if(n.data.errors){let i={};for(let a of Object.keys(n.headers))i[a]=n.headers[a];throw new Rx(s,i,n.data)}return n.data.data})}function jl(t,e){let r=t.defaults(e);return Object.assign((s,o)=>bx(r,s,o),{defaults:jl.bind(null,r),endpoint:r.endpoint})}var a2=jl(so,{headers:{"user-agent":`octokit-graphql.js/${wx} ${gr()}`},method:"POST",url:"/graphql"});function dm(t){return jl(t,{method:"POST",url:"/graphql"})}var Kl="(?:[a-zA-Z0-9_-]+)",fm="\\.",pm=new RegExp(`^${Kl}${fm}${Kl}${fm}${Kl}$`),kx=pm.test.bind(pm);async function Fx(t){let e=kx(t),r=t.startsWith("v1.")||t.startsWith("ghs_"),A=t.startsWith("ghu_");return{type:"token",token:t,tokenType:e?"app":r?"installation":A?"user-to-server":"oauth"}}function Sx(t){return t.split(/\./).length===3?`bearer ${t}`:`token ${t}`}async function Nx(t,e,r,A){let s=e.endpoint.merge(r,A);return s.headers.authorization=Sx(t),e(s)}var mm=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(Fx.bind(null,e),{hook:Nx.bind(null,e)})};var Xl="7.0.6";var wm=()=>{},Ux=console.warn.bind(console),Gx=console.error.bind(console);function Lx(t={}){return typeof t.debug!="function"&&(t.debug=wm),typeof t.info!="function"&&(t.info=wm),typeof t.warn!="function"&&(t.warn=Ux),typeof t.error!="function"&&(t.error=Gx),t}var ym=`octokit-core.js/${Xl} ${gr()}`,Ti=class{static VERSION=Xl;static defaults(e){return class extends this{constructor(...A){let s=A[0]||{};if(typeof e=="function"){super(e(s));return}super(Object.assign({},e,s,s.userAgent&&e.userAgent?{userAgent:`${s.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let r=this.plugins;return class extends this{static plugins=r.concat(e.filter(s=>!r.includes(s)))}}constructor(e={}){let r=new qp.Collection,A={baseUrl:so.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:r.bind(null,"request")}),mediaType:{previews:[],format:""}};if(A.headers["user-agent"]=e.userAgent?`${e.userAgent} ${ym}`:ym,e.baseUrl&&(A.baseUrl=e.baseUrl),e.previews&&(A.mediaType.previews=e.previews),e.timeZone&&(A.headers["time-zone"]=e.timeZone),this.request=so.defaults(A),this.graphql=dm(this.request).defaults(A),this.log=Lx(e.log),this.hook=r,e.authStrategy){let{authStrategy:o,...n}=e,i=o(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:n},e.auth));r.wrap("request",i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let o=mm(e.auth);r.wrap("request",o.hook),this.auth=o}let s=this.constructor;for(let o=0;o({async next(){if(!i)return{done:!0};try{let a=await s({method:o,url:i,headers:n}),c=_x(a);if(i=((c.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!i&&"total_commits"in c.data){let g=new URL(c.url),l=g.searchParams,u=parseInt(l.get("page")||"1",10),E=parseInt(l.get("per_page")||"250",10);u*E{if(s.done)return e;let o=!1;function n(){o=!0}return e=e.concat(A?A(s.value,n):s.value.data),o?e:Tm(t,e,r,A)})}var k2=Object.assign(Dm,{iterator:ru});function Au(t){return{paginate:Object.assign(Dm.bind(null,t),{iterator:ru.bind(null,t)})}}Au.VERSION=Yx;var G2=new VA,su=Yp(),Jx={baseUrl:su,request:{agent:xp(su),fetch:Op(su)}},bm=Ti.plugin(tu,Au).defaults(Jx);function km(t,e){let r=Object.assign({},e||{}),A=vp(t,r);A&&(r.auth=A);let s=Ol(r.userAgent);return s&&(r.userAgent=s),r}var x2=new VA;function Fm(t,e,...r){let A=bm.plugin(...r);return new A(km(t,e))}var Tu=W(require("crypto"),1),Hr=W(require("fs"),1);var j_=W(Ru(),1);var go=W(require("path"),1);var Ji=W(Ru(),1),my=W(require("stream"),1),wy=W(require("util"),1),yy=require("assert");var py=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Yi=class{constructor(e,r,A){if(e<1)throw new Error("max attempts should be greater than or equal to 1");if(this.maxAttempts=e,this.minSeconds=Math.floor(r),this.maxSeconds=Math.floor(A),this.minSeconds>this.maxSeconds)throw new Error("min seconds should be less than or equal to max seconds")}execute(e,r){return py(this,void 0,void 0,function*(){let A=1;for(;AsetTimeout(r,e*1e3))})}};var Er=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},_i=class extends Error{constructor(e){super(`Unexpected HTTP response: ${e}`),this.httpStatusCode=e,Object.setPrototypeOf(this,new.target.prototype)}},Ry=process.platform==="win32",vV=process.platform==="darwin",X_="actions/tool-cache";function Dy(t,e,r,A){return Er(this,void 0,void 0,function*(){e=e||go.join(Fy(),Tu.randomUUID()),yield Tl(go.dirname(e)),Ue(`Downloading ${t}`),Ue(`Destination ${e}`);let s=3,o=Du("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS",10),n=Du("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS",20);return yield new Yi(s,o,n).execute(()=>Er(this,void 0,void 0,function*(){return yield $_(t,e||"",r,A)}),a=>!(a instanceof _i&&a.httpStatusCode&&a.httpStatusCode<500&&a.httpStatusCode!==408&&a.httpStatusCode!==429))})}function $_(t,e,r,A){return Er(this,void 0,void 0,function*(){if(Hr.existsSync(e))throw new Error(`Destination file path ${e} already exists`);let s=new Xs(X_,[],{allowRetries:!1});r&&(Ue("set auth"),A===void 0&&(A={}),A.authorization=r);let o=yield s.get(t,A);if(o.message.statusCode!==200){let g=new _i(o.message.statusCode);throw Ue(`Failed to download from "${t}". Code(${o.message.statusCode}) Message(${o.message.statusMessage})`),g}let n=wy.promisify(my.pipeline),a=Du("TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY",()=>o.message)(),c=!1;try{return yield n(a,Hr.createWriteStream(e)),Ue("download complete"),c=!0,e}finally{if(!c){Ue("download failed");try{yield fp(e)}catch(g){Ue(`Failed to delete '${e}'. ${g.message}`)}}}})}function Ty(t,e){return Er(this,arguments,void 0,function*(r,A,s="xz"){if(!r)throw new Error("parameter 'file' is required");A=yield ky(A),Ue("Checking tar --version");let o="";yield cr("tar --version",[],{ignoreReturnCode:!0,silent:!0,listeners:{stdout:g=>o+=g.toString(),stderr:g=>o+=g.toString()}}),Ue(o.trim());let n=o.toUpperCase().includes("GNU TAR"),i;s instanceof Array?i=s:i=[s],Nl()&&!s.includes("v")&&i.push("-v");let a=A,c=r;return Ry&&n&&(i.push("--force-local"),a=A.replace(/\\/g,"/"),c=r.replace(/\\/g,"/")),n&&(i.push("--warning=no-unknown-keyword"),i.push("--overwrite")),i.push("-C",a,"-f",c),yield cr("tar",i),A})}function by(t,e){return Er(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'file' is required");return e=yield ky(e),Ry?yield eJ(t,e):yield tJ(t,e),e})}function eJ(t,e){return Er(this,void 0,void 0,function*(){let r=t.replace(/'/g,"''").replace(/"|\n|\r/g,""),A=e.replace(/'/g,"''").replace(/"|\n|\r/g,""),s=yield _r("pwsh",!1);if(s){let n=["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;",`try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`,`catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force } else { throw $_ } } ;`].join(" ")];Ue(`Using pwsh at path: ${s}`),yield cr(`"${s}"`,n)}else{let n=["-NoLogo","-Sta","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;",`if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force }`,`else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`].join(" ")],i=yield _r("powershell",!0);Ue(`Using powershell at path: ${i}`),yield cr(`"${i}"`,n)}})}function tJ(t,e){return Er(this,void 0,void 0,function*(){let r=yield _r("unzip",!0),A=[t];Nl()||A.unshift("-q"),A.unshift("-o"),yield cr(`"${r}"`,A,{cwd:e})})}function ky(t){return Er(this,void 0,void 0,function*(){return t||(t=go.join(Fy(),Tu.randomUUID())),yield Tl(t),t})}function Fy(){let t=process.env.RUNNER_TEMP||"";return(0,yy.ok)(t,"Expected RUNNER_TEMP to be defined"),t}function Du(t,e){let r=global[t];return r!==void 0?r:e}var Sy=` - fragment releaseFields on Release { - tagName - releaseAssets(first: 50) { - nodes { - name - downloadUrl - } - } - } - `;(async()=>{let t=Fm(""),e=bp("zb-version"),r=e?{query:` - query releaseAssetsForVersion($tagName: String!) { - repository(owner: "256lights", repo: "zb") { - release(tagName: $tagName) { - ...releaseFields - } - } - } - - ${Sy} - `,tagName:"v"+e}:{query:` - query releaseAssetsForLatest { - repository(owner: "256lights", repo: "zb") { - release: latestRelease { - ...releaseFields - } - } - } - - ${Sy} - `},s=(await t.graphql(r)).repository.release,o=s?.releaseAssets?.nodes||[],n;if(hr.platform==="darwin"&&hr.arch==="arm64"?n=o.find(({name:c})=>c.includes("aarch64-apple-macos")):hr.platform==="linux"&&hr.arch==="x64"&&(n=o.find(({name:c})=>c.includes("x86_64-unknown-linux"))),!n){kp(`No download found for ${hr.arch}-${hr.platform} version ${s?.tagName||e}`);return}let i=await Dy(n.downloadUrl),a=n.downloadUrl.endsWith(".zip")?await by(i):await Ty(i);await cr(Ny.default.join(a,"install"),["--single-user","--no-systemd","--no-launchd"])})(); +console.log("Hello, World!"); /** * @license * Copyright 2026 The zb Authors * SPDX-License-Identifier: MIT */ -/*! Bundled license information: - -undici/lib/web/fetch/body.js: - (*! formdata-polyfill. MIT License. Jimmy Wärting *) - -undici/lib/web/websocket/frame.js: - (*! ws. MIT License. Einar Otto Stangvik *) - -content-type/dist/index.js: - (*! - * content-type - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - *) - -@octokit/request-error/dist-src/index.js: - (* v8 ignore else -- @preserve -- Bug with vitest coverage where it sees an else branch that doesn't exist *) - -@octokit/request/dist-bundle/index.js: - (* v8 ignore next -- @preserve *) - (* v8 ignore else -- @preserve *) -*/ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90dW5uZWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdHJlZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9kaWFnbm9zdGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlci1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3V0aWwvdGltZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kYXRhLXVybC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZm9ybWRhdGEtcGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmVkaXJlY3QtaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wtYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmV0cnktaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3JldHJ5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZHVtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9lbmNvZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS9jYWNoZXN0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvcGFyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2ZyYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc2VuZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvY29udGVudC10eXBlL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9wYXJzZS1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvaWRlbnRpZmllcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9jbGFzc2VzL3NlbXZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy92YWxpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9pbmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZGlmZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9tYWpvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9taW5vci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wcmVyZWxlYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvbXBhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcmNvbXBhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29tcGFyZS1sb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLWJ1aWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcnNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZ3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbmVxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9sdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY21wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvZXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy90cnVuY2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2xydWNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9yYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvY29tcGFyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdG8tY29tcGFyYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWF4LXNhdGlzZnlpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXNhdGlzZnlpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdmFsaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvb3V0c2lkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9ndHIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbHRyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL2ludGVyc2VjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc2ltcGxpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc3Vic2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW5kZXguanMiLCAiLi4vc3JjL21haW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL2NvbW1hbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9wcm94eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvcGxhdGZvcm0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL3Rvb2xydW5uZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vc3JjL2lvLXV0aWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL2V4ZWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvY29udGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL3NyYy9pbnRlcm5hbC91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLXVzZXItYWdlbnQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9qc29uLXdpdGgtYmlnaW50L2pzb24td2l0aC1iaWdpbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QtZXJyb3IvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2F1dGgtdG9rZW4vZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL3ZlcnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvZ2l0aHViLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy90b29sLWNhY2hlL3NyYy90b29sLWNhY2hlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy90b29sLWNhY2hlL3NyYy9tYW5pZmVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvdG9vbC1jYWNoZS9zcmMvcmV0cnktaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3R1bm5lbCcpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga0Rlc3Ryb3k6IFN5bWJvbCgnZGVzdHJveScpLFxuICBrRGlzcGF0Y2g6IFN5bWJvbCgnZGlzcGF0Y2gnKSxcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga1dyaXRpbmc6IFN5bWJvbCgnd3JpdGluZycpLFxuICBrUmVzdW1pbmc6IFN5bWJvbCgncmVzdW1pbmcnKSxcbiAga1F1ZXVlOiBTeW1ib2woJ3F1ZXVlJyksXG4gIGtDb25uZWN0OiBTeW1ib2woJ2Nvbm5lY3QnKSxcbiAga0Nvbm5lY3Rpbmc6IFN5bWJvbCgnY29ubmVjdGluZycpLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQ6IFN5bWJvbCgnZGVmYXVsdCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQ6IFN5bWJvbCgnbWF4IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZDogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQgdGhyZXNob2xkJyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWU6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmU6IFN5bWJvbCgna2VlcCBhbGl2ZScpLFxuICBrSGVhZGVyc1RpbWVvdXQ6IFN5bWJvbCgnaGVhZGVycyB0aW1lb3V0JyksXG4gIGtCb2R5VGltZW91dDogU3ltYm9sKCdib2R5IHRpbWVvdXQnKSxcbiAga1NlcnZlck5hbWU6IFN5bWJvbCgnc2VydmVyIG5hbWUnKSxcbiAga0xvY2FsQWRkcmVzczogU3ltYm9sKCdsb2NhbCBhZGRyZXNzJyksXG4gIGtIb3N0OiBTeW1ib2woJ2hvc3QnKSxcbiAga05vUmVmOiBTeW1ib2woJ25vIHJlZicpLFxuICBrQm9keVVzZWQ6IFN5bWJvbCgndXNlZCcpLFxuICBrQm9keTogU3ltYm9sKCdhYnN0cmFjdGVkIHJlcXVlc3QgYm9keScpLFxuICBrUnVubmluZzogU3ltYm9sKCdydW5uaW5nJyksXG4gIGtCbG9ja2luZzogU3ltYm9sKCdibG9ja2luZycpLFxuICBrUGVuZGluZzogU3ltYm9sKCdwZW5kaW5nJyksXG4gIGtTaXplOiBTeW1ib2woJ3NpemUnKSxcbiAga0J1c3k6IFN5bWJvbCgnYnVzeScpLFxuICBrUXVldWVkOiBTeW1ib2woJ3F1ZXVlZCcpLFxuICBrRnJlZTogU3ltYm9sKCdmcmVlJyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJyksXG4gIGtDbG9zZWQ6IFN5bWJvbCgnY2xvc2VkJyksXG4gIGtOZWVkRHJhaW46IFN5bWJvbCgnbmVlZCBkcmFpbicpLFxuICBrUmVzZXQ6IFN5bWJvbCgncmVzZXQnKSxcbiAga0Rlc3Ryb3llZDogU3ltYm9sLmZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKSxcbiAga1Jlc3VtZTogU3ltYm9sKCdyZXN1bWUnKSxcbiAga09uRXJyb3I6IFN5bWJvbCgnb24gZXJyb3InKSxcbiAga01heEhlYWRlcnNTaXplOiBTeW1ib2woJ21heCBoZWFkZXJzIHNpemUnKSxcbiAga1J1bm5pbmdJZHg6IFN5bWJvbCgncnVubmluZyBpbmRleCcpLFxuICBrUGVuZGluZ0lkeDogU3ltYm9sKCdwZW5kaW5nIGluZGV4JyksXG4gIGtFcnJvcjogU3ltYm9sKCdlcnJvcicpLFxuICBrQ2xpZW50czogU3ltYm9sKCdjbGllbnRzJyksXG4gIGtDbGllbnQ6IFN5bWJvbCgnY2xpZW50JyksXG4gIGtQYXJzZXI6IFN5bWJvbCgncGFyc2VyJyksXG4gIGtPbkRlc3Ryb3llZDogU3ltYm9sKCdkZXN0cm95IGNhbGxiYWNrcycpLFxuICBrUGlwZWxpbmluZzogU3ltYm9sKCdwaXBlbGluaW5nJyksXG4gIGtTb2NrZXQ6IFN5bWJvbCgnc29ja2V0JyksXG4gIGtIb3N0SGVhZGVyOiBTeW1ib2woJ2hvc3QgaGVhZGVyJyksXG4gIGtDb25uZWN0b3I6IFN5bWJvbCgnY29ubmVjdG9yJyksXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoOiBTeW1ib2woJ3N0cmljdCBjb250ZW50IGxlbmd0aCcpLFxuICBrTWF4UmVkaXJlY3Rpb25zOiBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpLFxuICBrTWF4UmVxdWVzdHM6IFN5bWJvbCgnbWF4UmVxdWVzdHNQZXJDbGllbnQnKSxcbiAga1Byb3h5OiBTeW1ib2woJ3Byb3h5IGFnZW50IG9wdGlvbnMnKSxcbiAga0NvdW50ZXI6IFN5bWJvbCgnc29ja2V0IHJlcXVlc3QgY291bnRlcicpLFxuICBrSW50ZXJjZXB0b3JzOiBTeW1ib2woJ2Rpc3BhdGNoIGludGVyY2VwdG9ycycpLFxuICBrTWF4UmVzcG9uc2VTaXplOiBTeW1ib2woJ21heCByZXNwb25zZSBzaXplJyksXG4gIGtIVFRQMlNlc3Npb246IFN5bWJvbCgnaHR0cDJTZXNzaW9uJyksXG4gIGtIVFRQMlNlc3Npb25TdGF0ZTogU3ltYm9sKCdodHRwMlNlc3Npb24gc3RhdGUnKSxcbiAga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeTogU3ltYm9sKCdyZXRyeSBhZ2VudCBkZWZhdWx0IHJldHJ5JyksXG4gIGtDb25zdHJ1Y3Q6IFN5bWJvbCgnY29uc3RydWN0YWJsZScpLFxuICBrTGlzdGVuZXJzOiBTeW1ib2woJ2xpc3RlbmVycycpLFxuICBrSFRUUENvbnRleHQ6IFN5bWJvbCgnaHR0cCBjb250ZXh0JyksXG4gIGtNYXhDb25jdXJyZW50U3RyZWFtczogU3ltYm9sKCdtYXggY29uY3VycmVudCBzdHJlYW1zJyksXG4gIGtOb1Byb3h5QWdlbnQ6IFN5bWJvbCgnbm8gcHJveHkgYWdlbnQnKSxcbiAga0h0dHBQcm94eUFnZW50OiBTeW1ib2woJ2h0dHAgcHJveHkgYWdlbnQnKSxcbiAga0h0dHBzUHJveHlBZ2VudDogU3ltYm9sKCdodHRwcyBwcm94eSBhZ2VudCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGtVbmRpY2lFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSJylcbmNsYXNzIFVuZGljaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1VuZGljaUVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrVW5kaWNpRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1VuZGljaUVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0Nvbm5lY3RUaW1lb3V0RXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnKVxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdDb25uZWN0VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0Nvbm5lY3QgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tDb25uZWN0VGltZW91dEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tDb25uZWN0VGltZW91dEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0hlYWRlcnNUaW1lb3V0RXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnKVxuY2xhc3MgSGVhZGVyc1RpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzVGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tIZWFkZXJzVGltZW91dEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tIZWFkZXJzVGltZW91dEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0hlYWRlcnNPdmVyZmxvd0Vycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfSEVBREVSU19PVkVSRkxPVycpXG5jbGFzcyBIZWFkZXJzT3ZlcmZsb3dFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzT3ZlcmZsb3dFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIE92ZXJmbG93IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfT1ZFUkZMT1cnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tIZWFkZXJzT3ZlcmZsb3dFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrSGVhZGVyc092ZXJmbG93RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrQm9keVRpbWVvdXRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX0JPRFlfVElNRU9VVCcpXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0JvZHlUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQm9keSBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0JPRFlfVElNRU9VVCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0JvZHlUaW1lb3V0RXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba0JvZHlUaW1lb3V0RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERScpXG5jbGFzcyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIGJvZHkpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZVN0YXR1c0NvZGVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBTdGF0dXMgQ29kZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERSdcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXNwb25zZVN0YXR1c0NvZGVFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtJbnZhbGlkQXJndW1lbnRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX0lOVkFMSURfQVJHJylcbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tJbnZhbGlkQXJndW1lbnRFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrSW52YWxpZEFyZ3VtZW50RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrSW52YWxpZFJldHVyblZhbHVlRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRScpXG5jbGFzcyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIFJldHVybiBWYWx1ZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0ludmFsaWRSZXR1cm5WYWx1ZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtBYm9ydEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQUJPUlQnKVxuY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQUJPUlQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tBYm9ydEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tBYm9ydEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga1JlcXVlc3RBYm9ydGVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9BQk9SVEVEJylcbmNsYXNzIFJlcXVlc3RBYm9ydGVkRXJyb3IgZXh0ZW5kcyBBYm9ydEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYWJvcnRlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9BQk9SVEVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrUmVxdWVzdEFib3J0ZWRFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrUmVxdWVzdEFib3J0ZWRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtJbmZvcm1hdGlvbmFsRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9JTkZPJylcbmNsYXNzIEluZm9ybWF0aW9uYWxFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrSW5mb3JtYXRpb25hbEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tJbmZvcm1hdGlvbmFsRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJylcbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCcpXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrQ2xpZW50RGVzdHJveWVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9ERVNUUk9ZRUQnKVxuY2xhc3MgQ2xpZW50RGVzdHJveWVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50RGVzdHJveWVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBkZXN0cm95ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfREVTVFJPWUVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrQ2xpZW50RGVzdHJveWVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba0NsaWVudERlc3Ryb3llZEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0NsaWVudENsb3NlZEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQ0xPU0VEJylcbmNsYXNzIENsaWVudENsb3NlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudENsb3NlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgY2xvc2VkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NMT1NFRCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0NsaWVudENsb3NlZEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tDbGllbnRDbG9zZWRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtTb2NrZXRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1NPQ0tFVCcpXG5jbGFzcyBTb2NrZXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHNvY2tldCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1NvY2tldEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1NvY2tldCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9TT0NLRVQnXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1NvY2tldEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tTb2NrZXRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtOb3RTdXBwb3J0ZWRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX05PVF9TVVBQT1JURUQnKVxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrTm90U3VwcG9ydGVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba05vdFN1cHBvcnRlZEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0JhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nKVxuY2xhc3MgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1Vwc3RyZWFtRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm8gdXBzdHJlYW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIEJhbGFuY2VkUG9vbCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CUExfTUlTU0lOR19VUFNUUkVBTSdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0JhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtIVFRQUGFyc2VyRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9IVFRQX1BBUlNFUicpXG5jbGFzcyBIVFRQUGFyc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnSFRUUFBhcnNlckVycm9yJ1xuICAgIHRoaXMuY29kZSA9IGNvZGUgPyBgSFBFXyR7Y29kZX1gIDogdW5kZWZpbmVkXG4gICAgdGhpcy5kYXRhID0gZGF0YSA/IGRhdGEudG9TdHJpbmcoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrSFRUUFBhcnNlckVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tIVFRQUGFyc2VyRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1JFU19FWENFRURFRF9NQVhfU0laRScpXG5jbGFzcyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga1JlcXVlc3RSZXRyeUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVRX1JFVFJZJylcbmNsYXNzIFJlcXVlc3RSZXRyeUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgeyBoZWFkZXJzLCBkYXRhIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0UmV0cnlFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IHJldHJ5IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9SRVRSWSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1JlcXVlc3RSZXRyeUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXF1ZXN0UmV0cnlFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtSZXNwb25zZUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVTUE9OU0UnKVxuY2xhc3MgUmVzcG9uc2VFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIHsgaGVhZGVycywgZGF0YSB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1Jlc3BvbnNlRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9QUlhfVExTJylcbmNsYXNzIFNlY3VyZVByb3h5Q29ubmVjdGlvbkVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoY2F1c2UsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlLCAuLi4ob3B0aW9ucyA/PyB7fSkgfSlcbiAgICB0aGlzLm5hbWUgPSAnU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnU2VjdXJlIFByb3h5IENvbm5lY3Rpb24gZmFpbGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1BSWF9UTFMnXG4gICAgdGhpcy5jYXVzZSA9IGNhdXNlXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfV1NfTUVTU0FHRV9TSVpFX0VYQ0VFREVEJylcbmNsYXNzIE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTWF4IGRlY29tcHJlc3NlZCBtZXNzYWdlIHNpemUgZXhjZWVkZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfV1NfTUVTU0FHRV9TSVpFX0VYQ0VFREVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgZ2V0IFtrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXSAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQWJvcnRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBVbmRpY2lFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQ29ubmVjdFRpbWVvdXRFcnJvcixcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvcixcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIFJlcXVlc3RSZXRyeUVycm9yLFxuICBSZXNwb25zZUVycm9yLFxuICBTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcixcbiAgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNsYXNzIFRzdE5vZGUge1xuICAvKiogQHR5cGUge2FueX0gKi9cbiAgdmFsdWUgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVsbCB8IFRzdE5vZGV9ICovXG4gIGxlZnQgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVsbCB8IFRzdE5vZGV9ICovXG4gIG1pZGRsZSA9IG51bGxcbiAgLyoqIEB0eXBlIHtudWxsIHwgVHN0Tm9kZX0gKi9cbiAgcmlnaHQgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBjb2RlXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICovXG4gIGNvbnN0cnVjdG9yIChrZXksIHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkIHx8IGluZGV4ID49IGtleS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VucmVhY2hhYmxlJylcbiAgICB9XG4gICAgY29uc3QgY29kZSA9IHRoaXMuY29kZSA9IGtleS5jaGFyQ29kZUF0KGluZGV4KVxuICAgIC8vIGNoZWNrIGNvZGUgaXMgYXNjaWkgc3RyaW5nXG4gICAgaWYgKGNvZGUgPiAweDdGKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZXkgbXVzdCBiZSBhc2NpaSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gKytpbmRleCkge1xuICAgICAgdGhpcy5taWRkbGUgPSBuZXcgVHN0Tm9kZShrZXksIHZhbHVlLCBpbmRleClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBhZGQgKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBsZW5ndGggPSBrZXkubGVuZ3RoXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5yZWFjaGFibGUnKVxuICAgIH1cbiAgICBsZXQgaW5kZXggPSAwXG4gICAgbGV0IG5vZGUgPSB0aGlzXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBrZXkuY2hhckNvZGVBdChpbmRleClcbiAgICAgIC8vIGNoZWNrIGNvZGUgaXMgYXNjaWkgc3RyaW5nXG4gICAgICBpZiAoY29kZSA+IDB4N0YpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2V5IG11c3QgYmUgYXNjaWkgc3RyaW5nJylcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNvZGUgPT09IGNvZGUpIHtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gKytpbmRleCkge1xuICAgICAgICAgIG5vZGUudmFsdWUgPSB2YWx1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5taWRkbGUgIT09IG51bGwpIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5taWRkbGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLm1pZGRsZSA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jb2RlIDwgY29kZSkge1xuICAgICAgICBpZiAobm9kZS5sZWZ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUubGVmdFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUubGVmdCA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlID0gbm9kZS5yaWdodFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yaWdodCA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleVxuICAgKiBAcmV0dXJuIHtUc3ROb2RlIHwgbnVsbH1cbiAgICovXG4gIHNlYXJjaCAoa2V5KSB7XG4gICAgY29uc3Qga2V5bGVuZ3RoID0ga2V5Lmxlbmd0aFxuICAgIGxldCBpbmRleCA9IDBcbiAgICBsZXQgbm9kZSA9IHRoaXNcbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCAmJiBpbmRleCA8IGtleWxlbmd0aCkge1xuICAgICAgbGV0IGNvZGUgPSBrZXlbaW5kZXhdXG4gICAgICAvLyBBLVpcbiAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIGl0IGlzIGJpZ2dlciB0aGFuIDB4NWEuXG4gICAgICAvLyBMb3dlcmNhc2UgbGV0dGVycyBoYXZlIGhpZ2hlciBjaGFyIGNvZGVzIHRoYW4gdXBwZXJjYXNlIG9uZXMuXG4gICAgICAvLyBBbHNvIHdlIGFzc3VtZSB0aGF0IGhlYWRlcnMgd2lsbCBtb3N0bHkgY29udGFpbiBsb3dlcmNhc2UgY2hhcmFjdGVycy5cbiAgICAgIGlmIChjb2RlIDw9IDB4NWEgJiYgY29kZSA+PSAweDQxKSB7XG4gICAgICAgIC8vIExvd2VyY2FzZSBmb3IgdXBwZXJjYXNlLlxuICAgICAgICBjb2RlIHw9IDMyXG4gICAgICB9XG4gICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoY29kZSA9PT0gbm9kZS5jb2RlKSB7XG4gICAgICAgICAgaWYgKGtleWxlbmd0aCA9PT0gKytpbmRleCkge1xuICAgICAgICAgICAgLy8gUmV0dXJucyBOb2RlIHNpbmNlIGl0IGlzIHRoZSBsYXN0IGtleS5cbiAgICAgICAgICAgIHJldHVybiBub2RlXG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUgPSBub2RlLm1pZGRsZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUuY29kZSA8IGNvZGUgPyBub2RlLmxlZnQgOiBub2RlLnJpZ2h0XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY2xhc3MgVGVybmFyeVNlYXJjaFRyZWUge1xuICAvKiogQHR5cGUge1RzdE5vZGUgfCBudWxsfSAqL1xuICBub2RlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiAqL1xuICBpbnNlcnQgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5ub2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLm5vZGUgPSBuZXcgVHN0Tm9kZShrZXksIHZhbHVlLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vZGUuYWRkKGtleSwgdmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEByZXR1cm4ge2FueX1cbiAgICovXG4gIGxvb2t1cCAoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZT8uc2VhcmNoKGtleSk/LnZhbHVlID8/IG51bGxcbiAgfVxufVxuXG5jb25zdCB0cmVlID0gbmV3IFRlcm5hcnlTZWFyY2hUcmVlKClcblxuZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWxsa25vd25IZWFkZXJOYW1lcy5sZW5ndGg7ICsraSkge1xuICBjb25zdCBrZXkgPSBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt3ZWxsa25vd25IZWFkZXJOYW1lc1tpXV1cbiAgdHJlZS5pbnNlcnQoa2V5LCBrZXkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBUZXJuYXJ5U2VhcmNoVHJlZSxcbiAgdHJlZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCwga0xpc3RlbmVycywga0JvZHkgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEluY29taW5nTWVzc2FnZSB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25vZGU6bmV0JylcbmNvbnN0IHsgQmxvYiB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ25vZGU6cXVlcnlzdHJpbmcnKVxuY29uc3QgeyBFdmVudEVtaXR0ZXI6IEVFIH0gPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IHRyZWUgfSA9IHJlcXVpcmUoJy4vdHJlZScpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmNsYXNzIEJvZHlBc3luY0l0ZXJhYmxlIHtcbiAgY29uc3RydWN0b3IgKGJvZHkpIHtcbiAgICB0aGlzW2tCb2R5XSA9IGJvZHlcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSBmYWxzZVxuICB9XG5cbiAgYXN5bmMgKiBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdICgpIHtcbiAgICBhc3NlcnQoIXRoaXNba0JvZHlVc2VkXSwgJ2Rpc3R1cmJlZCcpXG4gICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgIHlpZWxkICogdGhpc1trQm9keV1cbiAgfVxufVxuXG5mdW5jdGlvbiB3cmFwUmVxdWVzdEJvZHkgKGJvZHkpIHtcbiAgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgLy8gVE9ETyAoZml4KTogUHJvdmlkZSBzb21lIHdheSBmb3IgdGhlIHVzZXIgdG8gY2FjaGUgdGhlIGZpbGUgdG8gZS5nLiAvdG1wXG4gICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIDEwMC1leHBlY3Qgc3VwcG9ydCB0byBwcm92aWRlIGEgd2F5IHRvIGRvIHRoaXMgcHJvcGVybHk/XG4gICAgaWYgKGJvZHlMZW5ndGgoYm9keSkgPT09IDApIHtcbiAgICAgIGJvZHlcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFzc2VydChmYWxzZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIGJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICBFRS5wcm90b3R5cGUub24uY2FsbChib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keVxuICB9IGVsc2UgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVE9ETyAoZml4KTogV2UgY2FuJ3QgYWNjZXNzIFJlYWRhYmxlU3RyZWFtIGludGVybmFsIHN0YXRlXG4gICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGRpc3R1cmJlZC4gVGhpcyBpcyBqdXN0XG4gICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgIHJldHVybiBuZXcgQm9keUFzeW5jSXRlcmFibGUoYm9keSlcbiAgfSBlbHNlIGlmIChcbiAgICBib2R5ICYmXG4gICAgdHlwZW9mIGJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgIUFycmF5QnVmZmVyLmlzVmlldyhib2R5KSAmJlxuICAgIGlzSXRlcmFibGUoYm9keSlcbiAgKSB7XG4gICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgIC8vIG9yIHRocm91Z2ggc29tZSBvdGhlciBmbGFnP1xuICAgIHJldHVybiBuZXcgQm9keUFzeW5jSXRlcmFibGUoYm9keSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYm9keVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzVGFnID0gb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ11cblxuICAgIHJldHVybiAoc1RhZyA9PT0gJ0Jsb2InIHx8IHNUYWcgPT09ICdGaWxlJykgJiYgKFxuICAgICAgKCdzdHJlYW0nIGluIG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykgfHxcbiAgICAgICgnYXJyYXlCdWZmZXInIGluIG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKVxuICAgIClcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFVSTCAodXJsLCBxdWVyeVBhcmFtcykge1xuICBpZiAodXJsLmluY2x1ZGVzKCc/JykgfHwgdXJsLmluY2x1ZGVzKCcjJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IHBhcmFtcyBjYW5ub3QgYmUgcGFzc2VkIHdoZW4gdXJsIGFscmVhZHkgY29udGFpbnMgXCI/XCIgb3IgXCIjXCIuJylcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zKVxuXG4gIGlmIChzdHJpbmdpZmllZCkge1xuICAgIHVybCArPSAnPycgKyBzdHJpbmdpZmllZFxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkUG9ydCAocG9ydCkge1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHBvcnQsIDEwKVxuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSBOdW1iZXIocG9ydCkgJiZcbiAgICB2YWx1ZSA+PSAwICYmXG4gICAgdmFsdWUgPD0gNjU1MzVcbiAgKVxufVxuXG5mdW5jdGlvbiBpc0h0dHBPckh0dHBzUHJlZml4ZWQgKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT0gbnVsbCAmJlxuICAgIHZhbHVlWzBdID09PSAnaCcgJiZcbiAgICB2YWx1ZVsxXSA9PT0gJ3QnICYmXG4gICAgdmFsdWVbMl0gPT09ICd0JyAmJlxuICAgIHZhbHVlWzNdID09PSAncCcgJiZcbiAgICAoXG4gICAgICB2YWx1ZVs0XSA9PT0gJzonIHx8XG4gICAgICAoXG4gICAgICAgIHZhbHVlWzRdID09PSAncycgJiZcbiAgICAgICAgdmFsdWVbNV0gPT09ICc6J1xuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVVSTCAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHVybCA9IG5ldyBVUkwodXJsKVxuXG4gICAgaWYgKCFpc0h0dHBPckh0dHBzUHJlZml4ZWQodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgaWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBUaGUgVVJMIGFyZ3VtZW50IG11c3QgYmUgYSBub24tbnVsbCBvYmplY3QuJylcbiAgfVxuXG4gIGlmICghKHVybCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICBpZiAodXJsLnBvcnQgIT0gbnVsbCAmJiB1cmwucG9ydCAhPT0gJycgJiYgaXNWYWxpZFBvcnQodXJsLnBvcnQpID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogcG9ydCBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciBvciBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRoICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRoOiB0aGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRobmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGhuYW1lOiB0aGUgcGF0aG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwuaG9zdG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLmhvc3RuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBob3N0bmFtZTogdGhlIGhvc3RuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLm9yaWdpbiAhPSBudWxsICYmIHR5cGVvZiB1cmwub3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBvcmlnaW46IHRoZSBvcmlnaW4gbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICghaXNIdHRwT3JIdHRwc1ByZWZpeGVkKHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSB1cmwucG9ydCAhPSBudWxsXG4gICAgICA/IHVybC5wb3J0XG4gICAgICA6ICh1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApXG4gICAgbGV0IG9yaWdpbiA9IHVybC5vcmlnaW4gIT0gbnVsbFxuICAgICAgPyB1cmwub3JpZ2luXG4gICAgICA6IGAke3VybC5wcm90b2NvbCB8fCAnJ30vLyR7dXJsLmhvc3RuYW1lIHx8ICcnfToke3BvcnR9YFxuICAgIGxldCBwYXRoID0gdXJsLnBhdGggIT0gbnVsbFxuICAgICAgPyB1cmwucGF0aFxuICAgICAgOiBgJHt1cmwucGF0aG5hbWUgfHwgJyd9JHt1cmwuc2VhcmNoIHx8ICcnfWBcblxuICAgIGlmIChvcmlnaW5bb3JpZ2luLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zbGljZSgwLCBvcmlnaW4ubGVuZ3RoIC0gMSlcbiAgICB9XG5cbiAgICBpZiAocGF0aCAmJiBwYXRoWzBdICE9PSAnLycpIHtcbiAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgfVxuICAgIC8vIG5ldyBVUkwocGF0aCwgb3JpZ2luKSBpcyB1bnNhZmUgd2hlbiBgcGF0aGAgY29udGFpbnMgYW4gYWJzb2x1dGUgVVJMXG4gICAgLy8gRnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML1VSTDpcbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYSByZWxhdGl2ZSBVUkwsIHNlY29uZCBwYXJhbSBpcyByZXF1aXJlZCwgYW5kIHdpbGwgYmUgdXNlZCBhcyB0aGUgYmFzZSBVUkwuXG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGFuIGFic29sdXRlIFVSTCwgYSBnaXZlbiBzZWNvbmQgcGFyYW0gd2lsbCBiZSBpZ25vcmVkLlxuICAgIHJldHVybiBuZXcgVVJMKGAke29yaWdpbn0ke3BhdGh9YClcbiAgfVxuXG4gIGlmICghaXNIdHRwT3JIdHRwc1ByZWZpeGVkKHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VPcmlnaW4gKHVybCkge1xuICB1cmwgPSBwYXJzZVVSTCh1cmwpXG5cbiAgaWYgKHVybC5wYXRobmFtZSAhPT0gJy8nIHx8IHVybC5zZWFyY2ggfHwgdXJsLmhhc2gpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdG5hbWUgKGhvc3QpIHtcbiAgaWYgKGhvc3RbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMSwgaWR4KVxuICB9XG5cbiAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCc6JylcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBob3N0XG5cbiAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDAsIGlkeClcbn1cblxuLy8gSVAgYWRkcmVzc2VzIGFyZSBub3QgdmFsaWQgc2VydmVyIG5hbWVzIHBlciBSRkM2MDY2XG4vLyA+IEN1cnJlbnRseSwgdGhlIG9ubHkgc2VydmVyIG5hbWVzIHN1cHBvcnRlZCBhcmUgRE5TIGhvc3RuYW1lc1xuZnVuY3Rpb24gZ2V0U2VydmVyTmFtZSAoaG9zdCkge1xuICBpZiAoIWhvc3QpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYXNzZXJ0KHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJylcblxuICBjb25zdCBzZXJ2ZXJuYW1lID0gZ2V0SG9zdG5hbWUoaG9zdClcbiAgaWYgKG5ldC5pc0lQKHNlcnZlcm5hbWUpKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gc2VydmVybmFtZVxufVxuXG5mdW5jdGlvbiBkZWVwQ2xvbmUgKG9iaikge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKVxufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpXG59XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgKHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykpXG59XG5cbmZ1bmN0aW9uIGJvZHlMZW5ndGggKGJvZHkpIHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oYm9keSkpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUub2JqZWN0TW9kZSA9PT0gZmFsc2UgJiYgc3RhdGUuZW5kZWQgPT09IHRydWUgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXRlLmxlbmd0aClcbiAgICAgID8gc3RhdGUubGVuZ3RoXG4gICAgICA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZSAhPSBudWxsID8gYm9keS5zaXplIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZXN0cm95ZWQgKGJvZHkpIHtcbiAgcmV0dXJuIGJvZHkgJiYgISEoYm9keS5kZXN0cm95ZWQgfHwgYm9keVtrRGVzdHJveWVkXSB8fCAoc3RyZWFtLmlzRGVzdHJveWVkPy4oYm9keSkpKVxufVxuXG5mdW5jdGlvbiBkZXN0cm95IChzdHJlYW0sIGVycikge1xuICBpZiAoc3RyZWFtID09IG51bGwgfHwgIWlzU3RyZWFtKHN0cmVhbSkgfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3RyZWFtKS5jb25zdHJ1Y3RvciA9PT0gSW5jb21pbmdNZXNzYWdlKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM4NTA1L2ZpbGVzXG4gICAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIH1cblxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChzdHJlYW0uZGVzdHJveWVkICE9PSB0cnVlKSB7XG4gICAgc3RyZWFtW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5cbmNvbnN0IEtFRVBBTElWRV9USU1FT1VUX0VYUFIgPSAvdGltZW91dD0oXFxkKykvXG5mdW5jdGlvbiBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQgKHZhbCkge1xuICBjb25zdCBtID0gdmFsLnRvU3RyaW5nKCkubWF0Y2goS0VFUEFMSVZFX1RJTUVPVVRfRVhQUilcbiAgcmV0dXJuIG0gPyBwYXJzZUludChtWzFdLCAxMCkgKiAxMDAwIDogbnVsbFxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGhlYWRlciBuYW1lIGFuZCByZXR1cm5zIGl0cyBsb3dlcmNhc2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gdmFsdWUgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGhlYWRlck5hbWVUb1N0cmluZyAodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICA/IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW3ZhbHVlXSA/PyB2YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgOiB0cmVlLmxvb2t1cCh2YWx1ZSkgPz8gdmFsdWUudG9TdHJpbmcoJ2xhdGluMScpLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBSZWNlaXZlIHRoZSBidWZmZXIgYXMgYSBzdHJpbmcgYW5kIHJldHVybiBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lICh2YWx1ZSkge1xuICByZXR1cm4gdHJlZS5sb29rdXAodmFsdWUpID8/IHZhbHVlLnRvU3RyaW5nKCdsYXRpbjEnKS50b0xvd2VyQ2FzZSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4gfCAoQnVmZmVyIHwgc3RyaW5nIHwgKEJ1ZmZlciB8IHN0cmluZylbXSlbXX0gaGVhZGVyc1xuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT59IFtvYmpdXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fVxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaikge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIG9iaiA9IHt9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXJzW2ldKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKHZhbCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbCA9IFt2YWxdXG4gICAgICAgIG9ialtrZXldID0gdmFsXG4gICAgICB9XG4gICAgICB2YWwucHVzaChoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzVmFsdWUgPSBoZWFkZXJzW2kgKyAxXVxuICAgICAgaWYgKHR5cGVvZiBoZWFkZXJzVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1ZhbHVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IEFycmF5LmlzQXJyYXkoaGVhZGVyc1ZhbHVlKSA/IGhlYWRlcnNWYWx1ZS5tYXAoeCA9PiB4LnRvU3RyaW5nKCd1dGY4JykpIDogaGVhZGVyc1ZhbHVlLnRvU3RyaW5nKCd1dGY4JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IGxlbiA9IGhlYWRlcnMubGVuZ3RoXG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheShsZW4pXG5cbiAgbGV0IGhhc0NvbnRlbnRMZW5ndGggPSBmYWxzZVxuICBsZXQgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gLTFcbiAgbGV0IGtleVxuICBsZXQgdmFsXG4gIGxldCBrTGVuID0gMFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGtleSA9IGhlYWRlcnNbbl1cbiAgICB2YWwgPSBoZWFkZXJzW24gKyAxXVxuXG4gICAgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycgJiYgKGtleSA9IGtleS50b1N0cmluZygpKVxuICAgIHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnICYmICh2YWwgPSB2YWwudG9TdHJpbmcoJ3V0ZjgnKSlcblxuICAgIGtMZW4gPSBrZXkubGVuZ3RoXG4gICAgaWYgKGtMZW4gPT09IDE0ICYmIGtleVs3XSA9PT0gJy0nICYmIChrZXkgPT09ICdjb250ZW50LWxlbmd0aCcgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa0xlbiA9PT0gMTkgJiYga2V5WzddID09PSAnLScgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSBuICsgMVxuICAgIH1cbiAgICByZXRbbl0gPSBrZXlcbiAgICByZXRbbiArIDFdID0gdmFsXG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKGhhc0NvbnRlbnRMZW5ndGggJiYgY29udGVudERpc3Bvc2l0aW9uSWR4ICE9PSAtMSkge1xuICAgIHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdID0gQnVmZmVyLmZyb20ocmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoYnVmZmVyKSB7XG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9wdWxsLzMxOVxuICByZXR1cm4gYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUhhbmRsZXIgKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSkge1xuICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db25uZWN0IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gJ2Z1bmN0aW9uJyAmJiBoYW5kbGVyLm9uQm9keVNlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkJvZHlTZW50IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vblVwZ3JhZGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvblVwZ3JhZGUgbWV0aG9kJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uSGVhZGVycyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSGVhZGVycyBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkRhdGEgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25Db21wbGV0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29tcGxldGUgbWV0aG9kJylcbiAgICB9XG4gIH1cbn1cblxuLy8gQSBib2R5IGlzIGRpc3R1cmJlZCBpZiBpdCBoYXMgYmVlbiByZWFkIGZyb20gYW5kIGl0IGNhbm5vdFxuLy8gYmUgcmUtdXNlZCB3aXRob3V0IGxvc2luZyBzdGF0ZSBvciBkYXRhLlxuZnVuY3Rpb24gaXNEaXN0dXJiZWQgKGJvZHkpIHtcbiAgLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gIHJldHVybiAhIShib2R5ICYmIChzdHJlYW0uaXNEaXN0dXJiZWQoYm9keSkgfHwgYm9keVtrQm9keVVzZWRdKSlcbn1cblxuZnVuY3Rpb24gaXNFcnJvcmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIHN0cmVhbS5pc0Vycm9yZWQoYm9keSkpXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGUgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgc3RyZWFtLmlzUmVhZGFibGUoYm9keSkpXG59XG5cbmZ1bmN0aW9uIGdldFNvY2tldEluZm8gKHNvY2tldCkge1xuICByZXR1cm4ge1xuICAgIGxvY2FsQWRkcmVzczogc29ja2V0LmxvY2FsQWRkcmVzcyxcbiAgICBsb2NhbFBvcnQ6IHNvY2tldC5sb2NhbFBvcnQsXG4gICAgcmVtb3RlQWRkcmVzczogc29ja2V0LnJlbW90ZUFkZHJlc3MsXG4gICAgcmVtb3RlUG9ydDogc29ja2V0LnJlbW90ZVBvcnQsXG4gICAgcmVtb3RlRmFtaWx5OiBzb2NrZXQucmVtb3RlRmFtaWx5LFxuICAgIHRpbWVvdXQ6IHNvY2tldC50aW1lb3V0LFxuICAgIGJ5dGVzV3JpdHRlbjogc29ja2V0LmJ5dGVzV3JpdHRlbixcbiAgICBieXRlc1JlYWQ6IHNvY2tldC5ieXRlc1JlYWRcbiAgfVxufVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ1JlYWRhYmxlU3RyZWFtJ119ICovXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZyb20gKGl0ZXJhYmxlKSB7XG4gIC8vIFdlIGNhbm5vdCB1c2UgUmVhZGFibGVTdHJlYW0uZnJvbSBoZXJlIGJlY2F1c2UgaXQgZG9lcyBub3QgcmV0dXJuIGEgYnl0ZSBzdHJlYW0uXG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuYnlvYlJlcXVlc3Q/LnJlc3BvbmQoMClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogJ2J5dGVzJ1xuICAgIH1cbiAgKVxufVxuXG4vLyBUaGUgY2h1bmsgc2hvdWxkIGJlIGEgRm9ybURhdGEgaW5zdGFuY2UgYW5kIGNvbnRhaW5zXG4vLyBhbGwgdGhlIHJlcXVpcmVkIG1ldGhvZHMuXG5mdW5jdGlvbiBpc0Zvcm1EYXRhTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZGVsZXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuaGFzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5zZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJ1xuICApXG59XG5cbmZ1bmN0aW9uIGFkZEFib3J0TGlzdGVuZXIgKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgaWYgKCdhZGRFdmVudExpc3RlbmVyJyBpbiBzaWduYWwpIHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pXG4gICAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICB9XG4gIHNpZ25hbC5hZGRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbn1cblxuY29uc3QgaGFzVG9XZWxsRm9ybWVkID0gdHlwZW9mIFN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkID09PSAnZnVuY3Rpb24nXG5jb25zdCBoYXNJc1dlbGxGb3JtZWQgPSB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQgPT09ICdmdW5jdGlvbidcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKi9cbmZ1bmN0aW9uIHRvVVNWU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIGhhc1RvV2VsbEZvcm1lZCA/IGAke3ZhbH1gLnRvV2VsbEZvcm1lZCgpIDogbm9kZVV0aWwudG9VU1ZTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqL1xuLy8gVE9ETzogbW92ZSB0aGlzIHRvIHdlYmlkbFxuZnVuY3Rpb24gaXNVU1ZTdHJpbmcgKHZhbCkge1xuICByZXR1cm4gaGFzSXNXZWxsRm9ybWVkID8gYCR7dmFsfWAuaXNXZWxsRm9ybWVkKCkgOiB0b1VTVlN0cmluZyh2YWwpID09PSBgJHt2YWx9YFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNoYXJDb2RlIChjKSB7XG4gIHN3aXRjaCAoYykge1xuICAgIGNhc2UgMHgyMjpcbiAgICBjYXNlIDB4Mjg6XG4gICAgY2FzZSAweDI5OlxuICAgIGNhc2UgMHgyYzpcbiAgICBjYXNlIDB4MmY6XG4gICAgY2FzZSAweDNhOlxuICAgIGNhc2UgMHgzYjpcbiAgICBjYXNlIDB4M2M6XG4gICAgY2FzZSAweDNkOlxuICAgIGNhc2UgMHgzZTpcbiAgICBjYXNlIDB4M2Y6XG4gICAgY2FzZSAweDQwOlxuICAgIGNhc2UgMHg1YjpcbiAgICBjYXNlIDB4NWM6XG4gICAgY2FzZSAweDVkOlxuICAgIGNhc2UgMHg3YjpcbiAgICBjYXNlIDB4N2Q6XG4gICAgICAvLyBEUVVPVEUgYW5kIFwiKCksLzo7PD0+P0BbXFxde31cIlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZDSEFSICV4MjEtN0VcbiAgICAgIHJldHVybiBjID49IDB4MjEgJiYgYyA8PSAweDdlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSFRUUFRva2VuIChjaGFyYWN0ZXJzKSB7XG4gIGlmIChjaGFyYWN0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghaXNUb2tlbkNoYXJDb2RlKGNoYXJhY3RlcnMuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBoZWFkZXJDaGFyUmVnZXggaGF2ZSBiZWVuIGxpZnRlZCBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYWluL2xpYi9faHR0cF9jb21tb24uanNcblxuLyoqXG4gKiBNYXRjaGVzIGlmIHZhbCBjb250YWlucyBhbiBpbnZhbGlkIGZpZWxkLXZjaGFyXG4gKiAgZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKVxuICogIGZpZWxkLWNvbnRlbnQgID0gZmllbGQtdmNoYXIgWyAxKiggU1AgLyBIVEFCICkgZmllbGQtdmNoYXIgXVxuICogIGZpZWxkLXZjaGFyICAgID0gVkNIQVIgLyBvYnMtdGV4dFxuICovXG5jb25zdCBoZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKGNoYXJhY3RlcnMpIHtcbiAgcmV0dXJuICFoZWFkZXJDaGFyUmVnZXgudGVzdChjaGFyYWN0ZXJzKVxufVxuXG4vLyBQYXJzZWQgYWNjb3JkaW5nbHkgdG8gUkZDIDkxMTBcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwI2ZpZWxkLmNvbnRlbnQtcmFuZ2VcbmZ1bmN0aW9uIHBhcnNlUmFuZ2VIZWFkZXIgKHJhbmdlKSB7XG4gIGlmIChyYW5nZSA9PSBudWxsIHx8IHJhbmdlID09PSAnJykgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogbnVsbCwgc2l6ZTogbnVsbCB9XG5cbiAgY29uc3QgbSA9IHJhbmdlID8gcmFuZ2UubWF0Y2goL15ieXRlcyAoXFxkKyktKFxcZCspXFwvKFxcZCspPyQvKSA6IG51bGxcbiAgcmV0dXJuIG1cbiAgICA/IHtcbiAgICAgICAgc3RhcnQ6IHBhcnNlSW50KG1bMV0pLFxuICAgICAgICBlbmQ6IG1bMl0gPyBwYXJzZUludChtWzJdKSA6IG51bGwsXG4gICAgICAgIHNpemU6IG1bM10gPyBwYXJzZUludChtWzNdKSA6IG51bGxcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZnVuY3Rpb24gYWRkTGlzdGVuZXIgKG9iaiwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgY29uc3QgbGlzdGVuZXJzID0gKG9ialtrTGlzdGVuZXJzXSA/Pz0gW10pXG4gIGxpc3RlbmVycy5wdXNoKFtuYW1lLCBsaXN0ZW5lcl0pXG4gIG9iai5vbihuYW1lLCBsaXN0ZW5lcilcbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMgKG9iaikge1xuICBmb3IgKGNvbnN0IFtuYW1lLCBsaXN0ZW5lcl0gb2Ygb2JqW2tMaXN0ZW5lcnNdID8/IFtdKSB7XG4gICAgb2JqLnJlbW92ZUxpc3RlbmVyKG5hbWUsIGxpc3RlbmVyKVxuICB9XG4gIG9ialtrTGlzdGVuZXJzXSA9IG51bGxcbn1cblxuZnVuY3Rpb24gZXJyb3JSZXF1ZXN0IChjbGllbnQsIHJlcXVlc3QsIGVycikge1xuICB0cnkge1xuICAgIHJlcXVlc3Qub25FcnJvcihlcnIpXG4gICAgYXNzZXJ0KHJlcXVlc3QuYWJvcnRlZClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2xpZW50LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9XG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbmNvbnN0IG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSA9IHtcbiAgZGVsZXRlOiAnREVMRVRFJyxcbiAgREVMRVRFOiAnREVMRVRFJyxcbiAgZ2V0OiAnR0VUJyxcbiAgR0VUOiAnR0VUJyxcbiAgaGVhZDogJ0hFQUQnLFxuICBIRUFEOiAnSEVBRCcsXG4gIG9wdGlvbnM6ICdPUFRJT05TJyxcbiAgT1BUSU9OUzogJ09QVElPTlMnLFxuICBwb3N0OiAnUE9TVCcsXG4gIFBPU1Q6ICdQT1NUJyxcbiAgcHV0OiAnUFVUJyxcbiAgUFVUOiAnUFVUJ1xufVxuXG5jb25zdCBub3JtYWxpemVkTWV0aG9kUmVjb3JkcyA9IHtcbiAgLi4ubm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLFxuICBwYXRjaDogJ3BhdGNoJyxcbiAgUEFUQ0g6ICdQQVRDSCdcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2Yobm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLCBudWxsKVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzLCBudWxsKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbm9wLFxuICBpc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICB0b1VTVlN0cmluZyxcbiAgaXNVU1ZTdHJpbmcsXG4gIGlzQmxvYkxpa2UsXG4gIHBhcnNlT3JpZ2luLFxuICBwYXJzZVVSTCxcbiAgZ2V0U2VydmVyTmFtZSxcbiAgaXNTdHJlYW0sXG4gIGlzSXRlcmFibGUsXG4gIGlzQXN5bmNJdGVyYWJsZSxcbiAgaXNEZXN0cm95ZWQsXG4gIGhlYWRlck5hbWVUb1N0cmluZyxcbiAgYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSxcbiAgYWRkTGlzdGVuZXIsXG4gIHJlbW92ZUFsbExpc3RlbmVycyxcbiAgZXJyb3JSZXF1ZXN0LFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICBhZGRBYm9ydExpc3RlbmVyLFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGlzVG9rZW5DaGFyQ29kZSxcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLFxuICBub3JtYWxpemVkTWV0aG9kUmVjb3JkcyxcbiAgaXNWYWxpZFBvcnQsXG4gIGlzSHR0cE9ySHR0cHNQcmVmaXhlZCxcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIHNhZmVIVFRQTWV0aG9kczogWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10sXG4gIHdyYXBSZXF1ZXN0Qm9keVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnbm9kZTpkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCB1bmRpY2lEZWJ1Z0xvZyA9IHV0aWwuZGVidWdsb2coJ3VuZGljaScpXG5jb25zdCBmZXRjaERlYnVnbG9nID0gdXRpbC5kZWJ1Z2xvZygnZmV0Y2gnKVxuY29uc3Qgd2Vic29ja2V0RGVidWdsb2cgPSB1dGlsLmRlYnVnbG9nKCd3ZWJzb2NrZXQnKVxubGV0IGlzQ2xpZW50U2V0ID0gZmFsc2VcbmNvbnN0IGNoYW5uZWxzID0ge1xuICAvLyBDbGllbnRcbiAgYmVmb3JlQ29ubmVjdDogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLFxuICBjb25uZWN0ZWQ6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpLFxuICBjb25uZWN0RXJyb3I6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpLFxuICBzZW5kSGVhZGVyczogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKSxcbiAgLy8gUmVxdWVzdFxuICBjcmVhdGU6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpjcmVhdGUnKSxcbiAgYm9keVNlbnQ6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpib2R5U2VudCcpLFxuICBoZWFkZXJzOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpLFxuICB0cmFpbGVyczogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJyksXG4gIGVycm9yOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6ZXJyb3InKSxcbiAgLy8gV2ViU29ja2V0XG4gIG9wZW46IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0Om9wZW4nKSxcbiAgY2xvc2U6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OmNsb3NlJyksXG4gIHNvY2tldEVycm9yOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKSxcbiAgcGluZzogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpLFxuICBwb25nOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcbn1cblxuaWYgKHVuZGljaURlYnVnTG9nLmVuYWJsZWQgfHwgZmV0Y2hEZWJ1Z2xvZy5lbmFibGVkKSB7XG4gIGNvbnN0IGRlYnVnbG9nID0gZmV0Y2hEZWJ1Z2xvZy5lbmFibGVkID8gZmV0Y2hEZWJ1Z2xvZyA6IHVuZGljaURlYnVnTG9nXG5cbiAgLy8gVHJhY2sgYWxsIENsaWVudCBldmVudHNcbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHsgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQsIGhvc3QgfVxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdjb25uZWN0aW5nIHRvICVzIHVzaW5nICVzJXMnLFxuICAgICAgYCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9YCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmVyc2lvblxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH1cbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coXG4gICAgICAnY29ubmVjdGVkIHRvICVzIHVzaW5nICVzJXMnLFxuICAgICAgYCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9YCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmVyc2lvblxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH0sXG4gICAgICBlcnJvclxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdjb25uZWN0aW9uIHRvICVzIHVzaW5nICVzJXMgZXJyb3JlZCAtICVzJyxcbiAgICAgIGAke2hvc3R9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfWAsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIHZlcnNpb24sXG4gICAgICBlcnJvci5tZXNzYWdlXG4gICAgKVxuICB9KVxuXG4gIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OnNlbmRIZWFkZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKCdzZW5kaW5nIHJlcXVlc3QgdG8gJXMgJXMvJXMnLCBtZXRob2QsIG9yaWdpbiwgcGF0aClcbiAgfSlcblxuICAvLyBUcmFjayBSZXF1ZXN0IGV2ZW50c1xuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kLCBwYXRoLCBvcmlnaW4gfSxcbiAgICAgIHJlc3BvbnNlOiB7IHN0YXR1c0NvZGUgfVxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdyZWNlaXZlZCByZXNwb25zZSB0byAlcyAlcy8lcyAtIEhUVFAgJWQnLFxuICAgICAgbWV0aG9kLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aCxcbiAgICAgIHN0YXR1c0NvZGVcbiAgICApXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKCd0cmFpbGVycyByZWNlaXZlZCBmcm9tICVzICVzLyVzJywgbWV0aG9kLCBvcmlnaW4sIHBhdGgpXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9LFxuICAgICAgZXJyb3JcbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coXG4gICAgICAncmVxdWVzdCB0byAlcyAlcy8lcyBlcnJvcmVkIC0gJXMnLFxuICAgICAgbWV0aG9kLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aCxcbiAgICAgIGVycm9yLm1lc3NhZ2VcbiAgICApXG4gIH0pXG5cbiAgaXNDbGllbnRTZXQgPSB0cnVlXG59XG5cbmlmICh3ZWJzb2NrZXREZWJ1Z2xvZy5lbmFibGVkKSB7XG4gIGlmICghaXNDbGllbnRTZXQpIHtcbiAgICBjb25zdCBkZWJ1Z2xvZyA9IHVuZGljaURlYnVnTG9nLmVuYWJsZWQgPyB1bmRpY2lEZWJ1Z0xvZyA6IHdlYnNvY2tldERlYnVnbG9nXG4gICAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH1cbiAgICAgIH0gPSBldnRcbiAgICAgIGRlYnVnbG9nKFxuICAgICAgICAnY29ubmVjdGluZyB0byAlcyVzIHVzaW5nICVzJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdFBhcmFtczogeyB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCwgaG9zdCB9XG4gICAgICB9ID0gZXZ0XG4gICAgICBkZWJ1Z2xvZyhcbiAgICAgICAgJ2Nvbm5lY3RlZCB0byAlcyVzIHVzaW5nICVzJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdFBhcmFtczogeyB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCwgaG9zdCB9LFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IGV2dFxuICAgICAgZGVidWdsb2coXG4gICAgICAgICdjb25uZWN0aW9uIHRvICVzJXMgdXNpbmcgJXMlcyBlcnJvcmVkIC0gJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgZXJyb3IubWVzc2FnZVxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZXF1ZXN0OiB7IG1ldGhvZCwgcGF0aCwgb3JpZ2luIH1cbiAgICAgIH0gPSBldnRcbiAgICAgIGRlYnVnbG9nKCdzZW5kaW5nIHJlcXVlc3QgdG8gJXMgJXMvJXMnLCBtZXRob2QsIG9yaWdpbiwgcGF0aClcbiAgICB9KVxuICB9XG5cbiAgLy8gVHJhY2sgYWxsIFdlYlNvY2tldCBldmVudHNcbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6b3BlbicpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFkZHJlc3M6IHsgYWRkcmVzcywgcG9ydCB9XG4gICAgfSA9IGV2dFxuICAgIHdlYnNvY2tldERlYnVnbG9nKCdjb25uZWN0aW9uIG9wZW5lZCAlcyVzJywgYWRkcmVzcywgcG9ydCA/IGA6JHtwb3J0fWAgOiAnJylcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpjbG9zZScpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHsgd2Vic29ja2V0LCBjb2RlLCByZWFzb24gfSA9IGV2dFxuICAgIHdlYnNvY2tldERlYnVnbG9nKFxuICAgICAgJ2Nsb3NlZCBjb25uZWN0aW9uIHRvICVzIC0gJXMgJXMnLFxuICAgICAgd2Vic29ja2V0LnVybCxcbiAgICAgIGNvZGUsXG4gICAgICByZWFzb25cbiAgICApXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6c29ja2V0X2Vycm9yJykuc3Vic2NyaWJlKGVyciA9PiB7XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ2Nvbm5lY3Rpb24gZXJyb3JlZCAtICVzJywgZXJyLm1lc3NhZ2UpXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIHdlYnNvY2tldERlYnVnbG9nKCdwaW5nIHJlY2VpdmVkJylcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ3BvbmcgcmVjZWl2ZWQnKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2hhbm5lbHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZSxcbiAgaXNTdHJlYW0sXG4gIGRlc3Ryb3ksXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhTGlrZSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNCbG9iTGlrZSxcbiAgYnVpbGRVUkwsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U2VydmVyTmFtZSxcbiAgbm9ybWFsaXplZE1ldGhvZFJlY29yZHNcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi9kaWFnbm9zdGljcy5qcycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbi8vIFZlcmlmaWVzIHRoYXQgYSBnaXZlbiBwYXRoIGlzIHZhbGlkIGRvZXMgbm90IGNvbnRhaW4gY29udHJvbCBjaGFycyBcXHgwMCB0byBcXHgyMFxuY29uc3QgaW52YWxpZFBhdGhSZWdleCA9IC9bXlxcdTAwMjEtXFx1MDBmZl0vXG5cbmNvbnN0IGtIYW5kbGVyID0gU3ltYm9sKCdoYW5kbGVyJylcblxuY2xhc3MgUmVxdWVzdCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnksXG4gICAgaWRlbXBvdGVudCxcbiAgICBibG9ja2luZyxcbiAgICB1cGdyYWRlLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIGJvZHlUaW1lb3V0LFxuICAgIHJlc2V0LFxuICAgIHRocm93T25FcnJvcixcbiAgICBleHBlY3RDb250aW51ZSxcbiAgICBzZXJ2ZXJuYW1lXG4gIH0sIGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHBhdGhbMF0gIT09ICcvJyAmJlxuICAgICAgIShwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpICYmXG4gICAgICBtZXRob2QgIT09ICdDT05ORUNUJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJMIG9yIHN0YXJ0IHdpdGggYSBzbGFzaCcpXG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUGF0aFJlZ2V4LnRlc3QocGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IHBhdGgnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWV0aG9kICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtZXRob2QgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChub3JtYWxpemVkTWV0aG9kUmVjb3Jkc1ttZXRob2RdID09PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiAhaXNWYWxpZEhlYWRlclZhbHVlKHVwZ3JhZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXBncmFkZSBoZWFkZXInKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyc1RpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgYm9keVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChyZXNldCAhPSBudWxsICYmIHR5cGVvZiByZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVzZXQnKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RDb250aW51ZSAhPSBudWxsICYmIHR5cGVvZiBleHBlY3RDb250aW51ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZXhwZWN0Q29udGludWUnKVxuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyc1RpbWVvdXQgPSBoZWFkZXJzVGltZW91dFxuXG4gICAgdGhpcy5ib2R5VGltZW91dCA9IGJvZHlUaW1lb3V0XG5cbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciA9PT0gdHJ1ZVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcblxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgfSBlbHNlIGlmIChpc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIGRlc3Ryb3kodGhpcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkub24oJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnIgPT4ge1xuICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5Lm9uKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IGJvZHkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnVmZmVyLmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5sZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IGlzSXRlcmFibGUoYm9keSkgfHwgaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgUmVhZGFibGUgc3RyZWFtLCBhbiBpdGVyYWJsZSwgb3IgYW4gYXN5bmMgaXRlcmFibGUnKVxuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGVkID0gZmFsc2VcblxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLnVwZ3JhZGUgPSB1cGdyYWRlIHx8IG51bGxcblxuICAgIHRoaXMucGF0aCA9IHF1ZXJ5ID8gYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGhlYWRlcnNbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJzKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikgfHwgaGVhZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgaW4ga2V5LXZhbHVlIHBhaXIgZm9ybWF0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5c1tpXSwgaGVhZGVyc1trZXlzW2ldXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIHZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpXG5cbiAgICB0aGlzLnNlcnZlcm5hbWUgPSBzZXJ2ZXJuYW1lIHx8IGdldFNlcnZlck5hbWUodGhpcy5ob3N0KVxuXG4gICAgdGhpc1trSGFuZGxlcl0gPSBoYW5kbGVyXG5cbiAgICBpZiAoY2hhbm5lbHMuY3JlYXRlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jcmVhdGUucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudChjaHVuaylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAoY2hhbm5lbHMuYm9keVNlbnQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmJvZHlTZW50LnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICBhYm9ydCh0aGlzLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbm5lY3QoYWJvcnQpXG4gICAgfVxuICB9XG5cbiAgb25SZXNwb25zZVN0YXJ0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlc3BvbnNlU3RhcnRlZD8uKClcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmIChjaGFubmVscy5oZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5oZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCByZXNwb25zZTogeyBzdGF0dXNDb2RlLCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25EYXRhKGNodW5rKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWVcbiAgICBpZiAoY2hhbm5lbHMudHJhaWxlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLnRyYWlsZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCB0cmFpbGVycyB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFRoaXMgbWlnaHQgYmUgYSBiYWQgaWRlYT9cbiAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBpZiAoY2hhbm5lbHMuZXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmVycm9yLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCBlcnJvciB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uRmluYWxseSAoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgdGhpcy5lbmRIYW5kbGVyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFkZEhlYWRlciAoa2V5LCB2YWx1ZSkge1xuICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIgKHJlcXVlc3QsIGtleSwgdmFsKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgaGVhZGVyTmFtZSA9IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV1cblxuICBpZiAoaGVhZGVyTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaGVhZGVyTmFtZSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2hlYWRlck5hbWVdID09PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRIVFRQVG9rZW4oaGVhZGVyTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXIga2V5JylcbiAgICB9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgY29uc3QgYXJyID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbFtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gICAgICAgIH1cbiAgICAgICAgYXJyLnB1c2godmFsW2ldKVxuICAgICAgfSBlbHNlIGlmICh2YWxbaV0gPT09IG51bGwpIHtcbiAgICAgICAgYXJyLnB1c2goJycpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENvZXJjZSBwcmltaXRpdmVzIChhbmQgcmVqZWN0IHVuc2FmZSBjb2VyY2lvbnMgc3VjaCBhcyBmdW5jdGlvbnNcbiAgICAgICAgLy8gd2l0aCBhIGNyYWZ0ZWQgdG9TdHJpbmcvU3ltYm9sLnRvUHJpbWl0aXZlKS5cbiAgICAgICAgY29uc3Qgc3RyID0gYCR7dmFsW2ldfWBcbiAgICAgICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUoc3RyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICAgICAgfVxuICAgICAgICBhcnIucHVzaChzdHIpXG4gICAgICB9XG4gICAgfVxuICAgIHZhbCA9IGFyclxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgfSBlbHNlIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICB2YWwgPSAnJ1xuICB9IGVsc2Uge1xuICAgIC8vIENvZXJjZSBwcmltaXRpdmVzIChhbmQgcmVqZWN0IHVuc2FmZSBjb2VyY2lvbnMgc3VjaCBhcyBmdW5jdGlvbnNcbiAgICAvLyB3aXRoIGEgY3JhZnRlZCB0b1N0cmluZy9TeW1ib2wudG9QcmltaXRpdmUpLlxuICAgIHZhbCA9IGAke3ZhbH1gXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgfVxuXG4gIGlmIChoZWFkZXJOYW1lID09PSAnaG9zdCcpIHtcbiAgICBpZiAocmVxdWVzdC5ob3N0ICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2R1cGxpY2F0ZSBob3N0IGhlYWRlcicpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhvc3QgaGVhZGVyJylcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykge1xuICAgIGlmIChyZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZHVwbGljYXRlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9IHBhcnNlSW50KHZhbCwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmVxdWVzdC5jb250ZW50TGVuZ3RoKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuY29udGVudFR5cGUgPT09IG51bGwgJiYgaGVhZGVyTmFtZSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID0gdmFsXG4gICAgcmVxdWVzdC5oZWFkZXJzLnB1c2goa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJyB8fCBoZWFkZXJOYW1lID09PSAna2VlcC1hbGl2ZScgfHwgaGVhZGVyTmFtZSA9PT0gJ3VwZ3JhZGUnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7aGVhZGVyTmFtZX0gaGVhZGVyYClcbiAgfSBlbHNlIGlmIChoZWFkZXJOYW1lID09PSAnY29ubmVjdGlvbicpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnRvTG93ZXJDYXNlKCkgOiBudWxsXG4gICAgaWYgKHZhbHVlICE9PSAnY2xvc2UnICYmIHZhbHVlICE9PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9uIGhlYWRlcicpXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnY2xvc2UnKSB7XG4gICAgICByZXF1ZXN0LnJlc2V0ID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJOYW1lID09PSAnZXhwZWN0Jykge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcignZXhwZWN0IGhlYWRlciBub3Qgc3VwcG9ydGVkJylcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0LmhlYWRlcnMucHVzaChrZXksIHZhbClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RcbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJylcblxuY2xhc3MgRGlzcGF0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGRpc3BhdGNoICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBjbG9zZSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgY29tcG9zZSAoLi4uYXJncykge1xuICAgIC8vIFNvIHdlIGhhbmRsZSBbaW50ZXJjZXB0b3IxLCBpbnRlcmNlcHRvcjJdIG9yIGludGVyY2VwdG9yMSwgaW50ZXJjZXB0b3IyLCAuLi5cbiAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pID8gYXJnc1swXSA6IGFyZ3NcbiAgICBsZXQgZGlzcGF0Y2ggPSB0aGlzLmRpc3BhdGNoLmJpbmQodGhpcylcblxuICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICBpZiAoaW50ZXJjZXB0b3IgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZXJjZXB0b3IsIGV4cGVjdGVkIGZ1bmN0aW9uIHJlY2VpdmVkICR7dHlwZW9mIGludGVyY2VwdG9yfWApXG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoID0gaW50ZXJjZXB0b3IoZGlzcGF0Y2gpXG5cbiAgICAgIGlmIChkaXNwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBkaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJyB8fCBkaXNwYXRjaC5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpbnRlcmNlcHRvcicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb21wb3NlZERpc3BhdGNoZXIodGhpcywgZGlzcGF0Y2gpXG4gIH1cbn1cblxuY2xhc3MgQ29tcG9zZWREaXNwYXRjaGVyIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gICNkaXNwYXRjaGVyID0gbnVsbFxuICAjZGlzcGF0Y2ggPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIsIGRpc3BhdGNoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuI2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy4jZGlzcGF0Y2ggPSBkaXNwYXRjaFxuICB9XG5cbiAgZGlzcGF0Y2ggKC4uLmFyZ3MpIHtcbiAgICB0aGlzLiNkaXNwYXRjaCguLi5hcmdzKVxuICB9XG5cbiAgY2xvc2UgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzcGF0Y2hlci5jbG9zZSguLi5hcmdzKVxuICB9XG5cbiAgZGVzdHJveSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNkaXNwYXRjaGVyLmRlc3Ryb3koLi4uYXJncylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpXG5jb25zdCB7XG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtEZXN0cm95LCBrQ2xvc2UsIGtDbG9zZWQsIGtEZXN0cm95ZWQsIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga09uRGVzdHJveWVkID0gU3ltYm9sKCdvbkRlc3Ryb3llZCcpXG5jb25zdCBrT25DbG9zZWQgPSBTeW1ib2woJ29uQ2xvc2VkJylcbmNvbnN0IGtJbnRlcmNlcHRlZERpc3BhdGNoID0gU3ltYm9sKCdJbnRlcmNlcHRlZCBEaXNwYXRjaCcpXG5jb25zdCBrV2ViU29ja2V0T3B0aW9ucyA9IFN5bWJvbCgnd2ViU29ja2V0T3B0aW9ucycpXG5cbmNsYXNzIERpc3BhdGNoZXJCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IGZhbHNlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgIHRoaXNba0Nsb3NlZF0gPSBmYWxzZVxuICAgIHRoaXNba09uQ2xvc2VkXSA9IFtdXG4gICAgdGhpc1trV2ViU29ja2V0T3B0aW9uc10gPSBvcHRzPy53ZWJTb2NrZXQgPz8ge31cbiAgfVxuXG4gIGdldCB3ZWJTb2NrZXRPcHRpb25zICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF4RnJhZ21lbnRzOiB0aGlzW2tXZWJTb2NrZXRPcHRpb25zXS5tYXhGcmFnbWVudHMgPz8gMTMxMDcyLFxuICAgICAgbWF4UGF5bG9hZFNpemU6IHRoaXNba1dlYlNvY2tldE9wdGlvbnNdLm1heFBheWxvYWRTaXplID8/IDEyOCAqIDEwMjQgKiAxMDI0XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgb2ZmZXJzIGFuIG9wdGltaXplZCB0aW1lciBpbXBsZW1lbnRhdGlvbiBkZXNpZ25lZCBmb3Igc2NlbmFyaW9zXG4gKiB3aGVyZSBoaWdoIHByZWNpc2lvbiBpcyBub3QgY3JpdGljYWwuXG4gKlxuICogVGhlIHRpbWVyIGFjaGlldmVzIGZhc3RlciBwZXJmb3JtYW5jZSBieSB1c2luZyBhIGxvdy1yZXNvbHV0aW9uIGFwcHJvYWNoLFxuICogd2l0aCBhbiBhY2N1cmFjeSB0YXJnZXQgb2Ygd2l0aGluIDUwMG1zLiBUaGlzIG1ha2VzIGl0IHBhcnRpY3VsYXJseSB1c2VmdWxcbiAqIGZvciB0aW1lcnMgd2l0aCBkZWxheXMgb2YgMSBzZWNvbmQgb3IgbW9yZSwgd2hlcmUgZXhhY3QgdGltaW5nIGlzIGxlc3NcbiAqIGNydWNpYWwuXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IE5vZGUuanMgdGltZXJzIGFyZSBpbmhlcmVudGx5IGltcHJlY2lzZSwgYXNcbiAqIGRlbGF5cyBjYW4gb2NjdXIgZHVlIHRvIHRoZSBldmVudCBsb29wIGJlaW5nIGJsb2NrZWQgYnkgb3RoZXIgb3BlcmF0aW9ucy5cbiAqIENvbnNlcXVlbnRseSwgdGltZXJzIG1heSB0cmlnZ2VyIGxhdGVyIHRoYW4gdGhlaXIgc2NoZWR1bGVkIHRpbWUuXG4gKi9cblxuLyoqXG4gKiBUaGUgZmFzdE5vdyB2YXJpYWJsZSBjb250YWlucyB0aGUgaW50ZXJuYWwgZmFzdCB0aW1lciBjbG9jayB2YWx1ZS5cbiAqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgZmFzdE5vdyA9IDBcblxuLyoqXG4gKiBSRVNPTFVUSU9OX01TIHJlcHJlc2VudHMgdGhlIHRhcmdldCByZXNvbHV0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdCAxMDAwXG4gKi9cbmNvbnN0IFJFU09MVVRJT05fTVMgPSAxZTNcblxuLyoqXG4gKiBUSUNLX01TIGRlZmluZXMgdGhlIGRlc2lyZWQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gZWFjaCB0aWNrLlxuICogVGhlIHRhcmdldCB2YWx1ZSBpcyBzZXQgdG8gaGFsZiB0aGUgcmVzb2x1dGlvbiB0aW1lLCBtaW51cyAxIG1zLCB0byBhY2NvdW50XG4gKiBmb3IgcG90ZW50aWFsIGV2ZW50IGxvb3Agb3ZlcmhlYWQuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0IDQ5OVxuICovXG5jb25zdCBUSUNLX01TID0gKFJFU09MVVRJT05fTVMgPj4gMSkgLSAxXG5cbi8qKlxuICogZmFzdE5vd1RpbWVvdXQgaXMgYSBOb2RlLmpzIHRpbWVyIHVzZWQgdG8gbWFuYWdlIGFuZCBwcm9jZXNzXG4gKiB0aGUgRmFzdFRpbWVycyBzdG9yZWQgaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS5cbiAqXG4gKiBAdHlwZSB7Tm9kZUpTLlRpbWVvdXR9XG4gKi9cbmxldCBmYXN0Tm93VGltZW91dFxuXG4vKipcbiAqIFRoZSBrRmFzdFRpbWVyIHN5bWJvbCBpcyB1c2VkIHRvIGlkZW50aWZ5IEZhc3RUaW1lciBpbnN0YW5jZXMuXG4gKlxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qga0Zhc3RUaW1lciA9IFN5bWJvbCgna0Zhc3RUaW1lcicpXG5cbi8qKlxuICogVGhlIGZhc3RUaW1lcnMgYXJyYXkgY29udGFpbnMgYWxsIGFjdGl2ZSBGYXN0VGltZXJzLlxuICpcbiAqIEB0eXBlIHtGYXN0VGltZXJbXX1cbiAqL1xuY29uc3QgZmFzdFRpbWVycyA9IFtdXG5cbi8qKlxuICogVGhlc2UgY29uc3RhbnRzIHJlcHJlc2VudCB0aGUgdmFyaW91cyBzdGF0ZXMgb2YgYSBGYXN0VGltZXIuXG4gKi9cblxuLyoqXG4gKiBUaGUgYE5PVF9JTl9MSVNUYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIG5vdCBpbmNsdWRlZFxuICogaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS4gVGltZXJzIHdpdGggdGhpcyBzdGF0dXMgd2lsbCBub3QgYmUgcHJvY2Vzc2VkXG4gKiBkdXJpbmcgdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uXG4gKlxuICogQSBGYXN0VGltZXIgY2FuIGJlIHJlLWFkZGVkIHRvIHRoZSBgZmFzdFRpbWVyc2AgYXJyYXkgYnkgaW52b2tpbmcgdGhlXG4gKiBgcmVmcmVzaGAgbWV0aG9kIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0yfVxuICovXG5jb25zdCBOT1RfSU5fTElTVCA9IC0yXG5cbi8qKlxuICogVGhlIGBUT19CRV9DTEVBUkVEYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIHNjaGVkdWxlZFxuICogZm9yIHJlbW92YWwgZnJvbSB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LiBBIEZhc3RUaW1lciBpbiB0aGlzIHN0YXRlIHdpbGxcbiAqIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24gYW5kIHdpbGwgbm8gbG9uZ2VyXG4gKiBiZSBwcm9jZXNzZWQuXG4gKlxuICogVGhpcyBzdGF0dXMgaXMgYWxzbyBzZXQgd2hlbiB0aGUgYGNsZWFyYCBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0xfVxuICovXG5jb25zdCBUT19CRV9DTEVBUkVEID0gLTFcblxuLyoqXG4gKiBUaGUgYFBFTkRJTkdgIGNvbnN0YW50IHNpZ25pZmllcyB0aGF0IHRoZSBGYXN0VGltZXIgaXMgYXdhaXRpbmcgcHJvY2Vzc2luZ1xuICogaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uIFRpbWVycyB3aXRoIHRoaXMgc3RhdHVzIHdpbGwgaGF2ZVxuICogdGhlaXIgYF9pZGxlU3RhcnRgIHZhbHVlIHNldCBhbmQgdGhlaXIgc3RhdHVzIHVwZGF0ZWQgdG8gYEFDVElWRWAgaW4gdGhlIG5leHQgdGljay5cbiAqXG4gKiBAdHlwZSB7MH1cbiAqL1xuY29uc3QgUEVORElORyA9IDBcblxuLyoqXG4gKiBUaGUgYEFDVElWRWAgY29uc3RhbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEZhc3RUaW1lciBpcyBhY3RpdmUgYW5kIHdhaXRpbmdcbiAqIGZvciBpdHMgdGltZXIgdG8gZXhwaXJlLiBEdXJpbmcgdGhlIG5leHQgdGljaywgdGhlIGBvblRpY2tgIGZ1bmN0aW9uIHdpbGxcbiAqIGNoZWNrIGlmIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgYW5kIGlmIHNvLCBpdCB3aWxsIGV4ZWN1dGUgdGhlIGFzc29jaWF0ZWQgY2FsbGJhY2suXG4gKlxuICogQHR5cGUgezF9XG4gKi9cbmNvbnN0IEFDVElWRSA9IDFcblxuLyoqXG4gKiBUaGUgb25UaWNrIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZmFzdFRpbWVycyBhcnJheS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gb25UaWNrICgpIHtcbiAgLyoqXG4gICAqIEluY3JlbWVudCB0aGUgZmFzdE5vdyB2YWx1ZSBieSB0aGUgVElDS19NUyB2YWx1ZSwgZGVzcGl0ZSB0aGUgYWN0dWFsIHRpbWVcbiAgICogdGhhdCBoYXMgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IHRpY2suIFRoaXMgYXBwcm9hY2ggZW5zdXJlcyBpbmRlcGVuZGVuY2VcbiAgICogZnJvbSB0aGUgc3lzdGVtIGNsb2NrIGFuZCBkZWxheXMgY2F1c2VkIGJ5IGEgYmxvY2tlZCBldmVudCBsb29wLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZmFzdE5vdyArPSBUSUNLX01TXG5cbiAgLyoqXG4gICAqIFRoZSBgaWR4YCB2YXJpYWJsZSBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LlxuICAgKiBFeHBpcmVkIHRpbWVycyBhcmUgcmVtb3ZlZCBieSByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGFycmF5LlxuICAgKiBDb25zZXF1ZW50bHksIGBpZHhgIGlzIG9ubHkgaW5jcmVtZW50ZWQgd2hlbiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5vdCByZW1vdmVkLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgbGV0IGlkeCA9IDBcblxuICAvKipcbiAgICogVGhlIGxlbiB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgZmFzdFRpbWVycyBhcnJheVxuICAgKiBhbmQgd2lsbCBiZSBkZWNyZW1lbnRlZCB3aGVuIGEgRmFzdFRpbWVyIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlXG4gICAqIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcblxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgKi9cbiAgICBjb25zdCB0aW1lciA9IGZhc3RUaW1lcnNbaWR4XVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIGluIHRoZSBBQ1RJVkUgc3RhdGUgYW5kIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgaXQgd2lsbFxuICAgIC8vIGJlIHByb2Nlc3NlZCBpbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmICh0aW1lci5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICAgIC8vIFNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byB0aGUgZmFzdE5vdyB2YWx1ZSBtaW51cyB0aGUgVElDS19NUyB2YWx1ZVxuICAgICAgLy8gdG8gYWNjb3VudCBmb3IgdGhlIHRpbWUgdGhlIHRpbWVyIHdhcyBpbiB0aGUgUEVORElORyBzdGF0ZS5cbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSBmYXN0Tm93IC0gVElDS19NU1xuICAgICAgdGltZXIuX3N0YXRlID0gQUNUSVZFXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRpbWVyLl9zdGF0ZSA9PT0gQUNUSVZFICYmXG4gICAgICBmYXN0Tm93ID49IHRpbWVyLl9pZGxlU3RhcnQgKyB0aW1lci5faWRsZVRpbWVvdXRcbiAgICApIHtcbiAgICAgIHRpbWVyLl9zdGF0ZSA9IFRPX0JFX0NMRUFSRURcbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSAtMVxuICAgICAgdGltZXIuX29uVGltZW91dCh0aW1lci5fdGltZXJBcmcpXG4gICAgfVxuXG4gICAgaWYgKHRpbWVyLl9zdGF0ZSA9PT0gVE9fQkVfQ0xFQVJFRCkge1xuICAgICAgdGltZXIuX3N0YXRlID0gTk9UX0lOX0xJU1RcblxuICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50IHRvIHRoZSBjdXJyZW50IGluZGV4IGFuZCBkZWNyZW1lbnQgbGVuIGlmIGl0IGlzXG4gICAgICAvLyBub3QgdGhlIG9ubHkgZWxlbWVudCBpbiB0aGUgYXJyYXkuXG4gICAgICBpZiAoLS1sZW4gIT09IDApIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVyc1tsZW5dXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICsraWR4XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHRoZSBsZW5ndGggb2YgdGhlIGZhc3RUaW1lcnMgYXJyYXkgdG8gdGhlIG5ldyBsZW5ndGggYW5kIHRodXNcbiAgLy8gcmVtb3ZpbmcgdGhlIGV4Y2VzcyBGYXN0VGltZXJzIGVsZW1lbnRzIGZyb20gdGhlIGFycmF5LlxuICBmYXN0VGltZXJzLmxlbmd0aCA9IGxlblxuXG4gIC8vIElmIHRoZXJlIGFyZSBzdGlsbCBhY3RpdmUgRmFzdFRpbWVycyBpbiB0aGUgYXJyYXksIHJlZnJlc2ggdGhlIFRpbWVyLlxuICAvLyBJZiB0aGVyZSBhcmUgbm8gYWN0aXZlIEZhc3RUaW1lcnMsIHRoZSB0aW1lciB3aWxsIGJlIHJlZnJlc2hlZCBhZ2FpblxuICAvLyB3aGVuIGEgbmV3IEZhc3RUaW1lciBpcyBpbnN0YW50aWF0ZWQuXG4gIGlmIChmYXN0VGltZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZyZXNoVGltZW91dCAoKSB7XG4gIC8vIElmIHRoZSBmYXN0Tm93VGltZW91dCBpcyBhbHJlYWR5IHNldCwgcmVmcmVzaCBpdC5cbiAgaWYgKGZhc3ROb3dUaW1lb3V0KSB7XG4gICAgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCgpXG4gIC8vIGZhc3ROb3dUaW1lb3V0IGlzIG5vdCBpbnN0YW50aWF0ZWQgeWV0LCBjcmVhdGUgYSBuZXcgVGltZXIuXG4gIH0gZWxzZSB7XG4gICAgY2xlYXJUaW1lb3V0KGZhc3ROb3dUaW1lb3V0KVxuICAgIGZhc3ROb3dUaW1lb3V0ID0gc2V0VGltZW91dChvblRpY2ssIFRJQ0tfTVMpXG5cbiAgICAvLyBJZiB0aGUgVGltZXIgaGFzIGFuIHVucmVmIG1ldGhvZCwgY2FsbCBpdCB0byBhbGxvdyB0aGUgcHJvY2VzcyB0byBleGl0IGlmXG4gICAgLy8gdGhlcmUgYXJlIG5vIG90aGVyIGFjdGl2ZSBoYW5kbGVzLlxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBgRmFzdFRpbWVyYCBjbGFzcyBpcyBhIGRhdGEgc3RydWN0dXJlIGRlc2lnbmVkIHRvIHN0b3JlIGFuZCBtYW5hZ2VcbiAqIHRpbWVyIGluZm9ybWF0aW9uLlxuICovXG5jbGFzcyBGYXN0VGltZXIge1xuICBba0Zhc3RUaW1lcl0gPSB0cnVlXG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBvZiB0aGUgdGltZXIsIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICogLSBOT1RfSU5fTElTVCAoLTIpXG4gICAqIC0gVE9fQkVfQ0xFQVJFRCAoLTEpXG4gICAqIC0gUEVORElORyAoMClcbiAgICogLSBBQ1RJVkUgKDEpXG4gICAqXG4gICAqIEB0eXBlIHstMnwtMXwwfDF9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhdGUgPSBOT1RfSU5fTElTVFxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBjYWxsaW5nIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pZGxlVGltZW91dCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB3aGVuIHRoZSB0aW1lciB3YXMgc3RhcnRlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvXG4gICAqIGNhbGN1bGF0ZSB3aGVuIHRoZSB0aW1lciBzaG91bGQgZXhwaXJlLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAtMVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lkbGVTdGFydCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSB0aW1lciBleHBpcmVzLlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25UaW1lb3V0XG5cbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqXG4gICAqIEB0eXBlIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RpbWVyQXJnXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGQgd2FpdFxuICAgKiBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IGFyZ1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgdGhpcy5fb25UaW1lb3V0ID0gY2FsbGJhY2tcbiAgICB0aGlzLl9pZGxlVGltZW91dCA9IGRlbGF5XG4gICAgdGhpcy5fdGltZXJBcmcgPSBhcmdcblxuICAgIHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGltZXIncyBzdGFydCB0aW1lIHRvIHRoZSBjdXJyZW50IHRpbWUsIGFuZCByZXNjaGVkdWxlcyB0aGUgdGltZXJcbiAgICogdG8gY2FsbCBpdHMgY2FsbGJhY2sgYXQgdGhlIHByZXZpb3VzbHkgc3BlY2lmaWVkIGR1cmF0aW9uIGFkanVzdGVkIHRvIHRoZVxuICAgKiBjdXJyZW50IHRpbWUuXG4gICAqIFVzaW5nIHRoaXMgb24gYSB0aW1lciB0aGF0IGhhcyBhbHJlYWR5IGNhbGxlZCBpdHMgY2FsbGJhY2sgd2lsbCByZWFjdGl2YXRlXG4gICAqIHRoZSB0aW1lci5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWZyZXNoICgpIHtcbiAgICAvLyBJbiB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgdGhlIHRpbWVyIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhY3RpdmUgdGltZXJzLFxuICAgIC8vIGFkZCBpdCBiYWNrIHRvIHRoZSBhcnJheSB0byBiZSBwcm9jZXNzZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgb25UaWNrXG4gICAgLy8gZnVuY3Rpb24uXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBOT1RfSU5fTElTVCkge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIHRoZSBvbmx5IGFjdGl2ZSB0aW1lciwgcmVmcmVzaCB0aGUgZmFzdE5vd1RpbWVvdXQgZm9yXG4gICAgLy8gYmV0dGVyIHJlc29sdXRpb24uXG4gICAgaWYgKCFmYXN0Tm93VGltZW91dCB8fCBmYXN0VGltZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmVmcmVzaFRpbWVvdXQoKVxuICAgIH1cblxuICAgIC8vIFNldHRpbmcgdGhlIHN0YXRlIHRvIFBFTkRJTkcgd2lsbCBjYXVzZSB0aGUgdGltZXIgdG8gYmUgcmVzZXQgaW4gdGhlXG4gICAgLy8gbmV4dCB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBQRU5ESU5HXG4gIH1cblxuICAvKipcbiAgICogVGhlIGBjbGVhcmAgbWV0aG9kIGNhbmNlbHMgdGhlIHRpbWVyLCBwcmV2ZW50aW5nIGl0IGZyb20gZXhlY3V0aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFyICgpIHtcbiAgICAvLyBTZXQgdGhlIHN0YXRlIHRvIFRPX0JFX0NMRUFSRUQgdG8gbWFyayB0aGUgdGltZXIgZm9yIHJlbW92YWwgaW4gdGhlIG5leHRcbiAgICAvLyB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBUT19CRV9DTEVBUkVEXG5cbiAgICAvLyBSZXNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0aW1lciBpcyBubyBsb25nZXJcbiAgICAvLyBhY3RpdmUuXG4gICAgdGhpcy5faWRsZVN0YXJ0ID0gLTFcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXRUaW1lb3V0IGFuZCBjbGVhclRpbWVvdXQgZnVuY3Rpb24gdGhhdCBjYW4gYmVcbiAqIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIGZ1bmN0aW9ucy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgc2V0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgdGltZXIgd2hpY2ggZXhlY3V0ZXMgYSBmdW5jdGlvbiBvbmNlIHRoZVxuICAgKiB0aW1lciBleHBpcmVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGRcbiAgICogd2FpdCBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IFthcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogd2hlbiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHJldHVybnMge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn1cbiAgICovXG4gIHNldFRpbWVvdXQgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgLy8gSWYgdGhlIGRlbGF5IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgUkVTT0xVVElPTl9NUyB2YWx1ZSByZXR1cm4gYVxuICAgIC8vIG5hdGl2ZSBOb2RlLmpzIFRpbWVyIGluc3RhbmNlLlxuICAgIHJldHVybiBkZWxheSA8PSBSRVNPTFVUSU9OX01TXG4gICAgICA/IHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gICAgICA6IG5ldyBGYXN0VGltZXIoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgY2xlYXJUaW1lb3V0IG1ldGhvZCBjYW5jZWxzIGFuIGluc3RhbnRpYXRlZCBUaW1lciBwcmV2aW91c2x5IGNyZWF0ZWRcbiAgICogYnkgY2FsbGluZyBzZXRUaW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn0gdGltZW91dFxuICAgKi9cbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgLy8gSWYgdGhlIHRpbWVvdXQgaXMgYSBGYXN0VGltZXIsIGNhbGwgaXRzIG93biBjbGVhciBtZXRob2QuXG4gICAgaWYgKHRpbWVvdXRba0Zhc3RUaW1lcl0pIHtcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgICAqL1xuICAgICAgdGltZW91dC5jbGVhcigpXG4gICAgICAvLyBPdGhlcndpc2UgaXQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBuYXRpdmUgTm9kZUpTLlRpbWVvdXQsIHNvIGNhbGwgdGhlXG4gICAgICAvLyBOb2RlLmpzIG5hdGl2ZSBjbGVhclRpbWVvdXQgZnVuY3Rpb24uXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgIH1cbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBzZXRGYXN0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgZmFzdFRpbWVyIHdoaWNoIGV4ZWN1dGVzIGEgZnVuY3Rpb24gb25jZVxuICAgKiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGltZXJcbiAgICogZXhwaXJlcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IFRoZSB0aW1lLCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgdGltZXIgc2hvdWxkXG4gICAqIHdhaXQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gb3IgY29kZSBpcyBleGVjdXRlZC5cbiAgICogQHBhcmFtIHsqfSBbYXJnXSBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqIEByZXR1cm5zIHtGYXN0VGltZXJ9XG4gICAqL1xuICBzZXRGYXN0VGltZW91dCAoY2FsbGJhY2ssIGRlbGF5LCBhcmcpIHtcbiAgICByZXR1cm4gbmV3IEZhc3RUaW1lcihjYWxsYmFjaywgZGVsYXksIGFyZylcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBjbGVhclRpbWVvdXQgbWV0aG9kIGNhbmNlbHMgYW4gaW5zdGFudGlhdGVkIEZhc3RUaW1lciBwcmV2aW91c2x5XG4gICAqIGNyZWF0ZWQgYnkgY2FsbGluZyBzZXRGYXN0VGltZW91dC5cbiAgICpcbiAgICogQHBhcmFtIHtGYXN0VGltZXJ9IHRpbWVvdXRcbiAgICovXG4gIGNsZWFyRmFzdFRpbWVvdXQgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsZWFyKClcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBub3cgbWV0aG9kIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcm5hbCBmYXN0IHRpbWVyIGNsb2NrLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgbm93ICgpIHtcbiAgICByZXR1cm4gZmFzdE5vd1xuICB9LFxuICAvKipcbiAgICogVHJpZ2dlciB0aGUgb25UaWNrIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqIEV4cG9ydGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG4gICAqIE1hcmtpbmcgYXMgZGVwcmVjYXRlZCB0byBkaXNjb3VyYWdlIGFueSB1c2Ugb3V0c2lkZSBvZiB0ZXN0aW5nLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlbGF5PTBdIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gYWRkIHRvIHRoZSBub3cgdmFsdWUuXG4gICAqL1xuICB0aWNrIChkZWxheSA9IDApIHtcbiAgICBmYXN0Tm93ICs9IGRlbGF5IC0gUkVTT0xVVElPTl9NUyArIDFcbiAgICBvblRpY2soKVxuICAgIG9uVGljaygpXG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCBGYXN0VGltZXJzLlxuICAgKiBFeHBvcnRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHJlc2V0ICgpIHtcbiAgICBmYXN0Tm93ID0gMFxuICAgIGZhc3RUaW1lcnMubGVuZ3RoID0gMFxuICAgIGNsZWFyVGltZW91dChmYXN0Tm93VGltZW91dClcbiAgICBmYXN0Tm93VGltZW91dCA9IG51bGxcbiAgfSxcbiAgLyoqXG4gICAqIEV4cG9ydGluZyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGtGYXN0VGltZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbm9kZTpuZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBDb25uZWN0VGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB0aW1lcnMgPSByZXF1aXJlKCcuLi91dGlsL3RpbWVycycpXG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxubGV0IHRscyAvLyBpbmNsdWRlIHRscyBjb25kaXRpb25hbGx5IHNpbmNlIGl0IGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlXG5cbi8vIFRPRE86IHNlc3Npb24gcmUtdXNlIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBmaXJzdFxuLy8gY29ubmVjdGlvbiB0byByZXNvbHZlIHRoZSBzZXNzaW9uIGFuZCBtaWdodCB0aGVyZWZvcmVcbi8vIHJlc29sdmUgdGhlIHNhbWUgc2VydmVybmFtZSBtdWx0aXBsZSB0aW1lcyBldmVuIHdoZW5cbi8vIHJlLXVzZSBpcyBlbmFibGVkLlxuXG5sZXQgU2Vzc2lvbkNhY2hlXG4vLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbmlmIChnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgIShwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFIHx8IHByb2Nlc3MuZW52LlVORElDSV9OT19GRykpIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgV2Vha1Nlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeSA9IG5ldyBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkoKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPCB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChrZXkpXG4gICAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgICByZXR1cm4gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgbmV3IFdlYWtSZWYoc2Vzc2lvbikpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkucmVnaXN0ZXIoc2Vzc2lvbiwgc2Vzc2lvbktleSlcbiAgICB9XG4gIH1cbn0gZWxzZSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFNpbXBsZVNlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA+PSB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAvLyByZW1vdmUgdGhlIG9sZGVzdCBzZXNzaW9uXG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IG9sZGVzdEtleSB9ID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmtleXMoKS5uZXh0KClcbiAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDb25uZWN0b3IgKHsgYWxsb3dIMiwgbWF4Q2FjaGVkU2Vzc2lvbnMsIHNvY2tldFBhdGgsIHRpbWVvdXQsIHNlc3Npb246IGN1c3RvbVNlc3Npb24sIC4uLm9wdHMgfSkge1xuICBpZiAobWF4Q2FjaGVkU2Vzc2lvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4Q2FjaGVkU2Vzc2lvbnMpIHx8IG1heENhY2hlZFNlc3Npb25zIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENhY2hlZFNlc3Npb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogc29ja2V0UGF0aCwgLi4ub3B0cyB9XG4gIGNvbnN0IHNlc3Npb25DYWNoZSA9IG5ldyBTZXNzaW9uQ2FjaGUobWF4Q2FjaGVkU2Vzc2lvbnMgPT0gbnVsbCA/IDEwMCA6IG1heENhY2hlZFNlc3Npb25zKVxuICB0aW1lb3V0ID0gdGltZW91dCA9PSBudWxsID8gMTBlMyA6IHRpbWVvdXRcbiAgYWxsb3dIMiA9IGFsbG93SDIgIT0gbnVsbCA/IGFsbG93SDIgOiBmYWxzZVxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdCAoeyBob3N0bmFtZSwgaG9zdCwgcHJvdG9jb2wsIHBvcnQsIHNlcnZlcm5hbWUsIGxvY2FsQWRkcmVzcywgaHR0cFNvY2tldCB9LCBjYWxsYmFjaykge1xuICAgIGxldCBzb2NrZXRcbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICBpZiAoIXRscykge1xuICAgICAgICB0bHMgPSByZXF1aXJlKCdub2RlOnRscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGFzc2VydChzZXNzaW9uS2V5KVxuXG4gICAgICBjb25zdCBzZXNzaW9uID0gY3VzdG9tU2Vzc2lvbiB8fCBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgcG9ydCA9IHBvcnQgfHwgNDQzXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuXG4gICAgICBzb2NrZXRcbiAgICAgICAgLm9uKCdzZXNzaW9uJywgZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBDYW4gYSBzZXNzaW9uIGJlY29tZSBpbnZhbGlkIG9uY2UgZXN0YWJsaXNoZWQ/IERvbid0IHRoaW5rIHNvP1xuICAgICAgICAgIHNlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KCFodHRwU29ja2V0LCAnaHR0cFNvY2tldCBjYW4gb25seSBiZSBzZW50IG9uIFRMUyB1cGRhdGUnKVxuXG4gICAgICBwb3J0ID0gcG9ydCB8fCA4MFxuXG4gICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDY0ICogMTAyNCwgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICBwb3J0LFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTZXQgVENQIGtlZXAgYWxpdmUgb3B0aW9ucyBvbiB0aGUgc29ja2V0IGhlcmUgaW5zdGVhZCBvZiBpbiBjb25uZWN0KCkgZm9yIHRoZSBjYXNlIG9mIGFzc2lnbmluZyB0aGUgc29ja2V0XG4gICAgaWYgKG9wdGlvbnMua2VlcEFsaXZlID09IG51bGwgfHwgb3B0aW9ucy5rZWVwQWxpdmUpIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZUluaXRpYWxEZWxheSA9IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5ID09PSB1bmRlZmluZWQgPyA2MGUzIDogb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXlcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwga2VlcEFsaXZlSW5pdGlhbERlbGF5KVxuICAgIH1cblxuICAgIGNvbnN0IGNsZWFyQ29ubmVjdFRpbWVvdXQgPSBzZXR1cENvbm5lY3RUaW1lb3V0KG5ldyBXZWFrUmVmKHNvY2tldCksIHsgdGltZW91dCwgaG9zdG5hbWUsIHBvcnQgfSlcblxuICAgIHNvY2tldFxuICAgICAgLnNldE5vRGVsYXkodHJ1ZSlcbiAgICAgIC5vbmNlKHByb3RvY29sID09PSAnaHR0cHM6JyA/ICdzZWN1cmVDb25uZWN0JyA6ICdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhjbGVhckNvbm5lY3RUaW1lb3V0KVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihudWxsLCB0aGlzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2xlYXJDb25uZWN0VGltZW91dClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtXZWFrUmVmPG5ldC5Tb2NrZXQ+fSBzb2NrZXRXZWFrUmVmXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMudGltZW91dFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuaG9zdG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLnBvcnRcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICovXG5jb25zdCBzZXR1cENvbm5lY3RUaW1lb3V0ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICA/IChzb2NrZXRXZWFrUmVmLCBvcHRzKSA9PiB7XG4gICAgICBpZiAoIW9wdHMudGltZW91dCkge1xuICAgICAgICByZXR1cm4gbm9vcFxuICAgICAgfVxuXG4gICAgICBsZXQgczEgPSBudWxsXG4gICAgICBsZXQgczIgPSBudWxsXG4gICAgICBjb25zdCBmYXN0VGltZXIgPSB0aW1lcnMuc2V0RmFzdFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc2V0SW1tZWRpYXRlIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHByaW9yaXRpemUgc29ja2V0IGVycm9yIGV2ZW50cyBvdmVyIHRpbWVvdXRzXG4gICAgICAgIHMxID0gc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgLy8gV2luZG93cyBuZWVkcyBhbiBleHRyYSBzZXRJbW1lZGlhdGUgcHJvYmFibHkgZHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIGluIHRoZSBzb2NrZXQgbG9naWNcbiAgICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldFdlYWtSZWYuZGVyZWYoKSwgb3B0cykpXG4gICAgICAgIH0pXG4gICAgICB9LCBvcHRzLnRpbWVvdXQpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aW1lcnMuY2xlYXJGYXN0VGltZW91dChmYXN0VGltZXIpXG4gICAgICAgIGNsZWFySW1tZWRpYXRlKHMxKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMilcbiAgICAgIH1cbiAgICB9XG4gIDogKHNvY2tldFdlYWtSZWYsIG9wdHMpID0+IHtcbiAgICAgIGlmICghb3B0cy50aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiBub29wXG4gICAgICB9XG5cbiAgICAgIGxldCBzMSA9IG51bGxcbiAgICAgIGNvbnN0IGZhc3RUaW1lciA9IHRpbWVycy5zZXRGYXN0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3JpdGl6ZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICAgICAgczEgPSBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgIG9uQ29ubmVjdFRpbWVvdXQoc29ja2V0V2Vha1JlZi5kZXJlZigpLCBvcHRzKVxuICAgICAgICB9KVxuICAgICAgfSwgb3B0cy50aW1lb3V0KVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGltZXJzLmNsZWFyRmFzdFRpbWVvdXQoZmFzdFRpbWVyKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMSlcbiAgICAgIH1cbiAgICB9XG5cbi8qKlxuICogQHBhcmFtIHtuZXQuU29ja2V0fSBzb2NrZXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0cy50aW1lb3V0XG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5ob3N0bmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMucG9ydFxuICovXG5mdW5jdGlvbiBvbkNvbm5lY3RUaW1lb3V0IChzb2NrZXQsIG9wdHMpIHtcbiAgLy8gVGhlIHNvY2tldCBjb3VsZCBiZSBhbHJlYWR5IGdhcmJhZ2UgY29sbGVjdGVkXG4gIGlmIChzb2NrZXQgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IG1lc3NhZ2UgPSAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICBpZiAoQXJyYXkuaXNBcnJheShzb2NrZXQuYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRlZEFkZHJlc3NlcykpIHtcbiAgICBtZXNzYWdlICs9IGAgKGF0dGVtcHRlZCBhZGRyZXNzZXM6ICR7c29ja2V0LmF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0ZWRBZGRyZXNzZXMuam9pbignLCAnKX0sYFxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgKz0gYCAoYXR0ZW1wdGVkIGFkZHJlc3M6ICR7b3B0cy5ob3N0bmFtZX06JHtvcHRzLnBvcnR9LGBcbiAgfVxuXG4gIG1lc3NhZ2UgKz0gYCB0aW1lb3V0OiAke29wdHMudGltZW91dH1tcylgXG5cbiAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IENvbm5lY3RUaW1lb3V0RXJyb3IobWVzc2FnZSkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW51bVRvTWFwID0gdm9pZCAwO1xuZnVuY3Rpb24gZW51bVRvTWFwKG9iaikge1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZW51bVRvTWFwID0gZW51bVRvTWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSBleHBvcnRzLkhFQURFUl9TVEFURSA9IGV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SID0gZXhwb3J0cy5DT05ORUNUSU9OX1RPS0VOX0NIQVJTID0gZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBleHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBleHBvcnRzLkhFWCA9IGV4cG9ydHMuVVJMX0NIQVIgPSBleHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IGV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLk1BUksgPSBleHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5OVU0gPSBleHBvcnRzLkhFWF9NQVAgPSBleHBvcnRzLk5VTV9NQVAgPSBleHBvcnRzLkFMUEhBID0gZXhwb3J0cy5GSU5JU0ggPSBleHBvcnRzLkhfTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EU19SVFNQID0gZXhwb3J0cy5NRVRIT0RTX0lDRSA9IGV4cG9ydHMuTUVUSE9EU19IVFRQID0gZXhwb3J0cy5NRVRIT0RTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5GTEFHUyA9IGV4cG9ydHMuVFlQRSA9IGV4cG9ydHMuRVJST1IgPSB2b2lkIDA7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vLyBDIGhlYWRlcnNcbnZhciBFUlJPUjtcbihmdW5jdGlvbiAoRVJST1IpIHtcbiAgICBFUlJPUltFUlJPUltcIk9LXCJdID0gMF0gPSBcIk9LXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlRFUk5BTFwiXSA9IDFdID0gXCJJTlRFUk5BTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiU1RSSUNUXCJdID0gMl0gPSBcIlNUUklDVFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiTEZfRVhQRUNURURcIl0gPSAzXSA9IFwiTEZfRVhQRUNURURcIjtcbiAgICBFUlJPUltFUlJPUltcIlVORVhQRUNURURfQ09OVEVOVF9MRU5HVEhcIl0gPSA0XSA9IFwiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0xPU0VEX0NPTk5FQ1RJT05cIl0gPSA1XSA9IFwiQ0xPU0VEX0NPTk5FQ1RJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfTUVUSE9EXCJdID0gNl0gPSBcIklOVkFMSURfTUVUSE9EXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1VSTFwiXSA9IDddID0gXCJJTlZBTElEX1VSTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05TVEFOVFwiXSA9IDhdID0gXCJJTlZBTElEX0NPTlNUQU5UXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1ZFUlNJT05cIl0gPSA5XSA9IFwiSU5WQUxJRF9WRVJTSU9OXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiXSA9IDEwXSA9IFwiSU5WQUxJRF9IRUFERVJfVE9LRU5cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIl0gPSAxMV0gPSBcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ0hVTktfU0laRVwiXSA9IDEyXSA9IFwiSU5WQUxJRF9DSFVOS19TSVpFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1NUQVRVU1wiXSA9IDEzXSA9IFwiSU5WQUxJRF9TVEFUVVNcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfRU9GX1NUQVRFXCJdID0gMTRdID0gXCJJTlZBTElEX0VPRl9TVEFURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiXSA9IDE1XSA9IFwiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9CRUdJTlwiXSA9IDE2XSA9IFwiQ0JfTUVTU0FHRV9CRUdJTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfSEVBREVSU19DT01QTEVURVwiXSA9IDE3XSA9IFwiQ0JfSEVBREVSU19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9DT01QTEVURVwiXSA9IDE4XSA9IFwiQ0JfTUVTU0FHRV9DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfSEVBREVSXCJdID0gMTldID0gXCJDQl9DSFVOS19IRUFERVJcIjtcbiAgICBFUlJPUltFUlJPUltcIkNCX0NIVU5LX0NPTVBMRVRFXCJdID0gMjBdID0gXCJDQl9DSFVOS19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEXCJdID0gMjFdID0gXCJQQVVTRURcIjtcbiAgICBFUlJPUltFUlJPUltcIlBBVVNFRF9VUEdSQURFXCJdID0gMjJdID0gXCJQQVVTRURfVVBHUkFERVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX0gyX1VQR1JBREVcIl0gPSAyM10gPSBcIlBBVVNFRF9IMl9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJVU0VSXCJdID0gMjRdID0gXCJVU0VSXCI7XG59KShFUlJPUiA9IGV4cG9ydHMuRVJST1IgfHwgKGV4cG9ydHMuRVJST1IgPSB7fSkpO1xudmFyIFRZUEU7XG4oZnVuY3Rpb24gKFRZUEUpIHtcbiAgICBUWVBFW1RZUEVbXCJCT1RIXCJdID0gMF0gPSBcIkJPVEhcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVFVRVNUXCJdID0gMV0gPSBcIlJFUVVFU1RcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVNQT05TRVwiXSA9IDJdID0gXCJSRVNQT05TRVwiO1xufSkoVFlQRSA9IGV4cG9ydHMuVFlQRSB8fCAoZXhwb3J0cy5UWVBFID0ge30pKTtcbnZhciBGTEFHUztcbihmdW5jdGlvbiAoRkxBR1MpIHtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDFdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSAyXSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9VUEdSQURFXCJdID0gNF0gPSBcIkNPTk5FQ1RJT05fVVBHUkFERVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ0hVTktFRFwiXSA9IDhdID0gXCJDSFVOS0VEXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJVUEdSQURFXCJdID0gMTZdID0gXCJVUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05URU5UX0xFTkdUSFwiXSA9IDMyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlNLSVBCT0RZXCJdID0gNjRdID0gXCJTS0lQQk9EWVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiVFJBSUxJTkdcIl0gPSAxMjhdID0gXCJUUkFJTElOR1wiO1xuICAgIC8vIDEgPDwgOCBpcyB1bnVzZWRcbiAgICBGTEFHU1tGTEFHU1tcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gNTEyXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbn0pKEZMQUdTID0gZXhwb3J0cy5GTEFHUyB8fCAoZXhwb3J0cy5GTEFHUyA9IHt9KSk7XG52YXIgTEVOSUVOVF9GTEFHUztcbihmdW5jdGlvbiAoTEVOSUVOVF9GTEFHUykge1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkhFQURFUlNcIl0gPSAxXSA9IFwiSEVBREVSU1wiO1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkNIVU5LRURfTEVOR1RIXCJdID0gMl0gPSBcIkNIVU5LRURfTEVOR1RIXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiS0VFUF9BTElWRVwiXSA9IDRdID0gXCJLRUVQX0FMSVZFXCI7XG59KShMRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTIHx8IChleHBvcnRzLkxFTklFTlRfRkxBR1MgPSB7fSkpO1xudmFyIE1FVEhPRFM7XG4oZnVuY3Rpb24gKE1FVEhPRFMpIHtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERUxFVEVcIl0gPSAwXSA9IFwiREVMRVRFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUXCJdID0gMV0gPSBcIkdFVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkhFQURcIl0gPSAyXSA9IFwiSEVBRFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBPU1RcIl0gPSAzXSA9IFwiUE9TVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVVFwiXSA9IDRdID0gXCJQVVRcIjtcbiAgICAvKiBwYXRob2xvZ2ljYWwgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJDT05ORUNUXCJdID0gNV0gPSBcIkNPTk5FQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJPUFRJT05TXCJdID0gNl0gPSBcIk9QVElPTlNcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJUUkFDRVwiXSA9IDddID0gXCJUUkFDRVwiO1xuICAgIC8qIFdlYkRBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPUFlcIl0gPSA4XSA9IFwiQ09QWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxPQ0tcIl0gPSA5XSA9IFwiTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ09MXCJdID0gMTBdID0gXCJNS0NPTFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1PVkVcIl0gPSAxMV0gPSBcIk1PVkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QRklORFwiXSA9IDEyXSA9IFwiUFJPUEZJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QUEFUQ0hcIl0gPSAxM10gPSBcIlBST1BQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFQVJDSFwiXSA9IDE0XSA9IFwiU0VBUkNIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MT0NLXCJdID0gMTVdID0gXCJVTkxPQ0tcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJCSU5EXCJdID0gMTZdID0gXCJCSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVCSU5EXCJdID0gMTddID0gXCJSRUJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkJJTkRcIl0gPSAxOF0gPSBcIlVOQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkFDTFwiXSA9IDE5XSA9IFwiQUNMXCI7XG4gICAgLyogc3VidmVyc2lvbiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlJFUE9SVFwiXSA9IDIwXSA9IFwiUkVQT1JUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtBQ1RJVklUWVwiXSA9IDIxXSA9IFwiTUtBQ1RJVklUWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNIRUNLT1VUXCJdID0gMjJdID0gXCJDSEVDS09VVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1FUkdFXCJdID0gMjNdID0gXCJNRVJHRVwiO1xuICAgIC8qIHVwbnAgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNLVNFQVJDSFwiXSA9IDI0XSA9IFwiTS1TRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJOT1RJRllcIl0gPSAyNV0gPSBcIk5PVElGWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNVQlNDUklCRVwiXSA9IDI2XSA9IFwiU1VCU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5TVUJTQ1JJQkVcIl0gPSAyN10gPSBcIlVOU1VCU0NSSUJFXCI7XG4gICAgLyogUkZDLTU3ODkgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQQVRDSFwiXSA9IDI4XSA9IFwiUEFUQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQVVJHRVwiXSA9IDI5XSA9IFwiUFVSR0VcIjtcbiAgICAvKiBDYWxEQVYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0NBTEVOREFSXCJdID0gMzBdID0gXCJNS0NBTEVOREFSXCI7XG4gICAgLyogUkZDLTIwNjgsIHNlY3Rpb24gMTkuNi4xLjIgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJMSU5LXCJdID0gMzFdID0gXCJMSU5LXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MSU5LXCJdID0gMzJdID0gXCJVTkxJTktcIjtcbiAgICAvKiBpY2VjYXN0ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU09VUkNFXCJdID0gMzNdID0gXCJTT1VSQ0VcIjtcbiAgICAvKiBSRkMtNzU0MCwgc2VjdGlvbiAxMS42ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFJJXCJdID0gMzRdID0gXCJQUklcIjtcbiAgICAvKiBSRkMtMjMyNiBSVFNQICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiREVTQ1JJQkVcIl0gPSAzNV0gPSBcIkRFU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQU5OT1VOQ0VcIl0gPSAzNl0gPSBcIkFOTk9VTkNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VUVVBcIl0gPSAzN10gPSBcIlNFVFVQXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUExBWVwiXSA9IDM4XSA9IFwiUExBWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVVNFXCJdID0gMzldID0gXCJQQVVTRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRFQVJET1dOXCJdID0gNDBdID0gXCJURUFSRE9XTlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkdFVF9QQVJBTUVURVJcIl0gPSA0MV0gPSBcIkdFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRfUEFSQU1FVEVSXCJdID0gNDJdID0gXCJTRVRfUEFSQU1FVEVSXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVESVJFQ1RcIl0gPSA0M10gPSBcIlJFRElSRUNUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVDT1JEXCJdID0gNDRdID0gXCJSRUNPUkRcIjtcbiAgICAvKiBSQU9QICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiRkxVU0hcIl0gPSA0NV0gPSBcIkZMVVNIXCI7XG59KShNRVRIT0RTID0gZXhwb3J0cy5NRVRIT0RTIHx8IChleHBvcnRzLk1FVEhPRFMgPSB7fSkpO1xuZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBbXG4gICAgTUVUSE9EUy5ERUxFVEUsXG4gICAgTUVUSE9EUy5HRVQsXG4gICAgTUVUSE9EUy5IRUFELFxuICAgIE1FVEhPRFMuUE9TVCxcbiAgICBNRVRIT0RTLlBVVCxcbiAgICBNRVRIT0RTLkNPTk5FQ1QsXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuVFJBQ0UsXG4gICAgTUVUSE9EUy5DT1BZLFxuICAgIE1FVEhPRFMuTE9DSyxcbiAgICBNRVRIT0RTLk1LQ09MLFxuICAgIE1FVEhPRFMuTU9WRSxcbiAgICBNRVRIT0RTLlBST1BGSU5ELFxuICAgIE1FVEhPRFMuUFJPUFBBVENILFxuICAgIE1FVEhPRFMuU0VBUkNILFxuICAgIE1FVEhPRFMuVU5MT0NLLFxuICAgIE1FVEhPRFMuQklORCxcbiAgICBNRVRIT0RTLlJFQklORCxcbiAgICBNRVRIT0RTLlVOQklORCxcbiAgICBNRVRIT0RTLkFDTCxcbiAgICBNRVRIT0RTLlJFUE9SVCxcbiAgICBNRVRIT0RTLk1LQUNUSVZJVFksXG4gICAgTUVUSE9EUy5DSEVDS09VVCxcbiAgICBNRVRIT0RTLk1FUkdFLFxuICAgIE1FVEhPRFNbJ00tU0VBUkNIJ10sXG4gICAgTUVUSE9EUy5OT1RJRlksXG4gICAgTUVUSE9EUy5TVUJTQ1JJQkUsXG4gICAgTUVUSE9EUy5VTlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlBBVENILFxuICAgIE1FVEhPRFMuUFVSR0UsXG4gICAgTUVUSE9EUy5NS0NBTEVOREFSLFxuICAgIE1FVEhPRFMuTElOSyxcbiAgICBNRVRIT0RTLlVOTElOSyxcbiAgICBNRVRIT0RTLlBSSSxcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBzaG91bGQgd2UgYWxsb3cgaXQgd2l0aCBIVFRQP1xuICAgIE1FVEhPRFMuU09VUkNFLFxuXTtcbmV4cG9ydHMuTUVUSE9EU19JQ0UgPSBbXG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBbXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuREVTQ1JJQkUsXG4gICAgTUVUSE9EUy5BTk5PVU5DRSxcbiAgICBNRVRIT0RTLlNFVFVQLFxuICAgIE1FVEhPRFMuUExBWSxcbiAgICBNRVRIT0RTLlBBVVNFLFxuICAgIE1FVEhPRFMuVEVBUkRPV04sXG4gICAgTUVUSE9EUy5HRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuU0VUX1BBUkFNRVRFUixcbiAgICBNRVRIT0RTLlJFRElSRUNULFxuICAgIE1FVEhPRFMuUkVDT1JELFxuICAgIE1FVEhPRFMuRkxVU0gsXG4gICAgLy8gRm9yIEFpclBsYXlcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLlBPU1QsXG5dO1xuZXhwb3J0cy5NRVRIT0RfTUFQID0gdXRpbHNfMS5lbnVtVG9NYXAoTUVUSE9EUyk7XG5leHBvcnRzLkhfTUVUSE9EX01BUCA9IHt9O1xuT2JqZWN0LmtleXMoZXhwb3J0cy5NRVRIT0RfTUFQKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoL15ILy50ZXN0KGtleSkpIHtcbiAgICAgICAgZXhwb3J0cy5IX01FVEhPRF9NQVBba2V5XSA9IGV4cG9ydHMuTUVUSE9EX01BUFtrZXldO1xuICAgIH1cbn0pO1xudmFyIEZJTklTSDtcbihmdW5jdGlvbiAoRklOSVNIKSB7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVcIl0gPSAwXSA9IFwiU0FGRVwiO1xuICAgIEZJTklTSFtGSU5JU0hbXCJTQUZFX1dJVEhfQ0JcIl0gPSAxXSA9IFwiU0FGRV9XSVRIX0NCXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlVOU0FGRVwiXSA9IDJdID0gXCJVTlNBRkVcIjtcbn0pKEZJTklTSCA9IGV4cG9ydHMuRklOSVNIIHx8IChleHBvcnRzLkZJTklTSCA9IHt9KSk7XG5leHBvcnRzLkFMUEhBID0gW107XG5mb3IgKGxldCBpID0gJ0EnLmNoYXJDb2RlQXQoMCk7IGkgPD0gJ1onLmNoYXJDb2RlQXQoMCk7IGkrKykge1xuICAgIC8vIFVwcGVyIGNhc2VcbiAgICBleHBvcnRzLkFMUEhBLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XG4gICAgLy8gTG93ZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkgKyAweDIwKSk7XG59XG5leHBvcnRzLk5VTV9NQVAgPSB7XG4gICAgMDogMCwgMTogMSwgMjogMiwgMzogMywgNDogNCxcbiAgICA1OiA1LCA2OiA2LCA3OiA3LCA4OiA4LCA5OiA5LFxufTtcbmV4cG9ydHMuSEVYX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG4gICAgQTogMFhBLCBCOiAwWEIsIEM6IDBYQywgRDogMFhELCBFOiAwWEUsIEY6IDBYRixcbiAgICBhOiAweGEsIGI6IDB4YiwgYzogMHhjLCBkOiAweGQsIGU6IDB4ZSwgZjogMHhmLFxufTtcbmV4cG9ydHMuTlVNID0gW1xuICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5Jyxcbl07XG5leHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5BTFBIQS5jb25jYXQoZXhwb3J0cy5OVU0pO1xuZXhwb3J0cy5NQVJLID0gWyctJywgJ18nLCAnLicsICchJywgJ34nLCAnKicsICdcXCcnLCAnKCcsICcpJ107XG5leHBvcnRzLlVTRVJJTkZPX0NIQVJTID0gZXhwb3J0cy5BTFBIQU5VTVxuICAgIC5jb25jYXQoZXhwb3J0cy5NQVJLKVxuICAgIC5jb25jYXQoWyclJywgJzsnLCAnOicsICcmJywgJz0nLCAnKycsICckJywgJywnXSk7XG4vLyBUT0RPKGluZHV0bnkpOiB1c2UgUkZDXG5leHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IFtcbiAgICAnIScsICdcIicsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcoJywgJyknLCAnKicsICcrJywgJywnLCAnLScsICcuJywgJy8nLFxuICAgICc6JywgJzsnLCAnPCcsICc9JywgJz4nLFxuICAgICdAJywgJ1snLCAnXFxcXCcsICddJywgJ14nLCAnXycsXG4gICAgJ2AnLFxuICAgICd7JywgJ3wnLCAnfScsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSXG4gICAgLmNvbmNhdChbJ1xcdCcsICdcXGYnXSk7XG4vLyBBbGwgY2hhcmFjdGVycyB3aXRoIDB4ODAgYml0IHNldCB0byAxXG5mb3IgKGxldCBpID0gMHg4MDsgaSA8PSAweGZmOyBpKyspIHtcbiAgICBleHBvcnRzLlVSTF9DSEFSLnB1c2goaSk7XG59XG5leHBvcnRzLkhFWCA9IGV4cG9ydHMuTlVNLmNvbmNhdChbJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJ10pO1xuLyogVG9rZW5zIGFzIGRlZmluZWQgYnkgcmZjIDI2MTYuIEFsc28gbG93ZXJjYXNlcyB0aGVtLlxuICogICAgICAgIHRva2VuICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiAqICAgICBzZXBhcmF0b3JzICAgICA9IFwiKFwiIHwgXCIpXCIgfCBcIjxcIiB8IFwiPlwiIHwgXCJAXCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAqICAgICAgICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwie1wiIHwgXCJ9XCIgfCBTUCB8IEhUXG4gKi9cbmV4cG9ydHMuU1RSSUNUX1RPS0VOID0gW1xuICAgICchJywgJyMnLCAnJCcsICclJywgJyYnLCAnXFwnJyxcbiAgICAnKicsICcrJywgJy0nLCAnLicsXG4gICAgJ14nLCAnXycsICdgJyxcbiAgICAnfCcsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5UT0tFTiA9IGV4cG9ydHMuU1RSSUNUX1RPS0VOLmNvbmNhdChbJyAnXSk7XG4vKlxuICogVmVyaWZ5IHRoYXQgYSBjaGFyIGlzIGEgdmFsaWQgdmlzaWJsZSAocHJpbnRhYmxlKSBVUy1BU0NJSVxuICogY2hhcmFjdGVyIG9yICV4ODAtRkZcbiAqL1xuZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBbJ1xcdCddO1xuZm9yIChsZXQgaSA9IDMyOyBpIDw9IDI1NTsgaSsrKSB7XG4gICAgaWYgKGkgIT09IDEyNykge1xuICAgICAgICBleHBvcnRzLkhFQURFUl9DSEFSUy5wdXNoKGkpO1xuICAgIH1cbn1cbi8vICcsJyA9IFxceDQ0XG5leHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUy5maWx0ZXIoKGMpID0+IGMgIT09IDQ0KTtcbmV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLk5VTV9NQVA7XG5leHBvcnRzLk1JTk9SID0gZXhwb3J0cy5NQUpPUjtcbnZhciBIRUFERVJfU1RBVEU7XG4oZnVuY3Rpb24gKEhFQURFUl9TVEFURSkge1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJHRU5FUkFMXCJdID0gMF0gPSBcIkdFTkVSQUxcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTlwiXSA9IDFdID0gXCJDT05ORUNUSU9OXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTlRFTlRfTEVOR1RIXCJdID0gMl0gPSBcIkNPTlRFTlRfTEVOR1RIXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gM10gPSBcIlRSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlVQR1JBREVcIl0gPSA0XSA9IFwiVVBHUkFERVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIl0gPSA1XSA9IFwiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSA2XSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA3XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HX0NIVU5LRURcIl0gPSA4XSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiO1xufSkoSEVBREVSX1NUQVRFID0gZXhwb3J0cy5IRUFERVJfU1RBVEUgfHwgKGV4cG9ydHMuSEVBREVSX1NUQVRFID0ge30pKTtcbmV4cG9ydHMuU1BFQ0lBTF9IRUFERVJTID0ge1xuICAgICdjb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ2NvbnRlbnQtbGVuZ3RoJzogSEVBREVSX1NUQVRFLkNPTlRFTlRfTEVOR1RILFxuICAgICdwcm94eS1jb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ3RyYW5zZmVyLWVuY29kaW5nJzogSEVBREVSX1NUQVRFLlRSQU5TRkVSX0VOQ09ESU5HLFxuICAgICd1cGdyYWRlJzogSEVBREVSX1NUQVRFLlVQR1JBREUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzA3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3RYQUNBQVFSaHFRZ0EzQXdBZ0FFSUFOd01BSUFCQk9HcENBRGNEQUNBQVFUQnFRZ0EzQXdBZ0FFRW9ha0lBTndNQUlBQkJJR3BDQURjREFDQUFRUkJxUWdBM0F3QWdBRUVJYWtJQU53TUFJQUJCM1FFMkFod0xCZ0FnQUJBeUM1b3RBUXQvSXdCQkVHc2lDaVFBUWFUUUFDZ0NBQ0lKUlFSQVFlVFRBQ2dDQUNJRlJRUkFRZkRUQUVKL053SUFRZWpUQUVLQWdJU0FnSURBQURjQ0FFSGswd0FnQ2tFSWFrRndjVUhZcXRXcUJYTWlCVFlDQUVINDB3QkJBRFlDQUVISTB3QkJBRFlDQUF0QnpOTUFRWURVQkRZQ0FFR2MwQUJCZ05RRU5nSUFRYkRRQUNBRk5nSUFRYXpRQUVGL05nSUFRZERUQUVHQXJBTTJBZ0FEUUNBQlFjalFBR29nQVVHODBBQnFJZ0kyQWdBZ0FpQUJRYlRRQUdvaUF6WUNBQ0FCUWNEUUFHb2dBellDQUNBQlFkRFFBR29nQVVIRTBBQnFJZ00yQWdBZ0F5QUNOZ0lBSUFGQjJOQUFhaUFCUWN6UUFHb2lBallDQUNBQ0lBTTJBZ0FnQVVIVTBBQnFJQUkyQWdBZ0FVRWdhaUlCUVlBQ1J3MEFDMEdNMUFSQndhc0ROZ0lBUWFqUUFFSDAwd0FvQWdBMkFnQkJtTkFBUWNDckF6WUNBRUdrMEFCQmlOUUVOZ0lBUWN6L0IwRTROZ0lBUVlqVUJDRUpDd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI3QUZOQkVCQmpOQUFLQUlBSWdaQkVDQUFRUk5xUVhCeElBQkJDMGtiSWdSQkEzWWlBSFlpQVVFRGNRUkFBa0FnQVVFQmNTQUFja0VCY3lJQ1FRTjBJZ0JCdE5BQWFpSUJJQUJCdk5BQWFpZ0NBQ0lBS0FJSUlnTkdCRUJCak5BQUlBWkJmaUFDZDNFMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBRUVJYWlFQklBQWdBa0VEZENJQ1FRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREJFTFFaVFFBQ2dDQUNJSUlBUlBEUUVnQVFSQUFrQkJBaUFBZENJQ1FRQWdBbXR5SUFFZ0FIUnhhQ0lBUVFOMElnSkJ0TkFBYWlJQklBSkJ2TkFBYWlnQ0FDSUNLQUlJSWdOR0JFQkJqTkFBSUFaQmZpQUFkM0VpQmpZQ0FBd0JDeUFCSUFNMkFnZ2dBeUFCTmdJTUN5QUNJQVJCQTNJMkFnUWdBRUVEZENJQUlBUnJJUVVnQUNBQ2FpQUZOZ0lBSUFJZ0JHb2lCQ0FGUVFGeU5nSUVJQWdFUUNBSVFYaHhRYlRRQUdvaEFFR2cwQUFvQWdBaEF3Si9RUUVnQ0VFRGRuUWlBU0FHY1VVRVFFR00wQUFnQVNBR2NqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0F6WUNEQ0FBSUFNMkFnZ2dBeUFBTmdJTUlBTWdBVFlDQ0FzZ0FrRUlhaUVCUWFEUUFDQUVOZ0lBUVpUUUFDQUZOZ0lBREJFTFFaRFFBQ2dDQUNJTFJRMEJJQXRvUVFKMFFielNBR29vQWdBaUFDZ0NCRUY0Y1NBRWF5RUZJQUFoQWdOQUFrQWdBaWdDRUNJQlJRUkFJQUpCRkdvb0FnQWlBVVVOQVFzZ0FTZ0NCRUY0Y1NBRWF5SURJQVZKSVFJZ0F5QUZJQUliSVFVZ0FTQUFJQUliSVFBZ0FTRUNEQUVMQ3lBQUtBSVlJUWtnQUNnQ0RDSURJQUJIQkVCQm5OQUFLQUlBR2lBRElBQW9BZ2dpQVRZQ0NDQUJJQU0yQWd3TUVBc2dBRUVVYWlJQ0tBSUFJZ0ZGQkVBZ0FDZ0NFQ0lCUlEwRElBQkJFR29oQWdzRFFDQUNJUWNnQVNJRFFSUnFJZ0lvQWdBaUFRMEFJQU5CRUdvaEFpQURLQUlRSWdFTkFBc2dCMEVBTmdJQURBOExRWDhoQkNBQVFiOS9TdzBBSUFCQkUyb2lBVUZ3Y1NFRVFaRFFBQ2dDQUNJSVJRMEFRUUFnQkdzaEJRSkFBa0FDUUFKL1FRQWdCRUdBQWtrTkFCcEJIeUFFUWYvLy93ZExEUUFhSUFSQkppQUJRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9MSWdaQkFuUkJ2TklBYWlnQ0FDSUNSUVJBUVFBaEFVRUFJUU1NQVF0QkFDRUJJQVJCR1NBR1FRRjJhMEVBSUFaQkgwY2JkQ0VBUVFBaEF3TkFBa0FnQWlnQ0JFRjRjU0FFYXlJSElBVlBEUUFnQWlFRElBY2lCUTBBUVFBaEJTQUNJUUVNQXdzZ0FTQUNRUlJxS0FJQUlnY2dCeUFDSUFCQkhYWkJCSEZxUVJCcUtBSUFJZ0pHR3lBQklBY2JJUUVnQUVFQmRDRUFJQUlOQUFzTElBRWdBM0pGQkVCQkFDRURRUUlnQm5RaUFFRUFJQUJyY2lBSWNTSUFSUTBESUFCb1FRSjBRYnpTQUdvb0FnQWhBUXNnQVVVTkFRc0RRQ0FCS0FJRVFYaHhJQVJySWdJZ0JVa2hBQ0FDSUFVZ0FCc2hCU0FCSUFNZ0FCc2hBeUFCS0FJUUlnQUVmeUFBQlNBQlFSUnFLQUlBQ3lJQkRRQUxDeUFEUlEwQUlBVkJsTkFBS0FJQUlBUnJUdzBBSUFNb0FoZ2hCeUFESUFNb0Fnd2lBRWNFUUVHYzBBQW9BZ0FhSUFBZ0F5Z0NDQ0lCTmdJSUlBRWdBRFlDREF3T0N5QURRUlJxSWdJb0FnQWlBVVVFUUNBREtBSVFJZ0ZGRFFNZ0EwRVFhaUVDQ3dOQUlBSWhCaUFCSWdCQkZHb2lBaWdDQUNJQkRRQWdBRUVRYWlFQ0lBQW9BaEFpQVEwQUN5QUdRUUEyQWdBTURRdEJsTkFBS0FJQUlnTWdCRThFUUVHZzBBQW9BZ0FoQVFKQUlBTWdCR3NpQWtFUVR3UkFJQUVnQkdvaUFDQUNRUUZ5TmdJRUlBRWdBMm9nQWpZQ0FDQUJJQVJCQTNJMkFnUU1BUXNnQVNBRFFRTnlOZ0lFSUFFZ0Eyb2lBQ0FBS0FJRVFRRnlOZ0lFUVFBaEFFRUFJUUlMUVpUUUFDQUNOZ0lBUWFEUUFDQUFOZ0lBSUFGQkNHb2hBUXdQQzBHWTBBQW9BZ0FpQXlBRVN3UkFJQVFnQ1dvaUFDQURJQVJySWdGQkFYSTJBZ1JCcE5BQUlBQTJBZ0JCbU5BQUlBRTJBZ0FnQ1NBRVFRTnlOZ0lFSUFsQkNHb2hBUXdQQzBFQUlRRWdCQUovUWVUVEFDZ0NBQVJBUWV6VEFDZ0NBQXdCQzBIdzB3QkNmemNDQUVIbzB3QkNnSUNFZ0lDQXdBQTNBZ0JCNU5NQUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmalRBRUVBTmdJQVFjalRBRUVBTmdJQVFZQ0FCQXNpQUNBRVFjY0FhaUlGYWlJR1FRQWdBR3NpQjNFaUFrOEVRRUg4MHdCQk1EWUNBQXdQQ3dKQVFjVFRBQ2dDQUNJQlJRMEFRYnpUQUNnQ0FDSUlJQUpxSVFBZ0FDQUJUU0FBSUFoTGNRMEFRUUFoQVVIODB3QkJNRFlDQUF3UEMwSEkwd0F0QUFCQkJIRU5CQUpBQWtBZ0NRUkFRY3pUQUNFQkEwQWdBU2dDQUNJQUlBbE5CRUFnQUNBQktBSUVhaUFKU3cwREN5QUJLQUlJSWdFTkFBc0xRUUFRTXlJQVFYOUdEUVVnQWlFR1FlalRBQ2dDQUNJQlFRRnJJZ01nQUhFRVFDQUNJQUJySUFBZ0EycEJBQ0FCYTNGcUlRWUxJQVFnQms4TkJTQUdRZjcvLy84SFN3MEZRY1RUQUNnQ0FDSURCRUJCdk5NQUtBSUFJZ2NnQm1vaEFTQUJJQWRORFFZZ0FTQURTdzBHQ3lBR0VETWlBU0FBUncwQkRBY0xJQVlnQTJzZ0IzRWlCa0grLy8vL0Iwc05CQ0FHRURNaEFDQUFJQUVvQWdBZ0FTZ0NCR3BHRFFNZ0FDRUJDd0pBSUFZZ0JFSElBR3BQRFFBZ0FVRi9SZzBBUWV6VEFDZ0NBQ0lBSUFVZ0JtdHFRUUFnQUd0eElnQkIvdi8vL3dkTEJFQWdBU0VBREFjTElBQVFNMEYvUndSQUlBQWdCbW9oQmlBQklRQU1Cd3RCQUNBR2F4QXpHZ3dFQ3lBQklnQkJmMGNOQlF3REMwRUFJUU1NREF0QkFDRUFEQW9MSUFCQmYwY05BZ3RCeU5NQVFjalRBQ2dDQUVFRWNqWUNBQXNnQWtIKy8vLy9CMHNOQVNBQ0VETWhBRUVBRURNaEFTQUFRWDlHRFFFZ0FVRi9SZzBCSUFBZ0FVOE5BU0FCSUFCcklnWWdCRUU0YWswTkFRdEJ2Tk1BUWJ6VEFDZ0NBQ0FHYWlJQk5nSUFRY0RUQUNnQ0FDQUJTUVJBUWNEVEFDQUJOZ0lBQ3dKQUFrQUNRRUdrMEFBb0FnQWlBZ1JBUWN6VEFDRUJBMEFnQUNBQktBSUFJZ01nQVNnQ0JDSUZha1lOQWlBQktBSUlJZ0VOQUFzTUFndEJuTkFBS0FJQUlnRkJBRWNnQUNBQlQzRkZCRUJCbk5BQUlBQTJBZ0FMUVFBaEFVSFEwd0FnQmpZQ0FFSE0wd0FnQURZQ0FFR3MwQUJCZnpZQ0FFR3cwQUJCNU5NQUtBSUFOZ0lBUWRqVEFFRUFOZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCZUNBQWEwRVBjU0lCSUFCcUlnSWdCa0U0YXlJRElBRnJJZ0ZCQVhJMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBVFlDQUVHazBBQWdBallDQUNBQUlBTnFRVGcyQWdRTUFnc2dBQ0FDVFEwQUlBSWdBMGtOQUNBQktBSU1RUWh4RFFCQmVDQUNhMEVQY1NJQUlBSnFJZ05CbU5BQUtBSUFJQVpxSWdjZ0FHc2lBRUVCY2pZQ0JDQUJJQVVnQm1vMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBRFlDQUVHazBBQWdBellDQUNBQ0lBZHFRVGcyQWdRTUFRc2dBRUdjMEFBb0FnQkpCRUJCbk5BQUlBQTJBZ0FMSUFBZ0Jtb2hBMEhNMHdBaEFRSkFBa0FDUUFOQUlBTWdBU2dDQUVjRVFDQUJLQUlJSWdFTkFRd0NDd3NnQVMwQURFRUljVVVOQVF0QnpOTUFJUUVEUUNBQktBSUFJZ01nQWswRVFDQURJQUVvQWdScUlnVWdBa3NOQXdzZ0FTZ0NDQ0VCREFBTEFBc2dBU0FBTmdJQUlBRWdBU2dDQkNBR2FqWUNCQ0FBUVhnZ0FHdEJEM0ZxSWdrZ0JFRURjallDQkNBRFFYZ2dBMnRCRDNGcUlnWWdCQ0FKYWlJRWF5RUJJQUlnQmtZRVFFR2swQUFnQkRZQ0FFR1kwQUJCbU5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVEQWdMUWFEUUFDZ0NBQ0FHUmdSQVFhRFFBQ0FFTmdJQVFaVFFBRUdVMEFBb0FnQWdBV29pQURZQ0FDQUVJQUJCQVhJMkFnUWdBQ0FFYWlBQU5nSUFEQWdMSUFZb0FnUWlCVUVEY1VFQlJ3MEdJQVZCZUhFaENDQUZRZjhCVFFSQUlBVkJBM1loQXlBR0tBSUlJZ0FnQmlnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJ3c2dBaUFBTmdJSUlBQWdBallDREF3R0N5QUdLQUlZSVFjZ0JpQUdLQUlNSWdCSEJFQWdBQ0FHS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQVVMSUFaQkZHb2lBaWdDQUNJRlJRUkFJQVlvQWhBaUJVVU5CQ0FHUVJCcUlRSUxBMEFnQWlFRElBVWlBRUVVYWlJQ0tBSUFJZ1VOQUNBQVFSQnFJUUlnQUNnQ0VDSUZEUUFMSUFOQkFEWUNBQXdFQzBGNElBQnJRUTl4SWdFZ0FHb2lCeUFHUVRocklnTWdBV3NpQVVFQmNqWUNCQ0FBSUFOcVFUZzJBZ1FnQWlBRlFUY2dCV3RCRDNGcVFUOXJJZ01nQXlBQ1FSQnFTUnNpQTBFak5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQWMyQWdBZ0EwRVFha0hVMHdBcEFnQTNBZ0FnQTBITTB3QXBBZ0EzQWdoQjFOTUFJQU5CQ0dvMkFnQkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkIyTk1BUVFBMkFnQWdBMEVrYWlFQkEwQWdBVUVITmdJQUlBVWdBVUVFYWlJQlN3MEFDeUFDSUFOR0RRQWdBeUFES0FJRVFYNXhOZ0lFSUFNZ0F5QUNheUlGTmdJQUlBSWdCVUVCY2pZQ0JDQUZRZjhCVFFSQUlBVkJlSEZCdE5BQWFpRUFBbjlCak5BQUtBSUFJZ0ZCQVNBRlFRTjJkQ0lEY1VVRVFFR00wQUFnQVNBRGNqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUVnQlVILy8vOEhUUVJBSUFWQkppQUZRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQVFzZ0FpQUJOZ0ljSUFKQ0FEY0NFQ0FCUVFKMFFielNBR29oQUVHUTBBQW9BZ0FpQTBFQklBRjBJZ1p4UlFSQUlBQWdBallDQUVHUTBBQWdBeUFHY2pZQ0FDQUNJQUEyQWhnZ0FpQUNOZ0lJSUFJZ0FqWUNEQXdCQ3lBRlFSa2dBVUVCZG10QkFDQUJRUjlIRzNRaEFTQUFLQUlBSVFNQ1FBTkFJQU1pQUNnQ0JFRjRjU0FGUmcwQklBRkJIWFloQXlBQlFRRjBJUUVnQUNBRFFRUnhha0VRYWlJR0tBSUFJZ01OQUFzZ0JpQUNOZ0lBSUFJZ0FEWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUFvQWdnaUFTQUNOZ0lNSUFBZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFBTmdJTUlBSWdBVFlDQ0F0Qm1OQUFLQUlBSWdFZ0JFME5BRUdrMEFBb0FnQWlBQ0FFYWlJQ0lBRWdCR3NpQVVFQmNqWUNCRUdZMEFBZ0FUWUNBRUdrMEFBZ0FqWUNBQ0FBSUFSQkEzSTJBZ1FnQUVFSWFpRUJEQWdMUVFBaEFVSDgwd0JCTURZQ0FBd0hDMEVBSVFBTElBZEZEUUFDUUNBR0tBSWNJZ0pCQW5SQnZOSUFhaUlES0FJQUlBWkdCRUFnQXlBQU5nSUFJQUFOQVVHUTBBQkJrTkFBS0FJQVFYNGdBbmR4TmdJQURBSUxJQWRCRUVFVUlBY29BaEFnQmtZYmFpQUFOZ0lBSUFCRkRRRUxJQUFnQnpZQ0dDQUdLQUlRSWdJRVFDQUFJQUkyQWhBZ0FpQUFOZ0lZQ3lBR1FSUnFLQUlBSWdKRkRRQWdBRUVVYWlBQ05nSUFJQUlnQURZQ0dBc2dBU0FJYWlFQklBWWdDR29pQmlnQ0JDRUZDeUFHSUFWQmZuRTJBZ1FnQVNBRWFpQUJOZ0lBSUFRZ0FVRUJjallDQkNBQlFmOEJUUVJBSUFGQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FCUVFOMmRDSUJjVVVFUUVHTTBBQWdBU0FDY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQkRZQ0RDQUFJQVEyQWdnZ0JDQUFOZ0lNSUFRZ0FUWUNDQXdCQzBFZklRVWdBVUgvLy84SFRRUkFJQUZCSmlBQlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hCUXNnQkNBRk5nSWNJQVJDQURjQ0VDQUZRUUowUWJ6U0FHb2hBRUdRMEFBb0FnQWlBa0VCSUFWMElnTnhSUVJBSUFBZ0JEWUNBRUdRMEFBZ0FpQURjallDQUNBRUlBQTJBaGdnQkNBRU5nSUlJQVFnQkRZQ0RBd0JDeUFCUVJrZ0JVRUJkbXRCQUNBRlFSOUhHM1FoQlNBQUtBSUFJUUFDUUFOQUlBQWlBaWdDQkVGNGNTQUJSZzBCSUFWQkhYWWhBQ0FGUVFGMElRVWdBaUFBUVFSeGFrRVFhaUlES0FJQUlnQU5BQXNnQXlBRU5nSUFJQVFnQWpZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFFTElBSW9BZ2dpQUNBRU5nSU1JQUlnQkRZQ0NDQUVRUUEyQWhnZ0JDQUNOZ0lNSUFRZ0FEWUNDQXNnQ1VFSWFpRUJEQUlMQWtBZ0IwVU5BQUpBSUFNb0Fod2lBVUVDZEVHODBnQnFJZ0lvQWdBZ0EwWUVRQ0FDSUFBMkFnQWdBQTBCUVpEUUFDQUlRWDRnQVhkeElnZzJBZ0FNQWdzZ0IwRVFRUlFnQnlnQ0VDQURSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUhOZ0lZSUFNb0FoQWlBUVJBSUFBZ0FUWUNFQ0FCSUFBMkFoZ0xJQU5CRkdvb0FnQWlBVVVOQUNBQVFSUnFJQUUyQWdBZ0FTQUFOZ0lZQ3dKQUlBVkJEMDBFUUNBRElBUWdCV29pQUVFRGNqWUNCQ0FBSUFOcUlnQWdBQ2dDQkVFQmNqWUNCQXdCQ3lBRElBUnFJZ0lnQlVFQmNqWUNCQ0FESUFSQkEzSTJBZ1FnQWlBRmFpQUZOZ0lBSUFWQi93Rk5CRUFnQlVGNGNVRzAwQUJxSVFBQ2YwR00wQUFvQWdBaUFVRUJJQVZCQTNaMElnVnhSUVJBUVl6UUFDQUJJQVZ5TmdJQUlBQU1BUXNnQUNnQ0NBc2lBU0FDTmdJTUlBQWdBallDQ0NBQ0lBQTJBZ3dnQWlBQk5nSUlEQUVMUVI4aEFTQUZRZi8vL3dkTkJFQWdCVUVtSUFWQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2FpRUJDeUFDSUFFMkFod2dBa0lBTndJUUlBRkJBblJCdk5JQWFpRUFRUUVnQVhRaUJDQUljVVVFUUNBQUlBSTJBZ0JCa05BQUlBUWdDSEkyQWdBZ0FpQUFOZ0lZSUFJZ0FqWUNDQ0FDSUFJMkFnd01BUXNnQlVFWklBRkJBWFpyUVFBZ0FVRWZSeHQwSVFFZ0FDZ0NBQ0VFQWtBRFFDQUVJZ0FvQWdSQmVIRWdCVVlOQVNBQlFSMTJJUVFnQVVFQmRDRUJJQUFnQkVFRWNXcEJFR29pQmlnQ0FDSUVEUUFMSUFZZ0FqWUNBQ0FDSUFBMkFoZ2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUFLQUlJSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBa0VBTmdJWUlBSWdBRFlDRENBQ0lBRTJBZ2dMSUFOQkNHb2hBUXdCQ3dKQUlBbEZEUUFDUUNBQUtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBQkdCRUFnQWlBRE5nSUFJQU1OQVVHUTBBQWdDMEYrSUFGM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBQkdHMm9nQXpZQ0FDQURSUTBCQ3lBRElBazJBaGdnQUNnQ0VDSUJCRUFnQXlBQk5nSVFJQUVnQXpZQ0dBc2dBRUVVYWlnQ0FDSUJSUTBBSUFOQkZHb2dBVFlDQUNBQklBTTJBaGdMQWtBZ0JVRVBUUVJBSUFBZ0JDQUZhaUlCUVFOeU5nSUVJQUFnQVdvaUFTQUJLQUlFUVFGeU5nSUVEQUVMSUFBZ0JHb2lCeUFGUVFGeU5nSUVJQUFnQkVFRGNqWUNCQ0FGSUFkcUlBVTJBZ0FnQ0FSQUlBaEJlSEZCdE5BQWFpRUJRYURRQUNnQ0FDRURBbjlCQVNBSVFRTjJkQ0lDSUFaeFJRUkFRWXpRQUNBQ0lBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaUFpQUROZ0lNSUFFZ0F6WUNDQ0FESUFFMkFnd2dBeUFDTmdJSUMwR2cwQUFnQnpZQ0FFR1UwQUFnQlRZQ0FBc2dBRUVJYWlFQkN5QUtRUkJxSkFBZ0FRdERBQ0FBUlFSQVB3QkJFSFFQQ3dKQUlBQkIvLzhEY1EwQUlBQkJBRWdOQUNBQVFSQjJRQUFpQUVGL1JnUkFRZnpUQUVFd05nSUFRWDhQQ3lBQVFSQjBEd3NBQ3d2Y1B5SUFRWUFJQ3drQkFBQUFBZ0FBQUFNQVFaUUlDd1VFQUFBQUJRQkJwQWdMQ1FZQUFBQUhBQUFBQ0FCQjNBZ0xpaTFKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhGMVpYSjVBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZbTlrZVFCRGIyNTBaVzUwTFV4bGJtZDBhQ0J2ZG1WeVpteHZkd0JEYUhWdWF5QnphWHBsSUc5MlpYSm1iRzkzQUZKbGMzQnZibk5sSUc5MlpYSm1iRzkzQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCSVZGUlFMM2d1ZUNCeVpYRjFaWE4wQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCU1ZGTlFMM2d1ZUNCeVpYRjFaWE4wQUVWNGNHVmpkR1ZrSUZOUFZWSkRSU0J0WlhSb2IyUWdabTl5SUVsRFJTOTRMbmdnY21WeGRXVnpkQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUdaeVlXZHRaVzUwSUhOMFlYSjBBRVY0Y0dWamRHVmtJR1J2ZEFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNOMFlYUjFjd0JKYm5aaGJHbGtJSEpsYzNCdmJuTmxJSE4wWVhSMWN3QkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpBRlZ6WlhJZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzSmxjMlYwWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmYUdWaFpHVnlZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWemMyRm5aVjlpWldkcGJtQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzTjBZWFIxYzE5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTFjbXhmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJobFlXUmxjbDkyWVd4MVpWOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsYzNOaFoyVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlvWldGa1pYSmZabWxsYkdSZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFWVzVsZUhCbFkzUmxaQ0JqYUdGeUlHbHVJSFZ5YkNCelpYSjJaWElBU1c1MllXeHBaQ0JvWldGa1pYSWdkbUZzZFdVZ1kyaGhjZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQm1hV1ZzWkNCamFHRnlBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMXBibTl5SUhabGNuTnBiMjRBU1c1MllXeHBaQ0J0WVdwdmNpQjJaWEp6YVc5dUFFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJSFpsY25OcGIyNEFSWGh3WldOMFpXUWdRMUpNUmlCaFpuUmxjaUIyWlhKemFXOXVBRWx1ZG1Gc2FXUWdTRlJVVUNCMlpYSnphVzl1QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFJ2YTJWdUFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmRYSnNBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnljeUJwYmlCMWNtd0FWVzVsZUhCbFkzUmxaQ0J6ZEdGeWRDQmphR0Z5SUdsdUlIVnliQUJFYjNWaWJHVWdRQ0JwYmlCMWNtd0FSVzF3ZEhrZ1EyOXVkR1Z1ZEMxTVpXNW5kR2dBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1EyOXVkR1Z1ZEMxTVpXNW5kR2dBUkhWd2JHbGpZWFJsSUVOdmJuUmxiblF0VEdWdVozUm9BRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnY0dGMGFBQkRiMjUwWlc1MExVeGxibWQwYUNCallXNG5kQ0JpWlNCd2NtVnpaVzUwSUhkcGRHZ2dWSEpoYm5ObVpYSXRSVzVqYjJScGJtY0FTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2djMmw2WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJobFlXUmxjbDkyWVd4MVpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5MllXeDFaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUhaaGJIVmxBRTFwYzNOcGJtY2daWGh3WldOMFpXUWdURVlnWVdaMFpYSWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUNCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpTQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsWkNCMllXeDFaUUJRWVhWelpXUWdZbmtnYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFCSmJuWmhiR2xrSUVWUFJpQnpkR0YwWlFCdmJsOXlaWE5sZENCd1lYVnpaUUJ2Ymw5amFIVnVhMTlvWldGa1pYSWdjR0YxYzJVQWIyNWZiV1Z6YzJGblpWOWlaV2RwYmlCd1lYVnpaUUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVWdjR0YxYzJVQWIyNWZjM1JoZEhWelgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmRYSnNYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMk5vZFc1clgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyaGxZV1JsY2w5MllXeDFaVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMjFsZEdodlpGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZlptbGxiR1JmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldVZ2NHRjFjMlVBVlc1bGVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQnpkR0Z5ZENCc2FXNWxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCdVlXMWxBRkJoZFhObElHOXVJRU5QVGs1RlExUXZWWEJuY21Ga1pRQlFZWFZ6WlNCdmJpQlFVa2t2VlhCbmNtRmtaUUJGZUhCbFkzUmxaQ0JJVkZSUUx6SWdRMjl1Ym1WamRHbHZiaUJRY21WbVlXTmxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZiV1YwYUc5a0FFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJRzFsZEdodlpBQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyaGxZV1JsY2w5bWFXVnNaQUJRWVhWelpXUUFTVzUyWVd4cFpDQjNiM0prSUdWdVkyOTFiblJsY21Wa0FFbHVkbUZzYVdRZ2JXVjBhRzlrSUdWdVkyOTFiblJsY21Wa0FGVnVaWGh3WldOMFpXUWdZMmhoY2lCcGJpQjFjbXdnYzJOb1pXMWhBRkpsY1hWbGMzUWdhR0Z6SUdsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUFCVFYwbFVRMGhmVUZKUFdGa0FWVk5GWDFCU1QxaFpBRTFMUVVOVVNWWkpWRmtBVlU1UVVrOURSVk5UUVVKTVJWOUZUbFJKVkZrQVEwOVFXUUJOVDFaRlJGOVFSVkpOUVU1RlRsUk1XUUJVVDA5ZlJVRlNURmtBVGs5VVNVWlpBRVpCU1V4RlJGOUVSVkJGVGtSRlRrTlpBRUpCUkY5SFFWUkZWMEZaQUZCTVFWa0FVRlZVQUVOSVJVTkxUMVZVQUVkQlZFVlhRVmxmVkVsTlJVOVZWQUJTUlZGVlJWTlVYMVJKVFVWUFZWUUFUa1ZVVjA5U1MxOURUMDVPUlVOVVgxUkpUVVZQVlZRQVEwOU9Ua1ZEVkVsUFRsOVVTVTFGVDFWVUFFeFBSMGxPWDFSSlRVVlBWVlFBVGtWVVYwOVNTMTlTUlVGRVgxUkpUVVZQVlZRQVVFOVRWQUJOU1ZORVNWSkZRMVJGUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDB4UFFVUmZRa0ZNUVU1RFJVUmZVa1ZSVlVWVFZBQkNRVVJmVWtWUlZVVlRWQUJJVkZSUVgxSkZVVlZGVTFSZlUwVk9WRjlVVDE5SVZGUlFVMTlRVDFKVUFGSkZVRTlTVkFCSlRWOUJYMVJGUVZCUFZBQlNSVk5GVkY5RFQwNVVSVTVVQUU1UFgwTlBUbFJGVGxRQVVFRlNWRWxCVEY5RFQwNVVSVTVVQUVoUVJWOUpUbFpCVEVsRVgwTlBUbE5VUVU1VUFFaFFSVjlEUWw5U1JWTkZWQUJIUlZRQVNGQkZYMU5VVWtsRFZBQkRUMDVHVEVsRFZBQlVSVTFRVDFKQlVsbGZVa1ZFU1ZKRlExUUFVRVZTVFVGT1JVNVVYMUpGUkVsU1JVTlVBRU5QVGs1RlExUUFUVlZNVkVsZlUxUkJWRlZUQUVoUVJWOUpUbFpCVEVsRVgxTlVRVlJWVXdCVVQwOWZUVUZPV1Y5U1JWRlZSVk5VVXdCRlFWSk1XVjlJU1U1VVV3QlZUa0ZXUVVsTVFVSk1SVjlHVDFKZlRFVkhRVXhmVWtWQlUwOU9Vd0JQVUZSSlQwNVRBRk5YU1ZSRFNFbE9SMTlRVWs5VVQwTlBURk1BVmtGU1NVRk9WRjlCVEZOUFgwNUZSMDlVU1VGVVJWTUFUVlZNVkVsUVRFVmZRMGhQU1VORlV3QkpUbFJGVWs1QlRGOVRSVkpXUlZKZlJWSlNUMUlBVjBWQ1gxTkZVbFpGVWw5VlRrdE9UMWRPWDBWU1VrOVNBRkpCU1V4SFZVNWZSVkpTVDFJQVNVUkZUbFJKVkZsZlVGSlBWa2xFUlZKZlFWVlVTRVZPVkVsRFFWUkpUMDVmUlZKU1QxSUFVMU5NWDBORlVsUkpSa2xEUVZSRlgwVlNVazlTQUVsT1ZrRk1TVVJmV0Y5R1QxSlhRVkpFUlVSZlJrOVNBRk5GVkY5UVFWSkJUVVZVUlZJQVIwVlVYMUJCVWtGTlJWUkZVZ0JJVUVWZlZWTkZVZ0JUUlVWZlQxUklSVklBU0ZCRlgwTkNYME5JVlU1TFgwaEZRVVJGVWdCTlMwTkJURVZPUkVGU0FGTkZWRlZRQUZkRlFsOVRSVkpXUlZKZlNWTmZSRTlYVGdCVVJVRlNSRTlYVGdCSVVFVmZRMHhQVTBWRVgwTlBUazVGUTFSSlQwNEFTRVZWVWtsVFZFbERYMFZZVUVsU1FWUkpUMDRBUkVsVFEwOU9Ua1ZEVkVWRVgwOVFSVkpCVkVsUFRnQk9UMDVmUVZWVVNFOVNTVlJCVkVsV1JWOUpUa1pQVWsxQlZFbFBUZ0JJVUVWZlNVNVdRVXhKUkY5V1JWSlRTVTlPQUVoUVJWOURRbDlOUlZOVFFVZEZYMEpGUjBsT0FGTkpWRVZmU1ZOZlJsSlBXa1ZPQUVoUVJWOUpUbFpCVEVsRVgwaEZRVVJGVWw5VVQwdEZUZ0JKVGxaQlRFbEVYMVJQUzBWT0FFWlBVa0pKUkVSRlRnQkZUa2hCVGtORlgxbFBWVkpmUTBGTVRRQklVRVZmU1U1V1FVeEpSRjlWVWt3QVFreFBRMHRGUkY5Q1dWOVFRVkpGVGxSQlRGOURUMDVVVWs5TUFFMUxRMDlNQUVGRFRBQklVRVZmU1U1VVJWSk9RVXdBVWtWUlZVVlRWRjlJUlVGRVJWSmZSa2xGVEVSVFgxUlBUMTlNUVZKSFJWOVZUazlHUmtsRFNVRk1BRWhRUlY5UFN3QlZUa3hKVGtzQVZVNU1UME5MQUZCU1NRQlNSVlJTV1Y5WFNWUklBRWhRUlY5SlRsWkJURWxFWDBOUFRsUkZUbFJmVEVWT1IxUklBRWhRUlY5VlRrVllVRVZEVkVWRVgwTlBUbFJGVGxSZlRFVk9SMVJJQUVaTVZWTklBRkJTVDFCUVFWUkRTQUJOTFZORlFWSkRTQUJWVWtsZlZFOVBYMHhQVGtjQVVGSlBRMFZUVTBsT1J3Qk5TVk5EUlV4TVFVNUZUMVZUWDFCRlVsTkpVMVJGVGxSZlYwRlNUa2xPUndCTlNWTkRSVXhNUVU1RlQxVlRYMWRCVWs1SlRrY0FTRkJGWDBsT1ZrRk1TVVJmVkZKQlRsTkdSVkpmUlU1RFQwUkpUa2NBUlhod1pXTjBaV1FnUTFKTVJnQklVRVZmU1U1V1FVeEpSRjlEU0ZWT1MxOVRTVnBGQUUxUFZrVUFRMDlPVkVsT1ZVVUFTRkJGWDBOQ1gxTlVRVlJWVTE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNVMTlEVDAxUVRFVlVSUUJJVUVWZlEwSmZWa1ZTVTBsUFRsOURUMDFRVEVWVVJRQklVRVZmUTBKZlZWSk1YME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNYMVpCVEZWRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5RFNGVk9TMTlGV0ZSRlRsTkpUMDVmVmtGTVZVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBWWVZFVk9VMGxQVGw5T1FVMUZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOU5SVk5UUVVkRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5TlJWUklUMFJmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsOUdTVVZNUkY5RFQwMVFURVZVUlFCRVJVeEZWRVVBU0ZCRlgwbE9Wa0ZNU1VSZlJVOUdYMU5VUVZSRkFFbE9Wa0ZNU1VSZlUxTk1YME5GVWxSSlJrbERRVlJGQUZCQlZWTkZBRTVQWDFKRlUxQlBUbE5GQUZWT1UxVlFVRTlTVkVWRVgwMUZSRWxCWDFSWlVFVUFSMDlPUlFCT1QxUmZRVU5EUlZCVVFVSk1SUUJUUlZKV1NVTkZYMVZPUVZaQlNVeEJRa3hGQUZKQlRrZEZYMDVQVkY5VFFWUkpVMFpKUVVKTVJRQlBVa2xIU1U1ZlNWTmZWVTVTUlVGRFNFRkNURVVBVWtWVFVFOU9VMFZmU1ZOZlUxUkJURVVBVUZWU1IwVUFUVVZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmUmtsRlRFUlRYMVJQVDE5TVFWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOVVUMDlmVEVGU1IwVUFVRUZaVEU5QlJGOVVUMDlmVEVGU1IwVUFTVTVUVlVaR1NVTkpSVTVVWDFOVVQxSkJSMFVBU0ZCRlgxQkJWVk5GUkY5VlVFZFNRVVJGQUVoUVJWOVFRVlZUUlVSZlNESmZWVkJIVWtGRVJRQlRUMVZTUTBVQVFVNU9UMVZPUTBVQVZGSkJRMFVBU0ZCRlgxVk9SVmhRUlVOVVJVUmZVMUJCUTBVQVJFVlRRMUpKUWtVQVZVNVRWVUpUUTFKSlFrVUFVa1ZEVDFKRUFFaFFSVjlKVGxaQlRFbEVYMDFGVkVoUFJBQk9UMVJmUms5VlRrUUFVRkpQVUVaSlRrUUFWVTVDU1U1RUFGSkZRa2xPUkFCVlRrRlZWRWhQVWtsYVJVUUFUVVZVU0U5RVgwNVBWRjlCVEV4UFYwVkVBRWhVVkZCZlZrVlNVMGxQVGw5T1QxUmZVMVZRVUU5U1ZFVkVBRUZNVWtWQlJGbGZVa1ZRVDFKVVJVUUFRVU5EUlZCVVJVUUFUazlVWDBsTlVFeEZUVVZPVkVWRUFFeFBUMUJmUkVWVVJVTlVSVVFBU0ZCRlgwTlNYMFZZVUVWRFZFVkVBRWhRUlY5TVJsOUZXRkJGUTFSRlJBQkRVa1ZCVkVWRUFFbE5YMVZUUlVRQVNGQkZYMUJCVlZORlJBQlVTVTFGVDFWVVgwOURRMVZTUlVRQVVFRlpUVVZPVkY5U1JWRlZTVkpGUkFCUVVrVkRUMDVFU1ZSSlQwNWZVa1ZSVlVsU1JVUUFVRkpQV0ZsZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVGtWVVYwOVNTMTlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk1SVTVIVkVoZlVrVlJWVWxTUlVRQVUxTk1YME5GVWxSSlJrbERRVlJGWDFKRlVWVkpVa1ZFQUZWUVIxSkJSRVZmVWtWUlZVbFNSVVFBVUVGSFJWOUZXRkJKVWtWRUFGQlNSVU5QVGtSSlZFbFBUbDlHUVVsTVJVUUFSVmhRUlVOVVFWUkpUMDVmUmtGSlRFVkVBRkpGVmtGTVNVUkJWRWxQVGw5R1FVbE1SVVFBVTFOTVgwaEJUa1JUU0VGTFJWOUdRVWxNUlVRQVRFOURTMFZFQUZSU1FVNVRSazlTVFVGVVNVOU9YMEZRVUV4SlJVUUFUazlVWDAxUFJFbEdTVVZFQUU1UFZGOUZXRlJGVGtSRlJBQkNRVTVFVjBsRVZFaGZURWxOU1ZSZlJWaERSVVZFUlVRQVUwbFVSVjlKVTE5UFZrVlNURTlCUkVWRUFFaEZRVVFBUlhod1pXTjBaV1FnU0ZSVVVDOEFBRjRUQUFBbUV3QUFNQkFBQVBBWEFBQ2RFd0FBRlJJQUFEa1hBQUR3RWdBQUNoQUFBSFVTQUFDdEVnQUFnaE1BQUU4VUFBQi9FQUFBb0JVQUFDTVVBQUNKRWdBQWl4UUFBRTBWQUFEVUVRQUF6eFFBQUJBWUFBREpGZ0FBM0JZQUFNRVJBQURnRndBQXV4UUFBSFFVQUFCOEZRQUE1UlFBQUFnWEFBQWZFQUFBWlJVQUFLTVVBQUFvRlFBQUFoVUFBSmtWQUFBc0VBQUFpeGtBQUU4UEFBRFVEZ0FBYWhBQUFNNFFBQUFDRndBQWlRNEFBRzRUQUFBY0V3QUFaaFFBQUZZWEFBREJFd0FBelJNQUFHd1RBQUJvRndBQVpoY0FBRjhYQUFBaUV3QUF6ZzhBQUdrT0FBRFlEZ0FBWXhZQUFNc1RBQUNxRGdBQUtCY0FBQ1lYQUFERkV3QUFYUllBQU9nUkFBQm5Fd0FBWlJNQUFQSVdBQUJ6RXdBQUhSY0FBUGtXQUFEekVRQUF6dzRBQU00VkFBQU1FZ0FBc3hFQUFLVVJBQUJoRUFBQU1oY0FBTHNUQUVINU5Rc0JBUUJCa0RZTDRBRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQkIvVGNMQVFFQVFaRTRDMTRDQXdJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQVFBQUFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSDlPUXNCQVFCQmtUb0xYZ0lBQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFBd0FFQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQVFmQTdDdzFzYjNObFpXVndMV0ZzYVhabEFFR0pQQXNCQVFCQm9Ed0w0QUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCaVQ0TEFRRUFRYUErQytjQkFRRUJBUUVCQVFFQkFRRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGamFIVnVhMlZrQUVHd3dBQUxYd0VCQUFFQkFRRUJBQUFCQVFBQkFRQUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFBQkFFR1F3Z0FMSVdWamRHbHZibVZ1ZEMxc1pXNW5kR2h2Ym5KdmVIa3RZMjl1Ym1WamRHbHZiZ0JCd01JQUN5MXlZVzV6Wm1WeUxXVnVZMjlrYVc1bmNHZHlZV1JsRFFvTkNnMEtVMDBOQ2cwS1ZGUlFMME5GTDFSVFVDOEFRZm5DQUFzRkFRSUFBUU1BUVpEREFBdmdBUVFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg1eEFBTEJRRUNBQUVEQUVHUXhRQUw0QUVFQVFFRkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NZQUN3UUJBQUFCQUVHUnh3QUwzd0VCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg2eUFBTEJBRUFBQUlBUVpESkFBdGZBd1FBQUFRRUJBUUVCQVFFQkFRRUJRUUVCQVFFQkFRRUJBUUVCQUFFQUFZSEJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUFCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFRQVFmcktBQXNFQVFBQUFRQkJrTXNBQ3dFQkFFR3F5d0FMUVFJQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSDZ6QUFMQkFFQUFBRUFRWkROQUFzQkFRQkJtczBBQ3dZQ0FBQUFBQUlBUWJITkFBczZBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdCQjhNNEFDNVlCVGs5VlRrTkZSVU5MVDFWVVRrVkRWRVZVUlVOU1NVSkZURlZUU0VWVVJVRkVVMFZCVWtOSVVrZEZRMVJKVmtsVVdVeEZUa1JCVWxaRlQxUkpSbGxRVkVsUFRsTkRTRk5GUVZsVFZFRlVRMGhIUlU5U1JFbFNSVU5VVDFKVVVrTklVRUZTUVUxRlZFVlNWVkpEUlVKVFExSkpRa1ZCVWtSUFYwNUJRMFZKVGtST1MwTkxWVUpUUTFKSlFrVklWRlJRTDBGRVZGQXYnLCAnYmFzZTY0JylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzc3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3R6QUNBQVFSQnEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNEQUNBQS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVRCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVNCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUWQwQk5nSWNDd1lBSUFBUU1ndWFMUUVMZnlNQVFSQnJJZ29rQUVHazBBQW9BZ0FpQ1VVRVFFSGswd0FvQWdBaUJVVUVRRUh3MHdCQ2Z6Y0NBRUhvMHdCQ2dJQ0VnSUNBd0FBM0FnQkI1Tk1BSUFwQkNHcEJjSEZCMktyVnFnVnpJZ1UyQWdCQitOTUFRUUEyQWdCQnlOTUFRUUEyQWdBTFFjelRBRUdBMUFRMkFnQkJuTkFBUVlEVUJEWUNBRUd3MEFBZ0JUWUNBRUdzMEFCQmZ6WUNBRUhRMHdCQmdLd0ROZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCak5RRVFjR3JBellDQUVHbzBBQkI5Tk1BS0FJQU5nSUFRWmpRQUVIQXF3TTJBZ0JCcE5BQVFZalVCRFlDQUVITS93ZEJPRFlDQUVHSTFBUWhDUXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUFRZXdCVFFSQVFZelFBQ2dDQUNJR1FSQWdBRUVUYWtGd2NTQUFRUXRKR3lJRVFRTjJJZ0IySWdGQkEzRUVRQUpBSUFGQkFYRWdBSEpCQVhNaUFrRURkQ0lBUWJUUUFHb2lBU0FBUWJ6UUFHb29BZ0FpQUNnQ0NDSURSZ1JBUVl6UUFDQUdRWDRnQW5keE5nSUFEQUVMSUFFZ0F6WUNDQ0FESUFFMkFnd0xJQUJCQ0dvaEFTQUFJQUpCQTNRaUFrRURjallDQkNBQUlBSnFJZ0FnQUNnQ0JFRUJjallDQkF3UkMwR1UwQUFvQWdBaUNDQUVUdzBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQUVFRGRDSUNRYlRRQUdvaUFTQUNRYnpRQUdvb0FnQWlBaWdDQ0NJRFJnUkFRWXpRQUNBR1FYNGdBSGR4SWdZMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBaUFFUVFOeU5nSUVJQUJCQTNRaUFDQUVheUVGSUFBZ0Ftb2dCVFlDQUNBQ0lBUnFJZ1FnQlVFQmNqWUNCQ0FJQkVBZ0NFRjRjVUcwMEFCcUlRQkJvTkFBS0FJQUlRTUNmMEVCSUFoQkEzWjBJZ0VnQm5GRkJFQkJqTkFBSUFFZ0JuSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBTTJBZ3dnQUNBRE5nSUlJQU1nQURZQ0RDQURJQUUyQWdnTElBSkJDR29oQVVHZzBBQWdCRFlDQUVHVTBBQWdCVFlDQUF3UkMwR1EwQUFvQWdBaUMwVU5BU0FMYUVFQ2RFRzgwZ0JxS0FJQUlnQW9BZ1JCZUhFZ0JHc2hCU0FBSVFJRFFBSkFJQUlvQWhBaUFVVUVRQ0FDUVJScUtBSUFJZ0ZGRFFFTElBRW9BZ1JCZUhFZ0JHc2lBeUFGU1NFQ0lBTWdCU0FDR3lFRklBRWdBQ0FDR3lFQUlBRWhBZ3dCQ3dzZ0FDZ0NHQ0VKSUFBb0Fnd2lBeUFBUndSQVFaelFBQ2dDQUJvZ0F5QUFLQUlJSWdFMkFnZ2dBU0FETmdJTURCQUxJQUJCRkdvaUFpZ0NBQ0lCUlFSQUlBQW9BaEFpQVVVTkF5QUFRUkJxSVFJTEEwQWdBaUVISUFFaUEwRVVhaUlDS0FJQUlnRU5BQ0FEUVJCcUlRSWdBeWdDRUNJQkRRQUxJQWRCQURZQ0FBd1BDMEYvSVFRZ0FFRy9mMHNOQUNBQVFSTnFJZ0ZCY0hFaEJFR1EwQUFvQWdBaUNFVU5BRUVBSUFScklRVUNRQUpBQWtBQ2YwRUFJQVJCZ0FKSkRRQWFRUjhnQkVILy8vOEhTdzBBR2lBRVFTWWdBVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxQ3lJR1FRSjBRYnpTQUdvb0FnQWlBa1VFUUVFQUlRRkJBQ0VEREFFTFFRQWhBU0FFUVJrZ0JrRUJkbXRCQUNBR1FSOUhHM1FoQUVFQUlRTURRQUpBSUFJb0FnUkJlSEVnQkdzaUJ5QUZUdzBBSUFJaEF5QUhJZ1VOQUVFQUlRVWdBaUVCREFNTElBRWdBa0VVYWlnQ0FDSUhJQWNnQWlBQVFSMTJRUVJ4YWtFUWFpZ0NBQ0lDUmhzZ0FTQUhHeUVCSUFCQkFYUWhBQ0FDRFFBTEN5QUJJQU55UlFSQVFRQWhBMEVDSUFaMElnQkJBQ0FBYTNJZ0NIRWlBRVVOQXlBQWFFRUNkRUc4MGdCcUtBSUFJUUVMSUFGRkRRRUxBMEFnQVNnQ0JFRjRjU0FFYXlJQ0lBVkpJUUFnQWlBRklBQWJJUVVnQVNBRElBQWJJUU1nQVNnQ0VDSUFCSDhnQUFVZ0FVRVVhaWdDQUFzaUFRMEFDd3NnQTBVTkFDQUZRWlRRQUNnQ0FDQUVhMDhOQUNBREtBSVlJUWNnQXlBREtBSU1JZ0JIQkVCQm5OQUFLQUlBR2lBQUlBTW9BZ2dpQVRZQ0NDQUJJQUEyQWd3TURnc2dBMEVVYWlJQ0tBSUFJZ0ZGQkVBZ0F5Z0NFQ0lCUlEwRElBTkJFR29oQWdzRFFDQUNJUVlnQVNJQVFSUnFJZ0lvQWdBaUFRMEFJQUJCRUdvaEFpQUFLQUlRSWdFTkFBc2dCa0VBTmdJQURBMExRWlRRQUNnQ0FDSURJQVJQQkVCQm9OQUFLQUlBSVFFQ1FDQURJQVJySWdKQkVFOEVRQ0FCSUFScUlnQWdBa0VCY2pZQ0JDQUJJQU5xSUFJMkFnQWdBU0FFUVFOeU5nSUVEQUVMSUFFZ0EwRURjallDQkNBQklBTnFJZ0FnQUNnQ0JFRUJjallDQkVFQUlRQkJBQ0VDQzBHVTBBQWdBallDQUVHZzBBQWdBRFlDQUNBQlFRaHFJUUVNRHd0Qm1OQUFLQUlBSWdNZ0JFc0VRQ0FFSUFscUlnQWdBeUFFYXlJQlFRRnlOZ0lFUWFUUUFDQUFOZ0lBUVpqUUFDQUJOZ0lBSUFrZ0JFRURjallDQkNBSlFRaHFJUUVNRHd0QkFDRUJJQVFDZjBIazB3QW9BZ0FFUUVIczB3QW9BZ0FNQVF0QjhOTUFRbjgzQWdCQjZOTUFRb0NBaElDQWdNQUFOd0lBUWVUVEFDQUtRUXhxUVhCeFFkaXExYW9GY3pZQ0FFSDQwd0JCQURZQ0FFSEkwd0JCQURZQ0FFR0FnQVFMSWdBZ0JFSEhBR29pQldvaUJrRUFJQUJySWdkeElnSlBCRUJCL05NQVFUQTJBZ0FNRHdzQ1FFSEUwd0FvQWdBaUFVVU5BRUc4MHdBb0FnQWlDQ0FDYWlFQUlBQWdBVTBnQUNBSVMzRU5BRUVBSVFGQi9OTUFRVEEyQWdBTUR3dEJ5Tk1BTFFBQVFRUnhEUVFDUUFKQUlBa0VRRUhNMHdBaEFRTkFJQUVvQWdBaUFDQUpUUVJBSUFBZ0FTZ0NCR29nQ1VzTkF3c2dBU2dDQ0NJQkRRQUxDMEVBRURNaUFFRi9SZzBGSUFJaEJrSG8wd0FvQWdBaUFVRUJheUlESUFCeEJFQWdBaUFBYXlBQUlBTnFRUUFnQVd0eGFpRUdDeUFFSUFaUERRVWdCa0grLy8vL0Iwc05CVUhFMHdBb0FnQWlBd1JBUWJ6VEFDZ0NBQ0lISUFacUlRRWdBU0FIVFEwR0lBRWdBMHNOQmdzZ0JoQXpJZ0VnQUVjTkFRd0hDeUFHSUFOcklBZHhJZ1pCL3YvLy93ZExEUVFnQmhBeklRQWdBQ0FCS0FJQUlBRW9BZ1JxUmcwRElBQWhBUXNDUUNBR0lBUkJ5QUJxVHcwQUlBRkJmMFlOQUVIczB3QW9BZ0FpQUNBRklBWnJha0VBSUFCcmNTSUFRZjcvLy84SFN3UkFJQUVoQUF3SEN5QUFFRE5CZjBjRVFDQUFJQVpxSVFZZ0FTRUFEQWNMUVFBZ0Jtc1FNeG9NQkFzZ0FTSUFRWDlIRFFVTUF3dEJBQ0VEREF3TFFRQWhBQXdLQ3lBQVFYOUhEUUlMUWNqVEFFSEkwd0FvQWdCQkJISTJBZ0FMSUFKQi92Ly8vd2RMRFFFZ0FoQXpJUUJCQUJBeklRRWdBRUYvUmcwQklBRkJmMFlOQVNBQUlBRlBEUUVnQVNBQWF5SUdJQVJCT0dwTkRRRUxRYnpUQUVHODB3QW9BZ0FnQm1vaUFUWUNBRUhBMHdBb0FnQWdBVWtFUUVIQTB3QWdBVFlDQUFzQ1FBSkFBa0JCcE5BQUtBSUFJZ0lFUUVITTB3QWhBUU5BSUFBZ0FTZ0NBQ0lESUFFb0FnUWlCV3BHRFFJZ0FTZ0NDQ0lCRFFBTERBSUxRWnpRQUNnQ0FDSUJRUUJISUFBZ0FVOXhSUVJBUVp6UUFDQUFOZ0lBQzBFQUlRRkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkJyTkFBUVg4MkFnQkJzTkFBUWVUVEFDZ0NBRFlDQUVIWTB3QkJBRFlDQUFOQUlBRkJ5TkFBYWlBQlFielFBR29pQWpZQ0FDQUNJQUZCdE5BQWFpSUROZ0lBSUFGQndOQUFhaUFETmdJQUlBRkIwTkFBYWlBQlFjVFFBR29pQXpZQ0FDQURJQUkyQWdBZ0FVSFkwQUJxSUFGQnpOQUFhaUlDTmdJQUlBSWdBellDQUNBQlFkVFFBR29nQWpZQ0FDQUJRU0JxSWdGQmdBSkhEUUFMUVhnZ0FHdEJEM0VpQVNBQWFpSUNJQVpCT0dzaUF5QUJheUlCUVFGeU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQUkyQWdBZ0FDQURha0U0TmdJRURBSUxJQUFnQWswTkFDQUNJQU5KRFFBZ0FTZ0NERUVJY1EwQVFYZ2dBbXRCRDNFaUFDQUNhaUlEUVpqUUFDZ0NBQ0FHYWlJSElBQnJJZ0JCQVhJMkFnUWdBU0FGSUFacU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUEyQWdCQnBOQUFJQU0yQWdBZ0FpQUhha0U0TmdJRURBRUxJQUJCbk5BQUtBSUFTUVJBUVp6UUFDQUFOZ0lBQ3lBQUlBWnFJUU5Cek5NQUlRRUNRQUpBQWtBRFFDQURJQUVvQWdCSEJFQWdBU2dDQ0NJQkRRRU1BZ3NMSUFFdEFBeEJDSEZGRFFFTFFjelRBQ0VCQTBBZ0FTZ0NBQ0lESUFKTkJFQWdBeUFCS0FJRWFpSUZJQUpMRFFNTElBRW9BZ2doQVF3QUN3QUxJQUVnQURZQ0FDQUJJQUVvQWdRZ0JtbzJBZ1FnQUVGNElBQnJRUTl4YWlJSklBUkJBM0kyQWdRZ0EwRjRJQU5yUVE5eGFpSUdJQVFnQ1dvaUJHc2hBU0FDSUFaR0JFQkJwTkFBSUFRMkFnQkJtTkFBUVpqUUFDZ0NBQ0FCYWlJQU5nSUFJQVFnQUVFQmNqWUNCQXdJQzBHZzBBQW9BZ0FnQmtZRVFFR2cwQUFnQkRZQ0FFR1UwQUJCbE5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVJQUFnQkdvZ0FEWUNBQXdJQ3lBR0tBSUVJZ1ZCQTNGQkFVY05CaUFGUVhoeElRZ2dCVUgvQVUwRVFDQUZRUU4ySVFNZ0JpZ0NDQ0lBSUFZb0Fnd2lBa1lFUUVHTTBBQkJqTkFBS0FJQVFYNGdBM2R4TmdJQURBY0xJQUlnQURZQ0NDQUFJQUkyQWd3TUJnc2dCaWdDR0NFSElBWWdCaWdDRENJQVJ3UkFJQUFnQmlnQ0NDSUNOZ0lJSUFJZ0FEWUNEQXdGQ3lBR1FSUnFJZ0lvQWdBaUJVVUVRQ0FHS0FJUUlnVkZEUVFnQmtFUWFpRUNDd05BSUFJaEF5QUZJZ0JCRkdvaUFpZ0NBQ0lGRFFBZ0FFRVFhaUVDSUFBb0FoQWlCUTBBQ3lBRFFRQTJBZ0FNQkF0QmVDQUFhMEVQY1NJQklBQnFJZ2NnQmtFNGF5SURJQUZySWdGQkFYSTJBZ1FnQUNBRGFrRTROZ0lFSUFJZ0JVRTNJQVZyUVE5eGFrRS9heUlESUFNZ0FrRVFha2tiSWdOQkl6WUNCRUdvMEFCQjlOTUFLQUlBTmdJQVFaalFBQ0FCTmdJQVFhVFFBQ0FITmdJQUlBTkJFR3BCMU5NQUtRSUFOd0lBSUFOQnpOTUFLUUlBTndJSVFkVFRBQ0FEUVFocU5nSUFRZERUQUNBR05nSUFRY3pUQUNBQU5nSUFRZGpUQUVFQU5nSUFJQU5CSkdvaEFRTkFJQUZCQnpZQ0FDQUZJQUZCQkdvaUFVc05BQXNnQWlBRFJnMEFJQU1nQXlnQ0JFRitjVFlDQkNBRElBTWdBbXNpQlRZQ0FDQUNJQVZCQVhJMkFnUWdCVUgvQVUwRVFDQUZRWGh4UWJUUUFHb2hBQUovUVl6UUFDZ0NBQ0lCUVFFZ0JVRURkblFpQTNGRkJFQkJqTkFBSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBSTJBZ3dnQUNBQ05nSUlJQUlnQURZQ0RDQUNJQUUyQWdnTUFRdEJIeUVCSUFWQi8vLy9CMDBFUUNBRlFTWWdCVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFFTElBSWdBVFlDSENBQ1FnQTNBaEFnQVVFQ2RFRzgwZ0JxSVFCQmtOQUFLQUlBSWdOQkFTQUJkQ0lHY1VVRVFDQUFJQUkyQWdCQmtOQUFJQU1nQm5JMkFnQWdBaUFBTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQVFzZ0JVRVpJQUZCQVhaclFRQWdBVUVmUnh0MElRRWdBQ2dDQUNFREFrQURRQ0FESWdBb0FnUkJlSEVnQlVZTkFTQUJRUjEySVFNZ0FVRUJkQ0VCSUFBZ0EwRUVjV3BCRUdvaUJpZ0NBQ0lERFFBTElBWWdBallDQUNBQ0lBQTJBaGdnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFBS0FJSUlnRWdBallDRENBQUlBSTJBZ2dnQWtFQU5nSVlJQUlnQURZQ0RDQUNJQUUyQWdnTFFaalFBQ2dDQUNJQklBUk5EUUJCcE5BQUtBSUFJZ0FnQkdvaUFpQUJJQVJySWdGQkFYSTJBZ1JCbU5BQUlBRTJBZ0JCcE5BQUlBSTJBZ0FnQUNBRVFRTnlOZ0lFSUFCQkNHb2hBUXdJQzBFQUlRRkIvTk1BUVRBMkFnQU1Cd3RCQUNFQUN5QUhSUTBBQWtBZ0JpZ0NIQ0lDUVFKMFFielNBR29pQXlnQ0FDQUdSZ1JBSUFNZ0FEWUNBQ0FBRFFGQmtOQUFRWkRRQUNnQ0FFRitJQUozY1RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFaR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFjMkFoZ2dCaWdDRUNJQ0JFQWdBQ0FDTmdJUUlBSWdBRFlDR0FzZ0JrRVVhaWdDQUNJQ1JRMEFJQUJCRkdvZ0FqWUNBQ0FDSUFBMkFoZ0xJQUVnQ0dvaEFTQUdJQWhxSWdZb0FnUWhCUXNnQmlBRlFYNXhOZ0lFSUFFZ0JHb2dBVFlDQUNBRUlBRkJBWEkyQWdRZ0FVSC9BVTBFUUNBQlFYaHhRYlRRQUdvaEFBSi9RWXpRQUNnQ0FDSUNRUUVnQVVFRGRuUWlBWEZGQkVCQmpOQUFJQUVnQW5JMkFnQWdBQXdCQ3lBQUtBSUlDeUlCSUFRMkFnd2dBQ0FFTmdJSUlBUWdBRFlDRENBRUlBRTJBZ2dNQVF0Qkh5RUZJQUZCLy8vL0IwMEVRQ0FCUVNZZ0FVRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUVVMSUFRZ0JUWUNIQ0FFUWdBM0FoQWdCVUVDZEVHODBnQnFJUUJCa05BQUtBSUFJZ0pCQVNBRmRDSURjVVVFUUNBQUlBUTJBZ0JCa05BQUlBSWdBM0kyQWdBZ0JDQUFOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01BUXNnQVVFWklBVkJBWFpyUVFBZ0JVRWZSeHQwSVFVZ0FDZ0NBQ0VBQWtBRFFDQUFJZ0lvQWdSQmVIRWdBVVlOQVNBRlFSMTJJUUFnQlVFQmRDRUZJQUlnQUVFRWNXcEJFR29pQXlnQ0FDSUFEUUFMSUFNZ0JEWUNBQ0FFSUFJMkFoZ2dCQ0FFTmdJTUlBUWdCRFlDQ0F3QkN5QUNLQUlJSWdBZ0JEWUNEQ0FDSUFRMkFnZ2dCRUVBTmdJWUlBUWdBallDRENBRUlBQTJBZ2dMSUFsQkNHb2hBUXdDQ3dKQUlBZEZEUUFDUUNBREtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBTkdCRUFnQWlBQU5nSUFJQUFOQVVHUTBBQWdDRUYrSUFGM2NTSUlOZ0lBREFJTElBZEJFRUVVSUFjb0FoQWdBMFliYWlBQU5nSUFJQUJGRFFFTElBQWdCellDR0NBREtBSVFJZ0VFUUNBQUlBRTJBaEFnQVNBQU5nSVlDeUFEUVJScUtBSUFJZ0ZGRFFBZ0FFRVVhaUFCTmdJQUlBRWdBRFlDR0FzQ1FDQUZRUTlOQkVBZ0F5QUVJQVZxSWdCQkEzSTJBZ1FnQUNBRGFpSUFJQUFvQWdSQkFYSTJBZ1FNQVFzZ0F5QUVhaUlDSUFWQkFYSTJBZ1FnQXlBRVFRTnlOZ0lFSUFJZ0JXb2dCVFlDQUNBRlFmOEJUUVJBSUFWQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnRkJBU0FGUVFOMmRDSUZjVVVFUUVHTTBBQWdBU0FGY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQWpZQ0RDQUFJQUkyQWdnZ0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRRWdCVUgvLy84SFRRUkFJQVZCSmlBRlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBUXNnQWlBQk5nSWNJQUpDQURjQ0VDQUJRUUowUWJ6U0FHb2hBRUVCSUFGMElnUWdDSEZGQkVBZ0FDQUNOZ0lBUVpEUUFDQUVJQWh5TmdJQUlBSWdBRFlDR0NBQ0lBSTJBZ2dnQWlBQ05nSU1EQUVMSUFWQkdTQUJRUUYyYTBFQUlBRkJIMGNiZENFQklBQW9BZ0FoQkFKQUEwQWdCQ0lBS0FJRVFYaHhJQVZHRFFFZ0FVRWRkaUVFSUFGQkFYUWhBU0FBSUFSQkJIRnFRUkJxSWdZb0FnQWlCQTBBQ3lBR0lBSTJBZ0FnQWlBQU5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFRc2dBQ2dDQ0NJQklBSTJBZ3dnQUNBQ05nSUlJQUpCQURZQ0dDQUNJQUEyQWd3Z0FpQUJOZ0lJQ3lBRFFRaHFJUUVNQVFzQ1FDQUpSUTBBQWtBZ0FDZ0NIQ0lCUVFKMFFielNBR29pQWlnQ0FDQUFSZ1JBSUFJZ0F6WUNBQ0FERFFGQmtOQUFJQXRCZmlBQmQzRTJBZ0FNQWdzZ0NVRVFRUlFnQ1NnQ0VDQUFSaHRxSUFNMkFnQWdBMFVOQVFzZ0F5QUpOZ0lZSUFBb0FoQWlBUVJBSUFNZ0FUWUNFQ0FCSUFNMkFoZ0xJQUJCRkdvb0FnQWlBVVVOQUNBRFFSUnFJQUUyQWdBZ0FTQUROZ0lZQ3dKQUlBVkJEMDBFUUNBQUlBUWdCV29pQVVFRGNqWUNCQ0FBSUFGcUlnRWdBU2dDQkVFQmNqWUNCQXdCQ3lBQUlBUnFJZ2NnQlVFQmNqWUNCQ0FBSUFSQkEzSTJBZ1FnQlNBSGFpQUZOZ0lBSUFnRVFDQUlRWGh4UWJUUUFHb2hBVUdnMEFBb0FnQWhBd0ovUVFFZ0NFRURkblFpQWlBR2NVVUVRRUdNMEFBZ0FpQUdjallDQUNBQkRBRUxJQUVvQWdnTElnSWdBellDRENBQklBTTJBZ2dnQXlBQk5nSU1JQU1nQWpZQ0NBdEJvTkFBSUFjMkFnQkJsTkFBSUFVMkFnQUxJQUJCQ0dvaEFRc2dDa0VRYWlRQUlBRUxRd0FnQUVVRVFEOEFRUkIwRHdzQ1FDQUFRZi8vQTNFTkFDQUFRUUJJRFFBZ0FFRVFka0FBSWdCQmYwWUVRRUg4MHdCQk1EWUNBRUYvRHdzZ0FFRVFkQThMQUFzTDNEOGlBRUdBQ0FzSkFRQUFBQUlBQUFBREFFR1VDQXNGQkFBQUFBVUFRYVFJQ3drR0FBQUFCd0FBQUFnQVFkd0lDNG90U1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCeGRXVnllUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMkp2WkhrQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnYjNabGNtWnNiM2NBUTJoMWJtc2djMmw2WlNCdmRtVnlabXh2ZHdCU1pYTndiMjV6WlNCdmRtVnlabXh2ZHdCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1NGUlVVQzk0TG5nZ2NtVnhkV1Z6ZEFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1VsUlRVQzk0TG5nZ2NtVnhkV1Z6ZEFCRmVIQmxZM1JsWkNCVFQxVlNRMFVnYldWMGFHOWtJR1p2Y2lCSlEwVXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCbWNtRm5iV1Z1ZENCemRHRnlkQUJGZUhCbFkzUmxaQ0JrYjNRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5emRHRjBkWE1BU1c1MllXeHBaQ0J5WlhOd2IyNXpaU0J6ZEdGMGRYTUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjd0JWYzJWeUlHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXlaWE5sZEdBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJobFlXUmxjbUFnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGMzTmhaMlZmWW1WbmFXNWdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkWEpzWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBRlZ1Wlhod1pXTjBaV1FnWTJoaGNpQnBiaUIxY213Z2MyVnlkbVZ5QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFpoYkhWbElHTm9ZWElBU1c1MllXeHBaQ0JvWldGa1pYSWdabWxsYkdRZ1kyaGhjZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1psY25OcGIyNEFTVzUyWVd4cFpDQnRhVzV2Y2lCMlpYSnphVzl1QUVsdWRtRnNhV1FnYldGcWIzSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUIyWlhKemFXOXVBRVY0Y0dWamRHVmtJRU5TVEVZZ1lXWjBaWElnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRWhVVkZBZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUdobFlXUmxjaUIwYjJ0bGJnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzVnliQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjbk1nYVc0Z2RYSnNBRlZ1Wlhod1pXTjBaV1FnYzNSaGNuUWdZMmhoY2lCcGJpQjFjbXdBUkc5MVlteGxJRUFnYVc0Z2RYSnNBRVZ0Y0hSNUlFTnZiblJsYm5RdFRHVnVaM1JvQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlFTnZiblJsYm5RdFRHVnVaM1JvQUVSMWNHeHBZMkYwWlNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhCaGRHZ0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ1kyRnVKM1FnWW1VZ2NISmxjMlZ1ZENCM2FYUm9JRlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJSE5wZW1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCMllXeDFaUUJOYVhOemFXNW5JR1Y0Y0dWamRHVmtJRXhHSUdGbWRHVnlJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBZ2FHVmhaR1Z5SUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVWdkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QnhkVzkwWldRZ2RtRnNkV1VBVUdGMWMyVmtJR0o1SUc5dVgyaGxZV1JsY25OZlkyOXRjR3hsZEdVQVNXNTJZV3hwWkNCRlQwWWdjM1JoZEdVQWIyNWZjbVZ6WlhRZ2NHRjFjMlVBYjI1ZlkyaDFibXRmYUdWaFpHVnlJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZbVZuYVc0Z2NHRjFjMlVBYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxJSEJoZFhObEFHOXVYM04wWVhSMWMxOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzVnliRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbElIQmhkWE5sQUZWdVpYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdjM1JoY25RZ2JHbHVaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2JtRnRaUUJRWVhWelpTQnZiaUJEVDA1T1JVTlVMMVZ3WjNKaFpHVUFVR0YxYzJVZ2IyNGdVRkpKTDFWd1ozSmhaR1VBUlhod1pXTjBaV1FnU0ZSVVVDOHlJRU52Ym01bFkzUnBiMjRnVUhKbFptRmpaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMjFsZEdodlpBQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUJ0WlhSb2IyUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZlptbGxiR1FBVUdGMWMyVmtBRWx1ZG1Gc2FXUWdkMjl5WkNCbGJtTnZkVzUwWlhKbFpBQkpiblpoYkdsa0lHMWxkR2h2WkNCbGJtTnZkVzUwWlhKbFpBQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhOamFHVnRZUUJTWlhGMVpYTjBJR2hoY3lCcGJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBQVUxZEpWRU5JWDFCU1QxaFpBRlZUUlY5UVVrOVlXUUJOUzBGRFZFbFdTVlJaQUZWT1VGSlBRMFZUVTBGQ1RFVmZSVTVVU1ZSWkFFTlBVRmtBVFU5V1JVUmZVRVZTVFVGT1JVNVVURmtBVkU5UFgwVkJVa3haQUU1UFZFbEdXUUJHUVVsTVJVUmZSRVZRUlU1RVJVNURXUUJDUVVSZlIwRlVSVmRCV1FCUVRFRlpBRkJWVkFCRFNFVkRTMDlWVkFCSFFWUkZWMEZaWDFSSlRVVlBWVlFBVWtWUlZVVlRWRjlVU1UxRlQxVlVBRTVGVkZkUFVrdGZRMDlPVGtWRFZGOVVTVTFGVDFWVUFFTlBUazVGUTFSSlQwNWZWRWxOUlU5VlZBQk1UMGRKVGw5VVNVMUZUMVZVQUU1RlZGZFBVa3RmVWtWQlJGOVVTVTFGVDFWVUFGQlBVMVFBVFVsVFJFbFNSVU5VUlVSZlVrVlJWVVZUVkFCRFRFbEZUbFJmUTB4UFUwVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5TVQwRkVYMEpCVEVGT1EwVkVYMUpGVVZWRlUxUUFRa0ZFWDFKRlVWVkZVMVFBU0ZSVVVGOVNSVkZWUlZOVVgxTkZUbFJmVkU5ZlNGUlVVRk5mVUU5U1ZBQlNSVkJQVWxRQVNVMWZRVjlVUlVGUVQxUUFVa1ZUUlZSZlEwOU9WRVZPVkFCT1QxOURUMDVVUlU1VUFGQkJVbFJKUVV4ZlEwOU9WRVZPVkFCSVVFVmZTVTVXUVV4SlJGOURUMDVUVkVGT1ZBQklVRVZmUTBKZlVrVlRSVlFBUjBWVUFFaFFSVjlUVkZKSlExUUFRMDlPUmt4SlExUUFWRVZOVUU5U1FWSlpYMUpGUkVsU1JVTlVBRkJGVWsxQlRrVk9WRjlTUlVSSlVrVkRWQUJEVDA1T1JVTlVBRTFWVEZSSlgxTlVRVlJWVXdCSVVFVmZTVTVXUVV4SlJGOVRWRUZVVlZNQVZFOVBYMDFCVGxsZlVrVlJWVVZUVkZNQVJVRlNURmxmU0VsT1ZGTUFWVTVCVmtGSlRFRkNURVZmUms5U1gweEZSMEZNWDFKRlFWTlBUbE1BVDFCVVNVOU9Vd0JUVjBsVVEwaEpUa2RmVUZKUFZFOURUMHhUQUZaQlVrbEJUbFJmUVV4VFQxOU9SVWRQVkVsQlZFVlRBRTFWVEZSSlVFeEZYME5JVDBsRFJWTUFTVTVVUlZKT1FVeGZVMFZTVmtWU1gwVlNVazlTQUZkRlFsOVRSVkpXUlZKZlZVNUxUazlYVGw5RlVsSlBVZ0JTUVVsTVIxVk9YMFZTVWs5U0FFbEVSVTVVU1ZSWlgxQlNUMVpKUkVWU1gwRlZWRWhGVGxSSlEwRlVTVTlPWDBWU1VrOVNBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOUZVbEpQVWdCSlRsWkJURWxFWDFoZlJrOVNWMEZTUkVWRVgwWlBVZ0JUUlZSZlVFRlNRVTFGVkVWU0FFZEZWRjlRUVZKQlRVVlVSVklBU0ZCRlgxVlRSVklBVTBWRlgwOVVTRVZTQUVoUVJWOURRbDlEU0ZWT1MxOUlSVUZFUlZJQVRVdERRVXhGVGtSQlVnQlRSVlJWVUFCWFJVSmZVMFZTVmtWU1gwbFRYMFJQVjA0QVZFVkJVa1JQVjA0QVNGQkZYME5NVDFORlJGOURUMDVPUlVOVVNVOU9BRWhGVlZKSlUxUkpRMTlGV0ZCSlVrRlVTVTlPQUVSSlUwTlBUazVGUTFSRlJGOVBVRVZTUVZSSlQwNEFUazlPWDBGVlZFaFBVa2xVUVZSSlZrVmZTVTVHVDFKTlFWUkpUMDRBU0ZCRlgwbE9Wa0ZNU1VSZlZrVlNVMGxQVGdCSVVFVmZRMEpmVFVWVFUwRkhSVjlDUlVkSlRnQlRTVlJGWDBsVFgwWlNUMXBGVGdCSVVFVmZTVTVXUVV4SlJGOUlSVUZFUlZKZlZFOUxSVTRBU1U1V1FVeEpSRjlVVDB0RlRnQkdUMUpDU1VSRVJVNEFSVTVJUVU1RFJWOVpUMVZTWDBOQlRFMEFTRkJGWDBsT1ZrRk1TVVJmVlZKTUFFSk1UME5MUlVSZlFsbGZVRUZTUlU1VVFVeGZRMDlPVkZKUFRBQk5TME5QVEFCQlEwd0FTRkJGWDBsT1ZFVlNUa0ZNQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVmZWVTVQUmtaSlEwbEJUQUJJVUVWZlQwc0FWVTVNU1U1TEFGVk9URTlEU3dCUVVra0FVa1ZVVWxsZlYwbFVTQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJJVUVWZlZVNUZXRkJGUTFSRlJGOURUMDVVUlU1VVgweEZUa2RVU0FCR1RGVlRTQUJRVWs5UVVFRlVRMGdBVFMxVFJVRlNRMGdBVlZKSlgxUlBUMTlNVDA1SEFGQlNUME5GVTFOSlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5UVJWSlRTVk5VUlU1VVgxZEJVazVKVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlYUVZKT1NVNUhBRWhRUlY5SlRsWkJURWxFWDFSU1FVNVRSa1ZTWDBWT1EwOUVTVTVIQUVWNGNHVmpkR1ZrSUVOU1RFWUFTRkJGWDBsT1ZrRk1TVVJmUTBoVlRrdGZVMGxhUlFCTlQxWkZBRU5QVGxSSlRsVkZBRWhRUlY5RFFsOVRWRUZVVlZOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbE5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVpGVWxOSlQwNWZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxVlNURjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDFaQlRGVkZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RldGUkZUbE5KVDA1ZlRrRk5SVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZUVTBGSFJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlVTRTlFWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZSa2xGVEVSZlEwOU5VRXhGVkVVQVJFVk1SVlJGQUVoUVJWOUpUbFpCVEVsRVgwVlBSbDlUVkVGVVJRQkpUbFpCVEVsRVgxTlRURjlEUlZKVVNVWkpRMEZVUlFCUVFWVlRSUUJPVDE5U1JWTlFUMDVUUlFCVlRsTlZVRkJQVWxSRlJGOU5SVVJKUVY5VVdWQkZBRWRQVGtVQVRrOVVYMEZEUTBWUVZFRkNURVVBVTBWU1ZrbERSVjlWVGtGV1FVbE1RVUpNUlFCU1FVNUhSVjlPVDFSZlUwRlVTVk5HU1VGQ1RFVUFUMUpKUjBsT1gwbFRYMVZPVWtWQlEwaEJRa3hGQUZKRlUxQlBUbE5GWDBsVFgxTlVRVXhGQUZCVlVrZEZBRTFGVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFVBVWtWUlZVVlRWRjlJUlVGRVJWSmZWRTlQWDB4QlVrZEZBRkJCV1V4UFFVUmZWRTlQWDB4QlVrZEZBRWxPVTFWR1JrbERTVVZPVkY5VFZFOVNRVWRGQUVoUVJWOVFRVlZUUlVSZlZWQkhVa0ZFUlFCSVVFVmZVRUZWVTBWRVgwZ3lYMVZRUjFKQlJFVUFVMDlWVWtORkFFRk9UazlWVGtORkFGUlNRVU5GQUVoUVJWOVZUa1ZZVUVWRFZFVkVYMU5RUVVORkFFUkZVME5TU1VKRkFGVk9VMVZDVTBOU1NVSkZBRkpGUTA5U1JBQklVRVZmU1U1V1FVeEpSRjlOUlZSSVQwUUFUazlVWDBaUFZVNUVBRkJTVDFCR1NVNUVBRlZPUWtsT1JBQlNSVUpKVGtRQVZVNUJWVlJJVDFKSldrVkVBRTFGVkVoUFJGOU9UMVJmUVV4TVQxZEZSQUJJVkZSUVgxWkZVbE5KVDA1ZlRrOVVYMU5WVUZCUFVsUkZSQUJCVEZKRlFVUlpYMUpGVUU5U1ZFVkVBRUZEUTBWUVZFVkVBRTVQVkY5SlRWQk1SVTFGVGxSRlJBQk1UMDlRWDBSRlZFVkRWRVZFQUVoUVJWOURVbDlGV0ZCRlExUkZSQUJJVUVWZlRFWmZSVmhRUlVOVVJVUUFRMUpGUVZSRlJBQkpUVjlWVTBWRUFFaFFSVjlRUVZWVFJVUUFWRWxOUlU5VlZGOVBRME5WVWtWRUFGQkJXVTFGVGxSZlVrVlJWVWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMUpGVVZWSlVrVkVBRkJTVDFoWlgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUU1RlZGZFBVa3RmUVZWVVNFVk9WRWxEUVZSSlQwNWZVa1ZSVlVsU1JVUUFURVZPUjFSSVgxSkZVVlZKVWtWRUFGTlRURjlEUlZKVVNVWkpRMEZVUlY5U1JWRlZTVkpGUkFCVlVFZFNRVVJGWDFKRlVWVkpVa1ZFQUZCQlIwVmZSVmhRU1ZKRlJBQlFVa1ZEVDA1RVNWUkpUMDVmUmtGSlRFVkVBRVZZVUVWRFZFRlVTVTlPWDBaQlNVeEZSQUJTUlZaQlRFbEVRVlJKVDA1ZlJrRkpURVZFQUZOVFRGOUlRVTVFVTBoQlMwVmZSa0ZKVEVWRUFFeFBRMHRGUkFCVVVrRk9VMFpQVWsxQlZFbFBUbDlCVUZCTVNVVkVBRTVQVkY5TlQwUkpSa2xGUkFCT1QxUmZSVmhVUlU1RVJVUUFRa0ZPUkZkSlJGUklYMHhKVFVsVVgwVllRMFZGUkVWRUFGTkpWRVZmU1ZOZlQxWkZVa3hQUVVSRlJBQklSVUZFQUVWNGNHVmpkR1ZrSUVoVVZGQXZBQUJlRXdBQUpoTUFBREFRQUFEd0Z3QUFuUk1BQUJVU0FBQTVGd0FBOEJJQUFBb1FBQUIxRWdBQXJSSUFBSUlUQUFCUEZBQUFmeEFBQUtBVkFBQWpGQUFBaVJJQUFJc1VBQUJORlFBQTFCRUFBTThVQUFBUUdBQUF5UllBQU53V0FBREJFUUFBNEJjQUFMc1VBQUIwRkFBQWZCVUFBT1VVQUFBSUZ3QUFIeEFBQUdVVkFBQ2pGQUFBS0JVQUFBSVZBQUNaRlFBQUxCQUFBSXNaQUFCUER3QUExQTRBQUdvUUFBRE9FQUFBQWhjQUFJa09BQUJ1RXdBQUhCTUFBR1lVQUFCV0Z3QUF3Uk1BQU0wVEFBQnNFd0FBYUJjQUFHWVhBQUJmRndBQUloTUFBTTRQQUFCcERnQUEyQTRBQUdNV0FBRExFd0FBcWc0QUFDZ1hBQUFtRndBQXhSTUFBRjBXQUFEb0VRQUFaeE1BQUdVVEFBRHlGZ0FBY3hNQUFCMFhBQUQ1RmdBQTh4RUFBTThPQUFET0ZRQUFEQklBQUxNUkFBQ2xFUUFBWVJBQUFESVhBQUM3RXdCQitUVUxBUUVBUVpBMkMrQUJBUUVDQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFRZjAzQ3dFQkFFR1JPQXRlQWdNQ0FnSUNBZ0FBQWdJQUFnSUFBZ0lDQWdJQ0FnSUNBZ0FFQUFBQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFJQUFnQkIvVGtMQVFFQVFaRTZDMTRDQUFJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQU1BQkFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSHdPd3NOYkc5elpXVmxjQzFoYkdsMlpRQkJpVHdMQVFFQVFhQThDK0FCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUVlrK0N3RUJBRUdnUGd2bkFRRUJBUUVCQVFFQkFRRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQlkyaDFibXRsWkFCQnNNQUFDMThCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQkJrTUlBQ3lGbFkzUnBiMjVsYm5RdGJHVnVaM1JvYjI1eWIzaDVMV052Ym01bFkzUnBiMjRBUWNEQ0FBc3RjbUZ1YzJabGNpMWxibU52WkdsdVozQm5jbUZrWlEwS0RRb05DbE5ORFFvTkNsUlVVQzlEUlM5VVUxQXZBRUg1d2dBTEJRRUNBQUVEQUVHUXd3QUw0QUVFQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NRQUN3VUJBZ0FCQXdCQmtNVUFDK0FCQkFFQkJRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUWZuR0FBc0VBUUFBQVFCQmtjY0FDOThCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK3NnQUN3UUJBQUFDQUVHUXlRQUxYd01FQUFBRUJBUUVCQVFFQkFRRUJBVUVCQVFFQkFRRUJBUUVCQVFBQkFBR0J3UUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUFFSDZ5Z0FMQkFFQUFBRUFRWkRMQUFzQkFRQkJxc3NBQzBFQ0FBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QkIrc3dBQ3dRQkFBQUJBRUdRelFBTEFRRUFRWnJOQUFzR0FnQUFBQUFDQUVHeHpRQUxPZ01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQVFmRE9BQXVXQVU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09JywgJ2Jhc2U2NCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ0dFVCcsICdIRUFEJywgJ1BPU1QnXSlcbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCA9IG5ldyBTZXQoY29yc1NhZmVMaXN0ZWRNZXRob2RzKVxuXG5jb25zdCBudWxsQm9keVN0YXR1cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbMTAxLCAyMDQsIDIwNSwgMzA0XSlcblxuY29uc3QgcmVkaXJlY3RTdGF0dXMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XSlcbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNibG9jay1iYWQtcG9ydFxuICovXG5jb25zdCBiYWRQb3J0cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcxJywgJzcnLCAnOScsICcxMScsICcxMycsICcxNScsICcxNycsICcxOScsICcyMCcsICcyMScsICcyMicsICcyMycsICcyNScsICczNycsICc0MicsICc0MycsICc1MycsICc2OScsICc3NycsICc3OScsXG4gICc4NycsICc5NScsICcxMDEnLCAnMTAyJywgJzEwMycsICcxMDQnLCAnMTA5JywgJzExMCcsICcxMTEnLCAnMTEzJywgJzExNScsICcxMTcnLCAnMTE5JywgJzEyMycsICcxMzUnLCAnMTM3JyxcbiAgJzEzOScsICcxNDMnLCAnMTYxJywgJzE3OScsICczODknLCAnNDI3JywgJzQ2NScsICc1MTInLCAnNTEzJywgJzUxNCcsICc1MTUnLCAnNTI2JywgJzUzMCcsICc1MzEnLCAnNTMyJyxcbiAgJzU0MCcsICc1NDgnLCAnNTU0JywgJzU1NicsICc1NjMnLCAnNTg3JywgJzYwMScsICc2MzYnLCAnOTg5JywgJzk5MCcsICc5OTMnLCAnOTk1JywgJzE3MTknLCAnMTcyMCcsICcxNzIzJyxcbiAgJzIwNDknLCAnMzY1OScsICc0MDQ1JywgJzQxOTAnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY3OScsXG4gICc2Njk3JywgJzEwMDgwJ1xuXSlcbmNvbnN0IGJhZFBvcnRzU2V0ID0gbmV3IFNldChiYWRQb3J0cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY2llc1xuICovXG5jb25zdCByZWZlcnJlclBvbGljeSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcnLFxuICAnbm8tcmVmZXJyZXInLFxuICAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnLFxuICAnc2FtZS1vcmlnaW4nLFxuICAnb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4nLFxuICAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAndW5zYWZlLXVybCdcbl0pXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ2ZvbGxvdycsICdtYW51YWwnLCAnZXJyb3InXSlcblxuY29uc3Qgc2FmZU1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10pXG5jb25zdCBzYWZlTWV0aG9kc1NldCA9IG5ldyBTZXQoc2FmZU1ldGhvZHMpXG5cbmNvbnN0IHJlcXVlc3RNb2RlID0gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFsnbmF2aWdhdGUnLCAnc2FtZS1vcmlnaW4nLCAnbm8tY29ycycsICdjb3JzJ10pXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ29taXQnLCAnc2FtZS1vcmlnaW4nLCAnaW5jbHVkZSddKVxuXG5jb25zdCByZXF1ZXN0Q2FjaGUgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtYm9keS1oZWFkZXItbmFtZVxuICovXG5jb25zdCByZXF1ZXN0Qm9keUhlYWRlciA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LXR5cGUnLFxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMjFcbiAgLy8gJ0NvbnRlbnQtTGVuZ3RoJyBpcyBhIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgd2hpY2ggaXMgdHlwaWNhbGx5XG4gIC8vIHJlbW92ZWQgaW4gdGhlIEhlYWRlcnMgaW1wbGVtZW50YXRpb24uIEhvd2V2ZXIsIHVuZGljaSBkb2Vzbid0XG4gIC8vIGZpbHRlciBvdXQgaGVhZGVycywgc28gd2UgYWRkIGl0IGhlcmUuXG4gICdjb250ZW50LWxlbmd0aCdcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZW51bWRlZi1yZXF1ZXN0ZHVwbGV4XG4gKi9cbmNvbnN0IHJlcXVlc3REdXBsZXggPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnaGFsZidcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG4gKi9cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ10pXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzU2V0ID0gbmV3IFNldChmb3JiaWRkZW5NZXRob2RzKVxuXG5jb25zdCBzdWJyZXNvdXJjZSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdhdWRpbycsXG4gICdhdWRpb3dvcmtsZXQnLFxuICAnZm9udCcsXG4gICdpbWFnZScsXG4gICdtYW5pZmVzdCcsXG4gICdwYWludHdvcmtsZXQnLFxuICAnc2NyaXB0JyxcbiAgJ3N0eWxlJyxcbiAgJ3RyYWNrJyxcbiAgJ3ZpZGVvJyxcbiAgJ3hzbHQnLFxuICAnJ1xuXSlcbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN1YnJlc291cmNlLFxuICBmb3JiaWRkZW5NZXRob2RzLFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZWRpcmVjdFN0YXR1cyxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzLFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHMsXG4gIGJhZFBvcnRzLFxuICByZXF1ZXN0RHVwbGV4LFxuICBzdWJyZXNvdXJjZVNldCxcbiAgYmFkUG9ydHNTZXQsXG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHNhZmVNZXRob2RzU2V0LFxuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeVNldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsIGluY3JlYXNlIHRoZSB2ZXJzaW9uXG4vLyBudW1iZXIgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsT3JpZ2luID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbE9yaWdpbi4xJylcblxuZnVuY3Rpb24gZ2V0R2xvYmFsT3JpZ2luICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsT3JpZ2luXVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxPcmlnaW4gKG5ld09yaWdpbikge1xuICBpZiAobmV3T3JpZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG5ld09yaWdpbilcblxuICBpZiAocGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cDonICYmIHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IGh0dHAgJiBodHRwcyB1cmxzIGFyZSBhbGxvd2VkLCByZWNlaXZlZCAke3BhcnNlZFVSTC5wcm90b2NvbH1gKVxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgIHZhbHVlOiBwYXJzZWRVUkwsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0R2xvYmFsT3JpZ2luLFxuICBzZXRHbG9iYWxPcmlnaW5cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorXFwtLl5ffH5BLVphLXowLTldKyQvXG5jb25zdCBIVFRQX1dISVRFU1BBQ0VfUkVHRVggPSAvW1xcdTAwMEFcXHUwMDBEXFx1MDAwOVxcdTAwMjBdLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5jb25zdCBBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVggPSAvW1xcdTAwMDlcXHUwMDBBXFx1MDAwQ1xcdTAwMERcXHUwMDIwXS9nIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcXVvdGVkLXN0cmluZy10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdFXFx1MDA4MC1cXHUwMEZGXSskLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1wcm9jZXNzb3Jcbi8qKiBAcGFyYW0ge1VSTH0gZGF0YVVSTCAqL1xuZnVuY3Rpb24gZGF0YVVSTFByb2Nlc3NvciAoZGF0YVVSTCkge1xuICAvLyAxLiBBc3NlcnQ6IGRhdGFVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIi5cbiAgYXNzZXJ0KGRhdGFVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpXG5cbiAgLy8gMi4gTGV0IGlucHV0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgVVJMXG4gIC8vIHNlcmlhbGl6ZXIgb24gZGF0YVVSTCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnRcbiAgLy8gc2V0IHRvIHRydWUuXG4gIGxldCBpbnB1dCA9IFVSTFNlcmlhbGl6ZXIoZGF0YVVSTCwgdHJ1ZSlcblxuICAvLyAzLiBSZW1vdmUgdGhlIGxlYWRpbmcgXCJkYXRhOlwiIHN0cmluZyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IGlucHV0LnNsaWNlKDUpXG5cbiAgLy8gNC4gTGV0IHBvc2l0aW9uIHBvaW50IGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyA1LiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IGVxdWFsXG4gIC8vIHRvIFUrMDAyQyAoLCksIGdpdmVuIHBvc2l0aW9uLlxuICBsZXQgbWltZVR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLCcsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDYuIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBtaW1lVHlwZS5cbiAgLy8gVW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHdlIG5lZWQgdG8gc3RvcmUgdGhlXG4gIC8vIGxlbmd0aCBiZWNhdXNlIGlmIHRoZSBtaW1ldHlwZSBoYXMgc3BhY2VzIHJlbW92ZWQsXG4gIC8vIHRoZSB3cm9uZyBhbW91bnQgd2lsbCBiZSBzbGljZWQgZnJvbSB0aGUgaW5wdXQgaW5cbiAgLy8gc3RlcCAjOVxuICBjb25zdCBtaW1lVHlwZUxlbmd0aCA9IG1pbWVUeXBlLmxlbmd0aFxuICBtaW1lVHlwZSA9IHJlbW92ZUFTQ0lJV2hpdGVzcGFjZShtaW1lVHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyA3LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW5cbiAgLy8gcmV0dXJuIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDkuIExldCBlbmNvZGVkQm9keSBiZSB0aGUgcmVtYWluZGVyIG9mIGlucHV0LlxuICBjb25zdCBlbmNvZGVkQm9keSA9IGlucHV0LnNsaWNlKG1pbWVUeXBlTGVuZ3RoICsgMSlcblxuICAvLyAxMC4gTGV0IGJvZHkgYmUgdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgZW5jb2RlZEJvZHkuXG4gIGxldCBib2R5ID0gc3RyaW5nUGVyY2VudERlY29kZShlbmNvZGVkQm9keSlcblxuICAvLyAxMS4gSWYgbWltZVR5cGUgZW5kcyB3aXRoIFUrMDAzQiAoOyksIGZvbGxvd2VkIGJ5XG4gIC8vIHplcm8gb3IgbW9yZSBVKzAwMjAgU1BBQ0UsIGZvbGxvd2VkIGJ5IGFuIEFTQ0lJXG4gIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIFwiYmFzZTY0XCIsIHRoZW46XG4gIGlmICgvOyhcXHUwMDIwKXswLH1iYXNlNjQkL2kudGVzdChtaW1lVHlwZSkpIHtcbiAgICAvLyAxLiBMZXQgc3RyaW5nQm9keSBiZSB0aGUgaXNvbW9ycGhpYyBkZWNvZGUgb2YgYm9keS5cbiAgICBjb25zdCBzdHJpbmdCb2R5ID0gaXNvbW9ycGhpY0RlY29kZShib2R5KVxuXG4gICAgLy8gMi4gU2V0IGJvZHkgdG8gdGhlIGZvcmdpdmluZy1iYXNlNjQgZGVjb2RlIG9mXG4gICAgLy8gc3RyaW5nQm9keS5cbiAgICBib2R5ID0gZm9yZ2l2aW5nQmFzZTY0KHN0cmluZ0JvZHkpXG5cbiAgICAvLyAzLiBJZiBib2R5IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGJvZHkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDQuIFJlbW92ZSB0aGUgbGFzdCA2IGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtNilcblxuICAgIC8vIDUuIFJlbW92ZSB0cmFpbGluZyBVKzAwMjAgU1BBQ0UgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZSxcbiAgICAvLyBpZiBhbnkuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5yZXBsYWNlKC8oXFx1MDAyMCkrJC8sICcnKVxuXG4gICAgLy8gNi4gUmVtb3ZlIHRoZSBsYXN0IFUrMDAzQiAoOykgY29kZSBwb2ludCBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTEpXG4gIH1cblxuICAvLyAxMi4gSWYgbWltZVR5cGUgc3RhcnRzIHdpdGggVSswMDNCICg7KSwgdGhlbiBwcmVwZW5kXG4gIC8vIFwidGV4dC9wbGFpblwiIHRvIG1pbWVUeXBlLlxuICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgnOycpKSB7XG4gICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbicgKyBtaW1lVHlwZVxuICB9XG5cbiAgLy8gMTMuIExldCBtaW1lVHlwZVJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgLy8gbWltZVR5cGUuXG4gIGxldCBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgLy8gMTQuIElmIG1pbWVUeXBlUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gc2V0XG4gIC8vIG1pbWVUeXBlUmVjb3JkIHRvIHRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSS5cbiAgaWYgKG1pbWVUeXBlUmVjb3JkID09PSAnZmFpbHVyZScpIHtcbiAgICBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUoJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScpXG4gIH1cblxuICAvLyAxNS4gUmV0dXJuIGEgbmV3IGRhdGE6IFVSTCBzdHJ1Y3Qgd2hvc2UgTUlNRVxuICAvLyB0eXBlIGlzIG1pbWVUeXBlUmVjb3JkIGFuZCBib2R5IGlzIGJvZHkuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1zdHJ1Y3RcbiAgcmV0dXJuIHsgbWltZVR5cGU6IG1pbWVUeXBlUmVjb3JkLCBib2R5IH1cbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4vKipcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIFVSTFNlcmlhbGl6ZXIgKHVybCwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgaWYgKCFleGNsdWRlRnJhZ21lbnQpIHtcbiAgICByZXR1cm4gdXJsLmhyZWZcbiAgfVxuXG4gIGNvbnN0IGhyZWYgPSB1cmwuaHJlZlxuICBjb25zdCBoYXNoTGVuZ3RoID0gdXJsLmhhc2gubGVuZ3RoXG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IGhhc2hMZW5ndGggPT09IDAgPyBocmVmIDogaHJlZi5zdWJzdHJpbmcoMCwgaHJlZi5sZW5ndGggLSBoYXNoTGVuZ3RoKVxuXG4gIGlmICghaGFzaExlbmd0aCAmJiBocmVmLmVuZHNXaXRoKCcjJykpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplZC5zbGljZSgwLCAtMSlcbiAgfVxuXG4gIHJldHVybiBzZXJpYWxpemVkXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWEtc2VxdWVuY2Utb2YtY29kZS1wb2ludHNcbi8qKlxuICogQHBhcmFtIHsoY2hhcjogc3RyaW5nKSA9PiBib29sZWFufSBjb25kaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgcmVzdWx0ID0gJydcblxuICAvLyAyLiBXaGlsZSBwb3NpdGlvbiBkb2Vzblx1MjAxOXQgcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGlucHV0IGFuZCB0aGVcbiAgLy8gY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgbWVldHMgdGhlIGNvbmRpdGlvbiBjb25kaXRpb246XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCAmJiBjb25kaXRpb24oaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dKSkge1xuICAgIC8vIDEuIEFwcGVuZCB0aGF0IGNvZGUgcG9pbnQgdG8gdGhlIGVuZCBvZiByZXN1bHQuXG4gICAgcmVzdWx0ICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDMuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBBIGZhc3RlciBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIHRoYXQgb25seSB3b3JrcyB3aGVuIGNvbXBhcmluZyBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCAoY2hhciwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGNvbnN0IGlkeCA9IGlucHV0LmluZGV4T2YoY2hhciwgcG9zaXRpb24ucG9zaXRpb24pXG4gIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uID0gaW5wdXQubGVuZ3RoXG4gICAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0KVxuICB9XG5cbiAgcG9zaXRpb24ucG9zaXRpb24gPSBpZHhcbiAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdHJpbmctcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHN0cmluZ1BlcmNlbnREZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgaW5wdXQuXG4gIGNvbnN0IGJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGJ5dGVzLlxuICByZXR1cm4gcGVyY2VudERlY29kZShieXRlcylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYnl0ZVxuICovXG5mdW5jdGlvbiBpc0hleENoYXJCeXRlIChieXRlKSB7XG4gIC8vIDAtOSBBLUYgYS1mXG4gIHJldHVybiAoYnl0ZSA+PSAweDMwICYmIGJ5dGUgPD0gMHgzOSkgfHwgKGJ5dGUgPj0gMHg0MSAmJiBieXRlIDw9IDB4NDYpIHx8IChieXRlID49IDB4NjEgJiYgYnl0ZSA8PSAweDY2KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBieXRlXG4gKi9cbmZ1bmN0aW9uIGhleEJ5dGVUb051bWJlciAoYnl0ZSkge1xuICByZXR1cm4gKFxuICAgIC8vIDAtOVxuICAgIGJ5dGUgPj0gMHgzMCAmJiBieXRlIDw9IDB4MzlcbiAgICAgID8gKGJ5dGUgLSA0OClcbiAgICAvLyBDb252ZXJ0IHRvIHVwcGVyY2FzZVxuICAgIC8vICgoYnl0ZSAmIDB4REYpIC0gNjUpICsgMTBcbiAgICAgIDogKChieXRlICYgMHhERikgLSA1NSlcbiAgKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIC8vIDEuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqL1xuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGxldCBqID0gMFxuICAvLyAyLiBGb3IgZWFjaCBieXRlIGJ5dGUgaW4gaW5wdXQ6XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBieXRlID0gaW5wdXRbaV1cblxuICAgIC8vIDEuIElmIGJ5dGUgaXMgbm90IDB4MjUgKCUpLCB0aGVuIGFwcGVuZCBieXRlIHRvIG91dHB1dC5cbiAgICBpZiAoYnl0ZSAhPT0gMHgyNSkge1xuICAgICAgb3V0cHV0W2orK10gPSBieXRlXG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJ5dGUgaXMgMHgyNSAoJSkgYW5kIHRoZSBuZXh0IHR3byBieXRlc1xuICAgIC8vIGFmdGVyIGJ5dGUgaW4gaW5wdXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2VzXG4gICAgLy8gMHgzMCAoMCkgdG8gMHgzOSAoOSksIDB4NDEgKEEpIHRvIDB4NDYgKEYpLFxuICAgIC8vIGFuZCAweDYxIChhKSB0byAweDY2IChmKSwgYWxsIGluY2x1c2l2ZSwgYXBwZW5kIGJ5dGVcbiAgICAvLyB0byBvdXRwdXQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ5dGUgPT09IDB4MjUgJiZcbiAgICAgICEoaXNIZXhDaGFyQnl0ZShpbnB1dFtpICsgMV0pICYmIGlzSGV4Q2hhckJ5dGUoaW5wdXRbaSArIDJdKSlcbiAgICApIHtcbiAgICAgIG91dHB1dFtqKytdID0gMHgyNVxuXG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBMZXQgYnl0ZVBvaW50IGJlIHRoZSB0d28gYnl0ZXMgYWZ0ZXIgYnl0ZSBpbiBpbnB1dCxcbiAgICAgIC8vIGRlY29kZWQsIGFuZCB0aGVuIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsIG51bWJlci5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dFtqKytdID0gKGhleEJ5dGVUb051bWJlcihpbnB1dFtpICsgMV0pIDw8IDQpIHwgaGV4Qnl0ZVRvTnVtYmVyKGlucHV0W2kgKyAyXSlcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gbGVuZ3RoID09PSBqID8gb3V0cHV0IDogb3V0cHV0LnN1YmFycmF5KDAsIGopXG59XG5cbi8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtYS1taW1lLXR5cGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHBhcnNlTUlNRVR5cGUgKGlucHV0KSB7XG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gaW5wdXQuXG4gIGlucHV0ID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UoaW5wdXQsIHRydWUsIHRydWUpXG5cbiAgLy8gMi4gTGV0IHBvc2l0aW9uIGJlIGEgcG9zaXRpb24gdmFyaWFibGUgZm9yIGlucHV0LFxuICAvLyBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGlucHV0LlxuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gIC8vIDMuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlXG4gIC8vIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMkYgKC8pIGZyb21cbiAgLy8gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCB0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJy8nLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA0LiBJZiB0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAgaWYgKHR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdCh0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDUuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiByZXR1cm5cbiAgLy8gZmFpbHVyZVxuICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDJGICgvKS4pXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBMZXQgc3VidHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZlxuICAvLyBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlblxuICAvLyBwb3NpdGlvbi5cbiAgbGV0IHN1YnR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnOycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDguIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gc3VidHlwZS5cbiAgc3VidHlwZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHN1YnR5cGUsIGZhbHNlLCB0cnVlKVxuXG4gIC8vIDkuIElmIHN1YnR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoc3VidHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHN1YnR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgdHlwZUxvd2VyY2FzZSA9IHR5cGUudG9Mb3dlckNhc2UoKVxuICBjb25zdCBzdWJ0eXBlTG93ZXJjYXNlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gMTAuIExldCBtaW1lVHlwZSBiZSBhIG5ldyBNSU1FIHR5cGUgcmVjb3JkIHdob3NlIHR5cGVcbiAgLy8gaXMgdHlwZSwgaW4gQVNDSUkgbG93ZXJjYXNlLCBhbmQgc3VidHlwZSBpcyBzdWJ0eXBlLFxuICAvLyBpbiBBU0NJSSBsb3dlcmNhc2UuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlXG4gIGNvbnN0IG1pbWVUeXBlID0ge1xuICAgIHR5cGU6IHR5cGVMb3dlcmNhc2UsXG4gICAgc3VidHlwZTogc3VidHlwZUxvd2VyY2FzZSxcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgcGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlLWVzc2VuY2VcbiAgICBlc3NlbmNlOiBgJHt0eXBlTG93ZXJjYXNlfS8ke3N1YnR5cGVMb3dlcmNhc2V9YFxuICB9XG5cbiAgLy8gMTEuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDEuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0IgKDspLilcbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgSFRUUFxuICAgIC8vIHdoaXRlc3BhY2UgZnJvbSBpbnB1dCBnaXZlbiBwb3NpdGlvbi5cbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICAgICAgY2hhciA9PiBIVFRQX1dISVRFU1BBQ0VfUkVHRVgudGVzdChjaGFyKSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAzLiBMZXQgcGFyYW1ldGVyTmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYVxuICAgIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgLy8gb3IgVSswMDNEICg9KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICBsZXQgcGFyYW1ldGVyTmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJzsnICYmIGNoYXIgIT09ICc9JyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA0LiBTZXQgcGFyYW1ldGVyTmFtZSB0byBwYXJhbWV0ZXJOYW1lLCBpbiBBU0NJSVxuICAgIC8vIGxvd2VyY2FzZS5cbiAgICBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuOlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgLy8gMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgICAvLyBVKzAwM0IgKDspLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJzsnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0QgKD0pLilcbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgICB9XG5cbiAgICAvLyA2LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIC8vIDcuIExldCBwYXJhbWV0ZXJWYWx1ZSBiZSBudWxsLlxuICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IG51bGxcblxuICAgIC8vIDguIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgIC8vIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGFuIEhUVFAgcXVvdGVkIHN0cmluZyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvblxuICAgICAgLy8gYW5kIHRoZSBleHRyYWN0LXZhbHVlIGZsYWcuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcoaW5wdXQsIHBvc2l0aW9uLCB0cnVlKVxuXG4gICAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90XG4gICAgICAvLyBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAvLyA5LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAgIC8vIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgICAgLy8gMi4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBwYXJhbWV0ZXJWYWx1ZS5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UocGFyYW1ldGVyVmFsdWUsIGZhbHNlLCB0cnVlKVxuXG4gICAgICAvLyAzLiBJZiBwYXJhbWV0ZXJWYWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBzb2xlbHkgY29udGFpbnMgSFRUUCB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gcGFyYW1ldGVyVmFsdWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgcXVvdGVkLXN0cmluZyB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gZG9lcyBub3QgZXhpc3RcbiAgICAvLyB0aGVuIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSB0byBwYXJhbWV0ZXJWYWx1ZS5cbiAgICBpZiAoXG4gICAgICBwYXJhbWV0ZXJOYW1lLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QocGFyYW1ldGVyTmFtZSkgJiZcbiAgICAgIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDAgfHwgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUy50ZXN0KHBhcmFtZXRlclZhbHVlKSkgJiZcbiAgICAgICFtaW1lVHlwZS5wYXJhbWV0ZXJzLmhhcyhwYXJhbWV0ZXJOYW1lKVxuICAgICkge1xuICAgICAgbWltZVR5cGUucGFyYW1ldGVycy5zZXQocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNmb3JnaXZpbmctYmFzZTY0LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICovXG5mdW5jdGlvbiBmb3JnaXZpbmdCYXNlNjQgKGRhdGEpIHtcbiAgLy8gMS4gUmVtb3ZlIGFsbCBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gZGF0YS5cbiAgZGF0YSA9IGRhdGEucmVwbGFjZShBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVgsICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGxldCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGhcbiAgLy8gMi4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gbm8gcmVtYWluZGVyLCB0aGVuOlxuICBpZiAoZGF0YUxlbmd0aCAlIDQgPT09IDApIHtcbiAgICAvLyAxLiBJZiBkYXRhIGVuZHMgd2l0aCBvbmUgb3IgdHdvIFUrMDAzRCAoPSkgY29kZSBwb2ludHMsXG4gICAgLy8gdGhlbiByZW1vdmUgdGhlbSBmcm9tIGRhdGEuXG4gICAgaWYgKGRhdGEuY2hhckNvZGVBdChkYXRhTGVuZ3RoIC0gMSkgPT09IDB4MDAzRCkge1xuICAgICAgLS1kYXRhTGVuZ3RoXG4gICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KGRhdGFMZW5ndGggLSAxKSA9PT0gMHgwMDNEKSB7XG4gICAgICAgIC0tZGF0YUxlbmd0aFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIGEgcmVtYWluZGVyIG9mIDEsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhTGVuZ3RoICUgNCA9PT0gMSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDQuIElmIGRhdGEgY29udGFpbnMgYSBjb2RlIHBvaW50IHRoYXQgaXMgbm90IG9uZSBvZlxuICAvLyAgVSswMDJCICgrKVxuICAvLyAgVSswMDJGICgvKVxuICAvLyAgQVNDSUkgYWxwaGFudW1lcmljXG4gIC8vIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICgvW14rLzAtOUEtWmEtel0vLnRlc3QoZGF0YS5sZW5ndGggPT09IGRhdGFMZW5ndGggPyBkYXRhIDogZGF0YS5zdWJzdHJpbmcoMCwgZGF0YUxlbmd0aCkpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSwgJ2Jhc2U2NCcpXG4gIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZVx1MjAxOXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBlXHUyMDE5cyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIFx1MjE5MiB2YWx1ZSBvZiBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VycmVuY2Ugb2YgVSswMDIyIChcIikgb3JcbiAgICAgIC8vICAgIFUrMDA1QyAoXFwpIGluIHZhbHVlIHdpdGggVSswMDVDIChcXCkuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhcXFxcfFwiKS9nLCAnXFxcXCQxJylcblxuICAgICAgLy8gMi4gUHJlcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlID0gJ1wiJyArIHZhbHVlXG5cbiAgICAgIC8vIDMuIEFwcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9ICdcIidcbiAgICB9XG5cbiAgICAvLyA1LiBBcHBlbmQgdmFsdWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IHZhbHVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gc2VyaWFsaXphdGlvbi5cbiAgcmV0dXJuIHNlcmlhbGl6YXRpb25cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2UgKGNoYXIpIHtcbiAgLy8gXCJcXHJcXG5cXHQgXCJcbiAgcmV0dXJuIGNoYXIgPT09IDB4MDBkIHx8IGNoYXIgPT09IDB4MDBhIHx8IGNoYXIgPT09IDB4MDA5IHx8IGNoYXIgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsZWFkaW5nPXRydWVdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmFpbGluZz10cnVlXVxuICovXG5mdW5jdGlvbiByZW1vdmVIVFRQV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0hUVFBXaGl0ZVNwYWNlKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIC8vIFwiXFxyXFxuXFx0XFxmIFwiXG4gIHJldHVybiBjaGFyID09PSAweDAwZCB8fCBjaGFyID09PSAweDAwYSB8fCBjaGFyID09PSAweDAwOSB8fCBjaGFyID09PSAweDAwYyB8fCBjaGFyID09PSAweDAyMFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWxlYWRpbmctYW5kLXRyYWlsaW5nLWFzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlYWRpbmc9dHJ1ZV1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYWlsaW5nPXRydWVdXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0FTQ0lJV2hpdGVzcGFjZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKHN0ciwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgc3RyLmxlbmd0aCAmJiBwcmVkaWNhdGUoc3RyLmNoYXJDb2RlQXQobGVhZCkpKSBsZWFkKytcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIHdoaWxlICh0cmFpbCA+IDAgJiYgcHJlZGljYXRlKHN0ci5jaGFyQ29kZUF0KHRyYWlsKSkpIHRyYWlsLS1cbiAgfVxuXG4gIHJldHVybiBsZWFkID09PSAwICYmIHRyYWlsID09PSBzdHIubGVuZ3RoIC0gMSA/IHN0ciA6IHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNEZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIFRvIGlzb21vcnBoaWMgZGVjb2RlIGEgYnl0ZSBzZXF1ZW5jZSBpbnB1dCwgcmV0dXJuIGEgc3RyaW5nIHdob3NlIGNvZGUgcG9pbnRcbiAgLy8gICAgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBsZW5ndGggYW5kIHdob3NlIGNvZGUgcG9pbnRzIGhhdmUgdGhlIHNhbWUgdmFsdWVzXG4gIC8vICAgIGFzIHRoZSB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGJ5dGVzLCBpbiB0aGUgc2FtZSBvcmRlci5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIGlmICgoMiA8PCAxNSkgLSAxID4gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgaW5wdXQpXG4gIH1cbiAgbGV0IHJlc3VsdCA9ICcnOyBsZXQgaSA9IDBcbiAgbGV0IGFkZGl0aW9uID0gKDIgPDwgMTUpIC0gMVxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGlmIChpICsgYWRkaXRpb24gPiBsZW5ndGgpIHtcbiAgICAgIGFkZGl0aW9uID0gbGVuZ3RoIC0gaVxuICAgIH1cbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBpbnB1dC5zdWJhcnJheShpLCBpICs9IGFkZGl0aW9uKSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbmltaXplLWEtc3VwcG9ydGVkLW1pbWUtdHlwZVxuICogQHBhcmFtIHtFeGNsdWRlPFJldHVyblR5cGU8dHlwZW9mIHBhcnNlTUlNRVR5cGU+LCAnZmFpbHVyZSc+fSBtaW1lVHlwZVxuICovXG5mdW5jdGlvbiBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIChtaW1lVHlwZSkge1xuICBzd2l0Y2ggKG1pbWVUeXBlLmVzc2VuY2UpIHtcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9lY21hc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQnOlxuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9lY21hc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQnOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMCc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS4xJzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjInOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMyc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS40JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjUnOlxuICAgIGNhc2UgJ3RleHQvanNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9saXZlc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L3gtZWNtYXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC94LWphdmFzY3JpcHQnOlxuICAgICAgLy8gMS4gSWYgbWltZVR5cGUgaXMgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZSwgdGhlbiByZXR1cm4gXCJ0ZXh0L2phdmFzY3JpcHRcIi5cbiAgICAgIHJldHVybiAndGV4dC9qYXZhc2NyaXB0J1xuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxuICAgIGNhc2UgJ3RleHQvanNvbic6XG4gICAgICAvLyAyLiBJZiBtaW1lVHlwZSBpcyBhIEpTT04gTUlNRSB0eXBlLCB0aGVuIHJldHVybiBcImFwcGxpY2F0aW9uL2pzb25cIi5cbiAgICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgICBjYXNlICdpbWFnZS9zdmcreG1sJzpcbiAgICAgIC8vIDMuIElmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwiaW1hZ2Uvc3ZnK3htbFwiLCB0aGVuIHJldHVybiBcImltYWdlL3N2Zyt4bWxcIi5cbiAgICAgIHJldHVybiAnaW1hZ2Uvc3ZnK3htbCdcbiAgICBjYXNlICd0ZXh0L3htbCc6XG4gICAgY2FzZSAnYXBwbGljYXRpb24veG1sJzpcbiAgICAgIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlIGlzIGEgSlNPTiBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiLlxuICBpZiAobWltZVR5cGUuc3VidHlwZS5lbmRzV2l0aCgnK2pzb24nKSkge1xuICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgfVxuXG4gIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gIGlmIChtaW1lVHlwZS5zdWJ0eXBlLmVuZHNXaXRoKCcreG1sJykpIHtcbiAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDUuIElmIG1pbWVUeXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgdXNlciBhZ2VudCwgdGhlbiByZXR1cm4gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gIC8vIFRlY2huaWNhbGx5LCBub2RlIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgbWltZXR5cGVzLlxuXG4gIC8vIDYuIFJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICByZXR1cm4gJydcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRhdGFVUkxQcm9jZXNzb3IsXG4gIFVSTFNlcmlhbGl6ZXIsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0LFxuICBzdHJpbmdQZXJjZW50RGVjb2RlLFxuICBwYXJzZU1JTUVUeXBlLFxuICBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLFxuICBzZXJpYWxpemVBTWltZVR5cGUsXG4gIHJlbW92ZUNoYXJzLFxuICByZW1vdmVIVFRQV2hpdGVzcGFjZSxcbiAgbWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZSxcbiAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLFxuICBpc29tb3JwaGljRGVjb2RlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdHlwZXMsIGluc3BlY3QgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IG1hcmtBc1VuY2xvbmVhYmxlIH0gPSByZXF1aXJlKCdub2RlOndvcmtlcl90aHJlYWRzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi8uLi90eXBlcy93ZWJpZGwnKS5XZWJpZGx9ICovXG5jb25zdCB3ZWJpZGwgPSB7fVxud2ViaWRsLmNvbnZlcnRlcnMgPSB7fVxud2ViaWRsLnV0aWwgPSB7fVxud2ViaWRsLmVycm9ycyA9IHt9XG5cbndlYmlkbC5lcnJvcnMuZXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYCR7bWVzc2FnZS5oZWFkZXJ9OiAke21lc3NhZ2UubWVzc2FnZX1gKVxufVxuXG53ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCBwbHVyYWwgPSBjb250ZXh0LnR5cGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJyBvbmUgb2YnXG4gIGNvbnN0IG1lc3NhZ2UgPVxuICAgIGAke2NvbnRleHQuYXJndW1lbnR9IGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG9gICtcbiAgICBgJHtwbHVyYWx9OiAke2NvbnRleHQudHlwZXMuam9pbignLCAnKX0uYFxuXG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbndlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2U6IGBcIiR7Y29udGV4dC52YWx1ZX1cIiBpcyBhbiBpbnZhbGlkICR7Y29udGV4dC50eXBlfS5gXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaW1wbGVtZW50c1xud2ViaWRsLmJyYW5kQ2hlY2sgPSBmdW5jdGlvbiAoViwgSSwgb3B0cykge1xuICBpZiAob3B0cz8uc3RyaWN0ICE9PSBmYWxzZSkge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBJKSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChWPy5bU3ltYm9sLnRvU3RyaW5nVGFnXSAhPT0gSS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbndlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrID0gZnVuY3Rpb24gKHsgbGVuZ3RoIH0sIG1pbiwgY3R4KSB7XG4gIGlmIChsZW5ndGggPCBtaW4pIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBtZXNzYWdlOiBgJHttaW59IGFyZ3VtZW50JHttaW4gIT09IDEgPyAncycgOiAnJ30gcmVxdWlyZWQsIGAgK1xuICAgICAgICAgICAgICAgYGJ1dCR7bGVuZ3RoID8gJyBvbmx5JyA6ICcnfSAke2xlbmd0aH0gZm91bmQuYCxcbiAgICAgIGhlYWRlcjogY3R4XG4gICAgfSlcbiAgfVxufVxuXG53ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiAnVHlwZUVycm9yJyxcbiAgICBtZXNzYWdlOiAnSWxsZWdhbCBjb25zdHJ1Y3RvcidcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWRhdGEtdHlwZXMtYW5kLXZhbHVlc1xud2ViaWRsLnV0aWwuVHlwZSA9IGZ1bmN0aW9uIChWKSB7XG4gIHN3aXRjaCAodHlwZW9mIFYpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gJ1VuZGVmaW5lZCdcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuICdCb29sZWFuJ1xuICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiAnU3RyaW5nJ1xuICAgIGNhc2UgJ3N5bWJvbCc6IHJldHVybiAnU3ltYm9sJ1xuICAgIGNhc2UgJ251bWJlcic6IHJldHVybiAnTnVtYmVyJ1xuICAgIGNhc2UgJ2JpZ2ludCc6IHJldHVybiAnQmlnSW50J1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ051bGwnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnT2JqZWN0J1xuICAgIH1cbiAgfVxufVxuXG53ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSA9IG1hcmtBc1VuY2xvbmVhYmxlIHx8ICgoKSA9PiB7fSlcbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzKSB7XG4gIGxldCB1cHBlckJvdW5kXG4gIGxldCBsb3dlckJvdW5kXG5cbiAgLy8gMS4gSWYgYml0TGVuZ3RoIGlzIDY0LCB0aGVuOlxuICBpZiAoYml0TGVuZ3RoID09PSA2NCkge1xuICAgIC8vIDEuIExldCB1cHBlckJvdW5kIGJlIDJeNTMgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIDUzKSAtIDFcblxuICAgIC8vIDIuIElmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuIGxldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAgIGxvd2VyQm91bmQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSBsZXQgbG93ZXJCb3VuZCBiZSBcdTIyMTIyXjUzICsgMS5cbiAgICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgNTMpICsgMVxuICAgIH1cbiAgfSBlbHNlIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbjpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgbG93ZXJCb3VuZCA9IDBcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIC0yXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIGJpdExlbmd0aCkgLSAxXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMSBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSkgLSAxXG4gIH1cblxuICAvLyA0LiBMZXQgeCBiZSA/IFRvTnVtYmVyKFYpLlxuICBsZXQgeCA9IE51bWJlcihWKVxuXG4gIC8vIDUuIElmIHggaXMgXHUyMjEyMCwgdGhlbiBzZXQgeCB0byArMC5cbiAgaWYgKHggPT09IDApIHtcbiAgICB4ID0gMFxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbRW5mb3JjZVJhbmdlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmIChvcHRzPy5lbmZvcmNlUmFuZ2UgPT09IHRydWUpIHtcbiAgICAvLyAxLiBJZiB4IGlzIE5hTiwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBjb252ZXJ0ICR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSB0byBhbiBpbnRlZ2VyLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gICAgeCA9IHdlYmlkbC51dGlsLkludGVnZXJQYXJ0KHgpXG5cbiAgICAvLyAzLiBJZiB4IDwgbG93ZXJCb3VuZCBvciB4ID4gdXBwZXJCb3VuZCwgdGhlblxuICAgIC8vICAgIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdJbnRlZ2VyIGNvbnZlcnNpb24nLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgbXVzdCBiZSBiZXR3ZWVuICR7bG93ZXJCb3VuZH0tJHt1cHBlckJvdW5kfSwgZ290ICR7eH0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gNy4gSWYgeCBpcyBub3QgTmFOIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJRExcbiAgLy8gICAgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIFtDbGFtcF0gZXh0ZW5kZWRcbiAgLy8gICAgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAoIU51bWJlci5pc05hTih4KSAmJiBvcHRzPy5jbGFtcCA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIFNldCB4IHRvIG1pbihtYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpLlxuICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZClcblxuICAgIC8vIDIuIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlXG4gICAgLy8gICAgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byxcbiAgICAvLyAgICBhbmQgY2hvb3NpbmcgKzAgcmF0aGVyIHRoYW4gXHUyMjEyMC5cbiAgICBpZiAoTWF0aC5mbG9vcih4KSAlIDIgPT09IDApIHtcbiAgICAgIHggPSBNYXRoLmZsb29yKHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBNYXRoLmNlaWwoeClcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gOC4gSWYgeCBpcyBOYU4sICswLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gcmV0dXJuICswLlxuICBpZiAoXG4gICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgKHggPT09IDAgJiYgT2JqZWN0LmlzKDAsIHgpKSB8fFxuICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICApIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gOS4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gIC8vIDEwLiBTZXQgeCB0byB4IG1vZHVsbyAyXmJpdExlbmd0aC5cbiAgeCA9IHggJSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG5cbiAgLy8gMTEuIElmIHNpZ25lZG5lc3MgaXMgXCJzaWduZWRcIiBhbmQgeCBcdTIyNjUgMl5iaXRMZW5ndGggXHUyMjEyIDEsXG4gIC8vICAgIHRoZW4gcmV0dXJuIHggXHUyMjEyIDJeYml0TGVuZ3RoLlxuICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3NpZ25lZCcgJiYgeCA+PSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMSkge1xuICAgIHJldHVybiB4IC0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuICB9XG5cbiAgLy8gMTIuIE90aGVyd2lzZSwgcmV0dXJuIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtaW50ZWdlcnBhcnRcbndlYmlkbC51dGlsLkludGVnZXJQYXJ0ID0gZnVuY3Rpb24gKG4pIHtcbiAgLy8gMS4gTGV0IHIgYmUgZmxvb3IoYWJzKG4pKS5cbiAgY29uc3QgciA9IE1hdGguZmxvb3IoTWF0aC5hYnMobikpXG5cbiAgLy8gMi4gSWYgbiA8IDAsIHRoZW4gcmV0dXJuIC0xIFx1MDBENyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG53ZWJpZGwudXRpbC5TdHJpbmdpZnkgPSBmdW5jdGlvbiAoVikge1xuICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShWKVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgICByZXR1cm4gYFN5bWJvbCgke1YuZGVzY3JpcHRpb259KWBcbiAgICBjYXNlICdPYmplY3QnOlxuICAgICAgcmV0dXJuIGluc3BlY3QoVilcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgcmV0dXJuIGBcIiR7Vn1cImBcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAke1Z9YFxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtc2VxdWVuY2VcbndlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWLCBwcmVmaXgsIGFyZ3VtZW50LCBJdGVyYWJsZSkgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gKCR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSkgaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSB0eXBlb2YgSXRlcmFibGUgPT09ICdmdW5jdGlvbicgPyBJdGVyYWJsZSgpIDogVj8uW1N5bWJvbC5pdGVyYXRvcl0/LigpXG4gICAgY29uc3Qgc2VxID0gW11cbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICAvLyAzLiBJZiBtZXRob2QgaXMgdW5kZWZpbmVkLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBtZXRob2QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdHlwZW9mIG1ldGhvZC5uZXh0ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH1bJHtpbmRleCsrfV1gKSlcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy10by1yZWNvcmRcbndlYmlkbC5yZWNvcmRDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoa2V5Q29udmVydGVyLCB2YWx1ZUNvbnZlcnRlcikge1xuICByZXR1cm4gKE8sIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IHByZWZpeCxcbiAgICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IChcIiR7d2ViaWRsLnV0aWwuVHlwZShPKX1cIikgaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LlxuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBpZiAoIXR5cGVzLmlzUHJveHkoTykpIHtcbiAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS5cbiAgICAgIGNvbnN0IGtleXMgPSBbLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTyksIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTyldXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5LCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSwgcHJlZml4LCBhcmd1bWVudClcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXksIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCwgb3B0cykgPT4ge1xuICAgIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIGkpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpIHRvIGJlIGFuIGluc3RhbmNlIG9mICR7aS5uYW1lfS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBWXG4gIH1cbn1cblxud2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVycykge1xuICByZXR1cm4gKGRpY3Rpb25hcnksIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShkaWN0aW9uYXJ5KVxuICAgIGNvbnN0IGRpY3QgPSB7fVxuXG4gICAgaWYgKHR5cGUgPT09ICdOdWxsJyB8fCB0eXBlID09PSAnVW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRpY3RcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtkaWN0aW9uYXJ5fSB0byBiZSBvbmUgb2Y6IE51bGwsIFVuZGVmaW5lZCwgT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvcHRpb25zIG9mIGNvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnN0IHsga2V5LCBkZWZhdWx0VmFsdWUsIHJlcXVpcmVkLCBjb252ZXJ0ZXIgfSA9IG9wdGlvbnNcblxuICAgICAgaWYgKHJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093bihkaWN0aW9uYXJ5LCBrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBrZXkgXCIke2tleX1cIi5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWUgPSBkaWN0aW9uYXJ5W2tleV1cbiAgICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBPYmplY3QuaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA/Pz0gZGVmYXVsdFZhbHVlKClcbiAgICAgIH1cblxuICAgICAgLy8gQSBrZXkgY2FuIGJlIG9wdGlvbmFsIGFuZCBoYXZlIG5vIGRlZmF1bHQgdmFsdWUuXG4gICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZG8gbm90IHBlcmZvcm0gYSBjb252ZXJzaW9uLFxuICAgICAgLy8gYW5kIGRvIG5vdCBhc3NpZ24gdGhlIGtleSBhIHZhbHVlLlxuICAgICAgaWYgKHJlcXVpcmVkIHx8IGhhc0RlZmF1bHQgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH0uJHtrZXl9YClcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkVmFsdWVzICYmXG4gICAgICAgICAgIW9wdGlvbnMuYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt2YWx1ZX0gaXMgbm90IGFuIGFjY2VwdGVkIHR5cGUuIEV4cGVjdGVkIG9uZSBvZiAke29wdGlvbnMuYWxsb3dlZFZhbHVlcy5qb2luKCcsICcpfS5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpY3RcbiAgfVxufVxuXG53ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCkgPT4ge1xuICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gVlxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0ZXIoViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLURPTVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgViBpcyBudWxsIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZVxuICAvLyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFtMZWdhY3lOdWxsVG9FbXB0eVN0cmluZ11cbiAgLy8gICAgZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuIHJldHVybiB0aGUgRE9NU3RyaW5nIHZhbHVlXG4gIC8vICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoViA9PT0gbnVsbCAmJiBvcHRzPy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IGlzIGEgc3ltYm9sLCB3aGljaCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgRE9NU3RyaW5nLmBcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBhcmd1bWVudCkge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbi8vIFRPRE86IHJld3JpdGUgdGhpcyBzbyB3ZSBjYW4gY29udHJvbCB0aGUgZXJyb3JzIHRocm93blxud2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nID0gdG9VU1ZTdHJpbmdcblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ib29sZWFuXG53ZWJpZGwuY29udmVydGVycy5ib29sZWFuID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgVG9Cb29sZWFuKFYpLlxuICBjb25zdCB4ID0gQm9vbGVhbihWKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGJvb2xlYW4gdmFsdWUgdGhhdCBpcyB0aGUgb25lIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSB0cnV0aCB2YWx1ZSBhcyB0aGUgRUNNQVNjcmlwdCBCb29sZWFuIHZhbHVlIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYW55XG53ZWJpZGwuY29udmVydGVycy5hbnkgPSBmdW5jdGlvbiAoVikge1xuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwic2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAnc2lnbmVkJywgdW5kZWZpbmVkLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGxvbmcgbG9uZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtc2hvcnRcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMTYsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMTYsICd1bnNpZ25lZCcsIG9wdHMsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgc2hvcnQgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpZGwtQXJyYXlCdWZmZXJcbndlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzPy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICBpZiAoVi5yZXNpemFibGUgfHwgVi5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBUXHUyMDE5cyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHtuYW1lfSAoXCIke3dlYmlkbC51dGlsLlN0cmluZ2lmeShWKX1cIilgLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDUuIFJldHVybiB0aGUgSURMIHZhbHVlIG9mIHR5cGUgVCB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIG5hbWUsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW0RhdGFWaWV3XV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8ICF0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICBtZXNzYWdlOiBgJHtuYW1lfSBpcyBub3QgYSBEYXRhVmlldy5gXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIERhdGFWaWV3IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jQnVmZmVyU291cmNlXG53ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIGlmICh0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyKFYsIHByZWZpeCwgbmFtZSwgeyAuLi5vcHRzLCBhbGxvd1NoYXJlZDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmICh0eXBlcy5pc1R5cGVkQXJyYXkoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheShWLCBWLmNvbnN0cnVjdG9yLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgIHByZWZpeCxcbiAgICBhcmd1bWVudDogYCR7bmFtZX0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICB0eXBlczogWydCdWZmZXJTb3VyY2UnXVxuICB9KVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ25vZGU6emxpYicpXG5jb25zdCB7IHJlZGlyZWN0U3RhdHVzU2V0LCByZWZlcnJlclBvbGljeVNldDogcmVmZXJyZXJQb2xpY3lUb2tlbnMsIGJhZFBvcnRzU2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzLCBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLCByZW1vdmVDaGFycywgcGFyc2VNSU1FVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IHBlcmZvcm1hbmNlIH0gPSByZXF1aXJlKCdub2RlOnBlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCBSZWFkYWJsZVN0cmVhbUZyb20sIGlzVmFsaWRIVFRQVG9rZW4sIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCdub2RlOnV0aWwvdHlwZXMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbiAgY29uc3QgcG9zc2libGVSZWxldmFudEhhc2hlcyA9IFsnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInXVxuICBzdXBwb3J0ZWRIYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCkuZmlsdGVyKChoYXNoKSA9PiBwb3NzaWJsZVJlbGV2YW50SGFzaGVzLmluY2x1ZGVzKGhhc2gpKVxuLyogYzggaWdub3JlIG5leHQgMyAqL1xufSBjYXRjaCB7XG5cbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VVUkwgKHJlc3BvbnNlKSB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZXNcbiAgLy8gQSByZXNwb25zZSBoYXMgYW4gYXNzb2NpYXRlZCBVUkwuIEl0IGlzIGEgcG9pbnRlciB0byB0aGUgbGFzdCBVUkxcbiAgLy8gaW4gcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGFuZCBudWxsIGlmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eS5cbiAgY29uc3QgdXJsTGlzdCA9IHJlc3BvbnNlLnVybExpc3RcbiAgY29uc3QgbGVuZ3RoID0gdXJsTGlzdC5sZW5ndGhcbiAgcmV0dXJuIGxlbmd0aCA9PT0gMCA/IG51bGwgOiB1cmxMaXN0W2xlbmd0aCAtIDFdLnRvU3RyaW5nKClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtbG9jYXRpb24tdXJsXG5mdW5jdGlvbiByZXNwb25zZUxvY2F0aW9uVVJMIChyZXNwb25zZSwgcmVxdWVzdEZyYWdtZW50KSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHJldHVybiBudWxsLlxuICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDIuIExldCBsb2NhdGlvbiBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuXG4gIC8vIGBMb2NhdGlvbmAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgbGV0IGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdsb2NhdGlvbicsIHRydWUpXG5cbiAgLy8gMy4gSWYgbG9jYXRpb24gaXMgYSBoZWFkZXIgdmFsdWUsIHRoZW4gc2V0IGxvY2F0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgcGFyc2luZyBsb2NhdGlvbiB3aXRoIHJlc3BvbnNlXHUyMDE5cyBVUkwuXG4gIGlmIChsb2NhdGlvbiAhPT0gbnVsbCAmJiBpc1ZhbGlkSGVhZGVyVmFsdWUobG9jYXRpb24pKSB7XG4gICAgaWYgKCFpc1ZhbGlkRW5jb2RlZFVSTChsb2NhdGlvbikpIHtcbiAgICAgIC8vIFNvbWUgd2Vic2l0ZXMgcmVzcG9uZCBsb2NhdGlvbiBoZWFkZXIgaW4gVVRGLTggZm9ybSB3aXRob3V0IGVuY29kaW5nIHRoZW0gYXMgQVNDSUlcbiAgICAgIC8vIGFuZCBtYWpvciBicm93c2VycyByZWRpcmVjdCB0aGVtIHRvIGNvcnJlY3RseSBVVEYtOCBlbmNvZGVkIGFkZHJlc3Nlcy5cbiAgICAgIC8vIEhlcmUsIHdlIGhhbmRsZSB0aGF0IGJlaGF2aW9yIGluIHRoZSBzYW1lIHdheS5cbiAgICAgIGxvY2F0aW9uID0gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4KGxvY2F0aW9uKVxuICAgIH1cbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9uXHUyMDE5c1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMTczOCNzZWN0aW9uLTIuMlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbmNvZGVkVVJMICh1cmwpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmwubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gdXJsLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPiAweDdFIHx8IC8vIE5vbi1VUy1BU0NJSSArIERFTFxuICAgICAgY29kZSA8IDB4MjAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzIE5VTCAtIFVTXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBJZiBzdHJpbmcgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGFzc3VtZXMgaXQncyBVVEYtOCBlbmNvZGVkIGFuZCBkZWNvZGVzIGl0LlxuICogU2luY2UgVVRGLTggaXMgYSBzdXBlcnNldCBvZiBBU0NJSSwgdGhpcyB3aWxsIHdvcmsgZm9yIEFTQ0lJIHN0cmluZ3MgYXMgd2VsbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4ICh2YWx1ZSkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsICdiaW5hcnknKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJsXHUyMDE5cyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gaXNWYWxpZEhUVFBUb2tlblxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci12YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gLSBIYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBIVFRQIHRhYiBvciBzcGFjZSBieXRlcy5cbiAgLy8gLSBDb250YWlucyBubyAweDAwIChOVUwpIG9yIEhUVFAgbmV3bGluZSBieXRlcy5cbiAgcmV0dXJuIChcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJ1xcdCcgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJyAnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICdcXHQnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICcgJyB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXG4nKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXHInKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXDAnKVxuICApID09PSBmYWxzZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc2V0LXJlcXVlc3RzLXJlZmVycmVyLXBvbGljeS1vbi1yZWRpcmVjdFxuZnVuY3Rpb24gc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCAocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpIHtcbiAgLy8gIEdpdmVuIGEgcmVxdWVzdCByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlIGFjdHVhbFJlc3BvbnNlLCB0aGlzIGFsZ29yaXRobVxuICAvLyAgdXBkYXRlcyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgYWNjb3JkaW5nIHRvIHRoZSBSZWZlcnJlci1Qb2xpY3lcbiAgLy8gIGhlYWRlciAoaWYgYW55KSBpbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyAxLiBMZXQgcG9saWN5IGJlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIFx1MDBBNyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JywgdHJ1ZSkgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHJcdTIwMTlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHJcdTIwMTlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiByXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlciwgdHJ1ZSlcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXG4gIC8vICAgIHdpdGggcmVxdWVzdC5cbiAgLy8gVE9ETzogaW1wbGVtZW50IFwiYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXCJcbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIC0gXCInY2xpZW50JyBpcyBjaGFuZ2VkIHRvIGFuIG9yaWdpbiBkdXJpbmcgZmV0Y2hpbmcuXCJcbiAgLy8gICBUaGlzIGRvZXNuJ3QgaGFwcGVuIGluIHVuZGljaSAoaW4gbW9zdCBjYXNlcykgYmVjYXVzZSB1bmRpY2ksIGJ5IGRlZmF1bHQsXG4gIC8vICAgaGFzIG5vIGNvbmNlcHQgb2Ygb3JpZ2luLlxuICAvLyAtIHJlcXVlc3Qub3JpZ2luIGNhbiBhbHNvIGJlIHNldCB0byByZXF1ZXN0LmNsaWVudC5vcmlnaW4gKGNsaWVudCBiZWluZ1xuICAvLyAgIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCksIHdoaWNoIGlzIHVuZGVmaW5lZCB3aXRob3V0IHVzaW5nXG4gIC8vICAgc2V0R2xvYmFsT3JpZ2luLlxuICBpZiAoc2VyaWFsaXplZE9yaWdpbiA9PT0gJ2NsaWVudCcgfHwgc2VyaWFsaXplZE9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBvciByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwid2Vic29ja2V0XCIsXG4gIC8vICAgIHRoZW4gYXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbiwgdHJ1ZSlcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZFxuICAgICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0XG4gICAgICAgIC8vIHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXNcbiAgICAgICAgLy8gb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4sIHRydWUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2hyLXRpbWUvI2Rmbi1jb2Fyc2VuLXRpbWVcbmZ1bmN0aW9uIGNvYXJzZW5UaW1lICh0aW1lc3RhbXAsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHRpbWVzdGFtcFxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY2xhbXAtYW5kLWNvYXJzZW4tY29ubmVjdGlvbi10aW1pbmctaW5mb1xuZnVuY3Rpb24gY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8gKGNvbm5lY3Rpb25UaW1pbmdJbmZvLCBkZWZhdWx0U3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICBpZiAoIWNvbm5lY3Rpb25UaW1pbmdJbmZvPy5zdGFydFRpbWUgfHwgY29ubmVjdGlvblRpbWluZ0luZm8uc3RhcnRUaW1lIDwgZGVmYXVsdFN0YXJ0VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGRlZmF1bHRTdGFydFRpbWUsXG4gICAgICBkb21haW5Mb29rdXBFbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgY29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIGNvbm5lY3Rpb25FbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvPy5BTFBOTmVnb3RpYXRlZFByb3RvY29sXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cFN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIGRvbWFpbkxvb2t1cEVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cEVuZFRpbWUsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSxcbiAgICBjb25uZWN0aW9uU3RhcnRUaW1lOiBjb2Fyc2VuVGltZShjb25uZWN0aW9uVGltaW5nSW5mby5jb25uZWN0aW9uU3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgY29ubmVjdGlvbkVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmNvbm5lY3Rpb25FbmRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogY29hcnNlblRpbWUoY29ubmVjdGlvblRpbWluZ0luZm8uc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvLkFMUE5OZWdvdGlhdGVkUHJvdG9jb2xcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vaHItdGltZS8jZGZuLWNvYXJzZW5lZC1zaGFyZWQtY3VycmVudC10aW1lXG5mdW5jdGlvbiBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSAoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpIHtcbiAgcmV0dXJuIGNvYXJzZW5UaW1lKHBlcmZvcm1hbmNlLm5vdygpLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1hbi1vcGFxdWUtdGltaW5nLWluZm9cbmZ1bmN0aW9uIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8gKHRpbWluZ0luZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgcmVkaXJlY3RTdGFydFRpbWU6IDAsXG4gICAgcmVkaXJlY3RFbmRUaW1lOiAwLFxuICAgIHBvc3RSZWRpcmVjdFN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICBmaW5hbFNlcnZpY2VXb3JrZXJTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVzcG9uc2VTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZTogMCxcbiAgICBlbmRUaW1lOiAwLFxuICAgIGVuY29kZWRCb2R5U2l6ZTogMCxcbiAgICBkZWNvZGVkQm9keVNpemU6IDAsXG4gICAgZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbzogbnVsbFxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3BvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIG1ha2VQb2xpY3lDb250YWluZXIgKCkge1xuICAvLyBOb3RlOiB0aGUgZmV0Y2ggc3BlYyBkb2Vzbid0IG1ha2UgdXNlIG9mIGVtYmVkZGVyIHBvbGljeSBvciBDU1AgbGlzdFxuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNjbG9uZS1hLXBvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIGNsb25lUG9saWN5Q29udGFpbmVyIChwb2xpY3lDb250YWluZXIpIHtcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogcG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI2RldGVybWluZS1yZXF1ZXN0cy1yZWZlcnJlclxuZnVuY3Rpb24gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgcG9saWN5IGJlIHJlcXVlc3QncyByZWZlcnJlciBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeSA9IHJlcXVlc3QucmVmZXJyZXJQb2xpY3lcblxuICAvLyBOb3RlOiBwb2xpY3kgY2Fubm90IChzaG91bGRuJ3QpIGJlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICBhc3NlcnQocG9saWN5KVxuXG4gIC8vIDIuIExldCBlbnZpcm9ubWVudCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnQuXG5cbiAgbGV0IHJlZmVycmVyU291cmNlID0gbnVsbFxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlcjpcbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gTm90ZTogbm9kZSBpc24ndCBhIGJyb3dzZXIgYW5kIGRvZXNuJ3QgaW1wbGVtZW50IGRvY3VtZW50L2lmcmFtZXMsXG4gICAgLy8gc28gd2UgYnlwYXNzIHRoaXMgc3RlcCBhbmQgcmVwbGFjZSBpdCB3aXRoIG91ciBvd24uXG5cbiAgICBjb25zdCBnbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgaWYgKCFnbG9iYWxPcmlnaW4gfHwgZ2xvYmFsT3JpZ2luLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgIH1cblxuICAgIC8vIG5vdGU6IHdlIG5lZWQgdG8gY2xvbmUgaXQgYXMgaXQncyBtdXRhdGVkXG4gICAgcmVmZXJyZXJTb3VyY2UgPSBuZXcgVVJMKGdsb2JhbE9yaWdpbilcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgLy8gTGV0IHJlZmVycmVyU291cmNlIGJlIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgIHJlZmVycmVyU291cmNlID0gcmVxdWVzdC5yZWZlcnJlclxuICB9XG5cbiAgLy8gNC4gTGV0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyVVJMIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvclxuICAvLyAgICB1c2UgYXMgYSByZWZlcnJlci5cbiAgbGV0IHJlZmVycmVyVVJMID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSlcblxuICAvLyA1LiBMZXQgcmVmZXJyZXJPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yIHVzZSBhc1xuICAvLyAgICBhIHJlZmVycmVyLCB3aXRoIHRoZSBvcmlnaW4tb25seSBmbGFnIHNldCB0byB0cnVlLlxuICBjb25zdCByZWZlcnJlck9yaWdpbiA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG5cbiAgLy8gNi4gSWYgdGhlIHJlc3VsdCBvZiBzZXJpYWxpemluZyByZWZlcnJlclVSTCBpcyBhIHN0cmluZyB3aG9zZSBsZW5ndGggaXNcbiAgLy8gICAgZ3JlYXRlciB0aGFuIDQwOTYsIHNldCByZWZlcnJlclVSTCB0byByZWZlcnJlck9yaWdpbi5cbiAgaWYgKHJlZmVycmVyVVJMLnRvU3RyaW5nKCkubGVuZ3RoID4gNDA5Nikge1xuICAgIHJlZmVycmVyVVJMID0gcmVmZXJyZXJPcmlnaW5cbiAgfVxuXG4gIGNvbnN0IGFyZVNhbWVPcmlnaW4gPSBzYW1lT3JpZ2luKHJlcXVlc3QsIHJlZmVycmVyVVJMKVxuICBjb25zdCBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPSBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmXG4gICAgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZXF1ZXN0LnVybClcblxuICAvLyA4LiBFeGVjdXRlIHRoZSBzd2l0Y2ggc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiBwb2xpY3k6XG4gIHN3aXRjaCAocG9saWN5KSB7XG4gICAgY2FzZSAnb3JpZ2luJzogcmV0dXJuIHJlZmVycmVyT3JpZ2luICE9IG51bGwgPyByZWZlcnJlck9yaWdpbiA6IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG4gICAgY2FzZSAndW5zYWZlLXVybCc6IHJldHVybiByZWZlcnJlclVSTFxuICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJPcmlnaW4gOiAnbm8tcmVmZXJyZXInXG4gICAgY2FzZSAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJVUkwgOiByZWZlcnJlck9yaWdpblxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gMS4gSWYgdGhlIG9yaWdpbiBvZiByZWZlcnJlclVSTCBhbmQgdGhlIG9yaWdpbiBvZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gICAgICAvLyAgICBVUkwgYXJlIHRoZSBzYW1lLCB0aGVuIHJldHVybiByZWZlcnJlclVSTC5cbiAgICAgIGlmIChzYW1lT3JpZ2luKHJlZmVycmVyVVJMLCBjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kIHJlcXVlc3RcdTIwMTlzXG4gICAgICAvLyAgICBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIHRoZW4gcmV0dXJuIG5vXG4gICAgICAvLyAgICByZWZlcnJlci5cbiAgICAgIGlmIChpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICAgIH1cblxuICAgICAgLy8gMy4gUmV0dXJuIHJlZmVycmVyT3JpZ2luLlxuICAgICAgcmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgfVxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgICAqL1xuICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAqL1xuXG4gICAgZGVmYXVsdDogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA/ICduby1yZWZlcnJlcicgOiByZWZlcnJlck9yaWdpblxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc3RyaXAtdXJsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvcmlnaW5Pbmx5XG4gKi9cbmZ1bmN0aW9uIHN0cmlwVVJMRm9yUmVmZXJyZXIgKHVybCwgb3JpZ2luT25seSkge1xuICAvLyAxLiBBc3NlcnQ6IHVybCBpcyBhIFVSTC5cbiAgYXNzZXJ0KHVybCBpbnN0YW5jZW9mIFVSTClcblxuICB1cmwgPSBuZXcgVVJMKHVybClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhIGxvY2FsIHNjaGVtZSwgdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgdXJsLnByb3RvY29sID09PSAnYWJvdXQ6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdibGFuazonKSB7XG4gICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgfVxuXG4gIC8vIDMuIFNldCB1cmxcdTIwMTlzIHVzZXJuYW1lIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC51c2VybmFtZSA9ICcnXG5cbiAgLy8gNC4gU2V0IHVybFx1MjAxOXMgcGFzc3dvcmQgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnBhc3N3b3JkID0gJydcblxuICAvLyA1LiBTZXQgdXJsXHUyMDE5cyBmcmFnbWVudCB0byBudWxsLlxuICB1cmwuaGFzaCA9ICcnXG5cbiAgLy8gNi4gSWYgdGhlIG9yaWdpbi1vbmx5IGZsYWcgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKG9yaWdpbk9ubHkpIHtcbiAgICAvLyAxLiBTZXQgdXJsXHUyMDE5cyBwYXRoIHRvIFx1MDBBQiB0aGUgZW1wdHkgc3RyaW5nIFx1MDBCQi5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybFx1MjAxOXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZVttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCBcdTAwQUIgdmFsdWUgXHUwMEJCKS5cbiAgY29uc3QgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG5cbiAgLy8gMi4gSWYgcmVzdWx0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlJylcbiAgfVxuXG4gIC8vIDMuIEFzc2VydDogcmVzdWx0IGlzIGEgc3RyaW5nLlxuICBhc3NlcnQodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpXG5cbiAgLy8gNC4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSUyNWl0ZXJhdG9ycHJvdG90eXBlJTI1LW9iamVjdFxuY29uc3QgZXNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yIChuYW1lLCBrSW50ZXJuYWxJdGVyYXRvciwga2V5SW5kZXggPSAwLCB2YWx1ZUluZGV4ID0gMSkge1xuICBjbGFzcyBGYXN0SXRlcmFibGVJdGVyYXRvciB7XG4gICAgLyoqIEB0eXBlIHthbnl9ICovXG4gICAgI3RhcmdldFxuICAgIC8qKiBAdHlwZSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9ICovXG4gICAgI2tpbmRcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICAjaW5kZXhcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4tZGVmYXVsdC1pdGVyYXRvci1vYmplY3RcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IHRhcmdldFxuICAgICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciAodGFyZ2V0LCBraW5kKSB7XG4gICAgICB0aGlzLiN0YXJnZXQgPSB0YXJnZXRcbiAgICAgIHRoaXMuI2tpbmQgPSBraW5kXG4gICAgICB0aGlzLiNpbmRleCA9IDBcbiAgICB9XG5cbiAgICBuZXh0ICgpIHtcbiAgICAgIC8vIDEuIExldCBpbnRlcmZhY2UgYmUgdGhlIGludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZXhpc3RzLlxuICAgICAgLy8gMi4gTGV0IHRoaXNWYWx1ZSBiZSB0aGUgdGhpcyB2YWx1ZS5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuICAgICAgLy8gNC4gSWYgb2JqZWN0IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuIHBlcmZvcm0gYSBzZWN1cml0eVxuICAgICAgLy8gICAgY2hlY2ssIHBhc3Npbmc6XG4gICAgICAvLyA1LiBJZiBvYmplY3QgaXMgbm90IGEgZGVmYXVsdCBpdGVyYXRvciBvYmplY3QgZm9yIGludGVyZmFjZSxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAodHlwZW9mIHRoaXMgIT09ICdvYmplY3QnIHx8IHRoaXMgPT09IG51bGwgfHwgISgjdGFyZ2V0IGluIHRoaXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCduZXh0JyBjYWxsZWQgb24gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGludGVyZmFjZSAke25hbWV9IEl0ZXJhdG9yLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBMZXQgaW5kZXggYmUgb2JqZWN0XHUyMDE5cyBpbmRleC5cbiAgICAgIC8vIDcuIExldCBraW5kIGJlIG9iamVjdFx1MjAxOXMga2luZC5cbiAgICAgIC8vIDguIExldCB2YWx1ZXMgYmUgb2JqZWN0XHUyMDE5cyB0YXJnZXQncyB2YWx1ZSBwYWlycyB0byBpdGVyYXRlIG92ZXIuXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2luZGV4XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLiN0YXJnZXRba0ludGVybmFsSXRlcmF0b3JdXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAxMS4gTGV0IHBhaXIgYmUgdGhlIGVudHJ5IGluIHZhbHVlcyBhdCBpbmRleCBpbmRleC5cbiAgICAgIGNvbnN0IHsgW2tleUluZGV4XToga2V5LCBbdmFsdWVJbmRleF06IHZhbHVlIH0gPSB2YWx1ZXNbaW5kZXhdXG5cbiAgICAgIC8vIDEyLiBTZXQgb2JqZWN0XHUyMDE5cyBpbmRleCB0byBpbmRleCArIDEuXG4gICAgICB0aGlzLiNpbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG5cbiAgICAgIC8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaXRlcmF0b3ItcmVzdWx0XG5cbiAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBraW5kOlxuICAgICAgbGV0IHJlc3VsdFxuICAgICAgc3dpdGNoICh0aGlzLiNraW5kKSB7XG4gICAgICAgIGNhc2UgJ2tleSc6XG4gICAgICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWlyXHUyMDE5cyBrZXkuXG4gICAgICAgICAgLy8gMi4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgICAgIHJlc3VsdCA9IGtleVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAna2V5K3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA1LiBMZXQgYXJyYXkgYmUgISBBcnJheUNyZWF0ZSgyKS5cbiAgICAgICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgICAgICAvLyA3LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjFcIiwgdmFsdWUpLlxuICAgICAgICAgIC8vIDguIHJlc3VsdCBpcyBhcnJheS5cbiAgICAgICAgICByZXN1bHQgPSBba2V5LCB2YWx1ZV1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBSZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIGZhbHNlKS5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4taXRlcmF0b3ItcHJvdG90eXBlLW9iamVjdFxuICAvLyBAdHMtaWdub3JlXG4gIGRlbGV0ZSBGYXN0SXRlcmFibGVJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3JcblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRmFzdEl0ZXJhYmxlSXRlcmF0b3IucHJvdG90eXBlLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZhc3RJdGVyYWJsZUl0ZXJhdG9yLnByb3RvdHlwZSwge1xuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgICB9LFxuICAgIG5leHQ6IHsgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9XG4gIH0pXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICogQHJldHVybnMge0l0ZXJhYmxlSXRlcmF0b3I8YW55Pn1cbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBraW5kKSB7XG4gICAgcmV0dXJuIG5ldyBGYXN0SXRlcmFibGVJdGVyYXRvcih0YXJnZXQsIGtpbmQpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge2FueX0gb2JqZWN0IGNsYXNzXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yTWl4aW4gKG5hbWUsIG9iamVjdCwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4ID0gMCwgdmFsdWVJbmRleCA9IDEpIHtcbiAgY29uc3QgbWFrZUl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IobmFtZSwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4LCB2YWx1ZUluZGV4KVxuXG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAga2V5czoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGtleXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleScpXG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ3ZhbHVlJylcbiAgICAgIH1cbiAgICB9LFxuICAgIGVudHJpZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnRyaWVzICgpIHtcbiAgICAgICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgb2JqZWN0KVxuICAgICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKVxuICAgICAgfVxuICAgIH0sXG4gICAgZm9yRWFjaDoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZvckVhY2ggKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIG9iamVjdClcbiAgICAgICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBgJHtuYW1lfS5mb3JFYWNoYClcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFja2ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJyR7bmFtZX0nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB7IDA6IGtleSwgMTogdmFsdWUgfSBvZiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleSt2YWx1ZScpKSB7XG4gICAgICAgICAgY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsIHZhbHVlLCBrZXksIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC4uLnByb3BlcnRpZXMsXG4gICAgW1N5bWJvbC5pdGVyYXRvcl06IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogcHJvcGVydGllcy5lbnRyaWVzLnZhbHVlXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktZnVsbHktcmVhZFxuICovXG5hc3luYyBmdW5jdGlvbiBmdWxseVJlYWRCb2R5IChib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcikge1xuICAvLyAxLiBJZiB0YXNrRGVzdGluYXRpb24gaXMgbnVsbCwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvXG4gIC8vICAgIHRoZSByZXN1bHQgb2Ygc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG5cbiAgLy8gMi4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXMgYmUgdG8gcXVldWUgYVxuICAvLyAgICBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keSBnaXZlbiBieXRlcywgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IHByb2Nlc3NCb2R5XG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgYmUgdG8gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keUVycm9yLFxuICAvLyAgICB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IHByb2Nlc3NCb2R5RXJyb3JcblxuICAvLyA0LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmb3IgYm9keVx1MjAxOXMgc3RyZWFtLlxuICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwcyB3aXRoIHRoYXRcbiAgLy8gICAgZXhjZXB0aW9uIGFuZCByZXR1cm4uXG4gIGxldCByZWFkZXJcblxuICB0cnkge1xuICAgIHJlYWRlciA9IGJvZHkuc3RyZWFtLmdldFJlYWRlcigpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA1LiBSZWFkIGFsbCBieXRlcyBmcm9tIHJlYWRlciwgZ2l2ZW4gc3VjY2Vzc1N0ZXBzIGFuZCBlcnJvclN0ZXBzLlxuICB0cnkge1xuICAgIHN1Y2Nlc3NTdGVwcyhhd2FpdCByZWFkQWxsQnl0ZXMocmVhZGVyKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZSAoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCAoXG4gICAgc3RyZWFtW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdSZWFkYWJsZVN0cmVhbScgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLnRlZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgIGNvbnRyb2xsZXIuYnlvYlJlcXVlc3Q/LnJlc3BvbmQoMClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVE9ETzogYWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhpcyBlcnJvciBvY2N1cnMuXG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29udHJvbGxlciBpcyBhbHJlYWR5IGNsb3NlZCcpICYmICFlcnIubWVzc2FnZS5pbmNsdWRlcygnUmVhZGFibGVTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQnKSkge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleCA9IC9bXlxceDAwLVxceEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBhc3NlcnQoIWludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleC50ZXN0KGlucHV0KSlcblxuICAvLyAyLiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIHdob3NlIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgY29kZVxuICAvLyAgICBwb2ludCBsZW5ndGggYW5kIHdob3NlIGJ5dGVzIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAvLyAgICB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGNvZGUgcG9pbnRzLCBpbiB0aGUgc2FtZSBvcmRlclxuICByZXR1cm4gaW5wdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtZGVmYXVsdHJlYWRlci1yZWFkLWFsbC1ieXRlc1xuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkLWxvb3BcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyfSByZWFkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEJ5dGVzIChyZWFkZXIpIHtcbiAgY29uc3QgYnl0ZXMgPSBbXVxuICBsZXQgYnl0ZUxlbmd0aCA9IDBcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IGNodW5rIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gMS4gQ2FsbCBzdWNjZXNzU3RlcHMgd2l0aCBieXRlcy5cbiAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ5dGVzLCBieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNodW5rIGlzIG5vdCBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBjYWxsIGZhaWx1cmVTdGVwc1xuICAgIC8vICAgIHdpdGggYSBUeXBlRXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVjZWl2ZWQgbm9uLVVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCB0aGUgYnl0ZXMgcmVwcmVzZW50ZWQgYnkgY2h1bmsgdG8gYnl0ZXMuXG4gICAgYnl0ZXMucHVzaChjaHVuaylcbiAgICBieXRlTGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuXG4gICAgLy8gMy4gUmVhZC1sb29wIGdpdmVuIHJlYWRlciwgYnl0ZXMsIHN1Y2Nlc3NTdGVwcywgYW5kIGZhaWx1cmVTdGVwcy5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2lzLWxvY2FsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzTG9jYWwgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnYWJvdXQ6JyB8fCBwcm90b2NvbCA9PT0gJ2Jsb2I6JyB8fCBwcm90b2NvbCA9PT0gJ2RhdGE6J1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICByZXR1cm4gKFxuICAgIChcbiAgICAgIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmXG4gICAgICB1cmxbNV0gPT09ICc6JyAmJlxuICAgICAgdXJsWzBdID09PSAnaCcgJiZcbiAgICAgIHVybFsxXSA9PT0gJ3QnICYmXG4gICAgICB1cmxbMl0gPT09ICd0JyAmJlxuICAgICAgdXJsWzNdID09PSAncCcgJiZcbiAgICAgIHVybFs0XSA9PT0gJ3MnXG4gICAgKSB8fFxuICAgIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNzaW1wbGUtcmFuZ2UtaGVhZGVyLXZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsb3dXaGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUgKHZhbHVlLCBhbGxvd1doaXRlc3BhY2UpIHtcbiAgLy8gMS4gTGV0IGRhdGEgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2Rpbmcgb2YgdmFsdWUuXG4gIC8vIE5vdGU6IGlzb21vcnBoaWMgZGVjb2RpbmcgdGFrZXMgYSBzZXF1ZW5jZSBvZiBieXRlcyAoaWUuIGEgVWludDhBcnJheSkgYW5kIHR1cm5zIGl0IGludG8gYSBzdHJpbmcsXG4gIC8vIG5vdGhpbmcgbW9yZS4gV2Ugb2J2aW91c2x5IGRvbid0IG5lZWQgdG8gZG8gdGhhdCBpZiB2YWx1ZSBpcyBhIHN0cmluZyBhbHJlYWR5LlxuICBjb25zdCBkYXRhID0gdmFsdWVcblxuICAvLyAyLiBJZiBkYXRhIGRvZXMgbm90IHN0YXJ0IHdpdGggXCJieXRlc1wiLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoIWRhdGEuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDMuIExldCBwb3NpdGlvbiBiZSBhIHBvc2l0aW9uIHZhcmlhYmxlIGZvciBkYXRhLCBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIDV0aCBjb2RlIHBvaW50IG9mIGRhdGEuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogNSB9XG5cbiAgLy8gNC4gSWYgYWxsb3dXaGl0ZXNwYWNlIGlzIHRydWUsIGNvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQIHRhYiBvciBzcGFjZSxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyA1LiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gZGF0YSBpcyBub3QgVSswMDNEICg9KSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKGRhdGEuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgIT09IDB4M0QpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLCBmcm9tXG4gIC8vICAgIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIGlmIChhbGxvd1doaXRlc3BhY2UpIHtcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICcgJyxcbiAgICAgIGRhdGEsXG4gICAgICBwb3NpdGlvblxuICAgIClcbiAgfVxuXG4gIC8vIDguIExldCByYW5nZVN0YXJ0IGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEFTQ0lJIGRpZ2l0cyxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCByYW5nZVN0YXJ0ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOS4gTGV0IHJhbmdlU3RhcnRWYWx1ZSBiZSByYW5nZVN0YXJ0LCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VTdGFydCBpcyBub3QgdGhlXG4gIC8vICAgIGVtcHR5IHN0cmluZzsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IHJhbmdlU3RhcnRWYWx1ZSA9IHJhbmdlU3RhcnQubGVuZ3RoID8gTnVtYmVyKHJhbmdlU3RhcnQpIDogbnVsbFxuXG4gIC8vIDEwLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLFxuICAvLyAgICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyAxMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGRhdGEgaXMgbm90IFUrMDAyRCAoLSksIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhLmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pICE9PSAweDJEKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDEzLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiXG4gIC8vICAgICBvciBzcGFjZSwgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICAvLyBOb3RlIGZyb20gS2hhZnJhOiBpdHMgdGhlIHNhbWUgc3RlcCBhcyBpbiAjOCBhZ2FpbiBsb2xcbiAgaWYgKGFsbG93V2hpdGVzcGFjZSkge1xuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnLFxuICAgICAgZGF0YSxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICB9XG5cbiAgLy8gMTQuIExldCByYW5nZUVuZCBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZVxuICAvLyAgICAgQVNDSUkgZGlnaXRzLCBmcm9tIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIC8vIE5vdGUgZnJvbSBLaGFmcmE6IHlvdSB3b3VsZG4ndCBndWVzcyBpdCwgYnV0IHRoaXMgaXMgYWxzbyB0aGUgc2FtZSBzdGVwIGFzICM4XG4gIGNvbnN0IHJhbmdlRW5kID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gMTUuIExldCByYW5nZUVuZFZhbHVlIGJlIHJhbmdlRW5kLCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VFbmRcbiAgLy8gICAgIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nOyBvdGhlcndpc2UgbnVsbC5cbiAgLy8gTm90ZSBmcm9tIEtoYWZyYTogVEhFIFNBTUUgU1RFUCwgQUdBSU4hISFcbiAgLy8gTm90ZTogd2h5IGludGVycHJldCBhcyBhIGRlY2ltYWwgaWYgd2Ugb25seSBjb2xsZWN0IGFzY2lpIGRpZ2l0cz9cbiAgY29uc3QgcmFuZ2VFbmRWYWx1ZSA9IHJhbmdlRW5kLmxlbmd0aCA/IE51bWJlcihyYW5nZUVuZCkgOiBudWxsXG5cbiAgLy8gMTYuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgZGF0YSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxNy4gSWYgcmFuZ2VFbmRWYWx1ZSBhbmQgcmFuZ2VTdGFydFZhbHVlIGFyZSBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAocmFuZ2VFbmRWYWx1ZSA9PT0gbnVsbCAmJiByYW5nZVN0YXJ0VmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxOC4gSWYgcmFuZ2VTdGFydFZhbHVlIGFuZCByYW5nZUVuZFZhbHVlIGFyZSBudW1iZXJzLCBhbmQgcmFuZ2VTdGFydFZhbHVlIGlzXG4gIC8vICAgICBncmVhdGVyIHRoYW4gcmFuZ2VFbmRWYWx1ZSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gTm90ZTogLi4uIHdoZW4gY2FuIHRoZXkgbm90IGJlIG51bWJlcnM/XG4gIGlmIChyYW5nZVN0YXJ0VmFsdWUgPiByYW5nZUVuZFZhbHVlKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTkuIFJldHVybiAocmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlKS5cbiAgcmV0dXJuIHsgcmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNidWlsZC1hLWNvbnRlbnQtcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZVN0YXJ0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2VFbmRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmdWxsTGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29udGVudFJhbmdlIChyYW5nZVN0YXJ0LCByYW5nZUVuZCwgZnVsbExlbmd0aCkge1xuICAvLyAxLiBMZXQgY29udGVudFJhbmdlIGJlIGBieXRlcyBgLlxuICBsZXQgY29udGVudFJhbmdlID0gJ2J5dGVzICdcblxuICAvLyAyLiBBcHBlbmQgcmFuZ2VTdGFydCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLCB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSBpc29tb3JwaGljRW5jb2RlKGAke3JhbmdlU3RhcnR9YClcblxuICAvLyAzLiBBcHBlbmQgMHgyRCAoLSkgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gJy0nXG5cbiAgLy8gNC4gQXBwZW5kIHJhbmdlRW5kLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gaXNvbW9ycGhpY0VuY29kZShgJHtyYW5nZUVuZH1gKVxuXG4gIC8vIDUuIEFwcGVuZCAweDJGICgvKSB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSAnLydcblxuICAvLyA2LiBBcHBlbmQgZnVsbExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkIHRvIGNvbnRlbnRSYW5nZS5cbiAgY29udGVudFJhbmdlICs9IGlzb21vcnBoaWNFbmNvZGUoYCR7ZnVsbExlbmd0aH1gKVxuXG4gIC8vIDcuIFJldHVybiBjb250ZW50UmFuZ2UuXG4gIHJldHVybiBjb250ZW50UmFuZ2Vcbn1cblxuLy8gQSBTdHJlYW0sIHdoaWNoIHBpcGVzIHRoZSByZXNwb25zZSB0byB6bGliLmNyZWF0ZUluZmxhdGUoKSBvclxuLy8gemxpYi5jcmVhdGVJbmZsYXRlUmF3KCkgZGVwZW5kaW5nIG9uIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBCdWZmZXIuXG4vLyBJZiB0aGUgbG93ZXIgYnl0ZSBvZiB0aGUgZmlyc3QgYnl0ZSBpcyAweDA4LCB0aGVuIHRoZSBzdHJlYW0gaXNcbi8vIGludGVycHJldGVkIGFzIGEgemxpYiBzdHJlYW0sIG90aGVyd2lzZSBpdCdzIGludGVycHJldGVkIGFzIGFcbi8vIHJhdyBkZWZsYXRlIHN0cmVhbS5cbmNsYXNzIEluZmxhdGVTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAjemxpYk9wdGlvbnNcblxuICAvKiogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdICovXG4gIGNvbnN0cnVjdG9yICh6bGliT3B0aW9ucykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLiN6bGliT3B0aW9ucyA9IHpsaWJPcHRpb25zXG4gIH1cblxuICBfdHJhbnNmb3JtIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9pbmZsYXRlU3RyZWFtKSB7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtID0gKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDhcbiAgICAgICAgPyB6bGliLmNyZWF0ZUluZmxhdGUodGhpcy4jemxpYk9wdGlvbnMpXG4gICAgICAgIDogemxpYi5jcmVhdGVJbmZsYXRlUmF3KHRoaXMuI3psaWJPcHRpb25zKVxuXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdkYXRhJywgdGhpcy5wdXNoLmJpbmQodGhpcykpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB0aGlzLnB1c2gobnVsbCkpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHRoaXMuZGVzdHJveShlcnIpKVxuICAgIH1cblxuICAgIHRoaXMuX2luZmxhdGVTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgfVxuXG4gIF9maW5hbCAoY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5faW5mbGF0ZVN0cmVhbSkge1xuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbS5lbmQoKVxuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbSA9IG51bGxcbiAgICB9XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdXG4gKiBAcmV0dXJucyB7SW5mbGF0ZVN0cmVhbX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5mbGF0ZSAoemxpYk9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBJbmZsYXRlU3RyZWFtKHpsaWJPcHRpb25zKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWV4dHJhY3QtbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9oZWFkZXJzJykuSGVhZGVyc0xpc3R9IGhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1pbWVUeXBlIChoZWFkZXJzKSB7XG4gIC8vIDEuIExldCBjaGFyc2V0IGJlIG51bGwuXG4gIGxldCBjaGFyc2V0ID0gbnVsbFxuXG4gIC8vIDIuIExldCBlc3NlbmNlIGJlIG51bGwuXG4gIGxldCBlc3NlbmNlID0gbnVsbFxuXG4gIC8vIDMuIExldCBtaW1lVHlwZSBiZSBudWxsLlxuICBsZXQgbWltZVR5cGUgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHZhbHVlcyBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIGBDb250ZW50LVR5cGVgIGZyb20gaGVhZGVycy5cbiAgY29uc3QgdmFsdWVzID0gZ2V0RGVjb2RlU3BsaXQoJ2NvbnRlbnQtdHlwZScsIGhlYWRlcnMpXG5cbiAgLy8gNS4gSWYgdmFsdWVzIGlzIG51bGwsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgLy8gNi4xLiBMZXQgdGVtcG9yYXJ5TWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHZhbHVlLlxuICAgIGNvbnN0IHRlbXBvcmFyeU1pbWVUeXBlID0gcGFyc2VNSU1FVHlwZSh2YWx1ZSlcblxuICAgIC8vIDYuMi4gSWYgdGVtcG9yYXJ5TWltZVR5cGUgaXMgZmFpbHVyZSBvciBpdHMgZXNzZW5jZSBpcyBcIiovKlwiLCB0aGVuIGNvbnRpbnVlLlxuICAgIGlmICh0ZW1wb3JhcnlNaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnIHx8IHRlbXBvcmFyeU1pbWVUeXBlLmVzc2VuY2UgPT09ICcqLyonKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIDYuMy4gU2V0IG1pbWVUeXBlIHRvIHRlbXBvcmFyeU1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gdGVtcG9yYXJ5TWltZVR5cGVcblxuICAgIC8vIDYuNC4gSWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgbm90IGVzc2VuY2UsIHRoZW46XG4gICAgaWYgKG1pbWVUeXBlLmVzc2VuY2UgIT09IGVzc2VuY2UpIHtcbiAgICAgIC8vIDYuNC4xLiBTZXQgY2hhcnNldCB0byBudWxsLlxuICAgICAgY2hhcnNldCA9IG51bGxcblxuICAgICAgLy8gNi40LjIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBleGlzdHMsIHRoZW4gc2V0IGNoYXJzZXQgdG9cbiAgICAgIC8vICAgICAgICBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICBpZiAobWltZVR5cGUucGFyYW1ldGVycy5oYXMoJ2NoYXJzZXQnKSkge1xuICAgICAgICBjaGFyc2V0ID0gbWltZVR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKVxuICAgICAgfVxuXG4gICAgICAvLyA2LjQuMy4gU2V0IGVzc2VuY2UgdG8gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gICAgICBlc3NlbmNlID0gbWltZVR5cGUuZXNzZW5jZVxuICAgIH0gZWxzZSBpZiAoIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKCdjaGFyc2V0JykgJiYgY2hhcnNldCAhPT0gbnVsbCkge1xuICAgICAgLy8gNi41LiBPdGhlcndpc2UsIGlmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBkb2VzIG5vdCBleGlzdCwgYW5kXG4gICAgICAvLyAgICAgIGNoYXJzZXQgaXMgbm9uLW51bGwsIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0gdG8gY2hhcnNldC5cbiAgICAgIG1pbWVUeXBlLnBhcmFtZXRlcnMuc2V0KCdjaGFyc2V0JywgY2hhcnNldClcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBtaW1lVHlwZSBpcyBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAobWltZVR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLXZhbHVlLWdldC1kZWNvZGUtYW5kLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXR0aW5nRGVjb2RpbmdTcGxpdHRpbmcgKHZhbHVlKSB7XG4gIC8vIDEuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIGlzb21vcnBoaWMgZGVjb2RpbmcgdmFsdWUuXG4gIGNvbnN0IGlucHV0ID0gdmFsdWVcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHZhbHVlcyBiZSBhIGxpc3Qgb2Ygc3RyaW5ncywgaW5pdGlhbGx5IGVtcHR5LlxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIC8vIDQuIExldCB0ZW1wb3JhcnlWYWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdGVtcG9yYXJ5VmFsdWUgPSAnJ1xuXG4gIC8vIDUuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDUuMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMjIgKFwiKVxuICAgIC8vICAgICAgb3IgVSswMDJDICgsKSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbiwgdG8gdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnXCInICYmIGNoYXIgIT09ICcsJyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA1LjIuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyA1LjIuMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pID09PSAweDIyKSB7XG4gICAgICAgIC8vIDUuMi4xLjEuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLCB0byB0ZW1wb3JhcnlWYWx1ZS5cbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gNS4yLjEuMi4gSWYgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBjb250aW51ZS5cbiAgICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4yLjIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyA1LjIuMi4xLiBBc3NlcnQ6IHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpcyBVKzAwMkMgKCwpLlxuICAgICAgICBhc3NlcnQoaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgPT09IDB4MkMpXG5cbiAgICAgICAgLy8gNS4yLjIuMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4zLiBSZW1vdmUgYWxsIEhUVFAgdGFiIG9yIHNwYWNlIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgPSByZW1vdmVDaGFycyh0ZW1wb3JhcnlWYWx1ZSwgdHJ1ZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgLy8gNS40LiBBcHBlbmQgdGVtcG9yYXJ5VmFsdWUgdG8gdmFsdWVzLlxuICAgIHZhbHVlcy5wdXNoKHRlbXBvcmFyeVZhbHVlKVxuXG4gICAgLy8gNS42LiBTZXQgdGVtcG9yYXJ5VmFsdWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICB0ZW1wb3JhcnlWYWx1ZSA9ICcnXG4gIH1cblxuICAvLyA2LiBSZXR1cm4gdmFsdWVzLlxuICByZXR1cm4gdmFsdWVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXQtZGVjb2RlLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBsb3dlcmNhc2UgaGVhZGVyIG5hbWVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2hlYWRlcnMnKS5IZWFkZXJzTGlzdH0gbGlzdFxuICovXG5mdW5jdGlvbiBnZXREZWNvZGVTcGxpdCAobmFtZSwgbGlzdCkge1xuICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuICBjb25zdCB2YWx1ZSA9IGxpc3QuZ2V0KG5hbWUsIHRydWUpXG5cbiAgLy8gMi4gSWYgdmFsdWUgaXMgbnVsbCwgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIHZhbHVlLlxuICByZXR1cm4gZ2V0dGluZ0RlY29kaW5nU3BsaXR0aW5nKHZhbHVlKVxufVxuXG5jb25zdCB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIHV0ZjhEZWNvZGVCeXRlcyAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAxLiBMZXQgYnVmZmVyIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyB0aHJlZSBieXRlcyBmcm9tXG4gIC8vICAgIGlvUXVldWUsIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG5cbiAgLy8gMi4gSWYgYnVmZmVyIGlzIDB4RUYgMHhCQiAweEJGLCB0aGVuIHJlYWQgdGhyZWVcbiAgLy8gICAgYnl0ZXMgZnJvbSBpb1F1ZXVlLiAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgaWYgKGJ1ZmZlclswXSA9PT0gMHhFRiAmJiBidWZmZXJbMV0gPT09IDB4QkIgJiYgYnVmZmVyWzJdID09PSAweEJGKSB7XG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDMpXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBVVEYtOFx1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuICBjb25zdCBvdXRwdXQgPSB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuY2xhc3MgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2Uge1xuICBnZXQgYmFzZVVybCAoKSB7XG4gICAgcmV0dXJuIGdldEdsb2JhbE9yaWdpbigpXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgfVxuXG4gIHBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxufVxuXG5jbGFzcyBFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IHtcbiAgc2V0dGluZ3NPYmplY3QgPSBuZXcgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2UoKVxufVxuXG5jb25zdCBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0ID0gbmV3IEVudmlyb25tZW50U2V0dGluZ3NPYmplY3QoKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNWYWxpZEVuY29kZWRVUkwsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNsYW1wQW5kQ29hcnNlbkNvbm5lY3Rpb25UaW1pbmdJbmZvLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIFRBT0NoZWNrLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICByZXNwb25zZVVSTCxcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgaXNCbG9iTGlrZSxcbiAgaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5LFxuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXRlcmF0b3JNaXhpbixcbiAgY3JlYXRlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICBieXRlc01hdGNoLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSGFzSHR0cHNTY2hlbWUsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICByZWFkQWxsQnl0ZXMsXG4gIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUsXG4gIGJ1aWxkQ29udGVudFJhbmdlLFxuICBwYXJzZU1ldGFkYXRhLFxuICBjcmVhdGVJbmZsYXRlLFxuICBleHRyYWN0TWltZVR5cGUsXG4gIGdldERlY29kZVNwbGl0LFxuICB1dGY4RGVjb2RlQnl0ZXMsXG4gIGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtIZWFkZXJzOiBTeW1ib2woJ2hlYWRlcnMnKSxcbiAga1NpZ25hbDogU3ltYm9sKCdzaWduYWwnKSxcbiAga1N0YXRlOiBTeW1ib2woJ3N0YXRlJyksXG4gIGtEaXNwYXRjaGVyOiBTeW1ib2woJ2Rpc3BhdGNoZXInKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJsb2IsIEZpbGUgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxuLy8gVE9ETyhAS2hhZnJhRGV2KTogcmVtb3ZlXG5jbGFzcyBGaWxlTGlrZSB7XG4gIGNvbnN0cnVjdG9yIChibG9iTGlrZSwgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRPRE86IGFyZ3VtZW50IGlkbCB0eXBlIGNoZWNrXG5cbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgVE9ET1xuICAgIGNvbnN0IHQgPSBvcHRpb25zLnR5cGVcblxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIC8vICAgIFRPRE9cblxuICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgIGNvbnN0IGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA/PyBEYXRlLm5vdygpXG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBibG9iTGlrZSxcbiAgICAgIG5hbWU6IG4sXG4gICAgICB0eXBlOiB0LFxuICAgICAgbGFzdE1vZGlmaWVkOiBkXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnN0cmVhbSguLi5hcmdzKVxuICB9XG5cbiAgYXJyYXlCdWZmZXIgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UuYXJyYXlCdWZmZXIoLi4uYXJncylcbiAgfVxuXG4gIHNsaWNlICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNsaWNlKC4uLmFyZ3MpXG4gIH1cblxuICB0ZXh0ICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnRleHQoLi4uYXJncylcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2l6ZVxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50eXBlXG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuICdGaWxlJ1xuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2IgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKEJsb2IpXG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAob2JqZWN0IGluc3RhbmNlb2YgRmlsZSkgfHxcbiAgICAoXG4gICAgICBvYmplY3QgJiZcbiAgICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZSdcbiAgICApXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc0Jsb2JMaWtlLCBpdGVyYXRvck1peGluIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTmF0aXZlRmlsZVxuXG4vLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2Zvcm1kYXRhXG5jbGFzcyBGb3JtRGF0YSB7XG4gIGNvbnN0cnVjdG9yIChmb3JtKSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnRm9ybURhdGEuYXBwZW5kJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHByZWZpeCwgJ3ZhbHVlJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZW5hbWUsIHByZWZpeCwgJ2ZpbGVuYW1lJylcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoXG4gICAgLy8gbmFtZSwgdmFsdWUsIGFuZCBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBBcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgfVxuXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0Zvcm1EYXRhLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyBUaGUgZGVsZXRlKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzIHdob3NlIG5hbWVcbiAgICAvLyBpcyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSB0aGlzW2tTdGF0ZV0uZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gIH1cblxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXRBbGwnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gdGhlIGVtcHR5IGxpc3QuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGVudHJpZXMgd2hvc2UgbmFtZSBpcyBuYW1lLCBpbiBvcmRlcixcbiAgICAvLyBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudmFsdWUpXG4gIH1cblxuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5oYXMnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gVGhlIGhhcyhuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFuIGVudHJ5XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3Q7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpICE9PSAtMVxuICB9XG5cbiAgc2V0IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5zZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCBwcmVmaXgpXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBUaGUgc2V0KG5hbWUsIHZhbHVlKSBhbmQgc2V0KG5hbWUsIGJsb2JWYWx1ZSwgZmlsZW5hbWUpIG1ldGhvZCBzdGVwc1xuICAgIC8vIGFyZTpcblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCBwcmVmaXgsICduYW1lJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAnbmFtZScpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlbmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aCBuYW1lLCB2YWx1ZSwgYW5kXG4gICAgLy8gZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCB3aG9zZSBuYW1lIGlzIG5hbWUsIHRoZW5cbiAgICAvLyByZXBsYWNlIHRoZSBmaXJzdCBzdWNoIGVudHJ5IHdpdGggZW50cnkgYW5kIHJlbW92ZSB0aGUgb3RoZXJzLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSBbXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZSgwLCBpZHgpLFxuICAgICAgICBlbnRyeSxcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKGlkeCArIDEpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgYXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgICB9XG4gIH1cblxuICBbbm9kZVV0aWwuaW5zcGVjdC5jdXN0b21dIChkZXB0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpc1trU3RhdGVdLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgaWYgKGFbYi5uYW1lXSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhW2IubmFtZV0pKSB7XG4gICAgICAgICAgYVtiLm5hbWVdLnB1c2goYi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhW2IubmFtZV0gPSBbYVtiLm5hbWVdLCBiLnZhbHVlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW2IubmFtZV0gPSBiLnZhbHVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhXG4gICAgfSwgeyBfX3Byb3RvX186IG51bGwgfSlcblxuICAgIG9wdGlvbnMuZGVwdGggPz89IGRlcHRoXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IG91dHB1dCA9IG5vZGVVdGlsLmZvcm1hdFdpdGhPcHRpb25zKG9wdGlvbnMsIHN0YXRlKVxuXG4gICAgLy8gcmVtb3ZlIFtPYmplY3QgbnVsbCBwcm90b3R5cGVdXG4gICAgcmV0dXJuIGBGb3JtRGF0YSAke291dHB1dC5zbGljZShvdXRwdXQuaW5kZXhPZignXScpICsgMil9YFxuICB9XG59XG5cbml0ZXJhdG9yTWl4aW4oJ0Zvcm1EYXRhJywgRm9ybURhdGEsIGtTdGF0ZSwgJ25hbWUnLCAndmFsdWUnKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGb3JtRGF0YS5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0QWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Zvcm1EYXRhJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2NyZWF0ZS1hbi1lbnRyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfEJsb2J9IHZhbHVlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGZpbGVuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBtYWtlRW50cnkgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSkge1xuICAvLyAxLiBTZXQgbmFtZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbmFtZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuXG4gIC8vIDIuIElmIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGVuIHNldCB2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmdcbiAgLy8gICAgdmFsdWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIElmIHZhbHVlIGlzIG5vdCBhIEZpbGUgb2JqZWN0LCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIHZhbHVlIGlzIFwiYmxvYlwiXG4gICAgaWYgKCFpc0ZpbGVMaWtlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSBpcyBmaWxlbmFtZS5cbiAgICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLyoqIEB0eXBlIHtGaWxlUHJvcGVydHlCYWd9ICovXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZFxuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgTmF0aXZlRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhLCBtYWtlRW50cnkgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzVVNWU3RyaW5nLCBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyB1dGY4RGVjb2RlQnl0ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEhUVFBfVE9LRU5fQ09ERVBPSU5UUywgaXNvbW9ycGhpY0RlY29kZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IG1ha2VFbnRyeSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IEZpbGU6IE5vZGVGaWxlIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTm9kZUZpbGVcblxuY29uc3QgZm9ybURhdGFOYW1lQnVmZmVyID0gQnVmZmVyLmZyb20oJ2Zvcm0tZGF0YTsgbmFtZT1cIicpXG5jb25zdCBmaWxlbmFtZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKCc7IGZpbGVuYW1lJylcbmNvbnN0IGRkID0gQnVmZmVyLmZyb20oJy0tJylcbmNvbnN0IGRkY3JsZiA9IEJ1ZmZlci5mcm9tKCctLVxcclxcbicpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJzXG4gKi9cbmZ1bmN0aW9uIGlzQXNjaWlTdHJpbmcgKGNoYXJzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGNoYXJzLmNoYXJDb2RlQXQoaSkgJiB+MHg3RikgIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNtdWx0aXBhcnQtZm9ybS1kYXRhLWJvdW5kYXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRhcnlcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb3VuZGFyeSAoYm91bmRhcnkpIHtcbiAgY29uc3QgbGVuZ3RoID0gYm91bmRhcnkubGVuZ3RoXG5cbiAgLy8gLSBpdHMgbGVuZ3RoIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMjcgYW5kIGxlc3NlciBvciBlcXVhbCB0byA3MCwgYW5kXG4gIGlmIChsZW5ndGggPCAyNyB8fCBsZW5ndGggPiA3MCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gLSBpdCBpcyBjb21wb3NlZCBieSBieXRlcyBpbiB0aGUgcmFuZ2VzIDB4MzAgdG8gMHgzOSwgMHg0MSB0byAweDVBLCBvclxuICAvLyAgIDB4NjEgdG8gMHg3QSwgaW5jbHVzaXZlIChBU0NJSSBhbHBoYW51bWVyaWMpLCBvciB3aGljaCBhcmUgMHgyNyAoJyksXG4gIC8vICAgMHgyRCAoLSkgb3IgMHg1RiAoXykuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjcCA9IGJvdW5kYXJ5LmNoYXJDb2RlQXQoaSlcblxuICAgIGlmICghKFxuICAgICAgKGNwID49IDB4MzAgJiYgY3AgPD0gMHgzOSkgfHxcbiAgICAgIChjcCA+PSAweDQxICYmIGNwIDw9IDB4NWEpIHx8XG4gICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdhKSB8fFxuICAgICAgY3AgPT09IDB4MjcgfHxcbiAgICAgIGNwID09PSAweDJkIHx8XG4gICAgICBjcCA9PT0gMHg1ZlxuICAgICkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2FuZHJldWJvdGVsbGEuZ2l0aHViLmlvL211bHRpcGFydC1mb3JtLWRhdGEvI211bHRpcGFydC1mb3JtLWRhdGEtcGFyc2VyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW5wdXRcbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTxpbXBvcnQoJy4vZGF0YS11cmwnKVsncGFyc2VNSU1FVHlwZSddPn0gbWltZVR5cGVcbiAqL1xuZnVuY3Rpb24gbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgKGlucHV0LCBtaW1lVHlwZSkge1xuICAvLyAxLiBBc3NlcnQ6IG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLlxuICBhc3NlcnQobWltZVR5cGUgIT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZS5lc3NlbmNlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG5cbiAgY29uc3QgYm91bmRhcnlTdHJpbmcgPSBtaW1lVHlwZS5wYXJhbWV0ZXJzLmdldCgnYm91bmRhcnknKVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0gZG9lcyBub3QgZXhpc3QsIHJldHVybiBmYWlsdXJlLlxuICAvLyAgICBPdGhlcndpc2UsIGxldCBib3VuZGFyeSBiZSB0aGUgcmVzdWx0IG9mIFVURi04IGRlY29kaW5nIG1pbWVUeXBlXHUyMDE5c1xuICAvLyAgICBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0uXG4gIGlmIChib3VuZGFyeVN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYm91bmRhcnkgPSBCdWZmZXIuZnJvbShgLS0ke2JvdW5kYXJ5U3RyaW5nfWAsICd1dGY4JylcblxuICAvLyAzLiBMZXQgZW50cnkgbGlzdCBiZSBhbiBlbXB0eSBlbnRyeSBsaXN0LlxuICBjb25zdCBlbnRyeUxpc3QgPSBbXVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIgdG8gYSBieXRlIGluIGlucHV0LCBpbml0aWFsbHkgcG9pbnRpbmcgYXRcbiAgLy8gICAgdGhlIGZpcnN0IGJ5dGUuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gTm90ZTogdW5kaWNpIGFkZGl0aW9uLCBhbGxvd3MgbGVhZGluZyBhbmQgdHJhaWxpbmcgQ1JMRnMuXG4gIHdoaWxlIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcbiAgfVxuXG4gIGxldCB0cmFpbGluZyA9IGlucHV0Lmxlbmd0aFxuXG4gIHdoaWxlIChpbnB1dFt0cmFpbGluZyAtIDFdID09PSAweDBhICYmIGlucHV0W3RyYWlsaW5nIC0gMl0gPT09IDB4MGQpIHtcbiAgICB0cmFpbGluZyAtPSAyXG4gIH1cblxuICBpZiAodHJhaWxpbmcgIT09IGlucHV0Lmxlbmd0aCkge1xuICAgIGlucHV0ID0gaW5wdXQuc3ViYXJyYXkoMCwgdHJhaWxpbmcpXG4gIH1cblxuICAvLyA1LiBXaGlsZSB0cnVlOlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIDUuMS4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aCAweDJEIDB4MkRcbiAgICAvLyAgICAgIChgLS1gKSBmb2xsb3dlZCBieSBib3VuZGFyeSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyICsgdGhlIGxlbmd0aCBvZlxuICAgIC8vICAgICAgYm91bmRhcnkuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgLy8gTm90ZTogYm91bmRhcnkgaXMgcGFkZGVkIHdpdGggMiBkYXNoZXMgYWxyZWFkeSwgbm8gbmVlZCB0byBhZGQgMi5cbiAgICBpZiAoaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIHBvc2l0aW9uLnBvc2l0aW9uICsgYm91bmRhcnkubGVuZ3RoKS5lcXVhbHMoYm91bmRhcnkpKSB7XG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbiArPSBib3VuZGFyeS5sZW5ndGhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDUuMi4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIHRoZSBzZXF1ZW5jZSBvZiBieXRlcyAweDJEIDB4MkQgMHgwRCAweDBBXG4gICAgLy8gICAgICAoYC0tYCBmb2xsb3dlZCBieSBDUiBMRikgZm9sbG93ZWQgYnkgdGhlIGVuZCBvZiBpbnB1dCwgcmV0dXJuIGVudHJ5IGxpc3QuXG4gICAgLy8gTm90ZTogYSBib2R5IGRvZXMgTk9UIG5lZWQgdG8gZW5kIHdpdGggQ1JMRi4gSXQgY2FuIGVuZCB3aXRoIC0tLlxuICAgIGlmIChcbiAgICAgIChwb3NpdGlvbi5wb3NpdGlvbiA9PT0gaW5wdXQubGVuZ3RoIC0gMiAmJiBidWZmZXJTdGFydHNXaXRoKGlucHV0LCBkZCwgcG9zaXRpb24pKSB8fFxuICAgICAgKHBvc2l0aW9uLnBvc2l0aW9uID09PSBpbnB1dC5sZW5ndGggLSA0ICYmIGJ1ZmZlclN0YXJ0c1dpdGgoaW5wdXQsIGRkY3JsZiwgcG9zaXRpb24pKVxuICAgICkge1xuICAgICAgcmV0dXJuIGVudHJ5TGlzdFxuICAgIH1cblxuICAgIC8vIDUuMy4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MERcbiAgICAvLyAgICAgIDB4MEEgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSAhPT0gMHgwZCB8fCBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbiArIDFdICE9PSAweDBhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gNS40LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIG5ld2xpbmUuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcblxuICAgIC8vIDUuNS4gTGV0IG5hbWUsIGZpbGVuYW1lIGFuZCBjb250ZW50VHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgICAvLyAgICAgIG11bHRpcGFydC9mb3JtLWRhdGEgaGVhZGVycyBvbiBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHRcbiAgICAvLyAgICAgIGlzIG5vdCBmYWlsdXJlLiBPdGhlcndpc2UsIHJldHVybiBmYWlsdXJlLlxuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFIZWFkZXJzKGlucHV0LCBwb3NpdGlvbilcblxuICAgIGlmIChyZXN1bHQgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIGxldCB7IG5hbWUsIGZpbGVuYW1lLCBjb250ZW50VHlwZSwgZW5jb2RpbmcgfSA9IHJlc3VsdFxuXG4gICAgLy8gNS42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIGVtcHR5IGxpbmUgdGhhdCBtYXJrc1xuICAgIC8vICAgICAgdGhlIGVuZCBvZiB0aGUgaGVhZGVycy4pXG4gICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuXG4gICAgLy8gNS43LiBMZXQgYm9keSBiZSB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgICBsZXQgYm9keVxuXG4gICAgLy8gNS44LiBCb2R5IGxvb3A6IFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gICAgLy8gVE9ETzogdGhlIHN0ZXBzIGhlcmUgYXJlIGNvbXBsZXRlbHkgd3JvbmdcbiAgICB7XG4gICAgICBjb25zdCBib3VuZGFyeUluZGV4ID0gaW5wdXQuaW5kZXhPZihib3VuZGFyeS5zdWJhcnJheSgyKSwgcG9zaXRpb24ucG9zaXRpb24pXG5cbiAgICAgIGlmIChib3VuZGFyeUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIGJvZHkgPSBpbnB1dC5zdWJhcnJheShwb3NpdGlvbi5wb3NpdGlvbiwgYm91bmRhcnlJbmRleCAtIDQpXG5cbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IGJvZHkubGVuZ3RoXG5cbiAgICAgIC8vIE5vdGU6IHBvc2l0aW9uIG11c3QgYmUgYWR2YW5jZWQgYnkgdGhlIGJvZHkncyBsZW5ndGggYmVmb3JlIGJlaW5nXG4gICAgICAvLyBkZWNvZGVkLCBvdGhlcndpc2UgdGhlIHBhcnNpbmcgd2lsbCBmYWlsLlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0Jykge1xuICAgICAgICBib2R5ID0gQnVmZmVyLmZyb20oYm9keS50b1N0cmluZygpLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjkuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgIC8vICAgICAgMHgwRCAweDBBIChDUiBMRiksIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGFkdmFuY2UgcG9zaXRpb24gYnkgMi5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkIHx8IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cblxuICAgIC8vIDUuMTAuIElmIGZpbGVuYW1lIGlzIG5vdCBudWxsOlxuICAgIGxldCB2YWx1ZVxuXG4gICAgaWYgKGZpbGVuYW1lICE9PSBudWxsKSB7XG4gICAgICAvLyA1LjEwLjEuIElmIGNvbnRlbnRUeXBlIGlzIG51bGwsIHNldCBjb250ZW50VHlwZSB0byBcInRleHQvcGxhaW5cIi5cbiAgICAgIGNvbnRlbnRUeXBlID8/PSAndGV4dC9wbGFpbidcblxuICAgICAgLy8gNS4xMC4yLiBJZiBjb250ZW50VHlwZSBpcyBub3QgYW4gQVNDSUkgc3RyaW5nLCBzZXQgY29udGVudFR5cGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgLy8gTm90ZTogYGJ1ZmZlci5pc0FzY2lpYCBjYW4gYmUgdXNlZCBhdCB6ZXJvLWNvc3QsIGJ1dCBjb252ZXJ0aW5nIGEgc3RyaW5nIHRvIGEgYnVmZmVyIGlzIGEgaGlnaCBvdmVyaGVhZC5cbiAgICAgIC8vIENvbnRlbnQtVHlwZSBpcyBhIHJlbGF0aXZlbHkgc21hbGwgc3RyaW5nLCBzbyBpdCBpcyBmYXN0ZXIgdG8gdXNlIGBTdHJpbmcjY2hhckNvZGVBdGAuXG4gICAgICBpZiAoIWlzQXNjaWlTdHJpbmcoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gJydcbiAgICAgIH1cblxuICAgICAgLy8gNS4xMC4zLiBMZXQgdmFsdWUgYmUgYSBuZXcgRmlsZSBvYmplY3Qgd2l0aCBuYW1lIGZpbGVuYW1lLCB0eXBlIGNvbnRlbnRUeXBlLCBhbmQgYm9keSBib2R5LlxuICAgICAgdmFsdWUgPSBuZXcgRmlsZShbYm9keV0sIGZpbGVuYW1lLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDUuMTEuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNS4xMS4xLiBMZXQgdmFsdWUgYmUgdGhlIFVURi04IGRlY29kaW5nIHdpdGhvdXQgQk9NIG9mIGJvZHkuXG4gICAgICB2YWx1ZSA9IHV0ZjhEZWNvZGVCeXRlcyhCdWZmZXIuZnJvbShib2R5KSlcbiAgICB9XG5cbiAgICAvLyA1LjEyLiBBc3NlcnQ6IG5hbWUgaXMgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIGFuZCB2YWx1ZSBpcyBlaXRoZXIgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIG9yIGEgRmlsZSBvYmplY3QuXG4gICAgYXNzZXJ0KGlzVVNWU3RyaW5nKG5hbWUpKVxuICAgIGFzc2VydCgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBpc1VTVlN0cmluZyh2YWx1ZSkpIHx8IGlzRmlsZUxpa2UodmFsdWUpKVxuXG4gICAgLy8gNS4xMy4gQ3JlYXRlIGFuIGVudHJ5IHdpdGggbmFtZSBhbmQgdmFsdWUsIGFuZCBhcHBlbmQgaXQgdG8gZW50cnkgbGlzdC5cbiAgICBlbnRyeUxpc3QucHVzaChtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1tdWx0aXBhcnQtZm9ybS1kYXRhLWhlYWRlcnNcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VNdWx0aXBhcnRGb3JtRGF0YUhlYWRlcnMgKGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlIGJlIG51bGwuXG4gIGxldCBuYW1lID0gbnVsbFxuICBsZXQgZmlsZW5hbWUgPSBudWxsXG4gIGxldCBjb250ZW50VHlwZSA9IG51bGxcbiAgbGV0IGVuY29kaW5nID0gbnVsbFxuXG4gIC8vIDIuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMi4xLiBJZiBwb3NpdGlvbiBwb2ludHMgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQSAoQ1IgTEYpOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgICAgLy8gMi4xLjEuIElmIG5hbWUgaXMgbnVsbCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIC8vIDIuMS4yLiBSZXR1cm4gbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlLlxuICAgICAgcmV0dXJuIHsgbmFtZSwgZmlsZW5hbWUsIGNvbnRlbnRUeXBlLCBlbmNvZGluZyB9XG4gICAgfVxuXG4gICAgLy8gMi4yLiBMZXQgaGVhZGVyIG5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmVcbiAgICAvLyAgICAgIG5vdCAweDBBIChMRiksIDB4MEQgKENSKSBvciAweDNBICg6KSwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgbGV0IGhlYWRlck5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQgJiYgY2hhciAhPT0gMHgzYSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAyLjMuIFJlbW92ZSBhbnkgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb3IgZW5kIG9mIGhlYWRlciBuYW1lLlxuICAgIGhlYWRlck5hbWUgPSByZW1vdmVDaGFycyhoZWFkZXJOYW1lLCB0cnVlLCB0cnVlLCAoY2hhcikgPT4gY2hhciA9PT0gMHg5IHx8IGNoYXIgPT09IDB4MjApXG5cbiAgICAvLyAyLjQuIElmIGhlYWRlciBuYW1lIGRvZXMgbm90IG1hdGNoIHRoZSBmaWVsZC1uYW1lIHRva2VuIHByb2R1Y3Rpb24sIHJldHVybiBmYWlsdXJlLlxuICAgIGlmICghSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QoaGVhZGVyTmFtZS50b1N0cmluZygpKSkge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDIuNS4gSWYgdGhlIGJ5dGUgYXQgcG9zaXRpb24gaXMgbm90IDB4M0EgKDopLCByZXR1cm4gZmFpbHVyZS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDNhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gMi42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gMi43LiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmUgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZ2l2ZW4gcG9zaXRpb24uXG4gICAgLy8gICAgICAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAweDIwIHx8IGNoYXIgPT09IDB4MDksXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi44LiBCeXRlLWxvd2VyY2FzZSBoZWFkZXIgbmFtZSBhbmQgc3dpdGNoIG9uIHRoZSByZXN1bHQ6XG4gICAgc3dpdGNoIChidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGhlYWRlck5hbWUpKSB7XG4gICAgICBjYXNlICdjb250ZW50LWRpc3Bvc2l0aW9uJzoge1xuICAgICAgICAvLyAxLiBTZXQgbmFtZSBhbmQgZmlsZW5hbWUgdG8gbnVsbC5cbiAgICAgICAgbmFtZSA9IGZpbGVuYW1lID0gbnVsbFxuXG4gICAgICAgIC8vIDIuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgICAgICAvLyAgICBgZm9ybS1kYXRhOyBuYW1lPVwiYCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgIGlmICghYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZm9ybURhdGFOYW1lQnVmZmVyLCBwb3NpdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIHNvIGl0IHBvaW50cyBhdCB0aGUgYnl0ZSBhZnRlciB0aGUgbmV4dCAweDIyIChcIilcbiAgICAgICAgLy8gICAgYnl0ZSAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDE3XG5cbiAgICAgICAgLy8gNC4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBuYW1lIGdpdmVuXG4gICAgICAgIC8vICAgIGlucHV0IGFuZCBwb3NpdGlvbiwgaWYgdGhlIHJlc3VsdCBpcyBub3QgZmFpbHVyZS4gT3RoZXJ3aXNlLCByZXR1cm5cbiAgICAgICAgLy8gICAgZmFpbHVyZS5cbiAgICAgICAgbmFtZSA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFOYW1lKGlucHV0LCBwb3NpdGlvbilcblxuICAgICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIElmIHBvc2l0aW9uIHBvaW50cyB0byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHN0YXJ0aW5nIHdpdGggYDsgZmlsZW5hbWU9XCJgOlxuICAgICAgICBpZiAoYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZmlsZW5hbWVCdWZmZXIsIHBvc2l0aW9uKSkge1xuICAgICAgICAgIC8vIE5vdGU6IHVuZGljaSBhbHNvIGhhbmRsZXMgZmlsZW5hbWUqXG4gICAgICAgICAgbGV0IGNoZWNrID0gcG9zaXRpb24ucG9zaXRpb24gKyBmaWxlbmFtZUJ1ZmZlci5sZW5ndGhcblxuICAgICAgICAgIGlmIChpbnB1dFtjaGVja10gPT09IDB4MmEpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDFcbiAgICAgICAgICAgIGNoZWNrICs9IDFcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5wdXRbY2hlY2tdICE9PSAweDNkIHx8IGlucHV0W2NoZWNrICsgMV0gIT09IDB4MjIpIHsgLy8gPVwiXG4gICAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBzbyBpdCBwb2ludHMgYXQgdGhlIGJ5dGUgYWZ0ZXIgdGhlIG5leHQgMHgyMiAoXCIpIGJ5dGVcbiAgICAgICAgICAvLyAgICAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMTJcblxuICAgICAgICAgIC8vIDIuIFNldCBmaWxlbmFtZSB0byB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBtdWx0aXBhcnQvZm9ybS1kYXRhIG5hbWUgZ2l2ZW5cbiAgICAgICAgICAvLyAgICBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHQgaXMgbm90IGZhaWx1cmUuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZShpbnB1dCwgcG9zaXRpb24pXG5cbiAgICAgICAgICBpZiAoZmlsZW5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10eXBlJzoge1xuICAgICAgICAvLyAxLiBMZXQgaGVhZGVyIHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlXG4gICAgICAgIC8vICAgIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gMi4gUmVtb3ZlIGFueSBIVFRQIHRhYiBvciBzcGFjZSBieXRlcyBmcm9tIHRoZSBlbmQgb2YgaGVhZGVyIHZhbHVlLlxuICAgICAgICBoZWFkZXJWYWx1ZSA9IHJlbW92ZUNoYXJzKGhlYWRlclZhbHVlLCBmYWxzZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgICAgIC8vIDMuIFNldCBjb250ZW50VHlwZSB0byB0aGUgaXNvbW9ycGhpYyBkZWNvZGluZyBvZiBoZWFkZXIgdmFsdWUuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gaXNvbW9ycGhpY0RlY29kZShoZWFkZXJWYWx1ZSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyc6IHtcbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgaGVhZGVyVmFsdWUgPSByZW1vdmVDaGFycyhoZWFkZXJWYWx1ZSwgZmFsc2UsIHRydWUsIChjaGFyKSA9PiBjaGFyID09PSAweDkgfHwgY2hhciA9PT0gMHgyMClcblxuICAgICAgICBlbmNvZGluZyA9IGlzb21vcnBoaWNEZWNvZGUoaGVhZGVyVmFsdWUpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgLy8gKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgICAgIGNvbGxlY3RBU2VxdWVuY2VPZkJ5dGVzKFxuICAgICAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQsXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuOS4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQVxuICAgIC8vICAgICAgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyIChwYXN0IHRoZSBuZXdsaW5lKS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkICYmIGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1hLW11bHRpcGFydC1mb3JtLWRhdGEtbmFtZVxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZSAoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIC8vIDEuIEFzc2VydDogVGhlIGJ5dGUgYXQgKHBvc2l0aW9uIC0gMSkgaXMgMHgyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gLSAxXSA9PT0gMHgyMilcblxuICAvLyAyLiBMZXQgbmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBieXRlcyB0aGF0IGFyZSBub3QgMHgwQSAoTEYpLCAweDBEIChDUikgb3IgMHgyMiAoXCIpLCBnaXZlbiBwb3NpdGlvbi5cbiAgLyoqIEB0eXBlIHtzdHJpbmcgfCBCdWZmZXJ9ICovXG4gIGxldCBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCAmJiBjaGFyICE9PSAweDIyLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyAzLiBJZiB0aGUgYnl0ZSBhdCBwb3NpdGlvbiBpcyBub3QgMHgyMiAoXCIpLCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBhZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gIT09IDB4MjIpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBuYW1lIGNvdWxkIGJlICdmYWlsdXJlJ1xuICB9IGVsc2Uge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDQuIFJlcGxhY2UgYW55IG9jY3VycmVuY2Ugb2YgdGhlIGZvbGxvd2luZyBzdWJzZXF1ZW5jZXMgaW4gbmFtZSB3aXRoIHRoZSBnaXZlbiBieXRlOlxuICAvLyAtIGAlMEFgOiAweDBBIChMRilcbiAgLy8gLSBgJTBEYDogMHgwRCAoQ1IpXG4gIC8vIC0gYCUyMmA6IDB4MjIgKFwiKVxuICBuYW1lID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5hbWUpXG4gICAgLnJlcGxhY2UoLyUwQS9pZywgJ1xcbicpXG4gICAgLnJlcGxhY2UoLyUwRC9pZywgJ1xccicpXG4gICAgLnJlcGxhY2UoLyUyMi9nLCAnXCInKVxuXG4gIC8vIDUuIFJldHVybiB0aGUgVVRGLTggZGVjb2Rpbmcgd2l0aG91dCBCT00gb2YgbmFtZS5cbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBudW1iZXIpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgbGV0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICB3aGlsZSAoc3RhcnQgPCBpbnB1dC5sZW5ndGggJiYgY29uZGl0aW9uKGlucHV0W3N0YXJ0XSkpIHtcbiAgICArK3N0YXJ0XG4gIH1cblxuICByZXR1cm4gaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIChwb3NpdGlvbi5wb3NpdGlvbiA9IHN0YXJ0KSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKGJ1ZiwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gYnVmLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgYnVmLmxlbmd0aCAmJiBwcmVkaWNhdGUoYnVmW2xlYWRdKSkgbGVhZCsrXG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICB3aGlsZSAodHJhaWwgPiAwICYmIHByZWRpY2F0ZShidWZbdHJhaWxdKSkgdHJhaWwtLVxuICB9XG5cbiAgcmV0dXJuIGxlYWQgPT09IDAgJiYgdHJhaWwgPT09IGJ1Zi5sZW5ndGggLSAxID8gYnVmIDogYnVmLnN1YmFycmF5KGxlYWQsIHRyYWlsICsgMSlcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYge0BwYXJhbSBidWZmZXJ9IHN0YXJ0cyB3aXRoIHtAcGFyYW0gc3RhcnR9XG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc3RhcnRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlclN0YXJ0c1dpdGggKGJ1ZmZlciwgc3RhcnQsIHBvc2l0aW9uKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgc3RhcnQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0W2ldICE9PSBidWZmZXJbcG9zaXRpb24ucG9zaXRpb24gKyBpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG11bHRpcGFydEZvcm1EYXRhUGFyc2VyLFxuICB2YWxpZGF0ZUJvdW5kYXJ5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQmxvYkxpa2UsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGV4dHJhY3RNaW1lVHlwZSxcbiAgdXRmOERlY29kZUJ5dGVzXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGlzRXJyb3JlZCwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsL3R5cGVzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsgbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEtcGFyc2VyJylcbmxldCByYW5kb21cblxudHJ5IHtcbiAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnbm9kZTpjcnlwdG8nKVxuICByYW5kb20gPSAobWF4KSA9PiBjcnlwdG8ucmFuZG9tSW50KDAsIG1heClcbn0gY2F0Y2gge1xuICByYW5kb20gPSAobWF4KSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKG1heCkpXG59XG5cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuY29uc3QgaGFzRmluYWxpemF0aW9uUmVnaXN0cnkgPSBnbG9iYWxUaGlzLkZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MTgnKSAhPT0gMFxubGV0IHN0cmVhbVJlZ2lzdHJ5XG5cbmlmIChoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSkge1xuICBzdHJlYW1SZWdpc3RyeSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgod2Vha1JlZikgPT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHdlYWtSZWYuZGVyZWYoKVxuICAgIGlmIChzdHJlYW0gJiYgIXN0cmVhbS5sb2NrZWQgJiYgIWlzRGlzdHVyYmVkKHN0cmVhbSkgJiYgIWlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICBzdHJlYW0uY2FuY2VsKCdSZXNwb25zZSBvYmplY3QgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQnKS5jYXRjaChub29wKVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHN0cmVhbSBiZSBudWxsLlxuICBsZXQgc3RyZWFtID0gbnVsbFxuXG4gIC8vIDIuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbiBzZXQgc3RyZWFtIHRvIG9iamVjdC5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgc3RyZWFtID0gb2JqZWN0XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBvYmplY3QgaXMgYSBCbG9iIG9iamVjdCwgc2V0IHN0cmVhbSB0byB0aGVcbiAgICAvLyAgICByZXN1bHQgb2YgcnVubmluZyBvYmplY3RcdTIwMTlzIGdldCBzdHJlYW0uXG4gICAgc3RyZWFtID0gb2JqZWN0LnN0cmVhbSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgc3RyZWFtIHRvIGEgbmV3IFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgYW5kIHNldFxuICAgIC8vICAgIHVwIHN0cmVhbSB3aXRoIGJ5dGUgcmVhZGluZyBzdXBwb3J0LlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnID8gdGV4dEVuY29kZXIuZW5jb2RlKHNvdXJjZSkgOiBzb3VyY2VcblxuICAgICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYnVmZmVyKVxuICAgICAgICB9XG5cbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6ICdieXRlcydcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gQXNzZXJ0OiBzdHJlYW0gaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QuXG4gIGFzc2VydChpc1JlYWRhYmxlU3RyZWFtTGlrZShzdHJlYW0pKVxuXG4gIC8vIDYuIExldCBhY3Rpb24gYmUgbnVsbC5cbiAgbGV0IGFjdGlvbiA9IG51bGxcblxuICAvLyA3LiBMZXQgc291cmNlIGJlIG51bGwuXG4gIGxldCBzb3VyY2UgPSBudWxsXG5cbiAgLy8gOC4gTGV0IGxlbmd0aCBiZSBudWxsLlxuICBsZXQgbGVuZ3RoID0gbnVsbFxuXG4gIC8vIDkuIExldCB0eXBlIGJlIG51bGwuXG4gIGxldCB0eXBlID0gbnVsbFxuXG4gIC8vIDEwLiBTd2l0Y2ggb24gb2JqZWN0OlxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBvYmplY3QuXG4gICAgLy8gTm90ZTogc2V0dGluZyBzb3VyY2UgdG8gYSBVaW50OEFycmF5IGhlcmUgYnJlYWtzIHNvbWUgbW9ja2luZyBhc3N1bXB0aW9ucy5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCB0eXBlIHRvIGB0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIC8vIFVSTFNlYXJjaFBhcmFtc1xuXG4gICAgLy8gc3BlYyBzYXlzIHRvIHJ1biBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb24gYm9keS5saXN0XG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBOb2RlLmpzIGFzIGFwYXJ0IG9mIGFuIFVSTFNlYXJjaFBhcmFtcyBpbnN0YW5jZSB0b1N0cmluZyBtZXRob2RcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMNDkwXG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMMTEwMFxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBzZXJpYWxpemVyIHdpdGggb2JqZWN0XHUyMDE5cyBsaXN0LlxuICAgIHNvdXJjZSA9IG9iamVjdC50b1N0cmluZygpXG5cbiAgICAvLyBTZXQgdHlwZSB0byBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LnNsaWNlKCkpXG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJWaWV3XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LmJ1ZmZlci5zbGljZShvYmplY3QuYnl0ZU9mZnNldCwgb2JqZWN0LmJ5dGVPZmZzZXQgKyBvYmplY3QuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShvYmplY3QpKSB7XG4gICAgY29uc3QgYm91bmRhcnkgPSBgLS0tLWZvcm1kYXRhLXVuZGljaS0wJHtgJHtyYW5kb20oMWUxMSl9YC5wYWRTdGFydCgxMSwgJzAnKX1gXG4gICAgY29uc3QgcHJlZml4ID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGFgXG5cbiAgICAvKiEgZm9ybWRhdGEtcG9seWZpbGwuIE1JVCBMaWNlbnNlLiBKaW1teSBXXHUwMEU0cnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdFx1MjAxOXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ1JMRiBpcyBhcHBlbmRlZCB0byB0aGUgYm9keSB0byBmdW5jdGlvbiB3aXRoIGxlZ2FjeSBzZXJ2ZXJzIGFuZCBtYXRjaCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9ibG9iLzM0MzRjNmI0NmU2ODI0NTI5NzM5NzJlODMxMzYxM2RmYTU4Y2Q2OTAvbGliL21pbWUuYyNMMTAyOS1MMTAzMFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy82M1xuICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAtLSR7Ym91bmRhcnl9LS1cXHJcXG5gKVxuICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rKVxuICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgaWYgKGhhc1Vua25vd25TaXplVmFsdWUpIHtcbiAgICAgIGxlbmd0aCA9IG51bGxcbiAgICB9XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGJsb2JQYXJ0cykge1xuICAgICAgICBpZiAocGFydC5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHBhcnQuc3RyZWFtKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB5aWVsZCBwYXJ0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdHlwZSB0byBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9YCxcbiAgICAvLyBmb2xsb3dlZCBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBib3VuZGFyeSBzdHJpbmcgZ2VuZXJhdGVkXG4gICAgLy8gYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgZW5jb2RpbmcgYWxnb3JpdGhtLlxuICAgIHR5cGUgPSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gQmxvYlxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICAvLyBTZXQgbGVuZ3RoIHRvIG9iamVjdFx1MjAxOXMgc2l6ZS5cbiAgICBsZW5ndGggPSBvYmplY3Quc2l6ZVxuXG4gICAgLy8gSWYgb2JqZWN0XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSBpcyBub3QgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIHNldFxuICAgIC8vIHR5cGUgdG8gaXRzIHZhbHVlLlxuICAgIGlmIChvYmplY3QudHlwZSkge1xuICAgICAgdHlwZSA9IG9iamVjdC50eXBlXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3RbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYga2VlcGFsaXZlIGlzIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGtlZXBhbGl2ZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2VlcGFsaXZlJylcbiAgICB9XG5cbiAgICAvLyBJZiBvYmplY3QgaXMgZGlzdHVyYmVkIG9yIGxvY2tlZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpIHx8IG9iamVjdC5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdSZXNwb25zZSBib2R5IG9iamVjdCBzaG91bGQgbm90IGJlIGRpc3R1cmJlZCBvciBsb2NrZWQnXG4gICAgICApXG4gICAgfVxuXG4gICAgc3RyZWFtID1cbiAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtID8gb2JqZWN0IDogUmVhZGFibGVTdHJlYW1Gcm9tKG9iamVjdClcbiAgfVxuXG4gIC8vIDExLiBJZiBzb3VyY2UgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCBhY3Rpb24gdG8gYVxuICAvLyBzdGVwIHRoYXQgcmV0dXJucyBzb3VyY2UgYW5kIGxlbmd0aCB0byBzb3VyY2VcdTIwMTlzIGxlbmd0aC5cbiAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnIHx8IHV0aWwuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHNvdXJjZSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBhY3Rpb24gaXMgbm9uLW51bGwsIHRoZW4gcnVuIHRoZXNlIHN0ZXBzIGluIGluIHBhcmFsbGVsOlxuICBpZiAoYWN0aW9uICE9IG51bGwpIHtcbiAgICAvLyBSdW4gYWN0aW9uLlxuICAgIGxldCBpdGVyYXRvclxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gYWN0aW9uKG9iamVjdClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIFdoZW4gcnVubmluZyBhY3Rpb24gaXMgZG9uZSwgY2xvc2Ugc3RyZWFtLlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgICAgY29udHJvbGxlci5ieW9iUmVxdWVzdD8ucmVzcG9uZCgwKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgb25lIG9yIG1vcmUgYnl0ZXMgYXJlIGF2YWlsYWJsZSBhbmQgc3RyZWFtIGlzIG5vdCBlcnJvcmVkLFxuICAgICAgICAgIC8vIGVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZVxuICAgICAgICAgIC8vIGJ5dGVzIGludG8gc3RyZWFtLlxuICAgICAgICAgIGlmICghaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHZhbHVlKVxuICAgICAgICAgICAgaWYgKGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShidWZmZXIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogJ2J5dGVzJ1xuICAgIH0pXG4gIH1cblxuICAvLyAxMy4gTGV0IGJvZHkgYmUgYSBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0sIHNvdXJjZSBpcyBzb3VyY2UsXG4gIC8vIGFuZCBsZW5ndGggaXMgbGVuZ3RoLlxuICBjb25zdCBib2R5ID0geyBzdHJlYW0sIHNvdXJjZSwgbGVuZ3RoIH1cblxuICAvLyAxNC4gUmV0dXJuIChib2R5LCB0eXBlKS5cbiAgcmV0dXJuIFtib2R5LCB0eXBlXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXQtc2FmZWx5LWV4dHJhY3RcbmZ1bmN0aW9uIHNhZmVseUV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIC8vIFRvIHNhZmVseSBleHRyYWN0IGEgYm9keSBhbmQgYSBgQ29udGVudC1UeXBlYCB2YWx1ZSBmcm9tXG4gIC8vIGEgYnl0ZSBzZXF1ZW5jZSBvciBCb2R5SW5pdCBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuOlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBBc3NlcnQ6IG9iamVjdCBpcyBuZWl0aGVyIGRpc3R1cmJlZCBub3IgbG9ja2VkLlxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCF1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCksICdUaGUgYm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLicpXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIW9iamVjdC5sb2NrZWQsICdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGV4dHJhY3Rpbmcgb2JqZWN0LlxuICByZXR1cm4gZXh0cmFjdEJvZHkob2JqZWN0LCBrZWVwYWxpdmUpXG59XG5cbmZ1bmN0aW9uIGNsb25lQm9keSAoaW5zdGFuY2UsIGJvZHkpIHtcbiAgLy8gVG8gY2xvbmUgYSBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNsb25lXG5cbiAgLy8gMS4gTGV0IFx1MDBBQiBvdXQxLCBvdXQyIFx1MDBCQiBiZSB0aGUgcmVzdWx0IG9mIHRlZWluZyBib2R5XHUyMDE5cyBzdHJlYW0uXG4gIGNvbnN0IFtvdXQxLCBvdXQyXSA9IGJvZHkuc3RyZWFtLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHlcdTIwMTlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogb3V0MixcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxufVxuXG5mdW5jdGlvbiBib2R5TWl4aW5NZXRob2RzIChpbnN0YW5jZSkge1xuICBjb25zdCBtZXRob2RzID0ge1xuICAgIGJsb2IgKCkge1xuICAgICAgLy8gVGhlIGJsb2IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBCbG9iIHdob3NlXG4gICAgICAvLyBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHdob3NlIHR5cGUgYXR0cmlidXRlIGlzIHRoaXNcdTIwMTlzXG4gICAgICAvLyBNSU1FIHR5cGUuXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG1pbWVUeXBlID0gJydcbiAgICAgICAgfSBlbHNlIGlmIChtaW1lVHlwZSkge1xuICAgICAgICAgIG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKG1pbWVUeXBlKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgQmxvYiB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHR5cGUgYXR0cmlidXRlXG4gICAgICAgIC8vIGlzIG1pbWVUeXBlLlxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiBtaW1lVHlwZSB9KVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFycmF5QnVmZmVyICgpIHtcbiAgICAgIC8vIFRoZSBhcnJheUJ1ZmZlcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHRcbiAgICAgIC8vIG9mIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIG5ldyBBcnJheUJ1ZmZlclxuICAgICAgLy8gd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBjb25zdW1lQm9keSh0aGlzLCB1dGY4RGVjb2RlQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBqc29uICgpIHtcbiAgICAgIC8vIFRoZSBqc29uKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBwYXJzZSBKU09OIGZyb20gYnl0ZXMuXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgcGFyc2VKU09ORnJvbUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgZm9ybURhdGEgKCkge1xuICAgICAgLy8gVGhlIGZvcm1EYXRhKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXAgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsICh2YWx1ZSkgPT4ge1xuICAgICAgICAvLyAxLiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBnZXQgdGhlIE1JTUUgdHlwZSB3aXRoIHRoaXMuXG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gYm9keU1pbWVUeXBlKHRoaXMpXG5cbiAgICAgICAgLy8gMi4gSWYgbWltZVR5cGUgaXMgbm9uLW51bGwsIHRoZW4gc3dpdGNoIG9uIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGFuZCBydW5cbiAgICAgICAgLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgc3RlcHM6XG4gICAgICAgIGlmIChtaW1lVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN3aXRjaCAobWltZVR5cGUuZXNzZW5jZSkge1xuICAgICAgICAgICAgY2FzZSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc6IHtcbiAgICAgICAgICAgICAgLy8gMS4gLi4uIFtsb25nIHN0ZXBdXG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IG11bHRpcGFydEZvcm1EYXRhUGFyc2VyKHZhbHVlLCBtaW1lVHlwZSlcblxuICAgICAgICAgICAgICAvLyAyLiBJZiB0aGF0IGZhaWxzIGZvciBzb21lIHJlYXNvbiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICAgICAgaWYgKHBhcnNlZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIGJvZHkgYXMgRm9ybURhdGEuJylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIDMuIFJldHVybiBhIG5ldyBGb3JtRGF0YSBvYmplY3QsIGFwcGVuZGluZyBlYWNoIGVudHJ5LFxuICAgICAgICAgICAgICAvLyAgICByZXN1bHRpbmcgZnJvbSB0aGUgcGFyc2luZyBvcGVyYXRpb24sIHRvIGl0cyBlbnRyeSBsaXN0LlxuICAgICAgICAgICAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgICAgICAgIGZkW2tTdGF0ZV0gPSBwYXJzZWRcblxuICAgICAgICAgICAgICByZXR1cm4gZmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IHtcbiAgICAgICAgICAgICAgLy8gMS4gTGV0IGVudHJpZXMgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGJ5dGVzLlxuICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh2YWx1ZS50b1N0cmluZygpKVxuXG4gICAgICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cblxuICAgICAgICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJ5IGxpc3QgaXMgZW50cmllcy5cbiAgICAgICAgICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgZmQuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSB3YXMgbm90IG9uZSBvZiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBvciBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLidcbiAgICAgICAgKVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGJ5dGVzICgpIHtcbiAgICAgIC8vIFRoZSBieXRlcygpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBjb25zdW1lIGJvZHlcbiAgICAgIC8vIHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIHRoZVxuICAgICAgLy8gcmVzdWx0IG9mIGNyZWF0aW5nIGEgVWludDhBcnJheSBmcm9tIGJ5dGVzIGluIHRoaXNcdTIwMTlzIHJlbGV2YW50IHJlYWxtLlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0aG9kc1xufVxuXG5mdW5jdGlvbiBtaXhpbkJvZHkgKHByb3RvdHlwZSkge1xuICBPYmplY3QuYXNzaWduKHByb3RvdHlwZS5wcm90b3R5cGUsIGJvZHlNaXhpbk1ldGhvZHMocHJvdG90eXBlKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IG9iamVjdFxuICogQHBhcmFtIHsodmFsdWU6IHVua25vd24pID0+IHVua25vd259IGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBpbnN0YW5jZVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBpcyB1bnVzYWJsZTogQm9keSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQnKVxuICB9XG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN0XHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMoQnVmZmVyLmFsbG9jVW5zYWZlKDApKVxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCBvYmplY3RcdTIwMTlzIGJvZHkgZ2l2ZW4gc3VjY2Vzc1N0ZXBzLFxuICAvLyAgICBlcnJvclN0ZXBzLCBhbmQgb2JqZWN0XHUyMDE5cyByZWxldmFudCBnbG9iYWwgb2JqZWN0LlxuICBhd2FpdCBmdWxseVJlYWRCb2R5KG9iamVjdFtrU3RhdGVdLmJvZHksIHN1Y2Nlc3NTdGVwcywgZXJyb3JTdGVwcylcblxuICAvLyA3LiBSZXR1cm4gcHJvbWlzZS5cbiAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gYm9keVVudXNhYmxlIChvYmplY3QpIHtcbiAgY29uc3QgYm9keSA9IG9iamVjdFtrU3RhdGVdLmJvZHlcblxuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keVx1MjAxOXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1qc29uLWJ5dGVzLXRvLWEtamF2YXNjcmlwdC12YWx1ZVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICovXG5mdW5jdGlvbiBwYXJzZUpTT05Gcm9tQnl0ZXMgKGJ5dGVzKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHV0ZjhEZWNvZGVCeXRlcyhieXRlcykpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LW1pbWUtdHlwZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vcmVzcG9uc2UnKS5SZXNwb25zZXxpbXBvcnQoJy4vcmVxdWVzdCcpLlJlcXVlc3R9IHJlcXVlc3RPclJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAocmVxdWVzdE9yUmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgbnVsbC5cbiAgLy8gMi4gSWYgcmVxdWVzdE9yUmVzcG9uc2UgaXMgYSBSZXF1ZXN0IG9iamVjdCwgdGhlbiBzZXQgaGVhZGVycyB0byByZXF1ZXN0T3JSZXNwb25zZVx1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDMuIE90aGVyd2lzZSwgc2V0IGhlYWRlcnMgdG8gcmVxdWVzdE9yUmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vaGVhZGVycycpLkhlYWRlcnNMaXN0fSAqL1xuICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdE9yUmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdFxuXG4gIC8vIDQuIExldCBtaW1lVHlwZSBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYSBNSU1FIHR5cGUgZnJvbSBoZWFkZXJzLlxuICBjb25zdCBtaW1lVHlwZSA9IGV4dHJhY3RNaW1lVHlwZShoZWFkZXJzKVxuXG4gIC8vIDUuIElmIG1pbWVUeXBlIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBleHRyYWN0Qm9keSxcbiAgc2FmZWx5RXh0cmFjdEJvZHksXG4gIGNsb25lQm9keSxcbiAgbWl4aW5Cb2R5LFxuICBzdHJlYW1SZWdpc3RyeSxcbiAgaGFzRmluYWxpemF0aW9uUmVnaXN0cnksXG4gIGJvZHlVbnVzYWJsZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiBnbG9iYWwgV2ViQXNzZW1ibHkgKi9cblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbC5qcycpXG5jb25zdCB7IGNoYW5uZWxzIH0gPSByZXF1aXJlKCcuLi9jb3JlL2RpYWdub3N0aWNzLmpzJylcbmNvbnN0IHRpbWVycyA9IHJlcXVpcmUoJy4uL3V0aWwvdGltZXJzLmpzJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzLmpzJylcbmNvbnN0IHtcbiAga1VybCxcbiAga1Jlc2V0LFxuICBrQ2xpZW50LFxuICBrUGFyc2VyLFxuICBrQmxvY2tpbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtOb1JlZixcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0LFxuICBrSG9zdEhlYWRlcixcbiAga1BlbmRpbmdJZHgsXG4gIGtSdW5uaW5nSWR4LFxuICBrRXJyb3IsXG4gIGtQaXBlbGluaW5nLFxuICBrU29ja2V0LFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlLFxuICBrTWF4SGVhZGVyc1NpemUsXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0LFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAga0hlYWRlcnNUaW1lb3V0LFxuICBrQm9keVRpbWVvdXQsXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoLFxuICBrTWF4UmVxdWVzdHMsXG4gIGtDb3VudGVyLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrT25FcnJvcixcbiAga1Jlc3VtZSxcbiAga0hUVFBDb250ZXh0XG59ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzLmpzJylcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi4vbGxodHRwL2NvbnN0YW50cy5qcycpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5jb25zdCBhZGRMaXN0ZW5lciA9IHV0aWwuYWRkTGlzdGVuZXJcbmNvbnN0IHJlbW92ZUFsbExpc3RlbmVycyA9IHV0aWwucmVtb3ZlQWxsTGlzdGVuZXJzXG5jb25zdCBrSWRsZVNvY2tldFZhbGlkYXRpb24gPSBTeW1ib2woJ2tJZGxlU29ja2V0VmFsaWRhdGlvbicpXG5jb25zdCBrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0ID0gU3ltYm9sKCdrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0JylcbmNvbnN0IGtTb2NrZXRVc2VkID0gU3ltYm9sKCdrU29ja2V0VXNlZCcpXG5cbmxldCBleHRyYWN0Qm9keVxuXG5hc3luYyBmdW5jdGlvbiBsYXp5bGxodHRwICgpIHtcbiAgY29uc3QgbGxodHRwV2FzbURhdGEgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA/IHJlcXVpcmUoJy4uL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUocmVxdWlyZSgnLi4vbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMnKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSB0aGUgc2ltZCBvcHRpb24gbm90XG4gICAgLy8gYmVpbmcgZW5hYmxlZCwgYnV0IHRoZSBvY2N1cnJpbmcgb2YgdGhpcyBvdGhlciBlcnJvclxuICAgIC8vICogaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL2lzc3Vlcy8xMTQ5NVxuICAgIC8vIGdvdCBtZSB0byByZW1vdmUgdGhhdCBjaGVjayB0byBhdm9pZCBicmVha2luZyBOb2RlIDEyLlxuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUobGxodHRwV2FzbURhdGEgfHwgcmVxdWlyZSgnLi4vbGxodHRwL2xsaHR0cC13YXNtLmpzJykpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kLCB7XG4gICAgZW52OiB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cblxuICAgICAgd2FzbV9vbl91cmw6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9zdGF0dXM6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25TdGF0dXMobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2JlZ2luOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUJlZ2luKCkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX2ZpZWxkOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyRmllbGQobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfdmFsdWU6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJWYWx1ZShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcnNfY29tcGxldGU6IChwLCBzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlcnNDb21wbGV0ZShzdGF0dXNDb2RlLCBCb29sZWFuKHVwZ3JhZGUpLCBCb29sZWFuKHNob3VsZEtlZXBBbGl2ZSkpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2JvZHk6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25Cb2R5KG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZTogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpIHx8IDBcbiAgICAgIH1cblxuICAgICAgLyogZXNsaW50LWVuYWJsZSBjYW1lbGNhc2UgKi9cbiAgICB9XG4gIH0pXG59XG5cbmxldCBsbGh0dHBJbnN0YW5jZSA9IG51bGxcbmxldCBsbGh0dHBQcm9taXNlID0gbGF6eWxsaHR0cCgpXG5sbGh0dHBQcm9taXNlLmNhdGNoKClcblxubGV0IGN1cnJlbnRQYXJzZXIgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyU2l6ZSA9IDBcbmxldCBjdXJyZW50QnVmZmVyUHRyID0gbnVsbFxuXG5jb25zdCBVU0VfTkFUSVZFX1RJTUVSID0gMFxuY29uc3QgVVNFX0ZBU1RfVElNRVIgPSAxXG5cbi8vIFVzZSBmYXN0IHRpbWVycyBmb3IgaGVhZGVycyBhbmQgYm9keSB0byB0YWtlIGV2ZW50dWFsIGV2ZW50IGxvb3Bcbi8vIGxhdGVuY3kgaW50byBhY2NvdW50LlxuY29uc3QgVElNRU9VVF9IRUFERVJTID0gMiB8IFVTRV9GQVNUX1RJTUVSXG5jb25zdCBUSU1FT1VUX0JPRFkgPSA0IHwgVVNFX0ZBU1RfVElNRVJcblxuLy8gVXNlIG5hdGl2ZSB0aW1lcnMgdG8gaWdub3JlIGV2ZW50IGxvb3AgbGF0ZW5jeSBmb3Iga2VlcC1hbGl2ZVxuLy8gaGFuZGxpbmcuXG5jb25zdCBUSU1FT1VUX0tFRVBfQUxJVkUgPSA4IHwgVVNFX05BVElWRV9USU1FUlxuXG5jbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoY2xpZW50LCBzb2NrZXQsIHsgZXhwb3J0cyB9KSB7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShjbGllbnRba01heEhlYWRlcnNTaXplXSkgJiYgY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0gPiAwKVxuXG4gICAgdGhpcy5sbGh0dHAgPSBleHBvcnRzXG4gICAgdGhpcy5wdHIgPSB0aGlzLmxsaHR0cC5sbGh0dHBfYWxsb2MoY29uc3RhbnRzLlRZUEUuUkVTUE9OU0UpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMudXBncmFkZSA9IGZhbHNlXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuICAgIHRoaXMuaGVhZGVyc01heFNpemUgPSBjbGllbnRba01heEhlYWRlcnNTaXplXVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gZmFsc2VcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXN1bWUgPSB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG4gICAgdGhpcy5tYXhSZXNwb25zZVNpemUgPSBjbGllbnRba01heFJlc3BvbnNlU2l6ZV1cbiAgfVxuXG4gIHNldFRpbWVvdXQgKGRlbGF5LCB0eXBlKSB7XG4gICAgLy8gSWYgdGhlIGV4aXN0aW5nIHRpbWVyIGFuZCB0aGUgbmV3IHRpbWVyIGFyZSBvZiBkaWZmZXJlbnQgdGltZXIgdHlwZVxuICAgIC8vIChmYXN0IG9yIG5hdGl2ZSkgb3IgaGF2ZSBkaWZmZXJlbnQgZGVsYXksIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4aXN0aW5nXG4gICAgLy8gdGltZXIgYW5kIHNldCBhIG5ldyBvbmUuXG4gICAgaWYgKFxuICAgICAgZGVsYXkgIT09IHRoaXMudGltZW91dFZhbHVlIHx8XG4gICAgICAodHlwZSAmIFVTRV9GQVNUX1RJTUVSKSBeICh0aGlzLnRpbWVvdXRUeXBlICYgVVNFX0ZBU1RfVElNRVIpXG4gICAgKSB7XG4gICAgICAvLyBJZiBhIHRpbWVvdXQgaXMgYWxyZWFkeSBzZXQsIGNsZWFyIGl0IHdpdGggY2xlYXJUaW1lb3V0IG9mIHRoZSBmYXN0XG4gICAgICAvLyB0aW1lciBpbXBsZW1lbnRhdGlvbiwgYXMgaXQgY2FuIGNsZWFyIGZhc3QgYW5kIG5hdGl2ZSB0aW1lcnMuXG4gICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmIChkZWxheSkge1xuICAgICAgICBpZiAodHlwZSAmIFVTRV9GQVNUX1RJTUVSKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldEZhc3RUaW1lb3V0KG9uUGFyc2VyVGltZW91dCwgZGVsYXksIG5ldyBXZWFrUmVmKHRoaXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCBkZWxheSwgbmV3IFdlYWtSZWYodGhpcykpXG4gICAgICAgICAgdGhpcy50aW1lb3V0LnVucmVmKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IGRlbGF5XG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX3Jlc3VtZSh0aGlzLnB0cilcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnNvY2tldC5yZWFkKCkgfHwgRU1QVFlfQlVGKSAvLyBGbHVzaCBwYXJzZXIuXG4gICAgdGhpcy5yZWFkTW9yZSgpXG4gIH1cblxuICByZWFkTW9yZSAoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiB0aGlzLnB0cikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLnNvY2tldC5yZWFkKClcbiAgICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgdGhpcy5leGVjdXRlKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGUgKGRhdGEpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG5cbiAgICBjb25zdCB7IHNvY2tldCwgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiBjdXJyZW50QnVmZmVyU2l6ZSkge1xuICAgICAgaWYgKGN1cnJlbnRCdWZmZXJQdHIpIHtcbiAgICAgICAgbGxodHRwLmZyZWUoY3VycmVudEJ1ZmZlclB0cilcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCdWZmZXJTaXplID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gNDA5NikgKiA0MDk2XG4gICAgICBjdXJyZW50QnVmZmVyUHRyID0gbGxodHRwLm1hbGxvYyhjdXJyZW50QnVmZmVyU2l6ZSlcbiAgICB9XG5cbiAgICBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgY3VycmVudEJ1ZmZlclB0ciwgY3VycmVudEJ1ZmZlclNpemUpLnNldChkYXRhKVxuXG4gICAgLy8gQ2FsbCBgZXhlY3V0ZWAgb24gdGhlIHdhc20gcGFyc2VyLlxuICAgIC8vIFdlIHBhc3MgdGhlIGBsbGh0dHBfcGFyc2VyYCBwb2ludGVyIGFkZHJlc3MsIHRoZSBwb2ludGVyIGFkZHJlc3Mgb2YgYnVmZmVyIHZpZXcgZGF0YSxcbiAgICAvLyBhbmQgZmluYWxseSB0aGUgbGVuZ3RoIG9mIGJ5dGVzIHRvIHBhcnNlLlxuICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgY29kZSBvciBgY29uc3RhbnRzLkVSUk9SLk9LYC5cbiAgICB0cnkge1xuICAgICAgbGV0IHJldFxuXG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gZGF0YVxuICAgICAgICBjdXJyZW50UGFyc2VyID0gdGhpc1xuICAgICAgICByZXQgPSBsbGh0dHAubGxodHRwX2V4ZWN1dGUodGhpcy5wdHIsIGN1cnJlbnRCdWZmZXJQdHIsIGRhdGEubGVuZ3RoKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYXRjaCAqL1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBvZmZzZXQgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9wb3ModGhpcy5wdHIpIC0gY3VycmVudEJ1ZmZlclB0clxuXG4gICAgICBpZiAocmV0ICE9PSBjb25zdGFudHMuRVJST1IuT0spIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0KVxuXG4gICAgICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRURfVVBHUkFERSkge1xuICAgICAgICAgIHRoaXMub25VcGdyYWRlKGJvZHkpXG4gICAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlXG4gICAgICAgICAgc29ja2V0LnVuc2hpZnQoYm9keSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKHJldCwgYm9keSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGZpbmlzaCAoKSB7XG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT09IG51bGwpXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcblxuICAgIGNvbnN0IHsgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBsZXQgcmV0XG5cbiAgICB0cnkge1xuICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgIHJldCA9IGxsaHR0cC5sbGh0dHBfZmluaXNoKHRoaXMucHRyKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5PSykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEIHx8IHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICB0aGlzLnBhdXNlZCA9IHRydWVcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRXJyb3IocmV0LCBFTVBUWV9CVUYpXG4gIH1cblxuICBjcmVhdGVFcnJvciAocmV0LCBkYXRhKSB7XG4gICAgY29uc3QgeyBsbGh0dHAsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCB9ID0gdGhpc1xuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgYnl0ZXNSZWFkICE9PSBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkpIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgcHRyID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcmVhc29uKHRoaXMucHRyKVxuICAgIGxldCBtZXNzYWdlID0gJydcbiAgICBpZiAocHRyKSB7XG4gICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgJ1Jlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHRoZSBIVFRQLzEuMSBwcm90b2NvbCAoJyArXG4gICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICcpJ1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGhpcy50aW1lb3V0ICYmIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICB9XG5cbiAgb25TdGF0dXMgKGJ1Zikge1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IGJ1Zi50b1N0cmluZygpXG4gIH1cblxuICBvbk1lc3NhZ2VCZWdpbiAoKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgcmVzcG9uc2UnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXF1ZXN0Lm9uUmVzcG9uc2VTdGFydGVkKClcbiAgfVxuXG4gIG9uSGVhZGVyRmllbGQgKGJ1Zikge1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDApIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIG9uSGVhZGVyVmFsdWUgKGJ1Zikge1xuICAgIGxldCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAxKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgICBsZW4gKz0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gdGhpcy5oZWFkZXJzW2xlbiAtIDJdXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDEwKSB7XG4gICAgICBjb25zdCBoZWFkZXJOYW1lID0gdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSlcbiAgICAgIGlmIChoZWFkZXJOYW1lID09PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgICAgdGhpcy5rZWVwQWxpdmUgKz0gYnVmLnRvU3RyaW5nKClcbiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiArPSBidWYudG9TdHJpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYgdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG4gICAgYXNzZXJ0KGNsaWVudFtrU29ja2V0XSA9PT0gc29ja2V0KVxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuICAgIGFzc2VydCgoaGVhZGVycy5sZW5ndGggJiAxKSA9PT0gMClcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuICAgIGFzc2VydChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gbnVsbFxuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgc29ja2V0LnVuc2hpZnQoaGVhZClcblxuICAgIHNvY2tldFtrUGFyc2VyXS5kZXN0cm95KClcbiAgICBzb2NrZXRba1BhcnNlcl0gPSBudWxsXG5cbiAgICBzb2NrZXRba0NsaWVudF0gPSBudWxsXG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoc29ja2V0KVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICAgIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbCAvLyBUT0RPIChmaXgpOiBUaGlzIGlzIGhhY2t5Li4uXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID09PSAwKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCByZXNwb25zZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KCh0aGlzLmhlYWRlcnMubGVuZ3RoICYgMSkgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHRoaXMuc2hvdWxkS2VlcEFsaXZlICYmIGNsaWVudFtrUGlwZWxpbmluZ10pIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZVRpbWVvdXQgPSB0aGlzLmtlZXBBbGl2ZSA/IHV0aWwucGFyc2VLZWVwQWxpdmVUaW1lb3V0KHRoaXMua2VlcEFsaXZlKSA6IG51bGxcblxuICAgICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gTWF0aC5taW4oXG4gICAgICAgICAga2VlcEFsaXZlVGltZW91dCAtIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0sXG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVNYXhUaW1lb3V0XVxuICAgICAgICApXG4gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aW1lb3V0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IGNsaWVudFtrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3AgbW9yZSByZXF1ZXN0cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwYXVzZSA9IHJlcXVlc3Qub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHRoaXMucmVzdW1lLCBzdGF0dXNUZXh0KSA9PT0gZmFsc2VcblxuICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICB9XG5cbiAgICByZXR1cm4gcGF1c2UgPyBjb25zdGFudHMuRVJST1IuUEFVU0VEIDogMFxuICB9XG5cbiAgb25Cb2R5IChidWYpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCBtYXhSZXNwb25zZVNpemUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMjAwKVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSA+IC0xICYmIHRoaXMuYnl0ZXNSZWFkICsgYnVmLmxlbmd0aCA+IG1heFJlc3BvbnNlU2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ1Zi5sZW5ndGhcblxuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShidWYpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9XG4gIH1cblxuICBvbk1lc3NhZ2VDb21wbGV0ZSAoKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgaGVhZGVycywgY29udGVudExlbmd0aCwgYnl0ZXNSZWFkLCBzaG91bGRLZWVwQWxpdmUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkICYmICghc3RhdHVzQ29kZSB8fCBzaG91bGRLZWVwQWxpdmUpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuICAgIGFzc2VydCgodGhpcy5oZWFkZXJzLmxlbmd0aCAmIDEpID09PSAwKVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgYmUgaGFuZGxlZCBieSBsbGh0dHA/ICovXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgY29udGVudExlbmd0aCAmJiBieXRlc1JlYWQgIT09IHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Db21wbGV0ZShoZWFkZXJzKVxuXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBzb2NrZXRba1NvY2tldFVzZWRdID0gdHJ1ZVxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09IG51bGwgfHwgY2xpZW50W2tQaXBlbGluaW5nXSA9PT0gMSkge1xuICAgICAgLy8gV2UgbXVzdCB3YWl0IGEgZnVsbCBldmVudCBsb29wIGN5Y2xlIHRvIHJldXNlIHRoaXMgc29ja2V0IHRvIG1ha2Ugc3VyZVxuICAgICAgLy8gdGhhdCBub24tc3BlYyBjb21wbGlhbnQgc2VydmVycyBhcmUgbm90IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gZXZlbiBpZiB0aGV5XG4gICAgICAvLyBzYWlkIHRoZXkgd29uJ3QuXG4gICAgICBzZXRJbW1lZGlhdGUoKCkgPT4gY2xpZW50W2tSZXN1bWVdKCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uUGFyc2VyVGltZW91dCAocGFyc2VyKSB7XG4gIGNvbnN0IHsgc29ja2V0LCB0aW1lb3V0VHlwZSwgY2xpZW50LCBwYXVzZWQgfSA9IHBhcnNlci5kZXJlZigpXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICBpZiAoIXNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0LndyaXRhYmxlTmVlZERyYWluIHx8IGNsaWVudFtrUnVubmluZ10gPiAxKSB7XG4gICAgICBhc3NlcnQoIXBhdXNlZCwgJ2Nhbm5vdCBiZSBwYXVzZWQgd2hpbGUgd2FpdGluZyBmb3IgaGVhZGVycycpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSGVhZGVyc1RpbWVvdXRFcnJvcigpKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKSB7XG4gICAgaWYgKCFwYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0tFRVBfQUxJVkUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3RIMSAoY2xpZW50LCBzb2NrZXQpIHtcbiAgY2xpZW50W2tTb2NrZXRdID0gc29ja2V0XG5cbiAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgIGxsaHR0cEluc3RhbmNlID0gYXdhaXQgbGxodHRwUHJvbWlzZVxuICAgIGxsaHR0cFByb21pc2UgPSBudWxsXG4gIH1cblxuICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAwXG4gIHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0XSA9IG51bGxcbiAgc29ja2V0W2tTb2NrZXRVc2VkXSA9IGZhbHNlXG4gIHNvY2tldFtrUGFyc2VyXSA9IG5ldyBQYXJzZXIoY2xpZW50LCBzb2NrZXQsIGxsaHR0cEluc3RhbmNlKVxuXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgY29uc3QgcGFyc2VyID0gdGhpc1trUGFyc2VyXVxuXG4gICAgLy8gT24gTWFjIE9TLCB3ZSBnZXQgYW4gRUNPTk5SRVNFVCBldmVuIGlmIHRoZXJlIGlzIGEgZnVsbCBib2R5IHRvIGJlIGZvcndhcmRlZFxuICAgIC8vIHRvIHRoZSB1c2VyLlxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICBjb25zdCBwYXJzZXJFcnIgPSBwYXJzZXIuZmluaXNoKClcbiAgICAgIGlmIChwYXJzZXJFcnIpIHtcbiAgICAgICAgdGhpc1trRXJyb3JdID0gcGFyc2VyRXJyXG4gICAgICAgIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKHBhcnNlckVycilcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gICAgdGhpc1trQ2xpZW50XVtrT25FcnJvcl0oZXJyKVxuICB9KVxuICBhZGRMaXN0ZW5lcihzb2NrZXQsICdyZWFkYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJzZXIgPSB0aGlzW2tQYXJzZXJdXG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICBwYXJzZXIucmVhZE1vcmUoKVxuICAgIH1cbiAgfSlcbiAgYWRkTGlzdGVuZXIoc29ja2V0LCAnZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhcnNlciA9IHRoaXNba1BhcnNlcl1cblxuICAgIGlmIChwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgY29uc3QgcGFyc2VyRXJyID0gcGFyc2VyLmZpbmlzaCgpXG4gICAgICBpZiAocGFyc2VyRXJyKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBwYXJzZXJFcnIpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSkpXG4gIH0pXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cbiAgICBjb25zdCBwYXJzZXIgPSB0aGlzW2tQYXJzZXJdXG5cbiAgICBjbGVhcklkbGVTb2NrZXRWYWxpZGF0aW9uKHRoaXMpXG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgICB0aGlzW2tFcnJvcl0gPSBwYXJzZXIuZmluaXNoKCkgfHwgdGhpc1trRXJyb3JdXG4gICAgICB9XG5cbiAgICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgICB0aGlzW2tQYXJzZXJdID0gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgICBjbGllbnRba0hUVFBDb250ZXh0XSA9IG51bGwgLy8gVE9ETyAoZml4KTogVGhpcyBpcyBoYWNreS4uLlxuXG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuXG4gICAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG5cbiAgICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0pXG5cbiAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJ2gxJyxcbiAgICBkZWZhdWx0UGlwZWxpbmluZzogMSxcbiAgICB3cml0ZSAoLi4uYXJncykge1xuICAgICAgcmV0dXJuIHdyaXRlSDEoY2xpZW50LCAuLi5hcmdzKVxuICAgIH0sXG4gICAgcmVzdW1lICgpIHtcbiAgICAgIHJlc3VtZUgxKGNsaWVudClcbiAgICB9LFxuICAgIGRlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChjbG9zZWQpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQuZGVzdHJveShlcnIpLm9uKCdjbG9zZScsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgICByZXR1cm4gc29ja2V0LmRlc3Ryb3llZFxuICAgIH0sXG4gICAgYnVzeSAocmVxdWVzdCkge1xuICAgICAgaWYgKHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tCbG9ja2luZ10gfHwgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmICFyZXF1ZXN0LmlkZW1wb3RlbnQpIHtcbiAgICAgICAgICAvLyBOb24taWRlbXBvdGVudCByZXF1ZXN0IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgICAgICAvLyBjb3VsZCBjYXVzZSBmYWlsdXJlLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgICAgIC8vIERvbid0IGRpc3BhdGNoIGFuIHVwZ3JhZGUgdW50aWwgYWxsIHByZWNlZGluZyByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgICAgICAvLyBBIG1pc2JlaGF2aW5nIHNlcnZlciBtaWdodCB1cGdyYWRlIHRoZSBjb25uZWN0aW9uIGJlZm9yZSBhbGwgcGlwZWxpbmVkXG4gICAgICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgdXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgIT09IDAgJiZcbiAgICAgICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkgfHwgdXRpbC5pc0Zvcm1EYXRhTGlrZShyZXF1ZXN0LmJvZHkpKSkge1xuICAgICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW4gZXJyb3Igd2hpbGUgb3RoZXIgcmVxdWVzdHNcbiAgICAgICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbiBieSB3YWl0aW5nIGZvciBpbmZsaWdodFxuICAgICAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBkaXNwYXRjaGluZy5cblxuICAgICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBubyBvdGhlciByZXF1ZXN0cyBhcmUgaW5mbGlnaHQgYW5kXG4gICAgICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhcklkbGVTb2NrZXRWYWxpZGF0aW9uIChzb2NrZXQpIHtcbiAgaWYgKHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0XSkge1xuICAgIGNsZWFyVGltZW91dChzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0pXG4gICAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvblRpbWVvdXRdID0gbnVsbFxuICB9XG5cbiAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAwXG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSWRsZVNvY2tldFZhbGlkYXRpb24gKGNsaWVudCwgc29ja2V0KSB7XG4gIHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25dID0gMVxuICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0gPSBudWxsXG4gICAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAyXG5cbiAgICBpZiAoY2xpZW50W2tTb2NrZXRdID09PSBzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gICAgfVxuICB9LCAwKVxuICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0udW5yZWY/LigpXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vY2xpZW50LmpzJyl9IGNsaWVudFxuICovXG5mdW5jdGlvbiByZXN1bWVIMSAoY2xpZW50KSB7XG4gIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgc29ja2V0LnVucmVmKClcbiAgICAgICAgc29ja2V0W2tOb1JlZl0gPSB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQucmVmKSB7XG4gICAgICBzb2NrZXQucmVmKClcbiAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba1BlbmRpbmddID4gMCAmJiBzb2NrZXRba1NvY2tldFVzZWRdKSB7XG4gICAgICBpZiAoc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPT09IDApIHtcbiAgICAgICAgc2NoZWR1bGVJZGxlU29ja2V0VmFsaWRhdGlvbihjbGllbnQsIHNvY2tldClcbiAgICAgICAgc29ja2V0W2tQYXJzZXJdLnJlYWRNb3JlKClcbiAgICAgICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25dID09PSAxKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5yZWFkTW9yZSgpXG4gICAgICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIHNvY2tldFtrUGFyc2VyXS5yZWFkTW9yZSgpXG4gICAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9LRUVQX0FMSVZFKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSwgVElNRU9VVF9LRUVQX0FMSVZFKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgIT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICA/IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXRcbiAgICAgICAgICA6IGNsaWVudFtrSGVhZGVyc1RpbWVvdXRdXG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlSDEgKGNsaWVudCwgcmVxdWVzdCkge1xuICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgbGV0IHsgYm9keSwgaGVhZGVycywgY29udGVudExlbmd0aCB9ID0gcmVxdWVzdFxuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCcgfHxcbiAgICBtZXRob2QgPT09ICdRVUVSWScgfHxcbiAgICBtZXRob2QgPT09ICdQUk9QRklORCcgfHxcbiAgICBtZXRob2QgPT09ICdQUk9QUEFUQ0gnXG4gIClcblxuICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShib2R5KSkge1xuICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgIGV4dHJhY3RCb2R5ID0gcmVxdWlyZSgnLi4vd2ViL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuICAgIH1cblxuICAgIGNvbnN0IFtib2R5U3RyZWFtLCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgIGlmIChyZXF1ZXN0LmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMucHVzaCgnY29udGVudC10eXBlJywgY29udGVudFR5cGUpXG4gICAgfVxuICAgIGJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgIGNvbnRlbnRMZW5ndGggPSBib2R5U3RyZWFtLmxlbmd0aFxuICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiByZXF1ZXN0LmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGJvZHkudHlwZVxuICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgY29uc3QgY29udGVudFR5cGVWYWx1ZSA9IGAke2NvbnRlbnRUeXBlfWBcbiAgICAgIGlmICghdXRpbC5pc1ZhbGlkSGVhZGVyVmFsdWUoY29udGVudFR5cGVWYWx1ZSkpIHtcbiAgICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29udGVudC10eXBlIGhlYWRlcicpKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGhlYWRlcnMucHVzaCgnY29udGVudC10eXBlJywgY29udGVudFR5cGVWYWx1ZSlcbiAgICB9XG4gIH1cblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBjb25zdCBib2R5TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgY29udGVudExlbmd0aCA9IGJvZHlMZW5ndGggPz8gY29udGVudExlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cbiAgY2xlYXJJZGxlU29ja2V0VmFsaWRhdGlvbihzb2NrZXQpXG5cbiAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ2Fib3J0ZWQnKSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9pc3N1ZXMvMjU4XG4gICAgLy8gQ2xvc2UgYWZ0ZXIgYSBIRUFEIHJlcXVlc3QgdG8gaW50ZXJvcCB3aXRoIG1pc2JlaGF2aW5nIHNlcnZlcnNcbiAgICAvLyB0aGF0IG1heSBzZW5kIGEgYm9keSBpbiB0aGUgcmVzcG9uc2UuXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgLy8gT24gQ09OTkVDVCBvciB1cGdyYWRlLCBibG9jayBwaXBlbGluZSBmcm9tIGRpc3BhdGNoaW5nIGZ1cnRoZXJcbiAgICAvLyByZXF1ZXN0cyBvbiB0aGlzIGNvbm5lY3Rpb24uXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChyZXNldCAhPSBudWxsKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSByZXNldFxuICB9XG5cbiAgaWYgKGNsaWVudFtrTWF4UmVxdWVzdHNdICYmIHNvY2tldFtrQ291bnRlcl0rKyA+PSBjbGllbnRba01heFJlcXVlc3RzXSkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGJsb2NraW5nKSB7XG4gICAgc29ja2V0W2tCbG9ja2luZ10gPSB0cnVlXG4gIH1cblxuICBsZXQgaGVhZGVyID0gYCR7bWV0aG9kfSAke3BhdGh9IEhUVFAvMS4xXFxyXFxuYFxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBoZWFkZXIgKz0gYGhvc3Q6ICR7aG9zdH1cXHJcXG5gXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9IGNsaWVudFtrSG9zdEhlYWRlcl1cbiAgfVxuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgaGVhZGVyICs9IGBjb25uZWN0aW9uOiB1cGdyYWRlXFxyXFxudXBncmFkZTogJHt1cGdyYWRlfVxcclxcbmBcbiAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddICYmICFzb2NrZXRba1Jlc2V0XSkge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjoga2VlcC1hbGl2ZVxcclxcbidcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGNsb3NlXFxyXFxuJ1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnMubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbbiArIDBdXG4gICAgICBjb25zdCB2YWwgPSBoZWFkZXJzW24gKyAxXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsW2ldfVxcclxcbmBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsfVxcclxcbmBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY2hhbm5lbHMuc2VuZEhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zZW5kSGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdCwgaGVhZGVyczogaGVhZGVyLCBzb2NrZXQgfSlcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBhc3NlcnRpb24gKi9cbiAgaWYgKCFib2R5IHx8IGJvZHlMZW5ndGggPT09IDApIHtcbiAgICB3cml0ZUJ1ZmZlcihhYm9ydCwgbnVsbCwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIHdyaXRlQnVmZmVyKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LnN0cmVhbSgpLCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbSAoYWJvcnQsIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuXG4gIGNvbnN0IG9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSAmJiB0aGlzLnBhdXNlKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMsIGVycilcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25EcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5LnJlc3VtZSkge1xuICAgICAgYm9keS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICdjbG9zZScgbWlnaHQgYmUgZW1pdHRlZCAqYmVmb3JlKiAnZXJyb3InIGZvclxuICAgIC8vIGJyb2tlbiBzdHJlYW1zLiBXYWl0IGEgdGljayB0byBhdm9pZCB0aGlzIGNhc2UuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gSXQncyBvbmx5IHNhZmUgdG8gcmVtb3ZlICdlcnJvcicgbGlzdGVuZXIgYWZ0ZXJcbiAgICAgIC8vICdjbG9zZScuXG4gICAgICBib2R5LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgfSlcblxuICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IG9uRmluaXNoZWQoZXJyKSlcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25GaW5pc2hlZCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgYXNzZXJ0KHNvY2tldC5kZXN0cm95ZWQgfHwgKHNvY2tldFtrV3JpdGluZ10gJiYgY2xpZW50W2tSdW5uaW5nXSA8PSAxKSlcblxuICAgIHNvY2tldFxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgICAgLm9mZignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gICAgYm9keVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2UpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkNsb3NlKVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gIGlmIChib2R5LmVycm9yRW1pdHRlZCA/PyBib2R5LmVycm9yZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChib2R5LmVycm9yZWQpKVxuICB9IGVsc2UgaWYgKGJvZHkuZW5kRW1pdHRlZCA/PyBib2R5LnJlYWRhYmxlRW5kZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChudWxsKSlcbiAgfVxuXG4gIGlmIChib2R5LmNsb3NlRW1pdHRlZCA/PyBib2R5LmNsb3NlZCkge1xuICAgIHNldEltbWVkaWF0ZShvbkNsb3NlKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgICBzb2NrZXQuY29yaygpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG5cbiAgICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVCbG9iIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBjb250ZW50TGVuZ3RoICE9PSBib2R5LnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IGJvZHkuYXJyYXlCdWZmZXIoKSlcblxuICAgIHNvY2tldC5jb3JrKClcbiAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICBzb2NrZXQudW5jb3JrKClcblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFib3J0KGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ2l0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgbGV0IGNhbGxiYWNrID0gbnVsbFxuICBmdW5jdGlvbiBvbkRyYWluICgpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgY2IoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JEcmFpbiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhc3NlcnQoY2FsbGJhY2sgPT09IG51bGwpXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHJlamVjdChzb2NrZXRba0Vycm9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlXG4gICAgfVxuICB9KVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuICB0cnkge1xuICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gc29tZWhvdyBhYm9ydCB0aGUgYXN5bmMgaXRlcmFibGUuXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICAgIH1cblxuICAgICAgaWYgKCF3cml0ZXIud3JpdGUoY2h1bmspKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmVuZCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHdyaXRlci5kZXN0cm95KGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5jbGFzcyBBc3luY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yICh7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KSB7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aFxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwXG4gICAgdGhpcy5leHBlY3RzUGF5bG9hZCA9IGV4cGVjdHNQYXlsb2FkXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSB0cnVlXG4gIH1cblxuICB3cml0ZSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgaWYgKCFsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIGRlZmVyIHdyaXRpbmcgY2h1bmtzLlxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiArIGxlbiA+IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICB9XG5cbiAgICBzb2NrZXQuY29yaygpXG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoIWV4cGVjdHNQYXlsb2FkICYmIHJlcXVlc3QucmVzZXQgIT09IGZhbHNlKSB7XG4gICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfXRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZShgXFxyXFxuJHtsZW4udG9TdHJpbmcoMTYpfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGxlblxuXG4gICAgY29uc3QgcmV0ID0gc29ja2V0LndyaXRlKGNodW5rKVxuXG4gICAgc29ja2V0LnVuY29yaygpXG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG5cbiAgICBpZiAoIXJldCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBlbmQgKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciwgcmVxdWVzdCB9ID0gdGhpc1xuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKGV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBzZW5kIGEgQ29udGVudC1MZW5ndGggaW4gYSByZXF1ZXN0IG1lc3NhZ2Ugd2hlblxuICAgICAgICAvLyBubyBUcmFuc2Zlci1FbmNvZGluZyBpcyBzZW50IGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgZGVmaW5lcyBhIG1lYW5pbmdcbiAgICAgICAgLy8gZm9yIGFuIGVuY2xvc2VkIHBheWxvYWQgYm9keS5cblxuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKCdcXHJcXG4wXFxyXFxuXFxyXFxuJywgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgYWJvcnQoZXJyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsLmpzJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMuanMnKVxuY29uc3Qge1xuICBrVXJsLFxuICBrUmVzZXQsXG4gIGtDbGllbnQsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1F1ZXVlLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1NvY2tldCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtPbkVycm9yLFxuICBrTWF4Q29uY3VycmVudFN0cmVhbXMsXG4gIGtIVFRQMlNlc3Npb24sXG4gIGtSZXN1bWUsXG4gIGtTaXplLFxuICBrSFRUUENvbnRleHRcbn0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMuanMnKVxuXG5jb25zdCBrT3BlblN0cmVhbXMgPSBTeW1ib2woJ29wZW4gc3RyZWFtcycpXG5cbmxldCBleHRyYWN0Qm9keVxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ25vZGU6aHR0cDInKVxufSBjYXRjaCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cDIgPSB7IGNvbnN0YW50czoge30gfVxufVxuXG5jb25zdCB7XG4gIGNvbnN0YW50czoge1xuICAgIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gICAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgICBIVFRQMl9IRUFERVJfU0NIRU1FLFxuICAgIEhUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSCxcbiAgICBIVFRQMl9IRUFERVJfRVhQRUNULFxuICAgIEhUVFAyX0hFQURFUl9TVEFUVVNcbiAgfVxufSA9IGh0dHAyXG5cbmZ1bmN0aW9uIHBhcnNlSDJIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgLy8gaDIgbWF5IGNvbmNhdCB0aGUgaGVhZGVyIHZhbHVlIGJ5IGFycmF5XG4gICAgLy8gZS5nLiBTZXQtQ29va2llXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gcHJvdmlkZSBlYWNoIGhlYWRlciB2YWx1ZSBvZiBoZWFkZXIgbmFtZVxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBoZWFkZXJzIGhhbmRsZXIgZXhwZWN0IG5hbWUtdmFsdWUgcGFpclxuICAgICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20oc3VidmFsdWUpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20odmFsdWUpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29ubmVjdEgyIChjbGllbnQsIHNvY2tldCkge1xuICBjbGllbnRba1NvY2tldF0gPSBzb2NrZXRcblxuICBpZiAoIWgyRXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgaDJFeHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICBjb2RlOiAnVU5ESUNJLUgyJ1xuICAgIH0pXG4gIH1cblxuICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdChjbGllbnRba1VybF0sIHtcbiAgICBjcmVhdGVDb25uZWN0aW9uOiAoKSA9PiBzb2NrZXQsXG4gICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba01heENvbmN1cnJlbnRTdHJlYW1zXVxuICB9KVxuXG4gIHNlc3Npb25ba09wZW5TdHJlYW1zXSA9IDBcbiAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICBzZXNzaW9uW2tTb2NrZXRdID0gc29ja2V0XG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzZXNzaW9uLCAnZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdmcmFtZUVycm9yJywgb25IdHRwMkZyYW1lRXJyb3IpXG4gIHV0aWwuYWRkTGlzdGVuZXIoc2Vzc2lvbiwgJ2VuZCcsIG9uSHR0cDJTZXNzaW9uRW5kKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50IH0gPSB0aGlzXG4gICAgY29uc3QgeyBba1NvY2tldF06IHNvY2tldCB9ID0gY2xpZW50XG5cbiAgICBjb25zdCBlcnIgPSB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gfHwgdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpXG5cbiAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG5cbiAgICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBzZXNzaW9uLnVucmVmKClcblxuICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBzZXNzaW9uXG4gIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cblxuICB1dGlsLmFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgdGhpc1trRXJyb3JdID0gZXJyXG5cbiAgICB0aGlzW2tDbGllbnRdW2tPbkVycm9yXShlcnIpXG4gIH0pXG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzb2NrZXQsICdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpKVxuICB9KVxuXG4gIHV0aWwuYWRkTGlzdGVuZXIoc29ja2V0LCAnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXJyID0gdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuXG4gICAgaWYgKHRoaXNba0hUVFAyU2Vzc2lvbl0gIT0gbnVsbCkge1xuICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXS5kZXN0cm95KGVycilcbiAgICB9XG5cbiAgICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0pXG5cbiAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJ2gyJyxcbiAgICBkZWZhdWx0UGlwZWxpbmluZzogSW5maW5pdHksXG4gICAgd3JpdGUgKC4uLmFyZ3MpIHtcbiAgICAgIHJldHVybiB3cml0ZUgyKGNsaWVudCwgLi4uYXJncylcbiAgICB9LFxuICAgIHJlc3VtZSAoKSB7XG4gICAgICByZXN1bWVIMihjbGllbnQpXG4gICAgfSxcbiAgICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoY2xvc2VkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVzdHJveWluZyB0aGUgc29ja2V0IHdpbGwgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICAgICAgICBzb2NrZXQuZGVzdHJveShlcnIpLm9uKCdjbG9zZScsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgICByZXR1cm4gc29ja2V0LmRlc3Ryb3llZFxuICAgIH0sXG4gICAgYnVzeSAoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lSDIgKGNsaWVudCkge1xuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICBpZiAoc29ja2V0Py5kZXN0cm95ZWQgPT09IGZhbHNlKSB7XG4gICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDAgJiYgY2xpZW50W2tNYXhDb25jdXJyZW50U3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0udW5yZWYoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzb2NrZXQucmVmKClcbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXS5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKGVycilcbn1cblxuZnVuY3Rpb24gb25IdHRwMkZyYW1lRXJyb3IgKHR5cGUsIGNvZGUsIGlkKSB7XG4gIGlmIChpZCA9PT0gMCkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG4gICAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gICAgdGhpc1trQ2xpZW50XVtrT25FcnJvcl0oZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgY29uc3QgZXJyID0gbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzW2tTb2NrZXRdKSlcbiAgdGhpcy5kZXN0cm95KGVycilcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIGVycilcbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSByb290IGNhdXNlIG9mICMzMDExXG4gKiBXZSBuZWVkIHRvIGhhbmRsZSBHT0FXQVkgZnJhbWVzIHByb3Blcmx5LCBhbmQgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICogYWxvbmcgd2l0aCB0aGUgc29ja2V0IHJpZ2h0IGF3YXlcbiAqL1xuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICAvLyBXZSBjYW5ub3QgcmVjb3Zlciwgc28gYmVzdCB0byBjbG9zZSB0aGUgc2Vzc2lvbiBhbmQgdGhlIHNvY2tldFxuICBjb25zdCBlcnIgPSB0aGlzW2tFcnJvcl0gfHwgbmV3IFNvY2tldEVycm9yKGBIVFRQLzI6IFwiR09BV0FZXCIgZnJhbWUgcmVjZWl2ZWQgd2l0aCBjb2RlICR7Y29kZX1gLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpXG4gIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbFxuXG4gIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dLmRlc3Ryb3koZXJyKVxuICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gIH1cblxuICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XSwgZXJyKVxuXG4gIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPCBjbGllbnRba1F1ZXVlXS5sZW5ndGgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gIH1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICBjbGllbnRba1Jlc3VtZV0oKVxufVxuXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG5mdW5jdGlvbiBzaG91bGRTZW5kQ29udGVudExlbmd0aCAobWV0aG9kKSB7XG4gIHJldHVybiBtZXRob2QgIT09ICdHRVQnICYmIG1ldGhvZCAhPT0gJ0hFQUQnICYmIG1ldGhvZCAhPT0gJ09QVElPTlMnICYmIG1ldGhvZCAhPT0gJ1RSQUNFJyAmJiBtZXRob2QgIT09ICdDT05ORUNUJ1xufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IGNsaWVudFtrSFRUUDJTZXNzaW9uXVxuICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgZXhwZWN0Q29udGludWUsIHNpZ25hbCwgaGVhZGVyczogcmVxSGVhZGVycyB9ID0gcmVxdWVzdFxuICBsZXQgeyBib2R5IH0gPSByZXF1ZXN0XG5cbiAgaWYgKHVwZ3JhZGUpIHtcbiAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IHt9XG4gIGZvciAobGV0IG4gPSAwOyBuIDwgcmVxSGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGNvbnN0IGtleSA9IHJlcUhlYWRlcnNbbiArIDBdXG4gICAgY29uc3QgdmFsID0gcmVxSGVhZGVyc1tuICsgMV1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW2tleV0pIHtcbiAgICAgICAgICBoZWFkZXJzW2tleV0gKz0gYCwke3ZhbFtpXX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsW2ldXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyc1trZXldID0gdmFsXG4gICAgfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuXG4gIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0IHx8IGAke2hvc3RuYW1lfSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlcnIgPSBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoc3RyZWFtICE9IG51bGwpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG5cbiAgICAvLyBXZSBkbyBub3QgZGVzdHJveSB0aGUgc29ja2V0IGFzIHdlIGNhbiBjb250aW51ZSB1c2luZyB0aGUgc2Vzc2lvblxuICAgIC8vIHRoZSBzdHJlYW0gZ2V0J3MgZGVzdHJveWVkIGFuZCB0aGUgc2Vzc2lvbiByZW1haW5zIHRvIGNyZWF0ZSBuZXcgc3RyZWFtc1xuICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBXZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHN0cmVhbXMgYXJlIHBlbmRpbmcuXG4gICAgLy8gV2UgY2FuIGNhbGwgb24gY29ubmVjdCwgYW5kIHdhaXQgZm9yIGFib3J0XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgc2Vzc2lvbi5yZWYoKVxuICAgIC8vIFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc3RyZWFtcyBhcmUgcGVuZGluZywgZmlyc3QgcmVxdWVzdFxuICAgIC8vIHdpbGwgY3JlYXRlIGEgbmV3IHN0cmVhbS4gV2UgdHJpZ2dlciBhIHJlcXVlc3QgdG8gY3JlYXRlIHRoZSBzdHJlYW0gYW5kIHdhaXQgdW50aWxcbiAgICAvLyBgcmVhZHlgIGV2ZW50IGlzIHRyaWdnZXJlZFxuICAgIC8vIFdlIGRpc2FibGVkIGVuZFN0cmVhbSB0byBhbGxvdyB0aGUgdXNlciB0byB3cml0ZSB0byB0aGUgc3RyZWFtXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBmYWxzZSwgc2lnbmFsIH0pXG5cbiAgICBpZiAoc3RyZWFtLmlkICYmICFzdHJlYW0ucGVuZGluZykge1xuICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgKytzZXNzaW9uW2tPcGVuU3RyZWFtc11cbiAgICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbmNlKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgICArK3Nlc3Npb25ba09wZW5TdHJlYW1zXVxuICAgICAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkgc2Vzc2lvbi51bnJlZigpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTguM1xuICAvLyA6cGF0aCBhbmQgOnNjaGVtZSBoZWFkZXJzIG11c3QgYmUgb21pdHRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoYm9keSkpIHtcbiAgICBleHRyYWN0Qm9keSA/Pz0gcmVxdWlyZSgnLi4vd2ViL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuXG4gICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBjb250ZW50VHlwZVxuXG4gICAgYm9keSA9IGJvZHlTdHJlYW0uc3RyZWFtXG4gICAgY29udGVudExlbmd0aCA9IGJvZHlTdHJlYW0ubGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgfHwgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBhc3NlcnQoYm9keSwgJ25vIGJvZHkgbXVzdCBub3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEhdID0gYCR7Y29udGVudExlbmd0aH1gXG4gIH1cblxuICBzZXNzaW9uLnJlZigpXG5cbiAgY29uc3Qgc2hvdWxkRW5kU3RyZWFtID0gbWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJyB8fCBib2R5ID09PSBudWxsXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc3RyZWFtcyBvcGVuXG4gICsrc2Vzc2lvbltrT3BlblN0cmVhbXNdXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG4gICAgcmVxdWVzdC5vblJlc3BvbnNlU3RhcnRlZCgpXG5cbiAgICAvLyBEdWUgdG8gdGhlIHN0cmVhbSBuYXR1cmUsIGl0IGlzIHBvc3NpYmxlIHdlIGZhY2UgYSByYWNlIGNvbmRpdGlvblxuICAgIC8vIHdoZXJlIHRoZSBzdHJlYW0gaGFzIGJlZW4gYXNzaWduZWQsIGJ1dCB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkXG4gICAgLy8gdGhlIHJlcXVlc3QgcmVtYWlucyBpbi1mbGlnaHQgYW5kIGhlYWRlcnMgaGFzbid0IGJlZW4gcmVjZWl2ZWQgeWV0XG4gICAgLy8gZm9yIHRob3NlIHNjZW5hcmlvcywgYmVzdCBlZmZvcnQgaXMgdG8gZGVzdHJveSB0aGUgc3RyZWFtIGltbWVkaWF0ZWx5XG4gICAgLy8gYXMgdGhlcmUncyBubyB2YWx1ZSB0byBrZWVwIGl0IG9wZW4uXG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCBwYXJzZUgySGVhZGVycyhyZWFsSGVhZGVycyksIHN0cmVhbS5yZXN1bWUuYmluZChzdHJlYW0pLCAnJykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cblxuICAgIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKHJlcXVlc3Qub25EYXRhKGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgLy8gV2hlbiBzdGF0ZSBpcyBudWxsLCBpdCBtZWFucyB3ZSBoYXZlbid0IGNvbnN1bWVkIGJvZHkgYW5kIHRoZSBzdHJlYW0gc3RpbGwgZG8gbm90IGhhdmVcbiAgICAvLyBhIHN0YXRlLlxuICAgIC8vIFByZXNlbnQgc3BlY2lhbGx5IHdoZW4gdXNpbmcgcGlwZWxpbmUgb3Igc3RyZWFtXG4gICAgaWYgKHN0cmVhbS5zdGF0ZT8uc3RhdGUgPT0gbnVsbCB8fCBzdHJlYW0uc3RhdGUuc3RhdGUgPCA2KSB7XG4gICAgICByZXF1ZXN0Lm9uQ29tcGxldGUoW10pXG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkge1xuICAgICAgLy8gU3RyZWFtIGlzIGNsb3NlZCBvciBoYWxmLWNsb3NlZC1yZW1vdGUgKDYpLCBkZWNyZW1lbnQgY291bnRlciBhbmQgY2xlYW51cFxuICAgICAgLy8gSXQgZG9lcyBub3QgaGF2ZSBzZW5zZSB0byBjb250aW51ZSB3b3JraW5nIHdpdGggdGhlIHN0cmVhbSBhcyB3ZSBkbyBub3RcbiAgICAgIC8vIGhhdmUgeWV0IFJTVF9TVFJFQU0gc3VwcG9ydCBvbiBjbGllbnQtc2lkZVxuXG4gICAgICBzZXNzaW9uLnVucmVmKClcbiAgICB9XG5cbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdIVFRQLzI6IHN0cmVhbSBoYWxmLWNsb3NlZCAocmVtb3RlKScpKVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgIGlmIChzZXNzaW9uW2tPcGVuU3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdmcmFtZUVycm9yJywgKHR5cGUsIGNvZGUpID0+IHtcbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKSlcbiAgfSlcblxuICAvLyBzdHJlYW0ub24oJ2Fib3J0ZWQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IGFib3J0ZWRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRpbWVvdXRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3B1c2gnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgcHVzaFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndHJhaWxlcnMnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdHJhaWxlcnNcbiAgLy8gfSlcblxuICByZXR1cm4gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHdyaXRlQm9keUgyICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gICAgaWYgKCFib2R5IHx8IGNvbnRlbnRMZW5ndGggPT09IDApIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBudWxsLFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3cml0ZUl0ZXJhYmxlKFxuICAgICAgICAgIGFib3J0LFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYihcbiAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjbGllbnRba1NvY2tldF0sXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB3cml0ZVN0cmVhbShcbiAgICAgICAgYWJvcnQsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoXG4gICAgICApXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoXG4gICAgICAgIGFib3J0LFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBleHBlY3RzUGF5bG9hZCkge1xuICB0cnkge1xuICAgIGlmIChib2R5ICE9IG51bGwgJiYgdXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBoMnN0cmVhbS5jb3JrKClcbiAgICAgIGgyc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBoMnN0cmVhbS51bmNvcmsoKVxuICAgICAgaDJzdHJlYW0uZW5kKClcblxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGFib3J0KGVycm9yKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtIChhYm9ydCwgc29ja2V0LCBleHBlY3RzUGF5bG9hZCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgY29udGVudExlbmd0aCkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCAhPT0gMCB8fCBjbGllbnRba1J1bm5pbmddID09PSAwLCAnc3RyZWFtIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICBjb25zdCBwaXBlID0gcGlwZWxpbmUoXG4gICAgYm9keSxcbiAgICBoMnN0cmVhbSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShwaXBlLCBlcnIpXG4gICAgICAgIGFib3J0KGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwucmVtb3ZlQWxsTGlzdGVuZXJzKHBpcGUpXG4gICAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICB1dGlsLmFkZExpc3RlbmVyKHBpcGUsICdkYXRhJywgb25QaXBlRGF0YSlcblxuICBmdW5jdGlvbiBvblBpcGVEYXRhIChjaHVuaykge1xuICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LnNpemUsICdibG9iIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcblxuICB0cnkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCAhPT0gYm9keS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCBib2R5LmFycmF5QnVmZmVyKCkpXG5cbiAgICBoMnN0cmVhbS5jb3JrKClcbiAgICBoMnN0cmVhbS53cml0ZShidWZmZXIpXG4gICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICBoMnN0cmVhbS5lbmQoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJ1ZmZlcilcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSXRlcmFibGUgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBoMnN0cmVhbVxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBoMnN0cmVhbS53cml0ZShjaHVuaylcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaDJzdHJlYW0uZW5kKClcblxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMlxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG4gICAgdGhpcy5yZWRpcmVjdGlvbkxpbWl0UmVhY2hlZCA9IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMudGhyb3dPbk1heFJlZGlyZWN0ICYmIHRoaXMuaGlzdG9yeS5sZW5ndGggPj0gdGhpcy5tYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmFib3J0KG5ldyBFcnJvcignbWF4IHJlZGlyZWN0cycpKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJlZGlyZWN0aW9uTGltaXRSZWFjaGVkID0gdHJ1ZVxuICAgICAgdGhpcy5hYm9ydChuZXcgRXJyb3IoJ21heCByZWRpcmVjdHMnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGx5IGNob29zZXMgbm90IHRvIHNwZWNpZnkgYSBmb3JtYXQgZm9yIHN1Y2ggYm9keSBhbmQgbGVhdmUgaXQgdG9cbiAgICAgICAgc2VydmVycyBhbmQgYnJvd3NlcnMgaW1wbGVtZW50b3JzLCB3ZSBpZ25vcmUgdGhlIGJvZHkgYXMgdGhlcmUgaXMgbm8gc3BlY2lmaWVkIHdheSB0byBldmVudHVhbGx5IHBhcnNlIGl0LlxuICAgICAgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIHRyYWlsZXJzIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCBpbiBjYXNlIG9mIHJlZGlyZWN0aW9uc1xuICAgICAgICBhbmQgbmVpdGhlciBhcmUgdXNlZnVsIGlmIHByZXNlbnQuXG5cbiAgICAgICAgU2VlIGNvbW1lbnQgb24gb25EYXRhIG1ldGhvZCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbi5cbiAgICAgICovXG5cbiAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2F0aW9uIChzdGF0dXNDb2RlLCBoZWFkZXJzKSB7XG4gIGlmIChyZWRpcmVjdGFibGVTdGF0dXNDb2Rlcy5pbmRleE9mKHN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoaGVhZGVyc1tpXS5sZW5ndGggPT09IDggJiYgdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyc1tpXSkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVIZWFkZXIgKGhlYWRlciwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBpZiAoaGVhZGVyLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpID09PSAnaG9zdCdcbiAgfVxuICBpZiAocmVtb3ZlQ29udGVudCAmJiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpLnN0YXJ0c1dpdGgoJ2NvbnRlbnQtJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh1bmtub3duT3JpZ2luICYmIChoZWFkZXIubGVuZ3RoID09PSAxMyB8fCBoZWFkZXIubGVuZ3RoID09PSA2IHx8IGhlYWRlci5sZW5ndGggPT09IDE5KSkge1xuICAgIGNvbnN0IG5hbWUgPSB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpXG4gICAgcmV0dXJuIG5hbWUgPT09ICdhdXRob3JpemF0aW9uJyB8fCBuYW1lID09PSAnY29va2llJyB8fCBuYW1lID09PSAncHJveHktYXV0aG9yaXphdGlvbidcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbmZ1bmN0aW9uIGNsZWFuUmVxdWVzdEhlYWRlcnMgKGhlYWRlcnMsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGhlYWRlcnNbaV0sIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihrZXksIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoaGVhZGVycyA9PSBudWxsLCAnaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZGlyZWN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXInKVxuXG5mdW5jdGlvbiBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yICh7IG1heFJlZGlyZWN0aW9uczogZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gSW50ZXJjZXB0IChvcHRzLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCB7IG1heFJlZGlyZWN0aW9ucyA9IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSA9IG9wdHNcblxuICAgICAgaWYgKCFtYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZGlyZWN0SGFuZGxlciA9IG5ldyBSZWRpcmVjdEhhbmRsZXIoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcilcbiAgICAgIG9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIFN0b3Agc3ViIGRpc3BhdGNoZXIgZnJvbSBhbHNvIHJlZGlyZWN0aW5nLlxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG4iLCAiLy8gQHRzLWNoZWNrXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCBuZXQgPSByZXF1aXJlKCdub2RlOm5ldCcpXG5jb25zdCBodHRwID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwuanMnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi4vY29yZS9kaWFnbm9zdGljcy5qcycpXG5jb25zdCBSZXF1ZXN0ID0gcmVxdWlyZSgnLi4vY29yZS9yZXF1ZXN0LmpzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzLmpzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi4vY29yZS9jb25uZWN0LmpzJylcbmNvbnN0IHtcbiAga1VybCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrQ29ubmVjdCxcbiAga1Jlc3VtaW5nLFxuICBrUnVubmluZyxcbiAga1BlbmRpbmcsXG4gIGtTaXplLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQsXG4gIGtIb3N0SGVhZGVyLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1BpcGVsaW5pbmcsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWUsXG4gIGtNYXhIZWFkZXJzU2l6ZSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkLFxuICBrSGVhZGVyc1RpbWVvdXQsXG4gIGtCb2R5VGltZW91dCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtDb25uZWN0b3IsXG4gIGtNYXhSZWRpcmVjdGlvbnMsXG4gIGtNYXhSZXF1ZXN0cyxcbiAga0NvdW50ZXIsXG4gIGtDbG9zZSxcbiAga0Rlc3Ryb3ksXG4gIGtEaXNwYXRjaCxcbiAga0ludGVyY2VwdG9ycyxcbiAga0xvY2FsQWRkcmVzcyxcbiAga01heFJlc3BvbnNlU2l6ZSxcbiAga09uRXJyb3IsXG4gIGtIVFRQQ29udGV4dCxcbiAga01heENvbmN1cnJlbnRTdHJlYW1zLFxuICBrUmVzdW1lXG59ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzLmpzJylcbmNvbnN0IGNvbm5lY3RIMSA9IHJlcXVpcmUoJy4vY2xpZW50LWgxLmpzJylcbmNvbnN0IGNvbm5lY3RIMiA9IHJlcXVpcmUoJy4vY2xpZW50LWgyLmpzJylcbmxldCBkZXByZWNhdGVkSW50ZXJjZXB0b3JXYXJuZWQgPSBmYWxzZVxuXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgna0Nsb3NlZFJlc29sdmUnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZnVuY3Rpb24gZ2V0UGlwZWxpbmluZyAoY2xpZW50KSB7XG4gIHJldHVybiBjbGllbnRba1BpcGVsaW5pbmddID8/IGNsaWVudFtrSFRUUENvbnRleHRdPy5kZWZhdWx0UGlwZWxpbmluZyA/PyAxXG59XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2xpZW50LmpzJykuZGVmYXVsdH1cbiAqL1xuY2xhc3MgQ2xpZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NsaWVudC5qcycpLkNsaWVudC5PcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCB7XG4gICAgaW50ZXJjZXB0b3JzLFxuICAgIG1heEhlYWRlclNpemUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgc29ja2V0VGltZW91dCxcbiAgICByZXF1ZXN0VGltZW91dCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICBpZGxlVGltZW91dCxcbiAgICBrZWVwQWxpdmUsXG4gICAga2VlcEFsaXZlVGltZW91dCxcbiAgICBtYXhLZWVwQWxpdmVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZU1heFRpbWVvdXQsXG4gICAga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAgICBzb2NrZXRQYXRoLFxuICAgIHBpcGVsaW5pbmcsXG4gICAgdGxzLFxuICAgIHN0cmljdENvbnRlbnRMZW5ndGgsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgIGNvbm5lY3QsXG4gICAgbWF4UmVxdWVzdHNQZXJDbGllbnQsXG4gICAgbG9jYWxBZGRyZXNzLFxuICAgIG1heFJlc3BvbnNlU2l6ZSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICAvLyBoMlxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zLFxuICAgIGFsbG93SDIsXG4gICAgd2ViU29ja2V0XG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKHsgd2ViU29ja2V0IH0pXG5cbiAgICBpZiAoa2VlcEFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQga2VlcEFsaXZlLCB1c2UgcGlwZWxpbmluZz0wIGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgc29ja2V0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgcmVxdWVzdFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChpZGxlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGlkbGVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlVGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4S2VlcEFsaXZlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG1heEtlZXBBbGl2ZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVNYXhUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhIZWFkZXJTaXplICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShtYXhIZWFkZXJTaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1heEhlYWRlclNpemUnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRQYXRoICE9IG51bGwgJiYgdHlwZW9mIHNvY2tldFBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgc29ja2V0UGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3RUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdFRpbWVvdXQpIHx8IGNvbm5lY3RUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0KSB8fCBrZWVwQWxpdmVUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZU1heFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVNYXhUaW1lb3V0KSB8fCBrZWVwQWxpdmVNYXhUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlTWF4VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCcpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnNUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZWRpcmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlcXVlc3RzUGVyQ2xpZW50ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlcXVlc3RzUGVyQ2xpZW50KSB8fCBtYXhSZXF1ZXN0c1BlckNsaWVudCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlcXVlc3RzUGVyQ2xpZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChsb2NhbEFkZHJlc3MgIT0gbnVsbCAmJiAodHlwZW9mIGxvY2FsQWRkcmVzcyAhPT0gJ3N0cmluZycgfHwgbmV0LmlzSVAobG9jYWxBZGRyZXNzKSA9PT0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbG9jYWxBZGRyZXNzIG11c3QgYmUgdmFsaWQgc3RyaW5nIElQIGFkZHJlc3MnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVzcG9uc2VTaXplKSB8fCBtYXhSZXNwb25zZVNpemUgPCAtMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVzcG9uc2VTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCAhPSBudWxsICYmXG4gICAgICAoIU51bWJlci5pc0ludGVnZXIoYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0KSB8fCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgPCAtMSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIC8vIGgyXG4gICAgaWYgKGFsbG93SDIgIT0gbnVsbCAmJiB0eXBlb2YgYWxsb3dIMiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2FsbG93SDIgbXVzdCBiZSBhIHZhbGlkIGJvb2xlYW4gdmFsdWUnKVxuICAgIH1cblxuICAgIGlmIChtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsICYmICh0eXBlb2YgbWF4Q29uY3VycmVudFN0cmVhbXMgIT09ICdudW1iZXInIHx8IG1heENvbmN1cnJlbnRTdHJlYW1zIDwgMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q29uY3VycmVudFN0cmVhbXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4oYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChpbnRlcmNlcHRvcnM/LkNsaWVudCAmJiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9ycy5DbGllbnQpKSB7XG4gICAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgaWYgKCFkZXByZWNhdGVkSW50ZXJjZXB0b3JXYXJuZWQpIHtcbiAgICAgICAgZGVwcmVjYXRlZEludGVyY2VwdG9yV2FybmVkID0gdHJ1ZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdDbGllbnQuT3B0aW9ucyNpbnRlcmNlcHRvciBpcyBkZXByZWNhdGVkLiBVc2UgRGlzcGF0Y2hlciNjb21wb3NlIGluc3RlYWQuJywge1xuICAgICAgICAgIGNvZGU6ICdVTkRJQ0ktQ0xJRU5ULUlOVEVSQ0VQVE9SLURFUFJFQ0FURUQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB9XG5cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tQaXBlbGluaW5nXSA9IHBpcGVsaW5pbmcgIT0gbnVsbCA/IHBpcGVsaW5pbmcgOiAxXG4gICAgdGhpc1trTWF4SGVhZGVyc1NpemVdID0gbWF4SGVhZGVyU2l6ZSB8fCBodHRwLm1heEhlYWRlclNpemVcbiAgICB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF0gPSBrZWVwQWxpdmVUaW1lb3V0ID09IG51bGwgPyA0ZTMgOiBrZWVwQWxpdmVUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlTWF4VGltZW91dF0gPSBrZWVwQWxpdmVNYXhUaW1lb3V0ID09IG51bGwgPyA2MDBlMyA6IGtlZXBBbGl2ZU1heFRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXSA9IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgPT0gbnVsbCA/IDJlMyA6IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgdGhpc1trU2VydmVyTmFtZV0gPSBudWxsXG4gICAgdGhpc1trTG9jYWxBZGRyZXNzXSA9IGxvY2FsQWRkcmVzcyAhPSBudWxsID8gbG9jYWxBZGRyZXNzIDogbnVsbFxuICAgIHRoaXNba1Jlc3VtaW5nXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trTmVlZERyYWluXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trSG9zdEhlYWRlcl0gPSBgaG9zdDogJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9XFxyXFxuYFxuICAgIHRoaXNba0JvZHlUaW1lb3V0XSA9IGJvZHlUaW1lb3V0ICE9IG51bGwgPyBib2R5VGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trSGVhZGVyc1RpbWVvdXRdID0gaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCA/IGhlYWRlcnNUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tTdHJpY3RDb250ZW50TGVuZ3RoXSA9IHN0cmljdENvbnRlbnRMZW5ndGggPT0gbnVsbCA/IHRydWUgOiBzdHJpY3RDb250ZW50TGVuZ3RoXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba01heFJlcXVlc3RzXSA9IG1heFJlcXVlc3RzUGVyQ2xpZW50XG4gICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgdGhpc1trTWF4UmVzcG9uc2VTaXplXSA9IG1heFJlc3BvbnNlU2l6ZSA+IC0xID8gbWF4UmVzcG9uc2VTaXplIDogLTFcbiAgICB0aGlzW2tNYXhDb25jdXJyZW50U3RyZWFtc10gPSBtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsID8gbWF4Q29uY3VycmVudFN0cmVhbXMgOiAxMDAgLy8gTWF4IHBlZXJDb25jdXJyZW50U3RyZWFtcyBmb3IgYSBOb2RlIGgyIHNlcnZlclxuICAgIHRoaXNba0hUVFBDb250ZXh0XSA9IG51bGxcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcblxuICAgIHRoaXNba1Jlc3VtZV0gPSAoc3luYykgPT4gcmVzdW1lKHRoaXMsIHN5bmMpXG4gICAgdGhpc1trT25FcnJvcl0gPSAoZXJyKSA9PiBvbkVycm9yKHRoaXMsIGVycilcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICB0aGlzW2tSZXN1bWVdKHRydWUpXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tQZW5kaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tQZW5kaW5nSWR4XSAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuICEhdGhpc1trSFRUUENvbnRleHRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trSFRUUENvbnRleHRdLmRlc3Ryb3llZFxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpc1trSFRUUENvbnRleHRdPy5idXN5KG51bGwpIHx8XG4gICAgICAodGhpc1trU2l6ZV0gPj0gKGdldFBpcGVsaW5pbmcodGhpcykgfHwgMSkpIHx8XG4gICAgICB0aGlzW2tQZW5kaW5nXSA+IDBcbiAgICApXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmU6IG9ubHkgdXNlZCBmb3IgdGVzdCAqL1xuICBba0Nvbm5lY3RdIChjYikge1xuICAgIGNvbm5lY3QodGhpcylcbiAgICB0aGlzLm9uY2UoJ2Nvbm5lY3QnLCBjYilcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gb3B0cy5vcmlnaW4gfHwgdGhpc1trVXJsXS5vcmlnaW5cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgdGhpc1trUXVldWVdLnB1c2gocmVxdWVzdClcbiAgICBpZiAodGhpc1trUmVzdW1pbmddKSB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAodXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgPT0gbnVsbCAmJiB1dGlsLmlzSXRlcmFibGUocmVxdWVzdC5ib2R5KSkge1xuICAgICAgLy8gV2FpdCBhIHRpY2sgaW4gY2FzZSBzdHJlYW0vaXRlcmF0b3IgaXMgZW5kZWQgaW4gdGhlIHNhbWUgdGljay5cbiAgICAgIHRoaXNba1Jlc3VtaW5nXSA9IDFcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHJlc3VtZSh0aGlzKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trUmVzdW1lXSh0cnVlKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tSZXN1bWluZ10gJiYgdGhpc1trTmVlZERyYWluXSAhPT0gMiAmJiB0aGlzW2tCdXN5XSkge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IDJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXSA8IDJcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICAvLyBUT0RPOiBmb3IgSDIgd2UgbmVlZCB0byBncmFjZWZ1bGx5IGZsdXNoIHRoZSByZW1haW5pbmcgZW5xdWV1ZWRcbiAgICAvLyByZXF1ZXN0IGFuZCBjbG9zZSBlYWNoIHN0cmVhbS5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzW2tTaXplXSkge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICB1dGlsLmVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trQ2xvc2VkUmVzb2x2ZV0pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBTaG91bGQgd2UgZXJyb3IgaGVyZSB3aXRoIENsaWVudERlc3Ryb3llZEVycm9yP1xuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQQ29udGV4dF0pIHtcbiAgICAgICAgdGhpc1trSFRUUENvbnRleHRdLmRlc3Ryb3koZXJyLCBjYWxsYmFjaylcbiAgICAgICAgdGhpc1trSFRUUENvbnRleHRdID0gbnVsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9XG5cbiAgICAgIHRoaXNba1Jlc3VtZV0oKVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4uL2ludGVyY2VwdG9yL3JlZGlyZWN0LWludGVyY2VwdG9yLmpzJylcblxuZnVuY3Rpb24gb25FcnJvciAoY2xpZW50LCBlcnIpIHtcbiAgaWYgKFxuICAgIGNsaWVudFtrUnVubmluZ10gPT09IDAgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfU09DS0VUJ1xuICApIHtcbiAgICAvLyBFcnJvciBpcyBub3QgY2F1c2VkIGJ5IHJ1bm5pbmcgcmVxdWVzdCBhbmQgbm90IGEgcmVjb3ZlcmFibGVcbiAgICAvLyBzb2NrZXQgZXJyb3IuXG5cbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nSWR4XSA9PT0gY2xpZW50W2tSdW5uaW5nSWR4XSlcblxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgICBhc3NlcnQoY2xpZW50W2tTaXplXSA9PT0gMClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Q2xpZW50fSBjbGllbnRcbiAqIEByZXR1cm5zXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKGNsaWVudCkge1xuICBhc3NlcnQoIWNsaWVudFtrQ29ubmVjdGluZ10pXG4gIGFzc2VydCghY2xpZW50W2tIVFRQQ29udGV4dF0pXG5cbiAgbGV0IHsgaG9zdCwgaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0IH0gPSBjbGllbnRba1VybF1cblxuICAvLyBSZXNvbHZlIGlwdjZcbiAgaWYgKGhvc3RuYW1lWzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0bmFtZS5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIGNvbnN0IGlwID0gaG9zdG5hbWUuc3Vic3RyaW5nKDEsIGlkeClcblxuICAgIGFzc2VydChuZXQuaXNJUChpcCkpXG4gICAgaG9zdG5hbWUgPSBpcFxuICB9XG5cbiAgY2xpZW50W2tDb25uZWN0aW5nXSA9IHRydWVcblxuICBpZiAoY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QucHVibGlzaCh7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgdmVyc2lvbjogY2xpZW50W2tIVFRQQ29udGV4dF0/LnZlcnNpb24sXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LFxuICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl1cbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjbGllbnRba0Nvbm5lY3Rvcl0oe1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LCAoZXJyLCBzb2NrZXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0Lm9uKCdlcnJvcicsIG5vb3ApLCBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydChzb2NrZXQpXG5cbiAgICB0cnkge1xuICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0gPSBzb2NrZXQuYWxwblByb3RvY29sID09PSAnaDInXG4gICAgICAgID8gYXdhaXQgY29ubmVjdEgyKGNsaWVudCwgc29ja2V0KVxuICAgICAgICA6IGF3YWl0IGNvbm5lY3RIMShjbGllbnQsIHNvY2tldClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNvY2tldC5kZXN0cm95KCkub24oJ2Vycm9yJywgbm9vcClcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIGNsaWVudFtrQ29ubmVjdGluZ10gPSBmYWxzZVxuXG4gICAgc29ja2V0W2tDb3VudGVyXSA9IDBcbiAgICBzb2NrZXRba01heFJlcXVlc3RzXSA9IGNsaWVudFtrTWF4UmVxdWVzdHNdXG4gICAgc29ja2V0W2tDbGllbnRdID0gY2xpZW50XG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdGVkLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0ZWQucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgdmVyc2lvbjogY2xpZW50W2tIVFRQQ29udGV4dF0/LnZlcnNpb24sXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgc29ja2V0XG4gICAgICB9KVxuICAgIH1cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RFcnJvci5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICB2ZXJzaW9uOiBjbGllbnRba0hUVFBDb250ZXh0XT8udmVyc2lvbixcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcbiAgICAgIHdoaWxlIChjbGllbnRba1BlbmRpbmddID4gMCAmJiBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXS5zZXJ2ZXJuYW1lID09PSBjbGllbnRba1NlcnZlck5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdKytdXG4gICAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkVycm9yKGNsaWVudCwgZXJyKVxuICAgIH1cblxuICAgIGNsaWVudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBlcnIpXG4gIH1cblxuICBjbGllbnRba1Jlc3VtZV0oKVxufVxuXG5mdW5jdGlvbiBlbWl0RHJhaW4gKGNsaWVudCkge1xuICBjbGllbnRba05lZWREcmFpbl0gPSAwXG4gIGNsaWVudC5lbWl0KCdkcmFpbicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG59XG5cbmZ1bmN0aW9uIHJlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIGlmIChjbGllbnRba1Jlc3VtaW5nXSA9PT0gMikge1xuICAgIHJldHVyblxuICB9XG5cbiAgY2xpZW50W2tSZXN1bWluZ10gPSAyXG5cbiAgX3Jlc3VtZShjbGllbnQsIHN5bmMpXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMFxuXG4gIGlmIChjbGllbnRba1J1bm5pbmdJZHhdID4gMjU2KSB7XG4gICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKDAsIGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSAtPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gICAgY2xpZW50W2tSdW5uaW5nSWR4XSA9IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDbG9zZWRSZXNvbHZlXSAmJiAhY2xpZW50W2tTaXplXSkge1xuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrSFRUUENvbnRleHRdKSB7XG4gICAgICBjbGllbnRba0hUVFBDb250ZXh0XS5yZXN1bWUoKVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0J1c3ldKSB7XG4gICAgICBjbGllbnRba05lZWREcmFpbl0gPSAyXG4gICAgfSBlbHNlIGlmIChjbGllbnRba05lZWREcmFpbl0gPT09IDIpIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDFcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZW1pdERyYWluKGNsaWVudCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGdldFBpcGVsaW5pbmcoY2xpZW50KSB8fCAxKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dXG5cbiAgICBpZiAoY2xpZW50W2tVcmxdLnByb3RvY29sID09PSAnaHR0cHM6JyAmJiBjbGllbnRba1NlcnZlck5hbWVdICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY2xpZW50W2tTZXJ2ZXJOYW1lXSA9IHJlcXVlc3Quc2VydmVybmFtZVxuICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0/LmRlc3Ryb3kobmV3IEluZm9ybWF0aW9uYWxFcnJvcignc2VydmVybmFtZSBjaGFuZ2VkJyksICgpID0+IHtcbiAgICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0gPSBudWxsXG4gICAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nvbm5lY3RpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWNsaWVudFtrSFRUUENvbnRleHRdKSB7XG4gICAgICBjb25uZWN0KGNsaWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0hUVFBDb250ZXh0XS5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0hUVFBDb250ZXh0XS5idXN5KHJlcXVlc3QpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiBjbGllbnRba0hUVFBDb250ZXh0XS53cml0ZShyZXF1ZXN0KSkge1xuICAgICAgY2xpZW50W2tQZW5kaW5nSWR4XSsrXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1BlbmRpbmdJZHhdLCAxKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFxuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vLyBFeHRyYWN0ZWQgZnJvbSBub2RlL2xpYi9pbnRlcm5hbC9maXhlZF9xdWV1ZS5qc1xuXG4vLyBDdXJyZW50bHkgb3B0aW1hbCBxdWV1ZSBzaXplLCB0ZXN0ZWQgb24gVjggNi4wIC0gNi42LiBNdXN0IGJlIHBvd2VyIG9mIHR3by5cbmNvbnN0IGtTaXplID0gMjA0ODtcbmNvbnN0IGtNYXNrID0ga1NpemUgLSAxO1xuXG4vLyBUaGUgRml4ZWRRdWV1ZSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBmaXhlZC1zaXplXG4vLyBjaXJjdWxhciBidWZmZXJzLiBJdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuLy9cbi8vICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxcbi8vICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLy8gICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2XG4vLyArLS0tLS0tLS0tLS0rIDwtLS0tLVxcICAgICAgICstLS0tLS0tLS0tLSsgPC0tLS0tLVxcICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgXFwtLS0tLSB8ICAgbmV4dCAgICB8ICAgICAgICAgXFwtLS0tLS0tIHwgICBuZXh0ICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8IDwtLSB0b3AgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gT3IsIGlmIHRoZXJlIGlzIG9ubHkgb25lIGNpcmN1bGFyIGJ1ZmZlciwgaXQgbG9va3Mgc29tZXRoaW5nXG4vLyBsaWtlIGVpdGhlciBvZiB0aGVzZTpcbi8vXG4vLyAgaGVhZCAgIHRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICAgdGFpbFxuLy8gICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8XG4vLyAgICB2ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbbnVsbF0gICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgICAgICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIEFkZGluZyBhIHZhbHVlIG1lYW5zIG1vdmluZyBgdG9wYCBmb3J3YXJkIGJ5IG9uZSwgcmVtb3ZpbmcgbWVhbnNcbi8vIG1vdmluZyBgYm90dG9tYCBmb3J3YXJkIGJ5IG9uZS4gQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCwgdGhlIHF1ZXVlXG4vLyB3cmFwcyBhcm91bmQuXG4vL1xuLy8gV2hlbiBgdG9wID09PSBib3R0b21gIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGVtcHR5IGFuZCB3aGVuXG4vLyBgdG9wICsgMSA9PT0gYm90dG9tYCBpdCdzIGZ1bGwuIFRoaXMgd2FzdGVzIGEgc2luZ2xlIHNwYWNlIG9mIHN0b3JhZ2Vcbi8vIGJ1dCBhbGxvd3MgbXVjaCBxdWlja2VyIGNoZWNrcy5cblxuY2xhc3MgRml4ZWRDaXJjdWxhckJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYm90dG9tID0gMDtcbiAgICB0aGlzLnRvcCA9IDA7XG4gICAgdGhpcy5saXN0ID0gbmV3IEFycmF5KGtTaXplKTtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy50b3AgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgaXNGdWxsKCkge1xuICAgIHJldHVybiAoKHRoaXMudG9wICsgMSkgJiBrTWFzaykgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgdGhpcy5saXN0W3RoaXMudG9wXSA9IGRhdGE7XG4gICAgdGhpcy50b3AgPSAodGhpcy50b3AgKyAxKSAmIGtNYXNrO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLmxpc3RbdGhpcy5ib3R0b21dO1xuICAgIGlmIChuZXh0SXRlbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5saXN0W3RoaXMuYm90dG9tXSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJvdHRvbSA9ICh0aGlzLmJvdHRvbSArIDEpICYga01hc2s7XG4gICAgcmV0dXJuIG5leHRJdGVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuaXNFbXB0eSgpO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgaWYgKHRoaXMuaGVhZC5pc0Z1bGwoKSkge1xuICAgICAgLy8gSGVhZCBpcyBmdWxsOiBDcmVhdGVzIGEgbmV3IHF1ZXVlLCBzZXRzIHRoZSBvbGQgcXVldWUncyBgLm5leHRgIHRvIGl0LFxuICAgICAgLy8gYW5kIHNldHMgaXQgYXMgdGhlIG5ldyBtYWluIHF1ZXVlLlxuICAgICAgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICAgIH1cbiAgICB0aGlzLmhlYWQucHVzaChkYXRhKTtcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgY29uc3QgbmV4dCA9IHRhaWwuc2hpZnQoKTtcbiAgICBpZiAodGFpbC5pc0VtcHR5KCkgJiYgdGFpbC5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhbm90aGVyIHF1ZXVlLCBpdCBmb3JtcyB0aGUgbmV3IHRhaWwuXG4gICAgICB0aGlzLnRhaWwgPSB0YWlsLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0O1xuICB9XG59O1xuIiwgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBrUG9vbCA9IFN5bWJvbCgncG9vbCcpXG5cbmNsYXNzIFBvb2xTdGF0cyB7XG4gIGNvbnN0cnVjdG9yIChwb29sKSB7XG4gICAgdGhpc1trUG9vbF0gPSBwb29sXG4gIH1cblxuICBnZXQgY29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIGdldCBmcmVlICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0ZyZWVdXG4gIH1cblxuICBnZXQgcGVuZGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tQZW5kaW5nXVxuICB9XG5cbiAgZ2V0IHF1ZXVlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tRdWV1ZWRdXG4gIH1cblxuICBnZXQgcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tSdW5uaW5nXVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrU2l6ZV1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xTdGF0c1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL2ZpeGVkLXF1ZXVlJylcbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUsIGtSdW5uaW5nLCBrUGVuZGluZywga1F1ZXVlZCwga0J1c3ksIGtGcmVlLCBrVXJsLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBQb29sU3RhdHMgPSByZXF1aXJlKCcuL3Bvb2wtc3RhdHMnKVxuXG5jb25zdCBrQ2xpZW50cyA9IFN5bWJvbCgnY2xpZW50cycpXG5jb25zdCBrTmVlZERyYWluID0gU3ltYm9sKCduZWVkRHJhaW4nKVxuY29uc3Qga1F1ZXVlID0gU3ltYm9sKCdxdWV1ZScpXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgnY2xvc2VkIHJlc29sdmUnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtHZXREaXNwYXRjaGVyID0gU3ltYm9sKCdnZXQgZGlzcGF0Y2hlcicpXG5jb25zdCBrQWRkQ2xpZW50ID0gU3ltYm9sKCdhZGQgY2xpZW50JylcbmNvbnN0IGtSZW1vdmVDbGllbnQgPSBTeW1ib2woJ3JlbW92ZSBjbGllbnQnKVxuY29uc3Qga1N0YXRzID0gU3ltYm9sKCdzdGF0cycpXG5cbmNsYXNzIFBvb2xCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBuZXcgRml4ZWRRdWV1ZSgpXG4gICAgdGhpc1trQ2xpZW50c10gPSBbXVxuICAgIHRoaXNba1F1ZXVlZF0gPSAwXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSBmdW5jdGlvbiBvbkRyYWluIChvcmlnaW4sIHRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHF1ZXVlID0gcG9vbFtrUXVldWVdXG5cbiAgICAgIGxldCBuZWVkRHJhaW4gPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIW5lZWREcmFpbikge1xuICAgICAgICBjb25zdCBpdGVtID0gcXVldWUuc2hpZnQoKVxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHBvb2xba1F1ZXVlZF0tLVxuICAgICAgICBuZWVkRHJhaW4gPSAhdGhpcy5kaXNwYXRjaChpdGVtLm9wdHMsIGl0ZW0uaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpc1trTmVlZERyYWluXSA9IG5lZWREcmFpblxuXG4gICAgICBpZiAoIXRoaXNba05lZWREcmFpbl0gJiYgcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBwb29sW2tOZWVkRHJhaW5dID0gZmFsc2VcbiAgICAgICAgcG9vbC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgICAgfVxuXG4gICAgICBpZiAocG9vbFtrQ2xvc2VkUmVzb2x2ZV0gJiYgcXVldWUuaXNFbXB0eSgpKSB7XG4gICAgICAgIFByb21pc2VcbiAgICAgICAgICAuYWxsKHBvb2xba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgICAgICAgLnRoZW4ocG9vbFtrQ2xvc2VkUmVzb2x2ZV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uRGlzY29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdHNdID0gbmV3IFBvb2xTdGF0cyh0aGlzKVxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrRnJlZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSAmJiAhY2xpZW50W2tOZWVkRHJhaW5dKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1BlbmRpbmddOiBwZW5kaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBwZW5kaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICBsZXQgcmV0ID0gMFxuICAgIGZvciAoY29uc3QgeyBba1J1bm5pbmddOiBydW5uaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBydW5uaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1NpemVdOiBzaXplIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBzaXplXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBzdGF0cyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1N0YXRzXVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGlmICh0aGlzW2tRdWV1ZV0uaXNFbXB0eSgpKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzW2tRdWV1ZV0uc2hpZnQoKVxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpdGVtLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpc1trQ2xpZW50c10ubWFwKGMgPT4gYy5kZXN0cm95KGVycikpKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trUXVldWVdLnB1c2goeyBvcHRzLCBoYW5kbGVyIH0pXG4gICAgICB0aGlzW2tRdWV1ZWRdKytcbiAgICB9IGVsc2UgaWYgKCFkaXNwYXRjaGVyLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpKSB7XG4gICAgICBkaXNwYXRjaGVyW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trTmVlZERyYWluXSA9ICF0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBba0FkZENsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudFxuICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgIC5vbignZGlzY29ubmVjdCcsIHRoaXNba09uRGlzY29ubmVjdF0pXG4gICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgIHRoaXNba0NsaWVudHNdLnB1c2goY2xpZW50KVxuXG4gICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgICAgICB0aGlzW2tPbkRyYWluXShjbGllbnRba1VybF0sIFt0aGlzLCBjbGllbnRdKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBba1JlbW92ZUNsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudC5jbG9zZSgoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKGNsaWVudClcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXNba05lZWREcmFpbl0gPSB0aGlzW2tDbGllbnRzXS5zb21lKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrQ29ubmVjdGlvbnMgPSBTeW1ib2woJ2Nvbm5lY3Rpb25zJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBjb25uZWN0aW9ucyxcbiAgICBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksXG4gICAgY29ubmVjdCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICB0bHMsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgc29ja2V0UGF0aCxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICBhbGxvd0gyLFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgaWYgKGNvbm5lY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdGlvbnMpIHx8IGNvbm5lY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9ucycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4oYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHN1cGVyKG9wdGlvbnMpXG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM/LlBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sKVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trQ29ubmVjdGlvbnNdID0gY29ubmVjdGlvbnMgfHwgbnVsbFxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKG9yaWdpbilcbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QsIGFsbG93SDIgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIHRoaXMub24oJ2Nvbm5lY3Rpb25FcnJvcicsIChvcmlnaW4sIHRhcmdldHMsIGVycm9yKSA9PiB7XG4gICAgICAvLyBJZiBhIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJzLCB3ZSByZW1vdmUgdGhlIGNsaWVudCBmcm9tIHRoZSBwb29sLFxuICAgICAgLy8gYW5kIGVtaXQgYSBjb25uZWN0aW9uRXJyb3IgZXZlbnQuIFRoZXkgd2lsbCBub3QgYmUgcmUtdXNlZC5cbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8zODk1XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIC8vIERvIG5vdCB1c2Uga1JlbW92ZUNsaWVudCBoZXJlLCBhcyBpdCB3aWxsIGNsb3NlIHRoZSBjbGllbnQsXG4gICAgICAgIC8vIGJ1dCB0aGUgY2xpZW50IGNhbm5vdCBiZSBjbG9zZWQgaW4gdGhpcyBzdGF0ZS5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZih0YXJnZXQpXG4gICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgaWYgKCFjbGllbnRba05lZWREcmFpbl0pIHtcbiAgICAgICAgcmV0dXJuIGNsaWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHBhcnNlT3JpZ2luIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrR3JlYXRlc3RDb21tb25EaXZpc29yID0gU3ltYm9sKCdrR3JlYXRlc3RDb21tb25EaXZpc29yJylcbmNvbnN0IGtDdXJyZW50V2VpZ2h0ID0gU3ltYm9sKCdrQ3VycmVudFdlaWdodCcpXG5jb25zdCBrSW5kZXggPSBTeW1ib2woJ2tJbmRleCcpXG5jb25zdCBrV2VpZ2h0ID0gU3ltYm9sKCdrV2VpZ2h0JylcbmNvbnN0IGtNYXhXZWlnaHRQZXJTZXJ2ZXIgPSBTeW1ib2woJ2tNYXhXZWlnaHRQZXJTZXJ2ZXInKVxuY29uc3Qga0Vycm9yUGVuYWx0eSA9IFN5bWJvbCgna0Vycm9yUGVuYWx0eScpXG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gbnVtYmVycyBieVxuICogdXNpbmcgdGhlIEV1Y2xpZGVhbiBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGEgPT09IDApIHJldHVybiBiXG5cbiAgd2hpbGUgKGIgIT09IDApIHtcbiAgICBjb25zdCB0ID0gYlxuICAgIGIgPSBhICUgYlxuICAgIGEgPSB0XG4gIH1cbiAgcmV0dXJuIGFcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh1cHN0cmVhbXMgPSBbXSwgeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIC4uLm9wdHMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSBvcHRzXG4gICAgdGhpc1trSW5kZXhdID0gLTFcbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IDBcblxuICAgIHRoaXNba01heFdlaWdodFBlclNlcnZlcl0gPSB0aGlzW2tPcHRpb25zXS5tYXhXZWlnaHRQZXJTZXJ2ZXIgfHwgMTAwXG4gICAgdGhpc1trRXJyb3JQZW5hbHR5XSA9IHRoaXNba09wdGlvbnNdLmVycm9yUGVuYWx0eSB8fCAxNVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVwc3RyZWFtcykpIHtcbiAgICAgIHVwc3RyZWFtcyA9IFt1cHN0cmVhbXNdXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzPy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIGxldCByZXN1bHQgPSAwXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzW2tDbGllbnRzXS5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ID0gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yKHRoaXNba0NsaWVudHNdW2ldW2tXZWlnaHRdLCByZXN1bHQpXG4gICAgfVxuXG4gICAgdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXSA9IHJlc3VsdFxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrQ2xpZW50cywga1J1bm5pbmcsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvcicpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIG9wdHMuY29ubmVjdGlvbnMgPT09IDFcbiAgICA/IG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxuICAgIDogbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCBtYXhSZWRpcmVjdGlvbnMgPSAwLCBjb25uZWN0LCAuLi5vcHRpb25zIH0gPSB7fSkge1xuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM/LkFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0IH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuICAgIHRoaXNba0NsaWVudHNdID0gbmV3IE1hcCgpXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFt0aGlzLCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgcmV0ICs9IGNsaWVudFtrUnVubmluZ11cbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBsZXQga2V5XG4gICAgaWYgKG9wdHMub3JpZ2luICYmICh0eXBlb2Ygb3B0cy5vcmlnaW4gPT09ICdzdHJpbmcnIHx8IG9wdHMub3JpZ2luIGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAga2V5ID0gU3RyaW5nKG9wdHMub3JpZ2luKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMub3JpZ2luIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIFVSTC4nKVxuICAgIH1cblxuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9wdHMub3JpZ2luLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgICAgLy8gVGhpcyBpbnRyb2R1Y2VzIGEgdGlueSBtZW1vcnkgbGVhaywgYXMgZGlzcGF0Y2hlcnMgYXJlIG5ldmVyIHJlbW92ZWQgZnJvbSB0aGUgbWFwLlxuICAgICAgLy8gVE9ETyhtY29sbGluYSk6IHJlbW92ZSB0ZSB0aW1lciB3aGVuIHRoZSBjbGllbnQvcG9vbCBkbyBub3QgaGF2ZSBhbnkgbW9yZVxuICAgICAgLy8gYWN0aXZlIGNvbm5lY3Rpb25zLlxuICAgICAgdGhpc1trQ2xpZW50c10uc2V0KGtleSwgZGlzcGF0Y2hlcilcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjbG9zZVByb21pc2VzLnB1c2goY2xpZW50LmNsb3NlKCkpXG4gICAgfVxuICAgIHRoaXNba0NsaWVudHNdLmNsZWFyKClcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgIH1cbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChkZXN0cm95UHJvbWlzZXMpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBZ2VudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtQcm94eSwga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBVUkwgfSA9IHJlcXVpcmUoJ25vZGU6dXJsJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi4vY29yZS9jb25uZWN0JylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcblxuY29uc3Qga0FnZW50ID0gU3ltYm9sKCdwcm94eSBhZ2VudCcpXG5jb25zdCBrQ2xpZW50ID0gU3ltYm9sKCdwcm94eSBjbGllbnQnKVxuY29uc3Qga1Byb3h5SGVhZGVycyA9IFN5bWJvbCgncHJveHkgaGVhZGVycycpXG5jb25zdCBrUmVxdWVzdFRscyA9IFN5bWJvbCgncmVxdWVzdCB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga1Byb3h5VGxzID0gU3ltYm9sKCdwcm94eSB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga0Nvbm5lY3RFbmRwb2ludCA9IFN5bWJvbCgnY29ubmVjdCBlbmRwb2ludCBmdW5jdGlvbicpXG5jb25zdCBrVHVubmVsUHJveHkgPSBTeW1ib2woJ3R1bm5lbCBwcm94eScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm90b2NvbFBvcnQgKHByb3RvY29sKSB7XG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MFxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5mdW5jdGlvbiBkZWZhdWx0QWdlbnRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgaWYgKG9wdHMuY29ubmVjdGlvbnMgPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG4gIH1cbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgSHR0cDFQcm94eVdyYXBwZXIgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gICNjbGllbnRcblxuICBjb25zdHJ1Y3RvciAocHJveHlVcmwsIHsgaGVhZGVycyA9IHt9LCBjb25uZWN0LCBmYWN0b3J5IH0pIHtcbiAgICBzdXBlcigpXG4gICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBVUkwgaXMgbWFuZGF0b3J5JylcbiAgICB9XG5cbiAgICB0aGlzW2tQcm94eUhlYWRlcnNdID0gaGVhZGVyc1xuICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICB0aGlzLiNjbGllbnQgPSBmYWN0b3J5KHByb3h5VXJsLCB7IGNvbm5lY3QgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jY2xpZW50ID0gbmV3IENsaWVudChwcm94eVVybCwgeyBjb25uZWN0IH0pXG4gICAgfVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvbkhlYWRlcnMgPSBoYW5kbGVyLm9uSGVhZGVyc1xuICAgIGhhbmRsZXIub25IZWFkZXJzID0gZnVuY3Rpb24gKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3VtZSkge1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwNykge1xuICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGhhbmRsZXIub25FcnJvcihuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkICg0MDcpJykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25IZWFkZXJzKSBvbkhlYWRlcnMuY2FsbCh0aGlzLCBzdGF0dXNDb2RlLCBkYXRhLCByZXN1bWUpXG4gICAgfVxuXG4gICAgLy8gUmV3cml0ZSByZXF1ZXN0IGFzIGFuIEhUVFAxIFByb3h5IHJlcXVlc3QsIHdpdGhvdXQgdHVubmVsaW5nLlxuICAgIGNvbnN0IHtcbiAgICAgIG9yaWdpbixcbiAgICAgIHBhdGggPSAnLycsXG4gICAgICBoZWFkZXJzID0ge31cbiAgICB9ID0gb3B0c1xuXG4gICAgb3B0cy5wYXRoID0gb3JpZ2luICsgcGF0aFxuXG4gICAgaWYgKCEoJ2hvc3QnIGluIGhlYWRlcnMpICYmICEoJ0hvc3QnIGluIGhlYWRlcnMpKSB7XG4gICAgICBjb25zdCB7IGhvc3QgfSA9IG5ldyBVUkwob3JpZ2luKVxuICAgICAgaGVhZGVycy5ob3N0ID0gaG9zdFxuICAgIH1cbiAgICBvcHRzLmhlYWRlcnMgPSB7IC4uLnRoaXNba1Byb3h5SGVhZGVyc10sIC4uLmhlYWRlcnMgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudFtrRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudC5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICByZXR1cm4gdGhpcy4jY2xpZW50LmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmNsYXNzIFByb3h5QWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKCFvcHRzIHx8ICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgIShvcHRzIGluc3RhbmNlb2YgVVJMKSAmJiAhb3B0cy51cmkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IHVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG4gICAgaWYgKHR5cGVvZiBjbGllbnRGYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMuY2xpZW50RmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHByb3h5VHVubmVsID0gdHJ1ZSB9ID0gb3B0c1xuXG4gICAgY29uc3QgdXJsID0gdGhpcy4jZ2V0VXJsKG9wdHMpXG4gICAgY29uc3QgeyBocmVmLCBvcmlnaW4sIHBvcnQsIHByb3RvY29sLCB1c2VybmFtZSwgcGFzc3dvcmQsIGhvc3RuYW1lOiBwcm94eUhvc3RuYW1lIH0gPSB1cmxcblxuICAgIHRoaXNba1Byb3h5XSA9IHsgdXJpOiBocmVmLCBwcm90b2NvbCB9XG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzPy5Qcm94eUFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudFxuICAgICAgOiBbXVxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cbiAgICB0aGlzW2tUdW5uZWxQcm94eV0gPSBwcm94eVR1bm5lbFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG5cbiAgICBjb25zdCBhZ2VudEZhY3RvcnkgPSBvcHRzLmZhY3RvcnkgfHwgZGVmYXVsdEFnZW50RmFjdG9yeVxuICAgIGNvbnN0IGZhY3RvcnkgPSAob3JpZ2luLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCB7IHByb3RvY29sIH0gPSBuZXcgVVJMKG9yaWdpbilcbiAgICAgIGlmICghdGhpc1trVHVubmVsUHJveHldICYmIHByb3RvY29sID09PSAnaHR0cDonICYmIHRoaXNba1Byb3h5XS5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHAxUHJveHlXcmFwcGVyKHRoaXNba1Byb3h5XS51cmksIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgIGNvbm5lY3QsXG4gICAgICAgICAgZmFjdG9yeTogYWdlbnRGYWN0b3J5XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gYWdlbnRGYWN0b3J5KG9yaWdpbiwgb3B0aW9ucylcbiAgICB9XG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkodXJsLCB7IGNvbm5lY3QgfSlcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGZhY3RvcnksXG4gICAgICBjb25uZWN0OiBhc3luYyAob3B0cywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZFBhdGggPSBvcHRzLmhvc3RcbiAgICAgICAgaWYgKCFvcHRzLnBvcnQpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRQYXRoICs9IGA6JHtkZWZhdWx0UHJvdG9jb2xQb3J0KG9wdHMucHJvdG9jb2wpfWBcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgc29ja2V0LCBzdGF0dXNDb2RlIH0gPSBhd2FpdCB0aGlzW2tDbGllbnRdLmNvbm5lY3Qoe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHJlcXVlc3RlZFBhdGgsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgICAgICBob3N0OiBvcHRzLmhvc3RcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXJ2ZXJuYW1lOiB0aGlzW2tQcm94eVRsc10/LnNlcnZlcm5hbWUgfHwgcHJveHlIb3N0bmFtZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIG5vb3ApLmRlc3Ryb3koKVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoYFByb3h5IHJlc3BvbnNlICgke3N0YXR1c0NvZGV9KSAhPT0gMjAwIHdoZW4gSFRUUCBUdW5uZWxpbmdgKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdHMucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzb2NrZXQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHNlcnZlcm5hbWVcbiAgICAgICAgICBpZiAodGhpc1trUmVxdWVzdFRsc10pIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSB0aGlzW2tSZXF1ZXN0VGxzXS5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSh7IC4uLm9wdHMsIHNlcnZlcm5hbWUsIGh0dHBTb2NrZXQ6IHNvY2tldCB9LCBjYWxsYmFjaylcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpIHtcbiAgICAgICAgICAgIC8vIFRocm93IGEgY3VzdG9tIGVycm9yIHRvIGF2b2lkIGxvb3AgaW4gY2xpZW50LmpzI2Nvbm5lY3RcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcihlcnIpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IGJ1aWxkSGVhZGVycyhvcHRzLmhlYWRlcnMpXG4gICAgdGhyb3dJZlByb3h5QXV0aElzU2VudChoZWFkZXJzKVxuXG4gICAgaWYgKGhlYWRlcnMgJiYgISgnaG9zdCcgaW4gaGVhZGVycykgJiYgISgnSG9zdCcgaW4gaGVhZGVycykpIHtcbiAgICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICAgIGhlYWRlcnMuaG9zdCA9IGhvc3RcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBoZWFkZXJzXG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvcHJveHktYWdlbnQnKS5Qcm94eUFnZW50Lk9wdGlvbnMgfCBzdHJpbmcgfCBVUkx9IG9wdHNcbiAgICogQHJldHVybnMge1VSTH1cbiAgICovXG4gICNnZXRVcmwgKG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChvcHRzKVxuICAgIH0gZWxzZSBpZiAob3B0cyBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgcmV0dXJuIG9wdHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBVUkwob3B0cy51cmkpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uZGVzdHJveSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5kZXN0cm95KClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzIChoZWFkZXJzKSB7XG4gIC8vIFdoZW4gdXNpbmcgdW5kaWNpLmZldGNoLCB0aGUgaGVhZGVycyBsaXN0IGlzIHN0b3JlZFxuICAvLyBhcyBhbiBhcnJheS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3QgaGVhZGVyc1BhaXIgPSB7fVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBoZWFkZXJzUGFpcltoZWFkZXJzW2ldXSA9IGhlYWRlcnNbaSArIDFdXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNQYWlyXG4gIH1cblxuICByZXR1cm4gaGVhZGVyc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICpcbiAqIFByZXZpb3VzIHZlcnNpb25zIG9mIFByb3h5QWdlbnQgc3VnZ2VzdHMgdGhlIFByb3h5LUF1dGhvcml6YXRpb24gaW4gcmVxdWVzdCBoZWFkZXJzXG4gKiBOZXZlcnRoZWxlc3MsIGl0IHdhcyBjaGFuZ2VkIGFuZCB0byBhdm9pZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYnkgZW5kIHVzZXJzXG4gKiB0aGlzIGNoZWNrIHdhcyBjcmVhdGVkLlxuICogSXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICovXG5mdW5jdGlvbiB0aHJvd0lmUHJveHlBdXRoSXNTZW50IChoZWFkZXJzKSB7XG4gIGNvbnN0IGV4aXN0UHJveHlBdXRoID0gaGVhZGVycyAmJiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5maW5kKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSAncHJveHktYXV0aG9yaXphdGlvbicpXG4gIGlmIChleGlzdFByb3h5QXV0aCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgYmUgc2VudCBpbiBQcm94eUFnZW50IGNvbnN0cnVjdG9yJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3h5QWdlbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IGtDbG9zZSwga0Rlc3Ryb3ksIGtDbG9zZWQsIGtEZXN0cm95ZWQsIGtEaXNwYXRjaCwga05vUHJveHlBZ2VudCwga0h0dHBQcm94eUFnZW50LCBrSHR0cHNQcm94eUFnZW50IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vcHJveHktYWdlbnQnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuY29uc3QgREVGQVVMVF9QT1JUUyA9IHtcbiAgJ2h0dHA6JzogODAsXG4gICdodHRwczonOiA0NDNcbn1cblxubGV0IGV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNsYXNzIEVudkh0dHBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAjbm9Qcm94eVZhbHVlID0gbnVsbFxuICAjbm9Qcm94eUVudHJpZXMgPSBudWxsXG4gICNvcHRzID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy4jb3B0cyA9IG9wdHNcblxuICAgIGlmICghZXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICBleHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdFbnZIdHRwUHJveHlBZ2VudCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgIGNvZGU6ICdVTkRJQ0ktRUhQQSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgeyBodHRwUHJveHksIGh0dHBzUHJveHksIG5vUHJveHksIC4uLmFnZW50T3B0cyB9ID0gb3B0c1xuXG4gICAgdGhpc1trTm9Qcm94eUFnZW50XSA9IG5ldyBBZ2VudChhZ2VudE9wdHMpXG5cbiAgICBjb25zdCBIVFRQX1BST1hZID0gaHR0cFByb3h5ID8/IHByb2Nlc3MuZW52Lmh0dHBfcHJveHkgPz8gcHJvY2Vzcy5lbnYuSFRUUF9QUk9YWVxuICAgIGlmIChIVFRQX1BST1hZKSB7XG4gICAgICB0aGlzW2tIdHRwUHJveHlBZ2VudF0gPSBuZXcgUHJveHlBZ2VudCh7IC4uLmFnZW50T3B0cywgdXJpOiBIVFRQX1BST1hZIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0h0dHBQcm94eUFnZW50XSA9IHRoaXNba05vUHJveHlBZ2VudF1cbiAgICB9XG5cbiAgICBjb25zdCBIVFRQU19QUk9YWSA9IGh0dHBzUHJveHkgPz8gcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHkgPz8gcHJvY2Vzcy5lbnYuSFRUUFNfUFJPWFlcbiAgICBpZiAoSFRUUFNfUFJPWFkpIHtcbiAgICAgIHRoaXNba0h0dHBzUHJveHlBZ2VudF0gPSBuZXcgUHJveHlBZ2VudCh7IC4uLmFnZW50T3B0cywgdXJpOiBIVFRQU19QUk9YWSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdID0gdGhpc1trSHR0cFByb3h5QWdlbnRdXG4gICAgfVxuXG4gICAgdGhpcy4jcGFyc2VOb1Byb3h5KClcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBhZ2VudCA9IHRoaXMuI2dldFByb3h5QWdlbnRGb3JVcmwodXJsKVxuICAgIHJldHVybiBhZ2VudC5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba05vUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIGlmICghdGhpc1trSHR0cFByb3h5QWdlbnRdW2tDbG9zZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIH1cbiAgICBpZiAoIXRoaXNba0h0dHBzUHJveHlBZ2VudF1ba0Nsb3NlZF0pIHtcbiAgICAgIGF3YWl0IHRoaXNba0h0dHBzUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIGF3YWl0IHRoaXNba05vUHJveHlBZ2VudF0uZGVzdHJveShlcnIpXG4gICAgaWYgKCF0aGlzW2tIdHRwUHJveHlBZ2VudF1ba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGF3YWl0IHRoaXNba0h0dHBQcm94eUFnZW50XS5kZXN0cm95KGVycilcbiAgICB9XG4gICAgaWYgKCF0aGlzW2tIdHRwc1Byb3h5QWdlbnRdW2tEZXN0cm95ZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdLmRlc3Ryb3koZXJyKVxuICAgIH1cbiAgfVxuXG4gICNnZXRQcm94eUFnZW50Rm9yVXJsICh1cmwpIHtcbiAgICBsZXQgeyBwcm90b2NvbCwgaG9zdDogaG9zdG5hbWUsIHBvcnQgfSA9IHVybFxuXG4gICAgLy8gU3RyaXBwaW5nIHBvcnRzIGluIHRoaXMgd2F5IGluc3RlYWQgb2YgdXNpbmcgcGFyc2VkVXJsLmhvc3RuYW1lIHRvIG1ha2VcbiAgICAvLyBzdXJlIHRoYXQgdGhlIGJyYWNrZXRzIGFyb3VuZCBJUHY2IGFkZHJlc3NlcyBhcmUga2VwdC5cbiAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoLzpcXGQqJC8sICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgcG9ydCA9IE51bWJlci5wYXJzZUludChwb3J0LCAxMCkgfHwgREVGQVVMVF9QT1JUU1twcm90b2NvbF0gfHwgMFxuICAgIGlmICghdGhpcy4jc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpKSB7XG4gICAgICByZXR1cm4gdGhpc1trTm9Qcm94eUFnZW50XVxuICAgIH1cbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICByZXR1cm4gdGhpc1trSHR0cHNQcm94eUFnZW50XVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1trSHR0cFByb3h5QWdlbnRdXG4gIH1cblxuICAjc2hvdWxkUHJveHkgKGhvc3RuYW1lLCBwb3J0KSB7XG4gICAgaWYgKHRoaXMuI25vUHJveHlDaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNwYXJzZU5vUHJveHkoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLiNub1Byb3h5RW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlIC8vIEFsd2F5cyBwcm94eSBpZiBOT19QUk9YWSBpcyBub3Qgc2V0IG9yIGVtcHR5LlxuICAgIH1cbiAgICBpZiAodGhpcy4jbm9Qcm94eVZhbHVlID09PSAnKicpIHtcbiAgICAgIHJldHVybiBmYWxzZSAvLyBOZXZlciBwcm94eSBpZiB3aWxkY2FyZCBpcyBzZXQuXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNub1Byb3h5RW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiNub1Byb3h5RW50cmllc1tpXVxuICAgICAgaWYgKGVudHJ5LnBvcnQgJiYgZW50cnkucG9ydCAhPT0gcG9ydCkge1xuICAgICAgICBjb250aW51ZSAvLyBTa2lwIGlmIHBvcnRzIGRvbid0IG1hdGNoLlxuICAgICAgfVxuICAgICAgaWYgKCEvXlsuKl0vLnRlc3QoZW50cnkuaG9zdG5hbWUpKSB7XG4gICAgICAgIC8vIE5vIHdpbGRjYXJkcywgc28gZG9uJ3QgcHJveHkgb25seSBpZiB0aGVyZSBpcyBub3QgYW4gZXhhY3QgbWF0Y2guXG4gICAgICAgIGlmIChob3N0bmFtZSA9PT0gZW50cnkuaG9zdG5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG9uJ3QgcHJveHkgaWYgdGhlIGhvc3RuYW1lIGVuZHMgd2l0aCB0aGUgbm9fcHJveHkgaG9zdC5cbiAgICAgICAgaWYgKGhvc3RuYW1lLmVuZHNXaXRoKGVudHJ5Lmhvc3RuYW1lLnJlcGxhY2UoL15cXCovLCAnJykpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgI3BhcnNlTm9Qcm94eSAoKSB7XG4gICAgY29uc3Qgbm9Qcm94eVZhbHVlID0gdGhpcy4jb3B0cy5ub1Byb3h5ID8/IHRoaXMuI25vUHJveHlFbnZcbiAgICBjb25zdCBub1Byb3h5U3BsaXQgPSBub1Byb3h5VmFsdWUuc3BsaXQoL1ssXFxzXS8pXG4gICAgY29uc3Qgbm9Qcm94eUVudHJpZXMgPSBbXVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub1Byb3h5U3BsaXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gbm9Qcm94eVNwbGl0W2ldXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBwYXJzZWQgPSBlbnRyeS5tYXRjaCgvXiguKyk6KFxcZCspJC8pXG4gICAgICBub1Byb3h5RW50cmllcy5wdXNoKHtcbiAgICAgICAgaG9zdG5hbWU6IChwYXJzZWQgPyBwYXJzZWRbMV0gOiBlbnRyeSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcG9ydDogcGFyc2VkID8gTnVtYmVyLnBhcnNlSW50KHBhcnNlZFsyXSwgMTApIDogMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLiNub1Byb3h5VmFsdWUgPSBub1Byb3h5VmFsdWVcbiAgICB0aGlzLiNub1Byb3h5RW50cmllcyA9IG5vUHJveHlFbnRyaWVzXG4gIH1cblxuICBnZXQgI25vUHJveHlDaGFuZ2VkICgpIHtcbiAgICBpZiAodGhpcy4jb3B0cy5ub1Byb3h5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jbm9Qcm94eVZhbHVlICE9PSB0aGlzLiNub1Byb3h5RW52XG4gIH1cblxuICBnZXQgI25vUHJveHlFbnYgKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5ub19wcm94eSA/PyBwcm9jZXNzLmVudi5OT19QUk9YWSA/PyAnJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW52SHR0cFByb3h5QWdlbnRcbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuY29uc3QgeyBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBSZXF1ZXN0UmV0cnlFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBpc0Rpc3R1cmJlZCxcbiAgcGFyc2VIZWFkZXJzLFxuICBwYXJzZVJhbmdlSGVhZGVyLFxuICB3cmFwUmVxdWVzdEJvZHlcbn0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyIChyZXRyeUFmdGVyKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBEYXRlLm5vdygpXG4gIHJldHVybiBuZXcgRGF0ZShyZXRyeUFmdGVyKS5nZXRUaW1lKCkgLSBjdXJyZW50XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aCAoaGVhZGVycywgcmFuZ2UsIHN0YXR1c0NvZGUsIHJldHJ5Q291bnQpIHtcbiAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShyYW5nZS5zdGFydCkgfHwgIU51bWJlci5pc0Zpbml0ZShyYW5nZS5lbmQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aCA9IE51bWJlcihjb250ZW50TGVuZ3RoKVxuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IHJhbmdlLmVuZCAtIHJhbmdlLnN0YXJ0ICsgMVxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShsZW5ndGgpIHx8IGxlbmd0aCAhPT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LUxlbmd0aCBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBkYXRhOiB7IGNvdW50OiByZXRyeUNvdW50IH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY2xhc3MgUmV0cnlIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXJzKSB7XG4gICAgY29uc3QgeyByZXRyeU9wdGlvbnMsIC4uLmRpc3BhdGNoT3B0cyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIFJldHJ5IHNjb3BlZFxuICAgICAgcmV0cnk6IHJldHJ5Rm4sXG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIG1pblRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgLy8gUmVzcG9uc2Ugc2NvcGVkXG4gICAgICBtZXRob2RzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIHJldHJ5QWZ0ZXIsXG4gICAgICBzdGF0dXNDb2Rlc1xuICAgIH0gPSByZXRyeU9wdGlvbnMgPz8ge31cblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBoYW5kbGVycy5kaXNwYXRjaFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJzLmhhbmRsZXJcbiAgICB0aGlzLm9wdHMgPSB7IC4uLmRpc3BhdGNoT3B0cywgYm9keTogd3JhcFJlcXVlc3RCb2R5KG9wdHMuYm9keSkgfVxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcbiAgICB0aGlzLnJldHJ5T3B0cyA9IHtcbiAgICAgIHJldHJ5OiByZXRyeUZuID8/IFJldHJ5SGFuZGxlcltrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSxcbiAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXIgPz8gdHJ1ZSxcbiAgICAgIG1heFRpbWVvdXQ6IG1heFRpbWVvdXQgPz8gMzAgKiAxMDAwLCAvLyAzMHMsXG4gICAgICBtaW5UaW1lb3V0OiBtaW5UaW1lb3V0ID8/IDUwMCwgLy8gLjVzXG4gICAgICB0aW1lb3V0RmFjdG9yOiB0aW1lb3V0RmFjdG9yID8/IDIsXG4gICAgICBtYXhSZXRyaWVzOiBtYXhSZXRyaWVzID8/IDUsXG4gICAgICAvLyBXaGF0IGVycm9ycyB3ZSBzaG91bGQgcmV0cnlcbiAgICAgIG1ldGhvZHM6IG1ldGhvZHMgPz8gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BVVCcsICdERUxFVEUnLCAnVFJBQ0UnXSxcbiAgICAgIC8vIEluZGljYXRlcyB3aGljaCBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIHN0YXR1c0NvZGVzOiBzdGF0dXNDb2RlcyA/PyBbNTAwLCA1MDIsIDUwMywgNTA0LCA0MjldLFxuICAgICAgLy8gTGlzdCBvZiBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIGVycm9yQ29kZXM6IGVycm9yQ29kZXMgPz8gW1xuICAgICAgICAnRUNPTk5SRVNFVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VORVRET1dOJyxcbiAgICAgICAgJ0VORVRVTlJFQUNIJyxcbiAgICAgICAgJ0VIT1NURE9XTicsXG4gICAgICAgICdFSE9TVFVOUkVBQ0gnLFxuICAgICAgICAnRVBJUEUnLFxuICAgICAgICAnVU5EX0VSUl9TT0NLRVQnXG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWluVGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBjb25zdCB7IGNvdW50ZXIgfSA9IHN0YXRlXG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoY29kZSAmJiBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmICFlcnJvckNvZGVzLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBtZXRob2QgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBtZXRob2QgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWV0aG9kcykgJiYgIW1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2Ygc3RhdHVzIGNvZGUgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBzdGF0dXMgY29kZSBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoXG4gICAgICBzdGF0dXNDb2RlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdHVzQ29kZXMpICYmXG4gICAgICAhc3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgcmV0cmllc1xuICAgIGlmIChjb3VudGVyID4gbWF4UmV0cmllcykge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzPy5bJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlci5pc05hTihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA/IGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgOiByZXRyeUFmdGVySGVhZGVyICogMWUzIC8vIFJldHJ5LUFmdGVyIGlzIGluIHNlY29uZHNcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVRpbWVvdXQgPVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA+IDBcbiAgICAgICAgPyBNYXRoLm1pbihyZXRyeUFmdGVySGVhZGVyLCBtYXhUaW1lb3V0KVxuICAgICAgICA6IE1hdGgubWluKG1pblRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIChjb3VudGVyIC0gMSksIG1heFRpbWVvdXQpXG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IGNiKG51bGwpLCByZXRyeVRpbWVvdXQpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBwYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgIGlmICh0aGlzLnJldHJ5T3B0cy5zdGF0dXNDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrcG9pbnQgZm9yIHJlc3VtZSBmcm9tIHdoZXJlIHdlIGxlZnQgaXRcbiAgICBpZiAodGhpcy5yZXN1bWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAgIC8vIE9ubHkgUGFydGlhbCBDb250ZW50IDIwNiBzdXBwb3NlZCB0byBwcm92aWRlIENvbnRlbnQtUmFuZ2UsXG4gICAgICAvLyBhbnkgb3RoZXIgc3RhdHVzIGNvZGUgdGhhdCBwYXJ0aWFsbHkgY29uc3VtZWQgdGhlIHBheWxvYWRcbiAgICAgIC8vIHNob3VsZCBub3QgYmUgcmV0cnkgYmVjYXVzZSBpdCB3b3VsZCByZXN1bHQgaW4gZG93bnN0cmVhbVxuICAgICAgLy8gd3JvbmdseSBjb25jYXRhbmV0ZSBtdWx0aXBsZSByZXNwb25zZXMuXG4gICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjA2ICYmICh0aGlzLnN0YXJ0ID4gMCB8fCBzdGF0dXNDb2RlICE9PSAyMDApKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmFuZ2UgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCB3YXMgcGFydGlhbGx5IGNvbnN1bWVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IHsgY291bnQ6IHRoaXMucmV0cnlDb3VudCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG4gICAgICAvLyBJZiBubyBjb250ZW50IHJhbmdlXG4gICAgICBpZiAoIWNvbnRlbnRSYW5nZSkge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignQ29udGVudC1SYW5nZSBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggYSB3ZWFrIGV0YWcgY2hlY2tcbiAgICAgIGlmICh0aGlzLmV0YWcgIT0gbnVsbCAmJiB0aGlzLmV0YWcgIT09IGhlYWRlcnMuZXRhZykge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignRVRhZyBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhFcnJvciA9IHZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aChoZWFkZXJzLCBjb250ZW50UmFuZ2UsIHN0YXR1c0NvZGUsIHRoaXMucmV0cnlDb3VudClcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmFib3J0KGNvbnRlbnRMZW5ndGhFcnJvcilcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgLSAxIH0gPSBjb250ZW50UmFuZ2VcblxuICAgICAgYXNzZXJ0KHRoaXMuc3RhcnQgPT09IHN0YXJ0LCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG4gICAgICBhc3NlcnQodGhpcy5lbmQgPT0gbnVsbCB8fCB0aGlzLmVuZCA9PT0gZW5kLCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA2KSB7XG4gICAgICAgIC8vIEZpcnN0IHRpbWUgd2UgcmVjZWl2ZSAyMDZcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcblxuICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgICAgICByZXN1bWUsXG4gICAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aEVycm9yID0gdmFsaWRhdGVQYXJ0aWFsUmVzcG9uc2VDb250ZW50TGVuZ3RoKGhlYWRlcnMsIHJhbmdlLCBzdGF0dXNDb2RlLCB0aGlzLnJldHJ5Q291bnQpXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoY29udGVudExlbmd0aEVycm9yKVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSAtIDEgfSA9IHJhbmdlXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCksXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KGVuZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShlbmQpLCAnaW52YWxpZCBjb250ZW50LWxlbmd0aCcpXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSAtIDEgOiBudWxsXG4gICAgICB9XG5cbiAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUodGhpcy5zdGFydCkpXG4gICAgICBhc3NlcnQoXG4gICAgICAgIHRoaXMuZW5kID09IG51bGwgfHwgTnVtYmVyLmlzRmluaXRlKHRoaXMuZW5kKSxcbiAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICApXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICB0aGlzLmV0YWcgPSBoZWFkZXJzLmV0YWcgIT0gbnVsbCA/IGhlYWRlcnMuZXRhZyA6IG51bGxcblxuICAgICAgLy8gV2VhayBldGFncyBhcmUgbm90IHVzZWZ1bCBmb3IgY29tcGFyaXNvbiBub3IgY2FjaGVcbiAgICAgIC8vIGZvciBpbnN0YW5jZSBub3Qgc2FmZSB0byBhc3N1bWUgaWYgdGhlIHJlc3BvbnNlIGlzIGJ5dGUtcGVyLWJ5dGVcbiAgICAgIC8vIGVxdWFsXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnLnN0YXJ0c1dpdGgoJ1cvJykpIHtcbiAgICAgICAgdGhpcy5ldGFnID0gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgIH0pXG5cbiAgICB0aGlzLmFib3J0KGVycilcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuc3RhcnQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHJhd1RyYWlsZXJzKSB7XG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZShyYXdUcmFpbGVycylcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGlmICh0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIC8vIFdlIHJlY29uY2lsZSBpbiBjYXNlIG9mIGEgbWl4IGJldHdlZW4gbmV0d29yayBlcnJvcnNcbiAgICAvLyBhbmQgc2VydmVyIGVycm9yIHJlc3BvbnNlXG4gICAgaWYgKHRoaXMucmV0cnlDb3VudCAtIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQgPiAwKSB7XG4gICAgICAvLyBXZSBjb3VudCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsYXN0IGNoZWNrcG9pbnQgYW5kIHRoZSBjdXJyZW50IHJldHJ5IGNvdW50XG4gICAgICB0aGlzLnJldHJ5Q291bnQgPVxuICAgICAgICB0aGlzLnJldHJ5Q291bnRDaGVja3BvaW50ICtcbiAgICAgICAgKHRoaXMucmV0cnlDb3VudCAtIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCB9LFxuICAgICAgICBvcHRzOiB7IHJldHJ5T3B0aW9uczogdGhpcy5yZXRyeU9wdHMsIC4uLnRoaXMub3B0cyB9XG4gICAgICB9LFxuICAgICAgb25SZXRyeS5iaW5kKHRoaXMpXG4gICAgKVxuXG4gICAgZnVuY3Rpb24gb25SZXRyeSAoZXJyKSB7XG4gICAgICBpZiAoZXJyICE9IG51bGwgfHwgdGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCAhPT0gMCkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0geyByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gIH1cblxuICAgICAgICAvLyBXZWFrIGV0YWcgY2hlY2sgLSB3ZWFrIGV0YWdzIHdpbGwgbWFrZSBjb21wYXJpc29uIGFsZ29yaXRobXMgbmV2ZXIgbWF0Y2hcbiAgICAgICAgaWYgKHRoaXMuZXRhZyAhPSBudWxsKSB7XG4gICAgICAgICAgaGVhZGVyc1snaWYtbWF0Y2gnXSA9IHRoaXMuZXRhZ1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRzID0ge1xuICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdHMuaGVhZGVycyxcbiAgICAgICAgICAgIC4uLmhlYWRlcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50Q2hlY2twb2ludCA9IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmV0cnlIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXInKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9yZXRyeS1oYW5kbGVyJylcblxuY2xhc3MgUmV0cnlBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICAjYWdlbnQgPSBudWxsXG4gICNvcHRpb25zID0gbnVsbFxuICBjb25zdHJ1Y3RvciAoYWdlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKG9wdGlvbnMpXG4gICAgdGhpcy4jYWdlbnQgPSBhZ2VudFxuICAgIHRoaXMuI29wdGlvbnMgPSBvcHRpb25zXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHJldHJ5ID0gbmV3IFJldHJ5SGFuZGxlcih7XG4gICAgICAuLi5vcHRzLFxuICAgICAgcmV0cnlPcHRpb25zOiB0aGlzLiNvcHRpb25zXG4gICAgfSwge1xuICAgICAgZGlzcGF0Y2g6IHRoaXMuI2FnZW50LmRpc3BhdGNoLmJpbmQodGhpcy4jYWdlbnQpLFxuICAgICAgaGFuZGxlclxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXMuI2FnZW50LmRpc3BhdGNoKG9wdHMsIHJldHJ5KVxuICB9XG5cbiAgY2xvc2UgKCkge1xuICAgIHJldHVybiB0aGlzLiNhZ2VudC5jbG9zZSgpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICByZXR1cm4gdGhpcy4jYWdlbnQuZGVzdHJveSgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUFnZW50XG4iLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC85MDdcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yLCBBYm9ydEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jb25zdCBrQ29uc3VtZSA9IFN5bWJvbCgna0NvbnN1bWUnKVxuY29uc3Qga1JlYWRpbmcgPSBTeW1ib2woJ2tSZWFkaW5nJylcbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdrQm9keScpXG5jb25zdCBrQWJvcnQgPSBTeW1ib2woJ2tBYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5jb25zdCBrQ29udGVudExlbmd0aCA9IFN5bWJvbCgna0NvbnRlbnRMZW5ndGgnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY2xhc3MgQm9keVJlYWRhYmxlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHJlc3VtZSxcbiAgICBhYm9ydCxcbiAgICBjb250ZW50VHlwZSA9ICcnLFxuICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgaGlnaFdhdGVyTWFyayA9IDY0ICogMTAyNCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICB9KSB7XG4gICAgc3VwZXIoe1xuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiByZXN1bWUsXG4gICAgICBoaWdoV2F0ZXJNYXJrXG4gICAgfSlcblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSBmYWxzZVxuXG4gICAgdGhpc1trQWJvcnRdID0gYWJvcnRcbiAgICB0aGlzW2tDb25zdW1lXSA9IG51bGxcbiAgICB0aGlzW2tCb2R5XSA9IG51bGxcbiAgICB0aGlzW2tDb250ZW50VHlwZV0gPSBjb250ZW50VHlwZVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gY29udGVudExlbmd0aFxuXG4gICAgLy8gSXMgc3RyZWFtIGJlaW5nIGNvbnN1bWVkIHRocm91Z2ggUmVhZGFibGUgQVBJP1xuICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHRoYXQgd2UgYXZvaWQgY2hlY2tpbmdcbiAgICAvLyBmb3IgJ2RhdGEnIGFuZCAncmVhZGFibGUnIGxpc3RlbmVycyBpbiB0aGUgaG90IHBhdGhcbiAgICAvLyBpbnNpZGUgcHVzaCgpLlxuICAgIHRoaXNba1JlYWRpbmddID0gZmFsc2VcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzW2tBYm9ydF0oKVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5kZXN0cm95KGVycilcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgTm9kZSBcImJ1Z1wiLiBJZiB0aGUgc3RyZWFtIGlzIGRlc3Ryb3llZCBpbiBzYW1lXG4gICAgLy8gdGljayBhcyBpdCBpcyBjcmVhdGVkLCB0aGVuIGEgdXNlciB3aG8gaXMgd2FpdGluZyBmb3IgYVxuICAgIC8vIHByb21pc2UgKGkuZSBtaWNybyB0aWNrKSBmb3IgaW5zdGFsbGluZyBhICdlcnJvcicgbGlzdGVuZXIgd2lsbFxuICAgIC8vIG5ldmVyIGdldCBhIGNoYW5jZSBhbmQgd2lsbCBhbHdheXMgZW5jb3VudGVyIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgaWYgKCF0aGlzW2tSZWFkaW5nXSkge1xuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uIChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgYWRkTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvZmYgKGV2LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCAuLi5hcmdzKVxuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IChcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwIHx8XG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgcHVzaCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trQ29uc3VtZV0gJiYgY2h1bmsgIT09IG51bGwpIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ieXRlc1xuICBhc3luYyBieXRlcyAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2J5dGVzJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBhc3luYyBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gTnVtYmVyLmlzRmluaXRlKG9wdHM/LmxpbWl0KSA/IG9wdHMubGltaXQgOiAxMjggKiAxMDI0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cz8uc2lnbmFsXG5cbiAgICBpZiAoc2lnbmFsICE9IG51bGwgJiYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICB9XG5cbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKClcblxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlRW1pdHRlZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXNba0NvbnRlbnRMZW5ndGhdID4gbGltaXQpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShzaWduYWwucmVhc29uID8/IG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICB9XG4gICAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydClcblxuICAgICAgdGhpc1xuICAgICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KVxuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uID8/IG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZXJyb3InLCBub29wKVxuICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICBsaW1pdCAtPSBjaHVuay5sZW5ndGhcbiAgICAgICAgICBpZiAobGltaXQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXN1bWUoKVxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tbG9ja2VkXG5mdW5jdGlvbiBpc0xvY2tlZCAoc2VsZikge1xuICAvLyBDb25zdW1lIGlzIGFuIGltcGxpY2l0IGxvY2suXG4gIHJldHVybiAoc2VsZltrQm9keV0gJiYgc2VsZltrQm9keV0ubG9ja2VkID09PSB0cnVlKSB8fCBzZWxmW2tDb25zdW1lXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gaXNVbnVzYWJsZSAoc2VsZikge1xuICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZChzZWxmKSB8fCBpc0xvY2tlZChzZWxmKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lIChzdHJlYW0sIHR5cGUpIHtcbiAgYXNzZXJ0KCFzdHJlYW1ba0NvbnN1bWVdKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGlzVW51c2FibGUoc3RyZWFtKSkge1xuICAgICAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoclN0YXRlLmRlc3Ryb3llZCAmJiByU3RhdGUuY2xvc2VFbWl0dGVkID09PSBmYWxzZSkge1xuICAgICAgICBzdHJlYW1cbiAgICAgICAgICAub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgICAub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJykpXG4gICAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChyU3RhdGUuZXJyb3JlZCA/PyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHN0cmVhbVtrQ29uc3VtZV0gPSB7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgIGJvZHk6IFtdXG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1cbiAgICAgICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICBjb25zdW1lU3RhcnQoc3RyZWFtW2tDb25zdW1lXSlcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgaWYgKHN0YXRlLmJ1ZmZlckluZGV4KSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzdGF0ZS5idWZmZXJJbmRleFxuICAgIGNvbnN0IGVuZCA9IHN0YXRlLmJ1ZmZlci5sZW5ndGhcbiAgICBmb3IgKGxldCBuID0gc3RhcnQ7IG4gPCBlbmQ7IG4rKykge1xuICAgICAgY29uc3VtZVB1c2goY29uc3VtZSwgc3RhdGUuYnVmZmVyW25dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIHN0YXRlLmJ1ZmZlcikge1xuICAgICAgY29uc3VtZVB1c2goY29uc3VtZSwgY2h1bmspXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUuc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICAgIH0pXG4gIH1cblxuICBjb25zdW1lLnN0cmVhbS5yZXN1bWUoKVxuXG4gIHdoaWxlIChjb25zdW1lLnN0cmVhbS5yZWFkKCkgIT0gbnVsbCkge1xuICAgIC8vIExvb3BcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyW119IGNodW5rc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5mdW5jdGlvbiBjaHVua3NEZWNvZGUgKGNodW5rcywgbGVuZ3RoKSB7XG4gIGlmIChjaHVua3MubGVuZ3RoID09PSAwIHx8IGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IGNodW5rcy5sZW5ndGggPT09IDEgPyBjaHVua3NbMF0gOiBCdWZmZXIuY29uY2F0KGNodW5rcywgbGVuZ3RoKVxuICBjb25zdCBidWZmZXJMZW5ndGggPSBidWZmZXIubGVuZ3RoXG5cbiAgLy8gU2tpcCBCT00uXG4gIGNvbnN0IHN0YXJ0ID1cbiAgICBidWZmZXJMZW5ndGggPiAyICYmXG4gICAgYnVmZmVyWzBdID09PSAweGVmICYmXG4gICAgYnVmZmVyWzFdID09PSAweGJiICYmXG4gICAgYnVmZmVyWzJdID09PSAweGJmXG4gICAgICA/IDNcbiAgICAgIDogMFxuICByZXR1cm4gYnVmZmVyLnV0ZjhTbGljZShzdGFydCwgYnVmZmVyTGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyW119IGNodW5rc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGNodW5rc0NvbmNhdCAoY2h1bmtzLCBsZW5ndGgpIHtcbiAgaWYgKGNodW5rcy5sZW5ndGggPT09IDAgfHwgbGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApXG4gIH1cbiAgaWYgKGNodW5rcy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyBmYXN0LXBhdGhcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY2h1bmtzWzBdKVxuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cobGVuZ3RoKS5idWZmZXIpXG5cbiAgbGV0IG9mZnNldCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXVxuICAgIGJ1ZmZlci5zZXQoY2h1bmssIG9mZnNldClcbiAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVFbmQgKGNvbnN1bWUpIHtcbiAgY29uc3QgeyB0eXBlLCBib2R5LCByZXNvbHZlLCBzdHJlYW0sIGxlbmd0aCB9ID0gY29uc3VtZVxuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcmVzb2x2ZShjaHVua3NEZWNvZGUoYm9keSwgbGVuZ3RoKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdqc29uJykge1xuICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGNodW5rc0RlY29kZShib2R5LCBsZW5ndGgpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgIHJlc29sdmUoY2h1bmtzQ29uY2F0KGJvZHksIGxlbmd0aCkuYnVmZmVyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICByZXNvbHZlKG5ldyBCbG9iKGJvZHksIHsgdHlwZTogc3RyZWFtW2tDb250ZW50VHlwZV0gfSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYnl0ZXMnKSB7XG4gICAgICByZXNvbHZlKGNodW5rc0NvbmNhdChib2R5LCBsZW5ndGgpKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVhZGFibGU6IEJvZHlSZWFkYWJsZSwgY2h1bmtzRGVjb2RlIH1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7XG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCB7IGNodW5rc0RlY29kZSB9ID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCBDSFVOS19MSU1JVCA9IDEyOCAqIDEwMjRcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrICh7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9KSB7XG4gIGFzc2VydChib2R5KVxuXG4gIGxldCBjaHVua3MgPSBbXVxuICBsZXQgbGVuZ3RoID0gMFxuXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgIGxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgICAgIGlmIChsZW5ndGggPiBDSFVOS19MSU1JVCkge1xuICAgICAgICBjaHVua3MgPSBbXVxuICAgICAgICBsZW5ndGggPSAwXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBjaHVua3MgPSBbXVxuICAgIGxlbmd0aCA9IDBcbiAgICAvLyBEbyBub3RoaW5nLi4uLlxuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gXG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWxlbmd0aCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSkpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzdGFja1RyYWNlTGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXRcbiAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gMFxuICBsZXQgcGF5bG9hZFxuXG4gIHRyeSB7XG4gICAgaWYgKGlzQ29udGVudFR5cGVBcHBsaWNhdGlvbkpzb24oY29udGVudFR5cGUpKSB7XG4gICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShjaHVua3NEZWNvZGUoY2h1bmtzLCBsZW5ndGgpKVxuICAgIH0gZWxzZSBpZiAoaXNDb250ZW50VHlwZVRleHQoY29udGVudFR5cGUpKSB7XG4gICAgICBwYXlsb2FkID0gY2h1bmtzRGVjb2RlKGNodW5rcywgbGVuZ3RoKVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gcHJvY2VzcyBpbiBhIGNhbGxiYWNrIHRvIGF2b2lkIHRocm93aW5nIGluIHRoZSBtaWNyb3Rhc2sgcXVldWVcbiAgfSBmaW5hbGx5IHtcbiAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBzdGFja1RyYWNlTGltaXRcbiAgfVxuICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpKVxufVxuXG5jb25zdCBpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uID0gKGNvbnRlbnRUeXBlKSA9PiB7XG4gIHJldHVybiAoXG4gICAgY29udGVudFR5cGUubGVuZ3RoID4gMTUgJiZcbiAgICBjb250ZW50VHlwZVsxMV0gPT09ICcvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzBdID09PSAnYScgJiZcbiAgICBjb250ZW50VHlwZVsxXSA9PT0gJ3AnICYmXG4gICAgY29udGVudFR5cGVbMl0gPT09ICdwJyAmJlxuICAgIGNvbnRlbnRUeXBlWzNdID09PSAnbCcgJiZcbiAgICBjb250ZW50VHlwZVs0XSA9PT0gJ2knICYmXG4gICAgY29udGVudFR5cGVbNV0gPT09ICdjJyAmJlxuICAgIGNvbnRlbnRUeXBlWzZdID09PSAnYScgJiZcbiAgICBjb250ZW50VHlwZVs3XSA9PT0gJ3QnICYmXG4gICAgY29udGVudFR5cGVbOF0gPT09ICdpJyAmJlxuICAgIGNvbnRlbnRUeXBlWzldID09PSAnbycgJiZcbiAgICBjb250ZW50VHlwZVsxMF0gPT09ICduJyAmJlxuICAgIGNvbnRlbnRUeXBlWzEyXSA9PT0gJ2onICYmXG4gICAgY29udGVudFR5cGVbMTNdID09PSAncycgJiZcbiAgICBjb250ZW50VHlwZVsxNF0gPT09ICdvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzE1XSA9PT0gJ24nXG4gIClcbn1cblxuY29uc3QgaXNDb250ZW50VHlwZVRleHQgPSAoY29udGVudFR5cGUpID0+IHtcbiAgcmV0dXJuIChcbiAgICBjb250ZW50VHlwZS5sZW5ndGggPiA0ICYmXG4gICAgY29udGVudFR5cGVbNF0gPT09ICcvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzBdID09PSAndCcgJiZcbiAgICBjb250ZW50VHlwZVsxXSA9PT0gJ2UnICYmXG4gICAgY29udGVudFR5cGVbMl0gPT09ICd4JyAmJlxuICAgIGNvbnRlbnRUeXBlWzNdID09PSAndCdcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLFxuICBpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uLFxuICBpc0NvbnRlbnRUeXBlVGV4dFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ25vZGU6YXN5bmNfaG9va3MnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMudHJhaWxlcnMgPSB7fVxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3JcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5zaWduYWwgPSBzaWduYWxcbiAgICB0aGlzLnJlYXNvbiA9IG51bGxcbiAgICB0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIgPSBudWxsXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNpZ25hbCkge1xuICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLnNpZ25hbC5yZWFzb24gPz8gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyID0gdXRpbC5hZGRBYm9ydExpc3RlbmVyKHRoaXMuc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLnNpZ25hbC5yZWFzb24gPz8gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgICAgIGlmICh0aGlzLnJlcykge1xuICAgICAgICAgICAgdXRpbC5kZXN0cm95KHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKSwgdGhpcy5yZWFzb24pXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICB0aGlzLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzPy5vZmYoJ2Nsb3NlJywgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKClcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lciA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcGFyc2VkSGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgIGNvbnN0IHJlcyA9IG5ldyBSZWFkYWJsZSh7XG4gICAgICByZXN1bWUsXG4gICAgICBhYm9ydCxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgY29udGVudExlbmd0aDogdGhpcy5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoXG4gICAgICAgID8gTnVtYmVyKGNvbnRlbnRMZW5ndGgpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcikge1xuICAgICAgcmVzLm9uKCdjbG9zZScsIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcilcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIHRoaXMucmVzID0gcmVzXG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB0cmFpbGVyczogdGhpcy50cmFpbGVycyxcbiAgICAgICAgICBvcGFxdWUsXG4gICAgICAgICAgYm9keTogcmVzLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzLCB0aGlzLnRyYWlsZXJzKVxuICAgIHRoaXMucmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgYm9keSwgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHF1ZXVlTWljcm90YXNrP1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAvLyBFbnN1cmUgYWxsIHF1ZXVlZCBoYW5kbGVycyBhcmUgaW52b2tlZCBiZWZvcmUgZGVzdHJveWluZyByZXMuXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcikge1xuICAgICAgcmVzPy5vZmYoJ2Nsb3NlJywgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKVxuICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKClcbiAgICAgIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lciA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBSZXF1ZXN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwgImNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCBrTGlzdGVuZXIgPSBTeW1ib2woJ2tMaXN0ZW5lcicpXG5jb25zdCBrU2lnbmFsID0gU3ltYm9sKCdrU2lnbmFsJylcblxuZnVuY3Rpb24gYWJvcnQgKHNlbGYpIHtcbiAgaWYgKHNlbGYuYWJvcnQpIHtcbiAgICBzZWxmLmFib3J0KHNlbGZba1NpZ25hbF0/LnJlYXNvbilcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnJlYXNvbiA9IHNlbGZba1NpZ25hbF0/LnJlYXNvbiA/PyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gIH1cbiAgcmVtb3ZlU2lnbmFsKHNlbGYpXG59XG5cbmZ1bmN0aW9uIGFkZFNpZ25hbCAoc2VsZiwgc2lnbmFsKSB7XG4gIHNlbGYucmVhc29uID0gbnVsbFxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcblxuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgYWJvcnQoc2VsZilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBzaWduYWxcbiAgc2VsZltrTGlzdGVuZXJdID0gKCkgPT4ge1xuICAgIGFib3J0KHNlbGYpXG4gIH1cblxuICBhZGRBYm9ydExpc3RlbmVyKHNlbGZba1NpZ25hbF0sIHNlbGZba0xpc3RlbmVyXSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2lnbmFsIChzZWxmKSB7XG4gIGlmICghc2VsZltrU2lnbmFsXSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCdyZW1vdmVFdmVudExpc3RlbmVyJyBpbiBzZWxmW2tTaWduYWxdKSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfSBlbHNlIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFkZFNpZ25hbCxcbiAgcmVtb3ZlU2lnbmFsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgZmluaXNoZWQsIFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFN0cmVhbUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBmYWN0b3J5JylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1NUUkVBTScpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeVxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMudHJhaWxlcnMgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciB8fCBmYWxzZVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBmYWN0b3J5LCBvcGFxdWUsIGNvbnRleHQsIGNhbGxiYWNrLCByZXNwb25zZUhlYWRlcnMgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGxldCByZXNcblxuICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICAgIHJlcyA9IG5ldyBQYXNzVGhyb3VnaCgpXG5cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFjdG9yeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoZmFjdG9yeSwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgIXJlcyB8fFxuICAgICAgICB0eXBlb2YgcmVzLndyaXRlICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMuZW5kICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMub24gIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFdyaXRhYmxlJylcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogQXZvaWQgZmluaXNoZWQuIEl0IHJlZ2lzdGVycyBhbiB1bm5lY2Vzc2FyeSBhbW91bnQgb2YgbGlzdGVuZXJzLlxuICAgICAgZmluaXNoZWQocmVzLCB7IHJlYWRhYmxlOiBmYWxzZSB9LCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHJlcywgb3BhcXVlLCB0cmFpbGVycywgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgICAgaWYgKGVyciB8fCAhcmVzLnJlYWRhYmxlKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciB8fCBudWxsLCB7IG9wYXF1ZSwgdHJhaWxlcnMgfSlcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJlcy5vbignZHJhaW4nLCByZXN1bWUpXG5cbiAgICB0aGlzLnJlcyA9IHJlc1xuXG4gICAgY29uc3QgbmVlZERyYWluID0gcmVzLndyaXRhYmxlTmVlZERyYWluICE9PSB1bmRlZmluZWRcbiAgICAgID8gcmVzLndyaXRhYmxlTmVlZERyYWluXG4gICAgICA6IHJlcy5fd3JpdGFibGVTdGF0ZT8ubmVlZERyYWluXG5cbiAgICByZXR1cm4gbmVlZERyYWluICE9PSB0cnVlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJldHVybiByZXMgPyByZXMud3JpdGUoY2h1bmspIDogdHJ1ZVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy50cmFpbGVycyA9IHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzKVxuXG4gICAgcmVzLmVuZCgpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIG9wYXF1ZSwgYm9keSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyZWFtIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0uY2FsbCh0aGlzLCBvcHRzLCBmYWN0b3J5LCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgU3RyZWFtSGFuZGxlcihvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgUGFzc1Rocm91Z2hcbn0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdub2RlOmFzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuY29uc3Qga1Jlc3VtZSA9IFN5bWJvbCgncmVzdW1lJylcblxuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0IGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuXG4gICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICBjb25zdCB7IFtrUmVzdW1lXTogcmVzdW1lIH0gPSB0aGlzXG5cbiAgICBpZiAocmVzdW1lKSB7XG4gICAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICAgICAgcmVzdW1lKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3JlYWQoKVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lUmVzcG9uc2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChyZXN1bWUpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG4gICAgdGhpc1trUmVzdW1lXSA9IHJlc3VtZVxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIHRoaXNba1Jlc3VtZV0oKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoYW5kbGVyJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfUElQRUxJTkUnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuXG4gICAgdGhpcy5yZXEgPSBuZXcgUGlwZWxpbmVSZXF1ZXN0KCkub24oJ2Vycm9yJywgdXRpbC5ub3ApXG5cbiAgICB0aGlzLnJldCA9IG5ldyBEdXBsZXgoe1xuICAgICAgcmVhZGFibGVPYmplY3RNb2RlOiBvcHRzLm9iamVjdE1vZGUsXG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKGJvZHk/LnJlc3VtZSkge1xuICAgICAgICAgIGJvZHkucmVzdW1lKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHdyaXRlOiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChyZXEucHVzaChjaHVuaywgZW5jb2RpbmcpIHx8IHJlcS5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxW2tSZXN1bWVdID0gY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IChlcnIsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSwgcmVxLCByZXMsIHJldCwgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIWVyciAmJiAhcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWJvcnQgJiYgZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG5cbiAgICAgICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfVxuICAgIH0pLm9uKCdwcmVmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAvLyBOb2RlIDwgMTUgZG9lcyBub3QgY2FsbCBfZmluYWwgaW4gc2FtZSB0aWNrLlxuICAgICAgcmVxLnB1c2gobnVsbClcbiAgICB9KVxuXG4gICAgdGhpcy5yZXMgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgcmV0LCByZXMgfSA9IHRoaXNcblxuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQoIXJlcywgJ3BpcGVsaW5lIGNhbm5vdCBiZSByZXRyaWVkJylcbiAgICBhc3NlcnQoIXJldC5kZXN0cm95ZWQpXG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSkge1xuICAgIGNvbnN0IHsgb3BhcXVlLCBoYW5kbGVyLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSBuZXcgUGlwZWxpbmVSZXNwb25zZShyZXN1bWUpXG5cbiAgICBsZXQgYm9keVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgYm9keSA9IHRoaXMucnVuSW5Bc3luY1Njb3BlKGhhbmRsZXIsIG51bGwsIHtcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgb3BhcXVlLFxuICAgICAgICBib2R5OiB0aGlzLnJlcyxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5Lm9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFJlYWRhYmxlJylcbiAgICB9XG5cbiAgICBib2R5XG4gICAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQsIGJvZHkgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5wdXNoKGNodW5rKSAmJiBib2R5LnBhdXNlKSB7XG4gICAgICAgICAgYm9keS5wYXVzZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgICAgIH0pXG4gICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICByZXQucHVzaChudWxsKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kZWQpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcGlwZWxpbmUgKG9wdHMsIGhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaXBlbGluZUhhbmRsZXIgPSBuZXcgUGlwZWxpbmVIYW5kbGVyKG9wdHMsIGhhbmRsZXIpXG4gICAgdGhpcy5kaXNwYXRjaCh7IC4uLm9wdHMsIGJvZHk6IHBpcGVsaW5lSGFuZGxlci5yZXEgfSwgcGlwZWxpbmVIYW5kbGVyKVxuICAgIHJldHVybiBwaXBlbGluZUhhbmRsZXIucmV0XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBuZXcgUGFzc1Rocm91Z2goKS5kZXN0cm95KGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ25vZGU6YXN5bmNfaG9va3MnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5cbmNsYXNzIFVwZ3JhZGVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfVVBHUkFERScpXG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGFib3J0KHRoaXMucmVhc29uKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuY2FsbGJhY2spXG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIHVwZ3JhZGUnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA9PT0gMTAxKVxuXG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGUgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwZ3JhZGUuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBncmFkZUhhbmRsZXIgPSBuZXcgVXBncmFkZUhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgIHVwZ3JhZGU6IG9wdHMucHJvdG9jb2wgfHwgJ1dlYnNvY2tldCdcbiAgICB9LCB1cGdyYWRlSGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHM/Lm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIENvbm5lY3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfQ09OTkVDVCcpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgY29ubmVjdCcsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuXG4gICAgbGV0IGhlYWRlcnMgPSByYXdIZWFkZXJzXG4gICAgLy8gSW5kaWNhdGVzIGlzIGFuIEhUVFAyU2Vzc2lvblxuICAgIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgfVxuXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29ubmVjdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29ubmVjdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25uZWN0SGFuZGxlciA9IG5ldyBDb25uZWN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgbWV0aG9kOiAnQ09OTkVDVCcgfSwgY29ubmVjdEhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWlyZSgnLi9hcGktcmVxdWVzdCcpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL2FwaS1zdHJlYW0nKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSByZXF1aXJlKCcuL2FwaS1waXBlbGluZScpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gcmVxdWlyZSgnLi9hcGktdXBncmFkZScpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gcmVxdWlyZSgnLi9hcGktY29ubmVjdCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga01vY2tOb3RNYXRjaGVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX01PQ0tfRVJSX01PQ0tfTk9UX01BVENIRUQnKVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGRvZXMgbm90IG1hdGNoIGFueSByZWdpc3RlcmVkIG1vY2sgZGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja05vdE1hdGNoZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE1vY2tOb3RNYXRjaGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01vY2tOb3RNYXRjaGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIHJlcXVlc3QgZG9lcyBub3QgbWF0Y2ggYW55IHJlZ2lzdGVyZWQgbW9jayBkaXNwYXRjaGVzJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfTU9DS19FUlJfTU9DS19OT1RfTUFUQ0hFRCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba01vY2tOb3RNYXRjaGVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba01vY2tOb3RNYXRjaGVkRXJyb3JdID0gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTW9ja05vdE1hdGNoZWRFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNb2NrTm90TWF0Y2hlZEVycm9yIH0gPSByZXF1aXJlKCcuL21vY2stZXJyb3JzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrT3JpZ2luLFxuICBrR2V0TmV0Q29ubmVjdFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgYnVpbGRVUkwgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHtcbiAgdHlwZXM6IHtcbiAgICBpc1Byb21pc2VcbiAgfVxufSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmZ1bmN0aW9uIG1hdGNoVmFsdWUgKG1hdGNoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBtYXRjaCA9PT0gdmFsdWVcbiAgfVxuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gbWF0Y2gudGVzdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIG1hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1hdGNoKHZhbHVlKSA9PT0gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBsb3dlckNhc2VFbnRyaWVzIChoZWFkZXJzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoaGVhZGVycykubWFwKChbaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4gW2hlYWRlck5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSwgaGVhZGVyVmFsdWVdXG4gICAgfSlcbiAgKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9pbmRleCcpLkhlYWRlcnN8c3RyaW5nW118UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJCeU5hbWUgKGhlYWRlcnMsIGtleSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKGhlYWRlcnNbaV0udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0ga2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9IGVsc2UgaWYgKHR5cGVvZiBoZWFkZXJzLmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBoZWFkZXJzLmdldChrZXkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycylba2V5LnRvTG9jYWxlTG93ZXJDYXNlKCldXG4gIH1cbn1cblxuLyoqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlcnMgKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVyc0Zyb21BcnJheSAoaGVhZGVycykgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICBjb25zdCBjbG9uZSA9IGhlYWRlcnMuc2xpY2UoKVxuICBjb25zdCBlbnRyaWVzID0gW11cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNsb25lLmxlbmd0aDsgaW5kZXggKz0gMikge1xuICAgIGVudHJpZXMucHVzaChbY2xvbmVbaW5kZXhdLCBjbG9uZVtpbmRleCArIDFdXSlcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpXG59XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVycyAobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKSB7XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICAgICAgaGVhZGVycyA9IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShoZWFkZXJzKVxuICAgIH1cbiAgICByZXR1cm4gbW9ja0Rpc3BhdGNoLmhlYWRlcnMoaGVhZGVycyA/IGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycykgOiB7fSlcbiAgfVxuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHR5cGVvZiBoZWFkZXJzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IFttYXRjaEhlYWRlck5hbWUsIG1hdGNoSGVhZGVyVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1vY2tEaXNwYXRjaC5oZWFkZXJzKSkge1xuICAgIGNvbnN0IGhlYWRlclZhbHVlID0gZ2V0SGVhZGVyQnlOYW1lKGhlYWRlcnMsIG1hdGNoSGVhZGVyTmFtZSlcblxuICAgIGlmICghbWF0Y2hWYWx1ZShtYXRjaEhlYWRlclZhbHVlLCBoZWFkZXJWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBzYWZlVXJsIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnPycpXG5cbiAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcXAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhdGhTZWdtZW50cy5wb3AoKSlcbiAgcXAuc29ydCgpXG4gIHJldHVybiBbLi4ucGF0aFNlZ21lbnRzLCBxcC50b1N0cmluZygpXS5qb2luKCc/Jylcbn1cblxuZnVuY3Rpb24gbWF0Y2hLZXkgKG1vY2tEaXNwYXRjaCwgeyBwYXRoLCBtZXRob2QsIGJvZHksIGhlYWRlcnMgfSkge1xuICBjb25zdCBwYXRoTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5wYXRoLCBwYXRoKVxuICBjb25zdCBtZXRob2RNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLm1ldGhvZCwgbWV0aG9kKVxuICBjb25zdCBib2R5TWF0Y2ggPSB0eXBlb2YgbW9ja0Rpc3BhdGNoLmJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2guYm9keSwgYm9keSkgOiB0cnVlXG4gIGNvbnN0IGhlYWRlcnNNYXRjaCA9IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpXG4gIHJldHVybiBwYXRoTWF0Y2ggJiYgbWV0aG9kTWF0Y2ggJiYgYm9keU1hdGNoICYmIGhlYWRlcnNNYXRjaFxufVxuXG5mdW5jdGlvbiBnZXRSZXNwb25zZURhdGEgKGRhdGEpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBiYXNlUGF0aCA9IGtleS5xdWVyeSA/IGJ1aWxkVVJMKGtleS5wYXRoLCBrZXkucXVlcnkpIDoga2V5LnBhdGhcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdHlwZW9mIGJhc2VQYXRoID09PSAnc3RyaW5nJyA/IHNhZmVVcmwoYmFzZVBhdGgpIDogYmFzZVBhdGhcblxuICAvLyBNYXRjaCBwYXRoXG4gIGxldCBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgY29uc3VtZWQgfSkgPT4gIWNvbnN1bWVkKS5maWx0ZXIoKHsgcGF0aCB9KSA9PiBtYXRjaFZhbHVlKHNhZmVVcmwocGF0aCksIHJlc29sdmVkUGF0aCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggbWV0aG9kXG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgbWV0aG9kIH0pID0+IG1hdGNoVmFsdWUobWV0aG9kLCBrZXkubWV0aG9kKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgbWV0aG9kICcke2tleS5tZXRob2R9JyBvbiBwYXRoICcke3Jlc29sdmVkUGF0aH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nIG9uIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggaGVhZGVyc1xuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKChtb2NrRGlzcGF0Y2gpID0+IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGtleS5oZWFkZXJzKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzXG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7aGVhZGVyc30nIG9uIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldXG4gICAgY29uc3QgbmFtZSA9IEJ1ZmZlci5mcm9tKGAke2tleX1gKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7ICsraikge1xuICAgICAgICByZXN1bHQucHVzaChuYW1lLCBCdWZmZXIuZnJvbShgJHt2YWx1ZVtqXX1gKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2gobmFtZSwgQnVmZmVyLmZyb20oYCR7dmFsdWV9YCkpXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvU3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzQ29kZVxuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNUZXh0IChzdGF0dXNDb2RlKSB7XG4gIHJldHVybiBTVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gfHwgJ3Vua25vd24nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlIChib2R5KSB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBbXVxuICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgYm9keSkge1xuICAgIGJ1ZmZlcnMucHVzaChkYXRhKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpLnRvU3RyaW5nKCd1dGY4Jylcbn1cblxuLyoqXG4gKiBNb2NrIGRpc3BhdGNoIGZ1bmN0aW9uIHVzZWQgdG8gc2ltdWxhdGUgdW5kaWNpIGRpc3BhdGNoZXNcbiAqL1xuZnVuY3Rpb24gbW9ja0Rpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gIC8vIEdldCBtb2NrIGRpc3BhdGNoIGZyb20gYnVpbHQga2V5XG4gIGNvbnN0IGtleSA9IGJ1aWxkS2V5KG9wdHMpXG4gIGNvbnN0IG1vY2tEaXNwYXRjaCA9IGdldE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuXG4gIG1vY2tEaXNwYXRjaC50aW1lc0ludm9rZWQrK1xuXG4gIC8vIEhlcmUncyB3aGVyZSB3ZSByZXNvbHZlIGEgY2FsbGJhY2sgaWYgYSBjYWxsYmFjayBpcyBwcmVzZW50IGZvciB0aGUgZGlzcGF0Y2ggZGF0YS5cbiAgaWYgKG1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKSB7XG4gICAgbW9ja0Rpc3BhdGNoLmRhdGEgPSB7IC4uLm1vY2tEaXNwYXRjaC5kYXRhLCAuLi5tb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjayhvcHRzKSB9XG4gIH1cblxuICAvLyBQYXJzZSBtb2NrRGlzcGF0Y2ggZGF0YVxuICBjb25zdCB7IGRhdGE6IHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMsIGVycm9yIH0sIGRlbGF5LCBwZXJzaXN0IH0gPSBtb2NrRGlzcGF0Y2hcbiAgY29uc3QgeyB0aW1lc0ludm9rZWQsIHRpbWVzIH0gPSBtb2NrRGlzcGF0Y2hcblxuICAvLyBJZiBpdCdzIHVzZWQgdXAgYW5kIG5vdCBwZXJzaXN0ZW50LCBtYXJrIGFzIGNvbnN1bWVkXG4gIG1vY2tEaXNwYXRjaC5jb25zdW1lZCA9ICFwZXJzaXN0ICYmIHRpbWVzSW52b2tlZCA+PSB0aW1lc1xuICBtb2NrRGlzcGF0Y2gucGVuZGluZyA9IHRpbWVzSW52b2tlZCA8IHRpbWVzXG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB0cmlnZ2VyIGRpc3BhdGNoIGVycm9yXG4gIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuICAgIGhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IHdpdGggYSBkZWxheSBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgICB9LCBkZWxheSlcbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlcGx5IChtb2NrRGlzcGF0Y2hlcywgX2RhdGEgPSBkYXRhKSB7XG4gICAgLy8gZmV0Y2gncyBIZWFkZXJzTGlzdCBpcyBhIDFEIHN0cmluZyBhcnJheVxuICAgIGNvbnN0IG9wdHNIZWFkZXJzID0gQXJyYXkuaXNBcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA/IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA6IG9wdHMuaGVhZGVyc1xuICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgX2RhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gX2RhdGEoeyAuLi5vcHRzLCBoZWFkZXJzOiBvcHRzSGVhZGVycyB9KVxuICAgICAgOiBfZGF0YVxuXG4gICAgLy8gdXRpbC50eXBlcy5pc1Byb21pc2UgaXMgbGlrZWx5IG5lZWRlZCBmb3IgamVzdC5cbiAgICBpZiAoaXNQcm9taXNlKGJvZHkpKSB7XG4gICAgICAvLyBJZiBoYW5kbGVSZXBseSBpcyBhc3luY2hyb25vdXMsIHRocm93aW5nIGFuIGVycm9yXG4gICAgICAvLyBpbiB0aGUgY2FsbGJhY2sgd2lsbCByZWplY3QgdGhlIHByb21pc2UsIHJhdGhlciB0aGFuXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRocm93IHRoZSBlcnJvciwgd2hpY2ggYnJlYWtzIHNvbWUgdGVzdHMuXG4gICAgICAvLyBSYXRoZXIsIHdlIHdhaXQgZm9yIHRoZSBjYWxsYmFjayB0byByZXNvbHZlIGlmIGl0IGlzIGFcbiAgICAgIC8vIHByb21pc2UsIGFuZCB0aGVuIHJlLXJ1biBoYW5kbGVSZXBseSB3aXRoIHRoZSBuZXcgYm9keS5cbiAgICAgIGJvZHkudGhlbigobmV3RGF0YSkgPT4gaGFuZGxlUmVwbHkobW9ja0Rpc3BhdGNoZXMsIG5ld0RhdGEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGJvZHkpXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXMoaGVhZGVycylcbiAgICBjb25zdCByZXNwb25zZVRyYWlsZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXModHJhaWxlcnMpXG5cbiAgICBoYW5kbGVyLm9uQ29ubmVjdD8uKGVyciA9PiBoYW5kbGVyLm9uRXJyb3IoZXJyKSwgbnVsbClcbiAgICBoYW5kbGVyLm9uSGVhZGVycz8uKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhPy4oQnVmZmVyLmZyb20ocmVzcG9uc2VEYXRhKSlcbiAgICBoYW5kbGVyLm9uQ29tcGxldGU/LihyZXNwb25zZVRyYWlsZXJzKVxuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaChtb2NrRGlzcGF0Y2hlcywga2V5KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lICgpIHt9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrRGlzcGF0Y2ggKCkge1xuICBjb25zdCBhZ2VudCA9IHRoaXNba01vY2tBZ2VudF1cbiAgY29uc3Qgb3JpZ2luID0gdGhpc1trT3JpZ2luXVxuICBjb25zdCBvcmlnaW5hbERpc3BhdGNoID0gdGhpc1trT3JpZ2luYWxEaXNwYXRjaF1cblxuICByZXR1cm4gZnVuY3Rpb24gZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoYWdlbnQuaXNNb2NrQWN0aXZlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBtb2NrRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTW9ja05vdE1hdGNoZWRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG5ldENvbm5lY3QgPSBhZ2VudFtrR2V0TmV0Q29ubmVjdF0oKVxuICAgICAgICAgIGlmIChuZXRDb25uZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgZGlzYWJsZWQpYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoZWNrTmV0Q29ubmVjdChuZXRDb25uZWN0LCBvcmlnaW4pKSB7XG4gICAgICAgICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgaXMgbm90IGVuYWJsZWQgZm9yIHRoaXMgb3JpZ2luKWApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrTmV0Q29ubmVjdCAobmV0Q29ubmVjdCwgb3JpZ2luKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwob3JpZ2luKVxuICBpZiAobmV0Q29ubmVjdCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXRDb25uZWN0KSAmJiBuZXRDb25uZWN0LnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoVmFsdWUobWF0Y2hlciwgdXJsLmhvc3QpKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja09wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKG9wdHMpIHtcbiAgICBjb25zdCB7IGFnZW50LCAuLi5tb2NrT3B0aW9ucyB9ID0gb3B0c1xuICAgIHJldHVybiBtb2NrT3B0aW9uc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRSZXNwb25zZURhdGEsXG4gIGdldE1vY2tEaXNwYXRjaCxcbiAgYWRkTW9ja0Rpc3BhdGNoLFxuICBkZWxldGVNb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkS2V5LFxuICBnZW5lcmF0ZUtleVZhbHVlcyxcbiAgbWF0Y2hWYWx1ZSxcbiAgZ2V0UmVzcG9uc2UsXG4gIGdldFN0YXR1c1RleHQsXG4gIG1vY2tEaXNwYXRjaCxcbiAgYnVpbGRNb2NrRGlzcGF0Y2gsXG4gIGNoZWNrTmV0Q29ubmVjdCxcbiAgYnVpbGRNb2NrT3B0aW9ucyxcbiAgZ2V0SGVhZGVyQnlOYW1lLFxuICBidWlsZEhlYWRlcnNGcm9tQXJyYXlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBnZXRSZXNwb25zZURhdGEsIGJ1aWxkS2V5LCBhZGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrRGlzcGF0Y2hLZXksXG4gIGtEZWZhdWx0SGVhZGVycyxcbiAga0RlZmF1bHRUcmFpbGVycyxcbiAga0NvbnRlbnRMZW5ndGgsXG4gIGtNb2NrRGlzcGF0Y2hcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGJ1aWxkVVJMIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG4vKipcbiAqIERlZmluZXMgdGhlIHNjb3BlIEFQSSBmb3IgYW4gaW50ZXJjZXB0b3IgcmVwbHlcbiAqL1xuY2xhc3MgTW9ja1Njb3BlIHtcbiAgY29uc3RydWN0b3IgKG1vY2tEaXNwYXRjaCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0gPSBtb2NrRGlzcGF0Y2hcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheSBhIHJlcGx5IGJ5IGEgc2V0IGFtb3VudCBpbiBtcy5cbiAgICovXG4gIGRlbGF5ICh3YWl0SW5Ncykge1xuICAgIGlmICh0eXBlb2Ygd2FpdEluTXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHdhaXRJbk1zKSB8fCB3YWl0SW5NcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3dhaXRJbk1zIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5kZWxheSA9IHdhaXRJbk1zXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBkZWZpbmVkIHJlcGx5LCBuZXZlciBtYXJrIGFzIGNvbnN1bWVkLlxuICAgKi9cbiAgcGVyc2lzdCAoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5wZXJzaXN0ID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb25lIHRvIGRlZmluZSBhIHJlcGx5IGZvciBhIHNldCBhbW91bnQgb2YgbWF0Y2hpbmcgcmVxdWVzdHMuXG4gICAqL1xuICB0aW1lcyAocmVwZWF0VGltZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGVhdFRpbWVzICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRUaW1lcykgfHwgcmVwZWF0VGltZXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBlYXRUaW1lcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0udGltZXMgPSByZXBlYXRUaW1lc1xuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGludGVyY2VwdG9yIGZvciBhIE1vY2tcbiAqL1xuY2xhc3MgTW9ja0ludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIG1vY2tEaXNwYXRjaGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMucGF0aCBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzEyNDVcbiAgICAvLyBBcyBwZXIgUkZDIDM5ODYsIGNsaWVudHMgYXJlIG5vdCBzdXBwb3NlZCB0byBzZW5kIFVSSVxuICAgIC8vIGZyYWdtZW50cyB0byBzZXJ2ZXJzIHdoZW4gdGhleSByZXRyaWV2ZSBhIGRvY3VtZW50LFxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgICAgb3B0cy5wYXRoID0gYnVpbGRVUkwob3B0cy5wYXRoLCBvcHRzLnF1ZXJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iL21haW4vbGliL3dlYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoeyBzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMgfSkge1xuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShkYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzW2tDb250ZW50TGVuZ3RoXSA/IHsgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VEYXRhLmxlbmd0aCB9IDoge31cbiAgICBjb25zdCBoZWFkZXJzID0geyAuLi50aGlzW2tEZWZhdWx0SGVhZGVyc10sIC4uLmNvbnRlbnRMZW5ndGgsIC4uLnJlc3BvbnNlT3B0aW9ucy5oZWFkZXJzIH1cbiAgICBjb25zdCB0cmFpbGVycyA9IHsgLi4udGhpc1trRGVmYXVsdFRyYWlsZXJzXSwgLi4ucmVzcG9uc2VPcHRpb25zLnRyYWlsZXJzIH1cblxuICAgIHJldHVybiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzIH1cbiAgfVxuXG4gIHZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzIChyZXBseVBhcmFtZXRlcnMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGx5UGFyYW1ldGVycy5zdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVwbHlQYXJhbWV0ZXJzLnJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgcmVwbHlQYXJhbWV0ZXJzLnJlc3BvbnNlT3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXNwb25zZU9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIHJlcGx5LlxuICAgKi9cbiAgcmVwbHkgKHJlcGx5T3B0aW9uc0NhbGxiYWNrT3JTdGF0dXNDb2RlKSB7XG4gICAgLy8gVmFsdWVzIG9mIHJlcGx5IGFyZW4ndCBhdmFpbGFibGUgcmlnaHQgbm93IGFzIHRoZXlcbiAgICAvLyBjYW4gb25seSBiZSBhdmFpbGFibGUgd2hlbiB0aGUgcmVwbHkgY2FsbGJhY2sgaXMgaW52b2tlZC5cbiAgICBpZiAodHlwZW9mIHJlcGx5T3B0aW9uc0NhbGxiYWNrT3JTdGF0dXNDb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlPcHRpb25zQ2FsbGJhY2tPclN0YXR1c0NvZGUob3B0cylcblxuICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBpbiB0aGUgcmlnaHQgZm9ybWF0XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZWREYXRhICE9PSAnb2JqZWN0JyB8fCByZXNvbHZlZERhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcGx5UGFyYW1ldGVycyA9IHsgZGF0YTogJycsIHJlc3BvbnNlT3B0aW9uczoge30sIC4uLnJlc29sdmVkRGF0YSB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMocmVwbHlQYXJhbWV0ZXJzKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShyZXBseVBhcmFtZXRlcnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCByZXBseVBhcmFtZXRlcnMgPSB7XG4gICAgICBzdGF0dXNDb2RlOiByZXBseU9wdGlvbnNDYWxsYmFja09yU3RhdHVzQ29kZSxcbiAgICAgIGRhdGE6IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gJycgOiBhcmd1bWVudHNbMV0sXG4gICAgICByZXNwb25zZU9wdGlvbnM6IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMl1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhyZXBseVBhcmFtZXRlcnMpXG5cbiAgICAvLyBTZW5kIGluLWFscmVhZHkgcHJvdmlkZWQgZGF0YSBsaWtlIHVzdWFsXG4gICAgY29uc3QgZGlzcGF0Y2hEYXRhID0gdGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEocmVwbHlQYXJhbWV0ZXJzKVxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCBkaXNwYXRjaERhdGEpXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgZXJyb3IuXG4gICAqL1xuICByZXBseVdpdGhFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdlcnJvciBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB7IGVycm9yIH0pXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IGhlYWRlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseUhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSBoZWFkZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSB0cmFpbGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5VHJhaWxlcnMgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHR5cGVvZiB0cmFpbGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndHJhaWxlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0gdHJhaWxlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXBseSBjb250ZW50IGxlbmd0aCBoZWFkZXIgZm9yIHJlcGxpZXMgb24gdGhlIGludGVyY2VwdG9yXG4gICAqL1xuICByZXBseUNvbnRlbnRMZW5ndGggKCkge1xuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuTW9ja0ludGVyY2VwdG9yID0gTW9ja0ludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5Nb2NrU2NvcGUgPSBNb2NrU2NvcGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyL2NsaWVudCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tDbGllbnQgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgQ2xpZW50IHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tDbGllbnQgZXh0ZW5kcyBDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQ2xpZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXIvcG9vbCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tQb29sIHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIFBvb2wgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja1Bvb2wgZXh0ZW5kcyBQb29sIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja1Bvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgc2luZ3VsYXJzID0ge1xuICBwcm9ub3VuOiAnaXQnLFxuICBpczogJ2lzJyxcbiAgd2FzOiAnd2FzJyxcbiAgdGhpczogJ3RoaXMnXG59XG5cbmNvbnN0IHBsdXJhbHMgPSB7XG4gIHByb25vdW46ICd0aGV5JyxcbiAgaXM6ICdhcmUnLFxuICB3YXM6ICd3ZXJlJyxcbiAgdGhpczogJ3RoZXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBsdXJhbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoc2luZ3VsYXIsIHBsdXJhbCkge1xuICAgIHRoaXMuc2luZ3VsYXIgPSBzaW5ndWxhclxuICAgIHRoaXMucGx1cmFsID0gcGx1cmFsXG4gIH1cblxuICBwbHVyYWxpemUgKGNvdW50KSB7XG4gICAgY29uc3Qgb25lID0gY291bnQgPT09IDFcbiAgICBjb25zdCBrZXlzID0gb25lID8gc2luZ3VsYXJzIDogcGx1cmFsc1xuICAgIGNvbnN0IG5vdW4gPSBvbmUgPyB0aGlzLnNpbmd1bGFyIDogdGhpcy5wbHVyYWxcbiAgICByZXR1cm4geyAuLi5rZXlzLCBjb3VudCwgbm91biB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgQ29uc29sZSB9ID0gcmVxdWlyZSgnbm9kZTpjb25zb2xlJylcblxuY29uc3QgUEVSU0lTVEVOVCA9IHByb2Nlc3MudmVyc2lvbnMuaWN1ID8gJ1x1MjcwNScgOiAnWSAnXG5jb25zdCBOT1RfUEVSU0lTVEVOVCA9IHByb2Nlc3MudmVyc2lvbnMuaWN1ID8gJ1x1Mjc0QycgOiAnTiAnXG5cbi8qKlxuICogR2V0cyB0aGUgb3V0cHV0IG9mIGBjb25zb2xlLnRhYmxlKFx1MjAyNilgIGFzIGEgc3RyaW5nLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBkaXNhYmxlQ29sb3JzIH0gPSB7fSkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSh7XG4gICAgICB0cmFuc2Zvcm0gKGNodW5rLCBfZW5jLCBjYikge1xuICAgICAgICBjYihudWxsLCBjaHVuaylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgQ29uc29sZSh7XG4gICAgICBzdGRvdXQ6IHRoaXMudHJhbnNmb3JtLFxuICAgICAgaW5zcGVjdE9wdGlvbnM6IHtcbiAgICAgICAgY29sb3JzOiAhZGlzYWJsZUNvbG9ycyAmJiAhcHJvY2Vzcy5lbnYuQ0lcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZm9ybWF0IChwZW5kaW5nSW50ZXJjZXB0b3JzKSB7XG4gICAgY29uc3Qgd2l0aFByZXR0eUhlYWRlcnMgPSBwZW5kaW5nSW50ZXJjZXB0b3JzLm1hcChcbiAgICAgICh7IG1ldGhvZCwgcGF0aCwgZGF0YTogeyBzdGF0dXNDb2RlIH0sIHBlcnNpc3QsIHRpbWVzLCB0aW1lc0ludm9rZWQsIG9yaWdpbiB9KSA9PiAoe1xuICAgICAgICBNZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgT3JpZ2luOiBvcmlnaW4sXG4gICAgICAgIFBhdGg6IHBhdGgsXG4gICAgICAgICdTdGF0dXMgY29kZSc6IHN0YXR1c0NvZGUsXG4gICAgICAgIFBlcnNpc3RlbnQ6IHBlcnNpc3QgPyBQRVJTSVNURU5UIDogTk9UX1BFUlNJU1RFTlQsXG4gICAgICAgIEludm9jYXRpb25zOiB0aW1lc0ludm9rZWQsXG4gICAgICAgIFJlbWFpbmluZzogcGVyc2lzdCA/IEluZmluaXR5IDogdGltZXMgLSB0aW1lc0ludm9rZWRcbiAgICAgIH0pKVxuXG4gICAgdGhpcy5sb2dnZXIudGFibGUod2l0aFByZXR0eUhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlYWQoKS50b1N0cmluZygpXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9hZ2VudCcpXG5jb25zdCB7XG4gIGtBZ2VudCxcbiAga01vY2tBZ2VudFNldCxcbiAga01vY2tBZ2VudEdldCxcbiAga0Rpc3BhdGNoZXMsXG4gIGtJc01vY2tBY3RpdmUsXG4gIGtOZXRDb25uZWN0LFxuICBrR2V0TmV0Q29ubmVjdCxcbiAga09wdGlvbnMsXG4gIGtGYWN0b3J5XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL21vY2stcG9vbCcpXG5jb25zdCB7IG1hdGNoVmFsdWUsIGJ1aWxkTW9ja09wdGlvbnMgfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlcicpXG5jb25zdCBQbHVyYWxpemVyID0gcmVxdWlyZSgnLi9wbHVyYWxpemVyJylcbmNvbnN0IFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSByZXF1aXJlKCcuL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlcicpXG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzPy5hZ2VudCAmJiB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuICAgIGNvbnN0IGFnZW50ID0gb3B0cz8uYWdlbnQgPyBvcHRzLmFnZW50IDogbmV3IEFnZW50KG9wdHMpXG4gICAgdGhpc1trQWdlbnRdID0gYWdlbnRcblxuICAgIHRoaXNba0NsaWVudHNdID0gYWdlbnRba0NsaWVudHNdXG4gICAgdGhpc1trT3B0aW9uc10gPSBidWlsZE1vY2tPcHRpb25zKG9wdHMpXG4gIH1cblxuICBnZXQgKG9yaWdpbikge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trTW9ja0FnZW50R2V0XShvcmlnaW4pXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICB9XG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gQ2FsbCBNb2NrQWdlbnQuZ2V0IHRvIHBlcmZvcm0gYWRkaXRpb25hbCBzZXR1cCBiZWZvcmUgZGlzcGF0Y2hpbmcgYXMgbm9ybWFsXG4gICAgdGhpcy5nZXQob3B0cy5vcmlnaW4pXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgY2xvc2UgKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgdGhpc1trQ2xpZW50c10uY2xlYXIoKVxuICB9XG5cbiAgZGVhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IGZhbHNlXG4gIH1cblxuICBhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IHRydWVcbiAgfVxuXG4gIGVuYWJsZU5ldENvbm5lY3QgKG1hdGNoZXIpIHtcbiAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBtYXRjaGVyID09PSAnZnVuY3Rpb24nIHx8IG1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXNba05ldENvbm5lY3RdKSkge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XS5wdXNoKG1hdGNoZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IFttYXRjaGVyXVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdVbnN1cHBvcnRlZCBtYXRjaGVyLiBNdXN0IGJlIG9uZSBvZiBTdHJpbmd8RnVuY3Rpb258UmVnRXhwLicpXG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZU5ldENvbm5lY3QgKCkge1xuICAgIHRoaXNba05ldENvbm5lY3RdID0gZmFsc2VcbiAgfVxuXG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gYnlwYXNzIGlzc3VlcyBjYXVzZWQgYnkgdXNpbmcgZ2xvYmFsIHN5bWJvbHMgLSBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNDQ3XG4gIGdldCBpc01vY2tBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzW2tJc01vY2tBY3RpdmVdXG4gIH1cblxuICBba01vY2tBZ2VudFNldF0gKG9yaWdpbiwgZGlzcGF0Y2hlcikge1xuICAgIHRoaXNba0NsaWVudHNdLnNldChvcmlnaW4sIGRpc3BhdGNoZXIpXG4gIH1cblxuICBba0ZhY3RvcnldIChvcmlnaW4pIHtcbiAgICBjb25zdCBtb2NrT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBhZ2VudDogdGhpcyB9LCB0aGlzW2tPcHRpb25zXSlcbiAgICByZXR1cm4gdGhpc1trT3B0aW9uc10gJiYgdGhpc1trT3B0aW9uc10uY29ubmVjdGlvbnMgPT09IDFcbiAgICAgID8gbmV3IE1vY2tDbGllbnQob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgICAgIDogbmV3IE1vY2tQb29sKG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gIH1cblxuICBba01vY2tBZ2VudEdldF0gKG9yaWdpbikge1xuICAgIC8vIEZpcnN0IGNoZWNrIGlmIHdlIGNhbiBpbW1lZGlhdGVseSBmaW5kIGl0XG4gICAgY29uc3QgY2xpZW50ID0gdGhpc1trQ2xpZW50c10uZ2V0KG9yaWdpbilcbiAgICBpZiAoY2xpZW50KSB7XG4gICAgICByZXR1cm4gY2xpZW50XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXREaXNwYXRjaGVyXSBvZiBBcnJheS5mcm9tKHRoaXNba0NsaWVudHNdKSkge1xuICAgICAgaWYgKG5vbkV4cGxpY2l0RGlzcGF0Y2hlciAmJiB0eXBlb2Yga2V5TWF0Y2hlciAhPT0gJ3N0cmluZycgJiYgbWF0Y2hWYWx1ZShrZXlNYXRjaGVyLCBvcmlnaW4pKSB7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgICBkaXNwYXRjaGVyW2tEaXNwYXRjaGVzXSA9IG5vbkV4cGxpY2l0RGlzcGF0Y2hlcltrRGlzcGF0Y2hlc11cbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBba0dldE5ldENvbm5lY3RdICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmV0Q29ubmVjdF1cbiAgfVxuXG4gIHBlbmRpbmdJbnRlcmNlcHRvcnMgKCkge1xuICAgIGNvbnN0IG1vY2tBZ2VudENsaWVudHMgPSB0aGlzW2tDbGllbnRzXVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obW9ja0FnZW50Q2xpZW50cy5lbnRyaWVzKCkpXG4gICAgICAuZmxhdE1hcCgoW29yaWdpbiwgc2NvcGVdKSA9PiBzY29wZVtrRGlzcGF0Y2hlc10ubWFwKGRpc3BhdGNoID0+ICh7IC4uLmRpc3BhdGNoLCBvcmlnaW4gfSkpKVxuICAgICAgLmZpbHRlcigoeyBwZW5kaW5nIH0pID0+IHBlbmRpbmcpXG4gIH1cblxuICBhc3NlcnROb1BlbmRpbmdJbnRlcmNlcHRvcnMgKHsgcGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IG5ldyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyKCkgfSA9IHt9KSB7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ0ludGVyY2VwdG9ycygpXG5cbiAgICBpZiAocGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBsdXJhbGl6ZXIgPSBuZXcgUGx1cmFsaXplcignaW50ZXJjZXB0b3InLCAnaW50ZXJjZXB0b3JzJykucGx1cmFsaXplKHBlbmRpbmcubGVuZ3RoKVxuXG4gICAgdGhyb3cgbmV3IFVuZGljaUVycm9yKGBcbiR7cGx1cmFsaXplci5jb3VudH0gJHtwbHVyYWxpemVyLm5vdW59ICR7cGx1cmFsaXplci5pc30gcGVuZGluZzpcblxuJHtwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyLmZvcm1hdChwZW5kaW5nKX1cbmAudHJpbSgpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0FnZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXIvYWdlbnQnKVxuXG5pZiAoZ2V0R2xvYmFsRGlzcGF0Y2hlcigpID09PSB1bmRlZmluZWQpIHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcihuZXcgQWdlbnQoKSlcbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsRGlzcGF0Y2hlciAoYWdlbnQpIHtcbiAgaWYgKCFhZ2VudCB8fCB0eXBlb2YgYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IGFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsRGlzcGF0Y2hlciwge1xuICAgIHZhbHVlOiBhZ2VudCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERpc3BhdGNoZXIgKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxEaXNwYXRjaGVyXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcixcbiAgZ2V0R2xvYmFsRGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERlY29yYXRvckhhbmRsZXIge1xuICAjaGFuZGxlclxuXG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0JyB8fCBoYW5kbGVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgdGhpcy4jaGFuZGxlciA9IGhhbmRsZXJcbiAgfVxuXG4gIG9uQ29ubmVjdCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uQ29ubmVjdD8uKC4uLmFyZ3MpXG4gIH1cblxuICBvbkVycm9yICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25FcnJvcj8uKC4uLmFyZ3MpXG4gIH1cblxuICBvblVwZ3JhZGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vblVwZ3JhZGU/LiguLi5hcmdzKVxuICB9XG5cbiAgb25SZXNwb25zZVN0YXJ0ZWQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vblJlc3BvbnNlU3RhcnRlZD8uKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkhlYWRlcnM/LiguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25EYXRhPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkNvbXBsZXRlPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkJvZHlTZW50Py4oLi4uYXJncylcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgUmVkaXJlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9yZWRpcmVjdC1oYW5kbGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBvcHRzID0+IHtcbiAgY29uc3QgZ2xvYmFsTWF4UmVkaXJlY3Rpb25zID0gb3B0cz8ubWF4UmVkaXJlY3Rpb25zXG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJlZGlyZWN0SW50ZXJjZXB0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZ2xvYmFsTWF4UmVkaXJlY3Rpb25zLCAuLi5iYXNlT3B0cyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgaGFuZGxlclxuICAgICAgKVxuXG4gICAgICByZXR1cm4gZGlzcGF0Y2goYmFzZU9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IFJldHJ5SGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvcmV0cnktaGFuZGxlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsT3B0cyA9PiB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJldHJ5SW50ZXJjZXB0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaChcbiAgICAgICAgb3B0cyxcbiAgICAgICAgbmV3IFJldHJ5SGFuZGxlcihcbiAgICAgICAgICB7IC4uLm9wdHMsIHJldHJ5T3B0aW9uczogeyAuLi5nbG9iYWxPcHRzLCAuLi5vcHRzLnJldHJ5T3B0aW9ucyB9IH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIGRpc3BhdGNoXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXInKVxuXG5jbGFzcyBEdW1wSGFuZGxlciBleHRlbmRzIERlY29yYXRvckhhbmRsZXIge1xuICAjbWF4U2l6ZSA9IDEwMjQgKiAxMDI0XG4gICNhYm9ydCA9IG51bGxcbiAgI2R1bXBlZCA9IGZhbHNlXG4gICNhYm9ydGVkID0gZmFsc2VcbiAgI3NpemUgPSAwXG4gICNyZWFzb24gPSBudWxsXG4gICNoYW5kbGVyID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yICh7IG1heFNpemUgfSwgaGFuZGxlcikge1xuICAgIHN1cGVyKGhhbmRsZXIpXG5cbiAgICBpZiAobWF4U2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKG1heFNpemUpIHx8IG1heFNpemUgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhTaXplIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAnKVxuICAgIH1cblxuICAgIHRoaXMuI21heFNpemUgPSBtYXhTaXplID8/IHRoaXMuI21heFNpemVcbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIHRoaXMuI2Fib3J0ID0gYWJvcnRcblxuICAgIHRoaXMuI2hhbmRsZXIub25Db25uZWN0KHRoaXMuI2N1c3RvbUFib3J0LmJpbmQodGhpcykpXG4gIH1cblxuICAjY3VzdG9tQWJvcnQgKHJlYXNvbikge1xuICAgIHRoaXMuI2Fib3J0ZWQgPSB0cnVlXG4gICAgdGhpcy4jcmVhc29uID0gcmVhc29uXG4gIH1cblxuICAvLyBUT0RPOiB3aWxsIHJlcXVpcmUgYWRqdXN0bWVudCBhZnRlciBuZXcgaG9va3MgYXJlIG91dFxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggPiB0aGlzLiNtYXhTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcihcbiAgICAgICAgYFJlc3BvbnNlIHNpemUgKCR7Y29udGVudExlbmd0aH0pIGxhcmdlciB0aGFuIG1heFNpemUgKCR7XG4gICAgICAgICAgdGhpcy4jbWF4U2l6ZVxuICAgICAgICB9KWBcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICBzdGF0dXNDb2RlLFxuICAgICAgcmF3SGVhZGVycyxcbiAgICAgIHJlc3VtZSxcbiAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICApXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBpZiAodGhpcy4jZHVtcGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlcnIgPSB0aGlzLiNyZWFzb24gPz8gZXJyXG5cbiAgICB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuI3NpemUgPSB0aGlzLiNzaXplICsgY2h1bmsubGVuZ3RoXG5cbiAgICBpZiAodGhpcy4jc2l6ZSA+PSB0aGlzLiNtYXhTaXplKSB7XG4gICAgICB0aGlzLiNkdW1wZWQgPSB0cnVlXG5cbiAgICAgIGlmICh0aGlzLiNhYm9ydGVkKSB7XG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcih0aGlzLiNyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNoYW5kbGVyLm9uQ29tcGxldGUoW10pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMuI2R1bXBlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2Fib3J0ZWQpIHtcbiAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcih0aGlzLnJlYXNvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuI2hhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEdW1wSW50ZXJjZXB0b3IgKFxuICB7IG1heFNpemU6IGRlZmF1bHRNYXhTaXplIH0gPSB7XG4gICAgbWF4U2l6ZTogMTAyNCAqIDEwMjRcbiAgfVxuKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEludGVyY2VwdCAob3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3QgeyBkdW1wTWF4U2l6ZSA9IGRlZmF1bHRNYXhTaXplIH0gPVxuICAgICAgICBvcHRzXG5cbiAgICAgIGNvbnN0IGR1bXBIYW5kbGVyID0gbmV3IER1bXBIYW5kbGVyKFxuICAgICAgICB7IG1heFNpemU6IGR1bXBNYXhTaXplIH0sXG4gICAgICAgIGhhbmRsZXJcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGR1bXBIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUR1bXBJbnRlcmNlcHRvclxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgeyBpc0lQIH0gPSByZXF1aXJlKCdub2RlOm5ldCcpXG5jb25zdCB7IGxvb2t1cCB9ID0gcmVxdWlyZSgnbm9kZTpkbnMnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXInKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgSW5mb3JtYXRpb25hbEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBtYXhJbnQgPSBNYXRoLnBvdygyLCAzMSkgLSAxXG5cbmNsYXNzIEROU0luc3RhbmNlIHtcbiAgI21heFRUTCA9IDBcbiAgI21heEl0ZW1zID0gMFxuICAjcmVjb3JkcyA9IG5ldyBNYXAoKVxuICBkdWFsU3RhY2sgPSB0cnVlXG4gIGFmZmluaXR5ID0gbnVsbFxuICBsb29rdXAgPSBudWxsXG4gIHBpY2sgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICB0aGlzLiNtYXhUVEwgPSBvcHRzLm1heFRUTFxuICAgIHRoaXMuI21heEl0ZW1zID0gb3B0cy5tYXhJdGVtc1xuICAgIHRoaXMuZHVhbFN0YWNrID0gb3B0cy5kdWFsU3RhY2tcbiAgICB0aGlzLmFmZmluaXR5ID0gb3B0cy5hZmZpbml0eVxuICAgIHRoaXMubG9va3VwID0gb3B0cy5sb29rdXAgPz8gdGhpcy4jZGVmYXVsdExvb2t1cFxuICAgIHRoaXMucGljayA9IG9wdHMucGljayA/PyB0aGlzLiNkZWZhdWx0UGlja1xuICB9XG5cbiAgZ2V0IGZ1bGwgKCkge1xuICAgIHJldHVybiB0aGlzLiNyZWNvcmRzLnNpemUgPT09IHRoaXMuI21heEl0ZW1zXG4gIH1cblxuICBydW5Mb29rdXAgKG9yaWdpbiwgb3B0cywgY2IpIHtcbiAgICBjb25zdCBpcHMgPSB0aGlzLiNyZWNvcmRzLmdldChvcmlnaW4uaG9zdG5hbWUpXG5cbiAgICAvLyBJZiBmdWxsLCB3ZSBqdXN0IHJldHVybiB0aGUgb3JpZ2luXG4gICAgaWYgKGlwcyA9PSBudWxsICYmIHRoaXMuZnVsbCkge1xuICAgICAgY2IobnVsbCwgb3JpZ2luLm9yaWdpbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdHMgPSB7XG4gICAgICBhZmZpbml0eTogdGhpcy5hZmZpbml0eSxcbiAgICAgIGR1YWxTdGFjazogdGhpcy5kdWFsU3RhY2ssXG4gICAgICBsb29rdXA6IHRoaXMubG9va3VwLFxuICAgICAgcGljazogdGhpcy5waWNrLFxuICAgICAgLi4ub3B0cy5kbnMsXG4gICAgICBtYXhUVEw6IHRoaXMuI21heFRUTCxcbiAgICAgIG1heEl0ZW1zOiB0aGlzLiNtYXhJdGVtc1xuICAgIH1cblxuICAgIC8vIElmIG5vIElQcyB3ZSBsb29rdXBcbiAgICBpZiAoaXBzID09IG51bGwpIHtcbiAgICAgIHRoaXMubG9va3VwKG9yaWdpbiwgbmV3T3B0cywgKGVyciwgYWRkcmVzc2VzKSA9PiB7XG4gICAgICAgIGlmIChlcnIgfHwgYWRkcmVzc2VzID09IG51bGwgfHwgYWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNiKGVyciA/PyBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdObyBETlMgZW50cmllcyBmb3VuZCcpKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRSZWNvcmRzKG9yaWdpbiwgYWRkcmVzc2VzKVxuICAgICAgICBjb25zdCByZWNvcmRzID0gdGhpcy4jcmVjb3Jkcy5nZXQob3JpZ2luLmhvc3RuYW1lKVxuXG4gICAgICAgIGNvbnN0IGlwID0gdGhpcy5waWNrKFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIG5ld09wdHMuYWZmaW5pdHlcbiAgICAgICAgKVxuXG4gICAgICAgIGxldCBwb3J0XG4gICAgICAgIGlmICh0eXBlb2YgaXAucG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBwb3J0ID0gYDoke2lwLnBvcnR9YFxuICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbi5wb3J0ICE9PSAnJykge1xuICAgICAgICAgIHBvcnQgPSBgOiR7b3JpZ2luLnBvcnR9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvcnQgPSAnJ1xuICAgICAgICB9XG5cbiAgICAgICAgY2IoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBgJHtvcmlnaW4ucHJvdG9jb2x9Ly8ke1xuICAgICAgICAgICAgaXAuZmFtaWx5ID09PSA2ID8gYFske2lwLmFkZHJlc3N9XWAgOiBpcC5hZGRyZXNzXG4gICAgICAgICAgfSR7cG9ydH1gXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgSVBzIHdlIHBpY2tcbiAgICAgIGNvbnN0IGlwID0gdGhpcy5waWNrKFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGlwcyxcbiAgICAgICAgbmV3T3B0cy5hZmZpbml0eVxuICAgICAgKVxuXG4gICAgICAvLyBJZiBubyBJUHMgd2UgbG9va3VwIC0gZGVsZXRpbmcgb2xkIHJlY29yZHNcbiAgICAgIGlmIChpcCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuI3JlY29yZHMuZGVsZXRlKG9yaWdpbi5ob3N0bmFtZSlcbiAgICAgICAgdGhpcy5ydW5Mb29rdXAob3JpZ2luLCBvcHRzLCBjYilcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBwb3J0XG4gICAgICBpZiAodHlwZW9mIGlwLnBvcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHBvcnQgPSBgOiR7aXAucG9ydH1gXG4gICAgICB9IGVsc2UgaWYgKG9yaWdpbi5wb3J0ICE9PSAnJykge1xuICAgICAgICBwb3J0ID0gYDoke29yaWdpbi5wb3J0fWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvcnQgPSAnJ1xuICAgICAgfVxuXG4gICAgICBjYihcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYCR7b3JpZ2luLnByb3RvY29sfS8vJHtcbiAgICAgICAgICBpcC5mYW1pbHkgPT09IDYgPyBgWyR7aXAuYWRkcmVzc31dYCA6IGlwLmFkZHJlc3NcbiAgICAgICAgfSR7cG9ydH1gXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgI2RlZmF1bHRMb29rdXAgKG9yaWdpbiwgb3B0cywgY2IpIHtcbiAgICBsb29rdXAoXG4gICAgICBvcmlnaW4uaG9zdG5hbWUsXG4gICAgICB7XG4gICAgICAgIGFsbDogdHJ1ZSxcbiAgICAgICAgZmFtaWx5OiB0aGlzLmR1YWxTdGFjayA9PT0gZmFsc2UgPyB0aGlzLmFmZmluaXR5IDogMCxcbiAgICAgICAgb3JkZXI6ICdpcHY0Zmlyc3QnXG4gICAgICB9LFxuICAgICAgKGVyciwgYWRkcmVzc2VzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBNYXAoKVxuXG4gICAgICAgIGZvciAoY29uc3QgYWRkciBvZiBhZGRyZXNzZXMpIHtcbiAgICAgICAgICAvLyBPbiBsaW51eCB3ZSBmb3VuZCBkdXBsaWNhdGVzLCB3ZSBhdHRlbXB0IHRvIHJlbW92ZSB0aGVtIHdpdGhcbiAgICAgICAgICAvLyB0aGUgbGF0ZXN0IHJlY29yZFxuICAgICAgICAgIHJlc3VsdHMuc2V0KGAke2FkZHIuYWRkcmVzc306JHthZGRyLmZhbWlseX1gLCBhZGRyKVxuICAgICAgICB9XG5cbiAgICAgICAgY2IobnVsbCwgcmVzdWx0cy52YWx1ZXMoKSlcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICAjZGVmYXVsdFBpY2sgKG9yaWdpbiwgaG9zdG5hbWVSZWNvcmRzLCBhZmZpbml0eSkge1xuICAgIGxldCBpcCA9IG51bGxcbiAgICBjb25zdCB7IHJlY29yZHMsIG9mZnNldCB9ID0gaG9zdG5hbWVSZWNvcmRzXG5cbiAgICBsZXQgZmFtaWx5XG4gICAgaWYgKHRoaXMuZHVhbFN0YWNrKSB7XG4gICAgICBpZiAoYWZmaW5pdHkgPT0gbnVsbCkge1xuICAgICAgICAvLyBCYWxhbmNlIGJldHdlZW4gaXAgZmFtaWxpZXNcbiAgICAgICAgaWYgKG9mZnNldCA9PSBudWxsIHx8IG9mZnNldCA9PT0gbWF4SW50KSB7XG4gICAgICAgICAgaG9zdG5hbWVSZWNvcmRzLm9mZnNldCA9IDBcbiAgICAgICAgICBhZmZpbml0eSA9IDRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBob3N0bmFtZVJlY29yZHMub2Zmc2V0KytcbiAgICAgICAgICBhZmZpbml0eSA9IChob3N0bmFtZVJlY29yZHMub2Zmc2V0ICYgMSkgPT09IDEgPyA2IDogNFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmRzW2FmZmluaXR5XSAhPSBudWxsICYmIHJlY29yZHNbYWZmaW5pdHldLmlwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZhbWlseSA9IHJlY29yZHNbYWZmaW5pdHldXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYW1pbHkgPSByZWNvcmRzW2FmZmluaXR5ID09PSA0ID8gNiA6IDRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhbWlseSA9IHJlY29yZHNbYWZmaW5pdHldXG4gICAgfVxuXG4gICAgLy8gSWYgbm8gSVBzIHdlIHJldHVybiBudWxsXG4gICAgaWYgKGZhbWlseSA9PSBudWxsIHx8IGZhbWlseS5pcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gaXBcbiAgICB9XG5cbiAgICBpZiAoZmFtaWx5Lm9mZnNldCA9PSBudWxsIHx8IGZhbWlseS5vZmZzZXQgPT09IG1heEludCkge1xuICAgICAgZmFtaWx5Lm9mZnNldCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgZmFtaWx5Lm9mZnNldCsrXG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb24gPSBmYW1pbHkub2Zmc2V0ICUgZmFtaWx5Lmlwcy5sZW5ndGhcbiAgICBpcCA9IGZhbWlseS5pcHNbcG9zaXRpb25dID8/IG51bGxcblxuICAgIGlmIChpcCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaXBcbiAgICB9XG5cbiAgICBpZiAoRGF0ZS5ub3coKSAtIGlwLnRpbWVzdGFtcCA+IGlwLnR0bCkgeyAvLyByZWNvcmQgVFRMIGlzIGFscmVhZHkgaW4gbXNcbiAgICAgIC8vIFdlIGRlbGV0ZSBleHBpcmVkIHJlY29yZHNcbiAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhleSBoYXZlIGRpZmZlcmVudCBUVEwsIHNvIHdlIG1hbmFnZSB0aGVtIGluZGl2aWR1YWxseVxuICAgICAgZmFtaWx5Lmlwcy5zcGxpY2UocG9zaXRpb24sIDEpXG4gICAgICByZXR1cm4gdGhpcy5waWNrKG9yaWdpbiwgaG9zdG5hbWVSZWNvcmRzLCBhZmZpbml0eSlcbiAgICB9XG5cbiAgICByZXR1cm4gaXBcbiAgfVxuXG4gIHNldFJlY29yZHMgKG9yaWdpbiwgYWRkcmVzc2VzKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IHJlY29yZHMgPSB7IHJlY29yZHM6IHsgNDogbnVsbCwgNjogbnVsbCB9IH1cbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBhZGRyZXNzZXMpIHtcbiAgICAgIHJlY29yZC50aW1lc3RhbXAgPSB0aW1lc3RhbXBcbiAgICAgIGlmICh0eXBlb2YgcmVjb3JkLnR0bCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgLy8gVGhlIHJlY29yZCBUVEwgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gbXNcbiAgICAgICAgcmVjb3JkLnR0bCA9IE1hdGgubWluKHJlY29yZC50dGwsIHRoaXMuI21heFRUTClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZC50dGwgPSB0aGlzLiNtYXhUVExcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmFtaWx5UmVjb3JkcyA9IHJlY29yZHMucmVjb3Jkc1tyZWNvcmQuZmFtaWx5XSA/PyB7IGlwczogW10gfVxuXG4gICAgICBmYW1pbHlSZWNvcmRzLmlwcy5wdXNoKHJlY29yZClcbiAgICAgIHJlY29yZHMucmVjb3Jkc1tyZWNvcmQuZmFtaWx5XSA9IGZhbWlseVJlY29yZHNcbiAgICB9XG5cbiAgICB0aGlzLiNyZWNvcmRzLnNldChvcmlnaW4uaG9zdG5hbWUsIHJlY29yZHMpXG4gIH1cblxuICBnZXRIYW5kbGVyIChtZXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBETlNEaXNwYXRjaEhhbmRsZXIodGhpcywgbWV0YSwgb3B0cylcbiAgfVxufVxuXG5jbGFzcyBETlNEaXNwYXRjaEhhbmRsZXIgZXh0ZW5kcyBEZWNvcmF0b3JIYW5kbGVyIHtcbiAgI3N0YXRlID0gbnVsbFxuICAjb3B0cyA9IG51bGxcbiAgI2Rpc3BhdGNoID0gbnVsbFxuICAjaGFuZGxlciA9IG51bGxcbiAgI29yaWdpbiA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoc3RhdGUsIHsgb3JpZ2luLCBoYW5kbGVyLCBkaXNwYXRjaCB9LCBvcHRzKSB7XG4gICAgc3VwZXIoaGFuZGxlcilcbiAgICB0aGlzLiNvcmlnaW4gPSBvcmlnaW5cbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuI29wdHMgPSB7IC4uLm9wdHMgfVxuICAgIHRoaXMuI3N0YXRlID0gc3RhdGVcbiAgICB0aGlzLiNkaXNwYXRjaCA9IGRpc3BhdGNoXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICBjYXNlICdFVElNRURPVVQnOlxuICAgICAgY2FzZSAnRUNPTk5SRUZVU0VEJzoge1xuICAgICAgICBpZiAodGhpcy4jc3RhdGUuZHVhbFN0YWNrKSB7XG4gICAgICAgICAgLy8gV2UgZGVsZXRlIHRoZSByZWNvcmQgYW5kIHJldHJ5XG4gICAgICAgICAgdGhpcy4jc3RhdGUucnVuTG9va3VwKHRoaXMuI29yaWdpbiwgdGhpcy4jb3B0cywgKGVyciwgbmV3T3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaXNwYXRjaE9wdHMgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuI29wdHMsXG4gICAgICAgICAgICAgIG9yaWdpbjogbmV3T3JpZ2luXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuI2Rpc3BhdGNoKGRpc3BhdGNoT3B0cywgdGhpcylcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gaWYgZHVhbC1zdGFjayBkaXNhYmxlZCwgd2UgZXJyb3Igb3V0XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VOT1RGT1VORCc6XG4gICAgICAgIHRoaXMuI3N0YXRlLmRlbGV0ZVJlY29yZCh0aGlzLiNvcmlnaW4pXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJjZXB0b3JPcHRzID0+IHtcbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubWF4VFRMICE9IG51bGwgJiZcbiAgICAodHlwZW9mIGludGVyY2VwdG9yT3B0cz8ubWF4VFRMICE9PSAnbnVtYmVyJyB8fCBpbnRlcmNlcHRvck9wdHM/Lm1heFRUTCA8IDApXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBtYXhUVEwuIE11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgIT0gbnVsbCAmJlxuICAgICh0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5tYXhJdGVtcyAhPT0gJ251bWJlcicgfHxcbiAgICAgIGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgPCAxKVxuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnSW52YWxpZCBtYXhJdGVtcy4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBhbmQgZ3JlYXRlciB0aGFuIHplcm8nXG4gICAgKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgIT0gbnVsbCAmJlxuICAgIGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgIT09IDQgJiZcbiAgICBpbnRlcmNlcHRvck9wdHM/LmFmZmluaXR5ICE9PSA2XG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBhZmZpbml0eS4gTXVzdCBiZSBlaXRoZXIgNCBvciA2JylcbiAgfVxuXG4gIGlmIChcbiAgICBpbnRlcmNlcHRvck9wdHM/LmR1YWxTdGFjayAhPSBudWxsICYmXG4gICAgdHlwZW9mIGludGVyY2VwdG9yT3B0cz8uZHVhbFN0YWNrICE9PSAnYm9vbGVhbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIGR1YWxTdGFjay4gTXVzdCBiZSBhIGJvb2xlYW4nKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubG9va3VwICE9IG51bGwgJiZcbiAgICB0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5sb29rdXAgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIGxvb2t1cC4gTXVzdCBiZSBhIGZ1bmN0aW9uJylcbiAgfVxuXG4gIGlmIChcbiAgICBpbnRlcmNlcHRvck9wdHM/LnBpY2sgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBpbnRlcmNlcHRvck9wdHM/LnBpY2sgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIHBpY2suIE11c3QgYmUgYSBmdW5jdGlvbicpXG4gIH1cblxuICBjb25zdCBkdWFsU3RhY2sgPSBpbnRlcmNlcHRvck9wdHM/LmR1YWxTdGFjayA/PyB0cnVlXG4gIGxldCBhZmZpbml0eVxuICBpZiAoZHVhbFN0YWNrKSB7XG4gICAgYWZmaW5pdHkgPSBpbnRlcmNlcHRvck9wdHM/LmFmZmluaXR5ID8/IG51bGxcbiAgfSBlbHNlIHtcbiAgICBhZmZpbml0eSA9IGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgPz8gNFxuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBtYXhUVEw6IGludGVyY2VwdG9yT3B0cz8ubWF4VFRMID8/IDEwZTMsIC8vIEV4cHJlc3NlZCBpbiBtc1xuICAgIGxvb2t1cDogaW50ZXJjZXB0b3JPcHRzPy5sb29rdXAgPz8gbnVsbCxcbiAgICBwaWNrOiBpbnRlcmNlcHRvck9wdHM/LnBpY2sgPz8gbnVsbCxcbiAgICBkdWFsU3RhY2ssXG4gICAgYWZmaW5pdHksXG4gICAgbWF4SXRlbXM6IGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgPz8gSW5maW5pdHlcbiAgfVxuXG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IEROU0luc3RhbmNlKG9wdHMpXG5cbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZG5zSW50ZXJjZXB0b3IgKG9yaWdEaXNwYXRjaE9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9XG4gICAgICAgIG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luLmNvbnN0cnVjdG9yID09PSBVUkxcbiAgICAgICAgICA/IG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luXG4gICAgICAgICAgOiBuZXcgVVJMKG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luKVxuXG4gICAgICBpZiAoaXNJUChvcmlnaW4uaG9zdG5hbWUpICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChvcmlnRGlzcGF0Y2hPcHRzLCBoYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5ydW5Mb29rdXAob3JpZ2luLCBvcmlnRGlzcGF0Y2hPcHRzLCAoZXJyLCBuZXdPcmlnaW4pID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRpc3BhdGNoT3B0cyA9IG51bGxcbiAgICAgICAgZGlzcGF0Y2hPcHRzID0ge1xuICAgICAgICAgIC4uLm9yaWdEaXNwYXRjaE9wdHMsXG4gICAgICAgICAgc2VydmVybmFtZTogb3JpZ2luLmhvc3RuYW1lLCAvLyBGb3IgU05JIG9uIFRMU1xuICAgICAgICAgIG9yaWdpbjogbmV3T3JpZ2luLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIGhvc3Q6IG9yaWdpbi5ob3N0bmFtZSxcbiAgICAgICAgICAgIC4uLm9yaWdEaXNwYXRjaE9wdHMuaGVhZGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGRpc3BhdGNoT3B0cyxcbiAgICAgICAgICBpbnN0YW5jZS5nZXRIYW5kbGVyKHsgb3JpZ2luLCBkaXNwYXRjaCwgaGFuZGxlciB9LCBvcmlnRGlzcGF0Y2hPcHRzKVxuICAgICAgICApXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgaXRlcmF0b3JNaXhpbixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlclx1MjAxOXMgZmlyc3QgaXRlbSwgaGVhZGVyXHUyMDE5cyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSBcdTIxOTIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgLy8gICAgVE9ET1xuICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgaWYgKGdldEhlYWRlcnNHdWFyZChoZWFkZXJzKSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cblxuICAvLyA3LiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmV0dXJuIGdldEhlYWRlcnNMaXN0KGhlYWRlcnMpLmFwcGVuZChuYW1lLCB2YWx1ZSwgZmFsc2UpXG5cbiAgLy8gOC4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIGhlYWRlcnNcbn1cblxuZnVuY3Rpb24gY29tcGFyZUhlYWRlck5hbWUgKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPCBiWzBdID8gLTEgOiAxXG59XG5cbmNsYXNzIEhlYWRlcnNMaXN0IHtcbiAgLyoqIEB0eXBlIHtbc3RyaW5nLCBzdHJpbmddW118bnVsbH0gKi9cbiAgY29va2llcyA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoaW5pdCkge1xuICAgIGlmIChpbml0IGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0W2tIZWFkZXJzTWFwXSlcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gaW5pdFtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHRoaXMuY29va2llcyA9IGluaXQuY29va2llcyA9PT0gbnVsbCA/IG51bGwgOiBbLi4uaW5pdC5jb29raWVzXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdClcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbGlzdC1jb250YWluc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqL1xuICBjb250YWlucyAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0uaGFzKGlzTG93ZXJDYXNlID8gbmFtZSA6IG5hbWUudG9Mb3dlckNhc2UoKSlcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5jbGVhcigpXG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgdGhpcy5jb29raWVzID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtYXBwZW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqL1xuICBhcHBlbmQgKG5hbWUsIHZhbHVlLCBpc0xvd2VyQ2FzZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVyXHUyMDE5cyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBpc0xvd2VyQ2FzZSA/IG5hbWUgOiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICh0aGlzLmNvb2tpZXMgPz89IFtdKS5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvd2VyQ2FzZVxuICAgKi9cbiAgc2V0IChuYW1lLCB2YWx1ZSwgaXNMb3dlckNhc2UpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gaXNMb3dlckNhc2UgPyBuYW1lIDogbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBbdmFsdWVdXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCB0aGUgdmFsdWUgb2ZcbiAgICAvLyAgICB0aGUgZmlyc3Qgc3VjaCBoZWFkZXIgdG8gdmFsdWUgYW5kIHJlbW92ZSB0aGVcbiAgICAvLyAgICBvdGhlcnMuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBhcHBlbmQgaGVhZGVyIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZGVsZXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb3dlckNhc2VcbiAgICovXG4gIGRlbGV0ZSAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBpZiAoIWlzTG93ZXJDYXNlKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvd2VyQ2FzZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG4gIGdldCAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmdldChpc0xvd2VyQ2FzZSA/IG5hbWUgOiBuYW1lLnRvTG93ZXJDYXNlKCkpPy52YWx1ZSA/PyBudWxsXG4gIH1cblxuICAqIFtTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAvLyB1c2UgdGhlIGxvd2VyY2FzZWQgbmFtZVxuICAgIGZvciAoY29uc3QgeyAwOiBuYW1lLCAxOiB7IHZhbHVlIH0gfSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplICE9PSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgcmF3VmFsdWVzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0udmFsdWVzKClcbiAgfVxuXG4gIGdldCBlbnRyaWVzTGlzdCAoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICBpZiAodGhpc1trSGVhZGVyc01hcF0uc2l6ZSAhPT0gMCkge1xuICAgICAgZm9yIChjb25zdCB7IDA6IGxvd2VyTmFtZSwgMTogeyBuYW1lLCB2YWx1ZSB9IH0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgICAgaWYgKGxvd2VyTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb29raWUgb2YgdGhpcy5jb29raWVzKSB7XG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIGNvb2tpZV0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgdmFsdWVdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb252ZXJ0LWhlYWRlci1uYW1lcy10by1hLXNvcnRlZC1sb3dlcmNhc2Utc2V0XG4gIHRvU29ydGVkQXJyYXkgKCkge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzW2tIZWFkZXJzTWFwXS5zaXplXG4gICAgY29uc3QgYXJyYXkgPSBuZXcgQXJyYXkoc2l6ZSlcbiAgICAvLyBJbiBtb3N0IGNhc2VzLCB5b3Ugd2lsbCB1c2UgdGhlIGZhc3QtcGF0aC5cbiAgICAvLyBmYXN0LXBhdGg6IFVzZSBiaW5hcnkgaW5zZXJ0aW9uIHNvcnQgZm9yIHNtYWxsIGFycmF5cy5cbiAgICBpZiAoc2l6ZSA8PSAzMikge1xuICAgICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgICAgLy8gSWYgZW1wdHksIGl0IGlzIGFuIGVtcHR5IGFycmF5LiBUbyBhdm9pZCB0aGUgZmlyc3QgaW5kZXggYXNzaWdubWVudC5cbiAgICAgICAgcmV0dXJuIGFycmF5XG4gICAgICB9XG4gICAgICAvLyBJbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHVucm9sbGluZyBsb29wIGFuZCBhdm9pZGluZyBkb3VibGUtbG9vcC5cbiAgICAgIC8vIERvdWJsZS1sb29wLWxlc3MgdmVyc2lvbiBvZiB0aGUgYmluYXJ5IGluc2VydGlvbiBzb3J0LlxuICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzW2tIZWFkZXJzTWFwXVtTeW1ib2wuaXRlcmF0b3JdKClcbiAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWVcbiAgICAgIC8vIHNldCBbbmFtZSwgdmFsdWVdIHRvIGZpcnN0IGluZGV4LlxuICAgICAgYXJyYXlbMF0gPSBbZmlyc3RWYWx1ZVswXSwgZmlyc3RWYWx1ZVsxXS52YWx1ZV1cbiAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNvcnQtYW5kLWNvbWJpbmVcbiAgICAgIC8vIDMuMi4yLiBBc3NlcnQ6IHZhbHVlIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGZpcnN0VmFsdWVbMV0udmFsdWUgIT09IG51bGwpXG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgaSA9IDEsIGogPSAwLCByaWdodCA9IDAsIGxlZnQgPSAwLCBwaXZvdCA9IDAsIHgsIHZhbHVlO1xuICAgICAgICBpIDwgc2l6ZTtcbiAgICAgICAgKytpXG4gICAgICApIHtcbiAgICAgICAgLy8gZ2V0IG5leHQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWVcbiAgICAgICAgLy8gc2V0IFtuYW1lLCB2YWx1ZV0gdG8gY3VycmVudCBpbmRleC5cbiAgICAgICAgeCA9IGFycmF5W2ldID0gW3ZhbHVlWzBdLCB2YWx1ZVsxXS52YWx1ZV1cbiAgICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICAgICAgICAvLyAzLjIuMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHhbMV0gIT09IG51bGwpXG4gICAgICAgIGxlZnQgPSAwXG4gICAgICAgIHJpZ2h0ID0gaVxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoXG4gICAgICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcbiAgICAgICAgICAvLyBtaWRkbGUgaW5kZXhcbiAgICAgICAgICBwaXZvdCA9IGxlZnQgKyAoKHJpZ2h0IC0gbGVmdCkgPj4gMSlcbiAgICAgICAgICAvLyBjb21wYXJlIGhlYWRlciBuYW1lXG4gICAgICAgICAgaWYgKGFycmF5W3Bpdm90XVswXSA8PSB4WzBdKSB7XG4gICAgICAgICAgICBsZWZ0ID0gcGl2b3QgKyAxXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJpZ2h0ID0gcGl2b3RcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBpdm90KSB7XG4gICAgICAgICAgaiA9IGlcbiAgICAgICAgICB3aGlsZSAoaiA+IGxlZnQpIHtcbiAgICAgICAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXVxuICAgICAgICAgIH1cbiAgICAgICAgICBhcnJheVtsZWZ0XSA9IHhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogYzggaWdub3JlIG5leHQgNCAqL1xuICAgICAgaWYgKCFpdGVyYXRvci5uZXh0KCkuZG9uZSkge1xuICAgICAgICAvLyBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgYW5kIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnJlYWNoYWJsZScpXG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBjYXNlIHdvdWxkIGJlIGEgcmFyZSBvY2N1cnJlbmNlLlxuICAgICAgLy8gc2xvdy1wYXRoOiBmYWxsYmFja1xuICAgICAgbGV0IGkgPSAwXG4gICAgICBmb3IgKGNvbnN0IHsgMDogbmFtZSwgMTogeyB2YWx1ZSB9IH0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgICAgYXJyYXlbaSsrXSA9IFtuYW1lLCB2YWx1ZV1cbiAgICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICAgICAgICAvLyAzLjIuMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHZhbHVlICE9PSBudWxsKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5LnNvcnQoY29tcGFyZUhlYWRlck5hbWUpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgI2d1YXJkXG4gICNoZWFkZXJzTGlzdFxuXG4gIGNvbnN0cnVjdG9yIChpbml0ID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGlmIChpbml0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLiNoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXMuI2d1YXJkID0gJ25vbmUnXG5cbiAgICAvLyAyLiBJZiBpbml0IGlzIGdpdmVuLCB0aGVuIGZpbGwgdGhpcyB3aXRoIGluaXQuXG4gICAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KGluaXQsICdIZWFkZXJzIGNvbnRydWN0b3InLCAnaW5pdCcpXG4gICAgICBmaWxsKHRoaXMsIGluaXQpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgJ0hlYWRlcnMuYXBwZW5kJylcblxuICAgIGNvbnN0IHByZWZpeCA9ICdIZWFkZXJzLmFwcGVuZCdcbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUsIHByZWZpeCwgJ3ZhbHVlJylcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmRlbGV0ZScpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5kZWxldGUnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5kZWxldGUnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgbmFtZVxuICAgIC8vICAgIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlciBuYW1lLCBhbmRcbiAgICAvLyAgICBuYW1lIGlzIG5vdCBhIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpc1xuICAgIC8vICAgIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXMuI2d1YXJkID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9XG5cbiAgICAvLyA2LiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW5cbiAgICAvLyAgICByZXR1cm4uXG4gICAgaWYgKCF0aGlzLiNoZWFkZXJzTGlzdC5jb250YWlucyhuYW1lLCBmYWxzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDcuIERlbGV0ZSBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpcy5cbiAgICB0aGlzLiNoZWFkZXJzTGlzdC5kZWxldGUobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmdldCcpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5nZXQnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzLiNoZWFkZXJzTGlzdC5nZXQobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmhhcycpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5oYXMnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBuYW1lO1xuICAgIC8vICAgIG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpcy4jaGVhZGVyc0xpc3QuY29udGFpbnMobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCAnSGVhZGVycy5zZXQnKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0hlYWRlcnMuc2V0J1xuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXMuI2d1YXJkID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9XG5cbiAgICAvLyA3LiBTZXQgKG5hbWUsIHZhbHVlKSBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzXG4gICAgdGhpcy4jaGVhZGVyc0xpc3Quc2V0KG5hbWUsIHZhbHVlLCBmYWxzZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRzZXRjb29raWVcbiAgZ2V0U2V0Q29va2llICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgU2V0LUNvb2tpZWAsIHRoZW4gcmV0dXJuIFx1MDBBQiBcdTAwQkIuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGhlYWRlcnMgaW4gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3Qgd2hvc2UgbmFtZSBpc1xuICAgIC8vICAgIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBgU2V0LUNvb2tpZWAsIGluIG9yZGVyLlxuXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuI2hlYWRlcnNMaXN0LmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdKSB7XG4gICAgICByZXR1cm4gdGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYW4gZW1wdHkgbGlzdCBvZiBoZWFkZXJzIHdpdGggdGhlIGtleSBiZWluZyB0aGUgbmFtZVxuICAgIC8vICAgIGFuZCB2YWx1ZSB0aGUgdmFsdWUuXG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICAvLyAyLiBMZXQgbmFtZXMgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0IGhlYWRlciBuYW1lcyB0byBhIHNvcnRlZC1sb3dlcmNhc2VcbiAgICAvLyAgICBzZXQgd2l0aCBhbGwgdGhlIG5hbWVzIG9mIHRoZSBoZWFkZXJzIGluIGxpc3QuXG4gICAgY29uc3QgbmFtZXMgPSB0aGlzLiNoZWFkZXJzTGlzdC50b1NvcnRlZEFycmF5KClcblxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzLiNoZWFkZXJzTGlzdC5jb29raWVzXG5cbiAgICAvLyBmYXN0LXBhdGhcbiAgICBpZiAoY29va2llcyA9PT0gbnVsbCB8fCBjb29raWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gTm90ZTogVGhlIG5vbi1udWxsIGFzc2VydGlvbiBvZiB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgYnkgYEhlYWRlcnNMaXN0I3RvU29ydGVkQXJyYXlgXG4gICAgICByZXR1cm4gKHRoaXMuI2hlYWRlcnNMaXN0W2tIZWFkZXJzU29ydGVkTWFwXSA9IG5hbWVzKVxuICAgIH1cblxuICAgIC8vIDMuIEZvciBlYWNoIG5hbWUgb2YgbmFtZXM6XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgeyAwOiBuYW1lLCAxOiB2YWx1ZSB9ID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIC8vIE5vdGU6IFRoaXMgb3BlcmF0aW9uIHdhcyBkb25lIGJ5IGBIZWFkZXJzTGlzdCN0b1NvcnRlZEFycmF5YC5cblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gaGVhZGVycy5cbiAgICByZXR1cm4gKHRoaXMuI2hlYWRlcnNMaXN0W2tIZWFkZXJzU29ydGVkTWFwXSA9IGhlYWRlcnMpXG4gIH1cblxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV0gKGRlcHRoLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucy5kZXB0aCA/Pz0gZGVwdGhcblxuICAgIHJldHVybiBgSGVhZGVycyAke3V0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgdGhpcy4jaGVhZGVyc0xpc3QuZW50cmllcyl9YFxuICB9XG5cbiAgc3RhdGljIGdldEhlYWRlcnNHdWFyZCAobykge1xuICAgIHJldHVybiBvLiNndWFyZFxuICB9XG5cbiAgc3RhdGljIHNldEhlYWRlcnNHdWFyZCAobywgZ3VhcmQpIHtcbiAgICBvLiNndWFyZCA9IGd1YXJkXG4gIH1cblxuICBzdGF0aWMgZ2V0SGVhZGVyc0xpc3QgKG8pIHtcbiAgICByZXR1cm4gby4jaGVhZGVyc0xpc3RcbiAgfVxuXG4gIHN0YXRpYyBzZXRIZWFkZXJzTGlzdCAobywgbGlzdCkge1xuICAgIG8uI2hlYWRlcnNMaXN0ID0gbGlzdFxuICB9XG59XG5cbmNvbnN0IHsgZ2V0SGVhZGVyc0d1YXJkLCBzZXRIZWFkZXJzR3VhcmQsIGdldEhlYWRlcnNMaXN0LCBzZXRIZWFkZXJzTGlzdCB9ID0gSGVhZGVyc1xuUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShIZWFkZXJzLCAnZ2V0SGVhZGVyc0d1YXJkJylcblJlZmxlY3QuZGVsZXRlUHJvcGVydHkoSGVhZGVycywgJ3NldEhlYWRlcnNHdWFyZCcpXG5SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KEhlYWRlcnMsICdnZXRIZWFkZXJzTGlzdCcpXG5SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KEhlYWRlcnMsICdzZXRIZWFkZXJzTGlzdCcpXG5cbml0ZXJhdG9yTWl4aW4oJ0hlYWRlcnMnLCBIZWFkZXJzLCBrSGVhZGVyc1NvcnRlZE1hcCwgMCwgMSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSGVhZGVycy5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldFNldENvb2tpZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0hlYWRlcnMnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV06IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdCA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gUmVmbGVjdC5nZXQoViwgU3ltYm9sLml0ZXJhdG9yKVxuXG4gICAgLy8gQSB3b3JrLWFyb3VuZCB0byBlbnN1cmUgd2Ugc2VuZCB0aGUgcHJvcGVybHktY2FzZWQgSGVhZGVycyB3aGVuIFYgaXMgYSBIZWFkZXJzIG9iamVjdC5cbiAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvMzE1OSNpc3N1ZWNvbW1lbnQtMjA3NTUzNzIyNiBiZWZvcmUgdG91Y2hpbmcsIHBsZWFzZS5cbiAgICBpZiAoIXV0aWwudHlwZXMuaXNQcm94eShWKSAmJiBpdGVyYXRvciA9PT0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllcykgeyAvLyBIZWFkZXJzIG9iamVjdFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEhlYWRlcnNMaXN0KFYpLmVudHJpZXNMaXN0XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gZmFsbC10aHJvdWdoXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nXShWLCBwcmVmaXgsIGFyZ3VtZW50LCBpdGVyYXRvci5iaW5kKFYpKVxuICAgIH1cblxuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J10oViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxuXG4gIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZpbGwsXG4gIC8vIGZvciB0ZXN0LlxuICBjb21wYXJlSGVhZGVyTmFtZSxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3QsXG4gIGdldEhlYWRlcnNHdWFyZCxcbiAgc2V0SGVhZGVyc0d1YXJkLFxuICBzZXRIZWFkZXJzTGlzdCxcbiAgZ2V0SGVhZGVyc0xpc3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBIZWFkZXJzLCBIZWFkZXJzTGlzdCwgZmlsbCwgZ2V0SGVhZGVyc0d1YXJkLCBzZXRIZWFkZXJzR3VhcmQsIHNldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBleHRyYWN0Qm9keSwgY2xvbmVCb2R5LCBtaXhpbkJvZHksIGhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5LCBzdHJlYW1SZWdpc3RyeSwgYm9keVVudXNhYmxlIH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCBub2RlVXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHtcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBpc0Vycm9yTGlrZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdDogcmVsZXZhbnRSZWFsbVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1c1xufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY2xhc3NcbmNsYXNzIFJlc3BvbnNlIHtcbiAgLy8gQ3JlYXRlcyBuZXR3b3JrIGVycm9yIFJlc3BvbnNlLlxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIC8vIFRoZSBzdGF0aWMgZXJyb3IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFcbiAgICAvLyBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IG5ldHdvcmsgZXJyb3IsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5c1xuICAgIC8vIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gZnJvbUlubmVyUmVzcG9uc2UobWFrZU5ldHdvcmtFcnJvcigpLCAnaW1tdXRhYmxlJylcblxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdSZXNwb25zZS5qc29uJylcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBmcm9tSW5uZXJSZXNwb25zZShtYWtlUmVzcG9uc2Uoe30pLCAncmVzcG9uc2UnKVxuXG4gICAgLy8gNC4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2VPYmplY3QsIGluaXQsIGFuZCAoYm9keSwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLlxuICAgIGluaXRpYWxpemVSZXNwb25zZShyZXNwb25zZU9iamVjdCwgaW5pdCwgeyBib2R5OiBib2R5WzBdLCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSlcblxuICAgIC8vIDUuIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSByZWRpcmVjdCBSZXNwb25zZSB0aGF0IHJlZGlyZWN0cyB0byB1cmwgd2l0aCBzdGF0dXMgc3RhdHVzLlxuICBzdGF0aWMgcmVkaXJlY3QgKHVybCwgc3RhdHVzID0gMzAyKSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnUmVzcG9uc2UucmVkaXJlY3QnKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBzdGF0dXMgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShzdGF0dXMpXG5cbiAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB1cmwgd2l0aCBjdXJyZW50IHNldHRpbmdzXG4gICAgLy8gb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gVE9ETzogYmFzZS1VUkw/XG4gICAgbGV0IHBhcnNlZFVSTFxuICAgIHRyeSB7XG4gICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKHVybCwgcmVsZXZhbnRSZWFsbS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICR7dXJsfWAsIHsgY2F1c2U6IGVyciB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gdGhyb3cgYSBSYW5nZUVycm9yLlxuICAgIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHN0YXR1cyBjb2RlICR7c3RhdHVzfWApXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IGZyb21Jbm5lclJlc3BvbnNlKG1ha2VSZXNwb25zZSh7fSksICdpbW11dGFibGUnKVxuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIHN0YXR1cy5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLnN0YXR1cyA9IHN0YXR1c1xuXG4gICAgLy8gNi4gTGV0IHZhbHVlIGJlIHBhcnNlZFVSTCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgIGNvbnN0IHZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShVUkxTZXJpYWxpemVyKHBhcnNlZFVSTCkpXG5cbiAgICAvLyA3LiBBcHBlbmQgYExvY2F0aW9uYC92YWx1ZSB0byByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdsb2NhdGlvbicsIHZhbHVlLCB0cnVlKVxuXG4gICAgLy8gOC4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZVxuICBjb25zdHJ1Y3RvciAoYm9keSA9IG51bGwsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgaWYgKGJvZHkgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5ICE9PSBudWxsKSB7XG4gICAgICBib2R5ID0gd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQoYm9keSlcbiAgICB9XG5cbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgcmVzcG9uc2UgdG8gYSBuZXcgcmVzcG9uc2UuXG4gICAgdGhpc1trU3RhdGVdID0gbWFrZVJlc3BvbnNlKHt9KVxuXG4gICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkXG4gICAgLy8gaXMgXCJyZXNwb25zZVwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICBzZXRIZWFkZXJzR3VhcmQodGhpc1trSGVhZGVyc10sICdyZXNwb25zZScpXG4gICAgc2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10sIHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdClcblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoYm9keVVudXNhYmxlKHRoaXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc1x1MjAxOXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIE5vdGU6IFRvIHJlLXJlZ2lzdGVyIGJlY2F1c2Ugb2YgYSBuZXcgc3RyZWFtLlxuICAgIGlmIChoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSAmJiB0aGlzW2tTdGF0ZV0uYm9keT8uc3RyZWFtKSB7XG4gICAgICBzdHJlYW1SZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCBuZXcgV2Vha1JlZih0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pKVxuICAgIH1cblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIHJldHVybiBmcm9tSW5uZXJSZXNwb25zZShjbG9uZWRSZXNwb25zZSwgZ2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdKSlcbiAgfVxuXG4gIFtub2RlVXRpbC5pbnNwZWN0LmN1c3RvbV0gKGRlcHRoLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZGVwdGggPT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGggPSAyXG4gICAgfVxuXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgYm9keTogdGhpcy5ib2R5LFxuICAgICAgYm9keVVzZWQ6IHRoaXMuYm9keVVzZWQsXG4gICAgICBvazogdGhpcy5vayxcbiAgICAgIHJlZGlyZWN0ZWQ6IHRoaXMucmVkaXJlY3RlZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9XG5cbiAgICByZXR1cm4gYFJlc3BvbnNlICR7bm9kZVV0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgcHJvcGVydGllcyl9YFxuICB9XG59XG5cbm1peGluQm9keShSZXNwb25zZSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG4gIHR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvazoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3RlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVzcG9uc2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZSwge1xuICBqc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlc3BvbnNlIChyZXNwb25zZSkge1xuICAvLyBUbyBjbG9uZSBhIHJlc3BvbnNlIHJlc3BvbnNlLCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSwgdGhlbiByZXR1cm4gYSBuZXcgaWRlbnRpY2FsXG4gIC8vIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsIHJlc3BvbnNlIGlzIGEgY2xvbmUgb2YgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLlxuICBpZiAocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHJldHVybiBmaWx0ZXJSZXNwb25zZShcbiAgICAgIGNsb25lUmVzcG9uc2UocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSksXG4gICAgICByZXNwb25zZS50eXBlXG4gICAgKVxuICB9XG5cbiAgLy8gMi4gTGV0IG5ld1Jlc3BvbnNlIGJlIGEgY29weSBvZiByZXNwb25zZSwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyAuLi5yZXNwb25zZSwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBuZXdSZXNwb25zZVx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXNwb25zZS5ib2R5ID0gY2xvbmVCb2R5KG5ld1Jlc3BvbnNlLCByZXNwb25zZS5ib2R5KVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5ld1Jlc3BvbnNlLlxuICByZXR1cm4gbmV3UmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gbWFrZVJlc3BvbnNlIChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgcmFuZ2VSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93UGFzc2VkOiBmYWxzZSxcbiAgICByZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFsczogZmFsc2UsXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIHN0YXR1czogMjAwLFxuICAgIHRpbWluZ0luZm86IG51bGwsXG4gICAgY2FjaGVTdGF0ZTogJycsXG4gICAgc3RhdHVzVGV4dDogJycsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdD8uaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQ/LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKSxcbiAgICB1cmxMaXN0OiBpbml0Py51cmxMaXN0ID8gWy4uLmluaXQudXJsTGlzdF0gOiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXR3b3JrRXJyb3IgKHJlYXNvbikge1xuICBjb25zdCBpc0Vycm9yID0gaXNFcnJvckxpa2UocmVhc29uKVxuICByZXR1cm4gbWFrZVJlc3BvbnNlKHtcbiAgICB0eXBlOiAnZXJyb3InLFxuICAgIHN0YXR1czogMCxcbiAgICBlcnJvcjogaXNFcnJvclxuICAgICAgPyByZWFzb25cbiAgICAgIDogbmV3IEVycm9yKHJlYXNvbiA/IFN0cmluZyhyZWFzb24pIDogcmVhc29uKSxcbiAgICBhYm9ydGVkOiByZWFzb24gJiYgcmVhc29uLm5hbWUgPT09ICdBYm9ydEVycm9yJ1xuICB9KVxufVxuXG4vLyBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIGlzTmV0d29ya0Vycm9yIChyZXNwb25zZSkge1xuICByZXR1cm4gKFxuICAgIC8vIEEgbmV0d29yayBlcnJvciBpcyBhIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJlcnJvclwiLFxuICAgIHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiZcbiAgICAvLyBzdGF0dXMgaXMgMFxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMFxuICApXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWx0ZXJlZFJlc3BvbnNlIChyZXNwb25zZSwgc3RhdGUpIHtcbiAgc3RhdGUgPSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgLi4uc3RhdGVcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICBnZXQgKHRhcmdldCwgcCkge1xuICAgICAgcmV0dXJuIHAgaW4gc3RhdGUgPyBzdGF0ZVtwXSA6IHRhcmdldFtwXVxuICAgIH0sXG4gICAgc2V0ICh0YXJnZXQsIHAsIHZhbHVlKSB7XG4gICAgICBhc3NlcnQoIShwIGluIHN0YXRlKSlcbiAgICAgIHRhcmdldFtwXSA9IHZhbHVlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZmlsdGVyZWQtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbHRlclJlc3BvbnNlIChyZXNwb25zZSwgdHlwZSkge1xuICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICBpZiAodHlwZSA9PT0gJ2Jhc2ljJykge1xuICAgIC8vIEEgYmFzaWMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiYmFzaWNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3RcbiAgICAvLyB3aG9zZSBuYW1lIGlzIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnYmFzaWMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY29ycycpIHtcbiAgICAvLyBBIENPUlMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiY29yc1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJcbiAgICAvLyBsaXN0IHdob3NlIG5hbWUgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lLCBnaXZlblxuICAgIC8vIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdC5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2NvcnMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlJykge1xuICAgIC8vIEFuIG9wYXF1ZSBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXNcbiAgICAvLyBcIm9wYXF1ZVwiLCBVUkwgbGlzdCBpcyB0aGUgZW1wdHkgbGlzdCwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlXG4gICAgLy8gaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlJyxcbiAgICAgIHVybExpc3Q6IE9iamVjdC5mcmVlemUoW10pLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlcmVkaXJlY3QnKSB7XG4gICAgLy8gQW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZVxuICAgIC8vIGlzIFwib3BhcXVlcmVkaXJlY3RcIiwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlIGlzIHRoZSBlbXB0eSBieXRlXG4gICAgLy8gc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlcmVkaXJlY3QnLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBoZWFkZXJzTGlzdDogW10sXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcHJvcHJpYXRlLW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvciAoZmV0Y2hQYXJhbXMsIGVyciA9IG51bGwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZC5cbiAgYXNzZXJ0KGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSlcblxuICAvLyAyLiBSZXR1cm4gYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yIGlmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQ7XG4gIC8vIG90aGVyd2lzZSByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICByZXR1cm4gaXNBYm9ydGVkKGZldGNoUGFyYW1zKVxuICAgID8gbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSwgeyBjYXVzZTogZXJyIH0pKVxuICAgIDogbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1JlcXVlc3Qgd2FzIGNhbmNlbGxlZC4nKSwgeyBjYXVzZTogZXJyIH0pKVxufVxuXG4vLyBodHRwczovL3doYXRwci5vcmcvZmV0Y2gvMTM5Mi5odG1sI2luaXRpYWxpemUtYS1yZXNwb25zZVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlc3BvbnNlIChyZXNwb25zZSwgaW5pdCwgYm9keSkge1xuICAvLyAxLiBJZiBpbml0W1wic3RhdHVzXCJdIGlzIG5vdCBpbiB0aGUgcmFuZ2UgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLCB0aGVuXG4gIC8vICAgIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgaWYgKGluaXQuc3RhdHVzICE9PSBudWxsICYmIChpbml0LnN0YXR1cyA8IDIwMCB8fCBpbml0LnN0YXR1cyA+IDU5OSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5pdFtcInN0YXR1c1wiXSBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiAyMDAgdG8gNTk5LCBpbmNsdXNpdmUuJylcbiAgfVxuXG4gIC8vIDIuIElmIGluaXRbXCJzdGF0dXNUZXh0XCJdIGRvZXMgbm90IG1hdGNoIHRoZSByZWFzb24tcGhyYXNlIHRva2VuIHByb2R1Y3Rpb24sXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIC8vIFNlZSwgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4xLjI6XG4gICAgLy8gICByZWFzb24tcGhyYXNlICA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICAgIGlmICghaXNWYWxpZFJlYXNvblBocmFzZShTdHJpbmcoaW5pdC5zdGF0dXNUZXh0KSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RhdHVzVGV4dCcpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIGluaXRbXCJzdGF0dXNcIl0uXG4gIGlmICgnc3RhdHVzJyBpbiBpbml0ICYmIGluaXQuc3RhdHVzICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1cyA9IGluaXQuc3RhdHVzXG4gIH1cblxuICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZSB0byBpbml0W1wic3RhdHVzVGV4dFwiXS5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXNUZXh0ID0gaW5pdC5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyA1LiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gZmlsbCByZXNwb25zZVx1MjAxOXMgaGVhZGVycyB3aXRoIGluaXRbXCJoZWFkZXJzXCJdLlxuICBpZiAoJ2hlYWRlcnMnIGluIGluaXQgJiYgaW5pdC5oZWFkZXJzICE9IG51bGwpIHtcbiAgICBmaWxsKHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5pdC5oZWFkZXJzKVxuICB9XG5cbiAgLy8gNi4gSWYgYm9keSB3YXMgZ2l2ZW4sIHRoZW46XG4gIGlmIChib2R5KSB7XG4gICAgLy8gMS4gSWYgcmVzcG9uc2UncyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9YFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UncyBib2R5IHRvIGJvZHkncyBib2R5LlxuICAgIHJlc3BvbnNlW2tTdGF0ZV0uYm9keSA9IGJvZHkuYm9keVxuXG4gICAgLy8gMy4gSWYgYm9keSdzIHR5cGUgaXMgbm9uLW51bGwgYW5kIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpblxuICAgIC8vICAgIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtVHlwZWAsIGJvZHkncyB0eXBlKSB0byByZXNwb25zZSdzIGhlYWRlciBsaXN0LlxuICAgIGlmIChib2R5LnR5cGUgIT0gbnVsbCAmJiAhcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5jb250YWlucygnY29udGVudC10eXBlJywgdHJ1ZSkpIHtcbiAgICAgIHJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LXR5cGUnLCBib2R5LnR5cGUsIHRydWUpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY3JlYXRlXG4gKiBAcGFyYW0ge2FueX0gaW5uZXJSZXNwb25zZVxuICogQHBhcmFtIHsncmVxdWVzdCcgfCAnaW1tdXRhYmxlJyB8ICdyZXF1ZXN0LW5vLWNvcnMnIHwgJ3Jlc3BvbnNlJyB8ICdub25lJ30gZ3VhcmRcbiAqIEByZXR1cm5zIHtSZXNwb25zZX1cbiAqL1xuZnVuY3Rpb24gZnJvbUlubmVyUmVzcG9uc2UgKGlubmVyUmVzcG9uc2UsIGd1YXJkKSB7XG4gIGNvbnN0IHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGtDb25zdHJ1Y3QpXG4gIHJlc3BvbnNlW2tTdGF0ZV0gPSBpbm5lclJlc3BvbnNlXG4gIHJlc3BvbnNlW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gIHNldEhlYWRlcnNMaXN0KHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdClcbiAgc2V0SGVhZGVyc0d1YXJkKHJlc3BvbnNlW2tIZWFkZXJzXSwgZ3VhcmQpXG5cbiAgaWYgKGhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmIGlubmVyUmVzcG9uc2UuYm9keT8uc3RyZWFtKSB7XG4gICAgLy8gSWYgdGhlIHRhcmdldCAocmVzcG9uc2UpIGlzIHJlY2xhaW1lZCwgdGhlIGNsZWFudXAgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IHdpdGhcbiAgICAvLyB0aGUgaGVsZCB2YWx1ZSBwcm92aWRlZCBmb3IgaXQgKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pLiBUaGUgaGVsZCB2YWx1ZSBjYW4gYmUgYW55IHZhbHVlOlxuICAgIC8vIGEgcHJpbWl0aXZlIG9yIGFuIG9iamVjdCwgZXZlbiB1bmRlZmluZWQuIElmIHRoZSBoZWxkIHZhbHVlIGlzIGFuIG9iamVjdCwgdGhlIHJlZ2lzdHJ5IGtlZXBzXG4gICAgLy8gYSBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0IChzbyBpdCBjYW4gcGFzcyBpdCB0byB0aGUgY2xlYW51cCBjYWxsYmFjayBsYXRlcikuIFJld29yZGVkIGZyb21cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GaW5hbGl6YXRpb25SZWdpc3RyeVxuICAgIHN0cmVhbVJlZ2lzdHJ5LnJlZ2lzdGVyKHJlc3BvbnNlLCBuZXcgV2Vha1JlZihpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSlcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlYWRhYmxlU3RyZWFtXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgRm9ybURhdGFcbilcblxud2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgVVJMU2VhcmNoUGFyYW1zXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyN0eXBlZGVmZGVmLXhtbGh0dHByZXF1ZXN0Ym9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIHByZWZpeCwgbmFtZSlcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgcHJlZml4LCBuYW1lLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoViwgcHJlZml4LCBuYW1lKVxuICB9XG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEoViwgcHJlZml4LCBuYW1lLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyhWLCBwcmVmaXgsIG5hbWUpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgbmFtZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdCA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmIChWIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0oViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaW5jbHVkZSBhc3luYyBpdGVyYWJsZXMsXG4gIC8vIHRoaXMgaXMgYW4gdW5kaWNpIGV4dGVuc2lvbi5cbiAgaWYgKFY/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gVlxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQoViwgcHJlZml4LCBhcmd1bWVudClcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMjAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzdGF0dXNUZXh0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNOZXR3b3JrRXJyb3IsXG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2UsXG4gIGZyb21Jbm5lclJlc3BvbnNlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyIChrZXkpIHt9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgYmFja3BvcnRlZCB0byB2MThcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSAmJiBwcm9jZXNzLnZlcnNpb24uc3RhcnRzV2l0aCgndjE4JykpIHtcbiAgICBwcm9jZXNzLl9yYXdEZWJ1ZygnVXNpbmcgY29tcGF0aWJpbGl0eSBXZWFrUmVmIGFuZCBGaW5hbGl6YXRpb25SZWdpc3RyeScpXG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH1cbn1cbiIsICIvKiBnbG9iYWxzIEFib3J0Q29udHJvbGxlciAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBleHRyYWN0Qm9keSwgbWl4aW5Cb2R5LCBjbG9uZUJvZHksIGJvZHlVbnVzYWJsZSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHsgSGVhZGVycywgZmlsbDogZmlsbEhlYWRlcnMsIEhlYWRlcnNMaXN0LCBzZXRIZWFkZXJzR3VhcmQsIGdldEhlYWRlcnNHdWFyZCwgc2V0SGVhZGVyc0xpc3QsIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBGaW5hbGl6YXRpb25SZWdpc3RyeSB9ID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IG5vZGVVdGlsID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHtcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgc2FtZU9yaWdpbixcbiAgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZXF1ZXN0RHVwbGV4XG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UsIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzIH0gPSB1dGlsXG5jb25zdCB7IGtIZWFkZXJzLCBrU2lnbmFsLCBrU3RhdGUsIGtEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGdldE1heExpc3RlbmVycywgc2V0TWF4TGlzdGVuZXJzLCBnZXRFdmVudExpc3RlbmVycywgZGVmYXVsdE1heExpc3RlbmVycyB9ID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKVxuXG5jb25zdCBrQWJvcnRDb250cm9sbGVyID0gU3ltYm9sKCdhYm9ydENvbnRyb2xsZXInKVxuXG5jb25zdCByZXF1ZXN0RmluYWxpemVyID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KCh7IHNpZ25hbCwgYWJvcnQgfSkgPT4ge1xuICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydClcbn0pXG5cbmNvbnN0IGRlcGVuZGVudENvbnRyb2xsZXJNYXAgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGJ1aWxkQWJvcnQgKGFjUmVmKSB7XG4gIHJldHVybiBhYm9ydFxuXG4gIGZ1bmN0aW9uIGFib3J0ICgpIHtcbiAgICBjb25zdCBhYyA9IGFjUmVmLmRlcmVmKClcbiAgICBpZiAoYWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3VycmVudGx5LCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBGaW5hbGl6YXRpb25SZWdpc3RyeS5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDc3NDhcbiAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGFib3J0LCB0aGUgZmlyc3Qgc3RlcCBpcyB0byB1bnJlZ2lzdGVyIGZyb20gaXQuXG4gICAgICAvLyBJZiB0aGUgY29udHJvbGxlciBjYW4gcmVmZXIgdG8gaXQsIGl0IGlzIHN0aWxsIHJlZ2lzdGVyZWQuXG4gICAgICAvLyBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIHJlcXVlc3RGaW5hbGl6ZXIudW5yZWdpc3RlcihhYm9ydClcblxuICAgICAgLy8gVW5zdWJzY3JpYmUgYSBsaXN0ZW5lci5cbiAgICAgIC8vIEZpbmFsaXphdGlvblJlZ2lzdHJ5IHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZCwgc28gdGhpcyBtdXN0IGJlIGRvbmUuXG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG5cbiAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuXG4gICAgICBjb25zdCBjb250cm9sbGVyTGlzdCA9IGRlcGVuZGVudENvbnRyb2xsZXJNYXAuZ2V0KGFjLnNpZ25hbClcblxuICAgICAgaWYgKGNvbnRyb2xsZXJMaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXJMaXN0LnNpemUgIT09IDApIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBjb250cm9sbGVyTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHJlZi5kZXJlZigpXG4gICAgICAgICAgICBpZiAoY3RybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN0cmwuYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xsZXJMaXN0LmNsZWFyKClcbiAgICAgICAgfVxuICAgICAgICBkZXBlbmRlbnRDb250cm9sbGVyTWFwLmRlbGV0ZShhYy5zaWduYWwpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmxldCBwYXRjaE1ldGhvZFdhcm5pbmcgPSBmYWxzZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgaWYgKGlucHV0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSAnUmVxdWVzdCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGlucHV0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8oaW5wdXQsIHByZWZpeCwgJ2lucHV0JylcbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQoaW5pdCwgcHJlZml4LCAnaW5pdCcpXG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5iYXNlVXJsXG5cbiAgICAvLyA0LiBMZXQgc2lnbmFsIGJlIG51bGwuXG4gICAgbGV0IHNpZ25hbCA9IG51bGxcblxuICAgIC8vIDUuIElmIGlucHV0IGlzIGEgc3RyaW5nLCB0aGVuOlxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzW2tEaXNwYXRjaGVyXSA9IGluaXQuZGlzcGF0Y2hlclxuXG4gICAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBpbnB1dCB3aXRoIGJhc2VVUkwuXG4gICAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGxldCBwYXJzZWRVUkxcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwoaW5wdXQsIGJhc2VVcmwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyBpbnB1dCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHBhcnNlZFVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGZyb20gYSBVUkwgdGhhdCBpbmNsdWRlcyBjcmVkZW50aWFsczogJyArXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2hvc2UgVVJMIGlzIHBhcnNlZFVSTC5cbiAgICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IHVybExpc3Q6IFtwYXJzZWRVUkxdIH0pXG5cbiAgICAgIC8vIDUuIFNldCBmYWxsYmFja01vZGUgdG8gXCJjb3JzXCIuXG4gICAgICBmYWxsYmFja01vZGUgPSAnY29ycydcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRGlzcGF0Y2hlcl0gPSBpbml0LmRpc3BhdGNoZXIgfHwgaW5wdXRba0Rpc3BhdGNoZXJdXG5cbiAgICAgIC8vIDYuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNy4gQXNzZXJ0OiBpbnB1dCBpcyBhIFJlcXVlc3Qgb2JqZWN0LlxuICAgICAgYXNzZXJ0KGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdClcblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3QgdG8gaW5wdXRcdTIwMTlzIHJlcXVlc3QuXG4gICAgICByZXF1ZXN0ID0gaW5wdXRba1N0YXRlXVxuXG4gICAgICAvLyA5LiBTZXQgc2lnbmFsIHRvIGlucHV0XHUyMDE5cyBzaWduYWwuXG4gICAgICBzaWduYWwgPSBpbnB1dFtrU2lnbmFsXVxuICAgIH1cblxuICAgIC8vIDcuIExldCBvcmlnaW4gYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBvcmlnaW4uXG4gICAgY29uc3Qgb3JpZ2luID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdFx1MjAxOXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0LFxuICAgICAgLy8gd2luZG93IHdpbmRvdy5cbiAgICAgIHdpbmRvdyxcbiAgICAgIC8vIHByaW9yaXR5IHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5LlxuICAgICAgcHJpb3JpdHk6IHJlcXVlc3QucHJpb3JpdHksXG4gICAgICAvLyBvcmlnaW4gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLiBUaGUgcHJvcGFnYXRpb24gb2YgdGhlIG9yaWdpbiBpcyBvbmx5IHNpZ25pZmljYW50IGZvciBuYXZpZ2F0aW9uIHJlcXVlc3RzXG4gICAgICAvLyBiZWluZyBoYW5kbGVkIGJ5IGEgc2VydmljZSB3b3JrZXIuIEluIHRoaXMgc2NlbmFyaW8gYSByZXF1ZXN0IGNhbiBoYXZlIGFuIG9yaWdpbiB0aGF0IGlzIGRpZmZlcmVudFxuICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCBjbGllbnQuXG4gICAgICBvcmlnaW46IHJlcXVlc3Qub3JpZ2luLFxuICAgICAgLy8gcmVmZXJyZXIgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgICByZWZlcnJlcjogcmVxdWVzdC5yZWZlcnJlcixcbiAgICAgIC8vIHJlZmVycmVyIHBvbGljeSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgICByZWZlcnJlclBvbGljeTogcmVxdWVzdC5yZWZlcnJlclBvbGljeSxcbiAgICAgIC8vIG1vZGUgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICAgIG1vZGU6IHJlcXVlc3QubW9kZSxcbiAgICAgIC8vIGNyZWRlbnRpYWxzIG1vZGUgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0LmNyZWRlbnRpYWxzLFxuICAgICAgLy8gY2FjaGUgbW9kZSByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgICAgY2FjaGU6IHJlcXVlc3QuY2FjaGUsXG4gICAgICAvLyByZWRpcmVjdCBtb2RlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgICByZWRpcmVjdDogcmVxdWVzdC5yZWRpcmVjdCxcbiAgICAgIC8vIGludGVncml0eSBtZXRhZGF0YSByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEuXG4gICAgICBpbnRlZ3JpdHk6IHJlcXVlc3QuaW50ZWdyaXR5LFxuICAgICAgLy8ga2VlcGFsaXZlIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGtlZXBhbGl2ZTogcmVxdWVzdC5rZWVwYWxpdmUsXG4gICAgICAvLyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZWxvYWROYXZpZ2F0aW9uOiByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24sXG4gICAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIGhpc3RvcnlOYXZpZ2F0aW9uOiByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uLFxuICAgICAgLy8gVVJMIGxpc3QgQSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgICAgIHVybExpc3Q6IFsuLi5yZXF1ZXN0LnVybExpc3RdXG4gICAgfSlcblxuICAgIGNvbnN0IGluaXRIYXNLZXkgPSBPYmplY3Qua2V5cyhpbml0KS5sZW5ndGggIT09IDBcblxuICAgIC8vIDEzLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gc2V0IGl0IHRvIFwic2FtZS1vcmlnaW5cIi5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgICAgcmVxdWVzdC5tb2RlID0gJ3NhbWUtb3JpZ2luJ1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBVbnNldCByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gMy4gVW5zZXQgcmVxdWVzdFx1MjAxOXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byBcImNsaWVudFwiLlxuICAgICAgcmVxdWVzdC5vcmlnaW4gPSAnY2xpZW50J1xuXG4gICAgICAvLyA1LiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIlxuICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDYuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSAnJ1xuXG4gICAgICAvLyA3LiBTZXQgcmVxdWVzdFx1MjAxOXMgVVJMIHRvIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbcmVxdWVzdC51cmxMaXN0Lmxlbmd0aCAtIDFdXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgcmVxdWVzdFx1MjAxOXMgVVJMIFx1MDBCQi5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Quc2V0dGluZ3NPYmplY3QuYmFzZVVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnY2xpZW50J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIDQuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIHBhcnNlZFJlZmVycmVyLlxuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSBwYXJzZWRSZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTUuIElmIGluaXRbXCJyZWZlcnJlclBvbGljeVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZmVycmVyUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSBpbml0LnJlZmVycmVyUG9saWN5XG4gICAgfVxuXG4gICAgLy8gMTYuIExldCBtb2RlIGJlIGluaXRbXCJtb2RlXCJdIGlmIGl0IGV4aXN0cywgYW5kIGZhbGxiYWNrTW9kZSBvdGhlcndpc2UuXG4gICAgbGV0IG1vZGVcbiAgICBpZiAoaW5pdC5tb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1vZGUgPSBpbml0Lm1vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kZSA9IGZhbGxiYWNrTW9kZVxuICAgIH1cblxuICAgIC8vIDE3LiBJZiBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgcmVxdWVzdCBtb2RlIG5hdmlnYXRlLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMTguIElmIG1vZGUgaXMgbm9uLW51bGwsIHNldCByZXF1ZXN0XHUyMDE5cyBtb2RlIHRvIG1vZGUuXG4gICAgaWYgKG1vZGUgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5tb2RlID0gbW9kZVxuICAgIH1cblxuICAgIC8vIDE5LiBJZiBpbml0W1wiY3JlZGVudGlhbHNcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlXG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQuY3JlZGVudGlhbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jcmVkZW50aWFscyA9IGluaXQuY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgaW5pdFtcImNhY2hlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5jYWNoZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNhY2hlID0gaW5pdC5jYWNoZVxuICAgIH1cblxuICAgIC8vIDIxLiBJZiByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiBhbmQgcmVxdWVzdFx1MjAxOXMgbW9kZSBpc1xuICAgIC8vIG5vdCBcInNhbWUtb3JpZ2luXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHJlcXVlc3QuY2FjaGUgPT09ICdvbmx5LWlmLWNhY2hlZCcgJiYgcmVxdWVzdC5tb2RlICE9PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIidvbmx5LWlmLWNhY2hlZCcgY2FuIGJlIHNldCBvbmx5IHdpdGggJ3NhbWUtb3JpZ2luJyBtb2RlXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAyMi4gSWYgaW5pdFtcInJlZGlyZWN0XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWRpcmVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZGlyZWN0ID0gaW5pdC5yZWRpcmVjdFxuICAgIH1cblxuICAgIC8vIDIzLiBJZiBpbml0W1wiaW50ZWdyaXR5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIHRvIGl0LlxuICAgIGlmIChpbml0LmludGVncml0eSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0LmludGVncml0eSA9IFN0cmluZyhpbml0LmludGVncml0eSlcbiAgICB9XG5cbiAgICAvLyAyNC4gSWYgaW5pdFtcImtlZXBhbGl2ZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZSB0byBpdC5cbiAgICBpZiAoaW5pdC5rZWVwYWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5rZWVwYWxpdmUgPSBCb29sZWFuKGluaXQua2VlcGFsaXZlKVxuICAgIH1cblxuICAgIC8vIDI1LiBJZiBpbml0W1wibWV0aG9kXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IG1ldGhvZCBiZSBpbml0W1wibWV0aG9kXCJdLlxuICAgICAgbGV0IG1ldGhvZCA9IGluaXQubWV0aG9kXG5cbiAgICAgIGNvbnN0IG1heUJlTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzW21ldGhvZF1cblxuICAgICAgaWYgKG1heUJlTm9ybWFsaXplZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIE5vdGU6IEJ5cGFzcyB2YWxpZGF0aW9uIERFTEVURSwgR0VULCBIRUFELCBPUFRJT05TLCBQT1NULCBQVVQsIFBBVENIIGFuZCB0aGVzZSBsb3dlcmNhc2Ugb25lc1xuICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9IG1heUJlTm9ybWFsaXplZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAgIC8vIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBpZiAoIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cHBlckNhc2UgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuXG4gICAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0Lmhhcyh1cHBlckNhc2UpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIE5vcm1hbGl6ZSBtZXRob2QuXG4gICAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAgICAgICAgLy8gTm90ZTogbXVzdCBiZSBpbiB1cHBlcmNhc2VcbiAgICAgICAgbWV0aG9kID0gbm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlW3VwcGVyQ2FzZV0gPz8gbWV0aG9kXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG1ldGhvZCB0byBtZXRob2QuXG4gICAgICAgIHJlcXVlc3QubWV0aG9kID0gbWV0aG9kXG4gICAgICB9XG5cbiAgICAgIGlmICghcGF0Y2hNZXRob2RXYXJuaW5nICYmIHJlcXVlc3QubWV0aG9kID09PSAncGF0Y2gnKSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1VzaW5nIGBwYXRjaGAgaXMgaGlnaGx5IGxpa2VseSB0byByZXN1bHQgaW4gYSBgNDA1IE1ldGhvZCBOb3QgQWxsb3dlZGAuIGBQQVRDSGAgaXMgbXVjaCBtb3JlIGxpa2VseSB0byBzdWNjZWVkLicsIHtcbiAgICAgICAgICBjb2RlOiAnVU5ESUNJLUZFVENILXBhdGNoJ1xuICAgICAgICB9KVxuXG4gICAgICAgIHBhdGNoTWV0aG9kV2FybmluZyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXNcdTIwMTlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc1x1MjAxOXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBidWlsZEFib3J0KGFjUmVmKVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTUwMCwgc2lnbmFsKVxuICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0RXZlbnRMaXN0ZW5lcnMoc2lnbmFsLCAnYWJvcnQnKS5sZW5ndGggPj0gZGVmYXVsdE1heExpc3RlbmVycykge1xuICAgICAgICAgICAgc2V0TWF4TGlzdGVuZXJzKDE1MDAsIHNpZ25hbClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBhYm9ydClcbiAgICAgICAgLy8gVGhlIHRoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSByZWdpc3RyeSBrZXkgdG8gYmUgdW5yZWdpc3RlcmVkLlxuICAgICAgICAvLyBXaXRob3V0IGl0LCB5b3UgY2Fubm90IHVucmVnaXN0ZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ZpbmFsaXphdGlvblJlZ2lzdHJ5XG4gICAgICAgIC8vIGFib3J0IGlzIHVzZWQgYXMgdGhlIHVucmVnaXN0ZXIga2V5LiAoYmVjYXVzZSBpdCBpcyB1bmlxdWUpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9LCBhYm9ydClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMC4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmQgaXNcbiAgICAvLyBcInJlcXVlc3RcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgc2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10sIHJlcXVlc3QuaGVhZGVyc0xpc3QpXG4gICAgc2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdLCAncmVxdWVzdCcpXG5cbiAgICAvLyAzMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgc2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdLCAncmVxdWVzdC1uby1jb3JzJylcbiAgICB9XG5cbiAgICAvLyAzMi4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGVhZGVyc0xpc3R9ICovXG4gICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IGdldEhlYWRlcnNMaXN0KHRoaXNba0hlYWRlcnNdKVxuICAgICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYSBjb3B5IG9mIHRoaXNcdTIwMTlzIGhlYWRlcnMgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlclxuICAgICAgLy8gbGlzdC5cbiAgICAgIC8vIDIuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBzZXQgaGVhZGVycyB0byBpbml0W1wiaGVhZGVyc1wiXS5cbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBpbml0LmhlYWRlcnMgIT09IHVuZGVmaW5lZCA/IGluaXQuaGVhZGVycyA6IG5ldyBIZWFkZXJzTGlzdChoZWFkZXJzTGlzdClcblxuICAgICAgLy8gMy4gRW1wdHkgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICBoZWFkZXJzTGlzdC5jbGVhcigpXG5cbiAgICAgIC8vIDQuIElmIGhlYWRlcnMgaXMgYSBIZWFkZXJzIG9iamVjdCwgdGhlbiBmb3IgZWFjaCBoZWFkZXIgaW4gaXRzIGhlYWRlclxuICAgICAgLy8gbGlzdCwgYXBwZW5kIGhlYWRlclx1MjAxOXMgbmFtZS9oZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGhlYWRlcnMucmF3VmFsdWVzKCkpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQobmFtZSwgdmFsdWUsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IENvcHkgdGhlIGBzZXQtY29va2llYCBtZXRhLWRhdGEuXG4gICAgICAgIGhlYWRlcnNMaXN0LmNvb2tpZXMgPSBoZWFkZXJzLmNvb2tpZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDUuIE90aGVyd2lzZSwgZmlsbCB0aGlzXHUyMDE5cyBoZWFkZXJzIHdpdGggaGVhZGVycy5cbiAgICAgICAgZmlsbEhlYWRlcnModGhpc1trSGVhZGVyc10sIGhlYWRlcnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzMuIExldCBpbnB1dEJvZHkgYmUgaW5wdXRcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgaWYgaW5wdXQgaXMgYSBSZXF1ZXN0XG4gICAgLy8gb2JqZWN0OyBvdGhlcndpc2UgbnVsbC5cbiAgICBjb25zdCBpbnB1dEJvZHkgPSBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpbnB1dFtrU3RhdGVdLmJvZHkgOiBudWxsXG5cbiAgICAvLyAzNC4gSWYgZWl0aGVyIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwgb3IgaW5wdXRCb2R5IGlzXG4gICAgLy8gbm9uLW51bGwsIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYEdFVGAgb3IgYEhFQURgLCB0aGVuIHRocm93IGFcbiAgICAvLyBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgKGluaXQuYm9keSAhPSBudWxsIHx8IGlucHV0Qm9keSAhPSBudWxsKSAmJlxuICAgICAgKHJlcXVlc3QubWV0aG9kID09PSAnR0VUJyB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5LicpXG4gICAgfVxuXG4gICAgLy8gMzUuIExldCBpbml0Qm9keSBiZSBudWxsLlxuICAgIGxldCBpbml0Qm9keSA9IG51bGxcblxuICAgIC8vIDM2LiBJZiBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0LmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMS4gTGV0IENvbnRlbnQtVHlwZSBiZSBudWxsLlxuICAgICAgLy8gMi4gU2V0IGluaXRCb2R5IGFuZCBDb250ZW50LVR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nXG4gICAgICAvLyBpbml0W1wiYm9keVwiXSwgd2l0aCBrZWVwYWxpdmUgc2V0IHRvIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShcbiAgICAgICAgaW5pdC5ib2R5LFxuICAgICAgICByZXF1ZXN0LmtlZXBhbGl2ZVxuICAgICAgKVxuICAgICAgaW5pdEJvZHkgPSBleHRyYWN0ZWRCb2R5XG5cbiAgICAgIC8vIDMsIElmIENvbnRlbnQtVHlwZSBpcyBub24tbnVsbCBhbmQgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lc1xuICAgICAgLy8gbm90IGNvbnRhaW4gYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIGBDb250ZW50LVR5cGVgL0NvbnRlbnQtVHlwZSB0b1xuICAgICAgLy8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChjb250ZW50VHlwZSAmJiAhZ2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10pLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnLCB0cnVlKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHlcdTIwMTlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChib2R5VW51c2FibGUoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIC8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWNyZWF0ZS1hLXByb3h5XG4gICAgICBjb25zdCBpZGVudGl0eVRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oKVxuICAgICAgaW5wdXRCb2R5LnN0cmVhbS5waXBlVGhyb3VnaChpZGVudGl0eVRyYW5zZm9ybSlcbiAgICAgIGZpbmFsQm9keSA9IHtcbiAgICAgICAgc291cmNlOiBpbnB1dEJvZHkuc291cmNlLFxuICAgICAgICBsZW5ndGg6IGlucHV0Qm9keS5sZW5ndGgsXG4gICAgICAgIHN0cmVhbTogaWRlbnRpdHlUcmFuc2Zvcm0ucmVhZGFibGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0MS4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gZmluYWxCb2R5LlxuICAgIHRoaXNba1N0YXRlXS5ib2R5ID0gZmluYWxCb2R5XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIEhUVFAgbWV0aG9kLCB3aGljaCBpcyBcIkdFVFwiIGJ5IGRlZmF1bHQuXG4gIGdldCBtZXRob2QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbWV0aG9kIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1ldGhvZFxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgVVJMIG9mIHJlcXVlc3QgYXMgYSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tTdGF0ZV0udXJsKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIEhlYWRlcnMgb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGhlYWRlcnMgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIE5vdGUgdGhhdCBoZWFkZXJzIGFkZGVkIGluIHRoZSBuZXR3b3JrIGxheWVyIGJ5IHRoZSB1c2VyIGFnZW50IHdpbGwgbm90XG4gIC8vIGJlIGFjY291bnRlZCBmb3IgaW4gdGhpcyBvYmplY3QsIGUuZy4sIHRoZSBcIkhvc3RcIiBoZWFkZXIuXG4gIGdldCBoZWFkZXJzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGtpbmQgb2YgcmVzb3VyY2UgcmVxdWVzdGVkIGJ5IHJlcXVlc3QsIGUuZy4sIFwiZG9jdW1lbnRcIlxuICAvLyBvciBcInNjcmlwdFwiLlxuICBnZXQgZGVzdGluYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgZGVzdGluYXRpb24gZ2V0dGVyIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24uXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5kZXN0aW5hdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgb2YgcmVxdWVzdC4gSXRzIHZhbHVlIGNhbiBiZSBhIHNhbWUtb3JpZ2luIFVSTCBpZlxuICAvLyBleHBsaWNpdGx5IHNldCBpbiBpbml0LCB0aGUgZW1wdHkgc3RyaW5nIHRvIGluZGljYXRlIG5vIHJlZmVycmVyLCBhbmRcbiAgLy8gXCJhYm91dDpjbGllbnRcIiB3aGVuIGRlZmF1bHRpbmcgdG8gdGhlIGdsb2JhbFx1MjAxOXMgZGVmYXVsdC4gVGhpcyBpcyB1c2VkXG4gIC8vIGR1cmluZyBmZXRjaGluZyB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoZSBgUmVmZXJlcmAgaGVhZGVyIG9mIHRoZVxuICAvLyByZXF1ZXN0IGJlaW5nIG1hZGUuXG4gIGdldCByZWZlcnJlciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwibm8tcmVmZXJyZXJcIiwgdGhlbiByZXR1cm4gdGhlXG4gICAgLy8gZW1wdHkgc3RyaW5nLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICduby1yZWZlcnJlcicpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwiY2xpZW50XCIsIHRoZW4gcmV0dXJuXG4gICAgLy8gXCJhYm91dDpjbGllbnRcIi5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnY2xpZW50Jykge1xuICAgICAgcmV0dXJuICdhYm91dDpjbGllbnQnXG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXIudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBUaGlzIGlzIHVzZWQgZHVyaW5nIGZldGNoaW5nIHRvIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlci5cbiAgZ2V0IHJlZmVycmVyUG9saWN5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZmVycmVyUG9saWN5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyUG9saWN5XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nXG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3Qgd2lsbCB1c2UgQ09SUywgb3Igd2lsbCBiZSByZXN0cmljdGVkIHRvIHNhbWUtb3JpZ2luXG4gIC8vIFVSTHMuXG4gIGdldCBtb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1vZGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1vZGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNyZWRlbnRpYWxzIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGVcbiAgLy8gcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgZ2V0IGNyZWRlbnRpYWxzICgpIHtcbiAgICAvLyBUaGUgY3JlZGVudGlhbHMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjYWNoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyB0aGUgcmVxdWVzdCB3aWxsXG4gIC8vIGludGVyYWN0IHdpdGggdGhlIGJyb3dzZXJcdTIwMTlzIGNhY2hlIHdoZW4gZmV0Y2hpbmcuXG4gIGdldCBjYWNoZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBjYWNoZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY2FjaGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZGlyZWN0IG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHJlZGlyZWN0cyBmb3IgdGhlXG4gIC8vIHJlcXVlc3Qgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBmZXRjaGluZy4gQSByZXF1ZXN0XG4gIC8vIHdpbGwgZm9sbG93IHJlZGlyZWN0cyBieSBkZWZhdWx0LlxuICBnZXQgcmVkaXJlY3QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZGlyZWN0XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIHN1YnJlc291cmNlIGludGVncml0eSBtZXRhZGF0YSwgd2hpY2ggaXMgYVxuICAvLyBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIHJlc291cmNlIGJlaW5nIGZldGNoZWQuIEl0cyB2YWx1ZVxuICAvLyBjb25zaXN0cyBvZiBtdWx0aXBsZSBoYXNoZXMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuIFtTUkldXG4gIGdldCBpbnRlZ3JpdHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaW50ZWdyaXR5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGludGVncml0eVxuICAgIC8vIG1ldGFkYXRhLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaW50ZWdyaXR5XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgY2FuIG91dGxpdmUgdGhlXG4gIC8vIGdsb2JhbCBpbiB3aGljaCBpdCB3YXMgY3JlYXRlZC5cbiAgZ2V0IGtlZXBhbGl2ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBrZWVwYWxpdmUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ua2VlcGFsaXZlXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgcmVsb2FkXG4gIC8vIG5hdmlnYXRpb24uXG4gIGdldCBpc1JlbG9hZE5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNSZWxvYWROYXZpZ2F0aW9uIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVsb2FkTmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIGhpc3RvcnlcbiAgLy8gbmF2aWdhdGlvbiAoYS5rLmEuIGJhY2stZm9yd2FyZCBuYXZpZ2F0aW9uKS5cbiAgZ2V0IGlzSGlzdG9yeU5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNIaXN0b3J5TmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5oaXN0b3J5TmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgc2lnbmFsIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhbiBBYm9ydFNpZ25hbFxuICAvLyBvYmplY3QgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQsIGFuZCBpdHNcbiAgLy8gYWJvcnQgZXZlbnQgaGFuZGxlci5cbiAgZ2V0IHNpZ25hbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBzaWduYWwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIHJldHVybiB0aGlzW2tTaWduYWxdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgZ2V0IGR1cGxleCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAnaGFsZidcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXF1ZXN0LlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGJvZHlVbnVzYWJsZSh0aGlzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW51c2FibGUnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXF1ZXN0IGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXF1ZXN0LlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gTGV0IGNsb25lZFJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlcXVlc3Qgb2JqZWN0LFxuICAgIC8vIGdpdmVuIGNsb25lZFJlcXVlc3QsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWwgZm9sbG93IHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsaXN0ID0gZGVwZW5kZW50Q29udHJvbGxlck1hcC5nZXQodGhpcy5zaWduYWwpXG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxpc3QgPSBuZXcgU2V0KClcbiAgICAgICAgZGVwZW5kZW50Q29udHJvbGxlck1hcC5zZXQodGhpcy5zaWduYWwsIGxpc3QpXG4gICAgICB9XG4gICAgICBjb25zdCBhY1JlZiA9IG5ldyBXZWFrUmVmKGFjKVxuICAgICAgbGlzdC5hZGQoYWNSZWYpXG4gICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoXG4gICAgICAgIGFjLnNpZ25hbCxcbiAgICAgICAgYnVpbGRBYm9ydChhY1JlZilcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdC5cbiAgICByZXR1cm4gZnJvbUlubmVyUmVxdWVzdChjbG9uZWRSZXF1ZXN0LCBhYy5zaWduYWwsIGdldEhlYWRlcnNHdWFyZCh0aGlzW2tIZWFkZXJzXSkpXG4gIH1cblxuICBbbm9kZVV0aWwuaW5zcGVjdC5jdXN0b21dIChkZXB0aCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmRlcHRoID09PSBudWxsKSB7XG4gICAgICBvcHRpb25zLmRlcHRoID0gMlxuICAgIH1cblxuICAgIG9wdGlvbnMuY29sb3JzID8/PSB0cnVlXG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICBkZXN0aW5hdGlvbjogdGhpcy5kZXN0aW5hdGlvbixcbiAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgcmVmZXJyZXJQb2xpY3k6IHRoaXMucmVmZXJyZXJQb2xpY3ksXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgcmVkaXJlY3Q6IHRoaXMucmVkaXJlY3QsXG4gICAgICBpbnRlZ3JpdHk6IHRoaXMuaW50ZWdyaXR5LFxuICAgICAga2VlcGFsaXZlOiB0aGlzLmtlZXBhbGl2ZSxcbiAgICAgIGlzUmVsb2FkTmF2aWdhdGlvbjogdGhpcy5pc1JlbG9hZE5hdmlnYXRpb24sXG4gICAgICBpc0hpc3RvcnlOYXZpZ2F0aW9uOiB0aGlzLmlzSGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICBzaWduYWw6IHRoaXMuc2lnbmFsXG4gICAgfVxuXG4gICAgcmV0dXJuIGBSZXF1ZXN0ICR7bm9kZVV0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgcHJvcGVydGllcyl9YFxuICB9XG59XG5cbm1peGluQm9keShSZXF1ZXN0KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHNcbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0IChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBpbml0Lm1ldGhvZCA/PyAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBpbml0LmxvY2FsVVJMc09ubHkgPz8gZmFsc2UsXG4gICAgdW5zYWZlUmVxdWVzdDogaW5pdC51bnNhZmVSZXF1ZXN0ID8/IGZhbHNlLFxuICAgIGJvZHk6IGluaXQuYm9keSA/PyBudWxsLFxuICAgIGNsaWVudDogaW5pdC5jbGllbnQgPz8gbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogaW5pdC5yZXNlcnZlZENsaWVudCA/PyBudWxsLFxuICAgIHJlcGxhY2VzQ2xpZW50SWQ6IGluaXQucmVwbGFjZXNDbGllbnRJZCA/PyAnJyxcbiAgICB3aW5kb3c6IGluaXQud2luZG93ID8/ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogaW5pdC5rZWVwYWxpdmUgPz8gZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6IGluaXQuc2VydmljZVdvcmtlcnMgPz8gJ2FsbCcsXG4gICAgaW5pdGlhdG9yOiBpbml0LmluaXRpYXRvciA/PyAnJyxcbiAgICBkZXN0aW5hdGlvbjogaW5pdC5kZXN0aW5hdGlvbiA/PyAnJyxcbiAgICBwcmlvcml0eTogaW5pdC5wcmlvcml0eSA/PyBudWxsLFxuICAgIG9yaWdpbjogaW5pdC5vcmlnaW4gPz8gJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiBpbml0LnBvbGljeUNvbnRhaW5lciA/PyAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogaW5pdC5yZWZlcnJlciA/PyAnY2xpZW50JyxcbiAgICByZWZlcnJlclBvbGljeTogaW5pdC5yZWZlcnJlclBvbGljeSA/PyAnJyxcbiAgICBtb2RlOiBpbml0Lm1vZGUgPz8gJ25vLWNvcnMnLFxuICAgIHVzZUNPUlNQcmVmbGlnaHRGbGFnOiBpbml0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID8/IGZhbHNlLFxuICAgIGNyZWRlbnRpYWxzOiBpbml0LmNyZWRlbnRpYWxzID8/ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGluaXQudXNlQ3JlZGVudGlhbHMgPz8gZmFsc2UsXG4gICAgY2FjaGU6IGluaXQuY2FjaGUgPz8gJ2RlZmF1bHQnLFxuICAgIHJlZGlyZWN0OiBpbml0LnJlZGlyZWN0ID8/ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogaW5pdC5pbnRlZ3JpdHkgPz8gJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiBpbml0LmNyeXB0b0dyYXBoaWNzTm9uY2VNZXRhZGF0YSA/PyAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogaW5pdC5wYXJzZXJNZXRhZGF0YSA/PyAnJyxcbiAgICByZWxvYWROYXZpZ2F0aW9uOiBpbml0LnJlbG9hZE5hdmlnYXRpb24gPz8gZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGluaXQuaGlzdG9yeU5hdmlnYXRpb24gPz8gZmFsc2UsXG4gICAgdXNlckFjdGl2YXRpb246IGluaXQudXNlckFjdGl2YXRpb24gPz8gZmFsc2UsXG4gICAgdGFpbnRlZE9yaWdpbjogaW5pdC50YWludGVkT3JpZ2luID8/IGZhbHNlLFxuICAgIHJlZGlyZWN0Q291bnQ6IGluaXQucmVkaXJlY3RDb3VudCA/PyAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6IGluaXQucmVzcG9uc2VUYWludGluZyA/PyAnYmFzaWMnLFxuICAgIHByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uOiBpbml0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uID8/IGZhbHNlLFxuICAgIGRvbmU6IGluaXQuZG9uZSA/PyBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd0ZhaWxlZDogaW5pdC50aW1pbmdBbGxvd0ZhaWxlZCA/PyBmYWxzZSxcbiAgICB1cmxMaXN0OiBpbml0LnVybExpc3QsXG4gICAgdXJsOiBpbml0LnVybExpc3RbMF0sXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXF1ZXN0IChyZXF1ZXN0KSB7XG4gIC8vIFRvIGNsb25lIGEgcmVxdWVzdCByZXF1ZXN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gTGV0IG5ld1JlcXVlc3QgYmUgYSBjb3B5IG9mIHJlcXVlc3QsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1JlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IC4uLnJlcXVlc3QsIGJvZHk6IG51bGwgfSlcblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBzZXQgbmV3UmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVxdWVzdFx1MjAxOXMgYm9keS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVxdWVzdC5ib2R5ID0gY2xvbmVCb2R5KG5ld1JlcXVlc3QsIHJlcXVlc3QuYm9keSlcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBuZXdSZXF1ZXN0LlxuICByZXR1cm4gbmV3UmVxdWVzdFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtY3JlYXRlXG4gKiBAcGFyYW0ge2FueX0gaW5uZXJSZXF1ZXN0XG4gKiBAcGFyYW0ge0Fib3J0U2lnbmFsfSBzaWduYWxcbiAqIEBwYXJhbSB7J3JlcXVlc3QnIHwgJ2ltbXV0YWJsZScgfCAncmVxdWVzdC1uby1jb3JzJyB8ICdyZXNwb25zZScgfCAnbm9uZSd9IGd1YXJkXG4gKiBAcmV0dXJucyB7UmVxdWVzdH1cbiAqL1xuZnVuY3Rpb24gZnJvbUlubmVyUmVxdWVzdCAoaW5uZXJSZXF1ZXN0LCBzaWduYWwsIGd1YXJkKSB7XG4gIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChrQ29uc3RydWN0KVxuICByZXF1ZXN0W2tTdGF0ZV0gPSBpbm5lclJlcXVlc3RcbiAgcmVxdWVzdFtrU2lnbmFsXSA9IHNpZ25hbFxuICByZXF1ZXN0W2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gIHNldEhlYWRlcnNMaXN0KHJlcXVlc3Rba0hlYWRlcnNdLCBpbm5lclJlcXVlc3QuaGVhZGVyc0xpc3QpXG4gIHNldEhlYWRlcnNHdWFyZChyZXF1ZXN0W2tIZWFkZXJzXSwgZ3VhcmQpXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlcXVlc3QucHJvdG90eXBlLCB7XG4gIG1ldGhvZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNpZ25hbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZHVwbGV4OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZXN0aW5hdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzSGlzdG9yeU5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzUmVsb2FkTmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2VlcGFsaXZlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbnRlZ3JpdHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNhY2hlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYXR0cmlidXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlclBvbGljeToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1vZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXF1ZXN0JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlcXVlc3RcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RpbmZvXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdChWLCBwcmVmaXgsIGFyZ3VtZW50KVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBwcmVmaXgsIGFyZ3VtZW50KVxufVxuXG53ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEFib3J0U2lnbmFsXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdtZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9LFxuICB7XG4gICAga2V5OiAnYm9keScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdFxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXJQb2xpY3knLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY3lcbiAgICBhbGxvd2VkVmFsdWVzOiByZWZlcnJlclBvbGljeVxuICB9LFxuICB7XG4gICAga2V5OiAnbW9kZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1tb2RlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdE1vZGVcbiAgfSxcbiAge1xuICAgIGtleTogJ2NyZWRlbnRpYWxzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNyZWRlbnRpYWxzXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENyZWRlbnRpYWxzXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYWNoZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjYWNoZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDYWNoZVxuICB9LFxuICB7XG4gICAga2V5OiAncmVkaXJlY3QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0cmVkaXJlY3RcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0UmVkaXJlY3RcbiAgfSxcbiAge1xuICAgIGtleTogJ2ludGVncml0eScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2tlZXBhbGl2ZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzaWduYWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgKHNpZ25hbCkgPT4gd2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwoXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgJ1JlcXVlc3RJbml0JyxcbiAgICAgICAgJ3NpZ25hbCcsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9XG4gICAgICApXG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAnd2luZG93JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9LFxuICB7XG4gICAga2V5OiAnZHVwbGV4JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0RHVwbGV4XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJywgLy8gdW5kaWNpIHNwZWNpZmljIG9wdGlvblxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0geyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCwgZnJvbUlubmVyUmVxdWVzdCwgY2xvbmVSZXF1ZXN0IH1cbiIsICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIG1ha2VSZXNwb25zZSxcbiAgZnJvbUlubmVyUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IFJlcXVlc3QsIGNsb25lUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9yZXF1ZXN0JylcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCdub2RlOnpsaWInKVxuY29uc3Qge1xuICBieXRlc01hdGNoLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIFRBT0NoZWNrLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgaXNCbG9iTGlrZSxcbiAgc2FtZU9yaWdpbixcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8sXG4gIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUsXG4gIGJ1aWxkQ29udGVudFJhbmdlLFxuICBjcmVhdGVJbmZsYXRlLFxuICBleHRyYWN0TWltZVR5cGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUsIGtEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSwgZXh0cmFjdEJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICBzdWJyZXNvdXJjZVNldFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKVxuY29uc3QgeyBSZWFkYWJsZSwgcGlwZWxpbmUsIGZpbmlzaGVkIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGFkZEFib3J0TGlzdGVuZXIsIGlzRXJyb3JlZCwgaXNSZWFkYWJsZSwgYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZGF0YVVSTFByb2Nlc3Nvciwgc2VyaWFsaXplQU1pbWVUeXBlLCBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vLi4vZ2xvYmFsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IEdFVF9PUl9IRUFEID0gWydHRVQnLCAnSEVBRCddXG5cbmNvbnN0IGRlZmF1bHRVc2VyQWdlbnQgPSB0eXBlb2YgX19VTkRJQ0lfSVNfTk9ERV9fICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXNidWlsZERldGVjdGlvbiAhPT0gJ3VuZGVmaW5lZCdcbiAgPyAnbm9kZSdcbiAgOiAndW5kaWNpJ1xuXG4vKiogQHR5cGUge2ltcG9ydCgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTH0gKi9cbmxldCByZXNvbHZlT2JqZWN0VVJMXG5cbmNsYXNzIEZldGNoIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2hlcikge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsXG4gICAgdGhpcy5kdW1wID0gZmFsc2VcbiAgICB0aGlzLnN0YXRlID0gJ29uZ29pbmcnXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZldGNoRG9uZSAocmVzcG9uc2UpIHtcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHVuZGVmaW5lZCkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdnbG9iYWxUaGlzLmZldGNoJylcblxuICAvLyAxLiBMZXQgcCBiZSBhIG5ldyBwcm9taXNlLlxuICBsZXQgcCA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZlxuICAvLyBSZXF1ZXN0IGFzIGNvbnN0cnVjdG9yIHdpdGggaW5wdXQgYW5kIGluaXQgYXMgYXJndW1lbnRzLiBJZiB0aGlzIHRocm93c1xuICAvLyBhbiBleGNlcHRpb24sIHJlamVjdCBwIHdpdGggaXQgYW5kIHJldHVybiBwLlxuICBsZXQgcmVxdWVzdE9iamVjdFxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgcC5yZWplY3QoZSlcbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyAzLiBMZXQgcmVxdWVzdCBiZSByZXF1ZXN0T2JqZWN0XHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNC4gSWYgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICBpZiAocmVxdWVzdE9iamVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgIC8vIDEuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCBudWxsLCBhbmRcbiAgICAvLyAgICByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIG51bGwsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgIC8vIDIuIFJldHVybiBwLlxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDUuIExldCBnbG9iYWxPYmplY3QgYmUgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICBjb25zdCBnbG9iYWxPYmplY3QgPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAvLyA2LiBJZiBnbG9iYWxPYmplY3QgaXMgYSBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgb2JqZWN0LCB0aGVuIHNldFxuICAvLyByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgaWYgKGdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUnKSB7XG4gICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICB9XG5cbiAgLy8gNy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIG51bGwuXG4gIGxldCByZXNwb25zZU9iamVjdCA9IG51bGxcblxuICAvLyA4LiBMZXQgcmVsZXZhbnRSZWFsbSBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cblxuICAvLyA5LiBMZXQgbG9jYWxseUFib3J0ZWQgYmUgZmFsc2UuXG4gIGxldCBsb2NhbGx5QWJvcnRlZCA9IGZhbHNlXG5cbiAgLy8gMTAuIExldCBjb250cm9sbGVyIGJlIG51bGwuXG4gIGxldCBjb250cm9sbGVyID0gbnVsbFxuXG4gIC8vIDExLiBBZGQgdGhlIGZvbGxvd2luZyBhYm9ydCBzdGVwcyB0byByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWw6XG4gIGFkZEFib3J0TGlzdGVuZXIoXG4gICAgcmVxdWVzdE9iamVjdC5zaWduYWwsXG4gICAgKCkgPT4ge1xuICAgICAgLy8gMS4gU2V0IGxvY2FsbHlBYm9ydGVkIHRvIHRydWUuXG4gICAgICBsb2NhbGx5QWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gQXNzZXJ0OiBjb250cm9sbGVyIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT0gbnVsbClcblxuICAgICAgLy8gMy4gQWJvcnQgY29udHJvbGxlciB3aXRoIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgY29udHJvbGxlci5hYm9ydChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAgIGNvbnN0IHJlYWxSZXNwb25zZSA9IHJlc3BvbnNlT2JqZWN0Py5kZXJlZigpXG5cbiAgICAgIC8vIDQuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCxcbiAgICAgIC8vICAgIGFuZCByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVhbFJlc3BvbnNlLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICAvLyBzZWUgZnVuY3Rpb24gaGFuZGxlRmV0Y2hEb25lXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNlXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcsIHsgY2F1c2U6IHJlc3BvbnNlLmVycm9yIH0pKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFdlYWtSZWYoZnJvbUlubmVyUmVzcG9uc2UocmVzcG9uc2UsICdpbW11dGFibGUnKSlcblxuICAgIC8vIDUuIFJlc29sdmUgcCB3aXRoIHJlc3BvbnNlT2JqZWN0LlxuICAgIHAucmVzb2x2ZShyZXNwb25zZU9iamVjdC5kZXJlZigpKVxuICAgIHAgPSBudWxsXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IHJlcXVlc3RPYmplY3Rba0Rpc3BhdGNoZXJdIC8vIHVuZGljaVxuICB9KVxuXG4gIC8vIDE0LiBSZXR1cm4gcC5cbiAgcmV0dXJuIHAucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtYW5kLXJlcG9ydC10aW1pbmdcbmZ1bmN0aW9uIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nIChyZXNwb25zZSwgaW5pdGlhdG9yVHlwZSA9ICdvdGhlcicpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiYgcmVzcG9uc2UuYWJvcnRlZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIG51bGwgb3IgZW1wdHksIHRoZW4gcmV0dXJuLlxuICBpZiAoIXJlc3BvbnNlLnVybExpc3Q/Lmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMy4gTGV0IG9yaWdpbmFsVVJMIGJlIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdFswXS5cbiAgY29uc3Qgb3JpZ2luYWxVUkwgPSByZXNwb25zZS51cmxMaXN0WzBdXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBsZXQgdGltaW5nSW5mbyA9IHJlc3BvbnNlLnRpbWluZ0luZm9cblxuICAvLyA1LiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gIGxldCBjYWNoZVN0YXRlID0gcmVzcG9uc2UuY2FjaGVTdGF0ZVxuXG4gIC8vIDYuIElmIG9yaWdpbmFsVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShvcmlnaW5hbFVSTCkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDcuIElmIHRpbWluZ0luZm8gaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmICh0aW1pbmdJbmZvID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA4LiBJZiByZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnIGlzIG5vdCBzZXQsIHRoZW46XG4gIGlmICghcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQpIHtcbiAgICAvLyAgMS4gU2V0IHRpbWluZ0luZm8gdG8gYSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmcgaW5mbyBmb3IgdGltaW5nSW5mby5cbiAgICB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcblxuICAgIC8vICAyLiBTZXQgY2FjaGVTdGF0ZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIGNhY2hlU3RhdGUgPSAnJ1xuICB9XG5cbiAgLy8gOS4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGVuZCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZVxuICAvLyBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIC8vIFRPRE86IGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eT9cbiAgdGltaW5nSW5mby5lbmRUaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoKVxuXG4gIC8vIDEwLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTEuIE1hcmsgcmVzb3VyY2UgdGltaW5nIGZvciB0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSxcbiAgLy8gZ2xvYmFsLCBhbmQgY2FjaGVTdGF0ZS5cbiAgbWFya1Jlc291cmNlVGltaW5nKFxuICAgIHRpbWluZ0luZm8sXG4gICAgb3JpZ2luYWxVUkwuaHJlZixcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuY29uc3QgbWFya1Jlc291cmNlVGltaW5nID0gcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhYm9ydC1mZXRjaFxuZnVuY3Rpb24gYWJvcnRGZXRjaCAocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGVycm9yKSB7XG4gIC8vIDEuIFJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIGlmIChwKSB7XG4gICAgLy8gV2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoZSBwcm9taXNlIGF0IHRoaXMgc3RhZ2VcbiAgICBwLnJlamVjdChlcnJvcilcbiAgfVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGNhbmNlbCByZXF1ZXN0XHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlcXVlc3QuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlcXVlc3QuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlT2JqZWN0IGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2VPYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZS5cbiAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNS4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXNwb25zZS5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVzcG9uc2UuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2hpbmdcbmZ1bmN0aW9uIGZldGNoaW5nICh7XG4gIHJlcXVlc3QsXG4gIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlLFxuICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICB1c2VQYXJhbGxlbFF1ZXVlID0gZmFsc2UsXG4gIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG59KSB7XG4gIC8vIEVuc3VyZSB0aGF0IHRoZSBkaXNwYXRjaGVyIGlzIHNldCBhY2NvcmRpbmdseVxuICBhc3NlcnQoZGlzcGF0Y2hlcilcblxuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVudFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbiAgY29uc3QgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgIHN0YXJ0VGltZTogY3VycmVudFRpbWVcbiAgfSlcblxuICAvLyA2LiBMZXQgZmV0Y2hQYXJhbXMgYmUgYSBuZXcgZmV0Y2ggcGFyYW1zIHdob3NlXG4gIC8vIHJlcXVlc3QgaXMgcmVxdWVzdCxcbiAgLy8gdGltaW5nIGluZm8gaXMgdGltaW5nSW5mbyxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGJvZHkgY2h1bmsgbGVuZ3RoIGlzIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgaXMgcHJvY2Vzc1Jlc3BvbnNlLFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIC8vIHRhc2sgZGVzdGluYXRpb24gaXMgdGFza0Rlc3RpbmF0aW9uLFxuICAvLyBhbmQgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkgaXMgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGZldGNoUGFyYW1zID0ge1xuICAgIGNvbnRyb2xsZXI6IG5ldyBGZXRjaChkaXNwYXRjaGVyKSxcbiAgICByZXF1ZXN0LFxuICAgIHRpbWluZ0luZm8sXG4gICAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gICAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgICB0YXNrRGVzdGluYXRpb24sXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvXG4gIC8vICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAvLyBOT1RFOiBTaW5jZSBmZXRjaGluZyBpcyBvbmx5IGNhbGxlZCBmcm9tIGZldGNoLCBib2R5IHNob3VsZCBhbHJlYWR5IGJlXG4gIC8vIGV4dHJhY3RlZC5cbiAgYXNzZXJ0KCFyZXF1ZXN0LmJvZHkgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSlcblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudCwgaWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0IGlzIGEgV2luZG93IG9iamVjdDsgb3RoZXJ3aXNlXG4gIC8vIFwibm8td2luZG93XCIuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC53aW5kb3cgPVxuICAgICAgcmVxdWVzdC5jbGllbnQ/Lmdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdXaW5kb3cnXG4gICAgICAgID8gcmVxdWVzdC5jbGllbnRcbiAgICAgICAgOiAnbm8td2luZG93J1xuICB9XG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyBjbGllbnRcdTIwMTlzIG9yaWdpbi5cbiAgaWYgKHJlcXVlc3Qub3JpZ2luID09PSAnY2xpZW50Jykge1xuICAgIHJlcXVlc3Qub3JpZ2luID0gcmVxdWVzdC5jbGllbnQub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnLCB0cnVlKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUsIHRydWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScsIHRydWUpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJywgdHJ1ZSlcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lclx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3RcdTIwMTlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3RcdTIwMTlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNlXHUyMDE5cyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJywgdHJ1ZSlcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgXHUwMEFCIChgQ29udGVudC1UeXBlYCwgYHRleHQvaHRtbDtjaGFyc2V0PXV0Zi04YCkgXHUwMEJCLFxuICAgICAgLy8gYW5kIGJvZHkgaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UgYXMgYSBib2R5LlxuXG4gICAgICAvLyBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Fib3V0IHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkJykpXG4gICAgfVxuICAgIGNhc2UgJ2Jsb2I6Jzoge1xuICAgICAgaWYgKCFyZXNvbHZlT2JqZWN0VVJMKSB7XG4gICAgICAgIHJlc29sdmVPYmplY3RVUkwgPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpLnJlc29sdmVPYmplY3RVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMS4gTGV0IGJsb2JVUkxFbnRyeSBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgYmxvYiBVUkwgZW50cnkuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnkgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iLzdiMGViYWNjYzYyYjU2NmExOTY1Mzk2ZTViZTdiYjJiYzA2Zjg0MWYvRmlsZUFQSS91cmwvcmVzb3VyY2VzL2ZldGNoLXRlc3RzLmpzI0w1Mi1MNTZcbiAgICAgIC8vIEJ1ZmZlci5yZXNvbHZlT2JqZWN0VVJMIGRvZXMgbm90IGlnbm9yZSBVUkwgcXVlcmllcy5cbiAgICAgIGlmIChibG9iVVJMRW50cnkuc2VhcmNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJykpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJsb2IgPSByZXNvbHZlT2JqZWN0VVJMKGJsb2JVUkxFbnRyeS50b1N0cmluZygpKVxuXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgLCBibG9iVVJMRW50cnkgaXMgbnVsbCwgb3IgYmxvYlVSTEVudHJ5XHUyMDE5c1xuICAgICAgLy8gICAgb2JqZWN0IGlzIG5vdCBhIEJsb2Igb2JqZWN0LCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnIHx8ICFpc0Jsb2JMaWtlKGJsb2IpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJsb2IgYmUgYmxvYlVSTEVudHJ5XHUyMDE5cyBvYmplY3QuXG4gICAgICAvLyBOb3RlOiBkb25lIGFib3ZlXG5cbiAgICAgIC8vIDQuIExldCByZXNwb25zZSBiZSBhIG5ldyByZXNwb25zZS5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKClcblxuICAgICAgLy8gNS4gTGV0IGZ1bGxMZW5ndGggYmUgYmxvYlx1MjAxOXMgc2l6ZS5cbiAgICAgIGNvbnN0IGZ1bGxMZW5ndGggPSBibG9iLnNpemVcblxuICAgICAgLy8gNi4gTGV0IHNlcmlhbGl6ZWRGdWxsTGVuZ3RoIGJlIGZ1bGxMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRGdWxsTGVuZ3RoID0gaXNvbW9ycGhpY0VuY29kZShgJHtmdWxsTGVuZ3RofWApXG5cbiAgICAgIC8vIDcuIExldCB0eXBlIGJlIGJsb2JcdTIwMTlzIHR5cGUuXG4gICAgICBjb25zdCB0eXBlID0gYmxvYi50eXBlXG5cbiAgICAgIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYDpcbiAgICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnLCB0cnVlKSkge1xuICAgICAgICAvLyAxLiBMZXQgYm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgYmxvYi5cbiAgICAgICAgLy8gTm90ZTogaW4gdGhlIEZpbGVBUEkgYSBibG9iIFwib2JqZWN0XCIgaXMgYSBCbG9iICpvciogYSBNZWRpYVNvdXJjZS5cbiAgICAgICAgLy8gSW4gbm9kZSwgdGhpcyBjYW4gb25seSBldmVyIGJlIGEgQmxvYi4gVGhlcmVmb3JlIHdlIGNhbiBzYWZlbHlcbiAgICAgICAgLy8gdXNlIGV4dHJhY3RCb2R5IGRpcmVjdGx5LlxuICAgICAgICBjb25zdCBib2R5V2l0aFR5cGUgPSBleHRyYWN0Qm9keShibG9iKVxuXG4gICAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UgdG8gYE9LYC5cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dCA9ICdPSydcblxuICAgICAgICAvLyAzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYm9keVdpdGhUeXBlXHUyMDE5cyBib2R5LlxuICAgICAgICByZXNwb25zZS5ib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCB0byBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIHNlcmlhbGl6ZWRGdWxsTGVuZ3RoKSwgKGBDb250ZW50LVR5cGVgLCB0eXBlKSBcdTAwQkIuXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1sZW5ndGgnLCBzZXJpYWxpemVkRnVsbExlbmd0aCwgdHJ1ZSlcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVyc0xpc3Quc2V0KCdjb250ZW50LXR5cGUnLCB0eXBlLCB0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgICAgICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gMi4gTGV0IHJhbmdlSGVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBgUmFuZ2VgIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAgIGNvbnN0IHJhbmdlSGVhZGVyID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoJ3JhbmdlJywgdHJ1ZSlcblxuICAgICAgICAvLyAzLiBMZXQgcmFuZ2VWYWx1ZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBzaW5nbGUgcmFuZ2UgaGVhZGVyIHZhbHVlIGdpdmVuIHJhbmdlSGVhZGVyIGFuZCB0cnVlLlxuICAgICAgICBjb25zdCByYW5nZVZhbHVlID0gc2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZShyYW5nZUhlYWRlciwgdHJ1ZSlcblxuICAgICAgICAvLyA0LiBJZiByYW5nZVZhbHVlIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgaWYgKHJhbmdlVmFsdWUgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignZmFpbGVkIHRvIGZldGNoIHRoZSBkYXRhIFVSTCcpKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gTGV0IChyYW5nZVN0YXJ0LCByYW5nZUVuZCkgYmUgcmFuZ2VWYWx1ZS5cbiAgICAgICAgbGV0IHsgcmFuZ2VTdGFydFZhbHVlOiByYW5nZVN0YXJ0LCByYW5nZUVuZFZhbHVlOiByYW5nZUVuZCB9ID0gcmFuZ2VWYWx1ZVxuXG4gICAgICAgIC8vIDYuIElmIHJhbmdlU3RhcnQgaXMgbnVsbDpcbiAgICAgICAgLy8gNy4gT3RoZXJ3aXNlOlxuICAgICAgICBpZiAocmFuZ2VTdGFydCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIDEuIFNldCByYW5nZVN0YXJ0IHRvIGZ1bGxMZW5ndGggXHUyMjEyIHJhbmdlRW5kLlxuICAgICAgICAgIHJhbmdlU3RhcnQgPSBmdWxsTGVuZ3RoIC0gcmFuZ2VFbmRcblxuICAgICAgICAgIC8vIDIuIFNldCByYW5nZUVuZCB0byByYW5nZVN0YXJ0ICsgcmFuZ2VFbmQgXHUyMjEyIDEuXG4gICAgICAgICAgcmFuZ2VFbmQgPSByYW5nZVN0YXJ0ICsgcmFuZ2VFbmQgLSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gMS4gSWYgcmFuZ2VTdGFydCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gZnVsbExlbmd0aCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICAgIGlmIChyYW5nZVN0YXJ0ID49IGZ1bGxMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignUmFuZ2Ugc3RhcnQgaXMgZ3JlYXRlciB0aGFuIHRoZSBibG9iXFwncyBzaXplLicpKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuIElmIHJhbmdlRW5kIGlzIG51bGwgb3IgcmFuZ2VFbmQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGZ1bGxMZW5ndGgsIHRoZW4gc2V0XG4gICAgICAgICAgLy8gICAgcmFuZ2VFbmQgdG8gZnVsbExlbmd0aCBcdTIyMTIgMS5cbiAgICAgICAgICBpZiAocmFuZ2VFbmQgPT09IG51bGwgfHwgcmFuZ2VFbmQgPj0gZnVsbExlbmd0aCkge1xuICAgICAgICAgICAgcmFuZ2VFbmQgPSBmdWxsTGVuZ3RoIC0gMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDguIExldCBzbGljZWRCbG9iIGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgc2xpY2UgYmxvYiBnaXZlbiBibG9iLCByYW5nZVN0YXJ0LFxuICAgICAgICAvLyAgICByYW5nZUVuZCArIDEsIGFuZCB0eXBlLlxuICAgICAgICBjb25zdCBzbGljZWRCbG9iID0gYmxvYi5zbGljZShyYW5nZVN0YXJ0LCByYW5nZUVuZCwgdHlwZSlcblxuICAgICAgICAvLyA5LiBMZXQgc2xpY2VkQm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3Rpbmcgc2xpY2VkQmxvYi5cbiAgICAgICAgLy8gTm90ZTogc2FtZSByZWFzb24gYXMgbWVudGlvbmVkIGFib3ZlIGFzIHRvIHdoeSB3ZSB1c2UgZXh0cmFjdEJvZHlcbiAgICAgICAgY29uc3Qgc2xpY2VkQm9keVdpdGhUeXBlID0gZXh0cmFjdEJvZHkoc2xpY2VkQmxvYilcblxuICAgICAgICAvLyAxMC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHNsaWNlZEJvZHlXaXRoVHlwZVx1MjAxOXMgYm9keS5cbiAgICAgICAgcmVzcG9uc2UuYm9keSA9IHNsaWNlZEJvZHlXaXRoVHlwZVswXVxuXG4gICAgICAgIC8vIDExLiBMZXQgc2VyaWFsaXplZFNsaWNlZExlbmd0aCBiZSBzbGljZWRCbG9iXHUyMDE5cyBzaXplLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRTbGljZWRMZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke3NsaWNlZEJsb2Iuc2l6ZX1gKVxuXG4gICAgICAgIC8vIDEyLiBMZXQgY29udGVudFJhbmdlIGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgYnVpbGQgYSBjb250ZW50IHJhbmdlIGdpdmVuIHJhbmdlU3RhcnQsXG4gICAgICAgIC8vICAgICByYW5nZUVuZCwgYW5kIGZ1bGxMZW5ndGguXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSYW5nZSA9IGJ1aWxkQ29udGVudFJhbmdlKHJhbmdlU3RhcnQsIHJhbmdlRW5kLCBmdWxsTGVuZ3RoKVxuXG4gICAgICAgIC8vIDEzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyB0byAyMDYuXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cyA9IDIwNlxuXG4gICAgICAgIC8vIDE0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlIHRvIGBQYXJ0aWFsIENvbnRlbnRgLlxuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0ID0gJ1BhcnRpYWwgQ29udGVudCdcblxuICAgICAgICAvLyAxNS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCB0byBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIHNlcmlhbGl6ZWRTbGljZWRMZW5ndGgpLFxuICAgICAgICAvLyAgICAgKGBDb250ZW50LVR5cGVgLCB0eXBlKSwgKGBDb250ZW50LVJhbmdlYCwgY29udGVudFJhbmdlKSBcdTAwQkIuXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1sZW5ndGgnLCBzZXJpYWxpemVkU2xpY2VkTGVuZ3RoLCB0cnVlKVxuICAgICAgICByZXNwb25zZS5oZWFkZXJzTGlzdC5zZXQoJ2NvbnRlbnQtdHlwZScsIHR5cGUsIHRydWUpXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1yYW5nZScsIGNvbnRlbnRSYW5nZSwgdHJ1ZSlcbiAgICAgIH1cblxuICAgICAgLy8gMTAuIFJldHVybiByZXNwb25zZS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgfVxuICAgIGNhc2UgJ2RhdGE6Jzoge1xuICAgICAgLy8gMS4gTGV0IGRhdGFVUkxTdHJ1Y3QgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZVxuICAgICAgLy8gICAgZGF0YTogVVJMIHByb2Nlc3NvciBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgICAgY29uc3QgZGF0YVVSTFN0cnVjdCA9IGRhdGFVUkxQcm9jZXNzb3IoY3VycmVudFVSTClcblxuICAgICAgLy8gMi4gSWYgZGF0YVVSTFN0cnVjdCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhXG4gICAgICAvLyAgICBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKGRhdGFVUkxTdHJ1Y3QgPT09ICdmYWlsdXJlJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCB0aGUgZGF0YSBVUkwnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IG1pbWVUeXBlIGJlIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIE1JTUUgdHlwZSwgc2VyaWFsaXplZC5cbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKGRhdGFVUkxTdHJ1Y3QubWltZVR5cGUpXG5cbiAgICAgIC8vIDQuIFJldHVybiBhIHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgXHUwMEJCLFxuICAgICAgLy8gICAgYW5kIGJvZHkgaXMgZGF0YVVSTFN0cnVjdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogbWltZVR5cGUgfV1cbiAgICAgICAgXSxcbiAgICAgICAgYm9keTogc2FmZWx5RXh0cmFjdEJvZHkoZGF0YVVSTFN0cnVjdC5ib2R5KVswXVxuICAgICAgfSkpXG4gICAgfVxuICAgIGNhc2UgJ2ZpbGU6Jzoge1xuICAgICAgLy8gRm9yIG5vdywgdW5mb3J0dW5hdGUgYXMgaXQgaXMsIGZpbGUgVVJMcyBhcmUgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci5cbiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ25vdCBpbXBsZW1lbnRlZC4uLiB5ZXQuLi4nKSlcbiAgICB9XG4gICAgY2FzZSAnaHR0cDonOlxuICAgIGNhc2UgJ2h0dHBzOic6IHtcbiAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cblxuICAgICAgcmV0dXJuIGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCd1bmtub3duIHNjaGVtZScpKVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbmFsaXplUmVzcG9uc2UgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gIC8vIDIsIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgaXMgbm90IG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaFxuICAvLyB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGdpdmVuIHJlc3BvbnNlLCB3aXRoXG4gIC8vIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZShyZXNwb25zZSkpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWZpbmFsZVxuZnVuY3Rpb24gZmV0Y2hGaW5hbGUgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgYSBzZWN1cmUgY29udGV4dCxcbiAgLy8gICAgdGhlbiBzZXQgdGltaW5nSW5mb1x1MjAxOXMgc2VydmVyLXRpbWluZyBoZWFkZXJzIHRvIHRoZSByZXN1bHQgb2YgZ2V0dGluZywgZGVjb2RpbmcsIGFuZCBzcGxpdHRpbmdcbiAgLy8gICAgYFNlcnZlci1UaW1pbmdgIGZyb20gcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDMuIExldCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgYmUgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgIC8vIDEuIExldCB1bnNhZmVFbmRUaW1lIGJlIHRoZSB1bnNhZmUgc2hhcmVkIGN1cnJlbnQgdGltZS5cbiAgICBjb25zdCB1bnNhZmVFbmRUaW1lID0gRGF0ZS5ub3coKSAvLyA/XG5cbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24gaXMgXCJkb2N1bWVudFwiLCB0aGVuIHNldCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlclx1MjAxOXNcbiAgICAvLyAgICBmdWxsIHRpbWluZyBpbmZvIHRvIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucmVxdWVzdC5kZXN0aW5hdGlvbiA9PT0gJ2RvY3VtZW50Jykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5mdWxsVGltaW5nSW5mbyA9IHRpbWluZ0luZm9cbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXJcdTIwMTlzIHJlcG9ydCB0aW1pbmcgc3RlcHMgdG8gdGhlIGZvbGxvd2luZyBzdGVwcyBnaXZlbiBhIGdsb2JhbCBvYmplY3QgZ2xvYmFsOlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVwb3J0VGltaW5nU3RlcHMgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBlbmQgdGltZSB0byB0aGUgcmVsYXRpdmUgaGlnaCByZXNvbHV0aW9uIHRpbWUgZ2l2ZW4gdW5zYWZlRW5kVGltZSBhbmQgZ2xvYmFsLlxuICAgICAgdGltaW5nSW5mby5lbmRUaW1lID0gdW5zYWZlRW5kVGltZVxuXG4gICAgICAvLyAzLiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gICAgICBsZXQgY2FjaGVTdGF0ZSA9IHJlc3BvbnNlLmNhY2hlU3RhdGVcblxuICAgICAgLy8gNC4gTGV0IGJvZHlJbmZvIGJlIHJlc3BvbnNlXHUyMDE5cyBib2R5IGluZm8uXG4gICAgICBjb25zdCBib2R5SW5mbyA9IHJlc3BvbnNlLmJvZHlJbmZvXG5cbiAgICAgIC8vIDUuIElmIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbiBzZXQgdGltaW5nSW5mbyB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuXG4gICAgICAvLyAgICBvcGFxdWUgdGltaW5nIGluZm8gZm9yIHRpbWluZ0luZm8gYW5kIHNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICBpZiAoIXJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkKSB7XG4gICAgICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHRpbWluZ0luZm8pXG5cbiAgICAgICAgY2FjaGVTdGF0ZSA9ICcnXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIExldCByZXNwb25zZVN0YXR1cyBiZSAwLlxuICAgICAgbGV0IHJlc3BvbnNlU3RhdHVzID0gMFxuXG4gICAgICAvLyA3LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBub3QgXCJuYXZpZ2F0ZVwiIG9yIHJlc3BvbnNlXHUyMDE5cyBoYXMtY3Jvc3Mtb3JpZ2luLXJlZGlyZWN0cyBpcyBmYWxzZTpcbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0Lm1vZGUgIT09ICduYXZpZ2F0b3InIHx8ICFyZXNwb25zZS5oYXNDcm9zc09yaWdpblJlZGlyZWN0cykge1xuICAgICAgICAvLyAxLiBTZXQgcmVzcG9uc2VTdGF0dXMgdG8gcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgICAgICAgcmVzcG9uc2VTdGF0dXMgPSByZXNwb25zZS5zdGF0dXNcblxuICAgICAgICAvLyAyLiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGEgTUlNRSB0eXBlIGZyb20gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgICBjb25zdCBtaW1lVHlwZSA9IGV4dHJhY3RNaW1lVHlwZShyZXNwb25zZS5oZWFkZXJzTGlzdClcblxuICAgICAgICAvLyAzLiBJZiBtaW1lVHlwZSBpcyBub3QgZmFpbHVyZSwgdGhlbiBzZXQgYm9keUluZm9cdTIwMTlzIGNvbnRlbnQgdHlwZSB0byB0aGUgcmVzdWx0IG9mIG1pbmltaXppbmcgYSBzdXBwb3J0ZWQgTUlNRSB0eXBlIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBpZiAobWltZVR5cGUgIT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIGJvZHlJbmZvLmNvbnRlbnRUeXBlID0gbWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZShtaW1lVHlwZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA4LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIHR5cGUgaXMgbm9uLW51bGwsIHRoZW4gbWFyayByZXNvdXJjZSB0aW1pbmcgZ2l2ZW4gdGltaW5nSW5mbyxcbiAgICAgIC8vICAgIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwsIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgdHlwZSwgZ2xvYmFsLCBjYWNoZVN0YXRlLCBib2R5SW5mbyxcbiAgICAgIC8vICAgIGFuZCByZXNwb25zZVN0YXR1cy5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUgIT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiB1cGRhdGUgbWFya3Jlc291cmNldGltaW5nXG4gICAgICAgIG1hcmtSZXNvdXJjZVRpbWluZyh0aW1pbmdJbmZvLCBmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybC5ocmVmLCBmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUsIGJvZHlJbmZvLCByZXNwb25zZVN0YXR1cylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2sgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgICAgIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAgICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzXG4gICAgICAvLyAgICByZXNwb25zZSBlbmQtb2YtYm9keSBnaXZlbiByZXNwb25zZS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgIT0gbnVsbCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkocmVzcG9uc2UpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIHR5cGUgaXMgbm9uLW51bGwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzXG4gICAgICAvLyAgICBnbG9iYWwgb2JqZWN0IGlzIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLCB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlclx1MjAxOXMgcmVwb3J0XG4gICAgICAvLyAgICB0aW1pbmcgc3RlcHMgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUgIT0gbnVsbCkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlcG9ydFRpbWluZ1N0ZXBzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBRdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2sgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2soKSlcbiAgfVxuXG4gIC8vIDQuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGlzIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vICAgIHByb2Nlc3MgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZShyZXNwb25zZSlcbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSA9IG51bGxcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcjsgb3RoZXJ3aXNlIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZS5cbiAgY29uc3QgaW50ZXJuYWxSZXNwb25zZSA9IHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgPyByZXNwb25zZSA6IChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlID8/IHJlc3BvbnNlKVxuXG4gIC8vIDYuIElmIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAvLyA3LiBPdGhlcndpc2U6XG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gbWNvbGxpbmE6IGFsbCB0aGUgZm9sbG93aW5nIHN0ZXBzIG9mIHRoZSBzcGVjcyBhcmUgc2tpcHBlZC5cbiAgICAvLyBUaGUgaW50ZXJuYWwgdHJhbnNmb3JtIHN0cmVhbSBpcyBub3QgbmVlZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzMwOTMjaXNzdWVjb21tZW50LTIwNTAxOTg1NDFcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgVHJhbnNmb3JtU3RyZWFtLlxuICAgIC8vIDIuIExldCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gd2hpY2gsIGdpdmVuIGNodW5rLCBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgLy8gMy4gU2V0IHVwIHRyYW5zZm9ybVN0cmVhbSB3aXRoIHRyYW5zZm9ybUFsZ29yaXRobSBzZXQgdG8gaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYW5kIGZsdXNoQWxnb3JpdGhtXG4gICAgLy8gICAgc2V0IHRvIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgICAvLyA0LiBTZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keVx1MjAxOXMgc3RyZWFtIHRvIHRoZSByZXN1bHQgb2YgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keVx1MjAxOXMgc3RyZWFtIHBpcGVkIHRocm91Z2ggdHJhbnNmb3JtU3RyZWFtLlxuXG4gICAgZmluaXNoZWQoaW50ZXJuYWxSZXNwb25zZS5ib2R5LnN0cmVhbSwgKCkgPT4ge1xuICAgICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdFx1MjAxOXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2VcdTIwMTlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLCByZXF1ZXN0XHUyMDE5cyBjbGllbnQsIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3kodW5kZWZpbmVkLCBmYWxzZSlcbiAgICB9XG5cbiAgICAvLyAyLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZTpcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigndW5leHBlY3RlZCByZWRpcmVjdCcpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnbWFudWFsJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbFxuICAgICAgLy8gcmVzcG9uc2UgaXMgYWN0dWFsUmVzcG9uc2UuXG4gICAgICAvLyBOT1RFKHNwZWMpOiBPbiB0aGUgd2ViIHRoaXMgd291bGQgcmV0dXJuIGFuIGBvcGFxdWVyZWRpcmVjdGAgcmVzcG9uc2UsXG4gICAgICAvLyBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2VydmVyIHNpZGUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzExOTMuXG4gICAgICByZXNwb25zZSA9IGFjdHVhbFJlc3BvbnNlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLXJlZGlyZWN0IGZldGNoIGdpdmVuXG4gICAgICAvLyBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBSZWRpcmVjdEZldGNoKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDkuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcmVkaXJlY3QtZmV0Y2hcbmZ1bmN0aW9uIGh0dHBSZWRpcmVjdEZldGNoIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZCByZXNwb25zZSxcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGNvbnN0IGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgID8gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgIDogcmVzcG9uc2VcblxuICAvLyAzLiBMZXQgbG9jYXRpb25VUkwgYmUgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIGxvY2F0aW9uIFVSTCBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gIC8vIFVSTFx1MjAxOXMgZnJhZ21lbnQuXG4gIGxldCBsb2NhdGlvblVSTFxuXG4gIHRyeSB7XG4gICAgbG9jYXRpb25VUkwgPSByZXNwb25zZUxvY2F0aW9uVVJMKFxuICAgICAgYWN0dWFsUmVzcG9uc2UsXG4gICAgICByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KS5oYXNoXG4gICAgKVxuXG4gICAgLy8gNC4gSWYgbG9jYXRpb25VUkwgaXMgbnVsbCwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gICAgaWYgKGxvY2F0aW9uVVJMID09IG51bGwpIHtcbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gNS4gSWYgbG9jYXRpb25VUkwgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICB9XG5cbiAgLy8gNi4gSWYgbG9jYXRpb25VUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyBlcnJvci5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShsb2NhdGlvblVSTCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJykpXG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBjb3VudCBpcyAyMCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAyMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigncmVkaXJlY3QgY291bnQgZXhjZWVkZWQnKSlcbiAgfVxuXG4gIC8vIDguIEluY3JlYXNlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGJ5IDEuXG4gIHJlcXVlc3QucmVkaXJlY3RDb3VudCArPSAxXG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcImNvcnNcIiwgbG9jYXRpb25VUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIGFuZFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiByZXR1cm5cbiAgLy8gIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QubW9kZSA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKSAmJlxuICAgICFzYW1lT3JpZ2luKHJlcXVlc3QsIGxvY2F0aW9uVVJMKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Nyb3NzIG9yaWdpbiBub3QgYWxsb3dlZCBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJykpXG4gIH1cblxuICAvLyAxMC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGxvY2F0aW9uVVJMIGluY2x1ZGVzXG4gIC8vIGNyZWRlbnRpYWxzLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgJ1VSTCBjYW5ub3QgY29udGFpbiBjcmVkZW50aWFscyBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJ1xuICAgICkpXG4gIH1cblxuICAvLyAxMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIGFjdHVhbFJlc3BvbnNlLnN0YXR1cyAhPT0gMzAzICYmXG4gICAgcmVxdWVzdC5ib2R5ICE9IG51bGwgJiZcbiAgICByZXF1ZXN0LmJvZHkuc291cmNlID09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCkpXG4gIH1cblxuICAvLyAxMi4gSWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZVxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAxIG9yIDMwMiBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYFxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAzIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgIG9yIGBIRUFEYFxuICBpZiAoXG4gICAgKFszMDEsIDMwMl0uaW5jbHVkZXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB8fFxuICAgIChhY3R1YWxSZXNwb25zZS5zdGF0dXMgPT09IDMwMyAmJlxuICAgICAgIUdFVF9PUl9IRUFELmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSlcbiAgKSB7XG4gICAgLy8gdGhlbjpcbiAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIGBHRVRgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIG51bGwuXG4gICAgcmVxdWVzdC5tZXRob2QgPSAnR0VUJ1xuICAgIHJlcXVlc3QuYm9keSA9IG51bGxcblxuICAgIC8vIDIuIEZvciBlYWNoIGhlYWRlck5hbWUgb2YgcmVxdWVzdC1ib2R5LWhlYWRlciBuYW1lLCBkZWxldGUgaGVhZGVyTmFtZSBmcm9tXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIHJlcXVlc3RCb2R5SGVhZGVyKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZShoZWFkZXJOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJMXHUyMDE5c1xuICAvLyAgICAgb3JpZ2luLCB0aGVuIGZvciBlYWNoIGhlYWRlck5hbWUgb2YgQ09SUyBub24td2lsZGNhcmQgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgLy8gICAgIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSwgbG9jYXRpb25VUkwpKSB7XG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvcnMtbm9uLXdpbGRjYXJkLXJlcXVlc3QtaGVhZGVyLW5hbWVcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnYXV0aG9yaXphdGlvbicsIHRydWUpXG5cbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXV0aGVudGljYXRpb24tZW50cmllc1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdwcm94eS1hdXRob3JpemF0aW9uJywgdHJ1ZSlcblxuICAgIC8vIFwiQ29va2llXCIgYW5kIFwiSG9zdFwiIGFyZSBmb3JiaWRkZW4gcmVxdWVzdC1oZWFkZXJzLCB3aGljaCB1bmRpY2kgZG9lc24ndCBpbXBsZW1lbnQuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2Nvb2tpZScsIHRydWUpXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnLCB0cnVlKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlIGZpcnN0IHJldHVyblxuICAvLyB2YWx1ZSBvZiBzYWZlbHkgZXh0cmFjdGluZyByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIGFzc2VydChyZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICAgcmVxdWVzdC5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkocmVxdWVzdC5ib2R5LnNvdXJjZSlbMF1cbiAgfVxuXG4gIC8vIDE1LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gMTYuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBlbmQgdGltZSBhbmQgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRoZVxuICAvLyBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIHRpbWluZ0luZm8ucmVkaXJlY3RFbmRUaW1lID0gdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUgPVxuICAgIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gIC8vIDE3LiBJZiB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBzdGFydCB0aW1lIGlzIDAsIHRoZW4gc2V0IHRpbWluZ0luZm9cdTIwMTlzXG4gIC8vICByZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRpbWluZ0luZm9cdTIwMTlzIHN0YXJ0IHRpbWUuXG4gIGlmICh0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID09PSAwKSB7XG4gICAgdGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gIH1cblxuICAvLyAxOC4gQXBwZW5kIGxvY2F0aW9uVVJMIHRvIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICByZXF1ZXN0LnVybExpc3QucHVzaChsb2NhdGlvblVSTClcblxuICAvLyAxOS4gSW52b2tlIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgb24gcmVkaXJlY3Qgb24gcmVxdWVzdCBhbmRcbiAgLy8gYWN0dWFsUmVzcG9uc2UuXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpXG5cbiAgLy8gMjAuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgcmV0dXJuIG1haW5GZXRjaChmZXRjaFBhcmFtcywgdHJ1ZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1vci1jYWNoZS1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaXNBdXRoZW50aWNhdGlvbkZldGNoID0gZmFsc2UsXG4gIGlzTmV3Q29ubmVjdGlvbkZldGNoID0gZmFsc2Vcbikge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgaHR0cEZldGNoUGFyYW1zIGJlIG51bGwuXG4gIGxldCBodHRwRmV0Y2hQYXJhbXMgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGh0dHBSZXF1ZXN0IGJlIG51bGwuXG4gIGxldCBodHRwUmVxdWVzdCA9IG51bGxcblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdG9yZWRSZXNwb25zZSBiZSBudWxsLlxuICAvLyBUT0RPOiBjYWNoZVxuXG4gIC8vIDYuIExldCBodHRwQ2FjaGUgYmUgbnVsbC5cbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDcuIExldCB0aGUgcmV2YWxpZGF0aW5nRmxhZyBiZSB1bnNldC5cbiAgY29uc3QgcmV2YWxpZGF0aW5nRmxhZyA9IGZhbHNlXG5cbiAgLy8gOC4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiIGFuZCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzXG4gIC8vICAgIFwiZXJyb3JcIiwgdGhlbiBzZXQgaHR0cEZldGNoUGFyYW1zIHRvIGZldGNoUGFyYW1zIGFuZCBodHRwUmVxdWVzdCB0b1xuICAvLyAgICByZXF1ZXN0LlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnICYmIHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICBodHRwRmV0Y2hQYXJhbXMgPSBmZXRjaFBhcmFtc1xuICAgIGh0dHBSZXF1ZXN0ID0gcmVxdWVzdFxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFNldCBodHRwUmVxdWVzdCB0byBhIGNsb25lIG9mIHJlcXVlc3QuXG4gICAgaHR0cFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QocmVxdWVzdClcblxuICAgIC8vIDIuIFNldCBodHRwRmV0Y2hQYXJhbXMgdG8gYSBjb3B5IG9mIGZldGNoUGFyYW1zLlxuICAgIGh0dHBGZXRjaFBhcmFtcyA9IHsgLi4uZmV0Y2hQYXJhbXMgfVxuXG4gICAgLy8gMy4gU2V0IGh0dHBGZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdCB0byBodHRwUmVxdWVzdC5cbiAgICBodHRwRmV0Y2hQYXJhbXMucmVxdWVzdCA9IGh0dHBSZXF1ZXN0XG4gIH1cblxuICAvLyAgICAzLiBMZXQgaW5jbHVkZUNyZWRlbnRpYWxzIGJlIHRydWUgaWYgb25lIG9mXG4gIGNvbnN0IGluY2x1ZGVDcmVkZW50aWFscyA9XG4gICAgcmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnIHx8XG4gICAgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdzYW1lLW9yaWdpbicgJiZcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJylcblxuICAvLyAgICA0LiBMZXQgY29udGVudExlbmd0aCBiZSBodHRwUmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgbGVuZ3RoLCBpZiBodHRwUmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgYm9keSBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBodHRwUmVxdWVzdC5ib2R5ID8gaHR0cFJlcXVlc3QuYm9keS5sZW5ndGggOiBudWxsXG5cbiAgLy8gICAgNS4gTGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBiZSBudWxsLlxuICBsZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gbnVsbFxuXG4gIC8vICAgIDYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgIG9yXG4gIC8vICAgIGBQVVRgLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gYDBgLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuYm9keSA9PSBudWxsICYmXG4gICAgWydQT1NUJywgJ1BVVCddLmluY2x1ZGVzKGh0dHBSZXF1ZXN0Lm1ldGhvZClcbiAgKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gJzAnXG4gIH1cblxuICAvLyAgICA3LiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG9cbiAgLy8gICAgY29udGVudExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShgJHtjb250ZW50TGVuZ3RofWApXG4gIH1cblxuICAvLyAgICA4LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDb250ZW50LUxlbmd0aGAvY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgaWYgKGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSAhPSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LWxlbmd0aCcsIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSwgdHJ1ZSlcbiAgfVxuXG4gIC8vICAgIDkuIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LUxlbmd0aGAsXG4gIC8vICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSkgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDEwLiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIGlzIHRydWUsXG4gIC8vICAgIHRoZW46XG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgaHR0cFJlcXVlc3Qua2VlcGFsaXZlKSB7XG4gICAgLy8gTk9URToga2VlcGFsaXZlIGlzIGEgbm9vcCBvdXRzaWRlIG9mIGJyb3dzZXIgY29udGV4dC5cbiAgfVxuXG4gIC8vICAgIDExLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgYSBVUkwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBSZWZlcmVyYC9odHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZCxcbiAgLy8gICAgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdyZWZlcmVyJywgaXNvbW9ycGhpY0VuY29kZShodHRwUmVxdWVzdC5yZWZlcnJlci5ocmVmKSwgdHJ1ZSlcbiAgfVxuXG4gIC8vICAgIDEyLiBBcHBlbmQgYSByZXF1ZXN0IGBPcmlnaW5gIGhlYWRlciBmb3IgaHR0cFJlcXVlc3QuXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTMuIEFwcGVuZCB0aGUgRmV0Y2ggbWV0YWRhdGEgaGVhZGVycyBmb3IgaHR0cFJlcXVlc3QuIFtGRVRDSC1NRVRBREFUQV1cbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YShodHRwUmVxdWVzdClcblxuICAvLyAgICAxNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFVzZXItQWdlbnRgLCB0aGVuXG4gIC8vICAgIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYFVzZXItQWdlbnRgL2RlZmF1bHQgYFVzZXItQWdlbnRgIHZhbHVlIHRvXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygndXNlci1hZ2VudCcsIHRydWUpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCd1c2VyLWFnZW50JywgZGVmYXVsdFVzZXJBZ2VudClcbiAgfVxuXG4gIC8vICAgIDE1LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcImRlZmF1bHRcIiBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0IGNvbnRhaW5zIGBJZi1Nb2RpZmllZC1TaW5jZWAsIGBJZi1Ob25lLU1hdGNoYCxcbiAgLy8gICAgYElmLVVubW9kaWZpZWQtU2luY2VgLCBgSWYtTWF0Y2hgLCBvciBgSWYtUmFuZ2VgLCB0aGVuIHNldFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ2RlZmF1bHQnICYmXG4gICAgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tb2RpZmllZC1zaW5jZScsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbm9uZS1tYXRjaCcsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtdW5tb2RpZmllZC1zaW5jZScsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbWF0Y2gnLCB0cnVlKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXJhbmdlJywgdHJ1ZSkpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMTYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tY2FjaGVcIiwgaHR0cFJlcXVlc3RcdTIwMTlzIHByZXZlbnRcbiAgLy8gICAgbm8tY2FjaGUgY2FjaGUtY29udHJvbCBoZWFkZXIgbW9kaWZpY2F0aW9uIGZsYWcgaXMgdW5zZXQsIGFuZFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDYWNoZS1Db250cm9sYC9gbWF4LWFnZT0wYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLWNhY2hlJyAmJlxuICAgICFodHRwUmVxdWVzdC5wcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbiAmJlxuICAgICFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcsIHRydWUpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICdtYXgtYWdlPTAnLCB0cnVlKVxuICB9XG5cbiAgLy8gICAgMTcuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiBvciBcInJlbG9hZFwiLCB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1zdG9yZScgfHwgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdyZWxvYWQnKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFByYWdtYWAsIHRoZW4gYXBwZW5kXG4gICAgLy8gYFByYWdtYWAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncHJhZ21hJywgdHJ1ZSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncHJhZ21hJywgJ25vLWNhY2hlJywgdHJ1ZSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsXG4gICAgLy8gdGhlbiBhcHBlbmQgYENhY2hlLUNvbnRyb2xgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnLCB0cnVlKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ25vLWNhY2hlJywgdHJ1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAgICAxOC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBBY2NlcHQtRW5jb2RpbmdgL2BpZGVudGl0eWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJywgdHJ1ZSkpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdpZGVudGl0eScsIHRydWUpXG4gIH1cblxuICAvLyAgICAxOS4gTW9kaWZ5IGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBwZXIgSFRUUC4gRG8gbm90IGFwcGVuZCBhIGdpdmVuXG4gIC8vICAgIGhlYWRlciBpZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgdGhhdCBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gIC8vICAgIFRPRE86IGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODUjaXNzdWVjb21tZW50LTg5NjU2MDEyOVxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtZW5jb2RpbmcnLCB0cnVlKSkge1xuICAgIGlmICh1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChodHRwUmVxdWVzdCkpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdiciwgZ3ppcCwgZGVmbGF0ZScsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsIGRlZmxhdGUnLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcsIHRydWUpXG5cbiAgLy8gICAgMjAuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCB0aGVuOlxuICBpZiAoaW5jbHVkZUNyZWRlbnRpYWxzKSB7XG4gICAgLy8gMS4gSWYgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gYmxvY2sgY29va2llcyBmb3IgaHR0cFJlcXVlc3RcbiAgICAvLyAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyAgICAyMS4gSWYgdGhlcmVcdTIwMTlzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnksIHVzZSBpdCBhcyBhcHByb3ByaWF0ZS5cbiAgLy8gICAgVE9ETzogcHJveHktYXV0aGVudGljYXRpb25cblxuICAvLyAgICAyMi4gU2V0IGh0dHBDYWNoZSB0byB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlXG4gIC8vICAgIHBhcnRpdGlvbiwgZ2l2ZW4gaHR0cFJlcXVlc3QuXG4gIC8vICAgIFRPRE86IGNhY2hlXG5cbiAgLy8gICAgMjMuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0b1xuICAvLyAgICBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMjQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIG5laXRoZXIgXCJuby1zdG9yZVwiIG5vciBcInJlbG9hZFwiLFxuICAvLyAgICB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgIT09ICduby1zdG9yZScgJiYgaHR0cFJlcXVlc3QuY2FjaGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnb25seS1pZi1jYWNoZWQnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignb25seSBpZiBjYWNoZWQnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBmb3J3YXJkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yayBmZXRjaFxuICAgIC8vIGdpdmVuIGh0dHBGZXRjaFBhcmFtcywgaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgaXNOZXdDb25uZWN0aW9uRmV0Y2guXG4gICAgY29uc3QgZm9yd2FyZFJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtGZXRjaChcbiAgICAgIGh0dHBGZXRjaFBhcmFtcyxcbiAgICAgIGluY2x1ZGVDcmVkZW50aWFscyxcbiAgICAgIGlzTmV3Q29ubmVjdGlvbkZldGNoXG4gICAgKVxuXG4gICAgLy8gMy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyB1bnNhZmUgYW5kIGZvcndhcmRSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzXG4gICAgLy8gaW4gdGhlIHJhbmdlIDIwMCB0byAzOTksIGluY2x1c2l2ZSwgaW52YWxpZGF0ZSBhcHByb3ByaWF0ZSBzdG9yZWRcbiAgICAvLyByZXNwb25zZXMgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlIFwiSW52YWxpZGF0aW9uXCIgY2hhcHRlciBvZiBIVFRQXG4gICAgLy8gQ2FjaGluZywgYW5kIHNldCBzdG9yZWRSZXNwb25zZSB0byBudWxsLiBbSFRUUC1DQUNISU5HXVxuICAgIGlmIChcbiAgICAgICFzYWZlTWV0aG9kc1NldC5oYXMoaHR0cFJlcXVlc3QubWV0aG9kKSAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPD0gMzk5XG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDQuIElmIHRoZSByZXZhbGlkYXRpbmdGbGFnIGlzIHNldCBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzA0LFxuICAgIC8vIHRoZW46XG4gICAgaWYgKHJldmFsaWRhdGluZ0ZsYWcgJiYgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDUuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZSB0byBmb3J3YXJkUmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGZvcndhcmRSZXNwb25zZVxuXG4gICAgICAvLyAyLiBTdG9yZSBodHRwUmVxdWVzdCBhbmQgZm9yd2FyZFJlc3BvbnNlIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZVxuICAgICAgLy8gXCJTdG9yaW5nIFJlc3BvbnNlcyBpbiBDYWNoZXNcIiBjaGFwdGVyIG9mIEhUVFAgQ2FjaGluZy4gW0hUVFAtQ0FDSElOR11cbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuICB9XG5cbiAgLy8gMTEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gYSBjbG9uZSBvZiBodHRwUmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlc3BvbnNlLnVybExpc3QgPSBbLi4uaHR0cFJlcXVlc3QudXJsTGlzdF1cblxuICAvLyAxMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5c1xuICAvLyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScsIHRydWUpKSB7XG4gICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXF1ZXN0LWluY2x1ZGVzLWNyZWRlbnRpYWxzIHRvIGluY2x1ZGVDcmVkZW50aWFscy5cbiAgcmVzcG9uc2UucmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHMgPSBpbmNsdWRlQ3JlZGVudGlhbHNcblxuICAvLyAxNC4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MDEsIGh0dHBSZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBub3RcbiAgLy8gXCJjb3JzXCIsIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCBhbmQgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50XG4gIC8vIHNldHRpbmdzIG9iamVjdCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwNywgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA3KSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgfVxuXG4gICAgLy8gMi4gPz8/XG5cbiAgICAvLyAzLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gNC4gUHJvbXB0IHRoZSBlbmQgdXNlciBhcyBhcHByb3ByaWF0ZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgYW5kIHN0b3JlXG4gICAgLy8gdGhlIHJlc3VsdCBhcyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LiBbSFRUUC1BVVRIXVxuICAgIC8vIFRPRE86IEludm9rZSBzb21lIGtpbmQgb2YgY2FsbGJhY2s/XG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlblxuICAgIC8vIGZldGNoUGFyYW1zLlxuICAgIC8vIFRPRE9cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncHJveHkgYXV0aGVudGljYXRpb24gcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gMTYuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gIGlmIChcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQyMVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDIxICYmXG4gICAgLy8gaXNOZXdDb25uZWN0aW9uRmV0Y2ggaXMgZmFsc2VcbiAgICAhaXNOZXdDb25uZWN0aW9uRmV0Y2ggJiZcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwsIG9yIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBub24tbnVsbFxuICAgIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCB8fCByZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICkge1xuICAgIC8vIHRoZW46XG5cbiAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGVcbiAgICAvLyBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcywgaXNBdXRoZW50aWNhdGlvbkZldGNoLCBhbmQgdHJ1ZS5cblxuICAgIC8vIFRPRE8gKHNwZWMpOiBUaGUgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBidXQgd2UgbmVlZCB0byBjYW5jZWxcbiAgICAvLyB0aGUgYWN0aXZlIHJlc3BvbnNlIGJlZm9yZSB3ZSBjYW4gc3RhcnQgYSBuZXcgb25lLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyOTNcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKFxuICAgICAgZmV0Y2hQYXJhbXMsXG4gICAgICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsXG4gICAgICB0cnVlXG4gICAgKVxuICB9XG5cbiAgLy8gMTcuIElmIGlzQXV0aGVudGljYXRpb25GZXRjaCBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBhdXRoZW50aWNhdGlvbiBlbnRyeVxuICBpZiAoaXNBdXRoZW50aWNhdGlvbkZldGNoKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTguIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaW5jbHVkZUNyZWRlbnRpYWxzID0gZmFsc2UsXG4gIGZvcmNlTmV3Q29ubmVjdGlvbiA9IGZhbHNlXG4pIHtcbiAgYXNzZXJ0KCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gfHwgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3llZClcblxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gPSB7XG4gICAgYWJvcnQ6IG51bGwsXG4gICAgZGVzdHJveWVkOiBmYWxzZSxcbiAgICBkZXN0cm95IChlcnIsIGFib3J0ID0gdHJ1ZSkge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgaWYgKGFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA0LiBMZXQgaHR0cENhY2hlIGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGUgcGFydGl0aW9uLFxuICAvLyBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPOiBjYWNoZVxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNS4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICByZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gNi4gTGV0IG5ldHdvcmtQYXJ0aXRpb25LZXkgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgbmV0d29ya1xuICAvLyBwYXJ0aXRpb24ga2V5IGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA3LiBMZXQgbmV3Q29ubmVjdGlvbiBiZSBcInllc1wiIGlmIGZvcmNlTmV3Q29ubmVjdGlvbiBpcyB0cnVlOyBvdGhlcndpc2VcbiAgLy8gXCJub1wiLlxuICBjb25zdCBuZXdDb25uZWN0aW9uID0gZm9yY2VOZXdDb25uZWN0aW9uID8gJ3llcycgOiAnbm8nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvLyA4LiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgbW9kZTpcbiAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLFxuICAgIC8vIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgIC8vIFRPRE9cbiAgfSBlbHNlIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIGNvbm5lY3Rpb24sIGdpdmVuXG4gICAgLy8gbmV0d29ya1BhcnRpdGlvbktleSwgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbixcbiAgICAvLyBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBmb3JjZU5ld0Nvbm5lY3Rpb24uXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gOS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIGNvbm5lY3Rpb24gaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgY2FsbGluZyBjbGFtcCBhbmQgY29hcnNlbiBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXNcbiAgLy8gICAgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSwgYW5kIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyAgICBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cblxuICAvLyAgICAzLiBJZiBjb25uZWN0aW9uIGlzIG5vdCBhbiBIVFRQLzIgY29ubmVjdGlvbiwgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gICAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIGFwcGVuZCAoYFRyYW5zZmVyLUVuY29kaW5nYCxcbiAgLy8gICAgYGNodW5rZWRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICA0LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gICAgY2FwYWJpbGl0eS5cblxuICAvLyAgICA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBtYWtpbmcgYW4gSFRUUCByZXF1ZXN0IG92ZXIgY29ubmVjdGlvblxuICAvLyAgICB1c2luZyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBjYXZlYXRzOlxuXG4gIC8vICAgICAgICAtIEZvbGxvdyB0aGUgcmVsZXZhbnQgcmVxdWlyZW1lbnRzIGZyb20gSFRUUC4gW0hUVFBdIFtIVFRQLVNFTUFOVElDU11cbiAgLy8gICAgICAgIFtIVFRQLUNPTkRdIFtIVFRQLUNBQ0hJTkddIFtIVFRQLUFVVEhdXG5cbiAgLy8gICAgICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLFxuICAvLyAgICAgICAgdGhlbiB0aGUgdXNlciBhZ2VudCBtYXkgaGF2ZSBhIGJ1ZmZlciBvZiB1cCB0byA2NCBraWJpYnl0ZXMgYW5kIHN0b3JlXG4gIC8vICAgICAgICBhIHBhcnQgb2YgcmVxdWVzdFx1MjAxOXMgYm9keSBpbiB0aGF0IGJ1ZmZlci4gSWYgdGhlIHVzZXIgYWdlbnQgcmVhZHMgZnJvbVxuICAvLyAgICAgICAgcmVxdWVzdFx1MjAxOXMgYm9keSBiZXlvbmQgdGhhdCBidWZmZXJcdTIwMTlzIHNpemUgYW5kIHRoZSB1c2VyIGFnZW50IG5lZWRzIHRvXG4gIC8vICAgICAgICByZXNlbmQgcmVxdWVzdCwgdGhlbiBpbnN0ZWFkIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgICAgIC0gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgICAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSxcbiAgLy8gICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB1c2VyIGFnZW50XHUyMDE5cyBIVFRQIHBhcnNlciByZWNlaXZlcyB0aGUgZmlyc3QgYnl0ZVxuICAvLyAgICAgICAgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXIgYnl0ZXMgZm9yIEhUVFAvMiBvciByZXNwb25zZSBzdGF0dXNcbiAgLy8gICAgICAgIGxpbmUgZm9yIEhUVFAvMS54KS5cblxuICAvLyAgICAgICAgLSBXYWl0IHVudGlsIGFsbCB0aGUgaGVhZGVycyBhcmUgdHJhbnNtaXR0ZWQuXG5cbiAgLy8gICAgICAgIC0gQW55IHJlc3BvbnNlcyB3aG9zZSBzdGF0dXMgaXMgaW4gdGhlIHJhbmdlIDEwMCB0byAxOTksIGluY2x1c2l2ZSxcbiAgLy8gICAgICAgIGFuZCBpcyBub3QgMTAxLCBhcmUgdG8gYmUgaWdub3JlZCwgZXhjZXB0IGZvciB0aGUgcHVycG9zZXMgb2Ygc2V0dGluZ1xuICAvLyAgICAgICAgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIGFib3ZlLlxuXG4gIC8vICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFRyYW5zZmVyLUVuY29kaW5nYC9gY2h1bmtlZGAgYW5kXG4gIC8vICAgIHJlc3BvbnNlIGlzIHRyYW5zZmVycmVkIHZpYSBIVFRQLzEuMCBvciBvbGRlciwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vICAgIGVycm9yLlxuXG4gIC8vICAgIC0gSWYgdGhlIEhUVFAgcmVxdWVzdCByZXN1bHRzIGluIGEgVExTIGNsaWVudCBjZXJ0aWZpY2F0ZSBkaWFsb2csIHRoZW46XG5cbiAgLy8gICAgICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QsIG1ha2UgdGhlXG4gIC8vICAgICAgICBkaWFsb2cgYXZhaWxhYmxlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cblxuICAvLyAgICAgICAgMi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vIFRvIHRyYW5zbWl0IHJlcXVlc3RcdTIwMTlzIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuICBsZXQgcmVxdWVzdEJvZHkgPSBudWxsXG4gIC8vIDEuIElmIGJvZHkgaXMgbnVsbCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpc1xuICAvLyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdFxuICAvLyBlbmQtb2YtYm9keSBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KCkpXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJvZHkgaXMgbm9uLW51bGw6XG5cbiAgICAvLyAgICAxLiBMZXQgcHJvY2Vzc0JvZHlDaHVuayBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUNodW5rID0gYXN5bmMgZnVuY3Rpb24gKiAoYnl0ZXMpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOiB0cmFuc21pdCBieXRlcy5cbiAgICAgIHlpZWxkIGJ5dGVzXG5cbiAgICAgIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBpcyBub24tbnVsbCwgdGhlbiBydW5cbiAgICAgIC8vIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBnaXZlbiBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGg/LihieXRlcy5ieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBwcm9jZXNzRW5kT2ZCb2R5IGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsXG4gICAgICAvLyB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5LlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBnaXZlbiBlIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZSkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBlIGlzIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbiwgdGhlbiBhYm9ydCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlci5cbiAgICAgIGlmIChlLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSW5jcmVtZW50YWxseSByZWFkIHJlcXVlc3RcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHlDaHVuaywgcHJvY2Vzc0VuZE9mQm9keSxcbiAgICAvLyBwcm9jZXNzQm9keUVycm9yLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgcmVxdWVzdEJvZHkgPSAoYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGJ5dGVzIG9mIHJlcXVlc3QuYm9keS5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHByb2Nlc3NCb2R5Q2h1bmsoYnl0ZXMpXG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0VuZE9mQm9keSgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzb2NrZXQgaXMgb25seSBwcm92aWRlZCBmb3Igd2Vic29ja2V0c1xuICAgIGNvbnN0IHsgYm9keSwgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0gPSBhd2FpdCBkaXNwYXRjaCh7IGJvZHk6IHJlcXVlc3RCb2R5IH0pXG5cbiAgICBpZiAoc29ja2V0KSB7XG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IGJvZHlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCA9ICgpID0+IGl0ZXJhdG9yLm5leHQoKVxuXG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QgfSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDEwLiBJZiBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAvLyAxLiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICAgIC8vIDIuIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zLCBlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoZXJyKVxuICB9XG5cbiAgLy8gMTEuIExldCBwdWxsQWxnb3JpdGhtIGJlIGFuIGFjdGlvbiB0aGF0IHJlc3VtZXMgdGhlIG9uZ29pbmcgZmV0Y2hcbiAgLy8gaWYgaXQgaXMgc3VzcGVuZGVkLlxuICBjb25zdCBwdWxsQWxnb3JpdGhtID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lKClcbiAgfVxuXG4gIC8vIDEyLiBMZXQgY2FuY2VsQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFib3J0cyBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gY29udHJvbGxlciB3aXRoIHJlYXNvbiwgZ2l2ZW4gcmVhc29uLlxuICBjb25zdCBjYW5jZWxBbGdvcml0aG0gPSAocmVhc29uKSA9PiB7XG4gICAgLy8gSWYgdGhlIGFib3J0ZWQgZmV0Y2ggd2FzIGFscmVhZHkgdGVybWluYXRlZCwgdGhlbiB3ZSBkbyBub3RcbiAgICAvLyBuZWVkIHRvIGRvIGFueXRoaW5nLlxuICAgIGlmICghaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KHJlYXNvbilcbiAgICB9XG4gIH1cblxuICAvLyAxMy4gTGV0IGhpZ2hXYXRlck1hcmsgYmUgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4gbnVtYmVyLCBjaG9zZW4gYnlcbiAgLy8gdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNC4gTGV0IHNpemVBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWNjZXB0cyBhIGNodW5rIG9iamVjdFxuICAvLyBhbmQgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiwgbm9uLWluZmluaXRlIG51bWJlciwgY2hvc2VuIGJ5IHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIExldCBzdHJlYW0gYmUgYSBuZXcgUmVhZGFibGVTdHJlYW0uXG4gIC8vIDE2LiBTZXQgdXAgc3RyZWFtIHdpdGggYnl0ZSByZWFkaW5nIHN1cHBvcnQgd2l0aCBwdWxsQWxnb3JpdGhtIHNldCB0byBwdWxsQWxnb3JpdGhtLFxuICAvLyAgICAgY2FuY2VsQWxnb3JpdGhtIHNldCB0byBjYW5jZWxBbGdvcml0aG0uXG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoY29udHJvbGxlcikge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBhd2FpdCBwdWxsQWxnb3JpdGhtKGNvbnRyb2xsZXIpXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgY2FuY2VsQWxnb3JpdGhtKHJlYXNvbilcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnYnl0ZXMnXG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0sIHNvdXJjZTogbnVsbCwgbGVuZ3RoOiBudWxsIH1cblxuICAvLyAgICAyLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzXG4gIC8vICAgIG5vdCBcIm5vLXN0b3JlXCIsIHRoZW4gdXBkYXRlIHJlc3BvbnNlIGluIGh0dHBDYWNoZSBmb3IgcmVxdWVzdC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vICAgIDMuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlIGFuZCB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZFxuICAvLyAgICB0byBibG9jayBjb29raWVzIGZvciByZXF1ZXN0IChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW4gcnVuIHRoZVxuICAvLyAgICBcInNldC1jb29raWUtc3RyaW5nXCIgcGFyc2luZyBhbGdvcml0aG0gKHNlZSBzZWN0aW9uIDUuMiBvZiBbQ09PS0lFU10pIG9uXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiBlYWNoIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAvLyAgICBgU2V0LUNvb2tpZWAgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LCBpZiBhbnksIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vIDE4LiBJZiBhYm9ydGVkLCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTkuIFJ1biB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbDpcblxuICAvLyAgICAxLiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkOlxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZCA9IG9uQWJvcnRlZFxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgb25BYm9ydGVkKVxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSA9IGFzeW5jICgpID0+IHtcbiAgICAvLyAxLiBXaGlsZSB0cnVlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIDEtMy4gU2VlIG9uRGF0YS4uLlxuXG4gICAgICAvLyA0LiBTZXQgYnl0ZXMgdG8gdGhlIHJlc3VsdCBvZiBoYW5kbGluZyBjb250ZW50IGNvZGluZ3MgZ2l2ZW5cbiAgICAgIC8vIGNvZGluZ3MgYW5kIGJ5dGVzLlxuICAgICAgbGV0IGJ5dGVzXG4gICAgICBsZXQgaXNGYWlsdXJlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQoKVxuXG4gICAgICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzID0gZG9uZSA/IHVuZGVmaW5lZCA6IHZhbHVlXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgJiYgIXRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplKSB7XG4gICAgICAgICAgLy8gemxpYiBkb2Vzbid0IGxpa2UgZW1wdHkgc3RyZWFtcy5cbiAgICAgICAgICBieXRlcyA9IHVuZGVmaW5lZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5dGVzID0gZXJyXG5cbiAgICAgICAgICAvLyBlcnIgbWF5IGJlIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgcmVhZGFibGVzdHJlYW0uY2FuY2VsLFxuICAgICAgICAgIC8vIHdoaWNoIG1pZ2h0IG5vdCBiZSBhbiBlcnJvci4gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMDlcbiAgICAgICAgICBpc0ZhaWx1cmUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGUgYnl0ZXMgdHJhbnNtaXNzaW9uIGZvciByZXNwb25zZVx1MjAxOXMgbWVzc2FnZVxuICAgICAgICAvLyBib2R5IGlzIGRvbmUgbm9ybWFsbHkgYW5kIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBjbG9zZVxuICAgICAgICAvLyBzdHJlYW0sIGZpbmFsaXplIHJlc3BvbnNlIGZvciBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UsIGFuZFxuICAgICAgICAvLyBhYm9ydCB0aGVzZSBpbi1wYXJhbGxlbCBzdGVwcy5cbiAgICAgICAgcmVhZGFibGVTdHJlYW1DbG9zZShmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIpXG5cbiAgICAgICAgZmluYWxpemVSZXNwb25zZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIEluY3JlYXNlIHRpbWluZ0luZm9cdTIwMTlzIGRlY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICB0aW1pbmdJbmZvLmRlY29kZWRCb2R5U2l6ZSArPSBieXRlcz8uYnl0ZUxlbmd0aCA/PyAwXG5cbiAgICAgIC8vIDYuIElmIGJ5dGVzIGlzIGZhaWx1cmUsIHRoZW4gdGVybWluYXRlIGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGlzRmFpbHVyZSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShieXRlcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDcuIEVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgYnl0ZXNcbiAgICAgIC8vIGludG8gc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpXG4gICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVucXVldWUoYnVmZmVyKVxuICAgICAgfVxuXG4gICAgICAvLyA4LiBJZiBzdHJlYW0gaXMgZXJyb3JlZCwgdGhlbiB0ZXJtaW5hdGUgdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gOS4gSWYgc3RyZWFtIGRvZXNuXHUyMDE5dCBuZWVkIG1vcmUgZGF0YSBhc2sgdGhlIHVzZXIgYWdlbnQgdG8gc3VzcGVuZFxuICAgICAgLy8gdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplIDw9IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gICAgMi4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgZnVuY3Rpb24gb25BYm9ydGVkIChyZWFzb24pIHtcbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZy5cbiAgICAgIHJlc3BvbnNlLmFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIElmIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciBzdHJlYW0gd2l0aCB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5c1xuICAgICAgLy8gICAgY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kIGFuXG4gICAgICAvLyAgICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJlYWxtLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IoXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHN0cmVhbSBpcyByZWFkYWJsZSwgZXJyb3Igc3RyZWFtIHdpdGggYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihuZXcgVHlwZUVycm9yKCd0ZXJtaW5hdGVkJywge1xuICAgICAgICAgIGNhdXNlOiBpc0Vycm9yTGlrZShyZWFzb24pID8gcmVhc29uIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyA1LiBPdGhlcndpc2UsIHRoZSB1c2VyIGFnZW50IHNob3VsZCBjbG9zZSBjb25uZWN0aW9uIHVubGVzcyBpdCB3b3VsZCBiZSBiYWQgZm9yIHBlcmZvcm1hbmNlIHRvIGRvIHNvLlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgfVxuXG4gIC8vIDIwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoICh7IGJvZHkgfSkge1xuICAgIGNvbnN0IHVybCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uJykuQWdlbnR9ICovXG4gICAgY29uc3QgYWdlbnQgPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXJcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBhZ2VudC5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCxcbiAgICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICBib2R5OiBhZ2VudC5pc01vY2tBY3RpdmUgPyByZXF1ZXN0LmJvZHkgJiYgKHJlcXVlc3QuYm9keS5zb3VyY2UgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSkgOiBib2R5LFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnNMaXN0LmVudHJpZXMsXG4gICAgICAgIG1heFJlZGlyZWN0aW9uczogMCxcbiAgICAgICAgdXBncmFkZTogcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JyA/ICd3ZWJzb2NrZXQnIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBib2R5OiBudWxsLFxuICAgICAgICBhYm9ydDogbnVsbCxcblxuICAgICAgICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCBjb25uZWN0aW9uIGhlcmU/XG4gICAgICAgICAgY29uc3QgeyBjb25uZWN0aW9uIH0gPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW5cbiAgICAgICAgICAvLyBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXMgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnRcbiAgICAgICAgICAvLyB0aW1lLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgICAgICAgIC8vIFRPRE86IGltcGxlbWVudCBjb25uZWN0aW9uIHRpbWluZ1xuICAgICAgICAgIHRpbWluZ0luZm8uZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbyA9IGNsYW1wQW5kQ29hcnNlbkNvbm5lY3Rpb25UaW1pbmdJbmZvKHVuZGVmaW5lZCwgdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUsIGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBhYm9ydChuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBhYm9ydClcbiAgICAgICAgICAgIHRoaXMuYWJvcnQgPSBjb25uZWN0aW9uLmFib3J0ID0gYWJvcnRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuXG4gICAgICAgICAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgICAgICAgIHRpbWluZ0luZm8uZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uUmVzcG9uc2VTdGFydGVkICgpIHtcbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnRcbiAgICAgICAgICAvLyB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICAgICAgICAgLy8gdXNlciBhZ2VudFx1MjAxOXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXJcbiAgICAgICAgICAvLyBieXRlcyBmb3IgSFRUUC8yIG9yIHJlc3BvbnNlIHN0YXR1cyBsaW5lIGZvciBIVFRQLzEueCkuXG4gICAgICAgICAgdGltaW5nSW5mby5maW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzIDwgMjAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbG9jYXRpb24gPSAnJ1xuXG4gICAgICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdIZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZShyYXdIZWFkZXJzW2ldKSwgcmF3SGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ2xhdGluMScpLCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBsb2NhdGlvbiA9IGhlYWRlcnNMaXN0LmdldCgnbG9jYXRpb24nLCB0cnVlKVxuXG4gICAgICAgICAgdGhpcy5ib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVhZDogcmVzdW1lIH0pXG5cbiAgICAgICAgICBjb25zdCBkZWNvZGVycyA9IFtdXG5cbiAgICAgICAgICBjb25zdCB3aWxsRm9sbG93ID0gbG9jYXRpb24gJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycgJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgY29uc3QgY29udGVudEVuY29kaW5nID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LWVuY29kaW5nJywgdHJ1ZSlcbiAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgICAgICAgICAgY29uc3QgY29kaW5ncyA9IGNvbnRlbnRFbmNvZGluZyA/IGNvbnRlbnRFbmNvZGluZy50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykgOiBbXVxuXG4gICAgICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbnRlbnQtZW5jb2RpbmdzIHRvIHByZXZlbnQgcmVzb3VyY2UgZXhoYXVzdGlvbi5cbiAgICAgICAgICAgIC8vIENWRSBmaXggc2ltaWxhciB0byB1cmxsaWIzIChHSFNBLWdtNjIteHYyai00dzUzKSBhbmQgY3VybCAoQ1ZFLTIwMjItMzIyMDYpLlxuICAgICAgICAgICAgY29uc3QgbWF4Q29udGVudEVuY29kaW5ncyA9IDVcbiAgICAgICAgICAgIGlmIChjb2RpbmdzLmxlbmd0aCA+IG1heENvbnRlbnRFbmNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdG9vIG1hbnkgY29udGVudC1lbmNvZGluZ3MgaW4gcmVzcG9uc2U6ICR7Y29kaW5ncy5sZW5ndGh9LCBtYXhpbXVtIGFsbG93ZWQgaXMgJHttYXhDb250ZW50RW5jb2RpbmdzfWApKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY29kaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICBjb25zdCBjb2RpbmcgPSBjb2RpbmdzW2ldLnRyaW0oKVxuICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMi5odG1sI3NlY3Rpb24tNy4yXG4gICAgICAgICAgICAgIGlmIChjb2RpbmcgPT09ICd4LWd6aXAnIHx8IGNvZGluZyA9PT0gJ2d6aXAnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUd1bnppcCh7XG4gICAgICAgICAgICAgICAgICAvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcbiAgICAgICAgICAgICAgICAgIC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgLy8gYnkgY29tbW9uIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cbiAgICAgICAgICAgICAgICAgIGZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnZGVmbGF0ZScpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKGNyZWF0ZUluZmxhdGUoe1xuICAgICAgICAgICAgICAgICAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0hcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyh7XG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuQlJPVExJX09QRVJBVElPTl9GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5CUk9UTElfT1BFUkFUSU9OX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMubGVuZ3RoID0gMFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBvbkVycm9yID0gdGhpcy5vbkVycm9yLmJpbmQodGhpcylcblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0LFxuICAgICAgICAgICAgYm9keTogZGVjb2RlcnMubGVuZ3RoXG4gICAgICAgICAgICAgID8gcGlwZWxpbmUodGhpcy5ib2R5LCAuLi5kZWNvZGVycywgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgICAgICA6IHRoaXMuYm9keS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRGF0YSAoY2h1bmspIHtcbiAgICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAxLiBJZiBvbmUgb3IgbW9yZSBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgZnJvbSByZXNwb25zZVx1MjAxOXNcbiAgICAgICAgICAvLyBtZXNzYWdlIGJvZHksIHRoZW46XG5cbiAgICAgICAgICAvLyAgMS4gTGV0IGJ5dGVzIGJlIHRoZSB0cmFuc21pdHRlZCBieXRlcy5cbiAgICAgICAgICBjb25zdCBieXRlcyA9IGNodW5rXG5cbiAgICAgICAgICAvLyAgMi4gTGV0IGNvZGluZ3MgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgICAgIC8vICBnaXZlbiBgQ29udGVudC1FbmNvZGluZ2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgICAgICAvLyAgU2VlIHB1bGxBbGdvcml0aG0uXG5cbiAgICAgICAgICAvLyAgMy4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZW5jb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgICAgICB0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSArPSBieXRlcy5ieXRlTGVuZ3RoXG5cbiAgICAgICAgICAvLyAgNC4gU2VlIHB1bGxBbGdvcml0aG0uLi5cblxuICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkucHVzaChieXRlcylcbiAgICAgICAgfSxcblxuICAgICAgICBvbkNvbXBsZXRlICgpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5ib2R5LnB1c2gobnVsbClcbiAgICAgICAgfSxcblxuICAgICAgICBvbkVycm9yIChlcnJvcikge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5Py5kZXN0cm95KGVycm9yKVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyb3IpXG5cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25VcGdyYWRlIChzdGF0dXMsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09IDEwMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdIZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZShyYXdIZWFkZXJzW2ldKSwgcmF3SGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ2xhdGluMScpLCB0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdCxcbiAgICAgICAgICAgIHNvY2tldFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmV0Y2gsXG4gIEZldGNoLFxuICBmZXRjaGluZyxcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuXG5jb25zdCBrU3RhdGUgPSBTeW1ib2woJ1Byb2dyZXNzRXZlbnQgc3RhdGUnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNwcm9ncmVzc2V2ZW50XG4gKi9cbmNsYXNzIFByb2dyZXNzRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUsICdQcm9ncmVzc0V2ZW50IGNvbnN0cnVjdG9yJywgJ3R5cGUnKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVuY29kaW5nLWdldFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBsYWJlbFxuICovXG5mdW5jdGlvbiBnZXRFbmNvZGluZyAobGFiZWwpIHtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAvLyAyLiBJZiBsYWJlbCBpcyBhbiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBhbnkgb2YgdGhlXG4gIC8vICAgIGxhYmVscyBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgY29ycmVzcG9uZGluZyBlbmNvZGluZzsgb3RoZXJ3aXNlIHJldHVybiBmYWlsdXJlLlxuICBzd2l0Y2ggKGxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAndW5pY29kZS0xLTEtdXRmLTgnOlxuICAgIGNhc2UgJ3VuaWNvZGUxMXV0ZjgnOlxuICAgIGNhc2UgJ3VuaWNvZGUyMHV0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd4LXVuaWNvZGUyMHV0ZjgnOlxuICAgICAgcmV0dXJuICdVVEYtOCdcbiAgICBjYXNlICc4NjYnOlxuICAgIGNhc2UgJ2NwODY2JzpcbiAgICBjYXNlICdjc2libTg2Nic6XG4gICAgY2FzZSAnaWJtODY2JzpcbiAgICAgIHJldHVybiAnSUJNODY2J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4yJzpcbiAgICBjYXNlICdpc28tODg1OS0yJzpcbiAgICBjYXNlICdpc28taXItMTAxJzpcbiAgICBjYXNlICdpc284ODU5LTInOlxuICAgIGNhc2UgJ2lzbzg4NTkyJzpcbiAgICBjYXNlICdpc29fODg1OS0yJzpcbiAgICBjYXNlICdpc29fODg1OS0yOjE5ODcnOlxuICAgIGNhc2UgJ2wyJzpcbiAgICBjYXNlICdsYXRpbjInOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0yJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4zJzpcbiAgICBjYXNlICdpc28tODg1OS0zJzpcbiAgICBjYXNlICdpc28taXItMTA5JzpcbiAgICBjYXNlICdpc284ODU5LTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkzJzpcbiAgICBjYXNlICdpc29fODg1OS0zJzpcbiAgICBjYXNlICdpc29fODg1OS0zOjE5ODgnOlxuICAgIGNhc2UgJ2wzJzpcbiAgICBjYXNlICdsYXRpbjMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0zJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW40JzpcbiAgICBjYXNlICdpc28tODg1OS00JzpcbiAgICBjYXNlICdpc28taXItMTEwJzpcbiAgICBjYXNlICdpc284ODU5LTQnOlxuICAgIGNhc2UgJ2lzbzg4NTk0JzpcbiAgICBjYXNlICdpc29fODg1OS00JzpcbiAgICBjYXNlICdpc29fODg1OS00OjE5ODgnOlxuICAgIGNhc2UgJ2w0JzpcbiAgICBjYXNlICdsYXRpbjQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS00J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5jeXJpbGxpYyc6XG4gICAgY2FzZSAnY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTUnOlxuICAgIGNhc2UgJ2lzby1pci0xNDQnOlxuICAgIGNhc2UgJ2lzbzg4NTktNSc6XG4gICAgY2FzZSAnaXNvODg1OTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTU6MTk4OCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTUnXG4gICAgY2FzZSAnYXJhYmljJzpcbiAgICBjYXNlICdhc21vLTcwOCc6XG4gICAgY2FzZSAnY3Npc284ODU5NmUnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZpJzpcbiAgICBjYXNlICdjc2lzb2xhdGluYXJhYmljJzpcbiAgICBjYXNlICdlY21hLTExNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNic6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1lJzpcbiAgICBjYXNlICdpc28tODg1OS02LWknOlxuICAgIGNhc2UgJ2lzby1pci0xMjcnOlxuICAgIGNhc2UgJ2lzbzg4NTktNic6XG4gICAgY2FzZSAnaXNvODg1OTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTY6MTk4Nyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTYnXG4gICAgY2FzZSAnY3Npc29sYXRpbmdyZWVrJzpcbiAgICBjYXNlICdlY21hLTExOCc6XG4gICAgY2FzZSAnZWxvdF85MjgnOlxuICAgIGNhc2UgJ2dyZWVrJzpcbiAgICBjYXNlICdncmVlazgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTcnOlxuICAgIGNhc2UgJ2lzby1pci0xMjYnOlxuICAgIGNhc2UgJ2lzbzg4NTktNyc6XG4gICAgY2FzZSAnaXNvODg1OTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTc6MTk4Nyc6XG4gICAgY2FzZSAnc3VuX2V1X2dyZWVrJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNydcbiAgICBjYXNlICdjc2lzbzg4NTk4ZSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmhlYnJldyc6XG4gICAgY2FzZSAnaGVicmV3JzpcbiAgICBjYXNlICdpc28tODg1OS04JzpcbiAgICBjYXNlICdpc28tODg1OS04LWUnOlxuICAgIGNhc2UgJ2lzby1pci0xMzgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOCc6XG4gICAgY2FzZSAnaXNvODg1OTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTg6MTk4OCc6XG4gICAgY2FzZSAndmlzdWFsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOCdcbiAgICBjYXNlICdjc2lzbzg4NTk4aSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1pJzpcbiAgICBjYXNlICdsb2dpY2FsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOC1JJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW42JzpcbiAgICBjYXNlICdpc28tODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvLWlyLTE1Nyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvODg1OTEwJzpcbiAgICBjYXNlICdsNic6XG4gICAgY2FzZSAnbGF0aW42JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTAnXG4gICAgY2FzZSAnaXNvLTg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEzJ1xuICAgIGNhc2UgJ2lzby04ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5MTQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNCdcbiAgICBjYXNlICdjc2lzb2xhdGluOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMTUnOlxuICAgIGNhc2UgJ2w5JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTUnXG4gICAgY2FzZSAnaXNvLTg4NTktMTYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNidcbiAgICBjYXNlICdjc2tvaThyJzpcbiAgICBjYXNlICdrb2knOlxuICAgIGNhc2UgJ2tvaTgnOlxuICAgIGNhc2UgJ2tvaTgtcic6XG4gICAgY2FzZSAna29pOF9yJzpcbiAgICAgIHJldHVybiAnS09JOC1SJ1xuICAgIGNhc2UgJ2tvaTgtcnUnOlxuICAgIGNhc2UgJ2tvaTgtdSc6XG4gICAgICByZXR1cm4gJ0tPSTgtVSdcbiAgICBjYXNlICdjc21hY2ludG9zaCc6XG4gICAgY2FzZSAnbWFjJzpcbiAgICBjYXNlICdtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ3gtbWFjLXJvbWFuJzpcbiAgICAgIHJldHVybiAnbWFjaW50b3NoJ1xuICAgIGNhc2UgJ2lzby04ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5MTEnOlxuICAgIGNhc2UgJ3Rpcy02MjAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtODc0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy04NzQnXG4gICAgY2FzZSAnY3AxMjUwJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTAnOlxuICAgIGNhc2UgJ3gtY3AxMjUwJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUwJ1xuICAgIGNhc2UgJ2NwMTI1MSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUxJzpcbiAgICBjYXNlICd4LWNwMTI1MSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MSdcbiAgICBjYXNlICdhbnNpX3gzLjQtMTk2OCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2NwMTI1Mic6XG4gICAgY2FzZSAnY3A4MTknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW4xJzpcbiAgICBjYXNlICdpYm04MTknOlxuICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgIGNhc2UgJ2lzby1pci0xMDAnOlxuICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgY2FzZSAnaXNvODg1OTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgY2FzZSAnbDEnOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAndXMtYXNjaWknOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTInXG4gICAgY2FzZSAnY3AxMjUzJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTMnOlxuICAgIGNhc2UgJ3gtY3AxMjUzJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUzJ1xuICAgIGNhc2UgJ2NwMTI1NCc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTknOlxuICAgIGNhc2UgJ2lzby1pci0xNDgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOSc6XG4gICAgY2FzZSAnaXNvODg1OTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTk6MTk4OSc6XG4gICAgY2FzZSAnbDUnOlxuICAgIGNhc2UgJ2xhdGluNSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU0JzpcbiAgICBjYXNlICd4LWNwMTI1NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NCdcbiAgICBjYXNlICdjcDEyNTUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NSc6XG4gICAgY2FzZSAneC1jcDEyNTUnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTUnXG4gICAgY2FzZSAnY3AxMjU2JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTYnOlxuICAgIGNhc2UgJ3gtY3AxMjU2JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU2J1xuICAgIGNhc2UgJ2NwMTI1Nyc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU3JzpcbiAgICBjYXNlICd4LWNwMTI1Nyc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NydcbiAgICBjYXNlICdjcDEyNTgnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1OCc6XG4gICAgY2FzZSAneC1jcDEyNTgnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTgnXG4gICAgY2FzZSAneC1tYWMtY3lyaWxsaWMnOlxuICAgIGNhc2UgJ3gtbWFjLXVrcmFpbmlhbic6XG4gICAgICByZXR1cm4gJ3gtbWFjLWN5cmlsbGljJ1xuICAgIGNhc2UgJ2NoaW5lc2UnOlxuICAgIGNhc2UgJ2NzZ2IyMzEyJzpcbiAgICBjYXNlICdjc2lzbzU4Z2IyMzEyODAnOlxuICAgIGNhc2UgJ2diMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMi04MCc6XG4gICAgY2FzZSAnZ2JrJzpcbiAgICBjYXNlICdpc28taXItNTgnOlxuICAgIGNhc2UgJ3gtZ2JrJzpcbiAgICAgIHJldHVybiAnR0JLJ1xuICAgIGNhc2UgJ2diMTgwMzAnOlxuICAgICAgcmV0dXJuICdnYjE4MDMwJ1xuICAgIGNhc2UgJ2JpZzUnOlxuICAgIGNhc2UgJ2JpZzUtaGtzY3MnOlxuICAgIGNhc2UgJ2NuLWJpZzUnOlxuICAgIGNhc2UgJ2NzYmlnNSc6XG4gICAgY2FzZSAneC14LWJpZzUnOlxuICAgICAgcmV0dXJuICdCaWc1J1xuICAgIGNhc2UgJ2NzZXVjcGtkZm10amFwYW5lc2UnOlxuICAgIGNhc2UgJ2V1Yy1qcCc6XG4gICAgY2FzZSAneC1ldWMtanAnOlxuICAgICAgcmV0dXJuICdFVUMtSlAnXG4gICAgY2FzZSAnY3Npc28yMDIyanAnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWpwJzpcbiAgICAgIHJldHVybiAnSVNPLTIwMjItSlAnXG4gICAgY2FzZSAnY3NzaGlmdGppcyc6XG4gICAgY2FzZSAnbXM5MzInOlxuICAgIGNhc2UgJ21zX2thbmppJzpcbiAgICBjYXNlICdzaGlmdC1qaXMnOlxuICAgIGNhc2UgJ3NoaWZ0X2ppcyc6XG4gICAgY2FzZSAnc2ppcyc6XG4gICAgY2FzZSAnd2luZG93cy0zMWonOlxuICAgIGNhc2UgJ3gtc2ppcyc6XG4gICAgICByZXR1cm4gJ1NoaWZ0X0pJUydcbiAgICBjYXNlICdjc2V1Y2tyJzpcbiAgICBjYXNlICdjc2tzYzU2MDExOTg3JzpcbiAgICBjYXNlICdldWMta3InOlxuICAgIGNhc2UgJ2lzby1pci0xNDknOlxuICAgIGNhc2UgJ2tvcmVhbic6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODcnOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg5JzpcbiAgICBjYXNlICdrc2M1NjAxJzpcbiAgICBjYXNlICdrc2NfNTYwMSc6XG4gICAgY2FzZSAnd2luZG93cy05NDknOlxuICAgICAgcmV0dXJuICdFVUMtS1InXG4gICAgY2FzZSAnY3Npc28yMDIya3InOlxuICAgIGNhc2UgJ2h6LWdiLTIzMTInOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbi1leHQnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWtyJzpcbiAgICBjYXNlICdyZXBsYWNlbWVudCc6XG4gICAgICByZXR1cm4gJ3JlcGxhY2VtZW50J1xuICAgIGNhc2UgJ3VuaWNvZGVmZmZlJzpcbiAgICBjYXNlICd1dGYtMTZiZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICAgIGNhc2UgJ2NzdW5pY29kZSc6XG4gICAgY2FzZSAnaXNvLTEwNjQ2LXVjcy0yJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndW5pY29kZSc6XG4gICAgY2FzZSAndW5pY29kZWZlZmYnOlxuICAgIGNhc2UgJ3V0Zi0xNic6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgICBjYXNlICd4LXVzZXItZGVmaW5lZCc6XG4gICAgICByZXR1cm4gJ3gtdXNlci1kZWZpbmVkJ1xuICAgIGRlZmF1bHQ6IHJldHVybiAnZmFpbHVyZSdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0RW5jb2Rpbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBrU3RhdGUsXG4gIGtFcnJvcixcbiAga1Jlc3VsdCxcbiAga0Fib3J0ZWQsXG4gIGtMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgUHJvZ3Jlc3NFdmVudCB9ID0gcmVxdWlyZSgnLi9wcm9ncmVzc2V2ZW50JylcbmNvbnN0IHsgZ2V0RW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4vZW5jb2RpbmcnKVxuY29uc3QgeyBzZXJpYWxpemVBTWltZVR5cGUsIHBhcnNlTUlNRVR5cGUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJylcbmNvbnN0IHsgYnRvYSB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRPcGVyYXRpb25cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSBmclxuICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiByZWFkT3BlcmF0aW9uIChmciwgYmxvYiwgdHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBcImxvYWRpbmdcIiwgdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3JcbiAgLy8gICAgRE9NRXhjZXB0aW9uLlxuICBpZiAoZnJba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBzdGF0ZScsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gIH1cblxuICAvLyAyLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwibG9hZGluZ1wiLlxuICBmcltrU3RhdGVdID0gJ2xvYWRpbmcnXG5cbiAgLy8gMy4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gbnVsbC5cbiAgZnJba1Jlc3VsdF0gPSBudWxsXG5cbiAgLy8gNC4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBudWxsLlxuICBmcltrRXJyb3JdID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdHJlYW0gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGdldCBzdHJlYW0gb24gYmxvYi5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbX0gKi9cbiAgY29uc3Qgc3RyZWFtID0gYmxvYi5zdHJlYW0oKVxuXG4gIC8vIDYuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZyb20gc3RyZWFtLlxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAvLyA3LiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyA4LiBMZXQgY2h1bmtQcm9taXNlIGJlIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhIGNodW5rIGZyb21cbiAgLy8gICAgc3RyZWFtIHdpdGggcmVhZGVyLlxuICBsZXQgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuXG4gIC8vIDkuIExldCBpc0ZpcnN0Q2h1bmsgYmUgdHJ1ZS5cbiAgbGV0IGlzRmlyc3RDaHVuayA9IHRydWVcblxuICAvLyAxMC4gSW4gcGFyYWxsZWwsIHdoaWxlIHRydWU6XG4gIC8vIE5vdGU6IFwiSW4gcGFyYWxsZWxcIiBqdXN0IG1lYW5zIG5vbi1ibG9ja2luZ1xuICAvLyBOb3RlIDI6IHJlYWRPcGVyYXRpb24gaXRzZWxmIGNhbm5vdCBiZSBhc3luYyBhcyBkb3VibGVcbiAgLy8gcmVhZGluZyB0aGUgYm9keSB3b3VsZCB0aGVuIHJlamVjdCB0aGUgcHJvbWlzZSwgaW5zdGVhZFxuICAvLyBvZiB0aHJvd2luZyBhbiBlcnJvci5cbiAgOyhhc3luYyAoKSA9PiB7XG4gICAgd2hpbGUgKCFmcltrQWJvcnRlZF0pIHtcbiAgICAgIC8vIDEuIFdhaXQgZm9yIGNodW5rUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBjaHVua1Byb21pc2VcblxuICAgICAgICAvLyAyLiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkLCBhbmQgaXNGaXJzdENodW5rIGlzXG4gICAgICAgIC8vICAgIHRydWUsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkXG4gICAgICAgIC8vICAgIGxvYWRzdGFydCBhdCBmci5cbiAgICAgICAgaWYgKGlzRmlyc3RDaHVuayAmJiAhZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2Fkc3RhcnQnLCBmcilcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gU2V0IGlzRmlyc3RDaHVuayB0byBmYWxzZS5cbiAgICAgICAgaXNGaXJzdENodW5rID0gZmFsc2VcblxuICAgICAgICAvLyA0LiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW4gb2JqZWN0IHdob3NlXG4gICAgICAgIC8vICAgIGRvbmUgcHJvcGVydHkgaXMgZmFsc2UgYW5kIHdob3NlIHZhbHVlIHByb3BlcnR5IGlzXG4gICAgICAgIC8vICAgIGEgVWludDhBcnJheSBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcbiAgICAgICAgaWYgKCFkb25lICYmIHR5cGVzLmlzVWludDhBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyAxLiBMZXQgYnMgYmUgdGhlIGJ5dGUgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlXG4gICAgICAgICAgLy8gICAgVWludDhBcnJheSBvYmplY3QuXG5cbiAgICAgICAgICAvLyAyLiBBcHBlbmQgYnMgdG8gYnl0ZXMuXG4gICAgICAgICAgYnl0ZXMucHVzaCh2YWx1ZSlcblxuICAgICAgICAgIC8vIDMuIElmIHJvdWdobHkgNTBtcyBoYXZlIHBhc3NlZCBzaW5jZSB0aGVzZSBzdGVwc1xuICAgICAgICAgIC8vICAgIHdlcmUgbGFzdCBpbnZva2VkLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhXG4gICAgICAgICAgLy8gICAgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHByb2dyZXNzIGF0IGZyLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgRGF0ZS5ub3coKSAtIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA+PSA1MFxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIWZyW2tBYm9ydGVkXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ3Byb2dyZXNzJywgZnIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuIFNldCBjaHVua1Byb21pc2UgdG8gdGhlIHJlc3VsdCBvZiByZWFkaW5nIGFcbiAgICAgICAgICAvLyAgICBjaHVuayBmcm9tIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgICAgICAgICBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG4gICAgICAgIH0gZWxzZSBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuXG4gICAgICAgICAgLy8gICAgb2JqZWN0IHdob3NlIGRvbmUgcHJvcGVydHkgaXMgdHJ1ZSwgcXVldWUgYSB0YXNrXG4gICAgICAgICAgLy8gICAgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAgIC8vIDIuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiBwYWNrYWdlIGRhdGEgZ2l2ZW5cbiAgICAgICAgICAgIC8vICAgIGJ5dGVzLCB0eXBlLCBibG9iXHUyMDE5cyB0eXBlLCBhbmQgZW5jb2RpbmdOYW1lLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFja2FnZURhdGEoYnl0ZXMsIHR5cGUsIGJsb2IudHlwZSwgZW5jb2RpbmdOYW1lKVxuXG4gICAgICAgICAgICAgIC8vIDQuIEVsc2U6XG5cbiAgICAgICAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gcmVzdWx0LlxuICAgICAgICAgICAgICBmcltrUmVzdWx0XSA9IHJlc3VsdFxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgbG9hZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZCcsIGZyKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gMy4gSWYgcGFja2FnZSBkYXRhIHRocmV3IGFuIGV4Y2VwdGlvbiBlcnJvcjpcblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDUuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCBhblxuICAgICAgICAvLyAgICBlcnJvciBlcnJvciwgcXVldWUgYSB0YXNrIHRvIHJ1biB0aGUgZm9sbG93aW5nXG4gICAgICAgIC8vICAgIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgLy8gMi4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgIC8vIDMuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuXG4gICAgICAgICAgLy8gNC4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgZnIuXG4gICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9KSgpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZmlyZS1hLXByb2dyZXNzLWV2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSByZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmlyZUFQcm9ncmVzc0V2ZW50IChlLCByZWFkZXIpIHtcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgZG9lcyBub3QgYnViYmxlLiBlLmJ1YmJsZXMgbXVzdCBiZSBmYWxzZVxuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBpcyBOT1QgY2FuY2VsYWJsZS4gZS5jYW5jZWxhYmxlIG11c3QgYmUgZmFsc2VcbiAgY29uc3QgZXZlbnQgPSBuZXcgUHJvZ3Jlc3NFdmVudChlLCB7XG4gICAgYnViYmxlczogZmFsc2UsXG4gICAgY2FuY2VsYWJsZTogZmFsc2VcbiAgfSlcblxuICByZWFkZXIuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNibG9iLXBhY2thZ2UtZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBtaW1lVHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcGFja2FnZURhdGEgKGJ5dGVzLCB0eXBlLCBtaW1lVHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIEEgQmxvYiBoYXMgYW4gYXNzb2NpYXRlZCBwYWNrYWdlIGRhdGEgYWxnb3JpdGhtLCBnaXZlblxuICAvLyAgICBieXRlcywgYSB0eXBlLCBhIG9wdGlvbmFsIG1pbWVUeXBlLCBhbmQgYSBvcHRpb25hbFxuICAvLyAgICBlbmNvZGluZ05hbWUsIHdoaWNoIHN3aXRjaGVzIG9uIHR5cGUgYW5kIHJ1bnMgdGhlXG4gIC8vICAgIGFzc29jaWF0ZWQgc3RlcHM6XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnRGF0YVVSTCc6IHtcbiAgICAgIC8vIDEuIFJldHVybiBieXRlcyBhcyBhIERhdGFVUkwgW1JGQzIzOTddIHN1YmplY3QgdG9cbiAgICAgIC8vICAgIHRoZSBjb25zaWRlcmF0aW9ucyBiZWxvdzpcbiAgICAgIC8vICAqIFVzZSBtaW1lVHlwZSBhcyBwYXJ0IG9mIHRoZSBEYXRhIFVSTCBpZiBpdCBpc1xuICAgICAgLy8gICAgYXZhaWxhYmxlIGluIGtlZXBpbmcgd2l0aCB0aGUgRGF0YSBVUkxcbiAgICAgIC8vICAgIHNwZWNpZmljYXRpb24gW1JGQzIzOTddLlxuICAgICAgLy8gICogSWYgbWltZVR5cGUgaXMgbm90IGF2YWlsYWJsZSByZXR1cm4gYSBEYXRhIFVSTFxuICAgICAgLy8gICAgd2l0aG91dCBhIG1lZGlhLXR5cGUuIFtSRkMyMzk3XS5cblxuICAgICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3I3NlY3Rpb24tM1xuICAgICAgLy8gZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICAgICAgLy8gbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gICAgICAvLyBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gICAgICAvLyBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICAgICAgbGV0IGRhdGFVUkwgPSAnZGF0YTonXG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpXG5cbiAgICAgIGlmIChwYXJzZWQgIT09ICdmYWlsdXJlJykge1xuICAgICAgICBkYXRhVVJMICs9IHNlcmlhbGl6ZUFNaW1lVHlwZShwYXJzZWQpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gJztiYXNlNjQsJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIud3JpdGUoY2h1bmspKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci5lbmQoKSlcblxuICAgICAgcmV0dXJuIGRhdGFVUkxcbiAgICB9XG4gICAgY2FzZSAnVGV4dCc6IHtcbiAgICAgIC8vIDEuIExldCBlbmNvZGluZyBiZSBmYWlsdXJlXG4gICAgICBsZXQgZW5jb2RpbmcgPSAnZmFpbHVyZSdcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuY29kaW5nTmFtZSBpcyBwcmVzZW50LCBzZXQgZW5jb2RpbmcgdG8gdGhlXG4gICAgICAvLyAgICByZXN1bHQgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIGVuY29kaW5nTmFtZS5cbiAgICAgIGlmIChlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIGFuZCBtaW1lVHlwZSBpcyBwcmVzZW50OlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScgJiYgbWltZVR5cGUpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzZSBhIE1JTUUgdHlwZVxuICAgICAgICAvLyAgICBnaXZlbiBtaW1lVHlwZS5cbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgICAgICAgLy8gMi4gSWYgdHlwZSBpcyBub3QgZmFpbHVyZSwgc2V0IGVuY29kaW5nIHRvIHRoZSByZXN1bHRcbiAgICAgICAgLy8gICAgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIHR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbXCJjaGFyc2V0XCJdLlxuICAgICAgICBpZiAodHlwZSAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyh0eXBlLnBhcmFtZXRlcnMuZ2V0KCdjaGFyc2V0JykpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgdGhlbiBzZXQgZW5jb2RpbmcgdG8gVVRGLTguXG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJykge1xuICAgICAgICBlbmNvZGluZyA9ICdVVEYtOCdcbiAgICAgIH1cblxuICAgICAgLy8gNS4gRGVjb2RlIGJ5dGVzIHVzaW5nIGZhbGxiYWNrIGVuY29kaW5nIGVuY29kaW5nLCBhbmRcbiAgICAgIC8vICAgIHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgcmV0dXJuIGRlY29kZShieXRlcywgZW5jb2RpbmcpXG4gICAgfVxuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzoge1xuICAgICAgLy8gUmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIGNvbnN0IHNlcXVlbmNlID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoYnl0ZXMpXG5cbiAgICAgIHJldHVybiBzZXF1ZW5jZS5idWZmZXJcbiAgICB9XG4gICAgY2FzZSAnQmluYXJ5U3RyaW5nJzoge1xuICAgICAgLy8gUmV0dXJuIGJ5dGVzIGFzIGEgYmluYXJ5IHN0cmluZywgaW4gd2hpY2ggZXZlcnkgYnl0ZVxuICAgICAgLy8gIGlzIHJlcHJlc2VudGVkIGJ5IGEgY29kZSB1bml0IG9mIGVxdWFsIHZhbHVlIFswLi4yNTVdLlxuICAgICAgbGV0IGJpbmFyeVN0cmluZyA9ICcnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICAgIH1cblxuICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIuZW5kKClcblxuICAgICAgcmV0dXJuIGJpbmFyeVN0cmluZ1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2RlY29kZVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGlvUXVldWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICovXG5mdW5jdGlvbiBkZWNvZGUgKGlvUXVldWUsIGVuY29kaW5nKSB7XG4gIGNvbnN0IGJ5dGVzID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoaW9RdWV1ZSlcblxuICAvLyAxLiBMZXQgQk9NRW5jb2RpbmcgYmUgdGhlIHJlc3VsdCBvZiBCT00gc25pZmZpbmcgaW9RdWV1ZS5cbiAgY29uc3QgQk9NRW5jb2RpbmcgPSBCT01TbmlmZmluZyhieXRlcylcblxuICBsZXQgc2xpY2UgPSAwXG5cbiAgLy8gMi4gSWYgQk9NRW5jb2RpbmcgaXMgbm9uLW51bGw6XG4gIGlmIChCT01FbmNvZGluZyAhPT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCBlbmNvZGluZyB0byBCT01FbmNvZGluZy5cbiAgICBlbmNvZGluZyA9IEJPTUVuY29kaW5nXG5cbiAgICAvLyAyLiBSZWFkIHRocmVlIGJ5dGVzIGZyb20gaW9RdWV1ZSwgaWYgQk9NRW5jb2RpbmcgaXNcbiAgICAvLyAgICBVVEYtODsgb3RoZXJ3aXNlIHJlYWQgdHdvIGJ5dGVzLlxuICAgIC8vICAgIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICAgIHNsaWNlID0gQk9NRW5jb2RpbmcgPT09ICdVVEYtOCcgPyAzIDogMlxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgZW5jb2RpbmdcdTIwMTlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuXG4gIGNvbnN0IHNsaWNlZCA9IGJ5dGVzLnNsaWNlKHNsaWNlKVxuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nKS5kZWNvZGUoc2xpY2VkKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JvbS1zbmlmZlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBpb1F1ZXVlXG4gKi9cbmZ1bmN0aW9uIEJPTVNuaWZmaW5nIChpb1F1ZXVlKSB7XG4gIC8vIDEuIExldCBCT00gYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIDMgYnl0ZXMgZnJvbSBpb1F1ZXVlLFxuICAvLyAgICBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuICBjb25zdCBbYSwgYiwgY10gPSBpb1F1ZXVlXG5cbiAgLy8gMi4gRm9yIGVhY2ggb2YgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJlbG93LCBzdGFydGluZyB3aXRoXG4gIC8vICAgIHRoZSBmaXJzdCBvbmUgYW5kIGdvaW5nIGRvd24sIGlmIEJPTSBzdGFydHMgd2l0aCB0aGVcbiAgLy8gICAgYnl0ZXMgZ2l2ZW4gaW4gdGhlIGZpcnN0IGNvbHVtbiwgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGVuY29kaW5nIGdpdmVuIGluIHRoZSBjZWxsIGluIHRoZSBzZWNvbmQgY29sdW1uIG9mIHRoYXRcbiAgLy8gICAgcm93LiBPdGhlcndpc2UsIHJldHVybiBudWxsLlxuICBpZiAoYSA9PT0gMHhFRiAmJiBiID09PSAweEJCICYmIGMgPT09IDB4QkYpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkUgJiYgYiA9PT0gMHhGRikge1xuICAgIHJldHVybiAnVVRGLTE2QkUnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRiAmJiBiID09PSAweEZFKSB7XG4gICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtVaW50OEFycmF5W119IHNlcXVlbmNlc1xuICovXG5mdW5jdGlvbiBjb21iaW5lQnl0ZVNlcXVlbmNlcyAoc2VxdWVuY2VzKSB7XG4gIGNvbnN0IHNpemUgPSBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEgKyBiLmJ5dGVMZW5ndGhcbiAgfSwgMClcblxuICBsZXQgb2Zmc2V0ID0gMFxuXG4gIHJldHVybiBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgYS5zZXQoYiwgb2Zmc2V0KVxuICAgIG9mZnNldCArPSBiLmJ5dGVMZW5ndGhcbiAgICByZXR1cm4gYVxuICB9LCBuZXcgVWludDhBcnJheShzaXplKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyJylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdGaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZycpXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nLCAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JywgJ2VuY29kaW5nJylcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVhZEFzVGV4dChibG9iLCBlbmNvZGluZykgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggVGV4dCBhbmQgZW5jb2RpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnVGV4dCcsIGVuY29kaW5nKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNEYXRhVVJMXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNEYXRhVVJMIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcpXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNEYXRhVVJMKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLCBtdXN0XG4gICAgLy8gaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIERhdGFVUkwuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnRGF0YVVSTCcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLWFib3J0XG4gICAqL1xuICBhYm9ydCAoKSB7XG4gICAgLy8gMS4gSWYgdGhpcydzIHN0YXRlIGlzIFwiZW1wdHlcIiBvciBpZiB0aGlzJ3Mgc3RhdGUgaXNcbiAgICAvLyAgICBcImRvbmVcIiBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsIGFuZCB0ZXJtaW5hdGVcbiAgICAvLyAgICB0aGlzIGFsZ29yaXRobS5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnZW1wdHknIHx8IHRoaXNba1N0YXRlXSA9PT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpcydzIHN0YXRlIGlzIFwibG9hZGluZ1wiIHNldCB0aGlzJ3Mgc3RhdGUgdG9cbiAgICAvLyAgICBcImRvbmVcIiBhbmQgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbC5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9ICdkb25lJ1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgYW55IHRhc2tzIGZyb20gdGhpcyBvbiB0aGUgZmlsZSByZWFkaW5nXG4gICAgLy8gICAgdGFzayBzb3VyY2UgaW4gYW4gYWZmaWxpYXRlZCB0YXNrIHF1ZXVlLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHRob3NlIHRhc2tzIGZyb20gdGhhdCB0YXNrIHF1ZXVlLlxuICAgIHRoaXNba0Fib3J0ZWRdID0gdHJ1ZVxuXG4gICAgLy8gNC4gVGVybWluYXRlIHRoZSBhbGdvcml0aG0gZm9yIHRoZSByZWFkIG1ldGhvZCBiZWluZyBwcm9jZXNzZWQuXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gNS4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBhYm9ydCBhdCB0aGlzLlxuICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnYWJvcnQnLCB0aGlzKVxuXG4gICAgLy8gNi4gSWYgdGhpcydzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhpcy5cbiAgICBpZiAodGhpc1trU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlYWR5c3RhdGVcbiAgICovXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgc3dpdGNoICh0aGlzW2tTdGF0ZV0pIHtcbiAgICAgIGNhc2UgJ2VtcHR5JzogcmV0dXJuIHRoaXMuRU1QVFlcbiAgICAgIGNhc2UgJ2xvYWRpbmcnOiByZXR1cm4gdGhpcy5MT0FESU5HXG4gICAgICBjYXNlICdkb25lJzogcmV0dXJuIHRoaXMuRE9ORVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZXN1bHRcbiAgICovXG4gIGdldCByZXN1bHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgcmVzdWx0IGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIHJlc3VsdC5cbiAgICByZXR1cm4gdGhpc1trUmVzdWx0XVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVycm9yXG4gICAqL1xuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgZXJyb3IgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgZXJyb3IuXG4gICAgcmV0dXJuIHRoaXNba0Vycm9yXVxuICB9XG5cbiAgZ2V0IG9ubG9hZGVuZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRlbmRcbiAgfVxuXG4gIHNldCBvbmxvYWRlbmQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRlbmQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIHRoaXNba0V2ZW50c10ubG9hZGVuZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzW2tFdmVudHNdLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWRzdGFydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRzdGFydFxuICB9XG5cbiAgc2V0IG9ubG9hZHN0YXJ0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ucHJvZ3Jlc3MgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5wcm9ncmVzc1xuICB9XG5cbiAgc2V0IG9ucHJvZ3Jlc3MgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLnByb2dyZXNzKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpc1trRXZlbnRzXS5wcm9ncmVzcylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2FkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZFxuICB9XG5cbiAgc2V0IG9ubG9hZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpc1trRXZlbnRzXS5sb2FkKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmFib3J0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uYWJvcnRcbiAgfVxuXG4gIHNldCBvbmFib3J0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5hYm9ydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXNba0V2ZW50c10uYWJvcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lbXB0eVxuRmlsZVJlYWRlci5FTVBUWSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkVNUFRZID0gMFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWxvYWRpbmdcbkZpbGVSZWFkZXIuTE9BRElORyA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkxPQURJTkcgPSAxXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZG9uZVxuRmlsZVJlYWRlci5ET05FID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRE9ORSA9IDJcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlci5wcm90b3R5cGUsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRBc0FycmF5QnVmZmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNCaW5hcnlTdHJpbmc6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0RhdGFVUkw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZXN1bHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRzdGFydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25wcm9ncmVzczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlUmVhZGVyJyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGaWxlUmVhZGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi8uLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgeyBpc1ZhbGlkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLWVxdWFsc1xuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IGV4Y2x1ZGVGcmFnbWVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVybEVxdWFscyAoQSwgQiwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgY29uc3Qgc2VyaWFsaXplZEEgPSBVUkxTZXJpYWxpemVyKEEsIGV4Y2x1ZGVGcmFnbWVudClcblxuICBjb25zdCBzZXJpYWxpemVkQiA9IFVSTFNlcmlhbGl6ZXIoQiwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIHJldHVybiBzZXJpYWxpemVkQSA9PT0gc2VyaWFsaXplZEJcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzY5NGQyMGQxMzRjYjU1M2Q4ZDg5ZTU1MDBiOTE0ODAxMmIxYmEyOTkvY29udGVudC9icm93c2VyL2NhY2hlX3N0b3JhZ2UvY2FjaGVfc3RvcmFnZV9jYWNoZS5jYyNMMjYwLUwyNjJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZXMgKGhlYWRlcikge1xuICBhc3NlcnQoaGVhZGVyICE9PSBudWxsKVxuXG4gIGNvbnN0IHZhbHVlcyA9IFtdXG5cbiAgZm9yIChsZXQgdmFsdWUgb2YgaGVhZGVyLnNwbGl0KCcsJykpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKGlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXJsRXF1YWxzLFxuICBnZXRGaWVsZFZhbHVlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHVybEVxdWFscywgZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFJlc3BvbnNlLCBjbG9uZVJlc3BvbnNlLCBmcm9tSW5uZXJSZXNwb25zZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBSZXF1ZXN0LCBmcm9tSW5uZXJSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tY2FjaGUtYmF0Y2gtb3BlcmF0aW9uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYWNoZUJhdGNoT3BlcmF0aW9uXG4gKiBAcHJvcGVydHkgeydkZWxldGUnIHwgJ3B1dCd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXF1ZXN0XG4gKiBAcHJvcGVydHkge2FueX0gcmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gKiBAdHlwZWRlZiB7W2FueSwgYW55XVtdfSByZXF1ZXN0UmVzcG9uc2VMaXN0XG4gKi9cblxuY2xhc3MgQ2FjaGUge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICAgKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBhcmd1bWVudHNbMV1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZS5tYXRjaCdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICBjb25zdCBwID0gdGhpcy4jaW50ZXJuYWxNYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zLCAxKVxuXG4gICAgaWYgKHAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gcFswXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2hBbGwgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLm1hdGNoQWxsJ1xuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICByZXR1cm4gdGhpcy4jaW50ZXJuYWxNYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zKVxuICB9XG5cbiAgYXN5bmMgYWRkIChyZXF1ZXN0KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGUuYWRkJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QsIHByZWZpeCwgJ3JlcXVlc3QnKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IFtyZXF1ZXN0XVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXNwb25zZUFycmF5UHJvbWlzZSA9IHRoaXMuYWRkQWxsKHJlcXVlc3RzKVxuXG4gICAgLy8gMy5cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2VBcnJheVByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGFkZEFsbCAocmVxdWVzdHMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZS5hZGRBbGwnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZXMgPSBbXVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAvLyAzLlxuICAgIGZvciAobGV0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgICB0eXBlczogWyd1bmRlZmluZWQgaXMgbm90IGFsbG93ZWQnXVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAzLjFcbiAgICAgIGNvbnN0IHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgLy8gMy4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSB8fCByLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lLidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gNS40XG4gICAgICByLmluaXRpYXRvciA9ICdmZXRjaCdcbiAgICAgIHIuZGVzdGluYXRpb24gPSAnc3VicmVzb3VyY2UnXG5cbiAgICAgIC8vIDUuNVxuICAgICAgcmVxdWVzdExpc3QucHVzaChyKVxuXG4gICAgICAvLyA1LjZcbiAgICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAgIC8vIDUuN1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5wdXNoKGZldGNoaW5nKHtcbiAgICAgICAgcmVxdWVzdDogcixcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgfHwgcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+IDI5OSkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhbiBpbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHRoZSByZXF1ZXN0IGZhaWxlZC4nXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHsgLy8gMi5cbiAgICAgICAgICAgIC8vIDIuMVxuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgICAgICAgLy8gMi4yXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgZmV0Y2hDb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ2Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMi5cbiAgICAgICAgICByZXNwb25zZVByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIC8vIDUuOFxuICAgICAgcmVzcG9uc2VQcm9taXNlcy5wdXNoKHJlc3BvbnNlUHJvbWlzZS5wcm9taXNlKVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgY29uc3QgcCA9IFByb21pc2UuYWxsKHJlc3BvbnNlUHJvbWlzZXMpXG5cbiAgICAvLyA3LlxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IHBcblxuICAgIC8vIDcuMVxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gNy4yXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgLy8gNy4zXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDcuMy4xXG4gICAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdwdXQnLCAvLyA3LjMuMlxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0TGlzdFtpbmRleF0sIC8vIDcuMy4zXG4gICAgICAgIHJlc3BvbnNlIC8vIDcuMy40XG4gICAgICB9XG5cbiAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pIC8vIDcuMy41XG5cbiAgICAgIGluZGV4KysgLy8gNy4zLjZcbiAgICB9XG5cbiAgICAvLyA3LjVcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNy42LjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gNy42LjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gNy42LjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA3LjYuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDcuNi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDcuN1xuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgcHV0IChyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLnB1dCdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICByZXNwb25zZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlKHJlc3BvbnNlLCBwcmVmaXgsICdyZXNwb25zZScpXG5cbiAgICAvLyAxLlxuICAgIGxldCBpbm5lclJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaW5uZXJSZXF1ZXN0ID0gcmVxdWVzdFtrU3RhdGVdXG4gICAgfSBlbHNlIHsgLy8gMy5cbiAgICAgIGlubmVyUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoaW5uZXJSZXF1ZXN0LnVybCkgfHwgaW5uZXJSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBhbiBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgY29uc3QgaW5uZXJSZXNwb25zZSA9IHJlc3BvbnNlW2tTdGF0ZV1cblxuICAgIC8vIDYuXG4gICAgaWYgKGlubmVyUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiAnR290ICogdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOC5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICYmIChpc0Rpc3R1cmJlZChpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSB8fCBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtLmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNwb25zZSBib2R5IGlzIGxvY2tlZCBvciBkaXN0dXJiZWQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDkuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKGlubmVyUmVzcG9uc2UpXG5cbiAgICAvLyAxMC5cbiAgICBjb25zdCBib2R5UmVhZFByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTEuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxMS4xXG4gICAgICBjb25zdCBzdHJlYW0gPSBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtXG5cbiAgICAgIC8vIDExLjJcbiAgICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gICAgICAvLyAxMS4zXG4gICAgICByZWFkQWxsQnl0ZXMocmVhZGVyKS50aGVuKGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlLCBib2R5UmVhZFByb21pc2UucmVqZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICBib2R5UmVhZFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLy8gMTIuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyAxMy5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ3B1dCcsIC8vIDE0LlxuICAgICAgcmVxdWVzdDogaW5uZXJSZXF1ZXN0LCAvLyAxNS5cbiAgICAgIHJlc3BvbnNlOiBjbG9uZWRSZXNwb25zZSAvLyAxNi5cbiAgICB9XG5cbiAgICAvLyAxNy5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgLy8gMTkuXG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBib2R5UmVhZFByb21pc2UucHJvbWlzZVxuXG4gICAgaWYgKGNsb25lZFJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgY2xvbmVkUmVzcG9uc2UuYm9keS5zb3VyY2UgPSBieXRlc1xuICAgIH1cblxuICAgIC8vIDE5LjFcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTkuMi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDE5LjIuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyAxOS4yLjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyAxOS4yLjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9IGVsc2UgeyAvLyAxOS4yLjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBkZWxldGUgKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8cmVhZG9ubHkgUmVxdWVzdFtdPn1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLmtleXMnXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdCwgcHJlZml4LCAncmVxdWVzdCcpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMsIHByZWZpeCwgJ29wdGlvbnMnKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMi4xXG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7IC8vIDIuMlxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlcXVlc3RzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgLy8gNS4yLjEuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAvLyA1LjMuMi4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDUuNC4xXG4gICAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAgIC8vIDUuNC4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9iamVjdCA9IGZyb21Jbm5lclJlcXVlc3QoXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsLFxuICAgICAgICAgICdpbW11dGFibGUnXG4gICAgICAgIClcbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gICNpbnRlcm5hbE1hdGNoQWxsIChyZXF1ZXN0LCBvcHRpb25zLCBtYXhSZXNwb25zZXMgPSBJbmZpbml0eSkge1xuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgLy8gV2UgZG9uJ3QgaW1wbGVtZW50IENPUnMgc28gd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgdGhlIHJlc3BvbnNlcywgeWF5IVxuXG4gICAgLy8gNS41LjFcbiAgICBjb25zdCByZXNwb25zZUxpc3QgPSBbXVxuXG4gICAgLy8gNS41LjJcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNS41LjIuMVxuICAgICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBmcm9tSW5uZXJSZXNwb25zZShyZXNwb25zZSwgJ2ltbXV0YWJsZScpXG5cbiAgICAgIHJlc3BvbnNlTGlzdC5wdXNoKHJlc3BvbnNlT2JqZWN0LmNsb25lKCkpXG5cbiAgICAgIGlmIChyZXNwb25zZUxpc3QubGVuZ3RoID49IG1heFJlc3BvbnNlcykge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocmVzcG9uc2VMaXN0KVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbWF0Y2hBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwdXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuY29uc3QgY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMgPSBbXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVTZWFyY2gnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVNZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVWYXJ5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzLFxuICB7XG4gICAga2V5OiAnY2FjaGVOYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoUmVzcG9uc2UpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm9cbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgQ2FjaGUgfSA9IHJlcXVpcmUoJy4vY2FjaGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIENhY2hlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtbmFtZS10by1jYWNoZS1tYXBcbiAgICogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydCgnLi9jYWNoZScpLnJlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjY2FjaGVzID0gbmV3IE1hcCgpXG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0NhY2hlU3RvcmFnZS5tYXRjaCcpXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBpZiAob3B0aW9ucy5jYWNoZU5hbWUgIT0gbnVsbCkge1xuICAgICAgLy8gMS4xLjEuMVxuICAgICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMob3B0aW9ucy5jYWNoZU5hbWUpKSB7XG4gICAgICAgIC8vIDEuMS4xLjEuMVxuICAgICAgICBjb25zdCBjYWNoZUxpc3QgPSB0aGlzLiNjYWNoZXMuZ2V0KG9wdGlvbnMuY2FjaGVOYW1lKVxuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gMi5cbiAgICAgIC8vIDIuMlxuICAgICAgZm9yIChjb25zdCBjYWNoZUxpc3Qgb2YgdGhpcy4jY2FjaGVzLnZhbHVlcygpKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICAvLyAyLjIuMS4yXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcblxuICAgICAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtaGFzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBoYXMgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZVN0b3JhZ2UuaGFzJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSwgcHJlZml4LCAnY2FjaGVOYW1lJylcblxuICAgIC8vIDIuMS4xXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZXN0b3JhZ2Utb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlPn1cbiAgICovXG4gIGFzeW5jIG9wZW4gKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZVN0b3JhZ2Uub3BlbidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUsIHByZWZpeCwgJ2NhY2hlTmFtZScpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGVTdG9yYWdlLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUsIHByZWZpeCwgJ2NhY2hlTmFtZScpXG5cbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmRlbGV0ZShjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1rZXlzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIC8vIDIuMVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLiNjYWNoZXMua2V5cygpXG5cbiAgICAvLyAyLjJcbiAgICByZXR1cm4gWy4uLmtleXNdXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVTdG9yYWdlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGVTdG9yYWdlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVTdG9yYWdlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1hdHRyaWJ1dGUtdmFsdWUtc2l6ZVxuY29uc3QgbWF4QXR0cmlidXRlVmFsdWVTaXplID0gMTAyNFxuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tbmFtZS12YWx1ZS1wYWlyLXNpemVcbmNvbnN0IG1heE5hbWVWYWx1ZVBhaXJTaXplID0gNDA5NlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWF4QXR0cmlidXRlVmFsdWVTaXplLFxuICBtYXhOYW1lVmFsdWVQYWlyU2l6ZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSAweDAwICYmIGNvZGUgPD0gMHgwOCkgfHxcbiAgICAgIChjb2RlID49IDB4MEEgJiYgY29kZSA8PSAweDFGKSB8fFxuICAgICAgY29kZSA9PT0gMHg3RlxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuIENIQVIgICAgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiB0b2tlbiAgICAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gc2VwYXJhdG9ycyAgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gICAgICAgICAgICAgICAgfCBcIixcIiB8IFwiO1wiIHwgXCI6XCIgfCBcIlxcXCIgfCA8XCI+XG4gICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVOYW1lIChuYW1lKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSBuYW1lLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8IC8vIGV4Y2x1ZGUgQ1RMcyAoMC0zMSksIFNQIGFuZCBIVFxuICAgICAgY29kZSA+IDB4N0UgfHwgLy8gZXhjbHVkZSBub24tYXNjaWkgYW5kIERFTFxuICAgICAgY29kZSA9PT0gMHgyMiB8fCAvLyBcIlxuICAgICAgY29kZSA9PT0gMHgyOCB8fCAvLyAoXG4gICAgICBjb2RlID09PSAweDI5IHx8IC8vIClcbiAgICAgIGNvZGUgPT09IDB4M0MgfHwgLy8gPFxuICAgICAgY29kZSA9PT0gMHgzRSB8fCAvLyA+XG4gICAgICBjb2RlID09PSAweDQwIHx8IC8vIEBcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgzQiB8fCAvLyA7XG4gICAgICBjb2RlID09PSAweDNBIHx8IC8vIDpcbiAgICAgIGNvZGUgPT09IDB4NUMgfHwgLy8gXFxcbiAgICAgIGNvZGUgPT09IDB4MkYgfHwgLy8gL1xuICAgICAgY29kZSA9PT0gMHg1QiB8fCAvLyBbXG4gICAgICBjb2RlID09PSAweDVEIHx8IC8vIF1cbiAgICAgIGNvZGUgPT09IDB4M0YgfHwgLy8gP1xuICAgICAgY29kZSA9PT0gMHgzRCB8fCAvLyA9XG4gICAgICBjb2RlID09PSAweDdCIHx8IC8vIHtcbiAgICAgIGNvZGUgPT09IDB4N0QgLy8gfVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBuYW1lJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gY29va2llLXZhbHVlICAgICAgPSAqY29va2llLW9jdGV0IC8gKCBEUVVPVEUgKmNvb2tpZS1vY3RldCBEUVVPVEUgKVxuIGNvb2tpZS1vY3RldCAgICAgID0gJXgyMSAvICV4MjMtMkIgLyAleDJELTNBIC8gJXgzQy01QiAvICV4NUQtN0VcbiAgICAgICAgICAgICAgICAgICAgICAgOyBVUy1BU0NJSSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBDVExzLFxuICAgICAgICAgICAgICAgICAgICAgICA7IHdoaXRlc3BhY2UgRFFVT1RFLCBjb21tYSwgc2VtaWNvbG9uLFxuICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBiYWNrc2xhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVZhbHVlICh2YWx1ZSkge1xuICBsZXQgbGVuID0gdmFsdWUubGVuZ3RoXG4gIGxldCBpID0gMFxuXG4gIC8vIGlmIHRoZSB2YWx1ZSBpcyB3cmFwcGVkIGluIERRVU9URVxuICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICBpZiAobGVuID09PSAxIHx8IHZhbHVlW2xlbiAtIDFdICE9PSAnXCInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHZhbHVlJylcbiAgICB9XG4gICAgLS1sZW5cbiAgICArK2lcbiAgfVxuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgY29uc3QgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaSsrKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA+IDB4N0UgfHwgLy8gbm9uLWFzY2lpIGFuZCBERUwgKDEyNylcbiAgICAgIGNvZGUgPT09IDB4MjIgfHwgLy8gXCJcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgzQiB8fCAvLyA7XG4gICAgICBjb2RlID09PSAweDVDIC8vIFxcXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMCB8fCAvLyBleGNsdWRlIENUTHMgKDAtMzEpXG4gICAgICBjb2RlID4gMHg3RSB8fCAvLyBleGNsdWRlIERFTCBhbmQgbm9uLWFzY2lpXG4gICAgICBjb2RlID09PSAweDNCIC8vIDtcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogPGxldC1kaWc+IDo6PSA8bGV0dGVyPiB8IDxkaWdpdD5cbiAqXG4gKiA8bGV0dGVyPiA6Oj0gYW55IG9uZSBvZiB0aGUgNTIgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIEEgdGhyb3VnaCBaIGluXG4gKiB1cHBlciBjYXNlIGFuZCBhIHRocm91Z2ggeiBpbiBsb3dlciBjYXNlXG4gKlxuICogPGRpZ2l0PiA6Oj0gYW55IG9uZSBvZiB0aGUgdGVuIGRpZ2l0cyAwIHRocm91Z2ggOXJcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMxMDM0I3NlY3Rpb24tMy41XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0xldHRlck9yRGlnaXQgKGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICAoY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOSkgfHwgLy8gMC05XG4gICAgKGNvZGUgPj0gMHg0MSAmJiBjb2RlIDw9IDB4NUEpIHx8IC8vIEEtWlxuICAgIChjb2RlID49IDB4NjEgJiYgY29kZSA8PSAweDdBKSAvLyBhLXpcbiAgKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGNvb2tpZSBkb21haW4gYWdhaW5zdCB0aGUgXCJwcmVmZXJyZWQgbmFtZSBzeW50YXhcIi5cbiAqXG4gKiA8ZG9tYWluPiAgICAgIDo6PSA8c3ViZG9tYWluPiB8IFwiIFwiXG4gKiA8c3ViZG9tYWluPiAgIDo6PSA8bGFiZWw+IHwgPHN1YmRvbWFpbj4gXCIuXCIgPGxhYmVsPlxuICogPGxhYmVsPiAgICAgICA6Oj0gPGxldC1kaWc+IFsgWyA8bGRoLXN0cj4gXSA8bGV0LWRpZz4gXVxuICogPGxkaC1zdHI+ICAgICA6Oj0gPGxldC1kaWctaHlwPiB8IDxsZXQtZGlnLWh5cD4gPGxkaC1zdHI+XG4gKiA8bGV0LWRpZy1oeXA+IDo6PSA8bGV0LWRpZz4gfCBcIi1cIlxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzEwMzQjc2VjdGlvbi0zLjVcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzExMjMjc2VjdGlvbi0yLjFcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzEwMzUjc2VjdGlvbi0yLjMuNFxuICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZURvbWFpbiAoZG9tYWluKSB7XG4gIC8vIDxkb21haW4+IDo6PSA8c3ViZG9tYWluPiB8IFwiIFwiXG4gIGlmIChkb21haW4gPT09ICcgJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGRvbWFpbi5sZW5ndGggPiAyNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gIH1cblxuICBsZXQgbGFiZWxMZW5ndGggPSAwXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21haW4ubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gZG9tYWluLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChjb2RlID09PSAweDJFKSB7XG4gICAgICBpZiAobGFiZWxMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoZG9tYWluLmNoYXJDb2RlQXQoaSAtIDEpID09PSAweDJEKSB7IC8vIFwiLVwiXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgICAgIH1cblxuICAgICAgbGFiZWxMZW5ndGggPSAwXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChsYWJlbExlbmd0aCA9PT0gMCAmJiAhaXNMZXR0ZXJPckRpZ2l0KGNvZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gICAgfVxuXG4gICAgaWYgKCFpc0xldHRlck9yRGlnaXQoY29kZSkgJiYgY29kZSAhPT0gMHgyRCkgeyAvLyBcIi1cIlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICAgIH1cblxuICAgIGlmICgrK2xhYmVsTGVuZ3RoID4gNjMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgICB9XG4gIH1cblxuICBpZiAobGFiZWxMZW5ndGggPT09IDAgfHwgZG9tYWluLmNoYXJDb2RlQXQoZG9tYWluLmxlbmd0aCAtIDEpID09PSAweDJEKSB7IC8vIFwiLVwiXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbmNvbnN0IElNRkRheXMgPSBbXG4gICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLFxuICAnVGh1JywgJ0ZyaScsICdTYXQnXG5dXG5cbmNvbnN0IElNRk1vbnRocyA9IFtcbiAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ1xuXVxuXG5jb25zdCBJTUZQYWRkZWROdW1iZXJzID0gQXJyYXkoNjEpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMVxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGF0ZVxuICBJTUYtZml4ZGF0ZSAgPSBkYXktbmFtZSBcIixcIiBTUCBkYXRlMSBTUCB0aW1lLW9mLWRheSBTUCBHTVRcbiAgOyBmaXhlZCBsZW5ndGgvem9uZS9jYXBpdGFsaXphdGlvbiBzdWJzZXQgb2YgdGhlIGZvcm1hdFxuICA7IHNlZSBTZWN0aW9uIDMuMyBvZiBbUkZDNTMyMl1cblxuICBkYXktbmFtZSAgICAgPSAleDRELjZGLjZFIDsgXCJNb25cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0Ljc1LjY1IDsgXCJUdWVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU3LjY1LjY0IDsgXCJXZWRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0LjY4Ljc1IDsgXCJUaHVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjcyLjY5IDsgXCJGcmlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjYxLjc0IDsgXCJTYXRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjc1LjZFIDsgXCJTdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgZGF0ZTEgICAgICAgID0gZGF5IFNQIG1vbnRoIFNQIHllYXJcbiAgICAgICAgICAgICAgICAgIDsgZS5nLiwgMDIgSnVuIDE5ODJcblxuICBkYXkgICAgICAgICAgPSAyRElHSVRcbiAgbW9udGggICAgICAgID0gJXg0QS42MS42RSA7IFwiSmFuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni42NS42MiA7IFwiRmViXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43MiA7IFwiTWFyXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43MC43MiA7IFwiQXByXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43OSA7IFwiTWF5XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42RSA7IFwiSnVuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42QyA7IFwiSnVsXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43NS42NyA7IFwiQXVnXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42NS43MCA7IFwiU2VwXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ri42My43NCA7IFwiT2N0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RS42Ri43NiA7IFwiTm92XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0NC42NS42MyA7IFwiRGVjXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIHllYXIgICAgICAgICA9IDRESUdJVFxuXG4gIEdNVCAgICAgICAgICA9ICV4NDcuNEQuNTQgOyBcIkdNVFwiLCBjYXNlLXNlbnNpdGl2ZVxuXG4gIHRpbWUtb2YtZGF5ICA9IGhvdXIgXCI6XCIgbWludXRlIFwiOlwiIHNlY29uZFxuICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NjAgKGxlYXAgc2Vjb25kKVxuXG4gIGhvdXIgICAgICAgICA9IDJESUdJVFxuICBtaW51dGUgICAgICAgPSAyRElHSVRcbiAgc2Vjb25kICAgICAgID0gMkRJR0lUXG4gKi9cbmZ1bmN0aW9uIHRvSU1GRGF0ZSAoZGF0ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG4gIH1cblxuICByZXR1cm4gYCR7SU1GRGF5c1tkYXRlLmdldFVUQ0RheSgpXX0sICR7SU1GUGFkZGVkTnVtYmVyc1tkYXRlLmdldFVUQ0RhdGUoKV19ICR7SU1GTW9udGhzW2RhdGUuZ2V0VVRDTW9udGgoKV19ICR7ZGF0ZS5nZXRVVENGdWxsWWVhcigpfSAke0lNRlBhZGRlZE51bWJlcnNbZGF0ZS5nZXRVVENIb3VycygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDTWludXRlcygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDU2Vjb25kcygpXX0gR01UYFxufVxuXG4vKipcbiBtYXgtYWdlLWF2ICAgICAgICA9IFwiTWF4LUFnZT1cIiBub24temVyby1kaWdpdCAqRElHSVRcbiAgICAgICAgICAgICAgICAgICAgICAgOyBJbiBwcmFjdGljZSwgYm90aCBleHBpcmVzLWF2IGFuZCBtYXgtYWdlLWF2XG4gICAgICAgICAgICAgICAgICAgICAgIDsgYXJlIGxpbWl0ZWQgdG8gZGF0ZXMgcmVwcmVzZW50YWJsZSBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgOyB1c2VyIGFnZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IG1heEFnZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU1heEFnZSAobWF4QWdlKSB7XG4gIGlmIChtYXhBZ2UgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBtYXgtYWdlJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjUjc2VjdGlvbi00LjEuMVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Db29raWV9IGNvb2tpZVxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkgKGNvb2tpZSkge1xuICBpZiAoY29va2llLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhbGlkYXRlQ29va2llTmFtZShjb29raWUubmFtZSlcbiAgdmFsaWRhdGVDb29raWVWYWx1ZShjb29raWUudmFsdWUpXG5cbiAgY29uc3Qgb3V0ID0gW2Ake2Nvb2tpZS5uYW1lfT0ke2Nvb2tpZS52YWx1ZX1gXVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMVxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjJcbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fU2VjdXJlLScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgfVxuXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX0hvc3QtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICAgIGNvb2tpZS5kb21haW4gPSBudWxsXG4gICAgY29va2llLnBhdGggPSAnLydcbiAgfVxuXG4gIGlmIChjb29raWUuc2VjdXJlKSB7XG4gICAgb3V0LnB1c2goJ1NlY3VyZScpXG4gIH1cblxuICBpZiAoY29va2llLmh0dHBPbmx5KSB7XG4gICAgb3V0LnB1c2goJ0h0dHBPbmx5JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29va2llLm1heEFnZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZU1heEFnZShjb29raWUubWF4QWdlKVxuICAgIG91dC5wdXNoKGBNYXgtQWdlPSR7Y29va2llLm1heEFnZX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5kb21haW4pIHtcbiAgICB2YWxpZGF0ZUNvb2tpZURvbWFpbihjb29raWUuZG9tYWluKVxuICAgIG91dC5wdXNoKGBEb21haW49JHtjb29raWUuZG9tYWlufWApXG4gIH1cblxuICBpZiAoY29va2llLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZVBhdGgoY29va2llLnBhdGgpXG4gICAgb3V0LnB1c2goYFBhdGg9JHtjb29raWUucGF0aH1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5leHBpcmVzICYmIGNvb2tpZS5leHBpcmVzLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgb3V0LnB1c2goYEV4cGlyZXM9JHt0b0lNRkRhdGUoY29va2llLmV4cGlyZXMpfWApXG4gIH1cblxuICBpZiAoY29va2llLnNhbWVTaXRlKSB7XG4gICAgb3V0LnB1c2goYFNhbWVTaXRlPSR7Y29va2llLnNhbWVTaXRlfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgY29va2llLnVucGFyc2VkKSB7XG4gICAgaWYgKCFwYXJ0LmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bnBhcnNlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgW2tleSwgLi4udmFsdWVdID0gcGFydC5zcGxpdCgnPScpXG5cbiAgICBjb25zdCB0cmltbWVkS2V5ID0ga2V5LnRyaW0oKVxuICAgIGNvbnN0IGpvaW5lZFZhbHVlID0gdmFsdWUuam9pbignPScpXG5cbiAgICB2YWxpZGF0ZUNvb2tpZU5hbWUodHJpbW1lZEtleSlcbiAgICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGpvaW5lZFZhbHVlKVxuXG4gICAgb3V0LnB1c2goYCR7dHJpbW1lZEtleX09JHtqb2luZWRWYWx1ZX1gKVxuICB9XG5cbiAgcmV0dXJuIG91dC5qb2luKCc7ICcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0NUTEV4Y2x1ZGluZ0h0YWIsXG4gIHZhbGlkYXRlQ29va2llTmFtZSxcbiAgdmFsaWRhdGVDb29raWVQYXRoLFxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlLFxuICB0b0lNRkRhdGUsXG4gIHN0cmluZ2lmeVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heE5hbWVWYWx1ZVBhaXJTaXplLCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgaXNDVExFeGNsdWRpbmdIdGFiIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgdGhlIGZpZWxkLXZhbHVlIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlciBzdHJpbmcuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEByZXR1cm5zIGlmIHRoZSBoZWFkZXIgaXMgaW52YWxpZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2V0Q29va2llIChoZWFkZXIpIHtcbiAgLy8gMS4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgwMC0wOCAvICV4MEEtMUYgLyAleDdGXG4gIC8vICAgIGNoYXJhY3RlciAoQ1RMIGNoYXJhY3RlcnMgZXhjbHVkaW5nIEhUQUIpOiBBYm9ydCB0aGVzZSBzdGVwcyBhbmRcbiAgLy8gICAgaWdub3JlIHRoZSBzZXQtY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKGlzQ1RMRXhjbHVkaW5nSHRhYihoZWFkZXIpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBuYW1lVmFsdWVQYWlyID0gJydcbiAgbGV0IHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIGxldCBuYW1lID0gJydcbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAyLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyOlxuICBpZiAoaGVhZGVyLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0byxcbiAgICAvLyAgICBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSwgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgICAvLyAgICAoaW5jbHVkaW5nIHRoZSAleDNCIChcIjtcIikgaW4gcXVlc3Rpb24pLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBuYW1lVmFsdWVQYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBoZWFkZXIsIHBvc2l0aW9uKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IGhlYWRlci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnNcbiAgICAvLyAgICBjb250YWluZWQgaW4gdGhlIHNldC1jb29raWUtc3RyaW5nLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICBuYW1lVmFsdWVQYWlyID0gaGVhZGVyXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBsYWNrcyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIHRoZW5cbiAgLy8gICAgdGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5LCBhbmQgdGhlIHZhbHVlIHN0cmluZyBpcyB0aGUgdmFsdWUgb2ZcbiAgLy8gICAgbmFtZS12YWx1ZS1wYWlyLlxuICBpZiAoIW5hbWVWYWx1ZVBhaXIuaW5jbHVkZXMoJz0nKSkge1xuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpclxuICB9IGVsc2Uge1xuICAgIC8vICAgIE90aGVyd2lzZSwgdGhlIG5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHlcbiAgICAvLyAgICBlbXB0eSkgdmFsdWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdFxuICAgIC8vICAgICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cbiAgICBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBuYW1lVmFsdWVQYWlyLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfVxuXG4gIC8vIDQuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBuYW1lXG4gIC8vICAgIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZy5cbiAgbmFtZSA9IG5hbWUudHJpbSgpXG4gIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgLy8gNS4gSWYgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgbmFtZSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmdcbiAgLy8gICAgaXMgbW9yZSB0aGFuIDQwOTYgb2N0ZXRzLCBhYm9ydCB0aGVzZSBzdGVwcyBhbmQgaWdub3JlIHRoZSBzZXQtXG4gIC8vICAgIGNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChuYW1lLmxlbmd0aCArIHZhbHVlLmxlbmd0aCA+IG1heE5hbWVWYWx1ZVBhaXJTaXplKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFRoZSBjb29raWUtbmFtZSBpcyB0aGUgbmFtZSBzdHJpbmcsIGFuZCB0aGUgY29va2llLXZhbHVlIGlzIHRoZVxuICAvLyAgICB2YWx1ZSBzdHJpbmcuXG4gIHJldHVybiB7XG4gICAgbmFtZSwgdmFsdWUsIC4uLnBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcylcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlclxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1tPYmplY3QuPHN0cmluZywgdW5rbm93bj5dPXt9fSBjb29raWVBdHRyaWJ1dGVMaXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzICh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QgPSB7fSkge1xuICAvLyAxLiBJZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyBzdHJpbmcgaXMgZW1wdHksIHNraXAgdGhlIHJlc3Qgb2ZcbiAgLy8gICAgdGhlc2Ugc3RlcHMuXG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAgfVxuXG4gIC8vIDIuIERpc2NhcmQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyAod2hpY2hcbiAgLy8gICAgd2lsbCBiZSBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIpLlxuICBhc3NlcnQodW5wYXJzZWRBdHRyaWJ1dGVzWzBdID09PSAnOycpXG4gIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZSgxKVxuXG4gIGxldCBjb29raWVBdiA9ICcnXG5cbiAgLy8gMy4gSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gIC8vICAgIGNoYXJhY3RlcjpcbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgY29va2llQXYgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc7JyxcbiAgICAgIHVucGFyc2VkQXR0cmlidXRlcyxcbiAgICAgIHsgcG9zaXRpb246IDAgfVxuICAgIClcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoY29va2llQXYubGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIENvbnN1bWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcy5cbiAgICBjb29raWVBdiA9IHVucGFyc2VkQXR0cmlidXRlc1xuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIH1cblxuICAvLyBMZXQgdGhlIGNvb2tpZS1hdiBzdHJpbmcgYmUgdGhlIGNoYXJhY3RlcnMgY29uc3VtZWQgaW4gdGhpcyBzdGVwLlxuXG4gIGxldCBhdHRyaWJ1dGVOYW1lID0gJydcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gJydcblxuICAvLyA0LiBJZiB0aGUgY29va2llLWF2IHN0cmluZyBjb250YWlucyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXI6XG4gIGlmIChjb29raWVBdi5pbmNsdWRlcygnPScpKSB7XG4gICAgLy8gMS4gVGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZVxuICAgIC8vICAgIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLXZhbHVlIHN0cmluZ1xuICAgIC8vICAgIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIGNvb2tpZUF2LFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgYXR0cmlidXRlVmFsdWUgPSBjb29raWVBdi5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGNvb2tpZS1hdlxuICAgIC8vICAgIHN0cmluZywgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nIGlzIGVtcHR5LlxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb29raWVBdlxuICB9XG5cbiAgLy8gNS4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZS1cbiAgLy8gICAgbmFtZSBzdHJpbmcgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nLlxuICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50cmltKClcbiAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS50cmltKClcblxuICAvLyA2LiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGxvbmdlciB0aGFuIDEwMjQgb2N0ZXRzLCBpZ25vcmUgdGhlXG4gIC8vICAgIGNvb2tpZS1hdiBzdHJpbmcgYW5kIHJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPiBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUpIHtcbiAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICB9XG5cbiAgLy8gNy4gUHJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWUgYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlXG4gIC8vICAgIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiAgKE5vdGljZSB0aGF0XG4gIC8vICAgIGF0dHJpYnV0ZXMgd2l0aCB1bnJlY29nbml6ZWQgYXR0cmlidXRlLW5hbWVzIGFyZSBpZ25vcmVkLilcbiAgY29uc3QgYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMVxuICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAvLyBcIkV4cGlyZXNcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cbiAgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdleHBpcmVzJykge1xuICAgIC8vIDEuIExldCB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUtdmFsdWVcbiAgICAvLyAgICBhcyBjb29raWUtZGF0ZSAoc2VlIFNlY3Rpb24gNS4xLjEpLlxuICAgIGNvbnN0IGV4cGlyeVRpbWUgPSBuZXcgRGF0ZShhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDIuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZVxuICAgIC8vICAgIHRoZSBjb29raWUtYXYuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmV4cGlyZXMgPSBleHBpcnlUaW1lXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ21heC1hZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4yXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJNYXgtXG4gICAgLy8gQWdlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYVxuICAgIC8vICAgIFwiLVwiIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgY29uc3QgY2hhckNvZGUgPSBhdHRyaWJ1dGVWYWx1ZS5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgYXR0cmlidXRlVmFsdWVbMF0gIT09ICctJykge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhIG5vbi1ESUdJVFxuICAgIC8vICAgIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVsdGEtc2Vjb25kcyBiZSB0aGUgYXR0cmlidXRlLXZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLlxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDQuIExldCBjb29raWUtYWdlLWxpbWl0IGJlIHRoZSBtYXhpbXVtIGFnZSBvZiB0aGUgY29va2llICh3aGljaFxuICAgIC8vICAgIFNIT1VMRCBiZSA0MDAgZGF5cyBvciBsZXNzLCBzZWUgU2VjdGlvbiA0LjEuMi4yKS5cblxuICAgIC8vIDUuIFNldCBkZWx0YS1zZWNvbmRzIHRvIHRoZSBzbWFsbGVyIG9mIGl0cyBwcmVzZW50IHZhbHVlIGFuZCBjb29raWUtXG4gICAgLy8gICAgYWdlLWxpbWl0LlxuICAgIC8vIGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhU2Vjb25kcyAqIDEwMDAsIG1heEV4cGlyZXNNcylcblxuICAgIC8vIDYuIElmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LVxuICAgIC8vICAgIHRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgZGF0ZSBhbmQgdGltZS4gIE90aGVyd2lzZSwgbGV0XG4gICAgLy8gICAgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcGx1cyBkZWx0YS1zZWNvbmRzXG4gICAgLy8gICAgc2Vjb25kcy5cbiAgICAvLyBjb25zdCBleHBpcnlUaW1lID0gZGVsdGFTZWNvbmRzIDw9IDAgPyBEYXRlLm5vdygpIDogRGF0ZS5ub3coKSArIGRlbHRhU2Vjb25kc1xuXG4gICAgLy8gNy4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBNYXgtQWdlIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgZXhwaXJ5LXRpbWUuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5tYXhBZ2UgPSBkZWx0YVNlY29uZHNcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZG9tYWluJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuM1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiRG9tYWluXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIExldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgbGV0IGNvb2tpZURvbWFpbiA9IGF0dHJpYnV0ZVZhbHVlXG5cbiAgICAvLyAyLiBJZiBjb29raWUtZG9tYWluIHN0YXJ0cyB3aXRoICV4MkUgKFwiLlwiKSwgbGV0IGNvb2tpZS1kb21haW4gYmVcbiAgICAvLyAgICBjb29raWUtZG9tYWluIHdpdGhvdXQgaXRzIGxlYWRpbmcgJXgyRSAoXCIuXCIpLlxuICAgIGlmIChjb29raWVEb21haW5bMF0gPT09ICcuJykge1xuICAgICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnNsaWNlKDEpXG4gICAgfVxuXG4gICAgLy8gMy4gQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlxuICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA0LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIERvbWFpbiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1kb21haW4uXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5kb21haW4gPSBjb29raWVEb21haW5cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAncGF0aCcpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjRcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlBhdGhcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAgIC8vICAgIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgIGxldCBjb29raWVQYXRoID0gJydcbiAgICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID09PSAwIHx8IGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLycpIHtcbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICAgICAgY29va2llUGF0aCA9ICcvJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgICAgY29va2llUGF0aCA9IGF0dHJpYnV0ZVZhbHVlXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLXBhdGguXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5wYXRoID0gY29va2llUGF0aFxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzZWN1cmUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC41XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgIC8vIHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgU2VjdXJlIGFuZCBhbiBlbXB0eSBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNlY3VyZSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnaHR0cG9ubHknKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC42XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIkh0dHBPbmx5XCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLVxuICAgIC8vIGF0dHJpYnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgSHR0cE9ubHkgYW5kIGFuIGVtcHR5XG4gICAgLy8gYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5odHRwT25seSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2FtZXNpdGUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC43XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIlNhbWVTaXRlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3M6XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDEuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJOb25lXCIsIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgXCJOb25lXCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID09PSAnbm9uZScpIHtcbiAgICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSAnTm9uZSdcbiAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID09PSAnc3RyaWN0Jykge1xuICAgICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAgIC8vICAgIFwiU3RyaWN0XCIsIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoXG4gICAgICAvLyAgICBhbiBhdHRyaWJ1dGUtbmFtZSBvZiBcIlNhbWVTaXRlXCIgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZlxuICAgICAgLy8gICAgXCJTdHJpY3RcIi5cbiAgICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSAnU3RyaWN0J1xuICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPT09ICdsYXgnKSB7XG4gICAgICAvLyAzLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgICAgLy8gICAgXCJMYXhcIiwgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIFwiU2FtZVNpdGVcIiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIFwiTGF4XCIuXG4gICAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gJ0xheCdcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZCA/Pz0gW11cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQucHVzaChgJHthdHRyaWJ1dGVOYW1lfT0ke2F0dHJpYnV0ZVZhbHVlfWApXG4gIH1cblxuICAvLyA4LiBSZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2VTZXRDb29raWUsXG4gIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29va2llXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAcHJvcGVydHkge0RhdGV8bnVtYmVyfHVuZGVmaW5lZH0gZXhwaXJlc1xuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBtYXhBZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gZG9tYWluXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IHBhdGhcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IHNlY3VyZVxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gaHR0cE9ubHlcbiAqIEBwcm9wZXJ0eSB7J1N0cmljdCd8J0xheCd8J05vbmUnfSBzYW1lU2l0ZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gdW5wYXJzZWRcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnZ2V0Q29va2llcycpXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llID0gaGVhZGVycy5nZXQoJ2Nvb2tpZScpXG4gIGNvbnN0IG91dCA9IHt9XG5cbiAgaWYgKCFjb29raWUpIHtcbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGNvb2tpZS5zcGxpdCgnOycpKSB7XG4gICAgY29uc3QgW25hbWUsIC4uLnZhbHVlXSA9IHBpZWNlLnNwbGl0KCc9JylcblxuICAgIG91dFtuYW1lLnRyaW0oKV0gPSB2YWx1ZS5qb2luKCc9JylcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3sgcGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nIH18dW5kZWZpbmVkfSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZGVsZXRlQ29va2llIChoZWFkZXJzLCBuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IHByZWZpeCA9ICdkZWxldGVDb29raWUnXG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gIGF0dHJpYnV0ZXMgPSB3ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpXG5cbiAgLy8gTWF0Y2hlcyBiZWhhdmlvciBvZlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVub19zdGQvYmxvYi82MzgyN2IxNjMzMGI4MjQ4OWEwNDYxNDAyN2MzM2I3OTA0ZTA4YmU1L2h0dHAvY29va2llLnRzI0wyNzhcbiAgc2V0Q29va2llKGhlYWRlcnMsIHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiAnJyxcbiAgICBleHBpcmVzOiBuZXcgRGF0ZSgwKSxcbiAgICAuLi5hdHRyaWJ1dGVzXG4gIH0pXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7Q29va2llW119XG4gKi9cbmZ1bmN0aW9uIGdldFNldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnZ2V0U2V0Q29va2llcycpXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llcyA9IGhlYWRlcnMuZ2V0U2V0Q29va2llKClcblxuICBpZiAoIWNvb2tpZXMpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBjb29raWVzLm1hcCgocGFpcikgPT4gcGFyc2VTZXRDb29raWUocGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCAnc2V0Q29va2llJylcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyKVxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5Db29raWUgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICduYW1lJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAndmFsdWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcigodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10odmFsdWUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSlcbiAgICB9KSxcbiAgICBrZXk6ICdleHBpcmVzJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSksXG4gICAga2V5OiAnbWF4QWdlJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdzZWN1cmUnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnaHR0cE9ubHknLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAga2V5OiAnc2FtZVNpdGUnLFxuICAgIGFsbG93ZWRWYWx1ZXM6IFsnU3RyaWN0JywgJ0xheCcsICdOb25lJ11cbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAndW5wYXJzZWQnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb29raWVzLFxuICBkZWxldGVDb29raWUsXG4gIGdldFNldENvb2tpZXMsXG4gIHNldENvb2tpZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgTWVzc2FnZVBvcnQgfSA9IHJlcXVpcmUoJ25vZGU6d29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIGlmICh0eXBlID09PSBrQ29uc3RydWN0KSB7XG4gICAgICBzdXBlcihhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSlcbiAgICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSAnTWVzc2FnZUV2ZW50IGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlLCBwcmVmaXgsICd0eXBlJylcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdChldmVudEluaXREaWN0LCBwcmVmaXgsICdldmVudEluaXREaWN0JylcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgfVxuXG4gIGdldCBkYXRhICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmRhdGFcbiAgfVxuXG4gIGdldCBvcmlnaW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQub3JpZ2luXG4gIH1cblxuICBnZXQgbGFzdEV2ZW50SWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGFzdEV2ZW50SWRcbiAgfVxuXG4gIGdldCBzb3VyY2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuc291cmNlXG4gIH1cblxuICBnZXQgcG9ydHMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHRoaXMuI2V2ZW50SW5pdC5wb3J0cykpIHtcbiAgICAgIE9iamVjdC5mcmVlemUodGhpcy4jZXZlbnRJbml0LnBvcnRzKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucG9ydHNcbiAgfVxuXG4gIGluaXRNZXNzYWdlRXZlbnQgKFxuICAgIHR5cGUsXG4gICAgYnViYmxlcyA9IGZhbHNlLFxuICAgIGNhbmNlbGFibGUgPSBmYWxzZSxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBvcmlnaW4gPSAnJyxcbiAgICBsYXN0RXZlbnRJZCA9ICcnLFxuICAgIHNvdXJjZSA9IG51bGwsXG4gICAgcG9ydHMgPSBbXVxuICApIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdNZXNzYWdlRXZlbnQuaW5pdE1lc3NhZ2VFdmVudCcpXG5cbiAgICByZXR1cm4gbmV3IE1lc3NhZ2VFdmVudCh0eXBlLCB7XG4gICAgICBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVGYXN0TWVzc2FnZUV2ZW50ICh0eXBlLCBpbml0KSB7XG4gICAgY29uc3QgbWVzc2FnZUV2ZW50ID0gbmV3IE1lc3NhZ2VFdmVudChrQ29uc3RydWN0LCB0eXBlLCBpbml0KVxuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0ID0gaW5pdFxuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0LmRhdGEgPz89IG51bGxcbiAgICBtZXNzYWdlRXZlbnQuI2V2ZW50SW5pdC5vcmlnaW4gPz89ICcnXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQubGFzdEV2ZW50SWQgPz89ICcnXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQuc291cmNlID8/PSBudWxsXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQucG9ydHMgPz89IFtdXG4gICAgcmV0dXJuIG1lc3NhZ2VFdmVudFxuICB9XG59XG5cbmNvbnN0IHsgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCB9ID0gTWVzc2FnZUV2ZW50XG5kZWxldGUgTWVzc2FnZUV2ZW50LmNyZWF0ZUZhc3RNZXNzYWdlRXZlbnRcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIGNvbnN0IHByZWZpeCA9ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlLCBwcmVmaXgsICd0eXBlJylcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2xvc2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICBjb25zdCBwcmVmaXggPSAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSwgcHJlZml4LCAndHlwZScpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICd3YXNDbGVhbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWFzb24nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ21lc3NhZ2UnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2ZpbGVuYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsaW5lbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbG5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlcnJvcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1lc3NhZ2VFdmVudCxcbiAgQ2xvc2VFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUaGlzIGlzIGEgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIgdW5pcXVlIHVzZWRcbi8vIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGVuZHBvaW50IGFjY2VwdHMgd2Vic29ja2V0XG4vLyBjb25uZWN0aW9ucy5cbi8vIFNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tMS4zXG5jb25zdCB1aWQgPSAnMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExJ1xuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG5jb25zdCBzdGF0ZXMgPSB7XG4gIENPTk5FQ1RJTkc6IDAsXG4gIE9QRU46IDEsXG4gIENMT1NJTkc6IDIsXG4gIENMT1NFRDogM1xufVxuXG5jb25zdCBzZW50Q2xvc2VGcmFtZVN0YXRlID0ge1xuICBOT1RfU0VOVDogMCxcbiAgUFJPQ0VTU0lORzogMSxcbiAgU0VOVDogMlxufVxuXG5jb25zdCBvcGNvZGVzID0ge1xuICBDT05USU5VQVRJT046IDB4MCxcbiAgVEVYVDogMHgxLFxuICBCSU5BUlk6IDB4MixcbiAgQ0xPU0U6IDB4OCxcbiAgUElORzogMHg5LFxuICBQT05HOiAweEFcbn1cblxuY29uc3QgbWF4VW5zaWduZWQxNkJpdCA9IDIgKiogMTYgLSAxIC8vIDY1NTM1XG5cbmNvbnN0IHBhcnNlclN0YXRlcyA9IHtcbiAgSU5GTzogMCxcbiAgUEFZTE9BRExFTkdUSF8xNjogMixcbiAgUEFZTE9BRExFTkdUSF82NDogMyxcbiAgUkVBRF9EQVRBOiA0XG59XG5cbmNvbnN0IGVtcHR5QnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG5cbmNvbnN0IHNlbmRIaW50cyA9IHtcbiAgc3RyaW5nOiAxLFxuICB0eXBlZEFycmF5OiAyLFxuICBhcnJheUJ1ZmZlcjogMyxcbiAgYmxvYjogNFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdWlkLFxuICBzZW50Q2xvc2VGcmFtZVN0YXRlLFxuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBzdGF0ZXMsXG4gIG9wY29kZXMsXG4gIG1heFVuc2lnbmVkMTZCaXQsXG4gIHBhcnNlclN0YXRlcyxcbiAgZW1wdHlCdWZmZXIsXG4gIHNlbmRIaW50c1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga0NvbnRyb2xsZXIsIGtSZXNwb25zZSwga0JpbmFyeVR5cGUsIGtXZWJTb2NrZXRVUkwgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHN0YXRlcywgb3Bjb2RlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBFcnJvckV2ZW50LCBjcmVhdGVGYXN0TWVzc2FnZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IGlzVXRmOCB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCwgcmVtb3ZlSFRUUFdoaXRlc3BhY2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcblxuLyogZ2xvYmFscyBCbG9iICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGluZyAod3MpIHtcbiAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIG5vdCB5ZXQgZXN0YWJsaXNoZWQsIGFuZCB0aGUgY29ubmVjdGlvblxuICAvLyBpcyBub3QgeWV0IGNsb3NlZCwgdGhlbiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENPTk5FQ1RJTkcgc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DT05ORUNUSU5HXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRXN0YWJsaXNoZWQgKHdzKSB7XG4gIC8vIElmIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBpcyB2YWxpZGF0ZWQgYXMgcHJvdmlkZWQgZm9yIGFib3ZlLCBpdCBpc1xuICAvLyBzYWlkIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBFc3RhYmxpc2hlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIGluIHRoZSBPUEVOIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuT1BFTlxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDbG9zZWQgKHdzKSB7XG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TRURcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0geyguLi5hcmdzOiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIEV2ZW50PikgPT4gRXZlbnR9IGV2ZW50RmFjdG9yeVxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50RmFjdG9yeSA9ICh0eXBlLCBpbml0KSA9PiBuZXcgRXZlbnQodHlwZSwgaW5pdCksIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW50XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IGV2ZW50RmFjdG9yeShlLCBldmVudEluaXREaWN0KVxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSB1dGY4RGVjb2RlKGRhdGEpXG4gICAgfSBjYXRjaCB7XG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGludmFsaWQgVVRGLTggaW4gdGV4dCBmcmFtZS4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IG9wY29kZXMuQklOQVJZKSB7XG4gICAgaWYgKHdzW2tCaW5hcnlUeXBlXSA9PT0gJ2Jsb2InKSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJibG9iXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQmxvYiBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgICAgb2JqZWN0LCB0aGF0IHJlcHJlc2VudHMgZGF0YSBhcyBpdHMgcmF3IGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBCbG9iKFtkYXRhXSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYXJyYXlidWZmZXJcIlxuICAgICAgLy8gICAgICBhIG5ldyBBcnJheUJ1ZmZlciBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZVxuICAgICAgLy8gICAgICBXZWJTb2NrZXQgb2JqZWN0LCB3aG9zZSBjb250ZW50cyBhcmUgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gdG9BcnJheUJ1ZmZlcihkYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgbWVzc2FnZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCwgdXNpbmcgTWVzc2FnZUV2ZW50LFxuICAvLyAgICB3aXRoIHRoZSBvcmlnaW4gYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgb2JqZWN0XHUyMDE5cyB1cmwncyBvcmlnaW4sIGFuZCB0aGUgZGF0YSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gZGF0YUZvckV2ZW50LlxuICBmaXJlRXZlbnQoJ21lc3NhZ2UnLCB3cywgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG5mdW5jdGlvbiB0b0FycmF5QnVmZmVyIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5ieXRlTGVuZ3RoID09PSBidWZmZXIuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gYnVmZmVyLmJ1ZmZlclxuICB9XG4gIHJldHVybiBidWZmZXIuYnVmZmVyLnNsaWNlKGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZU9mZnNldCArIGJ1ZmZlci5ieXRlTGVuZ3RoKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm90b2NvbC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSBwcm90b2NvbC5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fCAvLyBDVEwsIGNvbnRhaW5zIFNQICgweDIwKSBhbmQgSFQgKDB4MDkpXG4gICAgICBjb2RlID4gMHg3RSB8fFxuICAgICAgY29kZSA9PT0gMHgyMiB8fCAvLyBcIlxuICAgICAgY29kZSA9PT0gMHgyOCB8fCAvLyAoXG4gICAgICBjb2RlID09PSAweDI5IHx8IC8vIClcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgyRiB8fCAvLyAvXG4gICAgICBjb2RlID09PSAweDNBIHx8IC8vIDpcbiAgICAgIGNvZGUgPT09IDB4M0IgfHwgLy8gO1xuICAgICAgY29kZSA9PT0gMHgzQyB8fCAvLyA8XG4gICAgICBjb2RlID09PSAweDNEIHx8IC8vID1cbiAgICAgIGNvZGUgPT09IDB4M0UgfHwgLy8gPlxuICAgICAgY29kZSA9PT0gMHgzRiB8fCAvLyA/XG4gICAgICBjb2RlID09PSAweDQwIHx8IC8vIEBcbiAgICAgIGNvZGUgPT09IDB4NUIgfHwgLy8gW1xuICAgICAgY29kZSA9PT0gMHg1QyB8fCAvLyBcXFxuICAgICAgY29kZSA9PT0gMHg1RCB8fCAvLyBdXG4gICAgICBjb2RlID09PSAweDdCIHx8IC8vIHtcbiAgICAgIGNvZGUgPT09IDB4N0QgLy8gfVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTctNFxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN0YXR1c0NvZGUgKGNvZGUpIHtcbiAgaWYgKGNvZGUgPj0gMTAwMCAmJiBjb2RlIDwgMTAxNSkge1xuICAgIHJldHVybiAoXG4gICAgICBjb2RlICE9PSAxMDA0ICYmIC8vIHJlc2VydmVkXG4gICAgICBjb2RlICE9PSAxMDA1ICYmIC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgICAgY29kZSAhPT0gMTAwNiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICApXG4gIH1cblxuICByZXR1cm4gY29kZSA+PSAzMDAwICYmIGNvZGUgPD0gNDk5OVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gKi9cbmZ1bmN0aW9uIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uICh3cywgcmVhc29uKSB7XG4gIGNvbnN0IHsgW2tDb250cm9sbGVyXTogY29udHJvbGxlciwgW2tSZXNwb25zZV06IHJlc3BvbnNlIH0gPSB3c1xuXG4gIGNvbnRyb2xsZXIuYWJvcnQoKVxuXG4gIGlmIChyZXNwb25zZT8uc29ja2V0ICYmICFyZXNwb25zZS5zb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3koKVxuICB9XG5cbiAgaWYgKHJlYXNvbikge1xuICAgIC8vIFRPRE86IHByb2Nlc3MubmV4dFRpY2tcbiAgICBmaXJlRXZlbnQoJ2Vycm9yJywgd3MsICh0eXBlLCBpbml0KSA9PiBuZXcgRXJyb3JFdmVudCh0eXBlLCBpbml0KSwge1xuICAgICAgZXJyb3I6IG5ldyBFcnJvcihyZWFzb24pLFxuICAgICAgbWVzc2FnZTogcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS41XG4gKiBAcGFyYW0ge251bWJlcn0gb3Bjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzQ29udHJvbEZyYW1lIChvcGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICBvcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UgfHxcbiAgICBvcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgIG9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HXG4gIClcbn1cblxuZnVuY3Rpb24gaXNDb250aW51YXRpb25GcmFtZSAob3Bjb2RlKSB7XG4gIHJldHVybiBvcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG59XG5cbmZ1bmN0aW9uIGlzVGV4dEJpbmFyeUZyYW1lIChvcGNvZGUpIHtcbiAgcmV0dXJuIG9wY29kZSA9PT0gb3Bjb2Rlcy5URVhUIHx8IG9wY29kZSA9PT0gb3Bjb2Rlcy5CSU5BUllcbn1cblxuZnVuY3Rpb24gaXNWYWxpZE9wY29kZSAob3Bjb2RlKSB7XG4gIHJldHVybiBpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpIHx8IGlzQ29udGludWF0aW9uRnJhbWUob3Bjb2RlKSB8fCBpc0NvbnRyb2xGcmFtZShvcGNvZGUpXG59XG5cbi8qKlxuICogUGFyc2VzIGEgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIGhlYWRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHRlbnNpb25zXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuLy8gVE9ETyhAVXpsb3BhaywgQEtoYWZyYURldik6IG1ha2UgY29tcGxpYW50IGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTkuMVxuZnVuY3Rpb24gcGFyc2VFeHRlbnNpb25zIChleHRlbnNpb25zKSB7XG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gIGNvbnN0IGV4dGVuc2lvbkxpc3QgPSBuZXcgTWFwKClcblxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBleHRlbnNpb25zLmxlbmd0aCkge1xuICAgIGNvbnN0IHBhaXIgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCgnOycsIGV4dGVuc2lvbnMsIHBvc2l0aW9uKVxuICAgIGNvbnN0IFtuYW1lLCB2YWx1ZSA9ICcnXSA9IHBhaXIuc3BsaXQoJz0nKVxuXG4gICAgZXh0ZW5zaW9uTGlzdC5zZXQoXG4gICAgICByZW1vdmVIVFRQV2hpdGVzcGFjZShuYW1lLCB0cnVlLCBmYWxzZSksXG4gICAgICByZW1vdmVIVFRQV2hpdGVzcGFjZSh2YWx1ZSwgZmFsc2UsIHRydWUpXG4gICAgKVxuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgcmV0dXJuIGV4dGVuc2lvbkxpc3Rcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3NjkyI3NlY3Rpb24tNy4xLjIuMlxuICogQGRlc2NyaXB0aW9uIFwiY2xpZW50LW1heC13aW5kb3ctYml0cyA9IDEqRElHSVRcIlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRDbGllbnRXaW5kb3dCaXRzICh2YWx1ZSkge1xuICAvLyBNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlclxuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBDaGVjayBhbGwgY2hhcmFjdGVycyBhcmUgQVNDSUkgZGlnaXRzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBieXRlID0gdmFsdWUuY2hhckNvZGVBdChpKVxuXG4gICAgaWYgKGJ5dGUgPCAweDMwIHx8IGJ5dGUgPiAweDM5KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBudW1lcmljIHJhbmdlOiB6bGliIHJlcXVpcmVzIHdpbmRvd0JpdHMgaW4gcmFuZ2UgOC0xNVxuICBjb25zdCBudW0gPSBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKVxuICByZXR1cm4gbnVtID49IDggJiYgbnVtIDw9IDE1XG59XG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaW50bC5odG1sI2RldGVjdGluZy1pbnRlcm5hdGlvbmFsaXphdGlvbi1zdXBwb3J0XG5jb25zdCBoYXNJbnRsID0gdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMuaWN1ID09PSAnc3RyaW5nJ1xuY29uc3QgZmF0YWxEZWNvZGVyID0gaGFzSW50bCA/IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pIDogdW5kZWZpbmVkXG5cbi8qKlxuICogQ29udmVydHMgYSBCdWZmZXIgdG8gdXRmLTgsIGV2ZW4gb24gcGxhdGZvcm1zIHdpdGhvdXQgaWN1LlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICovXG5jb25zdCB1dGY4RGVjb2RlID0gaGFzSW50bFxuICA/IGZhdGFsRGVjb2Rlci5kZWNvZGUuYmluZChmYXRhbERlY29kZXIpXG4gIDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuICAgIGlmIChpc1V0ZjgoYnVmZmVyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygndXRmLTgnKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHV0Zi04IHJlY2VpdmVkLicpXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ29ubmVjdGluZyxcbiAgaXNFc3RhYmxpc2hlZCxcbiAgaXNDbG9zaW5nLFxuICBpc0Nsb3NlZCxcbiAgZmlyZUV2ZW50LFxuICBpc1ZhbGlkU3VicHJvdG9jb2wsXG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkLFxuICB1dGY4RGVjb2RlLFxuICBpc0NvbnRyb2xGcmFtZSxcbiAgaXNDb250aW51YXRpb25GcmFtZSxcbiAgaXNUZXh0QmluYXJ5RnJhbWUsXG4gIGlzVmFsaWRPcGNvZGUsXG4gIHBhcnNlRXh0ZW5zaW9ucyxcbiAgaXNWYWxpZENsaWVudFdpbmRvd0JpdHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhVbnNpZ25lZDE2Qml0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IEJVRkZFUl9TSVpFID0gMTYzODZcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xubGV0IGJ1ZmZlciA9IG51bGxcbmxldCBidWZJZHggPSBCVUZGRVJfU0laRVxuXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdub2RlOmNyeXB0bycpXG4vKiBjOCBpZ25vcmUgbmV4dCAzICovXG59IGNhdGNoIHtcbiAgY3J5cHRvID0ge1xuICAgIC8vIG5vdCBmdWxsIGNvbXBhdGliaWxpdHksIGJ1dCBtaW5pbXVtLlxuICAgIHJhbmRvbUZpbGxTeW5jOiBmdW5jdGlvbiByYW5kb21GaWxsU3luYyAoYnVmZmVyLCBfb2Zmc2V0LCBfc2l6ZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW2ldID0gTWF0aC5yYW5kb20oKSAqIDI1NSB8IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWZmZXJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVNYXNrICgpIHtcbiAgaWYgKGJ1ZklkeCA9PT0gQlVGRkVSX1NJWkUpIHtcbiAgICBidWZJZHggPSAwXG4gICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKChidWZmZXIgPz89IEJ1ZmZlci5hbGxvY1Vuc2FmZShCVUZGRVJfU0laRSkpLCAwLCBCVUZGRVJfU0laRSlcbiAgfVxuICByZXR1cm4gW2J1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK11dXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgZnJhbWVEYXRhID0gdGhpcy5mcmFtZURhdGFcbiAgICBjb25zdCBtYXNrS2V5ID0gZ2VuZXJhdGVNYXNrKClcbiAgICBjb25zdCBib2R5TGVuZ3RoID0gZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gbWFza0tleVswXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAzXSA9IG1hc2tLZXlbMV1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMl0gPSBtYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gbWFza0tleVszXVxuXG4gICAgYnVmZmVyWzFdID0gcGF5bG9hZExlbmd0aFxuXG4gICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2QkUoYm9keUxlbmd0aCwgMilcbiAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgLy8gQ2xlYXIgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGhcbiAgICAgIGJ1ZmZlclsyXSA9IGJ1ZmZlclszXSA9IDBcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnRCRShib2R5TGVuZ3RoLCA0LCA2KVxuICAgIH1cblxuICAgIGJ1ZmZlclsxXSB8PSAweDgwIC8vIE1BU0tcblxuICAgIC8vIG1hc2sgYm9keVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keUxlbmd0aDsgKytpKSB7XG4gICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSBmcmFtZURhdGFbaV0gXiBtYXNrS2V5W2kgJiAzXVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdWlkLCBzdGF0ZXMsIHNlbnRDbG9zZUZyYW1lU3RhdGUsIGVtcHR5QnVmZmVyLCBvcGNvZGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtSZWFkeVN0YXRlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlcixcbiAga1JlY2VpdmVkQ2xvc2UsXG4gIGtSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGZpcmVFdmVudCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIGlzQ2xvc2luZywgaXNDbG9zZWQsIGlzRXN0YWJsaXNoZWQsIHBhcnNlRXh0ZW5zaW9ucyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY2hhbm5lbHMgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvZGlhZ25vc3RpY3MnKVxuY29uc3QgeyBDbG9zZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgSGVhZGVycywgZ2V0SGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXREZWNvZGVTcGxpdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xuXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXdlYnNvY2tldC1lc3RhYmxpc2hcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7KHJlc3BvbnNlOiBhbnksIGV4dGVuc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA9PiB2b2lkfSBvbkVzdGFibGlzaFxuICogQHBhcmFtIHtQYXJ0aWFsPGltcG9ydCgnLi4vLi4vdHlwZXMvd2Vic29ja2V0JykuV2ViU29ja2V0SW5pdD59IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiAodXJsLCBwcm90b2NvbHMsIGNsaWVudCwgd3MsIG9uRXN0YWJsaXNoLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0VVJMIGJlIGEgY29weSBvZiB1cmwsIHdpdGggaXRzIHNjaGVtZSBzZXQgdG8gXCJodHRwXCIsIGlmIHVybFx1MjAxOXNcbiAgLy8gICAgc2NoZW1lIGlzIFwid3NcIiwgYW5kIHRvIFwiaHR0cHNcIiBvdGhlcndpc2UuXG4gIGNvbnN0IHJlcXVlc3RVUkwgPSB1cmxcblxuICByZXF1ZXN0VVJMLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSAnd3M6JyA/ICdodHRwOicgOiAnaHR0cHM6J1xuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGEgbmV3IHJlcXVlc3QsIHdob3NlIFVSTCBpcyByZXF1ZXN0VVJMLCBjbGllbnQgaXMgY2xpZW50LFxuICAvLyAgICBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcIm5vbmVcIiwgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCBtb2RlIGlzXG4gIC8vICAgIFwid2Vic29ja2V0XCIsIGNyZWRlbnRpYWxzIG1vZGUgaXMgXCJpbmNsdWRlXCIsIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiICxcbiAgLy8gICAgYW5kIHJlZGlyZWN0IG1vZGUgaXMgXCJlcnJvclwiLlxuICBjb25zdCByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgIHVybExpc3Q6IFtyZXF1ZXN0VVJMXSxcbiAgICBjbGllbnQsXG4gICAgc2VydmljZVdvcmtlcnM6ICdub25lJyxcbiAgICByZWZlcnJlcjogJ25vLXJlZmVycmVyJyxcbiAgICBtb2RlOiAnd2Vic29ja2V0JyxcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICAgIHJlZGlyZWN0OiAnZXJyb3InXG4gIH0pXG5cbiAgLy8gTm90ZTogdW5kaWNpIGV4dGVuc2lvbiwgYWxsb3cgc2V0dGluZyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gZ2V0SGVhZGVyc0xpc3QobmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKSlcblxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QgPSBoZWFkZXJzTGlzdFxuICB9XG5cbiAgLy8gMy4gQXBwZW5kIChgVXBncmFkZWAsIGB3ZWJzb2NrZXRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gNC4gQXBwZW5kIChgQ29ubmVjdGlvbmAsIGBVcGdyYWRlYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIE5vdGU6IGJvdGggb2YgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdW5kaWNpIGN1cnJlbnRseS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi82OGMyNjljNDE0NGM0NDZmM2YxMjIwOTUxMzM4ZGFlZjRhNmI1ZWM0L2xpYi9jbGllbnQuanMjTDEzOTdcblxuICAvLyA1LiBMZXQga2V5VmFsdWUgYmUgYSBub25jZSBjb25zaXN0aW5nIG9mIGEgcmFuZG9tbHkgc2VsZWN0ZWRcbiAgLy8gICAgMTYtYnl0ZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIGZvcmdpdmluZy1iYXNlNjQtZW5jb2RlZCBhbmRcbiAgLy8gICAgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBjb25zdCBrZXlWYWx1ZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpXG5cbiAgLy8gNi4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1LZXlgLCBrZXlWYWx1ZSkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWtleScsIGtleVZhbHVlKVxuXG4gIC8vIDcuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtVmVyc2lvbmAsIGAxM2ApIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC12ZXJzaW9uJywgJzEzJylcblxuICAvLyA4LiBGb3IgZWFjaCBwcm90b2NvbCBpbiBwcm90b2NvbHMsIGNvbWJpbmVcbiAgLy8gICAgKGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCwgcHJvdG9jb2wpIGluIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBmb3IgKGNvbnN0IHByb3RvY29sIG9mIHByb3RvY29scykge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXByb3RvY29sJywgcHJvdG9jb2wpXG4gIH1cblxuICAvLyA5LiBMZXQgcGVybWVzc2FnZURlZmxhdGUgYmUgYSB1c2VyLWFnZW50IGRlZmluZWRcbiAgLy8gICAgXCJwZXJtZXNzYWdlLWRlZmxhdGVcIiBleHRlbnNpb24gaGVhZGVyIHZhbHVlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi9jZTc4MjM0ZjVlNjUzYTVkMzkxNjgxM2ZmOTkwZjA1MzUxMDIyN2JjL25ldHdlcmsvcHJvdG9jb2wvd2Vic29ja2V0L1dlYlNvY2tldENoYW5uZWwuY3BwI0wyNjczXG4gIGNvbnN0IHBlcm1lc3NhZ2VEZWZsYXRlID0gJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgY2xpZW50X21heF93aW5kb3dfYml0cydcblxuICAvLyAxMC4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zYCwgcGVybWVzc2FnZURlZmxhdGUpIHRvXG4gIC8vICAgICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycsIHBlcm1lc3NhZ2VEZWZsYXRlKVxuXG4gIC8vIDExLiBGZXRjaCByZXF1ZXN0IHdpdGggdXNlUGFyYWxsZWxRdWV1ZSBzZXQgdG8gdHJ1ZSwgYW5kXG4gIC8vICAgICBwcm9jZXNzUmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3RlcHM6XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICB1c2VQYXJhbGxlbFF1ZXVlOiB0cnVlLFxuICAgIGRpc3BhdGNoZXI6IG9wdGlvbnMuZGlzcGF0Y2hlcixcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2VcdTIwMTlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcbiAgICAgIGxldCBleHRlbnNpb25zXG5cbiAgICAgIGlmIChzZWNFeHRlbnNpb24gIT09IG51bGwpIHtcbiAgICAgICAgZXh0ZW5zaW9ucyA9IHBhcnNlRXh0ZW5zaW9ucyhzZWNFeHRlbnNpb24pXG5cbiAgICAgICAgaWYgKCFleHRlbnNpb25zLmhhcygncGVybWVzc2FnZS1kZWZsYXRlJykpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXIgZG9lcyBub3QgbWF0Y2guJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm90b2NvbHMgPSBnZXREZWNvZGVTcGxpdCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcsIHJlcXVlc3QuaGVhZGVyc0xpc3QpXG5cbiAgICAgICAgLy8gVGhlIGNsaWVudCBjYW4gcmVxdWVzdCB0aGF0IHRoZSBzZXJ2ZXIgdXNlIGEgc3BlY2lmaWMgc3VicHJvdG9jb2wgYnlcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgZmllbGQgaW4gaXRzIGhhbmRzaGFrZS4gIElmIGl0XG4gICAgICAgIC8vIGlzIHNwZWNpZmllZCwgdGhlIHNlcnZlciBuZWVkcyB0byBpbmNsdWRlIHRoZSBzYW1lIGZpZWxkIGFuZCBvbmUgb2ZcbiAgICAgICAgLy8gdGhlIHNlbGVjdGVkIHN1YnByb3RvY29sIHZhbHVlcyBpbiBpdHMgcmVzcG9uc2UgZm9yIHRoZSBjb25uZWN0aW9uIHRvXG4gICAgICAgIC8vIGJlIGVzdGFibGlzaGVkLlxuICAgICAgICBpZiAoIXJlcXVlc3RQcm90b2NvbHMuaW5jbHVkZXMoc2VjUHJvdG9jb2wpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdQcm90b2NvbCB3YXMgbm90IHNldCBpbiB0aGUgb3BlbmluZyBoYW5kc2hha2UuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSwgZXh0ZW5zaW9ucylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuZnVuY3Rpb24gY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uICh3cywgY29kZSwgcmVhc29uLCByZWFzb25CeXRlTGVuZ3RoKSB7XG4gIGlmIChpc0Nsb3Npbmcod3MpIHx8IGlzQ2xvc2VkKHdzKSkge1xuICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgLy8gRG8gbm90aGluZy5cbiAgfSBlbHNlIGlmICghaXNFc3RhYmxpc2hlZCh3cykpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgbm90IHlldCBlc3RhYmxpc2hlZFxuICAgIC8vIEZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGFuZCBzZXQgdGhpcydzIHJlYWR5IHN0YXRlXG4gICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIGl0IHdhcyBlc3RhYmxpc2hlZC4nKVxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSBpZiAod3Nba1NlbnRDbG9zZV0gPT09IHNlbnRDbG9zZUZyYW1lU3RhdGUuTk9UX1NFTlQpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZFxuICAgIC8vIFN0YXJ0IHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgYW5kIHNldCB0aGlzJ3MgcmVhZHlcbiAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAvLyAtIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAvLyAgIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG4gICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAvLyAgIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAvLyAtIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgd3Nba1NlbnRDbG9zZV0gPSBzZW50Q2xvc2VGcmFtZVN0YXRlLlBST0NFU1NJTkdcblxuICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgLy8gbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cblxuICAgIC8vIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgfSBlbHNlIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIgKyByZWFzb25CeXRlTGVuZ3RoKVxuICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGUocmVhc29uLCAyLCAndXRmLTgnKVxuICAgIH0gZWxzZSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgY29uc3Qgc29ja2V0ID0gd3Nba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIHNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSlcblxuICAgIHdzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UXG5cbiAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlXG4gICAgLy8gU2V0IHRoaXMncyByZWFkeSBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0RGF0YSAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLndzW2tCeXRlUGFyc2VyXS53cml0ZShjaHVuaykpIHtcbiAgICB0aGlzLnBhdXNlKClcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjRcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcbiAgY29uc3QgeyBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignZGF0YScsIG9uU29ja2V0RGF0YSlcbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICByZXNwb25zZS5zb2NrZXQub2ZmKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG5cbiAgLy8gSWYgdGhlIFRDUCBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWZ0ZXIgdGhlXG4gIC8vIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSB3YXMgY29tcGxldGVkLCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAgLy8gaXMgc2FpZCB0byBoYXZlIGJlZW4gY2xvc2VkIF9jbGVhbmx5Xy5cbiAgY29uc3Qgd2FzQ2xlYW4gPSB3c1trU2VudENsb3NlXSA9PT0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UICYmIHdzW2tSZWNlaXZlZENsb3NlXVxuXG4gIGxldCBjb2RlID0gMTAwNVxuICBsZXQgcmVhc29uID0gJydcblxuICBjb25zdCByZXN1bHQgPSB3c1trQnl0ZVBhcnNlcl0uY2xvc2luZ0luZm9cblxuICBpZiAocmVzdWx0ICYmICFyZXN1bHQuZXJyb3IpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgLy8gSWYgX1RoZSBXZWJTb2NrZXRcbiAgICAvLyBDb25uZWN0aW9uIGlzIENsb3NlZF8gYW5kIG5vIENsb3NlIGNvbnRyb2wgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZVxuICAgIC8vIGVuZHBvaW50IChzdWNoIGFzIGNvdWxkIG9jY3VyIGlmIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uXG4gICAgLy8gaXMgbG9zdCksIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXMgY29uc2lkZXJlZCB0byBiZVxuICAgIC8vIDEwMDYuXG4gICAgY29kZSA9IDEwMDZcbiAgfVxuXG4gIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gQ0xPU0VEICgzKS5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NFRFxuXG4gIC8vIDIuIElmIHRoZSB1c2VyIGFnZW50IHdhcyByZXF1aXJlZCB0byBmYWlsIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgY29ubmVjdGlvbiwgb3IgaWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHdhcyBjbG9zZWRcbiAgLy8gICAgYWZ0ZXIgYmVpbmcgZmxhZ2dlZCBhcyBmdWxsLCBmaXJlIGFuIGV2ZW50IG5hbWVkIGVycm9yXG4gIC8vICAgIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAvLyBUT0RPXG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBjbG9zZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCxcbiAgLy8gICAgdXNpbmcgQ2xvc2VFdmVudCwgd2l0aCB0aGUgd2FzQ2xlYW4gYXR0cmlidXRlXG4gIC8vICAgIGluaXRpYWxpemVkIHRvIHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gY2xvc2VkIGNsZWFubHlcbiAgLy8gICAgYW5kIGZhbHNlIG90aGVyd2lzZSwgdGhlIGNvZGUgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvXG4gIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZSBjb2RlLCBhbmQgdGhlIHJlYXNvblxuICAvLyAgICBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBVVEYtOFxuICAvLyAgICBkZWNvZGUgd2l0aG91dCBCT00gdG8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlXG4gIC8vICAgIHJlYXNvbi5cbiAgLy8gVE9ETzogcHJvY2Vzcy5uZXh0VGlja1xuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsICh0eXBlLCBpbml0KSA9PiBuZXcgQ2xvc2VFdmVudCh0eXBlLCBpbml0KSwge1xuICAgIHdhc0NsZWFuLCBjb2RlLCByZWFzb25cbiAgfSlcblxuICBpZiAoY2hhbm5lbHMuY2xvc2UuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5jbG9zZS5wdWJsaXNoKHtcbiAgICAgIHdlYnNvY2tldDogd3MsXG4gICAgICBjb2RlLFxuICAgICAgcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnJvcikge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcblxuICBpZiAoY2hhbm5lbHMuc29ja2V0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zb2NrZXRFcnJvci5wdWJsaXNoKGVycm9yKVxuICB9XG5cbiAgdGhpcy5kZXN0cm95KClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24sXG4gIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGNyZWF0ZUluZmxhdGVSYXcsIFpfREVGQVVMVF9XSU5ET1dCSVRTIH0gPSByZXF1aXJlKCdub2RlOnpsaWInKVxuY29uc3QgeyBpc1ZhbGlkQ2xpZW50V2luZG93Qml0cyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL2Vycm9ycycpXG5cbmNvbnN0IHRhaWwgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHhmZiwgMHhmZl0pXG5jb25zdCBrQnVmZmVyID0gU3ltYm9sKCdrQnVmZmVyJylcbmNvbnN0IGtMZW5ndGggPSBTeW1ib2woJ2tMZW5ndGgnKVxuXG5jbGFzcyBQZXJNZXNzYWdlRGVmbGF0ZSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOnpsaWInKS5JbmZsYXRlUmF3fSAqL1xuICAjaW5mbGF0ZVxuXG4gICNvcHRpb25zID0ge31cblxuICAjbWF4UGF5bG9hZFNpemUgPSAwXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gZXh0ZW5zaW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dGVuc2lvbnMsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNvcHRpb25zLnNlcnZlck5vQ29udGV4dFRha2VvdmVyID0gZXh0ZW5zaW9ucy5oYXMoJ3NlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyJylcbiAgICB0aGlzLiNvcHRpb25zLnNlcnZlck1heFdpbmRvd0JpdHMgPSBleHRlbnNpb25zLmdldCgnc2VydmVyX21heF93aW5kb3dfYml0cycpXG5cbiAgICB0aGlzLiNtYXhQYXlsb2FkU2l6ZSA9IG9wdGlvbnMubWF4UGF5bG9hZFNpemVcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXByZXNzIGEgY29tcHJlc3NlZCBwYXlsb2FkLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmsgQ29tcHJlc3NlZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluIEZpbmFsIGZyYWdtZW50IGZsYWdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb25cbiAgICovXG4gIGRlY29tcHJlc3MgKGNodW5rLCBmaW4sIGNhbGxiYWNrKSB7XG4gICAgLy8gQW4gZW5kcG9pbnQgdXNlcyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSB0byBkZWNvbXByZXNzIGEgbWVzc2FnZS5cbiAgICAvLyAxLiAgQXBwZW5kIDQgb2N0ZXRzIG9mIDB4MDAgMHgwMCAweGZmIDB4ZmYgdG8gdGhlIHRhaWwgZW5kIG9mIHRoZVxuICAgIC8vICAgICBwYXlsb2FkIG9mIHRoZSBtZXNzYWdlLlxuICAgIC8vIDIuICBEZWNvbXByZXNzIHRoZSByZXN1bHRpbmcgZGF0YSB1c2luZyBERUZMQVRFLlxuICAgIGlmICghdGhpcy4jaW5mbGF0ZSkge1xuICAgICAgbGV0IHdpbmRvd0JpdHMgPSBaX0RFRkFVTFRfV0lORE9XQklUU1xuXG4gICAgICBpZiAodGhpcy4jb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzKSB7IC8vIGVtcHR5IHZhbHVlcyBkZWZhdWx0IHRvIFpfREVGQVVMVF9XSU5ET1dCSVRTXG4gICAgICAgIGlmICghaXNWYWxpZENsaWVudFdpbmRvd0JpdHModGhpcy4jb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzKSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignSW52YWxpZCBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3dCaXRzID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuI29wdGlvbnMuc2VydmVyTWF4V2luZG93Qml0cylcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy4jaW5mbGF0ZSA9IGNyZWF0ZUluZmxhdGVSYXcoeyB3aW5kb3dCaXRzIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0gPSBbXVxuICAgICAgdGhpcy4jaW5mbGF0ZVtrTGVuZ3RoXSA9IDBcblxuICAgICAgdGhpcy4jaW5mbGF0ZS5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuI2luZmxhdGVba0xlbmd0aF0gKz0gZGF0YS5sZW5ndGhcblxuICAgICAgICBpZiAodGhpcy4jbWF4UGF5bG9hZFNpemUgPiAwICYmIHRoaXMuI2luZmxhdGVba0xlbmd0aF0gPiB0aGlzLiNtYXhQYXlsb2FkU2l6ZSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3IoKSlcbiAgICAgICAgICB0aGlzLiNpbmZsYXRlLnJlbW92ZUFsbExpc3RlbmVycygpXG4gICAgICAgICAgdGhpcy4jaW5mbGF0ZSA9IG51bGxcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0ucHVzaChkYXRhKVxuICAgICAgfSlcblxuICAgICAgdGhpcy4jaW5mbGF0ZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuI2luZmxhdGUgPSBudWxsXG4gICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy4jaW5mbGF0ZS53cml0ZShjaHVuaylcbiAgICBpZiAoZmluKSB7XG4gICAgICB0aGlzLiNpbmZsYXRlLndyaXRlKHRhaWwpXG4gICAgfVxuXG4gICAgdGhpcy4jaW5mbGF0ZS5mbHVzaCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuI2luZmxhdGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGwgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2luZmxhdGVba0J1ZmZlcl0sIHRoaXMuI2luZmxhdGVba0xlbmd0aF0pXG5cbiAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0ubGVuZ3RoID0gMFxuICAgICAgdGhpcy4jaW5mbGF0ZVtrTGVuZ3RoXSA9IDBcblxuICAgICAgY2FsbGJhY2sobnVsbCwgZnVsbClcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBQZXJNZXNzYWdlRGVmbGF0ZSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV3JpdGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgcGFyc2VyU3RhdGVzLCBvcGNvZGVzLCBzdGF0ZXMsIGVtcHR5QnVmZmVyLCBzZW50Q2xvc2VGcmFtZVN0YXRlIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrU2VudENsb3NlLCBrUmVzcG9uc2UsIGtSZWNlaXZlZENsb3NlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9kaWFnbm9zdGljcycpXG5jb25zdCB7XG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBpc1ZhbGlkT3Bjb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkLFxuICB1dGY4RGVjb2RlLFxuICBpc0NvbnRyb2xGcmFtZSxcbiAgaXNUZXh0QmluYXJ5RnJhbWUsXG4gIGlzQ29udGludWF0aW9uRnJhbWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuY29uc3QgeyBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFBlck1lc3NhZ2VEZWZsYXRlIH0gPSByZXF1aXJlKCcuL3Blcm1lc3NhZ2UtZGVmbGF0ZScpXG5jb25zdCB7IE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9lcnJvcnMnKVxuXG5mdW5jdGlvbiBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlICh3cywgY29kZSwgcmVhc29uKSB7XG4gIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvbih3cywgY29kZSwgcmVhc29uLCBCdWZmZXIuYnl0ZUxlbmd0aChyZWFzb24pKVxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgcmVhc29uKVxufVxuXG4vLyBUaGlzIGNvZGUgd2FzIGluZmx1ZW5jZWQgYnkgd3MgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEVpbmFyIE90dG8gU3Rhbmd2aWsgPGVpbmFyb3NAZ21haWwuY29tPlxuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFybm91dCBLYXplbWllciBhbmQgY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYgTHVpZ2kgUGluY2EgYW5kIGNvbnRyaWJ1dG9yc1xuXG5jbGFzcyBCeXRlUGFyc2VyIGV4dGVuZHMgV3JpdGFibGUge1xuICAjYnVmZmVycyA9IFtdXG4gICNmcmFnbWVudHNCeXRlcyA9IDBcbiAgI2J5dGVPZmZzZXQgPSAwXG4gICNsb29wID0gZmFsc2VcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQZXJNZXNzYWdlRGVmbGF0ZT59ICovXG4gICNleHRlbnNpb25zXG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICNtYXhGcmFnbWVudHNcblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgI21heFBheWxvYWRTaXplXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBzdHJpbmc+fG51bGx9IGV4dGVuc2lvbnNcbiAgICogQHBhcmFtIHt7IG1heEZyYWdtZW50cz86IG51bWJlciwgbWF4UGF5bG9hZFNpemU/OiBudW1iZXIgfX0gW29wdGlvbnNdXG4gICAqL1xuICBjb25zdHJ1Y3RvciAod3MsIGV4dGVuc2lvbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMud3MgPSB3c1xuICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zID09IG51bGwgPyBuZXcgTWFwKCkgOiBleHRlbnNpb25zXG4gICAgdGhpcy4jbWF4RnJhZ21lbnRzID0gb3B0aW9ucy5tYXhGcmFnbWVudHMgPz8gMFxuICAgIHRoaXMuI21heFBheWxvYWRTaXplID0gb3B0aW9ucy5tYXhQYXlsb2FkU2l6ZSA/PyAwXG5cbiAgICBpZiAodGhpcy4jZXh0ZW5zaW9ucy5oYXMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpKSB7XG4gICAgICB0aGlzLiNleHRlbnNpb25zLnNldCgncGVybWVzc2FnZS1kZWZsYXRlJywgbmV3IFBlck1lc3NhZ2VEZWZsYXRlKGV4dGVuc2lvbnMsIG9wdGlvbnMpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKi9cbiAgX3dyaXRlIChjaHVuaywgXywgY2FsbGJhY2spIHtcbiAgICB0aGlzLiNidWZmZXJzLnB1c2goY2h1bmspXG4gICAgdGhpcy4jYnl0ZU9mZnNldCArPSBjaHVuay5sZW5ndGhcbiAgICB0aGlzLiNsb29wID0gdHJ1ZVxuXG4gICAgdGhpcy5ydW4oY2FsbGJhY2spXG4gIH1cblxuICAjdmFsaWRhdGVQYXlsb2FkTGVuZ3RoICgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNtYXhQYXlsb2FkU2l6ZSA+IDAgJiZcbiAgICAgICFpc0NvbnRyb2xGcmFtZSh0aGlzLiNpbmZvLm9wY29kZSkgJiZcbiAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCArIHRoaXMuI2ZyYWdtZW50c0J5dGVzID4gdGhpcy4jbWF4UGF5bG9hZFNpemVcbiAgICApIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOSwgJ1BheWxvYWQgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVuZXZlciBhIG5ldyBjaHVuayBpcyByZWNlaXZlZC5cbiAgICogQ2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBubyBtb3JlIGNodW5rcyBidWZmZXJpbmcsXG4gICAqIG9yIG5vdCBlbm91Z2ggYnl0ZXMgYXJlIGJ1ZmZlcmVkIHRvIHBhcnNlLlxuICAgKi9cbiAgcnVuIChjYWxsYmFjaykge1xuICAgIHdoaWxlICh0aGlzLiNsb29wKSB7XG4gICAgICBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5JTkZPKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZW4ndCBlbm91Z2ggYnl0ZXMgdG8gcGFyc2UgdGhlIHBheWxvYWQgbGVuZ3RoLCBldGMuXG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcbiAgICAgICAgY29uc3QgZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIGNvbnN0IG9wY29kZSA9IGJ1ZmZlclswXSAmIDB4MEZcbiAgICAgICAgY29uc3QgbWFza2VkID0gKGJ1ZmZlclsxXSAmIDB4ODApID09PSAweDgwXG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnRlZCA9ICFmaW4gJiYgb3Bjb2RlICE9PSBvcGNvZGVzLkNPTlRJTlVBVElPTlxuICAgICAgICBjb25zdCBwYXlsb2FkTGVuZ3RoID0gYnVmZmVyWzFdICYgMHg3RlxuXG4gICAgICAgIGNvbnN0IHJzdjEgPSBidWZmZXJbMF0gJiAweDQwXG4gICAgICAgIGNvbnN0IHJzdjIgPSBidWZmZXJbMF0gJiAweDIwXG4gICAgICAgIGNvbnN0IHJzdjMgPSBidWZmZXJbMF0gJiAweDEwXG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkT3Bjb2RlKG9wY29kZSkpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnSW52YWxpZCBvcGNvZGUgcmVjZWl2ZWQnKVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWFza2VkKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ZyYW1lIGNhbm5vdCBiZSBtYXNrZWQnKVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBNVVNUIGJlIDAgdW5sZXNzIGFuIGV4dGVuc2lvbiBpcyBuZWdvdGlhdGVkIHRoYXQgZGVmaW5lcyBtZWFuaW5nc1xuICAgICAgICAvLyBmb3Igbm9uLXplcm8gdmFsdWVzLiAgSWYgYSBub256ZXJvIHZhbHVlIGlzIHJlY2VpdmVkIGFuZCBub25lIG9mXG4gICAgICAgIC8vIHRoZSBuZWdvdGlhdGVkIGV4dGVuc2lvbnMgZGVmaW5lcyB0aGUgbWVhbmluZyBvZiBzdWNoIGEgbm9uemVyb1xuICAgICAgICAvLyB2YWx1ZSwgdGhlIHJlY2VpdmluZyBlbmRwb2ludCBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXRcbiAgICAgICAgLy8gQ29ubmVjdGlvbl8uXG4gICAgICAgIC8vIFRoaXMgZG9jdW1lbnQgYWxsb2NhdGVzIHRoZSBSU1YxIGJpdCBvZiB0aGUgV2ViU29ja2V0IGhlYWRlciBmb3JcbiAgICAgICAgLy8gUE1DRXMgYW5kIGNhbGxzIHRoZSBiaXQgdGhlIFwiUGVyLU1lc3NhZ2UgQ29tcHJlc3NlZFwiIGJpdC4gIE9uIGFcbiAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gd2hlcmUgYSBQTUNFIGlzIGluIHVzZSwgdGhpcyBiaXQgaW5kaWNhdGVzXG4gICAgICAgIC8vIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgICAgICBpZiAocnN2MSAhPT0gMCAmJiAhdGhpcy4jZXh0ZW5zaW9ucy5oYXMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0V4cGVjdGVkIFJTVjEgdG8gYmUgY2xlYXIuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyc3YyICE9PSAwIHx8IHJzdjMgIT09IDApIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUlNWMSwgUlNWMiwgUlNWMyBtdXN0IGJlIGNsZWFyJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnbWVudGVkICYmICFpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpKSB7XG4gICAgICAgICAgLy8gT25seSB0ZXh0IGFuZCBiaW5hcnkgZnJhbWVzIGNhbiBiZSBmcmFnbWVudGVkXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ludmFsaWQgZnJhbWUgdHlwZSB3YXMgZnJhZ21lbnRlZC4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgcGFyc2luZyBhIHRleHQvYmluYXJ5IGZyYW1lIGFuZCBkbyBub3QgcmVjZWl2ZSBlaXRoZXJcbiAgICAgICAgLy8gYSBjb250aW51YXRpb24gZnJhbWUgb3IgY2xvc2UgZnJhbWUsIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG4gICAgICAgIGlmIChpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpICYmIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0V4cGVjdGVkIGNvbnRpbnVhdGlvbiBmcmFtZScpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIGZyYWdtZW50ZWQpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFwiQWxsIGNvbnRyb2wgZnJhbWVzIE1VU1QgaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBvciBsZXNzXG4gICAgICAgIC8vIGFuZCBNVVNUIE5PVCBiZSBmcmFnbWVudGVkLlwiXG4gICAgICAgIGlmICgocGF5bG9hZExlbmd0aCA+IDEyNSB8fCBmcmFnbWVudGVkKSAmJiBpc0NvbnRyb2xGcmFtZShvcGNvZGUpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0NvbnRyb2wgZnJhbWUgZWl0aGVyIHRvbyBsYXJnZSBvciBmcmFnbWVudGVkJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvbnRpbnVhdGlvbkZyYW1lKG9wY29kZSkgJiYgdGhpcy4jZnJhZ21lbnRzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy4jaW5mby5jb21wcmVzc2VkKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1VuZXhwZWN0ZWQgY29udGludWF0aW9uIGZyYW1lJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoIDw9IDEyNSkge1xuICAgICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IHBheWxvYWRMZW5ndGhcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcblxuICAgICAgICAgIGlmICghdGhpcy4jdmFsaWRhdGVQYXlsb2FkTGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2XG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVGV4dEJpbmFyeUZyYW1lKG9wY29kZSkpIHtcbiAgICAgICAgICB0aGlzLiNpbmZvLmJpbmFyeVR5cGUgPSBvcGNvZGVcbiAgICAgICAgICB0aGlzLiNpbmZvLmNvbXByZXNzZWQgPSByc3YxICE9PSAwXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9IG9wY29kZVxuICAgICAgICB0aGlzLiNpbmZvLm1hc2tlZCA9IG1hc2tlZFxuICAgICAgICB0aGlzLiNpbmZvLmZpbiA9IGZpblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSBmcmFnbWVudGVkXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcblxuICAgICAgICBpZiAoIXRoaXMuI3ZhbGlkYXRlUGF5bG9hZExlbmd0aCgpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG4gICAgICAgIGNvbnN0IGxvd2VyID0gYnVmZmVyLnJlYWRVSW50MzJCRSg0KVxuXG4gICAgICAgIC8vIDJeMzEgaXMgdGhlIG1heGltdW0gYnl0ZXMgYW4gYXJyYXlidWZmZXIgY2FuIGNvbnRhaW5cbiAgICAgICAgLy8gb24gMzItYml0IHN5c3RlbXMuIEFsdGhvdWdoLCBvbiA2NC1iaXQgc3lzdGVtcywgdGhpcyBpc1xuICAgICAgICAvLyAyXjUzLTEgYnl0ZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9JbnZhbGlkX2FycmF5X2xlbmd0aFxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvY29tbW9uL2dsb2JhbHMuaDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZTticHY9MTticHQ9MTtsPTEyNzVcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLmg7bD0zNDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZVxuICAgICAgICBpZiAodXBwZXIgIT09IDAgfHwgbG93ZXIgPiAyICoqIDMxIC0gMSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBwYXlsb2FkIGxlbmd0aCA+IDJeMzEgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IGxvd2VyXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuXG4gICAgICAgIGlmICghdGhpcy4jdmFsaWRhdGVQYXlsb2FkTGVuZ3RoKCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlJFQURfREFUQSkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aClcblxuICAgICAgICBpZiAoaXNDb250cm9sRnJhbWUodGhpcy4jaW5mby5vcGNvZGUpKSB7XG4gICAgICAgICAgdGhpcy4jbG9vcCA9IHRoaXMucGFyc2VDb250cm9sRnJhbWUoYm9keSlcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmNvbXByZXNzZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy53cml0ZUZyYWdtZW50cyhib2R5KSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuI21heFBheWxvYWRTaXplID4gMCAmJiB0aGlzLiNmcmFnbWVudHNCeXRlcyA+IHRoaXMuI21heFBheWxvYWRTaXplKSB7XG4gICAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOSwgbmV3IE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvcigpLm1lc3NhZ2UpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgbm90IGZyYWdtZW50ZWQsIGEgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cbiAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyBmcmFnbWVudGVkLCBpdCB3aWxsIHRlcm1pbmF0ZSB3aXRoIGEgZmluIGJpdCBzZXRcbiAgICAgICAgICAgIC8vIGFuZCBhbiBvcGNvZGUgb2YgMCAoY29udGludWF0aW9uKSwgdGhlcmVmb3JlIHdlIGhhbmRsZSB0aGF0IHdoZW5cbiAgICAgICAgICAgIC8vIHBhcnNpbmcgY29udGludWF0aW9uIGZyYW1lcywgbm90IGhlcmUuXG4gICAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLmZpbikge1xuICAgICAgICAgICAgICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQodGhpcy53cywgdGhpcy4jaW5mby5iaW5hcnlUeXBlLCB0aGlzLmNvbnN1bWVGcmFnbWVudHMoKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNleHRlbnNpb25zLmdldCgncGVybWVzc2FnZS1kZWZsYXRlJykuZGVjb21wcmVzcyhcbiAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgdGhpcy4jaW5mby5maW4sXG4gICAgICAgICAgICAgIChlcnJvciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGVycm9yIGluc3RhbmNlb2YgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yID8gMTAwOSA6IDEwMDdcbiAgICAgICAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgY29kZSwgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy53cml0ZUZyYWdtZW50cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI21heFBheWxvYWRTaXplID4gMCAmJiB0aGlzLiNmcmFnbWVudHNCeXRlcyA+IHRoaXMuI21heFBheWxvYWRTaXplKSB7XG4gICAgICAgICAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlKHRoaXMud3MsIDEwMDksIG5ldyBNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3IoKS5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmZpbikge1xuICAgICAgICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgICAgICAgICAgdGhpcy4jbG9vcCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8uYmluYXJ5VHlwZSwgdGhpcy5jb25zdW1lRnJhZ21lbnRzKCkpXG5cbiAgICAgICAgICAgICAgICB0aGlzLiNsb29wID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cbiAgICAgICAgICAgICAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICB0aGlzLiNsb29wID0gZmFsc2VcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgbiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBCdWZmZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxlZCBjb25zdW1lKCkgYmVmb3JlIGJ1ZmZlcnMgc2F0aWF0ZWQuJylcbiAgICB9IGVsc2UgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIGlmICh0aGlzLiNidWZmZXJzWzBdLmxlbmd0aCA9PT0gbikge1xuICAgICAgdGhpcy4jYnl0ZU9mZnNldCAtPSB0aGlzLiNidWZmZXJzWzBdLmxlbmd0aFxuICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlcnMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKVxuICAgIGxldCBvZmZzZXQgPSAwXG5cbiAgICB3aGlsZSAob2Zmc2V0ICE9PSBuKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy4jYnVmZmVyc1swXVxuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG5leHRcblxuICAgICAgaWYgKGxlbmd0aCArIG9mZnNldCA9PT0gbikge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggKyBvZmZzZXQgPiBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQobmV4dC5zdWJhcnJheSgwLCBuIC0gb2Zmc2V0KSwgb2Zmc2V0KVxuICAgICAgICB0aGlzLiNidWZmZXJzWzBdID0gbmV4dC5zdWJhcnJheShuIC0gb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgb2Zmc2V0ICs9IG5leHQubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jYnl0ZU9mZnNldCAtPSBuXG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICB3cml0ZUZyYWdtZW50cyAoZnJhZ21lbnQpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNtYXhGcmFnbWVudHMgPiAwICYmXG4gICAgICB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID09PSB0aGlzLiNtYXhGcmFnbWVudHNcbiAgICApIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOCwgJ1RvbyBtYW55IG1lc3NhZ2UgZnJhZ21lbnRzJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMuI2ZyYWdtZW50c0J5dGVzICs9IGZyYWdtZW50Lmxlbmd0aFxuICAgIHRoaXMuI2ZyYWdtZW50cy5wdXNoKGZyYWdtZW50KVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdW1lRnJhZ21lbnRzICgpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB0aGlzLiNmcmFnbWVudHNcblxuICAgIGlmIChmcmFnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLiNmcmFnbWVudHNCeXRlcyA9IDBcbiAgICAgIHJldHVybiBmcmFnbWVudHMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoZnJhZ21lbnRzLCB0aGlzLiNmcmFnbWVudHNCeXRlcylcbiAgICB0aGlzLiNmcmFnbWVudHMgPSBbXVxuICAgIHRoaXMuI2ZyYWdtZW50c0J5dGVzID0gMFxuXG4gICAgcmV0dXJuIG91dHB1dFxuICB9XG5cbiAgcGFyc2VDbG9zZUJvZHkgKGRhdGEpIHtcbiAgICBhc3NlcnQoZGF0YS5sZW5ndGggIT09IDEpXG5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgY29kZVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoID49IDIpIHtcbiAgICAgIC8vIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXNcbiAgICAgIC8vIGRlZmluZWQgYXMgdGhlIHN0YXR1cyBjb2RlIChTZWN0aW9uIDcuNCkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBDbG9zZVxuICAgICAgLy8gY29udHJvbCBmcmFtZSByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb25cbiAgICAgIGNvZGUgPSBkYXRhLnJlYWRVSW50MTZCRSgwKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4geyBjb2RlOiAxMDAyLCByZWFzb246ICdJbnZhbGlkIHN0YXR1cyBjb2RlJywgZXJyb3I6IHRydWUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZWFzb24gPSB1dGY4RGVjb2RlKHJlYXNvbilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IDEwMDcsIHJlYXNvbjogJ0ludmFsaWQgVVRGLTgnLCBlcnJvcjogdHJ1ZSB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZSwgcmVhc29uLCBlcnJvcjogZmFsc2UgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBjb250cm9sIGZyYW1lcy5cbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJvZHlcbiAgICovXG4gIHBhcnNlQ29udHJvbEZyYW1lIChib2R5KSB7XG4gICAgY29uc3QgeyBvcGNvZGUsIHBheWxvYWRMZW5ndGggfSA9IHRoaXMuI2luZm9cblxuICAgIGlmIChvcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBjbG9zZSBmcmFtZSB3aXRoIGEgMS1ieXRlIGJvZHkuJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2luZm8uY2xvc2VJbmZvID0gdGhpcy5wYXJzZUNsb3NlQm9keShib2R5KVxuXG4gICAgICBpZiAodGhpcy4jaW5mby5jbG9zZUluZm8uZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBjb2RlLCByZWFzb24gfSA9IHRoaXMuI2luZm8uY2xvc2VJbmZvXG5cbiAgICAgICAgY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsIGNvZGUsIHJlYXNvbiwgcmVhc29uLmxlbmd0aClcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgcmVhc29uKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMud3Nba1NlbnRDbG9zZV0gIT09IHNlbnRDbG9zZUZyYW1lU3RhdGUuU0VOVCkge1xuICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgIC8vIENsb3NlIGZyYW1lLCB0aGUgZW5kcG9pbnQgTVVTVCBzZW5kIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UuICAoV2hlblxuICAgICAgICAvLyBzZW5kaW5nIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UsIHRoZSBlbmRwb2ludCB0eXBpY2FsbHkgZWNob3MgdGhlXG4gICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgbGV0IGJvZHkgPSBlbXB0eUJ1ZmZlclxuICAgICAgICBpZiAodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSkge1xuICAgICAgICAgIGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICBib2R5LndyaXRlVUludDE2QkUodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSwgMClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9zZUZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoXG4gICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0gPSB0cnVlXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAob3Bjb2RlID09PSBvcGNvZGVzLlBJTkcpIHtcbiAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgIC8vIHJlc3BvbnNlLCB1bmxlc3MgaXQgYWxyZWFkeSByZWNlaXZlZCBhIENsb3NlIGZyYW1lLlxuICAgICAgLy8gQSBQb25nIGZyYW1lIHNlbnQgaW4gcmVzcG9uc2UgdG8gYSBQaW5nIGZyYW1lIG11c3QgaGF2ZSBpZGVudGljYWxcbiAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgIGlmICghdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0pIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgIGlmIChjaGFubmVscy5waW5nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgY2hhbm5lbHMucGluZy5wdWJsaXNoKHtcbiAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcGNvZGUgPT09IG9wY29kZXMuUE9ORykge1xuICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgLy8gdW5pZGlyZWN0aW9uYWwgaGVhcnRiZWF0LiAgQSByZXNwb25zZSB0byBhbiB1bnNvbGljaXRlZCBQb25nIGZyYW1lIGlzXG4gICAgICAvLyBub3QgZXhwZWN0ZWQuXG5cbiAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgIGNoYW5uZWxzLnBvbmcucHVibGlzaCh7XG4gICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBnZXQgY2xvc2luZ0luZm8gKCkge1xuICAgIHJldHVybiB0aGlzLiNpbmZvLmNsb3NlSW5mb1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCeXRlUGFyc2VyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcbmNvbnN0IHsgb3Bjb2Rlcywgc2VuZEhpbnRzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCBGaXhlZFF1ZXVlID0gcmVxdWlyZSgnLi4vLi4vZGlzcGF0Y2hlci9maXhlZC1xdWV1ZScpXG5cbi8qKiBAdHlwZSB7dHlwZW9mIFVpbnQ4QXJyYXl9ICovXG5jb25zdCBGYXN0QnVmZmVyID0gQnVmZmVyW1N5bWJvbC5zcGVjaWVzXVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlbmRRdWV1ZU5vZGVcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTx2b2lkPiB8IG51bGx9IHByb21pc2VcbiAqIEBwcm9wZXJ0eSB7KCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KX0gY2FsbGJhY2tcbiAqIEBwcm9wZXJ0eSB7QnVmZmVyIHwgbnVsbH0gZnJhbWVcbiAqL1xuXG5jbGFzcyBTZW5kUXVldWUge1xuICAvKipcbiAgICogQHR5cGUge0ZpeGVkUXVldWV9XG4gICAqL1xuICAjcXVldWUgPSBuZXcgRml4ZWRRdWV1ZSgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgI3J1bm5pbmcgPSBmYWxzZVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOm5ldCcpLlNvY2tldH0gKi9cbiAgI3NvY2tldFxuXG4gIGNvbnN0cnVjdG9yIChzb2NrZXQpIHtcbiAgICB0aGlzLiNzb2NrZXQgPSBzb2NrZXRcbiAgfVxuXG4gIGFkZCAoaXRlbSwgY2IsIGhpbnQpIHtcbiAgICBpZiAoaGludCAhPT0gc2VuZEhpbnRzLmJsb2IpIHtcbiAgICAgIGNvbnN0IGZyYW1lID0gY3JlYXRlRnJhbWUoaXRlbSwgaGludClcbiAgICAgIGlmICghdGhpcy4jcnVubmluZykge1xuICAgICAgICAvLyBmYXN0LXBhdGhcbiAgICAgICAgdGhpcy4jc29ja2V0LndyaXRlKGZyYW1lLCBjYilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qKiBAdHlwZSB7U2VuZFF1ZXVlTm9kZX0gKi9cbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgICAgICBmcmFtZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3F1ZXVlLnB1c2gobm9kZSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7U2VuZFF1ZXVlTm9kZX0gKi9cbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgcHJvbWlzZTogaXRlbS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIG5vZGUucHJvbWlzZSA9IG51bGxcbiAgICAgICAgbm9kZS5mcmFtZSA9IGNyZWF0ZUZyYW1lKGFiLCBoaW50KVxuICAgICAgfSksXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBmcmFtZTogbnVsbFxuICAgIH1cblxuICAgIHRoaXMuI3F1ZXVlLnB1c2gobm9kZSlcblxuICAgIGlmICghdGhpcy4jcnVubmluZykge1xuICAgICAgdGhpcy4jcnVuKClcbiAgICB9XG4gIH1cblxuICBhc3luYyAjcnVuICgpIHtcbiAgICB0aGlzLiNydW5uaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHF1ZXVlID0gdGhpcy4jcXVldWVcbiAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgIC8vIHdhaXQgcGVuZGluZyBwcm9taXNlXG4gICAgICBpZiAobm9kZS5wcm9taXNlICE9PSBudWxsKSB7XG4gICAgICAgIGF3YWl0IG5vZGUucHJvbWlzZVxuICAgICAgfVxuICAgICAgLy8gd3JpdGVcbiAgICAgIHRoaXMuI3NvY2tldC53cml0ZShub2RlLmZyYW1lLCBub2RlLmNhbGxiYWNrKVxuICAgICAgLy8gY2xlYW51cFxuICAgICAgbm9kZS5jYWxsYmFjayA9IG5vZGUuZnJhbWUgPSBudWxsXG4gICAgfVxuICAgIHRoaXMuI3J1bm5pbmcgPSBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYW1lIChkYXRhLCBoaW50KSB7XG4gIHJldHVybiBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHRvQnVmZmVyKGRhdGEsIGhpbnQpKS5jcmVhdGVGcmFtZShoaW50ID09PSBzZW5kSGludHMuc3RyaW5nID8gb3Bjb2Rlcy5URVhUIDogb3Bjb2Rlcy5CSU5BUlkpXG59XG5cbmZ1bmN0aW9uIHRvQnVmZmVyIChkYXRhLCBoaW50KSB7XG4gIHN3aXRjaCAoaGludCkge1xuICAgIGNhc2Ugc2VuZEhpbnRzLnN0cmluZzpcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKVxuICAgIGNhc2Ugc2VuZEhpbnRzLmFycmF5QnVmZmVyOlxuICAgIGNhc2Ugc2VuZEhpbnRzLmJsb2I6XG4gICAgICByZXR1cm4gbmV3IEZhc3RCdWZmZXIoZGF0YSlcbiAgICBjYXNlIHNlbmRIaW50cy50eXBlZEFycmF5OlxuICAgICAgcmV0dXJuIG5ldyBGYXN0QnVmZmVyKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgU2VuZFF1ZXVlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcbmNvbnN0IHsgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCB7IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsIHN0YXRlcywgc2VudENsb3NlRnJhbWVTdGF0ZSwgc2VuZEhpbnRzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtXZWJTb2NrZXRVUkwsXG4gIGtSZWFkeVN0YXRlLFxuICBrQ29udHJvbGxlcixcbiAga0JpbmFyeVR5cGUsXG4gIGtSZXNwb25zZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXJcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3Qge1xuICBpc0Nvbm5lY3RpbmcsXG4gIGlzRXN0YWJsaXNoZWQsXG4gIGlzQ2xvc2luZyxcbiAgaXNWYWxpZFN1YnByb3RvY29sLFxuICBmaXJlRXZlbnRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uLCBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi8uLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHsgRXJyb3JFdmVudCwgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBTZW5kUXVldWUgfSA9IHJlcXVpcmUoJy4vc2VuZGVyJylcblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLWRlZmluaXRpb25cbmNsYXNzIFdlYlNvY2tldCBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgI2V2ZW50cyA9IHtcbiAgICBvcGVuOiBudWxsLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGNsb3NlOiBudWxsLFxuICAgIG1lc3NhZ2U6IG51bGxcbiAgfVxuXG4gICNidWZmZXJlZEFtb3VudCA9IDBcbiAgI3Byb3RvY29sID0gJydcbiAgI2V4dGVuc2lvbnMgPSAnJ1xuXG4gIC8qKiBAdHlwZSB7U2VuZFF1ZXVlfSAqL1xuICAjc2VuZFF1ZXVlXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSh0aGlzKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ1dlYlNvY2tldCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddKHByb3RvY29scywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsLCBwcmVmaXgsICd1cmwnKVxuICAgIHByb3RvY29scyA9IG9wdGlvbnMucHJvdG9jb2xzXG5cbiAgICAvLyAxLiBMZXQgYmFzZVVSTCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0J3MgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVUkwgPSBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3JkXHUyMDE5cyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgY29uc3QgY2xpZW50ID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdFxuXG4gICAgLy8gMTIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6XG5cbiAgICAvLyAgICAxLiBFc3RhYmxpc2ggYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBnaXZlbiB1cmxSZWNvcmQsIHByb3RvY29scyxcbiAgICAvLyAgICAgICBhbmQgY2xpZW50LlxuICAgIHRoaXNba0NvbnRyb2xsZXJdID0gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihcbiAgICAgIHVybFJlY29yZCxcbiAgICAgIHByb3RvY29scyxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRoaXMsXG4gICAgICAocmVzcG9uc2UsIGV4dGVuc2lvbnMpID0+IHRoaXMuI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkKHJlc3BvbnNlLCBleHRlbnNpb25zKSxcbiAgICAgIG9wdGlvbnNcbiAgICApXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgcmVhZHkgc3RhdGUsIHdoaWNoIGlzIGFcbiAgICAvLyBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4gSW5pdGlhbGx5IGl0IG11c3RcbiAgICAvLyBiZSBDT05ORUNUSU5HICgwKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DT05ORUNUSU5HXG5cbiAgICB0aGlzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5OT1RfU0VOVFxuXG4gICAgLy8gVGhlIGV4dGVuc2lvbnMgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gVGhlIHByb3RvY29sIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCBiaW5hcnkgdHlwZSwgd2hpY2ggaXMgYVxuICAgIC8vIEJpbmFyeVR5cGUuIEluaXRpYWxseSBpdCBtdXN0IGJlIFwiYmxvYlwiLlxuICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlXG4gICAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICAgKi9cbiAgY2xvc2UgKGNvZGUgPSB1bmRlZmluZWQsIHJlYXNvbiA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGNvbnN0IHByZWZpeCA9ICdXZWJTb2NrZXQuY2xvc2UnXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgcHJlZml4LCAnY29kZScsIHsgY2xhbXA6IHRydWUgfSlcbiAgICB9XG5cbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlYXNvbiA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhyZWFzb24sIHByZWZpeCwgJ3JlYXNvbicpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY29kZSBpcyBwcmVzZW50LCBidXQgaXMgbmVpdGhlciBhbiBpbnRlZ2VyIGVxdWFsIHRvIDEwMDAgbm9yIGFuXG4gICAgLy8gICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMzAwMCB0byA0OTk5LCBpbmNsdXNpdmUsIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkQWNjZXNzRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvZGUgIT09IDEwMDAgJiYgKGNvZGUgPCAzMDAwIHx8IGNvZGUgPiA0OTk5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdpbnZhbGlkIGNvZGUnLCAnSW52YWxpZEFjY2Vzc0Vycm9yJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVhc29uQnl0ZUxlbmd0aCA9IDBcblxuICAgIC8vIDIuIElmIHJlYXNvbiBpcyBwcmVzZW50LCB0aGVuIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWFzb25CeXRlcyBiZSB0aGUgcmVzdWx0IG9mIGVuY29kaW5nIHJlYXNvbi5cbiAgICAgIC8vIDIuIElmIHJlYXNvbkJ5dGVzIGlzIGxvbmdlciB0aGFuIDEyMyBieXRlcywgdGhlbiB0aHJvdyBhXG4gICAgICAvLyAgICBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgcmVhc29uQnl0ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlYXNvbilcblxuICAgICAgaWYgKHJlYXNvbkJ5dGVMZW5ndGggPiAxMjMpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgICBgUmVhc29uIG11c3QgYmUgbGVzcyB0aGFuIDEyMyBieXRlczsgcmVjZWl2ZWQgJHtyZWFzb25CeXRlTGVuZ3RofWAsXG4gICAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUnVuIHRoZSBmaXJzdCBtYXRjaGluZyBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24odGhpcywgY29kZSwgcmVhc29uLCByZWFzb25CeXRlTGVuZ3RoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1zZW5kXG4gICAqIEBwYXJhbSB7Tm9kZUpTLlR5cGVkQXJyYXl8QXJyYXlCdWZmZXJ8QmxvYnxzdHJpbmd9IGRhdGFcbiAgICovXG4gIHNlbmQgKGRhdGEpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnV2ViU29ja2V0LnNlbmQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBkYXRhID0gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEoZGF0YSwgcHJlZml4LCAnZGF0YScpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGlzQ29ubmVjdGluZyh0aGlzKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBkYXRhIGlzIGEgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgdGhlIGRhdGEgYXJndW1lbnRcbiAgICAgIC8vIHVzaW5nIGEgdGV4dCBmcmFtZSBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuXG4gICAgICAvLyBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCxcbiAgICAgIC8vIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2VcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhXG4gICAgICAvLyBzdHJpbmcgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZVxuICAgICAgLy8gdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0b1xuICAgICAgLy8gZXhwcmVzcyB0aGUgYXJndW1lbnQgYXMgVVRGLTguXG5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IGxlbmd0aFxuICAgICAgdGhpcy4jc2VuZFF1ZXVlLmFkZChkYXRhLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IGxlbmd0aFxuICAgICAgfSwgc2VuZEhpbnRzLnN0cmluZylcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZFxuICAgICAgLy8gdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgLy8gVGhlIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBkZXNjcmliZWRcbiAgICAgIC8vIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QuIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYW5cbiAgICAgIC8vIEFycmF5QnVmZmVyIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3RcbiAgICAgIC8vIGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIGxlbmd0aCBvZiB0aGVcbiAgICAgIC8vIEFycmF5QnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIHRoaXMuI3NlbmRRdWV1ZS5hZGQoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIH0sIHNlbmRIaW50cy5hcnJheUJ1ZmZlcilcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YVx1MjAxOXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIHRoaXMuI3NlbmRRdWV1ZS5hZGQoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIH0sIHNlbmRIaW50cy50eXBlZEFycmF5KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3RcdTIwMTlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gZGF0YS5zaXplXG4gICAgICB0aGlzLiNzZW5kUXVldWUuYWRkKGRhdGEsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gZGF0YS5zaXplXG4gICAgICB9LCBzZW5kSGludHMuYmxvYilcbiAgICB9XG4gIH1cblxuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHJlYWR5U3RhdGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHJlYWR5IHN0YXRlLlxuICAgIHJldHVybiB0aGlzW2tSZWFkeVN0YXRlXVxuICB9XG5cbiAgZ2V0IGJ1ZmZlcmVkQW1vdW50ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jYnVmZmVyZWRBbW91bnRcbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHVybCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tXZWJTb2NrZXRVUkxdKVxuICB9XG5cbiAgZ2V0IGV4dGVuc2lvbnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNleHRlbnNpb25zXG4gIH1cblxuICBnZXQgcHJvdG9jb2wgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNwcm90b2NvbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy4jZXZlbnRzLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25jbG9zZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5jbG9zZVxuICB9XG5cbiAgc2V0IG9uY2xvc2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5jbG9zZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoaXMuI2V2ZW50cy5jbG9zZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5tZXNzYWdlXG4gIH1cblxuICBzZXQgb25tZXNzYWdlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMubWVzc2FnZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy4jZXZlbnRzLm1lc3NhZ2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBiaW5hcnlUeXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpc1trQmluYXJ5VHlwZV1cbiAgfVxuXG4gIHNldCBiaW5hcnlUeXBlICh0eXBlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHR5cGUgIT09ICdibG9iJyAmJiB0eXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9IHR5cGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICAgKi9cbiAgI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkIChyZXNwb25zZSwgcGFyc2VkRXh0ZW5zaW9ucykge1xuICAgIC8vIHByb2Nlc3NSZXNwb25zZSBpcyBjYWxsZWQgd2hlbiB0aGUgXCJyZXNwb25zZSdzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHdlYlNvY2tldE9wdGlvbnMgPSB0aGlzW2tDb250cm9sbGVyXT8uZGlzcGF0Y2hlcj8ud2ViU29ja2V0T3B0aW9uc1xuICAgIGNvbnN0IG1heEZyYWdtZW50cyA9IHdlYlNvY2tldE9wdGlvbnM/Lm1heEZyYWdtZW50c1xuICAgIGNvbnN0IG1heFBheWxvYWRTaXplID0gd2ViU29ja2V0T3B0aW9ucz8ubWF4UGF5bG9hZFNpemVcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMsIHBhcnNlZEV4dGVuc2lvbnMsIHtcbiAgICAgIG1heEZyYWdtZW50cyxcbiAgICAgIG1heFBheWxvYWRTaXplXG4gICAgfSlcbiAgICBwYXJzZXIub24oJ2RyYWluJywgb25QYXJzZXJEcmFpbilcbiAgICBwYXJzZXIub24oJ2Vycm9yJywgb25QYXJzZXJFcnJvci5iaW5kKHRoaXMpKVxuXG4gICAgcmVzcG9uc2Uuc29ja2V0LndzID0gdGhpc1xuICAgIHRoaXNba0J5dGVQYXJzZXJdID0gcGFyc2VyXG5cbiAgICB0aGlzLiNzZW5kUXVldWUgPSBuZXcgU2VuZFF1ZXVlKHJlc3BvbnNlLnNvY2tldClcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZVx1MjAxOXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcG9zYWwgbWFkZSBpbiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3dlYnNvY2tldHMvaXNzdWVzLzQyXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAncHJvdG9jb2xzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQpXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdChWKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJvdG9jb2xzOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXShWKSB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBcnJheUJ1ZmZlcihWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxuZnVuY3Rpb24gb25QYXJzZXJEcmFpbiAoKSB7XG4gIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQucmVzdW1lKClcbn1cblxuZnVuY3Rpb24gb25QYXJzZXJFcnJvciAoZXJyKSB7XG4gIGxldCBtZXNzYWdlXG4gIGxldCBjb2RlXG5cbiAgaWYgKGVyciBpbnN0YW5jZW9mIENsb3NlRXZlbnQpIHtcbiAgICBtZXNzYWdlID0gZXJyLnJlYXNvblxuICAgIGNvZGUgPSBlcnIuY29kZVxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZVxuICB9XG5cbiAgZmlyZUV2ZW50KCdlcnJvcicsIHRoaXMsICgpID0+IG5ldyBFcnJvckV2ZW50KCdlcnJvcicsIHsgZXJyb3I6IGVyciwgbWVzc2FnZSB9KSlcblxuICBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24odGhpcywgY29kZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdlYlNvY2tldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSB2YWxpZCBMYXN0RXZlbnRJZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRMYXN0RXZlbnRJZCAodmFsdWUpIHtcbiAgLy8gTGFzdEV2ZW50SWQgc2hvdWxkIG5vdCBjb250YWluIFUrMDAwMCBOVUxMXG4gIHJldHVybiB2YWx1ZS5pbmRleE9mKCdcXHUwMDAwJykgPT09IC0xXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGJhc2UgMTAgZGlnaXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0FTQ0lJTnVtYmVyICh2YWx1ZSkge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh2YWx1ZS5jaGFyQ29kZUF0KGkpIDwgMHgzMCB8fCB2YWx1ZS5jaGFyQ29kZUF0KGkpID4gMHgzOSkgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzI2NjRcbmZ1bmN0aW9uIGRlbGF5IChtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKS51bnJlZigpXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1ZhbGlkTGFzdEV2ZW50SWQsXG4gIGlzQVNDSUlOdW1iZXIsXG4gIGRlbGF5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBpc0FTQ0lJTnVtYmVyLCBpc1ZhbGlkTGFzdEV2ZW50SWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8qKlxuICogQHR5cGUge251bWJlcltdfSBCT01cbiAqL1xuY29uc3QgQk9NID0gWzB4RUYsIDB4QkIsIDB4QkZdXG4vKipcbiAqIEB0eXBlIHsxMH0gTEZcbiAqL1xuY29uc3QgTEYgPSAweDBBXG4vKipcbiAqIEB0eXBlIHsxM30gQ1JcbiAqL1xuY29uc3QgQ1IgPSAweDBEXG4vKipcbiAqIEB0eXBlIHs1OH0gQ09MT05cbiAqL1xuY29uc3QgQ09MT04gPSAweDNBXG4vKipcbiAqIEB0eXBlIHszMn0gU1BBQ0VcbiAqL1xuY29uc3QgU1BBQ0UgPSAweDIwXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRXZlbnRTb3VyY2VTdHJlYW1FdmVudFxuICogQHR5cGUge29iamVjdH1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXZlbnRdIFRoZSBldmVudCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhXSBUaGUgZGF0YSBvZiB0aGUgbWVzc2FnZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaWRdIEEgdW5pcXVlIElEIGZvciB0aGUgZXZlbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JldHJ5XSBUaGUgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIGV2ZW50U291cmNlU2V0dGluZ3NcbiAqIEB0eXBlIHtvYmplY3R9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFzdEV2ZW50SWQgVGhlIGxhc3QgZXZlbnQgSUQgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9yaWdpbiBUaGUgb3JpZ2luIG9mIHRoZSBldmVudCBzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVjb25uZWN0aW9uVGltZSBUaGUgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuXG5jbGFzcyBFdmVudFNvdXJjZVN0cmVhbSBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBAdHlwZSB7ZXZlbnRTb3VyY2VTZXR0aW5nc31cbiAgICovXG4gIHN0YXRlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBMZWFkaW5nIGJ5dGUtb3JkZXItbWFyayBjaGVjay5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBjaGVja0JPTSA9IHRydWVcblxuICAvKipcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBjcmxmQ2hlY2sgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGV2ZW50RW5kQ2hlY2sgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7QnVmZmVyfVxuICAgKi9cbiAgYnVmZmVyID0gbnVsbFxuXG4gIHBvcyA9IDBcblxuICBldmVudCA9IHtcbiAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICBpZDogdW5kZWZpbmVkLFxuICAgIHJldHJ5OiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2V2ZW50U291cmNlU2V0dGluZ3N9IG9wdGlvbnMuZXZlbnRTb3VyY2VTZXR0aW5nc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5wdXNoXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEVuYWJsZSBvYmplY3QgbW9kZSBhcyBFdmVudFNvdXJjZVN0cmVhbSBlbWl0cyBvYmplY3RzIG9mIHNoYXBlXG4gICAgLy8gRXZlbnRTb3VyY2VTdHJlYW1FdmVudFxuICAgIG9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlID0gdHJ1ZVxuXG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIHRoaXMuc3RhdGUgPSBvcHRpb25zLmV2ZW50U291cmNlU2V0dGluZ3MgfHwge31cbiAgICBpZiAob3B0aW9ucy5wdXNoKSB7XG4gICAgICB0aGlzLnB1c2ggPSBvcHRpb25zLnB1c2hcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfZW5jb2RpbmdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfdHJhbnNmb3JtIChjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgIGlmIChjaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhY2hlIHRoZSBjaHVuayBpbiB0aGUgYnVmZmVyLCBhcyB0aGUgZGF0YSBtaWdodCBub3QgYmUgY29tcGxldGUgd2hpbGVcbiAgICAvLyBwcm9jZXNzaW5nIGl0XG4gICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgaWYgdGhlcmUgaXMgYSBtb3JlIHBlcmZvcm1hbnQgd2F5IHRvIGhhbmRsZVxuICAgIC8vIGluY29taW5nIGNodW5rc1xuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzI2MzBcbiAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWZmZXIsIGNodW5rXSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWZmZXIgPSBjaHVua1xuICAgIH1cblxuICAgIC8vIFN0cmlwIGxlYWRpbmcgYnl0ZS1vcmRlci1tYXJrIGlmIHdlIG9wZW5lZCB0aGUgc3RyZWFtIGFuZCBzdGFydGVkXG4gICAgLy8gdGhlIHByb2Nlc3Npbmcgb2YgdGhlIGluY29taW5nIGRhdGFcbiAgICBpZiAodGhpcy5jaGVja0JPTSkge1xuICAgICAgc3dpdGNoICh0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBCT01cbiAgICAgICAgICBpZiAodGhpcy5idWZmZXJbMF0gPT09IEJPTVswXSkge1xuICAgICAgICAgICAgLy8gSWYgaXQgaXMsIHdlIG5lZWQgdG8gd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgIC8vIEJPTSBhbnltb3JlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG5cbiAgICAgICAgICAvLyBUaGUgYnVmZmVyIG9ubHkgY29udGFpbnMgb25lIGJ5dGUgc28gd2UgbmVlZCB0byB3YWl0IGZvciBtb3JlIGRhdGFcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlyc3QgdHdvIGJ5dGVzIGFyZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgdHdvIGJ5dGVzXG4gICAgICAgICAgLy8gb2YgdGhlIEJPTVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzBdID09PSBCT01bMF0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzFdID09PSBCT01bMV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIG1vcmUgZGF0YSwgYmVjYXVzZSB0aGUgdGhpcmQgYnl0ZVxuICAgICAgICAgICAgLy8gaXMgbmVlZGVkIHRvIGRldGVybWluZSBpZiBpdCBpcyB0aGUgQk9NIG9yIG5vdFxuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgIC8vIEJPTSBhbnltb3JlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaXJzdCB0aHJlZSBieXRlcyBhcmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHRocmVlXG4gICAgICAgICAgLy8gYnl0ZXMgb2YgdGhlIEJPTVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzBdID09PSBCT01bMF0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzFdID09PSBCT01bMV0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzJdID09PSBCT01bMl1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzLCB3ZSBjYW4gZHJvcCB0aGUgYnVmZmVyZWQgZGF0YSwgYXMgaXQgaXMgb25seSB0aGUgQk9NXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygwKVxuICAgICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgICAgLy8gQk9NIGFueW1vcmVcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCT00gPSBmYWxzZVxuXG4gICAgICAgICAgICAvLyBBd2FpdCBtb3JlIGRhdGFcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgdGhlIEJPTSwgd2UgY2FuIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIGRhdGFcbiAgICAgICAgICB0aGlzLmNoZWNrQk9NID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgbG9uZ2VyIHRoYW4gMyBieXRlcywgc28gd2UgY2FuIGRyb3AgdGhlIEJPTSBpZiBpdCBpc1xuICAgICAgICAgIC8vIHByZXNlbnRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclswXSA9PT0gQk9NWzBdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsxXSA9PT0gQk9NWzFdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsyXSA9PT0gQk9NWzJdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIEJPTSBmcm9tIHRoZSBidWZmZXJcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkoMylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZXQgdGhlIGNoZWNrQk9NIGZsYWcgdG8gZmFsc2UgYXMgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgdGhlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBsaW5lIGVuZGVkIHdpdGggYW4gZW5kLW9mLWxpbmUsIHdlIG5lZWQgdG8gY2hlY2tcbiAgICAgIC8vIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhbHNvIGFuIGVuZC1vZi1saW5lLlxuICAgICAgaWYgKHRoaXMuZXZlbnRFbmRDaGVjaykge1xuICAgICAgICAvLyBJZiB0aGUgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGFuIGVuZC1vZi1saW5lLCB0aGVuIHRoZSBldmVudFxuICAgICAgICAvLyBpcyBmaW5pc2hlZCBhbmQgd2UgY2FuIHByb2Nlc3MgaXRcblxuICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgbGluZSBlbmRlZCB3aXRoIGEgY2FycmlhZ2UgcmV0dXJuLCB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGxpbmUgZmVlZCBhbmQgcmVtb3ZlIGl0XG4gICAgICAgIC8vIGZyb20gdGhlIGJ1ZmZlci5cbiAgICAgICAgaWYgKHRoaXMuY3JsZkNoZWNrKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGEgbGluZSBmZWVkLCB3ZSBjYW4gcmVtb3ZlIGl0XG4gICAgICAgICAgLy8gZnJvbSB0aGUgYnVmZmVyIGFuZCByZXNldCB0aGUgY3JsZkNoZWNrIGZsYWdcbiAgICAgICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBMRikge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyArIDEpXG4gICAgICAgICAgICB0aGlzLnBvcyA9IDBcbiAgICAgICAgICAgIHRoaXMuY3JsZkNoZWNrID0gZmFsc2VcblxuICAgICAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgbGluZSBmZWVkIGlzIG5vdCB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAgICAgLy8gZXZlbnQuIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGFuXG4gICAgICAgICAgICAvLyBlbmQtb2YtbGluZSBjaGFyYWN0ZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBldmVudCBpc1xuICAgICAgICAgICAgLy8gZmluaXNoZWQuIFdlIHNpbXBseSBjb250aW51ZSB0aGUgbG9vcCB0byBjaGVjayB0aGUgbmV4dFxuICAgICAgICAgICAgLy8gY2hhcmFjdGVyLlxuXG4gICAgICAgICAgICAvLyBBcyB3ZSByZW1vdmVkIHRoZSBsaW5lIGZlZWQgZnJvbSB0aGUgYnVmZmVyIGFuZCBzZXQgdGhlXG4gICAgICAgICAgICAvLyBjcmxmQ2hlY2sgZmxhZyB0byBmYWxzZSwgd2UgYmFzaWNhbGx5IGRvbid0IG1ha2UgYW55XG4gICAgICAgICAgICAvLyBkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgbGluZSBmZWVkIGFuZCBhIGNhcnJpYWdlIHJldHVybi5cbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3JsZkNoZWNrID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IExGIHx8IHRoaXMuYnVmZmVyW3RoaXMucG9zXSA9PT0gQ1IpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgYSBjYXJyaWFnZSByZXR1cm4sIHdlIG5lZWQgdG9cbiAgICAgICAgICAvLyBzZXQgdGhlIGNybGZDaGVjayBmbGFnIHRvIHRydWUsIGFzIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gICAgICAgICAgLy8gbmV4dCBjaGFyYWN0ZXIgaXMgYSBsaW5lIGZlZWQgc28gd2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuICAgICAgICAgIC8vIGJ1ZmZlclxuICAgICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgICAgICB0aGlzLmNybGZDaGVjayA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zICsgMSlcbiAgICAgICAgICB0aGlzLnBvcyA9IDBcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmV2ZW50LmRhdGEgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmV2ZW50LmV2ZW50IHx8IHRoaXMuZXZlbnQuaWQgfHwgdGhpcy5ldmVudC5yZXRyeSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnQodGhpcy5ldmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jbGVhckV2ZW50KClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBub3QgYW4gZW5kLW9mLWxpbmUsIHRoZW4gdGhlIGV2ZW50XG4gICAgICAgIC8vIGlzIG5vdCBmaW5pc2hlZCBhbmQgd2UgaGF2ZSB0byByZXNldCB0aGUgZXZlbnRFbmRDaGVjayBmbGFnXG4gICAgICAgIHRoaXMuZXZlbnRFbmRDaGVjayA9IGZhbHNlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhbiBlbmQtb2YtbGluZSwgd2UgY2FuIHByb2Nlc3MgdGhlXG4gICAgICAvLyBsaW5lXG4gICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBMRiB8fCB0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGNhcnJpYWdlIHJldHVybiwgd2UgbmVlZCB0b1xuICAgICAgICAvLyBzZXQgdGhlIGNybGZDaGVjayBmbGFnIHRvIHRydWUsIGFzIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gICAgICAgIC8vIG5leHQgY2hhcmFjdGVyIGlzIGEgbGluZSBmZWVkXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgICAgdGhpcy5jcmxmQ2hlY2sgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBhbnkgY2FzZSwgd2UgY2FuIHByb2Nlc3MgdGhlIGxpbmUgYXMgd2UgcmVhY2hlZCBhblxuICAgICAgICAvLyBlbmQtb2YtbGluZSBjaGFyYWN0ZXJcbiAgICAgICAgdGhpcy5wYXJzZUxpbmUodGhpcy5idWZmZXIuc3ViYXJyYXkoMCwgdGhpcy5wb3MpLCB0aGlzLmV2ZW50KVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgcHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MgKyAxKVxuICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24gYXMgd2UgcmVtb3ZlZCB0aGUgcHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICAgIHRoaXMucG9zID0gMFxuICAgICAgICAvLyBBIGxpbmUgd2FzIHByb2Nlc3NlZCBhbmQgdGhpcyBjb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBldmVudC4gV2UgbmVlZFxuICAgICAgICAvLyB0byBjaGVjayBpZiB0aGUgbmV4dCBsaW5lIGlzIGVtcHR5IHRvIGRldGVybWluZSBpZiB0aGUgZXZlbnQgaXNcbiAgICAgICAgLy8gZmluaXNoZWQuXG4gICAgICAgIHRoaXMuZXZlbnRFbmRDaGVjayA9IHRydWVcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MrK1xuICAgIH1cblxuICAgIGNhbGxiYWNrKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gbGluZVxuICAgKiBAcGFyYW0ge0V2ZW50U3RyZWFtRXZlbnR9IGV2ZW50XG4gICAqL1xuICBwYXJzZUxpbmUgKGxpbmUsIGV2ZW50KSB7XG4gICAgLy8gSWYgdGhlIGxpbmUgaXMgZW1wdHkgKGEgYmxhbmsgbGluZSlcbiAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQsIGFzIGRlZmluZWQgYmVsb3cuXG4gICAgLy8gVGhpcyB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIF90cmFuc2Zvcm0gbWV0aG9kXG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbGluZSBzdGFydHMgd2l0aCBhIFUrMDAzQSBDT0xPTiBjaGFyYWN0ZXIgKDopXG4gICAgLy8gSWdub3JlIHRoZSBsaW5lLlxuICAgIGNvbnN0IGNvbG9uUG9zaXRpb24gPSBsaW5lLmluZGV4T2YoQ09MT04pXG4gICAgaWYgKGNvbG9uUG9zaXRpb24gPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBmaWVsZCA9ICcnXG4gICAgbGV0IHZhbHVlID0gJydcblxuICAgIC8vIElmIHRoZSBsaW5lIGNvbnRhaW5zIGEgVSswMDNBIENPTE9OIGNoYXJhY3RlciAoOilcbiAgICBpZiAoY29sb25Qb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgIC8vIENvbGxlY3QgdGhlIGNoYXJhY3RlcnMgb24gdGhlIGxpbmUgYmVmb3JlIHRoZSBmaXJzdCBVKzAwM0EgQ09MT05cbiAgICAgIC8vIGNoYXJhY3RlciAoOiksIGFuZCBsZXQgZmllbGQgYmUgdGhhdCBzdHJpbmcuXG4gICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSBpZiB0aGVyZSBpcyBhIG1vcmUgcGVyZm9ybWFudCB3YXkgdG8gZXh0cmFjdCB0aGVcbiAgICAgIC8vIGZpZWxkXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yNjMwXG4gICAgICBmaWVsZCA9IGxpbmUuc3ViYXJyYXkoMCwgY29sb25Qb3NpdGlvbikudG9TdHJpbmcoJ3V0ZjgnKVxuXG4gICAgICAvLyBDb2xsZWN0IHRoZSBjaGFyYWN0ZXJzIG9uIHRoZSBsaW5lIGFmdGVyIHRoZSBmaXJzdCBVKzAwM0EgQ09MT05cbiAgICAgIC8vIGNoYXJhY3RlciAoOiksIGFuZCBsZXQgdmFsdWUgYmUgdGhhdCBzdHJpbmcuXG4gICAgICAvLyBJZiB2YWx1ZSBzdGFydHMgd2l0aCBhIFUrMDAyMCBTUEFDRSBjaGFyYWN0ZXIsIHJlbW92ZSBpdCBmcm9tIHZhbHVlLlxuICAgICAgbGV0IHZhbHVlU3RhcnQgPSBjb2xvblBvc2l0aW9uICsgMVxuICAgICAgaWYgKGxpbmVbdmFsdWVTdGFydF0gPT09IFNQQUNFKSB7XG4gICAgICAgICsrdmFsdWVTdGFydFxuICAgICAgfVxuICAgICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgaWYgdGhlcmUgaXMgYSBtb3JlIHBlcmZvcm1hbnQgd2F5IHRvIGV4dHJhY3QgdGhlXG4gICAgICAvLyB2YWx1ZVxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjYzMFxuICAgICAgdmFsdWUgPSBsaW5lLnN1YmFycmF5KHZhbHVlU3RhcnQpLnRvU3RyaW5nKCd1dGY4JylcblxuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgc3RyaW5nIGlzIG5vdCBlbXB0eSBidXQgZG9lcyBub3QgY29udGFpbiBhIFUrMDAzQSBDT0xPTlxuICAgICAgLy8gY2hhcmFjdGVyICg6KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcm9jZXNzIHRoZSBmaWVsZCB1c2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGJlbG93LCB1c2luZyB0aGUgd2hvbGVcbiAgICAgIC8vIGxpbmUgYXMgdGhlIGZpZWxkIG5hbWUsIGFuZCB0aGUgZW1wdHkgc3RyaW5nIGFzIHRoZSBmaWVsZCB2YWx1ZS5cbiAgICAgIGZpZWxkID0gbGluZS50b1N0cmluZygndXRmOCcpXG4gICAgICB2YWx1ZSA9ICcnXG4gICAgfVxuXG4gICAgLy8gTW9kaWZ5IHRoZSBldmVudCB3aXRoIHRoZSBmaWVsZCBuYW1lIGFuZCB2YWx1ZS4gVGhlIHZhbHVlIGlzIGFsc29cbiAgICAvLyBkZWNvZGVkIGFzIFVURi04XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgIGlmIChldmVudFtmaWVsZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnRbZmllbGRdICs9IGBcXG4ke3ZhbHVlfWBcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmV0cnknOlxuICAgICAgICBpZiAoaXNBU0NJSU51bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICBldmVudFtmaWVsZF0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdpZCc6XG4gICAgICAgIGlmIChpc1ZhbGlkTGFzdEV2ZW50SWQodmFsdWUpKSB7XG4gICAgICAgICAgZXZlbnRbZmllbGRdID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZXZlbnQnOlxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFNvdXJjZVN0cmVhbUV2ZW50fSBldmVudFxuICAgKi9cbiAgcHJvY2Vzc0V2ZW50IChldmVudCkge1xuICAgIGlmIChldmVudC5yZXRyeSAmJiBpc0FTQ0lJTnVtYmVyKGV2ZW50LnJldHJ5KSkge1xuICAgICAgdGhpcy5zdGF0ZS5yZWNvbm5lY3Rpb25UaW1lID0gcGFyc2VJbnQoZXZlbnQucmV0cnksIDEwKVxuICAgIH1cblxuICAgIGlmIChldmVudC5pZCAmJiBpc1ZhbGlkTGFzdEV2ZW50SWQoZXZlbnQuaWQpKSB7XG4gICAgICB0aGlzLnN0YXRlLmxhc3RFdmVudElkID0gZXZlbnQuaWRcbiAgICB9XG5cbiAgICAvLyBvbmx5IGRpc3BhdGNoIGV2ZW50LCB3aGVuIGRhdGEgaXMgcHJvdmlkZWRcbiAgICBpZiAoZXZlbnQuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2goe1xuICAgICAgICB0eXBlOiBldmVudC5ldmVudCB8fCAnbWVzc2FnZScsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBkYXRhOiBldmVudC5kYXRhLFxuICAgICAgICAgIGxhc3RFdmVudElkOiB0aGlzLnN0YXRlLmxhc3RFdmVudElkLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5zdGF0ZS5vcmlnaW5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjbGVhckV2ZW50ICgpIHtcbiAgICB0aGlzLmV2ZW50ID0ge1xuICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICByZXRyeTogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFNvdXJjZVN0cmVhbVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaCcpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBFdmVudFNvdXJjZVN0cmVhbSB9ID0gcmVxdWlyZSgnLi9ldmVudHNvdXJjZS1zdHJlYW0nKVxuY29uc3QgeyBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhLXVybCcpXG5jb25zdCB7IGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQgfSA9IHJlcXVpcmUoJy4uL3dlYnNvY2tldC9ldmVudHMnKVxuY29uc3QgeyBpc05ldHdvcmtFcnJvciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBkZWxheSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vKipcbiAqIEEgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBtdXN0IGluaXRpYWxseSBiZSBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLFxuICogcHJvYmFibHkgaW4gdGhlIHJlZ2lvbiBvZiBhIGZldyBzZWNvbmRzLlxuICpcbiAqIEluIENvbXBhcmlzb246XG4gKiAtIENocm9tZSB1c2VzIDMwMDBtcy5cbiAqIC0gRGVubyB1c2VzIDUwMDBtcy5cbiAqXG4gKiBAdHlwZSB7MzAwMH1cbiAqL1xuY29uc3QgZGVmYXVsdFJlY29ubmVjdGlvblRpbWUgPSAzMDAwXG5cbi8qKlxuICogVGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLlxuICogQGVudW1cbiAqIEByZWFkb25seVxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNkb20tZXZlbnRzb3VyY2UtcmVhZHlzdGF0ZS1kZXZcbiAqL1xuXG4vKipcbiAqIFRoZSBjb25uZWN0aW9uIGhhcyBub3QgeWV0IGJlZW4gZXN0YWJsaXNoZWQsIG9yIGl0IHdhcyBjbG9zZWQgYW5kIHRoZSB1c2VyXG4gKiBhZ2VudCBpcyByZWNvbm5lY3RpbmcuXG4gKiBAdHlwZSB7MH1cbiAqL1xuY29uc3QgQ09OTkVDVElORyA9IDBcblxuLyoqXG4gKiBUaGUgdXNlciBhZ2VudCBoYXMgYW4gb3BlbiBjb25uZWN0aW9uIGFuZCBpcyBkaXNwYXRjaGluZyBldmVudHMgYXMgaXRcbiAqIHJlY2VpdmVzIHRoZW0uXG4gKiBAdHlwZSB7MX1cbiAqL1xuY29uc3QgT1BFTiA9IDFcblxuLyoqXG4gKiBUaGUgY29ubmVjdGlvbiBpcyBub3Qgb3BlbiwgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCB0cnlpbmcgdG8gcmVjb25uZWN0LlxuICogQHR5cGUgezJ9XG4gKi9cbmNvbnN0IENMT1NFRCA9IDJcblxuLyoqXG4gKiBSZXF1ZXN0cyBmb3IgdGhlIGVsZW1lbnQgd2lsbCBoYXZlIHRoZWlyIG1vZGUgc2V0IHRvIFwiY29yc1wiIGFuZCB0aGVpciBjcmVkZW50aWFscyBtb2RlIHNldCB0byBcInNhbWUtb3JpZ2luXCIuXG4gKiBAdHlwZSB7J2Fub255bW91cyd9XG4gKi9cbmNvbnN0IEFOT05ZTU9VUyA9ICdhbm9ueW1vdXMnXG5cbi8qKlxuICogUmVxdWVzdHMgZm9yIHRoZSBlbGVtZW50IHdpbGwgaGF2ZSB0aGVpciBtb2RlIHNldCB0byBcImNvcnNcIiBhbmQgdGhlaXIgY3JlZGVudGlhbHMgbW9kZSBzZXQgdG8gXCJpbmNsdWRlXCIuXG4gKiBAdHlwZSB7J3VzZS1jcmVkZW50aWFscyd9XG4gKi9cbmNvbnN0IFVTRV9DUkVERU5USUFMUyA9ICd1c2UtY3JlZGVudGlhbHMnXG5cbi8qKlxuICogVGhlIEV2ZW50U291cmNlIGludGVyZmFjZSBpcyB1c2VkIHRvIHJlY2VpdmUgc2VydmVyLXNlbnQgZXZlbnRzLiBJdFxuICogY29ubmVjdHMgdG8gYSBzZXJ2ZXIgb3ZlciBIVFRQIGFuZCByZWNlaXZlcyBldmVudHMgaW4gdGV4dC9ldmVudC1zdHJlYW1cbiAqIGZvcm1hdCB3aXRob3V0IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uXG4gKiBAZXh0ZW5kcyB7RXZlbnRUYXJnZXR9XG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI3NlcnZlci1zZW50LWV2ZW50c1xuICogQGFwaSBwdWJsaWNcbiAqL1xuY2xhc3MgRXZlbnRTb3VyY2UgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gICNldmVudHMgPSB7XG4gICAgb3BlbjogbnVsbCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsXG4gIH1cblxuICAjdXJsID0gbnVsbFxuICAjd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcblxuICAjcmVhZHlTdGF0ZSA9IENPTk5FQ1RJTkdcblxuICAjcmVxdWVzdCA9IG51bGxcbiAgI2NvbnRyb2xsZXIgPSBudWxsXG5cbiAgI2Rpc3BhdGNoZXJcblxuICAvKipcbiAgICogQHR5cGUge2ltcG9ydCgnLi9ldmVudHNvdXJjZS1zdHJlYW0nKS5ldmVudFNvdXJjZVNldHRpbmdzfVxuICAgKi9cbiAgI3N0YXRlXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRXZlbnRTb3VyY2Ugb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7RXZlbnRTb3VyY2VJbml0fSBbZXZlbnRTb3VyY2VJbml0RGljdF1cbiAgICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCN0aGUtZXZlbnRzb3VyY2UtaW50ZXJmYWNlXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCBldmVudFNvdXJjZUluaXREaWN0ID0ge30pIHtcbiAgICAvLyAxLiBMZXQgZXYgYmUgYSBuZXcgRXZlbnRTb3VyY2Ugb2JqZWN0LlxuICAgIHN1cGVyKClcblxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnRXZlbnRTb3VyY2UgY29uc3RydWN0b3InXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBpZiAoIWV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgZXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnRXZlbnRTb3VyY2UgaXMgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICBjb2RlOiAnVU5ESUNJLUVTJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsLCBwcmVmaXgsICd1cmwnKVxuICAgIGV2ZW50U291cmNlSW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5FdmVudFNvdXJjZUluaXREaWN0KGV2ZW50U291cmNlSW5pdERpY3QsIHByZWZpeCwgJ2V2ZW50U291cmNlSW5pdERpY3QnKVxuXG4gICAgdGhpcy4jZGlzcGF0Y2hlciA9IGV2ZW50U291cmNlSW5pdERpY3QuZGlzcGF0Y2hlclxuICAgIHRoaXMuI3N0YXRlID0ge1xuICAgICAgbGFzdEV2ZW50SWQ6ICcnLFxuICAgICAgcmVjb25uZWN0aW9uVGltZTogZGVmYXVsdFJlY29ubmVjdGlvblRpbWVcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgc2V0dGluZ3MgYmUgZXYncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIGNvbnN0IHNldHRpbmdzID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdFxuXG4gICAgbGV0IHVybFJlY29yZFxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIDMuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBlbmNvZGluZy1wYXJzaW5nIGEgVVJMIGdpdmVuIHVybCwgcmVsYXRpdmUgdG8gc2V0dGluZ3MuXG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgc2V0dGluZ3Muc2V0dGluZ3NPYmplY3QuYmFzZVVybClcbiAgICAgIHRoaXMuI3N0YXRlLm9yaWdpbiA9IHVybFJlY29yZC5vcmlnaW5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyA0LiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNS4gU2V0IGV2J3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzLiN1cmwgPSB1cmxSZWNvcmQuaHJlZlxuXG4gICAgLy8gNi4gTGV0IGNvcnNBdHRyaWJ1dGVTdGF0ZSBiZSBBbm9ueW1vdXMuXG4gICAgbGV0IGNvcnNBdHRyaWJ1dGVTdGF0ZSA9IEFOT05ZTU9VU1xuXG4gICAgLy8gNy4gSWYgdGhlIHZhbHVlIG9mIGV2ZW50U291cmNlSW5pdERpY3QncyB3aXRoQ3JlZGVudGlhbHMgbWVtYmVyIGlzIHRydWUsXG4gICAgLy8gdGhlbiBzZXQgY29yc0F0dHJpYnV0ZVN0YXRlIHRvIFVzZSBDcmVkZW50aWFscyBhbmQgc2V0IGV2J3NcbiAgICAvLyB3aXRoQ3JlZGVudGlhbHMgYXR0cmlidXRlIHRvIHRydWUuXG4gICAgaWYgKGV2ZW50U291cmNlSW5pdERpY3Qud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICBjb3JzQXR0cmlidXRlU3RhdGUgPSBVU0VfQ1JFREVOVElBTFNcbiAgICAgIHRoaXMuI3dpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9XG5cbiAgICAvLyA4LiBMZXQgcmVxdWVzdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcG90ZW50aWFsLUNPUlMgcmVxdWVzdCBnaXZlblxuICAgIC8vIHVybFJlY29yZCwgdGhlIGVtcHR5IHN0cmluZywgYW5kIGNvcnNBdHRyaWJ1dGVTdGF0ZS5cbiAgICBjb25zdCBpbml0UmVxdWVzdCA9IHtcbiAgICAgIHJlZGlyZWN0OiAnZm9sbG93JyxcbiAgICAgIGtlZXBhbGl2ZTogdHJ1ZSxcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdXJscy1hbmQtZmV0Y2hpbmcuaHRtbCNjb3JzLXNldHRpbmdzLWF0dHJpYnV0ZXNcbiAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICAgIGNyZWRlbnRpYWxzOiBjb3JzQXR0cmlidXRlU3RhdGUgPT09ICdhbm9ueW1vdXMnXG4gICAgICAgID8gJ3NhbWUtb3JpZ2luJ1xuICAgICAgICA6ICdvbWl0JyxcbiAgICAgIHJlZmVycmVyOiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gOS4gU2V0IHJlcXVlc3QncyBjbGllbnQgdG8gc2V0dGluZ3MuXG4gICAgaW5pdFJlcXVlc3QuY2xpZW50ID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdFxuXG4gICAgLy8gMTAuIFVzZXIgYWdlbnRzIG1heSBzZXQgKGBBY2NlcHRgLCBgdGV4dC9ldmVudC1zdHJlYW1gKSBpbiByZXF1ZXN0J3MgaGVhZGVyIGxpc3QuXG4gICAgaW5pdFJlcXVlc3QuaGVhZGVyc0xpc3QgPSBbWydhY2NlcHQnLCB7IG5hbWU6ICdhY2NlcHQnLCB2YWx1ZTogJ3RleHQvZXZlbnQtc3RyZWFtJyB9XV1cblxuICAgIC8vIDExLiBTZXQgcmVxdWVzdCdzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICAgIGluaXRSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuXG4gICAgLy8gMTIuIFNldCByZXF1ZXN0J3MgaW5pdGlhdG9yIHR5cGUgdG8gXCJvdGhlclwiLlxuICAgIGluaXRSZXF1ZXN0LmluaXRpYXRvciA9ICdvdGhlcidcblxuICAgIGluaXRSZXF1ZXN0LnVybExpc3QgPSBbbmV3IFVSTCh0aGlzLiN1cmwpXVxuXG4gICAgLy8gMTMuIFNldCBldidzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzLiNyZXF1ZXN0ID0gbWFrZVJlcXVlc3QoaW5pdFJlcXVlc3QpXG5cbiAgICB0aGlzLiNjb25uZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGlzIEV2ZW50U291cmNlIG9iamVjdCdzIGNvbm5lY3Rpb24uIEl0IGNhbiBoYXZlIHRoZVxuICAgKiB2YWx1ZXMgZGVzY3JpYmVkIGJlbG93LlxuICAgKiBAcmV0dXJucyB7MHwxfDJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHJldHVybiB0aGlzLiNyZWFkeVN0YXRlXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgVVJMIHByb3ZpZGluZyB0aGUgZXZlbnQgc3RyZWFtLlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldCB1cmwgKCkge1xuICAgIHJldHVybiB0aGlzLiN1cmxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIEV2ZW50U291cmNlIG9iamVjdCB3YXNcbiAgICogaW5zdGFudGlhdGVkIHdpdGggQ09SUyBjcmVkZW50aWFscyBzZXQgKHRydWUpLCBvciBub3QgKGZhbHNlLCB0aGUgZGVmYXVsdCkuXG4gICAqL1xuICBnZXQgd2l0aENyZWRlbnRpYWxzICgpIHtcbiAgICByZXR1cm4gdGhpcy4jd2l0aENyZWRlbnRpYWxzXG4gIH1cblxuICAjY29ubmVjdCAoKSB7XG4gICAgaWYgKHRoaXMuI3JlYWR5U3RhdGUgPT09IENMT1NFRCkgcmV0dXJuXG5cbiAgICB0aGlzLiNyZWFkeVN0YXRlID0gQ09OTkVDVElOR1xuXG4gICAgY29uc3QgZmV0Y2hQYXJhbXMgPSB7XG4gICAgICByZXF1ZXN0OiB0aGlzLiNyZXF1ZXN0LFxuICAgICAgZGlzcGF0Y2hlcjogdGhpcy4jZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIC8vIDE0LiBMZXQgcHJvY2Vzc0V2ZW50U291cmNlRW5kT2ZCb2R5IGdpdmVuIHJlc3BvbnNlIHJlcyBiZSB0aGUgZm9sbG93aW5nIHN0ZXA6IGlmIHJlcyBpcyBub3QgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uLlxuICAgIGNvbnN0IHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keSA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGlzTmV0d29ya0Vycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy4jcmVjb25uZWN0KClcbiAgICB9XG5cbiAgICAvLyAxNS4gRmV0Y2ggcmVxdWVzdCwgd2l0aCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgc2V0IHRvIHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keS4uLlxuICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSA9IHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keVxuXG4gICAgLy8gYW5kIHByb2Nlc3NSZXNwb25zZSBzZXQgdG8gdGhlIGZvbGxvd2luZyBzdGVwcyBnaXZlbiByZXNwb25zZSByZXM6XG4gICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyAxLiBJZiByZXMgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG5cbiAgICAgIGlmIChpc05ldHdvcmtFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgLy8gMS4gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gZmFpbCB0aGUgY29ubmVjdGlvbiwgdGhlIHVzZXIgYWdlbnRcbiAgICAgICAgLy8gbXVzdCBxdWV1ZSBhIHRhc2sgd2hpY2gsIGlmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYVxuICAgICAgICAvLyB2YWx1ZSBvdGhlciB0aGFuIENMT1NFRCwgc2V0cyB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gQ0xPU0VEXG4gICAgICAgIC8vIGFuZCBmaXJlcyBhbiBldmVudCBuYW1lZCBlcnJvciBhdCB0aGUgRXZlbnRTb3VyY2Ugb2JqZWN0LiBPbmNlIHRoZVxuICAgICAgICAvLyB1c2VyIGFnZW50IGhhcyBmYWlsZWQgdGhlIGNvbm5lY3Rpb24sIGl0IGRvZXMgbm90IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gcmVjb25uZWN0LlxuICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiByZXMgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlZXN0YWJsaXNoIHRoZVxuICAgICAgICAgIC8vIGNvbm5lY3Rpb24sIHVubGVzcyB0aGUgdXNlciBhZ2VudCBrbm93cyB0aGF0IHRvIGJlIGZ1dGlsZSwgaW5cbiAgICAgICAgICAvLyB3aGljaCBjYXNlIHRoZSB1c2VyIGFnZW50IG1heSBmYWlsIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI3JlY29ubmVjdCgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiByZXMncyBzdGF0dXMgaXMgbm90IDIwMCwgb3IgaWYgcmVzJ3MgYENvbnRlbnQtVHlwZWBcbiAgICAgIC8vIGlzIG5vdCBgdGV4dC9ldmVudC1zdHJlYW1gLCB0aGVuIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnY29udGVudC10eXBlJywgdHJ1ZSlcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gY29udGVudFR5cGUgIT09IG51bGwgPyBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKSA6ICdmYWlsdXJlJ1xuICAgICAgY29uc3QgY29udGVudFR5cGVWYWxpZCA9IG1pbWVUeXBlICE9PSAnZmFpbHVyZScgJiYgbWltZVR5cGUuZXNzZW5jZSA9PT0gJ3RleHQvZXZlbnQtc3RyZWFtJ1xuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDIwMCB8fFxuICAgICAgICBjb250ZW50VHlwZVZhbGlkID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhbm5vdW5jZSB0aGUgY29ubmVjdGlvbiBhbmQgaW50ZXJwcmV0IHJlcydzIGJvZHlcbiAgICAgIC8vIGxpbmUgYnkgbGluZS5cblxuICAgICAgLy8gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gYW5ub3VuY2UgdGhlIGNvbm5lY3Rpb24sIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHF1ZXVlIGEgdGFzayB3aGljaCwgaWYgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIGlzIHNldCB0byBhXG4gICAgICAvLyB2YWx1ZSBvdGhlciB0aGFuIENMT1NFRCwgc2V0cyB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gT1BFTlxuICAgICAgLy8gYW5kIGZpcmVzIGFuIGV2ZW50IG5hbWVkIG9wZW4gYXQgdGhlIEV2ZW50U291cmNlIG9iamVjdC5cbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VydmVyLXNlbnQtZXZlbnRzLmh0bWwjc3NlLXByb2Nlc3NpbmctbW9kZWxcbiAgICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBPUEVOXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdvcGVuJykpXG5cbiAgICAgIC8vIElmIHJlZGlyZWN0ZWQgdG8gYSBkaWZmZXJlbnQgb3JpZ2luLCBzZXQgdGhlIG9yaWdpbiB0byB0aGUgbmV3IG9yaWdpbi5cbiAgICAgIHRoaXMuI3N0YXRlLm9yaWdpbiA9IHJlc3BvbnNlLnVybExpc3RbcmVzcG9uc2UudXJsTGlzdC5sZW5ndGggLSAxXS5vcmlnaW5cblxuICAgICAgY29uc3QgZXZlbnRTb3VyY2VTdHJlYW0gPSBuZXcgRXZlbnRTb3VyY2VTdHJlYW0oe1xuICAgICAgICBldmVudFNvdXJjZVNldHRpbmdzOiB0aGlzLiNzdGF0ZSxcbiAgICAgICAgcHVzaDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQoXG4gICAgICAgICAgICBldmVudC50eXBlLFxuICAgICAgICAgICAgZXZlbnQub3B0aW9uc1xuICAgICAgICAgICkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHBpcGVsaW5lKHJlc3BvbnNlLmJvZHkuc3RyZWFtLFxuICAgICAgICBldmVudFNvdXJjZVN0cmVhbSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXJyb3I/LmFib3J0ZWQgPT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuI2NvbnRyb2xsZXIgPSBmZXRjaGluZyhmZXRjaFBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI3NzZS1wcm9jZXNzaW5nLW1vZGVsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgI3JlY29ubmVjdCAoKSB7XG4gICAgLy8gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gcmVlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24sIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAvLyBydW4gdGhlIGZvbGxvd2luZyBzdGVwcy4gVGhlc2Ugc3RlcHMgYXJlIHJ1biBpbiBwYXJhbGxlbCwgbm90IGFzIHBhcnQgb2ZcbiAgICAvLyBhIHRhc2suIChUaGUgdGFza3MgdGhhdCBpdCBxdWV1ZXMsIG9mIGNvdXJzZSwgYXJlIHJ1biBsaWtlIG5vcm1hbCB0YXNrc1xuICAgIC8vIGFuZCBub3QgdGhlbXNlbHZlcyBpbiBwYXJhbGxlbC4pXG5cbiAgICAvLyAxLiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAgIDEuIElmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gQ0xPU0VELCBhYm9ydCB0aGUgdGFzay5cbiAgICBpZiAodGhpcy4jcmVhZHlTdGF0ZSA9PT0gQ0xPU0VEKSByZXR1cm5cblxuICAgIC8vICAgMi4gU2V0IHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBDT05ORUNUSU5HLlxuICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBDT05ORUNUSU5HXG5cbiAgICAvLyAgIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3IgYXQgdGhlIEV2ZW50U291cmNlIG9iamVjdC5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuXG4gICAgLy8gMi4gV2FpdCBhIGRlbGF5IGVxdWFsIHRvIHRoZSByZWNvbm5lY3Rpb24gdGltZSBvZiB0aGUgZXZlbnQgc291cmNlLlxuICAgIGF3YWl0IGRlbGF5KHRoaXMuI3N0YXRlLnJlY29ubmVjdGlvblRpbWUpXG5cbiAgICAvLyA1LiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAgIDEuIElmIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IHRvXG4gICAgLy8gICAgICBDT05ORUNUSU5HLCB0aGVuIHJldHVybi5cbiAgICBpZiAodGhpcy4jcmVhZHlTdGF0ZSAhPT0gQ09OTkVDVElORykgcmV0dXJuXG5cbiAgICAvLyAgIDIuIExldCByZXF1ZXN0IGJlIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyByZXF1ZXN0LlxuICAgIC8vICAgMy4gSWYgdGhlIEV2ZW50U291cmNlIG9iamVjdCdzIGxhc3QgZXZlbnQgSUQgc3RyaW5nIGlzIG5vdCB0aGUgZW1wdHlcbiAgICAvLyAgICAgIHN0cmluZywgdGhlbjpcbiAgICAvLyAgICAgIDEuIExldCBsYXN0RXZlbnRJRFZhbHVlIGJlIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyBsYXN0IGV2ZW50IElEXG4gICAgLy8gICAgICAgICBzdHJpbmcsIGVuY29kZWQgYXMgVVRGLTguXG4gICAgLy8gICAgICAyLiBTZXQgKGBMYXN0LUV2ZW50LUlEYCwgbGFzdEV2ZW50SURWYWx1ZSkgaW4gcmVxdWVzdCdzIGhlYWRlclxuICAgIC8vICAgICAgICAgbGlzdC5cbiAgICBpZiAodGhpcy4jc3RhdGUubGFzdEV2ZW50SWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNyZXF1ZXN0LmhlYWRlcnNMaXN0LnNldCgnbGFzdC1ldmVudC1pZCcsIHRoaXMuI3N0YXRlLmxhc3RFdmVudElkLCB0cnVlKVxuICAgIH1cblxuICAgIC8vICAgNC4gRmV0Y2ggcmVxdWVzdCBhbmQgcHJvY2VzcyB0aGUgcmVzcG9uc2Ugb2J0YWluZWQgaW4gdGhpcyBmYXNoaW9uLCBpZiBhbnksIGFzIGRlc2NyaWJlZCBlYXJsaWVyIGluIHRoaXMgc2VjdGlvbi5cbiAgICB0aGlzLiNjb25uZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24sIGlmIGFueSwgYW5kIHNldHMgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHRvXG4gICAqIENMT1NFRC5cbiAgICovXG4gIGNsb3NlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFdmVudFNvdXJjZSlcblxuICAgIGlmICh0aGlzLiNyZWFkeVN0YXRlID09PSBDTE9TRUQpIHJldHVyblxuICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBDTE9TRURcbiAgICB0aGlzLiNjb250cm9sbGVyLmFib3J0KClcbiAgICB0aGlzLiNyZXF1ZXN0ID0gbnVsbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGNvbnN0YW50c1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIENPTk5FQ1RJTkc6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBDT05ORUNUSU5HLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9LFxuICBPUEVOOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogT1BFTixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSxcbiAgQ0xPU0VEOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogQ0xPU0VELFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEV2ZW50U291cmNlLCBjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzKVxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRXZlbnRTb3VyY2UucHJvdG90eXBlLCBjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFdmVudFNvdXJjZS5wcm90b3R5cGUsIHtcbiAgY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25vcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdpdGhDcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXZlbnRTb3VyY2VJbml0RGljdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3dpdGhDcmVkZW50aWFscycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2Rpc3BhdGNoZXInLCAvLyB1bmRpY2kgb25seVxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFNvdXJjZSxcbiAgZGVmYXVsdFJlY29ubmVjdGlvblRpbWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9jbGllbnQnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlcicpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9wb29sJylcbmNvbnN0IEJhbGFuY2VkUG9vbCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvYmFsYW5jZWQtcG9vbCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvYWdlbnQnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQnKVxuY29uc3QgRW52SHR0cFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50JylcbmNvbnN0IFJldHJ5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL3JldHJ5LWFnZW50JylcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoJy4vbGliL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2xpYi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gZXJyb3JzXG5jb25zdCBhcGkgPSByZXF1aXJlKCcuL2xpYi9hcGknKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Nvbm5lY3QnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja0FnZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWFnZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLXBvb2wnKVxuY29uc3QgbW9ja0Vycm9ycyA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1lcnJvcnMnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciwgc2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi9saWIvZ2xvYmFsJylcbmNvbnN0IERlY29yYXRvckhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL2RlY29yYXRvci1oYW5kbGVyJylcbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvcmVkaXJlY3QtaGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QtaW50ZXJjZXB0b3InKVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5FbnZIdHRwUHJveHlBZ2VudCA9IEVudkh0dHBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUFnZW50ID0gUmV0cnlBZ2VudFxubW9kdWxlLmV4cG9ydHMuUmV0cnlIYW5kbGVyID0gUmV0cnlIYW5kbGVyXG5cbm1vZHVsZS5leHBvcnRzLkRlY29yYXRvckhhbmRsZXIgPSBEZWNvcmF0b3JIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5SZWRpcmVjdEhhbmRsZXIgPSBSZWRpcmVjdEhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5pbnRlcmNlcHRvcnMgPSB7XG4gIHJlZGlyZWN0OiByZXF1aXJlKCcuL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdCcpLFxuICByZXRyeTogcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmV0cnknKSxcbiAgZHVtcDogcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvZHVtcCcpLFxuICBkbnM6IHJlcXVpcmUoJy4vbGliL2ludGVyY2VwdG9yL2RucycpXG59XG5cbm1vZHVsZS5leHBvcnRzLmJ1aWxkQ29ubmVjdG9yID0gYnVpbGRDb25uZWN0b3Jcbm1vZHVsZS5leHBvcnRzLmVycm9ycyA9IGVycm9yc1xubW9kdWxlLmV4cG9ydHMudXRpbCA9IHtcbiAgcGFyc2VIZWFkZXJzOiB1dGlsLnBhcnNlSGVhZGVycyxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nOiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZ1xufVxuXG5mdW5jdGlvbiBtYWtlRGlzcGF0Y2hlciAoZm4pIHtcbiAgcmV0dXJuICh1cmwsIG9wdHMsIGhhbmRsZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGhhbmRsZXIgPSBvcHRzXG4gICAgICBvcHRzID0gbnVsbFxuICAgIH1cblxuICAgIGlmICghdXJsIHx8ICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdXJsICE9PSAnb2JqZWN0JyAmJiAhKHVybCBpbnN0YW5jZW9mIFVSTCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAhPSBudWxsICYmIHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICYmIG9wdHMucGF0aCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMucGF0aCcpXG4gICAgICB9XG5cbiAgICAgIGxldCBwYXRoID0gb3B0cy5wYXRoXG4gICAgICBpZiAoIW9wdHMucGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICAgIH1cblxuICAgICAgdXJsID0gbmV3IFVSTCh1dGlsLnBhcnNlT3JpZ2luKHVybCkub3JpZ2luICsgcGF0aClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIG9wdHMgPSB0eXBlb2YgdXJsID09PSAnb2JqZWN0JyA/IHVybCA6IHt9XG4gICAgICB9XG5cbiAgICAgIHVybCA9IHV0aWwucGFyc2VVUkwodXJsKVxuICAgIH1cblxuICAgIGNvbnN0IHsgYWdlbnQsIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgfSA9IG9wdHNcblxuICAgIGlmIChhZ2VudCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBvcHRzLmFnZW50LiBEaWQgeW91IG1lYW4gb3B0cy5jbGllbnQ/JylcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uY2FsbChkaXNwYXRjaGVyLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgcGF0aDogdXJsLnNlYXJjaCA/IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCA6IHVybC5wYXRobmFtZSxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgKG9wdHMuYm9keSA/ICdQVVQnIDogJ0dFVCcpXG4gICAgfSwgaGFuZGxlcilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxEaXNwYXRjaGVyID0gc2V0R2xvYmFsRGlzcGF0Y2hlclxubW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsRGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXJcblxuY29uc3QgZmV0Y2hJbXBsID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoJykuZmV0Y2hcbm1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKGluaXQsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZmV0Y2hJbXBsKGluaXQsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgJiYgdHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycilcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaC9oZWFkZXJzJykuSGVhZGVyc1xubW9kdWxlLmV4cG9ydHMuUmVzcG9uc2UgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdCA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaC9yZXF1ZXN0JykuUmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvZm9ybWRhdGEnKS5Gb3JtRGF0YVxubW9kdWxlLmV4cG9ydHMuRmlsZSA9IGdsb2JhbFRoaXMuRmlsZSA/PyByZXF1aXJlKCdub2RlOmJ1ZmZlcicpLkZpbGVcbm1vZHVsZS5leHBvcnRzLkZpbGVSZWFkZXIgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG5jb25zdCB7IHNldEdsb2JhbE9yaWdpbiwgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsJylcblxubW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW5cblxuY29uc3QgeyBDYWNoZVN0b3JhZ2UgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvY2FjaGUvc3ltYm9scycpXG5cbi8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4vLyBpbiBhbiBvbGRlciB2ZXJzaW9uIG9mIE5vZGUsIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgdXNlIHdpdGhvdXQgZmV0Y2guXG5tb2R1bGUuZXhwb3J0cy5jYWNoZXMgPSBuZXcgQ2FjaGVTdG9yYWdlKGtDb25zdHJ1Y3QpXG5cbmNvbnN0IHsgZGVsZXRlQ29va2llLCBnZXRDb29raWVzLCBnZXRTZXRDb29raWVzLCBzZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9jb29raWVzJylcblxubW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG5tb2R1bGUuZXhwb3J0cy5nZXRDb29raWVzID0gZ2V0Q29va2llc1xubW9kdWxlLmV4cG9ydHMuZ2V0U2V0Q29va2llcyA9IGdldFNldENvb2tpZXNcbm1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoL2RhdGEtdXJsJylcblxubW9kdWxlLmV4cG9ydHMucGFyc2VNSU1FVHlwZSA9IHBhcnNlTUlNRVR5cGVcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUFNaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZVxuXG5jb25zdCB7IENsb3NlRXZlbnQsIEVycm9yRXZlbnQsIE1lc3NhZ2VFdmVudCB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMnKVxubW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gcmVxdWlyZSgnLi9saWIvd2ViL3dlYnNvY2tldC93ZWJzb2NrZXQnKS5XZWJTb2NrZXRcbm1vZHVsZS5leHBvcnRzLkNsb3NlRXZlbnQgPSBDbG9zZUV2ZW50XG5tb2R1bGUuZXhwb3J0cy5FcnJvckV2ZW50ID0gRXJyb3JFdmVudFxubW9kdWxlLmV4cG9ydHMuTWVzc2FnZUV2ZW50ID0gTWVzc2FnZUV2ZW50XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcblxuY29uc3QgeyBFdmVudFNvdXJjZSB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlJylcblxubW9kdWxlLmV4cG9ydHMuRXZlbnRTb3VyY2UgPSBFdmVudFNvdXJjZVxuIiwgbnVsbCwgbnVsbCwgIi8qIVxuICogY29udGVudC10eXBlXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuY29uc3QgVEVYVF9SRUdFWFAgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSokLztcbmNvbnN0IFRPS0VOX1JFR0VYUCA9IC9eWyEjJCUmJyorLl5fYHx+MC05QS1aYS16LV0rJC87XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIGNoYXJzIHRoYXQgbXVzdCBiZSBxdW90ZWQtcGFpciBpbiBSRkMgOTExMCBzZWMgNS42LjRcbiAqL1xuY29uc3QgUVVPVEVfUkVHRVhQID0gL1tcXFxcXCJdL2c7XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHR5cGUgaW4gUkZDIDkxMTAgc2VjIDguMy4xXG4gKlxuICogbWVkaWEtdHlwZSA9IHR5cGUgXCIvXCIgc3VidHlwZVxuICogdHlwZSAgICAgICA9IHRva2VuXG4gKiBzdWJ0eXBlICAgID0gdG9rZW5cbiAqL1xuY29uc3QgVFlQRV9SRUdFWFAgPVxuICAvXlshIyQlJicqKy5eX2B8fjAtOUEtWmEtei1dK1xcL1shIyQlJicqKy5eX2B8fjAtOUEtWmEtei1dKyQvO1xuXG4vKipcbiAqIE51bGwgb2JqZWN0IHBlcmYgb3B0aW1pemF0aW9uLiBGYXN0ZXIgdGhhbiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgYW5kIGB7IF9fcHJvdG9fXzogbnVsbCB9YC5cbiAqL1xuY29uc3QgTnVsbE9iamVjdCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICBjb25zdCBDID0gZnVuY3Rpb24gKCkge307XG4gIEMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIEM7XG59KSgpIGFzIHVua25vd24gYXMgeyBuZXcgKCk6IGFueSB9O1xuXG4vKipcbiAqIFRoZSBjb250ZW50IHR5cGUgb2JqZWN0IGNvbnRhaW5zIGEgdHlwZSBzdHJpbmcgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFR5cGUge1xuICB0eXBlOiBzdHJpbmc7XG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogRm9ybWF0IGFuIG9iamVjdCBpbnRvIGEgYENvbnRlbnQtVHlwZWAgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KG9iajogUGFydGlhbDxDb250ZW50VHlwZT4pOiBzdHJpbmcge1xuICBjb25zdCB7IHR5cGUsIHBhcmFtZXRlcnMgfSA9IG9iajtcblxuICBpZiAoIXR5cGUgfHwgIVRZUEVfUkVHRVhQLnRlc3QodHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSB0eXBlO1xuXG4gIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKSkge1xuICAgICAgaWYgKCFUT0tFTl9SRUdFWFAudGVzdChwYXJhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgbmFtZTogJHtwYXJhbX1gKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IGA7ICR7cGFyYW19PSR7cXN0cmluZyhwYXJhbWV0ZXJzW3BhcmFtXSl9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHBhcnNpbmcgYSBgQ29udGVudC1UeXBlYCBoZWFkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VPcHRpb25zIHtcbiAgcGFyYW1ldGVycz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSBgQ29udGVudC1UeXBlYCBoZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShoZWFkZXI6IHN0cmluZywgb3B0aW9ucz86IFBhcnNlT3B0aW9ucyk6IENvbnRlbnRUeXBlIHtcbiAgY29uc3QgbGVuID0gaGVhZGVyLmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gc2tpcE9XUyhoZWFkZXIsIDAsIGxlbik7XG5cbiAgY29uc3QgdmFsdWVTdGFydCA9IGluZGV4O1xuICBpbmRleCA9IHNraXBWYWx1ZShoZWFkZXIsIGluZGV4LCBsZW4pO1xuICBjb25zdCB2YWx1ZUVuZCA9IHRyYWlsaW5nT1dTKGhlYWRlciwgdmFsdWVTdGFydCwgaW5kZXgpO1xuICBjb25zdCB0eXBlID0gaGVhZGVyLnNsaWNlKHZhbHVlU3RhcnQsIHZhbHVlRW5kKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwYXJhbWV0ZXJzID1cbiAgICBvcHRpb25zPy5wYXJhbWV0ZXJzID09PSBmYWxzZVxuICAgICAgPyBuZXcgTnVsbE9iamVjdCgpXG4gICAgICA6IHBhcnNlUGFyYW1ldGVycyhoZWFkZXIsIGluZGV4LCBsZW4pO1xuXG4gIHJldHVybiB7IHR5cGUsIHBhcmFtZXRlcnMgfTtcbn1cblxuY29uc3QgU1AgPSAzMjsgLy8gXCIgXCJcbmNvbnN0IEhUQUIgPSA5OyAvLyBcIlxcdFwiXG5jb25zdCBTRU1JID0gNTk7IC8vIFwiO1wiXG5jb25zdCBFUSA9IDYxOyAvLyBcIj1cIlxuY29uc3QgRFFVT1RFID0gMzQ7IC8vICdcIidcbmNvbnN0IEJTTEFTSCA9IDkyOyAvLyBcIlxcXFxcIlxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcGFyYW1ldGVycyBvZiBhIGBDb250ZW50LVR5cGVgIGhlYWRlciBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVycyhcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIGluZGV4OiBudW1iZXIsXG4gIGxlbjogbnVtYmVyLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTnVsbE9iamVjdCgpO1xuXG4gIHBhcmFtZXRlcjogd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgaW5kZXggPSBza2lwT1dTKGhlYWRlciwgaW5kZXggKyAxIC8qIFNraXAgb3ZlciA7ICovLCBsZW4pO1xuXG4gICAgY29uc3Qga2V5U3RhcnQgPSBpbmRleDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbikge1xuICAgICAgY29uc3QgY29kZSA9IGhlYWRlci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgIGlmIChjb2RlID09PSBTRU1JKSBjb250aW51ZSBwYXJhbWV0ZXI7XG5cbiAgICAgIGlmIChjb2RlID09PSBFUSkge1xuICAgICAgICBjb25zdCBrZXlFbmQgPSB0cmFpbGluZ09XUyhoZWFkZXIsIGtleVN0YXJ0LCBpbmRleCk7XG4gICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZShrZXlTdGFydCwga2V5RW5kKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGluZGV4ID0gc2tpcE9XUyhoZWFkZXIsIGluZGV4ICsgMSwgbGVuKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBsZW4gJiYgaGVhZGVyLmNoYXJDb2RlQXQoaW5kZXgpID09PSBEUVVPVEUpIHtcbiAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBoZWFkZXIuY2hhckNvZGVBdChpbmRleCsrKTtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBEUVVPVEUpIHtcbiAgICAgICAgICAgICAgaW5kZXggPSBza2lwVmFsdWUoaGVhZGVyLCBpbmRleCwgbGVuKTtcbiAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNba2V5XSA9PT0gdW5kZWZpbmVkKSBwYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSBCU0xBU0ggJiYgaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgICAgdmFsdWUgKz0gaGVhZGVyW2luZGV4KytdO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZSBwYXJhbWV0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIGluZGV4ID0gc2tpcFZhbHVlKGhlYWRlciwgaW5kZXgsIGxlbik7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcnNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVFbmQgPSB0cmFpbGluZ09XUyhoZWFkZXIsIHZhbHVlU3RhcnQsIGluZGV4KTtcbiAgICAgICAgICBwYXJhbWV0ZXJzW2tleV0gPSBoZWFkZXIuc2xpY2UodmFsdWVTdGFydCwgdmFsdWVFbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWUgcGFyYW1ldGVyO1xuICAgICAgfVxuXG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG4vKipcbiAqIFNraXAgb3ZlciBjaGFyYWN0ZXJzIHVudGlsIGEgc2VtaWNvbG9uLlxuICovXG5mdW5jdGlvbiBza2lwVmFsdWUoc3RyOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICBpZiAoY2hhciA9PT0gU0VNSSkgYnJlYWs7XG4gICAgaW5kZXgrKztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbi8qKlxuICogU2tpcCBvcHRpb25hbCB3aGl0ZXNwYWNlIChPV1MpIGluIGFuIEhUVFAgaGVhZGVyIHZhbHVlLlxuICpcbiAqIE9XUyBpcyBkZWZpbmVkIGluIFJGQyA5MTEwIHNlYyA1LjYuMyBhcyBTUCAoXCIgXCIpIG9yIEhUQUIgKFwiXFx0XCIpLlxuICovXG5mdW5jdGlvbiBza2lwT1dTKGhlYWRlcjogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBsZW46IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChpbmRleCA8IGxlbikge1xuICAgIGNvbnN0IGNoYXIgPSBoZWFkZXIuY2hhckNvZGVBdChpbmRleCk7XG4gICAgaWYgKGNoYXIgIT09IFNQICYmIGNoYXIgIT09IEhUQUIpIGJyZWFrO1xuICAgIGluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFRyaW0gb3B0aW9uYWwgd2hpdGVzcGFjZSAoT1dTKSBmcm9tIHRoZSBlbmQgb2YgYSBzdWJzdHJpbmcuXG4gKlxuICogT1dTIGlzIGRlZmluZWQgaW4gUkZDIDkxMTAgc2VjIDUuNi4zIGFzIFNQIChcIiBcIikgb3IgSFRBQiAoXCJcXHRcIikuXG4gKi9cbmZ1bmN0aW9uIHRyYWlsaW5nT1dTKGhlYWRlcjogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChlbmQgPiBzdGFydCkge1xuICAgIGNvbnN0IGNoYXIgPSBoZWFkZXIuY2hhckNvZGVBdChlbmQgLSAxKTtcbiAgICBpZiAoY2hhciAhPT0gU1AgJiYgY2hhciAhPT0gSFRBQikgYnJlYWs7XG4gICAgZW5kLS07XG4gIH1cbiAgcmV0dXJuIGVuZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBwYXJhbWV0ZXIgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHFzdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoVE9LRU5fUkVHRVhQLnRlc3Qoc3RyKSkgcmV0dXJuIHN0cjtcbiAgaWYgKFRFWFRfUkVHRVhQLnRlc3Qoc3RyKSkgcmV0dXJuIGBcIiR7c3RyLnJlcGxhY2UoUVVPVEVfUkVHRVhQLCBcIlxcXFwkJlwiKX1cImA7XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgdmFsdWU6ICR7c3RyfWApO1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBOb3RlOiB0aGlzIGlzIHRoZSBzZW12ZXIub3JnIHZlcnNpb24gb2YgdGhlIHNwZWMgdGhhdCBpdCBpbXBsZW1lbnRzXG4vLyBOb3QgbmVjZXNzYXJpbHkgdGhlIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGNvZGUuXG5jb25zdCBTRU1WRVJfU1BFQ19WRVJTSU9OID0gJzIuMC4wJ1xuXG5jb25zdCBNQVhfTEVOR1RIID0gMjU2XG5jb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDkwMDcxOTkyNTQ3NDA5OTFcblxuLy8gTWF4IHNhZmUgc2VnbWVudCBsZW5ndGggZm9yIGNvZXJjaW9uLlxuY29uc3QgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCA9IDE2XG5cbi8vIE1heCBzYWZlIGxlbmd0aCBmb3IgYSBidWlsZCBpZGVudGlmaWVyLiBUaGUgbWF4IGxlbmd0aCBtaW51cyA2IGNoYXJhY3RlcnMgZm9yXG4vLyB0aGUgc2hvcnRlc3QgdmVyc2lvbiB3aXRoIGEgYnVpbGQgMC4wLjArQlVJTEQuXG5jb25zdCBNQVhfU0FGRV9CVUlMRF9MRU5HVEggPSBNQVhfTEVOR1RIIC0gNlxuXG5jb25zdCBSRUxFQVNFX1RZUEVTID0gW1xuICAnbWFqb3InLFxuICAncHJlbWFqb3InLFxuICAnbWlub3InLFxuICAncHJlbWlub3InLFxuICAncGF0Y2gnLFxuICAncHJlcGF0Y2gnLFxuICAncHJlcmVsZWFzZScsXG5dXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RILFxuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9TQUZFX0lOVEVHRVIsXG4gIFJFTEVBU0VfVFlQRVMsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT04sXG4gIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFOiAwYjAwMSxcbiAgRkxBR19MT09TRTogMGIwMTAsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlYnVnID0gKFxuICB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgcHJvY2Vzcy5lbnYgJiZcbiAgcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJlxuICAvXFxic2VtdmVyXFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKVxuKSA/ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKCdTRU1WRVInLCAuLi5hcmdzKVxuICA6ICgpID0+IHt9XG5cbm1vZHVsZS5leHBvcnRzID0gZGVidWdcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9MRU5HVEgsXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnJylcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHt9XG5cbi8vIFRoZSBhY3R1YWwgcmVnZXhwcyBnbyBvbiBleHBvcnRzLnJlXG5jb25zdCByZSA9IGV4cG9ydHMucmUgPSBbXVxuY29uc3Qgc2FmZVJlID0gZXhwb3J0cy5zYWZlUmUgPSBbXVxuY29uc3Qgc3JjID0gZXhwb3J0cy5zcmMgPSBbXVxuY29uc3Qgc2FmZVNyYyA9IGV4cG9ydHMuc2FmZVNyYyA9IFtdXG5jb25zdCB0ID0gZXhwb3J0cy50ID0ge31cbmxldCBSID0gMFxuXG5jb25zdCBMRVRURVJEQVNITlVNQkVSID0gJ1thLXpBLVowLTktXSdcblxuLy8gUmVwbGFjZSBzb21lIGdyZWVkeSByZWdleCB0b2tlbnMgdG8gcHJldmVudCByZWdleCBkb3MgaXNzdWVzLiBUaGVzZSByZWdleCBhcmVcbi8vIHVzZWQgaW50ZXJuYWxseSB2aWEgdGhlIHNhZmVSZSBvYmplY3Qgc2luY2UgYWxsIGlucHV0cyBpbiB0aGlzIGxpYnJhcnkgZ2V0XG4vLyBub3JtYWxpemVkIGZpcnN0IHRvIHRyaW0gYW5kIGNvbGxhcHNlIGFsbCBleHRyYSB3aGl0ZXNwYWNlLiBUaGUgb3JpZ2luYWxcbi8vIHJlZ2V4ZXMgYXJlIGV4cG9ydGVkIGZvciB1c2VybGFuZCBjb25zdW1wdGlvbiBhbmQgbG93ZXIgbGV2ZWwgdXNhZ2UuIEFcbi8vIGZ1dHVyZSBicmVha2luZyBjaGFuZ2UgY291bGQgZXhwb3J0IHRoZSBzYWZlciByZWdleCBvbmx5IHdpdGggYSBub3RlIHRoYXRcbi8vIGFsbCBpbnB1dCBzaG91bGQgaGF2ZSBleHRyYSB3aGl0ZXNwYWNlIHJlbW92ZWQuXG5jb25zdCBzYWZlUmVnZXhSZXBsYWNlbWVudHMgPSBbXG4gIFsnXFxcXHMnLCAxXSxcbiAgWydcXFxcZCcsIE1BWF9MRU5HVEhdLFxuICBbTEVUVEVSREFTSE5VTUJFUiwgTUFYX1NBRkVfQlVJTERfTEVOR1RIXSxcbl1cblxuY29uc3QgbWFrZVNhZmVSZWdleCA9ICh2YWx1ZSkgPT4ge1xuICBmb3IgKGNvbnN0IFt0b2tlbiwgbWF4XSBvZiBzYWZlUmVnZXhSZXBsYWNlbWVudHMpIHtcbiAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAuc3BsaXQoYCR7dG9rZW59KmApLmpvaW4oYCR7dG9rZW59ezAsJHttYXh9fWApXG4gICAgICAuc3BsaXQoYCR7dG9rZW59K2ApLmpvaW4oYCR7dG9rZW59ezEsJHttYXh9fWApXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmNvbnN0IGNyZWF0ZVRva2VuID0gKG5hbWUsIHZhbHVlLCBpc0dsb2JhbCkgPT4ge1xuICBjb25zdCBzYWZlID0gbWFrZVNhZmVSZWdleCh2YWx1ZSlcbiAgY29uc3QgaW5kZXggPSBSKytcbiAgZGVidWcobmFtZSwgaW5kZXgsIHZhbHVlKVxuICB0W25hbWVdID0gaW5kZXhcbiAgc3JjW2luZGV4XSA9IHZhbHVlXG4gIHNhZmVTcmNbaW5kZXhdID0gc2FmZVxuICByZVtpbmRleF0gPSBuZXcgUmVnRXhwKHZhbHVlLCBpc0dsb2JhbCA/ICdnJyA6IHVuZGVmaW5lZClcbiAgc2FmZVJlW2luZGV4XSA9IG5ldyBSZWdFeHAoc2FmZSwgaXNHbG9iYWwgPyAnZycgOiB1bmRlZmluZWQpXG59XG5cbi8vIFRoZSBmb2xsb3dpbmcgUmVndWxhciBFeHByZXNzaW9ucyBjYW4gYmUgdXNlZCBmb3IgdG9rZW5pemluZyxcbi8vIHZhbGlkYXRpbmcsIGFuZCBwYXJzaW5nIFNlbVZlciB2ZXJzaW9uIHN0cmluZ3MuXG5cbi8vICMjIE51bWVyaWMgSWRlbnRpZmllclxuLy8gQSBzaW5nbGUgYDBgLCBvciBhIG5vbi16ZXJvIGRpZ2l0IGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBkaWdpdHMuXG5cbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUicsICcwfFsxLTldXFxcXGQqJylcbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUkxPT1NFJywgJ1xcXFxkKycpXG5cbi8vICMjIE5vbi1udW1lcmljIElkZW50aWZpZXJcbi8vIFplcm8gb3IgbW9yZSBkaWdpdHMsIGZvbGxvd2VkIGJ5IGEgbGV0dGVyIG9yIGh5cGhlbiwgYW5kIHRoZW4gemVybyBvclxuLy8gbW9yZSBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMuXG5cbmNyZWF0ZVRva2VuKCdOT05OVU1FUklDSURFTlRJRklFUicsIGBcXFxcZCpbYS16QS1aLV0ke0xFVFRFUkRBU0hOVU1CRVJ9KmApXG5cbi8vICMjIE1haW4gVmVyc2lvblxuLy8gVGhyZWUgZG90LXNlcGFyYXRlZCBudW1lcmljIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignTUFJTlZFUlNJT04nLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuY3JlYXRlVG9rZW4oJ01BSU5WRVJTSU9OTE9PU0UnLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb24gSWRlbnRpZmllclxuLy8gQSBudW1lcmljIGlkZW50aWZpZXIsIG9yIGEgbm9uLW51bWVyaWMgaWRlbnRpZmllci5cbi8vIE5vbi1udW1lcmljIGlkZW50aWZpZXJzIGluY2x1ZGUgbnVtZXJpYyBpZGVudGlmaWVycyBidXQgY2FuIGJlIGxvbmdlci5cbi8vIFRoZXJlZm9yZSBub24tbnVtZXJpYyBpZGVudGlmaWVycyBtdXN0IGdvIGZpcnN0LlxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUlERU5USUZJRVInLCBgKD86JHtzcmNbdC5OT05OVU1FUklDSURFTlRJRklFUl1cbn18JHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KWApXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFJywgYCg/OiR7c3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdXG59fCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb25cbi8vIEh5cGhlbiwgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgZG90LXNlcGFyYXRlZCBwcmUtcmVsZWFzZSB2ZXJzaW9uXG4vLyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0UnLCBgKD86LSgke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSXVxufSg/OlxcXFwuJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUl19KSopKWApXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFTE9PU0UnLCBgKD86LT8oJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXVxufSg/OlxcXFwuJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXX0pKikpYClcblxuLy8gIyMgQnVpbGQgTWV0YWRhdGEgSWRlbnRpZmllclxuLy8gQW55IGNvbWJpbmF0aW9uIG9mIGRpZ2l0cywgbGV0dGVycywgb3IgaHlwaGVucy5cblxuY3JlYXRlVG9rZW4oJ0JVSUxESURFTlRJRklFUicsIGAke0xFVFRFUkRBU0hOVU1CRVJ9K2ApXG5cbi8vICMjIEJ1aWxkIE1ldGFkYXRhXG4vLyBQbHVzIHNpZ24sIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHBlcmlvZC1zZXBhcmF0ZWQgYnVpbGQgbWV0YWRhdGFcbi8vIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignQlVJTEQnLCBgKD86XFxcXCsoJHtzcmNbdC5CVUlMRElERU5USUZJRVJdXG59KD86XFxcXC4ke3NyY1t0LkJVSUxESURFTlRJRklFUl19KSopKWApXG5cbi8vICMjIEZ1bGwgVmVyc2lvbiBTdHJpbmdcbi8vIEEgbWFpbiB2ZXJzaW9uLCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiBhbmRcbi8vIGJ1aWxkIG1ldGFkYXRhLlxuXG4vLyBOb3RlIHRoYXQgdGhlIG9ubHkgbWFqb3IsIG1pbm9yLCBwYXRjaCwgYW5kIHByZS1yZWxlYXNlIHNlY3Rpb25zIG9mXG4vLyB0aGUgdmVyc2lvbiBzdHJpbmcgYXJlIGNhcHR1cmluZyBncm91cHMuICBUaGUgYnVpbGQgbWV0YWRhdGEgaXMgbm90IGFcbi8vIGNhcHR1cmluZyBncm91cCwgYmVjYXVzZSBpdCBzaG91bGQgbm90IGV2ZXIgYmUgdXNlZCBpbiB2ZXJzaW9uXG4vLyBjb21wYXJpc29uLlxuXG5jcmVhdGVUb2tlbignRlVMTFBMQUlOJywgYHY/JHtzcmNbdC5NQUlOVkVSU0lPTl1cbn0ke3NyY1t0LlBSRVJFTEVBU0VdfT8ke1xuICBzcmNbdC5CVUlMRF19P2ApXG5cbmNyZWF0ZVRva2VuKCdGVUxMJywgYF4ke3NyY1t0LkZVTExQTEFJTl19JGApXG5cbi8vIGxpa2UgZnVsbCwgYnV0IGFsbG93cyB2MS4yLjMgYW5kID0xLjIuMywgd2hpY2ggcGVvcGxlIGRvIHNvbWV0aW1lcy5cbi8vIGFsc28sIDEuMC4wYWxwaGExIChwcmVyZWxlYXNlIHdpdGhvdXQgdGhlIGh5cGhlbikgd2hpY2ggaXMgcHJldHR5XG4vLyBjb21tb24gaW4gdGhlIG5wbSByZWdpc3RyeS5cbmNyZWF0ZVRva2VuKCdMT09TRVBMQUlOJywgYFt2PVxcXFxzXSoke3NyY1t0Lk1BSU5WRVJTSU9OTE9PU0VdXG59JHtzcmNbdC5QUkVSRUxFQVNFTE9PU0VdfT8ke1xuICBzcmNbdC5CVUlMRF19P2ApXG5cbmNyZWF0ZVRva2VuKCdMT09TRScsIGBeJHtzcmNbdC5MT09TRVBMQUlOXX0kYClcblxuY3JlYXRlVG9rZW4oJ0dUTFQnLCAnKCg/Ojx8Pik/PT8pJylcblxuLy8gU29tZXRoaW5nIGxpa2UgXCIyLipcIiBvciBcIjEuMi54XCIuXG4vLyBOb3RlIHRoYXQgXCJ4LnhcIiBpcyBhIHZhbGlkIHhSYW5nZSBpZGVudGlmaWVyLCBtZWFuaW5nIFwiYW55IHZlcnNpb25cIlxuLy8gT25seSB0aGUgZmlyc3QgaXRlbSBpcyBzdHJpY3RseSByZXF1aXJlZC5cbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSTE9PU0UnLCBgJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX18eHxYfFxcXFwqYClcbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfXx4fFh8XFxcXCpgKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU4nLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/JHtcbiAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU5MT09TRScsIGBbdj1cXFxcc10qKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKT8pP2ApXG5cbmNyZWF0ZVRva2VuKCdYUkFOR0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignWFJBTkdFTE9PU0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ29lcmNpb24uXG4vLyBFeHRyYWN0IGFueXRoaW5nIHRoYXQgY291bGQgY29uY2VpdmFibHkgYmUgYSBwYXJ0IG9mIGEgdmFsaWQgc2VtdmVyXG5jcmVhdGVUb2tlbignQ09FUkNFUExBSU4nLCBgJHsnKF58W15cXFxcZF0pJyArXG4gICAgICAgICAgICAgICcoXFxcXGR7MSwnfSR7TUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSH19KWAgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2AgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2ApXG5jcmVhdGVUb2tlbignQ09FUkNFJywgYCR7c3JjW3QuQ09FUkNFUExBSU5dfSg/OiR8W15cXFxcZF0pYClcbmNyZWF0ZVRva2VuKCdDT0VSQ0VGVUxMJywgc3JjW3QuQ09FUkNFUExBSU5dICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRV19KT9gICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuQlVJTERdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMJywgc3JjW3QuQ09FUkNFXSwgdHJ1ZSlcbmNyZWF0ZVRva2VuKCdDT0VSQ0VSVExGVUxMJywgc3JjW3QuQ09FUkNFRlVMTF0sIHRydWUpXG5cbi8vIFRpbGRlIHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJyZWFzb25hYmx5IGF0IG9yIGdyZWF0ZXIgdGhhblwiXG5jcmVhdGVUb2tlbignTE9ORVRJTERFJywgJyg/On4+PyknKVxuXG5jcmVhdGVUb2tlbignVElMREVUUklNJywgYChcXFxccyopJHtzcmNbdC5MT05FVElMREVdfVxcXFxzK2AsIHRydWUpXG5leHBvcnRzLnRpbGRlVHJpbVJlcGxhY2UgPSAnJDF+J1xuXG5jcmVhdGVUb2tlbignVElMREUnLCBgXiR7c3JjW3QuTE9ORVRJTERFXX0ke3NyY1t0LlhSQU5HRVBMQUlOXX0kYClcbmNyZWF0ZVRva2VuKCdUSUxERUxPT1NFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ2FyZXQgcmFuZ2VzLlxuLy8gTWVhbmluZyBpcyBcImF0IGxlYXN0IGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoXCJcbmNyZWF0ZVRva2VuKCdMT05FQ0FSRVQnLCAnKD86XFxcXF4pJylcblxuY3JlYXRlVG9rZW4oJ0NBUkVUVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORUNBUkVUXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy5jYXJldFRyaW1SZXBsYWNlID0gJyQxXidcblxuY3JlYXRlVG9rZW4oJ0NBUkVUJywgYF4ke3NyY1t0LkxPTkVDQVJFVF19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignQ0FSRVRMT09TRScsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIEEgc2ltcGxlIGd0L2x0L2VxIHRoaW5nLCBvciBqdXN0IFwiXCIgdG8gaW5kaWNhdGUgXCJhbnkgdmVyc2lvblwiXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUkxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfSkkfF4kYClcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkZVTExQTEFJTl19KSR8XiRgKVxuXG4vLyBBbiBleHByZXNzaW9uIHRvIHN0cmlwIGFueSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIGd0bHQgYW5kIHRoZSB0aGluZ1xuLy8gaXQgbW9kaWZpZXMsIHNvIHRoYXQgYD4gMS4yLjNgID09PiBgPjEuMi4zYFxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JUUklNJywgYChcXFxccyopJHtzcmNbdC5HVExUXVxufVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfXwke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCwgdHJ1ZSlcbmV4cG9ydHMuY29tcGFyYXRvclRyaW1SZXBsYWNlID0gJyQxJDIkMydcblxuLy8gU29tZXRoaW5nIGxpa2UgYDEuMi4zIC0gMS4yLjRgXG4vLyBOb3RlIHRoYXQgdGhlc2UgYWxsIHVzZSB0aGUgbG9vc2UgZm9ybSwgYmVjYXVzZSB0aGV5J2xsIGJlXG4vLyBjaGVja2VkIGFnYWluc3QgZWl0aGVyIHRoZSBzdHJpY3Qgb3IgbG9vc2UgY29tcGFyYXRvciBmb3JtXG4vLyBsYXRlci5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRScsIGBeXFxcXHMqKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5YUkFOR0VQTEFJTl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuY3JlYXRlVG9rZW4oJ0hZUEhFTlJBTkdFTE9PU0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccystXFxcXHMrYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFxcXFxzKiRgKVxuXG4vLyBTdGFyIHJhbmdlcyBiYXNpY2FsbHkganVzdCBhbGxvdyBhbnl0aGluZyBhdCBhbGwuXG5jcmVhdGVUb2tlbignU1RBUicsICcoPHw+KT89P1xcXFxzKlxcXFwqJylcbi8vID49MC4wLjAgaXMgbGlrZSBhIHN0YXJcbmNyZWF0ZVRva2VuKCdHVEUwJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjBcXFxccyokJylcbmNyZWF0ZVRva2VuKCdHVEUwUFJFJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjAtMFxcXFxzKiQnKVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBwYXJzZSBvdXQganVzdCB0aGUgb3B0aW9ucyB3ZSBjYXJlIGFib3V0XG5jb25zdCBsb29zZU9wdGlvbiA9IE9iamVjdC5mcmVlemUoeyBsb29zZTogdHJ1ZSB9KVxuY29uc3QgZW1wdHlPcHRzID0gT2JqZWN0LmZyZWV6ZSh7IH0pXG5jb25zdCBwYXJzZU9wdGlvbnMgPSBvcHRpb25zID0+IHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuIGVtcHR5T3B0c1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBsb29zZU9wdGlvblxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VPcHRpb25zXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG51bWVyaWMgPSAvXlswLTldKyQvXG5jb25zdCBjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4ge1xuICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhID09PSBiID8gMCA6IGEgPCBiID8gLTEgOiAxXG4gIH1cblxuICBjb25zdCBhbnVtID0gbnVtZXJpYy50ZXN0KGEpXG4gIGNvbnN0IGJudW0gPSBudW1lcmljLnRlc3QoYilcblxuICBpZiAoYW51bSAmJiBibnVtKSB7XG4gICAgYSA9ICthXG4gICAgYiA9ICtiXG4gIH1cblxuICByZXR1cm4gYSA9PT0gYiA/IDBcbiAgICA6IChhbnVtICYmICFibnVtKSA/IC0xXG4gICAgOiAoYm51bSAmJiAhYW51bSkgPyAxXG4gICAgOiBhIDwgYiA/IC0xXG4gICAgOiAxXG59XG5cbmNvbnN0IHJjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4gY29tcGFyZUlkZW50aWZpZXJzKGIsIGEpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgeyBNQVhfTEVOR1RILCBNQVhfU0FGRV9JTlRFR0VSIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBjb21wYXJlSWRlbnRpZmllcnMgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2lkZW50aWZpZXJzJylcblxuY29uc3QgaXNQcmVyZWxlYXNlSWRlbnRpZmllciA9IChwcmVyZWxlYXNlLCBpZGVudGlmaWVyKSA9PiB7XG4gIGNvbnN0IGlkZW50aWZpZXJzID0gaWRlbnRpZmllci5zcGxpdCgnLicpXG4gIGlmIChpZGVudGlmaWVycy5sZW5ndGggPiBwcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjb21wYXJlSWRlbnRpZmllcnMocHJlcmVsZWFzZVtpXSwgaWRlbnRpZmllcnNbaV0pICE9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5jbGFzcyBTZW1WZXIge1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgICBpZiAodmVyc2lvbi5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlICYmXG4gICAgICAgIHZlcnNpb24uaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgICByZXR1cm4gdmVyc2lvblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24udmVyc2lvblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHZlcnNpb24uIE11c3QgYmUgYSBzdHJpbmcuIEdvdCB0eXBlIFwiJHt0eXBlb2YgdmVyc2lvbn1cIi5gKVxuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uLmxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGB2ZXJzaW9uIGlzIGxvbmdlciB0aGFuICR7TUFYX0xFTkdUSH0gY2hhcmFjdGVyc2BcbiAgICAgIClcbiAgICB9XG5cbiAgICBkZWJ1ZygnU2VtVmVyJywgdmVyc2lvbiwgb3B0aW9ucylcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5sb29zZSA9ICEhb3B0aW9ucy5sb29zZVxuICAgIC8vIHRoaXMgaXNuJ3QgYWN0dWFsbHkgcmVsZXZhbnQgZm9yIHZlcnNpb25zLCBidXQga2VlcCBpdCBzbyB0aGF0IHdlXG4gICAgLy8gZG9uJ3QgcnVuIGludG8gdHJvdWJsZSBwYXNzaW5nIHRoaXMub3B0aW9ucyBhcm91bmQuXG4gICAgdGhpcy5pbmNsdWRlUHJlcmVsZWFzZSA9ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuXG4gICAgY29uc3QgbSA9IHZlcnNpb24udHJpbSgpLm1hdGNoKG9wdGlvbnMubG9vc2UgPyByZVt0LkxPT1NFXSA6IHJlW3QuRlVMTF0pXG5cbiAgICBpZiAoIW0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgVmVyc2lvbjogJHt2ZXJzaW9ufWApXG4gICAgfVxuXG4gICAgdGhpcy5yYXcgPSB2ZXJzaW9uXG5cbiAgICAvLyB0aGVzZSBhcmUgYWN0dWFsbHkgbnVtYmVyc1xuICAgIHRoaXMubWFqb3IgPSArbVsxXVxuICAgIHRoaXMubWlub3IgPSArbVsyXVxuICAgIHRoaXMucGF0Y2ggPSArbVszXVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMubWFqb3IgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG1ham9yIHZlcnNpb24nKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1pbm9yID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLm1pbm9yIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBtaW5vciB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXRjaCA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5wYXRjaCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcGF0Y2ggdmVyc2lvbicpXG4gICAgfVxuXG4gICAgLy8gbnVtYmVyaWZ5IGFueSBwcmVyZWxlYXNlIG51bWVyaWMgaWRzXG4gICAgaWYgKCFtWzRdKSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBtWzRdLnNwbGl0KCcuJykubWFwKChpZCkgPT4ge1xuICAgICAgICBpZiAoL15bMC05XSskLy50ZXN0KGlkKSkge1xuICAgICAgICAgIGNvbnN0IG51bSA9ICtpZFxuICAgICAgICAgIGlmIChudW0gPj0gMCAmJiBudW0gPCBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkID0gbVs1XSA/IG1bNV0uc3BsaXQoJy4nKSA6IFtdXG4gICAgdGhpcy5mb3JtYXQoKVxuICB9XG5cbiAgZm9ybWF0ICgpIHtcbiAgICB0aGlzLnZlcnNpb24gPSBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5wYXRjaH1gXG4gICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbiArPSBgLSR7dGhpcy5wcmVyZWxlYXNlLmpvaW4oJy4nKX1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZlcnNpb25cbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uXG4gIH1cblxuICBjb21wYXJlIChvdGhlcikge1xuICAgIGRlYnVnKCdTZW1WZXIuY29tcGFyZScsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zLCBvdGhlcilcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3RoZXIgPT09ICdzdHJpbmcnICYmIG90aGVyID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZU1haW4ob3RoZXIpIHx8IHRoaXMuY29tcGFyZVByZShvdGhlcilcbiAgfVxuXG4gIGNvbXBhcmVNYWluIChvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPCBvdGhlci5tYWpvcikge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGlmICh0aGlzLm1ham9yID4gb3RoZXIubWFqb3IpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICAgIGlmICh0aGlzLm1pbm9yIDwgb3RoZXIubWlub3IpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICBpZiAodGhpcy5taW5vciA+IG90aGVyLm1pbm9yKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICBpZiAodGhpcy5wYXRjaCA8IG90aGVyLnBhdGNoKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgaWYgKHRoaXMucGF0Y2ggPiBvdGhlci5wYXRjaCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGNvbXBhcmVQcmUgKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBOT1QgaGF2aW5nIGEgcHJlcmVsZWFzZSBpcyA+IGhhdmluZyBvbmVcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGggJiYgb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMucHJlcmVsZWFzZVtpXVxuICAgICAgY29uc3QgYiA9IG90aGVyLnByZXJlbGVhc2VbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIGNvbXBhcmVCdWlsZCAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGxldCBpID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmJ1aWxkW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIuYnVpbGRbaV1cbiAgICAgIGRlYnVnKCdidWlsZCBjb21wYXJlJywgaSwgYSwgYilcbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQgJiYgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9IGVsc2UgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfSBlbHNlIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlSWRlbnRpZmllcnMoYSwgYilcbiAgICAgIH1cbiAgICB9IHdoaWxlICgrK2kpXG4gIH1cblxuICAvLyBwcmVtaW5vciB3aWxsIGJ1bXAgdGhlIHZlcnNpb24gdXAgdG8gdGhlIG5leHQgbWlub3IgcmVsZWFzZSwgYW5kIGltbWVkaWF0ZWx5XG4gIC8vIGRvd24gdG8gcHJlLXJlbGVhc2UuIHByZW1ham9yIGFuZCBwcmVwYXRjaCB3b3JrIHRoZSBzYW1lIHdheS5cbiAgaW5jIChyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkge1xuICAgIGlmIChyZWxlYXNlLnN0YXJ0c1dpdGgoJ3ByZScpKSB7XG4gICAgICBpZiAoIWlkZW50aWZpZXIgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgaXMgZW1wdHknKVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgYW4gaW52YWxpZCBzZW12ZXIgcmVzdWx0c1xuICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBgLSR7aWRlbnRpZmllcn1gLm1hdGNoKHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuUFJFUkVMRUFTRUxPT1NFXSA6IHJlW3QuUFJFUkVMRUFTRV0pXG4gICAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gIT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaWRlbnRpZmllcjogJHtpZGVudGlmaWVyfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlbGVhc2UpIHtcbiAgICAgIGNhc2UgJ3ByZW1ham9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZW1pbm9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZXBhdGNoJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbHJlYWR5IGEgcHJlcmVsZWFzZSwgaXQgd2lsbCBidW1wIHRvIHRoZSBuZXh0IHZlcnNpb25cbiAgICAgICAgLy8gZHJvcCBhbnkgcHJlcmVsZWFzZXMgdGhhdCBtaWdodCBhbHJlYWR5IGV4aXN0LCBzaW5jZSB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gcmVsZXZhbnQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBhIG5vbi1wcmVyZWxlYXNlIHZlcnNpb24sIHRoaXMgYWN0cyB0aGUgc2FtZSBhc1xuICAgICAgLy8gcHJlcGF0Y2guXG4gICAgICBjYXNlICdwcmVyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmluYygncGF0Y2gnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZlcnNpb24gJHt0aGlzLnJhd30gaXMgbm90IGEgcHJlcmVsZWFzZWApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbWFqb3InOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlLW1ham9yIHZlcnNpb24sIGJ1bXAgdXAgdG8gdGhlIHNhbWUgbWFqb3IgdmVyc2lvbi5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGluY3JlbWVudCBtYWpvci5cbiAgICAgICAgLy8gMS4wLjAtNSBidW1wcyB0byAxLjAuMFxuICAgICAgICAvLyAxLjEuMCBidW1wcyB0byAyLjAuMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5taW5vciAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucGF0Y2ggIT09IDAgfHxcbiAgICAgICAgICB0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdtaW5vcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWlub3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtaW5vciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1pbm9yLlxuICAgICAgICAvLyAxLjIuMC01IGJ1bXBzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4xIGJ1bXBzIHRvIDEuMy4wXG4gICAgICAgIGlmICh0aGlzLnBhdGNoICE9PSAwIHx8IHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLm1pbm9yKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdGNoID0gMFxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncGF0Y2gnOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIHByZS1yZWxlYXNlIHZlcnNpb24sIGl0IHdpbGwgaW5jcmVtZW50IHRoZSBwYXRjaC5cbiAgICAgICAgLy8gSWYgaXQgaXMgYSBwcmUtcmVsZWFzZSBpdCB3aWxsIGJ1bXAgdXAgdG8gdGhlIHNhbWUgcGF0Y2ggdmVyc2lvbi5cbiAgICAgICAgLy8gMS4yLjAtNSBwYXRjaGVzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4wIHBhdGNoZXMgdG8gMS4yLjFcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnBhdGNoKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgLy8gVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdXNlZCBwdWJsaWNseS5cbiAgICAgIC8vIDEuMC4wICdwcmUnIHdvdWxkIGJlY29tZSAxLjAuMC0wIHdoaWNoIGlzIHRoZSB3cm9uZyBkaXJlY3Rpb24uXG4gICAgICBjYXNlICdwcmUnOiB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBOdW1iZXIoaWRlbnRpZmllckJhc2UpID8gMSA6IDBcblxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtiYXNlXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBpID0gdGhpcy5wcmVyZWxlYXNlLmxlbmd0aFxuICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXJlbGVhc2VbaV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZVtpXSsrXG4gICAgICAgICAgICAgIGkgPSAtMlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIGRpZG4ndCBpbmNyZW1lbnQgYW55dGhpbmdcbiAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09PSB0aGlzLnByZXJlbGVhc2Uuam9pbignLicpICYmIGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGFscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5wdXNoKGJhc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgLy8gMS4yLjAtYmV0YS4xIGJ1bXBzIHRvIDEuMi4wLWJldGEuMixcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLmZvb2JseiBvciAxLjIuMC1iZXRhIGJ1bXBzIHRvIDEuMi4wLWJldGEuMFxuICAgICAgICAgIGxldCBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXIsIGJhc2VdXG4gICAgICAgICAgaWYgKGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcHJlcmVsZWFzZSA9IFtpZGVudGlmaWVyXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNQcmVyZWxlYXNlSWRlbnRpZmllcih0aGlzLnByZXJlbGVhc2UsIGlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVyZWxlYXNlQmFzZSA9IHRoaXMucHJlcmVsZWFzZVtpZGVudGlmaWVyLnNwbGl0KCcuJykubGVuZ3RoXVxuICAgICAgICAgICAgaWYgKGlzTmFOKHByZXJlbGVhc2VCYXNlKSkge1xuICAgICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IHByZXJlbGVhc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6ICR7cmVsZWFzZX1gKVxuICAgIH1cbiAgICB0aGlzLnJhdyA9IHRoaXMuZm9ybWF0KClcbiAgICBpZiAodGhpcy5idWlsZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmF3ICs9IGArJHt0aGlzLmJ1aWxkLmpvaW4oJy4nKX1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZW1WZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSAodmVyc2lvbiwgb3B0aW9ucywgdGhyb3dFcnJvcnMgPSBmYWxzZSkgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmICghdGhyb3dFcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHRocm93IGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgdmFsaWQgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB2ID0gcGFyc2UodmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIHYgPyB2LnZlcnNpb24gOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHZhbGlkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCBjbGVhbiA9ICh2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHMgPSBwYXJzZSh2ZXJzaW9uLnRyaW0oKS5yZXBsYWNlKC9eWz12XSsvLCAnJyksIG9wdGlvbnMpXG4gIHJldHVybiBzID8gcy52ZXJzaW9uIDogbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBjbGVhblxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IGluYyA9ICh2ZXJzaW9uLCByZWxlYXNlLCBvcHRpb25zLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkgPT4ge1xuICBpZiAodHlwZW9mIChvcHRpb25zKSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZGVudGlmaWVyQmFzZSA9IGlkZW50aWZpZXJcbiAgICBpZGVudGlmaWVyID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWRcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBTZW1WZXIoXG4gICAgICB2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyID8gdmVyc2lvbi52ZXJzaW9uIDogdmVyc2lvbixcbiAgICAgIG9wdGlvbnNcbiAgICApLmluYyhyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkudmVyc2lvblxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gaW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZS5qcycpXG5cbmNvbnN0IGRpZmYgPSAodmVyc2lvbjEsIHZlcnNpb24yKSA9PiB7XG4gIGNvbnN0IHYxID0gcGFyc2UodmVyc2lvbjEsIG51bGwsIHRydWUpXG4gIGNvbnN0IHYyID0gcGFyc2UodmVyc2lvbjIsIG51bGwsIHRydWUpXG4gIGNvbnN0IGNvbXBhcmlzb24gPSB2MS5jb21wYXJlKHYyKVxuXG4gIGlmIChjb21wYXJpc29uID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHYxSGlnaGVyID0gY29tcGFyaXNvbiA+IDBcbiAgY29uc3QgaGlnaFZlcnNpb24gPSB2MUhpZ2hlciA/IHYxIDogdjJcbiAgY29uc3QgbG93VmVyc2lvbiA9IHYxSGlnaGVyID8gdjIgOiB2MVxuICBjb25zdCBoaWdoSGFzUHJlID0gISFoaWdoVmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aFxuICBjb25zdCBsb3dIYXNQcmUgPSAhIWxvd1ZlcnNpb24ucHJlcmVsZWFzZS5sZW5ndGhcblxuICBpZiAobG93SGFzUHJlICYmICFoaWdoSGFzUHJlKSB7XG4gICAgLy8gR29pbmcgZnJvbSBwcmVyZWxlYXNlIC0+IG5vIHByZXJlbGVhc2UgcmVxdWlyZXMgc29tZSBzcGVjaWFsIGNhc2luZ1xuXG4gICAgLy8gSWYgdGhlIGxvdyB2ZXJzaW9uIGhhcyBvbmx5IGEgbWFqb3IsIHRoZW4gaXQgd2lsbCBhbHdheXMgYmUgYSBtYWpvclxuICAgIC8vIFNvbWUgZXhhbXBsZXM6XG4gICAgLy8gMS4wLjAtMSAtPiAxLjAuMFxuICAgIC8vIDEuMC4wLTEgLT4gMS4xLjFcbiAgICAvLyAxLjAuMC0xIC0+IDIuMC4wXG4gICAgaWYgKCFsb3dWZXJzaW9uLnBhdGNoICYmICFsb3dWZXJzaW9uLm1pbm9yKSB7XG4gICAgICByZXR1cm4gJ21ham9yJ1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBtYWluIHBhcnQgaGFzIG5vIGRpZmZlcmVuY2VcbiAgICBpZiAobG93VmVyc2lvbi5jb21wYXJlTWFpbihoaWdoVmVyc2lvbikgPT09IDApIHtcbiAgICAgIGlmIChsb3dWZXJzaW9uLm1pbm9yICYmICFsb3dWZXJzaW9uLnBhdGNoKSB7XG4gICAgICAgIHJldHVybiAnbWlub3InXG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BhdGNoJ1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCB0aGUgYHByZWAgcHJlZml4IGlmIHdlIGFyZSBnb2luZyB0byBhIHByZXJlbGVhc2UgdmVyc2lvblxuICBjb25zdCBwcmVmaXggPSBoaWdoSGFzUHJlID8gJ3ByZScgOiAnJ1xuXG4gIGlmICh2MS5tYWpvciAhPT0gdjIubWFqb3IpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ21ham9yJ1xuICB9XG5cbiAgaWYgKHYxLm1pbm9yICE9PSB2Mi5taW5vcikge1xuICAgIHJldHVybiBwcmVmaXggKyAnbWlub3InXG4gIH1cblxuICBpZiAodjEucGF0Y2ggIT09IHYyLnBhdGNoKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdwYXRjaCdcbiAgfVxuXG4gIC8vIGhpZ2ggYW5kIGxvdyBhcmUgcHJlcmVsZWFzZXNcbiAgcmV0dXJuICdwcmVyZWxlYXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgbWFqb3IgPSAoYSwgbG9vc2UpID0+IG5ldyBTZW1WZXIoYSwgbG9vc2UpLm1ham9yXG5tb2R1bGUuZXhwb3J0cyA9IG1ham9yXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IG1pbm9yID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5taW5vclxubW9kdWxlLmV4cG9ydHMgPSBtaW5vclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBwYXRjaCA9IChhLCBsb29zZSkgPT4gbmV3IFNlbVZlcihhLCBsb29zZSkucGF0Y2hcbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHByZXJlbGVhc2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZSh2ZXJzaW9uLCBvcHRpb25zKVxuICByZXR1cm4gKHBhcnNlZCAmJiBwYXJzZWQucHJlcmVsZWFzZS5sZW5ndGgpID8gcGFyc2VkLnByZXJlbGVhc2UgOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHByZXJlbGVhc2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT5cbiAgbmV3IFNlbVZlcihhLCBsb29zZSkuY29tcGFyZShuZXcgU2VtVmVyKGIsIGxvb3NlKSlcblxubW9kdWxlLmV4cG9ydHMgPSBjb21wYXJlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgcmNvbXBhcmUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYiwgYSwgbG9vc2UpXG5tb2R1bGUuZXhwb3J0cyA9IHJjb21wYXJlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgY29tcGFyZUxvb3NlID0gKGEsIGIpID0+IGNvbXBhcmUoYSwgYiwgdHJ1ZSlcbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUxvb3NlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IGNvbXBhcmVCdWlsZCA9IChhLCBiLCBsb29zZSkgPT4ge1xuICBjb25zdCB2ZXJzaW9uQSA9IG5ldyBTZW1WZXIoYSwgbG9vc2UpXG4gIGNvbnN0IHZlcnNpb25CID0gbmV3IFNlbVZlcihiLCBsb29zZSlcbiAgcmV0dXJuIHZlcnNpb25BLmNvbXBhcmUodmVyc2lvbkIpIHx8IHZlcnNpb25BLmNvbXBhcmVCdWlsZCh2ZXJzaW9uQilcbn1cbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUJ1aWxkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmVCdWlsZCA9IHJlcXVpcmUoJy4vY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChhLCBiLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHJzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChiLCBhLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHJzb3J0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3QgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID4gMFxubW9kdWxlLmV4cG9ydHMgPSBndFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGx0ID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA8IDBcbm1vZHVsZS5leHBvcnRzID0gbHRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBlcSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPT09IDBcbm1vZHVsZS5leHBvcnRzID0gZXFcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBuZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpICE9PSAwXG5tb2R1bGUuZXhwb3J0cyA9IG5lcVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGd0ZSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPj0gMFxubW9kdWxlLmV4cG9ydHMgPSBndGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBsdGUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpIDw9IDBcbm1vZHVsZS5leHBvcnRzID0gbHRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGVxID0gcmVxdWlyZSgnLi9lcScpXG5jb25zdCBuZXEgPSByZXF1aXJlKCcuL25lcScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4vZ3QnKVxuY29uc3QgZ3RlID0gcmVxdWlyZSgnLi9ndGUnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2x0JylcbmNvbnN0IGx0ZSA9IHJlcXVpcmUoJy4vbHRlJylcblxuY29uc3QgY21wID0gKGEsIG9wLCBiLCBsb29zZSkgPT4ge1xuICBzd2l0Y2ggKG9wKSB7XG4gICAgY2FzZSAnPT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSA9PT0gYlxuXG4gICAgY2FzZSAnIT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSAhPT0gYlxuXG4gICAgY2FzZSAnJzpcbiAgICBjYXNlICc9JzpcbiAgICBjYXNlICc9PSc6XG4gICAgICByZXR1cm4gZXEoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICchPSc6XG4gICAgICByZXR1cm4gbmVxKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPic6XG4gICAgICByZXR1cm4gZ3QoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc+PSc6XG4gICAgICByZXR1cm4gZ3RlKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPCc6XG4gICAgICByZXR1cm4gbHQoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc8PSc6XG4gICAgICByZXR1cm4gbHRlKGEsIGIsIGxvb3NlKVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgb3BlcmF0b3I6ICR7b3B9YClcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBjbXBcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuXG5jb25zdCBjb2VyY2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInKSB7XG4gICAgdmVyc2lvbiA9IFN0cmluZyh2ZXJzaW9uKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGxldCBtYXRjaCA9IG51bGxcbiAgaWYgKCFvcHRpb25zLnJ0bCkge1xuICAgIG1hdGNoID0gdmVyc2lvbi5tYXRjaChvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VGVUxMXSA6IHJlW3QuQ09FUkNFXSlcbiAgfSBlbHNlIHtcbiAgICAvLyBGaW5kIHRoZSByaWdodC1tb3N0IGNvZXJjaWJsZSBzdHJpbmcgdGhhdCBkb2VzIG5vdCBzaGFyZVxuICAgIC8vIGEgdGVybWludXMgd2l0aCBhIG1vcmUgbGVmdC13YXJkIGNvZXJjaWJsZSBzdHJpbmcuXG4gICAgLy8gRWcsICcxLjIuMy40JyB3YW50cyB0byBjb2VyY2UgJzIuMy40Jywgbm90ICczLjQnIG9yICc0J1xuICAgIC8vIFdpdGggaW5jbHVkZVByZXJlbGVhc2Ugb3B0aW9uIHNldCwgJzEuMi4zLjQtcmMnIHdhbnRzIHRvIGNvZXJjZSAnMi4zLjQtcmMnLCBub3QgJzIuMy40J1xuICAgIC8vXG4gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzdHJpbmcgY2hlY2tpbmcgd2l0aCBhIC9nIHJlZ2V4cFxuICAgIC8vIE1hbnVhbGx5IHNldCB0aGUgaW5kZXggc28gYXMgdG8gcGljayB1cCBvdmVybGFwcGluZyBtYXRjaGVzLlxuICAgIC8vIFN0b3Agd2hlbiB3ZSBnZXQgYSBtYXRjaCB0aGF0IGVuZHMgYXQgdGhlIHN0cmluZyBlbmQsIHNpbmNlIG5vXG4gICAgLy8gY29lcmNpYmxlIHN0cmluZyBjYW4gYmUgbW9yZSByaWdodC13YXJkIHdpdGhvdXQgdGhlIHNhbWUgdGVybWludXMuXG4gICAgY29uc3QgY29lcmNlUnRsUmVnZXggPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VSVExGVUxMXSA6IHJlW3QuQ09FUkNFUlRMXVxuICAgIGxldCBuZXh0XG4gICAgd2hpbGUgKChuZXh0ID0gY29lcmNlUnRsUmVnZXguZXhlYyh2ZXJzaW9uKSkgJiZcbiAgICAgICAgKCFtYXRjaCB8fCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPT0gdmVyc2lvbi5sZW5ndGgpXG4gICAgKSB7XG4gICAgICBpZiAoIW1hdGNoIHx8XG4gICAgICAgICAgICBuZXh0LmluZGV4ICsgbmV4dFswXS5sZW5ndGggIT09IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSB7XG4gICAgICAgIG1hdGNoID0gbmV4dFxuICAgICAgfVxuICAgICAgY29lcmNlUnRsUmVnZXgubGFzdEluZGV4ID0gbmV4dC5pbmRleCArIG5leHRbMV0ubGVuZ3RoICsgbmV4dFsyXS5sZW5ndGhcbiAgICB9XG4gICAgLy8gbGVhdmUgaXQgaW4gYSBjbGVhbiBzdGF0ZVxuICAgIGNvZXJjZVJ0bFJlZ2V4Lmxhc3RJbmRleCA9IC0xXG4gIH1cblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbWFqb3IgPSBtYXRjaFsyXVxuICBjb25zdCBtaW5vciA9IG1hdGNoWzNdIHx8ICcwJ1xuICBjb25zdCBwYXRjaCA9IG1hdGNoWzRdIHx8ICcwJ1xuICBjb25zdCBwcmVyZWxlYXNlID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJiBtYXRjaFs1XSA/IGAtJHttYXRjaFs1XX1gIDogJydcbiAgY29uc3QgYnVpbGQgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIG1hdGNoWzZdID8gYCske21hdGNoWzZdfWAgOiAnJ1xuXG4gIHJldHVybiBwYXJzZShgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0ke3ByZXJlbGVhc2V9JHtidWlsZH1gLCBvcHRpb25zKVxufVxubW9kdWxlLmV4cG9ydHMgPSBjb2VyY2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2NvbnN0YW50cycpXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IHRydW5jYXRlID0gKHZlcnNpb24sIHRydW5jYXRpb24sIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFjb25zdGFudHMuUkVMRUFTRV9UWVBFUy5pbmNsdWRlcyh0cnVuY2F0aW9uKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBjbG9uZWRWZXJzaW9uID0gY2xvbmVJbnB1dFZlcnNpb24odmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIGNsb25lZFZlcnNpb24gJiYgZG9UcnVuY2F0aW9uKGNsb25lZFZlcnNpb24sIHRydW5jYXRpb24pXG59XG5cbmNvbnN0IGNsb25lSW5wdXRWZXJzaW9uID0gKHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgdmVyc2lvblN0cmluZ1RvUGFyc2UgPSAoXG4gICAgdmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlciA/IHZlcnNpb24udmVyc2lvbiA6IHZlcnNpb25cbiAgKVxuXG4gIHJldHVybiBwYXJzZSh2ZXJzaW9uU3RyaW5nVG9QYXJzZSwgb3B0aW9ucylcbn1cblxuY29uc3QgZG9UcnVuY2F0aW9uID0gKHZlcnNpb24sIHRydW5jYXRpb24pID0+IHtcbiAgaWYgKGlzUHJlcmVsZWFzZSh0cnVuY2F0aW9uKSkge1xuICAgIHJldHVybiB2ZXJzaW9uLnZlcnNpb25cbiAgfVxuXG4gIHZlcnNpb24ucHJlcmVsZWFzZSA9IFtdXG5cbiAgc3dpdGNoICh0cnVuY2F0aW9uKSB7XG4gICAgY2FzZSAnbWFqb3InOlxuICAgICAgdmVyc2lvbi5taW5vciA9IDBcbiAgICAgIHZlcnNpb24ucGF0Y2ggPSAwXG4gICAgICBicmVha1xuICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgIHZlcnNpb24ucGF0Y2ggPSAwXG4gICAgICBicmVha1xuICB9XG5cbiAgcmV0dXJuIHZlcnNpb24uZm9ybWF0KClcbn1cblxuY29uc3QgaXNQcmVyZWxlYXNlID0gKHR5cGUpID0+IHtcbiAgcmV0dXJuIHR5cGUuc3RhcnRzV2l0aCgncHJlJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cnVuY2F0ZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBMUlVDYWNoZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLm1heCA9IDEwMDBcbiAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKVxuICB9XG5cbiAgZ2V0IChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubWFwLmdldChrZXkpXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgbWFwIGFuZCBhZGQgaXQgdG8gdGhlIGVuZFxuICAgICAgdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgICAgIHRoaXMubWFwLnNldChrZXksIHZhbHVlKVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICB9XG5cbiAgZGVsZXRlIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgfVxuXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLmRlbGV0ZShrZXkpXG5cbiAgICBpZiAoIWRlbGV0ZWQgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgY2FjaGUgaXMgZnVsbCwgZGVsZXRlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW1cbiAgICAgIGlmICh0aGlzLm1hcC5zaXplID49IHRoaXMubWF4KSB7XG4gICAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5tYXAua2V5cygpLm5leHQoKS52YWx1ZVxuICAgICAgICB0aGlzLmRlbGV0ZShmaXJzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXAuc2V0KGtleSwgdmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExSVUNhY2hlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNQQUNFX0NIQVJBQ1RFUlMgPSAvXFxzKy9nXG5cbi8vIGhvaXN0ZWQgY2xhc3MgZm9yIGN5Y2xpYyBkZXBlbmRlbmN5XG5jbGFzcyBSYW5nZSB7XG4gIGNvbnN0cnVjdG9yIChyYW5nZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UgJiZcbiAgICAgICAgcmFuZ2UuaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZS5yYXcsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJhbmdlIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgLy8ganVzdCBwdXQgaXQgaW4gdGhlIHNldCBhbmQgcmV0dXJuXG4gICAgICB0aGlzLnJhdyA9IHJhbmdlLnZhbHVlXG4gICAgICB0aGlzLnNldCA9IFtbcmFuZ2VdXVxuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSB1bmRlZmluZWRcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICAvLyBGaXJzdCByZWR1Y2UgYWxsIHdoaXRlc3BhY2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZWx5XG4gICAgLy8gb24gcG90ZW50aWFsbHkgc2xvdyByZWdleGVzIGxpa2UgXFxzKi4gVGhpcyBpcyB0aGVuIHN0b3JlZCBhbmQgdXNlZCBmb3JcbiAgICAvLyBmdXR1cmUgZXJyb3IgbWVzc2FnZXMgYXMgd2VsbC5cbiAgICB0aGlzLnJhdyA9IHJhbmdlLnRyaW0oKS5yZXBsYWNlKFNQQUNFX0NIQVJBQ1RFUlMsICcgJylcblxuICAgIC8vIEZpcnN0LCBzcGxpdCBvbiB8fFxuICAgIHRoaXMuc2V0ID0gdGhpcy5yYXdcbiAgICAgIC5zcGxpdCgnfHwnKVxuICAgICAgLy8gbWFwIHRoZSByYW5nZSB0byBhIDJkIGFycmF5IG9mIGNvbXBhcmF0b3JzXG4gICAgICAubWFwKHIgPT4gdGhpcy5wYXJzZVJhbmdlKHIudHJpbSgpKSlcbiAgICAgIC8vIHRocm93IG91dCBhbnkgY29tcGFyYXRvciBsaXN0cyB0aGF0IGFyZSBlbXB0eVxuICAgICAgLy8gdGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCBpdCB3YXMgbm90IGEgdmFsaWQgcmFuZ2UsIHdoaWNoIGlzIGFsbG93ZWRcbiAgICAgIC8vIGluIGxvb3NlIG1vZGUsIGJ1dCB3aWxsIHN0aWxsIHRocm93IGlmIHRoZSBXSE9MRSByYW5nZSBpcyBpbnZhbGlkLlxuICAgICAgLmZpbHRlcihjID0+IGMubGVuZ3RoKVxuXG4gICAgaWYgKCF0aGlzLnNldC5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgU2VtVmVyIFJhbmdlOiAke3RoaXMucmF3fWApXG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZSBhbnkgdGhhdCBhcmUgbm90IHRoZSBudWxsIHNldCwgdGhyb3cgb3V0IG51bGwgc2V0cy5cbiAgICBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgLy8ga2VlcCB0aGUgZmlyc3Qgb25lLCBpbiBjYXNlIHRoZXkncmUgYWxsIG51bGwgc2V0c1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLnNldFswXVxuICAgICAgdGhpcy5zZXQgPSB0aGlzLnNldC5maWx0ZXIoYyA9PiAhaXNOdWxsU2V0KGNbMF0pKVxuICAgICAgaWYgKHRoaXMuc2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNldCA9IFtmaXJzdF1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlIGFueSB0aGF0IGFyZSAqLCB0aGVuIHRoZSByYW5nZSBpcyBqdXN0ICpcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgaWYgKGMubGVuZ3RoID09PSAxICYmIGlzQW55KGNbMF0pKSB7XG4gICAgICAgICAgICB0aGlzLnNldCA9IFtjXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1hdHRlZCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0IHJhbmdlICgpIHtcbiAgICBpZiAodGhpcy5mb3JtYXR0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSAnJ1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnfHwnXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSB0aGlzLnNldFtpXVxuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNvbXBzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgaWYgKGsgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnICdcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JtYXR0ZWQgKz0gY29tcHNba10udG9TdHJpbmcoKS50cmltKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWRcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZVxuICB9XG5cbiAgcGFyc2VSYW5nZSAocmFuZ2UpIHtcbiAgICAvLyBzdHJpcCBidWlsZCBtZXRhZGF0YSBzbyBpdCBjYW4ndCBibGVlZCBpbnRvIHRoZSB2ZXJzaW9uXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKEJVSUxEU1RSSVBSRSwgJycpXG5cbiAgICAvLyBtZW1vaXplIHJhbmdlIHBhcnNpbmcgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIHRoaXMgaXMgYSB2ZXJ5IGhvdCBwYXRoLCBhbmQgZnVsbHkgZGV0ZXJtaW5pc3RpYy5cbiAgICBjb25zdCBtZW1vT3B0cyA9XG4gICAgICAodGhpcy5vcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFKSB8XG4gICAgICAodGhpcy5vcHRpb25zLmxvb3NlICYmIEZMQUdfTE9PU0UpXG4gICAgY29uc3QgbWVtb0tleSA9IG1lbW9PcHRzICsgJzonICsgcmFuZ2VcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQobWVtb0tleSlcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkXG4gICAgfVxuXG4gICAgY29uc3QgbG9vc2UgPSB0aGlzLm9wdGlvbnMubG9vc2VcbiAgICAvLyBgMS4yLjMgLSAxLjIuNGAgPT4gYD49MS4yLjMgPD0xLjIuNGBcbiAgICBjb25zdCBociA9IGxvb3NlID8gcmVbdC5IWVBIRU5SQU5HRUxPT1NFXSA6IHJlW3QuSFlQSEVOUkFOR0VdXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKGhyLCBoeXBoZW5SZXBsYWNlKHRoaXMub3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkpXG4gICAgZGVidWcoJ2h5cGhlbiByZXBsYWNlJywgcmFuZ2UpXG5cbiAgICAvLyBgPiAxLjIuMyA8IDEuMi41YCA9PiBgPjEuMi4zIDwxLjIuNWBcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DT01QQVJBVE9SVFJJTV0sIGNvbXBhcmF0b3JUcmltUmVwbGFjZSlcbiAgICBkZWJ1ZygnY29tcGFyYXRvciB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgfiAxLjIuM2AgPT4gYH4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5USUxERVRSSU1dLCB0aWxkZVRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCd0aWxkZSB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgXiAxLjIuM2AgPT4gYF4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DQVJFVFRSSU1dLCBjYXJldFRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCdjYXJldCB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmFuZ2UgaXMgY29tcGxldGVseSB0cmltbWVkIGFuZFxuICAgIC8vIHJlYWR5IHRvIGJlIHNwbGl0IGludG8gY29tcGFyYXRvcnMuXG5cbiAgICBsZXQgcmFuZ2VMaXN0ID0gcmFuZ2VcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKGNvbXAgPT4gcGFyc2VDb21wYXJhdG9yKGNvbXAsIHRoaXMub3B0aW9ucykpXG4gICAgICAuam9pbignICcpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLy8gPj0wLjAuMCBpcyBlcXVpdmFsZW50IHRvICpcbiAgICAgIC5tYXAoY29tcCA9PiByZXBsYWNlR1RFMChjb21wLCB0aGlzLm9wdGlvbnMpKVxuXG4gICAgaWYgKGxvb3NlKSB7XG4gICAgICAvLyBpbiBsb29zZSBtb2RlLCB0aHJvdyBvdXQgYW55IHRoYXQgYXJlIG5vdCB2YWxpZCBjb21wYXJhdG9yc1xuICAgICAgcmFuZ2VMaXN0ID0gcmFuZ2VMaXN0LmZpbHRlcihjb21wID0+IHtcbiAgICAgICAgZGVidWcoJ2xvb3NlIGludmFsaWQgZmlsdGVyJywgY29tcCwgdGhpcy5vcHRpb25zKVxuICAgICAgICByZXR1cm4gISFjb21wLm1hdGNoKHJlW3QuQ09NUEFSQVRPUkxPT1NFXSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGRlYnVnKCdyYW5nZSBsaXN0JywgcmFuZ2VMaXN0KVxuXG4gICAgLy8gaWYgYW55IGNvbXBhcmF0b3JzIGFyZSB0aGUgbnVsbCBzZXQsIHRoZW4gcmVwbGFjZSB3aXRoIEpVU1QgbnVsbCBzZXRcbiAgICAvLyBpZiBtb3JlIHRoYW4gb25lIGNvbXBhcmF0b3IsIHJlbW92ZSBhbnkgKiBjb21wYXJhdG9yc1xuICAgIC8vIGFsc28sIGRvbid0IGluY2x1ZGUgdGhlIHNhbWUgY29tcGFyYXRvciBtb3JlIHRoYW4gb25jZVxuICAgIGNvbnN0IHJhbmdlTWFwID0gbmV3IE1hcCgpXG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZUxpc3QubWFwKGNvbXAgPT4gbmV3IENvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKSlcbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcGFyYXRvcnMpIHtcbiAgICAgIGlmIChpc051bGxTZXQoY29tcCkpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wXVxuICAgICAgfVxuICAgICAgcmFuZ2VNYXAuc2V0KGNvbXAudmFsdWUsIGNvbXApXG4gICAgfVxuICAgIGlmIChyYW5nZU1hcC5zaXplID4gMSAmJiByYW5nZU1hcC5oYXMoJycpKSB7XG4gICAgICByYW5nZU1hcC5kZWxldGUoJycpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLnJhbmdlTWFwLnZhbHVlcygpXVxuICAgIGNhY2hlLnNldChtZW1vS2V5LCByZXN1bHQpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaW50ZXJzZWN0cyAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIShyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBSYW5nZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0LnNvbWUoKHRoaXNDb21wYXJhdG9ycykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNTYXRpc2ZpYWJsZSh0aGlzQ29tcGFyYXRvcnMsIG9wdGlvbnMpICYmXG4gICAgICAgIHJhbmdlLnNldC5zb21lKChyYW5nZUNvbXBhcmF0b3JzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzU2F0aXNmaWFibGUocmFuZ2VDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgICAgIHRoaXNDb21wYXJhdG9ycy5ldmVyeSgodGhpc0NvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlQ29tcGFyYXRvcnMuZXZlcnkoKHJhbmdlQ29tcGFyYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzQ29tcGFyYXRvci5pbnRlcnNlY3RzKHJhbmdlQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG4gIH1cblxuICAvLyBpZiBBTlkgb2YgdGhlIHNldHMgbWF0Y2ggQUxMIG9mIGl0cyBjb21wYXJhdG9ycywgdGhlbiBwYXNzXG4gIHRlc3QgKHZlcnNpb24pIHtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIHRoaXMub3B0aW9ucylcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0ZXN0U2V0KHRoaXMuc2V0W2ldLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VcblxuY29uc3QgTFJVID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvbHJ1Y2FjaGUnKVxuY29uc3QgY2FjaGUgPSBuZXcgTFJVKClcblxuY29uc3QgcGFyc2VPcHRpb25zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcGFyc2Utb3B0aW9ucycpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jb21wYXJhdG9yJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3Qge1xuICBzYWZlUmU6IHJlLFxuICBzcmMsXG4gIHQsXG4gIGNvbXBhcmF0b3JUcmltUmVwbGFjZSxcbiAgdGlsZGVUcmltUmVwbGFjZSxcbiAgY2FyZXRUcmltUmVwbGFjZSxcbn0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCB7IEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFLCBGTEFHX0xPT1NFIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuXG4vLyB1bmJvdW5kZWQgZ2xvYmFsIGJ1aWxkLW1ldGFkYXRhIHN0cmlwcGVyIHVzZWQgYnkgcGFyc2VSYW5nZVxuY29uc3QgQlVJTERTVFJJUFJFID0gbmV3IFJlZ0V4cChzcmNbdC5CVUlMRF0sICdnJylcblxuY29uc3QgaXNOdWxsU2V0ID0gYyA9PiBjLnZhbHVlID09PSAnPDAuMC4wLTAnXG5jb25zdCBpc0FueSA9IGMgPT4gYy52YWx1ZSA9PT0gJydcblxuLy8gdGFrZSBhIHNldCBvZiBjb21wYXJhdG9ycyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmVcbi8vIGV4aXN0cyBhIHZlcnNpb24gd2hpY2ggY2FuIHNhdGlzZnkgaXRcbmNvbnN0IGlzU2F0aXNmaWFibGUgPSAoY29tcGFyYXRvcnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlc3VsdCA9IHRydWVcbiAgY29uc3QgcmVtYWluaW5nQ29tcGFyYXRvcnMgPSBjb21wYXJhdG9ycy5zbGljZSgpXG4gIGxldCB0ZXN0Q29tcGFyYXRvciA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLnBvcCgpXG5cbiAgd2hpbGUgKHJlc3VsdCAmJiByZW1haW5pbmdDb21wYXJhdG9ycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSByZW1haW5pbmdDb21wYXJhdG9ycy5ldmVyeSgob3RoZXJDb21wYXJhdG9yKSA9PiB7XG4gICAgICByZXR1cm4gdGVzdENvbXBhcmF0b3IuaW50ZXJzZWN0cyhvdGhlckNvbXBhcmF0b3IsIG9wdGlvbnMpXG4gICAgfSlcblxuICAgIHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gY29tcHJpc2VkIG9mIHhyYW5nZXMsIHRpbGRlcywgc3RhcnMsIGFuZCBndGx0J3MgYXQgdGhpcyBwb2ludC5cbi8vIGFscmVhZHkgcmVwbGFjZWQgdGhlIGh5cGhlbiByYW5nZXNcbi8vIHR1cm4gaW50byBhIHNldCBvZiBKVVNUIGNvbXBhcmF0b3JzLlxuY29uc3QgcGFyc2VDb21wYXJhdG9yID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29tcCA9IGNvbXAucmVwbGFjZShyZVt0LkJVSUxEXSwgJycpXG4gIGRlYnVnKCdjb21wJywgY29tcCwgb3B0aW9ucylcbiAgY29tcCA9IHJlcGxhY2VDYXJldHMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ2NhcmV0JywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VUaWxkZXMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ3RpbGRlcycsIGNvbXApXG4gIGNvbXAgPSByZXBsYWNlWFJhbmdlcyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygneHJhbmdlJywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VTdGFycyhjb21wLCBvcHRpb25zKVxuICBkZWJ1Zygnc3RhcnMnLCBjb21wKVxuICByZXR1cm4gY29tcFxufVxuXG5jb25zdCBpc1ggPSBpZCA9PiAhaWQgfHwgaWQudG9Mb3dlckNhc2UoKSA9PT0gJ3gnIHx8IGlkID09PSAnKidcblxuY29uc3QgaW52YWxpZFhSYW5nZU9yZGVyID0gKE0sIG0sIHApID0+IChcbiAgKGlzWChNKSAmJiAhaXNYKG0pKSB8fFxuICAoaXNYKG0pICYmIHAgJiYgIWlzWChwKSlcbilcblxuLy8gfiwgfj4gLS0+ICogKGFueSwga2luZGEgc2lsbHkpXG4vLyB+MiwgfjIueCwgfjIueC54LCB+PjIsIH4+Mi54IH4+Mi54LnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIH4yLjAsIH4yLjAueCwgfj4yLjAsIH4+Mi4wLnggLS0+ID49Mi4wLjAgPDIuMS4wLTBcbi8vIH4xLjIsIH4xLjIueCwgfj4xLjIsIH4+MS4yLnggLS0+ID49MS4yLjAgPDEuMy4wLTBcbi8vIH4xLjIuMywgfj4xLjIuMyAtLT4gPj0xLjIuMyA8MS4zLjAtMFxuLy8gfjEuMi4wLCB+PjEuMi4wIC0tPiA+PTEuMi4wIDwxLjMuMC0wXG4vLyB+MC4wLjEgLS0+ID49MC4wLjEgPDAuMS4wLTBcbmNvbnN0IHJlcGxhY2VUaWxkZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VUaWxkZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VUaWxkZSA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5USUxERUxPT1NFXSA6IHJlW3QuVElMREVdXG4gIC8vIGlmIHdlJ3JlIGluY2x1ZGluZyBwcmVyZWxlYXNlcyBpbiB0aGUgbWF0Y2gsIHRoZW4gdGhlIGxvd2VyIGJvdW5kIGlzXG4gIC8vIC0wLCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByZXJlbGVhc2UgdmFsdWUsIGp1c3QgbGlrZSB4LXJhbmdlcyBhbmQgY2FyZXRzLlxuICAvLyB0aGlzIGtlZXBzIGB+MS4yYCBlcXVpdmFsZW50IHRvIHRoZSBgMS4yLnhgIHgtcmFuZ2UgaXQncyBkb2N1bWVudGVkIGFzLlxuICBjb25zdCB6ID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCd0aWxkZScsIGNvbXAsIF8sIE0sIG0sIHAsIHByKVxuICAgIGxldCByZXRcblxuICAgIGlmIChpc1goTSkpIHtcbiAgICAgIHJldCA9ICcnXG4gICAgfSBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICAvLyB+MS4yID09ID49MS4yLjAgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHt6fSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH0gZWxzZSBpZiAocHIpIHtcbiAgICAgIGRlYnVnKCdyZXBsYWNlVGlsZGUgcHInLCBwcilcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gfjEuMi4zID09ID49MS4yLjMgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3BcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9XG5cbiAgICBkZWJ1ZygndGlsZGUgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuLy8gXiAtLT4gKiAoYW55LCBraW5kYSBzaWxseSlcbi8vIF4yLCBeMi54LCBeMi54LnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIF4yLjAsIF4yLjAueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gXjEuMiwgXjEuMi54IC0tPiA+PTEuMi4wIDwyLjAuMC0wXG4vLyBeMS4yLjMgLS0+ID49MS4yLjMgPDIuMC4wLTBcbi8vIF4xLjIuMCAtLT4gPj0xLjIuMCA8Mi4wLjAtMFxuLy8gXjAuMC4xIC0tPiA+PTAuMC4xIDwwLjAuMi0wXG4vLyBeMC4xLjAgLS0+ID49MC4xLjAgPDAuMi4wLTBcbmNvbnN0IHJlcGxhY2VDYXJldHMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VDYXJldChjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VDYXJldCA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGRlYnVnKCdjYXJldCcsIGNvbXAsIG9wdGlvbnMpXG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5DQVJFVExPT1NFXSA6IHJlW3QuQ0FSRVRdXG4gIGNvbnN0IHogPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gJy0wJyA6ICcnXG4gIHJldHVybiBjb21wLnJlcGxhY2UociwgKF8sIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ2NhcmV0JywgY29tcCwgXywgTSwgbSwgcCwgcHIpXG4gICAgbGV0IHJldFxuXG4gICAgaWYgKGlzWChNKSkge1xuICAgICAgcmV0ID0gJydcbiAgICB9IGVsc2UgaWYgKGlzWChtKSkge1xuICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3p9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgfSBlbHNlIGlmIChpc1gocCkpIHtcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3p9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByKSB7XG4gICAgICBkZWJ1ZygncmVwbGFjZUNhcmV0IHByJywgcHIpXG4gICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgIGlmIChtID09PSAnMCcpIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICAgICAgfSA8JHtNfS4ke219LiR7K3AgKyAxfS0wYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgfSA8JHsrTSArIDF9LjAuMC0wYFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Zygnbm8gcHInKVxuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICBpZiAobSA9PT0gJzAnKSB7XG4gICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgICAgIH0gPCR7TX0uJHttfS4keytwICsgMX0tMGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgIH0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWJ1ZygnY2FyZXQgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuY29uc3QgcmVwbGFjZVhSYW5nZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZVhSYW5nZXMnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZVhSYW5nZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VYUmFuZ2UgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBjb21wID0gY29tcC50cmltKClcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LlhSQU5HRUxPT1NFXSA6IHJlW3QuWFJBTkdFXVxuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChyZXQsIGd0bHQsIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ3hSYW5nZScsIGNvbXAsIHJldCwgZ3RsdCwgTSwgbSwgcCwgcHIpXG4gICAgaWYgKGludmFsaWRYUmFuZ2VPcmRlcihNLCBtLCBwKSkge1xuICAgICAgcmV0dXJuIGNvbXBcbiAgICB9XG5cbiAgICBjb25zdCB4TSA9IGlzWChNKVxuICAgIGNvbnN0IHhtID0geE0gfHwgaXNYKG0pXG4gICAgY29uc3QgeHAgPSB4bSB8fCBpc1gocClcbiAgICBjb25zdCBhbnlYID0geHBcblxuICAgIGlmIChndGx0ID09PSAnPScgJiYgYW55WCkge1xuICAgICAgZ3RsdCA9ICcnXG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgaW5jbHVkaW5nIHByZXJlbGVhc2VzIGluIHRoZSBtYXRjaCwgdGhlbiB3ZSBuZWVkXG4gICAgLy8gdG8gZml4IHRoaXMgdG8gLTAsIHRoZSBsb3dlc3QgcG9zc2libGUgcHJlcmVsZWFzZSB2YWx1ZVxuICAgIHByID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuXG4gICAgaWYgKHhNKSB7XG4gICAgICBpZiAoZ3RsdCA9PT0gJz4nIHx8IGd0bHQgPT09ICc8Jykge1xuICAgICAgICAvLyBub3RoaW5nIGlzIGFsbG93ZWRcbiAgICAgICAgcmV0ID0gJzwwLjAuMC0wJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm90aGluZyBpcyBmb3JiaWRkZW5cbiAgICAgICAgcmV0ID0gJyonXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChndGx0ICYmIGFueVgpIHtcbiAgICAgIC8vIHdlIGtub3cgcGF0Y2ggaXMgYW4geCwgYmVjYXVzZSB3ZSBoYXZlIGFueSB4IGF0IGFsbC5cbiAgICAgIC8vIHJlcGxhY2UgWCB3aXRoIDBcbiAgICAgIGlmICh4bSkge1xuICAgICAgICBtID0gMFxuICAgICAgfVxuICAgICAgcCA9IDBcblxuICAgICAgaWYgKGd0bHQgPT09ICc+Jykge1xuICAgICAgICAvLyA+MSA9PiA+PTIuMC4wXG4gICAgICAgIC8vID4xLjIgPT4gPj0xLjMuMFxuICAgICAgICBndGx0ID0gJz49J1xuICAgICAgICBpZiAoeG0pIHtcbiAgICAgICAgICBNID0gK00gKyAxXG4gICAgICAgICAgbSA9IDBcbiAgICAgICAgICBwID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG0gPSArbSArIDFcbiAgICAgICAgICBwID0gMFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGd0bHQgPT09ICc8PScpIHtcbiAgICAgICAgLy8gPD0wLjcueCBpcyBhY3R1YWxseSA8MC44LjAsIHNpbmNlIGFueSAwLjcueCBzaG91bGRcbiAgICAgICAgLy8gcGFzcy4gIFNpbWlsYXJseSwgPD03LnggaXMgYWN0dWFsbHkgPDguMC4wLCBldGMuXG4gICAgICAgIGd0bHQgPSAnPCdcbiAgICAgICAgaWYgKHhtKSB7XG4gICAgICAgICAgTSA9ICtNICsgMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG0gPSArbSArIDFcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ3RsdCA9PT0gJzwnKSB7XG4gICAgICAgIHByID0gJy0wJ1xuICAgICAgfVxuXG4gICAgICByZXQgPSBgJHtndGx0ICsgTX0uJHttfS4ke3B9JHtwcn1gXG4gICAgfSBlbHNlIGlmICh4bSkge1xuICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3ByfSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoeHApIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHtwclxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH1cblxuICAgIGRlYnVnKCd4UmFuZ2UgcmV0dXJuJywgcmV0KVxuXG4gICAgcmV0dXJuIHJldFxuICB9KVxufVxuXG4vLyBCZWNhdXNlICogaXMgQU5ELWVkIHdpdGggZXZlcnl0aGluZyBlbHNlIGluIHRoZSBjb21wYXJhdG9yLFxuLy8gYW5kICcnIG1lYW5zIFwiYW55IHZlcnNpb25cIiwganVzdCByZW1vdmUgdGhlICpzIGVudGlyZWx5LlxuY29uc3QgcmVwbGFjZVN0YXJzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ3JlcGxhY2VTdGFycycsIGNvbXAsIG9wdGlvbnMpXG4gIC8vIExvb3NlbmVzcyBpcyBpZ25vcmVkIGhlcmUuICBzdGFyIGlzIGFsd2F5cyBhcyBsb29zZSBhcyBpdCBnZXRzIVxuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZShyZVt0LlNUQVJdLCAnJylcbn1cblxuY29uc3QgcmVwbGFjZUdURTAgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZUdURTAnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZShyZVtvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gdC5HVEUwUFJFIDogdC5HVEUwXSwgJycpXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIHN0cmluZy5yZXBsYWNlKHJlW3QuSFlQSEVOUkFOR0VdKVxuLy8gTSwgbSwgcGF0Y2gsIHByZXJlbGVhc2UsIGJ1aWxkXG4vLyAxLjIgLSAzLjQuNSA9PiA+PTEuMi4wIDw9My40LjVcbi8vIDEuMi4zIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wLTAgQW55IDMuNC54IHdpbGwgZG9cbi8vIDEuMiAtIDMuNCA9PiA+PTEuMi4wIDwzLjUuMC0wXG4vLyBUT0RPIGJ1aWxkP1xuY29uc3QgaHlwaGVuUmVwbGFjZSA9IGluY1ByID0+ICgkMCxcbiAgZnJvbSwgZk0sIGZtLCBmcCwgZnByLCBmYixcbiAgdG8sIHRNLCB0bSwgdHAsIHRwcikgPT4ge1xuICBpZiAoaXNYKGZNKSkge1xuICAgIGZyb20gPSAnJ1xuICB9IGVsc2UgaWYgKGlzWChmbSkpIHtcbiAgICBmcm9tID0gYD49JHtmTX0uMC4wJHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH0gZWxzZSBpZiAoaXNYKGZwKSkge1xuICAgIGZyb20gPSBgPj0ke2ZNfS4ke2ZtfS4wJHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH0gZWxzZSBpZiAoZnByKSB7XG4gICAgZnJvbSA9IGA+PSR7ZnJvbX1gXG4gIH0gZWxzZSB7XG4gICAgZnJvbSA9IGA+PSR7ZnJvbX0ke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfVxuXG4gIGlmIChpc1godE0pKSB7XG4gICAgdG8gPSAnJ1xuICB9IGVsc2UgaWYgKGlzWCh0bSkpIHtcbiAgICB0byA9IGA8JHsrdE0gKyAxfS4wLjAtMGBcbiAgfSBlbHNlIGlmIChpc1godHApKSB7XG4gICAgdG8gPSBgPCR7dE19LiR7K3RtICsgMX0uMC0wYFxuICB9IGVsc2UgaWYgKHRwcikge1xuICAgIHRvID0gYDw9JHt0TX0uJHt0bX0uJHt0cH0tJHt0cHJ9YFxuICB9IGVsc2UgaWYgKGluY1ByKSB7XG4gICAgdG8gPSBgPCR7dE19LiR7dG19LiR7K3RwICsgMX0tMGBcbiAgfSBlbHNlIHtcbiAgICB0byA9IGA8PSR7dG99YFxuICB9XG5cbiAgcmV0dXJuIGAke2Zyb219ICR7dG99YC50cmltKClcbn1cblxuY29uc3QgdGVzdFNldCA9IChzZXQsIHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXNldFtpXS50ZXN0KHZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBpZiAodmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgIC8vIEZpbmQgdGhlIHNldCBvZiB2ZXJzaW9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIGhhdmUgcHJlcmVsZWFzZXNcbiAgICAvLyBGb3IgZXhhbXBsZSwgXjEuMi4zLXByLjEgZGVzdWdhcnMgdG8gPj0xLjIuMy1wci4xIDwyLjAuMFxuICAgIC8vIFRoYXQgc2hvdWxkIGFsbG93IGAxLjIuMy1wci4yYCB0byBwYXNzLlxuICAgIC8vIEhvd2V2ZXIsIGAxLjIuNC1hbHBoYS5ub3RyZWFkeWAgc2hvdWxkIE5PVCBiZSBhbGxvd2VkLFxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0J3Mgd2l0aGluIHRoZSByYW5nZSBzZXQgYnkgdGhlIGNvbXBhcmF0b3JzLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWJ1ZyhzZXRbaV0uc2VtdmVyKVxuICAgICAgaWYgKHNldFtpXS5zZW12ZXIgPT09IENvbXBhcmF0b3IuQU5ZKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXRbaV0uc2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBhbGxvd2VkID0gc2V0W2ldLnNlbXZlclxuICAgICAgICBpZiAoYWxsb3dlZC5tYWpvciA9PT0gdmVyc2lvbi5tYWpvciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5taW5vciA9PT0gdmVyc2lvbi5taW5vciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5wYXRjaCA9PT0gdmVyc2lvbi5wYXRjaCkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWZXJzaW9uIGhhcyBhIC1wcmUsIGJ1dCBpdCdzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2UgbGlrZS5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEFOWSA9IFN5bWJvbCgnU2VtVmVyIEFOWScpXG4vLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgQ29tcGFyYXRvciB7XG4gIHN0YXRpYyBnZXQgQU5ZICgpIHtcbiAgICByZXR1cm4gQU5ZXG4gIH1cblxuICBjb25zdHJ1Y3RvciAoY29tcCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChjb21wIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgaWYgKGNvbXAubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSkge1xuICAgICAgICByZXR1cm4gY29tcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcCA9IGNvbXAudmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wID0gY29tcC50cmltKCkuc3BsaXQoL1xccysvKS5qb2luKCcgJylcbiAgICBkZWJ1ZygnY29tcGFyYXRvcicsIGNvbXAsIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLnBhcnNlKGNvbXApXG5cbiAgICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wZXJhdG9yICsgdGhpcy5zZW12ZXIudmVyc2lvblxuICAgIH1cblxuICAgIGRlYnVnKCdjb21wJywgdGhpcylcbiAgfVxuXG4gIHBhcnNlIChjb21wKSB7XG4gICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuQ09NUEFSQVRPUkxPT1NFXSA6IHJlW3QuQ09NUEFSQVRPUl1cbiAgICBjb25zdCBtID0gY29tcC5tYXRjaChyKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGNvbXBhcmF0b3I6ICR7Y29tcH1gKVxuICAgIH1cblxuICAgIHRoaXMub3BlcmF0b3IgPSBtWzFdICE9PSB1bmRlZmluZWQgPyBtWzFdIDogJydcbiAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJz0nKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiBpdCBsaXRlcmFsbHkgaXMganVzdCAnPicgb3IgJycgdGhlbiBhbGxvdyBhbnl0aGluZy5cbiAgICBpZiAoIW1bMl0pIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gQU5ZXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gbmV3IFNlbVZlcihtWzJdLCB0aGlzLm9wdGlvbnMubG9vc2UpXG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cblxuICB0ZXN0ICh2ZXJzaW9uKSB7XG4gICAgZGVidWcoJ0NvbXBhcmF0b3IudGVzdCcsIHZlcnNpb24sIHRoaXMub3B0aW9ucy5sb29zZSlcblxuICAgIGlmICh0aGlzLnNlbXZlciA9PT0gQU5ZIHx8IHZlcnNpb24gPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY21wKHZlcnNpb24sIHRoaXMub3BlcmF0b3IsIHRoaXMuc2VtdmVyLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbnRlcnNlY3RzIChjb21wLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGNvbXAudmFsdWUsIG9wdGlvbnMpLnRlc3QodGhpcy52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKGNvbXAub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICBpZiAoY29tcC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy52YWx1ZSwgb3B0aW9ucykudGVzdChjb21wLnNlbXZlcilcbiAgICB9XG5cbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyBTcGVjaWFsIGNhc2VzIHdoZXJlIG5vdGhpbmcgY2FuIHBvc3NpYmx5IGJlIGxvd2VyXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICAgICh0aGlzLnZhbHVlID09PSAnPDAuMC4wLTAnIHx8IGNvbXAudmFsdWUgPT09ICc8MC4wLjAtMCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmXG4gICAgICAodGhpcy52YWx1ZS5zdGFydHNXaXRoKCc8MC4wLjAnKSB8fCBjb21wLnZhbHVlLnN0YXJ0c1dpdGgoJzwwLjAuMCcpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gU2FtZSBkaXJlY3Rpb24gaW5jcmVhc2luZyAoPiBvciA+PSlcbiAgICBpZiAodGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykgJiYgY29tcC5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFNhbWUgZGlyZWN0aW9uIGRlY3JlYXNpbmcgKDwgb3IgPD0pXG4gICAgaWYgKHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBzYW1lIFNlbVZlciBhbmQgYm90aCBzaWRlcyBhcmUgaW5jbHVzaXZlICg8PSBvciA+PSlcbiAgICBpZiAoXG4gICAgICAodGhpcy5zZW12ZXIudmVyc2lvbiA9PT0gY29tcC5zZW12ZXIudmVyc2lvbikgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IuaW5jbHVkZXMoJz0nKSAmJiBjb21wLm9wZXJhdG9yLmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIG9wcG9zaXRlIGRpcmVjdGlvbnMgbGVzcyB0aGFuXG4gICAgaWYgKGNtcCh0aGlzLnNlbXZlciwgJzwnLCBjb21wLnNlbXZlciwgb3B0aW9ucykgJiZcbiAgICAgIHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zIGdyZWF0ZXIgdGhhblxuICAgIGlmIChjbXAodGhpcy5zZW12ZXIsICc+JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJz4nKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb21wYXJhdG9yXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCBjbXAgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL3JhbmdlJylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IHNhdGlzZmllcyA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiByYW5nZS50ZXN0KHZlcnNpb24pXG59XG5tb2R1bGUuZXhwb3J0cyA9IHNhdGlzZmllc1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuXG4vLyBNb3N0bHkganVzdCBmb3IgdGVzdGluZyBhbmQgbGVnYWN5IEFQSSByZWFzb25zXG5jb25zdCB0b0NvbXBhcmF0b3JzID0gKHJhbmdlLCBvcHRpb25zKSA9PlxuICBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnNldFxuICAgIC5tYXAoY29tcCA9PiBjb21wLm1hcChjID0+IGMudmFsdWUpLmpvaW4oJyAnKS50cmltKCkuc3BsaXQoJyAnKSlcblxubW9kdWxlLmV4cG9ydHMgPSB0b0NvbXBhcmF0b3JzXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbmNvbnN0IG1heFNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtYXggPSBudWxsXG4gIGxldCBtYXhTViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1heCB8fCBtYXhTVi5jb21wYXJlKHYpID09PSAtMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1heCwgdiwgdHJ1ZSlcbiAgICAgICAgbWF4ID0gdlxuICAgICAgICBtYXhTViA9IG5ldyBTZW1WZXIobWF4LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1heFxufVxubW9kdWxlLmV4cG9ydHMgPSBtYXhTYXRpc2Z5aW5nXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBtaW5TYXRpc2Z5aW5nID0gKHZlcnNpb25zLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICBsZXQgbWluID0gbnVsbFxuICBsZXQgbWluU1YgPSBudWxsXG4gIGxldCByYW5nZU9iaiA9IG51bGxcbiAgdHJ5IHtcbiAgICByYW5nZU9iaiA9IG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucylcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHZlcnNpb25zLmZvckVhY2goKHYpID0+IHtcbiAgICBpZiAocmFuZ2VPYmoudGVzdCh2KSkge1xuICAgICAgLy8gc2F0aXNmaWVzKHYsIHJhbmdlLCBvcHRpb25zKVxuICAgICAgaWYgKCFtaW4gfHwgbWluU1YuY29tcGFyZSh2KSA9PT0gMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1pbiwgdiwgdHJ1ZSlcbiAgICAgICAgbWluID0gdlxuICAgICAgICBtaW5TViA9IG5ldyBTZW1WZXIobWluLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1pblxufVxubW9kdWxlLmV4cG9ydHMgPSBtaW5TYXRpc2Z5aW5nXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndCcpXG5cbmNvbnN0IG1pblZlcnNpb24gPSAocmFuZ2UsIGxvb3NlKSA9PiB7XG4gIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBsb29zZSlcblxuICBsZXQgbWludmVyID0gbmV3IFNlbVZlcignMC4wLjAnKVxuICBpZiAocmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgbWludmVyID0gbmV3IFNlbVZlcignMC4wLjAtMCcpXG4gIGlmIChyYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICBtaW52ZXIgPSBudWxsXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2V0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZS5zZXRbaV1cblxuICAgIGxldCBzZXRNaW4gPSBudWxsXG4gICAgY29tcGFyYXRvcnMuZm9yRWFjaCgoY29tcGFyYXRvcikgPT4ge1xuICAgICAgLy8gQ2xvbmUgdG8gYXZvaWQgbWFuaXB1bGF0aW5nIHRoZSBjb21wYXJhdG9yJ3Mgc2VtdmVyIG9iamVjdC5cbiAgICAgIGNvbnN0IGNvbXB2ZXIgPSBuZXcgU2VtVmVyKGNvbXBhcmF0b3Iuc2VtdmVyLnZlcnNpb24pXG4gICAgICBzd2l0Y2ggKGNvbXBhcmF0b3Iub3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSAnPic6XG4gICAgICAgICAgaWYgKGNvbXB2ZXIucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbXB2ZXIucGF0Y2grK1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wdmVyLnByZXJlbGVhc2UucHVzaCgwKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb21wdmVyLnJhdyA9IGNvbXB2ZXIuZm9ybWF0KClcbiAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgICAgICBjYXNlICcnOlxuICAgICAgICBjYXNlICc+PSc6XG4gICAgICAgICAgaWYgKCFzZXRNaW4gfHwgZ3QoY29tcHZlciwgc2V0TWluKSkge1xuICAgICAgICAgICAgc2V0TWluID0gY29tcHZlclxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FzZSAnPD0nOlxuICAgICAgICAgIC8qIElnbm9yZSBtYXhpbXVtIHZlcnNpb25zICovXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb3BlcmF0aW9uOiAke2NvbXBhcmF0b3Iub3BlcmF0b3J9YClcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmIChzZXRNaW4gJiYgKCFtaW52ZXIgfHwgZ3QobWludmVyLCBzZXRNaW4pKSkge1xuICAgICAgbWludmVyID0gc2V0TWluXG4gICAgfVxuICB9XG5cbiAgaWYgKG1pbnZlciAmJiByYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBtaW5WZXJzaW9uXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCB2YWxpZFJhbmdlID0gKHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gUmV0dXJuICcqJyBpbnN0ZWFkIG9mICcnIHNvIHRoYXQgdHJ1dGhpbmVzcyB3b3Jrcy5cbiAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgaXQncyBpbnZhbGlkIGFueXdheVxuICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnJhbmdlIHx8ICcqJ1xuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRSYW5nZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9jb21wYXJhdG9yJylcbmNvbnN0IHsgQU5ZIH0gPSBDb21wYXJhdG9yXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3NhdGlzZmllcycpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndCcpXG5jb25zdCBsdCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBsdGUgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGd0ZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndGUnKVxuXG5jb25zdCBvdXRzaWRlID0gKHZlcnNpb24sIHJhbmdlLCBoaWxvLCBvcHRpb25zKSA9PiB7XG4gIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIG9wdGlvbnMpXG4gIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuXG4gIGxldCBndGZuLCBsdGVmbiwgbHRmbiwgY29tcCwgZWNvbXBcbiAgc3dpdGNoIChoaWxvKSB7XG4gICAgY2FzZSAnPic6XG4gICAgICBndGZuID0gZ3RcbiAgICAgIGx0ZWZuID0gbHRlXG4gICAgICBsdGZuID0gbHRcbiAgICAgIGNvbXAgPSAnPidcbiAgICAgIGVjb21wID0gJz49J1xuICAgICAgYnJlYWtcbiAgICBjYXNlICc8JzpcbiAgICAgIGd0Zm4gPSBsdFxuICAgICAgbHRlZm4gPSBndGVcbiAgICAgIGx0Zm4gPSBndFxuICAgICAgY29tcCA9ICc8J1xuICAgICAgZWNvbXAgPSAnPD0nXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHByb3ZpZGUgYSBoaWxvIHZhbCBvZiBcIjxcIiBvciBcIj5cIicpXG4gIH1cblxuICAvLyBJZiBpdCBzYXRpc2ZpZXMgdGhlIHJhbmdlIGl0IGlzIG5vdCBvdXRzaWRlXG4gIGlmIChzYXRpc2ZpZXModmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBGcm9tIG5vdyBvbiwgdmFyaWFibGUgdGVybXMgYXJlIGFzIGlmIHdlJ3JlIGluIFwiZ3RyXCIgbW9kZS5cbiAgLy8gYnV0IG5vdGUgdGhhdCBldmVyeXRoaW5nIGlzIGZsaXBwZWQgZm9yIHRoZSBcImx0clwiIGZ1bmN0aW9uLlxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2V0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZS5zZXRbaV1cblxuICAgIGxldCBoaWdoID0gbnVsbFxuICAgIGxldCBsb3cgPSBudWxsXG5cbiAgICBjb21wYXJhdG9ycy5mb3JFYWNoKChjb21wYXJhdG9yKSA9PiB7XG4gICAgICBpZiAoY29tcGFyYXRvci5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgICBjb21wYXJhdG9yID0gbmV3IENvbXBhcmF0b3IoJz49MC4wLjAnKVxuICAgICAgfVxuICAgICAgaGlnaCA9IGhpZ2ggfHwgY29tcGFyYXRvclxuICAgICAgbG93ID0gbG93IHx8IGNvbXBhcmF0b3JcbiAgICAgIGlmIChndGZuKGNvbXBhcmF0b3Iuc2VtdmVyLCBoaWdoLnNlbXZlciwgb3B0aW9ucykpIHtcbiAgICAgICAgaGlnaCA9IGNvbXBhcmF0b3JcbiAgICAgIH0gZWxzZSBpZiAobHRmbihjb21wYXJhdG9yLnNlbXZlciwgbG93LnNlbXZlciwgb3B0aW9ucykpIHtcbiAgICAgICAgbG93ID0gY29tcGFyYXRvclxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBJZiB0aGUgZWRnZSB2ZXJzaW9uIGNvbXBhcmF0b3IgaGFzIGEgb3BlcmF0b3IgdGhlbiBvdXIgdmVyc2lvblxuICAgIC8vIGlzbid0IG91dHNpZGUgaXRcbiAgICBpZiAoaGlnaC5vcGVyYXRvciA9PT0gY29tcCB8fCBoaWdoLm9wZXJhdG9yID09PSBlY29tcCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGxvd2VzdCB2ZXJzaW9uIGNvbXBhcmF0b3IgaGFzIGFuIG9wZXJhdG9yIGFuZCBvdXIgdmVyc2lvblxuICAgIC8vIGlzIGxlc3MgdGhhbiBpdCB0aGVuIGl0IGlzbid0IGhpZ2hlciB0aGFuIHRoZSByYW5nZVxuICAgIGlmICgoIWxvdy5vcGVyYXRvciB8fCBsb3cub3BlcmF0b3IgPT09IGNvbXApICYmXG4gICAgICAgIGx0ZWZuKHZlcnNpb24sIGxvdy5zZW12ZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYgKGxvdy5vcGVyYXRvciA9PT0gZWNvbXAgJiYgbHRmbih2ZXJzaW9uLCBsb3cuc2VtdmVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0c2lkZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2UuXG5jb25zdCBvdXRzaWRlID0gcmVxdWlyZSgnLi9vdXRzaWRlJylcbmNvbnN0IGd0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJz4nLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBndHJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBsZXNzIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbmNvbnN0IGx0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJzwnLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBsdHJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IGludGVyc2VjdHMgPSAocjEsIHIyLCBvcHRpb25zKSA9PiB7XG4gIHIxID0gbmV3IFJhbmdlKHIxLCBvcHRpb25zKVxuICByMiA9IG5ldyBSYW5nZShyMiwgb3B0aW9ucylcbiAgcmV0dXJuIHIxLmludGVyc2VjdHMocjIsIG9wdGlvbnMpXG59XG5tb2R1bGUuZXhwb3J0cyA9IGludGVyc2VjdHNcbiIsICIndXNlIHN0cmljdCdcblxuLy8gZ2l2ZW4gYSBzZXQgb2YgdmVyc2lvbnMgYW5kIGEgcmFuZ2UsIGNyZWF0ZSBhIFwic2ltcGxpZmllZFwiIHJhbmdlXG4vLyB0aGF0IGluY2x1ZGVzIHRoZSBzYW1lIHZlcnNpb25zIHRoYXQgdGhlIG9yaWdpbmFsIHJhbmdlIGRvZXNcbi8vIElmIHRoZSBvcmlnaW5hbCByYW5nZSBpcyBzaG9ydGVyIHRoYW4gdGhlIHNpbXBsaWZpZWQgb25lLCByZXR1cm4gdGhhdC5cbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcbm1vZHVsZS5leHBvcnRzID0gKHZlcnNpb25zLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBzZXQgPSBbXVxuICBsZXQgZmlyc3QgPSBudWxsXG4gIGxldCBwcmV2ID0gbnVsbFxuICBjb25zdCB2ID0gdmVyc2lvbnMuc29ydCgoYSwgYikgPT4gY29tcGFyZShhLCBiLCBvcHRpb25zKSlcbiAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHYpIHtcbiAgICBjb25zdCBpbmNsdWRlZCA9IHNhdGlzZmllcyh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucylcbiAgICBpZiAoaW5jbHVkZWQpIHtcbiAgICAgIHByZXYgPSB2ZXJzaW9uXG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIGZpcnN0ID0gdmVyc2lvblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICBzZXQucHVzaChbZmlyc3QsIHByZXZdKVxuICAgICAgfVxuICAgICAgcHJldiA9IG51bGxcbiAgICAgIGZpcnN0ID0gbnVsbFxuICAgIH1cbiAgfVxuICBpZiAoZmlyc3QpIHtcbiAgICBzZXQucHVzaChbZmlyc3QsIG51bGxdKVxuICB9XG5cbiAgY29uc3QgcmFuZ2VzID0gW11cbiAgZm9yIChjb25zdCBbbWluLCBtYXhdIG9mIHNldCkge1xuICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgcmFuZ2VzLnB1c2gobWluKVxuICAgIH0gZWxzZSBpZiAoIW1heCAmJiBtaW4gPT09IHZbMF0pIHtcbiAgICAgIHJhbmdlcy5wdXNoKCcqJylcbiAgICB9IGVsc2UgaWYgKCFtYXgpIHtcbiAgICAgIHJhbmdlcy5wdXNoKGA+PSR7bWlufWApXG4gICAgfSBlbHNlIGlmIChtaW4gPT09IHZbMF0pIHtcbiAgICAgIHJhbmdlcy5wdXNoKGA8PSR7bWF4fWApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlcy5wdXNoKGAke21pbn0gLSAke21heH1gKVxuICAgIH1cbiAgfVxuICBjb25zdCBzaW1wbGlmaWVkID0gcmFuZ2VzLmpvaW4oJyB8fCAnKVxuICBjb25zdCBvcmlnaW5hbCA9IHR5cGVvZiByYW5nZS5yYXcgPT09ICdzdHJpbmcnID8gcmFuZ2UucmF3IDogU3RyaW5nKHJhbmdlKVxuICByZXR1cm4gc2ltcGxpZmllZC5sZW5ndGggPCBvcmlnaW5hbC5sZW5ndGggPyBzaW1wbGlmaWVkIDogcmFuZ2Vcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlLmpzJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3IuanMnKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcblxuLy8gQ29tcGxleCByYW5nZSBgcjEgfHwgcjIgfHwgLi4uYCBpcyBhIHN1YnNldCBvZiBgUjEgfHwgUjIgfHwgLi4uYCBpZmY6XG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIGlzIGEgbnVsbCBzZXQsIE9SXG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIHdoaWNoIGlzIG5vdCBhIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mXG4vLyAgIHNvbWUgYFIxLCBSMiwgLi4uYFxuLy9cbi8vIFNpbXBsZSByYW5nZSBgYzEgYzIgLi4uYCBpcyBhIHN1YnNldCBvZiBzaW1wbGUgcmFuZ2UgYEMxIEMyIC4uLmAgaWZmOlxuLy8gLSBJZiBjIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gSWYgQyBpcyBvbmx5IHRoZSBBTlkgY29tcGFyYXRvciwgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIGlmIGluIHByZXJlbGVhc2UgbW9kZSwgcmV0dXJuIGZhbHNlXG4vLyAgIC0gZWxzZSByZXBsYWNlIGMgd2l0aCBgWz49MC4wLjBdYFxuLy8gLSBJZiBDIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gaWYgaW4gcHJlcmVsZWFzZSBtb2RlLCByZXR1cm4gdHJ1ZVxuLy8gICAtIGVsc2UgcmVwbGFjZSBDIHdpdGggYFs+PTAuMC4wXWBcbi8vIC0gTGV0IEVRIGJlIHRoZSBzZXQgb2YgPSBjb21wYXJhdG9ycyBpbiBjXG4vLyAtIElmIEVRIGlzIG1vcmUgdGhhbiBvbmUsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vIC0gTGV0IEdUIGJlIHRoZSBoaWdoZXN0ID4gb3IgPj0gY29tcGFyYXRvciBpbiBjXG4vLyAtIExldCBMVCBiZSB0aGUgbG93ZXN0IDwgb3IgPD0gY29tcGFyYXRvciBpbiBjXG4vLyAtIElmIEdUIGFuZCBMVCwgYW5kIEdULnNlbXZlciA+IExULnNlbXZlciwgcmV0dXJuIHRydWUgKG51bGwgc2V0KVxuLy8gLSBJZiBhbnkgQyBpcyBhID0gcmFuZ2UsIGFuZCBHVCBvciBMVCBhcmUgc2V0LCByZXR1cm4gZmFsc2Vcbi8vIC0gSWYgRVFcbi8vICAgLSBJZiBHVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgR1QsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBMVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgTFQsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBFUSBzYXRpc2ZpZXMgZXZlcnkgQywgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIHJldHVybiBmYWxzZVxuLy8gLSBJZiBHVFxuLy8gICAtIElmIEdULnNlbXZlciBpcyBsb3dlciB0aGFuIGFueSA+IG9yID49IGNvbXAgaW4gQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1QgaXMgPj0sIGFuZCBHVC5zZW12ZXIgZG9lcyBub3Qgc2F0aXNmeSBldmVyeSBDLCByZXR1cm4gZmFsc2Vcbi8vICAgLSBJZiBHVC5zZW12ZXIgaGFzIGEgcHJlcmVsZWFzZSwgYW5kIG5vdCBpbiBwcmVyZWxlYXNlIG1vZGVcbi8vICAgICAtIElmIG5vIEMgaGFzIGEgcHJlcmVsZWFzZSBhbmQgdGhlIEdULnNlbXZlciB0dXBsZSwgcmV0dXJuIGZhbHNlXG4vLyAtIElmIExUXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGlzIGdyZWF0ZXIgdGhhbiBhbnkgPCBvciA8PSBjb21wIGluIEMsIHJldHVybiBmYWxzZVxuLy8gICAtIElmIExUIGlzIDw9LCBhbmQgTFQuc2VtdmVyIGRvZXMgbm90IHNhdGlzZnkgZXZlcnkgQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGhhcyBhIHByZXJlbGVhc2UsIGFuZCBub3QgaW4gcHJlcmVsZWFzZSBtb2RlXG4vLyAgICAgLSBJZiBubyBDIGhhcyBhIHByZXJlbGVhc2UgYW5kIHRoZSBMVC5zZW12ZXIgdHVwbGUsIHJldHVybiBmYWxzZVxuLy8gLSBFbHNlIHJldHVybiB0cnVlXG5cbmNvbnN0IHN1YnNldCA9IChzdWIsIGRvbSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChzdWIgPT09IGRvbSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBzdWIgPSBuZXcgUmFuZ2Uoc3ViLCBvcHRpb25zKVxuICBkb20gPSBuZXcgUmFuZ2UoZG9tLCBvcHRpb25zKVxuICBsZXQgc2F3Tm9uTnVsbCA9IGZhbHNlXG5cbiAgT1VURVI6IGZvciAoY29uc3Qgc2ltcGxlU3ViIG9mIHN1Yi5zZXQpIHtcbiAgICBmb3IgKGNvbnN0IHNpbXBsZURvbSBvZiBkb20uc2V0KSB7XG4gICAgICBjb25zdCBpc1N1YiA9IHNpbXBsZVN1YnNldChzaW1wbGVTdWIsIHNpbXBsZURvbSwgb3B0aW9ucylcbiAgICAgIHNhd05vbk51bGwgPSBzYXdOb25OdWxsIHx8IGlzU3ViICE9PSBudWxsXG4gICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgY29udGludWUgT1VURVJcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mIGV2ZXJ5dGhpbmcsIGJ1dCBudWxsIHNpbXBsZSByYW5nZXMgaW5cbiAgICAvLyBhIGNvbXBsZXggcmFuZ2Ugc2hvdWxkIGJlIGlnbm9yZWQuICBzbyBpZiB3ZSBzYXcgYSBub24tbnVsbCByYW5nZSxcbiAgICAvLyB0aGVuIHdlIGtub3cgdGhpcyBpc24ndCBhIHN1YnNldCwgYnV0IGlmIEVWRVJZIHNpbXBsZSByYW5nZSB3YXMgbnVsbCxcbiAgICAvLyB0aGVuIGl0IGlzIGEgc3Vic2V0LlxuICAgIGlmIChzYXdOb25OdWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgbWluaW11bVZlcnNpb25XaXRoUHJlUmVsZWFzZSA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMC0wJyldXG5jb25zdCBtaW5pbXVtVmVyc2lvbiA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXVxuXG5jb25zdCBzaW1wbGVTdWJzZXQgPSAoc3ViLCBkb20sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN1YiA9PT0gZG9tKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdWIubGVuZ3RoID09PSAxICYmIHN1YlswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgIGlmIChkb20ubGVuZ3RoID09PSAxICYmIGRvbVswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgIHN1YiA9IG1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBpZiAoZG9tLmxlbmd0aCA9PT0gMSAmJiBkb21bMF0uc2VtdmVyID09PSBBTlkpIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBjb25zdCBlcVNldCA9IG5ldyBTZXQoKVxuICBsZXQgZ3QsIGx0XG4gIGZvciAoY29uc3QgYyBvZiBzdWIpIHtcbiAgICBpZiAoYy5vcGVyYXRvciA9PT0gJz4nIHx8IGMub3BlcmF0b3IgPT09ICc+PScpIHtcbiAgICAgIGd0ID0gaGlnaGVyR1QoZ3QsIGMsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgbHQgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBlcVNldC5hZGQoYy5zZW12ZXIpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVxU2V0LnNpemUgPiAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBndGx0Q29tcFxuICBpZiAoZ3QgJiYgbHQpIHtcbiAgICBndGx0Q29tcCA9IGNvbXBhcmUoZ3Quc2VtdmVyLCBsdC5zZW12ZXIsIG9wdGlvbnMpXG4gICAgaWYgKGd0bHRDb21wID4gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGd0bHRDb21wID09PSAwICYmIChndC5vcGVyYXRvciAhPT0gJz49JyB8fCBsdC5vcGVyYXRvciAhPT0gJzw9JykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gd2lsbCBpdGVyYXRlIG9uZSBvciB6ZXJvIHRpbWVzXG4gIGZvciAoY29uc3QgZXEgb2YgZXFTZXQpIHtcbiAgICBpZiAoZ3QgJiYgIXNhdGlzZmllcyhlcSwgU3RyaW5nKGd0KSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKGx0ICYmICFzYXRpc2ZpZXMoZXEsIFN0cmluZyhsdCksIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICAgIGlmICghc2F0aXNmaWVzKGVxLCBTdHJpbmcoYyksIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgaGlnaGVyLCBsb3dlclxuICBsZXQgaGFzRG9tTFQsIGhhc0RvbUdUXG4gIC8vIGlmIHRoZSBzdWJzZXQgaGFzIGEgcHJlcmVsZWFzZSwgd2UgbmVlZCBhIGNvbXBhcmF0b3IgaW4gdGhlIHN1cGVyc2V0XG4gIC8vIHdpdGggdGhlIHNhbWUgdHVwbGUgYW5kIGEgcHJlcmVsZWFzZSwgb3IgaXQncyBub3QgYSBzdWJzZXRcbiAgbGV0IG5lZWREb21MVFByZSA9IGx0ICYmXG4gICAgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICBsdC5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPyBsdC5zZW12ZXIgOiBmYWxzZVxuICBsZXQgbmVlZERvbUdUUHJlID0gZ3QgJiZcbiAgICAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJlxuICAgIGd0LnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA/IGd0LnNlbXZlciA6IGZhbHNlXG4gIC8vIGV4Y2VwdGlvbjogPDEuMi4zLTAgaXMgdGhlIHNhbWUgYXMgPDEuMi4zXG4gIGlmIChuZWVkRG9tTFRQcmUgJiYgbmVlZERvbUxUUHJlLnByZXJlbGVhc2UubGVuZ3RoID09PSAxICYmXG4gICAgICBsdC5vcGVyYXRvciA9PT0gJzwnICYmIG5lZWREb21MVFByZS5wcmVyZWxlYXNlWzBdID09PSAwKSB7XG4gICAgbmVlZERvbUxUUHJlID0gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICBoYXNEb21HVCA9IGhhc0RvbUdUIHx8IGMub3BlcmF0b3IgPT09ICc+JyB8fCBjLm9wZXJhdG9yID09PSAnPj0nXG4gICAgaGFzRG9tTFQgPSBoYXNEb21MVCB8fCBjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9J1xuICAgIGlmIChndCkge1xuICAgICAgaWYgKG5lZWREb21HVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21HVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21HVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21HVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21HVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPicgfHwgYy5vcGVyYXRvciA9PT0gJz49Jykge1xuICAgICAgICBoaWdoZXIgPSBoaWdoZXJHVChndCwgYywgb3B0aW9ucylcbiAgICAgICAgaWYgKGhpZ2hlciA9PT0gYyAmJiBoaWdoZXIgIT09IGd0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3Qub3BlcmF0b3IgPT09ICc+PScgJiYgIWMudGVzdChndC5zZW12ZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobHQpIHtcbiAgICAgIGlmIChuZWVkRG9tTFRQcmUpIHtcbiAgICAgICAgaWYgKGMuc2VtdmVyLnByZXJlbGVhc2UgJiYgYy5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLm1ham9yID09PSBuZWVkRG9tTFRQcmUubWFqb3IgJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLm1pbm9yID09PSBuZWVkRG9tTFRQcmUubWlub3IgJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLnBhdGNoID09PSBuZWVkRG9tTFRQcmUucGF0Y2gpIHtcbiAgICAgICAgICBuZWVkRG9tTFRQcmUgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYy5vcGVyYXRvciA9PT0gJzwnIHx8IGMub3BlcmF0b3IgPT09ICc8PScpIHtcbiAgICAgICAgbG93ZXIgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgICAgICBpZiAobG93ZXIgPT09IGMgJiYgbG93ZXIgIT09IGx0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobHQub3BlcmF0b3IgPT09ICc8PScgJiYgIWMudGVzdChsdC5zZW12ZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWMub3BlcmF0b3IgJiYgKGx0IHx8IGd0KSAmJiBndGx0Q29tcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlcmUgd2FzIGEgPCBvciA+LCBhbmQgbm90aGluZyBpbiB0aGUgZG9tLCB0aGVuIG11c3QgYmUgZmFsc2VcbiAgLy8gVU5MRVNTIGl0IHdhcyBsaW1pdGVkIGJ5IGFub3RoZXIgcmFuZ2UgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi5cbiAgLy8gRWcsID4xLjAuMCA8MS4wLjEgaXMgc3RpbGwgYSBzdWJzZXQgb2YgPDIuMC4wXG4gIGlmIChndCAmJiBoYXNEb21MVCAmJiAhbHQgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChsdCAmJiBoYXNEb21HVCAmJiAhZ3QgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIHdlIG5lZWRlZCBhIHByZXJlbGVhc2UgcmFuZ2UgaW4gYSBzcGVjaWZpYyB0dXBsZSwgYnV0IGRpZG4ndCBnZXQgb25lXG4gIC8vIHRoZW4gdGhpcyBpc24ndCBhIHN1YnNldC4gIGVnID49MS4yLjMtcHJlIGlzIG5vdCBhIHN1YnNldCBvZiA+PTEuMC4wLFxuICAvLyBiZWNhdXNlIGl0IGluY2x1ZGVzIHByZXJlbGVhc2VzIGluIHRoZSAxLjIuMyB0dXBsZVxuICBpZiAobmVlZERvbUdUUHJlIHx8IG5lZWREb21MVFByZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gPj0xLjIuMyBpcyBsb3dlciB0aGFuID4xLjIuM1xuY29uc3QgaGlnaGVyR1QgPSAoYSwgYiwgb3B0aW9ucykgPT4ge1xuICBpZiAoIWEpIHtcbiAgICByZXR1cm4gYlxuICB9XG4gIGNvbnN0IGNvbXAgPSBjb21wYXJlKGEuc2VtdmVyLCBiLnNlbXZlciwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXAgPiAwID8gYVxuICAgIDogY29tcCA8IDAgPyBiXG4gICAgOiBiLm9wZXJhdG9yID09PSAnPicgJiYgYS5vcGVyYXRvciA9PT0gJz49JyA/IGJcbiAgICA6IGFcbn1cblxuLy8gPD0xLjIuMyBpcyBoaWdoZXIgdGhhbiA8MS4yLjNcbmNvbnN0IGxvd2VyTFQgPSAoYSwgYiwgb3B0aW9ucykgPT4ge1xuICBpZiAoIWEpIHtcbiAgICByZXR1cm4gYlxuICB9XG4gIGNvbnN0IGNvbXAgPSBjb21wYXJlKGEuc2VtdmVyLCBiLnNlbXZlciwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXAgPCAwID8gYVxuICAgIDogY29tcCA+IDAgPyBiXG4gICAgOiBiLm9wZXJhdG9yID09PSAnPCcgJiYgYS5vcGVyYXRvciA9PT0gJzw9JyA/IGJcbiAgICA6IGFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdWJzZXRcbiIsICIndXNlIHN0cmljdCdcblxuLy8ganVzdCBwcmUtbG9hZCBhbGwgdGhlIHN0dWZmIHRoYXQgaW5kZXguanMgbGF6aWx5IGV4cG9ydHNcbmNvbnN0IGludGVybmFsUmUgPSByZXF1aXJlKCcuL2ludGVybmFsL3JlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29uc3RhbnRzJylcbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgaWRlbnRpZmllcnMgPSByZXF1aXJlKCcuL2ludGVybmFsL2lkZW50aWZpZXJzJylcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcGFyc2UnKVxuY29uc3QgdmFsaWQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy92YWxpZCcpXG5jb25zdCBjbGVhbiA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NsZWFuJylcbmNvbnN0IGluYyA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2luYycpXG5jb25zdCBkaWZmID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZGlmZicpXG5jb25zdCBtYWpvciA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL21ham9yJylcbmNvbnN0IG1pbm9yID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbWlub3InKVxuY29uc3QgcGF0Y2ggPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wYXRjaCcpXG5jb25zdCBwcmVyZWxlYXNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcHJlcmVsZWFzZScpXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZScpXG5jb25zdCByY29tcGFyZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jjb21wYXJlJylcbmNvbnN0IGNvbXBhcmVMb29zZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NvbXBhcmUtbG9vc2UnKVxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc29ydCcpXG5jb25zdCByc29ydCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jzb3J0JylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZ3QnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBlcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2VxJylcbmNvbnN0IG5lcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL25lcScpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9ndGUnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGNtcCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NtcCcpXG5jb25zdCBjb2VyY2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb2VyY2UnKVxuY29uc3QgdHJ1bmNhdGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy90cnVuY2F0ZScpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jbGFzc2VzL2NvbXBhcmF0b3InKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc2F0aXNmaWVzJylcbmNvbnN0IHRvQ29tcGFyYXRvcnMgPSByZXF1aXJlKCcuL3Jhbmdlcy90by1jb21wYXJhdG9ycycpXG5jb25zdCBtYXhTYXRpc2Z5aW5nID0gcmVxdWlyZSgnLi9yYW5nZXMvbWF4LXNhdGlzZnlpbmcnKVxuY29uc3QgbWluU2F0aXNmeWluZyA9IHJlcXVpcmUoJy4vcmFuZ2VzL21pbi1zYXRpc2Z5aW5nJylcbmNvbnN0IG1pblZlcnNpb24gPSByZXF1aXJlKCcuL3Jhbmdlcy9taW4tdmVyc2lvbicpXG5jb25zdCB2YWxpZFJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvdmFsaWQnKVxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL291dHNpZGUnKVxuY29uc3QgZ3RyID0gcmVxdWlyZSgnLi9yYW5nZXMvZ3RyJylcbmNvbnN0IGx0ciA9IHJlcXVpcmUoJy4vcmFuZ2VzL2x0cicpXG5jb25zdCBpbnRlcnNlY3RzID0gcmVxdWlyZSgnLi9yYW5nZXMvaW50ZXJzZWN0cycpXG5jb25zdCBzaW1wbGlmeVJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvc2ltcGxpZnknKVxuY29uc3Qgc3Vic2V0ID0gcmVxdWlyZSgnLi9yYW5nZXMvc3Vic2V0Jylcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZSxcbiAgdmFsaWQsXG4gIGNsZWFuLFxuICBpbmMsXG4gIGRpZmYsXG4gIG1ham9yLFxuICBtaW5vcixcbiAgcGF0Y2gsXG4gIHByZXJlbGVhc2UsXG4gIGNvbXBhcmUsXG4gIHJjb21wYXJlLFxuICBjb21wYXJlTG9vc2UsXG4gIGNvbXBhcmVCdWlsZCxcbiAgc29ydCxcbiAgcnNvcnQsXG4gIGd0LFxuICBsdCxcbiAgZXEsXG4gIG5lcSxcbiAgZ3RlLFxuICBsdGUsXG4gIGNtcCxcbiAgY29lcmNlLFxuICB0cnVuY2F0ZSxcbiAgQ29tcGFyYXRvcixcbiAgUmFuZ2UsXG4gIHNhdGlzZmllcyxcbiAgdG9Db21wYXJhdG9ycyxcbiAgbWF4U2F0aXNmeWluZyxcbiAgbWluU2F0aXNmeWluZyxcbiAgbWluVmVyc2lvbixcbiAgdmFsaWRSYW5nZSxcbiAgb3V0c2lkZSxcbiAgZ3RyLFxuICBsdHIsXG4gIGludGVyc2VjdHMsXG4gIHNpbXBsaWZ5UmFuZ2UsXG4gIHN1YnNldCxcbiAgU2VtVmVyLFxuICByZTogaW50ZXJuYWxSZS5yZSxcbiAgc3JjOiBpbnRlcm5hbFJlLnNyYyxcbiAgdG9rZW5zOiBpbnRlcm5hbFJlLnQsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT046IGNvbnN0YW50cy5TRU1WRVJfU1BFQ19WRVJTSU9OLFxuICBSRUxFQVNFX1RZUEVTOiBjb25zdGFudHMuUkVMRUFTRV9UWVBFUyxcbiAgY29tcGFyZUlkZW50aWZpZXJzOiBpZGVudGlmaWVycy5jb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnM6IGlkZW50aWZpZXJzLnJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjYgVGhlIHpiIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbiAqL1xuXG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ0BhY3Rpb25zL2NvcmUnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ0BhY3Rpb25zL2V4ZWMnO1xuaW1wb3J0IHsgZ2V0T2N0b2tpdCB9IGZyb20gJ0BhY3Rpb25zL2dpdGh1Yic7XG5pbXBvcnQgeyBkb3dubG9hZFRvb2wsIGV4dHJhY3RUYXIsIGV4dHJhY3RaaXAgfSBmcm9tICdAYWN0aW9ucy90b29sLWNhY2hlJztcblxuaW50ZXJmYWNlIFJlbGVhc2Uge1xuICB0YWdOYW1lOiBzdHJpbmc7XG4gIHJlbGVhc2VBc3NldHM6IFJlbGVhc2VBc3NldENvbm5lY3Rpb247XG59XG5cbmludGVyZmFjZSBSZWxlYXNlQXNzZXRDb25uZWN0aW9uIHtcbiAgbm9kZXM6IFJlbGVhc2VBc3NldFtdO1xufVxuXG5pbnRlcmZhY2UgUmVsZWFzZUFzc2V0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkb3dubG9hZFVybDogc3RyaW5nO1xufVxuXG5jb25zdCByZWxlYXNlRnJhZ21lbnQgPVxuICBgXG4gICAgZnJhZ21lbnQgcmVsZWFzZUZpZWxkcyBvbiBSZWxlYXNlIHtcbiAgICAgIHRhZ05hbWVcbiAgICAgIHJlbGVhc2VBc3NldHMoZmlyc3Q6IDUwKSB7XG4gICAgICAgIG5vZGVzIHtcbiAgICAgICAgICBuYW1lXG4gICAgICAgICAgZG93bmxvYWRVcmxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgYDtcblxuKGFzeW5jICgpID0+IHtcbiAgY29uc3Qgb2N0b2tpdCA9IGdldE9jdG9raXQoJycpO1xuXG4gIGNvbnN0IHZlcnNpb24gPSBjb3JlLmdldElucHV0KCd6Yi12ZXJzaW9uJyk7XG4gIGNvbnN0IGdyYXBocWxSZXF1ZXN0ID1cbiAgICB2ZXJzaW9uID9cbiAgICB7XG4gICAgICBxdWVyeTpcbiAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5IHJlbGVhc2VBc3NldHNGb3JWZXJzaW9uKCR0YWdOYW1lOiBTdHJpbmchKSB7XG4gICAgICAgICAgICByZXBvc2l0b3J5KG93bmVyOiBcIjI1NmxpZ2h0c1wiLCByZXBvOiBcInpiXCIpIHtcbiAgICAgICAgICAgICAgcmVsZWFzZSh0YWdOYW1lOiAkdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIC4uLnJlbGVhc2VGaWVsZHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICR7cmVsZWFzZUZyYWdtZW50fVxuICAgICAgICBgLFxuICAgICAgdGFnTmFtZTogJ3YnICsgdmVyc2lvbixcbiAgICB9IDpcbiAgICB7XG4gICAgICBxdWVyeTpcbiAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5IHJlbGVhc2VBc3NldHNGb3JMYXRlc3Qge1xuICAgICAgICAgICAgcmVwb3NpdG9yeShvd25lcjogXCIyNTZsaWdodHNcIiwgcmVwbzogXCJ6YlwiKSB7XG4gICAgICAgICAgICAgIHJlbGVhc2U6IGxhdGVzdFJlbGVhc2Uge1xuICAgICAgICAgICAgICAgIC4uLnJlbGVhc2VGaWVsZHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICR7cmVsZWFzZUZyYWdtZW50fVxuICAgICAgICBgLFxuICAgIH07XG4gIGNvbnN0IGdyYXBocWxSZXNwb25zZSA9IGF3YWl0IG9jdG9raXQuZ3JhcGhxbDx7XG4gICAgcmVwb3NpdG9yeToge1xuICAgICAgcmVsZWFzZTogUmVsZWFzZSB8IG51bGw7XG4gICAgfVxuICB9PihncmFwaHFsUmVxdWVzdCk7XG4gIGNvbnN0IHJlbGVhc2UgPSBncmFwaHFsUmVzcG9uc2UucmVwb3NpdG9yeS5yZWxlYXNlO1xuICBjb25zdCByZWxlYXNlQXNzZXRzID0gcmVsZWFzZT8ucmVsZWFzZUFzc2V0cz8ubm9kZXMgfHwgW107XG5cbiAgbGV0IGFzc2V0OiBSZWxlYXNlQXNzZXQgfCB1bmRlZmluZWQ7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyAmJiBwcm9jZXNzLmFyY2ggPT09ICdhcm02NCcpIHtcbiAgICBhc3NldCA9IHJlbGVhc2VBc3NldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUuaW5jbHVkZXMoJ2FhcmNoNjQtYXBwbGUtbWFjb3MnKSlcbiAgfSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnICYmIHByb2Nlc3MuYXJjaCA9PT0gJ3g2NCcpIHtcbiAgICBhc3NldCA9IHJlbGVhc2VBc3NldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUuaW5jbHVkZXMoJ3g4Nl82NC11bmtub3duLWxpbnV4JykpXG4gIH1cbiAgaWYgKCFhc3NldCkge1xuICAgIGNvcmUuc2V0RmFpbGVkKGBObyBkb3dubG9hZCBmb3VuZCBmb3IgJHtwcm9jZXNzLmFyY2h9LSR7cHJvY2Vzcy5wbGF0Zm9ybX0gdmVyc2lvbiAke3JlbGVhc2U/LnRhZ05hbWUgfHwgdmVyc2lvbn1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB6YkFyY2hpdmVQYXRoID0gYXdhaXQgZG93bmxvYWRUb29sKGFzc2V0LmRvd25sb2FkVXJsKTtcbiAgY29uc3QgemJFeHRyYWN0ZWRGb2xkZXJQYXRoID0gYXNzZXQuZG93bmxvYWRVcmwuZW5kc1dpdGgoJy56aXAnKSA/XG4gICAgYXdhaXQgZXh0cmFjdFppcCh6YkFyY2hpdmVQYXRoKSA6XG4gICAgYXdhaXQgZXh0cmFjdFRhcih6YkFyY2hpdmVQYXRoKTtcbiAgYXdhaXQgZXhlYyhwYXRoLmpvaW4oemJFeHRyYWN0ZWRGb2xkZXJQYXRoLCAnaW5zdGFsbCcpLCBbJy0tc2luZ2xlLXVzZXInLCAnLS1uby1zeXN0ZW1kJywgJy0tbm8tbGF1bmNoZCddKTtcbn0pKCk7XG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke1xuICAgICAgcHJvY2Vzcy5hcmNoXG4gICAgfSlgO1xuICB9XG5cbiAgcmV0dXJuIFwiPGVudmlyb25tZW50IHVuZGV0ZWN0YWJsZT5cIjtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKChjYWxsYmFjaywgbmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKChtZXRob2QsIHJlZ2lzdGVyZWQpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKHN0YXRlLCBraW5kLCBuYW1lLCBob29rKSB7XG4gIGNvbnN0IG9yaWcgPSBob29rO1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgc3RhdGUucmVnaXN0cnlbbmFtZV0gPSBbXTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImJlZm9yZVwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihvcmlnLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYWZ0ZXJcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbigocmVzdWx0XykgPT4ge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF87XG4gICAgICAgICAgcmV0dXJuIG9yaWcocmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiBvcmlnKGVycm9yLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnB1c2goe1xuICAgIGhvb2s6IGhvb2ssXG4gICAgb3JpZzogb3JpZyxcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gc3RhdGUucmVnaXN0cnlbbmFtZV1cbiAgICAubWFwKChyZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5vcmlnO1xuICAgIH0pXG4gICAgLmluZGV4T2YobWV0aG9kKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9saWIvcmVnaXN0ZXIuanNcIjtcbmltcG9ydCB7IGFkZEhvb2sgfSBmcm9tIFwiLi9saWIvYWRkLmpzXCI7XG5pbXBvcnQgeyByZW1vdmVIb29rIH0gZnJvbSBcIi4vbGliL3JlbW92ZS5qc1wiO1xuXG4vLyBiaW5kIHdpdGggYXJyYXkgb2YgYXJndW1lbnRzOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjE3OTI5MTNcbmNvbnN0IGJpbmQgPSBGdW5jdGlvbi5iaW5kO1xuY29uc3QgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgY29uc3QgcmVtb3ZlSG9va1JlZiA9IGJpbmRhYmxlKHJlbW92ZUhvb2ssIG51bGwpLmFwcGx5KFxuICAgIG51bGwsXG4gICAgbmFtZSA/IFtzdGF0ZSwgbmFtZV0gOiBbc3RhdGVdXG4gICk7XG4gIGhvb2suYXBpID0geyByZW1vdmU6IHJlbW92ZUhvb2tSZWYgfTtcbiAgaG9vay5yZW1vdmUgPSByZW1vdmVIb29rUmVmO1xuICBbXCJiZWZvcmVcIiwgXCJlcnJvclwiLCBcImFmdGVyXCIsIFwid3JhcFwiXS5mb3JFYWNoKChraW5kKSA9PiB7XG4gICAgY29uc3QgYXJncyA9IG5hbWUgPyBbc3RhdGUsIGtpbmQsIG5hbWVdIDogW3N0YXRlLCBraW5kXTtcbiAgICBob29rW2tpbmRdID0gaG9vay5hcGlba2luZF0gPSBiaW5kYWJsZShhZGRIb29rLCBudWxsKS5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFNpbmd1bGFyKCkge1xuICBjb25zdCBzaW5ndWxhckhvb2tOYW1lID0gU3ltYm9sKFwiU2luZ3VsYXJcIik7XG4gIGNvbnN0IHNpbmd1bGFySG9va1N0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcbiAgY29uc3Qgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24oKSB7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcblxuICBjb25zdCBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IFNpbmd1bGFyLCBDb2xsZWN0aW9uIH07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbnZhciBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIlxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9sb3dlcmNhc2Uta2V5cy5qc1xuZnVuY3Rpb24gbG93ZXJjYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbWVyZ2UtZGVlcC5qc1xuZnVuY3Rpb24gbWVyZ2VEZWVwKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9uc1trZXldKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGRlZmF1bHRzKSkgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICAgIGVsc2UgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9yZW1vdmUtdW5kZWZpbmVkLXByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9tZXJnZS5qc1xuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7IG1ldGhvZCwgdXJsIH0gOiB7IHVybDogbWV0aG9kIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH1cbiAgb3B0aW9ucy5oZWFkZXJzID0gbG93ZXJjYXNlS2V5cyhvcHRpb25zLmhlYWRlcnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMuaGVhZGVycyk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdHMgfHwge30sIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy51cmwgPT09IFwiL2dyYXBocWxcIikge1xuICAgIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKFxuICAgICAgICAocHJldmlldykgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpXG4gICAgICApLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gICAgfVxuICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gKG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzIHx8IFtdKS5tYXAoKHByZXZpZXcpID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnM7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2FkZC1xdWVyeS1wYXJhbWV0ZXJzLmpzXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHJldHVybiB1cmwgKyBzZXBhcmF0b3IgKyBuYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyc1tuYW1lXSl9YDtcbiAgfSkuam9pbihcIiZcIik7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2V4dHJhY3QtdXJsLXZhcmlhYmxlLW5hbWVzLmpzXG52YXIgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXnt9fV0rXFx9L2c7XG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC8oPzpeXFxXKyl8KD86KD88IVxcVylcXFcrJCkvZywgXCJcIikuc3BsaXQoLywvKTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXMubWFwKHJlbW92ZU5vbkNoYXJzKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL29taXQuanNcbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzVG9PbWl0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgX19wcm90b19fOiBudWxsIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICBpZiAoa2V5c1RvT21pdC5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC91cmwtdGVtcGxhdGUuanNcbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24ocGFydCkge1xuICAgIGlmICghLyVbMC05QS1GYS1mXS8udGVzdChwYXJ0KSkge1xuICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KS5yZXBsYWNlKC8lNUIvZywgXCJbXCIpLnJlcGxhY2UoLyU1RC9nLCBcIl1cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24oYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdm9pZCAwICYmIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIGtleSwgbW9kaWZpZXIpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLCByZXN1bHQgPSBbXTtcbiAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC8oPzwhW1xcdy1dKVtcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5leHBvcnQge1xuICBlbmRwb2ludFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IGVuZHBvaW50IH0gZnJvbSBcIkBvY3Rva2l0L2VuZHBvaW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMTAuMC4xMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciBkZWZhdWx0c19kZWZhdWx0ID0ge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSBcImNvbnRlbnQtdHlwZVwiO1xuaW1wb3J0IHsgSlNPTlBhcnNlLCBKU09OU3RyaW5naWZ5IH0gZnJvbSBcImpzb24td2l0aC1iaWdpbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG52YXIgbm9vcCA9ICgpID0+IFwiXCI7XG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoO1xuICBpZiAoIWZldGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJmZXRjaCBpcyBub3Qgc2V0LiBQbGVhc2UgcGFzcyBhIGZldGNoIGltcGxlbWVudGF0aW9uIGFzIG5ldyBPY3Rva2l0KHsgcmVxdWVzdDogeyBmZXRjaCB9fSkuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvb2N0b2tpdC5qcy8jZmV0Y2gtbWlzc2luZ1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5sb2cgfHwgY29uc29sZTtcbiAgY29uc3QgcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ICE9PSBmYWxzZTtcbiAgY29uc3QgYm9keSA9IGlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA/IEpTT05TdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSkgOiByZXF1ZXN0T3B0aW9ucy5ib2R5O1xuICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtcbiAgICAgIG5hbWUsXG4gICAgICBTdHJpbmcodmFsdWUpXG4gICAgXSlcbiAgKTtcbiAgbGV0IGZldGNoUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgZmV0Y2hSZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgICAgbWV0aG9kOiByZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgICBib2R5LFxuICAgICAgcmVkaXJlY3Q6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnJlZGlyZWN0LFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBzaWduYWw6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnNpZ25hbCxcbiAgICAgIC8vIGR1cGxleCBtdXN0IGJlIHNldCBpZiByZXF1ZXN0LmJvZHkgaXMgUmVhZGFibGVTdHJlYW0gb3IgQXN5bmMgSXRlcmFibGVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgICAgLi4ucmVxdWVzdE9wdGlvbnMuYm9keSAmJiB7IGR1cGxleDogXCJoYWxmXCIgfVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxldCBtZXNzYWdlID0gXCJVbmtub3duIEVycm9yXCI7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICBlcnJvci5zdGF0dXMgPSA1MDA7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2UubWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihtZXNzYWdlLCA1MDAsIHtcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gICAgcmVxdWVzdEVycm9yLmNhdXNlID0gZXJyb3I7XG4gICAgdGhyb3cgcmVxdWVzdEVycm9yO1xuICB9XG4gIGNvbnN0IHN0YXR1cyA9IGZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICBjb25zdCB1cmwgPSBmZXRjaFJlc3BvbnNlLnVybDtcbiAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGZldGNoUmVzcG9uc2UuaGVhZGVycykge1xuICAgIHJlc3BvbnNlSGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cbiAgY29uc3Qgb2N0b2tpdFJlc3BvbnNlID0ge1xuICAgIHVybCxcbiAgICBzdGF0dXMsXG4gICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgIGRhdGE6IFwiXCJcbiAgfTtcbiAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiByZXNwb25zZUhlYWRlcnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gcmVzcG9uc2VIZWFkZXJzLmxpbmsgJiYgcmVzcG9uc2VIZWFkZXJzLmxpbmsubWF0Y2goLzwoW148Pl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgbG9nLndhcm4oXG4gICAgICBgW0BvY3Rva2l0L3JlcXVlc3RdIFwiJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cmVxdWVzdE9wdGlvbnMudXJsfVwiIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIG9uICR7cmVzcG9uc2VIZWFkZXJzLnN1bnNldH0ke2RlcHJlY2F0aW9uTGluayA/IGAuIFNlZSAke2RlcHJlY2F0aW9uTGlua31gIDogXCJcIn1gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSAyMDQgfHwgc3RhdHVzID09PSAyMDUpIHtcbiAgICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xuICB9XG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihmZXRjaFJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMzA0KSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihcIk5vdCBtb2RpZmllZFwiLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcih0b0Vycm9yTWVzc2FnZShvY3Rva2l0UmVzcG9uc2UuZGF0YSksIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPyBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSkgOiBmZXRjaFJlc3BvbnNlLmJvZHk7XG4gIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKCFjb250ZW50VHlwZSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkuY2F0Y2gobm9vcCk7XG4gIH1cbiAgY29uc3QgbWltZXR5cGUgPSBwYXJzZShjb250ZW50VHlwZSk7XG4gIGlmIChpc0pTT05SZXNwb25zZShtaW1ldHlwZSkpIHtcbiAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICByZXR1cm4gSlNPTlBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbWV0eXBlLnR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpIHx8IG1pbWV0eXBlLnBhcmFtZXRlcnMuY2hhcnNldD8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaChub29wKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS5jYXRjaChcbiAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xuICAgICAgKCkgPT4gbmV3IEFycmF5QnVmZmVyKDApXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNKU09OUmVzcG9uc2UobWltZXR5cGUpIHtcbiAgcmV0dXJuIG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiIHx8IG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vc2NpbStqc29uXCI7XG59XG5mdW5jdGlvbiB0b0Vycm9yTWVzc2FnZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gXCJVbmtub3duIGVycm9yXCI7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIGRhdGEgIT09IG51bGwgJiYgXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGNvbnN0IG9iamVjdERhdGEgPSBkYXRhO1xuICAgIGNvbnN0IHN1ZmZpeCA9IFwiZG9jdW1lbnRhdGlvbl91cmxcIiBpbiBvYmplY3REYXRhID8gYCAtICR7b2JqZWN0RGF0YS5kb2N1bWVudGF0aW9uX3VybH1gIDogXCJcIjtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmplY3REYXRhLmVycm9ycykgPyBgJHtvYmplY3REYXRhLm1lc3NhZ2V9OiAke29iamVjdERhdGEuZXJyb3JzLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gIDogYCR7b2JqZWN0RGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LCBkZWZhdWx0c19kZWZhdWx0KTtcbmV4cG9ydCB7XG4gIHJlcXVlc3Rcbn07XG4vKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cbi8qIHY4IGlnbm9yZSBlbHNlIC0tIEBwcmVzZXJ2ZSAqL1xuIiwgImNvbnN0IGludFJlZ2V4ID0gL14tP1xcZCskLztcbmNvbnN0IG5vaXNlVmFsdWUgPSAvXi0/XFxkK24rJC87IC8vIE5vaXNlIC0gc3RyaW5ncyB0aGF0IG1hdGNoIHRoZSBjdXN0b20gZm9ybWF0IGJlZm9yZSBiZWluZyBjb252ZXJ0ZWQgdG8gaXRcbmNvbnN0IG9yaWdpbmFsU3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnk7XG5jb25zdCBvcmlnaW5hbFBhcnNlID0gSlNPTi5wYXJzZTtcbmNvbnN0IGN1c3RvbUZvcm1hdCA9IC9eLT9cXGQrbiQvO1xuXG5jb25zdCBiaWdJbnRzU3RyaW5naWZ5ID0gLyhbXFxbOl0pP1wiKC0/XFxkKyluXCIoJHxcXHMqWyxcXH1cXF1dKS9nO1xuY29uc3Qgbm9pc2VTdHJpbmdpZnkgPSAvKFtcXFs6XSk/KFwiLT9cXGQrbispbihcIiR8XCJcXHMqWyxcXH1cXF1dKS9nO1xuXG4vKipcbiAqIEB0eXBlZGVmIHsodGhpczogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSkgPT4gYW55fSBSZXBsYWNlclxuICogQHR5cGVkZWYgeyhrZXk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSwgY29udGV4dD86IHsgc291cmNlOiBzdHJpbmcgfSkgPT4gYW55fSBSZXZpdmVyXG4gKi9cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyB1bnN0cmluZ2lmaWFibGUgYWNjb3JkaW5nIHRvIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSBydWxlcy5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIGEgZnVuY3Rpb24sIG9yIGEgc3ltYm9sLlxuICovXG5jb25zdCBpc1Vuc3RyaW5naWZpYWJsZSA9ICh2YWwpID0+XG4gIHZhbCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgdmFsID09PSBcInN5bWJvbFwiO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgbmF0aXZlIEpTT04ucmF3SlNPTiBvYmplY3QgKE5vZGUuanMgMjIrKS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIFJhd0pTT04gaW5zdGFuY2UuXG4gKi9cbmNvbnN0IGlzUmF3SlNPTiA9ICh2YWwpID0+XG4gIHZhbCAhPT0gbnVsbCAmJlxuICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiICYmXG4gIHZhbC5jb25zdHJ1Y3RvciAmJlxuICB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gXCJSYXdKU09OXCI7XG5cbi8qKlxuICogSXRlcmF0aXZlbHkgY29udmVydHMgYSBKUyB2YWx1ZSB0byBhIEpTT04gc3RyaW5nLlxuICogVXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gdGhlIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSBoaXRzIHRoZSBNYXhpbXVtIENhbGwgU3RhY2sgc2l6ZS5cbiAqIEZ1bGx5IGNvbXBsaWFudCB3aXRoIEpTT04gZm9ybWF0dGluZyAoc3BhY2UpLCByZXBsYWNlcnMsIGFuZCB0b0pTT04gYmVoYXZpb3JzLlxuICpcbiAqIEBwYXJhbSB7YW55fSByb290VmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeS5cbiAqIEBwYXJhbSB7UmVwbGFjZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbH0gW3JlcGxhY2VyXSBVc2VyJ3MgY3VzdG9tIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IFtzcGFjZVBhcmFtXSBJbmRlbnRhdGlvbiBmb3IgcHJldHR5LXByaW50aW5nLlxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gVGhlIGdlbmVyYXRlZCBKU09OIHN0cmluZy5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5SXRlcmF0aXZlbHkgPSAocm9vdFZhbHVlLCByZXBsYWNlciwgc3BhY2VQYXJhbSkgPT4ge1xuICBsZXQgc3BhY2UgPSBcIlwiO1xuXG4gIGlmICh0eXBlb2Ygc3BhY2VQYXJhbSA9PT0gXCJudW1iZXJcIikge1xuICAgIHNwYWNlID0gXCIgXCIucmVwZWF0KE1hdGgubWluKDEwLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHNwYWNlUGFyYW0pKSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZVBhcmFtID09PSBcInN0cmluZ1wiKSB7XG4gICAgc3BhY2UgPSBzcGFjZVBhcmFtLnNsaWNlKDAsIDEwKTtcbiAgfVxuXG4gIGNvbnN0IGlzRnVuY3Rpb25SZXBsYWNlciA9IHR5cGVvZiByZXBsYWNlciA9PT0gXCJmdW5jdGlvblwiO1xuICBjb25zdCBwcm9wZXJ0eUxpc3QgPSBBcnJheS5pc0FycmF5KHJlcGxhY2VyKVxuICAgID8gbmV3IFNldChyZXBsYWNlci5tYXAoU3RyaW5nKSlcbiAgICA6IG51bGw7XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgdmFsdWUgZm9yIHN0cmluZ2lmaWNhdGlvbiBieSByZXNvbHZpbmcgdG9KU09OLCBoYW5kbGluZyBCaWdJbnRzLFxuICAgKiBhcHBseWluZyBjdXN0b20gcmVwbGFjZXJzLCBhbmQgdW53cmFwcGluZyBwcmltaXRpdmUgb2JqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R8QXJyYXl9IHBhcmVudCBUaGUgcGFyZW50IG9iamVjdCBvciBhcnJheSBob2xkaW5nIHRoZSB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgVGhlIHJhdyB2YWx1ZSB0byBwcm9jZXNzLlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgcHJvY2Vzc2VkIHZhbHVlIHJlYWR5IGZvciBzdHJpbmdpZmljYXRpb24uXG4gICAqL1xuICBjb25zdCBwcmVwYXJlVmFsID0gKHBhcmVudCwga2V5LCB2YWwpID0+IHtcbiAgICBjb25zdCBpc09iamVjdCA9IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiO1xuICAgIGNvbnN0IGhhc1RvSlNPTiA9IGlzT2JqZWN0ICYmIHR5cGVvZiB2YWwudG9KU09OID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICBpZiAoaGFzVG9KU09OKSB7XG4gICAgICB2YWwgPSB2YWwudG9KU09OKGtleSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOb2lzZSA9IHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgJiYgbm9pc2VWYWx1ZS50ZXN0KHZhbCk7XG5cbiAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIHZhbCArIFwiblwiO1xuXG4gICAgY29uc3QgaXNCaWdJbnQgPSB0eXBlb2YgdmFsID09PSBcImJpZ2ludFwiO1xuXG4gICAgaWYgKGlzQmlnSW50KSB7XG4gICAgICBjb25zdCBzdXBwb3J0c1Jhd0pTT04gPSBcInJhd0pTT05cIiBpbiBKU09OO1xuXG4gICAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSByZXR1cm4gSlNPTi5yYXdKU09OKHZhbC50b1N0cmluZygpKTtcblxuICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb25SZXBsYWNlcikge1xuICAgICAgdmFsID0gcmVwbGFjZXIuY2FsbChwYXJlbnQsIGtleSwgdmFsKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1Bvc3RSZXBsYWNlck9iamVjdCA9IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiO1xuXG4gICAgaWYgKGlzUG9zdFJlcGxhY2VyT2JqZWN0KSB7XG4gICAgICBjb25zdCBpc1ByaW1pdGl2ZVdyYXBwZXIgPVxuICAgICAgICB2YWwgaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgdmFsIGluc3RhbmNlb2YgU3RyaW5nIHx8XG4gICAgICAgIHZhbCBpbnN0YW5jZW9mIEJvb2xlYW47XG5cbiAgICAgIGlmIChpc1ByaW1pdGl2ZVdyYXBwZXIpIHtcbiAgICAgICAgdmFsID0gdmFsLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9O1xuXG4gIGNvbnN0IHJvb3RQcm9jZXNzZWQgPSBwcmVwYXJlVmFsKHsgXCJcIjogcm9vdFZhbHVlIH0sIFwiXCIsIHJvb3RWYWx1ZSk7XG5cbiAgaWYgKGlzVW5zdHJpbmdpZmlhYmxlKHJvb3RQcm9jZXNzZWQpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGlzUm9vdFByaW1pdGl2ZSA9XG4gICAgcm9vdFByb2Nlc3NlZCA9PT0gbnVsbCB8fCB0eXBlb2Ygcm9vdFByb2Nlc3NlZCAhPT0gXCJvYmplY3RcIjtcbiAgY29uc3QgaXNSb290TmF0aXZlUmF3SlNPTiA9IGlzUmF3SlNPTihyb290UHJvY2Vzc2VkKTtcblxuICBpZiAoaXNSb290UHJpbWl0aXZlIHx8IGlzUm9vdE5hdGl2ZVJhd0pTT04pIHtcbiAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmdpZnkocm9vdFByb2Nlc3NlZCk7XG4gIH1cblxuICBjb25zdCBjaHVua3MgPSBbXTtcbiAgbGV0IGxldmVsID0gMDtcblxuICBjb25zdCBzdGFjayA9IFtcbiAgICB7XG4gICAgICBwYXJlbnQ6IHsgXCJcIjogcm9vdFByb2Nlc3NlZCB9LFxuICAgICAga2V5OiBcIlwiLFxuICAgICAgdmFsOiByb290UHJvY2Vzc2VkLFxuICAgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheShyb290UHJvY2Vzc2VkKSxcbiAgICAgIGtleXM6IEFycmF5LmlzQXJyYXkocm9vdFByb2Nlc3NlZCkgPyBudWxsIDogT2JqZWN0LmtleXMocm9vdFByb2Nlc3NlZCksXG4gICAgICBpbmRleDogMCxcbiAgICAgIGZpcnN0OiB0cnVlLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KFtyb290UHJvY2Vzc2VkXSk7XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICBpZiAobm9kZS5pbmRleCA9PT0gMCkge1xuICAgICAgY2h1bmtzLnB1c2gobm9kZS5pc0FycmF5ID8gXCJbXCIgOiBcIntcIik7XG4gICAgICBsZXZlbCsrO1xuICAgIH1cblxuICAgIGxldCBpc0RvbmUgPSBmYWxzZTtcblxuICAgIGlmIChub2RlLmlzQXJyYXkpIHtcbiAgICAgIGlmIChub2RlLmluZGV4IDwgbm9kZS52YWwubGVuZ3RoKSB7XG4gICAgICAgIGlmICghbm9kZS5maXJzdCkgY2h1bmtzLnB1c2goXCIsXCIpO1xuXG4gICAgICAgIGlmIChzcGFjZSkgY2h1bmtzLnB1c2goXCJcXG5cIiArIHNwYWNlLnJlcGVhdChsZXZlbCkpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkUmF3ID0gbm9kZS52YWxbbm9kZS5pbmRleF07XG4gICAgICAgIGNvbnN0IGNoaWxkVmFsID0gcHJlcGFyZVZhbChub2RlLnZhbCwgU3RyaW5nKG5vZGUuaW5kZXgpLCBjaGlsZFJhdyk7XG5cbiAgICAgICAgaWYgKGlzVW5zdHJpbmdpZmlhYmxlKGNoaWxkVmFsKSkge1xuICAgICAgICAgIGNodW5rcy5wdXNoKFwibnVsbFwiKTtcbiAgICAgICAgICBub2RlLmZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzQ29tcGxleE9iamVjdCA9XG4gICAgICAgICAgICBjaGlsZFZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGRWYWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgICAgY29uc3QgaXNOYXRpdmVSYXcgPSBpc1Jhd0pTT04oY2hpbGRWYWwpO1xuXG4gICAgICAgICAgaWYgKGlzQ29tcGxleE9iamVjdCAmJiAhaXNOYXRpdmVSYXcpIHtcbiAgICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhjaGlsZFZhbCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKGNoaWxkVmFsKTtcblxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHBhcmVudDogbm9kZS52YWwsXG4gICAgICAgICAgICAgIGtleTogU3RyaW5nKG5vZGUuaW5kZXgpLFxuICAgICAgICAgICAgICB2YWw6IGNoaWxkVmFsLFxuICAgICAgICAgICAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKSxcbiAgICAgICAgICAgICAga2V5czogQXJyYXkuaXNBcnJheShjaGlsZFZhbCkgPyBudWxsIDogT2JqZWN0LmtleXMoY2hpbGRWYWwpLFxuICAgICAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAgICAgZmlyc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbm9kZS5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChvcmlnaW5hbFN0cmluZ2lmeShjaGlsZFZhbCkpO1xuICAgICAgICAgICAgbm9kZS5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNEb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKG5vZGUuaW5kZXggPCBub2RlLmtleXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGsgPSBub2RlLmtleXNbbm9kZS5pbmRleCsrXTtcblxuICAgICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0QnlBcnJheSA9IHByb3BlcnR5TGlzdCAmJiAhcHJvcGVydHlMaXN0LmhhcyhrKTtcblxuICAgICAgICBpZiAoaXNGaWx0ZXJlZE91dEJ5QXJyYXkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkUmF3ID0gbm9kZS52YWxba107XG4gICAgICAgIGNvbnN0IGNoaWxkVmFsID0gcHJlcGFyZVZhbChub2RlLnZhbCwgaywgY2hpbGRSYXcpO1xuXG4gICAgICAgIGlmIChpc1Vuc3RyaW5naWZpYWJsZShjaGlsZFZhbCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICghbm9kZS5maXJzdCkgY2h1bmtzLnB1c2goXCIsXCIpO1xuXG4gICAgICAgIGlmIChzcGFjZSkge1xuICAgICAgICAgIGNodW5rcy5wdXNoKFwiXFxuXCIgKyBzcGFjZS5yZXBlYXQobGV2ZWwpICsgb3JpZ2luYWxTdHJpbmdpZnkoaykgKyBcIjogXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rcy5wdXNoKG9yaWdpbmFsU3RyaW5naWZ5KGspICsgXCI6XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNDb21wbGV4T2JqZWN0ID1cbiAgICAgICAgICBjaGlsZFZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGRWYWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgIGNvbnN0IGlzTmF0aXZlUmF3ID0gaXNSYXdKU09OKGNoaWxkVmFsKTtcblxuICAgICAgICBpZiAoaXNDb21wbGV4T2JqZWN0ICYmICFpc05hdGl2ZVJhdykge1xuICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhjaGlsZFZhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZpc2l0ZWQuYWRkKGNoaWxkVmFsKTtcblxuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcGFyZW50OiBub2RlLnZhbCxcbiAgICAgICAgICAgIGtleTogayxcbiAgICAgICAgICAgIHZhbDogY2hpbGRWYWwsXG4gICAgICAgICAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKSxcbiAgICAgICAgICAgIGtleXM6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpID8gbnVsbCA6IE9iamVjdC5rZXlzKGNoaWxkVmFsKSxcbiAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgZmlyc3Q6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBub2RlLmZpcnN0ID0gZmFsc2U7XG5cbiAgICAgICAgICBicmVhazsgLy8gU3RvcCBjdXJyZW50IGxvb3AgbGV2ZWwgdG8gcHJvY2VzcyB0aGUgbmV3bHkgcHVzaGVkIHN0YWNrIG5vZGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaHVua3MucHVzaChvcmlnaW5hbFN0cmluZ2lmeShjaGlsZFZhbCkpO1xuICAgICAgICAgIG5vZGUuZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc05vZGVGdWxseVByb2Nlc3NlZCA9XG4gICAgICAgIG5vZGUuaW5kZXggPj0gbm9kZS5rZXlzLmxlbmd0aCAmJiBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9PT0gbm9kZTtcblxuICAgICAgaWYgKGlzTm9kZUZ1bGx5UHJvY2Vzc2VkKSB7XG4gICAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzRG9uZSkge1xuICAgICAgbGV2ZWwtLTtcblxuICAgICAgaWYgKCFub2RlLmZpcnN0ICYmIHNwYWNlKSBjaHVua3MucHVzaChcIlxcblwiICsgc3BhY2UucmVwZWF0KGxldmVsKSk7XG5cbiAgICAgIGNodW5rcy5wdXNoKG5vZGUuaXNBcnJheSA/IFwiXVwiIDogXCJ9XCIpO1xuICAgICAgdmlzaXRlZC5kZWxldGUobm9kZS52YWwpO1xuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNodW5rcy5qb2luKFwiXCIpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIEphdmFTY3JpcHQgdmFsdWUgdG8gYSBKU09OIHN0cmluZy5cbiAqXG4gKiBTdXBwb3J0cyBzZXJpYWxpemF0aW9uIG9mIEJpZ0ludCB2YWx1ZXMgdXNpbmcgdHdvIHN0cmF0ZWdpZXM6XG4gKiAxLiBDdXN0b20gZm9ybWF0IFwiMTIzblwiIFx1MjE5MiBcIjEyM1wiICh1bml2ZXJzYWwgZmFsbGJhY2spXG4gKiAyLiBOYXRpdmUgSlNPTi5yYXdKU09OKCkgKE5vZGUuanMgMjIrLCBmYXN0ZXN0KSB3aGVuIGF2YWlsYWJsZVxuICpcbiAqIEFsbCBvdGhlciB2YWx1ZXMgYXJlIHNlcmlhbGl6ZWQgZXhhY3RseSBsaWtlIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSgpLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBKU09OIHN0cmluZy5cbiAqIEBwYXJhbSB7UmVwbGFjZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbH0gW3JlcGxhY2VyXVxuICogQSBmdW5jdGlvbiB0aGF0IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN0cmluZ2lmaWNhdGlvbiBwcm9jZXNzLFxuICogb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy9udW1iZXJzIHRvIGluZGljYXRlIHByb3BlcnRpZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBbc3BhY2VdXG4gKiBBIHN0cmluZyBvciBudW1iZXIgdG8gc3BlY2lmeSBpbmRlbnRhdGlvbiBvciBwcmV0dHktcHJpbnRpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKi9cbmNvbnN0IEpTT05TdHJpbmdpZnkgPSAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN1cHBvcnRzUmF3SlNPTiA9IFwicmF3SlNPTlwiIGluIEpTT047XG5cbiAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmdpZnkoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAoa2V5LCB2YWwpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJiaWdpbnRcIikgcmV0dXJuIEpTT04ucmF3SlNPTih2YWwudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICBjb25zdCBoYXNGdW5jdGlvblJlcGxhY2VyID0gdHlwZW9mIHJlcGxhY2VyID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICAgICAgICBpZiAoaGFzRnVuY3Rpb25SZXBsYWNlcikgcmV0dXJuIHJlcGxhY2VyKGtleSwgdmFsKTtcblxuICAgICAgICAgIGNvbnN0IGlzS2V5SW5BcnJheVJlcGxhY2VyID1cbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVwbGFjZXIpICYmIHJlcGxhY2VyLmluY2x1ZGVzKGtleSk7XG5cbiAgICAgICAgICBpZiAoaXNLZXlJbkFycmF5UmVwbGFjZXIpIHJldHVybiB2YWw7XG5cbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBzcGFjZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG9yaWdpbmFsU3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpO1xuXG4gICAgY29uc3QgY29udmVydGVkVG9DdXN0b21KU09OID0gb3JpZ2luYWxTdHJpbmdpZnkoXG4gICAgICB2YWx1ZSxcbiAgICAgIChrZXksIHZhbCkgPT4ge1xuICAgICAgICBjb25zdCBpc05vaXNlID0gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiAmJiBub2lzZVZhbHVlLnRlc3QodmFsKTtcblxuICAgICAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7IC8vIE1hcmsgbm9pc2UgdmFsdWVzIHdpdGggYWRkaXRpb25hbCBcIm5cIiB0byBvZmZzZXQgdGhlIGRlbGV0aW9uIG9mIG9uZSBcIm5cIiBkdXJpbmcgdGhlIHByb2Nlc3NpbmdcblxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJiaWdpbnRcIikgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7XG5cbiAgICAgICAgY29uc3QgaGFzRnVuY3Rpb25SZXBsYWNlciA9IHR5cGVvZiByZXBsYWNlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICAgIGlmIChoYXNGdW5jdGlvblJlcGxhY2VyKSByZXR1cm4gcmVwbGFjZXIoa2V5LCB2YWwpO1xuXG4gICAgICAgIGNvbnN0IGlzS2V5SW5BcnJheVJlcGxhY2VyID1cbiAgICAgICAgICBBcnJheS5pc0FycmF5KHJlcGxhY2VyKSAmJiByZXBsYWNlci5pbmNsdWRlcyhrZXkpO1xuXG4gICAgICAgIGlmIChpc0tleUluQXJyYXlSZXBsYWNlcikgcmV0dXJuIHZhbDtcblxuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfSxcbiAgICAgIHNwYWNlLFxuICAgICk7XG5cbiAgICBjb25zdCBwcm9jZXNzZWRKU09OID0gY29udmVydGVkVG9DdXN0b21KU09OLnJlcGxhY2UoXG4gICAgICBiaWdJbnRzU3RyaW5naWZ5LFxuICAgICAgXCIkMSQyJDNcIixcbiAgICApOyAvLyBEZWxldGUgb25lIFwiblwiIG9mZiB0aGUgZW5kIG9mIGV2ZXJ5IEJpZ0ludCB2YWx1ZVxuXG4gICAgY29uc3QgZGVub2lzZWRKU09OID0gcHJvY2Vzc2VkSlNPTi5yZXBsYWNlKG5vaXNlU3RyaW5naWZ5LCBcIiQxJDIkM1wiKTsgLy8gUmVtb3ZlIG9uZSBcIm5cIiBvZmYgdGhlIGVuZCBvZiBldmVyeSBub2lzeSBzdHJpbmdcblxuICAgIHJldHVybiBkZW5vaXNlZEpTT047XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xuICAgICAgY29uc3QgY29udmVydGVkSlNPTiA9IHN0cmluZ2lmeUl0ZXJhdGl2ZWx5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpO1xuXG4gICAgICBpZiAoY29udmVydGVkSlNPTiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzdXBwb3J0c1Jhd0pTT04gPSBcInJhd0pTT05cIiBpbiBKU09OO1xuXG4gICAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSByZXR1cm4gY29udmVydGVkSlNPTjtcblxuICAgICAgY29uc3QgcHJvY2Vzc2VkSlNPTiA9IGNvbnZlcnRlZEpTT04ucmVwbGFjZShiaWdJbnRzU3RyaW5naWZ5LCBcIiQxJDIkM1wiKTtcblxuICAgICAgcmV0dXJuIHByb2Nlc3NlZEpTT04ucmVwbGFjZShub2lzZVN0cmluZ2lmeSwgXCIkMSQyJDNcIik7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGZlYXR1cmVDYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBEZXRlY3RzIGlmIHRoZSBjdXJyZW50IEpTT04ucGFyc2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgdGhlIGNvbnRleHQuc291cmNlIGZlYXR1cmUuXG4gKlxuICogVXNlcyB0b1N0cmluZygpIGZpbmdlcnByaW50aW5nIHRvIGNhY2hlIHJlc3VsdHMgYW5kIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHJ1bnRpbWVcbiAqIHJlcGxhY2VtZW50cyBvZiBKU09OLnBhcnNlIChwb2x5ZmlsbHMsIG1vY2tzLCBldGMuKS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBjb250ZXh0LnNvdXJjZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuY29uc3QgaXNDb250ZXh0U291cmNlU3VwcG9ydGVkID0gKCkgPT4ge1xuICBjb25zdCBwYXJzZUZpbmdlcnByaW50ID0gSlNPTi5wYXJzZS50b1N0cmluZygpO1xuXG4gIGlmIChmZWF0dXJlQ2FjaGUuaGFzKHBhcnNlRmluZ2VycHJpbnQpKSB7XG4gICAgcmV0dXJuIGZlYXR1cmVDYWNoZS5nZXQocGFyc2VGaW5nZXJwcmludCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoXG4gICAgICBcIjFcIixcbiAgICAgIChfLCBfXywgY29udGV4dCkgPT4gISFjb250ZXh0Py5zb3VyY2UgJiYgY29udGV4dC5zb3VyY2UgPT09IFwiMVwiLFxuICAgICk7XG4gICAgZmVhdHVyZUNhY2hlLnNldChwYXJzZUZpbmdlcnByaW50LCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCB7XG4gICAgZmVhdHVyZUNhY2hlLnNldChwYXJzZUZpbmdlcnByaW50LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogUmV2aXZlciBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGN1c3RvbS1mb3JtYXQgQmlnSW50IHN0cmluZ3MgYmFjayB0byBCaWdJbnQgdmFsdWVzLlxuICogQWxzbyBoYW5kbGVzIFwibm9pc2VcIiBzdHJpbmdzIHRoYXQgYWNjaWRlbnRhbGx5IG1hdGNoIHRoZSBCaWdJbnQgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkfSBrZXkgVGhlIG9iamVjdCBrZXkuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBiZWluZyBwYXJzZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIFBhcnNlIGNvbnRleHQgKGlmIHN1cHBvcnRlZCBieSBKU09OLnBhcnNlKS5cbiAqIEBwYXJhbSB7UmV2aXZlcn0gW3VzZXJSZXZpdmVyXSBVc2VyJ3MgY3VzdG9tIHJldml2ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7YW55fSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUuXG4gKi9cbmNvbnN0IGNvbnZlcnRNYXJrZWRCaWdJbnRzUmV2aXZlciA9IChrZXksIHZhbHVlLCBjb250ZXh0LCB1c2VyUmV2aXZlcikgPT4ge1xuICBjb25zdCBpc0N1c3RvbUZvcm1hdEJpZ0ludCA9XG4gICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIGN1c3RvbUZvcm1hdC50ZXN0KHZhbHVlKTtcblxuICBpZiAoaXNDdXN0b21Gb3JtYXRCaWdJbnQpIHJldHVybiBCaWdJbnQodmFsdWUuc2xpY2UoMCwgLTEpKTtcblxuICBjb25zdCBpc05vaXNlVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgbm9pc2VWYWx1ZS50ZXN0KHZhbHVlKTtcbiAgaWYgKGlzTm9pc2VWYWx1ZSkgcmV0dXJuIHZhbHVlLnNsaWNlKDAsIC0xKTtcblxuICBjb25zdCBoYXNVc2VyUmV2aXZlciA9IHR5cGVvZiB1c2VyUmV2aXZlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gIGlmICghaGFzVXNlclJldml2ZXIpIHJldHVybiB2YWx1ZTtcblxuICByZXR1cm4gdXNlclJldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIEZhc3QgSlNPTi5wYXJzZSBpbXBsZW1lbnRhdGlvbiAofjJ4IGZhc3RlciB0aGFuIGNsYXNzaWMgZmFsbGJhY2spLlxuICogVXNlcyBKU09OLnBhcnNlJ3MgY29udGV4dC5zb3VyY2UgZmVhdHVyZSB0byBkZXRlY3QgaW50ZWdlcnMgYW5kIGNvbnZlcnRcbiAqIGxhcmdlIG51bWJlcnMgZGlyZWN0bHkgdG8gQmlnSW50IHdpdGhvdXQgc3RyaW5nIG1hbmlwdWxhdGlvbi5cbiAqXG4gKiBEb2VzIG5vdCBzdXBwb3J0IGxlZ2FjeSBjdXN0b20gZm9ybWF0IGZyb20gdjEgb2YgdGhpcyBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IEpTT04gc3RyaW5nIHRvIHBhcnNlLlxuICogQHBhcmFtIHtSZXZpdmVyfSBbcmV2aXZlcl0gVHJhbnNmb3JtIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUuXG4gKiBAcmV0dXJucyB7YW55fSBQYXJzZWQgSmF2YVNjcmlwdCB2YWx1ZS5cbiAqL1xuY29uc3QgSlNPTlBhcnNlVjIgPSAodGV4dCwgcmV2aXZlcikgPT4ge1xuICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0LCAoa2V5LCB2YWx1ZSwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGlzTnVtYmVyID0gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlzT3V0T2ZCb3VuZHMgPVxuICAgICAgdmFsdWUgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCB2YWx1ZSA8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgIGNvbnN0IGlzQmlnTnVtYmVyID0gaXNOdW1iZXIgJiYgaXNPdXRPZkJvdW5kcztcbiAgICBjb25zdCBpc0ludCA9IGNvbnRleHQgJiYgaW50UmVnZXgudGVzdChjb250ZXh0LnNvdXJjZSk7XG4gICAgY29uc3QgaXNCaWdJbnQgPSBpc0JpZ051bWJlciAmJiBpc0ludDtcblxuICAgIGlmIChpc0JpZ0ludCkgcmV0dXJuIEJpZ0ludChjb250ZXh0LnNvdXJjZSk7XG5cbiAgICBjb25zdCBoYXNDdXN0b21SZXZpdmVyID0gdHlwZW9mIHJldml2ZXIgPT09IFwiZnVuY3Rpb25cIjtcblxuICAgIGlmICghaGFzQ3VzdG9tUmV2aXZlcikgcmV0dXJuIHZhbHVlO1xuXG4gICAgcmV0dXJuIHJldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuY29uc3QgTUFYX0lOVCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLnRvU3RyaW5nKCk7XG5jb25zdCBNQVhfRElHSVRTID0gTUFYX0lOVC5sZW5ndGg7XG5jb25zdCBzdHJpbmdzT3JMYXJnZU51bWJlcnMgPVxuICAvXCIoPzpcXFxcLnxbXlwiXSkqXCJ8LT8oMHxbMS05XVswLTldKikoXFwuWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8vZztcbmNvbnN0IG5vaXNlVmFsdWVXaXRoUXVvdGVzID0gL15cIi0/XFxkK24rXCIkLzsgLy8gTm9pc2UgLSBzdHJpbmdzIHRoYXQgbWF0Y2ggdGhlIGN1c3RvbSBmb3JtYXQgYmVmb3JlIGJlaW5nIGNvbnZlcnRlZCB0byBpdFxuXG4vKipcbiAqIEl0ZXJhdGl2ZWx5IHRyYXZlcnNlcyB0aGUgcGFyc2VkIG9iamVjdCBib3R0b20tdXAgKHBvc3Qtb3JkZXIpLFxuICogZW11bGF0aW5nIHRoZSBuYXRpdmUgSlNPTi5wYXJzZSByZXZpdmVyIGJlaGF2aW9yLlxuICogVGhpcyBhdm9pZHMgQ2FsbCBTdGFjayBvdmVyZmxvd3MgKFJhbmdlRXJyb3IpIG9uIGRlZXBseSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAqXG4gKiBAcGFyYW0ge2FueX0gcGFyc2VkIFRoZSBuYXRpdmVseSBwYXJzZWQgSlNPTiBvYmplY3QuXG4gKiBAcGFyYW0ge1Jldml2ZXJ9IFt1c2VyUmV2aXZlcl0gVXNlcidzIGN1c3RvbSByZXZpdmVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMge2FueX0gVGhlIGZ1bGx5IHByb2Nlc3NlZCBvYmplY3QuXG4gKi9cbmNvbnN0IGFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5ID0gKHBhcnNlZCwgdXNlclJldml2ZXIpID0+IHtcbiAgY29uc3Qgcm9vdEhvbGRlciA9IHsgXCJcIjogcGFyc2VkIH07XG4gIGNvbnN0IHN0YWNrID0gW3sgcGFyZW50OiByb290SG9sZGVyLCBrZXk6IFwiXCIsIHZpc2l0ZWQ6IGZhbHNlIH1dO1xuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKCFub2RlLnZpc2l0ZWQpIHtcbiAgICAgIG5vZGUudmlzaXRlZCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gbm9kZS5wYXJlbnRbbm9kZS5rZXldO1xuICAgICAgY29uc3QgaXNDb21wbGV4T2JqZWN0ID0gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xuXG4gICAgICBpZiAoaXNDb21wbGV4T2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGtleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHsgcGFyZW50OiB2YWx1ZSwga2V5OiBrZXlzW2ldLCB2aXNpdGVkOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHBhcmVudCwga2V5IH0gPSBub2RlO1xuICAgICAgbGV0IHZhbHVlID0gcGFyZW50W2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgaXNDdXN0b21Gb3JtYXRCaWdJbnQgPSBjdXN0b21Gb3JtYXQudGVzdCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGlzQ3VzdG9tRm9ybWF0QmlnSW50KSB7XG4gICAgICAgICAgdmFsdWUgPSBCaWdJbnQodmFsdWUuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpc05vaXNlID0gbm9pc2VWYWx1ZS50ZXN0KHZhbHVlKTtcblxuICAgICAgICAgIGlmIChpc05vaXNlKSB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNVc2VyUmV2aXZlciA9IHR5cGVvZiB1c2VyUmV2aXZlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICBpZiAoaGFzVXNlclJldml2ZXIpIHtcbiAgICAgICAgdmFsdWUgPSB1c2VyUmV2aXZlci5jYWxsKHBhcmVudCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRGVsZXRlZCA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0RlbGV0ZWQpIHtcbiAgICAgICAgZGVsZXRlIHBhcmVudFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3RIb2xkZXJbXCJcIl07XG59O1xuXG4vKipcbiAqIFByZS1wcm9jZXNzZXMgdGhlIEpTT04gc3RyaW5nIHRvIG1hcmsgbGFyZ2UgbnVtYmVycyB3aXRoIGFuICduJyBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHJhdyBKU09OIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzZXJpYWxpemVkIHN0cmluZyB3aXRoIG1hcmtlZCBCaWdJbnRzLlxuICovXG5jb25zdCBzZXJpYWxpemVCaWdJbnRzID0gKHRleHQpID0+IHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZShcbiAgICBzdHJpbmdzT3JMYXJnZU51bWJlcnMsXG4gICAgKG1hdGNoLCBkaWdpdHMsIGZyYWN0aW9uYWwsIGV4cG9uZW50aWFsKSA9PiB7XG4gICAgICBjb25zdCBpc1N0cmluZyA9IG1hdGNoWzBdID09PSAnXCInO1xuICAgICAgY29uc3QgaXNOb2lzZSA9IGlzU3RyaW5nICYmIG5vaXNlVmFsdWVXaXRoUXVvdGVzLnRlc3QobWF0Y2gpO1xuXG4gICAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIG1hdGNoLnN1YnN0cmluZygwLCBtYXRjaC5sZW5ndGggLSAxKSArICduXCInOyAvLyBNYXJrIG5vaXNlIHZhbHVlcyB3aXRoIGFkZGl0aW9uYWwgXCJuXCIgdG8gb2Zmc2V0IHRoZSBkZWxldGlvbiBvZiBvbmUgXCJuXCIgZHVyaW5nIHRoZSBwcm9jZXNzaW5nXG5cbiAgICAgIGNvbnN0IGhhc0ZyYWN0aW9uYWxPckV4cG9uZW50aWFsID0gZnJhY3Rpb25hbCB8fCBleHBvbmVudGlhbDtcblxuICAgICAgLy8gV2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMsIHdlIGNhbiBjb3JyZWN0bHkgdXNlIGxleGljb2dyYXBoaWNhbCBjb21wYXJpc29uIHRvIGRvIGEgbnVtZXJpYyBjb21wYXJpc29uXG4gICAgICBjb25zdCBpc0xlc3NUaGFuTWF4U2FmZUludCA9XG4gICAgICAgIGRpZ2l0cyAmJlxuICAgICAgICAoZGlnaXRzLmxlbmd0aCA8IE1BWF9ESUdJVFMgfHxcbiAgICAgICAgICAoZGlnaXRzLmxlbmd0aCA9PT0gTUFYX0RJR0lUUyAmJiBkaWdpdHMgPD0gTUFYX0lOVCkpO1xuXG4gICAgICBjb25zdCBpc1N0YW5kYXJkVmFsdWUgPVxuICAgICAgICBpc1N0cmluZyB8fCBoYXNGcmFjdGlvbmFsT3JFeHBvbmVudGlhbCB8fCBpc0xlc3NUaGFuTWF4U2FmZUludDtcblxuICAgICAgaWYgKGlzU3RhbmRhcmRWYWx1ZSkgcmV0dXJuIG1hdGNoO1xuXG4gICAgICByZXR1cm4gJ1wiJyArIG1hdGNoICsgJ25cIic7XG4gICAgfSxcbiAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBKU09OIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCB2YWx1ZS5cbiAqXG4gKiBTdXBwb3J0cyBwYXJzaW5nIG9mIGxhcmdlIGludGVnZXJzIHVzaW5nIHR3byBzdHJhdGVnaWVzOlxuICogMS4gQ2xhc3NpYyBmYWxsYmFjazogTWFya3MgbGFyZ2UgbnVtYmVycyB3aXRoIFwiMTIzblwiIGZvcm1hdCwgdGhlbiBjb252ZXJ0cyB0byBCaWdJbnRcbiAqIDIuIEZhc3QgcGF0aCAoSlNPTlBhcnNlVjIpOiBVc2VzIGNvbnRleHQuc291cmNlIGZlYXR1cmUgKH4yeCBmYXN0ZXIpIHdoZW4gYXZhaWxhYmxlXG4gKlxuICogQWxsIG90aGVyIEpTT04gdmFsdWVzIGFyZSBwYXJzZWQgZXhhY3RseSBsaWtlIG5hdGl2ZSBKU09OLnBhcnNlKCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgQSB2YWxpZCBKU09OIHN0cmluZy5cbiAqIEBwYXJhbSB7UmV2aXZlcn0gW3Jldml2ZXJdXG4gKiBBIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2ggbWVtYmVyXG4gKiBvZiB0aGUgb2JqZWN0LiBJZiBhIG1lbWJlciBjb250YWlucyBuZXN0ZWQgb2JqZWN0cywgdGhlIG5lc3RlZCBvYmplY3RzIGFyZVxuICogdHJhbnNmb3JtZWQgYmVmb3JlIHRoZSBwYXJlbnQgb2JqZWN0IGlzLlxuICogQHJldHVybnMge2FueX0gVGhlIHBhcnNlZCBKYXZhU2NyaXB0IHZhbHVlLlxuICogQHRocm93cyB7U3ludGF4RXJyb3J9IElmIHRleHQgaXMgbm90IHZhbGlkIEpTT04uXG4gKi9cbmNvbnN0IEpTT05QYXJzZSA9ICh0ZXh0LCByZXZpdmVyKSA9PiB7XG4gIGlmICghdGV4dCkgcmV0dXJuIG9yaWdpbmFsUGFyc2UodGV4dCwgcmV2aXZlcik7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaXNDb250ZXh0U291cmNlU3VwcG9ydGVkKCkpIHJldHVybiBKU09OUGFyc2VWMih0ZXh0LCByZXZpdmVyKTsgLy8gU2hvcnRjdXQgdG8gYSBmYXN0ZXIgKDJ4KSBhbmQgc2ltcGxlciB2ZXJzaW9uXG5cbiAgICAvLyBGaW5kIGFuZCBtYXJrIGJpZyBudW1iZXJzIHdpdGggXCJuXCJcbiAgICBjb25zdCBzZXJpYWxpemVkRGF0YSA9IHNlcmlhbGl6ZUJpZ0ludHModGV4dCk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWxQYXJzZShzZXJpYWxpemVkRGF0YSwgKGtleSwgdmFsdWUsIGNvbnRleHQpID0+XG4gICAgICBjb252ZXJ0TWFya2VkQmlnSW50c1Jldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCwgcmV2aXZlciksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSB7XG4gICAgICBjb25zdCBzZXJpYWxpemVkRGF0YSA9IHNlcmlhbGl6ZUJpZ0ludHModGV4dCk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBvcmlnaW5hbFBhcnNlKHNlcmlhbGl6ZWREYXRhKTtcblxuICAgICAgcmV0dXJuIGFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5KHBhcnNlZCwgcmV2aXZlcik7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCB7IEpTT05TdHJpbmdpZnksIEpTT05QYXJzZSB9O1xuIiwgImNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgbmFtZTtcbiAgLyoqXG4gICAqIGh0dHAgc3RhdHVzIGNvZGVcbiAgICovXG4gIHN0YXR1cztcbiAgLyoqXG4gICAqIFJlcXVlc3Qgb3B0aW9ucyB0aGF0IGxlYWQgdG8gdGhlIGVycm9yLlxuICAgKi9cbiAgcmVxdWVzdDtcbiAgLyoqXG4gICAqIFJlc3BvbnNlIG9iamVjdCBpZiBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxuICAgKi9cbiAgcmVzcG9uc2U7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlOiBvcHRpb25zLmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBOdW1iZXIucGFyc2VJbnQoc3RhdHVzQ29kZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih0aGlzLnN0YXR1cykpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIGVsc2UgLS0gQHByZXNlcnZlIC0tIEJ1ZyB3aXRoIHZpdGVzdCBjb3ZlcmFnZSB3aGVyZSBpdCBzZWVzIGFuIGVsc2UgYnJhbmNoIHRoYXQgZG9lc24ndCBleGlzdCAqL1xuICAgIGlmIChcInJlc3BvbnNlXCIgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0KTtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgcmVxdWVzdENvcHkuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLCB7XG4gICAgICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24ucmVwbGFjZShcbiAgICAgICAgICAvKD88ISApIC4qJC8sXG4gICAgICAgICAgXCIgW1JFREFDVEVEXVwiXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXF1ZXN0Q29weS51cmwgPSByZXF1ZXN0Q29weS51cmwucmVwbGFjZSgvXFxiY2xpZW50X3NlY3JldD1cXHcrL2csIFwiY2xpZW50X3NlY3JldD1bUkVEQUNURURdXCIpLnJlcGxhY2UoL1xcYmFjY2Vzc190b2tlbj1cXHcrL2csIFwiYWNjZXNzX3Rva2VuPVtSRURBQ1RFRF1cIik7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdENvcHk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIFJlcXVlc3RFcnJvclxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmltcG9ydCB7IHJlcXVlc3QgYXMgUmVxdWVzdDIgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBSZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2Vycm9yLmpzXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxuYCArIGRhdGEuZXJyb3JzLm1hcCgoZSkgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG52YXIgR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVxdWVzdDIsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDI7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnM7XG4gICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgfVxuICBuYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiO1xuICBlcnJvcnM7XG4gIGRhdGE7XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIE5PTl9WQVJJQUJMRV9PUFRJT05TID0gW1xuICBcIm1ldGhvZFwiLFxuICBcImJhc2VVcmxcIixcbiAgXCJ1cmxcIixcbiAgXCJoZWFkZXJzXCIsXG4gIFwicmVxdWVzdFwiLFxuICBcInF1ZXJ5XCIsXG4gIFwibWVkaWFUeXBlXCIsXG4gIFwib3BlcmF0aW9uTmFtZVwiXG5dO1xudmFyIEZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TID0gW1wicXVlcnlcIiwgXCJtZXRob2RcIiwgXCJ1cmxcIl07XG52YXIgR0hFU19WM19TVUZGSVhfUkVHRVggPSAvXFwvYXBpXFwvdjNcXC8/JC87XG5mdW5jdGlvbiBncmFwaHFsKHJlcXVlc3QyLCBxdWVyeSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgXCJxdWVyeVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKGBbQG9jdG9raXQvZ3JhcGhxbF0gXCJxdWVyeVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCFGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBbQG9jdG9raXQvZ3JhcGhxbF0gXCIke2tleX1cIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gT2JqZWN0LmFzc2lnbih7IHF1ZXJ5IH0sIG9wdGlvbnMpIDogcXVlcnk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmtleXMoXG4gICAgcGFyc2VkT3B0aW9uc1xuICApLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICBpZiAoTk9OX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoIXJlc3VsdC52YXJpYWJsZXMpIHtcbiAgICAgIHJlc3VsdC52YXJpYWJsZXMgPSB7fTtcbiAgICB9XG4gICAgcmVzdWx0LnZhcmlhYmxlc1trZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbiAgY29uc3QgYmFzZVVybCA9IHBhcnNlZE9wdGlvbnMuYmFzZVVybCB8fCByZXF1ZXN0Mi5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsO1xuICBpZiAoR0hFU19WM19TVUZGSVhfUkVHRVgudGVzdChiYXNlVXJsKSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnVybCA9IGJhc2VVcmwucmVwbGFjZShHSEVTX1YzX1NVRkZJWF9SRUdFWCwgXCIvYXBpL2dyYXBocWxcIik7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3QyKHJlcXVlc3RPcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9ycykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEdyYXBocWxSZXNwb25zZUVycm9yKFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcmVzcG9uc2UuZGF0YVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocmVxdWVzdDIsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0Mi5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IChxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBncmFwaHFsKG5ld1JlcXVlc3QsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIG5ld1JlcXVlc3QpLFxuICAgIGVuZHBvaW50OiBuZXdSZXF1ZXN0LmVuZHBvaW50XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBncmFwaHFsMiA9IHdpdGhEZWZhdWx0cyhyZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG5leHBvcnQge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcixcbiAgZ3JhcGhxbDIgYXMgZ3JhcGhxbCxcbiAgd2l0aEN1c3RvbVJlcXVlc3Rcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2lzLWp3dC5qc1xudmFyIGI2NHVybCA9IFwiKD86W2EtekEtWjAtOV8tXSspXCI7XG52YXIgc2VwID0gXCJcXFxcLlwiO1xudmFyIGp3dFJFID0gbmV3IFJlZ0V4cChgXiR7YjY0dXJsfSR7c2VwfSR7YjY0dXJsfSR7c2VwfSR7YjY0dXJsfSRgKTtcbnZhciBpc0pXVCA9IGp3dFJFLnRlc3QuYmluZChqd3RSRSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9hdXRoLmpzXG5hc3luYyBmdW5jdGlvbiBhdXRoKHRva2VuKSB7XG4gIGNvbnN0IGlzQXBwID0gaXNKV1QodG9rZW4pO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IHRva2VuLnN0YXJ0c1dpdGgoXCJ2MS5cIikgfHwgdG9rZW4uc3RhcnRzV2l0aChcImdoc19cIik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gdG9rZW4uc3RhcnRzV2l0aChcImdodV9cIik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtYXV0aG9yaXphdGlvbi1wcmVmaXguanNcbmZ1bmN0aW9uIHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKSB7XG4gIGlmICh0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGBiZWFyZXIgJHt0b2tlbn1gO1xuICB9XG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaG9vay5qc1xuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKFxuICAgIHJvdXRlLFxuICAgIHBhcmFtZXRlcnNcbiAgKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aDIodG9rZW4pIHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBObyB0b2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBUb2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoIGlzIG5vdCBhIHN0cmluZ1wiXG4gICAgKTtcbiAgfVxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG5leHBvcnQge1xuICBjcmVhdGVUb2tlbkF1dGhcbn07XG4iLCAiY29uc3QgVkVSU0lPTiA9IFwiNy4wLjZcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5pbXBvcnQgSG9vayBmcm9tIFwiYmVmb3JlLWFmdGVyLWhvb2tcIjtcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuaW1wb3J0IHsgd2l0aEN1c3RvbVJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvZ3JhcGhxbFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9rZW5BdXRoIH0gZnJvbSBcIkBvY3Rva2l0L2F1dGgtdG9rZW5cIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcbmNvbnN0IGNvbnNvbGVXYXJuID0gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG5jb25zdCBjb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIobG9nZ2VyID0ge30pIHtcbiAgaWYgKHR5cGVvZiBsb2dnZXIuZGVidWcgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5kZWJ1ZyA9IG5vb3A7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIuaW5mbyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmluZm8gPSBub29wO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLndhcm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci53YXJuID0gY29uc29sZVdhcm47XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIuZXJyb3IgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5lcnJvciA9IGNvbnNvbGVFcnJvcjtcbiAgfVxuICByZXR1cm4gbG9nZ2VyO1xufVxuY29uc3QgdXNlckFnZW50VHJhaWwgPSBgb2N0b2tpdC1jb3JlLmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gO1xuY2xhc3MgT2N0b2tpdCB7XG4gIHN0YXRpYyBWRVJTSU9OID0gVkVSU0lPTjtcbiAgc3RhdGljIGRlZmF1bHRzKGRlZmF1bHRzKSB7XG4gICAgY29uc3QgT2N0b2tpdFdpdGhEZWZhdWx0cyA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzBdIHx8IHt9O1xuICAgICAgICBpZiAodHlwZW9mIGRlZmF1bHRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzdXBlcihkZWZhdWx0cyhvcHRpb25zKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMudXNlckFnZW50ICYmIGRlZmF1bHRzLnVzZXJBZ2VudCA/IHtcbiAgICAgICAgICAgICAgdXNlckFnZW50OiBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHtkZWZhdWx0cy51c2VyQWdlbnR9YFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT2N0b2tpdFdpdGhEZWZhdWx0cztcbiAgfVxuICBzdGF0aWMgcGx1Z2lucyA9IFtdO1xuICAvKipcbiAgICogQXR0YWNoIGEgcGx1Z2luIChvciBtYW55KSB0byB5b3VyIE9jdG9raXQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IEFQSSA9IE9jdG9raXQucGx1Z2luKHBsdWdpbjEsIHBsdWdpbjIsIHBsdWdpbjMsIC4uLilcbiAgICovXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgc3RhdGljIHBsdWdpbnMgPSBjdXJyZW50UGx1Z2lucy5jb25jYXQoXG4gICAgICAgIG5ld1BsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKVxuICAgICAgKTtcbiAgICB9O1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGhvb2sgPSBuZXcgSG9vay5Db2xsZWN0aW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdERlZmF1bHRzID0ge1xuICAgICAgYmFzZVVybDogcmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXF1ZXN0OiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QsIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCB1c2FnZSBvbmx5LCBubyBuZWVkIHRvIHR5cGVcbiAgICAgICAgaG9vazogaG9vay5iaW5kKG51bGwsIFwicmVxdWVzdFwiKVxuICAgICAgfSksXG4gICAgICBtZWRpYVR5cGU6IHtcbiAgICAgICAgcHJldmlld3M6IFtdLFxuICAgICAgICBmb3JtYXQ6IFwiXCJcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widXNlci1hZ2VudFwiXSA9IG9wdGlvbnMudXNlckFnZW50ID8gYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7dXNlckFnZW50VHJhaWx9YCA6IHVzZXJBZ2VudFRyYWlsO1xuICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wcmV2aWV3cykge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG9wdGlvbnMucHJldmlld3M7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRpbWVab25lKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInRpbWUtem9uZVwiXSA9IG9wdGlvbnMudGltZVpvbmU7XG4gICAgfVxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmdyYXBocWwgPSB3aXRoQ3VzdG9tUmVxdWVzdCh0aGlzLnJlcXVlc3QpLmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5sb2cgPSBjcmVhdGVMb2dnZXIob3B0aW9ucy5sb2cpO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGNyZWF0ZVRva2VuQXV0aChvcHRpb25zLmF1dGgpO1xuICAgICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgYXV0aFN0cmF0ZWd5LCAuLi5vdGhlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBhdXRoID0gYXV0aFN0cmF0ZWd5KFxuICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcbiAgICAgICAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICAgICAgICAvLyB3ZSBwYXNzIHRoZSBjdXJyZW50IG9jdG9raXQgaW5zdGFuY2UgYXMgd2VsbCBhcyBpdHMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgICAgICAgLy8gdG8gYWxsb3cgZm9yIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWdpZXMgdGhhdCByZXR1cm4gYSBuZXcgb2N0b2tpdCBpbnN0YW5jZVxuICAgICAgICAgICAgLy8gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaW50ZXJuYWwgc3RhdGUgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGUgb3JpZ2luYWxcbiAgICAgICAgICAgIC8vIHJlcXVpcmVtZW50IGZvciB0aGlzIHdhcyB0aGUgXCJldmVudC1vY3Rva2l0XCIgYXV0aGVudGljYXRpb24gc3RyYXRlZ3lcbiAgICAgICAgICAgIC8vIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9ib3Qvb2N0b2tpdC1hdXRoLXByb2JvdC5cbiAgICAgICAgICAgIG9jdG9raXQ6IHRoaXMsXG4gICAgICAgICAgICBvY3Rva2l0T3B0aW9uczogb3RoZXJPcHRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25zLmF1dGhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzQ29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNsYXNzQ29uc3RydWN0b3IucGx1Z2luc1tpXSh0aGlzLCBvcHRpb25zKSk7XG4gICAgfVxuICB9XG4gIC8vIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3RvclxuICByZXF1ZXN0O1xuICBncmFwaHFsO1xuICBsb2c7XG4gIGhvb2s7XG4gIC8vIFRPRE86IHR5cGUgYG9jdG9raXQuYXV0aGAgYmFzZWQgb24gcGFzc2VkIG9wdGlvbnMuYXV0aFN0cmF0ZWd5XG4gIGF1dGg7XG59XG5leHBvcnQge1xuICBPY3Rva2l0XG59O1xuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxNy4wLjBcIjtcbiIsICJpbXBvcnQgdHlwZSB7IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmNvbnN0IEVuZHBvaW50czogRW5kcG9pbnRzRGVmYXVsdHNBbmREZWNvcmF0aW9ucyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgYWRkUmVwb0FjY2Vzc1RvU2VsZkhvc3RlZFJ1bm5lckdyb3VwSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiLFxuICAgIF0sXG4gICAgY2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiLFxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPcmdWYXJpYWJsZTogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvVmFyaWFibGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVdvcmtmbG93RGlzcGF0Y2g6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFydGlmYWN0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ3VzdG9tSW1hZ2VGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVDdXN0b21JbWFnZVZlcnNpb25Gcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9L3ZlcnNpb25zL3t2ZXJzaW9ufVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW46IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJ0aWZhY3Q6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIixcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiLFxuICAgIF0sXG4gICAgZm9yY2VDYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZm9yY2UtY2FuY2VsXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIixcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRDdXN0b21JbWFnZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy9pbWFnZXMvY3VzdG9tL3tpbWFnZV9kZWZpbml0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Q3VzdG9tSW1hZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9L3ZlcnNpb25zL3t2ZXJzaW9ufVwiLFxuICAgIF0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0dpdGh1Yk93bmVkSW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9naXRodWItb3duZWRcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNMaW1pdHNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbGltaXRzXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzTWFjaGluZVNwZWNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL21hY2hpbmUtc2l6ZXNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQYXJ0bmVySW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9wYXJ0bmVyXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzUGxhdGZvcm1zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3BsYXRmb3Jtc1wiLFxuICAgIF0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1ZhcmlhYmxlOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfSxcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCIsXG4gICAgXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW5Vc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEN1c3RvbUltYWdlVmVyc2lvbnNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2N1c3RvbS97aW1hZ2VfZGVmaW5pdGlvbl9pZH0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RDdXN0b21JbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2N1c3RvbVwiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RHaXRodWJIb3N0ZWRSdW5uZXJzSW5Hcm91cEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0SG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0T3JnVmFyaWFibGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25TZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5BcnRpZmFjdHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIixcbiAgICBdLFxuICAgIHJlUnVuV29ya2Zsb3c6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93RmFpbGVkSm9iczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCIsXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc0RvbmU6IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIlBVVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcXVlc3RzRm9yQXV0aGVudGljYXRlZEFwcDogW1xuICAgICAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl0sXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQmlsbGluZ1ByZW1pdW1SZXF1ZXN0VXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcHJlbWl1bV9yZXF1ZXN0L3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nUHJlbWl1bVJlcXVlc3RVc2FnZVJlcG9ydFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcHJlbWl1bV9yZXF1ZXN0L3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nVXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkJpbGxpbmdVc2FnZVJlcG9ydFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiLFxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiLFxuICAgIF0sXG4gIH0sXG4gIGNhbXBhaWduczoge1xuICAgIGNyZWF0ZUNhbXBhaWduOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiXSxcbiAgICBkZWxldGVDYW1wYWlnbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NhbXBhaWducy97Y2FtcGFpZ25fbnVtYmVyfVwiXSxcbiAgICBnZXRDYW1wYWlnblN1bW1hcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9jYW1wYWlnbnMve2NhbXBhaWduX251bWJlcn1cIl0sXG4gICAgbGlzdE9yZ0NhbXBhaWduczogW1wiR0VUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiXSxcbiAgICB1cGRhdGVDYW1wYWlnbjogW1wiUEFUQ0ggL29yZ3Mve29yZ30vY2FtcGFpZ25zL3tjYW1wYWlnbl9udW1iZXJ9XCJdLFxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiLFxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3ByZWZlcmVuY2VzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBjb21taXRBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXgvY29tbWl0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2ZpeDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBjcmVhdGVWYXJpYW50QW5hbHlzaXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5hbHlzaXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfSxcbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRBdXRvZml4OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeFwiLFxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGdldFZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzUmVwb1Rhc2s6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzL3tjb2RlcWxfdmFyaWFudF9hbmFseXNpc19pZH0vcmVwb3Mve3JlcG9fb3duZXJ9L3tyZXBvX25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCIsXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl0sXG4gIH0sXG4gIGNvZGVTZWN1cml0eToge1xuICAgIGF0dGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGF0dGFjaEVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiXSxcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQT1NUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZXRhY2hDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RldGFjaFwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25Gb3JSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zZWN1cml0eS1jb25maWd1cmF0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0ZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGdldERlZmF1bHRDb25maWd1cmF0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvc2l0b3JpZXNGb3JDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0U2luZ2xlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBzZXRDb25maWd1cmF0aW9uQXNEZWZhdWx0Rm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGNvZGVzT2ZDb25kdWN0OiB7XG4gICAgZ2V0QWxsQ29kZXNPZkNvbmR1Y3Q6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdFwiXSxcbiAgICBnZXRDb25kdWN0Q29kZTogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0L3trZXl9XCJdLFxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvckRldmNvbnRhaW5lcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvcGVybWlzc2lvbnNfY2hlY2tcIixcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCIsXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZ2V0RXhwb3J0RGV0YWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGxpc3RJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IG9yZ19pZDogXCJvcmdcIiB9IH0sXG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiLFxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIixcbiAgICBdLFxuICAgIHVwZGF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclRlYW1zOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCIsXG4gICAgXSxcbiAgICBsaXN0Q29waWxvdFNlYXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCJdLFxuICB9LFxuICBjcmVkZW50aWFsczogeyByZXZva2U6IFtcIlBPU1QgL2NyZWRlbnRpYWxzL3Jldm9rZVwiXSB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXBvc2l0b3J5QWNjZXNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnfS9kZXBlbmRhYm90L3JlcG9zaXRvcnktYWNjZXNzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3J5QWNjZXNzRGVmYXVsdExldmVsOiBbXG4gICAgICBcIlBVVCAvb3JnYW5pemF0aW9ucy97b3JnfS9kZXBlbmRhYm90L3JlcG9zaXRvcnktYWNjZXNzL2RlZmF1bHQtbGV2ZWxcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXBvc2l0b3J5QWNjZXNzRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdhbml6YXRpb25zL3tvcmd9L2RlcGVuZGFib3QvcmVwb3NpdG9yeS1hY2Nlc3NcIixcbiAgICBdLFxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIixcbiAgICBdLFxuICAgIGRpZmZSYW5nZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXSxcbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZW50ZXJwcmlzZVRlYW1NZW1iZXJzaGlwczoge1xuICAgIGFkZDogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBidWxrQWRkOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy9hZGRcIixcbiAgICBdLFxuICAgIGJ1bGtSZW1vdmU6IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzL3JlbW92ZVwiLFxuICAgIF0sXG4gICAgZ2V0OiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzXCJdLFxuICAgIHJlbW92ZTogW1xuICAgICAgXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgZW50ZXJwcmlzZVRlYW1Pcmdhbml6YXRpb25zOiB7XG4gICAgYWRkOiBbXG4gICAgICBcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMve29yZ31cIixcbiAgICBdLFxuICAgIGJ1bGtBZGQ6IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMvYWRkXCIsXG4gICAgXSxcbiAgICBidWxrUmVtb3ZlOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9vcmdhbml6YXRpb25zL3JlbW92ZVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMve29yZ31cIixcbiAgICBdLFxuICAgIGdldEFzc2lnbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve2VudGVycHJpc2UtdGVhbX0vb3JnYW5pemF0aW9ucy97b3JnfVwiLFxuICAgIF0sXG4gICAgZ2V0QXNzaWdubWVudHM6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve2VudGVycHJpc2UtdGVhbX0vb3JnYW5pemF0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIGVudGVycHJpc2VUZWFtczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtc1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIGdpc3RzOiB7XG4gICAgY2hlY2tJc1N0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9naXN0c1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZm9yazogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGdldDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldFJldmlzaW9uOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS97c2hhfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2dpc3RzXCJdLFxuICAgIGxpc3RDb21tZW50czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvZ2lzdHMvcHVibGljXCJdLFxuICAgIGxpc3RTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3N0YXJyZWRcIl0sXG4gICAgc3RhcjogW1wiUFVUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1bnN0YXI6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICB9LFxuICBnaXQ6IHtcbiAgICBjcmVhdGVCbG9iOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnNcIl0sXG4gICAgY3JlYXRlQ29tbWl0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0c1wiXSxcbiAgICBjcmVhdGVSZWY6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzXCJdLFxuICAgIGNyZWF0ZVRhZzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3NcIl0sXG4gICAgY3JlYXRlVHJlZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzXCJdLFxuICAgIGRlbGV0ZVJlZjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgICBnZXRCbG9iOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9icy97ZmlsZV9zaGF9XCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0cy97Y29tbWl0X3NoYX1cIl0sXG4gICAgZ2V0UmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWYve3JlZn1cIl0sXG4gICAgZ2V0VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzL3t0YWdfc2hhfVwiXSxcbiAgICBnZXRUcmVlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlcy97dHJlZV9zaGF9XCJdLFxuICAgIGxpc3RNYXRjaGluZ1JlZnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L21hdGNoaW5nLXJlZnMve3JlZn1cIl0sXG4gICAgdXBkYXRlUmVmOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdLFxuICB9LFxuICBob3N0ZWRDb21wdXRlOiB7XG4gICAgY3JlYXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVOZXR3b3JrQ29uZmlndXJhdGlvbkZyb21Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldE5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXROZXR3b3JrU2V0dGluZ3NGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstc2V0dGluZ3Mve25ldHdvcmtfc2V0dGluZ3NfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0TmV0d29ya0NvbmZpZ3VyYXRpb25zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICB1cGRhdGVOZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgaW50ZXJhY3Rpb25zOiB7XG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwiZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gIH0sXG4gIGlzc3Vlczoge1xuICAgIGFkZEFzc2lnbmVlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCIsXG4gICAgXSxcbiAgICBhZGRCbG9ja2VkQnlEZXBlbmRlbmN5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tlZF9ieVwiLFxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGFkZFN1Yklzc3VlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlcy97YXNzaWduZWV9XCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWRUb0lzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlcy97YXNzaWduZWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBnZXRQYXJlbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3BhcmVudFwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3REZXBlbmRlbmNpZXNCbG9ja2VkQnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnlcIixcbiAgICBdLFxuICAgIGxpc3REZXBlbmRlbmNpZXNCbG9ja2luZzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tpbmdcIixcbiAgICBdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbGlzdFN1Yklzc3VlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBsb2NrOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHJlbW92ZUFsbExhYmVsczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIHJlbW92ZURlcGVuZGVuY3lCbG9ja2VkQnk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnkve2lzc3VlX2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3ViSXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3VlXCIsXG4gICAgXSxcbiAgICByZXByaW9yaXRpemVTdWJJc3N1ZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZXMvcHJpb3JpdHlcIixcbiAgICBdLFxuICAgIHNldExhYmVsczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIHVubG9jazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlTGFiZWw6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHVwZGF0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXSxcbiAgfSxcbiAgbWFya2Rvd246IHtcbiAgICByZW5kZXI6IFtcIlBPU1QgL21hcmtkb3duXCJdLFxuICAgIHJlbmRlclJhdzogW1xuICAgICAgXCJQT1NUIC9tYXJrZG93bi9yYXdcIixcbiAgICAgIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIiB9IH0sXG4gICAgXSxcbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdLFxuICB9LFxuICBtaWdyYXRpb25zOiB7XG4gICAgZGVsZXRlQXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGdldEFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJtaWdyYXRpb25zXCIsIFwibGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCIsXG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIixcbiAgICBdLFxuICB9LFxuICBvaWRjOiB7XG4gICAgZ2V0T2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICAgIHVwZGF0ZU9pZGNDdXN0b21TdWJUZW1wbGF0ZUZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgfSxcbiAgb3Jnczoge1xuICAgIGFkZFNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5vcmdzLmFkZFNlY3VyaXR5TWFuYWdlclRlYW0oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL3NlY3VyaXR5LW1hbmFnZXJzI2FkZC1hLXNlY3VyaXR5LW1hbmFnZXItdGVhbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFzc2lnblRlYW1Ub09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfS97cm9sZV9pZH1cIixcbiAgICBdLFxuICAgIGFzc2lnblVzZXJUb09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlQXJ0aWZhY3RTdG9yYWdlUmVjb3JkOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYXJ0aWZhY3RzL21ldGFkYXRhL3N0b3JhZ2UtcmVjb3JkXCIsXG4gICAgXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZUlzc3VlVHlwZTogW1wiUE9TVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JPcmdzQ3JlYXRlT3JVcGRhdGVPcmdhbml6YXRpb25WYWx1ZXM6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ2FuaXphdGlvbnMve29yZ30vb3JnLXByb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yT3Jnc0dldE9yZ2FuaXphdGlvblZhbHVlczogW1xuICAgICAgXCJHRVQgL29yZ2FuaXphdGlvbnMve29yZ30vb3JnLXByb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NDcmVhdGVPclVwZGF0ZU9yZ2FuaXphdGlvbkRlZmluaXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlT3JnYW5pemF0aW9uRGVmaW5pdGlvbnM6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlT3JnYW5pemF0aW9uVmFsdWVzOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NEZWxldGVPcmdhbml6YXRpb25EZWZpbml0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NHZXRPcmdhbml6YXRpb25EZWZpbml0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NHZXRPcmdhbml6YXRpb25EZWZpbml0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0dldE9yZ2FuaXphdGlvblZhbHVlczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J1bGs6IFtcIlBPU1QgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL2RlbGV0ZS1yZXF1ZXN0XCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy97YXR0ZXN0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBdHRlc3RhdGlvbnNCeVN1YmplY3REaWdlc3Q6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy9kaWdlc3Qve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSXNzdWVUeXBlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUltbXV0YWJsZVJlbGVhc2VzT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlU2VsZWN0ZWRSZXBvc2l0b3J5SW1tdXRhYmxlUmVsZWFzZXNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRJbW11dGFibGVSZWxlYXNlc1NldHRpbmdzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIGdldEltbXV0YWJsZVJlbGVhc2VzU2V0dGluZ3NSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRIaXN0b3J5OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIl0sXG4gICAgZ2V0T3JnUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5L3t2ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEFydGlmYWN0U3RvcmFnZVJlY29yZHM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FydGlmYWN0cy97c3ViamVjdF9kaWdlc3R9L21ldGFkYXRhL3N0b3JhZ2UtcmVjb3Jkc1wiLFxuICAgIF0sXG4gICAgbGlzdEF0dGVzdGF0aW9uUmVwb3NpdG9yaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uc0J1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hdHRlc3RhdGlvbnMvYnVsay1saXN0ez9wZXJfcGFnZSxiZWZvcmUsYWZ0ZXJ9XCIsXG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RGYWlsZWRJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9vcmdzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvblRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCJdLFxuICAgIGxpc3RJc3N1ZVR5cGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGF0R3JhbnRSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MubGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNsaXN0LXNlY3VyaXR5LW1hbmFnZXItdGVhbXNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5yZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNyZW1vdmUtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZXZpZXdQYXRHcmFudFJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRJbW11dGFibGVSZWxlYXNlc1NldHRpbmdzOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIHNldEltbXV0YWJsZVJlbGVhc2VzU2V0dGluZ3NSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHVuYmxvY2tVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvb3Jncy97b3JnfVwiXSxcbiAgICB1cGRhdGVJc3N1ZVR5cGU6IFtcIlBVVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlcy97aXNzdWVfdHlwZV9pZH1cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIixcbiAgICBdLFxuICAgIHVwZGF0ZVBhdEFjY2VzczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9XCJdLFxuICAgIHVwZGF0ZVBhdEFjY2Vzc2VzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JPcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gIH0sXG4gIHBhY2thZ2VzOiB7XG4gICAgZGVsZXRlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5QW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicGFja2FnZXNcIiwgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZ1wiXSB9LFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5VGhlQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmVuYW1lZDogW1xuICAgICAgICAgIFwicGFja2FnZXNcIixcbiAgICAgICAgICBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIixcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeVVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgfSxcbiAgcHJpdmF0ZVJlZ2lzdHJpZXM6IHtcbiAgICBjcmVhdGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzXCJdLFxuICAgIGRlbGV0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldE9yZ1ByaXZhdGVSZWdpc3RyeTogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy9wdWJsaWMta2V5XCJdLFxuICAgIGxpc3RPcmdQcml2YXRlUmVnaXN0cmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiXSxcbiAgICB1cGRhdGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZEl0ZW1Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCJdLFxuICAgIGFkZEl0ZW1Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gICAgXSxcbiAgICBkZWxldGVJdGVtRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVJdGVtRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RmllbGRGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHMve2ZpZWxkX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RmllbGRGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vZmllbGRzL3tmaWVsZF9pZH1cIixcbiAgICBdLFxuICAgIGdldEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfVwiXSxcbiAgICBnZXRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9XCJdLFxuICAgIGdldE9yZ0l0ZW06IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCJdLFxuICAgIGdldFVzZXJJdGVtOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0RmllbGRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2ZpZWxkc1wiXSxcbiAgICBsaXN0RmllbGRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2ZpZWxkc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjJcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyXCJdLFxuICAgIGxpc3RJdGVtc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9pdGVtc1wiXSxcbiAgICBsaXN0SXRlbXNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUl0ZW1Gb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSXRlbUZvclVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIixcbiAgICBdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCIsXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGNoZWNrQ29sbGFib3JhdG9yOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ltbXV0YWJsZVJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltbXV0YWJsZS1yZWxlYXNlc1wiXSxcbiAgICBjaGVja1ByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUF0dGVzdGF0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnNcIl0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlT3JnUnVsZXNldDogW1wiUE9TVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVQYWdlc0RlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlUmVwb1J1bGVzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlUmVwb3NpdG9yeVZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0dldFJlcG9zaXRvcnlWYWx1ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbkVudmlyb25tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZURlcGxveW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnUnVsZXNldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlSW1tdXRhYmxlUmVsZWFzZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIGRpc2FibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIixcbiAgICBdLFxuICAgIGRpc2FibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRvd25sb2FkWmlwYmFsbEFyY2hpdmVcIl0gfSxcbiAgICBdLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZW5hYmxlSW1tdXRhYmxlUmVsZWFzZXM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1tdXRhYmxlLXJlbGVhc2VzXCJdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiLFxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgIF0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0Q3VzdG9tRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIixcbiAgICBdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlcy97c3RhdHVzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhZ2VzSGVhbHRoQ2hlY2s6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvaGVhbHRoXCJdLFxuICAgIGdldFBhcnRpY2lwYXRpb25TdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wYXJ0aWNpcGF0aW9uXCJdLFxuICAgIGdldFB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldEhpc3Rvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVzZXRWZXJzaW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgICBdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vYnJhbmNoZXMtd2hlcmUtaGVhZFwiLFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3RDdXN0b21EZXBsb3ltZW50UnVsZUludGVncmF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgcmVuYW1lQnJhbmNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9yZW5hbWVcIl0sXG4gICAgcmVwbGFjZUFsbFRvcGljczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgcmVxdWVzdFBhZ2VzQnVpbGQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBzZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJlbGVhc2U6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgdXBkYXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9LFxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIl0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl0sXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgY3JlYXRlUHVzaFByb3RlY3Rpb25CeXBhc3M6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3B1c2gtcHJvdGVjdGlvbi1ieXBhc3Nlc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRTY2FuSGlzdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvc2Nhbi1oaXN0b3J5XCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdQYXR0ZXJuQ29uZmlnczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL3BhdHRlcm4tY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdQYXR0ZXJuQ29uZmlnczogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvcGF0dGVybi1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHNlY3VyaXR5QWR2aXNvcmllczoge1xuICAgIGNyZWF0ZUZvcms6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vZm9ya3NcIixcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9zaXRvcnlBZHZpc29yeUN2ZVJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vY3ZlXCIsXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIixcbiAgICBdLFxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldERpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0RGlzY3Vzc2lvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3RlYW1zXCJdLFxuICAgIGxpc3RNZW1iZXJzSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vaW52aXRhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J1bGs6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMvZGVsZXRlLXJlcXVlc3RcIixcbiAgICBdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97YXR0ZXN0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBdHRlc3RhdGlvbnNCeVN1YmplY3REaWdlc3Q6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy9kaWdlc3Qve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgZGVsZXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlJZDogW1wiR0VUIC91c2VyL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnNCdWxrOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vYXR0ZXN0YXRpb25zL2J1bGstbGlzdHs/cGVyX3BhZ2UsYmVmb3JlLGFmdGVyfVwiLFxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCJdLFxuICAgIGxpc3RQdWJsaWNLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5c1wiXSxcbiAgICBsaXN0U29jaWFsQWNjb3VudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U29jaWFsQWNjb3VudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsXG4gICAgXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVuZHBvaW50cztcbiIsICJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludE9wdGlvbnMsIFJlcXVlc3RQYXJhbWV0ZXJzLCBSb3V0ZSB9IGZyb20gXCJAb2N0b2tpdC90eXBlc1wiO1xuaW1wb3J0IEVORFBPSU5UUyBmcm9tIFwiLi9nZW5lcmF0ZWQvZW5kcG9pbnRzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludE1ldGhvZHMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQvbWV0aG9kLXR5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50RGVjb3JhdGlvbnMgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vLyBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIHJlZmFjdG9yZWQgaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMuanMvcHVsbC82MjJcbi8vIHRvIG9wdGltaXNlIHRoZSBydW50aW1lIHBlcmZvcm1hbmNlIG9mIE9jdG9raXQgaW5pdGlhbGl6YXRpb24uXG4vL1xuLy8gVGhpcyBvcHRpbWl6YXRpb24gaW52b2x2ZXMgdHdvIGtleSBjaGFuZ2VzOlxuLy8gMS4gUHJlLUNvbXB1dGF0aW9uOiBUaGUgZW5kcG9pbnQgbWV0aG9kcyBhcmUgcHJlLWNvbXB1dGVkIG9uY2UgYXQgbW9kdWxlIGxvYWRcbi8vICAgIHRpbWUgaW5zdGVhZCBvZiBlYWNoIGludm9jYXRpb24gb2YgYGVuZHBvaW50c1RvTWV0aG9kcygpYC5cbi8vIDIuIExhenkgaW5pdGlhbGl6YXRpb24gYW5kIGNhY2hpbmc6IFdlIHVzZSBhIFByb3h5IGZvciBlYWNoIHNjb3BlIHRvIG9ubHlcbi8vICAgIGluaXRpYWxpemUgbWV0aG9kcyB0aGF0IGFyZSBhY3R1YWxseSBjYWxsZWQuIFRoaXMgcmVkdWNlcyBydW50aW1lIG92ZXJoZWFkXG4vLyAgICBhcyB0aGUgaW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgZGVlcCBtZXJnaW5nIG9mIG9iamVjdHMuIFRoZSBpbml0aWFsaXplZFxuLy8gICAgbWV0aG9kcyBhcmUgdGhlbiBjYWNoZWQgZm9yIGZ1dHVyZSB1c2UuXG5cbmNvbnN0IGVuZHBvaW50TWV0aG9kc01hcCA9IG5ldyBNYXAoKTtcbmZvciAoY29uc3QgW3Njb3BlLCBlbmRwb2ludHNdIG9mIE9iamVjdC5lbnRyaWVzKEVORFBPSU5UUykpIHtcbiAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgZW5kcG9pbnRdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50cykpIHtcbiAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICBjb25zdCBlbmRwb2ludERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHMsXG4gICAgKTtcblxuICAgIGlmICghZW5kcG9pbnRNZXRob2RzTWFwLmhhcyhzY29wZSkpIHtcbiAgICAgIGVuZHBvaW50TWV0aG9kc01hcC5zZXQoc2NvcGUsIG5ldyBNYXAoKSk7XG4gICAgfVxuXG4gICAgZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuc2V0KG1ldGhvZE5hbWUsIHtcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICBkZWNvcmF0aW9ucyxcbiAgICB9KTtcbiAgfVxufVxuXG50eXBlIFByb3h5VGFyZ2V0ID0ge1xuICBvY3Rva2l0OiBPY3Rva2l0O1xuICBzY29wZTogc3RyaW5nO1xuICBjYWNoZTogUmVjb3JkPHN0cmluZywgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+O1xufTtcblxuY29uc3QgaGFuZGxlciA9IHtcbiAgaGFzKHsgc2NvcGUgfTogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5oYXMobWV0aG9kTmFtZSk7XG4gIH0sXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHRoaXMuZ2V0KHRhcmdldCwgbWV0aG9kTmFtZSksIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0sXG4gIGRlZmluZVByb3BlcnR5KFxuICAgIHRhcmdldDogUHJveHlUYXJnZXQsXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcixcbiAgKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9OiBQcm94eVRhcmdldCkge1xuICAgIHJldHVybiBbLi4uZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkua2V5cygpXTtcbiAgfSxcbiAgc2V0KHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiAodGFyZ2V0LmNhY2hlW21ldGhvZE5hbWVdID0gdmFsdWUpO1xuICB9LFxuICBnZXQoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGUgfTogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIGlmIChjYWNoZVttZXRob2ROYW1lXSkge1xuICAgICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZCA9IGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmdldChtZXRob2ROYW1lKTtcbiAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gZGVjb3JhdGUoXG4gICAgICAgIG9jdG9raXQsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgICBkZWNvcmF0aW9ucyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgfSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IFJlc3RFbmRwb2ludE1ldGhvZHMge1xuICBjb25zdCBuZXdNZXRob2RzID0ge30gYXMgeyBba2V5OiBzdHJpbmddOiBvYmplY3QgfTtcblxuICBmb3IgKGNvbnN0IHNjb3BlIG9mIGVuZHBvaW50TWV0aG9kc01hcC5rZXlzKCkpIHtcbiAgICBuZXdNZXRob2RzW3Njb3BlXSA9IG5ldyBQcm94eSh7IG9jdG9raXQsIHNjb3BlLCBjYWNoZToge30gfSwgaGFuZGxlcik7XG4gIH1cblxuICByZXR1cm4gbmV3TWV0aG9kcyBhcyBSZXN0RW5kcG9pbnRNZXRob2RzO1xufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZShcbiAgb2N0b2tpdDogT2N0b2tpdCxcbiAgc2NvcGU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBkZWZhdWx0czogRW5kcG9pbnRPcHRpb25zLFxuICBkZWNvcmF0aW9uczogRW5kcG9pbnREZWNvcmF0aW9ucyxcbikge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiB3aXRoRGVjb3JhdGlvbnMoXG4gICAgLi4uYXJnczogW1JvdXRlLCBSZXF1ZXN0UGFyYW1ldGVycz9dIHwgW0VuZHBvaW50T3B0aW9uc11cbiAgKSB7XG4gICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgLy8gVGhlcmUgYXJlIGN1cnJlbnRseSBubyBvdGhlciBkZWNvcmF0aW9ucyB0aGFuIGAubWFwVG9EYXRhYFxuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzLFxuICAgICAgKSkge1xuICAgICAgICBpZiAobmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCEoYWxpYXMgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbYWxpYXNdID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKC4uLmFyZ3MpO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHdpdGhEZWNvcmF0aW9ucywgcmVxdWVzdFdpdGhEZWZhdWx0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBPY3Rva2l0IH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgeyBSZXN0RW5kcG9pbnRNZXRob2RUeXBlcyB9IGZyb20gXCIuL2dlbmVyYXRlZC9wYXJhbWV0ZXJzLWFuZC1yZXNwb25zZS10eXBlcy5qc1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGVuZHBvaW50c1RvTWV0aG9kcyB9IGZyb20gXCIuL2VuZHBvaW50cy10by1tZXRob2RzLmpzXCI7XG5cbi8vIEV4cG9ydCB0aGUgdHlwZSBmb3IgZG93bnN0cmVhbSB1c2VycyBpbiBvcmRlciB0byBmaXggYSBUeXBlU2NyaXB0IGVycm9yXG4vLyBUaGUgaW5mZXJyZWQgdHlwZSBvZiAnT2N0b2tpdCcgY2Fubm90IGJlIG5hbWVkIHdpdGhvdXQgYSByZWZlcmVuY2UgdG8gJy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3QtdHlwZXMvdHlwZXMuanMnLiBUaGlzIGlzIGxpa2VseSBub3QgcG9ydGFibGUuIEEgdHlwZSBhbm5vdGF0aW9uIGlzIG5lY2Vzc2FyeS5cbmV4cG9ydCB0eXBlIHsgQXBpIH07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBBcGkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpLFxuICB9O1xufVxucmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IEFwaVtcInJlc3RcIl0gJiBBcGkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgLi4uYXBpLFxuICAgIHJlc3Q6IGFwaSxcbiAgfTtcbn1cbmxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gKFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhIHx8IFwidG90YWxfY29tbWl0c1wiIGluIHJlc3BvbnNlLmRhdGEpICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IHRvdGFsQ29tbWl0cyA9IHJlc3BvbnNlLmRhdGEudG90YWxfY29tbWl0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvbW1pdHM7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY29tbWl0cyA9IHRvdGFsQ29tbWl0cztcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaXRlcmF0b3IuanNcbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKSByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0TWV0aG9kKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB1cmwgPSAoKG5vcm1hbGl6ZWRSZXNwb25zZS5oZWFkZXJzLmxpbmsgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAvPChbXjw+XSspPjtcXHMqcmVsPVwibmV4dFwiL1xuICAgICAgICAgICkgfHwgW10pWzFdO1xuICAgICAgICAgIGlmICghdXJsICYmIFwidG90YWxfY29tbWl0c1wiIGluIG5vcm1hbGl6ZWRSZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKG5vcm1hbGl6ZWRSZXNwb25zZS51cmwpO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gcGFyc2VkVXJsLnNlYXJjaFBhcmFtcztcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChwYXJhbXMuZ2V0KFwicGFnZVwiKSB8fCBcIjFcIiwgMTApO1xuICAgICAgICAgICAgY29uc3QgcGVyX3BhZ2UgPSBwYXJzZUludChwYXJhbXMuZ2V0KFwicGVyX3BhZ2VcIikgfHwgXCIyNTBcIiwgMTApO1xuICAgICAgICAgICAgaWYgKHBhZ2UgKiBwZXJfcGFnZSA8IG5vcm1hbGl6ZWRSZXNwb25zZS5kYXRhLnRvdGFsX2NvbW1pdHMpIHtcbiAgICAgICAgICAgICAgcGFyYW1zLnNldChcInBhZ2VcIiwgU3RyaW5nKHBhZ2UgKyAxKSk7XG4gICAgICAgICAgICAgIHVybCA9IHBhcnNlZFVybC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0ZS5qc1xuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGdhdGhlcihcbiAgICBvY3Rva2l0LFxuICAgIFtdLFxuICAgIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbiAgICBtYXBGblxuICApO1xufVxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yMi5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGVhcmx5RXhpdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoXG4gICAgICBtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YVxuICAgICk7XG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHJldHVybiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbik7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvY29tcG9zZS1wYWdpbmF0ZS5qc1xudmFyIGNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBPYmplY3QuYXNzaWduKHBhZ2luYXRlLCB7XG4gIGl0ZXJhdG9yXG59KTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dlbmVyYXRlZC9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xudmFyIHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXG4gIFwiR0VUIC9hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvYXNzaWdubWVudHMve2Fzc2lnbm1lbnRfaWR9L2FjY2VwdGVkX2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zL3tjbGFzc3Jvb21faWR9L2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnMve29yZ30vZGVwZW5kYWJvdC9yZXBvc2l0b3J5LWFjY2Vzc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGYtaG9zdGVkLXJ1bm5lcnMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vaG9zdGVkLXJ1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvbWV0cmljc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zaWdodHMvYXBpL3JvdXRlLXN0YXRzL3thY3Rvcl90eXBlfS97YWN0b3JfaWR9XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9zdWJqZWN0LXN0YXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS91c2VyLXN0YXRzL3t1c2VyX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1YyXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXNlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvZGV2Y29udGFpbmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tpbmdcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXG5dO1xuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuZnVuY3Rpb24gcGFnaW5hdGVSZXN0KG9jdG9raXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdpbmF0ZTogT2JqZWN0LmFzc2lnbihwYWdpbmF0ZS5iaW5kKG51bGwsIG9jdG9raXQpLCB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IuYmluZChudWxsLCBvY3Rva2l0KVxuICAgIH0pXG4gIH07XG59XG5wYWdpbmF0ZVJlc3QuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sCiAgIm1hcHBpbmdzIjogInlqQkFBQSxJQUFBQSxHQUFBQyxFQUFBQyxJQUFBLGNBRUEsSUFBSUMsR0FBTSxRQUFRLEtBQUssRUFDbkJDLEdBQU0sUUFBUSxLQUFLLEVBQ25CQyxHQUFPLFFBQVEsTUFBTSxFQUNyQkMsR0FBUSxRQUFRLE9BQU8sRUFDdkJDLEdBQVMsUUFBUSxRQUFRLEVBQ3pCQyxHQUFTLFFBQVEsUUFBUSxFQUN6QkMsR0FBTyxRQUFRLE1BQU0sRUFHekJQLEdBQVEsYUFBZVEsR0FDdkJSLEdBQVEsY0FBZ0JTLEdBQ3hCVCxHQUFRLGNBQWdCVSxHQUN4QlYsR0FBUSxlQUFpQlcsR0FHekIsU0FBU0gsR0FBYUksRUFBUyxDQUM3QixJQUFJQyxFQUFRLElBQUlDLEdBQWVGLENBQU8sRUFDdEMsT0FBQUMsRUFBTSxRQUFVVixHQUFLLFFBQ2RVLENBQ1QsQ0FFQSxTQUFTSixHQUFjRyxFQUFTLENBQzlCLElBQUlDLEVBQVEsSUFBSUMsR0FBZUYsQ0FBTyxFQUN0QyxPQUFBQyxFQUFNLFFBQVVWLEdBQUssUUFDckJVLEVBQU0sYUFBZUUsR0FDckJGLEVBQU0sWUFBYyxJQUNiQSxDQUNULENBRUEsU0FBU0gsR0FBY0UsRUFBUyxDQUM5QixJQUFJQyxFQUFRLElBQUlDLEdBQWVGLENBQU8sRUFDdEMsT0FBQUMsRUFBTSxRQUFVVCxHQUFNLFFBQ2ZTLENBQ1QsQ0FFQSxTQUFTRixHQUFlQyxFQUFTLENBQy9CLElBQUlDLEVBQVEsSUFBSUMsR0FBZUYsQ0FBTyxFQUN0QyxPQUFBQyxFQUFNLFFBQVVULEdBQU0sUUFDdEJTLEVBQU0sYUFBZUUsR0FDckJGLEVBQU0sWUFBYyxJQUNiQSxDQUNULENBR0EsU0FBU0MsR0FBZUYsRUFBUyxDQUMvQixJQUFJSSxFQUFPLEtBQ1hBLEVBQUssUUFBVUosR0FBVyxDQUFDLEVBQzNCSSxFQUFLLGFBQWVBLEVBQUssUUFBUSxPQUFTLENBQUMs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LEVBQVEsUUFBYSxDQUFDLEVBQUksVUFDbENBLEVBQVFBLEVBQVEsTUFBVyxDQUFDLEVBQUksUUFFaENBLEVBQVFBLEVBQVEsS0FBVSxDQUFDLEVBQUksT0FDL0JBLEVBQVFBLEVBQVEsS0FBVSxDQUFDLEVBQUksT0FDL0JBLEVBQVFBLEVBQVEsTUFBVyxFQUFFLEVBQUksUUFDakNBLEVBQVFBLEVBQVEsS0FBVSxFQUFFLEVBQUksT0FDaENBLEVBQVFBLEVBQVEsU0FBYyxFQUFFLEVBQUksV0FDcENBLEVBQVFBLEVBQVEsVUFBZSxFQUFFLEVBQUksWUFDckNBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsS0FBVSxFQUFFLEVBQUksT0FDaENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsSUFBUyxFQUFFLEVBQUksTUFFL0JBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsV0FBZ0IsRUFBRSxFQUFJLGFBQ3RDQSxFQUFRQSxFQUFRLFNBQWMsRUFBRSxFQUFJLFdBQ3BDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBRWpDQSxFQUFRQSxFQUFRLFVBQVUsRUFBSSxFQUFFLEVBQUksV0FDcENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsVUFBZSxFQUFFLEVBQUksWUFDckNBLEVBQVFBLEVBQVEsWUFBaUIsRUFBRSxFQUFJLGNBRXZDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBQ2pDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBRWpDQSxFQUFRQSxFQUFRLFdBQWdCLEVBQUUsRUFBSSxhQUV0Q0EsRUFBUUEsRUFBUSxLQUFVLEVBQUUsRUFBSSxPQUNoQ0EsRUFBUUEsRUFBUSxPQUFZLEVBQUUsRUFBSSxTQUVsQ0EsRUFBUUEs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QUFLLFdBQ0wsSUFBSyxhQUNMLElBQUssa0JBQ0wsSUFBSyxTQUNILE1BQU8sYUFDVCxJQUFLLGNBQ0wsSUFBSyxlQUNMLElBQUssVUFDSCxNQUFPLGVBQ1QsSUFBSyxjQUNMLElBQUssY0FDTCxJQUFLLGFBQ0wsSUFBSyxhQUNMLElBQUssWUFDTCxJQUFLLEtBQ0wsSUFBSyxTQUNILE1BQU8sY0FDVCxJQUFLLGNBQ0wsSUFBSyxhQUNMLElBQUssWUFDSCxNQUFPLGNBQ1QsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLFlBQ0gsTUFBTyxjQUNULElBQUssY0FDTCxJQUFLLGNBQ0wsSUFBSyxhQUNMLElBQUssWUFDTCxJQUFLLGNBQ0wsSUFBSyxLQUNILE1BQU8sY0FDVCxJQUFLLGNBQ0gsTUFBTyxjQUNULElBQUssVUFDTCxJQUFLLE1BQ0wsSUFBSyxPQUNMLElBQUssU0FDTCxJQUFLLFNBQ0gsTUFBTyxTQUNULElBQUssVUFDTCxJQUFLLFNBQ0gsTUFBTyxTQUNULElBQUssY0FDTCxJQUFLLE1BQ0wsSUFBSyxZQUNMLElBQUssY0FDSCxNQUFPLFlBQ1QsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLFlBQ0wsSUFBSyxVQUNMLElBQUssY0FDSCxNQUFPLGNBQ1QsSUFBSyxTQUNMLElBQUssZUFDTCxJQUFLLFdBQ0gsTUFBTyxlQUNULElBQUssU0FDTCxJQUFLLGVBQ0wsSUFBSyxXQUNILE1BQU8sZUFDVCxJQUFLLGlCQUNMLElBQUssUUFDTCxJQUFLLFNBQ0wsSUFBSyxRQUNMLElBQUssY0FDTCxJQUFLLFNBQ0wsSUFBSyxhQUNMLElBQUssYUFDTCxJQUFLLFlBQ0wsSUFBSyxXQUNMLElBQUssYUFDTCxJQUFLLGtCQUNMLElBQUssS0FDTCxJQUFLLFNBQ0wsSUFBSyxXQUNMLElBQUssZUFDTCxJQUFLLFdBQ0gsTUFBTyxlQUNULElBQUssU0FDTCxJQUFLLGVBQ0wsSUFBSyxXQUNILE1BQU8sZUFDVCxJQUFLLFNBQ0wsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLGFBQ0wsSUFBSyxZQUNMLElBQUssV0FD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QUNwREEsRUFBUUQsRUFBYyxLQUFLLENBQUMsQ0FBRSxLQUFBRSxDQUFLLElBQU1BLEVBQUssU0FBUyxxQkFBcUIsQ0FBQyxFQUM1RCxjQUFhLFNBQW1CLFVBQVMsUUFDMURELEVBQVFELEVBQWMsS0FBSyxDQUFDLENBQUUsS0FBQUUsQ0FBSyxJQUFNQSxFQUFLLFNBQVMsc0JBQXNCLENBQUMsR0FFNUUsQ0FBQ0QsRUFBTyxDQUNMRSxHQUFVLHlCQUFpQyxPQUFJLElBQVksV0FBUSxZQUFZSixHQUFTLFNBQVdILENBQU8sRUFBRSxFQUNqSCxNQUNGLENBRUEsSUFBTVEsRUFBZ0IsTUFBTUMsR0FBYUosRUFBTSxXQUFXLEVBQ3BESyxFQUF3QkwsRUFBTSxZQUFZLFNBQVMsTUFBTSxFQUM3RCxNQUFNTSxHQUFXSCxDQUFhLEVBQzlCLE1BQU1JLEdBQVdKLENBQWEsRUFDaEMsTUFBTUssR0FBSyxHQUFBQyxRQUFLLEtBQUtKLEVBQXVCLFNBQVMsRUFBRyxDQUFDLGdCQUFpQixlQUFnQixjQUFjLENBQUMsQ0FDM0csR0FBRyIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX3R1bm5lbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibmV0IiwgInRscyIsICJodHRwIiwgImh0dHBzIiwgImV2ZW50cyIsICJhc3NlcnQiLCAidXRpbCIsICJodHRwT3Zlckh0dHAiLCAiaHR0cHNPdmVySHR0cCIsICJodHRwT3Zlckh0dHBzIiwgImh0dHBzT3Zlckh0dHBzIiwgIm9wdGlvbnMiLCAiYWdlbnQiLCAiVHVubmVsaW5nQWdlbnQiLCAiY3JlYXRlU2VjdXJlU29ja2V0IiwgInNlbGYiLCAic29ja2V0IiwgImhvc3QiLCAicG9ydCIsICJsb2NhbEFkZHJlc3MiLCAidG9PcHRpb25zIiwgImkiLCAibGVuIiwgInBlbmRpbmciLCAicmVxIiwgIm1lcmdlT3B0aW9ucyIsICJvbkZyZWUiLCAib25DbG9zZU9yUmVtb3ZlIiwgImVyciIsICJjYiIsICJwbGFjZWhvbGRlciIsICJjb25uZWN0T3B0aW9ucyIsICJkZWJ1ZyIsICJjb25uZWN0UmVxIiwgIm9uUmVzcG9uc2UiLCAib25VcGdyYWRlIiwgIm9uQ29ubmVjdCIsICJvbkVycm9yIiwgInJlcyIsICJoZWFkIiwgImVycm9yIiwgImNhdXNlIiwgInBvcyIsICJob3N0SGVhZGVyIiwgInRsc09wdGlvbnMiLCAic2VjdXJlU29ja2V0IiwgInRhcmdldCIsICJvdmVycmlkZXMiLCAia2V5cyIsICJqIiwgImtleUxlbiIsICJrIiwgImFyZ3MiLCAicmVxdWlyZV90dW5uZWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2Vycm9ycyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtVbmRpY2lFcnJvciIsICJVbmRpY2lFcnJvciIsICJtZXNzYWdlIiwgImluc3RhbmNlIiwgImtDb25uZWN0VGltZW91dEVycm9yIiwgIkNvbm5lY3RUaW1lb3V0RXJyb3IiLCAia0hlYWRlcnNUaW1lb3V0RXJyb3IiLCAiSGVhZGVyc1RpbWVvdXRFcnJvciIsICJrSGVhZGVyc092ZXJmbG93RXJyb3IiLCAiSGVhZGVyc092ZXJmbG93RXJyb3IiLCAia0JvZHlUaW1lb3V0RXJyb3IiLCAiQm9keVRpbWVvdXRFcnJvciIsICJrUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAiUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAic3RhdHVzQ29kZSIsICJoZWFkZXJzIiwgImJvZHkiLCAia0ludmFsaWRBcmd1bWVudEVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJrQWJvcnRFcnJvciIsICJBYm9ydEVycm9yIiwgImtSZXF1ZXN0QWJvcnRlZEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAia0luZm9ybWF0aW9uYWxFcnJvciIsICJJbmZvcm1hdGlvbmFsRXJyb3IiLCAia1JlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciIsICJSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAia1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAiUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciIsICJrQ2xpZW50RGVzdHJveWVkRXJyb3IiLCAiQ2xpZW50RGVzdHJveWVkRXJyb3IiLCAia0NsaWVudENsb3NlZEVycm9yIiwgIkNsaWVudENsb3NlZEVycm9yIiwgImtTb2NrZXRFcnJvciIsICJTb2NrZXRFcnJvciIsICJzb2NrZXQiLCAia05vdFN1cHBvcnRlZEVycm9yIiwgIk5vdFN1cHBvcnRlZEVycm9yIiwgImtCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciIsICJCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciIsICJrSFRUUFBhcnNlckVycm9yIiwgIkhUVFBQYXJzZXJFcnJvciIsICJjb2RlIiwgImRhdGEiLCAia1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IiLCAiUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciIsICJrUmVxdWVzdFJldHJ5RXJyb3IiLCAiUmVxdWVzdFJldHJ5RXJyb3IiLCAia1Jlc3BvbnNlRXJyb3IiLCAiUmVzcG9uc2VFcnJvciIsICJrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IiLCAiU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IiLCAiY2F1c2UiLCAib3B0aW9ucyIsICJrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIiwgIk1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIiwgIndlbGxrbm93bkhlYWRlck5hbWVzIiwgImkiLCAia2V5IiwgImxvd2VyQ2FzZWRLZXkiLCAicmVxdWlyZV90cmVlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAid2VsbGtub3duSGVhZGVyTmFtZXMiLCAiaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQiLCAiVHN0Tm9kZSIsICJfVHN0Tm9kZSIsICJrZXkiLCAidmFsdWUiLCAiaW5kZXgiLCAibGVuZ3RoIiwgIm5vZGUiLCAiY29kZSIsICJrZXlsZW5ndGgiLCAiVGVybmFyeVNlYXJjaFRyZWUiLCAidHJlZSIsICJpIiwgInJlcXVpcmVfdXRpbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJrRGVzdHJveWVkIiwgImtCb2R5VXNlZCIsICJrTGlzdGVuZXJzIiwgImtCb2R5IiwgIkluY29taW5nTWVzc2FnZSIsICJzdHJlYW0iLCAibmV0IiwgIkJsb2IiLCAibm9kZVV0aWwiLCAic3RyaW5naWZ5IiwgIkVFIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIiwgInRyZWUiLCAibm9kZU1ham9yIiwgIm5vZGVNaW5vciIsICJ2IiwgIkJvZHlBc3luY0l0ZXJhYmxlIiwgImJvZHkiLCAid3JhcFJlcXVlc3RCb2R5IiwgImlzU3RyZWFtIiwgImJvZHlMZW5ndGgiLCAiaXNJdGVyYWJsZSIsICJub3AiLCAib2JqIiwgImlzQmxvYkxpa2UiLCAib2JqZWN0IiwgInNUYWciLCAiYnVpbGRVUkwiLCAidXJsIiwgInF1ZXJ5UGFyYW1zIiwgInN0cmluZ2lmaWVkIiwgImlzVmFsaWRQb3J0IiwgInBvcnQiLCAidmFsdWUiLCAiaXNIdHRwT3JIdHRwc1ByZWZpeGVkIiwgInBhcnNlVVJMIiwgIm9yaWdpbiIsICJwYXRoIiwgInBhcnNlT3JpZ2luIiwgImdldEhvc3RuYW1lIiwgImhvc3QiLCAiaWR4IiwgImdldFNlcnZlck5hbWUiLCAic2VydmVybmFtZSIsICJkZWVwQ2xvbmUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgInN0YXRlIiwgImlzQnVmZmVyIiwgImlzRGVzdHJveWVkIiwgImRlc3Ryb3kiLCAiZXJyIiwgIktFRVBBTElWRV9USU1FT1VUX0VYUFIiLCAicGFyc2VLZWVwQWxpdmVUaW1lb3V0IiwgInZhbCIsICJtIiwgImhlYWRlck5hbWVUb1N0cmluZyIsICJidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIiwgInBhcnNlSGVhZGVycyIsICJoZWFkZXJzIiwgImkiLCAia2V5IiwgImhlYWRlcnNWYWx1ZSIsICJ4IiwgInBhcnNlUmF3SGVhZGVycyIsICJsZW4iLCAicmV0IiwgImhhc0NvbnRlbnRMZW5ndGgiLCAiY29udGVudERpc3Bvc2l0aW9uSWR4IiwgImtMZW4iLCAibiIsICJidWZmZXIiLCAidmFsaWRhdGVIYW5kbGVyIiwgImhhbmRsZXIiLCAibWV0aG9kIiwgInVwZ3JhZGUiLCAiaXNEaXN0dXJiZWQiLCAiaXNFcnJvcmVkIiwgImlzUmVhZGFibGUiLCAiZ2V0U29ja2V0SW5mbyIsICJzb2NrZXQiLCAiUmVhZGFibGVTdHJlYW1Gcm9tIiwgIml0ZXJhYmxlIiwgIml0ZXJhdG9yIiwgImNvbnRyb2xsZXIiLCAiZG9uZSIsICJidWYiLCAicmVhc29uIiwgImlzRm9ybURhdGFMaWtlIiwgImFkZEFib3J0TGlzdGVuZXIiLCAic2lnbmFsIiwgImxpc3RlbmVyIiwgImhhc1RvV2VsbEZvcm1lZCIsICJoYXNJc1dlbGxGb3JtZWQiLCAidG9VU1ZTdHJpbmciLCAiaXNVU1ZTdHJpbmciLCAiaXNUb2tlbkNoYXJDb2RlIiwgImMiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJjaGFyYWN0ZXJzIiwgImhlYWRlckNoYXJSZWdleCIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAicGFyc2VSYW5nZUhlYWRlciIsICJyYW5nZSIsICJhZGRMaXN0ZW5lciIsICJuYW1lIiwgInJlbW92ZUFsbExpc3RlbmVycyIsICJlcnJvclJlcXVlc3QiLCAiY2xpZW50IiwgInJlcXVlc3QiLCAia0VudW1lcmFibGVQcm9wZXJ0eSIsICJub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UiLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHMiLCAicmVxdWlyZV9kaWFnbm9zdGljcyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImRpYWdub3N0aWNzQ2hhbm5lbCIsICJ1dGlsIiwgInVuZGljaURlYnVnTG9nIiwgImZldGNoRGVidWdsb2ciLCAid2Vic29ja2V0RGVidWdsb2ciLCAiaXNDbGllbnRTZXQiLCAiY2hhbm5lbHMiLCAiZGVidWdsb2ciLCAiZXZ0IiwgInZlcnNpb24iLCAicHJvdG9jb2wiLCAicG9ydCIsICJob3N0IiwgImVycm9yIiwgIm1ldGhvZCIsICJwYXRoIiwgIm9yaWdpbiIsICJzdGF0dXNDb2RlIiwgImFkZHJlc3MiLCAid2Vic29ja2V0IiwgImNvZGUiLCAicmVhc29uIiwgImVyciIsICJyZXF1aXJlX3JlcXVlc3QiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJOb3RTdXBwb3J0ZWRFcnJvciIsICJhc3NlcnQiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAiaXNTdHJlYW0iLCAiZGVzdHJveSIsICJpc0J1ZmZlciIsICJpc0Zvcm1EYXRhTGlrZSIsICJpc0l0ZXJhYmxlIiwgImlzQmxvYkxpa2UiLCAiYnVpbGRVUkwiLCAidmFsaWRhdGVIYW5kbGVyIiwgImdldFNlcnZlck5hbWUiLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHMiLCAiY2hhbm5lbHMiLCAiaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQiLCAiaW52YWxpZFBhdGhSZWdleCIsICJrSGFuZGxlciIsICJSZXF1ZXN0IiwgIm9yaWdpbiIsICJwYXRoIiwgIm1ldGhvZCIsICJib2R5IiwgImhlYWRlcnMiLCAicXVlcnkiLCAiaWRlbXBvdGVudCIsICJibG9ja2luZyIsICJ1cGdyYWRlIiwgImhlYWRlcnNUaW1lb3V0IiwgImJvZHlUaW1lb3V0IiwgInJlc2V0IiwgInRocm93T25FcnJvciIsICJleHBlY3RDb250aW51ZSIsICJzZXJ2ZXJuYW1lIiwgImhhbmRsZXIiLCAiclN0YXRlIiwgImVyciIsICJpIiwgInByb2Nlc3NIZWFkZXIiLCAiaGVhZGVyIiwgImtleXMiLCAiY2h1bmsiLCAiYWJvcnQiLCAic3RhdHVzQ29kZSIsICJyZXN1bWUiLCAic3RhdHVzVGV4dCIsICJzb2NrZXQiLCAidHJhaWxlcnMiLCAiZXJyb3IiLCAia2V5IiwgInZhbHVlIiwgInJlcXVlc3QiLCAidmFsIiwgImhlYWRlck5hbWUiLCAiYXJyIiwgInN0ciIsICJyZXF1aXJlX2Rpc3BhdGNoZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJFdmVudEVtaXR0ZXIiLCAiRGlzcGF0Y2hlciIsICJhcmdzIiwgImludGVyY2VwdG9ycyIsICJkaXNwYXRjaCIsICJpbnRlcmNlcHRvciIsICJDb21wb3NlZERpc3BhdGNoZXIiLCAiI2Rpc3BhdGNoZXIiLCAiI2Rpc3BhdGNoIiwgImRpc3BhdGNoZXIiLCAicmVxdWlyZV9kaXNwYXRjaGVyX2Jhc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJEaXNwYXRjaGVyIiwgIkNsaWVudERlc3Ryb3llZEVycm9yIiwgIkNsaWVudENsb3NlZEVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtEZXN0cm95IiwgImtDbG9zZSIsICJrQ2xvc2VkIiwgImtEZXN0cm95ZWQiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAia09uRGVzdHJveWVkIiwgImtPbkNsb3NlZCIsICJrSW50ZXJjZXB0ZWREaXNwYXRjaCIsICJrV2ViU29ja2V0T3B0aW9ucyIsICJEaXNwYXRjaGVyQmFzZSIsICJvcHRzIiwgIm5ld0ludGVyY2VwdG9ycyIsICJpIiwgImNhbGxiYWNrIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVyciIsICJkYXRhIiwgIm9uQ2xvc2VkIiwgImNhbGxiYWNrcyIsICJvbkRlc3Ryb3llZCIsICJoYW5kbGVyIiwgImRpc3BhdGNoIiwgInJlcXVpcmVfdGltZXJzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZmFzdE5vdyIsICJSRVNPTFVUSU9OX01TIiwgIlRJQ0tfTVMiLCAiZmFzdE5vd1RpbWVvdXQiLCAia0Zhc3RUaW1lciIsICJmYXN0VGltZXJzIiwgIk5PVF9JTl9MSVNUIiwgIlRPX0JFX0NMRUFSRUQiLCAiUEVORElORyIsICJBQ1RJVkUiLCAib25UaWNrIiwgImlkeCIsICJsZW4iLCAidGltZXIiLCAicmVmcmVzaFRpbWVvdXQiLCAiRmFzdFRpbWVyIiwgImNhbGxiYWNrIiwgImRlbGF5IiwgImFyZyIsICJ0aW1lb3V0IiwgInJlcXVpcmVfY29ubmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm5ldCIsICJhc3NlcnQiLCAidXRpbCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJDb25uZWN0VGltZW91dEVycm9yIiwgInRpbWVycyIsICJub29wIiwgInRscyIsICJTZXNzaW9uQ2FjaGUiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAia2V5IiwgInJlZiIsICJzZXNzaW9uS2V5IiwgInNlc3Npb24iLCAib2xkZXN0S2V5IiwgImJ1aWxkQ29ubmVjdG9yIiwgImFsbG93SDIiLCAic29ja2V0UGF0aCIsICJ0aW1lb3V0IiwgImN1c3RvbVNlc3Npb24iLCAib3B0cyIsICJvcHRpb25zIiwgInNlc3Npb25DYWNoZSIsICJob3N0bmFtZSIsICJob3N0IiwgInByb3RvY29sIiwgInBvcnQiLCAic2VydmVybmFtZSIsICJsb2NhbEFkZHJlc3MiLCAiaHR0cFNvY2tldCIsICJjYWxsYmFjayIsICJzb2NrZXQiLCAia2VlcEFsaXZlSW5pdGlhbERlbGF5IiwgImNsZWFyQ29ubmVjdFRpbWVvdXQiLCAic2V0dXBDb25uZWN0VGltZW91dCIsICJjYiIsICJlcnIiLCAic29ja2V0V2Vha1JlZiIsICJzMSIsICJzMiIsICJmYXN0VGltZXIiLCAib25Db25uZWN0VGltZW91dCIsICJtZXNzYWdlIiwgInJlcXVpcmVfdXRpbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgImVudW1Ub01hcCIsICJvYmoiLCAicmVzIiwgImtleSIsICJ2YWx1ZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAidXRpbHNfMSIsICJFUlJPUiIsICJUWVBFIiwgIkZMQUdTIiwgIkxFTklFTlRfRkxBR1MiLCAiTUVUSE9EUyIsICJrZXkiLCAiRklOSVNIIiwgImkiLCAiYyIsICJIRUFERVJfU1RBVEUiLCAicmVxdWlyZV9sbGh0dHBfd2FzbSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJ1ZmZlciIsICJyZXF1aXJlX2xsaHR0cF9zaW1kX3dhc20iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCdWZmZXIiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb3JzU2FmZUxpc3RlZE1ldGhvZHMiLCAiY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0IiwgIm51bGxCb2R5U3RhdHVzIiwgInJlZGlyZWN0U3RhdHVzIiwgInJlZGlyZWN0U3RhdHVzU2V0IiwgImJhZFBvcnRzIiwgImJhZFBvcnRzU2V0IiwgInJlZmVycmVyUG9saWN5IiwgInJlZmVycmVyUG9saWN5U2V0IiwgInJlcXVlc3RSZWRpcmVjdCIsICJzYWZlTWV0aG9kcyIsICJzYWZlTWV0aG9kc1NldCIsICJyZXF1ZXN0TW9kZSIsICJyZXF1ZXN0Q3JlZGVudGlhbHMiLCAicmVxdWVzdENhY2hlIiwgInJlcXVlc3RCb2R5SGVhZGVyIiwgInJlcXVlc3REdXBsZXgiLCAiZm9yYmlkZGVuTWV0aG9kcyIsICJmb3JiaWRkZW5NZXRob2RzU2V0IiwgInN1YnJlc291cmNlIiwgInN1YnJlc291cmNlU2V0IiwgInJlcXVpcmVfZ2xvYmFsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsT3JpZ2luIiwgImdldEdsb2JhbE9yaWdpbiIsICJzZXRHbG9iYWxPcmlnaW4iLCAibmV3T3JpZ2luIiwgInBhcnNlZFVSTCIsICJyZXF1aXJlX2RhdGFfdXJsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImVuY29kZXIiLCAiSFRUUF9UT0tFTl9DT0RFUE9JTlRTIiwgIkhUVFBfV0hJVEVTUEFDRV9SRUdFWCIsICJBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVgiLCAiSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyIsICJkYXRhVVJMUHJvY2Vzc29yIiwgImRhdGFVUkwiLCAiaW5wdXQiLCAiVVJMU2VyaWFsaXplciIsICJwb3NpdGlvbiIsICJtaW1lVHlwZSIsICJjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCIsICJtaW1lVHlwZUxlbmd0aCIsICJyZW1vdmVBU0NJSVdoaXRlc3BhY2UiLCAiZW5jb2RlZEJvZHkiLCAiYm9keSIsICJzdHJpbmdQZXJjZW50RGVjb2RlIiwgInN0cmluZ0JvZHkiLCAiaXNvbW9ycGhpY0RlY29kZSIsICJmb3JnaXZpbmdCYXNlNjQiLCAibWltZVR5cGVSZWNvcmQiLCAicGFyc2VNSU1FVHlwZSIsICJ1cmwiLCAiZXhjbHVkZUZyYWdtZW50IiwgImhyZWYiLCAiaGFzaExlbmd0aCIsICJzZXJpYWxpemVkIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMiLCAiY29uZGl0aW9uIiwgInJlc3VsdCIsICJjaGFyIiwgImlkeCIsICJzdGFydCIsICJieXRlcyIsICJwZXJjZW50RGVjb2RlIiwgImlzSGV4Q2hhckJ5dGUiLCAiYnl0ZSIsICJoZXhCeXRlVG9OdW1iZXIiLCAibGVuZ3RoIiwgIm91dHB1dCIsICJqIiwgImkiLCAicmVtb3ZlSFRUUFdoaXRlc3BhY2UiLCAidHlwZSIsICJzdWJ0eXBlIiwgInR5cGVMb3dlcmNhc2UiLCAic3VidHlwZUxvd2VyY2FzZSIsICJwYXJhbWV0ZXJOYW1lIiwgInBhcmFtZXRlclZhbHVlIiwgImNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmciLCAiZGF0YSIsICJkYXRhTGVuZ3RoIiwgImJ1ZmZlciIsICJleHRyYWN0VmFsdWUiLCAicG9zaXRpb25TdGFydCIsICJ2YWx1ZSIsICJxdW90ZU9yQmFja3NsYXNoIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJwYXJhbWV0ZXJzIiwgImVzc2VuY2UiLCAic2VyaWFsaXphdGlvbiIsICJuYW1lIiwgImlzSFRUUFdoaXRlU3BhY2UiLCAic3RyIiwgImxlYWRpbmciLCAidHJhaWxpbmciLCAicmVtb3ZlQ2hhcnMiLCAiaXNBU0NJSVdoaXRlc3BhY2UiLCAicHJlZGljYXRlIiwgImxlYWQiLCAidHJhaWwiLCAiYWRkaXRpb24iLCAibWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZSIsICJyZXF1aXJlX3dlYmlkbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInR5cGVzIiwgImluc3BlY3QiLCAibWFya0FzVW5jbG9uZWFibGUiLCAidG9VU1ZTdHJpbmciLCAid2ViaWRsIiwgIm1lc3NhZ2UiLCAiY29udGV4dCIsICJwbHVyYWwiLCAiViIsICJJIiwgIm9wdHMiLCAiZXJyIiwgImxlbmd0aCIsICJtaW4iLCAiY3R4IiwgImJpdExlbmd0aCIsICJzaWduZWRuZXNzIiwgInVwcGVyQm91bmQiLCAibG93ZXJCb3VuZCIsICJ4IiwgIm4iLCAiciIsICJjb252ZXJ0ZXIiLCAicHJlZml4IiwgImFyZ3VtZW50IiwgIkl0ZXJhYmxlIiwgIm1ldGhvZCIsICJzZXEiLCAiaW5kZXgiLCAiZG9uZSIsICJ2YWx1ZSIsICJrZXlDb252ZXJ0ZXIiLCAidmFsdWVDb252ZXJ0ZXIiLCAiTyIsICJyZXN1bHQiLCAia2V5cyIsICJrZXkiLCAidHlwZWRLZXkiLCAidHlwZWRWYWx1ZSIsICJpIiwgImNvbnZlcnRlcnMiLCAiZGljdGlvbmFyeSIsICJ0eXBlIiwgImRpY3QiLCAib3B0aW9ucyIsICJkZWZhdWx0VmFsdWUiLCAicmVxdWlyZWQiLCAiaGFzRGVmYXVsdCIsICJUIiwgIm5hbWUiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVHJhbnNmb3JtIiwgInpsaWIiLCAicmVkaXJlY3RTdGF0dXNTZXQiLCAicmVmZXJyZXJQb2xpY3lUb2tlbnMiLCAiYmFkUG9ydHNTZXQiLCAiZ2V0R2xvYmFsT3JpZ2luIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMiLCAiY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyIsICJyZW1vdmVDaGFycyIsICJwYXJzZU1JTUVUeXBlIiwgInBlcmZvcm1hbmNlIiwgImlzQmxvYkxpa2UiLCAiUmVhZGFibGVTdHJlYW1Gcm9tIiwgImlzVmFsaWRIVFRQVG9rZW4iLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlIiwgImFzc2VydCIsICJpc1VpbnQ4QXJyYXkiLCAid2ViaWRsIiwgInN1cHBvcnRlZEhhc2hlcyIsICJjcnlwdG8iLCAicG9zc2libGVSZWxldmFudEhhc2hlcyIsICJoYXNoIiwgInJlc3BvbnNlVVJMIiwgInJlc3BvbnNlIiwgInVybExpc3QiLCAibGVuZ3RoIiwgInJlc3BvbnNlTG9jYXRpb25VUkwiLCAicmVxdWVzdEZyYWdtZW50IiwgImxvY2F0aW9uIiwgImlzVmFsaWRIZWFkZXJWYWx1ZSIsICJpc1ZhbGlkRW5jb2RlZFVSTCIsICJub3JtYWxpemVCaW5hcnlTdHJpbmdUb1V0ZjgiLCAidXJsIiwgImkiLCAiY29kZSIsICJ2YWx1ZSIsICJyZXF1ZXN0Q3VycmVudFVSTCIsICJyZXF1ZXN0IiwgInJlcXVlc3RCYWRQb3J0IiwgInVybElzSHR0cEh0dHBzU2NoZW1lIiwgImlzRXJyb3JMaWtlIiwgIm9iamVjdCIsICJpc1ZhbGlkUmVhc29uUGhyYXNlIiwgInN0YXR1c1RleHQiLCAiYyIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJwb3RlbnRpYWxWYWx1ZSIsICJzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IiwgImFjdHVhbFJlc3BvbnNlIiwgImhlYWRlcnNMaXN0IiwgInBvbGljeUhlYWRlciIsICJwb2xpY3kiLCAidG9rZW4iLCAiY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrIiwgImNvcnNDaGVjayIsICJUQU9DaGVjayIsICJhcHBlbmRGZXRjaE1ldGFkYXRhIiwgImh0dHBSZXF1ZXN0IiwgImhlYWRlciIsICJhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIiwgInNlcmlhbGl6ZWRPcmlnaW4iLCAidXJsSGFzSHR0cHNTY2hlbWUiLCAic2FtZU9yaWdpbiIsICJjb2Fyc2VuVGltZSIsICJ0aW1lc3RhbXAiLCAiY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkiLCAiY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8iLCAiY29ubmVjdGlvblRpbWluZ0luZm8iLCAiZGVmYXVsdFN0YXJ0VGltZSIsICJjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSIsICJjcmVhdGVPcGFxdWVUaW1pbmdJbmZvIiwgInRpbWluZ0luZm8iLCAibWFrZVBvbGljeUNvbnRhaW5lciIsICJjbG9uZVBvbGljeUNvbnRhaW5lciIsICJwb2xpY3lDb250YWluZXIiLCAiZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciIsICJyZWZlcnJlclNvdXJjZSIsICJnbG9iYWxPcmlnaW4iLCAicmVmZXJyZXJVUkwiLCAic3RyaXBVUkxGb3JSZWZlcnJlciIsICJyZWZlcnJlck9yaWdpbiIsICJhcmVTYW1lT3JpZ2luIiwgImlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSIsICJpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkiLCAiY3VycmVudFVSTCIsICJvcmlnaW5Pbmx5IiwgImlzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeSIsICJvcmlnaW4iLCAib3JpZ2luQXNVUkwiLCAiYnl0ZXNNYXRjaCIsICJieXRlcyIsICJtZXRhZGF0YUxpc3QiLCAicGFyc2VkTWV0YWRhdGEiLCAicGFyc2VNZXRhZGF0YSIsICJzdHJvbmdlc3QiLCAiZ2V0U3Ryb25nZXN0TWV0YWRhdGEiLCAibWV0YWRhdGEiLCAiZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0iLCAiaXRlbSIsICJhbGdvcml0aG0iLCAiZXhwZWN0ZWRWYWx1ZSIsICJhY3R1YWxWYWx1ZSIsICJjb21wYXJlQmFzZTY0TWl4ZWQiLCAicGFyc2VIYXNoV2l0aE9wdGlvbnMiLCAicmVzdWx0IiwgImVtcHR5IiwgInBhcnNlZFRva2VuIiwgInBvcyIsICJ0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwiLCAiQSIsICJCIiwgImNyZWF0ZURlZmVycmVkUHJvbWlzZSIsICJyZXMiLCAicmVqIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImlzQWJvcnRlZCIsICJmZXRjaFBhcmFtcyIsICJpc0NhbmNlbGxlZCIsICJub3JtYWxpemVNZXRob2QiLCAibWV0aG9kIiwgInNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyIsICJlc0l0ZXJhdG9yUHJvdG90eXBlIiwgImNyZWF0ZUl0ZXJhdG9yIiwgIm5hbWUiLCAia0ludGVybmFsSXRlcmF0b3IiLCAia2V5SW5kZXgiLCAidmFsdWVJbmRleCIsICJGYXN0SXRlcmFibGVJdGVyYXRvciIsICIjdGFyZ2V0IiwgIiNraW5kIiwgIiNpbmRleCIsICJ0YXJnZXQiLCAia2luZCIsICJpbmRleCIsICJ2YWx1ZXMiLCAibGVuIiwgImtleSIsICJpdGVyYXRvck1peGluIiwgIm1ha2VJdGVyYXRvciIsICJwcm9wZXJ0aWVzIiwgImNhbGxiYWNrZm4iLCAidGhpc0FyZyIsICJmdWxseVJlYWRCb2R5IiwgImJvZHkiLCAicHJvY2Vzc0JvZHkiLCAicHJvY2Vzc0JvZHlFcnJvciIsICJzdWNjZXNzU3RlcHMiLCAiZXJyb3JTdGVwcyIsICJyZWFkZXIiLCAiZSIsICJyZWFkQWxsQnl0ZXMiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAic3RyZWFtIiwgInJlYWRhYmxlU3RyZWFtQ2xvc2UiLCAiY29udHJvbGxlciIsICJlcnIiLCAiaW52YWxpZElzb21vcnBoaWNFbmNvZGVWYWx1ZVJlZ2V4IiwgImlzb21vcnBoaWNFbmNvZGUiLCAiaW5wdXQiLCAiYnl0ZUxlbmd0aCIsICJkb25lIiwgImNodW5rIiwgInVybElzTG9jYWwiLCAicHJvdG9jb2wiLCAic2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZSIsICJhbGxvd1doaXRlc3BhY2UiLCAiZGF0YSIsICJwb3NpdGlvbiIsICJjaGFyIiwgInJhbmdlU3RhcnQiLCAicmFuZ2VTdGFydFZhbHVlIiwgInJhbmdlRW5kIiwgInJhbmdlRW5kVmFsdWUiLCAiYnVpbGRDb250ZW50UmFuZ2UiLCAiZnVsbExlbmd0aCIsICJjb250ZW50UmFuZ2UiLCAiSW5mbGF0ZVN0cmVhbSIsICIjemxpYk9wdGlvbnMiLCAiemxpYk9wdGlvbnMiLCAiZW5jb2RpbmciLCAiY2FsbGJhY2siLCAiY3JlYXRlSW5mbGF0ZSIsICJleHRyYWN0TWltZVR5cGUiLCAiaGVhZGVycyIsICJjaGFyc2V0IiwgImVzc2VuY2UiLCAibWltZVR5cGUiLCAiZ2V0RGVjb2RlU3BsaXQiLCAidGVtcG9yYXJ5TWltZVR5cGUiLCAiZ2V0dGluZ0RlY29kaW5nU3BsaXR0aW5nIiwgInRlbXBvcmFyeVZhbHVlIiwgImxpc3QiLCAidGV4dERlY29kZXIiLCAidXRmOERlY29kZUJ5dGVzIiwgImJ1ZmZlciIsICJFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0QmFzZSIsICJFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAicmVxdWlyZV9zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9maWxlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQmxvYiIsICJGaWxlIiwgImtTdGF0ZSIsICJ3ZWJpZGwiLCAiRmlsZUxpa2UiLCAiX0ZpbGVMaWtlIiwgImJsb2JMaWtlIiwgImZpbGVOYW1lIiwgIm9wdGlvbnMiLCAibiIsICJ0IiwgImQiLCAiYXJncyIsICJpc0ZpbGVMaWtlIiwgIm9iamVjdCIsICJyZXF1aXJlX2Zvcm1kYXRhIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNCbG9iTGlrZSIsICJpdGVyYXRvck1peGluIiwgImtTdGF0ZSIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIkZpbGVMaWtlIiwgImlzRmlsZUxpa2UiLCAid2ViaWRsIiwgIk5hdGl2ZUZpbGUiLCAibm9kZVV0aWwiLCAiRmlsZSIsICJGb3JtRGF0YSIsICJfRm9ybURhdGEiLCAiZm9ybSIsICJuYW1lIiwgInZhbHVlIiwgImZpbGVuYW1lIiwgInByZWZpeCIsICJlbnRyeSIsICJtYWtlRW50cnkiLCAiaWR4IiwgImRlcHRoIiwgIm9wdGlvbnMiLCAic3RhdGUiLCAiYSIsICJiIiwgIm91dHB1dCIsICJyZXF1aXJlX2Zvcm1kYXRhX3BhcnNlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzVVNWU3RyaW5nIiwgImJ1ZmZlclRvTG93ZXJDYXNlZEhlYWRlck5hbWUiLCAidXRmOERlY29kZUJ5dGVzIiwgIkhUVFBfVE9LRU5fQ09ERVBPSU5UUyIsICJpc29tb3JwaGljRGVjb2RlIiwgImlzRmlsZUxpa2UiLCAibWFrZUVudHJ5IiwgImFzc2VydCIsICJOb2RlRmlsZSIsICJGaWxlIiwgImZvcm1EYXRhTmFtZUJ1ZmZlciIsICJmaWxlbmFtZUJ1ZmZlciIsICJkZCIsICJkZGNybGYiLCAiaXNBc2NpaVN0cmluZyIsICJjaGFycyIsICJpIiwgInZhbGlkYXRlQm91bmRhcnkiLCAiYm91bmRhcnkiLCAibGVuZ3RoIiwgImNwIiwgIm11bHRpcGFydEZvcm1EYXRhUGFyc2VyIiwgImlucHV0IiwgIm1pbWVUeXBlIiwgImJvdW5kYXJ5U3RyaW5nIiwgImVudHJ5TGlzdCIsICJwb3NpdGlvbiIsICJ0cmFpbGluZyIsICJidWZmZXJTdGFydHNXaXRoIiwgInJlc3VsdCIsICJwYXJzZU11bHRpcGFydEZvcm1EYXRhSGVhZGVycyIsICJuYW1lIiwgImZpbGVuYW1lIiwgImNvbnRlbnRUeXBlIiwgImVuY29kaW5nIiwgImJvZHkiLCAiYm91bmRhcnlJbmRleCIsICJ2YWx1ZSIsICJoZWFkZXJOYW1lIiwgImNvbGxlY3RBU2VxdWVuY2VPZkJ5dGVzIiwgImNoYXIiLCAicmVtb3ZlQ2hhcnMiLCAicGFyc2VNdWx0aXBhcnRGb3JtRGF0YU5hbWUiLCAiY2hlY2siLCAiaGVhZGVyVmFsdWUiLCAiY29uZGl0aW9uIiwgInN0YXJ0IiwgImJ1ZiIsICJsZWFkaW5nIiwgInByZWRpY2F0ZSIsICJsZWFkIiwgInRyYWlsIiwgImJ1ZmZlciIsICJyZXF1aXJlX2JvZHkiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgIlJlYWRhYmxlU3RyZWFtRnJvbSIsICJpc0Jsb2JMaWtlIiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgInJlYWRhYmxlU3RyZWFtQ2xvc2UiLCAiY3JlYXRlRGVmZXJyZWRQcm9taXNlIiwgImZ1bGx5UmVhZEJvZHkiLCAiZXh0cmFjdE1pbWVUeXBlIiwgInV0ZjhEZWNvZGVCeXRlcyIsICJGb3JtRGF0YSIsICJrU3RhdGUiLCAid2ViaWRsIiwgIkJsb2IiLCAiYXNzZXJ0IiwgImlzRXJyb3JlZCIsICJpc0Rpc3R1cmJlZCIsICJpc0FycmF5QnVmZmVyIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJtdWx0aXBhcnRGb3JtRGF0YVBhcnNlciIsICJyYW5kb20iLCAiY3J5cHRvIiwgIm1heCIsICJ0ZXh0RW5jb2RlciIsICJub29wIiwgImhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgInN0cmVhbVJlZ2lzdHJ5IiwgIndlYWtSZWYiLCAic3RyZWFtIiwgImV4dHJhY3RCb2R5IiwgIm9iamVjdCIsICJrZWVwYWxpdmUiLCAiY29udHJvbGxlciIsICJidWZmZXIiLCAic291cmNlIiwgImFjdGlvbiIsICJsZW5ndGgiLCAidHlwZSIsICJib3VuZGFyeSIsICJwcmVmaXgiLCAiZXNjYXBlIiwgInN0ciIsICJub3JtYWxpemVMaW5lZmVlZHMiLCAidmFsdWUiLCAiYmxvYlBhcnRzIiwgInJuIiwgImhhc1Vua25vd25TaXplVmFsdWUiLCAibmFtZSIsICJjaHVuayIsICJwYXJ0IiwgIml0ZXJhdG9yIiwgImRvbmUiLCAicmVhc29uIiwgInNhZmVseUV4dHJhY3RCb2R5IiwgImNsb25lQm9keSIsICJpbnN0YW5jZSIsICJib2R5IiwgIm91dDEiLCAib3V0MiIsICJ0aHJvd0lmQWJvcnRlZCIsICJzdGF0ZSIsICJib2R5TWl4aW5NZXRob2RzIiwgImNvbnN1bWVCb2R5IiwgImJ5dGVzIiwgIm1pbWVUeXBlIiwgImJvZHlNaW1lVHlwZSIsICJwYXJzZUpTT05Gcm9tQnl0ZXMiLCAicGFyc2VkIiwgImZkIiwgImVudHJpZXMiLCAibWl4aW5Cb2R5IiwgInByb3RvdHlwZSIsICJjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUiLCAiYm9keVVudXNhYmxlIiwgInByb21pc2UiLCAiZXJyb3JTdGVwcyIsICJlcnJvciIsICJzdWNjZXNzU3RlcHMiLCAiZGF0YSIsICJlIiwgInJlcXVlc3RPclJlc3BvbnNlIiwgImhlYWRlcnMiLCAicmVxdWlyZV9jbGllbnRfaDEiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAidXRpbCIsICJjaGFubmVscyIsICJ0aW1lcnMiLCAiUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIiwgIlJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJIZWFkZXJzVGltZW91dEVycm9yIiwgIkhlYWRlcnNPdmVyZmxvd0Vycm9yIiwgIlNvY2tldEVycm9yIiwgIkluZm9ybWF0aW9uYWxFcnJvciIsICJCb2R5VGltZW91dEVycm9yIiwgIkhUVFBQYXJzZXJFcnJvciIsICJSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIiwgImtVcmwiLCAia1Jlc2V0IiwgImtDbGllbnQiLCAia1BhcnNlciIsICJrQmxvY2tpbmciLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1NpemUiLCAia1dyaXRpbmciLCAia1F1ZXVlIiwgImtOb1JlZiIsICJrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQiLCAia0hvc3RIZWFkZXIiLCAia1BlbmRpbmdJZHgiLCAia1J1bm5pbmdJZHgiLCAia0Vycm9yIiwgImtQaXBlbGluaW5nIiwgImtTb2NrZXQiLCAia0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSIsICJrTWF4SGVhZGVyc1NpemUiLCAia0tlZXBBbGl2ZU1heFRpbWVvdXQiLCAia0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQiLCAia0hlYWRlcnNUaW1lb3V0IiwgImtCb2R5VGltZW91dCIsICJrU3RyaWN0Q29udGVudExlbmd0aCIsICJrTWF4UmVxdWVzdHMiLCAia0NvdW50ZXIiLCAia01heFJlc3BvbnNlU2l6ZSIsICJrT25FcnJvciIsICJrUmVzdW1lIiwgImtIVFRQQ29udGV4dCIsICJjb25zdGFudHMiLCAiRU1QVFlfQlVGIiwgIkZhc3RCdWZmZXIiLCAiYWRkTGlzdGVuZXIiLCAicmVtb3ZlQWxsTGlzdGVuZXJzIiwgImtJZGxlU29ja2V0VmFsaWRhdGlvbiIsICJrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0IiwgImtTb2NrZXRVc2VkIiwgImV4dHJhY3RCb2R5IiwgImxhenlsbGh0dHAiLCAibGxodHRwV2FzbURhdGEiLCAibW9kIiwgInAiLCAiYXQiLCAibGVuIiwgImN1cnJlbnRQYXJzZXIiLCAic3RhcnQiLCAiY3VycmVudEJ1ZmZlclB0ciIsICJjdXJyZW50QnVmZmVyUmVmIiwgInN0YXR1c0NvZGUiLCAidXBncmFkZSIsICJzaG91bGRLZWVwQWxpdmUiLCAibGxodHRwSW5zdGFuY2UiLCAibGxodHRwUHJvbWlzZSIsICJjdXJyZW50QnVmZmVyU2l6ZSIsICJVU0VfTkFUSVZFX1RJTUVSIiwgIlVTRV9GQVNUX1RJTUVSIiwgIlRJTUVPVVRfSEVBREVSUyIsICJUSU1FT1VUX0JPRFkiLCAiVElNRU9VVF9LRUVQX0FMSVZFIiwgIlBhcnNlciIsICJjbGllbnQiLCAic29ja2V0IiwgImRlbGF5IiwgInR5cGUiLCAib25QYXJzZXJUaW1lb3V0IiwgImNodW5rIiwgImRhdGEiLCAibGxodHRwIiwgInJldCIsICJlcnIiLCAib2Zmc2V0IiwgImJvZHkiLCAiY29udGVudExlbmd0aCIsICJieXRlc1JlYWQiLCAicHRyIiwgIm1lc3NhZ2UiLCAiYnVmIiwgInJlcXVlc3QiLCAia2V5IiwgImhlYWRlck5hbWUiLCAiaGVhZCIsICJoZWFkZXJzIiwgInN0YXR1c1RleHQiLCAiYm9keVRpbWVvdXQiLCAia2VlcEFsaXZlVGltZW91dCIsICJ0aW1lb3V0IiwgInBhdXNlIiwgIm1heFJlc3BvbnNlU2l6ZSIsICJwYXJzZXIiLCAidGltZW91dFR5cGUiLCAicGF1c2VkIiwgImNvbm5lY3RIMSIsICJwYXJzZXJFcnIiLCAiY2xlYXJJZGxlU29ja2V0VmFsaWRhdGlvbiIsICJyZXF1ZXN0cyIsICJjbG9zZWQiLCAiYXJncyIsICJ3cml0ZUgxIiwgInJlc3VtZUgxIiwgImNhbGxiYWNrIiwgInNjaGVkdWxlSWRsZVNvY2tldFZhbGlkYXRpb24iLCAiaGVhZGVyc1RpbWVvdXQiLCAic2hvdWxkU2VuZENvbnRlbnRMZW5ndGgiLCAibWV0aG9kIiwgInBhdGgiLCAiaG9zdCIsICJibG9ja2luZyIsICJyZXNldCIsICJleHBlY3RzUGF5bG9hZCIsICJib2R5U3RyZWFtIiwgImNvbnRlbnRUeXBlIiwgImNvbnRlbnRUeXBlVmFsdWUiLCAiYm9keUxlbmd0aCIsICJhYm9ydCIsICJoZWFkZXIiLCAibiIsICJ2YWwiLCAiaSIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZUl0ZXJhYmxlIiwgIndyaXRlQmxvYiIsICJ3cml0ZVN0cmVhbSIsICJmaW5pc2hlZCIsICJ3cml0ZXIiLCAiQXN5bmNXcml0ZXIiLCAib25EYXRhIiwgIm9uRHJhaW4iLCAib25DbG9zZSIsICJvbkZpbmlzaGVkIiwgImVyIiwgImJ1ZmZlciIsICJjYiIsICJ3YWl0Rm9yRHJhaW4iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYnl0ZXNXcml0dGVuIiwgInJlcXVpcmVfY2xpZW50X2gyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgInBpcGVsaW5lIiwgInV0aWwiLCAiUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiU29ja2V0RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgImtVcmwiLCAia1Jlc2V0IiwgImtDbGllbnQiLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1F1ZXVlIiwgImtQZW5kaW5nSWR4IiwgImtSdW5uaW5nSWR4IiwgImtFcnJvciIsICJrU29ja2V0IiwgImtTdHJpY3RDb250ZW50TGVuZ3RoIiwgImtPbkVycm9yIiwgImtNYXhDb25jdXJyZW50U3RyZWFtcyIsICJrSFRUUDJTZXNzaW9uIiwgImtSZXN1bWUiLCAia1NpemUiLCAia0hUVFBDb250ZXh0IiwgImtPcGVuU3RyZWFtcyIsICJleHRyYWN0Qm9keSIsICJoMkV4cGVyaW1lbnRhbFdhcm5lZCIsICJodHRwMiIsICJIVFRQMl9IRUFERVJfQVVUSE9SSVRZIiwgIkhUVFAyX0hFQURFUl9NRVRIT0QiLCAiSFRUUDJfSEVBREVSX1BBVEgiLCAiSFRUUDJfSEVBREVSX1NDSEVNRSIsICJIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgiLCAiSFRUUDJfSEVBREVSX0VYUEVDVCIsICJIVFRQMl9IRUFERVJfU1RBVFVTIiwgInBhcnNlSDJIZWFkZXJzIiwgImhlYWRlcnMiLCAicmVzdWx0IiwgIm5hbWUiLCAidmFsdWUiLCAic3VidmFsdWUiLCAiY29ubmVjdEgyIiwgImNsaWVudCIsICJzb2NrZXQiLCAic2Vzc2lvbiIsICJvbkh0dHAyU2Vzc2lvbkVycm9yIiwgIm9uSHR0cDJGcmFtZUVycm9yIiwgIm9uSHR0cDJTZXNzaW9uRW5kIiwgIm9uSFRUUDJHb0F3YXkiLCAiZXJyIiwgInJlcXVlc3RzIiwgImkiLCAicmVxdWVzdCIsICJjbG9zZWQiLCAiYXJncyIsICJ3cml0ZUgyIiwgInJlc3VtZUgyIiwgImNhbGxiYWNrIiwgInR5cGUiLCAiY29kZSIsICJpZCIsICJzaG91bGRTZW5kQ29udGVudExlbmd0aCIsICJtZXRob2QiLCAicGF0aCIsICJob3N0IiwgInVwZ3JhZGUiLCAiZXhwZWN0Q29udGludWUiLCAic2lnbmFsIiwgInJlcUhlYWRlcnMiLCAiYm9keSIsICJuIiwgImtleSIsICJ2YWwiLCAic3RyZWFtIiwgImhvc3RuYW1lIiwgInBvcnQiLCAiYWJvcnQiLCAiZXhwZWN0c1BheWxvYWQiLCAiY29udGVudExlbmd0aCIsICJib2R5U3RyZWFtIiwgImNvbnRlbnRUeXBlIiwgInNob3VsZEVuZFN0cmVhbSIsICJ3cml0ZUJvZHlIMiIsICJzdGF0dXNDb2RlIiwgInJlYWxIZWFkZXJzIiwgImNodW5rIiwgIndyaXRlQnVmZmVyIiwgIndyaXRlSXRlcmFibGUiLCAid3JpdGVCbG9iIiwgIndyaXRlU3RyZWFtIiwgImgyc3RyZWFtIiwgImVycm9yIiwgInBpcGUiLCAib25QaXBlRGF0YSIsICJidWZmZXIiLCAib25EcmFpbiIsICJjYiIsICJ3YWl0Rm9yRHJhaW4iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAicmVzIiwgInJlcXVpcmVfcmVkaXJlY3RfaGFuZGxlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInV0aWwiLCAia0JvZHlVc2VkIiwgImFzc2VydCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJFRSIsICJyZWRpcmVjdGFibGVTdGF0dXNDb2RlcyIsICJrQm9keSIsICJCb2R5QXN5bmNJdGVyYWJsZSIsICJib2R5IiwgIlJlZGlyZWN0SGFuZGxlciIsICJkaXNwYXRjaCIsICJtYXhSZWRpcmVjdGlvbnMiLCAib3B0cyIsICJoYW5kbGVyIiwgImFib3J0IiwgInN0YXR1c0NvZGUiLCAiaGVhZGVycyIsICJzb2NrZXQiLCAiZXJyb3IiLCAicmVzdW1lIiwgInN0YXR1c1RleHQiLCAicGFyc2VMb2NhdGlvbiIsICJvcmlnaW4iLCAicGF0aG5hbWUiLCAic2VhcmNoIiwgInBhdGgiLCAiY2xlYW5SZXF1ZXN0SGVhZGVycyIsICJjaHVuayIsICJ0cmFpbGVycyIsICJpIiwgInNob3VsZFJlbW92ZUhlYWRlciIsICJoZWFkZXIiLCAicmVtb3ZlQ29udGVudCIsICJ1bmtub3duT3JpZ2luIiwgIm5hbWUiLCAicmV0IiwgImtleSIsICJyZXF1aXJlX3JlZGlyZWN0X2ludGVyY2VwdG9yIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmVkaXJlY3RIYW5kbGVyIiwgImNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IiLCAiZGVmYXVsdE1heFJlZGlyZWN0aW9ucyIsICJkaXNwYXRjaCIsICJvcHRzIiwgImhhbmRsZXIiLCAibWF4UmVkaXJlY3Rpb25zIiwgInJlZGlyZWN0SGFuZGxlciIsICJyZXF1aXJlX2NsaWVudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJuZXQiLCAiaHR0cCIsICJ1dGlsIiwgImNoYW5uZWxzIiwgIlJlcXVlc3QiLCAiRGlzcGF0Y2hlckJhc2UiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgIkNsaWVudERlc3Ryb3llZEVycm9yIiwgImJ1aWxkQ29ubmVjdG9yIiwgImtVcmwiLCAia1NlcnZlck5hbWUiLCAia0NsaWVudCIsICJrQnVzeSIsICJrQ29ubmVjdCIsICJrUmVzdW1pbmciLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1NpemUiLCAia1F1ZXVlIiwgImtDb25uZWN0ZWQiLCAia0Nvbm5lY3RpbmciLCAia05lZWREcmFpbiIsICJrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQiLCAia0hvc3RIZWFkZXIiLCAia1BlbmRpbmdJZHgiLCAia1J1bm5pbmdJZHgiLCAia0Vycm9yIiwgImtQaXBlbGluaW5nIiwgImtLZWVwQWxpdmVUaW1lb3V0VmFsdWUiLCAia01heEhlYWRlcnNTaXplIiwgImtLZWVwQWxpdmVNYXhUaW1lb3V0IiwgImtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkIiwgImtIZWFkZXJzVGltZW91dCIsICJrQm9keVRpbWVvdXQiLCAia1N0cmljdENvbnRlbnRMZW5ndGgiLCAia0Nvbm5lY3RvciIsICJrTWF4UmVkaXJlY3Rpb25zIiwgImtNYXhSZXF1ZXN0cyIsICJrQ291bnRlciIsICJrQ2xvc2UiLCAia0Rlc3Ryb3kiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAia0xvY2FsQWRkcmVzcyIsICJrTWF4UmVzcG9uc2VTaXplIiwgImtPbkVycm9yIiwgImtIVFRQQ29udGV4dCIsICJrTWF4Q29uY3VycmVudFN0cmVhbXMiLCAia1Jlc3VtZSIsICJjb25uZWN0SDEiLCAiY29ubmVjdEgyIiwgImRlcHJlY2F0ZWRJbnRlcmNlcHRvcldhcm5lZCIsICJrQ2xvc2VkUmVzb2x2ZSIsICJub29wIiwgImdldFBpcGVsaW5pbmciLCAiY2xpZW50IiwgIkNsaWVudCIsICJ1cmwiLCAiaW50ZXJjZXB0b3JzIiwgIm1heEhlYWRlclNpemUiLCAiaGVhZGVyc1RpbWVvdXQiLCAic29ja2V0VGltZW91dCIsICJyZXF1ZXN0VGltZW91dCIsICJjb25uZWN0VGltZW91dCIsICJib2R5VGltZW91dCIsICJpZGxlVGltZW91dCIsICJrZWVwQWxpdmUiLCAia2VlcEFsaXZlVGltZW91dCIsICJtYXhLZWVwQWxpdmVUaW1lb3V0IiwgImtlZXBBbGl2ZU1heFRpbWVvdXQiLCAia2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCIsICJzb2NrZXRQYXRoIiwgInBpcGVsaW5pbmciLCAidGxzIiwgInN0cmljdENvbnRlbnRMZW5ndGgiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAibWF4UmVkaXJlY3Rpb25zIiwgImNvbm5lY3QiLCAibWF4UmVxdWVzdHNQZXJDbGllbnQiLCAibG9jYWxBZGRyZXNzIiwgIm1heFJlc3BvbnNlU2l6ZSIsICJhdXRvU2VsZWN0RmFtaWx5IiwgImF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCIsICJtYXhDb25jdXJyZW50U3RyZWFtcyIsICJhbGxvd0gyIiwgIndlYlNvY2tldCIsICJjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yIiwgInN5bmMiLCAicmVzdW1lIiwgImVyciIsICJvbkVycm9yIiwgInZhbHVlIiwgImNiIiwgIm9wdHMiLCAiaGFuZGxlciIsICJvcmlnaW4iLCAicmVxdWVzdCIsICJyZXNvbHZlIiwgInJlcXVlc3RzIiwgImkiLCAiY2FsbGJhY2siLCAiaG9zdCIsICJob3N0bmFtZSIsICJwcm90b2NvbCIsICJwb3J0IiwgImlkeCIsICJpcCIsICJzb2NrZXQiLCAicmVqZWN0IiwgImVtaXREcmFpbiIsICJfcmVzdW1lIiwgInJlcXVpcmVfZml4ZWRfcXVldWUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJGaXhlZENpcmN1bGFyQnVmZmVyIiwgImRhdGEiLCAibmV4dEl0ZW0iLCAidGFpbCIsICJuZXh0IiwgInJlcXVpcmVfcG9vbF9zdGF0cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtGcmVlIiwgImtDb25uZWN0ZWQiLCAia1BlbmRpbmciLCAia1F1ZXVlZCIsICJrUnVubmluZyIsICJrU2l6ZSIsICJrUG9vbCIsICJQb29sU3RhdHMiLCAicG9vbCIsICJyZXF1aXJlX3Bvb2xfYmFzZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRpc3BhdGNoZXJCYXNlIiwgIkZpeGVkUXVldWUiLCAia0Nvbm5lY3RlZCIsICJrU2l6ZSIsICJrUnVubmluZyIsICJrUGVuZGluZyIsICJrUXVldWVkIiwgImtCdXN5IiwgImtGcmVlIiwgImtVcmwiLCAia0Nsb3NlIiwgImtEZXN0cm95IiwgImtEaXNwYXRjaCIsICJQb29sU3RhdHMiLCAia0NsaWVudHMiLCAia05lZWREcmFpbiIsICJrUXVldWUiLCAia0Nsb3NlZFJlc29sdmUiLCAia09uRHJhaW4iLCAia09uQ29ubmVjdCIsICJrT25EaXNjb25uZWN0IiwgImtPbkNvbm5lY3Rpb25FcnJvciIsICJrR2V0RGlzcGF0Y2hlciIsICJrQWRkQ2xpZW50IiwgImtSZW1vdmVDbGllbnQiLCAia1N0YXRzIiwgIlBvb2xCYXNlIiwgIm9wdHMiLCAicG9vbCIsICJvcmlnaW4iLCAidGFyZ2V0cyIsICJxdWV1ZSIsICJuZWVkRHJhaW4iLCAiaXRlbSIsICJjIiwgImVyciIsICJjbGllbnQiLCAicmV0IiwgInBlbmRpbmciLCAicnVubmluZyIsICJzaXplIiwgInJlc29sdmUiLCAiaGFuZGxlciIsICJkaXNwYXRjaGVyIiwgImlkeCIsICJyZXF1aXJlX3Bvb2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQb29sQmFzZSIsICJrQ2xpZW50cyIsICJrTmVlZERyYWluIiwgImtBZGRDbGllbnQiLCAia0dldERpc3BhdGNoZXIiLCAiQ2xpZW50IiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInV0aWwiLCAia1VybCIsICJrSW50ZXJjZXB0b3JzIiwgImJ1aWxkQ29ubmVjdG9yIiwgImtPcHRpb25zIiwgImtDb25uZWN0aW9ucyIsICJrRmFjdG9yeSIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJQb29sIiwgImNvbm5lY3Rpb25zIiwgImZhY3RvcnkiLCAiY29ubmVjdCIsICJjb25uZWN0VGltZW91dCIsICJ0bHMiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAic29ja2V0UGF0aCIsICJhdXRvU2VsZWN0RmFtaWx5IiwgImF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCIsICJhbGxvd0gyIiwgIm9wdGlvbnMiLCAidGFyZ2V0cyIsICJlcnJvciIsICJ0YXJnZXQiLCAiaWR4IiwgImNsaWVudCIsICJkaXNwYXRjaGVyIiwgInJlcXVpcmVfYmFsYW5jZWRfcG9vbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlBvb2xCYXNlIiwgImtDbGllbnRzIiwgImtOZWVkRHJhaW4iLCAia0FkZENsaWVudCIsICJrUmVtb3ZlQ2xpZW50IiwgImtHZXREaXNwYXRjaGVyIiwgIlBvb2wiLCAia1VybCIsICJrSW50ZXJjZXB0b3JzIiwgInBhcnNlT3JpZ2luIiwgImtGYWN0b3J5IiwgImtPcHRpb25zIiwgImtHcmVhdGVzdENvbW1vbkRpdmlzb3IiLCAia0N1cnJlbnRXZWlnaHQiLCAia0luZGV4IiwgImtXZWlnaHQiLCAia01heFdlaWdodFBlclNlcnZlciIsICJrRXJyb3JQZW5hbHR5IiwgImdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciIsICJhIiwgImIiLCAidCIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJCYWxhbmNlZFBvb2wiLCAidXBzdHJlYW1zIiwgImZhY3RvcnkiLCAidXBzdHJlYW0iLCAidXBzdHJlYW1PcmlnaW4iLCAicG9vbCIsICJhcmdzIiwgImVyciIsICJjbGllbnQiLCAicmVzdWx0IiwgImkiLCAiZGlzcGF0Y2hlciIsICJwIiwgImNvdW50ZXIiLCAibWF4V2VpZ2h0SW5kZXgiLCAicmVxdWlyZV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtDbGllbnRzIiwgImtSdW5uaW5nIiwgImtDbG9zZSIsICJrRGVzdHJveSIsICJrRGlzcGF0Y2giLCAia0ludGVyY2VwdG9ycyIsICJEaXNwYXRjaGVyQmFzZSIsICJQb29sIiwgIkNsaWVudCIsICJ1dGlsIiwgImNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IiLCAia09uQ29ubmVjdCIsICJrT25EaXNjb25uZWN0IiwgImtPbkNvbm5lY3Rpb25FcnJvciIsICJrTWF4UmVkaXJlY3Rpb25zIiwgImtPbkRyYWluIiwgImtGYWN0b3J5IiwgImtPcHRpb25zIiwgImRlZmF1bHRGYWN0b3J5IiwgIm9yaWdpbiIsICJvcHRzIiwgIkFnZW50IiwgImZhY3RvcnkiLCAibWF4UmVkaXJlY3Rpb25zIiwgImNvbm5lY3QiLCAib3B0aW9ucyIsICJ0YXJnZXRzIiwgImVyciIsICJyZXQiLCAiY2xpZW50IiwgImhhbmRsZXIiLCAia2V5IiwgImRpc3BhdGNoZXIiLCAiY2xvc2VQcm9taXNlcyIsICJkZXN0cm95UHJvbWlzZXMiLCAicmVxdWlyZV9wcm94eV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtQcm94eSIsICJrQ2xvc2UiLCAia0Rlc3Ryb3kiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAiVVJMIiwgIkFnZW50IiwgIlBvb2wiLCAiRGlzcGF0Y2hlckJhc2UiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvciIsICJidWlsZENvbm5lY3RvciIsICJDbGllbnQiLCAia0FnZW50IiwgImtDbGllbnQiLCAia1Byb3h5SGVhZGVycyIsICJrUmVxdWVzdFRscyIsICJrUHJveHlUbHMiLCAia0Nvbm5lY3RFbmRwb2ludCIsICJrVHVubmVsUHJveHkiLCAiZGVmYXVsdFByb3RvY29sUG9ydCIsICJwcm90b2NvbCIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJub29wIiwgImRlZmF1bHRBZ2VudEZhY3RvcnkiLCAiSHR0cDFQcm94eVdyYXBwZXIiLCAiI2NsaWVudCIsICJwcm94eVVybCIsICJoZWFkZXJzIiwgImNvbm5lY3QiLCAiZmFjdG9yeSIsICJoYW5kbGVyIiwgIm9uSGVhZGVycyIsICJzdGF0dXNDb2RlIiwgImRhdGEiLCAicmVzdW1lIiwgInBhdGgiLCAiaG9zdCIsICJlcnIiLCAiUHJveHlBZ2VudCIsICJjbGllbnRGYWN0b3J5IiwgInByb3h5VHVubmVsIiwgInVybCIsICIjZ2V0VXJsIiwgImhyZWYiLCAicG9ydCIsICJ1c2VybmFtZSIsICJwYXNzd29yZCIsICJwcm94eUhvc3RuYW1lIiwgImFnZW50RmFjdG9yeSIsICJvcHRpb25zIiwgImNhbGxiYWNrIiwgInJlcXVlc3RlZFBhdGgiLCAic29ja2V0IiwgInNlcnZlcm5hbWUiLCAiYnVpbGRIZWFkZXJzIiwgInRocm93SWZQcm94eUF1dGhJc1NlbnQiLCAiaGVhZGVyc1BhaXIiLCAiaSIsICJrZXkiLCAicmVxdWlyZV9lbnZfaHR0cF9wcm94eV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRpc3BhdGNoZXJCYXNlIiwgImtDbG9zZSIsICJrRGVzdHJveSIsICJrQ2xvc2VkIiwgImtEZXN0cm95ZWQiLCAia0Rpc3BhdGNoIiwgImtOb1Byb3h5QWdlbnQiLCAia0h0dHBQcm94eUFnZW50IiwgImtIdHRwc1Byb3h5QWdlbnQiLCAiUHJveHlBZ2VudCIsICJBZ2VudCIsICJERUZBVUxUX1BPUlRTIiwgImV4cGVyaW1lbnRhbFdhcm5lZCIsICJFbnZIdHRwUHJveHlBZ2VudCIsICIjbm9Qcm94eVZhbHVlIiwgIiNub1Byb3h5RW50cmllcyIsICIjb3B0cyIsICJvcHRzIiwgImh0dHBQcm94eSIsICJodHRwc1Byb3h5IiwgIm5vUHJveHkiLCAiYWdlbnRPcHRzIiwgIkhUVFBfUFJPWFkiLCAiSFRUUFNfUFJPWFkiLCAiI3BhcnNlTm9Qcm94eSIsICJoYW5kbGVyIiwgInVybCIsICIjZ2V0UHJveHlBZ2VudEZvclVybCIsICJlcnIiLCAicHJvdG9jb2wiLCAiaG9zdG5hbWUiLCAicG9ydCIsICIjc2hvdWxkUHJveHkiLCAiI25vUHJveHlDaGFuZ2VkIiwgImkiLCAiZW50cnkiLCAibm9Qcm94eVZhbHVlIiwgIiNub1Byb3h5RW52IiwgIm5vUHJveHlTcGxpdCIsICJub1Byb3h5RW50cmllcyIsICJwYXJzZWQiLCAicmVxdWlyZV9yZXRyeV9oYW5kbGVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnkiLCAiUmVxdWVzdFJldHJ5RXJyb3IiLCAiaXNEaXN0dXJiZWQiLCAicGFyc2VIZWFkZXJzIiwgInBhcnNlUmFuZ2VIZWFkZXIiLCAid3JhcFJlcXVlc3RCb2R5IiwgImNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIiLCAicmV0cnlBZnRlciIsICJjdXJyZW50IiwgInZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aCIsICJoZWFkZXJzIiwgInJhbmdlIiwgInN0YXR1c0NvZGUiLCAicmV0cnlDb3VudCIsICJjb250ZW50TGVuZ3RoIiwgImxlbmd0aCIsICJleHBlY3RlZExlbmd0aCIsICJSZXRyeUhhbmRsZXIiLCAiX1JldHJ5SGFuZGxlciIsICJvcHRzIiwgImhhbmRsZXJzIiwgInJldHJ5T3B0aW9ucyIsICJkaXNwYXRjaE9wdHMiLCAicmV0cnlGbiIsICJtYXhSZXRyaWVzIiwgIm1heFRpbWVvdXQiLCAibWluVGltZW91dCIsICJ0aW1lb3V0RmFjdG9yIiwgIm1ldGhvZHMiLCAiZXJyb3JDb2RlcyIsICJzdGF0dXNDb2RlcyIsICJyZWFzb24iLCAic29ja2V0IiwgImFib3J0IiwgImNodW5rIiwgImVyciIsICJzdGF0ZSIsICJjYiIsICJjb2RlIiwgIm1ldGhvZCIsICJjb3VudGVyIiwgInJldHJ5QWZ0ZXJIZWFkZXIiLCAicmV0cnlUaW1lb3V0IiwgInJhd0hlYWRlcnMiLCAicmVzdW1lIiwgInN0YXR1c01lc3NhZ2UiLCAiY29udGVudFJhbmdlIiwgImNvbnRlbnRMZW5ndGhFcnJvciIsICJzdGFydCIsICJzaXplIiwgImVuZCIsICJyYXdUcmFpbGVycyIsICJvblJldHJ5IiwgInJlcXVpcmVfcmV0cnlfYWdlbnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJEaXNwYXRjaGVyIiwgIlJldHJ5SGFuZGxlciIsICJSZXRyeUFnZW50IiwgIiNhZ2VudCIsICIjb3B0aW9ucyIsICJhZ2VudCIsICJvcHRpb25zIiwgIm9wdHMiLCAiaGFuZGxlciIsICJyZXRyeSIsICJyZXF1aXJlX3JlYWRhYmxlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgIlJlYWRhYmxlIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiTm90U3VwcG9ydGVkRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQWJvcnRFcnJvciIsICJ1dGlsIiwgIlJlYWRhYmxlU3RyZWFtRnJvbSIsICJrQ29uc3VtZSIsICJrUmVhZGluZyIsICJrQm9keSIsICJrQWJvcnQiLCAia0NvbnRlbnRUeXBlIiwgImtDb250ZW50TGVuZ3RoIiwgIm5vb3AiLCAiQm9keVJlYWRhYmxlIiwgInJlc3VtZSIsICJhYm9ydCIsICJjb250ZW50VHlwZSIsICJjb250ZW50TGVuZ3RoIiwgImhpZ2hXYXRlck1hcmsiLCAiZXJyIiwgImNhbGxiYWNrIiwgImV2IiwgImFyZ3MiLCAicmV0IiwgImNodW5rIiwgImNvbnN1bWVQdXNoIiwgImNvbnN1bWUiLCAib3B0cyIsICJsaW1pdCIsICJzaWduYWwiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib25BYm9ydCIsICJpc0xvY2tlZCIsICJzZWxmIiwgImlzVW51c2FibGUiLCAic3RyZWFtIiwgInR5cGUiLCAiclN0YXRlIiwgImNvbnN1bWVGaW5pc2giLCAiY29uc3VtZVN0YXJ0IiwgInN0YXRlIiwgInN0YXJ0IiwgImVuZCIsICJuIiwgImNvbnN1bWVFbmQiLCAiY2h1bmtzRGVjb2RlIiwgImNodW5rcyIsICJsZW5ndGgiLCAiYnVmZmVyIiwgImJ1ZmZlckxlbmd0aCIsICJjaHVua3NDb25jYXQiLCAib2Zmc2V0IiwgImkiLCAiYm9keSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAiY2h1bmtzRGVjb2RlIiwgIkNIVU5LX0xJTUlUIiwgImdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayIsICJjYWxsYmFjayIsICJib2R5IiwgImNvbnRlbnRUeXBlIiwgInN0YXR1c0NvZGUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgImNodW5rcyIsICJsZW5ndGgiLCAiY2h1bmsiLCAibWVzc2FnZSIsICJzdGFja1RyYWNlTGltaXQiLCAicGF5bG9hZCIsICJpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uIiwgImlzQ29udGVudFR5cGVUZXh0IiwgInJlcXVpcmVfYXBpX3JlcXVlc3QiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiUmVhZGFibGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJ1dGlsIiwgImdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayIsICJBc3luY1Jlc291cmNlIiwgIlJlcXVlc3RIYW5kbGVyIiwgIm9wdHMiLCAiY2FsbGJhY2siLCAic2lnbmFsIiwgIm1ldGhvZCIsICJvcGFxdWUiLCAiYm9keSIsICJvbkluZm8iLCAicmVzcG9uc2VIZWFkZXJzIiwgInRocm93T25FcnJvciIsICJoaWdoV2F0ZXJNYXJrIiwgImVyciIsICJhYm9ydCIsICJjb250ZXh0IiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgInBhcnNlZEhlYWRlcnMiLCAiY29udGVudFR5cGUiLCAiY29udGVudExlbmd0aCIsICJyZXMiLCAiY2h1bmsiLCAidHJhaWxlcnMiLCAicmVxdWVzdCIsICJyZXNvbHZlIiwgInJlamVjdCIsICJkYXRhIiwgInJlcXVpcmVfYWJvcnRfc2lnbmFsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYWRkQWJvcnRMaXN0ZW5lciIsICJSZXF1ZXN0QWJvcnRlZEVycm9yIiwgImtMaXN0ZW5lciIsICJrU2lnbmFsIiwgImFib3J0IiwgInNlbGYiLCAicmVtb3ZlU2lnbmFsIiwgImFkZFNpZ25hbCIsICJzaWduYWwiLCAicmVxdWlyZV9hcGlfc3RyZWFtIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImZpbmlzaGVkIiwgIlBhc3NUaHJvdWdoIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkludmFsaWRSZXR1cm5WYWx1ZUVycm9yIiwgInV0aWwiLCAiZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIiwgIkFzeW5jUmVzb3VyY2UiLCAiYWRkU2lnbmFsIiwgInJlbW92ZVNpZ25hbCIsICJTdHJlYW1IYW5kbGVyIiwgIm9wdHMiLCAiZmFjdG9yeSIsICJjYWxsYmFjayIsICJzaWduYWwiLCAibWV0aG9kIiwgIm9wYXF1ZSIsICJib2R5IiwgIm9uSW5mbyIsICJyZXNwb25zZUhlYWRlcnMiLCAidGhyb3dPbkVycm9yIiwgImVyciIsICJhYm9ydCIsICJjb250ZXh0IiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgInJlcyIsICJjb250ZW50VHlwZSIsICJ0cmFpbGVycyIsICJjaHVuayIsICJzdHJlYW0iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZGF0YSIsICJyZXF1aXJlX2FwaV9waXBlbGluZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJlYWRhYmxlIiwgIkR1cGxleCIsICJQYXNzVGhyb3VnaCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJSZXF1ZXN0QWJvcnRlZEVycm9yIiwgInV0aWwiLCAiQXN5bmNSZXNvdXJjZSIsICJhZGRTaWduYWwiLCAicmVtb3ZlU2lnbmFsIiwgImFzc2VydCIsICJrUmVzdW1lIiwgIlBpcGVsaW5lUmVxdWVzdCIsICJyZXN1bWUiLCAiZXJyIiwgImNhbGxiYWNrIiwgIlBpcGVsaW5lUmVzcG9uc2UiLCAiUGlwZWxpbmVIYW5kbGVyIiwgIm9wdHMiLCAiaGFuZGxlciIsICJzaWduYWwiLCAibWV0aG9kIiwgIm9wYXF1ZSIsICJvbkluZm8iLCAicmVzcG9uc2VIZWFkZXJzIiwgImJvZHkiLCAiY2h1bmsiLCAiZW5jb2RpbmciLCAicmVxIiwgInJlcyIsICJyZXQiLCAiYWJvcnQiLCAiY29udGV4dCIsICJzdGF0dXNDb2RlIiwgInJhd0hlYWRlcnMiLCAiaGVhZGVycyIsICJ0cmFpbGVycyIsICJwaXBlbGluZSIsICJwaXBlbGluZUhhbmRsZXIiLCAicmVxdWlyZV9hcGlfdXBncmFkZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlNvY2tldEVycm9yIiwgIkFzeW5jUmVzb3VyY2UiLCAidXRpbCIsICJhZGRTaWduYWwiLCAicmVtb3ZlU2lnbmFsIiwgImFzc2VydCIsICJVcGdyYWRlSGFuZGxlciIsICJvcHRzIiwgImNhbGxiYWNrIiwgInNpZ25hbCIsICJvcGFxdWUiLCAicmVzcG9uc2VIZWFkZXJzIiwgImFib3J0IiwgImNvbnRleHQiLCAic3RhdHVzQ29kZSIsICJyYXdIZWFkZXJzIiwgInNvY2tldCIsICJoZWFkZXJzIiwgImVyciIsICJ1cGdyYWRlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImRhdGEiLCAidXBncmFkZUhhbmRsZXIiLCAicmVxdWlyZV9hcGlfY29ubmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJBc3luY1Jlc291cmNlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlNvY2tldEVycm9yIiwgInV0aWwiLCAiYWRkU2lnbmFsIiwgInJlbW92ZVNpZ25hbCIsICJDb25uZWN0SGFuZGxlciIsICJvcHRzIiwgImNhbGxiYWNrIiwgInNpZ25hbCIsICJvcGFxdWUiLCAicmVzcG9uc2VIZWFkZXJzIiwgImFib3J0IiwgImNvbnRleHQiLCAic3RhdHVzQ29kZSIsICJyYXdIZWFkZXJzIiwgInNvY2tldCIsICJoZWFkZXJzIiwgImVyciIsICJjb25uZWN0IiwgInJlc29sdmUiLCAicmVqZWN0IiwgImRhdGEiLCAiY29ubmVjdEhhbmRsZXIiLCAicmVxdWlyZV9hcGkiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX21vY2tfZXJyb3JzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVW5kaWNpRXJyb3IiLCAia01vY2tOb3RNYXRjaGVkRXJyb3IiLCAiTW9ja05vdE1hdGNoZWRFcnJvciIsICJfTW9ja05vdE1hdGNoZWRFcnJvciIsICJtZXNzYWdlIiwgImluc3RhbmNlIiwgInJlcXVpcmVfbW9ja19zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9tb2NrX3V0aWxzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiTW9ja05vdE1hdGNoZWRFcnJvciIsICJrRGlzcGF0Y2hlcyIsICJrTW9ja0FnZW50IiwgImtPcmlnaW5hbERpc3BhdGNoIiwgImtPcmlnaW4iLCAia0dldE5ldENvbm5lY3QiLCAiYnVpbGRVUkwiLCAiU1RBVFVTX0NPREVTIiwgImlzUHJvbWlzZSIsICJtYXRjaFZhbHVlIiwgIm1hdGNoIiwgInZhbHVlIiwgImxvd2VyQ2FzZUVudHJpZXMiLCAiaGVhZGVycyIsICJoZWFkZXJOYW1lIiwgImhlYWRlclZhbHVlIiwgImdldEhlYWRlckJ5TmFtZSIsICJrZXkiLCAiaSIsICJidWlsZEhlYWRlcnNGcm9tQXJyYXkiLCAiY2xvbmUiLCAiZW50cmllcyIsICJpbmRleCIsICJtYXRjaEhlYWRlcnMiLCAibW9ja0Rpc3BhdGNoIiwgIm1hdGNoSGVhZGVyTmFtZSIsICJtYXRjaEhlYWRlclZhbHVlIiwgInNhZmVVcmwiLCAicGF0aCIsICJwYXRoU2VnbWVudHMiLCAicXAiLCAibWF0Y2hLZXkiLCAibWV0aG9kIiwgImJvZHkiLCAicGF0aE1hdGNoIiwgIm1ldGhvZE1hdGNoIiwgImJvZHlNYXRjaCIsICJoZWFkZXJzTWF0Y2giLCAiZ2V0UmVzcG9uc2VEYXRhIiwgImRhdGEiLCAiZ2V0TW9ja0Rpc3BhdGNoIiwgIm1vY2tEaXNwYXRjaGVzIiwgImJhc2VQYXRoIiwgInJlc29sdmVkUGF0aCIsICJtYXRjaGVkTW9ja0Rpc3BhdGNoZXMiLCAiY29uc3VtZWQiLCAiYWRkTW9ja0Rpc3BhdGNoIiwgImJhc2VEYXRhIiwgInJlcGx5RGF0YSIsICJuZXdNb2NrRGlzcGF0Y2giLCAiZGVsZXRlTW9ja0Rpc3BhdGNoIiwgImRpc3BhdGNoIiwgImJ1aWxkS2V5IiwgIm9wdHMiLCAicXVlcnkiLCAiZ2VuZXJhdGVLZXlWYWx1ZXMiLCAia2V5cyIsICJyZXN1bHQiLCAibmFtZSIsICJqIiwgImdldFN0YXR1c1RleHQiLCAic3RhdHVzQ29kZSIsICJnZXRSZXNwb25zZSIsICJidWZmZXJzIiwgImhhbmRsZXIiLCAidHJhaWxlcnMiLCAiZXJyb3IiLCAiZGVsYXkiLCAicGVyc2lzdCIsICJ0aW1lc0ludm9rZWQiLCAidGltZXMiLCAiaGFuZGxlUmVwbHkiLCAiX2RhdGEiLCAib3B0c0hlYWRlcnMiLCAibmV3RGF0YSIsICJyZXNwb25zZURhdGEiLCAicmVzcG9uc2VIZWFkZXJzIiwgInJlc3BvbnNlVHJhaWxlcnMiLCAiZXJyIiwgInJlc3VtZSIsICJidWlsZE1vY2tEaXNwYXRjaCIsICJhZ2VudCIsICJvcmlnaW4iLCAib3JpZ2luYWxEaXNwYXRjaCIsICJuZXRDb25uZWN0IiwgImNoZWNrTmV0Q29ubmVjdCIsICJ1cmwiLCAibWF0Y2hlciIsICJidWlsZE1vY2tPcHRpb25zIiwgIm1vY2tPcHRpb25zIiwgInJlcXVpcmVfbW9ja19pbnRlcmNlcHRvciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdldFJlc3BvbnNlRGF0YSIsICJidWlsZEtleSIsICJhZGRNb2NrRGlzcGF0Y2giLCAia0Rpc3BhdGNoZXMiLCAia0Rpc3BhdGNoS2V5IiwgImtEZWZhdWx0SGVhZGVycyIsICJrRGVmYXVsdFRyYWlsZXJzIiwgImtDb250ZW50TGVuZ3RoIiwgImtNb2NrRGlzcGF0Y2giLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiYnVpbGRVUkwiLCAiTW9ja1Njb3BlIiwgIm1vY2tEaXNwYXRjaCIsICJ3YWl0SW5NcyIsICJyZXBlYXRUaW1lcyIsICJNb2NrSW50ZXJjZXB0b3IiLCAib3B0cyIsICJtb2NrRGlzcGF0Y2hlcyIsICJwYXJzZWRVUkwiLCAic3RhdHVzQ29kZSIsICJkYXRhIiwgInJlc3BvbnNlT3B0aW9ucyIsICJyZXNwb25zZURhdGEiLCAiY29udGVudExlbmd0aCIsICJoZWFkZXJzIiwgInRyYWlsZXJzIiwgInJlcGx5UGFyYW1ldGVycyIsICJyZXBseU9wdGlvbnNDYWxsYmFja09yU3RhdHVzQ29kZSIsICJ3cmFwcGVkRGVmYXVsdHNDYWxsYmFjayIsICJyZXNvbHZlZERhdGEiLCAibmV3TW9ja0Rpc3BhdGNoIiwgImRpc3BhdGNoRGF0YSIsICJlcnJvciIsICJyZXF1aXJlX21vY2tfY2xpZW50IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicHJvbWlzaWZ5IiwgIkNsaWVudCIsICJidWlsZE1vY2tEaXNwYXRjaCIsICJrRGlzcGF0Y2hlcyIsICJrTW9ja0FnZW50IiwgImtDbG9zZSIsICJrT3JpZ2luYWxDbG9zZSIsICJrT3JpZ2luIiwgImtPcmlnaW5hbERpc3BhdGNoIiwgImtDb25uZWN0ZWQiLCAiTW9ja0ludGVyY2VwdG9yIiwgIlN5bWJvbHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiTW9ja0NsaWVudCIsICJvcmlnaW4iLCAib3B0cyIsICJyZXF1aXJlX21vY2tfcG9vbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInByb21pc2lmeSIsICJQb29sIiwgImJ1aWxkTW9ja0Rpc3BhdGNoIiwgImtEaXNwYXRjaGVzIiwgImtNb2NrQWdlbnQiLCAia0Nsb3NlIiwgImtPcmlnaW5hbENsb3NlIiwgImtPcmlnaW4iLCAia09yaWdpbmFsRGlzcGF0Y2giLCAia0Nvbm5lY3RlZCIsICJNb2NrSW50ZXJjZXB0b3IiLCAiU3ltYm9scyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJNb2NrUG9vbCIsICJvcmlnaW4iLCAib3B0cyIsICJyZXF1aXJlX3BsdXJhbGl6ZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzaW5ndWxhcnMiLCAicGx1cmFscyIsICJzaW5ndWxhciIsICJwbHVyYWwiLCAiY291bnQiLCAib25lIiwgImtleXMiLCAibm91biIsICJyZXF1aXJlX3BlbmRpbmdfaW50ZXJjZXB0b3JzX2Zvcm1hdHRlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlRyYW5zZm9ybSIsICJDb25zb2xlIiwgIlBFUlNJU1RFTlQiLCAiTk9UX1BFUlNJU1RFTlQiLCAiZGlzYWJsZUNvbG9ycyIsICJjaHVuayIsICJfZW5jIiwgImNiIiwgInBlbmRpbmdJbnRlcmNlcHRvcnMiLCAid2l0aFByZXR0eUhlYWRlcnMiLCAibWV0aG9kIiwgInBhdGgiLCAic3RhdHVzQ29kZSIsICJwZXJzaXN0IiwgInRpbWVzIiwgInRpbWVzSW52b2tlZCIsICJvcmlnaW4iLCAicmVxdWlyZV9tb2NrX2FnZW50IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia0NsaWVudHMiLCAiQWdlbnQiLCAia0FnZW50IiwgImtNb2NrQWdlbnRTZXQiLCAia01vY2tBZ2VudEdldCIsICJrRGlzcGF0Y2hlcyIsICJrSXNNb2NrQWN0aXZlIiwgImtOZXRDb25uZWN0IiwgImtHZXROZXRDb25uZWN0IiwgImtPcHRpb25zIiwgImtGYWN0b3J5IiwgIk1vY2tDbGllbnQiLCAiTW9ja1Bvb2wiLCAibWF0Y2hWYWx1ZSIsICJidWlsZE1vY2tPcHRpb25zIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlVuZGljaUVycm9yIiwgIkRpc3BhdGNoZXIiLCAiUGx1cmFsaXplciIsICJQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIiwgIk1vY2tBZ2VudCIsICJvcHRzIiwgImFnZW50IiwgIm9yaWdpbiIsICJkaXNwYXRjaGVyIiwgImhhbmRsZXIiLCAibWF0Y2hlciIsICJtb2NrT3B0aW9ucyIsICJjbGllbnQiLCAia2V5TWF0Y2hlciIsICJub25FeHBsaWNpdERpc3BhdGNoZXIiLCAibW9ja0FnZW50Q2xpZW50cyIsICJzY29wZSIsICJkaXNwYXRjaCIsICJwZW5kaW5nIiwgInBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIiLCAicGx1cmFsaXplciIsICJyZXF1aXJlX2dsb2JhbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbERpc3BhdGNoZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQWdlbnQiLCAiZ2V0R2xvYmFsRGlzcGF0Y2hlciIsICJzZXRHbG9iYWxEaXNwYXRjaGVyIiwgImFnZW50IiwgInJlcXVpcmVfZGVjb3JhdG9yX2hhbmRsZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIjaGFuZGxlciIsICJoYW5kbGVyIiwgImFyZ3MiLCAicmVxdWlyZV9yZWRpcmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJlZGlyZWN0SGFuZGxlciIsICJvcHRzIiwgImdsb2JhbE1heFJlZGlyZWN0aW9ucyIsICJkaXNwYXRjaCIsICJoYW5kbGVyIiwgIm1heFJlZGlyZWN0aW9ucyIsICJiYXNlT3B0cyIsICJyZWRpcmVjdEhhbmRsZXIiLCAicmVxdWlyZV9yZXRyeSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJldHJ5SGFuZGxlciIsICJnbG9iYWxPcHRzIiwgImRpc3BhdGNoIiwgIm9wdHMiLCAiaGFuZGxlciIsICJyZXF1aXJlX2R1bXAiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiRGVjb3JhdG9ySGFuZGxlciIsICJEdW1wSGFuZGxlciIsICIjbWF4U2l6ZSIsICIjYWJvcnQiLCAiI2R1bXBlZCIsICIjYWJvcnRlZCIsICIjc2l6ZSIsICIjcmVhc29uIiwgIiNoYW5kbGVyIiwgIm1heFNpemUiLCAiaGFuZGxlciIsICJhYm9ydCIsICIjY3VzdG9tQWJvcnQiLCAicmVhc29uIiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJjb250ZW50TGVuZ3RoIiwgImVyciIsICJjaHVuayIsICJ0cmFpbGVycyIsICJjcmVhdGVEdW1wSW50ZXJjZXB0b3IiLCAiZGVmYXVsdE1heFNpemUiLCAiZGlzcGF0Y2giLCAib3B0cyIsICJkdW1wTWF4U2l6ZSIsICJkdW1wSGFuZGxlciIsICJyZXF1aXJlX2RucyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzSVAiLCAibG9va3VwIiwgIkRlY29yYXRvckhhbmRsZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgIm1heEludCIsICJETlNJbnN0YW5jZSIsICIjbWF4VFRMIiwgIiNtYXhJdGVtcyIsICIjcmVjb3JkcyIsICJvcHRzIiwgIiNkZWZhdWx0TG9va3VwIiwgIiNkZWZhdWx0UGljayIsICJvcmlnaW4iLCAiY2IiLCAiaXBzIiwgIm5ld09wdHMiLCAiZXJyIiwgImFkZHJlc3NlcyIsICJyZWNvcmRzIiwgImlwIiwgInBvcnQiLCAicmVzdWx0cyIsICJhZGRyIiwgImhvc3RuYW1lUmVjb3JkcyIsICJhZmZpbml0eSIsICJvZmZzZXQiLCAiZmFtaWx5IiwgInBvc2l0aW9uIiwgInRpbWVzdGFtcCIsICJyZWNvcmQiLCAiZmFtaWx5UmVjb3JkcyIsICJtZXRhIiwgIkROU0Rpc3BhdGNoSGFuZGxlciIsICIjc3RhdGUiLCAiI29wdHMiLCAiI2Rpc3BhdGNoIiwgIiNoYW5kbGVyIiwgIiNvcmlnaW4iLCAic3RhdGUiLCAiaGFuZGxlciIsICJkaXNwYXRjaCIsICJuZXdPcmlnaW4iLCAiZGlzcGF0Y2hPcHRzIiwgImludGVyY2VwdG9yT3B0cyIsICJkdWFsU3RhY2siLCAiaW5zdGFuY2UiLCAib3JpZ0Rpc3BhdGNoT3B0cyIsICJyZXF1aXJlX2hlYWRlcnMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrQ29uc3RydWN0IiwgImtFbnVtZXJhYmxlUHJvcGVydHkiLCAiaXRlcmF0b3JNaXhpbiIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAid2ViaWRsIiwgImFzc2VydCIsICJ1dGlsIiwgImtIZWFkZXJzTWFwIiwgImtIZWFkZXJzU29ydGVkTWFwIiwgImlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZSIsICJjb2RlIiwgImhlYWRlclZhbHVlTm9ybWFsaXplIiwgInBvdGVudGlhbFZhbHVlIiwgImkiLCAiaiIsICJmaWxsIiwgImhlYWRlcnMiLCAib2JqZWN0IiwgImhlYWRlciIsICJhcHBlbmRIZWFkZXIiLCAia2V5cyIsICJuYW1lIiwgInZhbHVlIiwgImdldEhlYWRlcnNHdWFyZCIsICJnZXRIZWFkZXJzTGlzdCIsICJjb21wYXJlSGVhZGVyTmFtZSIsICJhIiwgImIiLCAiSGVhZGVyc0xpc3QiLCAiX0hlYWRlcnNMaXN0IiwgImluaXQiLCAiaXNMb3dlckNhc2UiLCAibG93ZXJjYXNlTmFtZSIsICJleGlzdHMiLCAiZGVsaW1pdGVyIiwgImxvd2VyTmFtZSIsICJjb29raWUiLCAic2l6ZSIsICJhcnJheSIsICJpdGVyYXRvciIsICJmaXJzdFZhbHVlIiwgInJpZ2h0IiwgImxlZnQiLCAicGl2b3QiLCAieCIsICJIZWFkZXJzIiwgIl9IZWFkZXJzIiwgIiNndWFyZCIsICIjaGVhZGVyc0xpc3QiLCAicHJlZml4IiwgImxpc3QiLCAibmFtZXMiLCAiY29va2llcyIsICJkZXB0aCIsICJvcHRpb25zIiwgIm8iLCAiZ3VhcmQiLCAic2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgIlYiLCAiYXJndW1lbnQiLCAicmVxdWlyZV9yZXNwb25zZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkhlYWRlcnMiLCAiSGVhZGVyc0xpc3QiLCAiZmlsbCIsICJnZXRIZWFkZXJzR3VhcmQiLCAic2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgImV4dHJhY3RCb2R5IiwgImNsb25lQm9keSIsICJtaXhpbkJvZHkiLCAiaGFzRmluYWxpemF0aW9uUmVnaXN0cnkiLCAic3RyZWFtUmVnaXN0cnkiLCAiYm9keVVudXNhYmxlIiwgInV0aWwiLCAibm9kZVV0aWwiLCAia0VudW1lcmFibGVQcm9wZXJ0eSIsICJpc1ZhbGlkUmVhc29uUGhyYXNlIiwgImlzQ2FuY2VsbGVkIiwgImlzQWJvcnRlZCIsICJpc0Jsb2JMaWtlIiwgInNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyIsICJpc0Vycm9yTGlrZSIsICJpc29tb3JwaGljRW5jb2RlIiwgInJlbGV2YW50UmVhbG0iLCAicmVkaXJlY3RTdGF0dXNTZXQiLCAibnVsbEJvZHlTdGF0dXMiLCAia1N0YXRlIiwgImtIZWFkZXJzIiwgIndlYmlkbCIsICJGb3JtRGF0YSIsICJVUkxTZXJpYWxpemVyIiwgImtDb25zdHJ1Y3QiLCAiYXNzZXJ0IiwgInR5cGVzIiwgInRleHRFbmNvZGVyIiwgIlJlc3BvbnNlIiwgIl9SZXNwb25zZSIsICJmcm9tSW5uZXJSZXNwb25zZSIsICJtYWtlTmV0d29ya0Vycm9yIiwgImRhdGEiLCAiaW5pdCIsICJieXRlcyIsICJib2R5IiwgInJlc3BvbnNlT2JqZWN0IiwgIm1ha2VSZXNwb25zZSIsICJpbml0aWFsaXplUmVzcG9uc2UiLCAidXJsIiwgInN0YXR1cyIsICJwYXJzZWRVUkwiLCAiZXJyIiwgInZhbHVlIiwgImJvZHlXaXRoVHlwZSIsICJleHRyYWN0ZWRCb2R5IiwgInR5cGUiLCAidXJsTGlzdCIsICJjbG9uZWRSZXNwb25zZSIsICJjbG9uZVJlc3BvbnNlIiwgImRlcHRoIiwgIm9wdGlvbnMiLCAicHJvcGVydGllcyIsICJyZXNwb25zZSIsICJmaWx0ZXJSZXNwb25zZSIsICJuZXdSZXNwb25zZSIsICJyZWFzb24iLCAiaXNFcnJvciIsICJpc05ldHdvcmtFcnJvciIsICJtYWtlRmlsdGVyZWRSZXNwb25zZSIsICJzdGF0ZSIsICJ0YXJnZXQiLCAicCIsICJtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IiLCAiZmV0Y2hQYXJhbXMiLCAiaW5uZXJSZXNwb25zZSIsICJndWFyZCIsICJWIiwgInByZWZpeCIsICJuYW1lIiwgImFyZ3VtZW50IiwgInJlcXVpcmVfZGlzcGF0Y2hlcl93ZWFrcmVmIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia0Nvbm5lY3RlZCIsICJrU2l6ZSIsICJDb21wYXRXZWFrUmVmIiwgInZhbHVlIiwgIkNvbXBhdEZpbmFsaXplciIsICJmaW5hbGl6ZXIiLCAiZGlzcGF0Y2hlciIsICJrZXkiLCAicmVxdWlyZV9yZXF1ZXN0IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXh0cmFjdEJvZHkiLCAibWl4aW5Cb2R5IiwgImNsb25lQm9keSIsICJib2R5VW51c2FibGUiLCAiSGVhZGVycyIsICJmaWxsSGVhZGVycyIsICJIZWFkZXJzTGlzdCIsICJzZXRIZWFkZXJzR3VhcmQiLCAiZ2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgImdldEhlYWRlcnNMaXN0IiwgIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgInV0aWwiLCAibm9kZVV0aWwiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJzYW1lT3JpZ2luIiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAiZm9yYmlkZGVuTWV0aG9kc1NldCIsICJjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQiLCAicmVmZXJyZXJQb2xpY3kiLCAicmVxdWVzdFJlZGlyZWN0IiwgInJlcXVlc3RNb2RlIiwgInJlcXVlc3RDcmVkZW50aWFscyIsICJyZXF1ZXN0Q2FjaGUiLCAicmVxdWVzdER1cGxleCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIm5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSIsICJub3JtYWxpemVkTWV0aG9kUmVjb3JkcyIsICJrSGVhZGVycyIsICJrU2lnbmFsIiwgImtTdGF0ZSIsICJrRGlzcGF0Y2hlciIsICJ3ZWJpZGwiLCAiVVJMU2VyaWFsaXplciIsICJrQ29uc3RydWN0IiwgImFzc2VydCIsICJnZXRNYXhMaXN0ZW5lcnMiLCAic2V0TWF4TGlzdGVuZXJzIiwgImdldEV2ZW50TGlzdGVuZXJzIiwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCAia0Fib3J0Q29udHJvbGxlciIsICJyZXF1ZXN0RmluYWxpemVyIiwgInNpZ25hbCIsICJhYm9ydCIsICJkZXBlbmRlbnRDb250cm9sbGVyTWFwIiwgImJ1aWxkQWJvcnQiLCAiYWNSZWYiLCAiYWMiLCAiY29udHJvbGxlckxpc3QiLCAicmVmIiwgImN0cmwiLCAicGF0Y2hNZXRob2RXYXJuaW5nIiwgIlJlcXVlc3QiLCAiX1JlcXVlc3QiLCAiaW5wdXQiLCAiaW5pdCIsICJwcmVmaXgiLCAicmVxdWVzdCIsICJmYWxsYmFja01vZGUiLCAiYmFzZVVybCIsICJwYXJzZWRVUkwiLCAiZXJyIiwgIm1ha2VSZXF1ZXN0IiwgIm9yaWdpbiIsICJ3aW5kb3ciLCAiaW5pdEhhc0tleSIsICJyZWZlcnJlciIsICJwYXJzZWRSZWZlcnJlciIsICJtb2RlIiwgIm1ldGhvZCIsICJtYXlCZU5vcm1hbGl6ZWQiLCAidXBwZXJDYXNlIiwgImhlYWRlcnNMaXN0IiwgImhlYWRlcnMiLCAibmFtZSIsICJ2YWx1ZSIsICJpbnB1dEJvZHkiLCAiaW5pdEJvZHkiLCAiZXh0cmFjdGVkQm9keSIsICJjb250ZW50VHlwZSIsICJpbnB1dE9ySW5pdEJvZHkiLCAiZmluYWxCb2R5IiwgImlkZW50aXR5VHJhbnNmb3JtIiwgImNsb25lZFJlcXVlc3QiLCAiY2xvbmVSZXF1ZXN0IiwgImxpc3QiLCAiZnJvbUlubmVyUmVxdWVzdCIsICJkZXB0aCIsICJvcHRpb25zIiwgInByb3BlcnRpZXMiLCAibmV3UmVxdWVzdCIsICJpbm5lclJlcXVlc3QiLCAiZ3VhcmQiLCAiViIsICJhcmd1bWVudCIsICJyZXF1aXJlX2ZldGNoIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibWFrZU5ldHdvcmtFcnJvciIsICJtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IiLCAiZmlsdGVyUmVzcG9uc2UiLCAibWFrZVJlc3BvbnNlIiwgImZyb21Jbm5lclJlc3BvbnNlIiwgIkhlYWRlcnNMaXN0IiwgIlJlcXVlc3QiLCAiY2xvbmVSZXF1ZXN0IiwgInpsaWIiLCAiYnl0ZXNNYXRjaCIsICJtYWtlUG9saWN5Q29udGFpbmVyIiwgImNsb25lUG9saWN5Q29udGFpbmVyIiwgInJlcXVlc3RCYWRQb3J0IiwgIlRBT0NoZWNrIiwgImFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIiLCAicmVzcG9uc2VMb2NhdGlvblVSTCIsICJyZXF1ZXN0Q3VycmVudFVSTCIsICJzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IiwgInRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCIsICJjcmVhdGVPcGFxdWVUaW1pbmdJbmZvIiwgImFwcGVuZEZldGNoTWV0YWRhdGEiLCAiY29yc0NoZWNrIiwgImNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayIsICJkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIiwgImNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIiwgImNyZWF0ZURlZmVycmVkUHJvbWlzZSIsICJpc0Jsb2JMaWtlIiwgInNhbWVPcmlnaW4iLCAiaXNDYW5jZWxsZWQiLCAiaXNBYm9ydGVkIiwgImlzRXJyb3JMaWtlIiwgImZ1bGx5UmVhZEJvZHkiLCAicmVhZGFibGVTdHJlYW1DbG9zZSIsICJpc29tb3JwaGljRW5jb2RlIiwgInVybElzTG9jYWwiLCAidXJsSXNIdHRwSHR0cHNTY2hlbWUiLCAidXJsSGFzSHR0cHNTY2hlbWUiLCAiY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8iLCAic2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZSIsICJidWlsZENvbnRlbnRSYW5nZSIsICJjcmVhdGVJbmZsYXRlIiwgImV4dHJhY3RNaW1lVHlwZSIsICJrU3RhdGUiLCAia0Rpc3BhdGNoZXIiLCAiYXNzZXJ0IiwgInNhZmVseUV4dHJhY3RCb2R5IiwgImV4dHJhY3RCb2R5IiwgInJlZGlyZWN0U3RhdHVzU2V0IiwgIm51bGxCb2R5U3RhdHVzIiwgInNhZmVNZXRob2RzU2V0IiwgInJlcXVlc3RCb2R5SGVhZGVyIiwgInN1YnJlc291cmNlU2V0IiwgIkVFIiwgIlJlYWRhYmxlIiwgInBpcGVsaW5lIiwgImZpbmlzaGVkIiwgImFkZEFib3J0TGlzdGVuZXIiLCAiaXNFcnJvcmVkIiwgImlzUmVhZGFibGUiLCAiYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSIsICJkYXRhVVJMUHJvY2Vzc29yIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIiwgImdldEdsb2JhbERpc3BhdGNoZXIiLCAid2ViaWRsIiwgIlNUQVRVU19DT0RFUyIsICJHRVRfT1JfSEVBRCIsICJkZWZhdWx0VXNlckFnZW50IiwgInJlc29sdmVPYmplY3RVUkwiLCAiRmV0Y2giLCAiZGlzcGF0Y2hlciIsICJyZWFzb24iLCAiZXJyb3IiLCAiaGFuZGxlRmV0Y2hEb25lIiwgInJlc3BvbnNlIiwgImZpbmFsaXplQW5kUmVwb3J0VGltaW5nIiwgImZldGNoIiwgImlucHV0IiwgImluaXQiLCAicCIsICJyZXF1ZXN0T2JqZWN0IiwgImUiLCAicmVxdWVzdCIsICJhYm9ydEZldGNoIiwgInJlc3BvbnNlT2JqZWN0IiwgImxvY2FsbHlBYm9ydGVkIiwgImNvbnRyb2xsZXIiLCAicmVhbFJlc3BvbnNlIiwgImZldGNoaW5nIiwgImluaXRpYXRvclR5cGUiLCAib3JpZ2luYWxVUkwiLCAidGltaW5nSW5mbyIsICJjYWNoZVN0YXRlIiwgIm1hcmtSZXNvdXJjZVRpbWluZyIsICJlcnIiLCAicHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgiLCAicHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkiLCAicHJvY2Vzc1Jlc3BvbnNlIiwgInByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSIsICJwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSIsICJ1c2VQYXJhbGxlbFF1ZXVlIiwgInRhc2tEZXN0aW5hdGlvbiIsICJjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSIsICJjdXJyZW50VGltZSIsICJmZXRjaFBhcmFtcyIsICJtYWluRmV0Y2giLCAicmVjdXJzaXZlIiwgImN1cnJlbnRVUkwiLCAic2NoZW1lRmV0Y2giLCAiaHR0cEZldGNoIiwgImludGVybmFsUmVzcG9uc2UiLCAicHJvY2Vzc0JvZHlFcnJvciIsICJmZXRjaEZpbmFsZSIsICJwcm9jZXNzQm9keSIsICJieXRlcyIsICJzY2hlbWUiLCAiYmxvYlVSTEVudHJ5IiwgImJsb2IiLCAiZnVsbExlbmd0aCIsICJzZXJpYWxpemVkRnVsbExlbmd0aCIsICJ0eXBlIiwgInJhbmdlSGVhZGVyIiwgInJhbmdlVmFsdWUiLCAicmFuZ2VTdGFydCIsICJyYW5nZUVuZCIsICJzbGljZWRCbG9iIiwgInNsaWNlZEJvZHlXaXRoVHlwZSIsICJzZXJpYWxpemVkU2xpY2VkTGVuZ3RoIiwgImNvbnRlbnRSYW5nZSIsICJib2R5V2l0aFR5cGUiLCAiZGF0YVVSTFN0cnVjdCIsICJtaW1lVHlwZSIsICJmaW5hbGl6ZVJlc3BvbnNlIiwgInVuc2FmZUVuZFRpbWUiLCAiYm9keUluZm8iLCAicmVzcG9uc2VTdGF0dXMiLCAicHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayIsICJhY3R1YWxSZXNwb25zZSIsICJodHRwTmV0d29ya09yQ2FjaGVGZXRjaCIsICJodHRwUmVkaXJlY3RGZXRjaCIsICJsb2NhdGlvblVSTCIsICJoZWFkZXJOYW1lIiwgImlzQXV0aGVudGljYXRpb25GZXRjaCIsICJpc05ld0Nvbm5lY3Rpb25GZXRjaCIsICJodHRwRmV0Y2hQYXJhbXMiLCAiaHR0cFJlcXVlc3QiLCAiaHR0cENhY2hlIiwgInJldmFsaWRhdGluZ0ZsYWciLCAiaW5jbHVkZUNyZWRlbnRpYWxzIiwgImNvbnRlbnRMZW5ndGgiLCAiY29udGVudExlbmd0aEhlYWRlclZhbHVlIiwgImZvcndhcmRSZXNwb25zZSIsICJodHRwTmV0d29ya0ZldGNoIiwgImZvcmNlTmV3Q29ubmVjdGlvbiIsICJhYm9ydCIsICJuZXdDb25uZWN0aW9uIiwgInJlcXVlc3RCb2R5IiwgInByb2Nlc3NCb2R5Q2h1bmsiLCAicHJvY2Vzc0VuZE9mQm9keSIsICJib2R5IiwgInN0YXR1cyIsICJzdGF0dXNUZXh0IiwgImhlYWRlcnNMaXN0IiwgInNvY2tldCIsICJkaXNwYXRjaCIsICJpdGVyYXRvciIsICJwdWxsQWxnb3JpdGhtIiwgImNhbmNlbEFsZ29yaXRobSIsICJzdHJlYW0iLCAib25BYm9ydGVkIiwgImlzRmFpbHVyZSIsICJkb25lIiwgInZhbHVlIiwgImJ1ZmZlciIsICJ1cmwiLCAiYWdlbnQiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiY29ubmVjdGlvbiIsICJyYXdIZWFkZXJzIiwgInJlc3VtZSIsICJsb2NhdGlvbiIsICJpIiwgImRlY29kZXJzIiwgIndpbGxGb2xsb3ciLCAiY29udGVudEVuY29kaW5nIiwgImNvZGluZ3MiLCAibWF4Q29udGVudEVuY29kaW5ncyIsICJjb2RpbmciLCAib25FcnJvciIsICJjaHVuayIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3Byb2dyZXNzZXZlbnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3ZWJpZGwiLCAia1N0YXRlIiwgIlByb2dyZXNzRXZlbnQiLCAiX1Byb2dyZXNzRXZlbnQiLCAidHlwZSIsICJldmVudEluaXREaWN0IiwgInJlcXVpcmVfZW5jb2RpbmciLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnZXRFbmNvZGluZyIsICJsYWJlbCIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrU3RhdGUiLCAia0Vycm9yIiwgImtSZXN1bHQiLCAia0Fib3J0ZWQiLCAia0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQiLCAiUHJvZ3Jlc3NFdmVudCIsICJnZXRFbmNvZGluZyIsICJzZXJpYWxpemVBTWltZVR5cGUiLCAicGFyc2VNSU1FVHlwZSIsICJ0eXBlcyIsICJTdHJpbmdEZWNvZGVyIiwgImJ0b2EiLCAic3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyIsICJyZWFkT3BlcmF0aW9uIiwgImZyIiwgImJsb2IiLCAidHlwZSIsICJlbmNvZGluZ05hbWUiLCAicmVhZGVyIiwgImJ5dGVzIiwgImNodW5rUHJvbWlzZSIsICJpc0ZpcnN0Q2h1bmsiLCAiZG9uZSIsICJ2YWx1ZSIsICJmaXJlQVByb2dyZXNzRXZlbnQiLCAicmVzdWx0IiwgInBhY2thZ2VEYXRhIiwgImVycm9yIiwgImUiLCAiZXZlbnQiLCAibWltZVR5cGUiLCAiZGF0YVVSTCIsICJwYXJzZWQiLCAiZGVjb2RlciIsICJjaHVuayIsICJlbmNvZGluZyIsICJkZWNvZGUiLCAiY29tYmluZUJ5dGVTZXF1ZW5jZXMiLCAiYmluYXJ5U3RyaW5nIiwgImlvUXVldWUiLCAiQk9NRW5jb2RpbmciLCAiQk9NU25pZmZpbmciLCAic2xpY2UiLCAic2xpY2VkIiwgImEiLCAiYiIsICJjIiwgInNlcXVlbmNlcyIsICJzaXplIiwgIm9mZnNldCIsICJyZXF1aXJlX2ZpbGVyZWFkZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzIiwgInJlYWRPcGVyYXRpb24iLCAiZmlyZUFQcm9ncmVzc0V2ZW50IiwgImtTdGF0ZSIsICJrRXJyb3IiLCAia1Jlc3VsdCIsICJrRXZlbnRzIiwgImtBYm9ydGVkIiwgIndlYmlkbCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIkZpbGVSZWFkZXIiLCAiX0ZpbGVSZWFkZXIiLCAiYmxvYiIsICJlbmNvZGluZyIsICJmbiIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiVVJMU2VyaWFsaXplciIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJ1cmxFcXVhbHMiLCAiQSIsICJCIiwgImV4Y2x1ZGVGcmFnbWVudCIsICJzZXJpYWxpemVkQSIsICJzZXJpYWxpemVkQiIsICJnZXRGaWVsZFZhbHVlcyIsICJoZWFkZXIiLCAidmFsdWVzIiwgInZhbHVlIiwgInJlcXVpcmVfY2FjaGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrQ29uc3RydWN0IiwgInVybEVxdWFscyIsICJnZXRGaWVsZFZhbHVlcyIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImlzRGlzdHVyYmVkIiwgIndlYmlkbCIsICJSZXNwb25zZSIsICJjbG9uZVJlc3BvbnNlIiwgImZyb21Jbm5lclJlc3BvbnNlIiwgIlJlcXVlc3QiLCAiZnJvbUlubmVyUmVxdWVzdCIsICJrU3RhdGUiLCAiZmV0Y2hpbmciLCAidXJsSXNIdHRwSHR0cHNTY2hlbWUiLCAiY3JlYXRlRGVmZXJyZWRQcm9taXNlIiwgInJlYWRBbGxCeXRlcyIsICJhc3NlcnQiLCAiQ2FjaGUiLCAiX0NhY2hlIiwgIiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QiLCAicmVxdWVzdCIsICJvcHRpb25zIiwgInByZWZpeCIsICJwIiwgIiNpbnRlcm5hbE1hdGNoQWxsIiwgInJlcXVlc3RzIiwgInJlc3BvbnNlUHJvbWlzZXMiLCAicmVxdWVzdExpc3QiLCAiciIsICJmZXRjaENvbnRyb2xsZXJzIiwgInJlc3BvbnNlUHJvbWlzZSIsICJyZXNwb25zZSIsICJmaWVsZFZhbHVlcyIsICJmaWVsZFZhbHVlIiwgImNvbnRyb2xsZXIiLCAicmVzcG9uc2VzIiwgIm9wZXJhdGlvbnMiLCAiaW5kZXgiLCAib3BlcmF0aW9uIiwgImNhY2hlSm9iUHJvbWlzZSIsICJlcnJvckRhdGEiLCAiI2JhdGNoQ2FjaGVPcGVyYXRpb25zIiwgImUiLCAiaW5uZXJSZXF1ZXN0IiwgImlubmVyUmVzcG9uc2UiLCAiY2xvbmVkUmVzcG9uc2UiLCAiYm9keVJlYWRQcm9taXNlIiwgInJlYWRlciIsICJieXRlcyIsICJyZXF1ZXN0UmVzcG9uc2VzIiwgInByb21pc2UiLCAicmVxdWVzdFJlc3BvbnNlIiwgIiNxdWVyeUNhY2hlIiwgInJlcXVlc3RPYmplY3QiLCAiY2FjaGUiLCAiYmFja3VwQ2FjaGUiLCAiYWRkZWRJdGVtcyIsICJyZXN1bHRMaXN0IiwgImlkeCIsICJyZXF1ZXN0UXVlcnkiLCAidGFyZ2V0U3RvcmFnZSIsICJzdG9yYWdlIiwgImNhY2hlZFJlcXVlc3QiLCAiY2FjaGVkUmVzcG9uc2UiLCAiI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbSIsICJxdWVyeVVSTCIsICJjYWNoZWRVUkwiLCAicmVxdWVzdFZhbHVlIiwgInF1ZXJ5VmFsdWUiLCAibWF4UmVzcG9uc2VzIiwgInJlc3BvbnNlTGlzdCIsICJyZXNwb25zZU9iamVjdCIsICJjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyIsICJyZXF1aXJlX2NhY2hlc3RvcmFnZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtDb25zdHJ1Y3QiLCAiQ2FjaGUiLCAid2ViaWRsIiwgImtFbnVtZXJhYmxlUHJvcGVydHkiLCAiQ2FjaGVTdG9yYWdlIiwgIl9DYWNoZVN0b3JhZ2UiLCAiI2NhY2hlcyIsICJyZXF1ZXN0IiwgIm9wdGlvbnMiLCAiY2FjaGVMaXN0IiwgInJlc3BvbnNlIiwgImNhY2hlTmFtZSIsICJwcmVmaXgiLCAiY2FjaGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc0NUTEV4Y2x1ZGluZ0h0YWIiLCAidmFsdWUiLCAiaSIsICJjb2RlIiwgInZhbGlkYXRlQ29va2llTmFtZSIsICJuYW1lIiwgInZhbGlkYXRlQ29va2llVmFsdWUiLCAibGVuIiwgInZhbGlkYXRlQ29va2llUGF0aCIsICJwYXRoIiwgImlzTGV0dGVyT3JEaWdpdCIsICJ2YWxpZGF0ZUNvb2tpZURvbWFpbiIsICJkb21haW4iLCAibGFiZWxMZW5ndGgiLCAiSU1GRGF5cyIsICJJTUZNb250aHMiLCAiSU1GUGFkZGVkTnVtYmVycyIsICJfIiwgInRvSU1GRGF0ZSIsICJkYXRlIiwgInZhbGlkYXRlQ29va2llTWF4QWdlIiwgIm1heEFnZSIsICJzdHJpbmdpZnkiLCAiY29va2llIiwgIm91dCIsICJwYXJ0IiwgImtleSIsICJ0cmltbWVkS2V5IiwgImpvaW5lZFZhbHVlIiwgInJlcXVpcmVfcGFyc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtYXhOYW1lVmFsdWVQYWlyU2l6ZSIsICJtYXhBdHRyaWJ1dGVWYWx1ZVNpemUiLCAiaXNDVExFeGNsdWRpbmdIdGFiIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IiwgImFzc2VydCIsICJwYXJzZVNldENvb2tpZSIsICJoZWFkZXIiLCAibmFtZVZhbHVlUGFpciIsICJ1bnBhcnNlZEF0dHJpYnV0ZXMiLCAibmFtZSIsICJ2YWx1ZSIsICJwb3NpdGlvbiIsICJwYXJzZVVucGFyc2VkQXR0cmlidXRlcyIsICJjb29raWVBdHRyaWJ1dGVMaXN0IiwgImNvb2tpZUF2IiwgImF0dHJpYnV0ZU5hbWUiLCAiYXR0cmlidXRlVmFsdWUiLCAiYXR0cmlidXRlTmFtZUxvd2VyY2FzZSIsICJleHBpcnlUaW1lIiwgImNoYXJDb2RlIiwgImRlbHRhU2Vjb25kcyIsICJjb29raWVEb21haW4iLCAiY29va2llUGF0aCIsICJhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSIsICJyZXF1aXJlX2Nvb2tpZXMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXJzZVNldENvb2tpZSIsICJzdHJpbmdpZnkiLCAid2ViaWRsIiwgIkhlYWRlcnMiLCAiZ2V0Q29va2llcyIsICJoZWFkZXJzIiwgImNvb2tpZSIsICJvdXQiLCAicGllY2UiLCAibmFtZSIsICJ2YWx1ZSIsICJkZWxldGVDb29raWUiLCAiYXR0cmlidXRlcyIsICJwcmVmaXgiLCAic2V0Q29va2llIiwgImdldFNldENvb2tpZXMiLCAiY29va2llcyIsICJwYWlyIiwgInN0ciIsICJyZXF1aXJlX2V2ZW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIndlYmlkbCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImtDb25zdHJ1Y3QiLCAiTWVzc2FnZVBvcnQiLCAiTWVzc2FnZUV2ZW50IiwgIl9NZXNzYWdlRXZlbnQiLCAiI2V2ZW50SW5pdCIsICJ0eXBlIiwgImV2ZW50SW5pdERpY3QiLCAicHJlZml4IiwgImJ1YmJsZXMiLCAiY2FuY2VsYWJsZSIsICJkYXRhIiwgIm9yaWdpbiIsICJsYXN0RXZlbnRJZCIsICJzb3VyY2UiLCAicG9ydHMiLCAiaW5pdCIsICJtZXNzYWdlRXZlbnQiLCAiY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCIsICJDbG9zZUV2ZW50IiwgIl9DbG9zZUV2ZW50IiwgIkVycm9yRXZlbnQiLCAiX0Vycm9yRXZlbnQiLCAiZXZlbnRJbml0IiwgInJlcXVpcmVfY29uc3RhbnRzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidWlkIiwgInN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAib3Bjb2RlcyIsICJtYXhVbnNpZ25lZDE2Qml0IiwgInBhcnNlclN0YXRlcyIsICJlbXB0eUJ1ZmZlciIsICJzZW5kSGludHMiLCAicmVxdWlyZV9zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia1JlYWR5U3RhdGUiLCAia0NvbnRyb2xsZXIiLCAia1Jlc3BvbnNlIiwgImtCaW5hcnlUeXBlIiwgImtXZWJTb2NrZXRVUkwiLCAic3RhdGVzIiwgIm9wY29kZXMiLCAiRXJyb3JFdmVudCIsICJjcmVhdGVGYXN0TWVzc2FnZUV2ZW50IiwgImlzVXRmOCIsICJjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCIsICJyZW1vdmVIVFRQV2hpdGVzcGFjZSIsICJpc0Nvbm5lY3RpbmciLCAid3MiLCAiaXNFc3RhYmxpc2hlZCIsICJpc0Nsb3NpbmciLCAiaXNDbG9zZWQiLCAiZmlyZUV2ZW50IiwgImUiLCAidGFyZ2V0IiwgImV2ZW50RmFjdG9yeSIsICJ0eXBlIiwgImluaXQiLCAiZXZlbnRJbml0RGljdCIsICJldmVudCIsICJ3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQiLCAiZGF0YSIsICJkYXRhRm9yRXZlbnQiLCAidXRmOERlY29kZSIsICJmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiIsICJ0b0FycmF5QnVmZmVyIiwgImJ1ZmZlciIsICJpc1ZhbGlkU3VicHJvdG9jb2wiLCAicHJvdG9jb2wiLCAiaSIsICJjb2RlIiwgImlzVmFsaWRTdGF0dXNDb2RlIiwgInJlYXNvbiIsICJjb250cm9sbGVyIiwgInJlc3BvbnNlIiwgImlzQ29udHJvbEZyYW1lIiwgIm9wY29kZSIsICJpc0NvbnRpbnVhdGlvbkZyYW1lIiwgImlzVGV4dEJpbmFyeUZyYW1lIiwgImlzVmFsaWRPcGNvZGUiLCAicGFyc2VFeHRlbnNpb25zIiwgImV4dGVuc2lvbnMiLCAicG9zaXRpb24iLCAiZXh0ZW5zaW9uTGlzdCIsICJwYWlyIiwgIm5hbWUiLCAidmFsdWUiLCAiaXNWYWxpZENsaWVudFdpbmRvd0JpdHMiLCAiYnl0ZSIsICJudW0iLCAiaGFzSW50bCIsICJmYXRhbERlY29kZXIiLCAicmVxdWlyZV9mcmFtZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm1heFVuc2lnbmVkMTZCaXQiLCAiQlVGRkVSX1NJWkUiLCAiY3J5cHRvIiwgImJ1ZmZlciIsICJidWZJZHgiLCAiX29mZnNldCIsICJfc2l6ZSIsICJpIiwgImdlbmVyYXRlTWFzayIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiZGF0YSIsICJvcGNvZGUiLCAiZnJhbWVEYXRhIiwgIm1hc2tLZXkiLCAiYm9keUxlbmd0aCIsICJwYXlsb2FkTGVuZ3RoIiwgIm9mZnNldCIsICJyZXF1aXJlX2Nvbm5lY3Rpb24iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1aWQiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAiZW1wdHlCdWZmZXIiLCAib3Bjb2RlcyIsICJrUmVhZHlTdGF0ZSIsICJrU2VudENsb3NlIiwgImtCeXRlUGFyc2VyIiwgImtSZWNlaXZlZENsb3NlIiwgImtSZXNwb25zZSIsICJmaXJlRXZlbnQiLCAiZmFpbFdlYnNvY2tldENvbm5lY3Rpb24iLCAiaXNDbG9zaW5nIiwgImlzQ2xvc2VkIiwgImlzRXN0YWJsaXNoZWQiLCAicGFyc2VFeHRlbnNpb25zIiwgImNoYW5uZWxzIiwgIkNsb3NlRXZlbnQiLCAibWFrZVJlcXVlc3QiLCAiZmV0Y2hpbmciLCAiSGVhZGVycyIsICJnZXRIZWFkZXJzTGlzdCIsICJnZXREZWNvZGVTcGxpdCIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiY3J5cHRvIiwgImVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24iLCAidXJsIiwgInByb3RvY29scyIsICJjbGllbnQiLCAid3MiLCAib25Fc3RhYmxpc2giLCAib3B0aW9ucyIsICJyZXF1ZXN0VVJMIiwgInJlcXVlc3QiLCAiaGVhZGVyc0xpc3QiLCAia2V5VmFsdWUiLCAicHJvdG9jb2wiLCAicmVzcG9uc2UiLCAic2VjV1NBY2NlcHQiLCAiZGlnZXN0IiwgInNlY0V4dGVuc2lvbiIsICJleHRlbnNpb25zIiwgInNlY1Byb3RvY29sIiwgIm9uU29ja2V0RGF0YSIsICJvblNvY2tldENsb3NlIiwgIm9uU29ja2V0RXJyb3IiLCAiY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uIiwgImNvZGUiLCAicmVhc29uIiwgInJlYXNvbkJ5dGVMZW5ndGgiLCAiZnJhbWUiLCAiY2h1bmsiLCAid2FzQ2xlYW4iLCAicmVzdWx0IiwgInR5cGUiLCAiaW5pdCIsICJlcnJvciIsICJyZXF1aXJlX3Blcm1lc3NhZ2VfZGVmbGF0ZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNyZWF0ZUluZmxhdGVSYXciLCAiWl9ERUZBVUxUX1dJTkRPV0JJVFMiLCAiaXNWYWxpZENsaWVudFdpbmRvd0JpdHMiLCAiTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIiwgInRhaWwiLCAia0J1ZmZlciIsICJrTGVuZ3RoIiwgIlBlck1lc3NhZ2VEZWZsYXRlIiwgIiNpbmZsYXRlIiwgIiNvcHRpb25zIiwgIiNtYXhQYXlsb2FkU2l6ZSIsICJleHRlbnNpb25zIiwgIm9wdGlvbnMiLCAiY2h1bmsiLCAiZmluIiwgImNhbGxiYWNrIiwgIndpbmRvd0JpdHMiLCAiZXJyIiwgImRhdGEiLCAiZnVsbCIsICJyZXF1aXJlX3JlY2VpdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiV3JpdGFibGUiLCAiYXNzZXJ0IiwgInBhcnNlclN0YXRlcyIsICJvcGNvZGVzIiwgInN0YXRlcyIsICJlbXB0eUJ1ZmZlciIsICJzZW50Q2xvc2VGcmFtZVN0YXRlIiwgImtSZWFkeVN0YXRlIiwgImtTZW50Q2xvc2UiLCAia1Jlc3BvbnNlIiwgImtSZWNlaXZlZENsb3NlIiwgImNoYW5uZWxzIiwgImlzVmFsaWRTdGF0dXNDb2RlIiwgImlzVmFsaWRPcGNvZGUiLCAiZmFpbFdlYnNvY2tldENvbm5lY3Rpb24iLCAid2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkIiwgInV0ZjhEZWNvZGUiLCAiaXNDb250cm9sRnJhbWUiLCAiaXNUZXh0QmluYXJ5RnJhbWUiLCAiaXNDb250aW51YXRpb25GcmFtZSIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uIiwgIlBlck1lc3NhZ2VEZWZsYXRlIiwgIk1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciIsICJmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlIiwgIndzIiwgImNvZGUiLCAicmVhc29uIiwgIkJ5dGVQYXJzZXIiLCAiI2J1ZmZlcnMiLCAiI2ZyYWdtZW50c0J5dGVzIiwgIiNieXRlT2Zmc2V0IiwgIiNsb29wIiwgIiNzdGF0ZSIsICIjaW5mbyIsICIjZnJhZ21lbnRzIiwgIiNleHRlbnNpb25zIiwgIiNtYXhGcmFnbWVudHMiLCAiI21heFBheWxvYWRTaXplIiwgImV4dGVuc2lvbnMiLCAib3B0aW9ucyIsICJjaHVuayIsICJfIiwgImNhbGxiYWNrIiwgIiN2YWxpZGF0ZVBheWxvYWRMZW5ndGgiLCAiYnVmZmVyIiwgImZpbiIsICJvcGNvZGUiLCAibWFza2VkIiwgImZyYWdtZW50ZWQiLCAicGF5bG9hZExlbmd0aCIsICJyc3YxIiwgInJzdjIiLCAicnN2MyIsICJ1cHBlciIsICJsb3dlciIsICJib2R5IiwgImVycm9yIiwgImRhdGEiLCAibiIsICJvZmZzZXQiLCAibmV4dCIsICJsZW5ndGgiLCAiZnJhZ21lbnQiLCAiZnJhZ21lbnRzIiwgIm91dHB1dCIsICJjbG9zZUZyYW1lIiwgImVyciIsICJmcmFtZSIsICJyZXF1aXJlX3NlbmRlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIldlYnNvY2tldEZyYW1lU2VuZCIsICJvcGNvZGVzIiwgInNlbmRIaW50cyIsICJGaXhlZFF1ZXVlIiwgIkZhc3RCdWZmZXIiLCAiU2VuZFF1ZXVlIiwgIiNxdWV1ZSIsICIjcnVubmluZyIsICIjc29ja2V0IiwgInNvY2tldCIsICJpdGVtIiwgImNiIiwgImhpbnQiLCAiZnJhbWUiLCAiY3JlYXRlRnJhbWUiLCAibm9kZSIsICJhYiIsICIjcnVuIiwgInF1ZXVlIiwgImRhdGEiLCAidG9CdWZmZXIiLCAicmVxdWlyZV93ZWJzb2NrZXQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3ZWJpZGwiLCAiVVJMU2VyaWFsaXplciIsICJlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IiwgInN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAic2VuZEhpbnRzIiwgImtXZWJTb2NrZXRVUkwiLCAia1JlYWR5U3RhdGUiLCAia0NvbnRyb2xsZXIiLCAia0JpbmFyeVR5cGUiLCAia1Jlc3BvbnNlIiwgImtTZW50Q2xvc2UiLCAia0J5dGVQYXJzZXIiLCAiaXNDb25uZWN0aW5nIiwgImlzRXN0YWJsaXNoZWQiLCAiaXNDbG9zaW5nIiwgImlzVmFsaWRTdWJwcm90b2NvbCIsICJmaXJlRXZlbnQiLCAiZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiIsICJjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24iLCAiQnl0ZVBhcnNlciIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImlzQmxvYkxpa2UiLCAiZ2V0R2xvYmFsRGlzcGF0Y2hlciIsICJ0eXBlcyIsICJFcnJvckV2ZW50IiwgIkNsb3NlRXZlbnQiLCAiU2VuZFF1ZXVlIiwgIldlYlNvY2tldCIsICJfV2ViU29ja2V0IiwgIiNldmVudHMiLCAiI2J1ZmZlcmVkQW1vdW50IiwgIiNwcm90b2NvbCIsICIjZXh0ZW5zaW9ucyIsICIjc2VuZFF1ZXVlIiwgInVybCIsICJwcm90b2NvbHMiLCAicHJlZml4IiwgIm9wdGlvbnMiLCAiYmFzZVVSTCIsICJ1cmxSZWNvcmQiLCAiZSIsICJwIiwgImNsaWVudCIsICJyZXNwb25zZSIsICJleHRlbnNpb25zIiwgIiNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCIsICJjb2RlIiwgInJlYXNvbiIsICJyZWFzb25CeXRlTGVuZ3RoIiwgImRhdGEiLCAibGVuZ3RoIiwgImZuIiwgInR5cGUiLCAicGFyc2VkRXh0ZW5zaW9ucyIsICJ3ZWJTb2NrZXRPcHRpb25zIiwgIm1heEZyYWdtZW50cyIsICJtYXhQYXlsb2FkU2l6ZSIsICJwYXJzZXIiLCAib25QYXJzZXJEcmFpbiIsICJvblBhcnNlckVycm9yIiwgInByb3RvY29sIiwgIlYiLCAiYXJndW1lbnQiLCAiZXJyIiwgIm1lc3NhZ2UiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNWYWxpZExhc3RFdmVudElkIiwgInZhbHVlIiwgImlzQVNDSUlOdW1iZXIiLCAiaSIsICJkZWxheSIsICJtcyIsICJyZXNvbHZlIiwgInJlcXVpcmVfZXZlbnRzb3VyY2Vfc3RyZWFtIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVHJhbnNmb3JtIiwgImlzQVNDSUlOdW1iZXIiLCAiaXNWYWxpZExhc3RFdmVudElkIiwgIkJPTSIsICJMRiIsICJDUiIsICJDT0xPTiIsICJTUEFDRSIsICJFdmVudFNvdXJjZVN0cmVhbSIsICJvcHRpb25zIiwgImNodW5rIiwgIl9lbmNvZGluZyIsICJjYWxsYmFjayIsICJsaW5lIiwgImV2ZW50IiwgImNvbG9uUG9zaXRpb24iLCAiZmllbGQiLCAidmFsdWUiLCAidmFsdWVTdGFydCIsICJyZXF1aXJlX2V2ZW50c291cmNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGlwZWxpbmUiLCAiZmV0Y2hpbmciLCAibWFrZVJlcXVlc3QiLCAid2ViaWRsIiwgIkV2ZW50U291cmNlU3RyZWFtIiwgInBhcnNlTUlNRVR5cGUiLCAiY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCIsICJpc05ldHdvcmtFcnJvciIsICJkZWxheSIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAiZXhwZXJpbWVudGFsV2FybmVkIiwgImRlZmF1bHRSZWNvbm5lY3Rpb25UaW1lIiwgIkNPTk5FQ1RJTkciLCAiT1BFTiIsICJDTE9TRUQiLCAiQU5PTllNT1VTIiwgIlVTRV9DUkVERU5USUFMUyIsICJFdmVudFNvdXJjZSIsICJfRXZlbnRTb3VyY2UiLCAiI2V2ZW50cyIsICIjdXJsIiwgIiN3aXRoQ3JlZGVudGlhbHMiLCAiI3JlYWR5U3RhdGUiLCAiI3JlcXVlc3QiLCAiI2NvbnRyb2xsZXIiLCAiI2Rpc3BhdGNoZXIiLCAiI3N0YXRlIiwgInVybCIsICJldmVudFNvdXJjZUluaXREaWN0IiwgInByZWZpeCIsICJzZXR0aW5ncyIsICJ1cmxSZWNvcmQiLCAiZSIsICJjb3JzQXR0cmlidXRlU3RhdGUiLCAiaW5pdFJlcXVlc3QiLCAiI2Nvbm5lY3QiLCAiZmV0Y2hQYXJhbXMiLCAicHJvY2Vzc0V2ZW50U291cmNlRW5kT2ZCb2R5IiwgInJlc3BvbnNlIiwgIiNyZWNvbm5lY3QiLCAiY29udGVudFR5cGUiLCAibWltZVR5cGUiLCAiY29udGVudFR5cGVWYWxpZCIsICJldmVudFNvdXJjZVN0cmVhbSIsICJldmVudCIsICJlcnJvciIsICJmbiIsICJjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzIiwgInJlcXVpcmVfdW5kaWNpIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQ2xpZW50IiwgIkRpc3BhdGNoZXIiLCAiUG9vbCIsICJCYWxhbmNlZFBvb2wiLCAiQWdlbnQiLCAiUHJveHlBZ2VudCIsICJFbnZIdHRwUHJveHlBZ2VudCIsICJSZXRyeUFnZW50IiwgImVycm9ycyIsICJ1dGlsIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImFwaSIsICJidWlsZENvbm5lY3RvciIsICJNb2NrQ2xpZW50IiwgIk1vY2tBZ2VudCIsICJNb2NrUG9vbCIsICJtb2NrRXJyb3JzIiwgIlJldHJ5SGFuZGxlciIsICJnZXRHbG9iYWxEaXNwYXRjaGVyIiwgInNldEdsb2JhbERpc3BhdGNoZXIiLCAiRGVjb3JhdG9ySGFuZGxlciIsICJSZWRpcmVjdEhhbmRsZXIiLCAiY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciIsICJtYWtlRGlzcGF0Y2hlciIsICJmbiIsICJ1cmwiLCAib3B0cyIsICJoYW5kbGVyIiwgInBhdGgiLCAiYWdlbnQiLCAiZGlzcGF0Y2hlciIsICJmZXRjaEltcGwiLCAiaW5pdCIsICJvcHRpb25zIiwgImVyciIsICJzZXRHbG9iYWxPcmlnaW4iLCAiZ2V0R2xvYmFsT3JpZ2luIiwgIkNhY2hlU3RvcmFnZSIsICJrQ29uc3RydWN0IiwgImRlbGV0ZUNvb2tpZSIsICJnZXRDb29raWVzIiwgImdldFNldENvb2tpZXMiLCAic2V0Q29va2llIiwgInBhcnNlTUlNRVR5cGUiLCAic2VyaWFsaXplQU1pbWVUeXBlIiwgIkNsb3NlRXZlbnQiLCAiRXJyb3JFdmVudCIsICJNZXNzYWdlRXZlbnQiLCAiRXZlbnRTb3VyY2UiLCAiZXhwb3J0cyIsICJnZXRQcm94eVVybCIsICJjaGVja0J5cGFzcyIsICJyZXFVcmwiLCAidXNpbmdTc2wiLCAicHJveHlWYXIiLCAiRGVjb2RlZFVSTCIsICJyZXFIb3N0IiwgImlzTG9vcGJhY2tBZGRyZXNzIiwgIm5vUHJveHkiLCAicmVxUG9ydCIsICJ1cHBlclJlcUhvc3RzIiwgInVwcGVyTm9Qcm94eUl0ZW0iLCAieCIsICJob3N0IiwgImhvc3RMb3dlciIsICJ1cmwiLCAiYmFzZSIsICJleHBvcnRzIiwgImdldFByb3h5VXJsIiwgImlzSHR0cHMiLCAiaHR0cCIsICJfX2ltcG9ydFN0YXIiLCAiaHR0cHMiLCAicG0iLCAidHVubmVsIiwgInVuZGljaV8xIiwgIkh0dHBDb2RlcyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAic2VydmVyVXJsIiwgInByb3h5VXJsIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgIkh0dHBSZXNwb25zZVJldHJ5Q29kZXMiLCAiUmV0cnlhYmxlSHR0cFZlcmJzIiwgIkV4cG9uZW50aWFsQmFja29mZkNlaWxpbmciLCAiRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlIiwgIkh0dHBDbGllbnRFcnJvciIsICJfSHR0cENsaWVudEVycm9yIiwgIm1lc3NhZ2UiLCAic3RhdHVzQ29kZSIsICJIdHRwQ2xpZW50UmVzcG9uc2UiLCAicmVzb2x2ZSIsICJfX2F3YWl0ZXIiLCAib3V0cHV0IiwgImNodW5rIiwgImNodW5rcyIsICJyZXF1ZXN0VXJsIiwgIkh0dHBDbGllbnQiLCAidXNlckFnZW50IiwgImhhbmRsZXJzIiwgInJlcXVlc3RPcHRpb25zIiwgImFkZGl0aW9uYWxIZWFkZXJzIiwgImRhdGEiLCAidmVyYiIsICJzdHJlYW0iLCAicmVxdWVzdFVybF8xIiwgInJlcyIsICJvYmpfMSIsICJvYmoiLCAiaGVhZGVycyIsICJwYXJzZWRVcmwiLCAiaW5mbyIsICJtYXhUcmllcyIsICJudW1UcmllcyIsICJyZXNwb25zZSIsICJhdXRoZW50aWNhdGlvbkhhbmRsZXIiLCAiaGFuZGxlciIsICJyZWRpcmVjdHNSZW1haW5pbmciLCAicmVkaXJlY3RVcmwiLCAicGFyc2VkUmVkaXJlY3RVcmwiLCAiaGVhZGVyIiwgInJlamVjdCIsICJjYWxsYmFja0ZvclJlc3VsdCIsICJlcnIiLCAib25SZXN1bHQiLCAiY2FsbGJhY2tDYWxsZWQiLCAiaGFuZGxlUmVzdWx0IiwgInJlcSIsICJtc2ciLCAic29ja2V0IiwgInNvY2siLCAibWV0aG9kIiwgInVzaW5nU3NsIiwgImRlZmF1bHRQb3J0IiwgImxvd2VyY2FzZUtleXMiLCAiX2RlZmF1bHQiLCAiY2xpZW50SGVhZGVyIiwgImhlYWRlclZhbHVlIiwgImFkZGl0aW9uYWxWYWx1ZSIsICJhZ2VudCIsICJ1c2VQcm94eSIsICJtYXhTb2NrZXRzIiwgImFnZW50T3B0aW9ucyIsICJ0dW5uZWxBZ2VudCIsICJvdmVySHR0cHMiLCAib3B0aW9ucyIsICJwcm94eUFnZW50IiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgInNhbml0aXplZElkIiwgInJldHJ5TnVtYmVyIiwgIm1zIiwgImRhdGVUaW1lRGVzZXJpYWxpemVyIiwgImtleSIsICJ2YWx1ZSIsICJhIiwgImNvbnRlbnRzIiwgImMiLCAiayIsICJleHBvcnRzIiwgImZvcm1hdCIsICJwYXJzZSIsICJURVhUX1JFR0VYUCIsICJUT0tFTl9SRUdFWFAiLCAiUVVPVEVfUkVHRVhQIiwgIlRZUEVfUkVHRVhQIiwgIk51bGxPYmplY3QiLCAiQyIsICJvYmoiLCAidHlwZSIsICJwYXJhbWV0ZXJzIiwgInJlc3VsdCIsICJwYXJhbSIsICJxc3RyaW5nIiwgImhlYWRlciIsICJvcHRpb25zIiwgImxlbiIsICJpbmRleCIsICJza2lwT1dTIiwgInZhbHVlU3RhcnQiLCAic2tpcFZhbHVlIiwgInZhbHVlRW5kIiwgInRyYWlsaW5nT1dTIiwgInBhcnNlUGFyYW1ldGVycyIsICJTUCIsICJIVEFCIiwgIlNFTUkiLCAiRVEiLCAiRFFVT1RFIiwgIkJTTEFTSCIsICJwYXJhbWV0ZXIiLCAia2V5U3RhcnQiLCAiY29kZSIsICJrZXlFbmQiLCAia2V5IiwgInZhbHVlIiwgInN0ciIsICJjaGFyIiwgInN0YXJ0IiwgImVuZCIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNFTVZFUl9TUEVDX1ZFUlNJT04iLCAiTUFYX1NBRkVfSU5URUdFUiIsICJNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIIiwgIk1BWF9TQUZFX0JVSUxEX0xFTkdUSCIsICJSRUxFQVNFX1RZUEVTIiwgInJlcXVpcmVfZGVidWciLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJkZWJ1ZyIsICJhcmdzIiwgInJlcXVpcmVfcmUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIIiwgIk1BWF9TQUZFX0JVSUxEX0xFTkdUSCIsICJNQVhfTEVOR1RIIiwgImRlYnVnIiwgInJlIiwgInNhZmVSZSIsICJzcmMiLCAic2FmZVNyYyIsICJ0IiwgIlIiLCAiTEVUVEVSREFTSE5VTUJFUiIsICJzYWZlUmVnZXhSZXBsYWNlbWVudHMiLCAibWFrZVNhZmVSZWdleCIsICJ2YWx1ZSIsICJ0b2tlbiIsICJtYXgiLCAiY3JlYXRlVG9rZW4iLCAibmFtZSIsICJpc0dsb2JhbCIsICJzYWZlIiwgImluZGV4IiwgInJlcXVpcmVfcGFyc2Vfb3B0aW9ucyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImxvb3NlT3B0aW9uIiwgImVtcHR5T3B0cyIsICJwYXJzZU9wdGlvbnMiLCAib3B0aW9ucyIsICJyZXF1aXJlX2lkZW50aWZpZXJzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibnVtZXJpYyIsICJjb21wYXJlSWRlbnRpZmllcnMiLCAiYSIsICJiIiwgImFudW0iLCAiYm51bSIsICJyY29tcGFyZUlkZW50aWZpZXJzIiwgInJlcXVpcmVfc2VtdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZGVidWciLCAiTUFYX0xFTkdUSCIsICJNQVhfU0FGRV9JTlRFR0VSIiwgInJlIiwgInQiLCAicGFyc2VPcHRpb25zIiwgImNvbXBhcmVJZGVudGlmaWVycyIsICJpc1ByZXJlbGVhc2VJZGVudGlmaWVyIiwgInByZXJlbGVhc2UiLCAiaWRlbnRpZmllciIsICJpZGVudGlmaWVycyIsICJpIiwgIlNlbVZlciIsICJfU2VtVmVyIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJtIiwgImlkIiwgIm51bSIsICJvdGhlciIsICJhIiwgImIiLCAicmVsZWFzZSIsICJpZGVudGlmaWVyQmFzZSIsICJtYXRjaCIsICJiYXNlIiwgInByZXJlbGVhc2VCYXNlIiwgInJlcXVpcmVfcGFyc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAicGFyc2UiLCAidmVyc2lvbiIsICJvcHRpb25zIiwgInRocm93RXJyb3JzIiwgImVyIiwgInJlcXVpcmVfdmFsaWQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXJzZSIsICJ2YWxpZCIsICJ2ZXJzaW9uIiwgIm9wdGlvbnMiLCAidiIsICJyZXF1aXJlX2NsZWFuIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAiY2xlYW4iLCAidmVyc2lvbiIsICJvcHRpb25zIiwgInMiLCAicmVxdWlyZV9pbmMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAiaW5jIiwgInZlcnNpb24iLCAicmVsZWFzZSIsICJvcHRpb25zIiwgImlkZW50aWZpZXIiLCAiaWRlbnRpZmllckJhc2UiLCAicmVxdWlyZV9kaWZmIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAiZGlmZiIsICJ2ZXJzaW9uMSIsICJ2ZXJzaW9uMiIsICJ2MSIsICJ2MiIsICJjb21wYXJpc29uIiwgInYxSGlnaGVyIiwgImhpZ2hWZXJzaW9uIiwgImxvd1ZlcnNpb24iLCAiaGlnaEhhc1ByZSIsICJwcmVmaXgiLCAicmVxdWlyZV9tYWpvciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJtYWpvciIsICJhIiwgImxvb3NlIiwgInJlcXVpcmVfbWlub3IiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAibWlub3IiLCAiYSIsICJsb29zZSIsICJyZXF1aXJlX3BhdGNoIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgInBhdGNoIiwgImEiLCAibG9vc2UiLCAicmVxdWlyZV9wcmVyZWxlYXNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAicHJlcmVsZWFzZSIsICJ2ZXJzaW9uIiwgIm9wdGlvbnMiLCAicGFyc2VkIiwgInJlcXVpcmVfY29tcGFyZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJjb21wYXJlIiwgImEiLCAiYiIsICJsb29zZSIsICJyZXF1aXJlX3Jjb21wYXJlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJyY29tcGFyZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9jb21wYXJlX2xvb3NlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJjb21wYXJlTG9vc2UiLCAiYSIsICJiIiwgInJlcXVpcmVfY29tcGFyZV9idWlsZCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJjb21wYXJlQnVpbGQiLCAiYSIsICJiIiwgImxvb3NlIiwgInZlcnNpb25BIiwgInZlcnNpb25CIiwgInJlcXVpcmVfc29ydCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvbXBhcmVCdWlsZCIsICJzb3J0IiwgImxpc3QiLCAibG9vc2UiLCAiYSIsICJiIiwgInJlcXVpcmVfcnNvcnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlQnVpbGQiLCAicnNvcnQiLCAibGlzdCIsICJsb29zZSIsICJhIiwgImIiLCAicmVxdWlyZV9ndCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvbXBhcmUiLCAiZ3QiLCAiYSIsICJiIiwgImxvb3NlIiwgInJlcXVpcmVfbHQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImx0IiwgImEiLCAiYiIsICJsb29zZSIsICJyZXF1aXJlX2VxIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJlcSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9uZXEiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgIm5lcSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9ndGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImd0ZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9sdGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImx0ZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9jbXAiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJlcSIsICJuZXEiLCAiZ3QiLCAiZ3RlIiwgImx0IiwgImx0ZSIsICJjbXAiLCAiYSIsICJvcCIsICJiIiwgImxvb3NlIiwgInJlcXVpcmVfY29lcmNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgInBhcnNlIiwgInJlIiwgInQiLCAiY29lcmNlIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJtYXRjaCIsICJjb2VyY2VSdGxSZWdleCIsICJuZXh0IiwgIm1ham9yIiwgIm1pbm9yIiwgInBhdGNoIiwgInByZXJlbGVhc2UiLCAiYnVpbGQiLCAicmVxdWlyZV90cnVuY2F0ZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhcnNlIiwgImNvbnN0YW50cyIsICJTZW1WZXIiLCAidHJ1bmNhdGUiLCAidmVyc2lvbiIsICJ0cnVuY2F0aW9uIiwgIm9wdGlvbnMiLCAiY2xvbmVkVmVyc2lvbiIsICJjbG9uZUlucHV0VmVyc2lvbiIsICJkb1RydW5jYXRpb24iLCAidmVyc2lvblN0cmluZ1RvUGFyc2UiLCAiaXNQcmVyZWxlYXNlIiwgInR5cGUiLCAicmVxdWlyZV9scnVjYWNoZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkxSVUNhY2hlIiwgImtleSIsICJ2YWx1ZSIsICJmaXJzdEtleSIsICJyZXF1aXJlX3JhbmdlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU1BBQ0VfQ0hBUkFDVEVSUyIsICJSYW5nZSIsICJfUmFuZ2UiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJwYXJzZU9wdGlvbnMiLCAiQ29tcGFyYXRvciIsICJyIiwgImMiLCAiZmlyc3QiLCAiaXNOdWxsU2V0IiwgImlzQW55IiwgImkiLCAiY29tcHMiLCAiayIsICJCVUlMRFNUUklQUkUiLCAibWVtb0tleSIsICJGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRSIsICJGTEFHX0xPT1NFIiwgImNhY2hlZCIsICJjYWNoZSIsICJsb29zZSIsICJociIsICJyZSIsICJ0IiwgImh5cGhlblJlcGxhY2UiLCAiZGVidWciLCAiY29tcGFyYXRvclRyaW1SZXBsYWNlIiwgInRpbGRlVHJpbVJlcGxhY2UiLCAiY2FyZXRUcmltUmVwbGFjZSIsICJyYW5nZUxpc3QiLCAiY29tcCIsICJwYXJzZUNvbXBhcmF0b3IiLCAicmVwbGFjZUdURTAiLCAicmFuZ2VNYXAiLCAiY29tcGFyYXRvcnMiLCAicmVzdWx0IiwgInRoaXNDb21wYXJhdG9ycyIsICJpc1NhdGlzZmlhYmxlIiwgInJhbmdlQ29tcGFyYXRvcnMiLCAidGhpc0NvbXBhcmF0b3IiLCAicmFuZ2VDb21wYXJhdG9yIiwgInZlcnNpb24iLCAiU2VtVmVyIiwgInRlc3RTZXQiLCAiTFJVIiwgInNyYyIsICJyZW1haW5pbmdDb21wYXJhdG9ycyIsICJ0ZXN0Q29tcGFyYXRvciIsICJvdGhlckNvbXBhcmF0b3IiLCAicmVwbGFjZUNhcmV0cyIsICJyZXBsYWNlVGlsZGVzIiwgInJlcGxhY2VYUmFuZ2VzIiwgInJlcGxhY2VTdGFycyIsICJpc1giLCAiaWQiLCAiaW52YWxpZFhSYW5nZU9yZGVyIiwgIk0iLCAibSIsICJwIiwgInJlcGxhY2VUaWxkZSIsICJ6IiwgIl8iLCAicHIiLCAicmV0IiwgInJlcGxhY2VDYXJldCIsICJyZXBsYWNlWFJhbmdlIiwgImd0bHQiLCAieE0iLCAieG0iLCAieHAiLCAiYW55WCIsICJpbmNQciIsICIkMCIsICJmcm9tIiwgImZNIiwgImZtIiwgImZwIiwgImZwciIsICJmYiIsICJ0byIsICJ0TSIsICJ0bSIsICJ0cCIsICJ0cHIiLCAic2V0IiwgImFsbG93ZWQiLCAicmVxdWlyZV9jb21wYXJhdG9yIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQU5ZIiwgIkNvbXBhcmF0b3IiLCAiX0NvbXBhcmF0b3IiLCAiY29tcCIsICJvcHRpb25zIiwgInBhcnNlT3B0aW9ucyIsICJkZWJ1ZyIsICJyZSIsICJ0IiwgIm0iLCAiU2VtVmVyIiwgInZlcnNpb24iLCAiY21wIiwgIlJhbmdlIiwgInJlcXVpcmVfc2F0aXNmaWVzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAic2F0aXNmaWVzIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX3RvX2NvbXBhcmF0b3JzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAidG9Db21wYXJhdG9ycyIsICJyYW5nZSIsICJvcHRpb25zIiwgImNvbXAiLCAiYyIsICJyZXF1aXJlX21heF9zYXRpc2Z5aW5nIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgIm1heFNhdGlzZnlpbmciLCAidmVyc2lvbnMiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJtYXgiLCAibWF4U1YiLCAicmFuZ2VPYmoiLCAidiIsICJyZXF1aXJlX21pbl9zYXRpc2Z5aW5nIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgIm1pblNhdGlzZnlpbmciLCAidmVyc2lvbnMiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJtaW4iLCAibWluU1YiLCAicmFuZ2VPYmoiLCAidiIsICJyZXF1aXJlX21pbl92ZXJzaW9uIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgImd0IiwgIm1pblZlcnNpb24iLCAicmFuZ2UiLCAibG9vc2UiLCAibWludmVyIiwgImkiLCAiY29tcGFyYXRvcnMiLCAic2V0TWluIiwgImNvbXBhcmF0b3IiLCAiY29tcHZlciIsICJyZXF1aXJlX3ZhbGlkIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAidmFsaWRSYW5nZSIsICJyYW5nZSIsICJvcHRpb25zIiwgInJlcXVpcmVfb3V0c2lkZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJDb21wYXJhdG9yIiwgIkFOWSIsICJSYW5nZSIsICJzYXRpc2ZpZXMiLCAiZ3QiLCAibHQiLCAibHRlIiwgImd0ZSIsICJvdXRzaWRlIiwgInZlcnNpb24iLCAicmFuZ2UiLCAiaGlsbyIsICJvcHRpb25zIiwgImd0Zm4iLCAibHRlZm4iLCAibHRmbiIsICJjb21wIiwgImVjb21wIiwgImkiLCAiY29tcGFyYXRvcnMiLCAiaGlnaCIsICJsb3ciLCAiY29tcGFyYXRvciIsICJyZXF1aXJlX2d0ciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm91dHNpZGUiLCAiZ3RyIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX2x0ciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm91dHNpZGUiLCAibHRyIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX2ludGVyc2VjdHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSYW5nZSIsICJpbnRlcnNlY3RzIiwgInIxIiwgInIyIiwgIm9wdGlvbnMiLCAicmVxdWlyZV9zaW1wbGlmeSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNhdGlzZmllcyIsICJjb21wYXJlIiwgInZlcnNpb25zIiwgInJhbmdlIiwgIm9wdGlvbnMiLCAic2V0IiwgImZpcnN0IiwgInByZXYiLCAidiIsICJhIiwgImIiLCAidmVyc2lvbiIsICJyYW5nZXMiLCAibWluIiwgIm1heCIsICJzaW1wbGlmaWVkIiwgIm9yaWdpbmFsIiwgInJlcXVpcmVfc3Vic2V0IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAiQ29tcGFyYXRvciIsICJBTlkiLCAic2F0aXNmaWVzIiwgImNvbXBhcmUiLCAic3Vic2V0IiwgInN1YiIsICJkb20iLCAib3B0aW9ucyIsICJzYXdOb25OdWxsIiwgIk9VVEVSIiwgInNpbXBsZVN1YiIsICJzaW1wbGVEb20iLCAiaXNTdWIiLCAic2ltcGxlU3Vic2V0IiwgIm1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2UiLCAibWluaW11bVZlcnNpb24iLCAiZXFTZXQiLCAiZ3QiLCAibHQiLCAiYyIsICJoaWdoZXJHVCIsICJsb3dlckxUIiwgImd0bHRDb21wIiwgImVxIiwgImhpZ2hlciIsICJsb3dlciIsICJoYXNEb21MVCIsICJoYXNEb21HVCIsICJuZWVkRG9tTFRQcmUiLCAibmVlZERvbUdUUHJlIiwgImEiLCAiYiIsICJjb21wIiwgInJlcXVpcmVfc2VtdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaW50ZXJuYWxSZSIsICJjb25zdGFudHMiLCAiU2VtVmVyIiwgImlkZW50aWZpZXJzIiwgInBhcnNlIiwgInZhbGlkIiwgImNsZWFuIiwgImluYyIsICJkaWZmIiwgIm1ham9yIiwgIm1pbm9yIiwgInBhdGNoIiwgInByZXJlbGVhc2UiLCAiY29tcGFyZSIsICJyY29tcGFyZSIsICJjb21wYXJlTG9vc2UiLCAiY29tcGFyZUJ1aWxkIiwgInNvcnQiLCAicnNvcnQiLCAiZ3QiLCAibHQiLCAiZXEiLCAibmVxIiwgImd0ZSIsICJsdGUiLCAiY21wIiwgImNvZXJjZSIsICJ0cnVuY2F0ZSIsICJDb21wYXJhdG9yIiwgIlJhbmdlIiwgInNhdGlzZmllcyIsICJ0b0NvbXBhcmF0b3JzIiwgIm1heFNhdGlzZnlpbmciLCAibWluU2F0aXNmeWluZyIsICJtaW5WZXJzaW9uIiwgInZhbGlkUmFuZ2UiLCAib3V0c2lkZSIsICJndHIiLCAibHRyIiwgImludGVyc2VjdHMiLCAic2ltcGxpZnlSYW5nZSIsICJzdWJzZXQiLCAicHJvY2VzcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgIm9zIiwgInRvQ29tbWFuZFZhbHVlIiwgImlucHV0IiwgInRvQ29tbWFuZFByb3BlcnRpZXMiLCAiYW5ub3RhdGlvblByb3BlcnRpZXMiLCAiaXNzdWVDb21tYW5kIiwgImNvbW1hbmQiLCAicHJvcGVydGllcyIsICJtZXNzYWdlIiwgImNtZCIsICJDb21tYW5kIiwgIkNNRF9TVFJJTkciLCAiQ29tbWFuZCIsICJjb21tYW5kIiwgInByb3BlcnRpZXMiLCAibWVzc2FnZSIsICJjbWRTdHIiLCAiZmlyc3QiLCAia2V5IiwgInZhbCIsICJlc2NhcGVQcm9wZXJ0eSIsICJlc2NhcGVEYXRhIiwgInMiLCAidG9Db21tYW5kVmFsdWUiLCAib3MiLCAiaHR0cCIsICJodHRwcyIsICJnZXRQcm94eVVybCIsICJyZXFVcmwiLCAidXNpbmdTc2wiLCAiY2hlY2tCeXBhc3MiLCAicHJveHlWYXIiLCAiRGVjb2RlZFVSTCIsICJyZXFIb3N0IiwgImlzTG9vcGJhY2tBZGRyZXNzIiwgIm5vUHJveHkiLCAicmVxUG9ydCIsICJ1cHBlclJlcUhvc3RzIiwgInVwcGVyTm9Qcm94eUl0ZW0iLCAieCIsICJob3N0IiwgImhvc3RMb3dlciIsICJ1cmwiLCAiYmFzZSIsICJ0dW5uZWwiLCAiaW1wb3J0X3VuZGljaSIsICJIdHRwQ29kZXMiLCAiSGVhZGVycyIsICJNZWRpYVR5cGVzIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgIkh0dHBDb2RlcyIsICJIdHRwUmVzcG9uc2VSZXRyeUNvZGVzIiwgIlJldHJ5YWJsZUh0dHBWZXJicyIsICJFeHBvbmVudGlhbEJhY2tvZmZDZWlsaW5nIiwgIkV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSIsICJIdHRwQ2xpZW50RXJyb3IiLCAiX0h0dHBDbGllbnRFcnJvciIsICJtZXNzYWdlIiwgInN0YXR1c0NvZGUiLCAiSHR0cENsaWVudFJlc3BvbnNlIiwgInJlc29sdmUiLCAiX19hd2FpdGVyIiwgIm91dHB1dCIsICJjaHVuayIsICJjaHVua3MiLCAiSHR0cENsaWVudCIsICJ1c2VyQWdlbnQiLCAiaGFuZGxlcnMiLCAicmVxdWVzdE9wdGlvbnMiLCAicmVxdWVzdFVybCIsICJhZGRpdGlvbmFsSGVhZGVycyIsICJkYXRhIiwgInZlcmIiLCAic3RyZWFtIiwgInJlcXVlc3RVcmxfMSIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAicmVzIiwgIm9ial8xIiwgIm9iaiIsICJoZWFkZXJzIiwgInBhcnNlZFVybCIsICJpbmZvIiwgIm1heFRyaWVzIiwgIlJldHJ5YWJsZUh0dHBWZXJicyIsICJudW1UcmllcyIsICJyZXNwb25zZSIsICJIdHRwQ29kZXMiLCAiYXV0aGVudGljYXRpb25IYW5kbGVyIiwgImhhbmRsZXIiLCAicmVkaXJlY3RzUmVtYWluaW5nIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgInJlZGlyZWN0VXJsIiwgInBhcnNlZFJlZGlyZWN0VXJsIiwgImhlYWRlciIsICJIdHRwUmVzcG9uc2VSZXRyeUNvZGVzIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImNhbGxiYWNrRm9yUmVzdWx0IiwgImVyciIsICJvblJlc3VsdCIsICJjYWxsYmFja0NhbGxlZCIsICJoYW5kbGVSZXN1bHQiLCAicmVxIiwgIm1zZyIsICJIdHRwQ2xpZW50UmVzcG9uc2UiLCAic29ja2V0IiwgInNvY2siLCAic2VydmVyVXJsIiwgInByb3h5VXJsIiwgImdldFByb3h5VXJsIiwgIm1ldGhvZCIsICJ1c2luZ1NzbCIsICJodHRwcyIsICJodHRwIiwgImRlZmF1bHRQb3J0IiwgImxvd2VyY2FzZUtleXMiLCAiX2RlZmF1bHQiLCAiY2xpZW50SGVhZGVyIiwgImhlYWRlclZhbHVlIiwgImFkZGl0aW9uYWxWYWx1ZSIsICJhZ2VudCIsICJ1c2VQcm94eSIsICJtYXhTb2NrZXRzIiwgImFnZW50T3B0aW9ucyIsICJ0dW5uZWxBZ2VudCIsICJvdmVySHR0cHMiLCAib3B0aW9ucyIsICJwcm94eUFnZW50IiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgInNhbml0aXplZElkIiwgInJldHJ5TnVtYmVyIiwgIkV4cG9uZW50aWFsQmFja29mZkNlaWxpbmciLCAibXMiLCAiRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlIiwgIl9fYXdhaXRlciIsICJzdGF0dXNDb2RlIiwgImRhdGVUaW1lRGVzZXJpYWxpemVyIiwgImtleSIsICJ2YWx1ZSIsICJhIiwgImNvbnRlbnRzIiwgIkh0dHBDbGllbnRFcnJvciIsICJjIiwgImsiLCAiaW1wb3J0X29zIiwgImltcG9ydF9mcyIsICJhY2Nlc3MiLCAiYXBwZW5kRmlsZSIsICJ3cml0ZUZpbGUiLCAiU1VNTUFSWV9FTlZfVkFSIiwgIlN1bW1hcnkiLCAicGF0aEZyb21FbnYiLCAiU1VNTUFSWV9FTlZfVkFSIiwgImFjY2VzcyIsICJ0YWciLCAiY29udGVudCIsICJhdHRycyIsICJodG1sQXR0cnMiLCAia2V5IiwgInZhbHVlIiwgIm9wdGlvbnMiLCAib3ZlcndyaXRlIiwgImZpbGVQYXRoIiwgIndyaXRlRmlsZSIsICJhcHBlbmRGaWxlIiwgInRleHQiLCAiYWRkRU9MIiwgImNvZGUiLCAibGFuZyIsICJlbGVtZW50IiwgIml0ZW1zIiwgIm9yZGVyZWQiLCAibGlzdEl0ZW1zIiwgIml0ZW0iLCAicm93cyIsICJ0YWJsZUJvZHkiLCAicm93IiwgImNlbGxzIiwgImNlbGwiLCAiaGVhZGVyIiwgImRhdGEiLCAiY29sc3BhbiIsICJyb3dzcGFuIiwgImxhYmVsIiwgInNyYyIsICJhbHQiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImxldmVsIiwgImFsbG93ZWRUYWciLCAiY2l0ZSIsICJocmVmIiwgIl9zdW1tYXJ5IiwgImltcG9ydF9vcyIsICJvcyIsICJldmVudHMiLCAiY2hpbGQiLCAicGF0aCIsICJpbXBvcnRfYXNzZXJ0IiwgInBhdGgiLCAiZnMiLCAicGF0aCIsICJjaG1vZCIsICJjb3B5RmlsZSIsICJsc3RhdCIsICJta2RpciIsICJvcGVuIiwgInJlYWRkaXIiLCAicmVuYW1lIiwgInJtIiwgInJtZGlyIiwgInN0YXQiLCAic3ltbGluayIsICJ1bmxpbmsiLCAiSVNfV0lORE9XUyIsICJSRUFET05MWSIsICJleGlzdHMiLCAiZnNQYXRoIiwgInN0YXQiLCAiZXJyIiwgImlzUm9vdGVkIiwgInAiLCAibm9ybWFsaXplU2VwYXJhdG9ycyIsICJJU19XSU5ET1dTIiwgInRyeUdldEV4ZWN1dGFibGVQYXRoIiwgImZpbGVQYXRoIiwgImV4dGVuc2lvbnMiLCAic3RhdHMiLCAic3RhdCIsICJlcnIiLCAidXBwZXJFeHQiLCAidmFsaWRFeHQiLCAiaXNVbml4RXhlY3V0YWJsZSIsICJvcmlnaW5hbEZpbGVQYXRoIiwgImV4dGVuc2lvbiIsICJkaXJlY3RvcnkiLCAidXBwZXJOYW1lIiwgImFjdHVhbE5hbWUiLCAicmVhZGRpciIsICJybVJGIiwgImlucHV0UGF0aCIsICJJU19XSU5ET1dTIiwgInJtIiwgImVyciIsICJta2RpclAiLCAiZnNQYXRoIiwgIm1rZGlyIiwgIndoaWNoIiwgInRvb2wiLCAiY2hlY2siLCAicmVzdWx0IiwgIm1hdGNoZXMiLCAiZmluZEluUGF0aCIsICJleHRlbnNpb25zIiwgImV4dGVuc2lvbiIsICJpc1Jvb3RlZCIsICJmaWxlUGF0aCIsICJ0cnlHZXRFeGVjdXRhYmxlUGF0aCIsICJkaXJlY3RvcmllcyIsICJwIiwgImRpcmVjdG9yeSIsICJpbXBvcnRfdGltZXJzIiwgIklTX1dJTkRPV1MiLCAiVG9vbFJ1bm5lciIsICJ0b29sUGF0aCIsICJhcmdzIiwgIm9wdGlvbnMiLCAibWVzc2FnZSIsICJub1ByZWZpeCIsICJjbWQiLCAiYSIsICJkYXRhIiwgInN0ckJ1ZmZlciIsICJvbkxpbmUiLCAibiIsICJsaW5lIiwgImVyciIsICJhcmdsaW5lIiwgInN0ciIsICJlbmQiLCAidXBwZXJUb29sUGF0aCIsICJhcmciLCAiY21kU3BlY2lhbENoYXJzIiwgIm5lZWRzUXVvdGVzIiwgImNoYXIiLCAieCIsICJyZXZlcnNlIiwgInF1b3RlSGl0IiwgImkiLCAicmVzdWx0IiwgImlzUm9vdGVkIiwgIndoaWNoIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIl9fYXdhaXRlciIsICJvcHRpb25zTm9uTnVsbCIsICJzdGF0ZSIsICJFeGVjU3RhdGUiLCAiZXhpc3RzIiwgImZpbGVOYW1lIiwgImNwIiwgInN0ZGJ1ZmZlciIsICJlcnJidWZmZXIiLCAiY29kZSIsICJlcnJvciIsICJleGl0Q29kZSIsICJhcmdTdHJpbmdUb0FycmF5IiwgImFyZ1N0cmluZyIsICJpblF1b3RlcyIsICJlc2NhcGVkIiwgImFwcGVuZCIsICJjIiwgIl9FeGVjU3RhdGUiLCAiZXhlYyIsICJjb21tYW5kTGluZSIsICJhcmdzIiwgIm9wdGlvbnMiLCAiY29tbWFuZEFyZ3MiLCAiYXJnU3RyaW5nVG9BcnJheSIsICJ0b29sUGF0aCIsICJUb29sUnVubmVyIiwgInBsYXRmb3JtIiwgIm9zIiwgImFyY2giLCAiRXhpdENvZGUiLCAiZ2V0SW5wdXQiLCAibmFtZSIsICJvcHRpb25zIiwgInZhbCIsICJzZXRGYWlsZWQiLCAibWVzc2FnZSIsICJFeGl0Q29kZSIsICJlcnJvciIsICJpc0RlYnVnIiwgImRlYnVnIiwgImlzc3VlQ29tbWFuZCIsICJwcm9wZXJ0aWVzIiwgInRvQ29tbWFuZFByb3BlcnRpZXMiLCAiaW5mbyIsICJtZXNzYWdlIiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiQ29udGV4dCIsICJwYXRoIiwgIl9hIiwgIl9iIiwgIl9jIiwgInBheWxvYWQiLCAib3duZXIiLCAicmVwbyIsICJodHRwQ2xpZW50IiwgImltcG9ydF91bmRpY2kiLCAiZ2V0QXV0aFN0cmluZyIsICJ0b2tlbiIsICJvcHRpb25zIiwgImdldFByb3h5QWdlbnQiLCAiZGVzdGluYXRpb25VcmwiLCAiZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIiLCAiZ2V0UHJveHlGZXRjaCIsICJodHRwRGlzcGF0Y2hlciIsICJ1cmwiLCAib3B0cyIsICJfX2F3YWl0ZXIiLCAiZ2V0QXBpQmFzZVVybCIsICJnZXRVc2VyQWdlbnRXaXRoT3JjaGVzdHJhdGlvbklkIiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgIl9hIiwgInRhZyIsICJnZXRVc2VyQWdlbnQiLCAicmVnaXN0ZXIiLCAic3RhdGUiLCAibmFtZSIsICJtZXRob2QiLCAib3B0aW9ucyIsICJjYWxsYmFjayIsICJyZWdpc3RlcmVkIiwgImFkZEhvb2siLCAic3RhdGUiLCAia2luZCIsICJuYW1lIiwgImhvb2siLCAib3JpZyIsICJtZXRob2QiLCAib3B0aW9ucyIsICJyZXN1bHQiLCAicmVzdWx0XyIsICJlcnJvciIsICJyZW1vdmVIb29rIiwgInN0YXRlIiwgIm5hbWUiLCAibWV0aG9kIiwgImluZGV4IiwgInJlZ2lzdGVyZWQiLCAiYmluZCIsICJiaW5kYWJsZSIsICJiaW5kQXBpIiwgImhvb2siLCAic3RhdGUiLCAibmFtZSIsICJyZW1vdmVIb29rUmVmIiwgInJlbW92ZUhvb2siLCAia2luZCIsICJhcmdzIiwgImFkZEhvb2siLCAiU2luZ3VsYXIiLCAic2luZ3VsYXJIb29rTmFtZSIsICJzaW5ndWxhckhvb2tTdGF0ZSIsICJzaW5ndWxhckhvb2siLCAicmVnaXN0ZXIiLCAiQ29sbGVjdGlvbiIsICJiZWZvcmVfYWZ0ZXJfaG9va19kZWZhdWx0IiwgIlZFUlNJT04iLCAidXNlckFnZW50IiwgImdldFVzZXJBZ2VudCIsICJERUZBVUxUUyIsICJsb3dlcmNhc2VLZXlzIiwgIm9iamVjdCIsICJuZXdPYmoiLCAia2V5IiwgImlzUGxhaW5PYmplY3QiLCAidmFsdWUiLCAicHJvdG8iLCAiQ3RvciIsICJtZXJnZURlZXAiLCAiZGVmYXVsdHMiLCAib3B0aW9ucyIsICJyZXN1bHQiLCAicmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyIsICJvYmoiLCAibWVyZ2UiLCAicm91dGUiLCAibWV0aG9kIiwgInVybCIsICJtZXJnZWRPcHRpb25zIiwgInByZXZpZXciLCAiYWRkUXVlcnlQYXJhbWV0ZXJzIiwgInBhcmFtZXRlcnMiLCAic2VwYXJhdG9yIiwgIm5hbWVzIiwgIm5hbWUiLCAidXJsVmFyaWFibGVSZWdleCIsICJyZW1vdmVOb25DaGFycyIsICJ2YXJpYWJsZU5hbWUiLCAiZXh0cmFjdFVybFZhcmlhYmxlTmFtZXMiLCAibWF0Y2hlcyIsICJhIiwgImIiLCAib21pdCIsICJrZXlzVG9PbWl0IiwgImVuY29kZVJlc2VydmVkIiwgInN0ciIsICJwYXJ0IiwgImVuY29kZVVucmVzZXJ2ZWQiLCAiYyIsICJlbmNvZGVWYWx1ZSIsICJvcGVyYXRvciIsICJpc0RlZmluZWQiLCAiaXNLZXlPcGVyYXRvciIsICJnZXRWYWx1ZXMiLCAiY29udGV4dCIsICJtb2RpZmllciIsICJ2YWx1ZTIiLCAiayIsICJ0bXAiLCAicGFyc2VVcmwiLCAidGVtcGxhdGUiLCAiZXhwYW5kIiwgIm9wZXJhdG9ycyIsICJfIiwgImV4cHJlc3Npb24iLCAibGl0ZXJhbCIsICJ2YWx1ZXMiLCAidmFyaWFibGUiLCAicGFyc2UiLCAiaGVhZGVycyIsICJib2R5IiwgInVybFZhcmlhYmxlTmFtZXMiLCAib21pdHRlZFBhcmFtZXRlcnMiLCAib3B0aW9uIiwgInJlbWFpbmluZ1BhcmFtZXRlcnMiLCAiZm9ybWF0IiwgInByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciIsICJlbmRwb2ludFdpdGhEZWZhdWx0cyIsICJ3aXRoRGVmYXVsdHMiLCAib2xkRGVmYXVsdHMiLCAibmV3RGVmYXVsdHMiLCAiREVGQVVMVFMyIiwgImVuZHBvaW50MiIsICJlbmRwb2ludCIsICJpbXBvcnRfY29udGVudF90eXBlIiwgImludFJlZ2V4IiwgIm5vaXNlVmFsdWUiLCAib3JpZ2luYWxTdHJpbmdpZnkiLCAib3JpZ2luYWxQYXJzZSIsICJjdXN0b21Gb3JtYXQiLCAiYmlnSW50c1N0cmluZ2lmeSIsICJub2lzZVN0cmluZ2lmeSIsICJpc1Vuc3RyaW5naWZpYWJsZSIsICJ2YWwiLCAiaXNSYXdKU09OIiwgInN0cmluZ2lmeUl0ZXJhdGl2ZWx5IiwgInJvb3RWYWx1ZSIsICJyZXBsYWNlciIsICJzcGFjZVBhcmFtIiwgInNwYWNlIiwgImlzRnVuY3Rpb25SZXBsYWNlciIsICJwcm9wZXJ0eUxpc3QiLCAicHJlcGFyZVZhbCIsICJwYXJlbnQiLCAia2V5IiwgInJvb3RQcm9jZXNzZWQiLCAiaXNSb290UHJpbWl0aXZlIiwgImlzUm9vdE5hdGl2ZVJhd0pTT04iLCAiY2h1bmtzIiwgImxldmVsIiwgInN0YWNrIiwgInZpc2l0ZWQiLCAibm9kZSIsICJpc0RvbmUiLCAiY2hpbGRSYXciLCAiY2hpbGRWYWwiLCAiaXNDb21wbGV4T2JqZWN0IiwgImlzTmF0aXZlUmF3IiwgImsiLCAiSlNPTlN0cmluZ2lmeSIsICJ2YWx1ZSIsICJlcnJvciIsICJjb252ZXJ0ZWRKU09OIiwgImZlYXR1cmVDYWNoZSIsICJpc0NvbnRleHRTb3VyY2VTdXBwb3J0ZWQiLCAicGFyc2VGaW5nZXJwcmludCIsICJyZXN1bHQiLCAiXyIsICJfXyIsICJjb250ZXh0IiwgImNvbnZlcnRNYXJrZWRCaWdJbnRzUmV2aXZlciIsICJ1c2VyUmV2aXZlciIsICJKU09OUGFyc2VWMiIsICJ0ZXh0IiwgInJldml2ZXIiLCAiaXNOdW1iZXIiLCAiaXNPdXRPZkJvdW5kcyIsICJpc0JpZ051bWJlciIsICJpc0ludCIsICJNQVhfSU5UIiwgIk1BWF9ESUdJVFMiLCAic3RyaW5nc09yTGFyZ2VOdW1iZXJzIiwgIm5vaXNlVmFsdWVXaXRoUXVvdGVzIiwgImFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5IiwgInBhcnNlZCIsICJyb290SG9sZGVyIiwgImtleXMiLCAiaSIsICJzZXJpYWxpemVCaWdJbnRzIiwgIm1hdGNoIiwgImRpZ2l0cyIsICJmcmFjdGlvbmFsIiwgImV4cG9uZW50aWFsIiwgImlzU3RyaW5nIiwgImhhc0ZyYWN0aW9uYWxPckV4cG9uZW50aWFsIiwgImlzTGVzc1RoYW5NYXhTYWZlSW50IiwgIkpTT05QYXJzZSIsICJzZXJpYWxpemVkRGF0YSIsICJSZXF1ZXN0RXJyb3IiLCAibWVzc2FnZSIsICJzdGF0dXNDb2RlIiwgIm9wdGlvbnMiLCAicmVxdWVzdENvcHkiLCAiVkVSU0lPTiIsICJkZWZhdWx0c19kZWZhdWx0IiwgImdldFVzZXJBZ2VudCIsICJpc1BsYWluT2JqZWN0IiwgInZhbHVlIiwgInByb3RvIiwgIkN0b3IiLCAibm9vcCIsICJmZXRjaFdyYXBwZXIiLCAicmVxdWVzdE9wdGlvbnMiLCAiZmV0Y2giLCAibG9nIiwgInBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSIsICJib2R5IiwgIkpTT05TdHJpbmdpZnkiLCAicmVxdWVzdEhlYWRlcnMiLCAibmFtZSIsICJmZXRjaFJlc3BvbnNlIiwgImVycm9yIiwgIm1lc3NhZ2UiLCAicmVxdWVzdEVycm9yIiwgIlJlcXVlc3RFcnJvciIsICJzdGF0dXMiLCAidXJsIiwgInJlc3BvbnNlSGVhZGVycyIsICJrZXkiLCAib2N0b2tpdFJlc3BvbnNlIiwgIm1hdGNoZXMiLCAiZGVwcmVjYXRpb25MaW5rIiwgImdldFJlc3BvbnNlRGF0YSIsICJ0b0Vycm9yTWVzc2FnZSIsICJyZXNwb25zZSIsICJjb250ZW50VHlwZSIsICJtaW1ldHlwZSIsICJpc0pTT05SZXNwb25zZSIsICJ0ZXh0IiwgIkpTT05QYXJzZSIsICJkYXRhIiwgIm9iamVjdERhdGEiLCAic3VmZml4IiwgInYiLCAid2l0aERlZmF1bHRzIiwgIm9sZEVuZHBvaW50IiwgIm5ld0RlZmF1bHRzIiwgImVuZHBvaW50MiIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgImVuZHBvaW50T3B0aW9ucyIsICJyZXF1ZXN0MiIsICJyb3V0ZTIiLCAicGFyYW1ldGVyczIiLCAicmVxdWVzdCIsICJlbmRwb2ludCIsICJWRVJTSU9OIiwgIl9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyIsICJkYXRhIiwgIkdyYXBocWxSZXNwb25zZUVycm9yIiwgInJlcXVlc3QyIiwgImhlYWRlcnMiLCAicmVzcG9uc2UiLCAiTk9OX1ZBUklBQkxFX09QVElPTlMiLCAiRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMiLCAiR0hFU19WM19TVUZGSVhfUkVHRVgiLCAiZ3JhcGhxbCIsICJxdWVyeSIsICJvcHRpb25zIiwgImtleSIsICJwYXJzZWRPcHRpb25zIiwgInJlcXVlc3RPcHRpb25zIiwgInJlc3VsdCIsICJiYXNlVXJsIiwgIndpdGhEZWZhdWx0cyIsICJuZXdEZWZhdWx0cyIsICJuZXdSZXF1ZXN0IiwgImdyYXBocWwyIiwgInJlcXVlc3QiLCAiZ2V0VXNlckFnZW50IiwgIndpdGhDdXN0b21SZXF1ZXN0IiwgImN1c3RvbVJlcXVlc3QiLCAiYjY0dXJsIiwgInNlcCIsICJqd3RSRSIsICJpc0pXVCIsICJhdXRoIiwgInRva2VuIiwgImlzQXBwIiwgImlzSW5zdGFsbGF0aW9uIiwgImlzVXNlclRvU2VydmVyIiwgIndpdGhBdXRob3JpemF0aW9uUHJlZml4IiwgImhvb2siLCAicmVxdWVzdCIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgImVuZHBvaW50IiwgImNyZWF0ZVRva2VuQXV0aCIsICJWRVJTSU9OIiwgIm5vb3AiLCAiY29uc29sZVdhcm4iLCAiY29uc29sZUVycm9yIiwgImNyZWF0ZUxvZ2dlciIsICJsb2dnZXIiLCAidXNlckFnZW50VHJhaWwiLCAiVkVSU0lPTiIsICJnZXRVc2VyQWdlbnQiLCAiT2N0b2tpdCIsICJkZWZhdWx0cyIsICJhcmdzIiwgIm9wdGlvbnMiLCAibmV3UGx1Z2lucyIsICJjdXJyZW50UGx1Z2lucyIsICJwbHVnaW4iLCAiaG9vayIsICJiZWZvcmVfYWZ0ZXJfaG9va19kZWZhdWx0IiwgInJlcXVlc3REZWZhdWx0cyIsICJyZXF1ZXN0IiwgIndpdGhDdXN0b21SZXF1ZXN0IiwgImF1dGhTdHJhdGVneSIsICJvdGhlck9wdGlvbnMiLCAiYXV0aCIsICJjcmVhdGVUb2tlbkF1dGgiLCAiY2xhc3NDb25zdHJ1Y3RvciIsICJpIiwgIlZFUlNJT04iLCAiRW5kcG9pbnRzIiwgImVuZHBvaW50c19kZWZhdWx0IiwgImVuZHBvaW50TWV0aG9kc01hcCIsICJzY29wZSIsICJlbmRwb2ludHMiLCAiZW5kcG9pbnRzX2RlZmF1bHQiLCAibWV0aG9kTmFtZSIsICJlbmRwb2ludCIsICJyb3V0ZSIsICJkZWZhdWx0cyIsICJkZWNvcmF0aW9ucyIsICJtZXRob2QiLCAidXJsIiwgImVuZHBvaW50RGVmYXVsdHMiLCAiaGFuZGxlciIsICJ0YXJnZXQiLCAiZGVzY3JpcHRvciIsICJ2YWx1ZSIsICJvY3Rva2l0IiwgImNhY2hlIiwgImRlY29yYXRlIiwgImVuZHBvaW50c1RvTWV0aG9kcyIsICJuZXdNZXRob2RzIiwgInJlcXVlc3RXaXRoRGVmYXVsdHMiLCAid2l0aERlY29yYXRpb25zIiwgImFyZ3MiLCAib3B0aW9ucyIsICJuZXdTY29wZSIsICJuZXdNZXRob2ROYW1lIiwgIm5hbWUiLCAiYWxpYXMiLCAicmVzdEVuZHBvaW50TWV0aG9kcyIsICJvY3Rva2l0IiwgImVuZHBvaW50c1RvTWV0aG9kcyIsICJWRVJTSU9OIiwgImxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMiLCAiYXBpIiwgIlZFUlNJT04iLCAibm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlIiwgInJlc3BvbnNlIiwgImluY29tcGxldGVSZXN1bHRzIiwgInJlcG9zaXRvcnlTZWxlY3Rpb24iLCAidG90YWxDb3VudCIsICJ0b3RhbENvbW1pdHMiLCAibmFtZXNwYWNlS2V5IiwgImRhdGEiLCAiaXRlcmF0b3IiLCAib2N0b2tpdCIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgIm9wdGlvbnMiLCAicmVxdWVzdE1ldGhvZCIsICJtZXRob2QiLCAiaGVhZGVycyIsICJ1cmwiLCAibm9ybWFsaXplZFJlc3BvbnNlIiwgInBhcnNlZFVybCIsICJwYXJhbXMiLCAicGFnZSIsICJwZXJfcGFnZSIsICJlcnJvciIsICJwYWdpbmF0ZSIsICJtYXBGbiIsICJnYXRoZXIiLCAicmVzdWx0cyIsICJpdGVyYXRvcjIiLCAicmVzdWx0IiwgImVhcmx5RXhpdCIsICJkb25lIiwgImNvbXBvc2VQYWdpbmF0ZVJlc3QiLCAicGFnaW5hdGVSZXN0IiwgIm9jdG9raXQiLCAicGFnaW5hdGUiLCAiaXRlcmF0b3IiLCAiVkVSU0lPTiIsICJjb250ZXh0IiwgIkNvbnRleHQiLCAiYmFzZVVybCIsICJnZXRBcGlCYXNlVXJsIiwgImRlZmF1bHRzIiwgImdldFByb3h5QWdlbnQiLCAiZ2V0UHJveHlGZXRjaCIsICJHaXRIdWIiLCAiT2N0b2tpdCIsICJyZXN0RW5kcG9pbnRNZXRob2RzIiwgInBhZ2luYXRlUmVzdCIsICJnZXRPY3Rva2l0T3B0aW9ucyIsICJ0b2tlbiIsICJvcHRpb25zIiwgIm9wdHMiLCAiYXV0aCIsICJnZXRBdXRoU3RyaW5nIiwgInVzZXJBZ2VudCIsICJnZXRVc2VyQWdlbnRXaXRoT3JjaGVzdHJhdGlvbklkIiwgImNvbnRleHQiLCAiQ29udGV4dCIsICJnZXRPY3Rva2l0IiwgInRva2VuIiwgIm9wdGlvbnMiLCAiYWRkaXRpb25hbFBsdWdpbnMiLCAiR2l0SHViV2l0aFBsdWdpbnMiLCAiR2l0SHViIiwgImdldE9jdG9raXRPcHRpb25zIiwgImNyeXB0byIsICJmcyIsICJzZW12ZXIiLCAicGF0aCIsICJzZW12ZXIiLCAic3RyZWFtIiwgInV0aWwiLCAiaW1wb3J0X2Fzc2VydCIsICJSZXRyeUhlbHBlciIsICJtYXhBdHRlbXB0cyIsICJtaW5TZWNvbmRzIiwgIm1heFNlY29uZHMiLCAiYWN0aW9uIiwgImlzUmV0cnlhYmxlIiwgImF0dGVtcHQiLCAiZXJyIiwgImluZm8iLCAic2Vjb25kcyIsICJyZXNvbHZlIiwgIkhUVFBFcnJvciIsICJodHRwU3RhdHVzQ29kZSIsICJJU19XSU5ET1dTIiwgIklTX01BQyIsICJ1c2VyQWdlbnQiLCAiZG93bmxvYWRUb29sIiwgInVybCIsICJkZXN0IiwgImF1dGgiLCAiaGVhZGVycyIsICJfZ2V0VGVtcERpcmVjdG9yeSIsICJta2RpclAiLCAiZGVidWciLCAibWF4QXR0ZW1wdHMiLCAibWluU2Vjb25kcyIsICJfZ2V0R2xvYmFsIiwgIm1heFNlY29uZHMiLCAiUmV0cnlIZWxwZXIiLCAiX19hd2FpdGVyIiwgImRvd25sb2FkVG9vbEF0dGVtcHQiLCAiZXJyIiwgImh0dHAiLCAiSHR0cENsaWVudCIsICJyZXNwb25zZSIsICJwaXBlbGluZSIsICJyZWFkU3RyZWFtIiwgInN1Y2NlZWRlZCIsICJybVJGIiwgImV4dHJhY3RUYXIiLCAiZmlsZV8xIiwgImRlc3RfMSIsICJmaWxlIiwgImRlc3QiLCAiZmxhZ3MiLCAiX2NyZWF0ZUV4dHJhY3RGb2xkZXIiLCAiZGVidWciLCAidmVyc2lvbk91dHB1dCIsICJleGVjIiwgImRhdGEiLCAiaXNHbnVUYXIiLCAiYXJncyIsICJpc0RlYnVnIiwgImRlc3RBcmciLCAiZmlsZUFyZyIsICJJU19XSU5ET1dTIiwgImV4dHJhY3RaaXAiLCAiZmlsZSIsICJkZXN0IiwgIl9jcmVhdGVFeHRyYWN0Rm9sZGVyIiwgIklTX1dJTkRPV1MiLCAiZXh0cmFjdFppcFdpbiIsICJleHRyYWN0WmlwTml4IiwgImVzY2FwZWRGaWxlIiwgImVzY2FwZWREZXN0IiwgInB3c2hQYXRoIiwgIndoaWNoIiwgImFyZ3MiLCAiZGVidWciLCAiZXhlYyIsICJwb3dlcnNoZWxsUGF0aCIsICJ1bnppcFBhdGgiLCAiaXNEZWJ1ZyIsICJfY3JlYXRlRXh0cmFjdEZvbGRlciIsICJkZXN0IiwgIl9nZXRUZW1wRGlyZWN0b3J5IiwgIm1rZGlyUCIsICJfZ2V0VGVtcERpcmVjdG9yeSIsICJ0ZW1wRGlyZWN0b3J5IiwgIl9nZXRHbG9iYWwiLCAia2V5IiwgImRlZmF1bHRWYWx1ZSIsICJ2YWx1ZSIsICJyZWxlYXNlRnJhZ21lbnQiLCAib2N0b2tpdCIsICJnZXRPY3Rva2l0IiwgInZlcnNpb24iLCAiZ2V0SW5wdXQiLCAiZ3JhcGhxbFJlcXVlc3QiLCAicmVsZWFzZSIsICJyZWxlYXNlQXNzZXRzIiwgImFzc2V0IiwgIm5hbWUiLCAic2V0RmFpbGVkIiwgInpiQXJjaGl2ZVBhdGgiLCAiZG93bmxvYWRUb29sIiwgInpiRXh0cmFjdGVkRm9sZGVyUGF0aCIsICJleHRyYWN0WmlwIiwgImV4dHJhY3RUYXIiLCAiZXhlYyIsICJwYXRoIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21haW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDI2IFRoZSB6YiBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4gKi9cblxuY29uc29sZS5sb2coJ0hlbGxvLCBXb3JsZCEnKTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQU1BLFFBQVEsSUFBSSxlQUFlIiwKICAibmFtZXMiOiBbXQp9Cg== diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index 6fd1716..247b3a3 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -4,98 +4,4 @@ * SPDX-License-Identifier: MIT */ -import * as process from 'node:process'; -import path from 'node:path'; - -import * as core from '@actions/core'; -import { exec } from '@actions/exec'; -import { getOctokit } from '@actions/github'; -import { downloadTool, extractTar, extractZip } from '@actions/tool-cache'; - -interface Release { - tagName: string; - releaseAssets: ReleaseAssetConnection; -} - -interface ReleaseAssetConnection { - nodes: ReleaseAsset[]; -} - -interface ReleaseAsset { - name: string; - downloadUrl: string; -} - -const releaseFragment = - ` - fragment releaseFields on Release { - tagName - releaseAssets(first: 50) { - nodes { - name - downloadUrl - } - } - } - `; - -(async () => { - const octokit = getOctokit(''); - - const version = core.getInput('zb-version'); - const graphqlRequest = - version ? - { - query: - ` - query releaseAssetsForVersion($tagName: String!) { - repository(owner: "256lights", repo: "zb") { - release(tagName: $tagName) { - ...releaseFields - } - } - } - - ${releaseFragment} - `, - tagName: 'v' + version, - } : - { - query: - ` - query releaseAssetsForLatest { - repository(owner: "256lights", repo: "zb") { - release: latestRelease { - ...releaseFields - } - } - } - - ${releaseFragment} - `, - }; - const graphqlResponse = await octokit.graphql<{ - repository: { - release: Release | null; - } - }>(graphqlRequest); - const release = graphqlResponse.repository.release; - const releaseAssets = release?.releaseAssets?.nodes || []; - - let asset: ReleaseAsset | undefined; - if (process.platform === 'darwin' && process.arch === 'arm64') { - asset = releaseAssets.find(({ name }) => name.includes('aarch64-apple-macos')) - } else if (process.platform === 'linux' && process.arch === 'x64') { - asset = releaseAssets.find(({ name }) => name.includes('x86_64-unknown-linux')) - } - if (!asset) { - core.setFailed(`No download found for ${process.arch}-${process.platform} version ${release?.tagName || version}`); - return; - } - - const zbArchivePath = await downloadTool(asset.downloadUrl); - const zbExtractedFolderPath = asset.downloadUrl.endsWith('.zip') ? - await extractZip(zbArchivePath) : - await extractTar(zbArchivePath); - await exec(path.join(zbExtractedFolderPath, 'install'), ['--single-user', '--no-systemd', '--no-launchd']); -})(); +console.log('Hello, World!'); From 3891fbcb7aa7e2fdc02fd5a93beca66a8479cb4b Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 16:55:37 -0700 Subject: [PATCH 11/23] Tweak tsconfig.json --- .github/actions/setup-zb/dist/main.js | 4 ++-- .github/actions/setup-zb/tsconfig.json | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index e91e7e9..f41bbed 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -1,7 +1,7 @@ -console.log("Hello, World!"); +"use strict";console.log("Hello, World!"); /** * @license * Copyright 2026 The zb Authors * SPDX-License-Identifier: MIT */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21haW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDI2IFRoZSB6YiBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4gKi9cblxuY29uc29sZS5sb2coJ0hlbGxvLCBXb3JsZCEnKTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQU1BLFFBQVEsSUFBSSxlQUFlIiwKICAibmFtZXMiOiBbXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21haW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDI2IFRoZSB6YiBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4gKi9cblxuY29uc29sZS5sb2coJ0hlbGxvLCBXb3JsZCEnKTtcbiJdLAogICJtYXBwaW5ncyI6ICJhQU1BLFFBQVEsSUFBSSxlQUFlIiwKICAibmFtZXMiOiBbXQp9Cg== diff --git a/.github/actions/setup-zb/tsconfig.json b/.github/actions/setup-zb/tsconfig.json index a45d46b..4ca9a3c 100644 --- a/.github/actions/setup-zb/tsconfig.json +++ b/.github/actions/setup-zb/tsconfig.json @@ -2,5 +2,11 @@ "include": [ "src/**/*.ts" ], - "noEmit": true + "compilerOptions": { + "noEmit": true, + "module": "commonjs", + "moduleResolution": "node", + "strict": true, + "noImplicitAny": true + } } From d8956d2dd5a23be21405e6d73e498ca87a3642a8 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:00:08 -0700 Subject: [PATCH 12/23] Restore logic --- .github/actions/setup-zb/dist/main.js | 106 ++++++++++++++++++++++++- .github/actions/setup-zb/src/main.ts | 96 +++++++++++++++++++++- .github/actions/setup-zb/tsconfig.json | 4 +- zb-stdlib.code-workspace | 4 + 4 files changed, 205 insertions(+), 5 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index f41bbed..85dbe02 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -1,7 +1,109 @@ -"use strict";console.log("Hello, World!"); +"use strict";var Uy=Object.create;var bu=Object.defineProperty;var Gy=Object.getOwnPropertyDescriptor;var Ly=Object.getOwnPropertyNames;var My=Object.getPrototypeOf,vy=Object.prototype.hasOwnProperty;var B=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var xy=(t,e,r,A)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ly(e))!vy.call(t,s)&&s!==r&&bu(t,s,{get:()=>e[s],enumerable:!(A=Gy(e,s))||A.enumerable});return t};var W=(t,e,r)=>(r=t!=null?Uy(My(t)):{},xy(e||!t||!t.__esModule?bu(r,"default",{value:t,enumerable:!0}):r,t));var Lu=B(zr=>{"use strict";var aJ=require("net"),Hy=require("tls"),Wi=require("http"),Nu=require("https"),Vy=require("events"),cJ=require("assert"),qy=require("util");zr.httpOverHttp=Wy;zr.httpsOverHttp=zy;zr.httpOverHttps=Zy;zr.httpsOverHttps=jy;function Wy(t){var e=new yt(t);return e.request=Wi.request,e}function zy(t){var e=new yt(t);return e.request=Wi.request,e.createSocket=Uu,e.defaultPort=443,e}function Zy(t){var e=new yt(t);return e.request=Nu.request,e}function jy(t){var e=new yt(t);return e.request=Nu.request,e.createSocket=Uu,e.defaultPort=443,e}function yt(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||Wi.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(A,s,o,n){for(var i=Gu(s,o,n),a=0,c=e.requests.length;a=this.maxSockets){o.requests.push(n);return}o.createSocket(n,function(i){i.on("free",a),i.on("close",c),i.on("agentRemove",c),e.onSocket(i);function a(){o.emit("free",i,n)}function c(g){o.removeSocket(i),i.removeListener("free",a),i.removeListener("close",c),i.removeListener("agentRemove",c)}})};yt.prototype.createSocket=function(e,r){var A=this,s={};A.sockets.push(s);var o=zi({},A.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(o.localAddress=e.localAddress),o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")),Jt("making CONNECT request");var n=A.request(o);n.useChunkedEncodingByDefault=!1,n.once("response",i),n.once("upgrade",a),n.once("connect",c),n.once("error",g),n.end();function i(l){l.upgrade=!0}function a(l,u,E){process.nextTick(function(){c(l,u,E)})}function c(l,u,E){if(n.removeAllListeners(),u.removeAllListeners(),l.statusCode!==200){Jt("tunneling socket could not be established, statusCode=%d",l.statusCode),u.destroy();var h=new Error("tunneling socket could not be established, statusCode="+l.statusCode);h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}if(E.length>0){Jt("got illegal response body from proxy"),u.destroy();var h=new Error("got illegal response body from proxy");h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}return Jt("tunneling connection has established"),A.sockets[A.sockets.indexOf(s)]=u,r(u)}function g(l){n.removeAllListeners(),Jt(`tunneling socket could not be established, cause=%s +`,l.message,l.stack);var u=new Error("tunneling socket could not be established, cause="+l.message);u.code="ECONNRESET",e.request.emit("error",u),A.removeSocket(s)}};yt.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var A=this.requests.shift();A&&this.createSocket(A,function(s){A.request.onSocket(s)})}};function Uu(t,e){var r=this;yt.prototype.createSocket.call(r,t,function(A){var s=t.request.getHeader("host"),o=zi({},r.options,{socket:A,servername:s?s.replace(/:.*$/,""):t.host}),n=Hy.connect(0,o);r.sockets[r.sockets.indexOf(A)]=n,e(n)})}function Gu(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function zi(t){for(var e=1,r=arguments.length;e{Mu.exports=Lu()});var $=B((uJ,vu)=>{vu.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}});var Y=B((EJ,aE)=>{"use strict";var xu=Symbol.for("undici.error.UND_ERR"),ee=class extends Error{constructor(e){super(e),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&e[xu]===!0}[xu]=!0},Ou=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),ji=class extends ee{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ou]===!0}[Ou]=!0},Yu=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),Ki=class extends ee{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Yu]===!0}[Yu]=!0},_u=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Xi=class extends ee{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&e[_u]===!0}[_u]=!0},Ju=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),$i=class extends ee{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ju]===!0}[Ju]=!0},Pu=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),ea=class extends ee{constructor(e,r,A,s){super(e),this.name="ResponseStatusCodeError",this.message=e||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=s,this.status=r,this.statusCode=r,this.headers=A}static[Symbol.hasInstance](e){return e&&e[Pu]===!0}[Pu]=!0},Hu=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),ta=class extends ee{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&e[Hu]===!0}[Hu]=!0},Vu=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),ra=class extends ee{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&e[Vu]===!0}[Vu]=!0},qu=Symbol.for("undici.error.UND_ERR_ABORT"),Eo=class extends ee{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&e[qu]===!0}[qu]=!0},Wu=Symbol.for("undici.error.UND_ERR_ABORTED"),Aa=class extends Eo{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&e[Wu]===!0}[Wu]=!0},zu=Symbol.for("undici.error.UND_ERR_INFO"),sa=class extends ee{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&e[zu]===!0}[zu]=!0},Zu=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),oa=class extends ee{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[Zu]===!0}[Zu]=!0},ju=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),na=class extends ee{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[ju]===!0}[ju]=!0},Ku=Symbol.for("undici.error.UND_ERR_DESTROYED"),ia=class extends ee{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&e[Ku]===!0}[Ku]=!0},Xu=Symbol.for("undici.error.UND_ERR_CLOSED"),aa=class extends ee{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&e[Xu]===!0}[Xu]=!0},$u=Symbol.for("undici.error.UND_ERR_SOCKET"),ca=class extends ee{constructor(e,r){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=r}static[Symbol.hasInstance](e){return e&&e[$u]===!0}[$u]=!0},eE=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),ga=class extends ee{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&e[eE]===!0}[eE]=!0},tE=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),la=class extends ee{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&e[tE]===!0}[tE]=!0},rE=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),ua=class extends Error{constructor(e,r,A){super(e),this.name="HTTPParserError",this.code=r?`HPE_${r}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&e[rE]===!0}[rE]=!0},AE=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),Ea=class extends ee{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&e[AE]===!0}[AE]=!0},sE=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),ha=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[sE]===!0}[sE]=!0},oE=Symbol.for("undici.error.UND_ERR_RESPONSE"),Qa=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[oE]===!0}[oE]=!0},nE=Symbol.for("undici.error.UND_ERR_PRX_TLS"),Ba=class extends ee{constructor(e,r,A){super(r,{cause:e,...A??{}}),this.name="SecureProxyConnectionError",this.message=r||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&e[nE]===!0}[nE]=!0},iE=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),Ia=class extends ee{constructor(e){super(e),this.name="MessageSizeExceededError",this.message=e||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](e){return e&&e[iE]===!0}get[iE](){return!0}};aE.exports={AbortError:Eo,HTTPParserError:ua,UndiciError:ee,HeadersTimeoutError:Ki,HeadersOverflowError:Xi,BodyTimeoutError:$i,RequestContentLengthMismatchError:oa,ConnectTimeoutError:ji,ResponseStatusCodeError:ea,InvalidArgumentError:ta,InvalidReturnValueError:ra,RequestAbortedError:Aa,ClientDestroyedError:ia,ClientClosedError:aa,InformationalError:sa,SocketError:ca,NotSupportedError:ga,ResponseContentLengthMismatchError:na,BalancedPoolMissingUpstreamError:la,ResponseExceededMaxSizeError:Ea,RequestRetryError:ha,ResponseError:Qa,SecureProxyConnectionError:Ba,MessageSizeExceededError:Ia}});var Qo=B((hJ,cE)=>{"use strict";var ho={},Ca=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let t=0;t{"use strict";var{wellknownHeaderNames:gE,headerNameLowerCasedRecord:Ky}=Qo(),da=class t{value=null;left=null;middle=null;right=null;code;constructor(e,r,A){if(A===void 0||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new t(e,r,A):this.value=r}add(e,r){let A=e.length;if(A===0)throw new TypeError("Unreachable");let s=0,o=this;for(;;){let n=e.charCodeAt(s);if(n>127)throw new TypeError("key must be ascii string");if(o.code===n)if(A===++s){o.value=r;break}else if(o.middle!==null)o=o.middle;else{o.middle=new t(e,r,s);break}else if(o.code=65&&(o|=32);s!==null;){if(o===s.code){if(r===++A)return s;s=s.middle;break}s=s.code{"use strict";var KA=require("node:assert"),{kDestroyed:QE,kBodyUsed:Zr,kListeners:fa,kBody:hE}=$(),{IncomingMessage:Xy}=require("node:http"),fo=require("node:stream"),$y=require("node:net"),{Blob:eR}=require("node:buffer"),tR=require("node:util"),{stringify:rR}=require("node:querystring"),{EventEmitter:AR}=require("node:events"),{InvalidArgumentError:Ee}=Y(),{headerNameLowerCasedRecord:sR}=Qo(),{tree:BE}=EE(),[oR,nR]=process.versions.node.split(".").map(t=>Number(t)),Co=class{constructor(e){this[hE]=e,this[Zr]=!1}async*[Symbol.asyncIterator](){KA(!this[Zr],"disturbed"),this[Zr]=!0,yield*this[hE]}};function iR(t){return po(t)?(pE(t)===0&&t.on("data",function(){KA(!1)}),typeof t.readableDidRead!="boolean"&&(t[Zr]=!1,AR.prototype.on.call(t,"data",function(){this[Zr]=!0})),t):t&&typeof t.pipeTo=="function"?new Co(t):t&&typeof t!="string"&&!ArrayBuffer.isView(t)&&fE(t)?new Co(t):t}function aR(){}function po(t){return t&&typeof t=="object"&&typeof t.pipe=="function"&&typeof t.on=="function"}function IE(t){if(t===null)return!1;if(t instanceof eR)return!0;if(typeof t!="object")return!1;{let e=t[Symbol.toStringTag];return(e==="Blob"||e==="File")&&("stream"in t&&typeof t.stream=="function"||"arrayBuffer"in t&&typeof t.arrayBuffer=="function")}}function cR(t,e){if(t.includes("?")||t.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=rR(e);return r&&(t+="?"+r),t}function CE(t){let e=parseInt(t,10);return e===Number(t)&&e>=0&&e<=65535}function Io(t){return t!=null&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&(t[4]===":"||t[4]==="s"&&t[5]===":")}function dE(t){if(typeof t=="string"){if(t=new URL(t),!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}if(!t||typeof t!="object")throw new Ee("Invalid URL: The URL argument must be a non-null object.");if(!(t instanceof URL)){if(t.port!=null&&t.port!==""&&CE(t.port)===!1)throw new Ee("Invalid URL: port must be a valid integer or a string representation of an integer.");if(t.path!=null&&typeof t.path!="string")throw new Ee("Invalid URL path: the path must be a string or null/undefined.");if(t.pathname!=null&&typeof t.pathname!="string")throw new Ee("Invalid URL pathname: the pathname must be a string or null/undefined.");if(t.hostname!=null&&typeof t.hostname!="string")throw new Ee("Invalid URL hostname: the hostname must be a string or null/undefined.");if(t.origin!=null&&typeof t.origin!="string")throw new Ee("Invalid URL origin: the origin must be a string or null/undefined.");if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");let e=t.port!=null?t.port:t.protocol==="https:"?443:80,r=t.origin!=null?t.origin:`${t.protocol||""}//${t.hostname||""}:${e}`,A=t.path!=null?t.path:`${t.pathname||""}${t.search||""}`;return r[r.length-1]==="/"&&(r=r.slice(0,r.length-1)),A&&A[0]!=="/"&&(A=`/${A}`),new URL(`${r}${A}`)}if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}function gR(t){if(t=dE(t),t.pathname!=="/"||t.search||t.hash)throw new Ee("invalid url");return t}function lR(t){if(t[0]==="["){let r=t.indexOf("]");return KA(r!==-1),t.substring(1,r)}let e=t.indexOf(":");return e===-1?t:t.substring(0,e)}function uR(t){if(!t)return null;KA(typeof t=="string");let e=lR(t);return $y.isIP(e)?"":e}function ER(t){return JSON.parse(JSON.stringify(t))}function hR(t){return t!=null&&typeof t[Symbol.asyncIterator]=="function"}function fE(t){return t!=null&&(typeof t[Symbol.iterator]=="function"||typeof t[Symbol.asyncIterator]=="function")}function pE(t){if(t==null)return 0;if(po(t)){let e=t._readableState;return e&&e.objectMode===!1&&e.ended===!0&&Number.isFinite(e.length)?e.length:null}else{if(IE(t))return t.size!=null?t.size:null;if(yE(t))return t.byteLength}return null}function mE(t){return t&&!!(t.destroyed||t[QE]||fo.isDestroyed?.(t))}function QR(t,e){t==null||!po(t)||mE(t)||(typeof t.destroy=="function"?(Object.getPrototypeOf(t).constructor===Xy&&(t.socket=null),t.destroy(e)):e&&queueMicrotask(()=>{t.emit("error",e)}),t.destroyed!==!0&&(t[QE]=!0))}var BR=/timeout=(\d+)/;function IR(t){let e=t.toString().match(BR);return e?parseInt(e[1],10)*1e3:null}function wE(t){return typeof t=="string"?sR[t]??t.toLowerCase():BE.lookup(t)??t.toString("latin1").toLowerCase()}function CR(t){return BE.lookup(t)??t.toString("latin1").toLowerCase()}function dR(t,e){e===void 0&&(e={});for(let r=0;rn.toString("utf8")):o.toString("utf8")}}return"content-length"in e&&"content-disposition"in e&&(e["content-disposition"]=Buffer.from(e["content-disposition"]).toString("latin1")),e}function fR(t){let e=t.length,r=new Array(e),A=!1,s=-1,o,n,i=0;for(let a=0;a{r.close(),r.byobRequest?.respond(0)});else{let o=Buffer.isBuffer(s)?s:Buffer.from(s);o.byteLength&&r.enqueue(new Uint8Array(o))}return r.desiredSize>0},async cancel(r){await e.return()},type:"bytes"})}function TR(t){return t&&typeof t=="object"&&typeof t.append=="function"&&typeof t.delete=="function"&&typeof t.get=="function"&&typeof t.getAll=="function"&&typeof t.has=="function"&&typeof t.set=="function"&&t[Symbol.toStringTag]==="FormData"}function bR(t,e){return"addEventListener"in t?(t.addEventListener("abort",e,{once:!0}),()=>t.removeEventListener("abort",e)):(t.addListener("abort",e),()=>t.removeListener("abort",e))}var kR=typeof String.prototype.toWellFormed=="function",FR=typeof String.prototype.isWellFormed=="function";function RE(t){return kR?`${t}`.toWellFormed():tR.toUSVString(t)}function SR(t){return FR?`${t}`.isWellFormed():RE(t)===`${t}`}function DE(t){switch(t){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return t>=33&&t<=126}}function NR(t){if(t.length===0)return!1;for(let e=0;e{"use strict";var J=require("node:diagnostics_channel"),wa=require("node:util"),mo=wa.debuglog("undici"),ma=wa.debuglog("fetch"),Qr=wa.debuglog("websocket"),FE=!1,OR={beforeConnect:J.channel("undici:client:beforeConnect"),connected:J.channel("undici:client:connected"),connectError:J.channel("undici:client:connectError"),sendHeaders:J.channel("undici:client:sendHeaders"),create:J.channel("undici:request:create"),bodySent:J.channel("undici:request:bodySent"),headers:J.channel("undici:request:headers"),trailers:J.channel("undici:request:trailers"),error:J.channel("undici:request:error"),open:J.channel("undici:websocket:open"),close:J.channel("undici:websocket:close"),socketError:J.channel("undici:websocket:socket_error"),ping:J.channel("undici:websocket:ping"),pong:J.channel("undici:websocket:pong")};if(mo.enabled||ma.enabled){let t=ma.enabled?ma:mo;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s using %s%s errored - %s",`${o}${s?`:${s}`:""}`,A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)}),J.channel("undici:request:headers").subscribe(e=>{let{request:{method:r,path:A,origin:s},response:{statusCode:o}}=e;t("received response to %s %s/%s - HTTP %d",r,s,A,o)}),J.channel("undici:request:trailers").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("trailers received from %s %s/%s",r,s,A)}),J.channel("undici:request:error").subscribe(e=>{let{request:{method:r,path:A,origin:s},error:o}=e;t("request to %s %s/%s errored - %s",r,s,A,o.message)}),FE=!0}if(Qr.enabled){if(!FE){let t=mo.enabled?mo:Qr;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s%s using %s%s errored - %s",o,s?`:${s}`:"",A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)})}J.channel("undici:websocket:open").subscribe(t=>{let{address:{address:e,port:r}}=t;Qr("connection opened %s%s",e,r?`:${r}`:"")}),J.channel("undici:websocket:close").subscribe(t=>{let{websocket:e,code:r,reason:A}=t;Qr("closed connection to %s - %s %s",e.url,r,A)}),J.channel("undici:websocket:socket_error").subscribe(t=>{Qr("connection errored - %s",t.message)}),J.channel("undici:websocket:ping").subscribe(t=>{Qr("ping received")}),J.channel("undici:websocket:pong").subscribe(t=>{Qr("pong received")})}SE.exports={channels:OR}});var LE=B((CJ,GE)=>{"use strict";var{InvalidArgumentError:V,NotSupportedError:YR}=Y(),Rt=require("node:assert"),{isValidHTTPToken:UE,isValidHeaderValue:XA,isStream:_R,destroy:JR,isBuffer:PR,isFormDataLike:HR,isIterable:VR,isBlobLike:qR,buildURL:WR,validateHandler:zR,getServerName:ZR,normalizedMethodRecords:jR}=M(),{channels:lt}=jr(),{headerNameLowerCasedRecord:NE}=Qo(),KR=/[^\u0021-\u00ff]/,He=Symbol("handler"),ya=class{constructor(e,{path:r,method:A,body:s,headers:o,query:n,idempotent:i,blocking:a,upgrade:c,headersTimeout:g,bodyTimeout:l,reset:u,throwOnError:E,expectContinue:h,servername:C},I){if(typeof r!="string")throw new V("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&A!=="CONNECT")throw new V("path must be an absolute URL or start with a slash");if(KR.test(r))throw new V("invalid request path");if(typeof A!="string")throw new V("method must be a string");if(jR[A]===void 0&&!UE(A))throw new V("invalid request method");if(c&&typeof c!="string")throw new V("upgrade must be a string");if(c&&!XA(c))throw new V("invalid upgrade header");if(g!=null&&(!Number.isFinite(g)||g<0))throw new V("invalid headersTimeout");if(l!=null&&(!Number.isFinite(l)||l<0))throw new V("invalid bodyTimeout");if(u!=null&&typeof u!="boolean")throw new V("invalid reset");if(h!=null&&typeof h!="boolean")throw new V("invalid expectContinue");if(this.headersTimeout=g,this.bodyTimeout=l,this.throwOnError=E===!0,this.method=A,this.abort=null,s==null)this.body=null;else if(_R(s)){this.body=s;let Q=this.body._readableState;(!Q||!Q.autoDestroy)&&(this.endHandler=function(){JR(this)},this.body.on("end",this.endHandler)),this.errorHandler=f=>{this.abort?this.abort(f):this.error=f},this.body.on("error",this.errorHandler)}else if(PR(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if(typeof s=="string")this.body=s.length?Buffer.from(s):null;else if(HR(s)||VR(s)||qR(s))this.body=s;else throw new V("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=c||null,this.path=n?WR(r,n):r,this.origin=e,this.idempotent=i??(A==="HEAD"||A==="GET"),this.blocking=a??!1,this.reset=u??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=h??!1,Array.isArray(o)){if(o.length%2!==0)throw new V("headers array must be even");for(let Q=0;Q{"use strict";var XR=require("node:events"),yo=class extends XR{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){let r=Array.isArray(e[0])?e[0]:e,A=this.dispatch.bind(this);for(let s of r)if(s!=null){if(typeof s!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof s}`);if(A=s(A),A==null||typeof A!="function"||A.length!==2)throw new TypeError("invalid interceptor")}return new Ra(this,A)}},Ra=class extends yo{#e=null;#t=null;constructor(e,r){super(),this.#e=e,this.#t=r}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};ME.exports=yo});var eA=B((fJ,vE)=>{"use strict";var $R=$A(),{ClientDestroyedError:Da,ClientClosedError:eD,InvalidArgumentError:Kr}=Y(),{kDestroy:tD,kClose:rD,kClosed:es,kDestroyed:Xr,kDispatch:Ta,kInterceptors:Br}=$(),Dt=Symbol("onDestroyed"),$r=Symbol("onClosed"),Ro=Symbol("Intercepted Dispatch"),ba=Symbol("webSocketOptions"),ka=class extends $R{constructor(e){super(),this[Xr]=!1,this[Dt]=null,this[es]=!1,this[$r]=[],this[ba]=e?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[ba].maxFragments??131072,maxPayloadSize:this[ba].maxPayloadSize??128*1024*1024}}get destroyed(){return this[Xr]}get closed(){return this[es]}get interceptors(){return this[Br]}set interceptors(e){if(e){for(let r=e.length-1;r>=0;r--)if(typeof this[Br][r]!="function")throw new Kr("interceptor must be an function")}this[Br]=e}close(e){if(e===void 0)return new Promise((A,s)=>{this.close((o,n)=>o?s(o):A(n))});if(typeof e!="function")throw new Kr("invalid callback");if(this[Xr]){queueMicrotask(()=>e(new Da,null));return}if(this[es]){this[$r]?this[$r].push(e):queueMicrotask(()=>e(null,null));return}this[es]=!0,this[$r].push(e);let r=()=>{let A=this[$r];this[$r]=null;for(let s=0;sthis.destroy()).then(()=>{queueMicrotask(r)})}destroy(e,r){if(typeof e=="function"&&(r=e,e=null),r===void 0)return new Promise((s,o)=>{this.destroy(e,(n,i)=>n?o(n):s(i))});if(typeof r!="function")throw new Kr("invalid callback");if(this[Xr]){this[Dt]?this[Dt].push(r):queueMicrotask(()=>r(null,null));return}e||(e=new Da),this[Xr]=!0,this[Dt]=this[Dt]||[],this[Dt].push(r);let A=()=>{let s=this[Dt];this[Dt]=null;for(let o=0;o{queueMicrotask(A)})}[Ro](e,r){if(!this[Br]||this[Br].length===0)return this[Ro]=this[Ta],this[Ta](e,r);let A=this[Ta].bind(this);for(let s=this[Br].length-1;s>=0;s--)A=this[Br][s](A);return this[Ro]=A,A(e,r)}dispatch(e,r){if(!r||typeof r!="object")throw new Kr("handler must be an object");try{if(!e||typeof e!="object")throw new Kr("opts must be an object.");if(this[Xr]||this[Dt])throw new Da;if(this[es])throw new eD;return this[Ro](e,r)}catch(A){if(typeof r.onError!="function")throw new Kr("invalid onError method");return r.onError(A),!1}}};vE.exports=ka});var Ma=B((pJ,_E)=>{"use strict";var tA=0,Fa=1e3,Sa=(Fa>>1)-1,Tt,Na=Symbol("kFastTimer"),bt=[],Ua=-2,Ga=-1,OE=0,xE=1;function La(){tA+=Sa;let t=0,e=bt.length;for(;t=r._idleStart+r._idleTimeout&&(r._state=Ga,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===Ga?(r._state=Ua,--e!==0&&(bt[t]=bt[e])):++t}bt.length=e,bt.length!==0&&YE()}function YE(){Tt?Tt.refresh():(clearTimeout(Tt),Tt=setTimeout(La,Sa),Tt.unref&&Tt.unref())}var Do=class{[Na]=!0;_state=Ua;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,r,A){this._onTimeout=e,this._idleTimeout=r,this._timerArg=A,this.refresh()}refresh(){this._state===Ua&&bt.push(this),(!Tt||bt.length===1)&&YE(),this._state=OE}clear(){this._state=Ga,this._idleStart=-1}};_E.exports={setTimeout(t,e,r){return e<=Fa?setTimeout(t,e,r):new Do(t,e,r)},clearTimeout(t){t[Na]?t.clear():clearTimeout(t)},setFastTimeout(t,e,r){return new Do(t,e,r)},clearFastTimeout(t){t.clear()},now(){return tA},tick(t=0){tA+=t-Fa+1,La(),La()},reset(){tA=0,bt.length=0,clearTimeout(Tt),Tt=null},kFastTimer:Na}});var ts=B((yJ,qE)=>{"use strict";var AD=require("node:net"),JE=require("node:assert"),VE=M(),{InvalidArgumentError:sD,ConnectTimeoutError:oD}=Y(),To=Ma();function PE(){}var va,xa;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?xa=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry(r=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:A}=this._sessionCache.keys().next();this._sessionCache.delete(A)}this._sessionCache.set(e,r)}}};function nD({allowH2:t,maxCachedSessions:e,socketPath:r,timeout:A,session:s,...o}){if(e!=null&&(!Number.isInteger(e)||e<0))throw new sD("maxCachedSessions must be a positive integer or zero");let n={path:r,...o},i=new xa(e??100);return A=A??1e4,t=t??!1,function({hostname:c,host:g,protocol:l,port:u,servername:E,localAddress:h,httpSocket:C},I){let Q;if(l==="https:"){va||(va=require("node:tls")),E=E||n.servername||VE.getServerName(g)||null;let R=E||c;JE(R);let y=s||i.get(R)||null;u=u||443,Q=va.connect({highWaterMark:16384,...n,servername:E,session:y,localAddress:h,ALPNProtocols:t?["http/1.1","h2"]:["http/1.1"],socket:C,port:u,host:c}),Q.on("session",function(P){i.set(R,P)})}else JE(!C,"httpSocket can only be sent on TLS update"),u=u||80,Q=AD.connect({highWaterMark:64*1024,...n,localAddress:h,port:u,host:c});if(n.keepAlive==null||n.keepAlive){let R=n.keepAliveInitialDelay===void 0?6e4:n.keepAliveInitialDelay;Q.setKeepAlive(!0,R)}let f=iD(new WeakRef(Q),{timeout:A,hostname:c,port:u});return Q.setNoDelay(!0).once(l==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(f),I){let R=I;I=null,R(null,this)}}).on("error",function(R){if(queueMicrotask(f),I){let y=I;I=null,y(R)}}),Q}}var iD=process.platform==="win32"?(t,e)=>{if(!e.timeout)return PE;let r=null,A=null,s=To.setFastTimeout(()=>{r=setImmediate(()=>{A=setImmediate(()=>HE(t.deref(),e))})},e.timeout);return()=>{To.clearFastTimeout(s),clearImmediate(r),clearImmediate(A)}}:(t,e)=>{if(!e.timeout)return PE;let r=null,A=To.setFastTimeout(()=>{r=setImmediate(()=>{HE(t.deref(),e)})},e.timeout);return()=>{To.clearFastTimeout(A),clearImmediate(r)}};function HE(t,e){if(t==null)return;let r="Connect Timeout Error";Array.isArray(t.autoSelectFamilyAttemptedAddresses)?r+=` (attempted addresses: ${t.autoSelectFamilyAttemptedAddresses.join(", ")},`:r+=` (attempted address: ${e.hostname}:${e.port},`,r+=` timeout: ${e.timeout}ms)`,VE.destroy(t,new oD(r))}qE.exports=nD});var WE=B(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.enumToMap=void 0;function aD(t){let e={};return Object.keys(t).forEach(r=>{let A=t[r];typeof A=="number"&&(e[r]=A)}),e}bo.enumToMap=aD});var zE=B(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.SPECIAL_HEADERS=p.HEADER_STATE=p.MINOR=p.MAJOR=p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS=p.TOKEN=p.STRICT_TOKEN=p.HEX=p.URL_CHAR=p.STRICT_URL_CHAR=p.USERINFO_CHARS=p.MARK=p.ALPHANUM=p.NUM=p.HEX_MAP=p.NUM_MAP=p.ALPHA=p.FINISH=p.H_METHOD_MAP=p.METHOD_MAP=p.METHODS_RTSP=p.METHODS_ICE=p.METHODS_HTTP=p.METHODS=p.LENIENT_FLAGS=p.FLAGS=p.TYPE=p.ERROR=void 0;var cD=WE(),gD;(function(t){t[t.OK=0]="OK",t[t.INTERNAL=1]="INTERNAL",t[t.STRICT=2]="STRICT",t[t.LF_EXPECTED=3]="LF_EXPECTED",t[t.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",t[t.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",t[t.INVALID_METHOD=6]="INVALID_METHOD",t[t.INVALID_URL=7]="INVALID_URL",t[t.INVALID_CONSTANT=8]="INVALID_CONSTANT",t[t.INVALID_VERSION=9]="INVALID_VERSION",t[t.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",t[t.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",t[t.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",t[t.INVALID_STATUS=13]="INVALID_STATUS",t[t.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",t[t.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",t[t.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",t[t.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",t[t.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",t[t.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",t[t.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",t[t.PAUSED=21]="PAUSED",t[t.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",t[t.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",t[t.USER=24]="USER"})(gD=p.ERROR||(p.ERROR={}));var lD;(function(t){t[t.BOTH=0]="BOTH",t[t.REQUEST=1]="REQUEST",t[t.RESPONSE=2]="RESPONSE"})(lD=p.TYPE||(p.TYPE={}));var uD;(function(t){t[t.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",t[t.CHUNKED=8]="CHUNKED",t[t.UPGRADE=16]="UPGRADE",t[t.CONTENT_LENGTH=32]="CONTENT_LENGTH",t[t.SKIPBODY=64]="SKIPBODY",t[t.TRAILING=128]="TRAILING",t[t.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(uD=p.FLAGS||(p.FLAGS={}));var ED;(function(t){t[t.HEADERS=1]="HEADERS",t[t.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",t[t.KEEP_ALIVE=4]="KEEP_ALIVE"})(ED=p.LENIENT_FLAGS||(p.LENIENT_FLAGS={}));var k;(function(t){t[t.DELETE=0]="DELETE",t[t.GET=1]="GET",t[t.HEAD=2]="HEAD",t[t.POST=3]="POST",t[t.PUT=4]="PUT",t[t.CONNECT=5]="CONNECT",t[t.OPTIONS=6]="OPTIONS",t[t.TRACE=7]="TRACE",t[t.COPY=8]="COPY",t[t.LOCK=9]="LOCK",t[t.MKCOL=10]="MKCOL",t[t.MOVE=11]="MOVE",t[t.PROPFIND=12]="PROPFIND",t[t.PROPPATCH=13]="PROPPATCH",t[t.SEARCH=14]="SEARCH",t[t.UNLOCK=15]="UNLOCK",t[t.BIND=16]="BIND",t[t.REBIND=17]="REBIND",t[t.UNBIND=18]="UNBIND",t[t.ACL=19]="ACL",t[t.REPORT=20]="REPORT",t[t.MKACTIVITY=21]="MKACTIVITY",t[t.CHECKOUT=22]="CHECKOUT",t[t.MERGE=23]="MERGE",t[t["M-SEARCH"]=24]="M-SEARCH",t[t.NOTIFY=25]="NOTIFY",t[t.SUBSCRIBE=26]="SUBSCRIBE",t[t.UNSUBSCRIBE=27]="UNSUBSCRIBE",t[t.PATCH=28]="PATCH",t[t.PURGE=29]="PURGE",t[t.MKCALENDAR=30]="MKCALENDAR",t[t.LINK=31]="LINK",t[t.UNLINK=32]="UNLINK",t[t.SOURCE=33]="SOURCE",t[t.PRI=34]="PRI",t[t.DESCRIBE=35]="DESCRIBE",t[t.ANNOUNCE=36]="ANNOUNCE",t[t.SETUP=37]="SETUP",t[t.PLAY=38]="PLAY",t[t.PAUSE=39]="PAUSE",t[t.TEARDOWN=40]="TEARDOWN",t[t.GET_PARAMETER=41]="GET_PARAMETER",t[t.SET_PARAMETER=42]="SET_PARAMETER",t[t.REDIRECT=43]="REDIRECT",t[t.RECORD=44]="RECORD",t[t.FLUSH=45]="FLUSH"})(k=p.METHODS||(p.METHODS={}));p.METHODS_HTTP=[k.DELETE,k.GET,k.HEAD,k.POST,k.PUT,k.CONNECT,k.OPTIONS,k.TRACE,k.COPY,k.LOCK,k.MKCOL,k.MOVE,k.PROPFIND,k.PROPPATCH,k.SEARCH,k.UNLOCK,k.BIND,k.REBIND,k.UNBIND,k.ACL,k.REPORT,k.MKACTIVITY,k.CHECKOUT,k.MERGE,k["M-SEARCH"],k.NOTIFY,k.SUBSCRIBE,k.UNSUBSCRIBE,k.PATCH,k.PURGE,k.MKCALENDAR,k.LINK,k.UNLINK,k.PRI,k.SOURCE];p.METHODS_ICE=[k.SOURCE];p.METHODS_RTSP=[k.OPTIONS,k.DESCRIBE,k.ANNOUNCE,k.SETUP,k.PLAY,k.PAUSE,k.TEARDOWN,k.GET_PARAMETER,k.SET_PARAMETER,k.REDIRECT,k.RECORD,k.FLUSH,k.GET,k.POST];p.METHOD_MAP=cD.enumToMap(k);p.H_METHOD_MAP={};Object.keys(p.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(p.H_METHOD_MAP[t]=p.METHOD_MAP[t])});var hD;(function(t){t[t.SAFE=0]="SAFE",t[t.SAFE_WITH_CB=1]="SAFE_WITH_CB",t[t.UNSAFE=2]="UNSAFE"})(hD=p.FINISH||(p.FINISH={}));p.ALPHA=[];for(let t=65;t<=90;t++)p.ALPHA.push(String.fromCharCode(t)),p.ALPHA.push(String.fromCharCode(t+32));p.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};p.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};p.NUM=["0","1","2","3","4","5","6","7","8","9"];p.ALPHANUM=p.ALPHA.concat(p.NUM);p.MARK=["-","_",".","!","~","*","'","(",")"];p.USERINFO_CHARS=p.ALPHANUM.concat(p.MARK).concat(["%",";",":","&","=","+","$",","]);p.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(p.ALPHANUM);p.URL_CHAR=p.STRICT_URL_CHAR.concat([" ","\f"]);for(let t=128;t<=255;t++)p.URL_CHAR.push(t);p.HEX=p.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);p.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(p.ALPHANUM);p.TOKEN=p.STRICT_TOKEN.concat([" "]);p.HEADER_CHARS=[" "];for(let t=32;t<=255;t++)t!==127&&p.HEADER_CHARS.push(t);p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS.filter(t=>t!==44);p.MAJOR=p.NUM_MAP;p.MINOR=p.MAJOR;var rA;(function(t){t[t.GENERAL=0]="GENERAL",t[t.CONNECTION=1]="CONNECTION",t[t.CONTENT_LENGTH=2]="CONTENT_LENGTH",t[t.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",t[t.UPGRADE=4]="UPGRADE",t[t.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",t[t.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})(rA=p.HEADER_STATE||(p.HEADER_STATE={}));p.SPECIAL_HEADERS={connection:rA.CONNECTION,"content-length":rA.CONTENT_LENGTH,"proxy-connection":rA.CONNECTION,"transfer-encoding":rA.TRANSFER_ENCODING,upgrade:rA.UPGRADE}});var Oa=B((TJ,ZE)=>{"use strict";var{Buffer:QD}=require("node:buffer");ZE.exports=QD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var KE=B((bJ,jE)=>{"use strict";var{Buffer:BD}=require("node:buffer");jE.exports=BD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var rs=B((kJ,oh)=>{"use strict";var XE=["GET","HEAD","POST"],ID=new Set(XE),CD=[101,204,205,304],$E=[301,302,303,307,308],dD=new Set($E),eh=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],fD=new Set(eh),th=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],pD=new Set(th),mD=["follow","manual","error"],rh=["GET","HEAD","OPTIONS","TRACE"],wD=new Set(rh),yD=["navigate","same-origin","no-cors","cors"],RD=["omit","same-origin","include"],DD=["default","no-store","reload","no-cache","force-cache","only-if-cached"],TD=["content-encoding","content-language","content-location","content-type","content-length"],bD=["half"],Ah=["CONNECT","TRACE","TRACK"],kD=new Set(Ah),sh=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],FD=new Set(sh);oh.exports={subresource:sh,forbiddenMethods:Ah,requestBodyHeader:TD,referrerPolicy:th,requestRedirect:mD,requestMode:yD,requestCredentials:RD,requestCache:DD,redirectStatus:$E,corsSafeListedMethods:XE,nullBodyStatus:CD,safeMethods:rh,badPorts:eh,requestDuplex:bD,subresourceSet:FD,badPortsSet:fD,redirectStatusSet:dD,corsSafeListedMethodsSet:ID,safeMethodsSet:wD,forbiddenMethodsSet:kD,referrerPolicySet:pD}});var _a=B((FJ,nh)=>{"use strict";var Ya=Symbol.for("undici.globalOrigin.1");function SD(){return globalThis[Ya]}function ND(t){if(t===void 0){Object.defineProperty(globalThis,Ya,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let e=new URL(t);if(e.protocol!=="http:"&&e.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${e.protocol}`);Object.defineProperty(globalThis,Ya,{value:e,writable:!0,enumerable:!1,configurable:!1})}nh.exports={getGlobalOrigin:SD,setGlobalOrigin:ND}});var Te=B((SJ,Eh)=>{"use strict";var Fo=require("node:assert"),UD=new TextEncoder,As=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,GD=/[\u000A\u000D\u0009\u0020]/,LD=/[\u0009\u000A\u000C\u000D\u0020]/g,MD=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function vD(t){Fo(t.protocol==="data:");let e=ch(t,!0);e=e.slice(5);let r={position:0},A=AA(",",e,r),s=A.length;if(A=PD(A,!0,!0),r.position>=e.length)return"failure";r.position++;let o=e.slice(s+1),n=gh(o);if(/;(\u0020){0,}base64$/i.test(A)){let a=uh(n);if(n=OD(a),n==="failure")return"failure";A=A.slice(0,-6),A=A.replace(/(\u0020)+$/,""),A=A.slice(0,-1)}A.startsWith(";")&&(A="text/plain"+A);let i=Ja(A);return i==="failure"&&(i=Ja("text/plain;charset=US-ASCII")),{mimeType:i,body:n}}function ch(t,e=!1){if(!e)return t.href;let r=t.href,A=t.hash.length,s=A===0?r:r.substring(0,r.length-A);return!A&&r.endsWith("#")?s.slice(0,-1):s}function So(t,e,r){let A="";for(;r.position=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function ah(t){return t>=48&&t<=57?t-48:(t&223)-55}function xD(t){let e=t.length,r=new Uint8Array(e),A=0;for(let s=0;st.length)return"failure";e.position++;let A=AA(";",t,e);if(A=ko(A,!1,!0),A.length===0||!As.test(A))return"failure";let s=r.toLowerCase(),o=A.toLowerCase(),n={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;e.positionGD.test(c),t,e);let i=So(c=>c!==";"&&c!=="=",t,e);if(i=i.toLowerCase(),e.positiont.length)break;let a=null;if(t[e.position]==='"')a=lh(t,e,!0),AA(";",t,e);else if(a=AA(";",t,e),a=ko(a,!1,!0),a.length===0)continue;i.length!==0&&As.test(i)&&(a.length===0||MD.test(a))&&!n.parameters.has(i)&&n.parameters.set(i,a)}return n}function OD(t){t=t.replace(LD,"");let e=t.length;if(e%4===0&&t.charCodeAt(e-1)===61&&(--e,t.charCodeAt(e-1)===61&&--e),e%4===1||/[^+/0-9A-Za-z]/.test(t.length===e?t:t.substring(0,e)))return"failure";let r=Buffer.from(t,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function lh(t,e,r){let A=e.position,s="";for(Fo(t[e.position]==='"'),e.position++;s+=So(n=>n!=='"'&&n!=="\\",t,e),!(e.position>=t.length);){let o=t[e.position];if(e.position++,o==="\\"){if(e.position>=t.length){s+="\\";break}s+=t[e.position],e.position++}else{Fo(o==='"');break}}return r?s:t.slice(A,e.position)}function YD(t){Fo(t!=="failure");let{parameters:e,essence:r}=t,A=r;for(let[s,o]of e.entries())A+=";",A+=s,A+="=",As.test(o)||(o=o.replace(/(\\|")/g,"\\$1"),o='"'+o,o+='"'),A+=o;return A}function _D(t){return t===13||t===10||t===9||t===32}function ko(t,e=!0,r=!0){return Pa(t,e,r,_D)}function JD(t){return t===13||t===10||t===9||t===12||t===32}function PD(t,e=!0,r=!0){return Pa(t,e,r,JD)}function Pa(t,e,r,A){let s=0,o=t.length-1;if(e)for(;s0&&A(t.charCodeAt(o));)o--;return s===0&&o===t.length-1?t:t.slice(s,o+1)}function uh(t){let e=t.length;if(65535>e)return String.fromCharCode.apply(null,t);let r="",A=0,s=65535;for(;Ae&&(s=e-A),r+=String.fromCharCode.apply(null,t.subarray(A,A+=s));return r}function HD(t){switch(t.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return t.subtype.endsWith("+json")?"application/json":t.subtype.endsWith("+xml")?"application/xml":""}Eh.exports={dataURLProcessor:vD,URLSerializer:ch,collectASequenceOfCodePoints:So,collectASequenceOfCodePointsFast:AA,stringPercentDecode:gh,parseMIMEType:Ja,collectAnHTTPQuotedString:lh,serializeAMimeType:YD,removeChars:Pa,removeHTTPWhitespace:ko,minimizeSupportedMimeType:HD,HTTP_TOKEN_CODEPOINTS:As,isomorphicDecode:uh}});var Qe=B((NJ,hh)=>{"use strict";var{types:ut,inspect:VD}=require("node:util"),{markAsUncloneable:qD}=require("node:worker_threads"),{toUSVString:WD}=M(),d={};d.converters={};d.util={};d.errors={};d.errors.exception=function(t){return new TypeError(`${t.header}: ${t.message}`)};d.errors.conversionFailed=function(t){let e=t.types.length===1?"":" one of",r=`${t.argument} could not be converted to${e}: ${t.types.join(", ")}.`;return d.errors.exception({header:t.prefix,message:r})};d.errors.invalidArgument=function(t){return d.errors.exception({header:t.prefix,message:`"${t.value}" is an invalid ${t.type}.`})};d.brandCheck=function(t,e,r){if(r?.strict!==!1){if(!(t instanceof e)){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}}else if(t?.[Symbol.toStringTag]!==e.prototype[Symbol.toStringTag]){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}};d.argumentLengthCheck=function({length:t},e,r){if(t{});d.util.ConvertToInt=function(t,e,r,A){let s,o;e===64?(s=Math.pow(2,53)-1,r==="unsigned"?o=0:o=Math.pow(-2,53)+1):r==="unsigned"?(o=0,s=Math.pow(2,e)-1):(o=Math.pow(-2,e)-1,s=Math.pow(2,e-1)-1);let n=Number(t);if(n===0&&(n=0),A?.enforceRange===!0){if(Number.isNaN(n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY)throw d.errors.exception({header:"Integer conversion",message:`Could not convert ${d.util.Stringify(t)} to an integer.`});if(n=d.util.IntegerPart(n),ns)throw d.errors.exception({header:"Integer conversion",message:`Value must be between ${o}-${s}, got ${n}.`});return n}return!Number.isNaN(n)&&A?.clamp===!0?(n=Math.min(Math.max(n,o),s),Math.floor(n)%2===0?n=Math.floor(n):n=Math.ceil(n),n):Number.isNaN(n)||n===0&&Object.is(0,n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY?0:(n=d.util.IntegerPart(n),n=n%Math.pow(2,e),r==="signed"&&n>=Math.pow(2,e)-1?n-Math.pow(2,e):n)};d.util.IntegerPart=function(t){let e=Math.floor(Math.abs(t));return t<0?-1*e:e};d.util.Stringify=function(t){switch(d.util.Type(t)){case"Symbol":return`Symbol(${t.description})`;case"Object":return VD(t);case"String":return`"${t}"`;default:return`${t}`}};d.sequenceConverter=function(t){return(e,r,A,s)=>{if(d.util.Type(e)!=="Object")throw d.errors.exception({header:r,message:`${A} (${d.util.Stringify(e)}) is not iterable.`});let o=typeof s=="function"?s():e?.[Symbol.iterator]?.(),n=[],i=0;if(o===void 0||typeof o.next!="function")throw d.errors.exception({header:r,message:`${A} is not iterable.`});for(;;){let{done:a,value:c}=o.next();if(a)break;n.push(t(c,r,`${A}[${i++}]`))}return n}};d.recordConverter=function(t,e){return(r,A,s)=>{if(d.util.Type(r)!=="Object")throw d.errors.exception({header:A,message:`${s} ("${d.util.Type(r)}") is not an Object.`});let o={};if(!ut.isProxy(r)){let i=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let a of i){let c=t(a,A,s),g=e(r[a],A,s);o[c]=g}return o}let n=Reflect.ownKeys(r);for(let i of n)if(Reflect.getOwnPropertyDescriptor(r,i)?.enumerable){let c=t(i,A,s),g=e(r[i],A,s);o[c]=g}return o}};d.interfaceConverter=function(t){return(e,r,A,s)=>{if(s?.strict!==!1&&!(e instanceof t))throw d.errors.exception({header:r,message:`Expected ${A} ("${d.util.Stringify(e)}") to be an instance of ${t.name}.`});return e}};d.dictionaryConverter=function(t){return(e,r,A)=>{let s=d.util.Type(e),o={};if(s==="Null"||s==="Undefined")return o;if(s!=="Object")throw d.errors.exception({header:r,message:`Expected ${e} to be one of: Null, Undefined, Object.`});for(let n of t){let{key:i,defaultValue:a,required:c,converter:g}=n;if(c===!0&&!Object.hasOwn(e,i))throw d.errors.exception({header:r,message:`Missing required key "${i}".`});let l=e[i],u=Object.hasOwn(n,"defaultValue");if(u&&l!==null&&(l??=a()),c||u||l!==void 0){if(l=g(l,r,`${A}.${i}`),n.allowedValues&&!n.allowedValues.includes(l))throw d.errors.exception({header:r,message:`${l} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});o[i]=l}}return o}};d.nullableConverter=function(t){return(e,r,A)=>e===null?e:t(e,r,A)};d.converters.DOMString=function(t,e,r,A){if(t===null&&A?.legacyNullToEmptyString)return"";if(typeof t=="symbol")throw d.errors.exception({header:e,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(t)};d.converters.ByteString=function(t,e,r){let A=d.converters.DOMString(t,e,r);for(let s=0;s255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${s} has a value of ${A.charCodeAt(s)} which is greater than 255.`);return A};d.converters.USVString=WD;d.converters.boolean=function(t){return!!t};d.converters.any=function(t){return t};d.converters["long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"signed",void 0,e,r)};d.converters["unsigned long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"unsigned",void 0,e,r)};d.converters["unsigned long"]=function(t,e,r){return d.util.ConvertToInt(t,32,"unsigned",void 0,e,r)};d.converters["unsigned short"]=function(t,e,r,A){return d.util.ConvertToInt(t,16,"unsigned",A,e,r)};d.converters.ArrayBuffer=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isAnyArrayBuffer(t))throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["ArrayBuffer"]});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.resizable||t.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.TypedArray=function(t,e,r,A,s){if(d.util.Type(t)!=="Object"||!ut.isTypedArray(t)||t.constructor.name!==e.name)throw d.errors.conversionFailed({prefix:r,argument:`${A} ("${d.util.Stringify(t)}")`,types:[e.name]});if(s?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.DataView=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isDataView(t))throw d.errors.exception({header:e,message:`${r} is not a DataView.`});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.BufferSource=function(t,e,r,A){if(ut.isAnyArrayBuffer(t))return d.converters.ArrayBuffer(t,e,r,{...A,allowShared:!1});if(ut.isTypedArray(t))return d.converters.TypedArray(t,t.constructor,e,r,{...A,allowShared:!1});if(ut.isDataView(t))return d.converters.DataView(t,e,r,{...A,allowShared:!1});throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["BufferSource"]})};d.converters["sequence"]=d.sequenceConverter(d.converters.ByteString);d.converters["sequence>"]=d.sequenceConverter(d.converters["sequence"]);d.converters["record"]=d.recordConverter(d.converters.ByteString,d.converters.ByteString);hh.exports={webidl:d}});var Ge=B((UJ,bh)=>{"use strict";var{Transform:zD}=require("node:stream"),Qh=require("node:zlib"),{redirectStatusSet:ZD,referrerPolicySet:jD,badPortsSet:KD}=rs(),{getGlobalOrigin:Bh}=_a(),{collectASequenceOfCodePoints:Ir,collectAnHTTPQuotedString:XD,removeChars:$D,parseMIMEType:e0}=Te(),{performance:t0}=require("node:perf_hooks"),{isBlobLike:r0,ReadableStreamFrom:A0,isValidHTTPToken:Ih,normalizedMethodRecordsBase:s0}=M(),Cr=require("node:assert"),{isUint8Array:o0}=require("node:util/types"),{webidl:ss}=Qe(),Ch=[],Uo;try{Uo=require("node:crypto");let t=["sha256","sha384","sha512"];Ch=Uo.getHashes().filter(e=>t.includes(e))}catch{}function dh(t){let e=t.urlList,r=e.length;return r===0?null:e[r-1].toString()}function n0(t,e){if(!ZD.has(t.status))return null;let r=t.headersList.get("location",!0);return r!==null&&ph(r)&&(fh(r)||(r=i0(r)),r=new URL(r,dh(t))),r&&!r.hash&&(r.hash=e),r}function fh(t){for(let e=0;e126||r<32)return!1}return!0}function i0(t){return Buffer.from(t,"binary").toString("utf8")}function ns(t){return t.urlList[t.urlList.length-1]}function a0(t){let e=ns(t);return Dh(e)&&KD.has(e.port)?"blocked":"allowed"}function c0(t){return t instanceof Error||t?.constructor?.name==="Error"||t?.constructor?.name==="DOMException"}function g0(t){for(let e=0;e=32&&r<=126||r>=128&&r<=255))return!1}return!0}var l0=Ih;function ph(t){return(t[0]===" "||t[0]===" "||t[t.length-1]===" "||t[t.length-1]===" "||t.includes(` +`)||t.includes("\r")||t.includes("\0"))===!1}function u0(t,e){let{headersList:r}=e,A=(r.get("referrer-policy",!0)??"").split(","),s="";if(A.length>0)for(let o=A.length;o!==0;o--){let n=A[o-1].trim();if(jD.has(n)){s=n;break}}s!==""&&(t.referrerPolicy=s)}function E0(){return"allowed"}function h0(){return"success"}function Q0(){return"success"}function B0(t){let e=null;e=t.mode,t.headersList.set("sec-fetch-mode",e,!0)}function I0(t){let e=t.origin;if(!(e==="client"||e===void 0)){if(t.responseTainting==="cors"||t.mode==="websocket")t.headersList.append("origin",e,!0);else if(t.method!=="GET"&&t.method!=="HEAD"){switch(t.referrerPolicy){case"no-referrer":e=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":t.origin&&Va(t.origin)&&!Va(ns(t))&&(e=null);break;case"same-origin":Go(t,ns(t))||(e=null);break;default:}t.headersList.append("origin",e,!0)}}}function sA(t,e){return t}function C0(t,e,r){return!t?.startTime||t.startTime4096&&(A=s);let o=Go(t,A),n=os(A)&&!os(t.url);switch(e){case"origin":return s??Ha(r,!0);case"unsafe-url":return A;case"same-origin":return o?s:"no-referrer";case"origin-when-cross-origin":return o?A:s;case"strict-origin-when-cross-origin":{let i=ns(t);return Go(A,i)?A:os(A)&&!os(i)?"no-referrer":s}default:return n?"no-referrer":s}}function Ha(t,e){return Cr(t instanceof URL),t=new URL(t),t.protocol==="file:"||t.protocol==="about:"||t.protocol==="blank:"?"no-referrer":(t.username="",t.password="",t.hash="",e&&(t.pathname="",t.search=""),t)}function os(t){if(!(t instanceof URL))return!1;if(t.href==="about:blank"||t.href==="about:srcdoc"||t.protocol==="data:"||t.protocol==="file:")return!0;return e(t.origin);function e(r){if(r==null||r==="null")return!1;let A=new URL(r);return!!(A.protocol==="https:"||A.protocol==="wss:"||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(A.hostname)||A.hostname==="localhost"||A.hostname.includes("localhost.")||A.hostname.endsWith(".localhost"))}}function w0(t,e){if(Uo===void 0)return!0;let r=wh(e);if(r==="no metadata"||r.length===0)return!0;let A=R0(r),s=D0(r,A);for(let o of s){let n=o.algo,i=o.hash,a=Uo.createHash(n).update(t).digest("base64");if(a[a.length-1]==="="&&(a[a.length-2]==="="?a=a.slice(0,-2):a=a.slice(0,-1)),T0(a,i))return!0}return!1}var y0=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function wh(t){let e=[],r=!0;for(let A of t.split(" ")){r=!1;let s=y0.exec(A);if(s===null||s.groups===void 0||s.groups.algo===void 0)continue;let o=s.groups.algo.toLowerCase();Ch.includes(o)&&e.push(s.groups)}return r===!0?"no metadata":e}function R0(t){let e=t[0].algo;if(e[3]==="5")return e;for(let r=1;r{t=A,e=s}),resolve:t,reject:e}}function F0(t){return t.controller.state==="aborted"}function S0(t){return t.controller.state==="aborted"||t.controller.state==="terminated"}function N0(t){return s0[t.toLowerCase()]??t}function U0(t){let e=JSON.stringify(t);if(e===void 0)throw new TypeError("Value is not JSON serializable");return Cr(typeof e=="string"),e}var G0=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function yh(t,e,r=0,A=1){class s{#e;#t;#r;constructor(n,i){this.#e=n,this.#t=i,this.#r=0}next(){if(typeof this!="object"||this===null||!(#e in this))throw new TypeError(`'next' called on an object that does not implement interface ${t} Iterator.`);let n=this.#r,i=this.#e[e],a=i.length;if(n>=a)return{value:void 0,done:!0};let{[r]:c,[A]:g}=i[n];this.#r=n+1;let l;switch(this.#t){case"key":l=c;break;case"value":l=g;break;case"key+value":l=[c,g];break}return{value:l,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,G0),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${t} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(o,n){return new s(o,n)}}function L0(t,e,r,A=0,s=1){let o=yh(t,r,A,s),n={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(a,c=globalThis){if(ss.brandCheck(this,e),ss.argumentLengthCheck(arguments,1,`${t}.forEach`),typeof a!="function")throw new TypeError(`Failed to execute 'forEach' on '${t}': parameter 1 is not of type 'Function'.`);for(let{0:g,1:l}of o(this,"key+value"))a.call(c,l,g,this)}}};return Object.defineProperties(e.prototype,{...n,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:n.entries.value}})}async function M0(t,e,r){let A=e,s=r,o;try{o=t.stream.getReader()}catch(n){s(n);return}try{A(await Rh(o))}catch(n){s(n)}}function v0(t){return t instanceof ReadableStream||t[Symbol.toStringTag]==="ReadableStream"&&typeof t.tee=="function"}function x0(t){try{t.close(),t.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}}var O0=/[^\x00-\xFF]/;function No(t){return Cr(!O0.test(t)),t}async function Rh(t){let e=[],r=0;for(;;){let{done:A,value:s}=await t.read();if(A)return Buffer.concat(e,r);if(!o0(s))throw new TypeError("Received non-Uint8Array chunk");e.push(s),r+=s.length}}function Y0(t){Cr("protocol"in t);let e=t.protocol;return e==="about:"||e==="blob:"||e==="data:"}function Va(t){return typeof t=="string"&&t[5]===":"&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&t[4]==="s"||t.protocol==="https:"}function Dh(t){Cr("protocol"in t);let e=t.protocol;return e==="http:"||e==="https:"}function _0(t,e){let r=t;if(!r.startsWith("bytes"))return"failure";let A={position:5};if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==61)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let s=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),o=s.length?Number(s):null;if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==45)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let n=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),i=n.length?Number(n):null;return A.positioni?"failure":{rangeStartValue:o,rangeEndValue:i}}function J0(t,e,r){let A="bytes ";return A+=No(`${t}`),A+="-",A+=No(`${e}`),A+="/",A+=No(`${r}`),A}var qa=class extends zD{#e;constructor(e){super(),this.#e=e}_transform(e,r,A){if(!this._inflateStream){if(e.length===0){A();return}this._inflateStream=(e[0]&15)===8?Qh.createInflate(this.#e):Qh.createInflateRaw(this.#e),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",s=>this.destroy(s))}this._inflateStream.write(e,r,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}};function P0(t){return new qa(t)}function H0(t){let e=null,r=null,A=null,s=Th("content-type",t);if(s===null)return"failure";for(let o of s){let n=e0(o);n==="failure"||n.essence==="*/*"||(A=n,A.essence!==r?(e=null,A.parameters.has("charset")&&(e=A.parameters.get("charset")),r=A.essence):!A.parameters.has("charset")&&e!==null&&A.parameters.set("charset",e))}return A??"failure"}function V0(t){let e=t,r={position:0},A=[],s="";for(;r.positiono!=='"'&&o!==",",e,r),r.positiono===9||o===32),A.push(s),s=""}return A}function Th(t,e){let r=e.get(t,!0);return r===null?null:V0(r)}var q0=new TextDecoder;function W0(t){return t.length===0?"":(t[0]===239&&t[1]===187&&t[2]===191&&(t=t.subarray(3)),q0.decode(t))}var Wa=class{get baseUrl(){return Bh()}get origin(){return this.baseUrl?.origin}policyContainer=mh()},za=class{settingsObject=new Wa},z0=new za;bh.exports={isAborted:F0,isCancelled:S0,isValidEncodedURL:fh,createDeferredPromise:k0,ReadableStreamFrom:A0,tryUpgradeRequestToAPotentiallyTrustworthyURL:b0,clampAndCoarsenConnectionTimingInfo:C0,coarsenedSharedCurrentTime:d0,determineRequestsReferrer:m0,makePolicyContainer:mh,clonePolicyContainer:p0,appendFetchMetadata:B0,appendRequestOriginHeader:I0,TAOCheck:Q0,corsCheck:h0,crossOriginResourcePolicyCheck:E0,createOpaqueTimingInfo:f0,setRequestReferrerPolicyOnRedirect:u0,isValidHTTPToken:Ih,requestBadPort:a0,requestCurrentURL:ns,responseURL:dh,responseLocationURL:n0,isBlobLike:r0,isURLPotentiallyTrustworthy:os,isValidReasonPhrase:g0,sameOrigin:Go,normalizeMethod:N0,serializeJavascriptValueToJSONString:U0,iteratorMixin:L0,createIterator:yh,isValidHeaderName:l0,isValidHeaderValue:ph,isErrorLike:c0,fullyReadBody:M0,bytesMatch:w0,isReadableStreamLike:v0,readableStreamClose:x0,isomorphicEncode:No,urlIsLocal:Y0,urlHasHttpsScheme:Va,urlIsHttpHttpsScheme:Dh,readAllBytes:Rh,simpleRangeHeaderValue:_0,buildContentRange:J0,parseMetadata:wh,createInflate:P0,extractMimeType:H0,getDecodeSplit:Th,utf8DecodeBytes:W0,environmentSettingsObject:z0}});var Pt=B((GJ,kh)=>{"use strict";kh.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var ja=B((LJ,Fh)=>{"use strict";var{Blob:Z0,File:j0}=require("node:buffer"),{kState:kt}=Pt(),{webidl:Et}=Qe(),Za=class t{constructor(e,r,A={}){let s=r,o=A.type,n=A.lastModified??Date.now();this[kt]={blobLike:e,name:s,type:o,lastModified:n}}stream(...e){return Et.brandCheck(this,t),this[kt].blobLike.stream(...e)}arrayBuffer(...e){return Et.brandCheck(this,t),this[kt].blobLike.arrayBuffer(...e)}slice(...e){return Et.brandCheck(this,t),this[kt].blobLike.slice(...e)}text(...e){return Et.brandCheck(this,t),this[kt].blobLike.text(...e)}get size(){return Et.brandCheck(this,t),this[kt].blobLike.size}get type(){return Et.brandCheck(this,t),this[kt].blobLike.type}get name(){return Et.brandCheck(this,t),this[kt].name}get lastModified(){return Et.brandCheck(this,t),this[kt].lastModified}get[Symbol.toStringTag](){return"File"}};Et.converters.Blob=Et.interfaceConverter(Z0);function K0(t){return t instanceof j0||t&&(typeof t.stream=="function"||typeof t.arrayBuffer=="function")&&t[Symbol.toStringTag]==="File"}Fh.exports={FileLike:Za,isFileLike:K0}});var as=B((MJ,Lh)=>{"use strict";var{isBlobLike:Lo,iteratorMixin:X0}=Ge(),{kState:fe}=Pt(),{kEnumerableProperty:oA}=M(),{FileLike:Sh,isFileLike:$0}=ja(),{webidl:z}=Qe(),{File:Gh}=require("node:buffer"),Nh=require("node:util"),Uh=globalThis.File??Gh,is=class t{constructor(e){if(z.util.markAsUncloneable(this),e!==void 0)throw z.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[fe]=[]}append(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.append";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"value",{strict:!1}):z.converters.USVString(r,s,"value"),A=arguments.length===3?z.converters.USVString(A,s,"filename"):void 0;let o=Ka(e,r,A);this[fe].push(o)}delete(e){z.brandCheck(this,t);let r="FormData.delete";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe]=this[fe].filter(A=>A.name!==e)}get(e){z.brandCheck(this,t);let r="FormData.get";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name");let A=this[fe].findIndex(s=>s.name===e);return A===-1?null:this[fe][A].value}getAll(e){z.brandCheck(this,t);let r="FormData.getAll";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].filter(A=>A.name===e).map(A=>A.value)}has(e){z.brandCheck(this,t);let r="FormData.has";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].findIndex(A=>A.name===e)!==-1}set(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.set";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"name",{strict:!1}):z.converters.USVString(r,s,"name"),A=arguments.length===3?z.converters.USVString(A,s,"name"):void 0;let o=Ka(e,r,A),n=this[fe].findIndex(i=>i.name===e);n!==-1?this[fe]=[...this[fe].slice(0,n),o,...this[fe].slice(n+1).filter(i=>i.name!==e)]:this[fe].push(o)}[Nh.inspect.custom](e,r){let A=this[fe].reduce((o,n)=>(o[n.name]?Array.isArray(o[n.name])?o[n.name].push(n.value):o[n.name]=[o[n.name],n.value]:o[n.name]=n.value,o),{__proto__:null});r.depth??=e,r.colors??=!0;let s=Nh.formatWithOptions(r,A);return`FormData ${s.slice(s.indexOf("]")+2)}`}};X0("FormData",is,fe,"name","value");Object.defineProperties(is.prototype,{append:oA,delete:oA,get:oA,getAll:oA,has:oA,set:oA,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function Ka(t,e,r){if(typeof e!="string"){if($0(e)||(e=e instanceof Blob?new Uh([e],"blob",{type:e.type}):new Sh(e,"blob",{type:e.type})),r!==void 0){let A={type:e.type,lastModified:e.lastModified};e=e instanceof Gh?new Uh([e],r,A):new Sh(e,r,A)}}return{name:t,value:e}}Lh.exports={FormData:is,makeEntry:Ka}});var _h=B((vJ,Yh)=>{"use strict";var{isUSVString:Mh,bufferToLowerCasedHeaderName:eT}=M(),{utf8DecodeBytes:tT}=Ge(),{HTTP_TOKEN_CODEPOINTS:rT,isomorphicDecode:vh}=Te(),{isFileLike:AT}=ja(),{makeEntry:sT}=as(),Mo=require("node:assert"),{File:oT}=require("node:buffer"),nT=globalThis.File??oT,iT=Buffer.from('form-data; name="'),xh=Buffer.from("; filename"),aT=Buffer.from("--"),cT=Buffer.from(`--\r +`);function gT(t){for(let e=0;e70)return!1;for(let r=0;r=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===39||A===45||A===95))return!1}return!0}function uT(t,e){Mo(e!=="failure"&&e.essence==="multipart/form-data");let r=e.parameters.get("boundary");if(r===void 0)return"failure";let A=Buffer.from(`--${r}`,"utf8"),s=[],o={position:0};for(;t[o.position]===13&&t[o.position+1]===10;)o.position+=2;let n=t.length;for(;t[n-1]===10&&t[n-2]===13;)n-=2;for(n!==t.length&&(t=t.subarray(0,n));;){if(t.subarray(o.position,o.position+A.length).equals(A))o.position+=A.length;else return"failure";if(o.position===t.length-2&&vo(t,aT,o)||o.position===t.length-4&&vo(t,cT,o))return s;if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let i=ET(t,o);if(i==="failure")return"failure";let{name:a,filename:c,contentType:g,encoding:l}=i;o.position+=2;let u;{let h=t.indexOf(A.subarray(2),o.position);if(h===-1)return"failure";u=t.subarray(o.position,h-4),o.position+=u.length,l==="base64"&&(u=Buffer.from(u.toString(),"base64"))}if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let E;c!==null?(g??="text/plain",gT(g)||(g=""),E=new nT([u],c,{type:g})):E=tT(Buffer.from(u)),Mo(Mh(a)),Mo(typeof E=="string"&&Mh(E)||AT(E)),s.push(sT(a,E,c))}}function ET(t,e){let r=null,A=null,s=null,o=null;for(;;){if(t[e.position]===13&&t[e.position+1]===10)return r===null?"failure":{name:r,filename:A,contentType:s,encoding:o};let n=nA(i=>i!==10&&i!==13&&i!==58,t,e);if(n=Xa(n,!0,!0,i=>i===9||i===32),!rT.test(n.toString())||t[e.position]!==58)return"failure";switch(e.position++,nA(i=>i===32||i===9,t,e),eT(n)){case"content-disposition":{if(r=A=null,!vo(t,iT,e)||(e.position+=17,r=Oh(t,e),r===null))return"failure";if(vo(t,xh,e)){let i=e.position+xh.length;if(t[i]===42&&(e.position+=1,i+=1),t[i]!==61||t[i+1]!==34||(e.position+=12,A=Oh(t,e),A===null))return"failure"}break}case"content-type":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),s=vh(i);break}case"content-transfer-encoding":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),o=vh(i);break}default:nA(i=>i!==10&&i!==13,t,e)}if(t[e.position]!==13&&t[e.position+1]!==10)return"failure";e.position+=2}}function Oh(t,e){Mo(t[e.position-1]===34);let r=nA(A=>A!==10&&A!==13&&A!==34,t,e);return t[e.position]!==34?null:(e.position++,r=new TextDecoder().decode(r).replace(/%0A/ig,` +`).replace(/%0D/ig,"\r").replace(/%22/g,'"'),r)}function nA(t,e,r){let A=r.position;for(;A0&&A(t[o]);)o--;return s===0&&o===t.length-1?t:t.subarray(s,o+1)}function vo(t,e,r){if(t.length{"use strict";var cs=M(),{ReadableStreamFrom:hT,isBlobLike:Jh,isReadableStreamLike:QT,readableStreamClose:BT,createDeferredPromise:IT,fullyReadBody:CT,extractMimeType:dT,utf8DecodeBytes:Vh}=Ge(),{FormData:Ph}=as(),{kState:aA}=Pt(),{webidl:fT}=Qe(),{Blob:pT}=require("node:buffer"),$a=require("node:assert"),{isErrored:qh,isDisturbed:mT}=require("node:stream"),{isArrayBuffer:wT}=require("node:util/types"),{serializeAMimeType:yT}=Te(),{multipartFormDataParser:RT}=_h(),ec;try{let t=require("node:crypto");ec=e=>t.randomInt(0,e)}catch{ec=t=>Math.floor(Math.random(t))}var xo=new TextEncoder;function DT(){}var Wh=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,zh;Wh&&(zh=new FinalizationRegistry(t=>{let e=t.deref();e&&!e.locked&&!mT(e)&&!qh(e)&&e.cancel("Response object has been garbage collected").catch(DT)}));function Zh(t,e=!1){let r=null;t instanceof ReadableStream?r=t:Jh(t)?r=t.stream():r=new ReadableStream({async pull(a){let c=typeof s=="string"?xo.encode(s):s;c.byteLength&&a.enqueue(c),queueMicrotask(()=>BT(a))},start(){},type:"bytes"}),$a(QT(r));let A=null,s=null,o=null,n=null;if(typeof t=="string")s=t,n="text/plain;charset=UTF-8";else if(t instanceof URLSearchParams)s=t.toString(),n="application/x-www-form-urlencoded;charset=UTF-8";else if(wT(t))s=new Uint8Array(t.slice());else if(ArrayBuffer.isView(t))s=new Uint8Array(t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength));else if(cs.isFormDataLike(t)){let a=`----formdata-undici-0${`${ec(1e11)}`.padStart(11,"0")}`,c=`--${a}\r +Content-Disposition: form-data`;let g=I=>I.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),l=I=>I.replace(/\r?\n|\r/g,`\r +`),u=[],E=new Uint8Array([13,10]);o=0;let h=!1;for(let[I,Q]of t)if(typeof Q=="string"){let f=xo.encode(c+`; name="${g(l(I))}"\r +\r +${l(Q)}\r +`);u.push(f),o+=f.byteLength}else{let f=xo.encode(`${c}; name="${g(l(I))}"`+(Q.name?`; filename="${g(Q.name)}"`:"")+`\r +Content-Type: ${Q.type||"application/octet-stream"}\r +\r +`);u.push(f,Q,E),typeof Q.size=="number"?o+=f.byteLength+Q.size+E.byteLength:h=!0}let C=xo.encode(`--${a}--\r +`);u.push(C),o+=C.byteLength,h&&(o=null),s=t,A=async function*(){for(let I of u)I.stream?yield*I.stream():yield I},n=`multipart/form-data; boundary=${a}`}else if(Jh(t))s=t,o=t.size,t.type&&(n=t.type);else if(typeof t[Symbol.asyncIterator]=="function"){if(e)throw new TypeError("keepalive");if(cs.isDisturbed(t)||t.locked)throw new TypeError("Response body object should not be disturbed or locked");r=t instanceof ReadableStream?t:hT(t)}if((typeof s=="string"||cs.isBuffer(s))&&(o=Buffer.byteLength(s)),A!=null){let a;r=new ReadableStream({async start(){a=A(t)[Symbol.asyncIterator]()},async pull(c){let{value:g,done:l}=await a.next();if(l)queueMicrotask(()=>{c.close(),c.byobRequest?.respond(0)});else if(!qh(r)){let u=new Uint8Array(g);u.byteLength&&c.enqueue(u)}return c.desiredSize>0},async cancel(c){await a.return()},type:"bytes"})}return[{stream:r,source:s,length:o},n]}function TT(t,e=!1){return t instanceof ReadableStream&&($a(!cs.isDisturbed(t),"The body has already been consumed."),$a(!t.locked,"The stream is locked.")),Zh(t,e)}function bT(t,e){let[r,A]=e.stream.tee();return e.stream=r,{stream:A,length:e.length,source:e.source}}function kT(t){if(t.aborted)throw new DOMException("The operation was aborted.","AbortError")}function FT(t){return{blob(){return iA(this,r=>{let A=Hh(this);return A===null?A="":A&&(A=yT(A)),new pT([r],{type:A})},t)},arrayBuffer(){return iA(this,r=>new Uint8Array(r).buffer,t)},text(){return iA(this,Vh,t)},json(){return iA(this,NT,t)},formData(){return iA(this,r=>{let A=Hh(this);if(A!==null)switch(A.essence){case"multipart/form-data":{let s=RT(r,A);if(s==="failure")throw new TypeError("Failed to parse body as FormData.");let o=new Ph;return o[aA]=s,o}case"application/x-www-form-urlencoded":{let s=new URLSearchParams(r.toString()),o=new Ph;for(let[n,i]of s)o.append(n,i);return o}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')},t)},bytes(){return iA(this,r=>new Uint8Array(r),t)}}}function ST(t){Object.assign(t.prototype,FT(t))}async function iA(t,e,r){if(fT.brandCheck(t,r),jh(t))throw new TypeError("Body is unusable: Body has already been read");kT(t[aA]);let A=IT(),s=n=>A.reject(n),o=n=>{try{A.resolve(e(n))}catch(i){s(i)}};return t[aA].body==null?(o(Buffer.allocUnsafe(0)),A.promise):(await CT(t[aA].body,o,s),A.promise)}function jh(t){let e=t[aA].body;return e!=null&&(e.stream.locked||cs.isDisturbed(e.stream))}function NT(t){return JSON.parse(Vh(t))}function Hh(t){let e=t[aA].headersList,r=dT(e);return r==="failure"?null:r}Kh.exports={extractBody:Zh,safelyExtractBody:TT,cloneBody:bT,mixinBody:ST,streamRegistry:zh,hasFinalizationRegistry:Wh,bodyUnusable:jh}});var EQ=B((OJ,uQ)=>{"use strict";var b=require("node:assert"),F=M(),{channels:Xh}=jr(),tc=Ma(),{RequestContentLengthMismatchError:dr,ResponseContentLengthMismatchError:$h,RequestAbortedError:iQ,InvalidArgumentError:UT,HeadersTimeoutError:GT,HeadersOverflowError:LT,SocketError:gA,InformationalError:lA,BodyTimeoutError:MT,HTTPParserError:vT,ResponseExceededMaxSizeError:xT}=Y(),{kUrl:aQ,kReset:be,kClient:Jo,kParser:j,kBlocking:us,kRunning:ce,kPending:cQ,kSize:eQ,kWriting:Ht,kQueue:et,kNoRef:gs,kKeepAliveDefaultTimeout:OT,kHostHeader:YT,kPendingIdx:_T,kRunningIdx:Ve,kError:pe,kPipelining:Po,kSocket:pr,kKeepAliveTimeoutValue:Vo,kMaxHeadersSize:rc,kKeepAliveMaxTimeout:JT,kKeepAliveTimeoutThreshold:PT,kHeadersTimeout:HT,kBodyTimeout:VT,kStrictContentLength:oc,kMaxRequests:tQ,kCounter:qT,kMaxResponseSize:WT,kOnError:rQ,kResume:Ft,kHTTPContext:gQ}=$(),Le=zE(),AQ=Buffer.alloc(0),Oo=Buffer[Symbol.species],Yo=F.addListener,zT=F.removeAllListeners,mr=Symbol("kIdleSocketValidation"),fr=Symbol("kIdleSocketValidationTimeout"),cc=Symbol("kSocketUsed"),Ac;async function ZT(){let t=process.env.JEST_WORKER_ID?Oa():void 0,e;try{e=await WebAssembly.compile(KE())}catch{e=await WebAssembly.compile(t||Oa())}return await WebAssembly.instantiate(e,{env:{wasm_on_url:(r,A,s)=>0,wasm_on_status:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onStatus(new Oo(ht.buffer,o,s))||0},wasm_on_message_begin:r=>(b(se.ptr===r),se.onMessageBegin()||0),wasm_on_header_field:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderField(new Oo(ht.buffer,o,s))||0},wasm_on_header_value:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderValue(new Oo(ht.buffer,o,s))||0},wasm_on_headers_complete:(r,A,s,o)=>(b(se.ptr===r),se.onHeadersComplete(A,!!s,!!o)||0),wasm_on_body:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onBody(new Oo(ht.buffer,o,s))||0},wasm_on_message_complete:r=>(b(se.ptr===r),se.onMessageComplete()||0)}})}var sc=null,nc=ZT();nc.catch();var se=null,ht=null,_o=0,Qt=null,jT=0,ls=1,uA=2|ls,Ho=4|ls,ic=8|jT,ac=class{constructor(e,r,{exports:A}){b(Number.isFinite(e[rc])&&e[rc]>0),this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Le.TYPE.RESPONSE),this.client=e,this.socket=r,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[rc],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[WT]}setTimeout(e,r){e!==this.timeoutValue||r&ls^this.timeoutType&ls?(this.timeout&&(tc.clearTimeout(this.timeout),this.timeout=null),e&&(r&ls?this.timeout=tc.setFastTimeout(sQ,e,new WeakRef(this)):(this.timeout=setTimeout(sQ,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=r}resume(){this.socket.destroyed||!this.paused||(b(this.ptr!=null),b(se==null),this.llhttp.llhttp_resume(this.ptr),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||AQ),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){b(this.ptr!=null),b(se==null),b(!this.paused);let{socket:r,llhttp:A}=this;e.length>_o&&(Qt&&A.free(Qt),_o=Math.ceil(e.length/4096)*4096,Qt=A.malloc(_o)),new Uint8Array(A.memory.buffer,Qt,_o).set(e);try{let s;try{ht=e,se=this,s=A.llhttp_execute(this.ptr,Qt,e.length)}catch(n){throw n}finally{se=null,ht=null}let o=A.llhttp_get_error_pos(this.ptr)-Qt;if(s!==Le.ERROR.OK){let n=e.subarray(o);if(s===Le.ERROR.PAUSED_UPGRADE)this.onUpgrade(n);else if(s===Le.ERROR.PAUSED)this.paused=!0,r.unshift(n);else throw this.createError(s,n)}}catch(s){F.destroy(r,s)}}finish(){b(se===null),b(this.ptr!=null),b(!this.paused);let{llhttp:e}=this,r;try{se=this,r=e.llhttp_finish(this.ptr)}finally{se=null}return r===Le.ERROR.OK?null:r===Le.ERROR.PAUSED||r===Le.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,AQ)}createError(e,r){let{llhttp:A,contentLength:s,bytesRead:o}=this;if(s&&o!==parseInt(s,10))return new $h;let n=A.llhttp_get_error_reason(this.ptr),i="";if(n){let a=new Uint8Array(A.memory.buffer,n).indexOf(0);i="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,n,a).toString()+")"}return new vT(i,Le.ERROR[e],r)}destroy(){b(this.ptr!=null),b(se==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&tc.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:r}=this;if(e.destroyed)return-1;if(r[ce]===0)return F.destroy(e,new gA("bad response",F.getSocketInfo(e))),-1;let A=r[et][r[Ve]];if(!A)return-1;A.onResponseStarted()}onHeaderField(e){let r=this.headers.length;(r&1)===0?this.headers.push(e):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]),this.trackHeader(e.length)}onHeaderValue(e){let r=this.headers.length;(r&1)===1?(this.headers.push(e),r+=1):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]);let A=this.headers[r-2];if(A.length===10){let s=F.bufferToLowerCasedHeaderName(A);s==="keep-alive"?this.keepAlive+=e.toString():s==="connection"&&(this.connection+=e.toString())}else A.length===14&&F.bufferToLowerCasedHeaderName(A)==="content-length"&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&F.destroy(this.socket,new LT)}onUpgrade(e){let{upgrade:r,client:A,socket:s,headers:o,statusCode:n}=this;b(r),b(A[pr]===s),b(!s.destroyed),b(!this.paused),b((o.length&1)===0);let i=A[et][A[Ve]];b(i),b(i.upgrade||i.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,s.unshift(e),s[j].destroy(),s[j]=null,s[Jo]=null,s[pe]=null,zT(s),A[pr]=null,A[gQ]=null,A[et][A[Ve]++]=null,A.emit("disconnect",A[aQ],[A],new lA("upgrade"));try{i.onUpgrade(n,o,s)}catch(a){F.destroy(s,a)}A[Ft]()}onHeadersComplete(e,r,A){let{client:s,socket:o,headers:n,statusText:i}=this;if(o.destroyed)return-1;if(s[ce]===0)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;let a=s[et][s[Ve]];if(!a)return-1;if(b(!this.upgrade),b(this.statusCode<200),e===100)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;if(r&&!a.upgrade)return F.destroy(o,new gA("bad upgrade",F.getSocketInfo(o))),-1;if(b(this.timeoutType===uA),this.statusCode=e,this.shouldKeepAlive=A||a.method==="HEAD"&&!o[be]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let g=a.bodyTimeout!=null?a.bodyTimeout:s[VT];this.setTimeout(g,Ho)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(a.method==="CONNECT")return b(s[ce]===1),this.upgrade=!0,2;if(r)return b(s[ce]===1),this.upgrade=!0,2;if(b((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&s[Po]){let g=this.keepAlive?F.parseKeepAliveTimeout(this.keepAlive):null;if(g!=null){let l=Math.min(g-s[PT],s[JT]);l<=0?o[be]=!0:s[Vo]=l}else s[Vo]=s[OT]}else o[be]=!0;let c=a.onHeaders(e,n,this.resume,i)===!1;return a.aborted?-1:a.method==="HEAD"||e<200?1:(o[us]&&(o[us]=!1,s[Ft]()),c?Le.ERROR.PAUSED:0)}onBody(e){let{client:r,socket:A,statusCode:s,maxResponseSize:o}=this;if(A.destroyed)return-1;let n=r[et][r[Ve]];if(b(n),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),b(s>=200),o>-1&&this.bytesRead+e.length>o)return F.destroy(A,new xT),-1;if(this.bytesRead+=e.length,n.onData(e)===!1)return Le.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:r,statusCode:A,upgrade:s,headers:o,contentLength:n,bytesRead:i,shouldKeepAlive:a}=this;if(r.destroyed&&(!A||a))return-1;if(s)return;b(A>=100),b((this.headers.length&1)===0);let c=e[et][e[Ve]];if(b(c),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,!(A<200)){if(c.method!=="HEAD"&&n&&i!==parseInt(n,10))return F.destroy(r,new $h),-1;if(c.onComplete(o),e[et][e[Ve]++]=null,r[cc]=!0,r[Ht])return b(e[ce]===0),F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;if(a){if(r[be]&&e[ce]===0)return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;e[Po]==null||e[Po]===1?setImmediate(()=>e[Ft]()):e[Ft]()}else return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED}}};function sQ(t){let{socket:e,timeoutType:r,client:A,paused:s}=t.deref();r===uA?(!e[Ht]||e.writableNeedDrain||A[ce]>1)&&(b(!s,"cannot be paused while waiting for headers"),F.destroy(e,new GT)):r===Ho?s||F.destroy(e,new MT):r===ic&&(b(A[ce]===0&&A[Vo]),F.destroy(e,new lA("socket idle timeout")))}async function KT(t,e){t[pr]=e,sc||(sc=await nc,nc=null),e[gs]=!1,e[Ht]=!1,e[be]=!1,e[us]=!1,e[mr]=0,e[fr]=null,e[cc]=!1,e[j]=new ac(t,e,sc),Yo(e,"error",function(A){b(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let s=this[j];if(A.code==="ECONNRESET"&&s.statusCode&&!s.shouldKeepAlive){let o=s.finish();o&&(this[pe]=o,this[Jo][rQ](o));return}this[pe]=A,this[Jo][rQ](A)}),Yo(e,"readable",function(){let A=this[j];A&&A.readMore()}),Yo(e,"end",function(){let A=this[j];if(A.statusCode&&!A.shouldKeepAlive){let s=A.finish();s&&F.destroy(this,s);return}F.destroy(this,new gA("other side closed",F.getSocketInfo(this)))}),Yo(e,"close",function(){let A=this[Jo],s=this[j];lQ(this),s&&(!this[pe]&&s.statusCode&&!s.shouldKeepAlive&&(this[pe]=s.finish()||this[pe]),this[j].destroy(),this[j]=null);let o=this[pe]||new gA("closed",F.getSocketInfo(this));if(A[pr]=null,A[gQ]=null,A.destroyed){b(A[cQ]===0);let n=A[et].splice(A[Ve]);for(let i=0;i0&&o.code!=="UND_ERR_INFO"){let n=A[et][A[Ve]];A[et][A[Ve]++]=null,F.errorRequest(A,n,o)}A[_T]=A[Ve],b(A[ce]===0),A.emit("disconnect",A[aQ],[A],o),A[Ft]()});let r=!1;return e.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...A){return tb(t,...A)},resume(){$T(t)},destroy(A,s){r?queueMicrotask(s):e.destroy(A).on("close",s)},get destroyed(){return e.destroyed},busy(A){return!!(e[Ht]||e[be]||e[us]||e[mr]===1||A&&(t[ce]>0&&!A.idempotent||t[ce]>0&&(A.upgrade||A.method==="CONNECT")||t[ce]>0&&F.bodyLength(A.body)!==0&&(F.isStream(A.body)||F.isAsyncIterable(A.body)||F.isFormDataLike(A.body))))}}}function lQ(t){t[fr]&&(clearTimeout(t[fr]),t[fr]=null),t[mr]=0}function XT(t,e){e[mr]=1,e[fr]=setTimeout(()=>{e[fr]=null,e[mr]=2,t[pr]===e&&!e.destroyed&&t[Ft]()},0),e[fr].unref?.()}function $T(t){let e=t[pr];if(e&&!e.destroyed){if(t[eQ]===0?!e[gs]&&e.unref&&(e.unref(),e[gs]=!0):e[gs]&&e.ref&&(e.ref(),e[gs]=!1),t[ce]===0&&t[cQ]>0&&e[cc]){if(e[mr]===0)return XT(t,e),e[j].readMore(),e.destroyed,void 0;if(e[mr]===1)return e[j].readMore(),e.destroyed,void 0}if(t[ce]===0&&(e[j].readMore(),e.destroyed))return;if(t[eQ]===0)e[j].timeoutType!==ic&&e[j].setTimeout(t[Vo],ic);else if(t[ce]>0&&e[j].statusCode<200&&e[j].timeoutType!==uA){let r=t[et][t[Ve]],A=r.headersTimeout!=null?r.headersTimeout:t[HT];e[j].setTimeout(A,uA)}}}function eb(t){return t!=="GET"&&t!=="HEAD"&&t!=="OPTIONS"&&t!=="TRACE"&&t!=="CONNECT"}function tb(t,e){let{method:r,path:A,host:s,upgrade:o,blocking:n,reset:i}=e,{body:a,headers:c,contentLength:g}=e,l=r==="PUT"||r==="POST"||r==="PATCH"||r==="QUERY"||r==="PROPFIND"||r==="PROPPATCH";if(F.isFormDataLike(a)){Ac||(Ac=cA().extractBody);let[I,Q]=Ac(a);e.contentType==null&&c.push("content-type",Q),a=I.stream,g=I.length}else if(F.isBlobLike(a)&&e.contentType==null){let I=a.type;if(I){let Q=`${I}`;if(!F.isValidHeaderValue(Q))return F.errorRequest(t,e,new UT("invalid content-type header")),!1;c.push("content-type",Q)}}a&&typeof a.read=="function"&&a.read(0);let u=F.bodyLength(a);if(g=u??g,g===null&&(g=e.contentLength),g===0&&!l&&(g=null),eb(r)&&g>0&&e.contentLength!==null&&e.contentLength!==g){if(t[oc])return F.errorRequest(t,e,new dr),!1;process.emitWarning(new dr)}let E=t[pr];lQ(E);let h=I=>{e.aborted||e.completed||(F.errorRequest(t,e,I||new iQ),F.destroy(a),F.destroy(E,new lA("aborted")))};try{e.onConnect(h)}catch(I){F.errorRequest(t,e,I)}if(e.aborted)return!1;r==="HEAD"&&(E[be]=!0),(o||r==="CONNECT")&&(E[be]=!0),i!=null&&(E[be]=i),t[tQ]&&E[qT]++>=t[tQ]&&(E[be]=!0),n&&(E[us]=!0);let C=`${r} ${A} HTTP/1.1\r +`;if(typeof s=="string"?C+=`host: ${s}\r +`:C+=t[YT],o?C+=`connection: upgrade\r +upgrade: ${o}\r +`:t[Po]&&!E[be]?C+=`connection: keep-alive\r +`:C+=`connection: close\r +`,Array.isArray(c))for(let I=0;I{e.removeListener("error",E)}),!a){let h=new iQ;queueMicrotask(()=>E(h))}},E=function(h){if(!a){if(a=!0,b(s.destroyed||s[Ht]&&r[ce]<=1),s.off("drain",l).off("error",E),e.removeListener("data",g).removeListener("end",E).removeListener("close",u),!h)try{c.end()}catch(C){h=C}c.destroy(h),h&&(h.code!=="UND_ERR_INFO"||h.message!=="reset")?F.destroy(e,h):F.destroy(e)}};e.on("data",g).on("end",E).on("error",E).on("close",u),e.resume&&e.resume(),s.on("drain",l).on("error",E),e.errorEmitted??e.errored?setImmediate(()=>E(e.errored)):(e.endEmitted??e.readableEnded)&&setImmediate(()=>E(null)),(e.closeEmitted??e.closed)&&setImmediate(u)}function oQ(t,e,r,A,s,o,n,i){try{e?F.isBuffer(e)&&(b(o===e.byteLength,"buffer body must have content length"),s.cork(),s.write(`${n}content-length: ${o}\r +\r +`,"latin1"),s.write(e),s.uncork(),A.onBodySent(e),!i&&A.reset!==!1&&(s[be]=!0)):o===0?s.write(`${n}content-length: 0\r +\r +`,"latin1"):(b(o===null,"no body must not have content length"),s.write(`${n}\r +`,"latin1")),A.onRequestSent(),r[Ft]()}catch(a){t(a)}}async function Ab(t,e,r,A,s,o,n,i){b(o===e.size,"blob body must have content length");try{if(o!=null&&o!==e.size)throw new dr;let a=Buffer.from(await e.arrayBuffer());s.cork(),s.write(`${n}content-length: ${o}\r +\r +`,"latin1"),s.write(a),s.uncork(),A.onBodySent(a),A.onRequestSent(),!i&&A.reset!==!1&&(s[be]=!0),r[Ft]()}catch(a){t(a)}}async function nQ(t,e,r,A,s,o,n,i){b(o!==0||r[ce]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let u=a;a=null,u()}}let g=()=>new Promise((u,E)=>{b(a===null),s[pe]?E(s[pe]):a=u});s.on("close",c).on("drain",c);let l=new qo({abort:t,socket:s,request:A,contentLength:o,client:r,expectsPayload:i,header:n});try{for await(let u of e){if(s[pe])throw s[pe];l.write(u)||await g()}l.end()}catch(u){l.destroy(u)}finally{s.off("close",c).off("drain",c)}}var qo=class{constructor({abort:e,socket:r,request:A,contentLength:s,client:o,expectsPayload:n,header:i}){this.socket=r,this.request=A,this.contentLength=s,this.client=o,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,r[Ht]=!0}write(e){let{socket:r,request:A,contentLength:s,client:o,bytesWritten:n,expectsPayload:i,header:a}=this;if(r[pe])throw r[pe];if(r.destroyed)return!1;let c=Buffer.byteLength(e);if(!c)return!0;if(s!==null&&n+c>s){if(o[oc])throw new dr;process.emitWarning(new dr)}r.cork(),n===0&&(!i&&A.reset!==!1&&(r[be]=!0),s===null?r.write(`${a}transfer-encoding: chunked\r +`,"latin1"):r.write(`${a}content-length: ${s}\r +\r +`,"latin1")),s===null&&r.write(`\r +${c.toString(16)}\r +`,"latin1"),this.bytesWritten+=c;let g=r.write(e);return r.uncork(),A.onBodySent(e),g||r[j].timeout&&r[j].timeoutType===uA&&r[j].timeout.refresh&&r[j].timeout.refresh(),g}end(){let{socket:e,contentLength:r,client:A,bytesWritten:s,expectsPayload:o,header:n,request:i}=this;if(i.onRequestSent(),e[Ht]=!1,e[pe])throw e[pe];if(!e.destroyed){if(s===0?o?e.write(`${n}content-length: 0\r +\r +`,"latin1"):e.write(`${n}\r +`,"latin1"):r===null&&e.write(`\r +0\r +\r +`,"latin1"),r!==null&&s!==r){if(A[oc])throw new dr;process.emitWarning(new dr)}e[j].timeout&&e[j].timeoutType===uA&&e[j].timeout.refresh&&e[j].timeout.refresh(),A[Ft]()}}destroy(e){let{socket:r,client:A,abort:s}=this;r[Ht]=!1,e&&(b(A[ce]<=1,"pipeline should only contain this request"),s(e))}};uQ.exports=KT});var pQ=B((YJ,fQ)=>{"use strict";var qe=require("node:assert"),{pipeline:sb}=require("node:stream"),v=M(),{RequestContentLengthMismatchError:gc,RequestAbortedError:hQ,SocketError:Es,InformationalError:lc}=Y(),{kUrl:Wo,kReset:Zo,kClient:EA,kRunning:jo,kPending:ob,kQueue:Vt,kPendingIdx:uc,kRunningIdx:tt,kError:At,kSocket:he,kStrictContentLength:nb,kOnError:Ec,kMaxConcurrentStreams:dQ,kHTTP2Session:rt,kResume:qt,kSize:ib,kHTTPContext:ab}=$(),St=Symbol("open streams"),QQ,BQ=!1,zo;try{zo=require("node:http2")}catch{zo={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:cb,HTTP2_HEADER_METHOD:gb,HTTP2_HEADER_PATH:lb,HTTP2_HEADER_SCHEME:ub,HTTP2_HEADER_CONTENT_LENGTH:Eb,HTTP2_HEADER_EXPECT:hb,HTTP2_HEADER_STATUS:Qb}}=zo;function Bb(t){let e=[];for(let[r,A]of Object.entries(t))if(Array.isArray(A))for(let s of A)e.push(Buffer.from(r),Buffer.from(s));else e.push(Buffer.from(r),Buffer.from(A));return e}async function Ib(t,e){t[he]=e,BQ||(BQ=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=zo.connect(t[Wo],{createConnection:()=>e,peerMaxConcurrentStreams:t[dQ]});r[St]=0,r[EA]=t,r[he]=e,v.addListener(r,"error",db),v.addListener(r,"frameError",fb),v.addListener(r,"end",pb),v.addListener(r,"goaway",mb),v.addListener(r,"close",function(){let{[EA]:s}=this,{[he]:o}=s,n=this[he][At]||this[At]||new Es("closed",v.getSocketInfo(o));if(s[rt]=null,s.destroyed){qe(s[ob]===0);let i=s[Vt].splice(s[tt]);for(let a=0;a{A=!0}),{version:"h2",defaultPipelining:1/0,write(...s){return yb(t,...s)},resume(){Cb(t)},destroy(s,o){A?queueMicrotask(o):e.destroy(s).on("close",o)},get destroyed(){return e.destroyed},busy(){return!1}}}function Cb(t){let e=t[he];e?.destroyed===!1&&(t[ib]===0&&t[dQ]===0?(e.unref(),t[rt].unref()):(e.ref(),t[rt].ref()))}function db(t){qe(t.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[he][At]=t,this[EA][Ec](t)}function fb(t,e,r){if(r===0){let A=new lc(`HTTP/2: "frameError" received - type ${t}, code ${e}`);this[he][At]=A,this[EA][Ec](A)}}function pb(){let t=new Es("other side closed",v.getSocketInfo(this[he]));this.destroy(t),v.destroy(this[he],t)}function mb(t){let e=this[At]||new Es(`HTTP/2: "GOAWAY" frame received with code ${t}`,v.getSocketInfo(this)),r=this[EA];if(r[he]=null,r[ab]=null,this[rt]!=null&&(this[rt].destroy(e),this[rt]=null),v.destroy(this[he],e),r[tt]{e.aborted||e.completed||(y=y||new hQ,v.errorRequest(t,e,y),u!=null&&v.destroy(u,y),v.destroy(g,y),t[Vt][t[tt]++]=null,t[qt]())};try{e.onConnect(C)}catch(y){v.errorRequest(t,e,y)}if(e.aborted)return!1;if(A==="CONNECT")return r.ref(),u=r.request(l,{endStream:!1,signal:a}),u.id&&!u.pending?(e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null):u.once("ready",()=>{e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),!0;l[lb]=s,l[ub]="https";let I=A==="PUT"||A==="POST"||A==="PATCH";g&&typeof g.read=="function"&&g.read(0);let Q=v.bodyLength(g);if(v.isFormDataLike(g)){QQ??=cA().extractBody;let[y,P]=QQ(g);l["content-type"]=P,g=y.stream,Q=y.length}if(Q==null&&(Q=e.contentLength),(Q===0||!I)&&(Q=null),wb(A)&&Q>0&&e.contentLength!=null&&e.contentLength!==Q){if(t[nb])return v.errorRequest(t,e,new gc),!1;process.emitWarning(new gc)}Q!=null&&(qe(g,"no body must not have content length"),l[Eb]=`${Q}`),r.ref();let f=A==="GET"||A==="HEAD"||g===null;return i?(l[hb]="100-continue",u=r.request(l,{endStream:f,signal:a}),u.once("continue",R)):(u=r.request(l,{endStream:f,signal:a}),R()),++r[St],u.once("response",y=>{let{[Qb]:P,...Z}=y;if(e.onResponseStarted(),e.aborted){let Ae=new hQ;v.errorRequest(t,e,Ae),v.destroy(u,Ae);return}e.onHeaders(Number(P),Bb(Z),u.resume.bind(u),"")===!1&&u.pause(),u.on("data",Ae=>{e.onData(Ae)===!1&&u.pause()})}),u.once("end",()=>{(u.state?.state==null||u.state.state<6)&&e.onComplete([]),r[St]===0&&r.unref(),C(new lc("HTTP/2: stream half-closed (remote)")),t[Vt][t[tt]++]=null,t[uc]=t[tt],t[qt]()}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),u.once("error",function(y){C(y)}),u.once("frameError",(y,P)=>{C(new lc(`HTTP/2: "frameError" received - type ${y}, code ${P}`))}),!0;function R(){!g||Q===0?IQ(C,u,null,t,e,t[he],Q,I):v.isBuffer(g)?IQ(C,u,g,t,e,t[he],Q,I):v.isBlobLike(g)?typeof g.stream=="function"?CQ(C,u,g.stream(),t,e,t[he],Q,I):Db(C,u,g,t,e,t[he],Q,I):v.isStream(g)?Rb(C,t[he],I,u,g,t,e,Q):v.isIterable(g)?CQ(C,u,g,t,e,t[he],Q,I):qe(!1)}}function IQ(t,e,r,A,s,o,n,i){try{r!=null&&v.isBuffer(r)&&(qe(n===r.byteLength,"buffer body must have content length"),e.cork(),e.write(r),e.uncork(),e.end(),s.onBodySent(r)),i||(o[Zo]=!0),s.onRequestSent(),A[qt]()}catch(a){t(a)}}function Rb(t,e,r,A,s,o,n,i){qe(i!==0||o[jo]===0,"stream body cannot be pipelined");let a=sb(s,A,g=>{g?(v.destroy(a,g),t(g)):(v.removeAllListeners(a),n.onRequestSent(),r||(e[Zo]=!0),o[qt]())});v.addListener(a,"data",c);function c(g){n.onBodySent(g)}}async function Db(t,e,r,A,s,o,n,i){qe(n===r.size,"blob body must have content length");try{if(n!=null&&n!==r.size)throw new gc;let a=Buffer.from(await r.arrayBuffer());e.cork(),e.write(a),e.uncork(),e.end(),s.onBodySent(a),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(a){t(a)}}async function CQ(t,e,r,A,s,o,n,i){qe(n!==0||A[jo]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let l=a;a=null,l()}}let g=()=>new Promise((l,u)=>{qe(a===null),o[At]?u(o[At]):a=l});e.on("close",c).on("drain",c);try{for await(let l of r){if(o[At])throw o[At];let u=e.write(l);s.onBodySent(l),u||await g()}e.end(),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(l){t(l)}finally{e.off("close",c).off("drain",c)}}fQ.exports=Ib});var Xo=B((_J,yQ)=>{"use strict";var Bt=M(),{kBodyUsed:hs}=$(),Qc=require("node:assert"),{InvalidArgumentError:Tb}=Y(),bb=require("node:events"),kb=[300,301,302,303,307,308],mQ=Symbol("body"),Ko=class{constructor(e){this[mQ]=e,this[hs]=!1}async*[Symbol.asyncIterator](){Qc(!this[hs],"disturbed"),this[hs]=!0,yield*this[mQ]}},hc=class{constructor(e,r,A,s){if(r!=null&&(!Number.isInteger(r)||r<0))throw new Tb("maxRedirections must be a positive number");Bt.validateHandler(s,A.method,A.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...A,maxRedirections:0},this.maxRedirections=r,this.handler=s,this.history=[],this.redirectionLimitReached=!1,Bt.isStream(this.opts.body)?(Bt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){Qc(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[hs]=!1,bb.prototype.on.call(this.opts.body,"data",function(){this[hs]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Ko(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Bt.isIterable(this.opts.body)&&(this.opts.body=new Ko(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,r,A){this.handler.onUpgrade(e,r,A)}onError(e){this.handler.onError(e)}onHeaders(e,r,A,s){if(this.location=this.history.length>=this.maxRedirections||Bt.isDisturbed(this.opts.body)?null:Fb(e,r),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(new Error("max redirects")),this.redirectionLimitReached=!0,this.abort(new Error("max redirects"));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,r,A,s);let{origin:o,pathname:n,search:i}=Bt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),a=i?`${n}${i}`:n;this.opts.headers=Sb(this.opts.headers,e===303,this.opts.origin!==o),this.opts.path=a,this.opts.origin=o,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!=="HEAD"&&(this.opts.method="GET",this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function Fb(t,e){if(kb.indexOf(t)===-1)return null;for(let r=0;r{"use strict";var Nb=Xo();function Ub({maxRedirections:t}){return e=>function(A,s){let{maxRedirections:o=t}=A;if(!o)return e(A,s);let n=new Nb(e,o,A,s);return A={...A,maxRedirections:0},e(A,n)}}RQ.exports=Ub});var BA=B((PJ,LQ)=>{"use strict";var Nt=require("node:assert"),SQ=require("node:net"),Gb=require("node:http"),wr=M(),{channels:hA}=jr(),Lb=LE(),Mb=eA(),{InvalidArgumentError:oe,InformationalError:vb,ClientDestroyedError:xb}=Y(),Ob=ts(),{kUrl:It,kServerName:Wt,kClient:Yb,kBusy:Bc,kConnect:_b,kResuming:yr,kRunning:ds,kPending:fs,kSize:Cs,kQueue:st,kConnected:Jb,kConnecting:QA,kNeedDrain:Zt,kKeepAliveDefaultTimeout:DQ,kHostHeader:Pb,kPendingIdx:ot,kRunningIdx:Ut,kError:Hb,kPipelining:en,kKeepAliveTimeoutValue:Vb,kMaxHeadersSize:qb,kKeepAliveMaxTimeout:Wb,kKeepAliveTimeoutThreshold:zb,kHeadersTimeout:Zb,kBodyTimeout:jb,kStrictContentLength:Kb,kConnector:Qs,kMaxRedirections:Xb,kMaxRequests:Ic,kCounter:$b,kClose:ek,kDestroy:tk,kDispatch:rk,kInterceptors:TQ,kLocalAddress:Bs,kMaxResponseSize:Ak,kOnError:sk,kHTTPContext:ne,kMaxConcurrentStreams:ok,kResume:Is}=$(),nk=EQ(),ik=pQ(),bQ=!1,zt=Symbol("kClosedResolve"),kQ=()=>{};function NQ(t){return t[en]??t[ne]?.defaultPipelining??1}var Cc=class extends Mb{constructor(e,{interceptors:r,maxHeaderSize:A,headersTimeout:s,socketTimeout:o,requestTimeout:n,connectTimeout:i,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:l,maxKeepAliveTimeout:u,keepAliveMaxTimeout:E,keepAliveTimeoutThreshold:h,socketPath:C,pipelining:I,tls:Q,strictContentLength:f,maxCachedSessions:R,maxRedirections:y,connect:P,maxRequestsPerClient:Z,localAddress:Ae,maxResponseSize:gt,autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr,maxConcurrentStreams:_t,allowH2:De,webSocket:qr}={}){if(super({webSocket:qr}),g!==void 0)throw new oe("unsupported keepAlive, use pipelining=0 instead");if(o!==void 0)throw new oe("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(n!==void 0)throw new oe("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new oe("unsupported idleTimeout, use keepAliveTimeout instead");if(u!==void 0)throw new oe("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(A!=null&&!Number.isFinite(A))throw new oe("invalid maxHeaderSize");if(C!=null&&typeof C!="string")throw new oe("invalid socketPath");if(i!=null&&(!Number.isFinite(i)||i<0))throw new oe("invalid connectTimeout");if(l!=null&&(!Number.isFinite(l)||l<=0))throw new oe("invalid keepAliveTimeout");if(E!=null&&(!Number.isFinite(E)||E<=0))throw new oe("invalid keepAliveMaxTimeout");if(h!=null&&!Number.isFinite(h))throw new oe("invalid keepAliveTimeoutThreshold");if(s!=null&&(!Number.isInteger(s)||s<0))throw new oe("headersTimeout must be a positive integer or zero");if(a!=null&&(!Number.isInteger(a)||a<0))throw new oe("bodyTimeout must be a positive integer or zero");if(P!=null&&typeof P!="function"&&typeof P!="object")throw new oe("connect must be a function or an object");if(y!=null&&(!Number.isInteger(y)||y<0))throw new oe("maxRedirections must be a positive number");if(Z!=null&&(!Number.isInteger(Z)||Z<0))throw new oe("maxRequestsPerClient must be a positive number");if(Ae!=null&&(typeof Ae!="string"||SQ.isIP(Ae)===0))throw new oe("localAddress must be valid string IP address");if(gt!=null&&(!Number.isInteger(gt)||gt<-1))throw new oe("maxResponseSize must be a positive number");if(Vr!=null&&(!Number.isInteger(Vr)||Vr<-1))throw new oe("autoSelectFamilyAttemptTimeout must be a positive number");if(De!=null&&typeof De!="boolean")throw new oe("allowH2 must be a valid boolean value");if(_t!=null&&(typeof _t!="number"||_t<1))throw new oe("maxConcurrentStreams must be a positive integer, greater than 0");typeof P!="function"&&(P=Ob({...Q,maxCachedSessions:R,allowH2:De,socketPath:C,timeout:i,...wt?{autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr}:void 0,...P})),r?.Client&&Array.isArray(r.Client)?(this[TQ]=r.Client,bQ||(bQ=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[TQ]=[ak({maxRedirections:y})],this[It]=wr.parseOrigin(e),this[Qs]=P,this[en]=I??1,this[qb]=A||Gb.maxHeaderSize,this[DQ]=l??4e3,this[Wb]=E??6e5,this[zb]=h??2e3,this[Vb]=this[DQ],this[Wt]=null,this[Bs]=Ae??null,this[yr]=0,this[Zt]=0,this[Pb]=`host: ${this[It].hostname}${this[It].port?`:${this[It].port}`:""}\r +`,this[jb]=a??3e5,this[Zb]=s??3e5,this[Kb]=f??!0,this[Xb]=y,this[Ic]=Z,this[zt]=null,this[Ak]=gt>-1?gt:-1,this[ok]=_t??100,this[ne]=null,this[st]=[],this[Ut]=0,this[ot]=0,this[Is]=Wr=>dc(this,Wr),this[sk]=Wr=>UQ(this,Wr)}get pipelining(){return this[en]}set pipelining(e){this[en]=e,this[Is](!0)}get[fs](){return this[st].length-this[ot]}get[ds](){return this[ot]-this[Ut]}get[Cs](){return this[st].length-this[Ut]}get[Jb](){return!!this[ne]&&!this[QA]&&!this[ne].destroyed}get[Bc](){return!!(this[ne]?.busy(null)||this[Cs]>=(NQ(this)||1)||this[fs]>0)}[_b](e){GQ(this),this.once("connect",e)}[rk](e,r){let A=e.origin||this[It].origin,s=new Lb(A,e,r);return this[st].push(s),this[yr]||(wr.bodyLength(s.body)==null&&wr.isIterable(s.body)?(this[yr]=1,queueMicrotask(()=>dc(this))):this[Is](!0)),this[yr]&&this[Zt]!==2&&this[Bc]&&(this[Zt]=2),this[Zt]<2}async[ek](){return new Promise(e=>{this[Cs]?this[zt]=e:e(null)})}async[tk](e){return new Promise(r=>{let A=this[st].splice(this[ot]);for(let o=0;o{this[zt]&&(this[zt](),this[zt]=null),r(null)};this[ne]?(this[ne].destroy(e,s),this[ne]=null):queueMicrotask(s),this[Is]()})}},ak=$o();function UQ(t,e){if(t[ds]===0&&e.code!=="UND_ERR_INFO"&&e.code!=="UND_ERR_SOCKET"){Nt(t[ot]===t[Ut]);let r=t[st].splice(t[Ut]);for(let A=0;A{t[Qs]({host:e,hostname:r,protocol:A,port:s,servername:t[Wt],localAddress:t[Bs]},(a,c)=>{a?i(a):n(c)})});if(t.destroyed){wr.destroy(o.on("error",kQ),new xb);return}Nt(o);try{t[ne]=o.alpnProtocol==="h2"?await ik(t,o):await nk(t,o)}catch(n){throw o.destroy().on("error",kQ),n}t[QA]=!1,o[$b]=0,o[Ic]=t[Ic],o[Yb]=t,o[Hb]=null,hA.connected.hasSubscribers&&hA.connected.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],socket:o}),t.emit("connect",t[It],[t])}catch(o){if(t.destroyed)return;if(t[QA]=!1,hA.connectError.hasSubscribers&&hA.connectError.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],error:o}),o.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(Nt(t[ds]===0);t[fs]>0&&t[st][t[ot]].servername===t[Wt];){let n=t[st][t[ot]++];wr.errorRequest(t,n,o)}else UQ(t,o);t.emit("connectionError",t[It],[t],o)}t[Is]()}function FQ(t){t[Zt]=0,t.emit("drain",t[It],[t])}function dc(t,e){t[yr]!==2&&(t[yr]=2,ck(t,e),t[yr]=0,t[Ut]>256&&(t[st].splice(0,t[Ut]),t[ot]-=t[Ut],t[Ut]=0))}function ck(t,e){for(;;){if(t.destroyed){Nt(t[fs]===0);return}if(t[zt]&&!t[Cs]){t[zt](),t[zt]=null;return}if(t[ne]&&t[ne].resume(),t[Bc])t[Zt]=2;else if(t[Zt]===2){e?(t[Zt]=1,queueMicrotask(()=>FQ(t))):FQ(t);continue}if(t[fs]===0||t[ds]>=(NQ(t)||1))return;let r=t[st][t[ot]];if(t[It].protocol==="https:"&&t[Wt]!==r.servername){if(t[ds]>0)return;t[Wt]=r.servername,t[ne]?.destroy(new vb("servername changed"),()=>{t[ne]=null,dc(t)})}if(t[QA])return;if(!t[ne]){GQ(t);return}if(t[ne].destroyed||t[ne].busy(r))return;!r.aborted&&t[ne].write(r)?t[ot]++:t[st].splice(t[ot],1)}}LQ.exports=Cc});var fc=B((VJ,MQ)=>{"use strict";var tn=class{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&2047}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,e)}};MQ.exports=class{constructor(){this.head=this.tail=new tn}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new tn),this.head.push(e)}shift(){let e=this.tail,r=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),r}}});var xQ=B((qJ,vQ)=>{var{kFree:gk,kConnected:lk,kPending:uk,kQueued:Ek,kRunning:hk,kSize:Qk}=$(),Rr=Symbol("pool"),pc=class{constructor(e){this[Rr]=e}get connected(){return this[Rr][lk]}get free(){return this[Rr][gk]}get pending(){return this[Rr][uk]}get queued(){return this[Rr][Ek]}get running(){return this[Rr][hk]}get size(){return this[Rr][Qk]}};vQ.exports=pc});var Tc=B((WJ,zQ)=>{"use strict";var Bk=eA(),Ik=fc(),{kConnected:mc,kSize:OQ,kRunning:YQ,kPending:_Q,kQueued:ps,kBusy:Ck,kFree:dk,kUrl:fk,kClose:pk,kDestroy:mk,kDispatch:wk}=$(),yk=xQ(),ke=Symbol("clients"),me=Symbol("needDrain"),ms=Symbol("queue"),wc=Symbol("closed resolve"),yc=Symbol("onDrain"),JQ=Symbol("onConnect"),PQ=Symbol("onDisconnect"),HQ=Symbol("onConnectionError"),Rc=Symbol("get dispatcher"),qQ=Symbol("add client"),WQ=Symbol("remove client"),VQ=Symbol("stats"),Dc=class extends Bk{constructor(e){super(e),this[ms]=new Ik,this[ke]=[],this[ps]=0;let r=this;this[yc]=function(s,o){let n=r[ms],i=!1;for(;!i;){let a=n.shift();if(!a)break;r[ps]--,i=!this.dispatch(a.opts,a.handler)}this[me]=i,!this[me]&&r[me]&&(r[me]=!1,r.emit("drain",s,[r,...o])),r[wc]&&n.isEmpty()&&Promise.all(r[ke].map(a=>a.close())).then(r[wc])},this[JQ]=(A,s)=>{r.emit("connect",A,[r,...s])},this[PQ]=(A,s,o)=>{r.emit("disconnect",A,[r,...s],o)},this[HQ]=(A,s,o)=>{r.emit("connectionError",A,[r,...s],o)},this[VQ]=new yk(this)}get[Ck](){return this[me]}get[mc](){return this[ke].filter(e=>e[mc]).length}get[dk](){return this[ke].filter(e=>e[mc]&&!e[me]).length}get[_Q](){let e=this[ps];for(let{[_Q]:r}of this[ke])e+=r;return e}get[YQ](){let e=0;for(let{[YQ]:r}of this[ke])e+=r;return e}get[OQ](){let e=this[ps];for(let{[OQ]:r}of this[ke])e+=r;return e}get stats(){return this[VQ]}async[pk](){this[ms].isEmpty()?await Promise.all(this[ke].map(e=>e.close())):await new Promise(e=>{this[wc]=e})}async[mk](e){for(;;){let r=this[ms].shift();if(!r)break;r.handler.onError(e)}await Promise.all(this[ke].map(r=>r.destroy(e)))}[wk](e,r){let A=this[Rc]();return A?A.dispatch(e,r)||(A[me]=!0,this[me]=!this[Rc]()):(this[me]=!0,this[ms].push({opts:e,handler:r}),this[ps]++),!this[me]}[qQ](e){return e.on("drain",this[yc]).on("connect",this[JQ]).on("disconnect",this[PQ]).on("connectionError",this[HQ]),this[ke].push(e),this[me]&&queueMicrotask(()=>{this[me]&&this[yc](e[fk],[this,e])}),this}[WQ](e){e.close(()=>{let r=this[ke].indexOf(e);r!==-1&&this[ke].splice(r,1)}),this[me]=this[ke].some(r=>!r[me]&&r.closed!==!0&&r.destroyed!==!0)}};zQ.exports={PoolBase:Dc,kClients:ke,kNeedDrain:me,kAddClient:qQ,kRemoveClient:WQ,kGetDispatcher:Rc}});var IA=B((zJ,XQ)=>{"use strict";var{PoolBase:Rk,kClients:rn,kNeedDrain:Dk,kAddClient:Tk,kGetDispatcher:bk}=Tc(),kk=BA(),{InvalidArgumentError:bc}=Y(),ZQ=M(),{kUrl:jQ,kInterceptors:Fk}=$(),Sk=ts(),kc=Symbol("options"),Fc=Symbol("connections"),KQ=Symbol("factory");function Nk(t,e){return new kk(t,e)}var Sc=class extends Rk{constructor(e,{connections:r,factory:A=Nk,connect:s,connectTimeout:o,tls:n,maxCachedSessions:i,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g,allowH2:l,...u}={}){if(r!=null&&(!Number.isFinite(r)||r<0))throw new bc("invalid connections");if(typeof A!="function")throw new bc("factory must be a function.");if(s!=null&&typeof s!="function"&&typeof s!="object")throw new bc("connect must be a function or an object");typeof s!="function"&&(s=Sk({...n,maxCachedSessions:i,allowH2:l,socketPath:a,timeout:o,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g}:void 0,...s})),super(u),this[Fk]=u.interceptors?.Pool&&Array.isArray(u.interceptors.Pool)?u.interceptors.Pool:[],this[Fc]=r||null,this[jQ]=ZQ.parseOrigin(e),this[kc]={...ZQ.deepClone(u),connect:s,allowH2:l},this[kc].interceptors=u.interceptors?{...u.interceptors}:void 0,this[KQ]=A,this.on("connectionError",(E,h,C)=>{for(let I of h){let Q=this[rn].indexOf(I);Q!==-1&&this[rn].splice(Q,1)}})}[bk](){for(let e of this[rn])if(!e[Dk])return e;if(!this[Fc]||this[rn].length{"use strict";var{BalancedPoolMissingUpstreamError:Uk,InvalidArgumentError:Gk}=Y(),{PoolBase:Lk,kClients:Ce,kNeedDrain:ws,kAddClient:Mk,kRemoveClient:vk,kGetDispatcher:xk}=Tc(),Ok=IA(),{kUrl:Nc,kInterceptors:Yk}=$(),{parseOrigin:$Q}=M(),eB=Symbol("factory"),An=Symbol("options"),tB=Symbol("kGreatestCommonDivisor"),Dr=Symbol("kCurrentWeight"),Tr=Symbol("kIndex"),We=Symbol("kWeight"),sn=Symbol("kMaxWeightPerServer"),on=Symbol("kErrorPenalty");function _k(t,e){if(t===0)return e;for(;e!==0;){let r=e;e=t%e,t=r}return t}function Jk(t,e){return new Ok(t,e)}var Uc=class extends Lk{constructor(e=[],{factory:r=Jk,...A}={}){if(super(),this[An]=A,this[Tr]=-1,this[Dr]=0,this[sn]=this[An].maxWeightPerServer||100,this[on]=this[An].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof r!="function")throw new Gk("factory must be a function.");this[Yk]=A.interceptors?.BalancedPool&&Array.isArray(A.interceptors.BalancedPool)?A.interceptors.BalancedPool:[],this[eB]=r;for(let s of e)this.addUpstream(s);this._updateBalancedPoolStats()}addUpstream(e){let r=$Q(e).origin;if(this[Ce].find(s=>s[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0))return this;let A=this[eB](r,Object.assign({},this[An]));this[Mk](A),A.on("connect",()=>{A[We]=Math.min(this[sn],A[We]+this[on])}),A.on("connectionError",()=>{A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats()}),A.on("disconnect",(...s)=>{let o=s[2];o&&o.code==="UND_ERR_SOCKET"&&(A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats())});for(let s of this[Ce])s[We]=this[sn];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let r=0;rs[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0);return A&&this[vk](A),this}get upstreams(){return this[Ce].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[Nc].origin)}[xk](){if(this[Ce].length===0)throw new Uk;if(!this[Ce].find(o=>!o[ws]&&o.closed!==!0&&o.destroyed!==!0)||this[Ce].map(o=>o[ws]).reduce((o,n)=>o&&n,!0))return;let A=0,s=this[Ce].findIndex(o=>!o[ws]);for(;A++this[Ce][s][We]&&!o[ws]&&(s=this[Tr]),this[Tr]===0&&(this[Dr]=this[Dr]-this[tB],this[Dr]<=0&&(this[Dr]=this[sn])),o[We]>=this[Dr]&&!o[ws])return o}return this[Dr]=this[Ce][s][We],this[Tr]=s,this[Ce][s]}};rB.exports=Uc});var CA=B((jJ,gB)=>{"use strict";var{InvalidArgumentError:nn}=Y(),{kClients:jt,kRunning:sB,kClose:Pk,kDestroy:Hk,kDispatch:Vk,kInterceptors:qk}=$(),Wk=eA(),zk=IA(),Zk=BA(),jk=M(),Kk=$o(),oB=Symbol("onConnect"),nB=Symbol("onDisconnect"),iB=Symbol("onConnectionError"),Xk=Symbol("maxRedirections"),aB=Symbol("onDrain"),cB=Symbol("factory"),Gc=Symbol("options");function $k(t,e){return e&&e.connections===1?new Zk(t,e):new zk(t,e)}var Lc=class extends Wk{constructor({factory:e=$k,maxRedirections:r=0,connect:A,...s}={}){if(typeof e!="function")throw new nn("factory must be a function.");if(A!=null&&typeof A!="function"&&typeof A!="object")throw new nn("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new nn("maxRedirections must be a positive number");super(s),A&&typeof A!="function"&&(A={...A}),this[qk]=s.interceptors?.Agent&&Array.isArray(s.interceptors.Agent)?s.interceptors.Agent:[Kk({maxRedirections:r})],this[Gc]={...jk.deepClone(s),connect:A},this[Gc].interceptors=s.interceptors?{...s.interceptors}:void 0,this[Xk]=r,this[cB]=e,this[jt]=new Map,this[aB]=(o,n)=>{this.emit("drain",o,[this,...n])},this[oB]=(o,n)=>{this.emit("connect",o,[this,...n])},this[nB]=(o,n,i)=>{this.emit("disconnect",o,[this,...n],i)},this[iB]=(o,n,i)=>{this.emit("connectionError",o,[this,...n],i)}}get[sB](){let e=0;for(let r of this[jt].values())e+=r[sB];return e}[Vk](e,r){let A;if(e.origin&&(typeof e.origin=="string"||e.origin instanceof URL))A=String(e.origin);else throw new nn("opts.origin must be a non-empty string or URL.");let s=this[jt].get(A);return s||(s=this[cB](e.origin,this[Gc]).on("drain",this[aB]).on("connect",this[oB]).on("disconnect",this[nB]).on("connectionError",this[iB]),this[jt].set(A,s)),s.dispatch(e,r)}async[Pk](){let e=[];for(let r of this[jt].values())e.push(r.close());this[jt].clear(),await Promise.all(e)}async[Hk](e){let r=[];for(let A of this[jt].values())r.push(A.destroy(e));this[jt].clear(),await Promise.all(r)}};gB.exports=Lc});var Yc=B((KJ,pB)=>{"use strict";var{kProxy:Mc,kClose:BB,kDestroy:IB,kDispatch:lB,kInterceptors:eF}=$(),{URL:br}=require("node:url"),tF=CA(),CB=IA(),dB=eA(),{InvalidArgumentError:dA,RequestAbortedError:rF,SecureProxyConnectionError:AF}=Y(),uB=ts(),fB=BA(),an=Symbol("proxy agent"),cn=Symbol("proxy client"),Kt=Symbol("proxy headers"),vc=Symbol("request tls settings"),EB=Symbol("proxy tls settings"),hB=Symbol("connect endpoint function"),QB=Symbol("tunnel proxy");function sF(t){return t==="https:"?443:80}function oF(t,e){return new CB(t,e)}var nF=()=>{};function iF(t,e){return e.connections===1?new fB(t,e):new CB(t,e)}var xc=class extends dB{#e;constructor(e,{headers:r={},connect:A,factory:s}){if(super(),!e)throw new dA("Proxy URL is mandatory");this[Kt]=r,s?this.#e=s(e,{connect:A}):this.#e=new fB(e,{connect:A})}[lB](e,r){let A=r.onHeaders;r.onHeaders=function(i,a,c){if(i===407){typeof r.onError=="function"&&r.onError(new dA("Proxy Authentication Required (407)"));return}A&&A.call(this,i,a,c)};let{origin:s,path:o="/",headers:n={}}=e;if(e.path=s+o,!("host"in n)&&!("Host"in n)){let{host:i}=new br(s);n.host=i}return e.headers={...this[Kt],...n},this.#e[lB](e,r)}async[BB](){return this.#e.close()}async[IB](e){return this.#e.destroy(e)}},Oc=class extends dB{constructor(e){if(super(),!e||typeof e=="object"&&!(e instanceof br)&&!e.uri)throw new dA("Proxy uri is mandatory");let{clientFactory:r=oF}=e;if(typeof r!="function")throw new dA("Proxy opts.clientFactory must be a function.");let{proxyTunnel:A=!0}=e,s=this.#e(e),{href:o,origin:n,port:i,protocol:a,username:c,password:g,hostname:l}=s;if(this[Mc]={uri:o,protocol:a},this[eF]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[vc]=e.requestTls,this[EB]=e.proxyTls,this[Kt]=e.headers||{},this[QB]=A,e.auth&&e.token)throw new dA("opts.auth cannot be used in combination with opts.token");e.auth?this[Kt]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Kt]["proxy-authorization"]=e.token:c&&g&&(this[Kt]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(g)}`).toString("base64")}`);let u=uB({...e.proxyTls});this[hB]=uB({...e.requestTls});let E=e.factory||iF,h=(C,I)=>{let{protocol:Q}=new br(C);return!this[QB]&&Q==="http:"&&this[Mc].protocol==="http:"?new xc(this[Mc].uri,{headers:this[Kt],connect:u,factory:E}):E(C,I)};this[cn]=r(s,{connect:u}),this[an]=new tF({...e,factory:h,connect:async(C,I)=>{let Q=C.host;C.port||(Q+=`:${sF(C.protocol)}`);try{let{socket:f,statusCode:R}=await this[cn].connect({origin:n,port:i,path:Q,signal:C.signal,headers:{...this[Kt],host:C.host},servername:this[EB]?.servername||l});if(R!==200&&(f.on("error",nF).destroy(),I(new rF(`Proxy response (${R}) !== 200 when HTTP Tunneling`))),C.protocol!=="https:"){I(null,f);return}let y;this[vc]?y=this[vc].servername:y=C.servername,this[hB]({...C,servername:y,httpSocket:f},I)}catch(f){f.code==="ERR_TLS_CERT_ALTNAME_INVALID"?I(new AF(f)):I(f)}}})}dispatch(e,r){let A=aF(e.headers);if(cF(A),A&&!("host"in A)&&!("Host"in A)){let{host:s}=new br(e.origin);A.host=s}return this[an].dispatch({...e,headers:A},r)}#e(e){return typeof e=="string"?new br(e):e instanceof br?e:new br(e.uri)}async[BB](){await this[an].close(),await this[cn].close()}async[IB](){await this[an].destroy(),await this[cn].destroy()}};function aF(t){if(Array.isArray(t)){let e={};for(let r=0;rr.toLowerCase()==="proxy-authorization"))throw new dA("Proxy-Authorization should be sent in ProxyAgent constructor")}pB.exports=Oc});var TB=B((XJ,DB)=>{"use strict";var gF=eA(),{kClose:lF,kDestroy:uF,kClosed:mB,kDestroyed:wB,kDispatch:EF,kNoProxyAgent:ys,kHttpProxyAgent:Xt,kHttpsProxyAgent:kr}=$(),yB=Yc(),hF=CA(),QF={"http:":80,"https:":443},RB=!1,_c=class extends gF{#e=null;#t=null;#r=null;constructor(e={}){super(),this.#r=e,RB||(RB=!0,process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"}));let{httpProxy:r,httpsProxy:A,noProxy:s,...o}=e;this[ys]=new hF(o);let n=r??process.env.http_proxy??process.env.HTTP_PROXY;n?this[Xt]=new yB({...o,uri:n}):this[Xt]=this[ys];let i=A??process.env.https_proxy??process.env.HTTPS_PROXY;i?this[kr]=new yB({...o,uri:i}):this[kr]=this[Xt],this.#A()}[EF](e,r){let A=new URL(e.origin);return this.#o(A).dispatch(e,r)}async[lF](){await this[ys].close(),this[Xt][mB]||await this[Xt].close(),this[kr][mB]||await this[kr].close()}async[uF](e){await this[ys].destroy(e),this[Xt][wB]||await this[Xt].destroy(e),this[kr][wB]||await this[kr].destroy(e)}#o(e){let{protocol:r,host:A,port:s}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),s=Number.parseInt(s,10)||QF[r]||0,this.#s(A,s)?r==="https:"?this[kr]:this[Xt]:this[ys]}#s(e,r){if(this.#n&&this.#A(),this.#t.length===0)return!0;if(this.#e==="*")return!1;for(let A=0;A{"use strict";var fA=require("node:assert"),{kRetryHandlerDefaultRetry:bB}=$(),{RequestRetryError:pA}=Y(),{isDisturbed:kB,parseHeaders:BF,parseRangeHeader:FB,wrapRequestBody:IF}=M();function CF(t){let e=Date.now();return new Date(t).getTime()-e}function SB(t,e,r,A){let s=t["content-length"];if(s==null||!Number.isFinite(e.start)||!Number.isFinite(e.end))return null;let o=Number(s),n=e.end-e.start+1;return!Number.isFinite(o)||o!==n?new pA("Content-Length mismatch",r,{headers:t,data:{count:A}}):null}var Jc=class t{constructor(e,r){let{retryOptions:A,...s}=e,{retry:o,maxRetries:n,maxTimeout:i,minTimeout:a,timeoutFactor:c,methods:g,errorCodes:l,retryAfter:u,statusCodes:E}=A??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...s,body:IF(e.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??t[bB],retryAfter:u??!0,maxTimeout:i??30*1e3,minTimeout:a??500,timeoutFactor:c??2,maxRetries:n??5,methods:g??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:E??[500,502,503,504,429],errorCodes:l??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect(h=>{this.aborted=!0,this.abort?this.abort(h):this.reason=h})}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,r,A){this.handler.onUpgrade&&this.handler.onUpgrade(e,r,A)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[bB](e,{state:r,opts:A},s){let{statusCode:o,code:n,headers:i}=e,{method:a,retryOptions:c}=A,{maxRetries:g,minTimeout:l,maxTimeout:u,timeoutFactor:E,statusCodes:h,errorCodes:C,methods:I}=c,{counter:Q}=r;if(n&&n!=="UND_ERR_REQ_RETRY"&&!C.includes(n)){s(e);return}if(Array.isArray(I)&&!I.includes(a)){s(e);return}if(o!=null&&Array.isArray(h)&&!h.includes(o)){s(e);return}if(Q>g){s(e);return}let f=i?.["retry-after"];f&&(f=Number(f),f=Number.isNaN(f)?CF(f):f*1e3);let R=f>0?Math.min(f,u):Math.min(l*E**(Q-1),u);setTimeout(()=>s(null),R)}onHeaders(e,r,A,s){let o=BF(r);if(this.retryCount+=1,e>=300)return this.retryOpts.statusCodes.includes(e)===!1?this.handler.onHeaders(e,r,A,s):(this.abort(new pA("Request failed",e,{headers:o,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new pA("server does not support the range header and the payload was partially consumed",e,{headers:o,data:{count:this.retryCount}})),!1;let i=FB(o["content-range"]);if(!i)return this.abort(new pA("Content-Range mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==o.etag)return this.abort(new pA("ETag mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;return fA(this.start===c,"content-range mismatch"),fA(this.end==null||this.end===l,"content-range mismatch"),this.resume=A,!0}if(this.end==null){if(e===206){let i=FB(o["content-range"]);if(i==null)return this.handler.onHeaders(e,r,A,s);let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;fA(c!=null&&Number.isFinite(c),"content-range mismatch"),fA(l!=null&&Number.isFinite(l),"invalid content-length"),this.start=c,this.end=l}if(this.end==null){let i=o["content-length"];this.end=i!=null?Number(i)-1:null}return fA(Number.isFinite(this.start)),fA(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=A,this.etag=o.etag!=null?o.etag:null,this.etag!=null&&this.etag.startsWith("W/")&&(this.etag=null),this.handler.onHeaders(e,r,A,s)}let n=new pA("Request failed",e,{headers:o,data:{count:this.retryCount}});return this.abort(n),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||kB(this.opts.body))return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},r.bind(this));function r(A){if(A!=null||this.aborted||kB(this.opts.body))return this.handler.onError(A);if(this.start!==0){let s={range:`bytes=${this.start}-${this.end??""}`};this.etag!=null&&(s["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...s}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(s){this.handler.onError(s)}}}};NB.exports=Jc});var GB=B((eP,UB)=>{"use strict";var dF=$A(),fF=gn(),Pc=class extends dF{#e=null;#t=null;constructor(e,r={}){super(r),this.#e=e,this.#t=r}dispatch(e,r){let A=new fF({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:r});return this.#e.dispatch(e,A)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}};UB.exports=Pc});var Zc=B((tP,PB)=>{"use strict";var OB=require("node:assert"),{Readable:pF}=require("node:stream"),{RequestAbortedError:YB,NotSupportedError:mF,InvalidArgumentError:wF,AbortError:Hc}=Y(),_B=M(),{ReadableStreamFrom:yF}=M(),Me=Symbol("kConsume"),Rs=Symbol("kReading"),$t=Symbol("kBody"),LB=Symbol("kAbort"),JB=Symbol("kContentType"),MB=Symbol("kContentLength"),RF=()=>{},Vc=class extends pF{constructor({resume:e,abort:r,contentType:A="",contentLength:s,highWaterMark:o=64*1024}){super({autoDestroy:!0,read:e,highWaterMark:o}),this._readableState.dataEmitted=!1,this[LB]=r,this[Me]=null,this[$t]=null,this[JB]=A,this[MB]=s,this[Rs]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new YB),e&&this[LB](),super.destroy(e)}_destroy(e,r){this[Rs]?r(e):setImmediate(()=>{r(e)})}on(e,...r){return(e==="data"||e==="readable")&&(this[Rs]=!0),super.on(e,...r)}addListener(e,...r){return this.on(e,...r)}off(e,...r){let A=super.off(e,...r);return(e==="data"||e==="readable")&&(this[Rs]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,...r){return this.off(e,...r)}push(e){return this[Me]&&e!==null?(Wc(this[Me],e),this[Rs]?super.push(e):!0):super.push(e)}async text(){return Ds(this,"text")}async json(){return Ds(this,"json")}async blob(){return Ds(this,"blob")}async bytes(){return Ds(this,"bytes")}async arrayBuffer(){return Ds(this,"arrayBuffer")}async formData(){throw new mF}get bodyUsed(){return _B.isDisturbed(this)}get body(){return this[$t]||(this[$t]=yF(this),this[Me]&&(this[$t].getReader(),OB(this[$t].locked))),this[$t]}async dump(e){let r=Number.isFinite(e?.limit)?e.limit:131072,A=e?.signal;if(A!=null&&(typeof A!="object"||!("aborted"in A)))throw new wF("signal must be an AbortSignal");return A?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((s,o)=>{this[MB]>r&&this.destroy(new Hc);let n=()=>{this.destroy(A.reason??new Hc)};A?.addEventListener("abort",n),this.on("close",function(){A?.removeEventListener("abort",n),A?.aborted?o(A.reason??new Hc):s(null)}).on("error",RF).on("data",function(i){r-=i.length,r<=0&&this.destroy()}).resume()})}};function DF(t){return t[$t]&&t[$t].locked===!0||t[Me]}function TF(t){return _B.isDisturbed(t)||DF(t)}async function Ds(t,e){return OB(!t[Me]),new Promise((r,A)=>{if(TF(t)){let s=t._readableState;s.destroyed&&s.closeEmitted===!1?t.on("error",o=>{A(o)}).on("close",()=>{A(new TypeError("unusable"))}):A(s.errored??new TypeError("unusable"))}else queueMicrotask(()=>{t[Me]={type:e,stream:t,resolve:r,reject:A,length:0,body:[]},t.on("error",function(s){zc(this[Me],s)}).on("close",function(){this[Me].body!==null&&zc(this[Me],new YB)}),bF(t[Me])})})}function bF(t){if(t.body===null)return;let{_readableState:e}=t.stream;if(e.bufferIndex){let r=e.bufferIndex,A=e.buffer.length;for(let s=r;s2&&r[0]===239&&r[1]===187&&r[2]===191?3:0;return r.utf8Slice(s,A)}function vB(t,e){if(t.length===0||e===0)return new Uint8Array(0);if(t.length===1)return new Uint8Array(t[0]);let r=new Uint8Array(Buffer.allocUnsafeSlow(e).buffer),A=0;for(let s=0;s{var kF=require("node:assert"),{ResponseStatusCodeError:HB}=Y(),{chunksDecode:VB}=Zc(),FF=128*1024;async function SF({callback:t,body:e,contentType:r,statusCode:A,statusMessage:s,headers:o}){kF(e);let n=[],i=0;try{for await(let l of e)if(n.push(l),i+=l.length,i>FF){n=[],i=0;break}}catch{n=[],i=0}let a=`Response status code ${A}${s?`: ${s}`:""}`;if(A===204||!r||!i){queueMicrotask(()=>t(new HB(a,A,o)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let g;try{qB(r)?g=JSON.parse(VB(n,i)):WB(r)&&(g=VB(n,i))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>t(new HB(a,A,o,g)))}var qB=t=>t.length>15&&t[11]==="/"&&t[0]==="a"&&t[1]==="p"&&t[2]==="p"&&t[3]==="l"&&t[4]==="i"&&t[5]==="c"&&t[6]==="a"&&t[7]==="t"&&t[8]==="i"&&t[9]==="o"&&t[10]==="n"&&t[12]==="j"&&t[13]==="s"&&t[14]==="o"&&t[15]==="n",WB=t=>t.length>4&&t[4]==="/"&&t[0]==="t"&&t[1]==="e"&&t[2]==="x"&&t[3]==="t";zB.exports={getResolveErrorBodyCallback:SF,isContentTypeApplicationJson:qB,isContentTypeText:WB}});var KB=B((AP,Kc)=>{"use strict";var NF=require("node:assert"),{Readable:UF}=Zc(),{InvalidArgumentError:mA,RequestAbortedError:ZB}=Y(),ve=M(),{getResolveErrorBodyCallback:GF}=jc(),{AsyncResource:LF}=require("node:async_hooks"),ln=class extends LF{constructor(e,r){if(!e||typeof e!="object")throw new mA("invalid opts");let{signal:A,method:s,opaque:o,body:n,onInfo:i,responseHeaders:a,throwOnError:c,highWaterMark:g}=e;try{if(typeof r!="function")throw new mA("invalid callback");if(g&&(typeof g!="number"||g<0))throw new mA("invalid highWaterMark");if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new mA("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new mA("invalid method");if(i&&typeof i!="function")throw new mA("invalid onInfo callback");super("UNDICI_REQUEST")}catch(l){throw ve.isStream(n)&&ve.destroy(n.on("error",ve.nop),l),l}this.method=s,this.responseHeaders=a||null,this.opaque=o||null,this.callback=r,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=i||null,this.throwOnError=c,this.highWaterMark=g,this.signal=A,this.reason=null,this.removeAbortListener=null,ve.isStream(n)&&n.on("error",l=>{this.onError(l)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new ZB:this.removeAbortListener=ve.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new ZB,this.res?ve.destroy(this.res.on("error",ve.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&(this.res?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}))}onConnect(e,r){if(this.reason){e(this.reason);return}NF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{callback:o,opaque:n,abort:i,context:a,responseHeaders:c,highWaterMark:g}=this,l=c==="raw"?ve.parseRawHeaders(r):ve.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:l});return}let u=c==="raw"?ve.parseHeaders(r):l,E=u["content-type"],h=u["content-length"],C=new UF({resume:A,abort:i,contentType:E,contentLength:this.method!=="HEAD"&&h?Number(h):null,highWaterMark:g});this.removeAbortListener&&C.on("close",this.removeAbortListener),this.callback=null,this.res=C,o!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(GF,null,{callback:o,body:C,contentType:E,statusCode:e,statusMessage:s,headers:l}):this.runInAsyncScope(o,null,null,{statusCode:e,headers:l,trailers:this.trailers,opaque:n,body:C,context:a}))}onData(e){return this.res.push(e)}onComplete(e){ve.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:r,callback:A,body:s,opaque:o}=this;A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:o})})),r&&(this.res=null,queueMicrotask(()=>{ve.destroy(r,e)})),s&&(this.body=null,ve.destroy(s,e)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function jB(t,e){if(e===void 0)return new Promise((r,A)=>{jB.call(this,t,(s,o)=>s?A(s):r(o))});try{this.dispatch(t,new ln(t,e))}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}Kc.exports=jB;Kc.exports.RequestHandler=ln});var Ts=B((sP,eI)=>{var{addAbortListener:MF}=M(),{RequestAbortedError:vF}=Y(),wA=Symbol("kListener"),Ct=Symbol("kSignal");function XB(t){t.abort?t.abort(t[Ct]?.reason):t.reason=t[Ct]?.reason??new vF,$B(t)}function xF(t,e){if(t.reason=null,t[Ct]=null,t[wA]=null,!!e){if(e.aborted){XB(t);return}t[Ct]=e,t[wA]=()=>{XB(t)},MF(t[Ct],t[wA])}}function $B(t){t[Ct]&&("removeEventListener"in t[Ct]?t[Ct].removeEventListener("abort",t[wA]):t[Ct].removeListener("abort",t[wA]),t[Ct]=null,t[wA]=null)}eI.exports={addSignal:xF,removeSignal:$B}});var sI=B((oP,AI)=>{"use strict";var OF=require("node:assert"),{finished:YF,PassThrough:_F}=require("node:stream"),{InvalidArgumentError:yA,InvalidReturnValueError:JF}=Y(),nt=M(),{getResolveErrorBodyCallback:PF}=jc(),{AsyncResource:HF}=require("node:async_hooks"),{addSignal:VF,removeSignal:tI}=Ts(),Xc=class extends HF{constructor(e,r,A){if(!e||typeof e!="object")throw new yA("invalid opts");let{signal:s,method:o,opaque:n,body:i,onInfo:a,responseHeaders:c,throwOnError:g}=e;try{if(typeof A!="function")throw new yA("invalid callback");if(typeof r!="function")throw new yA("invalid factory");if(s&&typeof s.on!="function"&&typeof s.addEventListener!="function")throw new yA("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new yA("invalid method");if(a&&typeof a!="function")throw new yA("invalid onInfo callback");super("UNDICI_STREAM")}catch(l){throw nt.isStream(i)&&nt.destroy(i.on("error",nt.nop),l),l}this.responseHeaders=c||null,this.opaque=n||null,this.factory=r,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=i,this.onInfo=a||null,this.throwOnError=g||!1,nt.isStream(i)&&i.on("error",l=>{this.onError(l)}),VF(this,s)}onConnect(e,r){if(this.reason){e(this.reason);return}OF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{factory:o,opaque:n,context:i,callback:a,responseHeaders:c}=this,g=c==="raw"?nt.parseRawHeaders(r):nt.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:g});return}this.factory=null;let l;if(this.throwOnError&&e>=400){let h=(c==="raw"?nt.parseHeaders(r):g)["content-type"];l=new _F,this.callback=null,this.runInAsyncScope(PF,null,{callback:a,body:l,contentType:h,statusCode:e,statusMessage:s,headers:g})}else{if(o===null)return;if(l=this.runInAsyncScope(o,null,{statusCode:e,headers:g,opaque:n,context:i}),!l||typeof l.write!="function"||typeof l.end!="function"||typeof l.on!="function")throw new JF("expected Writable");YF(l,{readable:!1},E=>{let{callback:h,res:C,opaque:I,trailers:Q,abort:f}=this;this.res=null,(E||!C.readable)&&nt.destroy(C,E),this.callback=null,this.runInAsyncScope(h,null,E||null,{opaque:I,trailers:Q}),E&&f()})}return l.on("drain",A),this.res=l,(l.writableNeedDrain!==void 0?l.writableNeedDrain:l._writableState?.needDrain)!==!0}onData(e){let{res:r}=this;return r?r.write(e):!0}onComplete(e){let{res:r}=this;tI(this),r&&(this.trailers=nt.parseHeaders(e),r.end())}onError(e){let{res:r,callback:A,opaque:s,body:o}=this;tI(this),this.factory=null,r?(this.res=null,nt.destroy(r,e)):A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:s})})),o&&(this.body=null,nt.destroy(o,e))}};function rI(t,e,r){if(r===void 0)return new Promise((A,s)=>{rI.call(this,t,e,(o,n)=>o?s(o):A(n))});try{this.dispatch(t,new Xc(t,e,r))}catch(A){if(typeof r!="function")throw A;let s=t?.opaque;queueMicrotask(()=>r(A,{opaque:s}))}}AI.exports=rI});var aI=B((nP,iI)=>{"use strict";var{Readable:nI,Duplex:qF,PassThrough:WF}=require("node:stream"),{InvalidArgumentError:bs,InvalidReturnValueError:zF,RequestAbortedError:$c}=Y(),ze=M(),{AsyncResource:ZF}=require("node:async_hooks"),{addSignal:jF,removeSignal:KF}=Ts(),oI=require("node:assert"),RA=Symbol("resume"),eg=class extends nI{constructor(){super({autoDestroy:!0}),this[RA]=null}_read(){let{[RA]:e}=this;e&&(this[RA]=null,e())}_destroy(e,r){this._read(),r(e)}},tg=class extends nI{constructor(e){super({autoDestroy:!0}),this[RA]=e}_read(){this[RA]()}_destroy(e,r){!e&&!this._readableState.endEmitted&&(e=new $c),r(e)}},rg=class extends ZF{constructor(e,r){if(!e||typeof e!="object")throw new bs("invalid opts");if(typeof r!="function")throw new bs("invalid handler");let{signal:A,method:s,opaque:o,onInfo:n,responseHeaders:i}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new bs("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new bs("invalid method");if(n&&typeof n!="function")throw new bs("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=o||null,this.responseHeaders=i||null,this.handler=r,this.abort=null,this.context=null,this.onInfo=n||null,this.req=new eg().on("error",ze.nop),this.ret=new qF({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:a}=this;a?.resume&&a.resume()},write:(a,c,g)=>{let{req:l}=this;l.push(a,c)||l._readableState.destroyed?g():l[RA]=g},destroy:(a,c)=>{let{body:g,req:l,res:u,ret:E,abort:h}=this;!a&&!E._readableState.endEmitted&&(a=new $c),h&&a&&h(),ze.destroy(g,a),ze.destroy(l,a),ze.destroy(u,a),KF(this),c(a)}}).on("prefinish",()=>{let{req:a}=this;a.push(null)}),this.res=null,jF(this,A)}onConnect(e,r){let{ret:A,res:s}=this;if(this.reason){e(this.reason);return}oI(!s,"pipeline cannot be retried"),oI(!A.destroyed),this.abort=e,this.context=r}onHeaders(e,r,A){let{opaque:s,handler:o,context:n}=this;if(e<200){if(this.onInfo){let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);this.onInfo({statusCode:e,headers:a})}return}this.res=new tg(A);let i;try{this.handler=null;let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);i=this.runInAsyncScope(o,null,{statusCode:e,headers:a,opaque:s,body:this.res,context:n})}catch(a){throw this.res.on("error",ze.nop),a}if(!i||typeof i.on!="function")throw new zF("expected Readable");i.on("data",a=>{let{ret:c,body:g}=this;!c.push(a)&&g.pause&&g.pause()}).on("error",a=>{let{ret:c}=this;ze.destroy(c,a)}).on("end",()=>{let{ret:a}=this;a.push(null)}).on("close",()=>{let{ret:a}=this;a._readableState.ended||ze.destroy(a,new $c)}),this.body=i}onData(e){let{res:r}=this;return r.push(e)}onComplete(e){let{res:r}=this;r.push(null)}onError(e){let{ret:r}=this;this.handler=null,ze.destroy(r,e)}};function XF(t,e){try{let r=new rg(t,e);return this.dispatch({...t,body:r.req},r),r.ret}catch(r){return new WF().destroy(r)}}iI.exports=XF});var hI=B((iP,EI)=>{"use strict";var{InvalidArgumentError:Ag,SocketError:$F}=Y(),{AsyncResource:eS}=require("node:async_hooks"),cI=M(),{addSignal:tS,removeSignal:gI}=Ts(),lI=require("node:assert"),sg=class extends eS{constructor(e,r){if(!e||typeof e!="object")throw new Ag("invalid opts");if(typeof r!="function")throw new Ag("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new Ag("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=o||null,this.opaque=s||null,this.callback=r,this.abort=null,this.context=null,tS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}lI(this.callback),this.abort=e,this.context=null}onHeaders(){throw new $F("bad upgrade",null)}onUpgrade(e,r,A){lI(e===101);let{callback:s,opaque:o,context:n}=this;gI(this),this.callback=null;let i=this.responseHeaders==="raw"?cI.parseRawHeaders(r):cI.parseHeaders(r);this.runInAsyncScope(s,null,null,{headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;gI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function uI(t,e){if(e===void 0)return new Promise((r,A)=>{uI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new sg(t,e);this.dispatch({...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}EI.exports=uI});var dI=B((aP,CI)=>{"use strict";var rS=require("node:assert"),{AsyncResource:AS}=require("node:async_hooks"),{InvalidArgumentError:og,SocketError:sS}=Y(),QI=M(),{addSignal:oS,removeSignal:BI}=Ts(),ng=class extends AS{constructor(e,r){if(!e||typeof e!="object")throw new og("invalid opts");if(typeof r!="function")throw new og("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new og("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=s||null,this.responseHeaders=o||null,this.callback=r,this.abort=null,oS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}rS(this.callback),this.abort=e,this.context=r}onHeaders(){throw new sS("bad connect",null)}onUpgrade(e,r,A){let{callback:s,opaque:o,context:n}=this;BI(this),this.callback=null;let i=r;i!=null&&(i=this.responseHeaders==="raw"?QI.parseRawHeaders(r):QI.parseHeaders(r)),this.runInAsyncScope(s,null,null,{statusCode:e,headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;BI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function II(t,e){if(e===void 0)return new Promise((r,A)=>{II.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new ng(t,e);this.dispatch({...t,method:"CONNECT"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}CI.exports=II});var fI=B((cP,DA)=>{"use strict";DA.exports.request=KB();DA.exports.stream=sI();DA.exports.pipeline=aI();DA.exports.upgrade=hI();DA.exports.connect=dI()});var ag=B((gP,mI)=>{"use strict";var{UndiciError:nS}=Y(),pI=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),ig=class t extends nS{constructor(e){super(e),Error.captureStackTrace(this,t),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&e[pI]===!0}[pI]=!0};mI.exports={MockNotMatchedError:ig}});var TA=B((lP,wI)=>{"use strict";wI.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var ks=B((uP,GI)=>{"use strict";var{MockNotMatchedError:Fr}=ag(),{kDispatches:un,kMockAgent:iS,kOriginalDispatch:aS,kOrigin:cS,kGetNetConnect:gS}=TA(),{buildURL:lS}=M(),{STATUS_CODES:uS}=require("node:http"),{types:{isPromise:ES}}=require("node:util");function Gt(t,e){return typeof t=="string"?t===e:t instanceof RegExp?t.test(e):typeof t=="function"?t(e)===!0:!1}function RI(t){return Object.fromEntries(Object.entries(t).map(([e,r])=>[e.toLocaleLowerCase(),r]))}function DI(t,e){if(Array.isArray(t)){for(let r=0;r"u")return!0;if(typeof e!="object"||typeof t.headers!="object")return!1;for(let[r,A]of Object.entries(t.headers)){let s=DI(e,r);if(!Gt(A,s))return!1}return!0}function yI(t){if(typeof t!="string")return t;let e=t.split("?");if(e.length!==2)return t;let r=new URLSearchParams(e.pop());return r.sort(),[...e,r.toString()].join("?")}function hS(t,{path:e,method:r,body:A,headers:s}){let o=Gt(t.path,e),n=Gt(t.method,r),i=typeof t.body<"u"?Gt(t.body,A):!0,a=TI(t,s);return o&&n&&i&&a}function bI(t){return Buffer.isBuffer(t)||t instanceof Uint8Array||t instanceof ArrayBuffer?t:typeof t=="object"?JSON.stringify(t):t.toString()}function kI(t,e){let r=e.query?lS(e.path,e.query):e.path,A=typeof r=="string"?yI(r):r,s=t.filter(({consumed:o})=>!o).filter(({path:o})=>Gt(yI(o),A));if(s.length===0)throw new Fr(`Mock dispatch not matched for path '${A}'`);if(s=s.filter(({method:o})=>Gt(o,e.method)),s.length===0)throw new Fr(`Mock dispatch not matched for method '${e.method}' on path '${A}'`);if(s=s.filter(({body:o})=>typeof o<"u"?Gt(o,e.body):!0),s.length===0)throw new Fr(`Mock dispatch not matched for body '${e.body}' on path '${A}'`);if(s=s.filter(o=>TI(o,e.headers)),s.length===0){let o=typeof e.headers=="object"?JSON.stringify(e.headers):e.headers;throw new Fr(`Mock dispatch not matched for headers '${o}' on path '${A}'`)}return s[0]}function QS(t,e,r){let A={timesInvoked:0,times:1,persist:!1,consumed:!1},s=typeof r=="function"?{callback:r}:{...r},o={...A,...e,pending:!0,data:{error:null,...s}};return t.push(o),o}function cg(t,e){let r=t.findIndex(A=>A.consumed?hS(A,e):!1);r!==-1&&t.splice(r,1)}function FI(t){let{path:e,method:r,body:A,headers:s,query:o}=t;return{path:e,method:r,body:A,headers:s,query:o}}function gg(t){let e=Object.keys(t),r=[];for(let A=0;A=u,A.pending=l0?setTimeout(()=>{E(this[un])},c):E(this[un]);function E(C,I=o){let Q=Array.isArray(t.headers)?lg(t.headers):t.headers,f=typeof I=="function"?I({...t,headers:Q}):I;if(ES(f)){f.then(Z=>E(C,Z));return}let R=bI(f),y=gg(n),P=gg(i);e.onConnect?.(Z=>e.onError(Z),null),e.onHeaders?.(s,y,h,SI(s)),e.onData?.(Buffer.from(R)),e.onComplete?.(P),cg(C,r)}function h(){}return!0}function IS(){let t=this[iS],e=this[cS],r=this[aS];return function(s,o){if(t.isMockActive)try{NI.call(this,s,o)}catch(n){if(n instanceof Fr){let i=t[gS]();if(i===!1)throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect disabled)`);if(UI(i,e))r.call(this,s,o);else throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect is not enabled for this origin)`)}else throw n}else r.call(this,s,o)}}function UI(t,e){let r=new URL(e);return t===!0?!0:!!(Array.isArray(t)&&t.some(A=>Gt(A,r.host)))}function CS(t){if(t){let{agent:e,...r}=t;return r}}GI.exports={getResponseData:bI,getMockDispatch:kI,addMockDispatch:QS,deleteMockDispatch:cg,buildKey:FI,generateKeyValues:gg,matchValue:Gt,getResponse:BS,getStatusText:SI,mockDispatch:NI,buildMockDispatch:IS,checkNetConnect:UI,buildMockOptions:CS,getHeaderByName:DI,buildHeadersFromArray:lg}});var Cg=B((EP,Ig)=>{"use strict";var{getResponseData:dS,buildKey:fS,addMockDispatch:ug}=ks(),{kDispatches:En,kDispatchKey:hn,kDefaultHeaders:Eg,kDefaultTrailers:hg,kContentLength:Qg,kMockDispatch:Qn}=TA(),{InvalidArgumentError:dt}=Y(),{buildURL:pS}=M(),bA=class{constructor(e){this[Qn]=e}delay(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("waitInMs must be a valid integer > 0");return this[Qn].delay=e,this}persist(){return this[Qn].persist=!0,this}times(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("repeatTimes must be a valid integer > 0");return this[Qn].times=e,this}},Bg=class{constructor(e,r){if(typeof e!="object")throw new dt("opts must be an object");if(typeof e.path>"u")throw new dt("opts.path must be defined");if(typeof e.method>"u"&&(e.method="GET"),typeof e.path=="string")if(e.query)e.path=pS(e.path,e.query);else{let A=new URL(e.path,"data://");e.path=A.pathname+A.search}typeof e.method=="string"&&(e.method=e.method.toUpperCase()),this[hn]=fS(e),this[En]=r,this[Eg]={},this[hg]={},this[Qg]=!1}createMockScopeDispatchData({statusCode:e,data:r,responseOptions:A}){let s=dS(r),o=this[Qg]?{"content-length":s.length}:{},n={...this[Eg],...o,...A.headers},i={...this[hg],...A.trailers};return{statusCode:e,data:r,headers:n,trailers:i}}validateReplyParameters(e){if(typeof e.statusCode>"u")throw new dt("statusCode must be defined");if(typeof e.responseOptions!="object"||e.responseOptions===null)throw new dt("responseOptions must be an object")}reply(e){if(typeof e=="function"){let o=i=>{let a=e(i);if(typeof a!="object"||a===null)throw new dt("reply options callback must return an object");let c={data:"",responseOptions:{},...a};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},n=ug(this[En],this[hn],o);return new bA(n)}let r={statusCode:e,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(r);let A=this.createMockScopeDispatchData(r),s=ug(this[En],this[hn],A);return new bA(s)}replyWithError(e){if(typeof e>"u")throw new dt("error must be defined");let r=ug(this[En],this[hn],{error:e});return new bA(r)}defaultReplyHeaders(e){if(typeof e>"u")throw new dt("headers must be defined");return this[Eg]=e,this}defaultReplyTrailers(e){if(typeof e>"u")throw new dt("trailers must be defined");return this[hg]=e,this}replyContentLength(){return this[Qg]=!0,this}};Ig.exports.MockInterceptor=Bg;Ig.exports.MockScope=bA});var pg=B((hP,_I)=>{"use strict";var{promisify:mS}=require("node:util"),wS=BA(),{buildMockDispatch:yS}=ks(),{kDispatches:LI,kMockAgent:MI,kClose:vI,kOriginalClose:xI,kOrigin:OI,kOriginalDispatch:RS,kConnected:dg}=TA(),{MockInterceptor:DS}=Cg(),YI=$(),{InvalidArgumentError:TS}=Y(),fg=class extends wS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new TS("Argument opts.agent must implement Agent");this[MI]=r.agent,this[OI]=e,this[LI]=[],this[dg]=1,this[RS]=this.dispatch,this[xI]=this.close.bind(this),this.dispatch=yS.call(this),this.close=this[vI]}get[YI.kConnected](){return this[dg]}intercept(e){return new DS(e,this[LI])}async[vI](){await mS(this[xI])(),this[dg]=0,this[MI][YI.kClients].delete(this[OI])}};_I.exports=fg});var yg=B((QP,zI)=>{"use strict";var{promisify:bS}=require("node:util"),kS=IA(),{buildMockDispatch:FS}=ks(),{kDispatches:JI,kMockAgent:PI,kClose:HI,kOriginalClose:VI,kOrigin:qI,kOriginalDispatch:SS,kConnected:mg}=TA(),{MockInterceptor:NS}=Cg(),WI=$(),{InvalidArgumentError:US}=Y(),wg=class extends kS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new US("Argument opts.agent must implement Agent");this[PI]=r.agent,this[qI]=e,this[JI]=[],this[mg]=1,this[SS]=this.dispatch,this[VI]=this.close.bind(this),this.dispatch=FS.call(this),this.close=this[HI]}get[WI.kConnected](){return this[mg]}intercept(e){return new NS(e,this[JI])}async[HI](){await bS(this[VI])(),this[mg]=0,this[PI][WI.kClients].delete(this[qI])}};zI.exports=wg});var jI=B((IP,ZI)=>{"use strict";var GS={pronoun:"it",is:"is",was:"was",this:"this"},LS={pronoun:"they",is:"are",was:"were",this:"these"};ZI.exports=class{constructor(e,r){this.singular=e,this.plural=r}pluralize(e){let r=e===1,A=r?GS:LS,s=r?this.singular:this.plural;return{...A,count:e,noun:s}}}});var XI=B((dP,KI)=>{"use strict";var{Transform:MS}=require("node:stream"),{Console:vS}=require("node:console"),xS=process.versions.icu?"\u2705":"Y ",OS=process.versions.icu?"\u274C":"N ";KI.exports=class{constructor({disableColors:e}={}){this.transform=new MS({transform(r,A,s){s(null,r)}}),this.logger=new vS({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let r=e.map(({method:A,path:s,data:{statusCode:o},persist:n,times:i,timesInvoked:a,origin:c})=>({Method:A,Origin:c,Path:s,"Status code":o,Persistent:n?xS:OS,Invocations:a,Remaining:n?1/0:i-a}));return this.logger.table(r),this.transform.read().toString()}}});var rC=B((fP,tC)=>{"use strict";var{kClients:Sr}=$(),YS=CA(),{kAgent:Rg,kMockAgentSet:Bn,kMockAgentGet:$I,kDispatches:Dg,kIsMockActive:In,kNetConnect:Nr,kGetNetConnect:_S,kOptions:Cn,kFactory:dn}=TA(),JS=pg(),PS=yg(),{matchValue:HS,buildMockOptions:VS}=ks(),{InvalidArgumentError:eC,UndiciError:qS}=Y(),WS=$A(),zS=jI(),ZS=XI(),Tg=class extends WS{constructor(e){if(super(e),this[Nr]=!0,this[In]=!0,e?.agent&&typeof e.agent.dispatch!="function")throw new eC("Argument opts.agent must implement Agent");let r=e?.agent?e.agent:new YS(e);this[Rg]=r,this[Sr]=r[Sr],this[Cn]=VS(e)}get(e){let r=this[$I](e);return r||(r=this[dn](e),this[Bn](e,r)),r}dispatch(e,r){return this.get(e.origin),this[Rg].dispatch(e,r)}async close(){await this[Rg].close(),this[Sr].clear()}deactivate(){this[In]=!1}activate(){this[In]=!0}enableNetConnect(e){if(typeof e=="string"||typeof e=="function"||e instanceof RegExp)Array.isArray(this[Nr])?this[Nr].push(e):this[Nr]=[e];else if(typeof e>"u")this[Nr]=!0;else throw new eC("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[Nr]=!1}get isMockActive(){return this[In]}[Bn](e,r){this[Sr].set(e,r)}[dn](e){let r=Object.assign({agent:this},this[Cn]);return this[Cn]&&this[Cn].connections===1?new JS(e,r):new PS(e,r)}[$I](e){let r=this[Sr].get(e);if(r)return r;if(typeof e!="string"){let A=this[dn]("http://localhost:9999");return this[Bn](e,A),A}for(let[A,s]of Array.from(this[Sr]))if(s&&typeof A!="string"&&HS(A,e)){let o=this[dn](e);return this[Bn](e,o),o[Dg]=s[Dg],o}}[_S](){return this[Nr]}pendingInterceptors(){let e=this[Sr];return Array.from(e.entries()).flatMap(([r,A])=>A[Dg].map(s=>({...s,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new ZS}={}){let r=this.pendingInterceptors();if(r.length===0)return;let A=new zS("interceptor","interceptors").pluralize(r.length);throw new qS(` +${A.count} ${A.noun} ${A.is} pending: + +${e.format(r)} +`.trim())}};tC.exports=Tg});var fn=B((pP,nC)=>{"use strict";var AC=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:jS}=Y(),KS=CA();oC()===void 0&&sC(new KS);function sC(t){if(!t||typeof t.dispatch!="function")throw new jS("Argument agent must implement Agent");Object.defineProperty(globalThis,AC,{value:t,writable:!0,enumerable:!1,configurable:!1})}function oC(){return globalThis[AC]}nC.exports={setGlobalDispatcher:sC,getGlobalDispatcher:oC}});var pn=B((wP,iC)=>{"use strict";iC.exports=class{#e;constructor(e){if(typeof e!="object"||e===null)throw new TypeError("handler must be an object");this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}});var cC=B((yP,aC)=>{"use strict";var XS=Xo();aC.exports=t=>{let e=t?.maxRedirections;return r=>function(s,o){let{maxRedirections:n=e,...i}=s;if(!n)return r(s,o);let a=new XS(r,n,s,o);return r(i,a)}}});var lC=B((RP,gC)=>{"use strict";var $S=gn();gC.exports=t=>e=>function(A,s){return e(A,new $S({...A,retryOptions:{...t,...A.retryOptions}},{handler:s,dispatch:e}))}});var EC=B((DP,uC)=>{"use strict";var eN=M(),{InvalidArgumentError:tN,RequestAbortedError:rN}=Y(),AN=pn(),bg=class extends AN{#e=1024*1024;#t=null;#r=!1;#o=!1;#s=0;#A=null;#n=null;constructor({maxSize:e},r){if(super(r),e!=null&&(!Number.isFinite(e)||e<1))throw new tN("maxSize must be a number greater than 0");this.#e=e??this.#e,this.#n=r}onConnect(e){this.#t=e,this.#n.onConnect(this.#i.bind(this))}#i(e){this.#o=!0,this.#A=e}onHeaders(e,r,A,s){let n=eN.parseHeaders(r)["content-length"];if(n!=null&&n>this.#e)throw new rN(`Response size (${n}) larger than maxSize (${this.#e})`);return this.#o?!0:this.#n.onHeaders(e,r,A,s)}onError(e){this.#r||(e=this.#A??e,this.#n.onError(e))}onData(e){return this.#s=this.#s+e.length,this.#s>=this.#e&&(this.#r=!0,this.#o?this.#n.onError(this.#A):this.#n.onComplete([])),!0}onComplete(e){if(!this.#r){if(this.#o){this.#n.onError(this.reason);return}this.#n.onComplete(e)}}};function sN({maxSize:t}={maxSize:1024*1024}){return e=>function(A,s){let{dumpMaxSize:o=t}=A,n=new bg({maxSize:o},s);return e(A,n)}}uC.exports=sN});var BC=B((TP,QC)=>{"use strict";var{isIP:oN}=require("node:net"),{lookup:nN}=require("node:dns"),iN=pn(),{InvalidArgumentError:kA,InformationalError:aN}=Y(),hC=Math.pow(2,31)-1,kg=class{#e=0;#t=0;#r=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#o,this.pick=e.pick??this.#s}get full(){return this.#r.size===this.#t}runLookup(e,r,A){let s=this.#r.get(e.hostname);if(s==null&&this.full){A(null,e.origin);return}let o={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...r.dns,maxTTL:this.#e,maxItems:this.#t};if(s==null)this.lookup(e,o,(n,i)=>{if(n||i==null||i.length===0){A(n??new aN("No DNS entries found"));return}this.setRecords(e,i);let a=this.#r.get(e.hostname),c=this.pick(e,a,o.affinity),g;typeof c.port=="number"?g=`:${c.port}`:e.port!==""?g=`:${e.port}`:g="",A(null,`${e.protocol}//${c.family===6?`[${c.address}]`:c.address}${g}`)});else{let n=this.pick(e,s,o.affinity);if(n==null){this.#r.delete(e.hostname),this.runLookup(e,r,A);return}let i;typeof n.port=="number"?i=`:${n.port}`:e.port!==""?i=`:${e.port}`:i="",A(null,`${e.protocol}//${n.family===6?`[${n.address}]`:n.address}${i}`)}}#o(e,r,A){nN(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(s,o)=>{if(s)return A(s);let n=new Map;for(let i of o)n.set(`${i.address}:${i.family}`,i);A(null,n.values())})}#s(e,r,A){let s=null,{records:o,offset:n}=r,i;if(this.dualStack?(A==null&&(n==null||n===hC?(r.offset=0,A=4):(r.offset++,A=(r.offset&1)===1?6:4)),o[A]!=null&&o[A].ips.length>0?i=o[A]:i=o[A===4?6:4]):i=o[A],i==null||i.ips.length===0)return s;i.offset==null||i.offset===hC?i.offset=0:i.offset++;let a=i.offset%i.ips.length;return s=i.ips[a]??null,s==null?s:Date.now()-s.timestamp>s.ttl?(i.ips.splice(a,1),this.pick(e,r,A)):s}setRecords(e,r){let A=Date.now(),s={records:{4:null,6:null}};for(let o of r){o.timestamp=A,typeof o.ttl=="number"?o.ttl=Math.min(o.ttl,this.#e):o.ttl=this.#e;let n=s.records[o.family]??{ips:[]};n.ips.push(o),s.records[o.family]=n}this.#r.set(e.hostname,s)}getHandler(e,r){return new Fg(this,e,r)}},Fg=class extends iN{#e=null;#t=null;#r=null;#o=null;#s=null;constructor(e,{origin:r,handler:A,dispatch:s},o){super(A),this.#s=r,this.#o=A,this.#t={...o},this.#e=e,this.#r=s}onError(e){switch(e.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#s,this.#t,(r,A)=>{if(r)return this.#o.onError(r);let s={...this.#t,origin:A};this.#r(s,this)});return}this.#o.onError(e);return}case"ENOTFOUND":this.#e.deleteRecord(this.#s);default:this.#o.onError(e);break}}};QC.exports=t=>{if(t?.maxTTL!=null&&(typeof t?.maxTTL!="number"||t?.maxTTL<0))throw new kA("Invalid maxTTL. Must be a positive number");if(t?.maxItems!=null&&(typeof t?.maxItems!="number"||t?.maxItems<1))throw new kA("Invalid maxItems. Must be a positive number and greater than zero");if(t?.affinity!=null&&t?.affinity!==4&&t?.affinity!==6)throw new kA("Invalid affinity. Must be either 4 or 6");if(t?.dualStack!=null&&typeof t?.dualStack!="boolean")throw new kA("Invalid dualStack. Must be a boolean");if(t?.lookup!=null&&typeof t?.lookup!="function")throw new kA("Invalid lookup. Must be a function");if(t?.pick!=null&&typeof t?.pick!="function")throw new kA("Invalid pick. Must be a function");let e=t?.dualStack??!0,r;e?r=t?.affinity??null:r=t?.affinity??4;let A={maxTTL:t?.maxTTL??1e4,lookup:t?.lookup??null,pick:t?.pick??null,dualStack:e,affinity:r,maxItems:t?.maxItems??1/0},s=new kg(A);return o=>function(i,a){let c=i.origin.constructor===URL?i.origin:new URL(i.origin);return oN(c.hostname)!==0?o(i,a):(s.runLookup(c,i,(g,l)=>{if(g)return a.onError(g);let u=null;u={...i,servername:c.hostname,origin:l,headers:{host:c.hostname,...i.headers}},o(u,s.getHandler({origin:c,dispatch:o,handler:a},i))}),!0)}}});var Ur=B((bP,wC)=>{"use strict";var{kConstruct:cN}=$(),{kEnumerableProperty:FA}=M(),{iteratorMixin:gN,isValidHeaderName:Fs,isValidHeaderValue:CC}=Ge(),{webidl:O}=Qe(),Sg=require("node:assert"),mn=require("node:util"),ge=Symbol("headers map"),xe=Symbol("headers map sorted");function IC(t){return t===10||t===13||t===9||t===32}function dC(t){let e=0,r=t.length;for(;r>e&&IC(t.charCodeAt(r-1));)--r;for(;r>e&&IC(t.charCodeAt(e));)++e;return e===0&&r===t.length?t:t.substring(e,r)}function fC(t,e){if(Array.isArray(e))for(let r=0;r>","record"]})}function Ng(t,e,r){if(r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"});if(mC(t)==="immutable")throw new TypeError("immutable");return Ug(t).append(e,r,!1)}function pC(t,e){return t[0]>1),r[c][0]<=g[0]?a=c+1:i=c;if(o!==c){for(n=o;n>a;)r[n]=r[--n];r[a]=g}}if(!A.next().done)throw new TypeError("Unreachable");return r}else{let A=0;for(let{0:s,1:{value:o}}of this[ge])r[A++]=[s,o],Sg(o!==null);return r.sort(pC)}}},it=class t{#e;#t;constructor(e=void 0){O.util.markAsUncloneable(this),e!==cN&&(this.#t=new wn,this.#e="none",e!==void 0&&(e=O.converters.HeadersInit(e,"Headers contructor","init"),fC(this,e)))}append(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.append");let A="Headers.append";return e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),Ng(this,e,r)}delete(e){if(O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.delete"),e=O.converters.ByteString(e,"Headers.delete","name"),!Fs(e))throw O.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(e,!1)&&this.#t.delete(e,!1)}get(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.get(e,!1)}has(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.contains(e,!1)}set(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.set");let A="Headers.set";if(e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:A,value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(e,r,!1)}getSetCookie(){O.brandCheck(this,t);let e=this.#t.cookies;return e?[...e]:[]}get[xe](){if(this.#t[xe])return this.#t[xe];let e=[],r=this.#t.toSortedArray(),A=this.#t.cookies;if(A===null||A.length===1)return this.#t[xe]=r;for(let s=0;s>"](t,e,r,A.bind(t)):O.converters["record"](t,e,r)}throw O.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};wC.exports={fill:fC,compareHeaderName:pC,Headers:it,HeadersList:wn,getHeadersGuard:mC,setHeadersGuard:lN,setHeadersList:uN,getHeadersList:Ug}});var Ns=B((kP,LC)=>{"use strict";var{Headers:kC,HeadersList:yC,fill:EN,getHeadersGuard:hN,setHeadersGuard:FC,setHeadersList:SC}=Ur(),{extractBody:RC,cloneBody:QN,mixinBody:BN,hasFinalizationRegistry:NC,streamRegistry:UC,bodyUnusable:IN}=cA(),Gg=M(),DC=require("node:util"),{kEnumerableProperty:Oe}=Gg,{isValidReasonPhrase:CN,isCancelled:dN,isAborted:fN,isBlobLike:pN,serializeJavascriptValueToJSONString:mN,isErrorLike:wN,isomorphicEncode:yN,environmentSettingsObject:RN}=Ge(),{redirectStatusSet:DN,nullBodyStatus:TN}=rs(),{kState:te,kHeaders:Lt}=Pt(),{webidl:L}=Qe(),{FormData:bN}=as(),{URLSerializer:TC}=Te(),{kConstruct:Rn}=$(),Lg=require("node:assert"),{types:kN}=require("node:util"),FN=new TextEncoder("utf-8"),Gr=class t{static error(){return Ss(Dn(),"immutable")}static json(e,r={}){L.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=L.converters.ResponseInit(r));let A=FN.encode(mN(e)),s=RC(A),o=Ss(SA({}),"response");return bC(o,r,{body:s[0],type:"application/json"}),o}static redirect(e,r=302){L.argumentLengthCheck(arguments,1,"Response.redirect"),e=L.converters.USVString(e),r=L.converters["unsigned short"](r);let A;try{A=new URL(e,RN.settingsObject.baseUrl)}catch(n){throw new TypeError(`Failed to parse URL from ${e}`,{cause:n})}if(!DN.has(r))throw new RangeError(`Invalid status code ${r}`);let s=Ss(SA({}),"immutable");s[te].status=r;let o=yN(TC(A));return s[te].headersList.append("location",o,!0),s}constructor(e=null,r={}){if(L.util.markAsUncloneable(this),e===Rn)return;e!==null&&(e=L.converters.BodyInit(e)),r=L.converters.ResponseInit(r),this[te]=SA({}),this[Lt]=new kC(Rn),FC(this[Lt],"response"),SC(this[Lt],this[te].headersList);let A=null;if(e!=null){let[s,o]=RC(e);A={body:s,type:o}}bC(this,r,A)}get type(){return L.brandCheck(this,t),this[te].type}get url(){L.brandCheck(this,t);let e=this[te].urlList,r=e[e.length-1]??null;return r===null?"":TC(r,!0)}get redirected(){return L.brandCheck(this,t),this[te].urlList.length>1}get status(){return L.brandCheck(this,t),this[te].status}get ok(){return L.brandCheck(this,t),this[te].status>=200&&this[te].status<=299}get statusText(){return L.brandCheck(this,t),this[te].statusText}get headers(){return L.brandCheck(this,t),this[Lt]}get body(){return L.brandCheck(this,t),this[te].body?this[te].body.stream:null}get bodyUsed(){return L.brandCheck(this,t),!!this[te].body&&Gg.isDisturbed(this[te].body.stream)}clone(){if(L.brandCheck(this,t),IN(this))throw L.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let e=Mg(this[te]);return NC&&this[te].body?.stream&&UC.register(this,new WeakRef(this[te].body.stream)),Ss(e,hN(this[Lt]))}[DC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${DC.formatWithOptions(r,A)}`}};BN(Gr);Object.defineProperties(Gr.prototype,{type:Oe,url:Oe,status:Oe,ok:Oe,redirected:Oe,statusText:Oe,headers:Oe,clone:Oe,body:Oe,bodyUsed:Oe,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Gr,{json:Oe,redirect:Oe,error:Oe});function Mg(t){if(t.internalResponse)return GC(Mg(t.internalResponse),t.type);let e=SA({...t,body:null});return t.body!=null&&(e.body=QN(e,t.body)),e}function SA(t){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...t,headersList:t?.headersList?new yC(t?.headersList):new yC,urlList:t?.urlList?[...t.urlList]:[]}}function Dn(t){let e=wN(t);return SA({type:"error",status:0,error:e?t:new Error(t&&String(t)),aborted:t&&t.name==="AbortError"})}function SN(t){return t.type==="error"&&t.status===0}function yn(t,e){return e={internalResponse:t,...e},new Proxy(t,{get(r,A){return A in e?e[A]:r[A]},set(r,A,s){return Lg(!(A in e)),r[A]=s,!0}})}function GC(t,e){if(e==="basic")return yn(t,{type:"basic",headersList:t.headersList});if(e==="cors")return yn(t,{type:"cors",headersList:t.headersList});if(e==="opaque")return yn(t,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(e==="opaqueredirect")return yn(t,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});Lg(!1)}function NN(t,e=null){return Lg(dN(t)),fN(t)?Dn(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:e})):Dn(Object.assign(new DOMException("Request was cancelled."),{cause:e}))}function bC(t,e,r){if(e.status!==null&&(e.status<200||e.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in e&&e.statusText!=null&&!CN(String(e.statusText)))throw new TypeError("Invalid statusText");if("status"in e&&e.status!=null&&(t[te].status=e.status),"statusText"in e&&e.statusText!=null&&(t[te].statusText=e.statusText),"headers"in e&&e.headers!=null&&EN(t[Lt],e.headers),r){if(TN.includes(t.status))throw L.errors.exception({header:"Response constructor",message:`Invalid response status code ${t.status}`});t[te].body=r.body,r.type!=null&&!t[te].headersList.contains("content-type",!0)&&t[te].headersList.append("content-type",r.type,!0)}}function Ss(t,e){let r=new Gr(Rn);return r[te]=t,r[Lt]=new kC(Rn),SC(r[Lt],t.headersList),FC(r[Lt],e),NC&&t.body?.stream&&UC.register(r,new WeakRef(t.body.stream)),r}L.converters.ReadableStream=L.interfaceConverter(ReadableStream);L.converters.FormData=L.interfaceConverter(bN);L.converters.URLSearchParams=L.interfaceConverter(URLSearchParams);L.converters.XMLHttpRequestBodyInit=function(t,e,r){return typeof t=="string"?L.converters.USVString(t,e,r):pN(t)?L.converters.Blob(t,e,r,{strict:!1}):ArrayBuffer.isView(t)||kN.isArrayBuffer(t)?L.converters.BufferSource(t,e,r):Gg.isFormDataLike(t)?L.converters.FormData(t,e,r,{strict:!1}):t instanceof URLSearchParams?L.converters.URLSearchParams(t,e,r):L.converters.DOMString(t,e,r)};L.converters.BodyInit=function(t,e,r){return t instanceof ReadableStream?L.converters.ReadableStream(t,e,r):t?.[Symbol.asyncIterator]?t:L.converters.XMLHttpRequestBodyInit(t,e,r)};L.converters.ResponseInit=L.dictionaryConverter([{key:"status",converter:L.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:L.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:L.converters.HeadersInit}]);LC.exports={isNetworkError:SN,makeNetworkError:Dn,makeResponse:SA,makeAppropriateNetworkError:NN,filterResponse:GC,Response:Gr,cloneResponse:Mg,fromInnerResponse:Ss}});var OC=B((FP,xC)=>{"use strict";var{kConnected:MC,kSize:vC}=$(),vg=class{constructor(e){this.value=e}deref(){return this.value[MC]===0&&this.value[vC]===0?void 0:this.value}},xg=class{constructor(e){this.finalizer=e}register(e,r){e.on&&e.on("disconnect",()=>{e[MC]===0&&e[vC]===0&&this.finalizer(r)})}unregister(e){}};xC.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:vg,FinalizationRegistry:xg}):{WeakRef,FinalizationRegistry}}});var NA=B((SP,ed)=>{"use strict";var{extractBody:UN,mixinBody:GN,cloneBody:LN,bodyUnusable:YC}=cA(),{Headers:ZC,fill:MN,HeadersList:Fn,setHeadersGuard:Yg,getHeadersGuard:vN,setHeadersList:jC,getHeadersList:_C}=Ur(),{FinalizationRegistry:xN}=OC()(),bn=M(),JC=require("node:util"),{isValidHTTPToken:ON,sameOrigin:PC,environmentSettingsObject:Tn}=Ge(),{forbiddenMethodsSet:YN,corsSafeListedMethodsSet:_N,referrerPolicy:JN,requestRedirect:PN,requestMode:HN,requestCredentials:VN,requestCache:qN,requestDuplex:WN}=rs(),{kEnumerableProperty:le,normalizedMethodRecordsBase:zN,normalizedMethodRecords:ZN}=bn,{kHeaders:Ye,kSignal:kn,kState:K,kDispatcher:Og}=Pt(),{webidl:S}=Qe(),{URLSerializer:jN}=Te(),{kConstruct:Sn}=$(),KN=require("node:assert"),{getMaxListeners:HC,setMaxListeners:VC,getEventListeners:XN,defaultMaxListeners:qC}=require("node:events"),$N=Symbol("abortController"),KC=new xN(({signal:t,abort:e})=>{t.removeEventListener("abort",e)}),Nn=new WeakMap;function WC(t){return e;function e(){let r=t.deref();if(r!==void 0){KC.unregister(e),this.removeEventListener("abort",e),r.abort(this.reason);let A=Nn.get(r.signal);if(A!==void 0){if(A.size!==0){for(let s of A){let o=s.deref();o!==void 0&&o.abort(this.reason)}A.clear()}Nn.delete(r.signal)}}}}var zC=!1,er=class t{constructor(e,r={}){if(S.util.markAsUncloneable(this),e===Sn)return;let A="Request constructor";S.argumentLengthCheck(arguments,1,A),e=S.converters.RequestInfo(e,A,"input"),r=S.converters.RequestInit(r,A,"init");let s=null,o=null,n=Tn.settingsObject.baseUrl,i=null;if(typeof e=="string"){this[Og]=r.dispatcher;let Q;try{Q=new URL(e,n)}catch(f){throw new TypeError("Failed to parse URL from "+e,{cause:f})}if(Q.username||Q.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);s=Un({urlList:[Q]}),o="cors"}else this[Og]=r.dispatcher||e[Og],KN(e instanceof t),s=e[K],i=e[kn];let a=Tn.settingsObject.origin,c="client";if(s.window?.constructor?.name==="EnvironmentSettingsObject"&&PC(s.window,a)&&(c=s.window),r.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in r&&(c="no-window"),s=Un({method:s.method,headersList:s.headersList,unsafeRequest:s.unsafeRequest,client:Tn.settingsObject,window:c,priority:s.priority,origin:s.origin,referrer:s.referrer,referrerPolicy:s.referrerPolicy,mode:s.mode,credentials:s.credentials,cache:s.cache,redirect:s.redirect,integrity:s.integrity,keepalive:s.keepalive,reloadNavigation:s.reloadNavigation,historyNavigation:s.historyNavigation,urlList:[...s.urlList]});let g=Object.keys(r).length!==0;if(g&&(s.mode==="navigate"&&(s.mode="same-origin"),s.reloadNavigation=!1,s.historyNavigation=!1,s.origin="client",s.referrer="client",s.referrerPolicy="",s.url=s.urlList[s.urlList.length-1],s.urlList=[s.url]),r.referrer!==void 0){let Q=r.referrer;if(Q==="")s.referrer="no-referrer";else{let f;try{f=new URL(Q,n)}catch(R){throw new TypeError(`Referrer "${Q}" is not a valid URL.`,{cause:R})}f.protocol==="about:"&&f.hostname==="client"||a&&!PC(f,Tn.settingsObject.baseUrl)?s.referrer="client":s.referrer=f}}r.referrerPolicy!==void 0&&(s.referrerPolicy=r.referrerPolicy);let l;if(r.mode!==void 0?l=r.mode:l=o,l==="navigate")throw S.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(l!=null&&(s.mode=l),r.credentials!==void 0&&(s.credentials=r.credentials),r.cache!==void 0&&(s.cache=r.cache),s.cache==="only-if-cached"&&s.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(r.redirect!==void 0&&(s.redirect=r.redirect),r.integrity!=null&&(s.integrity=String(r.integrity)),r.keepalive!==void 0&&(s.keepalive=!!r.keepalive),r.method!==void 0){let Q=r.method,f=ZN[Q];if(f!==void 0)s.method=f;else{if(!ON(Q))throw new TypeError(`'${Q}' is not a valid HTTP method.`);let R=Q.toUpperCase();if(YN.has(R))throw new TypeError(`'${Q}' HTTP method is unsupported.`);Q=zN[R]??Q,s.method=Q}!zC&&s.method==="patch"&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),zC=!0)}r.signal!==void 0&&(i=r.signal),this[K]=s;let u=new AbortController;if(this[kn]=u.signal,i!=null){if(!i||typeof i.aborted!="boolean"||typeof i.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(i.aborted)u.abort(i.reason);else{this[$N]=u;let Q=new WeakRef(u),f=WC(Q);try{(typeof HC=="function"&&HC(i)===qC||XN(i,"abort").length>=qC)&&VC(1500,i)}catch{}bn.addAbortListener(i,f),KC.register(u,{signal:i,abort:f},f)}}if(this[Ye]=new ZC(Sn),jC(this[Ye],s.headersList),Yg(this[Ye],"request"),l==="no-cors"){if(!_N.has(s.method))throw new TypeError(`'${s.method} is unsupported in no-cors mode.`);Yg(this[Ye],"request-no-cors")}if(g){let Q=_C(this[Ye]),f=r.headers!==void 0?r.headers:new Fn(Q);if(Q.clear(),f instanceof Fn){for(let{name:R,value:y}of f.rawValues())Q.append(R,y,!1);Q.cookies=f.cookies}else MN(this[Ye],f)}let E=e instanceof t?e[K].body:null;if((r.body!=null||E!=null)&&(s.method==="GET"||s.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let h=null;if(r.body!=null){let[Q,f]=UN(r.body,s.keepalive);h=Q,f&&!_C(this[Ye]).contains("content-type",!0)&&this[Ye].append("content-type",f)}let C=h??E;if(C!=null&&C.source==null){if(h!=null&&r.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(s.mode!=="same-origin"&&s.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');s.useCORSPreflightFlag=!0}let I=C;if(h==null&&E!=null){if(YC(e))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let Q=new TransformStream;E.stream.pipeThrough(Q),I={source:E.source,length:E.length,stream:Q.readable}}this[K].body=I}get method(){return S.brandCheck(this,t),this[K].method}get url(){return S.brandCheck(this,t),jN(this[K].url)}get headers(){return S.brandCheck(this,t),this[Ye]}get destination(){return S.brandCheck(this,t),this[K].destination}get referrer(){return S.brandCheck(this,t),this[K].referrer==="no-referrer"?"":this[K].referrer==="client"?"about:client":this[K].referrer.toString()}get referrerPolicy(){return S.brandCheck(this,t),this[K].referrerPolicy}get mode(){return S.brandCheck(this,t),this[K].mode}get credentials(){return this[K].credentials}get cache(){return S.brandCheck(this,t),this[K].cache}get redirect(){return S.brandCheck(this,t),this[K].redirect}get integrity(){return S.brandCheck(this,t),this[K].integrity}get keepalive(){return S.brandCheck(this,t),this[K].keepalive}get isReloadNavigation(){return S.brandCheck(this,t),this[K].reloadNavigation}get isHistoryNavigation(){return S.brandCheck(this,t),this[K].historyNavigation}get signal(){return S.brandCheck(this,t),this[kn]}get body(){return S.brandCheck(this,t),this[K].body?this[K].body.stream:null}get bodyUsed(){return S.brandCheck(this,t),!!this[K].body&&bn.isDisturbed(this[K].body.stream)}get duplex(){return S.brandCheck(this,t),"half"}clone(){if(S.brandCheck(this,t),YC(this))throw new TypeError("unusable");let e=XC(this[K]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let A=Nn.get(this.signal);A===void 0&&(A=new Set,Nn.set(this.signal,A));let s=new WeakRef(r);A.add(s),bn.addAbortListener(r.signal,WC(s))}return $C(e,r.signal,vN(this[Ye]))}[JC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${JC.formatWithOptions(r,A)}`}};GN(er);function Un(t){return{method:t.method??"GET",localURLsOnly:t.localURLsOnly??!1,unsafeRequest:t.unsafeRequest??!1,body:t.body??null,client:t.client??null,reservedClient:t.reservedClient??null,replacesClientId:t.replacesClientId??"",window:t.window??"client",keepalive:t.keepalive??!1,serviceWorkers:t.serviceWorkers??"all",initiator:t.initiator??"",destination:t.destination??"",priority:t.priority??null,origin:t.origin??"client",policyContainer:t.policyContainer??"client",referrer:t.referrer??"client",referrerPolicy:t.referrerPolicy??"",mode:t.mode??"no-cors",useCORSPreflightFlag:t.useCORSPreflightFlag??!1,credentials:t.credentials??"same-origin",useCredentials:t.useCredentials??!1,cache:t.cache??"default",redirect:t.redirect??"follow",integrity:t.integrity??"",cryptoGraphicsNonceMetadata:t.cryptoGraphicsNonceMetadata??"",parserMetadata:t.parserMetadata??"",reloadNavigation:t.reloadNavigation??!1,historyNavigation:t.historyNavigation??!1,userActivation:t.userActivation??!1,taintedOrigin:t.taintedOrigin??!1,redirectCount:t.redirectCount??0,responseTainting:t.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:t.preventNoCacheCacheControlHeaderModification??!1,done:t.done??!1,timingAllowFailed:t.timingAllowFailed??!1,urlList:t.urlList,url:t.urlList[0],headersList:t.headersList?new Fn(t.headersList):new Fn}}function XC(t){let e=Un({...t,body:null});return t.body!=null&&(e.body=LN(e,t.body)),e}function $C(t,e,r){let A=new er(Sn);return A[K]=t,A[kn]=e,A[Ye]=new ZC(Sn),jC(A[Ye],t.headersList),Yg(A[Ye],r),A}Object.defineProperties(er.prototype,{method:le,url:le,headers:le,redirect:le,clone:le,signal:le,duplex:le,destination:le,body:le,bodyUsed:le,isHistoryNavigation:le,isReloadNavigation:le,keepalive:le,integrity:le,cache:le,credentials:le,attribute:le,referrerPolicy:le,referrer:le,mode:le,[Symbol.toStringTag]:{value:"Request",configurable:!0}});S.converters.Request=S.interfaceConverter(er);S.converters.RequestInfo=function(t,e,r){return typeof t=="string"?S.converters.USVString(t,e,r):t instanceof er?S.converters.Request(t,e,r):S.converters.USVString(t,e,r)};S.converters.AbortSignal=S.interfaceConverter(AbortSignal);S.converters.RequestInit=S.dictionaryConverter([{key:"method",converter:S.converters.ByteString},{key:"headers",converter:S.converters.HeadersInit},{key:"body",converter:S.nullableConverter(S.converters.BodyInit)},{key:"referrer",converter:S.converters.USVString},{key:"referrerPolicy",converter:S.converters.DOMString,allowedValues:JN},{key:"mode",converter:S.converters.DOMString,allowedValues:HN},{key:"credentials",converter:S.converters.DOMString,allowedValues:VN},{key:"cache",converter:S.converters.DOMString,allowedValues:qN},{key:"redirect",converter:S.converters.DOMString,allowedValues:PN},{key:"integrity",converter:S.converters.DOMString},{key:"keepalive",converter:S.converters.boolean},{key:"signal",converter:S.nullableConverter(t=>S.converters.AbortSignal(t,"RequestInit","signal",{strict:!1}))},{key:"window",converter:S.converters.any},{key:"duplex",converter:S.converters.DOMString,allowedValues:WN},{key:"dispatcher",converter:S.converters.any}]);ed.exports={Request:er,makeRequest:Un,fromInnerRequest:$C,cloneRequest:XC}});var Gs=B((NP,Qd)=>{"use strict";var{makeNetworkError:H,makeAppropriateNetworkError:Gn,filterResponse:_g,makeResponse:Ln,fromInnerResponse:eU}=Ns(),{HeadersList:td}=Ur(),{Request:tU,cloneRequest:rU}=NA(),tr=require("node:zlib"),{bytesMatch:AU,makePolicyContainer:sU,clonePolicyContainer:oU,requestBadPort:nU,TAOCheck:iU,appendRequestOriginHeader:aU,responseLocationURL:cU,requestCurrentURL:ft,setRequestReferrerPolicyOnRedirect:gU,tryUpgradeRequestToAPotentiallyTrustworthyURL:lU,createOpaqueTimingInfo:qg,appendFetchMetadata:uU,corsCheck:EU,crossOriginResourcePolicyCheck:hU,determineRequestsReferrer:QU,coarsenedSharedCurrentTime:Us,createDeferredPromise:BU,isBlobLike:IU,sameOrigin:Vg,isCancelled:Lr,isAborted:rd,isErrorLike:CU,fullyReadBody:dU,readableStreamClose:fU,isomorphicEncode:Mn,urlIsLocal:pU,urlIsHttpHttpsScheme:Wg,urlHasHttpsScheme:mU,clampAndCoarsenConnectionTimingInfo:wU,simpleRangeHeaderValue:yU,buildContentRange:RU,createInflate:DU,extractMimeType:TU}=Ge(),{kState:nd,kDispatcher:bU}=Pt(),Mr=require("node:assert"),{safelyExtractBody:zg,extractBody:Ad}=cA(),{redirectStatusSet:id,nullBodyStatus:ad,safeMethodsSet:kU,requestBodyHeader:FU,subresourceSet:SU}=rs(),NU=require("node:events"),{Readable:UU,pipeline:GU,finished:LU}=require("node:stream"),{addAbortListener:MU,isErrored:vU,isReadable:vn,bufferToLowerCasedHeaderName:sd}=M(),{dataURLProcessor:xU,serializeAMimeType:OU,minimizeSupportedMimeType:YU}=Te(),{getGlobalDispatcher:_U}=fn(),{webidl:JU}=Qe(),{STATUS_CODES:PU}=require("node:http"),HU=["GET","HEAD"],VU=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",Jg,xn=class extends NU{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){this.state==="ongoing"&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}};function qU(t){cd(t,"fetch")}function WU(t,e=void 0){JU.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=BU(),A;try{A=new tU(t,e)}catch(g){return r.reject(g),r.promise}let s=A[nd];if(A.signal.aborted)return Pg(r,s,null,A.signal.reason),r.promise;s.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(s.serviceWorkers="none");let n=null,i=!1,a=null;return MU(A.signal,()=>{i=!0,Mr(a!=null),a.abort(A.signal.reason);let g=n?.deref();Pg(r,s,g,A.signal.reason)}),a=ld({request:s,processResponseEndOfBody:qU,processResponse:g=>{if(!i){if(g.aborted){Pg(r,s,n,a.serializedAbortReason);return}if(g.type==="error"){r.reject(new TypeError("fetch failed",{cause:g.error}));return}n=new WeakRef(eU(g,"immutable")),r.resolve(n.deref()),r=null}},dispatcher:A[bU]}),r.promise}function cd(t,e="other"){if(t.type==="error"&&t.aborted||!t.urlList?.length)return;let r=t.urlList[0],A=t.timingInfo,s=t.cacheState;Wg(r)&&A!==null&&(t.timingAllowPassed||(A=qg({startTime:A.startTime}),s=""),A.endTime=Us(),t.timingInfo=A,gd(A,r.href,e,globalThis,s))}var gd=performance.markResourceTiming;function Pg(t,e,r,A){if(t&&t.reject(A),e.body!=null&&vn(e.body?.stream)&&e.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o}),r==null)return;let s=r[nd];s.body!=null&&vn(s.body?.stream)&&s.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o})}function ld({request:t,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseEndOfBody:s,processResponseConsumeBody:o,useParallelQueue:n=!1,dispatcher:i=_U()}){Mr(i);let a=null,c=!1;t.client!=null&&(a=t.client.globalObject,c=t.client.crossOriginIsolatedCapability);let g=Us(c),l=qg({startTime:g}),u={controller:new xn(i),request:t,timingInfo:l,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseConsumeBody:o,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};return Mr(!t.body||t.body.stream),t.window==="client"&&(t.window=t.client?.globalObject?.constructor?.name==="Window"?t.client:"no-window"),t.origin==="client"&&(t.origin=t.client.origin),t.policyContainer==="client"&&(t.client!=null?t.policyContainer=oU(t.client.policyContainer):t.policyContainer=sU()),t.headersList.contains("accept",!0)||t.headersList.append("accept","*/*",!0),t.headersList.contains("accept-language",!0)||t.headersList.append("accept-language","*",!0),t.priority,SU.has(t.destination),ud(u).catch(E=>{u.controller.terminate(E)}),u.controller}async function ud(t,e=!1){let r=t.request,A=null;if(r.localURLsOnly&&!pU(ft(r))&&(A=H("local URLs only")),lU(r),nU(r)==="blocked"&&(A=H("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=QU(r)),A===null&&(A=await(async()=>{let o=ft(r);return Vg(o,r.url)&&r.responseTainting==="basic"||o.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await od(t)):r.mode==="same-origin"?H('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?H('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await od(t)):Wg(ft(r))?(r.responseTainting="cors",await Ed(t)):H("URL scheme must be a HTTP(S) scheme")})()),e)return A;A.status!==0&&!A.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?A=_g(A,"basic"):r.responseTainting==="cors"?A=_g(A,"cors"):r.responseTainting==="opaque"?A=_g(A,"opaque"):Mr(!1));let s=A.status===0?A:A.internalResponse;if(s.urlList.length===0&&s.urlList.push(...r.urlList),r.timingAllowFailed||(A.timingAllowPassed=!0),A.type==="opaque"&&s.status===206&&s.rangeRequested&&!r.headers.contains("range",!0)&&(A=s=H()),A.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||ad.includes(s.status))&&(s.body=null,t.controller.dump=!0),r.integrity){let o=i=>Hg(t,H(i));if(r.responseTainting==="opaque"||A.body==null){o(A.error);return}let n=i=>{if(!AU(i,r.integrity)){o("integrity mismatch");return}A.body=zg(i)[0],Hg(t,A)};await dU(A.body,n,o)}else Hg(t,A)}function od(t){if(Lr(t)&&t.request.redirectCount===0)return Promise.resolve(Gn(t));let{request:e}=t,{protocol:r}=ft(e);switch(r){case"about:":return Promise.resolve(H("about scheme is not supported"));case"blob:":{Jg||(Jg=require("node:buffer").resolveObjectURL);let A=ft(e);if(A.search.length!==0)return Promise.resolve(H("NetworkError when attempting to fetch resource."));let s=Jg(A.toString());if(e.method!=="GET"||!IU(s))return Promise.resolve(H("invalid method"));let o=Ln(),n=s.size,i=Mn(`${n}`),a=s.type;if(e.headersList.contains("range",!0)){o.rangeRequested=!0;let c=e.headersList.get("range",!0),g=yU(c,!0);if(g==="failure")return Promise.resolve(H("failed to fetch the data URL"));let{rangeStartValue:l,rangeEndValue:u}=g;if(l===null)l=n-u,u=l+u-1;else{if(l>=n)return Promise.resolve(H("Range start is greater than the blob's size."));(u===null||u>=n)&&(u=n-1)}let E=s.slice(l,u,a),h=Ad(E);o.body=h[0];let C=Mn(`${E.size}`),I=RU(l,u,n);o.status=206,o.statusText="Partial Content",o.headersList.set("content-length",C,!0),o.headersList.set("content-type",a,!0),o.headersList.set("content-range",I,!0)}else{let c=Ad(s);o.statusText="OK",o.body=c[0],o.headersList.set("content-length",i,!0),o.headersList.set("content-type",a,!0)}return Promise.resolve(o)}case"data:":{let A=ft(e),s=xU(A);if(s==="failure")return Promise.resolve(H("failed to fetch the data URL"));let o=OU(s.mimeType);return Promise.resolve(Ln({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:o}]],body:zg(s.body)[0]}))}case"file:":return Promise.resolve(H("not implemented... yet..."));case"http:":case"https:":return Ed(t).catch(A=>H(A));default:return Promise.resolve(H("unknown scheme"))}}function zU(t,e){t.request.done=!0,t.processResponseDone!=null&&queueMicrotask(()=>t.processResponseDone(e))}function Hg(t,e){let r=t.timingInfo,A=()=>{let o=Date.now();t.request.destination==="document"&&(t.controller.fullTimingInfo=r),t.controller.reportTimingSteps=()=>{if(t.request.url.protocol!=="https:")return;r.endTime=o;let i=e.cacheState,a=e.bodyInfo;e.timingAllowPassed||(r=qg(r),i="");let c=0;if(t.request.mode!=="navigator"||!e.hasCrossOriginRedirects){c=e.status;let g=TU(e.headersList);g!=="failure"&&(a.contentType=YU(g))}t.request.initiatorType!=null&&gd(r,t.request.url.href,t.request.initiatorType,globalThis,i,a,c)};let n=()=>{t.request.done=!0,t.processResponseEndOfBody!=null&&queueMicrotask(()=>t.processResponseEndOfBody(e)),t.request.initiatorType!=null&&t.controller.reportTimingSteps()};queueMicrotask(()=>n())};t.processResponse!=null&&queueMicrotask(()=>{t.processResponse(e),t.processResponse=null});let s=e.type==="error"?e:e.internalResponse??e;s.body==null?A():LU(s.body.stream,()=>{A()})}async function Ed(t){let e=t.request,r=null,A=null,s=t.timingInfo;if(e.serviceWorkers,r===null){if(e.redirect==="follow"&&(e.serviceWorkers="none"),A=r=await hd(t),e.responseTainting==="cors"&&EU(e,r)==="failure")return H("cors failure");iU(e,r)==="failure"&&(e.timingAllowFailed=!0)}return(e.responseTainting==="opaque"||r.type==="opaque")&&hU(e.origin,e.client,e.destination,A)==="blocked"?H("blocked"):(id.has(A.status)&&(e.redirect!=="manual"&&t.controller.connection.destroy(void 0,!1),e.redirect==="error"?r=H("unexpected redirect"):e.redirect==="manual"?r=A:e.redirect==="follow"?r=await ZU(t,r):Mr(!1)),r.timingInfo=s,r)}function ZU(t,e){let r=t.request,A=e.internalResponse?e.internalResponse:e,s;try{if(s=cU(A,ft(r).hash),s==null)return e}catch(n){return Promise.resolve(H(n))}if(!Wg(s))return Promise.resolve(H("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(H("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(s.username||s.password)&&!Vg(r,s))return Promise.resolve(H('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(s.username||s.password))return Promise.resolve(H('URL cannot contain credentials for request mode "cors"'));if(A.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(H());if([301,302].includes(A.status)&&r.method==="POST"||A.status===303&&!HU.includes(r.method)){r.method="GET",r.body=null;for(let n of FU)r.headersList.delete(n)}Vg(ft(r),s)||(r.headersList.delete("authorization",!0),r.headersList.delete("proxy-authorization",!0),r.headersList.delete("cookie",!0),r.headersList.delete("host",!0)),r.body!=null&&(Mr(r.body.source!=null),r.body=zg(r.body.source)[0]);let o=t.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=Us(t.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(s),gU(r,A),ud(t,!0)}async function hd(t,e=!1,r=!1){let A=t.request,s=null,o=null,n=null,i=null,a=!1;A.window==="no-window"&&A.redirect==="error"?(s=t,o=A):(o=rU(A),s={...t},s.request=o);let c=A.credentials==="include"||A.credentials==="same-origin"&&A.responseTainting==="basic",g=o.body?o.body.length:null,l=null;if(o.body==null&&["POST","PUT"].includes(o.method)&&(l="0"),g!=null&&(l=Mn(`${g}`)),l!=null&&o.headersList.append("content-length",l,!0),g!=null&&o.keepalive,o.referrer instanceof URL&&o.headersList.append("referer",Mn(o.referrer.href),!0),aU(o),uU(o),o.headersList.contains("user-agent",!0)||o.headersList.append("user-agent",VU),o.cache==="default"&&(o.headersList.contains("if-modified-since",!0)||o.headersList.contains("if-none-match",!0)||o.headersList.contains("if-unmodified-since",!0)||o.headersList.contains("if-match",!0)||o.headersList.contains("if-range",!0))&&(o.cache="no-store"),o.cache==="no-cache"&&!o.preventNoCacheCacheControlHeaderModification&&!o.headersList.contains("cache-control",!0)&&o.headersList.append("cache-control","max-age=0",!0),(o.cache==="no-store"||o.cache==="reload")&&(o.headersList.contains("pragma",!0)||o.headersList.append("pragma","no-cache",!0),o.headersList.contains("cache-control",!0)||o.headersList.append("cache-control","no-cache",!0)),o.headersList.contains("range",!0)&&o.headersList.append("accept-encoding","identity",!0),o.headersList.contains("accept-encoding",!0)||(mU(ft(o))?o.headersList.append("accept-encoding","br, gzip, deflate",!0):o.headersList.append("accept-encoding","gzip, deflate",!0)),o.headersList.delete("host",!0),i==null&&(o.cache="no-store"),o.cache!=="no-store"&&o.cache,n==null){if(o.cache==="only-if-cached")return H("only if cached");let u=await jU(s,c,r);!kU.has(o.method)&&u.status>=200&&u.status<=399,a&&u.status,n==null&&(n=u)}if(n.urlList=[...o.urlList],o.headersList.contains("range",!0)&&(n.rangeRequested=!0),n.requestIncludesCredentials=c,n.status===407)return A.window==="no-window"?H():Lr(t)?Gn(t):H("proxy authentication required");if(n.status===421&&!r&&(A.body==null||A.body.source!=null)){if(Lr(t))return Gn(t);t.controller.connection.destroy(),n=await hd(t,e,!0)}return n}async function jU(t,e=!1,r=!1){Mr(!t.controller.connection||t.controller.connection.destroyed),t.controller.connection={abort:null,destroyed:!1,destroy(h,C=!0){this.destroyed||(this.destroyed=!0,C&&this.abort?.(h??new DOMException("The operation was aborted.","AbortError")))}};let A=t.request,s=null,o=t.timingInfo;null==null&&(A.cache="no-store");let i=r?"yes":"no";A.mode;let a=null;if(A.body==null&&t.processRequestEndOfBody)queueMicrotask(()=>t.processRequestEndOfBody());else if(A.body!=null){let h=async function*(Q){Lr(t)||(yield Q,t.processRequestBodyChunkLength?.(Q.byteLength))},C=()=>{Lr(t)||t.processRequestEndOfBody&&t.processRequestEndOfBody()},I=Q=>{Lr(t)||(Q.name==="AbortError"?t.controller.abort():t.controller.terminate(Q))};a=(async function*(){try{for await(let Q of A.body.stream)yield*h(Q);C()}catch(Q){I(Q)}})()}try{let{body:h,status:C,statusText:I,headersList:Q,socket:f}=await E({body:a});if(f)s=Ln({status:C,statusText:I,headersList:Q,socket:f});else{let R=h[Symbol.asyncIterator]();t.controller.next=()=>R.next(),s=Ln({status:C,statusText:I,headersList:Q})}}catch(h){return h.name==="AbortError"?(t.controller.connection.destroy(),Gn(t,h)):H(h)}let c=async()=>{await t.controller.resume()},g=h=>{Lr(t)||t.controller.abort(h)},l=new ReadableStream({async start(h){t.controller.controller=h},async pull(h){await c(h)},async cancel(h){await g(h)},type:"bytes"});s.body={stream:l,source:null,length:null},t.controller.onAborted=u,t.controller.on("terminated",u),t.controller.resume=async()=>{for(;;){let h,C;try{let{done:Q,value:f}=await t.controller.next();if(rd(t))break;h=Q?void 0:f}catch(Q){t.controller.ended&&!o.encodedBodySize?h=void 0:(h=Q,C=!0)}if(h===void 0){fU(t.controller.controller),zU(t,s);return}if(o.decodedBodySize+=h?.byteLength??0,C){t.controller.terminate(h);return}let I=new Uint8Array(h);if(I.byteLength&&t.controller.controller.enqueue(I),vU(l)){t.controller.terminate();return}if(t.controller.controller.desiredSize<=0)return}};function u(h){rd(t)?(s.aborted=!0,vn(l)&&t.controller.controller.error(t.controller.serializedAbortReason)):vn(l)&&t.controller.controller.error(new TypeError("terminated",{cause:CU(h)?h:void 0})),t.controller.connection.destroy()}return s;function E({body:h}){let C=ft(A),I=t.controller.dispatcher;return new Promise((Q,f)=>I.dispatch({path:C.pathname+C.search,origin:C.origin,method:A.method,body:I.isMockActive?A.body&&(A.body.source||A.body.stream):h,headers:A.headersList.entries,maxRedirections:0,upgrade:A.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(R){let{connection:y}=t.controller;o.finalConnectionTimingInfo=wU(void 0,o.postRedirectStartTime,t.crossOriginIsolatedCapability),y.destroyed?R(new DOMException("The operation was aborted.","AbortError")):(t.controller.on("terminated",R),this.abort=y.abort=R),o.finalNetworkRequestStartTime=Us(t.crossOriginIsolatedCapability)},onResponseStarted(){o.finalNetworkResponseStartTime=Us(t.crossOriginIsolatedCapability)},onHeaders(R,y,P,Z){if(R<200)return;let Ae="",gt=new td;for(let De=0;DeWr)return f(new Error(`too many content-encodings in response: ${qr.length}, maximum allowed is ${Wr}`)),!0;for(let Pi=qr.length-1;Pi>=0;--Pi){let lo=qr[Pi].trim();if(lo==="x-gzip"||lo==="gzip")wt.push(tr.createGunzip({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="deflate")wt.push(DU({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="br")wt.push(tr.createBrotliDecompress({flush:tr.constants.BROTLI_OPERATION_FLUSH,finishFlush:tr.constants.BROTLI_OPERATION_FLUSH}));else{wt.length=0;break}}}let _t=this.onError.bind(this);return Q({status:R,statusText:Z,headersList:gt,body:wt.length?GU(this.body,...wt,De=>{De&&this.onError(De)}).on("error",_t):this.body.on("error",_t)}),!0},onData(R){if(t.controller.dump)return;let y=R;return o.encodedBodySize+=y.byteLength,this.body.push(y)},onComplete(){this.abort&&t.controller.off("terminated",this.abort),t.controller.onAborted&&t.controller.off("terminated",t.controller.onAborted),t.controller.ended=!0,this.body.push(null)},onError(R){this.abort&&t.controller.off("terminated",this.abort),this.body?.destroy(R),t.controller.terminate(R),f(R)},onUpgrade(R,y,P){if(R!==101)return;let Z=new td;for(let Ae=0;Ae{"use strict";Bd.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var Cd=B((GP,Id)=>{"use strict";var{webidl:_e}=Qe(),On=Symbol("ProgressEvent state"),jg=class t extends Event{constructor(e,r={}){e=_e.converters.DOMString(e,"ProgressEvent constructor","type"),r=_e.converters.ProgressEventInit(r??{}),super(e,r),this[On]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return _e.brandCheck(this,t),this[On].lengthComputable}get loaded(){return _e.brandCheck(this,t),this[On].loaded}get total(){return _e.brandCheck(this,t),this[On].total}};_e.converters.ProgressEventInit=_e.dictionaryConverter([{key:"lengthComputable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:_e.converters.boolean,defaultValue:()=>!1}]);Id.exports={ProgressEvent:jg}});var fd=B((LP,dd)=>{"use strict";function KU(t){if(!t)return"failure";switch(t.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}dd.exports={getEncoding:KU}});var bd=B((MP,Td)=>{"use strict";var{kState:UA,kError:Kg,kResult:pd,kAborted:Ls,kLastProgressEventFired:Xg}=Zg(),{ProgressEvent:XU}=Cd(),{getEncoding:md}=fd(),{serializeAMimeType:$U,parseMIMEType:wd}=Te(),{types:eG}=require("node:util"),{StringDecoder:yd}=require("string_decoder"),{btoa:Rd}=require("node:buffer"),tG={enumerable:!0,writable:!1,configurable:!1};function rG(t,e,r,A){if(t[UA]==="loading")throw new DOMException("Invalid state","InvalidStateError");t[UA]="loading",t[pd]=null,t[Kg]=null;let o=e.stream().getReader(),n=[],i=o.read(),a=!0;(async()=>{for(;!t[Ls];)try{let{done:c,value:g}=await i;if(a&&!t[Ls]&&queueMicrotask(()=>{rr("loadstart",t)}),a=!1,!c&&eG.isUint8Array(g))n.push(g),(t[Xg]===void 0||Date.now()-t[Xg]>=50)&&!t[Ls]&&(t[Xg]=Date.now(),queueMicrotask(()=>{rr("progress",t)})),i=o.read();else if(c){queueMicrotask(()=>{t[UA]="done";try{let l=AG(n,r,e.type,A);if(t[Ls])return;t[pd]=l,rr("load",t)}catch(l){t[Kg]=l,rr("error",t)}t[UA]!=="loading"&&rr("loadend",t)});break}}catch(c){if(t[Ls])return;queueMicrotask(()=>{t[UA]="done",t[Kg]=c,rr("error",t),t[UA]!=="loading"&&rr("loadend",t)});break}})()}function rr(t,e){let r=new XU(t,{bubbles:!1,cancelable:!1});e.dispatchEvent(r)}function AG(t,e,r,A){switch(e){case"DataURL":{let s="data:",o=wd(r||"application/octet-stream");o!=="failure"&&(s+=$U(o)),s+=";base64,";let n=new yd("latin1");for(let i of t)s+=Rd(n.write(i));return s+=Rd(n.end()),s}case"Text":{let s="failure";if(A&&(s=md(A)),s==="failure"&&r){let o=wd(r);o!=="failure"&&(s=md(o.parameters.get("charset")))}return s==="failure"&&(s="UTF-8"),sG(t,s)}case"ArrayBuffer":return Dd(t).buffer;case"BinaryString":{let s="",o=new yd("latin1");for(let n of t)s+=o.write(n);return s+=o.end(),s}}}function sG(t,e){let r=Dd(t),A=oG(r),s=0;A!==null&&(e=A,s=A==="UTF-8"?3:2);let o=r.slice(s);return new TextDecoder(e).decode(o)}function oG(t){let[e,r,A]=t;return e===239&&r===187&&A===191?"UTF-8":e===254&&r===255?"UTF-16BE":e===255&&r===254?"UTF-16LE":null}function Dd(t){let e=t.reduce((A,s)=>A+s.byteLength,0),r=0;return t.reduce((A,s)=>(A.set(s,r),r+=s.byteLength,A),new Uint8Array(e))}Td.exports={staticPropertyDescriptors:tG,readOperation:rG,fireAProgressEvent:rr}});var Nd=B((vP,Sd)=>{"use strict";var{staticPropertyDescriptors:GA,readOperation:Yn,fireAProgressEvent:kd}=bd(),{kState:vr,kError:Fd,kResult:_n,kEvents:_,kAborted:nG}=Zg(),{webidl:q}=Qe(),{kEnumerableProperty:Fe}=M(),at=class t extends EventTarget{constructor(){super(),this[vr]="empty",this[_n]=null,this[Fd]=null,this[_]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"ArrayBuffer")}readAsBinaryString(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"BinaryString")}readAsText(e,r=void 0){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsText"),e=q.converters.Blob(e,{strict:!1}),r!==void 0&&(r=q.converters.DOMString(r,"FileReader.readAsText","encoding")),Yn(this,e,"Text",r)}readAsDataURL(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"DataURL")}abort(){if(this[vr]==="empty"||this[vr]==="done"){this[_n]=null;return}this[vr]==="loading"&&(this[vr]="done",this[_n]=null),this[nG]=!0,kd("abort",this),this[vr]!=="loading"&&kd("loadend",this)}get readyState(){switch(q.brandCheck(this,t),this[vr]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return q.brandCheck(this,t),this[_n]}get error(){return q.brandCheck(this,t),this[Fd]}get onloadend(){return q.brandCheck(this,t),this[_].loadend}set onloadend(e){q.brandCheck(this,t),this[_].loadend&&this.removeEventListener("loadend",this[_].loadend),typeof e=="function"?(this[_].loadend=e,this.addEventListener("loadend",e)):this[_].loadend=null}get onerror(){return q.brandCheck(this,t),this[_].error}set onerror(e){q.brandCheck(this,t),this[_].error&&this.removeEventListener("error",this[_].error),typeof e=="function"?(this[_].error=e,this.addEventListener("error",e)):this[_].error=null}get onloadstart(){return q.brandCheck(this,t),this[_].loadstart}set onloadstart(e){q.brandCheck(this,t),this[_].loadstart&&this.removeEventListener("loadstart",this[_].loadstart),typeof e=="function"?(this[_].loadstart=e,this.addEventListener("loadstart",e)):this[_].loadstart=null}get onprogress(){return q.brandCheck(this,t),this[_].progress}set onprogress(e){q.brandCheck(this,t),this[_].progress&&this.removeEventListener("progress",this[_].progress),typeof e=="function"?(this[_].progress=e,this.addEventListener("progress",e)):this[_].progress=null}get onload(){return q.brandCheck(this,t),this[_].load}set onload(e){q.brandCheck(this,t),this[_].load&&this.removeEventListener("load",this[_].load),typeof e=="function"?(this[_].load=e,this.addEventListener("load",e)):this[_].load=null}get onabort(){return q.brandCheck(this,t),this[_].abort}set onabort(e){q.brandCheck(this,t),this[_].abort&&this.removeEventListener("abort",this[_].abort),typeof e=="function"?(this[_].abort=e,this.addEventListener("abort",e)):this[_].abort=null}};at.EMPTY=at.prototype.EMPTY=0;at.LOADING=at.prototype.LOADING=1;at.DONE=at.prototype.DONE=2;Object.defineProperties(at.prototype,{EMPTY:GA,LOADING:GA,DONE:GA,readAsArrayBuffer:Fe,readAsBinaryString:Fe,readAsText:Fe,readAsDataURL:Fe,abort:Fe,readyState:Fe,result:Fe,error:Fe,onloadstart:Fe,onprogress:Fe,onload:Fe,onabort:Fe,onerror:Fe,onloadend:Fe,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(at,{EMPTY:GA,LOADING:GA,DONE:GA});Sd.exports={FileReader:at}});var Jn=B((xP,Ud)=>{"use strict";Ud.exports={kConstruct:$().kConstruct}});var Md=B((OP,Ld)=>{"use strict";var iG=require("node:assert"),{URLSerializer:Gd}=Te(),{isValidHeaderName:aG}=Ge();function cG(t,e,r=!1){let A=Gd(t,r),s=Gd(e,r);return A===s}function gG(t){iG(t!==null);let e=[];for(let r of t.split(","))r=r.trim(),aG(r)&&e.push(r);return e}Ld.exports={urlEquals:cG,getFieldValues:gG}});var Od=B((YP,xd)=>{"use strict";var{kConstruct:lG}=Jn(),{urlEquals:uG,getFieldValues:$g}=Md(),{kEnumerableProperty:xr,isDisturbed:EG}=M(),{webidl:T}=Qe(),{Response:hG,cloneResponse:QG,fromInnerResponse:BG}=Ns(),{Request:Mt,fromInnerRequest:IG}=NA(),{kState:ct}=Pt(),{fetching:CG}=Gs(),{urlIsHttpHttpsScheme:Pn,createDeferredPromise:LA,readAllBytes:dG}=Ge(),el=require("node:assert"),Hn=class t{#e;constructor(){arguments[0]!==lG&&T.illegalConstructor(),T.util.markAsUncloneable(this),this.#e=arguments[1]}async match(e,r={}){T.brandCheck(this,t);let A="Cache.match";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=this.#s(e,r,1);if(s.length!==0)return s[0]}async matchAll(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.matchAll";return e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options"),this.#s(e,r)}async add(e){T.brandCheck(this,t);let r="Cache.add";T.argumentLengthCheck(arguments,1,r),e=T.converters.RequestInfo(e,r,"request");let A=[e];return await this.addAll(A)}async addAll(e){T.brandCheck(this,t);let r="Cache.addAll";T.argumentLengthCheck(arguments,1,r);let A=[],s=[];for(let u of e){if(u===void 0)throw T.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(u=T.converters.RequestInfo(u),typeof u=="string")continue;let E=u[ct];if(!Pn(E.url)||E.method!=="GET")throw T.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let o=[];for(let u of e){let E=new Mt(u)[ct];if(!Pn(E.url))throw T.errors.exception({header:r,message:"Expected http/s scheme."});E.initiator="fetch",E.destination="subresource",s.push(E);let h=LA();o.push(CG({request:E,processResponse(C){if(C.type==="error"||C.status===206||C.status<200||C.status>299)h.reject(T.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(C.headersList.contains("vary")){let I=$g(C.headersList.get("vary"));for(let Q of I)if(Q==="*"){h.reject(T.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let f of o)f.abort();return}}},processResponseEndOfBody(C){if(C.aborted){h.reject(new DOMException("aborted","AbortError"));return}h.resolve(C)}})),A.push(h.promise)}let i=await Promise.all(A),a=[],c=0;for(let u of i){let E={type:"put",request:s[c],response:u};a.push(E),c++}let g=LA(),l=null;try{this.#t(a)}catch(u){l=u}return queueMicrotask(()=>{l===null?g.resolve(void 0):g.reject(l)}),g.promise}async put(e,r){T.brandCheck(this,t);let A="Cache.put";T.argumentLengthCheck(arguments,2,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.Response(r,A,"response");let s=null;if(e instanceof Mt?s=e[ct]:s=new Mt(e)[ct],!Pn(s.url)||s.method!=="GET")throw T.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});let o=r[ct];if(o.status===206)throw T.errors.exception({header:A,message:"Got 206 status"});if(o.headersList.contains("vary")){let E=$g(o.headersList.get("vary"));for(let h of E)if(h==="*")throw T.errors.exception({header:A,message:"Got * vary field value"})}if(o.body&&(EG(o.body.stream)||o.body.stream.locked))throw T.errors.exception({header:A,message:"Response body is locked or disturbed"});let n=QG(o),i=LA();if(o.body!=null){let h=o.body.stream.getReader();dG(h).then(i.resolve,i.reject)}else i.resolve(void 0);let a=[],c={type:"put",request:s,response:n};a.push(c);let g=await i.promise;n.body!=null&&(n.body.source=g);let l=LA(),u=null;try{this.#t(a)}catch(E){u=E}return queueMicrotask(()=>{u===null?l.resolve():l.reject(u)}),l.promise}async delete(e,r={}){T.brandCheck(this,t);let A="Cache.delete";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return!1}else el(typeof e=="string"),s=new Mt(e)[ct];let o=[],n={type:"delete",request:s,options:r};o.push(n);let i=LA(),a=null,c;try{c=this.#t(o)}catch(g){a=g}return queueMicrotask(()=>{a===null?i.resolve(!!c?.length):i.reject(a)}),i.promise}async keys(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.keys";e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=LA(),n=[];if(e===void 0)for(let i of this.#e)n.push(i[0]);else{let i=this.#r(s,r);for(let a of i)n.push(a[0])}return queueMicrotask(()=>{let i=[];for(let a of n){let c=IG(a,new AbortController().signal,"immutable");i.push(c)}o.resolve(Object.freeze(i))}),o.promise}#t(e){let r=this.#e,A=[...r],s=[],o=[];try{for(let n of e){if(n.type!=="delete"&&n.type!=="put")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(n.type==="delete"&&n.response!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#r(n.request,n.options,s).length)throw new DOMException("???","InvalidStateError");let i;if(n.type==="delete"){if(i=this.#r(n.request,n.options),i.length===0)return[];for(let a of i){let c=r.indexOf(a);el(c!==-1),r.splice(c,1)}}else if(n.type==="put"){if(n.response==null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=n.request;if(!Pn(a.url))throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(n.options!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});i=this.#r(n.request);for(let c of i){let g=r.indexOf(c);el(g!==-1),r.splice(g,1)}r.push([n.request,n.response]),s.push([n.request,n.response])}o.push([n.request,n.response])}return o}catch(n){throw this.#e.length=0,this.#e=A,n}}#r(e,r,A){let s=[],o=A??this.#e;for(let n of o){let[i,a]=n;this.#o(e,i,a,r)&&s.push(n)}return s}#o(e,r,A=null,s){let o=new URL(e.url),n=new URL(r.url);if(s?.ignoreSearch&&(n.search="",o.search=""),!uG(o,n,!0))return!1;if(A==null||s?.ignoreVary||!A.headersList.contains("vary"))return!0;let i=$g(A.headersList.get("vary"));for(let a of i){if(a==="*")return!1;let c=r.headersList.get(a),g=e.headersList.get(a);if(c!==g)return!1}return!0}#s(e,r,A=1/0){let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=[];if(e===void 0)for(let i of this.#e)o.push(i[1]);else{let i=this.#r(s,r);for(let a of i)o.push(a[1])}let n=[];for(let i of o){let a=BG(i,"immutable");if(n.push(a.clone()),n.length>=A)break}return Object.freeze(n)}};Object.defineProperties(Hn.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:xr,matchAll:xr,add:xr,addAll:xr,put:xr,delete:xr,keys:xr});var vd=[{key:"ignoreSearch",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:T.converters.boolean,defaultValue:()=>!1}];T.converters.CacheQueryOptions=T.dictionaryConverter(vd);T.converters.MultiCacheQueryOptions=T.dictionaryConverter([...vd,{key:"cacheName",converter:T.converters.DOMString}]);T.converters.Response=T.interfaceConverter(hG);T.converters["sequence"]=T.sequenceConverter(T.converters.RequestInfo);xd.exports={Cache:Hn}});var _d=B((_P,Yd)=>{"use strict";var{kConstruct:Ms}=Jn(),{Cache:Vn}=Od(),{webidl:de}=Qe(),{kEnumerableProperty:vs}=M(),qn=class t{#e=new Map;constructor(){arguments[0]!==Ms&&de.illegalConstructor(),de.util.markAsUncloneable(this)}async match(e,r={}){if(de.brandCheck(this,t),de.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=de.converters.RequestInfo(e),r=de.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let A=this.#e.get(r.cacheName);return await new Vn(Ms,A).match(e,r)}}else for(let A of this.#e.values()){let o=await new Vn(Ms,A).match(e,r);if(o!==void 0)return o}}async has(e){de.brandCheck(this,t);let r="CacheStorage.has";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)}async open(e){de.brandCheck(this,t);let r="CacheStorage.open";if(de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)){let s=this.#e.get(e);return new Vn(Ms,s)}let A=[];return this.#e.set(e,A),new Vn(Ms,A)}async delete(e){de.brandCheck(this,t);let r="CacheStorage.delete";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.delete(e)}async keys(){return de.brandCheck(this,t),[...this.#e.keys()]}};Object.defineProperties(qn.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:vs,has:vs,open:vs,delete:vs,keys:vs});Yd.exports={CacheStorage:qn}});var Pd=B((JP,Jd)=>{"use strict";Jd.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var Al=B((PP,Wd)=>{"use strict";function fG(t){for(let e=0;e=0&&r<=8||r>=10&&r<=31||r===127)return!0}return!1}function tl(t){for(let e=0;e126||r===34||r===40||r===41||r===60||r===62||r===64||r===44||r===59||r===58||r===92||r===47||r===91||r===93||r===63||r===61||r===123||r===125)throw new Error("Invalid cookie name")}}function rl(t){let e=t.length,r=0;if(t[0]==='"'){if(e===1||t[e-1]!=='"')throw new Error("Invalid cookie value");--e,++r}for(;r126||A===34||A===44||A===59||A===92)throw new Error("Invalid cookie value")}}function Vd(t){for(let e=0;e126||r===59)throw new Error("Invalid cookie path")}}function Hd(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function pG(t){if(t===" ")return;if(t.length>255)throw new Error("Invalid cookie domain");let e=0;for(let r=0;r63)throw new Error("Invalid cookie domain")}if(e===0||t.charCodeAt(t.length-1)===45)throw new Error("Invalid cookie domain")}var mG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wn=Array(61).fill(0).map((t,e)=>e.toString().padStart(2,"0"));function qd(t){return typeof t=="number"&&(t=new Date(t)),`${mG[t.getUTCDay()]}, ${Wn[t.getUTCDate()]} ${wG[t.getUTCMonth()]} ${t.getUTCFullYear()} ${Wn[t.getUTCHours()]}:${Wn[t.getUTCMinutes()]}:${Wn[t.getUTCSeconds()]} GMT`}function yG(t){if(t<0)throw new Error("Invalid cookie max-age")}function RG(t){if(t.name.length===0)return null;tl(t.name),rl(t.value);let e=[`${t.name}=${t.value}`];t.name.startsWith("__Secure-")&&(t.secure=!0),t.name.startsWith("__Host-")&&(t.secure=!0,t.domain=null,t.path="/"),t.secure&&e.push("Secure"),t.httpOnly&&e.push("HttpOnly"),typeof t.maxAge=="number"&&(yG(t.maxAge),e.push(`Max-Age=${t.maxAge}`)),t.domain&&(pG(t.domain),e.push(`Domain=${t.domain}`)),t.path&&(Vd(t.path),e.push(`Path=${t.path}`)),t.expires&&t.expires.toString()!=="Invalid Date"&&e.push(`Expires=${qd(t.expires)}`),t.sameSite&&e.push(`SameSite=${t.sameSite}`);for(let r of t.unparsed){if(!r.includes("="))throw new Error("Invalid unparsed");let[A,...s]=r.split("="),o=A.trim(),n=s.join("=");tl(o),rl(n),e.push(`${o}=${n}`)}return e.join("; ")}Wd.exports={isCTLExcludingHtab:fG,validateCookieName:tl,validateCookiePath:Vd,validateCookieValue:rl,toIMFDate:qd,stringify:RG}});var Zd=B((HP,zd)=>{"use strict";var{maxNameValuePairSize:DG,maxAttributeValueSize:TG}=Pd(),{isCTLExcludingHtab:bG}=Al(),{collectASequenceOfCodePointsFast:zn}=Te(),kG=require("node:assert");function FG(t){if(bG(t))return null;let e="",r="",A="",s="";if(t.includes(";")){let o={position:0};e=zn(";",t,o),r=t.slice(o.position)}else e=t;if(!e.includes("="))s=e;else{let o={position:0};A=zn("=",e,o),s=e.slice(o.position+1)}return A=A.trim(),s=s.trim(),A.length+s.length>DG?null:{name:A,value:s,...MA(r)}}function MA(t,e={}){if(t.length===0)return e;kG(t[0]===";"),t=t.slice(1);let r="";t.includes(";")?(r=zn(";",t,{position:0}),t=t.slice(r.length)):(r=t,t="");let A="",s="";if(r.includes("=")){let n={position:0};A=zn("=",r,n),s=r.slice(n.position+1)}else A=r;if(A=A.trim(),s=s.trim(),s.length>TG)return MA(t,e);let o=A.toLowerCase();if(o==="expires"){let n=new Date(s);e.expires=n}else if(o==="max-age"){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!=="-"||!/^\d+$/.test(s))return MA(t,e);let i=Number(s);e.maxAge=i}else if(o==="domain"){let n=s;n[0]==="."&&(n=n.slice(1)),n=n.toLowerCase(),e.domain=n}else if(o==="path"){let n="";s.length===0||s[0]!=="/"?n="/":n=s,e.path=n}else if(o==="secure")e.secure=!0;else if(o==="httponly")e.httpOnly=!0;else if(o==="samesite"){let n=s.toLowerCase();n==="none"?e.sameSite="None":n==="strict"?e.sameSite="Strict":n==="lax"&&(e.sameSite="Lax")}else e.unparsed??=[],e.unparsed.push(`${A}=${s}`);return MA(t,e)}zd.exports={parseSetCookie:FG,parseUnparsedAttributes:MA}});var Xd=B((VP,Kd)=>{"use strict";var{parseSetCookie:SG}=Zd(),{stringify:NG}=Al(),{webidl:x}=Qe(),{Headers:Zn}=Ur();function UG(t){x.argumentLengthCheck(arguments,1,"getCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.get("cookie"),r={};if(!e)return r;for(let A of e.split(";")){let[s,...o]=A.split("=");r[s.trim()]=o.join("=")}return r}function GG(t,e,r){x.brandCheck(t,Zn,{strict:!1});let A="deleteCookie";x.argumentLengthCheck(arguments,2,A),e=x.converters.DOMString(e,A,"name"),r=x.converters.DeleteCookieAttributes(r),jd(t,{name:e,value:"",expires:new Date(0),...r})}function LG(t){x.argumentLengthCheck(arguments,1,"getSetCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.getSetCookie();return e?e.map(r=>SG(r)):[]}function jd(t,e){x.argumentLengthCheck(arguments,2,"setCookie"),x.brandCheck(t,Zn,{strict:!1}),e=x.converters.Cookie(e);let r=NG(e);r&&t.append("Set-Cookie",r)}x.converters.DeleteCookieAttributes=x.dictionaryConverter([{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null}]);x.converters.Cookie=x.dictionaryConverter([{converter:x.converters.DOMString,key:"name"},{converter:x.converters.DOMString,key:"value"},{converter:x.nullableConverter(t=>typeof t=="number"?x.converters["unsigned long long"](t):new Date(t)),key:"expires",defaultValue:()=>null},{converter:x.nullableConverter(x.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"secure",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:x.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:x.sequenceConverter(x.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);Kd.exports={getCookies:UG,deleteCookie:GG,getSetCookies:LG,setCookie:jd}});var xA=B((qP,ef)=>{"use strict";var{webidl:D}=Qe(),{kEnumerableProperty:Se}=M(),{kConstruct:$d}=$(),{MessagePort:MG}=require("node:worker_threads"),vA=class t extends Event{#e;constructor(e,r={}){if(e===$d){super(arguments[1],arguments[2]),D.util.markAsUncloneable(this);return}let A="MessageEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.MessageEventInit(r,A,"eventInitDict"),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get data(){return D.brandCheck(this,t),this.#e.data}get origin(){return D.brandCheck(this,t),this.#e.origin}get lastEventId(){return D.brandCheck(this,t),this.#e.lastEventId}get source(){return D.brandCheck(this,t),this.#e.source}get ports(){return D.brandCheck(this,t),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(e,r=!1,A=!1,s=null,o="",n="",i=null,a=[]){return D.brandCheck(this,t),D.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new t(e,{bubbles:r,cancelable:A,data:s,origin:o,lastEventId:n,source:i,ports:a})}static createFastMessageEvent(e,r){let A=new t($d,e,r);return A.#e=r,A.#e.data??=null,A.#e.origin??="",A.#e.lastEventId??="",A.#e.source??=null,A.#e.ports??=[],A}},{createFastMessageEvent:vG}=vA;delete vA.createFastMessageEvent;var jn=class t extends Event{#e;constructor(e,r={}){let A="CloseEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.CloseEventInit(r),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get wasClean(){return D.brandCheck(this,t),this.#e.wasClean}get code(){return D.brandCheck(this,t),this.#e.code}get reason(){return D.brandCheck(this,t),this.#e.reason}},Kn=class t extends Event{#e;constructor(e,r){let A="ErrorEvent constructor";D.argumentLengthCheck(arguments,1,A),super(e,r),D.util.markAsUncloneable(this),e=D.converters.DOMString(e,A,"type"),r=D.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return D.brandCheck(this,t),this.#e.message}get filename(){return D.brandCheck(this,t),this.#e.filename}get lineno(){return D.brandCheck(this,t),this.#e.lineno}get colno(){return D.brandCheck(this,t),this.#e.colno}get error(){return D.brandCheck(this,t),this.#e.error}};Object.defineProperties(vA.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:Se,origin:Se,lastEventId:Se,source:Se,ports:Se,initMessageEvent:Se});Object.defineProperties(jn.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:Se,code:Se,wasClean:Se});Object.defineProperties(Kn.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:Se,filename:Se,lineno:Se,colno:Se,error:Se});D.converters.MessagePort=D.interfaceConverter(MG);D.converters["sequence"]=D.sequenceConverter(D.converters.MessagePort);var sl=[{key:"bubbles",converter:D.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:D.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:D.converters.boolean,defaultValue:()=>!1}];D.converters.MessageEventInit=D.dictionaryConverter([...sl,{key:"data",converter:D.converters.any,defaultValue:()=>null},{key:"origin",converter:D.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:D.converters.DOMString,defaultValue:()=>""},{key:"source",converter:D.nullableConverter(D.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:D.converters["sequence"],defaultValue:()=>new Array(0)}]);D.converters.CloseEventInit=D.dictionaryConverter([...sl,{key:"wasClean",converter:D.converters.boolean,defaultValue:()=>!1},{key:"code",converter:D.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:D.converters.USVString,defaultValue:()=>""}]);D.converters.ErrorEventInit=D.dictionaryConverter([...sl,{key:"message",converter:D.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:D.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:D.converters.any}]);ef.exports={MessageEvent:vA,CloseEvent:jn,ErrorEvent:Kn,createFastMessageEvent:vG}});var Or=B((WP,tf)=>{"use strict";var xG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",OG={enumerable:!0,writable:!1,configurable:!1},YG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},_G={NOT_SENT:0,PROCESSING:1,SENT:2},JG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},PG=2**16-1,HG={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},VG=Buffer.allocUnsafe(0),qG={string:1,typedArray:2,arrayBuffer:3,blob:4};tf.exports={uid:xG,sentCloseFrameState:_G,staticPropertyDescriptors:OG,states:YG,opcodes:JG,maxUnsigned16Bit:PG,parserStates:HG,emptyBuffer:VG,sendHints:qG}});var xs=B((zP,rf)=>{"use strict";rf.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var _s=B((ZP,uf)=>{"use strict";var{kReadyState:Os,kController:WG,kResponse:zG,kBinaryType:ZG,kWebSocketURL:jG}=xs(),{states:Ys,opcodes:Ar}=Or(),{ErrorEvent:KG,createFastMessageEvent:XG}=xA(),{isUtf8:$G}=require("node:buffer"),{collectASequenceOfCodePointsFast:eL,removeHTTPWhitespace:Af}=Te();function tL(t){return t[Os]===Ys.CONNECTING}function rL(t){return t[Os]===Ys.OPEN}function AL(t){return t[Os]===Ys.CLOSING}function sL(t){return t[Os]===Ys.CLOSED}function ol(t,e,r=(s,o)=>new Event(s,o),A={}){let s=r(t,A);e.dispatchEvent(s)}function oL(t,e,r){if(t[Os]!==Ys.OPEN)return;let A;if(e===Ar.TEXT)try{A=lf(r)}catch{of(t,"Received invalid UTF-8 in text frame.");return}else e===Ar.BINARY&&(t[ZG]==="blob"?A=new Blob([r]):A=nL(r));ol("message",t,XG,{origin:t[jG].origin,data:A})}function nL(t){return t.byteLength===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function iL(t){if(t.length===0)return!1;for(let e=0;e126||r===34||r===40||r===41||r===44||r===47||r===58||r===59||r===60||r===61||r===62||r===63||r===64||r===91||r===92||r===93||r===123||r===125)return!1}return!0}function aL(t){return t>=1e3&&t<1015?t!==1004&&t!==1005&&t!==1006:t>=3e3&&t<=4999}function of(t,e){let{[WG]:r,[zG]:A}=t;r.abort(),A?.socket&&!A.socket.destroyed&&A.socket.destroy(),e&&ol("error",t,(s,o)=>new KG(s,o),{error:new Error(e),message:e})}function nf(t){return t===Ar.CLOSE||t===Ar.PING||t===Ar.PONG}function af(t){return t===Ar.CONTINUATION}function cf(t){return t===Ar.TEXT||t===Ar.BINARY}function cL(t){return cf(t)||af(t)||nf(t)}function gL(t){let e={position:0},r=new Map;for(;e.position57)return!1}let e=Number.parseInt(t,10);return e>=8&&e<=15}var gf=typeof process.versions.icu=="string",sf=gf?new TextDecoder("utf-8",{fatal:!0}):void 0,lf=gf?sf.decode.bind(sf):function(t){if($G(t))return t.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};uf.exports={isConnecting:tL,isEstablished:rL,isClosing:AL,isClosed:sL,fireEvent:ol,isValidSubprotocol:iL,isValidStatusCode:aL,failWebsocketConnection:of,websocketMessageReceived:oL,utf8Decode:lf,isControlFrame:nf,isContinuationFrame:af,isTextBinaryFrame:cf,isValidOpcode:cL,parseExtensions:gL,isValidClientWindowBits:lL}});var $n=B((jP,Ef)=>{"use strict";var{maxUnsigned16Bit:uL}=Or(),Xn=16386,nl,Js=null,OA=Xn;try{nl=require("node:crypto")}catch{nl={randomFillSync:function(e,r,A){for(let s=0;suL?(n+=8,o=127):s>125&&(n+=2,o=126);let i=Buffer.allocUnsafe(s+n);i[0]=i[1]=0,i[0]|=128,i[0]=(i[0]&240)+e;i[n-4]=A[0],i[n-3]=A[1],i[n-2]=A[2],i[n-1]=A[3],i[1]=o,o===126?i.writeUInt16BE(s,2):o===127&&(i[2]=i[3]=0,i.writeUIntBE(s,4,6)),i[1]|=128;for(let a=0;a{"use strict";var{uid:hL,states:Ps,sentCloseFrameState:ei,emptyBuffer:QL,opcodes:BL}=Or(),{kReadyState:Hs,kSentClose:ti,kByteParser:Qf,kReceivedClose:hf,kResponse:Bf}=xs(),{fireEvent:IL,failWebsocketConnection:sr,isClosing:CL,isClosed:dL,isEstablished:fL,parseExtensions:pL}=_s(),{channels:YA}=jr(),{CloseEvent:mL}=xA(),{makeRequest:wL}=NA(),{fetching:yL}=Gs(),{Headers:RL,getHeadersList:DL}=Ur(),{getDecodeSplit:TL}=Ge(),{WebsocketFrameSend:bL}=$n(),al;try{al=require("node:crypto")}catch{}function kL(t,e,r,A,s,o){let n=t;n.protocol=t.protocol==="ws:"?"http:":"https:";let i=wL({urlList:[n],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(o.headers){let l=DL(new RL(o.headers));i.headersList=l}let a=al.randomBytes(16).toString("base64");i.headersList.append("sec-websocket-key",a),i.headersList.append("sec-websocket-version","13");for(let l of e)i.headersList.append("sec-websocket-protocol",l);return i.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),yL({request:i,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(l){if(l.type==="error"||l.status!==101){sr(A,"Received network error or non-101 status code.");return}if(e.length!==0&&!l.headersList.get("Sec-WebSocket-Protocol")){sr(A,"Server did not respond with sent protocols.");return}if(l.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){sr(A,'Server did not set Upgrade header to "websocket".');return}if(l.headersList.get("Connection")?.toLowerCase()!=="upgrade"){sr(A,'Server did not set Connection header to "upgrade".');return}let u=l.headersList.get("Sec-WebSocket-Accept"),E=al.createHash("sha1").update(a+hL).digest("base64");if(u!==E){sr(A,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let h=l.headersList.get("Sec-WebSocket-Extensions"),C;if(h!==null&&(C=pL(h),!C.has("permessage-deflate"))){sr(A,"Sec-WebSocket-Extensions header does not match.");return}let I=l.headersList.get("Sec-WebSocket-Protocol");if(I!==null&&!TL("sec-websocket-protocol",i.headersList).includes(I)){sr(A,"Protocol was not set in the opening handshake.");return}l.socket.on("data",If),l.socket.on("close",Cf),l.socket.on("error",df),YA.open.hasSubscribers&&YA.open.publish({address:l.socket.address(),protocol:I,extensions:h}),s(l,C)}})}function FL(t,e,r,A){if(!(CL(t)||dL(t)))if(!fL(t))sr(t,"Connection was closed before it was established."),t[Hs]=Ps.CLOSING;else if(t[ti]===ei.NOT_SENT){t[ti]=ei.PROCESSING;let s=new bL;e!==void 0&&r===void 0?(s.frameData=Buffer.allocUnsafe(2),s.frameData.writeUInt16BE(e,0)):e!==void 0&&r!==void 0?(s.frameData=Buffer.allocUnsafe(2+A),s.frameData.writeUInt16BE(e,0),s.frameData.write(r,2,"utf-8")):s.frameData=QL,t[Bf].socket.write(s.createFrame(BL.CLOSE)),t[ti]=ei.SENT,t[Hs]=Ps.CLOSING}else t[Hs]=Ps.CLOSING}function If(t){this.ws[Qf].write(t)||this.pause()}function Cf(){let{ws:t}=this,{[Bf]:e}=t;e.socket.off("data",If),e.socket.off("close",Cf),e.socket.off("error",df);let r=t[ti]===ei.SENT&&t[hf],A=1005,s="",o=t[Qf].closingInfo;o&&!o.error?(A=o.code??1005,s=o.reason):t[hf]||(A=1006),t[Hs]=Ps.CLOSED,IL("close",t,(n,i)=>new mL(n,i),{wasClean:r,code:A,reason:s}),YA.close.hasSubscribers&&YA.close.publish({websocket:t,code:A,reason:s})}function df(t){let{ws:e}=this;e[Hs]=Ps.CLOSING,YA.socketError.hasSubscribers&&YA.socketError.publish(t),this.destroy()}ff.exports={establishWebSocketConnection:kL,closeWebSocketConnection:FL}});var mf=B((XP,pf)=>{"use strict";var{createInflateRaw:SL,Z_DEFAULT_WINDOWBITS:NL}=require("node:zlib"),{isValidClientWindowBits:UL}=_s(),{MessageSizeExceededError:GL}=Y(),LL=Buffer.from([0,0,255,255]),ri=Symbol("kBuffer"),Vs=Symbol("kLength"),gl=class{#e;#t={};#r=0;constructor(e,r){this.#t.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=e.get("server_max_window_bits"),this.#r=r.maxPayloadSize}decompress(e,r,A){if(!this.#e){let s=NL;if(this.#t.serverMaxWindowBits){if(!UL(this.#t.serverMaxWindowBits)){A(new Error("Invalid server_max_window_bits"));return}s=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=SL({windowBits:s})}catch(o){A(o);return}this.#e[ri]=[],this.#e[Vs]=0,this.#e.on("data",o=>{if(this.#e[Vs]+=o.length,this.#r>0&&this.#e[Vs]>this.#r){A(new GL),this.#e.removeAllListeners(),this.#e=null;return}this.#e[ri].push(o)}),this.#e.on("error",o=>{this.#e=null,A(o)})}this.#e.write(e),r&&this.#e.write(LL),this.#e.flush(()=>{if(!this.#e)return;let s=Buffer.concat(this.#e[ri],this.#e[Vs]);this.#e[ri].length=0,this.#e[Vs]=0,A(null,s)})}};pf.exports={PerMessageDeflate:gl}});var Nf=B(($P,Sf)=>{"use strict";var{Writable:ML}=require("node:stream"),vL=require("node:assert"),{parserStates:Ne,opcodes:_A,states:xL,emptyBuffer:wf,sentCloseFrameState:yf}=Or(),{kReadyState:OL,kSentClose:Rf,kResponse:Df,kReceivedClose:Tf}=xs(),{channels:Ai}=jr(),{isValidStatusCode:YL,isValidOpcode:_L,failWebsocketConnection:Je,websocketMessageReceived:bf,utf8Decode:JL,isControlFrame:ll,isTextBinaryFrame:ul,isContinuationFrame:PL}=_s(),{WebsocketFrameSend:kf}=$n(),{closeWebSocketConnection:Ff}=cl(),{PerMessageDeflate:HL}=mf(),{MessageSizeExceededError:El}=Y();function qs(t,e,r){Ff(t,e,r,Buffer.byteLength(r)),Je(t,r)}var hl=class extends ML{#e=[];#t=0;#r=0;#o=!1;#s=Ne.INFO;#A={};#n=[];#i;#c;#a;constructor(e,r,A={}){super(),this.ws=e,this.#i=r??new Map,this.#c=A.maxFragments??0,this.#a=A.maxPayloadSize??0,this.#i.has("permessage-deflate")&&this.#i.set("permessage-deflate",new HL(r,A))}_write(e,r,A){this.#e.push(e),this.#r+=e.length,this.#o=!0,this.run(A)}#g(){return this.#a>0&&!ll(this.#A.opcode)&&this.#A.payloadLength+this.#t>this.#a?(qs(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(e){for(;this.#o;)if(this.#s===Ne.INFO){if(this.#r<2)return e();let r=this.consume(2),A=(r[0]&128)!==0,s=r[0]&15,o=(r[1]&128)===128,n=!A&&s!==_A.CONTINUATION,i=r[1]&127,a=r[0]&64,c=r[0]&32,g=r[0]&16;if(!_L(s))return Je(this.ws,"Invalid opcode received"),e();if(o)return Je(this.ws,"Frame cannot be masked"),e();if(a!==0&&!this.#i.has("permessage-deflate")){Je(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||g!==0){Je(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(n&&!ul(s)){Je(this.ws,"Invalid frame type was fragmented.");return}if(ul(s)&&this.#n.length>0){Je(this.ws,"Expected continuation frame");return}if(this.#A.fragmented&&n){Je(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((i>125||n)&&ll(s)){Je(this.ws,"Control frame either too large or fragmented");return}if(PL(s)&&this.#n.length===0&&!this.#A.compressed){Je(this.ws,"Unexpected continuation frame");return}if(i<=125){if(this.#A.payloadLength=i,this.#s=Ne.READ_DATA,!this.#g())return}else i===126?this.#s=Ne.PAYLOADLENGTH_16:i===127&&(this.#s=Ne.PAYLOADLENGTH_64);ul(s)&&(this.#A.binaryType=s,this.#A.compressed=a!==0),this.#A.opcode=s,this.#A.masked=o,this.#A.fin=A,this.#A.fragmented=n}else if(this.#s===Ne.PAYLOADLENGTH_16){if(this.#r<2)return e();let r=this.consume(2);if(this.#A.payloadLength=r.readUInt16BE(0),this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.PAYLOADLENGTH_64){if(this.#r<8)return e();let r=this.consume(8),A=r.readUInt32BE(0),s=r.readUInt32BE(4);if(A!==0||s>2**31-1){Je(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#A.payloadLength=s,this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.READ_DATA){if(this.#r{if(A){let o=A instanceof El?1009:1007;qs(this.ws,o,A.message);return}if(this.writeFragments(s)){if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}if(!this.#A.fin){this.#s=Ne.INFO,this.#o=!0,this.run(e);return}bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#o=!0,this.#s=Ne.INFO,this.run(e)}}),this.#o=!1;break}else{if(!this.writeFragments(r))return;if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}!this.#A.fragmented&&this.#A.fin&&bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#s=Ne.INFO}}}consume(e){if(e>this.#r)throw new Error("Called consume() before buffers satiated.");if(e===0)return wf;if(this.#e[0].length===e)return this.#r-=this.#e[0].length,this.#e.shift();let r=Buffer.allocUnsafe(e),A=0;for(;A!==e;){let s=this.#e[0],{length:o}=s;if(o+A===e){r.set(this.#e.shift(),A);break}else if(o+A>e){r.set(s.subarray(0,e-A),A),this.#e[0]=s.subarray(e-A);break}else r.set(this.#e.shift(),A),A+=s.length}return this.#r-=e,r}writeFragments(e){return this.#c>0&&this.#n.length===this.#c?(qs(this.ws,1008,"Too many message fragments"),!1):(this.#t+=e.length,this.#n.push(e),!0)}consumeFragments(){let e=this.#n;if(e.length===1)return this.#t=0,e.shift();let r=Buffer.concat(e,this.#t);return this.#n=[],this.#t=0,r}parseCloseBody(e){vL(e.length!==1);let r;if(e.length>=2&&(r=e.readUInt16BE(0)),r!==void 0&&!YL(r))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);A[0]===239&&A[1]===187&&A[2]===191&&(A=A.subarray(3));try{A=JL(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:r,reason:A,error:!1}}parseControlFrame(e){let{opcode:r,payloadLength:A}=this.#A;if(r===_A.CLOSE){if(A===1)return Je(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#A.closeInfo=this.parseCloseBody(e),this.#A.closeInfo.error){let{code:s,reason:o}=this.#A.closeInfo;return Ff(this.ws,s,o,o.length),Je(this.ws,o),!1}if(this.ws[Rf]!==yf.SENT){let s=wf;this.#A.closeInfo.code&&(s=Buffer.allocUnsafe(2),s.writeUInt16BE(this.#A.closeInfo.code,0));let o=new kf(s);this.ws[Df].socket.write(o.createFrame(_A.CLOSE),n=>{n||(this.ws[Rf]=yf.SENT)})}return this.ws[OL]=xL.CLOSING,this.ws[Tf]=!0,!1}else if(r===_A.PING){if(!this.ws[Tf]){let s=new kf(e);this.ws[Df].socket.write(s.createFrame(_A.PONG)),Ai.ping.hasSubscribers&&Ai.ping.publish({payload:e})}}else r===_A.PONG&&Ai.pong.hasSubscribers&&Ai.pong.publish({payload:e});return!0}get closingInfo(){return this.#A.closeInfo}};Sf.exports={ByteParser:hl}});var vf=B((eH,Mf)=>{"use strict";var{WebsocketFrameSend:VL}=$n(),{opcodes:Uf,sendHints:JA}=Or(),qL=fc(),Gf=Buffer[Symbol.species],Ql=class{#e=new qL;#t=!1;#r;constructor(e){this.#r=e}add(e,r,A){if(A!==JA.blob){let o=Lf(e,A);if(!this.#t)this.#r.write(o,r);else{let n={promise:null,callback:r,frame:o};this.#e.push(n)}return}let s={promise:e.arrayBuffer().then(o=>{s.promise=null,s.frame=Lf(o,A)}),callback:r,frame:null};this.#e.push(s),this.#t||this.#o()}async#o(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let r=e.shift();r.promise!==null&&await r.promise,this.#r.write(r.frame,r.callback),r.callback=r.frame=null}this.#t=!1}};function Lf(t,e){return new VL(WL(t,e)).createFrame(e===JA.string?Uf.TEXT:Uf.BINARY)}function WL(t,e){switch(e){case JA.string:return Buffer.from(t);case JA.arrayBuffer:case JA.blob:return new Gf(t);case JA.typedArray:return new Gf(t.buffer,t.byteOffset,t.byteLength)}}Mf.exports={SendQueue:Ql}});var Wf=B((tH,qf)=>{"use strict";var{webidl:U}=Qe(),{URLSerializer:zL}=Te(),{environmentSettingsObject:xf}=Ge(),{staticPropertyDescriptors:or,states:Ws,sentCloseFrameState:ZL,sendHints:si}=Or(),{kWebSocketURL:Of,kReadyState:Bl,kController:Yf,kBinaryType:oi,kResponse:_f,kSentClose:jL,kByteParser:KL}=xs(),{isConnecting:XL,isEstablished:$L,isClosing:eM,isValidSubprotocol:tM,fireEvent:Jf}=_s(),{establishWebSocketConnection:rM,closeWebSocketConnection:Pf}=cl(),{ByteParser:AM}=Nf(),{kEnumerableProperty:Ze,isBlobLike:Hf}=M(),{getGlobalDispatcher:sM}=fn(),{types:Vf}=require("node:util"),{ErrorEvent:oM,CloseEvent:nM}=xA(),{SendQueue:iM}=vf(),Pe=class t extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#o="";#s;constructor(e,r=[]){super(),U.util.markAsUncloneable(this);let A="WebSocket constructor";U.argumentLengthCheck(arguments,1,A);let s=U.converters["DOMString or sequence or WebSocketInit"](r,A,"options");e=U.converters.USVString(e,A,"url"),r=s.protocols;let o=xf.settingsObject.baseUrl,n;try{n=new URL(e,o)}catch(a){throw new DOMException(a,"SyntaxError")}if(n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),n.protocol!=="ws:"&&n.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${n.protocol}`,"SyntaxError");if(n.hash||n.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof r=="string"&&(r=[r]),r.length!==new Set(r.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(r.length>0&&!r.every(a=>tM(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[Of]=new URL(n.href);let i=xf.settingsObject;this[Yf]=rM(n,r,i,this,(a,c)=>this.#A(a,c),s),this[Bl]=t.CONNECTING,this[jL]=ZL.NOT_SENT,this[oi]="blob"}close(e=void 0,r=void 0){U.brandCheck(this,t);let A="WebSocket.close";if(e!==void 0&&(e=U.converters["unsigned short"](e,A,"code",{clamp:!0})),r!==void 0&&(r=U.converters.USVString(r,A,"reason")),e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");let s=0;if(r!==void 0&&(s=Buffer.byteLength(r),s>123))throw new DOMException(`Reason must be less than 123 bytes; received ${s}`,"SyntaxError");Pf(this,e,r,s)}send(e){U.brandCheck(this,t);let r="WebSocket.send";if(U.argumentLengthCheck(arguments,1,r),e=U.converters.WebSocketSendData(e,r,"data"),XL(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!$L(this)||eM(this)))if(typeof e=="string"){let A=Buffer.byteLength(e);this.#t+=A,this.#s.add(e,()=>{this.#t-=A},si.string)}else Vf.isArrayBuffer(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.arrayBuffer)):ArrayBuffer.isView(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.typedArray)):Hf(e)&&(this.#t+=e.size,this.#s.add(e,()=>{this.#t-=e.size},si.blob))}get readyState(){return U.brandCheck(this,t),this[Bl]}get bufferedAmount(){return U.brandCheck(this,t),this.#t}get url(){return U.brandCheck(this,t),zL(this[Of])}get extensions(){return U.brandCheck(this,t),this.#o}get protocol(){return U.brandCheck(this,t),this.#r}get onopen(){return U.brandCheck(this,t),this.#e.open}set onopen(e){U.brandCheck(this,t),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onerror(){return U.brandCheck(this,t),this.#e.error}set onerror(e){U.brandCheck(this,t),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}get onclose(){return U.brandCheck(this,t),this.#e.close}set onclose(e){U.brandCheck(this,t),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof e=="function"?(this.#e.close=e,this.addEventListener("close",e)):this.#e.close=null}get onmessage(){return U.brandCheck(this,t),this.#e.message}set onmessage(e){U.brandCheck(this,t),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get binaryType(){return U.brandCheck(this,t),this[oi]}set binaryType(e){U.brandCheck(this,t),e!=="blob"&&e!=="arraybuffer"?this[oi]="blob":this[oi]=e}#A(e,r){this[_f]=e;let A=this[Yf]?.dispatcher?.webSocketOptions,s=A?.maxFragments,o=A?.maxPayloadSize,n=new AM(this,r,{maxFragments:s,maxPayloadSize:o});n.on("drain",aM),n.on("error",cM.bind(this)),e.socket.ws=this,this[KL]=n,this.#s=new iM(e.socket),this[Bl]=Ws.OPEN;let i=e.headersList.get("sec-websocket-extensions");i!==null&&(this.#o=i);let a=e.headersList.get("sec-websocket-protocol");a!==null&&(this.#r=a),Jf("open",this)}};Pe.CONNECTING=Pe.prototype.CONNECTING=Ws.CONNECTING;Pe.OPEN=Pe.prototype.OPEN=Ws.OPEN;Pe.CLOSING=Pe.prototype.CLOSING=Ws.CLOSING;Pe.CLOSED=Pe.prototype.CLOSED=Ws.CLOSED;Object.defineProperties(Pe.prototype,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or,url:Ze,readyState:Ze,bufferedAmount:Ze,onopen:Ze,onerror:Ze,onclose:Ze,close:Ze,onmessage:Ze,binaryType:Ze,send:Ze,extensions:Ze,protocol:Ze,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Pe,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or});U.converters["sequence"]=U.sequenceConverter(U.converters.DOMString);U.converters["DOMString or sequence"]=function(t,e,r){return U.util.Type(t)==="Object"&&Symbol.iterator in t?U.converters["sequence"](t):U.converters.DOMString(t,e,r)};U.converters.WebSocketInit=U.dictionaryConverter([{key:"protocols",converter:U.converters["DOMString or sequence"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:U.converters.any,defaultValue:()=>sM()},{key:"headers",converter:U.nullableConverter(U.converters.HeadersInit)}]);U.converters["DOMString or sequence or WebSocketInit"]=function(t){return U.util.Type(t)==="Object"&&!(Symbol.iterator in t)?U.converters.WebSocketInit(t):{protocols:U.converters["DOMString or sequence"](t)}};U.converters.WebSocketSendData=function(t){if(U.util.Type(t)==="Object"){if(Hf(t))return U.converters.Blob(t,{strict:!1});if(ArrayBuffer.isView(t)||Vf.isArrayBuffer(t))return U.converters.BufferSource(t)}return U.converters.USVString(t)};function aM(){this.ws[_f].socket.resume()}function cM(t){let e,r;t instanceof nM?(e=t.reason,r=t.code):e=t.message,Jf("error",this,()=>new oM("error",{error:t,message:e})),Pf(this,r)}qf.exports={WebSocket:Pe}});var Il=B((rH,zf)=>{"use strict";function gM(t){return t.indexOf("\0")===-1}function lM(t){if(t.length===0)return!1;for(let e=0;e57)return!1;return!0}function uM(t){return new Promise(e=>{setTimeout(e,t).unref()})}zf.exports={isValidLastEventId:gM,isASCIINumber:lM,delay:uM}});var Xf=B((AH,Kf)=>{"use strict";var{Transform:EM}=require("node:stream"),{isASCIINumber:Zf,isValidLastEventId:jf}=Il(),vt=[239,187,191],Cl=10,ni=13,hM=58,QM=32,dl=class extends EM{state=null;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,r,A){if(e.length===0){A();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===vt[0]){A();return}this.checkBOM=!1,A();return;case 2:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]){A();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,A();return}this.checkBOM=!1;break;default:this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1;break}for(;this.pos0&&(r[s]=o);break}}processEvent(e){e.retry&&Zf(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&jf(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};Kf.exports={EventSourceStream:dl}});var np=B((sH,op)=>{"use strict";var{pipeline:BM}=require("node:stream"),{fetching:IM}=Gs(),{makeRequest:CM}=NA(),{webidl:xt}=Qe(),{EventSourceStream:dM}=Xf(),{parseMIMEType:fM}=Te(),{createFastMessageEvent:pM}=xA(),{isNetworkError:$f}=Ns(),{delay:mM}=Il(),{kEnumerableProperty:Yr}=M(),{environmentSettingsObject:ep}=Ge(),tp=!1,rp=3e3,zs=0,Ap=1,Zs=2,wM="anonymous",yM="use-credentials",PA=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#o=zs;#s=null;#A=null;#n;#i;constructor(e,r={}){super(),xt.util.markAsUncloneable(this);let A="EventSource constructor";xt.argumentLengthCheck(arguments,1,A),tp||(tp=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=xt.converters.USVString(e,A,"url"),r=xt.converters.EventSourceInitDict(r,A,"eventSourceInitDict"),this.#n=r.dispatcher,this.#i={lastEventId:"",reconnectionTime:rp};let s=ep,o;try{o=new URL(e,s.settingsObject.baseUrl),this.#i.origin=o.origin}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=o.href;let n=wM;r.withCredentials&&(n=yM,this.#r=!0);let i={redirect:"follow",keepalive:!0,mode:"cors",credentials:n==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};i.client=ep.settingsObject,i.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],i.cache="no-store",i.initiator="other",i.urlList=[new URL(this.#t)],this.#s=CM(i),this.#c()}get readyState(){return this.#o}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#o===Zs)return;this.#o=zs;let e={request:this.#s,dispatcher:this.#n},r=A=>{$f(A)&&(this.dispatchEvent(new Event("error")),this.close()),this.#a()};e.processResponseEndOfBody=r,e.processResponse=A=>{if($f(A))if(A.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#a();return}let s=A.headersList.get("content-type",!0),o=s!==null?fM(s):"failure",n=o!=="failure"&&o.essence==="text/event-stream";if(A.status!==200||n===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#o=Ap,this.dispatchEvent(new Event("open")),this.#i.origin=A.urlList[A.urlList.length-1].origin;let i=new dM({eventSourceSettings:this.#i,push:a=>{this.dispatchEvent(pM(a.type,a.options))}});BM(A.body.stream,i,a=>{a?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#A=IM(e)}async#a(){this.#o!==Zs&&(this.#o=zs,this.dispatchEvent(new Event("error")),await mM(this.#i.reconnectionTime),this.#o===zs&&(this.#i.lastEventId.length&&this.#s.headersList.set("last-event-id",this.#i.lastEventId,!0),this.#c()))}close(){xt.brandCheck(this,t),this.#o!==Zs&&(this.#o=Zs,this.#A.abort(),this.#s=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}},sp={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:zs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:Ap,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:Zs,writable:!1}};Object.defineProperties(PA,sp);Object.defineProperties(PA.prototype,sp);Object.defineProperties(PA.prototype,{close:Yr,onerror:Yr,onmessage:Yr,onopen:Yr,readyState:Yr,url:Yr,withCredentials:Yr});xt.converters.EventSourceInitDict=xt.dictionaryConverter([{key:"withCredentials",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:xt.converters.any}]);op.exports={EventSource:PA,defaultReconnectionTime:rp}});var ci=B((oH,N)=>{"use strict";var RM=BA(),ip=$A(),DM=IA(),TM=AB(),bM=CA(),kM=Yc(),FM=TB(),SM=GB(),ap=Y(),ai=M(),{InvalidArgumentError:ii}=ap,HA=fI(),NM=ts(),UM=pg(),GM=rC(),LM=yg(),MM=ag(),vM=gn(),{getGlobalDispatcher:cp,setGlobalDispatcher:xM}=fn(),OM=pn(),YM=Xo(),_M=$o();Object.assign(ip.prototype,HA);N.exports.Dispatcher=ip;N.exports.Client=RM;N.exports.Pool=DM;N.exports.BalancedPool=TM;N.exports.Agent=bM;N.exports.ProxyAgent=kM;N.exports.EnvHttpProxyAgent=FM;N.exports.RetryAgent=SM;N.exports.RetryHandler=vM;N.exports.DecoratorHandler=OM;N.exports.RedirectHandler=YM;N.exports.createRedirectInterceptor=_M;N.exports.interceptors={redirect:cC(),retry:lC(),dump:EC(),dns:BC()};N.exports.buildConnector=NM;N.exports.errors=ap;N.exports.util={parseHeaders:ai.parseHeaders,headerNameToString:ai.headerNameToString};function js(t){return(e,r,A)=>{if(typeof r=="function"&&(A=r,r=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new ii("invalid url");if(r!=null&&typeof r!="object")throw new ii("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new ii("invalid opts.path");let n=r.path;r.path.startsWith("/")||(n=`/${n}`),e=new URL(ai.parseOrigin(e).origin+n)}else r||(r=typeof e=="object"?e:{}),e=ai.parseURL(e);let{agent:s,dispatcher:o=cp()}=r;if(s)throw new ii("unsupported opts.agent. Did you mean opts.client?");return t.call(o,{...r,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:r.method||(r.body?"PUT":"GET")},A)}}N.exports.setGlobalDispatcher=xM;N.exports.getGlobalDispatcher=cp;var JM=Gs().fetch;N.exports.fetch=async function(e,r=void 0){try{return await JM(e,r)}catch(A){throw A&&typeof A=="object"&&Error.captureStackTrace(A),A}};N.exports.Headers=Ur().Headers;N.exports.Response=Ns().Response;N.exports.Request=NA().Request;N.exports.FormData=as().FormData;N.exports.File=globalThis.File??require("node:buffer").File;N.exports.FileReader=Nd().FileReader;var{setGlobalOrigin:PM,getGlobalOrigin:HM}=_a();N.exports.setGlobalOrigin=PM;N.exports.getGlobalOrigin=HM;var{CacheStorage:VM}=_d(),{kConstruct:qM}=Jn();N.exports.caches=new VM(qM);var{deleteCookie:WM,getCookies:zM,getSetCookies:ZM,setCookie:jM}=Xd();N.exports.deleteCookie=WM;N.exports.getCookies=zM;N.exports.getSetCookies=ZM;N.exports.setCookie=jM;var{parseMIMEType:KM,serializeAMimeType:XM}=Te();N.exports.parseMIMEType=KM;N.exports.serializeAMimeType=XM;var{CloseEvent:$M,ErrorEvent:ev,MessageEvent:tv}=xA();N.exports.WebSocket=Wf().WebSocket;N.exports.CloseEvent=$M;N.exports.ErrorEvent=ev;N.exports.MessageEvent=tv;N.exports.request=js(HA.request);N.exports.stream=js(HA.stream);N.exports.pipeline=js(HA.pipeline);N.exports.connect=js(HA.connect);N.exports.upgrade=js(HA.upgrade);N.exports.MockClient=UM;N.exports.MockPool=LM;N.exports.MockAgent=GM;N.exports.mockErrors=MM;var{EventSource:rv}=np();N.exports.EventSource=rv});var Up=B(Ci=>{"use strict";Object.defineProperty(Ci,"__esModule",{value:!0});Ci.getProxyUrl=Rv;Ci.checkBypass=Np;function Rv(t){let e=t.protocol==="https:";if(Np(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new Ii(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new Ii(`http://${r}`)}else return}function Np(t){if(!t.hostname)return!1;let e=t.hostname;if(Dv(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Dv(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var Ii=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}}});var Lp=B(re=>{"use strict";var Tv=re&&re.__createBinding||(Object.create?(function(t,e,r,A){A===void 0&&(A=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,A,s)}):(function(t,e,r,A){A===void 0&&(A=r),t[A]=e[r]})),bv=re&&re.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),mi=re&&re.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var A=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(A[A.length]=s);return A},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var A=t(e),s=0;sae(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ae(this,void 0,void 0,function*(){return new Promise(e=>ae(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};re.HttpClientResponse=pi;function Mv(t){return new URL(t).protocol==="https:"}var vl=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ae(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ae(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ae(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ae(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ae(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ae(this,arguments,void 0,function*(r,A={}){A[ye.Accept]=this._getExistingOrDefaultHeader(A,ye.Accept,Yt.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ae(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&Uv.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===Ke.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Sv.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!Nv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pi(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Ml.getProxyUrl(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?Gp:Ll;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},ro(this.requestOptions.headers),ro(e||{})):ro(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=ro(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=ro(this.requestOptions.headers)[ye.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[ye.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Ml.getProxyUrl(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||Ll.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?di.httpsOverHttps:di.httpsOverHttp:a=c?di.httpOverHttps:di.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new Gp.Agent(i):new Ll.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new kv.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ae(this,void 0,void 0,function*(){e=Math.min(Gv,e);let r=Lv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ae(this,void 0,void 0,function*(){return new Promise((A,s)=>ae(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===Ke.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fi(g,o);l.result=n.result,s(l)}else A(n)}))})}};re.HttpClient=vl;var ro=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{})});var nm=B(yi=>{"use strict";Object.defineProperty(yi,"__esModule",{value:!0});yi.format=sx;yi.parse=ox;var tx=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,tm=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rx=/[\\"]/g,Ax=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rm=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function sx(t){let{type:e,parameters:r}=t;if(!e||!Ax.test(e))throw new TypeError(`Invalid type: ${e}`);let A=e;if(r)for(let s of Object.keys(r)){if(!tm.test(s))throw new TypeError(`Invalid parameter name: ${s}`);A+=`; ${s}=${cx(r[s])}`}return A}function ox(t,e){let r=t.length,A=Pl(t,0,r),s=A;A=Jl(t,A,r);let o=Hl(t,s,A),n=t.slice(s,o).toLowerCase(),i=e?.parameters===!1?new rm:ax(t,A,r);return{type:n,parameters:i}}var Am=32,sm=9,om=59,nx=61,em=34,ix=92;function ax(t,e,r){let A=new rm;e:for(;ee;){let A=t.charCodeAt(r-1);if(A!==Am&&A!==sm)break;r--}return r}function cx(t){if(tm.test(t))return t;if(tx.test(t))return`"${t.replace(rx,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var zA=B((Y2,Sm)=>{"use strict";var Px="2.0.0",Hx=Number.MAX_SAFE_INTEGER||9007199254740991,Vx=16,qx=250,Wx=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Sm.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Vx,MAX_SAFE_BUILD_LENGTH:qx,MAX_SAFE_INTEGER:Hx,RELEASE_TYPES:Wx,SEMVER_SPEC_VERSION:Px,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var oo=B((_2,Nm)=>{"use strict";var zx=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};Nm.exports=zx});var ZA=B((mt,Um)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:ou,MAX_SAFE_BUILD_LENGTH:Zx,MAX_LENGTH:jx}=zA(),Kx=oo();mt=Um.exports={};var Xx=mt.re=[],$x=mt.safeRe=[],m=mt.src=[],eO=mt.safeSrc=[],w=mt.t={},tO=0,nu="[a-zA-Z0-9-]",rO=[["\\s",1],["\\d",jx],[nu,Zx]],AO=t=>{for(let[e,r]of rO)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},G=(t,e,r)=>{let A=AO(e),s=tO++;Kx(t,s,e),w[t]=s,m[s]=e,eO[s]=A,Xx[s]=new RegExp(e,r?"g":void 0),$x[s]=new RegExp(A,r?"g":void 0)};G("NUMERICIDENTIFIER","0|[1-9]\\d*");G("NUMERICIDENTIFIERLOOSE","\\d+");G("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${nu}*`);G("MAINVERSION",`(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})`);G("MAINVERSIONLOOSE",`(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASEIDENTIFIER",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIER]})`);G("PRERELEASEIDENTIFIERLOOSE",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASE",`(?:-(${m[w.PRERELEASEIDENTIFIER]}(?:\\.${m[w.PRERELEASEIDENTIFIER]})*))`);G("PRERELEASELOOSE",`(?:-?(${m[w.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${m[w.PRERELEASEIDENTIFIERLOOSE]})*))`);G("BUILDIDENTIFIER",`${nu}+`);G("BUILD",`(?:\\+(${m[w.BUILDIDENTIFIER]}(?:\\.${m[w.BUILDIDENTIFIER]})*))`);G("FULLPLAIN",`v?${m[w.MAINVERSION]}${m[w.PRERELEASE]}?${m[w.BUILD]}?`);G("FULL",`^${m[w.FULLPLAIN]}$`);G("LOOSEPLAIN",`[v=\\s]*${m[w.MAINVERSIONLOOSE]}${m[w.PRERELEASELOOSE]}?${m[w.BUILD]}?`);G("LOOSE",`^${m[w.LOOSEPLAIN]}$`);G("GTLT","((?:<|>)?=?)");G("XRANGEIDENTIFIERLOOSE",`${m[w.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);G("XRANGEIDENTIFIER",`${m[w.NUMERICIDENTIFIER]}|x|X|\\*`);G("XRANGEPLAIN",`[v=\\s]*(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:${m[w.PRERELEASE]})?${m[w.BUILD]}?)?)?`);G("XRANGEPLAINLOOSE",`[v=\\s]*(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:${m[w.PRERELEASELOOSE]})?${m[w.BUILD]}?)?)?`);G("XRANGE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAIN]}$`);G("XRANGELOOSE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAINLOOSE]}$`);G("COERCEPLAIN",`(^|[^\\d])(\\d{1,${ou}})(?:\\.(\\d{1,${ou}}))?(?:\\.(\\d{1,${ou}}))?`);G("COERCE",`${m[w.COERCEPLAIN]}(?:$|[^\\d])`);G("COERCEFULL",m[w.COERCEPLAIN]+`(?:${m[w.PRERELEASE]})?(?:${m[w.BUILD]})?(?:$|[^\\d])`);G("COERCERTL",m[w.COERCE],!0);G("COERCERTLFULL",m[w.COERCEFULL],!0);G("LONETILDE","(?:~>?)");G("TILDETRIM",`(\\s*)${m[w.LONETILDE]}\\s+`,!0);mt.tildeTrimReplace="$1~";G("TILDE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAIN]}$`);G("TILDELOOSE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAINLOOSE]}$`);G("LONECARET","(?:\\^)");G("CARETTRIM",`(\\s*)${m[w.LONECARET]}\\s+`,!0);mt.caretTrimReplace="$1^";G("CARET",`^${m[w.LONECARET]}${m[w.XRANGEPLAIN]}$`);G("CARETLOOSE",`^${m[w.LONECARET]}${m[w.XRANGEPLAINLOOSE]}$`);G("COMPARATORLOOSE",`^${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]})$|^$`);G("COMPARATOR",`^${m[w.GTLT]}\\s*(${m[w.FULLPLAIN]})$|^$`);G("COMPARATORTRIM",`(\\s*)${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]}|${m[w.XRANGEPLAIN]})`,!0);mt.comparatorTrimReplace="$1$2$3";G("HYPHENRANGE",`^\\s*(${m[w.XRANGEPLAIN]})\\s+-\\s+(${m[w.XRANGEPLAIN]})\\s*$`);G("HYPHENRANGELOOSE",`^\\s*(${m[w.XRANGEPLAINLOOSE]})\\s+-\\s+(${m[w.XRANGEPLAINLOOSE]})\\s*$`);G("STAR","(<|>)?=?\\s*\\*");G("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");G("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var bi=B((J2,Gm)=>{"use strict";var sO=Object.freeze({loose:!0}),oO=Object.freeze({}),nO=t=>t?typeof t!="object"?sO:t:oO;Gm.exports=nO});var iu=B((P2,vm)=>{"use strict";var Lm=/^[0-9]+$/,Mm=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:tMm(e,t);vm.exports={compareIdentifiers:Mm,rcompareIdentifiers:iO}});var Be=B((H2,Om)=>{"use strict";var ki=oo(),{MAX_LENGTH:xm,MAX_SAFE_INTEGER:Fi}=zA(),{safeRe:Si,t:Ni}=ZA(),aO=bi(),{compareIdentifiers:au}=iu(),cO=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let A=0;Axm)throw new TypeError(`version is longer than ${xm} characters`);ki("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let A=e.trim().match(r.loose?Si[Ni.LOOSE]:Si[Ni.FULL]);if(!A)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+A[1],this.minor=+A[2],this.patch=+A[3],this.major>Fi||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Fi||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Fi||this.patch<0)throw new TypeError("Invalid patch version");A[4]?this.prerelease=A[4].split(".").map(s=>{if(/^[0-9]+$/.test(s)){let o=+s;if(o>=0&&oe.major?1:this.minore.minor?1:this.patche.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let A=this.prerelease[r],s=e.prerelease[r];if(ki("prerelease compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let A=this.build[r],s=e.build[r];if(ki("build compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}inc(e,r,A){if(e.startsWith("pre")){if(!r&&A===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let s=`-${r}`.match(this.options.loose?Si[Ni.PRERELEASELOOSE]:Si[Ni.PRERELEASE]);if(!s||s[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,A);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,A);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,A),this.inc("pre",r,A);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,A),this.inc("pre",r,A);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let s=Number(A)?1:0;if(this.prerelease.length===0)this.prerelease=[s];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&A===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(s)}}if(r){let o=[r,s];if(A===!1&&(o=[r]),cO(this.prerelease,r)){let n=this.prerelease[r.split(".").length];isNaN(n)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};Om.exports=cu});var ur=B((V2,_m)=>{"use strict";var Ym=Be(),gO=(t,e,r=!1)=>{if(t instanceof Ym)return t;try{return new Ym(t,e)}catch(A){if(!r)return null;throw A}};_m.exports=gO});var Pm=B((q2,Jm)=>{"use strict";var lO=ur(),uO=(t,e)=>{let r=lO(t,e);return r?r.version:null};Jm.exports=uO});var Vm=B((W2,Hm)=>{"use strict";var EO=ur(),hO=(t,e)=>{let r=EO(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};Hm.exports=hO});var zm=B((z2,Wm)=>{"use strict";var qm=Be(),QO=(t,e,r,A,s)=>{typeof r=="string"&&(s=A,A=r,r=void 0);try{return new qm(t instanceof qm?t.version:t,r).inc(e,A,s).version}catch{return null}};Wm.exports=QO});var Km=B((Z2,jm)=>{"use strict";var Zm=ur(),BO=(t,e)=>{let r=Zm(t,null,!0),A=Zm(e,null,!0),s=r.compare(A);if(s===0)return null;let o=s>0,n=o?r:A,i=o?A:r,a=!!n.prerelease.length;if(!!i.prerelease.length&&!a){if(!i.patch&&!i.minor)return"major";if(i.compareMain(n)===0)return i.minor&&!i.patch?"minor":"patch"}let g=a?"pre":"";return r.major!==A.major?g+"major":r.minor!==A.minor?g+"minor":r.patch!==A.patch?g+"patch":"prerelease"};jm.exports=BO});var $m=B((j2,Xm)=>{"use strict";var IO=Be(),CO=(t,e)=>new IO(t,e).major;Xm.exports=CO});var tw=B((K2,ew)=>{"use strict";var dO=Be(),fO=(t,e)=>new dO(t,e).minor;ew.exports=fO});var Aw=B((X2,rw)=>{"use strict";var pO=Be(),mO=(t,e)=>new pO(t,e).patch;rw.exports=mO});var ow=B(($2,sw)=>{"use strict";var wO=ur(),yO=(t,e)=>{let r=wO(t,e);return r&&r.prerelease.length?r.prerelease:null};sw.exports=yO});var Xe=B((eV,iw)=>{"use strict";var nw=Be(),RO=(t,e,r)=>new nw(t,r).compare(new nw(e,r));iw.exports=RO});var cw=B((tV,aw)=>{"use strict";var DO=Xe(),TO=(t,e,r)=>DO(e,t,r);aw.exports=TO});var lw=B((rV,gw)=>{"use strict";var bO=Xe(),kO=(t,e)=>bO(t,e,!0);gw.exports=kO});var Ui=B((AV,Ew)=>{"use strict";var uw=Be(),FO=(t,e,r)=>{let A=new uw(t,r),s=new uw(e,r);return A.compare(s)||A.compareBuild(s)};Ew.exports=FO});var Qw=B((sV,hw)=>{"use strict";var SO=Ui(),NO=(t,e)=>t.sort((r,A)=>SO(r,A,e));hw.exports=NO});var Iw=B((oV,Bw)=>{"use strict";var UO=Ui(),GO=(t,e)=>t.sort((r,A)=>UO(A,r,e));Bw.exports=GO});var no=B((nV,Cw)=>{"use strict";var LO=Xe(),MO=(t,e,r)=>LO(t,e,r)>0;Cw.exports=MO});var Gi=B((iV,dw)=>{"use strict";var vO=Xe(),xO=(t,e,r)=>vO(t,e,r)<0;dw.exports=xO});var gu=B((aV,fw)=>{"use strict";var OO=Xe(),YO=(t,e,r)=>OO(t,e,r)===0;fw.exports=YO});var lu=B((cV,pw)=>{"use strict";var _O=Xe(),JO=(t,e,r)=>_O(t,e,r)!==0;pw.exports=JO});var Li=B((gV,mw)=>{"use strict";var PO=Xe(),HO=(t,e,r)=>PO(t,e,r)>=0;mw.exports=HO});var Mi=B((lV,ww)=>{"use strict";var VO=Xe(),qO=(t,e,r)=>VO(t,e,r)<=0;ww.exports=qO});var uu=B((uV,yw)=>{"use strict";var WO=gu(),zO=lu(),ZO=no(),jO=Li(),KO=Gi(),XO=Mi(),$O=(t,e,r,A)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return WO(t,r,A);case"!=":return zO(t,r,A);case">":return ZO(t,r,A);case">=":return jO(t,r,A);case"<":return KO(t,r,A);case"<=":return XO(t,r,A);default:throw new TypeError(`Invalid operator: ${e}`)}};yw.exports=$O});var Dw=B((EV,Rw)=>{"use strict";var eY=Be(),tY=ur(),{safeRe:vi,t:xi}=ZA(),rY=(t,e)=>{if(t instanceof eY)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?vi[xi.COERCEFULL]:vi[xi.COERCE]);else{let a=e.includePrerelease?vi[xi.COERCERTLFULL]:vi[xi.COERCERTL],c;for(;(c=a.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||c.index+c[0].length!==r.index+r[0].length)&&(r=c),a.lastIndex=c.index+c[1].length+c[2].length;a.lastIndex=-1}if(r===null)return null;let A=r[2],s=r[3]||"0",o=r[4]||"0",n=e.includePrerelease&&r[5]?`-${r[5]}`:"",i=e.includePrerelease&&r[6]?`+${r[6]}`:"";return tY(`${A}.${s}.${o}${n}${i}`,e)};Rw.exports=rY});var bw=B((hV,Tw)=>{"use strict";var AY=ur(),sY=zA(),oY=Be(),nY=(t,e,r)=>{if(!sY.RELEASE_TYPES.includes(e))return null;let A=iY(t,r);return A&&aY(A,e)},iY=(t,e)=>{let r=t instanceof oY?t.version:t;return AY(r,e)},aY=(t,e)=>{if(cY(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},cY=t=>t.startsWith("pre");Tw.exports=nY});var Fw=B((QV,kw)=>{"use strict";var Eu=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let s=this.map.keys().next().value;this.delete(s)}this.map.set(e,r)}return this}};kw.exports=Eu});var $e=B((BV,Gw)=>{"use strict";var gY=/\s+/g,hu=class t{constructor(e,r){if(r=uY(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof Qu)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(gY," "),this.set=this.raw.split("||").map(A=>this.parseRange(A.trim())).filter(A=>A.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let A=this.set[0];if(this.set=this.set.filter(s=>!Nw(s[0])),this.set.length===0)this.set=[A];else if(this.set.length>1){for(let s of this.set)if(s.length===1&&pY(s[0])){this.set=[s];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e0&&(this.formatted+="||");let r=this.set[e];for(let A=0;A0&&(this.formatted+=" "),this.formatted+=r[A].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(fY,"");let A=((this.options.includePrerelease&&CY)|(this.options.loose&&dY))+":"+e,s=Sw.get(A);if(s)return s;let o=this.options.loose,n=o?Re[Ie.HYPHENRANGELOOSE]:Re[Ie.HYPHENRANGE];e=e.replace(n,NY(this.options.includePrerelease)),X("hyphen replace",e),e=e.replace(Re[Ie.COMPARATORTRIM],QY),X("comparator trim",e),e=e.replace(Re[Ie.TILDETRIM],BY),X("tilde trim",e),e=e.replace(Re[Ie.CARETTRIM],IY),X("caret trim",e);let i=e.split(" ").map(l=>mY(l,this.options)).join(" ").split(/\s+/).map(l=>SY(l,this.options));o&&(i=i.filter(l=>(X("loose invalid filter",l,this.options),!!l.match(Re[Ie.COMPARATORLOOSE])))),X("range list",i);let a=new Map,c=i.map(l=>new Qu(l,this.options));for(let l of c){if(Nw(l))return[l];a.set(l.value,l)}a.size>1&&a.has("")&&a.delete("");let g=[...a.values()];return Sw.set(A,g),g}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(A=>Uw(A,r)&&e.set.some(s=>Uw(s,r)&&A.every(o=>s.every(n=>o.intersects(n,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new EY(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",pY=t=>t.value==="",Uw=(t,e)=>{let r=!0,A=t.slice(),s=A.pop();for(;r&&A.length;)r=A.every(o=>s.intersects(o,e)),s=A.pop();return r},mY=(t,e)=>(t=t.replace(Re[Ie.BUILD],""),X("comp",t,e),t=DY(t,e),X("caret",t),t=yY(t,e),X("tildes",t),t=bY(t,e),X("xrange",t),t=FY(t,e),X("stars",t),t),ue=t=>!t||t.toLowerCase()==="x"||t==="*",wY=(t,e,r)=>ue(t)&&!ue(e)||ue(e)&&r&&!ue(r),yY=(t,e)=>t.trim().split(/\s+/).map(r=>RY(r,e)).join(" "),RY=(t,e)=>{let r=e.loose?Re[Ie.TILDELOOSE]:Re[Ie.TILDE],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("tilde",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:a?(X("replaceTilde pr",a),c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`):c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`,X("tilde return",c),c})},DY=(t,e)=>t.trim().split(/\s+/).map(r=>TY(r,e)).join(" "),TY=(t,e)=>{X("caret",t,e);let r=e.loose?Re[Ie.CARETLOOSE]:Re[Ie.CARET],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("caret",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?o==="0"?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.0${A} <${+o+1}.0.0-0`:a?(X("replaceCaret pr",a),o==="0"?n==="0"?c=`>=${o}.${n}.${i}-${a} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i}-${a} <${+o+1}.0.0-0`):(X("no pr"),o==="0"?n==="0"?c=`>=${o}.${n}.${i} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i} <${+o+1}.0.0-0`),X("caret return",c),c})},bY=(t,e)=>(X("replaceXRanges",t,e),t.split(/\s+/).map(r=>kY(r,e)).join(" ")),kY=(t,e)=>{t=t.trim();let r=e.loose?Re[Ie.XRANGELOOSE]:Re[Ie.XRANGE];return t.replace(r,(A,s,o,n,i,a)=>{if(X("xRange",t,A,s,o,n,i,a),wY(o,n,i))return t;let c=ue(o),g=c||ue(n),l=g||ue(i),u=l;return s==="="&&u&&(s=""),a=e.includePrerelease?"-0":"",c?s===">"||s==="<"?A="<0.0.0-0":A="*":s&&u?(g&&(n=0),i=0,s===">"?(s=">=",g?(o=+o+1,n=0,i=0):(n=+n+1,i=0)):s==="<="&&(s="<",g?o=+o+1:n=+n+1),s==="<"&&(a="-0"),A=`${s+o}.${n}.${i}${a}`):g?A=`>=${o}.0.0${a} <${+o+1}.0.0-0`:l&&(A=`>=${o}.${n}.0${a} <${o}.${+n+1}.0-0`),X("xRange return",A),A})},FY=(t,e)=>(X("replaceStars",t,e),t.trim().replace(Re[Ie.STAR],"")),SY=(t,e)=>(X("replaceGTE0",t,e),t.trim().replace(Re[e.includePrerelease?Ie.GTE0PRE:Ie.GTE0],"")),NY=t=>(e,r,A,s,o,n,i,a,c,g,l,u)=>(ue(A)?r="":ue(s)?r=`>=${A}.0.0${t?"-0":""}`:ue(o)?r=`>=${A}.${s}.0${t?"-0":""}`:n?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,ue(c)?a="":ue(g)?a=`<${+c+1}.0.0-0`:ue(l)?a=`<${c}.${+g+1}.0-0`:u?a=`<=${c}.${g}.${l}-${u}`:t?a=`<${c}.${g}.${+l+1}-0`:a=`<=${a}`,`${r} ${a}`.trim()),UY=(t,e,r)=>{for(let A=0;A0){let s=t[A].semver;if(s.major===e.major&&s.minor===e.minor&&s.patch===e.patch)return!0}return!1}return!0}});var io=B((IV,Yw)=>{"use strict";var ao=Symbol("SemVer ANY"),Cu=class t{static get ANY(){return ao}constructor(e,r){if(r=Lw(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),Iu("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ao?this.value="":this.value=this.operator+this.semver.version,Iu("comp",this)}parse(e){let r=this.options.loose?Mw[vw.COMPARATORLOOSE]:Mw[vw.COMPARATOR],A=e.match(r);if(!A)throw new TypeError(`Invalid comparator: ${e}`);this.operator=A[1]!==void 0?A[1]:"",this.operator==="="&&(this.operator=""),A[2]?this.semver=new xw(A[2],this.options.loose):this.semver=ao}toString(){return this.value}test(e){if(Iu("Comparator.test",e,this.options.loose),this.semver===ao||e===ao)return!0;if(typeof e=="string")try{e=new xw(e,this.options)}catch{return!1}return Bu(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Ow(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new Ow(this.value,r).test(e.semver):(r=Lw(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||Bu(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||Bu(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Yw.exports=Cu;var Lw=bi(),{safeRe:Mw,t:vw}=ZA(),Bu=uu(),Iu=oo(),xw=Be(),Ow=$e()});var co=B((CV,_w)=>{"use strict";var GY=$e(),LY=(t,e,r)=>{try{e=new GY(e,r)}catch{return!1}return e.test(t)};_w.exports=LY});var Pw=B((dV,Jw)=>{"use strict";var MY=$e(),vY=(t,e)=>new MY(t,e).set.map(r=>r.map(A=>A.value).join(" ").trim().split(" "));Jw.exports=vY});var Vw=B((fV,Hw)=>{"use strict";var xY=Be(),OY=$e(),YY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new OY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===-1)&&(A=n,s=new xY(A,r))}),A};Hw.exports=YY});var Ww=B((pV,qw)=>{"use strict";var _Y=Be(),JY=$e(),PY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new JY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===1)&&(A=n,s=new _Y(A,r))}),A};qw.exports=PY});var jw=B((mV,Zw)=>{"use strict";var du=Be(),HY=$e(),zw=no(),VY=(t,e)=>{t=new HY(t,e);let r=new du("0.0.0");if(t.test(r)||(r=new du("0.0.0-0"),t.test(r)))return r;r=null;for(let A=0;A{let i=new du(n.semver.version);switch(n.operator){case">":i.prerelease.length===0?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!o||zw(i,o))&&(o=i);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${n.operator}`)}}),o&&(!r||zw(r,o))&&(r=o)}return r&&t.test(r)?r:null};Zw.exports=VY});var Xw=B((wV,Kw)=>{"use strict";var qY=$e(),WY=(t,e)=>{try{return new qY(t,e).range||"*"}catch{return null}};Kw.exports=WY});var Oi=B((yV,ry)=>{"use strict";var zY=Be(),ty=io(),{ANY:ZY}=ty,jY=$e(),KY=co(),$w=no(),ey=Gi(),XY=Mi(),$Y=Li(),e_=(t,e,r,A)=>{t=new zY(t,A),e=new jY(e,A);let s,o,n,i,a;switch(r){case">":s=$w,o=XY,n=ey,i=">",a=">=";break;case"<":s=ey,o=$Y,n=$w,i="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(KY(t,e,A))return!1;for(let c=0;c{E.semver===ZY&&(E=new ty(">=0.0.0")),l=l||E,u=u||E,s(E.semver,l.semver,A)?l=E:n(E.semver,u.semver,A)&&(u=E)}),l.operator===i||l.operator===a||(!u.operator||u.operator===i)&&o(t,u.semver))return!1;if(u.operator===a&&n(t,u.semver))return!1}return!0};ry.exports=e_});var sy=B((RV,Ay)=>{"use strict";var t_=Oi(),r_=(t,e,r)=>t_(t,e,">",r);Ay.exports=r_});var ny=B((DV,oy)=>{"use strict";var A_=Oi(),s_=(t,e,r)=>A_(t,e,"<",r);oy.exports=s_});var cy=B((TV,ay)=>{"use strict";var iy=$e(),o_=(t,e,r)=>(t=new iy(t,r),e=new iy(e,r),t.intersects(e,r));ay.exports=o_});var ly=B((bV,gy)=>{"use strict";var n_=co(),i_=Xe();gy.exports=(t,e,r)=>{let A=[],s=null,o=null,n=t.sort((g,l)=>i_(g,l,r));for(let g of n)n_(g,e,r)?(o=g,s||(s=g)):(o&&A.push([s,o]),o=null,s=null);s&&A.push([s,null]);let i=[];for(let[g,l]of A)g===l?i.push(g):!l&&g===n[0]?i.push("*"):l?g===n[0]?i.push(`<=${l}`):i.push(`${g} - ${l}`):i.push(`>=${g}`);let a=i.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return a.length{"use strict";var uy=$e(),mu=io(),{ANY:fu}=mu,pu=co(),wu=Xe(),a_=(t,e,r={})=>{if(t===e)return!0;t=new uy(t,r),e=new uy(e,r);let A=!1;e:for(let s of t.set){for(let o of e.set){let n=g_(s,o,r);if(A=A||n!==null,n)continue e}if(A)return!1}return!0},c_=[new mu(">=0.0.0-0")],Ey=[new mu(">=0.0.0")],g_=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===fu){if(e.length===1&&e[0].semver===fu)return!0;r.includePrerelease?t=c_:t=Ey}if(e.length===1&&e[0].semver===fu){if(r.includePrerelease)return!0;e=Ey}let A=new Set,s,o;for(let E of t)E.operator===">"||E.operator===">="?s=hy(s,E,r):E.operator==="<"||E.operator==="<="?o=Qy(o,E,r):A.add(E.semver);if(A.size>1)return null;let n;if(s&&o){if(n=wu(s.semver,o.semver,r),n>0)return null;if(n===0&&(s.operator!==">="||o.operator!=="<="))return null}for(let E of A){if(s&&!pu(E,String(s),r)||o&&!pu(E,String(o),r))return null;for(let h of e)if(!pu(E,String(h),r))return!1;return!0}let i,a,c,g,l=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,u=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1;l&&l.prerelease.length===1&&o.operator==="<"&&l.prerelease[0]===0&&(l=!1);for(let E of e){if(g=g||E.operator===">"||E.operator===">=",c=c||E.operator==="<"||E.operator==="<=",s){if(u&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===u.major&&E.semver.minor===u.minor&&E.semver.patch===u.patch&&(u=!1),E.operator===">"||E.operator===">="){if(i=hy(s,E,r),i===E&&i!==s)return!1}else if(s.operator===">="&&!E.test(s.semver))return!1}if(o){if(l&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===l.major&&E.semver.minor===l.minor&&E.semver.patch===l.patch&&(l=!1),E.operator==="<"||E.operator==="<="){if(a=Qy(o,E,r),a===E&&a!==o)return!1}else if(o.operator==="<="&&!E.test(o.semver))return!1}if(!E.operator&&(o||s)&&n!==0)return!1}return!(s&&c&&!o&&n!==0||o&&g&&!s&&n!==0||u||l)},hy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A>0?t:A<0||e.operator===">"&&t.operator===">="?e:t},Qy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A<0?t:A>0||e.operator==="<"&&t.operator==="<="?e:t};By.exports=a_});var Ru=B((FV,fy)=>{"use strict";var yu=ZA(),Cy=zA(),l_=Be(),dy=iu(),u_=ur(),E_=Pm(),h_=Vm(),Q_=zm(),B_=Km(),I_=$m(),C_=tw(),d_=Aw(),f_=ow(),p_=Xe(),m_=cw(),w_=lw(),y_=Ui(),R_=Qw(),D_=Iw(),T_=no(),b_=Gi(),k_=gu(),F_=lu(),S_=Li(),N_=Mi(),U_=uu(),G_=Dw(),L_=bw(),M_=io(),v_=$e(),x_=co(),O_=Pw(),Y_=Vw(),__=Ww(),J_=jw(),P_=Xw(),H_=Oi(),V_=sy(),q_=ny(),W_=cy(),z_=ly(),Z_=Iy();fy.exports={parse:u_,valid:E_,clean:h_,inc:Q_,diff:B_,major:I_,minor:C_,patch:d_,prerelease:f_,compare:p_,rcompare:m_,compareLoose:w_,compareBuild:y_,sort:R_,rsort:D_,gt:T_,lt:b_,eq:k_,neq:F_,gte:S_,lte:N_,cmp:U_,coerce:G_,truncate:L_,Comparator:M_,Range:v_,satisfies:x_,toComparators:O_,maxSatisfying:Y_,minSatisfying:__,minVersion:J_,validRange:P_,outside:H_,gtr:V_,ltr:q_,intersects:W_,simplifyRange:z_,subset:Z_,SemVer:l_,re:yu.re,src:yu.src,tokens:yu.t,SEMVER_SPEC_VERSION:Cy.SEMVER_SPEC_VERSION,RELEASE_TYPES:Cy.RELEASE_TYPES,compareIdentifiers:dy.compareIdentifiers,rcompareIdentifiers:dy.rcompareIdentifiers}});var hr=W(require("node:process")),Ny=W(require("node:path"));var Su=W(require("os"),1);function jA(t){return t==null?"":typeof t=="string"||t instanceof String?t:JSON.stringify(t)}function ku(t){return Object.keys(t).length?{title:t.title,file:t.file,line:t.startLine,endLine:t.endLine,col:t.startColumn,endColumn:t.endColumn}:{}}function Vi(t,e,r){let A=new Hi(t,e,r);process.stdout.write(A.toString()+Su.EOL)}var Fu="::",Hi=class{constructor(e,r,A){e||(e="missing.command"),this.command=e,this.properties=r,this.message=A}toString(){let e=Fu+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let r=!0;for(let A in this.properties)if(this.properties.hasOwnProperty(A)){let s=this.properties[A];s&&(r?r=!1:e+=",",e+=`${A}=${Yy(s)}`)}}return e+=`${Fu}${Oy(this.message)}`,e}};function Oy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function Yy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}var Tp=W(require("os"),1);var $s=W(require("http"),1),ml=W(require("https"),1);function qi(t){let e=t.protocol==="https:";if(_y(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new uo(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new uo(`http://${r}`)}else return}function _y(t){if(!t.hostname)return!1;let e=t.hostname;if(Jy(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Jy(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var uo=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}};var nr=W(Zi(),1),gp=W(ci(),1),ie=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},je;(function(t){t[t.OK=200]="OK",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.ResourceMoved=302]="ResourceMoved",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.SwitchProxy=306]="SwitchProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.TooManyRequests=429]="TooManyRequests",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout"})(je||(je={}));var we;(function(t){t.Accept="accept",t.ContentType="content-type"})(we||(we={}));var Ot;(function(t){t.ApplicationJson="application/json"})(Ot||(Ot={}));var Av=[je.MovedPermanently,je.ResourceMoved,je.SeeOther,je.TemporaryRedirect,je.PermanentRedirect],sv=[je.BadGateway,je.ServiceUnavailable,je.GatewayTimeout],ov=["OPTIONS","GET","DELETE","HEAD"],nv=10,iv=5,fl=class t extends Error{constructor(e,r){super(e),this.name="HttpClientError",this.statusCode=r,Object.setPrototypeOf(this,t.prototype)}},pl=class{constructor(e){this.message=e}readBody(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};var Xs=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ie(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ie(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ie(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ie(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ie(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ie(this,arguments,void 0,function*(r,A={}){A[we.Accept]=this._getExistingOrDefaultHeader(A,we.Accept,Ot.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ie(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&ov.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===je.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Av.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!sv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pl(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=qi(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?ml:$s;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},Ks(this.requestOptions.headers),Ks(e||{})):Ks(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=Ks(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=Ks(this.requestOptions.headers)[we.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[we.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=qi(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||$s.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?nr.httpsOverHttps:nr.httpsOverHttp:a=c?nr.httpOverHttps:nr.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new ml.Agent(i):new $s.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new gp.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ie(this,void 0,void 0,function*(){e=Math.min(nv,e);let r=iv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ie(this,void 0,void 0,function*(){return new Promise((A,s)=>ie(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===je.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fl(g,o);l.result=n.result,s(l)}else A(n)}))})}},Ks=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{});var up=require("os"),eo=require("fs"),wl=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{access:cv,appendFile:gv,writeFile:lv}=eo.promises,lp="GITHUB_STEP_SUMMARY";var yl=class{constructor(){this._buffer=""}filePath(){return wl(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[lp];if(!e)throw new Error(`Unable to find environment variable for $${lp}. Check if your runtime environment supports job summaries.`);try{yield cv(e,eo.constants.R_OK|eo.constants.W_OK)}catch{throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,r,A={}){let s=Object.entries(A).map(([o,n])=>` ${o}="${n}"`).join("");return r?`<${e}${s}>${r}`:`<${e}${s}>`}write(e){return wl(this,void 0,void 0,function*(){let r=!!e?.overwrite,A=yield this.filePath();return yield(r?lv:gv)(A,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return wl(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(e,r=!1){return this._buffer+=e,r?this.addEOL():this}addEOL(){return this.addRaw(up.EOL)}addCodeBlock(e,r){let A=Object.assign({},r&&{lang:r}),s=this.wrap("pre",this.wrap("code",e),A);return this.addRaw(s).addEOL()}addList(e,r=!1){let A=r?"ol":"ul",s=e.map(n=>this.wrap("li",n)).join(""),o=this.wrap(A,s);return this.addRaw(o).addEOL()}addTable(e){let r=e.map(s=>{let o=s.map(n=>{if(typeof n=="string")return this.wrap("td",n);let{header:i,data:a,colspan:c,rowspan:g}=n,l=i?"th":"td",u=Object.assign(Object.assign({},c&&{colspan:c}),g&&{rowspan:g});return this.wrap(l,a,u)}).join("");return this.wrap("tr",o)}).join(""),A=this.wrap("table",r);return this.addRaw(A).addEOL()}addDetails(e,r){let A=this.wrap("details",this.wrap("summary",e)+r);return this.addRaw(A).addEOL()}addImage(e,r,A){let{width:s,height:o}=A||{},n=Object.assign(Object.assign({},s&&{width:s}),o&&{height:o}),i=this.wrap("img",null,Object.assign({src:e,alt:r},n));return this.addRaw(i).addEOL()}addHeading(e,r){let A=`h${r}`,s=["h1","h2","h3","h4","h5","h6"].includes(A)?A:"h1",o=this.wrap(s,e);return this.addRaw(o).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,r){let A=Object.assign({},r&&{cite:r}),s=this.wrap("blockquote",e,A);return this.addRaw(s).addEOL()}addLink(e,r){let A=this.wrap("a",e,{href:r});return this.addRaw(A).addEOL()}},EH=new yl;var Fl=W(require("os"),1);var to=W(require("os"),1),kl=W(require("events"),1),wp=W(require("child_process"),1),yp=W(require("path"),1);var dp=require("assert"),pt=W(require("path"),1);var li=W(require("fs"),1),ar=W(require("path"),1),hp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{chmod:uv,copyFile:Ev,lstat:hv,mkdir:Qp,open:BH,readdir:Bp,rename:Qv,rm:Ip,rmdir:IH,stat:gi,symlink:Bv,unlink:Iv}=li.promises,ir=process.platform==="win32";var CH=li.constants.O_RDONLY;function Rl(t){return hp(this,void 0,void 0,function*(){try{yield gi(t)}catch(e){if(e.code==="ENOENT")return!1;throw e}return!0})}function ui(t){if(t=Cv(t),!t)throw new Error('isRooted() parameter "p" cannot be empty');return ir?t.startsWith("\\")||/^[A-Z]:/i.test(t):t.startsWith("/")}function Dl(t,e){return hp(this,void 0,void 0,function*(){let r;try{r=yield gi(t)}catch(s){s.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${s}`)}if(r&&r.isFile()){if(ir){let s=ar.extname(t).toUpperCase();if(e.some(o=>o.toUpperCase()===s))return t}else if(Ep(r))return t}let A=t;for(let s of e){t=A+s,r=void 0;try{r=yield gi(t)}catch(o){o.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${o}`)}if(r&&r.isFile()){if(ir){try{let o=ar.dirname(t),n=ar.basename(t).toUpperCase();for(let i of yield Bp(o))if(n===i.toUpperCase()){t=ar.join(o,i);break}}catch(o){console.log(`Unexpected error attempting to determine the actual case of the file '${t}': ${o}`)}return t}else if(Ep(r))return t}}return""})}function Cv(t){return t=t||"",ir?(t=t.replace(/\//g,"\\"),t.replace(/\\\\+/g,"\\")):t.replace(/\/\/+/g,"/")}function Ep(t){return(t.mode&1)>0||(t.mode&8)>0&&process.getgid!==void 0&&t.gid===process.getgid()||(t.mode&64)>0&&process.getuid!==void 0&&t.uid===process.getuid()}var Ei=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function fp(t){return Ei(this,void 0,void 0,function*(){if(ir&&/[*"<>|]/.test(t))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');try{yield Ip(t,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(e){throw new Error(`File was unable to be removed ${e}`)}})}function Tl(t){return Ei(this,void 0,void 0,function*(){(0,dp.ok)(t,"a path argument must be provided"),yield Qp(t,{recursive:!0})})}function _r(t,e){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");if(e){let A=yield _r(t,!1);if(!A)throw ir?new Error(`Unable to locate executable file: ${t}. 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.`):new Error(`Unable to locate executable file: ${t}. 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 A}let r=yield dv(t);return r&&r.length>0?r[0]:""})}function dv(t){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");let e=[];if(ir&&process.env.PATHEXT)for(let s of process.env.PATHEXT.split(pt.delimiter))s&&e.push(s);if(ui(t)){let s=yield Dl(t,e);return s?[s]:[]}if(t.includes(pt.sep))return[];let r=[];if(process.env.PATH)for(let s of process.env.PATH.split(pt.delimiter))s&&r.push(s);let A=[];for(let s of r){let o=yield Dl(pt.join(s,t),e);o&&A.push(o)}return A})}var Rp=require("timers"),mp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},hi=process.platform==="win32",Qi=class extends kl.EventEmitter{constructor(e,r,A){if(super(),!e)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=e,this.args=r||[],this.options=A||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,r){let A=this._getSpawnFileName(),s=this._getSpawnArgs(e),o=r?"":"[command]";if(hi)if(this._isCmdFile()){o+=A;for(let n of s)o+=` ${n}`}else if(e.windowsVerbatimArguments){o+=`"${A}"`;for(let n of s)o+=` ${n}`}else{o+=this._windowsQuoteCmdArg(A);for(let n of s)o+=` ${this._windowsQuoteCmdArg(n)}`}else{o+=A;for(let n of s)o+=` ${n}`}return o}_processLineBuffer(e,r,A){try{let s=r+e.toString(),o=s.indexOf(to.EOL);for(;o>-1;){let n=s.substring(0,o);A(n),s=s.substring(o+to.EOL.length),o=s.indexOf(to.EOL)}return s}catch(s){return this._debug(`error processing line. Failed with error ${s}`),""}}_getSpawnFileName(){return hi&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(e){if(hi&&this._isCmdFile()){let r=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let A of this.args)r+=" ",r+=e.windowsVerbatimArguments?A:this._windowsQuoteCmdArg(A);return r+='"',[r]}return this.args}_endsWith(e,r){return e.endsWith(r)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return'""';let r=[" "," ","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],A=!1;for(let n of e)if(r.some(i=>i===n)){A=!0;break}if(!A)return e;let s='"',o=!0;for(let n=e.length;n>0;n--)s+=e[n-1],o&&e[n-1]==="\\"?s+="\\":e[n-1]==='"'?(o=!0,s+='"'):o=!1;return s+='"',s.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e)return'""';if(!e.includes(" ")&&!e.includes(" ")&&!e.includes('"'))return e;if(!e.includes('"')&&!e.includes("\\"))return`"${e}"`;let r='"',A=!0;for(let s=e.length;s>0;s--)r+=e[s-1],A&&e[s-1]==="\\"?r+="\\":e[s-1]==='"'?(A=!0,r+="\\"):A=!1;return r+='"',r.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};let r={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return r.outStream=e.outStream||process.stdout,r.errStream=e.errStream||process.stderr,r}_getSpawnOptions(e,r){e=e||{};let A={};return A.cwd=e.cwd,A.env=e.env,A.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(A.argv0=`"${r}"`),A}exec(){return mp(this,void 0,void 0,function*(){return!ui(this.toolPath)&&(this.toolPath.includes("/")||hi&&this.toolPath.includes("\\"))&&(this.toolPath=yp.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield _r(this.toolPath,!0),new Promise((e,r)=>mp(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let c of this.args)this._debug(` ${c}`);let A=this._cloneExecOptions(this.options);!A.silent&&A.outStream&&A.outStream.write(this._getCommandString(A)+to.EOL);let s=new bl(A,this.toolPath);if(s.on("debug",c=>{this._debug(c)}),this.options.cwd&&!(yield Rl(this.options.cwd)))return r(new Error(`The cwd: ${this.options.cwd} does not exist!`));let o=this._getSpawnFileName(),n=wp.spawn(o,this._getSpawnArgs(A),this._getSpawnOptions(this.options,o)),i="";n.stdout&&n.stdout.on("data",c=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(c),!A.silent&&A.outStream&&A.outStream.write(c),i=this._processLineBuffer(c,i,g=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(g)})});let a="";if(n.stderr&&n.stderr.on("data",c=>{s.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(c),!A.silent&&A.errStream&&A.outStream&&(A.failOnStdErr?A.errStream:A.outStream).write(c),a=this._processLineBuffer(c,a,g=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(g)})}),n.on("error",c=>{s.processError=c.message,s.processExited=!0,s.processClosed=!0,s.CheckComplete()}),n.on("exit",c=>{s.processExitCode=c,s.processExited=!0,this._debug(`Exit code ${c} received from tool '${this.toolPath}'`),s.CheckComplete()}),n.on("close",c=>{s.processExitCode=c,s.processExited=!0,s.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),s.CheckComplete()}),s.on("done",(c,g)=>{i.length>0&&this.emit("stdline",i),a.length>0&&this.emit("errline",a),n.removeAllListeners(),c?r(c):e(g)}),this.options.input){if(!n.stdin)throw new Error("child process missing stdin");n.stdin.end(this.options.input)}}))})}};function Dp(t){let e=[],r=!1,A=!1,s="";function o(n){A&&n!=='"'&&(s+="\\"),s+=n,A=!1}for(let n=0;n0&&(e.push(s),s="");continue}o(i)}return s.length>0&&e.push(s.trim()),e}var bl=class t extends kl.EventEmitter{constructor(e,r){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!r)throw new Error("toolPath must not be empty");this.options=e,this.toolPath=r,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=(0,Rp.setTimeout)(t.HandleTimeout,this.delay,this)))}_debug(e){this.emit("debug",e)}_setResult(){let e;this.processExited&&(this.processError?e=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}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let r=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(r)}e._setResult()}}};var pv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function cr(t,e,r){return pv(this,void 0,void 0,function*(){let A=Dp(t);if(A.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let s=A[0];return e=A.slice(1).concat(e||[]),new Qi(s,e,r).exec()})}var mH=Fl.default.platform(),wH=Fl.default.arch();var Sl;(function(t){t[t.Success=0]="Success",t[t.Failure=1]="Failure"})(Sl||(Sl={}));function bp(t,e){let r=process.env[`INPUT_${t.replace(/ /g,"_").toUpperCase()}`]||"";if(e&&e.required&&!r)throw new Error(`Input required and not supplied: ${t}`);return e&&e.trimWhitespace===!1?r:r.trim()}function kp(t){process.exitCode=Sl.Failure,yv(t)}function Nl(){return process.env.RUNNER_DEBUG==="1"}function Ue(t){Vi("debug",{},t)}function yv(t,e={}){Vi("error",ku(e),t instanceof Error?t.toString():t)}function Ul(t){process.stdout.write(t+Tp.EOL)}var Bi=require("fs"),Fp=require("os"),VA=class{constructor(){var e,r,A;if(this.payload={},process.env.GITHUB_EVENT_PATH)if((0,Bi.existsSync)(process.env.GITHUB_EVENT_PATH))this.payload=JSON.parse((0,Bi.readFileSync)(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}));else{let s=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${s} does not exist${Fp.EOL}`)}this.eventName=process.env.GITHUB_EVENT_NAME,this.sha=process.env.GITHUB_SHA,this.ref=process.env.GITHUB_REF,this.workflow=process.env.GITHUB_WORKFLOW,this.action=process.env.GITHUB_ACTION,this.actor=process.env.GITHUB_ACTOR,this.job=process.env.GITHUB_JOB,this.runAttempt=parseInt(process.env.GITHUB_RUN_ATTEMPT,10),this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10),this.runId=parseInt(process.env.GITHUB_RUN_ID,10),this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:"https://api.github.com",this.serverUrl=(r=process.env.GITHUB_SERVER_URL)!==null&&r!==void 0?r:"https://github.com",this.graphqlUrl=(A=process.env.GITHUB_GRAPHQL_URL)!==null&&A!==void 0?A:"https://api.github.com/graphql"}get issue(){let e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){let[e,r]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:r}}if(this.payload.repository)return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name};throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}};var xl=W(Lp(),1),Mp=W(ci(),1),vv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function vp(t,e){if(!t&&!e.auth)throw new Error("Parameter token or opts.auth is required");if(t&&e.auth)throw new Error("Parameters token and opts.auth may not both be specified");return typeof e.auth=="string"?e.auth:`token ${t}`}function xp(t){return new xl.HttpClient().getAgent(t)}function xv(t){return new xl.HttpClient().getAgentDispatcher(t)}function Op(t){let e=xv(t);return(A,s)=>vv(this,void 0,void 0,function*(){return(0,Mp.fetch)(A,Object.assign(Object.assign({},s),{dispatcher:e}))})}function Yp(){return process.env.GITHUB_API_URL||"https://api.github.com"}function Ol(t){var e;let r=(e=process.env.ACTIONS_ORCHESTRATION_ID)===null||e===void 0?void 0:e.trim();if(r){let s=`actions_orchestration_id/${r.replace(/[^a-z0-9_.-]/gi,"_")}`;return t?.includes(s)?t:`${t?`${t} `:""}${s}`}return t}function gr(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}function wi(t,e,r,A){if(typeof r!="function")throw new Error("method for before hook must be a function");return A||(A={}),Array.isArray(e)?e.reverse().reduce((s,o)=>wi.bind(null,t,o,s,A),r)():Promise.resolve().then(()=>t.registry[e]?t.registry[e].reduce((s,o)=>o.hook.bind(null,s,A),r)():r(A))}function _p(t,e,r,A){let s=A;t.registry[r]||(t.registry[r]=[]),e==="before"&&(A=(o,n)=>Promise.resolve().then(s.bind(null,n)).then(o.bind(null,n))),e==="after"&&(A=(o,n)=>{let i;return Promise.resolve().then(o.bind(null,n)).then(a=>(i=a,s(i,n))).then(()=>i)}),e==="error"&&(A=(o,n)=>Promise.resolve().then(o.bind(null,n)).catch(i=>s(i,n))),t.registry[r].push({hook:A,orig:s})}function Jp(t,e,r){if(!t.registry[e])return;let A=t.registry[e].map(s=>s.orig).indexOf(r);A!==-1&&t.registry[e].splice(A,1)}var Pp=Function.bind,Hp=Pp.bind(Pp);function Vp(t,e,r){let A=Hp(Jp,null).apply(null,r?[e,r]:[e]);t.api={remove:A},t.remove=A,["before","error","after","wrap"].forEach(s=>{let o=r?[e,s,r]:[e,s];t[s]=t.api[s]=Hp(_p,null).apply(null,o)})}function Yv(){let t=Symbol("Singular"),e={registry:{}},r=wi.bind(null,e,t);return Vp(r,e,t),r}function _v(){let t={registry:{}},e=wi.bind(null,t);return Vp(e,t),e}var qp={Singular:Yv,Collection:_v};var Jv="0.0.0-development",Pv=`octokit-endpoint.js/${Jv} ${gr()}`,Hv={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Pv},mediaType:{format:""}};function Vv(t){return t?Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{}):{}}function qv(t){if(typeof t!="object"||t===null||Object.prototype.toString.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);if(e===null)return!0;let r=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.call(r)===Function.prototype.call(t)}function Zp(t,e){let r=Object.assign({},t);return Object.keys(e).forEach(A=>{qv(e[A])?A in t?r[A]=Zp(t[A],e[A]):Object.assign(r,{[A]:e[A]}):Object.assign(r,{[A]:e[A]})}),r}function Wp(t){for(let e in t)t[e]===void 0&&delete t[e];return t}function _l(t,e,r){if(typeof e=="string"){let[s,o]=e.split(" ");r=Object.assign(o?{method:s,url:o}:{url:s},r)}else r=Object.assign({},e);r.headers=Vv(r.headers),Wp(r),Wp(r.headers);let A=Zp(t||{},r);return r.url==="/graphql"&&(t&&t.mediaType.previews?.length&&(A.mediaType.previews=t.mediaType.previews.filter(s=>!A.mediaType.previews.includes(s)).concat(A.mediaType.previews)),A.mediaType.previews=(A.mediaType.previews||[]).map(s=>s.replace(/-preview/,""))),A}function Wv(t,e){let r=/\?/.test(t)?"&":"?",A=Object.keys(e);return A.length===0?t:t+r+A.map(s=>s==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${s}=${encodeURIComponent(e[s])}`).join("&")}var zv=/\{[^{}}]+\}/g;function Zv(t){return t.replace(/(?:^\W+)|(?:(?r.concat(A),[]):[]}function zp(t,e){let r={__proto__:null};for(let A of Object.keys(t))e.indexOf(A)===-1&&(r[A]=t[A]);return r}function jp(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function WA(t){return encodeURIComponent(t).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Ao(t,e,r){return e=t==="+"||t==="#"?jp(e):WA(e),r?WA(r)+"="+e:e}function qA(t){return t!=null}function Yl(t){return t===";"||t==="&"||t==="?"}function Kv(t,e,r,A){var s=t[r],o=[];if(qA(s)&&s!=="")if(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||typeof s=="boolean")s=s.toString(),A&&A!=="*"&&(s=s.substring(0,parseInt(A,10))),o.push(Ao(e,s,Yl(e)?r:""));else if(A==="*")Array.isArray(s)?s.filter(qA).forEach(function(n){o.push(Ao(e,n,Yl(e)?r:""))}):Object.keys(s).forEach(function(n){qA(s[n])&&o.push(Ao(e,s[n],n))});else{let n=[];Array.isArray(s)?s.filter(qA).forEach(function(i){n.push(Ao(e,i))}):Object.keys(s).forEach(function(i){qA(s[i])&&(n.push(WA(i)),n.push(Ao(e,s[i].toString())))}),Yl(e)?o.push(WA(r)+"="+n.join(",")):n.length!==0&&o.push(n.join(","))}else e===";"?qA(s)&&o.push(WA(r)):s===""&&(e==="&"||e==="?")?o.push(WA(r)+"="):s===""&&o.push("");return o}function Xv(t){return{expand:$v.bind(null,t)}}function $v(t,e){var r=["+","#",".","/",";","?","&"];return t=t.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(A,s,o){if(s){let i="",a=[];if(r.indexOf(s.charAt(0))!==-1&&(i=s.charAt(0),s=s.substr(1)),s.split(/,/g).forEach(function(c){var g=/([^:\*]*)(?::(\d+)|(\*))?/.exec(c);a.push(Kv(e,i,g[1],g[2]||g[3]))}),i&&i!=="+"){var n=",";return i==="?"?n="&":i!=="#"&&(n=i),(a.length!==0?i:"")+a.join(n)}else return a.join(",")}else return jp(o)}),t==="/"?t:t.replace(/\/$/,"")}function Kp(t){let e=t.method.toUpperCase(),r=(t.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),A=Object.assign({},t.headers),s,o=zp(t,["method","baseUrl","url","headers","request","mediaType"]),n=jv(r);r=Xv(r).expand(o),/^http/.test(r)||(r=t.baseUrl+r);let i=Object.keys(t).filter(g=>n.includes(g)).concat("baseUrl"),a=zp(o,i);if(!/application\/octet-stream/i.test(A.accept)&&(t.mediaType.format&&(A.accept=A.accept.split(/,/).map(g=>g.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${t.mediaType.format}`)).join(",")),r.endsWith("/graphql")&&t.mediaType.previews?.length)){let g=A.accept.match(/(?{let u=t.mediaType.format?`.${t.mediaType.format}`:"+json";return`application/vnd.github.${l}-preview${u}`}).join(",")}return["GET","HEAD"].includes(e)?r=Wv(r,a):"data"in a?s=a.data:Object.keys(a).length&&(s=a),!A["content-type"]&&typeof s<"u"&&(A["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof s>"u"&&(s=""),Object.assign({method:e,url:r,headers:A},typeof s<"u"?{body:s}:null,t.request?{request:t.request}:null)}function ex(t,e,r){return Kp(_l(t,e,r))}function Xp(t,e){let r=_l(t,e),A=ex.bind(null,r);return Object.assign(A,{DEFAULTS:r,defaults:Xp.bind(null,r),merge:_l.bind(null,r),parse:Kp})}var $p=Xp(null,Hv);var Im=W(nm(),1);var gx=/^-?\d+$/,Di=/^-?\d+n+$/,lr=JSON.stringify,Vl=JSON.parse,lm=/^-?\d+n$/,im=/([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g,am=/([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g,ql=t=>t===void 0||typeof t=="function"||typeof t=="symbol",Wl=t=>t!==null&&typeof t=="object"&&t.constructor&&t.constructor.name==="RawJSON",lx=(t,e,r)=>{let A="";typeof r=="number"?A=" ".repeat(Math.min(10,Math.max(0,Math.floor(r)))):typeof r=="string"&&(A=r.slice(0,10));let s=typeof e=="function",o=Array.isArray(e)?new Set(e.map(String)):null,n=(h,C,I)=>(I!==null&&typeof I=="object"&&typeof I.toJSON=="function"&&(I=I.toJSON(C)),typeof I=="string"&&Di.test(I)?I+"n":typeof I=="bigint"?"rawJSON"in JSON?JSON.rawJSON(I.toString()):I.toString()+"n":(s&&(I=e.call(h,C,I)),I!==null&&typeof I=="object"&&(I instanceof Number||I instanceof String||I instanceof Boolean)&&(I=I.valueOf()),I)),i=n({"":t},"",t);if(ql(i))return;let a=i===null||typeof i!="object",c=Wl(i);if(a||c)return lr(i);let g=[],l=0,u=[{parent:{"":i},key:"",val:i,isArray:Array.isArray(i),keys:Array.isArray(i)?null:Object.keys(i),index:0,first:!0}],E=new WeakSet([i]);for(;u.length>0;){let h=u[u.length-1];h.index===0&&(g.push(h.isArray?"[":"{"),l++);let C=!1;if(h.isArray)if(h.index=h.keys.length&&u[u.length-1]===h&&(C=!0)}C&&(l--,!h.first&&A&&g.push(` +`+A.repeat(l)),g.push(h.isArray?"]":"}"),E.delete(h.val),u.pop())}return g.join("")},um=(t,e,r)=>{try{return"rawJSON"in JSON?lr(t,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r):t?lr(t,(i,a)=>typeof a=="string"&&Di.test(a)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r).replace(im,"$1$2$3").replace(am,"$1$2$3"):lr(t,e,r)}catch(A){if(A instanceof RangeError){let s=lx(t,e,r);return s===void 0?void 0:"rawJSON"in JSON?s:s.replace(im,"$1$2$3").replace(am,"$1$2$3")}throw A}},Ri=new Map,ux=()=>{let t=JSON.parse.toString();if(Ri.has(t))return Ri.get(t);try{let e=JSON.parse("1",(r,A,s)=>!!s?.source&&s.source==="1");return Ri.set(t,e),e}catch{return Ri.set(t,!1),!1}},Ex=(t,e,r,A)=>typeof e=="string"&&lm.test(e)?BigInt(e.slice(0,-1)):typeof e=="string"&&Di.test(e)?e.slice(0,-1):typeof A=="function"?A(t,e,r):e,hx=(t,e)=>JSON.parse(t,(r,A,s)=>{let o=typeof A=="number",n=A>Number.MAX_SAFE_INTEGER||A{let r={"":t},A=[{parent:r,key:"",visited:!1}];for(;A.length>0;){let s=A[A.length-1];if(s.visited){let{parent:o,key:n}=s,i=o[n];typeof i=="string"&&(lm.test(i)?i=BigInt(i.slice(0,-1)):Di.test(i)&&(i=i.slice(0,-1))),typeof e=="function"&&(i=e.call(o,n,i)),i===void 0?delete o[n]:o[n]=i,A.pop()}else{s.visited=!0;let o=s.parent[s.key];if(o!==null&&typeof o=="object"){let i=Object.keys(o);for(let a=i.length-1;a>=0;a--)A.push({parent:o,key:i[a],visited:!1})}}}return r[""]},gm=t=>t.replace(Qx,(e,r,A,s)=>{let o=e[0]==='"';if(o&&Bx.test(e))return e.substring(0,e.length-1)+'n"';let i=A||s,a=r&&(r.length{if(!t)return Vl(t,e);try{if(ux())return hx(t,e);let r=gm(t);return Vl(r,(A,s,o)=>Ex(A,s,o,e))}catch(r){if(r instanceof RangeError){let A=gm(t),s=Vl(A);return Ix(s,e)}throw r}};var Jr=class extends Error{name;status;request;response;constructor(e,r,A){super(e,{cause:A.cause}),this.name="HttpError",this.status=Number.parseInt(r),Number.isNaN(this.status)&&(this.status=0);"response"in A&&(this.response=A.response);let s=Object.assign({},A.request);A.request.headers.authorization&&(s.headers=Object.assign({},A.request.headers,{authorization:A.request.headers.authorization.replace(/(?"";async function Bm(t){let e=t.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let r=t.request?.log||console,A=t.request?.parseSuccessResponseBody!==!1,s=fx(t.body)||Array.isArray(t.body)?um(t.body):t.body,o=Object.fromEntries(Object.entries(t.headers).map(([l,u])=>[l,String(u)])),n;try{n=await e(t.url,{method:t.method,body:s,redirect:t.request?.redirect,headers:o,signal:t.request?.signal,...t.body&&{duplex:"half"}})}catch(l){let u="Unknown Error";if(l instanceof Error){if(l.name==="AbortError")throw l.status=500,l;u=l.message,l.name==="TypeError"&&"cause"in l&&(l.cause instanceof Error?u=l.cause.message:typeof l.cause=="string"&&(u=l.cause))}let E=new Jr(u,500,{request:t});throw E.cause=l,E}let i=n.status,a=n.url,c={};for(let[l,u]of n.headers)c[l]=u;let g={url:a,status:i,headers:c,data:""};if("deprecation"in c){let l=c.link&&c.link.match(/<([^<>]+)>; rel="deprecation"/),u=l&&l.pop();r.warn(`[@octokit/request] "${t.method} ${t.url}" is deprecated. It is scheduled to be removed on ${c.sunset}${u?`. See ${u}`:""}`)}if(i===204||i===205)return g;if(t.method==="HEAD"){if(i<400)return g;throw new Jr(n.statusText,i,{response:g,request:t})}if(i===304)throw g.data=await zl(n),new Jr("Not modified",i,{response:g,request:t});if(i>=400)throw g.data=await zl(n),new Jr(mx(g.data),i,{response:g,request:t});return g.data=A?await zl(n):n.body,g}async function zl(t){let e=t.headers.get("content-type");if(!e)return t.text().catch(Qm);let r=(0,Im.parse)(e);if(px(r)){let A="";try{return A=await t.text(),hm(A)}catch{return A}}else return r.type.startsWith("text/")||r.parameters.charset?.toLowerCase()==="utf-8"?t.text().catch(Qm):t.arrayBuffer().catch(()=>new ArrayBuffer(0))}function px(t){return t.type==="application/json"||t.type==="application/scim+json"}function mx(t){if(typeof t=="string")return t;if(t instanceof ArrayBuffer)return"Unknown error";if(typeof t=="object"&&t!==null&&"message"in t){let e=t,r="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(A=>JSON.stringify(A)).join(", ")}${r}`:`${e.message}${r}`}return`Unknown error: ${JSON.stringify(t)}`}function Zl(t,e){let r=t.defaults(e);return Object.assign(function(s,o){let n=r.merge(s,o);if(!n.request||!n.request.hook)return Bm(r.parse(n));let i=(a,c)=>Bm(r.parse(r.merge(a,c)));return Object.assign(i,{endpoint:r,defaults:Zl.bind(null,r)}),n.request.hook(i,n)},{endpoint:r,defaults:Zl.bind(null,r)})}var so=Zl($p,dx);var wx="0.0.0-development";function yx(t){return`Request failed due to following response errors: +`+t.errors.map(e=>` - ${e.message}`).join(` +`)}var Rx=class extends Error{constructor(t,e,r){super(yx(r)),this.request=t,this.headers=e,this.response=r,this.errors=r.errors,this.data=r.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},Dx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],Tx=["query","method","url"],Cm=/\/api\/v3\/?$/;function bx(t,e,r){if(r){if(typeof e=="string"&&"query"in r)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let n in r)if(Tx.includes(n))return Promise.reject(new Error(`[@octokit/graphql] "${n}" cannot be used as variable name`))}let A=typeof e=="string"?Object.assign({query:e},r):e,s=Object.keys(A).reduce((n,i)=>Dx.includes(i)?(n[i]=A[i],n):(n.variables||(n.variables={}),n.variables[i]=A[i],n),{}),o=A.baseUrl||t.endpoint.DEFAULTS.baseUrl;return Cm.test(o)&&(s.url=o.replace(Cm,"/api/graphql")),t(s).then(n=>{if(n.data.errors){let i={};for(let a of Object.keys(n.headers))i[a]=n.headers[a];throw new Rx(s,i,n.data)}return n.data.data})}function jl(t,e){let r=t.defaults(e);return Object.assign((s,o)=>bx(r,s,o),{defaults:jl.bind(null,r),endpoint:r.endpoint})}var a2=jl(so,{headers:{"user-agent":`octokit-graphql.js/${wx} ${gr()}`},method:"POST",url:"/graphql"});function dm(t){return jl(t,{method:"POST",url:"/graphql"})}var Kl="(?:[a-zA-Z0-9_-]+)",fm="\\.",pm=new RegExp(`^${Kl}${fm}${Kl}${fm}${Kl}$`),kx=pm.test.bind(pm);async function Fx(t){let e=kx(t),r=t.startsWith("v1.")||t.startsWith("ghs_"),A=t.startsWith("ghu_");return{type:"token",token:t,tokenType:e?"app":r?"installation":A?"user-to-server":"oauth"}}function Sx(t){return t.split(/\./).length===3?`bearer ${t}`:`token ${t}`}async function Nx(t,e,r,A){let s=e.endpoint.merge(r,A);return s.headers.authorization=Sx(t),e(s)}var mm=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(Fx.bind(null,e),{hook:Nx.bind(null,e)})};var Xl="7.0.6";var wm=()=>{},Ux=console.warn.bind(console),Gx=console.error.bind(console);function Lx(t={}){return typeof t.debug!="function"&&(t.debug=wm),typeof t.info!="function"&&(t.info=wm),typeof t.warn!="function"&&(t.warn=Ux),typeof t.error!="function"&&(t.error=Gx),t}var ym=`octokit-core.js/${Xl} ${gr()}`,Ti=class{static VERSION=Xl;static defaults(e){return class extends this{constructor(...A){let s=A[0]||{};if(typeof e=="function"){super(e(s));return}super(Object.assign({},e,s,s.userAgent&&e.userAgent?{userAgent:`${s.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let r=this.plugins;return class extends this{static plugins=r.concat(e.filter(s=>!r.includes(s)))}}constructor(e={}){let r=new qp.Collection,A={baseUrl:so.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:r.bind(null,"request")}),mediaType:{previews:[],format:""}};if(A.headers["user-agent"]=e.userAgent?`${e.userAgent} ${ym}`:ym,e.baseUrl&&(A.baseUrl=e.baseUrl),e.previews&&(A.mediaType.previews=e.previews),e.timeZone&&(A.headers["time-zone"]=e.timeZone),this.request=so.defaults(A),this.graphql=dm(this.request).defaults(A),this.log=Lx(e.log),this.hook=r,e.authStrategy){let{authStrategy:o,...n}=e,i=o(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:n},e.auth));r.wrap("request",i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let o=mm(e.auth);r.wrap("request",o.hook),this.auth=o}let s=this.constructor;for(let o=0;o({async next(){if(!i)return{done:!0};try{let a=await s({method:o,url:i,headers:n}),c=_x(a);if(i=((c.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!i&&"total_commits"in c.data){let g=new URL(c.url),l=g.searchParams,u=parseInt(l.get("page")||"1",10),E=parseInt(l.get("per_page")||"250",10);u*E{if(s.done)return e;let o=!1;function n(){o=!0}return e=e.concat(A?A(s.value,n):s.value.data),o?e:Tm(t,e,r,A)})}var k2=Object.assign(Dm,{iterator:ru});function Au(t){return{paginate:Object.assign(Dm.bind(null,t),{iterator:ru.bind(null,t)})}}Au.VERSION=Yx;var G2=new VA,su=Yp(),Jx={baseUrl:su,request:{agent:xp(su),fetch:Op(su)}},bm=Ti.plugin(tu,Au).defaults(Jx);function km(t,e){let r=Object.assign({},e||{}),A=vp(t,r);A&&(r.auth=A);let s=Ol(r.userAgent);return s&&(r.userAgent=s),r}var x2=new VA;function Fm(t,e,...r){let A=bm.plugin(...r);return new A(km(t,e))}var Tu=W(require("crypto"),1),Hr=W(require("fs"),1);var j_=W(Ru(),1);var go=W(require("path"),1);var Ji=W(Ru(),1),my=W(require("stream"),1),wy=W(require("util"),1),yy=require("assert");var py=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Yi=class{constructor(e,r,A){if(e<1)throw new Error("max attempts should be greater than or equal to 1");if(this.maxAttempts=e,this.minSeconds=Math.floor(r),this.maxSeconds=Math.floor(A),this.minSeconds>this.maxSeconds)throw new Error("min seconds should be less than or equal to max seconds")}execute(e,r){return py(this,void 0,void 0,function*(){let A=1;for(;AsetTimeout(r,e*1e3))})}};var Er=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},_i=class extends Error{constructor(e){super(`Unexpected HTTP response: ${e}`),this.httpStatusCode=e,Object.setPrototypeOf(this,new.target.prototype)}},Ry=process.platform==="win32",vV=process.platform==="darwin",X_="actions/tool-cache";function Dy(t,e,r,A){return Er(this,void 0,void 0,function*(){e=e||go.join(Fy(),Tu.randomUUID()),yield Tl(go.dirname(e)),Ue(`Downloading ${t}`),Ue(`Destination ${e}`);let s=3,o=Du("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS",10),n=Du("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS",20);return yield new Yi(s,o,n).execute(()=>Er(this,void 0,void 0,function*(){return yield $_(t,e||"",r,A)}),a=>!(a instanceof _i&&a.httpStatusCode&&a.httpStatusCode<500&&a.httpStatusCode!==408&&a.httpStatusCode!==429))})}function $_(t,e,r,A){return Er(this,void 0,void 0,function*(){if(Hr.existsSync(e))throw new Error(`Destination file path ${e} already exists`);let s=new Xs(X_,[],{allowRetries:!1});r&&(Ue("set auth"),A===void 0&&(A={}),A.authorization=r);let o=yield s.get(t,A);if(o.message.statusCode!==200){let g=new _i(o.message.statusCode);throw Ue(`Failed to download from "${t}". Code(${o.message.statusCode}) Message(${o.message.statusMessage})`),g}let n=wy.promisify(my.pipeline),a=Du("TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY",()=>o.message)(),c=!1;try{return yield n(a,Hr.createWriteStream(e)),Ue("download complete"),c=!0,e}finally{if(!c){Ue("download failed");try{yield fp(e)}catch(g){Ue(`Failed to delete '${e}'. ${g.message}`)}}}})}function Ty(t,e){return Er(this,arguments,void 0,function*(r,A,s="xz"){if(!r)throw new Error("parameter 'file' is required");A=yield ky(A),Ue("Checking tar --version");let o="";yield cr("tar --version",[],{ignoreReturnCode:!0,silent:!0,listeners:{stdout:g=>o+=g.toString(),stderr:g=>o+=g.toString()}}),Ue(o.trim());let n=o.toUpperCase().includes("GNU TAR"),i;s instanceof Array?i=s:i=[s],Nl()&&!s.includes("v")&&i.push("-v");let a=A,c=r;return Ry&&n&&(i.push("--force-local"),a=A.replace(/\\/g,"/"),c=r.replace(/\\/g,"/")),n&&(i.push("--warning=no-unknown-keyword"),i.push("--overwrite")),i.push("-C",a,"-f",c),yield cr("tar",i),A})}function by(t,e){return Er(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'file' is required");return e=yield ky(e),Ry?yield eJ(t,e):yield tJ(t,e),e})}function eJ(t,e){return Er(this,void 0,void 0,function*(){let r=t.replace(/'/g,"''").replace(/"|\n|\r/g,""),A=e.replace(/'/g,"''").replace(/"|\n|\r/g,""),s=yield _r("pwsh",!1);if(s){let n=["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;",`try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`,`catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force } else { throw $_ } } ;`].join(" ")];Ue(`Using pwsh at path: ${s}`),yield cr(`"${s}"`,n)}else{let n=["-NoLogo","-Sta","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;",`if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force }`,`else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`].join(" ")],i=yield _r("powershell",!0);Ue(`Using powershell at path: ${i}`),yield cr(`"${i}"`,n)}})}function tJ(t,e){return Er(this,void 0,void 0,function*(){let r=yield _r("unzip",!0),A=[t];Nl()||A.unshift("-q"),A.unshift("-o"),yield cr(`"${r}"`,A,{cwd:e})})}function ky(t){return Er(this,void 0,void 0,function*(){return t||(t=go.join(Fy(),Tu.randomUUID())),yield Tl(t),t})}function Fy(){let t=process.env.RUNNER_TEMP||"";return(0,yy.ok)(t,"Expected RUNNER_TEMP to be defined"),t}function Du(t,e){let r=global[t];return r!==void 0?r:e}var Sy=` + fragment releaseFields on Release { + tagName + releaseAssets(first: 50) { + nodes { + name + downloadUrl + } + } + } + `;(async()=>{let t=Fm(""),e=bp("zb-version"),r=e?{query:` + query releaseAssetsForVersion($tagName: String!) { + repository(owner: "256lights", repo: "zb") { + release(tagName: $tagName) { + ...releaseFields + } + } + } + + ${Sy} + `,tagName:"v"+e}:{query:` + query releaseAssetsForLatest { + repository(owner: "256lights", repo: "zb") { + release: latestRelease { + ...releaseFields + } + } + } + + ${Sy} + `},s=(await t.graphql(r)).repository.release,o=s?.releaseAssets?.nodes||[],n;if(hr.platform==="darwin"&&hr.arch==="arm64"?n=o.find(({name:c})=>c.includes("aarch64-apple-macos")):hr.platform==="linux"&&hr.arch==="x64"&&(n=o.find(({name:c})=>c.includes("x86_64-unknown-linux"))),!n){kp(`No download found for ${hr.arch}-${hr.platform} version ${s?.tagName||e}`);return}let i=await Dy(n.downloadUrl),a=n.downloadUrl.endsWith(".zip")?await by(i):await Ty(i);await cr(Ny.default.join(a,"install"),["--single-user","--no-systemd","--no-launchd"])})(); /** * @license * Copyright 2026 The zb Authors * SPDX-License-Identifier: MIT */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21haW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDI2IFRoZSB6YiBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4gKi9cblxuY29uc29sZS5sb2coJ0hlbGxvLCBXb3JsZCEnKTtcbiJdLAogICJtYXBwaW5ncyI6ICJhQU1BLFFBQVEsSUFBSSxlQUFlIiwKICAibmFtZXMiOiBbXQp9Cg== +/*! Bundled license information: + +undici/lib/web/fetch/body.js: + (*! formdata-polyfill. MIT License. Jimmy Wärting *) + +undici/lib/web/websocket/frame.js: + (*! ws. MIT License. Einar Otto Stangvik *) + +content-type/dist/index.js: + (*! + * content-type + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + *) + +@octokit/request-error/dist-src/index.js: + (* v8 ignore else -- @preserve -- Bug with vitest coverage where it sees an else branch that doesn't exist *) + +@octokit/request/dist-bundle/index.js: + (* v8 ignore next -- @preserve *) + (* v8 ignore else -- @preserve *) +*/ +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90dW5uZWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdHJlZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9kaWFnbm9zdGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlci1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3V0aWwvdGltZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kYXRhLXVybC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZm9ybWRhdGEtcGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmVkaXJlY3QtaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wtYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmV0cnktaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3JldHJ5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZHVtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9lbmNvZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS9jYWNoZXN0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvcGFyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2ZyYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc2VuZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvY29udGVudC10eXBlL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9wYXJzZS1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvaWRlbnRpZmllcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9jbGFzc2VzL3NlbXZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy92YWxpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9pbmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZGlmZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9tYWpvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9taW5vci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wcmVyZWxlYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvbXBhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcmNvbXBhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29tcGFyZS1sb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLWJ1aWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcnNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZ3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbmVxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9sdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY21wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvZXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy90cnVuY2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2xydWNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9yYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvY29tcGFyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdG8tY29tcGFyYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWF4LXNhdGlzZnlpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXNhdGlzZnlpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdmFsaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvb3V0c2lkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9ndHIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbHRyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL2ludGVyc2VjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc2ltcGxpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc3Vic2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW5kZXguanMiLCAiLi4vc3JjL21haW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL2NvbW1hbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9wcm94eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvcGxhdGZvcm0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL3Rvb2xydW5uZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vc3JjL2lvLXV0aWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL2V4ZWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvY29udGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL3NyYy9pbnRlcm5hbC91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLXVzZXItYWdlbnQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9qc29uLXdpdGgtYmlnaW50L2pzb24td2l0aC1iaWdpbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QtZXJyb3IvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2F1dGgtdG9rZW4vZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL3ZlcnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvZ2l0aHViLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy90b29sLWNhY2hlL3NyYy90b29sLWNhY2hlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy90b29sLWNhY2hlL3NyYy9tYW5pZmVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvdG9vbC1jYWNoZS9zcmMvcmV0cnktaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3R1bm5lbCcpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga0Rlc3Ryb3k6IFN5bWJvbCgnZGVzdHJveScpLFxuICBrRGlzcGF0Y2g6IFN5bWJvbCgnZGlzcGF0Y2gnKSxcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga1dyaXRpbmc6IFN5bWJvbCgnd3JpdGluZycpLFxuICBrUmVzdW1pbmc6IFN5bWJvbCgncmVzdW1pbmcnKSxcbiAga1F1ZXVlOiBTeW1ib2woJ3F1ZXVlJyksXG4gIGtDb25uZWN0OiBTeW1ib2woJ2Nvbm5lY3QnKSxcbiAga0Nvbm5lY3Rpbmc6IFN5bWJvbCgnY29ubmVjdGluZycpLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQ6IFN5bWJvbCgnZGVmYXVsdCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQ6IFN5bWJvbCgnbWF4IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZDogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQgdGhyZXNob2xkJyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWU6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmU6IFN5bWJvbCgna2VlcCBhbGl2ZScpLFxuICBrSGVhZGVyc1RpbWVvdXQ6IFN5bWJvbCgnaGVhZGVycyB0aW1lb3V0JyksXG4gIGtCb2R5VGltZW91dDogU3ltYm9sKCdib2R5IHRpbWVvdXQnKSxcbiAga1NlcnZlck5hbWU6IFN5bWJvbCgnc2VydmVyIG5hbWUnKSxcbiAga0xvY2FsQWRkcmVzczogU3ltYm9sKCdsb2NhbCBhZGRyZXNzJyksXG4gIGtIb3N0OiBTeW1ib2woJ2hvc3QnKSxcbiAga05vUmVmOiBTeW1ib2woJ25vIHJlZicpLFxuICBrQm9keVVzZWQ6IFN5bWJvbCgndXNlZCcpLFxuICBrQm9keTogU3ltYm9sKCdhYnN0cmFjdGVkIHJlcXVlc3QgYm9keScpLFxuICBrUnVubmluZzogU3ltYm9sKCdydW5uaW5nJyksXG4gIGtCbG9ja2luZzogU3ltYm9sKCdibG9ja2luZycpLFxuICBrUGVuZGluZzogU3ltYm9sKCdwZW5kaW5nJyksXG4gIGtTaXplOiBTeW1ib2woJ3NpemUnKSxcbiAga0J1c3k6IFN5bWJvbCgnYnVzeScpLFxuICBrUXVldWVkOiBTeW1ib2woJ3F1ZXVlZCcpLFxuICBrRnJlZTogU3ltYm9sKCdmcmVlJyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJyksXG4gIGtDbG9zZWQ6IFN5bWJvbCgnY2xvc2VkJyksXG4gIGtOZWVkRHJhaW46IFN5bWJvbCgnbmVlZCBkcmFpbicpLFxuICBrUmVzZXQ6IFN5bWJvbCgncmVzZXQnKSxcbiAga0Rlc3Ryb3llZDogU3ltYm9sLmZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKSxcbiAga1Jlc3VtZTogU3ltYm9sKCdyZXN1bWUnKSxcbiAga09uRXJyb3I6IFN5bWJvbCgnb24gZXJyb3InKSxcbiAga01heEhlYWRlcnNTaXplOiBTeW1ib2woJ21heCBoZWFkZXJzIHNpemUnKSxcbiAga1J1bm5pbmdJZHg6IFN5bWJvbCgncnVubmluZyBpbmRleCcpLFxuICBrUGVuZGluZ0lkeDogU3ltYm9sKCdwZW5kaW5nIGluZGV4JyksXG4gIGtFcnJvcjogU3ltYm9sKCdlcnJvcicpLFxuICBrQ2xpZW50czogU3ltYm9sKCdjbGllbnRzJyksXG4gIGtDbGllbnQ6IFN5bWJvbCgnY2xpZW50JyksXG4gIGtQYXJzZXI6IFN5bWJvbCgncGFyc2VyJyksXG4gIGtPbkRlc3Ryb3llZDogU3ltYm9sKCdkZXN0cm95IGNhbGxiYWNrcycpLFxuICBrUGlwZWxpbmluZzogU3ltYm9sKCdwaXBlbGluaW5nJyksXG4gIGtTb2NrZXQ6IFN5bWJvbCgnc29ja2V0JyksXG4gIGtIb3N0SGVhZGVyOiBTeW1ib2woJ2hvc3QgaGVhZGVyJyksXG4gIGtDb25uZWN0b3I6IFN5bWJvbCgnY29ubmVjdG9yJyksXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoOiBTeW1ib2woJ3N0cmljdCBjb250ZW50IGxlbmd0aCcpLFxuICBrTWF4UmVkaXJlY3Rpb25zOiBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpLFxuICBrTWF4UmVxdWVzdHM6IFN5bWJvbCgnbWF4UmVxdWVzdHNQZXJDbGllbnQnKSxcbiAga1Byb3h5OiBTeW1ib2woJ3Byb3h5IGFnZW50IG9wdGlvbnMnKSxcbiAga0NvdW50ZXI6IFN5bWJvbCgnc29ja2V0IHJlcXVlc3QgY291bnRlcicpLFxuICBrSW50ZXJjZXB0b3JzOiBTeW1ib2woJ2Rpc3BhdGNoIGludGVyY2VwdG9ycycpLFxuICBrTWF4UmVzcG9uc2VTaXplOiBTeW1ib2woJ21heCByZXNwb25zZSBzaXplJyksXG4gIGtIVFRQMlNlc3Npb246IFN5bWJvbCgnaHR0cDJTZXNzaW9uJyksXG4gIGtIVFRQMlNlc3Npb25TdGF0ZTogU3ltYm9sKCdodHRwMlNlc3Npb24gc3RhdGUnKSxcbiAga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeTogU3ltYm9sKCdyZXRyeSBhZ2VudCBkZWZhdWx0IHJldHJ5JyksXG4gIGtDb25zdHJ1Y3Q6IFN5bWJvbCgnY29uc3RydWN0YWJsZScpLFxuICBrTGlzdGVuZXJzOiBTeW1ib2woJ2xpc3RlbmVycycpLFxuICBrSFRUUENvbnRleHQ6IFN5bWJvbCgnaHR0cCBjb250ZXh0JyksXG4gIGtNYXhDb25jdXJyZW50U3RyZWFtczogU3ltYm9sKCdtYXggY29uY3VycmVudCBzdHJlYW1zJyksXG4gIGtOb1Byb3h5QWdlbnQ6IFN5bWJvbCgnbm8gcHJveHkgYWdlbnQnKSxcbiAga0h0dHBQcm94eUFnZW50OiBTeW1ib2woJ2h0dHAgcHJveHkgYWdlbnQnKSxcbiAga0h0dHBzUHJveHlBZ2VudDogU3ltYm9sKCdodHRwcyBwcm94eSBhZ2VudCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGtVbmRpY2lFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSJylcbmNsYXNzIFVuZGljaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1VuZGljaUVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrVW5kaWNpRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1VuZGljaUVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0Nvbm5lY3RUaW1lb3V0RXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnKVxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdDb25uZWN0VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0Nvbm5lY3QgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tDb25uZWN0VGltZW91dEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tDb25uZWN0VGltZW91dEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0hlYWRlcnNUaW1lb3V0RXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnKVxuY2xhc3MgSGVhZGVyc1RpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzVGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tIZWFkZXJzVGltZW91dEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tIZWFkZXJzVGltZW91dEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0hlYWRlcnNPdmVyZmxvd0Vycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfSEVBREVSU19PVkVSRkxPVycpXG5jbGFzcyBIZWFkZXJzT3ZlcmZsb3dFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzT3ZlcmZsb3dFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIE92ZXJmbG93IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfT1ZFUkZMT1cnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tIZWFkZXJzT3ZlcmZsb3dFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrSGVhZGVyc092ZXJmbG93RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrQm9keVRpbWVvdXRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX0JPRFlfVElNRU9VVCcpXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0JvZHlUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQm9keSBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0JPRFlfVElNRU9VVCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0JvZHlUaW1lb3V0RXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba0JvZHlUaW1lb3V0RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERScpXG5jbGFzcyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIGJvZHkpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZVN0YXR1c0NvZGVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBTdGF0dXMgQ29kZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERSdcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXNwb25zZVN0YXR1c0NvZGVFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtJbnZhbGlkQXJndW1lbnRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX0lOVkFMSURfQVJHJylcbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tJbnZhbGlkQXJndW1lbnRFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrSW52YWxpZEFyZ3VtZW50RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrSW52YWxpZFJldHVyblZhbHVlRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRScpXG5jbGFzcyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIFJldHVybiBWYWx1ZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0ludmFsaWRSZXR1cm5WYWx1ZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtBYm9ydEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQUJPUlQnKVxuY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQUJPUlQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tBYm9ydEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tBYm9ydEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga1JlcXVlc3RBYm9ydGVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9BQk9SVEVEJylcbmNsYXNzIFJlcXVlc3RBYm9ydGVkRXJyb3IgZXh0ZW5kcyBBYm9ydEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYWJvcnRlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9BQk9SVEVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrUmVxdWVzdEFib3J0ZWRFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrUmVxdWVzdEFib3J0ZWRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtJbmZvcm1hdGlvbmFsRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9JTkZPJylcbmNsYXNzIEluZm9ybWF0aW9uYWxFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrSW5mb3JtYXRpb25hbEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tJbmZvcm1hdGlvbmFsRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJylcbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCcpXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrQ2xpZW50RGVzdHJveWVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9ERVNUUk9ZRUQnKVxuY2xhc3MgQ2xpZW50RGVzdHJveWVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50RGVzdHJveWVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBkZXN0cm95ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfREVTVFJPWUVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrQ2xpZW50RGVzdHJveWVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba0NsaWVudERlc3Ryb3llZEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0NsaWVudENsb3NlZEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQ0xPU0VEJylcbmNsYXNzIENsaWVudENsb3NlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudENsb3NlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgY2xvc2VkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NMT1NFRCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0NsaWVudENsb3NlZEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tDbGllbnRDbG9zZWRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtTb2NrZXRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1NPQ0tFVCcpXG5jbGFzcyBTb2NrZXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHNvY2tldCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1NvY2tldEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1NvY2tldCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9TT0NLRVQnXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1NvY2tldEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tTb2NrZXRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtOb3RTdXBwb3J0ZWRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX05PVF9TVVBQT1JURUQnKVxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrTm90U3VwcG9ydGVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba05vdFN1cHBvcnRlZEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0JhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nKVxuY2xhc3MgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1Vwc3RyZWFtRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm8gdXBzdHJlYW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIEJhbGFuY2VkUG9vbCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CUExfTUlTU0lOR19VUFNUUkVBTSdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0JhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtIVFRQUGFyc2VyRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9IVFRQX1BBUlNFUicpXG5jbGFzcyBIVFRQUGFyc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnSFRUUFBhcnNlckVycm9yJ1xuICAgIHRoaXMuY29kZSA9IGNvZGUgPyBgSFBFXyR7Y29kZX1gIDogdW5kZWZpbmVkXG4gICAgdGhpcy5kYXRhID0gZGF0YSA/IGRhdGEudG9TdHJpbmcoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrSFRUUFBhcnNlckVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tIVFRQUGFyc2VyRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1JFU19FWENFRURFRF9NQVhfU0laRScpXG5jbGFzcyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga1JlcXVlc3RSZXRyeUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVRX1JFVFJZJylcbmNsYXNzIFJlcXVlc3RSZXRyeUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgeyBoZWFkZXJzLCBkYXRhIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0UmV0cnlFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IHJldHJ5IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9SRVRSWSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1JlcXVlc3RSZXRyeUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXF1ZXN0UmV0cnlFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtSZXNwb25zZUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVTUE9OU0UnKVxuY2xhc3MgUmVzcG9uc2VFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIHsgaGVhZGVycywgZGF0YSB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1Jlc3BvbnNlRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9QUlhfVExTJylcbmNsYXNzIFNlY3VyZVByb3h5Q29ubmVjdGlvbkVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoY2F1c2UsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlLCAuLi4ob3B0aW9ucyA/PyB7fSkgfSlcbiAgICB0aGlzLm5hbWUgPSAnU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnU2VjdXJlIFByb3h5IENvbm5lY3Rpb24gZmFpbGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1BSWF9UTFMnXG4gICAgdGhpcy5jYXVzZSA9IGNhdXNlXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfV1NfTUVTU0FHRV9TSVpFX0VYQ0VFREVEJylcbmNsYXNzIE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTWF4IGRlY29tcHJlc3NlZCBtZXNzYWdlIHNpemUgZXhjZWVkZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfV1NfTUVTU0FHRV9TSVpFX0VYQ0VFREVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgZ2V0IFtrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXSAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQWJvcnRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBVbmRpY2lFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQ29ubmVjdFRpbWVvdXRFcnJvcixcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvcixcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIFJlcXVlc3RSZXRyeUVycm9yLFxuICBSZXNwb25zZUVycm9yLFxuICBTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcixcbiAgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNsYXNzIFRzdE5vZGUge1xuICAvKiogQHR5cGUge2FueX0gKi9cbiAgdmFsdWUgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVsbCB8IFRzdE5vZGV9ICovXG4gIGxlZnQgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVsbCB8IFRzdE5vZGV9ICovXG4gIG1pZGRsZSA9IG51bGxcbiAgLyoqIEB0eXBlIHtudWxsIHwgVHN0Tm9kZX0gKi9cbiAgcmlnaHQgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBjb2RlXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICovXG4gIGNvbnN0cnVjdG9yIChrZXksIHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkIHx8IGluZGV4ID49IGtleS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VucmVhY2hhYmxlJylcbiAgICB9XG4gICAgY29uc3QgY29kZSA9IHRoaXMuY29kZSA9IGtleS5jaGFyQ29kZUF0KGluZGV4KVxuICAgIC8vIGNoZWNrIGNvZGUgaXMgYXNjaWkgc3RyaW5nXG4gICAgaWYgKGNvZGUgPiAweDdGKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZXkgbXVzdCBiZSBhc2NpaSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gKytpbmRleCkge1xuICAgICAgdGhpcy5taWRkbGUgPSBuZXcgVHN0Tm9kZShrZXksIHZhbHVlLCBpbmRleClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBhZGQgKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBsZW5ndGggPSBrZXkubGVuZ3RoXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5yZWFjaGFibGUnKVxuICAgIH1cbiAgICBsZXQgaW5kZXggPSAwXG4gICAgbGV0IG5vZGUgPSB0aGlzXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBrZXkuY2hhckNvZGVBdChpbmRleClcbiAgICAgIC8vIGNoZWNrIGNvZGUgaXMgYXNjaWkgc3RyaW5nXG4gICAgICBpZiAoY29kZSA+IDB4N0YpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2V5IG11c3QgYmUgYXNjaWkgc3RyaW5nJylcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNvZGUgPT09IGNvZGUpIHtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gKytpbmRleCkge1xuICAgICAgICAgIG5vZGUudmFsdWUgPSB2YWx1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5taWRkbGUgIT09IG51bGwpIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5taWRkbGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLm1pZGRsZSA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jb2RlIDwgY29kZSkge1xuICAgICAgICBpZiAobm9kZS5sZWZ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUubGVmdFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUubGVmdCA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlID0gbm9kZS5yaWdodFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yaWdodCA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleVxuICAgKiBAcmV0dXJuIHtUc3ROb2RlIHwgbnVsbH1cbiAgICovXG4gIHNlYXJjaCAoa2V5KSB7XG4gICAgY29uc3Qga2V5bGVuZ3RoID0ga2V5Lmxlbmd0aFxuICAgIGxldCBpbmRleCA9IDBcbiAgICBsZXQgbm9kZSA9IHRoaXNcbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCAmJiBpbmRleCA8IGtleWxlbmd0aCkge1xuICAgICAgbGV0IGNvZGUgPSBrZXlbaW5kZXhdXG4gICAgICAvLyBBLVpcbiAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIGl0IGlzIGJpZ2dlciB0aGFuIDB4NWEuXG4gICAgICAvLyBMb3dlcmNhc2UgbGV0dGVycyBoYXZlIGhpZ2hlciBjaGFyIGNvZGVzIHRoYW4gdXBwZXJjYXNlIG9uZXMuXG4gICAgICAvLyBBbHNvIHdlIGFzc3VtZSB0aGF0IGhlYWRlcnMgd2lsbCBtb3N0bHkgY29udGFpbiBsb3dlcmNhc2UgY2hhcmFjdGVycy5cbiAgICAgIGlmIChjb2RlIDw9IDB4NWEgJiYgY29kZSA+PSAweDQxKSB7XG4gICAgICAgIC8vIExvd2VyY2FzZSBmb3IgdXBwZXJjYXNlLlxuICAgICAgICBjb2RlIHw9IDMyXG4gICAgICB9XG4gICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoY29kZSA9PT0gbm9kZS5jb2RlKSB7XG4gICAgICAgICAgaWYgKGtleWxlbmd0aCA9PT0gKytpbmRleCkge1xuICAgICAgICAgICAgLy8gUmV0dXJucyBOb2RlIHNpbmNlIGl0IGlzIHRoZSBsYXN0IGtleS5cbiAgICAgICAgICAgIHJldHVybiBub2RlXG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUgPSBub2RlLm1pZGRsZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUuY29kZSA8IGNvZGUgPyBub2RlLmxlZnQgOiBub2RlLnJpZ2h0XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY2xhc3MgVGVybmFyeVNlYXJjaFRyZWUge1xuICAvKiogQHR5cGUge1RzdE5vZGUgfCBudWxsfSAqL1xuICBub2RlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiAqL1xuICBpbnNlcnQgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5ub2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLm5vZGUgPSBuZXcgVHN0Tm9kZShrZXksIHZhbHVlLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vZGUuYWRkKGtleSwgdmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEByZXR1cm4ge2FueX1cbiAgICovXG4gIGxvb2t1cCAoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZT8uc2VhcmNoKGtleSk/LnZhbHVlID8/IG51bGxcbiAgfVxufVxuXG5jb25zdCB0cmVlID0gbmV3IFRlcm5hcnlTZWFyY2hUcmVlKClcblxuZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWxsa25vd25IZWFkZXJOYW1lcy5sZW5ndGg7ICsraSkge1xuICBjb25zdCBrZXkgPSBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt3ZWxsa25vd25IZWFkZXJOYW1lc1tpXV1cbiAgdHJlZS5pbnNlcnQoa2V5LCBrZXkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBUZXJuYXJ5U2VhcmNoVHJlZSxcbiAgdHJlZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCwga0xpc3RlbmVycywga0JvZHkgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEluY29taW5nTWVzc2FnZSB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25vZGU6bmV0JylcbmNvbnN0IHsgQmxvYiB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ25vZGU6cXVlcnlzdHJpbmcnKVxuY29uc3QgeyBFdmVudEVtaXR0ZXI6IEVFIH0gPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IHRyZWUgfSA9IHJlcXVpcmUoJy4vdHJlZScpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmNsYXNzIEJvZHlBc3luY0l0ZXJhYmxlIHtcbiAgY29uc3RydWN0b3IgKGJvZHkpIHtcbiAgICB0aGlzW2tCb2R5XSA9IGJvZHlcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSBmYWxzZVxuICB9XG5cbiAgYXN5bmMgKiBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdICgpIHtcbiAgICBhc3NlcnQoIXRoaXNba0JvZHlVc2VkXSwgJ2Rpc3R1cmJlZCcpXG4gICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgIHlpZWxkICogdGhpc1trQm9keV1cbiAgfVxufVxuXG5mdW5jdGlvbiB3cmFwUmVxdWVzdEJvZHkgKGJvZHkpIHtcbiAgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgLy8gVE9ETyAoZml4KTogUHJvdmlkZSBzb21lIHdheSBmb3IgdGhlIHVzZXIgdG8gY2FjaGUgdGhlIGZpbGUgdG8gZS5nLiAvdG1wXG4gICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIDEwMC1leHBlY3Qgc3VwcG9ydCB0byBwcm92aWRlIGEgd2F5IHRvIGRvIHRoaXMgcHJvcGVybHk/XG4gICAgaWYgKGJvZHlMZW5ndGgoYm9keSkgPT09IDApIHtcbiAgICAgIGJvZHlcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFzc2VydChmYWxzZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIGJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICBFRS5wcm90b3R5cGUub24uY2FsbChib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keVxuICB9IGVsc2UgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVE9ETyAoZml4KTogV2UgY2FuJ3QgYWNjZXNzIFJlYWRhYmxlU3RyZWFtIGludGVybmFsIHN0YXRlXG4gICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGRpc3R1cmJlZC4gVGhpcyBpcyBqdXN0XG4gICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgIHJldHVybiBuZXcgQm9keUFzeW5jSXRlcmFibGUoYm9keSlcbiAgfSBlbHNlIGlmIChcbiAgICBib2R5ICYmXG4gICAgdHlwZW9mIGJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgIUFycmF5QnVmZmVyLmlzVmlldyhib2R5KSAmJlxuICAgIGlzSXRlcmFibGUoYm9keSlcbiAgKSB7XG4gICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgIC8vIG9yIHRocm91Z2ggc29tZSBvdGhlciBmbGFnP1xuICAgIHJldHVybiBuZXcgQm9keUFzeW5jSXRlcmFibGUoYm9keSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYm9keVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzVGFnID0gb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ11cblxuICAgIHJldHVybiAoc1RhZyA9PT0gJ0Jsb2InIHx8IHNUYWcgPT09ICdGaWxlJykgJiYgKFxuICAgICAgKCdzdHJlYW0nIGluIG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykgfHxcbiAgICAgICgnYXJyYXlCdWZmZXInIGluIG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKVxuICAgIClcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFVSTCAodXJsLCBxdWVyeVBhcmFtcykge1xuICBpZiAodXJsLmluY2x1ZGVzKCc/JykgfHwgdXJsLmluY2x1ZGVzKCcjJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IHBhcmFtcyBjYW5ub3QgYmUgcGFzc2VkIHdoZW4gdXJsIGFscmVhZHkgY29udGFpbnMgXCI/XCIgb3IgXCIjXCIuJylcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zKVxuXG4gIGlmIChzdHJpbmdpZmllZCkge1xuICAgIHVybCArPSAnPycgKyBzdHJpbmdpZmllZFxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkUG9ydCAocG9ydCkge1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHBvcnQsIDEwKVxuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSBOdW1iZXIocG9ydCkgJiZcbiAgICB2YWx1ZSA+PSAwICYmXG4gICAgdmFsdWUgPD0gNjU1MzVcbiAgKVxufVxuXG5mdW5jdGlvbiBpc0h0dHBPckh0dHBzUHJlZml4ZWQgKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT0gbnVsbCAmJlxuICAgIHZhbHVlWzBdID09PSAnaCcgJiZcbiAgICB2YWx1ZVsxXSA9PT0gJ3QnICYmXG4gICAgdmFsdWVbMl0gPT09ICd0JyAmJlxuICAgIHZhbHVlWzNdID09PSAncCcgJiZcbiAgICAoXG4gICAgICB2YWx1ZVs0XSA9PT0gJzonIHx8XG4gICAgICAoXG4gICAgICAgIHZhbHVlWzRdID09PSAncycgJiZcbiAgICAgICAgdmFsdWVbNV0gPT09ICc6J1xuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVVSTCAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHVybCA9IG5ldyBVUkwodXJsKVxuXG4gICAgaWYgKCFpc0h0dHBPckh0dHBzUHJlZml4ZWQodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgaWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBUaGUgVVJMIGFyZ3VtZW50IG11c3QgYmUgYSBub24tbnVsbCBvYmplY3QuJylcbiAgfVxuXG4gIGlmICghKHVybCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICBpZiAodXJsLnBvcnQgIT0gbnVsbCAmJiB1cmwucG9ydCAhPT0gJycgJiYgaXNWYWxpZFBvcnQodXJsLnBvcnQpID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogcG9ydCBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciBvciBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRoICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRoOiB0aGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRobmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGhuYW1lOiB0aGUgcGF0aG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwuaG9zdG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLmhvc3RuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBob3N0bmFtZTogdGhlIGhvc3RuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLm9yaWdpbiAhPSBudWxsICYmIHR5cGVvZiB1cmwub3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBvcmlnaW46IHRoZSBvcmlnaW4gbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICghaXNIdHRwT3JIdHRwc1ByZWZpeGVkKHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSB1cmwucG9ydCAhPSBudWxsXG4gICAgICA/IHVybC5wb3J0XG4gICAgICA6ICh1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApXG4gICAgbGV0IG9yaWdpbiA9IHVybC5vcmlnaW4gIT0gbnVsbFxuICAgICAgPyB1cmwub3JpZ2luXG4gICAgICA6IGAke3VybC5wcm90b2NvbCB8fCAnJ30vLyR7dXJsLmhvc3RuYW1lIHx8ICcnfToke3BvcnR9YFxuICAgIGxldCBwYXRoID0gdXJsLnBhdGggIT0gbnVsbFxuICAgICAgPyB1cmwucGF0aFxuICAgICAgOiBgJHt1cmwucGF0aG5hbWUgfHwgJyd9JHt1cmwuc2VhcmNoIHx8ICcnfWBcblxuICAgIGlmIChvcmlnaW5bb3JpZ2luLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zbGljZSgwLCBvcmlnaW4ubGVuZ3RoIC0gMSlcbiAgICB9XG5cbiAgICBpZiAocGF0aCAmJiBwYXRoWzBdICE9PSAnLycpIHtcbiAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgfVxuICAgIC8vIG5ldyBVUkwocGF0aCwgb3JpZ2luKSBpcyB1bnNhZmUgd2hlbiBgcGF0aGAgY29udGFpbnMgYW4gYWJzb2x1dGUgVVJMXG4gICAgLy8gRnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML1VSTDpcbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYSByZWxhdGl2ZSBVUkwsIHNlY29uZCBwYXJhbSBpcyByZXF1aXJlZCwgYW5kIHdpbGwgYmUgdXNlZCBhcyB0aGUgYmFzZSBVUkwuXG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGFuIGFic29sdXRlIFVSTCwgYSBnaXZlbiBzZWNvbmQgcGFyYW0gd2lsbCBiZSBpZ25vcmVkLlxuICAgIHJldHVybiBuZXcgVVJMKGAke29yaWdpbn0ke3BhdGh9YClcbiAgfVxuXG4gIGlmICghaXNIdHRwT3JIdHRwc1ByZWZpeGVkKHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VPcmlnaW4gKHVybCkge1xuICB1cmwgPSBwYXJzZVVSTCh1cmwpXG5cbiAgaWYgKHVybC5wYXRobmFtZSAhPT0gJy8nIHx8IHVybC5zZWFyY2ggfHwgdXJsLmhhc2gpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdG5hbWUgKGhvc3QpIHtcbiAgaWYgKGhvc3RbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMSwgaWR4KVxuICB9XG5cbiAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCc6JylcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBob3N0XG5cbiAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDAsIGlkeClcbn1cblxuLy8gSVAgYWRkcmVzc2VzIGFyZSBub3QgdmFsaWQgc2VydmVyIG5hbWVzIHBlciBSRkM2MDY2XG4vLyA+IEN1cnJlbnRseSwgdGhlIG9ubHkgc2VydmVyIG5hbWVzIHN1cHBvcnRlZCBhcmUgRE5TIGhvc3RuYW1lc1xuZnVuY3Rpb24gZ2V0U2VydmVyTmFtZSAoaG9zdCkge1xuICBpZiAoIWhvc3QpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYXNzZXJ0KHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJylcblxuICBjb25zdCBzZXJ2ZXJuYW1lID0gZ2V0SG9zdG5hbWUoaG9zdClcbiAgaWYgKG5ldC5pc0lQKHNlcnZlcm5hbWUpKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gc2VydmVybmFtZVxufVxuXG5mdW5jdGlvbiBkZWVwQ2xvbmUgKG9iaikge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKVxufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpXG59XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgKHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykpXG59XG5cbmZ1bmN0aW9uIGJvZHlMZW5ndGggKGJvZHkpIHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oYm9keSkpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUub2JqZWN0TW9kZSA9PT0gZmFsc2UgJiYgc3RhdGUuZW5kZWQgPT09IHRydWUgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXRlLmxlbmd0aClcbiAgICAgID8gc3RhdGUubGVuZ3RoXG4gICAgICA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZSAhPSBudWxsID8gYm9keS5zaXplIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZXN0cm95ZWQgKGJvZHkpIHtcbiAgcmV0dXJuIGJvZHkgJiYgISEoYm9keS5kZXN0cm95ZWQgfHwgYm9keVtrRGVzdHJveWVkXSB8fCAoc3RyZWFtLmlzRGVzdHJveWVkPy4oYm9keSkpKVxufVxuXG5mdW5jdGlvbiBkZXN0cm95IChzdHJlYW0sIGVycikge1xuICBpZiAoc3RyZWFtID09IG51bGwgfHwgIWlzU3RyZWFtKHN0cmVhbSkgfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3RyZWFtKS5jb25zdHJ1Y3RvciA9PT0gSW5jb21pbmdNZXNzYWdlKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM4NTA1L2ZpbGVzXG4gICAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIH1cblxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChzdHJlYW0uZGVzdHJveWVkICE9PSB0cnVlKSB7XG4gICAgc3RyZWFtW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5cbmNvbnN0IEtFRVBBTElWRV9USU1FT1VUX0VYUFIgPSAvdGltZW91dD0oXFxkKykvXG5mdW5jdGlvbiBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQgKHZhbCkge1xuICBjb25zdCBtID0gdmFsLnRvU3RyaW5nKCkubWF0Y2goS0VFUEFMSVZFX1RJTUVPVVRfRVhQUilcbiAgcmV0dXJuIG0gPyBwYXJzZUludChtWzFdLCAxMCkgKiAxMDAwIDogbnVsbFxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGhlYWRlciBuYW1lIGFuZCByZXR1cm5zIGl0cyBsb3dlcmNhc2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gdmFsdWUgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGhlYWRlck5hbWVUb1N0cmluZyAodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICA/IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW3ZhbHVlXSA/PyB2YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgOiB0cmVlLmxvb2t1cCh2YWx1ZSkgPz8gdmFsdWUudG9TdHJpbmcoJ2xhdGluMScpLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBSZWNlaXZlIHRoZSBidWZmZXIgYXMgYSBzdHJpbmcgYW5kIHJldHVybiBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lICh2YWx1ZSkge1xuICByZXR1cm4gdHJlZS5sb29rdXAodmFsdWUpID8/IHZhbHVlLnRvU3RyaW5nKCdsYXRpbjEnKS50b0xvd2VyQ2FzZSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4gfCAoQnVmZmVyIHwgc3RyaW5nIHwgKEJ1ZmZlciB8IHN0cmluZylbXSlbXX0gaGVhZGVyc1xuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT59IFtvYmpdXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fVxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaikge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIG9iaiA9IHt9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXJzW2ldKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKHZhbCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbCA9IFt2YWxdXG4gICAgICAgIG9ialtrZXldID0gdmFsXG4gICAgICB9XG4gICAgICB2YWwucHVzaChoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzVmFsdWUgPSBoZWFkZXJzW2kgKyAxXVxuICAgICAgaWYgKHR5cGVvZiBoZWFkZXJzVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1ZhbHVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IEFycmF5LmlzQXJyYXkoaGVhZGVyc1ZhbHVlKSA/IGhlYWRlcnNWYWx1ZS5tYXAoeCA9PiB4LnRvU3RyaW5nKCd1dGY4JykpIDogaGVhZGVyc1ZhbHVlLnRvU3RyaW5nKCd1dGY4JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IGxlbiA9IGhlYWRlcnMubGVuZ3RoXG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheShsZW4pXG5cbiAgbGV0IGhhc0NvbnRlbnRMZW5ndGggPSBmYWxzZVxuICBsZXQgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gLTFcbiAgbGV0IGtleVxuICBsZXQgdmFsXG4gIGxldCBrTGVuID0gMFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGtleSA9IGhlYWRlcnNbbl1cbiAgICB2YWwgPSBoZWFkZXJzW24gKyAxXVxuXG4gICAgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycgJiYgKGtleSA9IGtleS50b1N0cmluZygpKVxuICAgIHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnICYmICh2YWwgPSB2YWwudG9TdHJpbmcoJ3V0ZjgnKSlcblxuICAgIGtMZW4gPSBrZXkubGVuZ3RoXG4gICAgaWYgKGtMZW4gPT09IDE0ICYmIGtleVs3XSA9PT0gJy0nICYmIChrZXkgPT09ICdjb250ZW50LWxlbmd0aCcgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa0xlbiA9PT0gMTkgJiYga2V5WzddID09PSAnLScgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSBuICsgMVxuICAgIH1cbiAgICByZXRbbl0gPSBrZXlcbiAgICByZXRbbiArIDFdID0gdmFsXG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKGhhc0NvbnRlbnRMZW5ndGggJiYgY29udGVudERpc3Bvc2l0aW9uSWR4ICE9PSAtMSkge1xuICAgIHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdID0gQnVmZmVyLmZyb20ocmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoYnVmZmVyKSB7XG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9wdWxsLzMxOVxuICByZXR1cm4gYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUhhbmRsZXIgKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSkge1xuICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db25uZWN0IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gJ2Z1bmN0aW9uJyAmJiBoYW5kbGVyLm9uQm9keVNlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkJvZHlTZW50IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vblVwZ3JhZGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvblVwZ3JhZGUgbWV0aG9kJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uSGVhZGVycyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSGVhZGVycyBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkRhdGEgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25Db21wbGV0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29tcGxldGUgbWV0aG9kJylcbiAgICB9XG4gIH1cbn1cblxuLy8gQSBib2R5IGlzIGRpc3R1cmJlZCBpZiBpdCBoYXMgYmVlbiByZWFkIGZyb20gYW5kIGl0IGNhbm5vdFxuLy8gYmUgcmUtdXNlZCB3aXRob3V0IGxvc2luZyBzdGF0ZSBvciBkYXRhLlxuZnVuY3Rpb24gaXNEaXN0dXJiZWQgKGJvZHkpIHtcbiAgLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gIHJldHVybiAhIShib2R5ICYmIChzdHJlYW0uaXNEaXN0dXJiZWQoYm9keSkgfHwgYm9keVtrQm9keVVzZWRdKSlcbn1cblxuZnVuY3Rpb24gaXNFcnJvcmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIHN0cmVhbS5pc0Vycm9yZWQoYm9keSkpXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGUgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgc3RyZWFtLmlzUmVhZGFibGUoYm9keSkpXG59XG5cbmZ1bmN0aW9uIGdldFNvY2tldEluZm8gKHNvY2tldCkge1xuICByZXR1cm4ge1xuICAgIGxvY2FsQWRkcmVzczogc29ja2V0LmxvY2FsQWRkcmVzcyxcbiAgICBsb2NhbFBvcnQ6IHNvY2tldC5sb2NhbFBvcnQsXG4gICAgcmVtb3RlQWRkcmVzczogc29ja2V0LnJlbW90ZUFkZHJlc3MsXG4gICAgcmVtb3RlUG9ydDogc29ja2V0LnJlbW90ZVBvcnQsXG4gICAgcmVtb3RlRmFtaWx5OiBzb2NrZXQucmVtb3RlRmFtaWx5LFxuICAgIHRpbWVvdXQ6IHNvY2tldC50aW1lb3V0LFxuICAgIGJ5dGVzV3JpdHRlbjogc29ja2V0LmJ5dGVzV3JpdHRlbixcbiAgICBieXRlc1JlYWQ6IHNvY2tldC5ieXRlc1JlYWRcbiAgfVxufVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ1JlYWRhYmxlU3RyZWFtJ119ICovXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZyb20gKGl0ZXJhYmxlKSB7XG4gIC8vIFdlIGNhbm5vdCB1c2UgUmVhZGFibGVTdHJlYW0uZnJvbSBoZXJlIGJlY2F1c2UgaXQgZG9lcyBub3QgcmV0dXJuIGEgYnl0ZSBzdHJlYW0uXG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuYnlvYlJlcXVlc3Q/LnJlc3BvbmQoMClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogJ2J5dGVzJ1xuICAgIH1cbiAgKVxufVxuXG4vLyBUaGUgY2h1bmsgc2hvdWxkIGJlIGEgRm9ybURhdGEgaW5zdGFuY2UgYW5kIGNvbnRhaW5zXG4vLyBhbGwgdGhlIHJlcXVpcmVkIG1ldGhvZHMuXG5mdW5jdGlvbiBpc0Zvcm1EYXRhTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZGVsZXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuaGFzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5zZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJ1xuICApXG59XG5cbmZ1bmN0aW9uIGFkZEFib3J0TGlzdGVuZXIgKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgaWYgKCdhZGRFdmVudExpc3RlbmVyJyBpbiBzaWduYWwpIHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pXG4gICAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICB9XG4gIHNpZ25hbC5hZGRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbn1cblxuY29uc3QgaGFzVG9XZWxsRm9ybWVkID0gdHlwZW9mIFN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkID09PSAnZnVuY3Rpb24nXG5jb25zdCBoYXNJc1dlbGxGb3JtZWQgPSB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQgPT09ICdmdW5jdGlvbidcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKi9cbmZ1bmN0aW9uIHRvVVNWU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIGhhc1RvV2VsbEZvcm1lZCA/IGAke3ZhbH1gLnRvV2VsbEZvcm1lZCgpIDogbm9kZVV0aWwudG9VU1ZTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqL1xuLy8gVE9ETzogbW92ZSB0aGlzIHRvIHdlYmlkbFxuZnVuY3Rpb24gaXNVU1ZTdHJpbmcgKHZhbCkge1xuICByZXR1cm4gaGFzSXNXZWxsRm9ybWVkID8gYCR7dmFsfWAuaXNXZWxsRm9ybWVkKCkgOiB0b1VTVlN0cmluZyh2YWwpID09PSBgJHt2YWx9YFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNoYXJDb2RlIChjKSB7XG4gIHN3aXRjaCAoYykge1xuICAgIGNhc2UgMHgyMjpcbiAgICBjYXNlIDB4Mjg6XG4gICAgY2FzZSAweDI5OlxuICAgIGNhc2UgMHgyYzpcbiAgICBjYXNlIDB4MmY6XG4gICAgY2FzZSAweDNhOlxuICAgIGNhc2UgMHgzYjpcbiAgICBjYXNlIDB4M2M6XG4gICAgY2FzZSAweDNkOlxuICAgIGNhc2UgMHgzZTpcbiAgICBjYXNlIDB4M2Y6XG4gICAgY2FzZSAweDQwOlxuICAgIGNhc2UgMHg1YjpcbiAgICBjYXNlIDB4NWM6XG4gICAgY2FzZSAweDVkOlxuICAgIGNhc2UgMHg3YjpcbiAgICBjYXNlIDB4N2Q6XG4gICAgICAvLyBEUVVPVEUgYW5kIFwiKCksLzo7PD0+P0BbXFxde31cIlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZDSEFSICV4MjEtN0VcbiAgICAgIHJldHVybiBjID49IDB4MjEgJiYgYyA8PSAweDdlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSFRUUFRva2VuIChjaGFyYWN0ZXJzKSB7XG4gIGlmIChjaGFyYWN0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghaXNUb2tlbkNoYXJDb2RlKGNoYXJhY3RlcnMuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBoZWFkZXJDaGFyUmVnZXggaGF2ZSBiZWVuIGxpZnRlZCBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYWluL2xpYi9faHR0cF9jb21tb24uanNcblxuLyoqXG4gKiBNYXRjaGVzIGlmIHZhbCBjb250YWlucyBhbiBpbnZhbGlkIGZpZWxkLXZjaGFyXG4gKiAgZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKVxuICogIGZpZWxkLWNvbnRlbnQgID0gZmllbGQtdmNoYXIgWyAxKiggU1AgLyBIVEFCICkgZmllbGQtdmNoYXIgXVxuICogIGZpZWxkLXZjaGFyICAgID0gVkNIQVIgLyBvYnMtdGV4dFxuICovXG5jb25zdCBoZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKGNoYXJhY3RlcnMpIHtcbiAgcmV0dXJuICFoZWFkZXJDaGFyUmVnZXgudGVzdChjaGFyYWN0ZXJzKVxufVxuXG4vLyBQYXJzZWQgYWNjb3JkaW5nbHkgdG8gUkZDIDkxMTBcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwI2ZpZWxkLmNvbnRlbnQtcmFuZ2VcbmZ1bmN0aW9uIHBhcnNlUmFuZ2VIZWFkZXIgKHJhbmdlKSB7XG4gIGlmIChyYW5nZSA9PSBudWxsIHx8IHJhbmdlID09PSAnJykgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogbnVsbCwgc2l6ZTogbnVsbCB9XG5cbiAgY29uc3QgbSA9IHJhbmdlID8gcmFuZ2UubWF0Y2goL15ieXRlcyAoXFxkKyktKFxcZCspXFwvKFxcZCspPyQvKSA6IG51bGxcbiAgcmV0dXJuIG1cbiAgICA/IHtcbiAgICAgICAgc3RhcnQ6IHBhcnNlSW50KG1bMV0pLFxuICAgICAgICBlbmQ6IG1bMl0gPyBwYXJzZUludChtWzJdKSA6IG51bGwsXG4gICAgICAgIHNpemU6IG1bM10gPyBwYXJzZUludChtWzNdKSA6IG51bGxcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZnVuY3Rpb24gYWRkTGlzdGVuZXIgKG9iaiwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgY29uc3QgbGlzdGVuZXJzID0gKG9ialtrTGlzdGVuZXJzXSA/Pz0gW10pXG4gIGxpc3RlbmVycy5wdXNoKFtuYW1lLCBsaXN0ZW5lcl0pXG4gIG9iai5vbihuYW1lLCBsaXN0ZW5lcilcbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMgKG9iaikge1xuICBmb3IgKGNvbnN0IFtuYW1lLCBsaXN0ZW5lcl0gb2Ygb2JqW2tMaXN0ZW5lcnNdID8/IFtdKSB7XG4gICAgb2JqLnJlbW92ZUxpc3RlbmVyKG5hbWUsIGxpc3RlbmVyKVxuICB9XG4gIG9ialtrTGlzdGVuZXJzXSA9IG51bGxcbn1cblxuZnVuY3Rpb24gZXJyb3JSZXF1ZXN0IChjbGllbnQsIHJlcXVlc3QsIGVycikge1xuICB0cnkge1xuICAgIHJlcXVlc3Qub25FcnJvcihlcnIpXG4gICAgYXNzZXJ0KHJlcXVlc3QuYWJvcnRlZClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2xpZW50LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9XG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbmNvbnN0IG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSA9IHtcbiAgZGVsZXRlOiAnREVMRVRFJyxcbiAgREVMRVRFOiAnREVMRVRFJyxcbiAgZ2V0OiAnR0VUJyxcbiAgR0VUOiAnR0VUJyxcbiAgaGVhZDogJ0hFQUQnLFxuICBIRUFEOiAnSEVBRCcsXG4gIG9wdGlvbnM6ICdPUFRJT05TJyxcbiAgT1BUSU9OUzogJ09QVElPTlMnLFxuICBwb3N0OiAnUE9TVCcsXG4gIFBPU1Q6ICdQT1NUJyxcbiAgcHV0OiAnUFVUJyxcbiAgUFVUOiAnUFVUJ1xufVxuXG5jb25zdCBub3JtYWxpemVkTWV0aG9kUmVjb3JkcyA9IHtcbiAgLi4ubm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLFxuICBwYXRjaDogJ3BhdGNoJyxcbiAgUEFUQ0g6ICdQQVRDSCdcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2Yobm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLCBudWxsKVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzLCBudWxsKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbm9wLFxuICBpc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICB0b1VTVlN0cmluZyxcbiAgaXNVU1ZTdHJpbmcsXG4gIGlzQmxvYkxpa2UsXG4gIHBhcnNlT3JpZ2luLFxuICBwYXJzZVVSTCxcbiAgZ2V0U2VydmVyTmFtZSxcbiAgaXNTdHJlYW0sXG4gIGlzSXRlcmFibGUsXG4gIGlzQXN5bmNJdGVyYWJsZSxcbiAgaXNEZXN0cm95ZWQsXG4gIGhlYWRlck5hbWVUb1N0cmluZyxcbiAgYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSxcbiAgYWRkTGlzdGVuZXIsXG4gIHJlbW92ZUFsbExpc3RlbmVycyxcbiAgZXJyb3JSZXF1ZXN0LFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICBhZGRBYm9ydExpc3RlbmVyLFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGlzVG9rZW5DaGFyQ29kZSxcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLFxuICBub3JtYWxpemVkTWV0aG9kUmVjb3JkcyxcbiAgaXNWYWxpZFBvcnQsXG4gIGlzSHR0cE9ySHR0cHNQcmVmaXhlZCxcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIHNhZmVIVFRQTWV0aG9kczogWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10sXG4gIHdyYXBSZXF1ZXN0Qm9keVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnbm9kZTpkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCB1bmRpY2lEZWJ1Z0xvZyA9IHV0aWwuZGVidWdsb2coJ3VuZGljaScpXG5jb25zdCBmZXRjaERlYnVnbG9nID0gdXRpbC5kZWJ1Z2xvZygnZmV0Y2gnKVxuY29uc3Qgd2Vic29ja2V0RGVidWdsb2cgPSB1dGlsLmRlYnVnbG9nKCd3ZWJzb2NrZXQnKVxubGV0IGlzQ2xpZW50U2V0ID0gZmFsc2VcbmNvbnN0IGNoYW5uZWxzID0ge1xuICAvLyBDbGllbnRcbiAgYmVmb3JlQ29ubmVjdDogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLFxuICBjb25uZWN0ZWQ6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpLFxuICBjb25uZWN0RXJyb3I6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpLFxuICBzZW5kSGVhZGVyczogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKSxcbiAgLy8gUmVxdWVzdFxuICBjcmVhdGU6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpjcmVhdGUnKSxcbiAgYm9keVNlbnQ6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpib2R5U2VudCcpLFxuICBoZWFkZXJzOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpLFxuICB0cmFpbGVyczogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJyksXG4gIGVycm9yOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6ZXJyb3InKSxcbiAgLy8gV2ViU29ja2V0XG4gIG9wZW46IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0Om9wZW4nKSxcbiAgY2xvc2U6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OmNsb3NlJyksXG4gIHNvY2tldEVycm9yOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKSxcbiAgcGluZzogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpLFxuICBwb25nOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcbn1cblxuaWYgKHVuZGljaURlYnVnTG9nLmVuYWJsZWQgfHwgZmV0Y2hEZWJ1Z2xvZy5lbmFibGVkKSB7XG4gIGNvbnN0IGRlYnVnbG9nID0gZmV0Y2hEZWJ1Z2xvZy5lbmFibGVkID8gZmV0Y2hEZWJ1Z2xvZyA6IHVuZGljaURlYnVnTG9nXG5cbiAgLy8gVHJhY2sgYWxsIENsaWVudCBldmVudHNcbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHsgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQsIGhvc3QgfVxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdjb25uZWN0aW5nIHRvICVzIHVzaW5nICVzJXMnLFxuICAgICAgYCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9YCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmVyc2lvblxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH1cbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coXG4gICAgICAnY29ubmVjdGVkIHRvICVzIHVzaW5nICVzJXMnLFxuICAgICAgYCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9YCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmVyc2lvblxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH0sXG4gICAgICBlcnJvclxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdjb25uZWN0aW9uIHRvICVzIHVzaW5nICVzJXMgZXJyb3JlZCAtICVzJyxcbiAgICAgIGAke2hvc3R9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfWAsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIHZlcnNpb24sXG4gICAgICBlcnJvci5tZXNzYWdlXG4gICAgKVxuICB9KVxuXG4gIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OnNlbmRIZWFkZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKCdzZW5kaW5nIHJlcXVlc3QgdG8gJXMgJXMvJXMnLCBtZXRob2QsIG9yaWdpbiwgcGF0aClcbiAgfSlcblxuICAvLyBUcmFjayBSZXF1ZXN0IGV2ZW50c1xuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kLCBwYXRoLCBvcmlnaW4gfSxcbiAgICAgIHJlc3BvbnNlOiB7IHN0YXR1c0NvZGUgfVxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdyZWNlaXZlZCByZXNwb25zZSB0byAlcyAlcy8lcyAtIEhUVFAgJWQnLFxuICAgICAgbWV0aG9kLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aCxcbiAgICAgIHN0YXR1c0NvZGVcbiAgICApXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKCd0cmFpbGVycyByZWNlaXZlZCBmcm9tICVzICVzLyVzJywgbWV0aG9kLCBvcmlnaW4sIHBhdGgpXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9LFxuICAgICAgZXJyb3JcbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coXG4gICAgICAncmVxdWVzdCB0byAlcyAlcy8lcyBlcnJvcmVkIC0gJXMnLFxuICAgICAgbWV0aG9kLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aCxcbiAgICAgIGVycm9yLm1lc3NhZ2VcbiAgICApXG4gIH0pXG5cbiAgaXNDbGllbnRTZXQgPSB0cnVlXG59XG5cbmlmICh3ZWJzb2NrZXREZWJ1Z2xvZy5lbmFibGVkKSB7XG4gIGlmICghaXNDbGllbnRTZXQpIHtcbiAgICBjb25zdCBkZWJ1Z2xvZyA9IHVuZGljaURlYnVnTG9nLmVuYWJsZWQgPyB1bmRpY2lEZWJ1Z0xvZyA6IHdlYnNvY2tldERlYnVnbG9nXG4gICAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH1cbiAgICAgIH0gPSBldnRcbiAgICAgIGRlYnVnbG9nKFxuICAgICAgICAnY29ubmVjdGluZyB0byAlcyVzIHVzaW5nICVzJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdFBhcmFtczogeyB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCwgaG9zdCB9XG4gICAgICB9ID0gZXZ0XG4gICAgICBkZWJ1Z2xvZyhcbiAgICAgICAgJ2Nvbm5lY3RlZCB0byAlcyVzIHVzaW5nICVzJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdFBhcmFtczogeyB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCwgaG9zdCB9LFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IGV2dFxuICAgICAgZGVidWdsb2coXG4gICAgICAgICdjb25uZWN0aW9uIHRvICVzJXMgdXNpbmcgJXMlcyBlcnJvcmVkIC0gJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgZXJyb3IubWVzc2FnZVxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZXF1ZXN0OiB7IG1ldGhvZCwgcGF0aCwgb3JpZ2luIH1cbiAgICAgIH0gPSBldnRcbiAgICAgIGRlYnVnbG9nKCdzZW5kaW5nIHJlcXVlc3QgdG8gJXMgJXMvJXMnLCBtZXRob2QsIG9yaWdpbiwgcGF0aClcbiAgICB9KVxuICB9XG5cbiAgLy8gVHJhY2sgYWxsIFdlYlNvY2tldCBldmVudHNcbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6b3BlbicpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFkZHJlc3M6IHsgYWRkcmVzcywgcG9ydCB9XG4gICAgfSA9IGV2dFxuICAgIHdlYnNvY2tldERlYnVnbG9nKCdjb25uZWN0aW9uIG9wZW5lZCAlcyVzJywgYWRkcmVzcywgcG9ydCA/IGA6JHtwb3J0fWAgOiAnJylcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpjbG9zZScpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHsgd2Vic29ja2V0LCBjb2RlLCByZWFzb24gfSA9IGV2dFxuICAgIHdlYnNvY2tldERlYnVnbG9nKFxuICAgICAgJ2Nsb3NlZCBjb25uZWN0aW9uIHRvICVzIC0gJXMgJXMnLFxuICAgICAgd2Vic29ja2V0LnVybCxcbiAgICAgIGNvZGUsXG4gICAgICByZWFzb25cbiAgICApXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6c29ja2V0X2Vycm9yJykuc3Vic2NyaWJlKGVyciA9PiB7XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ2Nvbm5lY3Rpb24gZXJyb3JlZCAtICVzJywgZXJyLm1lc3NhZ2UpXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIHdlYnNvY2tldERlYnVnbG9nKCdwaW5nIHJlY2VpdmVkJylcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ3BvbmcgcmVjZWl2ZWQnKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2hhbm5lbHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZSxcbiAgaXNTdHJlYW0sXG4gIGRlc3Ryb3ksXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhTGlrZSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNCbG9iTGlrZSxcbiAgYnVpbGRVUkwsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U2VydmVyTmFtZSxcbiAgbm9ybWFsaXplZE1ldGhvZFJlY29yZHNcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi9kaWFnbm9zdGljcy5qcycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbi8vIFZlcmlmaWVzIHRoYXQgYSBnaXZlbiBwYXRoIGlzIHZhbGlkIGRvZXMgbm90IGNvbnRhaW4gY29udHJvbCBjaGFycyBcXHgwMCB0byBcXHgyMFxuY29uc3QgaW52YWxpZFBhdGhSZWdleCA9IC9bXlxcdTAwMjEtXFx1MDBmZl0vXG5cbmNvbnN0IGtIYW5kbGVyID0gU3ltYm9sKCdoYW5kbGVyJylcblxuY2xhc3MgUmVxdWVzdCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnksXG4gICAgaWRlbXBvdGVudCxcbiAgICBibG9ja2luZyxcbiAgICB1cGdyYWRlLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIGJvZHlUaW1lb3V0LFxuICAgIHJlc2V0LFxuICAgIHRocm93T25FcnJvcixcbiAgICBleHBlY3RDb250aW51ZSxcbiAgICBzZXJ2ZXJuYW1lXG4gIH0sIGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHBhdGhbMF0gIT09ICcvJyAmJlxuICAgICAgIShwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpICYmXG4gICAgICBtZXRob2QgIT09ICdDT05ORUNUJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJMIG9yIHN0YXJ0IHdpdGggYSBzbGFzaCcpXG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUGF0aFJlZ2V4LnRlc3QocGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IHBhdGgnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWV0aG9kICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtZXRob2QgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChub3JtYWxpemVkTWV0aG9kUmVjb3Jkc1ttZXRob2RdID09PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiAhaXNWYWxpZEhlYWRlclZhbHVlKHVwZ3JhZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXBncmFkZSBoZWFkZXInKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyc1RpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgYm9keVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChyZXNldCAhPSBudWxsICYmIHR5cGVvZiByZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVzZXQnKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RDb250aW51ZSAhPSBudWxsICYmIHR5cGVvZiBleHBlY3RDb250aW51ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZXhwZWN0Q29udGludWUnKVxuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyc1RpbWVvdXQgPSBoZWFkZXJzVGltZW91dFxuXG4gICAgdGhpcy5ib2R5VGltZW91dCA9IGJvZHlUaW1lb3V0XG5cbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciA9PT0gdHJ1ZVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcblxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgfSBlbHNlIGlmIChpc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIGRlc3Ryb3kodGhpcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkub24oJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnIgPT4ge1xuICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5Lm9uKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IGJvZHkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnVmZmVyLmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5sZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IGlzSXRlcmFibGUoYm9keSkgfHwgaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgUmVhZGFibGUgc3RyZWFtLCBhbiBpdGVyYWJsZSwgb3IgYW4gYXN5bmMgaXRlcmFibGUnKVxuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGVkID0gZmFsc2VcblxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLnVwZ3JhZGUgPSB1cGdyYWRlIHx8IG51bGxcblxuICAgIHRoaXMucGF0aCA9IHF1ZXJ5ID8gYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGhlYWRlcnNbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJzKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikgfHwgaGVhZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgaW4ga2V5LXZhbHVlIHBhaXIgZm9ybWF0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5c1tpXSwgaGVhZGVyc1trZXlzW2ldXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIHZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpXG5cbiAgICB0aGlzLnNlcnZlcm5hbWUgPSBzZXJ2ZXJuYW1lIHx8IGdldFNlcnZlck5hbWUodGhpcy5ob3N0KVxuXG4gICAgdGhpc1trSGFuZGxlcl0gPSBoYW5kbGVyXG5cbiAgICBpZiAoY2hhbm5lbHMuY3JlYXRlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jcmVhdGUucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudChjaHVuaylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAoY2hhbm5lbHMuYm9keVNlbnQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmJvZHlTZW50LnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICBhYm9ydCh0aGlzLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbm5lY3QoYWJvcnQpXG4gICAgfVxuICB9XG5cbiAgb25SZXNwb25zZVN0YXJ0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlc3BvbnNlU3RhcnRlZD8uKClcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmIChjaGFubmVscy5oZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5oZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCByZXNwb25zZTogeyBzdGF0dXNDb2RlLCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25EYXRhKGNodW5rKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWVcbiAgICBpZiAoY2hhbm5lbHMudHJhaWxlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLnRyYWlsZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCB0cmFpbGVycyB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFRoaXMgbWlnaHQgYmUgYSBiYWQgaWRlYT9cbiAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBpZiAoY2hhbm5lbHMuZXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmVycm9yLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCBlcnJvciB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uRmluYWxseSAoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgdGhpcy5lbmRIYW5kbGVyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFkZEhlYWRlciAoa2V5LCB2YWx1ZSkge1xuICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIgKHJlcXVlc3QsIGtleSwgdmFsKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgaGVhZGVyTmFtZSA9IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV1cblxuICBpZiAoaGVhZGVyTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaGVhZGVyTmFtZSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2hlYWRlck5hbWVdID09PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRIVFRQVG9rZW4oaGVhZGVyTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXIga2V5JylcbiAgICB9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgY29uc3QgYXJyID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbFtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gICAgICAgIH1cbiAgICAgICAgYXJyLnB1c2godmFsW2ldKVxuICAgICAgfSBlbHNlIGlmICh2YWxbaV0gPT09IG51bGwpIHtcbiAgICAgICAgYXJyLnB1c2goJycpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENvZXJjZSBwcmltaXRpdmVzIChhbmQgcmVqZWN0IHVuc2FmZSBjb2VyY2lvbnMgc3VjaCBhcyBmdW5jdGlvbnNcbiAgICAgICAgLy8gd2l0aCBhIGNyYWZ0ZWQgdG9TdHJpbmcvU3ltYm9sLnRvUHJpbWl0aXZlKS5cbiAgICAgICAgY29uc3Qgc3RyID0gYCR7dmFsW2ldfWBcbiAgICAgICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUoc3RyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICAgICAgfVxuICAgICAgICBhcnIucHVzaChzdHIpXG4gICAgICB9XG4gICAgfVxuICAgIHZhbCA9IGFyclxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgfSBlbHNlIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICB2YWwgPSAnJ1xuICB9IGVsc2Uge1xuICAgIC8vIENvZXJjZSBwcmltaXRpdmVzIChhbmQgcmVqZWN0IHVuc2FmZSBjb2VyY2lvbnMgc3VjaCBhcyBmdW5jdGlvbnNcbiAgICAvLyB3aXRoIGEgY3JhZnRlZCB0b1N0cmluZy9TeW1ib2wudG9QcmltaXRpdmUpLlxuICAgIHZhbCA9IGAke3ZhbH1gXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgfVxuXG4gIGlmIChoZWFkZXJOYW1lID09PSAnaG9zdCcpIHtcbiAgICBpZiAocmVxdWVzdC5ob3N0ICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2R1cGxpY2F0ZSBob3N0IGhlYWRlcicpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhvc3QgaGVhZGVyJylcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykge1xuICAgIGlmIChyZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZHVwbGljYXRlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9IHBhcnNlSW50KHZhbCwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmVxdWVzdC5jb250ZW50TGVuZ3RoKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuY29udGVudFR5cGUgPT09IG51bGwgJiYgaGVhZGVyTmFtZSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID0gdmFsXG4gICAgcmVxdWVzdC5oZWFkZXJzLnB1c2goa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJyB8fCBoZWFkZXJOYW1lID09PSAna2VlcC1hbGl2ZScgfHwgaGVhZGVyTmFtZSA9PT0gJ3VwZ3JhZGUnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7aGVhZGVyTmFtZX0gaGVhZGVyYClcbiAgfSBlbHNlIGlmIChoZWFkZXJOYW1lID09PSAnY29ubmVjdGlvbicpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnRvTG93ZXJDYXNlKCkgOiBudWxsXG4gICAgaWYgKHZhbHVlICE9PSAnY2xvc2UnICYmIHZhbHVlICE9PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9uIGhlYWRlcicpXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnY2xvc2UnKSB7XG4gICAgICByZXF1ZXN0LnJlc2V0ID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJOYW1lID09PSAnZXhwZWN0Jykge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcignZXhwZWN0IGhlYWRlciBub3Qgc3VwcG9ydGVkJylcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0LmhlYWRlcnMucHVzaChrZXksIHZhbClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RcbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJylcblxuY2xhc3MgRGlzcGF0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGRpc3BhdGNoICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBjbG9zZSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgY29tcG9zZSAoLi4uYXJncykge1xuICAgIC8vIFNvIHdlIGhhbmRsZSBbaW50ZXJjZXB0b3IxLCBpbnRlcmNlcHRvcjJdIG9yIGludGVyY2VwdG9yMSwgaW50ZXJjZXB0b3IyLCAuLi5cbiAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pID8gYXJnc1swXSA6IGFyZ3NcbiAgICBsZXQgZGlzcGF0Y2ggPSB0aGlzLmRpc3BhdGNoLmJpbmQodGhpcylcblxuICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICBpZiAoaW50ZXJjZXB0b3IgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZXJjZXB0b3IsIGV4cGVjdGVkIGZ1bmN0aW9uIHJlY2VpdmVkICR7dHlwZW9mIGludGVyY2VwdG9yfWApXG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoID0gaW50ZXJjZXB0b3IoZGlzcGF0Y2gpXG5cbiAgICAgIGlmIChkaXNwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBkaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJyB8fCBkaXNwYXRjaC5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpbnRlcmNlcHRvcicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb21wb3NlZERpc3BhdGNoZXIodGhpcywgZGlzcGF0Y2gpXG4gIH1cbn1cblxuY2xhc3MgQ29tcG9zZWREaXNwYXRjaGVyIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gICNkaXNwYXRjaGVyID0gbnVsbFxuICAjZGlzcGF0Y2ggPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIsIGRpc3BhdGNoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuI2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy4jZGlzcGF0Y2ggPSBkaXNwYXRjaFxuICB9XG5cbiAgZGlzcGF0Y2ggKC4uLmFyZ3MpIHtcbiAgICB0aGlzLiNkaXNwYXRjaCguLi5hcmdzKVxuICB9XG5cbiAgY2xvc2UgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzcGF0Y2hlci5jbG9zZSguLi5hcmdzKVxuICB9XG5cbiAgZGVzdHJveSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNkaXNwYXRjaGVyLmRlc3Ryb3koLi4uYXJncylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpXG5jb25zdCB7XG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtEZXN0cm95LCBrQ2xvc2UsIGtDbG9zZWQsIGtEZXN0cm95ZWQsIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga09uRGVzdHJveWVkID0gU3ltYm9sKCdvbkRlc3Ryb3llZCcpXG5jb25zdCBrT25DbG9zZWQgPSBTeW1ib2woJ29uQ2xvc2VkJylcbmNvbnN0IGtJbnRlcmNlcHRlZERpc3BhdGNoID0gU3ltYm9sKCdJbnRlcmNlcHRlZCBEaXNwYXRjaCcpXG5jb25zdCBrV2ViU29ja2V0T3B0aW9ucyA9IFN5bWJvbCgnd2ViU29ja2V0T3B0aW9ucycpXG5cbmNsYXNzIERpc3BhdGNoZXJCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IGZhbHNlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgIHRoaXNba0Nsb3NlZF0gPSBmYWxzZVxuICAgIHRoaXNba09uQ2xvc2VkXSA9IFtdXG4gICAgdGhpc1trV2ViU29ja2V0T3B0aW9uc10gPSBvcHRzPy53ZWJTb2NrZXQgPz8ge31cbiAgfVxuXG4gIGdldCB3ZWJTb2NrZXRPcHRpb25zICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF4RnJhZ21lbnRzOiB0aGlzW2tXZWJTb2NrZXRPcHRpb25zXS5tYXhGcmFnbWVudHMgPz8gMTMxMDcyLFxuICAgICAgbWF4UGF5bG9hZFNpemU6IHRoaXNba1dlYlNvY2tldE9wdGlvbnNdLm1heFBheWxvYWRTaXplID8/IDEyOCAqIDEwMjQgKiAxMDI0XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgb2ZmZXJzIGFuIG9wdGltaXplZCB0aW1lciBpbXBsZW1lbnRhdGlvbiBkZXNpZ25lZCBmb3Igc2NlbmFyaW9zXG4gKiB3aGVyZSBoaWdoIHByZWNpc2lvbiBpcyBub3QgY3JpdGljYWwuXG4gKlxuICogVGhlIHRpbWVyIGFjaGlldmVzIGZhc3RlciBwZXJmb3JtYW5jZSBieSB1c2luZyBhIGxvdy1yZXNvbHV0aW9uIGFwcHJvYWNoLFxuICogd2l0aCBhbiBhY2N1cmFjeSB0YXJnZXQgb2Ygd2l0aGluIDUwMG1zLiBUaGlzIG1ha2VzIGl0IHBhcnRpY3VsYXJseSB1c2VmdWxcbiAqIGZvciB0aW1lcnMgd2l0aCBkZWxheXMgb2YgMSBzZWNvbmQgb3IgbW9yZSwgd2hlcmUgZXhhY3QgdGltaW5nIGlzIGxlc3NcbiAqIGNydWNpYWwuXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IE5vZGUuanMgdGltZXJzIGFyZSBpbmhlcmVudGx5IGltcHJlY2lzZSwgYXNcbiAqIGRlbGF5cyBjYW4gb2NjdXIgZHVlIHRvIHRoZSBldmVudCBsb29wIGJlaW5nIGJsb2NrZWQgYnkgb3RoZXIgb3BlcmF0aW9ucy5cbiAqIENvbnNlcXVlbnRseSwgdGltZXJzIG1heSB0cmlnZ2VyIGxhdGVyIHRoYW4gdGhlaXIgc2NoZWR1bGVkIHRpbWUuXG4gKi9cblxuLyoqXG4gKiBUaGUgZmFzdE5vdyB2YXJpYWJsZSBjb250YWlucyB0aGUgaW50ZXJuYWwgZmFzdCB0aW1lciBjbG9jayB2YWx1ZS5cbiAqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgZmFzdE5vdyA9IDBcblxuLyoqXG4gKiBSRVNPTFVUSU9OX01TIHJlcHJlc2VudHMgdGhlIHRhcmdldCByZXNvbHV0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdCAxMDAwXG4gKi9cbmNvbnN0IFJFU09MVVRJT05fTVMgPSAxZTNcblxuLyoqXG4gKiBUSUNLX01TIGRlZmluZXMgdGhlIGRlc2lyZWQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gZWFjaCB0aWNrLlxuICogVGhlIHRhcmdldCB2YWx1ZSBpcyBzZXQgdG8gaGFsZiB0aGUgcmVzb2x1dGlvbiB0aW1lLCBtaW51cyAxIG1zLCB0byBhY2NvdW50XG4gKiBmb3IgcG90ZW50aWFsIGV2ZW50IGxvb3Agb3ZlcmhlYWQuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0IDQ5OVxuICovXG5jb25zdCBUSUNLX01TID0gKFJFU09MVVRJT05fTVMgPj4gMSkgLSAxXG5cbi8qKlxuICogZmFzdE5vd1RpbWVvdXQgaXMgYSBOb2RlLmpzIHRpbWVyIHVzZWQgdG8gbWFuYWdlIGFuZCBwcm9jZXNzXG4gKiB0aGUgRmFzdFRpbWVycyBzdG9yZWQgaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS5cbiAqXG4gKiBAdHlwZSB7Tm9kZUpTLlRpbWVvdXR9XG4gKi9cbmxldCBmYXN0Tm93VGltZW91dFxuXG4vKipcbiAqIFRoZSBrRmFzdFRpbWVyIHN5bWJvbCBpcyB1c2VkIHRvIGlkZW50aWZ5IEZhc3RUaW1lciBpbnN0YW5jZXMuXG4gKlxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qga0Zhc3RUaW1lciA9IFN5bWJvbCgna0Zhc3RUaW1lcicpXG5cbi8qKlxuICogVGhlIGZhc3RUaW1lcnMgYXJyYXkgY29udGFpbnMgYWxsIGFjdGl2ZSBGYXN0VGltZXJzLlxuICpcbiAqIEB0eXBlIHtGYXN0VGltZXJbXX1cbiAqL1xuY29uc3QgZmFzdFRpbWVycyA9IFtdXG5cbi8qKlxuICogVGhlc2UgY29uc3RhbnRzIHJlcHJlc2VudCB0aGUgdmFyaW91cyBzdGF0ZXMgb2YgYSBGYXN0VGltZXIuXG4gKi9cblxuLyoqXG4gKiBUaGUgYE5PVF9JTl9MSVNUYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIG5vdCBpbmNsdWRlZFxuICogaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS4gVGltZXJzIHdpdGggdGhpcyBzdGF0dXMgd2lsbCBub3QgYmUgcHJvY2Vzc2VkXG4gKiBkdXJpbmcgdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uXG4gKlxuICogQSBGYXN0VGltZXIgY2FuIGJlIHJlLWFkZGVkIHRvIHRoZSBgZmFzdFRpbWVyc2AgYXJyYXkgYnkgaW52b2tpbmcgdGhlXG4gKiBgcmVmcmVzaGAgbWV0aG9kIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0yfVxuICovXG5jb25zdCBOT1RfSU5fTElTVCA9IC0yXG5cbi8qKlxuICogVGhlIGBUT19CRV9DTEVBUkVEYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIHNjaGVkdWxlZFxuICogZm9yIHJlbW92YWwgZnJvbSB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LiBBIEZhc3RUaW1lciBpbiB0aGlzIHN0YXRlIHdpbGxcbiAqIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24gYW5kIHdpbGwgbm8gbG9uZ2VyXG4gKiBiZSBwcm9jZXNzZWQuXG4gKlxuICogVGhpcyBzdGF0dXMgaXMgYWxzbyBzZXQgd2hlbiB0aGUgYGNsZWFyYCBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0xfVxuICovXG5jb25zdCBUT19CRV9DTEVBUkVEID0gLTFcblxuLyoqXG4gKiBUaGUgYFBFTkRJTkdgIGNvbnN0YW50IHNpZ25pZmllcyB0aGF0IHRoZSBGYXN0VGltZXIgaXMgYXdhaXRpbmcgcHJvY2Vzc2luZ1xuICogaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uIFRpbWVycyB3aXRoIHRoaXMgc3RhdHVzIHdpbGwgaGF2ZVxuICogdGhlaXIgYF9pZGxlU3RhcnRgIHZhbHVlIHNldCBhbmQgdGhlaXIgc3RhdHVzIHVwZGF0ZWQgdG8gYEFDVElWRWAgaW4gdGhlIG5leHQgdGljay5cbiAqXG4gKiBAdHlwZSB7MH1cbiAqL1xuY29uc3QgUEVORElORyA9IDBcblxuLyoqXG4gKiBUaGUgYEFDVElWRWAgY29uc3RhbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEZhc3RUaW1lciBpcyBhY3RpdmUgYW5kIHdhaXRpbmdcbiAqIGZvciBpdHMgdGltZXIgdG8gZXhwaXJlLiBEdXJpbmcgdGhlIG5leHQgdGljaywgdGhlIGBvblRpY2tgIGZ1bmN0aW9uIHdpbGxcbiAqIGNoZWNrIGlmIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgYW5kIGlmIHNvLCBpdCB3aWxsIGV4ZWN1dGUgdGhlIGFzc29jaWF0ZWQgY2FsbGJhY2suXG4gKlxuICogQHR5cGUgezF9XG4gKi9cbmNvbnN0IEFDVElWRSA9IDFcblxuLyoqXG4gKiBUaGUgb25UaWNrIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZmFzdFRpbWVycyBhcnJheS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gb25UaWNrICgpIHtcbiAgLyoqXG4gICAqIEluY3JlbWVudCB0aGUgZmFzdE5vdyB2YWx1ZSBieSB0aGUgVElDS19NUyB2YWx1ZSwgZGVzcGl0ZSB0aGUgYWN0dWFsIHRpbWVcbiAgICogdGhhdCBoYXMgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IHRpY2suIFRoaXMgYXBwcm9hY2ggZW5zdXJlcyBpbmRlcGVuZGVuY2VcbiAgICogZnJvbSB0aGUgc3lzdGVtIGNsb2NrIGFuZCBkZWxheXMgY2F1c2VkIGJ5IGEgYmxvY2tlZCBldmVudCBsb29wLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZmFzdE5vdyArPSBUSUNLX01TXG5cbiAgLyoqXG4gICAqIFRoZSBgaWR4YCB2YXJpYWJsZSBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LlxuICAgKiBFeHBpcmVkIHRpbWVycyBhcmUgcmVtb3ZlZCBieSByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGFycmF5LlxuICAgKiBDb25zZXF1ZW50bHksIGBpZHhgIGlzIG9ubHkgaW5jcmVtZW50ZWQgd2hlbiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5vdCByZW1vdmVkLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgbGV0IGlkeCA9IDBcblxuICAvKipcbiAgICogVGhlIGxlbiB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgZmFzdFRpbWVycyBhcnJheVxuICAgKiBhbmQgd2lsbCBiZSBkZWNyZW1lbnRlZCB3aGVuIGEgRmFzdFRpbWVyIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlXG4gICAqIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcblxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgKi9cbiAgICBjb25zdCB0aW1lciA9IGZhc3RUaW1lcnNbaWR4XVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIGluIHRoZSBBQ1RJVkUgc3RhdGUgYW5kIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgaXQgd2lsbFxuICAgIC8vIGJlIHByb2Nlc3NlZCBpbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmICh0aW1lci5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICAgIC8vIFNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byB0aGUgZmFzdE5vdyB2YWx1ZSBtaW51cyB0aGUgVElDS19NUyB2YWx1ZVxuICAgICAgLy8gdG8gYWNjb3VudCBmb3IgdGhlIHRpbWUgdGhlIHRpbWVyIHdhcyBpbiB0aGUgUEVORElORyBzdGF0ZS5cbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSBmYXN0Tm93IC0gVElDS19NU1xuICAgICAgdGltZXIuX3N0YXRlID0gQUNUSVZFXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRpbWVyLl9zdGF0ZSA9PT0gQUNUSVZFICYmXG4gICAgICBmYXN0Tm93ID49IHRpbWVyLl9pZGxlU3RhcnQgKyB0aW1lci5faWRsZVRpbWVvdXRcbiAgICApIHtcbiAgICAgIHRpbWVyLl9zdGF0ZSA9IFRPX0JFX0NMRUFSRURcbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSAtMVxuICAgICAgdGltZXIuX29uVGltZW91dCh0aW1lci5fdGltZXJBcmcpXG4gICAgfVxuXG4gICAgaWYgKHRpbWVyLl9zdGF0ZSA9PT0gVE9fQkVfQ0xFQVJFRCkge1xuICAgICAgdGltZXIuX3N0YXRlID0gTk9UX0lOX0xJU1RcblxuICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50IHRvIHRoZSBjdXJyZW50IGluZGV4IGFuZCBkZWNyZW1lbnQgbGVuIGlmIGl0IGlzXG4gICAgICAvLyBub3QgdGhlIG9ubHkgZWxlbWVudCBpbiB0aGUgYXJyYXkuXG4gICAgICBpZiAoLS1sZW4gIT09IDApIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVyc1tsZW5dXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICsraWR4XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHRoZSBsZW5ndGggb2YgdGhlIGZhc3RUaW1lcnMgYXJyYXkgdG8gdGhlIG5ldyBsZW5ndGggYW5kIHRodXNcbiAgLy8gcmVtb3ZpbmcgdGhlIGV4Y2VzcyBGYXN0VGltZXJzIGVsZW1lbnRzIGZyb20gdGhlIGFycmF5LlxuICBmYXN0VGltZXJzLmxlbmd0aCA9IGxlblxuXG4gIC8vIElmIHRoZXJlIGFyZSBzdGlsbCBhY3RpdmUgRmFzdFRpbWVycyBpbiB0aGUgYXJyYXksIHJlZnJlc2ggdGhlIFRpbWVyLlxuICAvLyBJZiB0aGVyZSBhcmUgbm8gYWN0aXZlIEZhc3RUaW1lcnMsIHRoZSB0aW1lciB3aWxsIGJlIHJlZnJlc2hlZCBhZ2FpblxuICAvLyB3aGVuIGEgbmV3IEZhc3RUaW1lciBpcyBpbnN0YW50aWF0ZWQuXG4gIGlmIChmYXN0VGltZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZyZXNoVGltZW91dCAoKSB7XG4gIC8vIElmIHRoZSBmYXN0Tm93VGltZW91dCBpcyBhbHJlYWR5IHNldCwgcmVmcmVzaCBpdC5cbiAgaWYgKGZhc3ROb3dUaW1lb3V0KSB7XG4gICAgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCgpXG4gIC8vIGZhc3ROb3dUaW1lb3V0IGlzIG5vdCBpbnN0YW50aWF0ZWQgeWV0LCBjcmVhdGUgYSBuZXcgVGltZXIuXG4gIH0gZWxzZSB7XG4gICAgY2xlYXJUaW1lb3V0KGZhc3ROb3dUaW1lb3V0KVxuICAgIGZhc3ROb3dUaW1lb3V0ID0gc2V0VGltZW91dChvblRpY2ssIFRJQ0tfTVMpXG5cbiAgICAvLyBJZiB0aGUgVGltZXIgaGFzIGFuIHVucmVmIG1ldGhvZCwgY2FsbCBpdCB0byBhbGxvdyB0aGUgcHJvY2VzcyB0byBleGl0IGlmXG4gICAgLy8gdGhlcmUgYXJlIG5vIG90aGVyIGFjdGl2ZSBoYW5kbGVzLlxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBgRmFzdFRpbWVyYCBjbGFzcyBpcyBhIGRhdGEgc3RydWN0dXJlIGRlc2lnbmVkIHRvIHN0b3JlIGFuZCBtYW5hZ2VcbiAqIHRpbWVyIGluZm9ybWF0aW9uLlxuICovXG5jbGFzcyBGYXN0VGltZXIge1xuICBba0Zhc3RUaW1lcl0gPSB0cnVlXG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBvZiB0aGUgdGltZXIsIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICogLSBOT1RfSU5fTElTVCAoLTIpXG4gICAqIC0gVE9fQkVfQ0xFQVJFRCAoLTEpXG4gICAqIC0gUEVORElORyAoMClcbiAgICogLSBBQ1RJVkUgKDEpXG4gICAqXG4gICAqIEB0eXBlIHstMnwtMXwwfDF9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhdGUgPSBOT1RfSU5fTElTVFxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBjYWxsaW5nIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pZGxlVGltZW91dCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB3aGVuIHRoZSB0aW1lciB3YXMgc3RhcnRlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvXG4gICAqIGNhbGN1bGF0ZSB3aGVuIHRoZSB0aW1lciBzaG91bGQgZXhwaXJlLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAtMVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lkbGVTdGFydCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSB0aW1lciBleHBpcmVzLlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25UaW1lb3V0XG5cbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqXG4gICAqIEB0eXBlIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RpbWVyQXJnXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGQgd2FpdFxuICAgKiBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IGFyZ1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgdGhpcy5fb25UaW1lb3V0ID0gY2FsbGJhY2tcbiAgICB0aGlzLl9pZGxlVGltZW91dCA9IGRlbGF5XG4gICAgdGhpcy5fdGltZXJBcmcgPSBhcmdcblxuICAgIHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGltZXIncyBzdGFydCB0aW1lIHRvIHRoZSBjdXJyZW50IHRpbWUsIGFuZCByZXNjaGVkdWxlcyB0aGUgdGltZXJcbiAgICogdG8gY2FsbCBpdHMgY2FsbGJhY2sgYXQgdGhlIHByZXZpb3VzbHkgc3BlY2lmaWVkIGR1cmF0aW9uIGFkanVzdGVkIHRvIHRoZVxuICAgKiBjdXJyZW50IHRpbWUuXG4gICAqIFVzaW5nIHRoaXMgb24gYSB0aW1lciB0aGF0IGhhcyBhbHJlYWR5IGNhbGxlZCBpdHMgY2FsbGJhY2sgd2lsbCByZWFjdGl2YXRlXG4gICAqIHRoZSB0aW1lci5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWZyZXNoICgpIHtcbiAgICAvLyBJbiB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgdGhlIHRpbWVyIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhY3RpdmUgdGltZXJzLFxuICAgIC8vIGFkZCBpdCBiYWNrIHRvIHRoZSBhcnJheSB0byBiZSBwcm9jZXNzZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgb25UaWNrXG4gICAgLy8gZnVuY3Rpb24uXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBOT1RfSU5fTElTVCkge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIHRoZSBvbmx5IGFjdGl2ZSB0aW1lciwgcmVmcmVzaCB0aGUgZmFzdE5vd1RpbWVvdXQgZm9yXG4gICAgLy8gYmV0dGVyIHJlc29sdXRpb24uXG4gICAgaWYgKCFmYXN0Tm93VGltZW91dCB8fCBmYXN0VGltZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmVmcmVzaFRpbWVvdXQoKVxuICAgIH1cblxuICAgIC8vIFNldHRpbmcgdGhlIHN0YXRlIHRvIFBFTkRJTkcgd2lsbCBjYXVzZSB0aGUgdGltZXIgdG8gYmUgcmVzZXQgaW4gdGhlXG4gICAgLy8gbmV4dCB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBQRU5ESU5HXG4gIH1cblxuICAvKipcbiAgICogVGhlIGBjbGVhcmAgbWV0aG9kIGNhbmNlbHMgdGhlIHRpbWVyLCBwcmV2ZW50aW5nIGl0IGZyb20gZXhlY3V0aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFyICgpIHtcbiAgICAvLyBTZXQgdGhlIHN0YXRlIHRvIFRPX0JFX0NMRUFSRUQgdG8gbWFyayB0aGUgdGltZXIgZm9yIHJlbW92YWwgaW4gdGhlIG5leHRcbiAgICAvLyB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBUT19CRV9DTEVBUkVEXG5cbiAgICAvLyBSZXNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0aW1lciBpcyBubyBsb25nZXJcbiAgICAvLyBhY3RpdmUuXG4gICAgdGhpcy5faWRsZVN0YXJ0ID0gLTFcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXRUaW1lb3V0IGFuZCBjbGVhclRpbWVvdXQgZnVuY3Rpb24gdGhhdCBjYW4gYmVcbiAqIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIGZ1bmN0aW9ucy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgc2V0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgdGltZXIgd2hpY2ggZXhlY3V0ZXMgYSBmdW5jdGlvbiBvbmNlIHRoZVxuICAgKiB0aW1lciBleHBpcmVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGRcbiAgICogd2FpdCBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IFthcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogd2hlbiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHJldHVybnMge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn1cbiAgICovXG4gIHNldFRpbWVvdXQgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgLy8gSWYgdGhlIGRlbGF5IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgUkVTT0xVVElPTl9NUyB2YWx1ZSByZXR1cm4gYVxuICAgIC8vIG5hdGl2ZSBOb2RlLmpzIFRpbWVyIGluc3RhbmNlLlxuICAgIHJldHVybiBkZWxheSA8PSBSRVNPTFVUSU9OX01TXG4gICAgICA/IHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gICAgICA6IG5ldyBGYXN0VGltZXIoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgY2xlYXJUaW1lb3V0IG1ldGhvZCBjYW5jZWxzIGFuIGluc3RhbnRpYXRlZCBUaW1lciBwcmV2aW91c2x5IGNyZWF0ZWRcbiAgICogYnkgY2FsbGluZyBzZXRUaW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn0gdGltZW91dFxuICAgKi9cbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgLy8gSWYgdGhlIHRpbWVvdXQgaXMgYSBGYXN0VGltZXIsIGNhbGwgaXRzIG93biBjbGVhciBtZXRob2QuXG4gICAgaWYgKHRpbWVvdXRba0Zhc3RUaW1lcl0pIHtcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgICAqL1xuICAgICAgdGltZW91dC5jbGVhcigpXG4gICAgICAvLyBPdGhlcndpc2UgaXQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBuYXRpdmUgTm9kZUpTLlRpbWVvdXQsIHNvIGNhbGwgdGhlXG4gICAgICAvLyBOb2RlLmpzIG5hdGl2ZSBjbGVhclRpbWVvdXQgZnVuY3Rpb24uXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgIH1cbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBzZXRGYXN0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgZmFzdFRpbWVyIHdoaWNoIGV4ZWN1dGVzIGEgZnVuY3Rpb24gb25jZVxuICAgKiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGltZXJcbiAgICogZXhwaXJlcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IFRoZSB0aW1lLCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgdGltZXIgc2hvdWxkXG4gICAqIHdhaXQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gb3IgY29kZSBpcyBleGVjdXRlZC5cbiAgICogQHBhcmFtIHsqfSBbYXJnXSBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqIEByZXR1cm5zIHtGYXN0VGltZXJ9XG4gICAqL1xuICBzZXRGYXN0VGltZW91dCAoY2FsbGJhY2ssIGRlbGF5LCBhcmcpIHtcbiAgICByZXR1cm4gbmV3IEZhc3RUaW1lcihjYWxsYmFjaywgZGVsYXksIGFyZylcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBjbGVhclRpbWVvdXQgbWV0aG9kIGNhbmNlbHMgYW4gaW5zdGFudGlhdGVkIEZhc3RUaW1lciBwcmV2aW91c2x5XG4gICAqIGNyZWF0ZWQgYnkgY2FsbGluZyBzZXRGYXN0VGltZW91dC5cbiAgICpcbiAgICogQHBhcmFtIHtGYXN0VGltZXJ9IHRpbWVvdXRcbiAgICovXG4gIGNsZWFyRmFzdFRpbWVvdXQgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsZWFyKClcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBub3cgbWV0aG9kIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcm5hbCBmYXN0IHRpbWVyIGNsb2NrLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgbm93ICgpIHtcbiAgICByZXR1cm4gZmFzdE5vd1xuICB9LFxuICAvKipcbiAgICogVHJpZ2dlciB0aGUgb25UaWNrIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqIEV4cG9ydGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG4gICAqIE1hcmtpbmcgYXMgZGVwcmVjYXRlZCB0byBkaXNjb3VyYWdlIGFueSB1c2Ugb3V0c2lkZSBvZiB0ZXN0aW5nLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlbGF5PTBdIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gYWRkIHRvIHRoZSBub3cgdmFsdWUuXG4gICAqL1xuICB0aWNrIChkZWxheSA9IDApIHtcbiAgICBmYXN0Tm93ICs9IGRlbGF5IC0gUkVTT0xVVElPTl9NUyArIDFcbiAgICBvblRpY2soKVxuICAgIG9uVGljaygpXG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCBGYXN0VGltZXJzLlxuICAgKiBFeHBvcnRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHJlc2V0ICgpIHtcbiAgICBmYXN0Tm93ID0gMFxuICAgIGZhc3RUaW1lcnMubGVuZ3RoID0gMFxuICAgIGNsZWFyVGltZW91dChmYXN0Tm93VGltZW91dClcbiAgICBmYXN0Tm93VGltZW91dCA9IG51bGxcbiAgfSxcbiAgLyoqXG4gICAqIEV4cG9ydGluZyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGtGYXN0VGltZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbm9kZTpuZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBDb25uZWN0VGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB0aW1lcnMgPSByZXF1aXJlKCcuLi91dGlsL3RpbWVycycpXG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxubGV0IHRscyAvLyBpbmNsdWRlIHRscyBjb25kaXRpb25hbGx5IHNpbmNlIGl0IGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlXG5cbi8vIFRPRE86IHNlc3Npb24gcmUtdXNlIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBmaXJzdFxuLy8gY29ubmVjdGlvbiB0byByZXNvbHZlIHRoZSBzZXNzaW9uIGFuZCBtaWdodCB0aGVyZWZvcmVcbi8vIHJlc29sdmUgdGhlIHNhbWUgc2VydmVybmFtZSBtdWx0aXBsZSB0aW1lcyBldmVuIHdoZW5cbi8vIHJlLXVzZSBpcyBlbmFibGVkLlxuXG5sZXQgU2Vzc2lvbkNhY2hlXG4vLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbmlmIChnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgIShwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFIHx8IHByb2Nlc3MuZW52LlVORElDSV9OT19GRykpIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgV2Vha1Nlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeSA9IG5ldyBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkoKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPCB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChrZXkpXG4gICAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgICByZXR1cm4gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgbmV3IFdlYWtSZWYoc2Vzc2lvbikpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkucmVnaXN0ZXIoc2Vzc2lvbiwgc2Vzc2lvbktleSlcbiAgICB9XG4gIH1cbn0gZWxzZSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFNpbXBsZVNlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA+PSB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAvLyByZW1vdmUgdGhlIG9sZGVzdCBzZXNzaW9uXG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IG9sZGVzdEtleSB9ID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmtleXMoKS5uZXh0KClcbiAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDb25uZWN0b3IgKHsgYWxsb3dIMiwgbWF4Q2FjaGVkU2Vzc2lvbnMsIHNvY2tldFBhdGgsIHRpbWVvdXQsIHNlc3Npb246IGN1c3RvbVNlc3Npb24sIC4uLm9wdHMgfSkge1xuICBpZiAobWF4Q2FjaGVkU2Vzc2lvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4Q2FjaGVkU2Vzc2lvbnMpIHx8IG1heENhY2hlZFNlc3Npb25zIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENhY2hlZFNlc3Npb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogc29ja2V0UGF0aCwgLi4ub3B0cyB9XG4gIGNvbnN0IHNlc3Npb25DYWNoZSA9IG5ldyBTZXNzaW9uQ2FjaGUobWF4Q2FjaGVkU2Vzc2lvbnMgPT0gbnVsbCA/IDEwMCA6IG1heENhY2hlZFNlc3Npb25zKVxuICB0aW1lb3V0ID0gdGltZW91dCA9PSBudWxsID8gMTBlMyA6IHRpbWVvdXRcbiAgYWxsb3dIMiA9IGFsbG93SDIgIT0gbnVsbCA/IGFsbG93SDIgOiBmYWxzZVxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdCAoeyBob3N0bmFtZSwgaG9zdCwgcHJvdG9jb2wsIHBvcnQsIHNlcnZlcm5hbWUsIGxvY2FsQWRkcmVzcywgaHR0cFNvY2tldCB9LCBjYWxsYmFjaykge1xuICAgIGxldCBzb2NrZXRcbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICBpZiAoIXRscykge1xuICAgICAgICB0bHMgPSByZXF1aXJlKCdub2RlOnRscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGFzc2VydChzZXNzaW9uS2V5KVxuXG4gICAgICBjb25zdCBzZXNzaW9uID0gY3VzdG9tU2Vzc2lvbiB8fCBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgcG9ydCA9IHBvcnQgfHwgNDQzXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuXG4gICAgICBzb2NrZXRcbiAgICAgICAgLm9uKCdzZXNzaW9uJywgZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBDYW4gYSBzZXNzaW9uIGJlY29tZSBpbnZhbGlkIG9uY2UgZXN0YWJsaXNoZWQ/IERvbid0IHRoaW5rIHNvP1xuICAgICAgICAgIHNlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KCFodHRwU29ja2V0LCAnaHR0cFNvY2tldCBjYW4gb25seSBiZSBzZW50IG9uIFRMUyB1cGRhdGUnKVxuXG4gICAgICBwb3J0ID0gcG9ydCB8fCA4MFxuXG4gICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDY0ICogMTAyNCwgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICBwb3J0LFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTZXQgVENQIGtlZXAgYWxpdmUgb3B0aW9ucyBvbiB0aGUgc29ja2V0IGhlcmUgaW5zdGVhZCBvZiBpbiBjb25uZWN0KCkgZm9yIHRoZSBjYXNlIG9mIGFzc2lnbmluZyB0aGUgc29ja2V0XG4gICAgaWYgKG9wdGlvbnMua2VlcEFsaXZlID09IG51bGwgfHwgb3B0aW9ucy5rZWVwQWxpdmUpIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZUluaXRpYWxEZWxheSA9IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5ID09PSB1bmRlZmluZWQgPyA2MGUzIDogb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXlcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwga2VlcEFsaXZlSW5pdGlhbERlbGF5KVxuICAgIH1cblxuICAgIGNvbnN0IGNsZWFyQ29ubmVjdFRpbWVvdXQgPSBzZXR1cENvbm5lY3RUaW1lb3V0KG5ldyBXZWFrUmVmKHNvY2tldCksIHsgdGltZW91dCwgaG9zdG5hbWUsIHBvcnQgfSlcblxuICAgIHNvY2tldFxuICAgICAgLnNldE5vRGVsYXkodHJ1ZSlcbiAgICAgIC5vbmNlKHByb3RvY29sID09PSAnaHR0cHM6JyA/ICdzZWN1cmVDb25uZWN0JyA6ICdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhjbGVhckNvbm5lY3RUaW1lb3V0KVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihudWxsLCB0aGlzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2xlYXJDb25uZWN0VGltZW91dClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtXZWFrUmVmPG5ldC5Tb2NrZXQ+fSBzb2NrZXRXZWFrUmVmXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMudGltZW91dFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuaG9zdG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLnBvcnRcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICovXG5jb25zdCBzZXR1cENvbm5lY3RUaW1lb3V0ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICA/IChzb2NrZXRXZWFrUmVmLCBvcHRzKSA9PiB7XG4gICAgICBpZiAoIW9wdHMudGltZW91dCkge1xuICAgICAgICByZXR1cm4gbm9vcFxuICAgICAgfVxuXG4gICAgICBsZXQgczEgPSBudWxsXG4gICAgICBsZXQgczIgPSBudWxsXG4gICAgICBjb25zdCBmYXN0VGltZXIgPSB0aW1lcnMuc2V0RmFzdFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc2V0SW1tZWRpYXRlIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHByaW9yaXRpemUgc29ja2V0IGVycm9yIGV2ZW50cyBvdmVyIHRpbWVvdXRzXG4gICAgICAgIHMxID0gc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgLy8gV2luZG93cyBuZWVkcyBhbiBleHRyYSBzZXRJbW1lZGlhdGUgcHJvYmFibHkgZHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIGluIHRoZSBzb2NrZXQgbG9naWNcbiAgICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldFdlYWtSZWYuZGVyZWYoKSwgb3B0cykpXG4gICAgICAgIH0pXG4gICAgICB9LCBvcHRzLnRpbWVvdXQpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aW1lcnMuY2xlYXJGYXN0VGltZW91dChmYXN0VGltZXIpXG4gICAgICAgIGNsZWFySW1tZWRpYXRlKHMxKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMilcbiAgICAgIH1cbiAgICB9XG4gIDogKHNvY2tldFdlYWtSZWYsIG9wdHMpID0+IHtcbiAgICAgIGlmICghb3B0cy50aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiBub29wXG4gICAgICB9XG5cbiAgICAgIGxldCBzMSA9IG51bGxcbiAgICAgIGNvbnN0IGZhc3RUaW1lciA9IHRpbWVycy5zZXRGYXN0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3JpdGl6ZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICAgICAgczEgPSBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgIG9uQ29ubmVjdFRpbWVvdXQoc29ja2V0V2Vha1JlZi5kZXJlZigpLCBvcHRzKVxuICAgICAgICB9KVxuICAgICAgfSwgb3B0cy50aW1lb3V0KVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGltZXJzLmNsZWFyRmFzdFRpbWVvdXQoZmFzdFRpbWVyKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMSlcbiAgICAgIH1cbiAgICB9XG5cbi8qKlxuICogQHBhcmFtIHtuZXQuU29ja2V0fSBzb2NrZXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0cy50aW1lb3V0XG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5ob3N0bmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMucG9ydFxuICovXG5mdW5jdGlvbiBvbkNvbm5lY3RUaW1lb3V0IChzb2NrZXQsIG9wdHMpIHtcbiAgLy8gVGhlIHNvY2tldCBjb3VsZCBiZSBhbHJlYWR5IGdhcmJhZ2UgY29sbGVjdGVkXG4gIGlmIChzb2NrZXQgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IG1lc3NhZ2UgPSAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICBpZiAoQXJyYXkuaXNBcnJheShzb2NrZXQuYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRlZEFkZHJlc3NlcykpIHtcbiAgICBtZXNzYWdlICs9IGAgKGF0dGVtcHRlZCBhZGRyZXNzZXM6ICR7c29ja2V0LmF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0ZWRBZGRyZXNzZXMuam9pbignLCAnKX0sYFxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgKz0gYCAoYXR0ZW1wdGVkIGFkZHJlc3M6ICR7b3B0cy5ob3N0bmFtZX06JHtvcHRzLnBvcnR9LGBcbiAgfVxuXG4gIG1lc3NhZ2UgKz0gYCB0aW1lb3V0OiAke29wdHMudGltZW91dH1tcylgXG5cbiAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IENvbm5lY3RUaW1lb3V0RXJyb3IobWVzc2FnZSkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW51bVRvTWFwID0gdm9pZCAwO1xuZnVuY3Rpb24gZW51bVRvTWFwKG9iaikge1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZW51bVRvTWFwID0gZW51bVRvTWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSBleHBvcnRzLkhFQURFUl9TVEFURSA9IGV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SID0gZXhwb3J0cy5DT05ORUNUSU9OX1RPS0VOX0NIQVJTID0gZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBleHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBleHBvcnRzLkhFWCA9IGV4cG9ydHMuVVJMX0NIQVIgPSBleHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IGV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLk1BUksgPSBleHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5OVU0gPSBleHBvcnRzLkhFWF9NQVAgPSBleHBvcnRzLk5VTV9NQVAgPSBleHBvcnRzLkFMUEhBID0gZXhwb3J0cy5GSU5JU0ggPSBleHBvcnRzLkhfTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EU19SVFNQID0gZXhwb3J0cy5NRVRIT0RTX0lDRSA9IGV4cG9ydHMuTUVUSE9EU19IVFRQID0gZXhwb3J0cy5NRVRIT0RTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5GTEFHUyA9IGV4cG9ydHMuVFlQRSA9IGV4cG9ydHMuRVJST1IgPSB2b2lkIDA7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vLyBDIGhlYWRlcnNcbnZhciBFUlJPUjtcbihmdW5jdGlvbiAoRVJST1IpIHtcbiAgICBFUlJPUltFUlJPUltcIk9LXCJdID0gMF0gPSBcIk9LXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlRFUk5BTFwiXSA9IDFdID0gXCJJTlRFUk5BTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiU1RSSUNUXCJdID0gMl0gPSBcIlNUUklDVFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiTEZfRVhQRUNURURcIl0gPSAzXSA9IFwiTEZfRVhQRUNURURcIjtcbiAgICBFUlJPUltFUlJPUltcIlVORVhQRUNURURfQ09OVEVOVF9MRU5HVEhcIl0gPSA0XSA9IFwiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0xPU0VEX0NPTk5FQ1RJT05cIl0gPSA1XSA9IFwiQ0xPU0VEX0NPTk5FQ1RJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfTUVUSE9EXCJdID0gNl0gPSBcIklOVkFMSURfTUVUSE9EXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1VSTFwiXSA9IDddID0gXCJJTlZBTElEX1VSTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05TVEFOVFwiXSA9IDhdID0gXCJJTlZBTElEX0NPTlNUQU5UXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1ZFUlNJT05cIl0gPSA5XSA9IFwiSU5WQUxJRF9WRVJTSU9OXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiXSA9IDEwXSA9IFwiSU5WQUxJRF9IRUFERVJfVE9LRU5cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIl0gPSAxMV0gPSBcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ0hVTktfU0laRVwiXSA9IDEyXSA9IFwiSU5WQUxJRF9DSFVOS19TSVpFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1NUQVRVU1wiXSA9IDEzXSA9IFwiSU5WQUxJRF9TVEFUVVNcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfRU9GX1NUQVRFXCJdID0gMTRdID0gXCJJTlZBTElEX0VPRl9TVEFURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiXSA9IDE1XSA9IFwiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9CRUdJTlwiXSA9IDE2XSA9IFwiQ0JfTUVTU0FHRV9CRUdJTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfSEVBREVSU19DT01QTEVURVwiXSA9IDE3XSA9IFwiQ0JfSEVBREVSU19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9DT01QTEVURVwiXSA9IDE4XSA9IFwiQ0JfTUVTU0FHRV9DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfSEVBREVSXCJdID0gMTldID0gXCJDQl9DSFVOS19IRUFERVJcIjtcbiAgICBFUlJPUltFUlJPUltcIkNCX0NIVU5LX0NPTVBMRVRFXCJdID0gMjBdID0gXCJDQl9DSFVOS19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEXCJdID0gMjFdID0gXCJQQVVTRURcIjtcbiAgICBFUlJPUltFUlJPUltcIlBBVVNFRF9VUEdSQURFXCJdID0gMjJdID0gXCJQQVVTRURfVVBHUkFERVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX0gyX1VQR1JBREVcIl0gPSAyM10gPSBcIlBBVVNFRF9IMl9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJVU0VSXCJdID0gMjRdID0gXCJVU0VSXCI7XG59KShFUlJPUiA9IGV4cG9ydHMuRVJST1IgfHwgKGV4cG9ydHMuRVJST1IgPSB7fSkpO1xudmFyIFRZUEU7XG4oZnVuY3Rpb24gKFRZUEUpIHtcbiAgICBUWVBFW1RZUEVbXCJCT1RIXCJdID0gMF0gPSBcIkJPVEhcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVFVRVNUXCJdID0gMV0gPSBcIlJFUVVFU1RcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVNQT05TRVwiXSA9IDJdID0gXCJSRVNQT05TRVwiO1xufSkoVFlQRSA9IGV4cG9ydHMuVFlQRSB8fCAoZXhwb3J0cy5UWVBFID0ge30pKTtcbnZhciBGTEFHUztcbihmdW5jdGlvbiAoRkxBR1MpIHtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDFdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSAyXSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9VUEdSQURFXCJdID0gNF0gPSBcIkNPTk5FQ1RJT05fVVBHUkFERVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ0hVTktFRFwiXSA9IDhdID0gXCJDSFVOS0VEXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJVUEdSQURFXCJdID0gMTZdID0gXCJVUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05URU5UX0xFTkdUSFwiXSA9IDMyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlNLSVBCT0RZXCJdID0gNjRdID0gXCJTS0lQQk9EWVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiVFJBSUxJTkdcIl0gPSAxMjhdID0gXCJUUkFJTElOR1wiO1xuICAgIC8vIDEgPDwgOCBpcyB1bnVzZWRcbiAgICBGTEFHU1tGTEFHU1tcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gNTEyXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbn0pKEZMQUdTID0gZXhwb3J0cy5GTEFHUyB8fCAoZXhwb3J0cy5GTEFHUyA9IHt9KSk7XG52YXIgTEVOSUVOVF9GTEFHUztcbihmdW5jdGlvbiAoTEVOSUVOVF9GTEFHUykge1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkhFQURFUlNcIl0gPSAxXSA9IFwiSEVBREVSU1wiO1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkNIVU5LRURfTEVOR1RIXCJdID0gMl0gPSBcIkNIVU5LRURfTEVOR1RIXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiS0VFUF9BTElWRVwiXSA9IDRdID0gXCJLRUVQX0FMSVZFXCI7XG59KShMRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTIHx8IChleHBvcnRzLkxFTklFTlRfRkxBR1MgPSB7fSkpO1xudmFyIE1FVEhPRFM7XG4oZnVuY3Rpb24gKE1FVEhPRFMpIHtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERUxFVEVcIl0gPSAwXSA9IFwiREVMRVRFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUXCJdID0gMV0gPSBcIkdFVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkhFQURcIl0gPSAyXSA9IFwiSEVBRFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBPU1RcIl0gPSAzXSA9IFwiUE9TVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVVFwiXSA9IDRdID0gXCJQVVRcIjtcbiAgICAvKiBwYXRob2xvZ2ljYWwgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJDT05ORUNUXCJdID0gNV0gPSBcIkNPTk5FQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJPUFRJT05TXCJdID0gNl0gPSBcIk9QVElPTlNcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJUUkFDRVwiXSA9IDddID0gXCJUUkFDRVwiO1xuICAgIC8qIFdlYkRBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPUFlcIl0gPSA4XSA9IFwiQ09QWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxPQ0tcIl0gPSA5XSA9IFwiTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ09MXCJdID0gMTBdID0gXCJNS0NPTFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1PVkVcIl0gPSAxMV0gPSBcIk1PVkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QRklORFwiXSA9IDEyXSA9IFwiUFJPUEZJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QUEFUQ0hcIl0gPSAxM10gPSBcIlBST1BQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFQVJDSFwiXSA9IDE0XSA9IFwiU0VBUkNIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MT0NLXCJdID0gMTVdID0gXCJVTkxPQ0tcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJCSU5EXCJdID0gMTZdID0gXCJCSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVCSU5EXCJdID0gMTddID0gXCJSRUJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkJJTkRcIl0gPSAxOF0gPSBcIlVOQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkFDTFwiXSA9IDE5XSA9IFwiQUNMXCI7XG4gICAgLyogc3VidmVyc2lvbiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlJFUE9SVFwiXSA9IDIwXSA9IFwiUkVQT1JUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtBQ1RJVklUWVwiXSA9IDIxXSA9IFwiTUtBQ1RJVklUWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNIRUNLT1VUXCJdID0gMjJdID0gXCJDSEVDS09VVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1FUkdFXCJdID0gMjNdID0gXCJNRVJHRVwiO1xuICAgIC8qIHVwbnAgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNLVNFQVJDSFwiXSA9IDI0XSA9IFwiTS1TRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJOT1RJRllcIl0gPSAyNV0gPSBcIk5PVElGWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNVQlNDUklCRVwiXSA9IDI2XSA9IFwiU1VCU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5TVUJTQ1JJQkVcIl0gPSAyN10gPSBcIlVOU1VCU0NSSUJFXCI7XG4gICAgLyogUkZDLTU3ODkgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQQVRDSFwiXSA9IDI4XSA9IFwiUEFUQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQVVJHRVwiXSA9IDI5XSA9IFwiUFVSR0VcIjtcbiAgICAvKiBDYWxEQVYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0NBTEVOREFSXCJdID0gMzBdID0gXCJNS0NBTEVOREFSXCI7XG4gICAgLyogUkZDLTIwNjgsIHNlY3Rpb24gMTkuNi4xLjIgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJMSU5LXCJdID0gMzFdID0gXCJMSU5LXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MSU5LXCJdID0gMzJdID0gXCJVTkxJTktcIjtcbiAgICAvKiBpY2VjYXN0ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU09VUkNFXCJdID0gMzNdID0gXCJTT1VSQ0VcIjtcbiAgICAvKiBSRkMtNzU0MCwgc2VjdGlvbiAxMS42ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFJJXCJdID0gMzRdID0gXCJQUklcIjtcbiAgICAvKiBSRkMtMjMyNiBSVFNQICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiREVTQ1JJQkVcIl0gPSAzNV0gPSBcIkRFU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQU5OT1VOQ0VcIl0gPSAzNl0gPSBcIkFOTk9VTkNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VUVVBcIl0gPSAzN10gPSBcIlNFVFVQXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUExBWVwiXSA9IDM4XSA9IFwiUExBWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVVNFXCJdID0gMzldID0gXCJQQVVTRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRFQVJET1dOXCJdID0gNDBdID0gXCJURUFSRE9XTlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkdFVF9QQVJBTUVURVJcIl0gPSA0MV0gPSBcIkdFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRfUEFSQU1FVEVSXCJdID0gNDJdID0gXCJTRVRfUEFSQU1FVEVSXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVESVJFQ1RcIl0gPSA0M10gPSBcIlJFRElSRUNUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVDT1JEXCJdID0gNDRdID0gXCJSRUNPUkRcIjtcbiAgICAvKiBSQU9QICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiRkxVU0hcIl0gPSA0NV0gPSBcIkZMVVNIXCI7XG59KShNRVRIT0RTID0gZXhwb3J0cy5NRVRIT0RTIHx8IChleHBvcnRzLk1FVEhPRFMgPSB7fSkpO1xuZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBbXG4gICAgTUVUSE9EUy5ERUxFVEUsXG4gICAgTUVUSE9EUy5HRVQsXG4gICAgTUVUSE9EUy5IRUFELFxuICAgIE1FVEhPRFMuUE9TVCxcbiAgICBNRVRIT0RTLlBVVCxcbiAgICBNRVRIT0RTLkNPTk5FQ1QsXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuVFJBQ0UsXG4gICAgTUVUSE9EUy5DT1BZLFxuICAgIE1FVEhPRFMuTE9DSyxcbiAgICBNRVRIT0RTLk1LQ09MLFxuICAgIE1FVEhPRFMuTU9WRSxcbiAgICBNRVRIT0RTLlBST1BGSU5ELFxuICAgIE1FVEhPRFMuUFJPUFBBVENILFxuICAgIE1FVEhPRFMuU0VBUkNILFxuICAgIE1FVEhPRFMuVU5MT0NLLFxuICAgIE1FVEhPRFMuQklORCxcbiAgICBNRVRIT0RTLlJFQklORCxcbiAgICBNRVRIT0RTLlVOQklORCxcbiAgICBNRVRIT0RTLkFDTCxcbiAgICBNRVRIT0RTLlJFUE9SVCxcbiAgICBNRVRIT0RTLk1LQUNUSVZJVFksXG4gICAgTUVUSE9EUy5DSEVDS09VVCxcbiAgICBNRVRIT0RTLk1FUkdFLFxuICAgIE1FVEhPRFNbJ00tU0VBUkNIJ10sXG4gICAgTUVUSE9EUy5OT1RJRlksXG4gICAgTUVUSE9EUy5TVUJTQ1JJQkUsXG4gICAgTUVUSE9EUy5VTlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlBBVENILFxuICAgIE1FVEhPRFMuUFVSR0UsXG4gICAgTUVUSE9EUy5NS0NBTEVOREFSLFxuICAgIE1FVEhPRFMuTElOSyxcbiAgICBNRVRIT0RTLlVOTElOSyxcbiAgICBNRVRIT0RTLlBSSSxcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBzaG91bGQgd2UgYWxsb3cgaXQgd2l0aCBIVFRQP1xuICAgIE1FVEhPRFMuU09VUkNFLFxuXTtcbmV4cG9ydHMuTUVUSE9EU19JQ0UgPSBbXG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBbXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuREVTQ1JJQkUsXG4gICAgTUVUSE9EUy5BTk5PVU5DRSxcbiAgICBNRVRIT0RTLlNFVFVQLFxuICAgIE1FVEhPRFMuUExBWSxcbiAgICBNRVRIT0RTLlBBVVNFLFxuICAgIE1FVEhPRFMuVEVBUkRPV04sXG4gICAgTUVUSE9EUy5HRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuU0VUX1BBUkFNRVRFUixcbiAgICBNRVRIT0RTLlJFRElSRUNULFxuICAgIE1FVEhPRFMuUkVDT1JELFxuICAgIE1FVEhPRFMuRkxVU0gsXG4gICAgLy8gRm9yIEFpclBsYXlcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLlBPU1QsXG5dO1xuZXhwb3J0cy5NRVRIT0RfTUFQID0gdXRpbHNfMS5lbnVtVG9NYXAoTUVUSE9EUyk7XG5leHBvcnRzLkhfTUVUSE9EX01BUCA9IHt9O1xuT2JqZWN0LmtleXMoZXhwb3J0cy5NRVRIT0RfTUFQKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoL15ILy50ZXN0KGtleSkpIHtcbiAgICAgICAgZXhwb3J0cy5IX01FVEhPRF9NQVBba2V5XSA9IGV4cG9ydHMuTUVUSE9EX01BUFtrZXldO1xuICAgIH1cbn0pO1xudmFyIEZJTklTSDtcbihmdW5jdGlvbiAoRklOSVNIKSB7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVcIl0gPSAwXSA9IFwiU0FGRVwiO1xuICAgIEZJTklTSFtGSU5JU0hbXCJTQUZFX1dJVEhfQ0JcIl0gPSAxXSA9IFwiU0FGRV9XSVRIX0NCXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlVOU0FGRVwiXSA9IDJdID0gXCJVTlNBRkVcIjtcbn0pKEZJTklTSCA9IGV4cG9ydHMuRklOSVNIIHx8IChleHBvcnRzLkZJTklTSCA9IHt9KSk7XG5leHBvcnRzLkFMUEhBID0gW107XG5mb3IgKGxldCBpID0gJ0EnLmNoYXJDb2RlQXQoMCk7IGkgPD0gJ1onLmNoYXJDb2RlQXQoMCk7IGkrKykge1xuICAgIC8vIFVwcGVyIGNhc2VcbiAgICBleHBvcnRzLkFMUEhBLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XG4gICAgLy8gTG93ZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkgKyAweDIwKSk7XG59XG5leHBvcnRzLk5VTV9NQVAgPSB7XG4gICAgMDogMCwgMTogMSwgMjogMiwgMzogMywgNDogNCxcbiAgICA1OiA1LCA2OiA2LCA3OiA3LCA4OiA4LCA5OiA5LFxufTtcbmV4cG9ydHMuSEVYX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG4gICAgQTogMFhBLCBCOiAwWEIsIEM6IDBYQywgRDogMFhELCBFOiAwWEUsIEY6IDBYRixcbiAgICBhOiAweGEsIGI6IDB4YiwgYzogMHhjLCBkOiAweGQsIGU6IDB4ZSwgZjogMHhmLFxufTtcbmV4cG9ydHMuTlVNID0gW1xuICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5Jyxcbl07XG5leHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5BTFBIQS5jb25jYXQoZXhwb3J0cy5OVU0pO1xuZXhwb3J0cy5NQVJLID0gWyctJywgJ18nLCAnLicsICchJywgJ34nLCAnKicsICdcXCcnLCAnKCcsICcpJ107XG5leHBvcnRzLlVTRVJJTkZPX0NIQVJTID0gZXhwb3J0cy5BTFBIQU5VTVxuICAgIC5jb25jYXQoZXhwb3J0cy5NQVJLKVxuICAgIC5jb25jYXQoWyclJywgJzsnLCAnOicsICcmJywgJz0nLCAnKycsICckJywgJywnXSk7XG4vLyBUT0RPKGluZHV0bnkpOiB1c2UgUkZDXG5leHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IFtcbiAgICAnIScsICdcIicsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcoJywgJyknLCAnKicsICcrJywgJywnLCAnLScsICcuJywgJy8nLFxuICAgICc6JywgJzsnLCAnPCcsICc9JywgJz4nLFxuICAgICdAJywgJ1snLCAnXFxcXCcsICddJywgJ14nLCAnXycsXG4gICAgJ2AnLFxuICAgICd7JywgJ3wnLCAnfScsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSXG4gICAgLmNvbmNhdChbJ1xcdCcsICdcXGYnXSk7XG4vLyBBbGwgY2hhcmFjdGVycyB3aXRoIDB4ODAgYml0IHNldCB0byAxXG5mb3IgKGxldCBpID0gMHg4MDsgaSA8PSAweGZmOyBpKyspIHtcbiAgICBleHBvcnRzLlVSTF9DSEFSLnB1c2goaSk7XG59XG5leHBvcnRzLkhFWCA9IGV4cG9ydHMuTlVNLmNvbmNhdChbJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJ10pO1xuLyogVG9rZW5zIGFzIGRlZmluZWQgYnkgcmZjIDI2MTYuIEFsc28gbG93ZXJjYXNlcyB0aGVtLlxuICogICAgICAgIHRva2VuICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiAqICAgICBzZXBhcmF0b3JzICAgICA9IFwiKFwiIHwgXCIpXCIgfCBcIjxcIiB8IFwiPlwiIHwgXCJAXCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAqICAgICAgICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwie1wiIHwgXCJ9XCIgfCBTUCB8IEhUXG4gKi9cbmV4cG9ydHMuU1RSSUNUX1RPS0VOID0gW1xuICAgICchJywgJyMnLCAnJCcsICclJywgJyYnLCAnXFwnJyxcbiAgICAnKicsICcrJywgJy0nLCAnLicsXG4gICAgJ14nLCAnXycsICdgJyxcbiAgICAnfCcsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5UT0tFTiA9IGV4cG9ydHMuU1RSSUNUX1RPS0VOLmNvbmNhdChbJyAnXSk7XG4vKlxuICogVmVyaWZ5IHRoYXQgYSBjaGFyIGlzIGEgdmFsaWQgdmlzaWJsZSAocHJpbnRhYmxlKSBVUy1BU0NJSVxuICogY2hhcmFjdGVyIG9yICV4ODAtRkZcbiAqL1xuZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBbJ1xcdCddO1xuZm9yIChsZXQgaSA9IDMyOyBpIDw9IDI1NTsgaSsrKSB7XG4gICAgaWYgKGkgIT09IDEyNykge1xuICAgICAgICBleHBvcnRzLkhFQURFUl9DSEFSUy5wdXNoKGkpO1xuICAgIH1cbn1cbi8vICcsJyA9IFxceDQ0XG5leHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUy5maWx0ZXIoKGMpID0+IGMgIT09IDQ0KTtcbmV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLk5VTV9NQVA7XG5leHBvcnRzLk1JTk9SID0gZXhwb3J0cy5NQUpPUjtcbnZhciBIRUFERVJfU1RBVEU7XG4oZnVuY3Rpb24gKEhFQURFUl9TVEFURSkge1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJHRU5FUkFMXCJdID0gMF0gPSBcIkdFTkVSQUxcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTlwiXSA9IDFdID0gXCJDT05ORUNUSU9OXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTlRFTlRfTEVOR1RIXCJdID0gMl0gPSBcIkNPTlRFTlRfTEVOR1RIXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gM10gPSBcIlRSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlVQR1JBREVcIl0gPSA0XSA9IFwiVVBHUkFERVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIl0gPSA1XSA9IFwiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSA2XSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA3XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HX0NIVU5LRURcIl0gPSA4XSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiO1xufSkoSEVBREVSX1NUQVRFID0gZXhwb3J0cy5IRUFERVJfU1RBVEUgfHwgKGV4cG9ydHMuSEVBREVSX1NUQVRFID0ge30pKTtcbmV4cG9ydHMuU1BFQ0lBTF9IRUFERVJTID0ge1xuICAgICdjb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ2NvbnRlbnQtbGVuZ3RoJzogSEVBREVSX1NUQVRFLkNPTlRFTlRfTEVOR1RILFxuICAgICdwcm94eS1jb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ3RyYW5zZmVyLWVuY29kaW5nJzogSEVBREVSX1NUQVRFLlRSQU5TRkVSX0VOQ09ESU5HLFxuICAgICd1cGdyYWRlJzogSEVBREVSX1NUQVRFLlVQR1JBREUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzA3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3RYQUNBQVFSaHFRZ0EzQXdBZ0FFSUFOd01BSUFCQk9HcENBRGNEQUNBQVFUQnFRZ0EzQXdBZ0FFRW9ha0lBTndNQUlBQkJJR3BDQURjREFDQUFRUkJxUWdBM0F3QWdBRUVJYWtJQU53TUFJQUJCM1FFMkFod0xCZ0FnQUJBeUM1b3RBUXQvSXdCQkVHc2lDaVFBUWFUUUFDZ0NBQ0lKUlFSQVFlVFRBQ2dDQUNJRlJRUkFRZkRUQUVKL053SUFRZWpUQUVLQWdJU0FnSURBQURjQ0FFSGswd0FnQ2tFSWFrRndjVUhZcXRXcUJYTWlCVFlDQUVINDB3QkJBRFlDQUVISTB3QkJBRFlDQUF0QnpOTUFRWURVQkRZQ0FFR2MwQUJCZ05RRU5nSUFRYkRRQUNBRk5nSUFRYXpRQUVGL05nSUFRZERUQUVHQXJBTTJBZ0FEUUNBQlFjalFBR29nQVVHODBBQnFJZ0kyQWdBZ0FpQUJRYlRRQUdvaUF6WUNBQ0FCUWNEUUFHb2dBellDQUNBQlFkRFFBR29nQVVIRTBBQnFJZ00yQWdBZ0F5QUNOZ0lBSUFGQjJOQUFhaUFCUWN6UUFHb2lBallDQUNBQ0lBTTJBZ0FnQVVIVTBBQnFJQUkyQWdBZ0FVRWdhaUlCUVlBQ1J3MEFDMEdNMUFSQndhc0ROZ0lBUWFqUUFFSDAwd0FvQWdBMkFnQkJtTkFBUWNDckF6WUNBRUdrMEFCQmlOUUVOZ0lBUWN6L0IwRTROZ0lBUVlqVUJDRUpDd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI3QUZOQkVCQmpOQUFLQUlBSWdaQkVDQUFRUk5xUVhCeElBQkJDMGtiSWdSQkEzWWlBSFlpQVVFRGNRUkFBa0FnQVVFQmNTQUFja0VCY3lJQ1FRTjBJZ0JCdE5BQWFpSUJJQUJCdk5BQWFpZ0NBQ0lBS0FJSUlnTkdCRUJCak5BQUlBWkJmaUFDZDNFMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBRUVJYWlFQklBQWdBa0VEZENJQ1FRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREJFTFFaVFFBQ2dDQUNJSUlBUlBEUUVnQVFSQUFrQkJBaUFBZENJQ1FRQWdBbXR5SUFFZ0FIUnhhQ0lBUVFOMElnSkJ0TkFBYWlJQklBSkJ2TkFBYWlnQ0FDSUNLQUlJSWdOR0JFQkJqTkFBSUFaQmZpQUFkM0VpQmpZQ0FBd0JDeUFCSUFNMkFnZ2dBeUFCTmdJTUN5QUNJQVJCQTNJMkFnUWdBRUVEZENJQUlBUnJJUVVnQUNBQ2FpQUZOZ0lBSUFJZ0JHb2lCQ0FGUVFGeU5nSUVJQWdFUUNBSVFYaHhRYlRRQUdvaEFFR2cwQUFvQWdBaEF3Si9RUUVnQ0VFRGRuUWlBU0FHY1VVRVFFR00wQUFnQVNBR2NqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0F6WUNEQ0FBSUFNMkFnZ2dBeUFBTmdJTUlBTWdBVFlDQ0FzZ0FrRUlhaUVCUWFEUUFDQUVOZ0lBUVpUUUFDQUZOZ0lBREJFTFFaRFFBQ2dDQUNJTFJRMEJJQXRvUVFKMFFielNBR29vQWdBaUFDZ0NCRUY0Y1NBRWF5RUZJQUFoQWdOQUFrQWdBaWdDRUNJQlJRUkFJQUpCRkdvb0FnQWlBVVVOQVFzZ0FTZ0NCRUY0Y1NBRWF5SURJQVZKSVFJZ0F5QUZJQUliSVFVZ0FTQUFJQUliSVFBZ0FTRUNEQUVMQ3lBQUtBSVlJUWtnQUNnQ0RDSURJQUJIQkVCQm5OQUFLQUlBR2lBRElBQW9BZ2dpQVRZQ0NDQUJJQU0yQWd3TUVBc2dBRUVVYWlJQ0tBSUFJZ0ZGQkVBZ0FDZ0NFQ0lCUlEwRElBQkJFR29oQWdzRFFDQUNJUWNnQVNJRFFSUnFJZ0lvQWdBaUFRMEFJQU5CRUdvaEFpQURLQUlRSWdFTkFBc2dCMEVBTmdJQURBOExRWDhoQkNBQVFiOS9TdzBBSUFCQkUyb2lBVUZ3Y1NFRVFaRFFBQ2dDQUNJSVJRMEFRUUFnQkdzaEJRSkFBa0FDUUFKL1FRQWdCRUdBQWtrTkFCcEJIeUFFUWYvLy93ZExEUUFhSUFSQkppQUJRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9MSWdaQkFuUkJ2TklBYWlnQ0FDSUNSUVJBUVFBaEFVRUFJUU1NQVF0QkFDRUJJQVJCR1NBR1FRRjJhMEVBSUFaQkgwY2JkQ0VBUVFBaEF3TkFBa0FnQWlnQ0JFRjRjU0FFYXlJSElBVlBEUUFnQWlFRElBY2lCUTBBUVFBaEJTQUNJUUVNQXdzZ0FTQUNRUlJxS0FJQUlnY2dCeUFDSUFCQkhYWkJCSEZxUVJCcUtBSUFJZ0pHR3lBQklBY2JJUUVnQUVFQmRDRUFJQUlOQUFzTElBRWdBM0pGQkVCQkFDRURRUUlnQm5RaUFFRUFJQUJyY2lBSWNTSUFSUTBESUFCb1FRSjBRYnpTQUdvb0FnQWhBUXNnQVVVTkFRc0RRQ0FCS0FJRVFYaHhJQVJySWdJZ0JVa2hBQ0FDSUFVZ0FCc2hCU0FCSUFNZ0FCc2hBeUFCS0FJUUlnQUVmeUFBQlNBQlFSUnFLQUlBQ3lJQkRRQUxDeUFEUlEwQUlBVkJsTkFBS0FJQUlBUnJUdzBBSUFNb0FoZ2hCeUFESUFNb0Fnd2lBRWNFUUVHYzBBQW9BZ0FhSUFBZ0F5Z0NDQ0lCTmdJSUlBRWdBRFlDREF3T0N5QURRUlJxSWdJb0FnQWlBVVVFUUNBREtBSVFJZ0ZGRFFNZ0EwRVFhaUVDQ3dOQUlBSWhCaUFCSWdCQkZHb2lBaWdDQUNJQkRRQWdBRUVRYWlFQ0lBQW9BaEFpQVEwQUN5QUdRUUEyQWdBTURRdEJsTkFBS0FJQUlnTWdCRThFUUVHZzBBQW9BZ0FoQVFKQUlBTWdCR3NpQWtFUVR3UkFJQUVnQkdvaUFDQUNRUUZ5TmdJRUlBRWdBMm9nQWpZQ0FDQUJJQVJCQTNJMkFnUU1BUXNnQVNBRFFRTnlOZ0lFSUFFZ0Eyb2lBQ0FBS0FJRVFRRnlOZ0lFUVFBaEFFRUFJUUlMUVpUUUFDQUNOZ0lBUWFEUUFDQUFOZ0lBSUFGQkNHb2hBUXdQQzBHWTBBQW9BZ0FpQXlBRVN3UkFJQVFnQ1dvaUFDQURJQVJySWdGQkFYSTJBZ1JCcE5BQUlBQTJBZ0JCbU5BQUlBRTJBZ0FnQ1NBRVFRTnlOZ0lFSUFsQkNHb2hBUXdQQzBFQUlRRWdCQUovUWVUVEFDZ0NBQVJBUWV6VEFDZ0NBQXdCQzBIdzB3QkNmemNDQUVIbzB3QkNnSUNFZ0lDQXdBQTNBZ0JCNU5NQUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmalRBRUVBTmdJQVFjalRBRUVBTmdJQVFZQ0FCQXNpQUNBRVFjY0FhaUlGYWlJR1FRQWdBR3NpQjNFaUFrOEVRRUg4MHdCQk1EWUNBQXdQQ3dKQVFjVFRBQ2dDQUNJQlJRMEFRYnpUQUNnQ0FDSUlJQUpxSVFBZ0FDQUJUU0FBSUFoTGNRMEFRUUFoQVVIODB3QkJNRFlDQUF3UEMwSEkwd0F0QUFCQkJIRU5CQUpBQWtBZ0NRUkFRY3pUQUNFQkEwQWdBU2dDQUNJQUlBbE5CRUFnQUNBQktBSUVhaUFKU3cwREN5QUJLQUlJSWdFTkFBc0xRUUFRTXlJQVFYOUdEUVVnQWlFR1FlalRBQ2dDQUNJQlFRRnJJZ01nQUhFRVFDQUNJQUJySUFBZ0EycEJBQ0FCYTNGcUlRWUxJQVFnQms4TkJTQUdRZjcvLy84SFN3MEZRY1RUQUNnQ0FDSURCRUJCdk5NQUtBSUFJZ2NnQm1vaEFTQUJJQWRORFFZZ0FTQURTdzBHQ3lBR0VETWlBU0FBUncwQkRBY0xJQVlnQTJzZ0IzRWlCa0grLy8vL0Iwc05CQ0FHRURNaEFDQUFJQUVvQWdBZ0FTZ0NCR3BHRFFNZ0FDRUJDd0pBSUFZZ0JFSElBR3BQRFFBZ0FVRi9SZzBBUWV6VEFDZ0NBQ0lBSUFVZ0JtdHFRUUFnQUd0eElnQkIvdi8vL3dkTEJFQWdBU0VBREFjTElBQVFNMEYvUndSQUlBQWdCbW9oQmlBQklRQU1Cd3RCQUNBR2F4QXpHZ3dFQ3lBQklnQkJmMGNOQlF3REMwRUFJUU1NREF0QkFDRUFEQW9MSUFCQmYwY05BZ3RCeU5NQVFjalRBQ2dDQUVFRWNqWUNBQXNnQWtIKy8vLy9CMHNOQVNBQ0VETWhBRUVBRURNaEFTQUFRWDlHRFFFZ0FVRi9SZzBCSUFBZ0FVOE5BU0FCSUFCcklnWWdCRUU0YWswTkFRdEJ2Tk1BUWJ6VEFDZ0NBQ0FHYWlJQk5nSUFRY0RUQUNnQ0FDQUJTUVJBUWNEVEFDQUJOZ0lBQ3dKQUFrQUNRRUdrMEFBb0FnQWlBZ1JBUWN6VEFDRUJBMEFnQUNBQktBSUFJZ01nQVNnQ0JDSUZha1lOQWlBQktBSUlJZ0VOQUFzTUFndEJuTkFBS0FJQUlnRkJBRWNnQUNBQlQzRkZCRUJCbk5BQUlBQTJBZ0FMUVFBaEFVSFEwd0FnQmpZQ0FFSE0wd0FnQURZQ0FFR3MwQUJCZnpZQ0FFR3cwQUJCNU5NQUtBSUFOZ0lBUWRqVEFFRUFOZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCZUNBQWEwRVBjU0lCSUFCcUlnSWdCa0U0YXlJRElBRnJJZ0ZCQVhJMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBVFlDQUVHazBBQWdBallDQUNBQUlBTnFRVGcyQWdRTUFnc2dBQ0FDVFEwQUlBSWdBMGtOQUNBQktBSU1RUWh4RFFCQmVDQUNhMEVQY1NJQUlBSnFJZ05CbU5BQUtBSUFJQVpxSWdjZ0FHc2lBRUVCY2pZQ0JDQUJJQVVnQm1vMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBRFlDQUVHazBBQWdBellDQUNBQ0lBZHFRVGcyQWdRTUFRc2dBRUdjMEFBb0FnQkpCRUJCbk5BQUlBQTJBZ0FMSUFBZ0Jtb2hBMEhNMHdBaEFRSkFBa0FDUUFOQUlBTWdBU2dDQUVjRVFDQUJLQUlJSWdFTkFRd0NDd3NnQVMwQURFRUljVVVOQVF0QnpOTUFJUUVEUUNBQktBSUFJZ01nQWswRVFDQURJQUVvQWdScUlnVWdBa3NOQXdzZ0FTZ0NDQ0VCREFBTEFBc2dBU0FBTmdJQUlBRWdBU2dDQkNBR2FqWUNCQ0FBUVhnZ0FHdEJEM0ZxSWdrZ0JFRURjallDQkNBRFFYZ2dBMnRCRDNGcUlnWWdCQ0FKYWlJRWF5RUJJQUlnQmtZRVFFR2swQUFnQkRZQ0FFR1kwQUJCbU5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVEQWdMUWFEUUFDZ0NBQ0FHUmdSQVFhRFFBQ0FFTmdJQVFaVFFBRUdVMEFBb0FnQWdBV29pQURZQ0FDQUVJQUJCQVhJMkFnUWdBQ0FFYWlBQU5nSUFEQWdMSUFZb0FnUWlCVUVEY1VFQlJ3MEdJQVZCZUhFaENDQUZRZjhCVFFSQUlBVkJBM1loQXlBR0tBSUlJZ0FnQmlnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJ3c2dBaUFBTmdJSUlBQWdBallDREF3R0N5QUdLQUlZSVFjZ0JpQUdLQUlNSWdCSEJFQWdBQ0FHS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQVVMSUFaQkZHb2lBaWdDQUNJRlJRUkFJQVlvQWhBaUJVVU5CQ0FHUVJCcUlRSUxBMEFnQWlFRElBVWlBRUVVYWlJQ0tBSUFJZ1VOQUNBQVFSQnFJUUlnQUNnQ0VDSUZEUUFMSUFOQkFEWUNBQXdFQzBGNElBQnJRUTl4SWdFZ0FHb2lCeUFHUVRocklnTWdBV3NpQVVFQmNqWUNCQ0FBSUFOcVFUZzJBZ1FnQWlBRlFUY2dCV3RCRDNGcVFUOXJJZ01nQXlBQ1FSQnFTUnNpQTBFak5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQWMyQWdBZ0EwRVFha0hVMHdBcEFnQTNBZ0FnQTBITTB3QXBBZ0EzQWdoQjFOTUFJQU5CQ0dvMkFnQkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkIyTk1BUVFBMkFnQWdBMEVrYWlFQkEwQWdBVUVITmdJQUlBVWdBVUVFYWlJQlN3MEFDeUFDSUFOR0RRQWdBeUFES0FJRVFYNXhOZ0lFSUFNZ0F5QUNheUlGTmdJQUlBSWdCVUVCY2pZQ0JDQUZRZjhCVFFSQUlBVkJlSEZCdE5BQWFpRUFBbjlCak5BQUtBSUFJZ0ZCQVNBRlFRTjJkQ0lEY1VVRVFFR00wQUFnQVNBRGNqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUVnQlVILy8vOEhUUVJBSUFWQkppQUZRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQVFzZ0FpQUJOZ0ljSUFKQ0FEY0NFQ0FCUVFKMFFielNBR29oQUVHUTBBQW9BZ0FpQTBFQklBRjBJZ1p4UlFSQUlBQWdBallDQUVHUTBBQWdBeUFHY2pZQ0FDQUNJQUEyQWhnZ0FpQUNOZ0lJSUFJZ0FqWUNEQXdCQ3lBRlFSa2dBVUVCZG10QkFDQUJRUjlIRzNRaEFTQUFLQUlBSVFNQ1FBTkFJQU1pQUNnQ0JFRjRjU0FGUmcwQklBRkJIWFloQXlBQlFRRjBJUUVnQUNBRFFRUnhha0VRYWlJR0tBSUFJZ01OQUFzZ0JpQUNOZ0lBSUFJZ0FEWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUFvQWdnaUFTQUNOZ0lNSUFBZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFBTmdJTUlBSWdBVFlDQ0F0Qm1OQUFLQUlBSWdFZ0JFME5BRUdrMEFBb0FnQWlBQ0FFYWlJQ0lBRWdCR3NpQVVFQmNqWUNCRUdZMEFBZ0FUWUNBRUdrMEFBZ0FqWUNBQ0FBSUFSQkEzSTJBZ1FnQUVFSWFpRUJEQWdMUVFBaEFVSDgwd0JCTURZQ0FBd0hDMEVBSVFBTElBZEZEUUFDUUNBR0tBSWNJZ0pCQW5SQnZOSUFhaUlES0FJQUlBWkdCRUFnQXlBQU5nSUFJQUFOQVVHUTBBQkJrTkFBS0FJQVFYNGdBbmR4TmdJQURBSUxJQWRCRUVFVUlBY29BaEFnQmtZYmFpQUFOZ0lBSUFCRkRRRUxJQUFnQnpZQ0dDQUdLQUlRSWdJRVFDQUFJQUkyQWhBZ0FpQUFOZ0lZQ3lBR1FSUnFLQUlBSWdKRkRRQWdBRUVVYWlBQ05nSUFJQUlnQURZQ0dBc2dBU0FJYWlFQklBWWdDR29pQmlnQ0JDRUZDeUFHSUFWQmZuRTJBZ1FnQVNBRWFpQUJOZ0lBSUFRZ0FVRUJjallDQkNBQlFmOEJUUVJBSUFGQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FCUVFOMmRDSUJjVVVFUUVHTTBBQWdBU0FDY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQkRZQ0RDQUFJQVEyQWdnZ0JDQUFOZ0lNSUFRZ0FUWUNDQXdCQzBFZklRVWdBVUgvLy84SFRRUkFJQUZCSmlBQlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hCUXNnQkNBRk5nSWNJQVJDQURjQ0VDQUZRUUowUWJ6U0FHb2hBRUdRMEFBb0FnQWlBa0VCSUFWMElnTnhSUVJBSUFBZ0JEWUNBRUdRMEFBZ0FpQURjallDQUNBRUlBQTJBaGdnQkNBRU5nSUlJQVFnQkRZQ0RBd0JDeUFCUVJrZ0JVRUJkbXRCQUNBRlFSOUhHM1FoQlNBQUtBSUFJUUFDUUFOQUlBQWlBaWdDQkVGNGNTQUJSZzBCSUFWQkhYWWhBQ0FGUVFGMElRVWdBaUFBUVFSeGFrRVFhaUlES0FJQUlnQU5BQXNnQXlBRU5nSUFJQVFnQWpZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFFTElBSW9BZ2dpQUNBRU5nSU1JQUlnQkRZQ0NDQUVRUUEyQWhnZ0JDQUNOZ0lNSUFRZ0FEWUNDQXNnQ1VFSWFpRUJEQUlMQWtBZ0IwVU5BQUpBSUFNb0Fod2lBVUVDZEVHODBnQnFJZ0lvQWdBZ0EwWUVRQ0FDSUFBMkFnQWdBQTBCUVpEUUFDQUlRWDRnQVhkeElnZzJBZ0FNQWdzZ0IwRVFRUlFnQnlnQ0VDQURSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUhOZ0lZSUFNb0FoQWlBUVJBSUFBZ0FUWUNFQ0FCSUFBMkFoZ0xJQU5CRkdvb0FnQWlBVVVOQUNBQVFSUnFJQUUyQWdBZ0FTQUFOZ0lZQ3dKQUlBVkJEMDBFUUNBRElBUWdCV29pQUVFRGNqWUNCQ0FBSUFOcUlnQWdBQ2dDQkVFQmNqWUNCQXdCQ3lBRElBUnFJZ0lnQlVFQmNqWUNCQ0FESUFSQkEzSTJBZ1FnQWlBRmFpQUZOZ0lBSUFWQi93Rk5CRUFnQlVGNGNVRzAwQUJxSVFBQ2YwR00wQUFvQWdBaUFVRUJJQVZCQTNaMElnVnhSUVJBUVl6UUFDQUJJQVZ5TmdJQUlBQU1BUXNnQUNnQ0NBc2lBU0FDTmdJTUlBQWdBallDQ0NBQ0lBQTJBZ3dnQWlBQk5nSUlEQUVMUVI4aEFTQUZRZi8vL3dkTkJFQWdCVUVtSUFWQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2FpRUJDeUFDSUFFMkFod2dBa0lBTndJUUlBRkJBblJCdk5JQWFpRUFRUUVnQVhRaUJDQUljVVVFUUNBQUlBSTJBZ0JCa05BQUlBUWdDSEkyQWdBZ0FpQUFOZ0lZSUFJZ0FqWUNDQ0FDSUFJMkFnd01BUXNnQlVFWklBRkJBWFpyUVFBZ0FVRWZSeHQwSVFFZ0FDZ0NBQ0VFQWtBRFFDQUVJZ0FvQWdSQmVIRWdCVVlOQVNBQlFSMTJJUVFnQVVFQmRDRUJJQUFnQkVFRWNXcEJFR29pQmlnQ0FDSUVEUUFMSUFZZ0FqWUNBQ0FDSUFBMkFoZ2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUFLQUlJSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBa0VBTmdJWUlBSWdBRFlDRENBQ0lBRTJBZ2dMSUFOQkNHb2hBUXdCQ3dKQUlBbEZEUUFDUUNBQUtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBQkdCRUFnQWlBRE5nSUFJQU1OQVVHUTBBQWdDMEYrSUFGM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBQkdHMm9nQXpZQ0FDQURSUTBCQ3lBRElBazJBaGdnQUNnQ0VDSUJCRUFnQXlBQk5nSVFJQUVnQXpZQ0dBc2dBRUVVYWlnQ0FDSUJSUTBBSUFOQkZHb2dBVFlDQUNBQklBTTJBaGdMQWtBZ0JVRVBUUVJBSUFBZ0JDQUZhaUlCUVFOeU5nSUVJQUFnQVdvaUFTQUJLQUlFUVFGeU5nSUVEQUVMSUFBZ0JHb2lCeUFGUVFGeU5nSUVJQUFnQkVFRGNqWUNCQ0FGSUFkcUlBVTJBZ0FnQ0FSQUlBaEJlSEZCdE5BQWFpRUJRYURRQUNnQ0FDRURBbjlCQVNBSVFRTjJkQ0lDSUFaeFJRUkFRWXpRQUNBQ0lBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaUFpQUROZ0lNSUFFZ0F6WUNDQ0FESUFFMkFnd2dBeUFDTmdJSUMwR2cwQUFnQnpZQ0FFR1UwQUFnQlRZQ0FBc2dBRUVJYWlFQkN5QUtRUkJxSkFBZ0FRdERBQ0FBUlFSQVB3QkJFSFFQQ3dKQUlBQkIvLzhEY1EwQUlBQkJBRWdOQUNBQVFSQjJRQUFpQUVGL1JnUkFRZnpUQUVFd05nSUFRWDhQQ3lBQVFSQjBEd3NBQ3d2Y1B5SUFRWUFJQ3drQkFBQUFBZ0FBQUFNQVFaUUlDd1VFQUFBQUJRQkJwQWdMQ1FZQUFBQUhBQUFBQ0FCQjNBZ0xpaTFKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhGMVpYSjVBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZbTlrZVFCRGIyNTBaVzUwTFV4bGJtZDBhQ0J2ZG1WeVpteHZkd0JEYUhWdWF5QnphWHBsSUc5MlpYSm1iRzkzQUZKbGMzQnZibk5sSUc5MlpYSm1iRzkzQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCSVZGUlFMM2d1ZUNCeVpYRjFaWE4wQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCU1ZGTlFMM2d1ZUNCeVpYRjFaWE4wQUVWNGNHVmpkR1ZrSUZOUFZWSkRSU0J0WlhSb2IyUWdabTl5SUVsRFJTOTRMbmdnY21WeGRXVnpkQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUdaeVlXZHRaVzUwSUhOMFlYSjBBRVY0Y0dWamRHVmtJR1J2ZEFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNOMFlYUjFjd0JKYm5aaGJHbGtJSEpsYzNCdmJuTmxJSE4wWVhSMWN3QkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpBRlZ6WlhJZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzSmxjMlYwWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmYUdWaFpHVnlZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWemMyRm5aVjlpWldkcGJtQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzTjBZWFIxYzE5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTFjbXhmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJobFlXUmxjbDkyWVd4MVpWOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsYzNOaFoyVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlvWldGa1pYSmZabWxsYkdSZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFWVzVsZUhCbFkzUmxaQ0JqYUdGeUlHbHVJSFZ5YkNCelpYSjJaWElBU1c1MllXeHBaQ0JvWldGa1pYSWdkbUZzZFdVZ1kyaGhjZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQm1hV1ZzWkNCamFHRnlBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMXBibTl5SUhabGNuTnBiMjRBU1c1MllXeHBaQ0J0WVdwdmNpQjJaWEp6YVc5dUFFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJSFpsY25OcGIyNEFSWGh3WldOMFpXUWdRMUpNUmlCaFpuUmxjaUIyWlhKemFXOXVBRWx1ZG1Gc2FXUWdTRlJVVUNCMlpYSnphVzl1QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFJ2YTJWdUFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmRYSnNBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnljeUJwYmlCMWNtd0FWVzVsZUhCbFkzUmxaQ0J6ZEdGeWRDQmphR0Z5SUdsdUlIVnliQUJFYjNWaWJHVWdRQ0JwYmlCMWNtd0FSVzF3ZEhrZ1EyOXVkR1Z1ZEMxTVpXNW5kR2dBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1EyOXVkR1Z1ZEMxTVpXNW5kR2dBUkhWd2JHbGpZWFJsSUVOdmJuUmxiblF0VEdWdVozUm9BRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnY0dGMGFBQkRiMjUwWlc1MExVeGxibWQwYUNCallXNG5kQ0JpWlNCd2NtVnpaVzUwSUhkcGRHZ2dWSEpoYm5ObVpYSXRSVzVqYjJScGJtY0FTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2djMmw2WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJobFlXUmxjbDkyWVd4MVpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5MllXeDFaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUhaaGJIVmxBRTFwYzNOcGJtY2daWGh3WldOMFpXUWdURVlnWVdaMFpYSWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUNCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpTQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsWkNCMllXeDFaUUJRWVhWelpXUWdZbmtnYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFCSmJuWmhiR2xrSUVWUFJpQnpkR0YwWlFCdmJsOXlaWE5sZENCd1lYVnpaUUJ2Ymw5amFIVnVhMTlvWldGa1pYSWdjR0YxYzJVQWIyNWZiV1Z6YzJGblpWOWlaV2RwYmlCd1lYVnpaUUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVWdjR0YxYzJVQWIyNWZjM1JoZEhWelgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmRYSnNYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMk5vZFc1clgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyaGxZV1JsY2w5MllXeDFaVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMjFsZEdodlpGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZlptbGxiR1JmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldVZ2NHRjFjMlVBVlc1bGVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQnpkR0Z5ZENCc2FXNWxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCdVlXMWxBRkJoZFhObElHOXVJRU5QVGs1RlExUXZWWEJuY21Ga1pRQlFZWFZ6WlNCdmJpQlFVa2t2VlhCbmNtRmtaUUJGZUhCbFkzUmxaQ0JJVkZSUUx6SWdRMjl1Ym1WamRHbHZiaUJRY21WbVlXTmxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZiV1YwYUc5a0FFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJRzFsZEdodlpBQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyaGxZV1JsY2w5bWFXVnNaQUJRWVhWelpXUUFTVzUyWVd4cFpDQjNiM0prSUdWdVkyOTFiblJsY21Wa0FFbHVkbUZzYVdRZ2JXVjBhRzlrSUdWdVkyOTFiblJsY21Wa0FGVnVaWGh3WldOMFpXUWdZMmhoY2lCcGJpQjFjbXdnYzJOb1pXMWhBRkpsY1hWbGMzUWdhR0Z6SUdsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUFCVFYwbFVRMGhmVUZKUFdGa0FWVk5GWDFCU1QxaFpBRTFMUVVOVVNWWkpWRmtBVlU1UVVrOURSVk5UUVVKTVJWOUZUbFJKVkZrQVEwOVFXUUJOVDFaRlJGOVFSVkpOUVU1RlRsUk1XUUJVVDA5ZlJVRlNURmtBVGs5VVNVWlpBRVpCU1V4RlJGOUVSVkJGVGtSRlRrTlpBRUpCUkY5SFFWUkZWMEZaQUZCTVFWa0FVRlZVQUVOSVJVTkxUMVZVQUVkQlZFVlhRVmxmVkVsTlJVOVZWQUJTUlZGVlJWTlVYMVJKVFVWUFZWUUFUa1ZVVjA5U1MxOURUMDVPUlVOVVgxUkpUVVZQVlZRQVEwOU9Ua1ZEVkVsUFRsOVVTVTFGVDFWVUFFeFBSMGxPWDFSSlRVVlBWVlFBVGtWVVYwOVNTMTlTUlVGRVgxUkpUVVZQVlZRQVVFOVRWQUJOU1ZORVNWSkZRMVJGUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDB4UFFVUmZRa0ZNUVU1RFJVUmZVa1ZSVlVWVFZBQkNRVVJmVWtWUlZVVlRWQUJJVkZSUVgxSkZVVlZGVTFSZlUwVk9WRjlVVDE5SVZGUlFVMTlRVDFKVUFGSkZVRTlTVkFCSlRWOUJYMVJGUVZCUFZBQlNSVk5GVkY5RFQwNVVSVTVVQUU1UFgwTlBUbFJGVGxRQVVFRlNWRWxCVEY5RFQwNVVSVTVVQUVoUVJWOUpUbFpCVEVsRVgwTlBUbE5VUVU1VUFFaFFSVjlEUWw5U1JWTkZWQUJIUlZRQVNGQkZYMU5VVWtsRFZBQkRUMDVHVEVsRFZBQlVSVTFRVDFKQlVsbGZVa1ZFU1ZKRlExUUFVRVZTVFVGT1JVNVVYMUpGUkVsU1JVTlVBRU5QVGs1RlExUUFUVlZNVkVsZlUxUkJWRlZUQUVoUVJWOUpUbFpCVEVsRVgxTlVRVlJWVXdCVVQwOWZUVUZPV1Y5U1JWRlZSVk5VVXdCRlFWSk1XVjlJU1U1VVV3QlZUa0ZXUVVsTVFVSk1SVjlHVDFKZlRFVkhRVXhmVWtWQlUwOU9Vd0JQVUZSSlQwNVRBRk5YU1ZSRFNFbE9SMTlRVWs5VVQwTlBURk1BVmtGU1NVRk9WRjlCVEZOUFgwNUZSMDlVU1VGVVJWTUFUVlZNVkVsUVRFVmZRMGhQU1VORlV3QkpUbFJGVWs1QlRGOVRSVkpXUlZKZlJWSlNUMUlBVjBWQ1gxTkZVbFpGVWw5VlRrdE9UMWRPWDBWU1VrOVNBRkpCU1V4SFZVNWZSVkpTVDFJQVNVUkZUbFJKVkZsZlVGSlBWa2xFUlZKZlFWVlVTRVZPVkVsRFFWUkpUMDVmUlZKU1QxSUFVMU5NWDBORlVsUkpSa2xEUVZSRlgwVlNVazlTQUVsT1ZrRk1TVVJmV0Y5R1QxSlhRVkpFUlVSZlJrOVNBRk5GVkY5UVFWSkJUVVZVUlZJQVIwVlVYMUJCVWtGTlJWUkZVZ0JJVUVWZlZWTkZVZ0JUUlVWZlQxUklSVklBU0ZCRlgwTkNYME5JVlU1TFgwaEZRVVJGVWdCTlMwTkJURVZPUkVGU0FGTkZWRlZRQUZkRlFsOVRSVkpXUlZKZlNWTmZSRTlYVGdCVVJVRlNSRTlYVGdCSVVFVmZRMHhQVTBWRVgwTlBUazVGUTFSSlQwNEFTRVZWVWtsVFZFbERYMFZZVUVsU1FWUkpUMDRBUkVsVFEwOU9Ua1ZEVkVWRVgwOVFSVkpCVkVsUFRnQk9UMDVmUVZWVVNFOVNTVlJCVkVsV1JWOUpUa1pQVWsxQlZFbFBUZ0JJVUVWZlNVNVdRVXhKUkY5V1JWSlRTVTlPQUVoUVJWOURRbDlOUlZOVFFVZEZYMEpGUjBsT0FGTkpWRVZmU1ZOZlJsSlBXa1ZPQUVoUVJWOUpUbFpCVEVsRVgwaEZRVVJGVWw5VVQwdEZUZ0JKVGxaQlRFbEVYMVJQUzBWT0FFWlBVa0pKUkVSRlRnQkZUa2hCVGtORlgxbFBWVkpmUTBGTVRRQklVRVZmU1U1V1FVeEpSRjlWVWt3QVFreFBRMHRGUkY5Q1dWOVFRVkpGVGxSQlRGOURUMDVVVWs5TUFFMUxRMDlNQUVGRFRBQklVRVZmU1U1VVJWSk9RVXdBVWtWUlZVVlRWRjlJUlVGRVJWSmZSa2xGVEVSVFgxUlBUMTlNUVZKSFJWOVZUazlHUmtsRFNVRk1BRWhRUlY5UFN3QlZUa3hKVGtzQVZVNU1UME5MQUZCU1NRQlNSVlJTV1Y5WFNWUklBRWhRUlY5SlRsWkJURWxFWDBOUFRsUkZUbFJmVEVWT1IxUklBRWhRUlY5VlRrVllVRVZEVkVWRVgwTlBUbFJGVGxSZlRFVk9SMVJJQUVaTVZWTklBRkJTVDFCUVFWUkRTQUJOTFZORlFWSkRTQUJWVWtsZlZFOVBYMHhQVGtjQVVGSlBRMFZUVTBsT1J3Qk5TVk5EUlV4TVFVNUZUMVZUWDFCRlVsTkpVMVJGVGxSZlYwRlNUa2xPUndCTlNWTkRSVXhNUVU1RlQxVlRYMWRCVWs1SlRrY0FTRkJGWDBsT1ZrRk1TVVJmVkZKQlRsTkdSVkpmUlU1RFQwUkpUa2NBUlhod1pXTjBaV1FnUTFKTVJnQklVRVZmU1U1V1FVeEpSRjlEU0ZWT1MxOVRTVnBGQUUxUFZrVUFRMDlPVkVsT1ZVVUFTRkJGWDBOQ1gxTlVRVlJWVTE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNVMTlEVDAxUVRFVlVSUUJJVUVWZlEwSmZWa1ZTVTBsUFRsOURUMDFRVEVWVVJRQklVRVZmUTBKZlZWSk1YME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNYMVpCVEZWRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5RFNGVk9TMTlGV0ZSRlRsTkpUMDVmVmtGTVZVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBWWVZFVk9VMGxQVGw5T1FVMUZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOU5SVk5UUVVkRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5TlJWUklUMFJmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsOUdTVVZNUkY5RFQwMVFURVZVUlFCRVJVeEZWRVVBU0ZCRlgwbE9Wa0ZNU1VSZlJVOUdYMU5VUVZSRkFFbE9Wa0ZNU1VSZlUxTk1YME5GVWxSSlJrbERRVlJGQUZCQlZWTkZBRTVQWDFKRlUxQlBUbE5GQUZWT1UxVlFVRTlTVkVWRVgwMUZSRWxCWDFSWlVFVUFSMDlPUlFCT1QxUmZRVU5EUlZCVVFVSk1SUUJUUlZKV1NVTkZYMVZPUVZaQlNVeEJRa3hGQUZKQlRrZEZYMDVQVkY5VFFWUkpVMFpKUVVKTVJRQlBVa2xIU1U1ZlNWTmZWVTVTUlVGRFNFRkNURVVBVWtWVFVFOU9VMFZmU1ZOZlUxUkJURVVBVUZWU1IwVUFUVVZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmUmtsRlRFUlRYMVJQVDE5TVFWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOVVUMDlmVEVGU1IwVUFVRUZaVEU5QlJGOVVUMDlmVEVGU1IwVUFTVTVUVlVaR1NVTkpSVTVVWDFOVVQxSkJSMFVBU0ZCRlgxQkJWVk5GUkY5VlVFZFNRVVJGQUVoUVJWOVFRVlZUUlVSZlNESmZWVkJIVWtGRVJRQlRUMVZTUTBVQVFVNU9UMVZPUTBVQVZGSkJRMFVBU0ZCRlgxVk9SVmhRUlVOVVJVUmZVMUJCUTBVQVJFVlRRMUpKUWtVQVZVNVRWVUpUUTFKSlFrVUFVa1ZEVDFKRUFFaFFSVjlKVGxaQlRFbEVYMDFGVkVoUFJBQk9UMVJmUms5VlRrUUFVRkpQVUVaSlRrUUFWVTVDU1U1RUFGSkZRa2xPUkFCVlRrRlZWRWhQVWtsYVJVUUFUVVZVU0U5RVgwNVBWRjlCVEV4UFYwVkVBRWhVVkZCZlZrVlNVMGxQVGw5T1QxUmZVMVZRVUU5U1ZFVkVBRUZNVWtWQlJGbGZVa1ZRVDFKVVJVUUFRVU5EUlZCVVJVUUFUazlVWDBsTlVFeEZUVVZPVkVWRUFFeFBUMUJmUkVWVVJVTlVSVVFBU0ZCRlgwTlNYMFZZVUVWRFZFVkVBRWhRUlY5TVJsOUZXRkJGUTFSRlJBQkRVa1ZCVkVWRUFFbE5YMVZUUlVRQVNGQkZYMUJCVlZORlJBQlVTVTFGVDFWVVgwOURRMVZTUlVRQVVFRlpUVVZPVkY5U1JWRlZTVkpGUkFCUVVrVkRUMDVFU1ZSSlQwNWZVa1ZSVlVsU1JVUUFVRkpQV0ZsZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVGtWVVYwOVNTMTlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk1SVTVIVkVoZlVrVlJWVWxTUlVRQVUxTk1YME5GVWxSSlJrbERRVlJGWDFKRlVWVkpVa1ZFQUZWUVIxSkJSRVZmVWtWUlZVbFNSVVFBVUVGSFJWOUZXRkJKVWtWRUFGQlNSVU5QVGtSSlZFbFBUbDlHUVVsTVJVUUFSVmhRUlVOVVFWUkpUMDVmUmtGSlRFVkVBRkpGVmtGTVNVUkJWRWxQVGw5R1FVbE1SVVFBVTFOTVgwaEJUa1JUU0VGTFJWOUdRVWxNUlVRQVRFOURTMFZFQUZSU1FVNVRSazlTVFVGVVNVOU9YMEZRVUV4SlJVUUFUazlVWDAxUFJFbEdTVVZFQUU1UFZGOUZXRlJGVGtSRlJBQkNRVTVFVjBsRVZFaGZURWxOU1ZSZlJWaERSVVZFUlVRQVUwbFVSVjlKVTE5UFZrVlNURTlCUkVWRUFFaEZRVVFBUlhod1pXTjBaV1FnU0ZSVVVDOEFBRjRUQUFBbUV3QUFNQkFBQVBBWEFBQ2RFd0FBRlJJQUFEa1hBQUR3RWdBQUNoQUFBSFVTQUFDdEVnQUFnaE1BQUU4VUFBQi9FQUFBb0JVQUFDTVVBQUNKRWdBQWl4UUFBRTBWQUFEVUVRQUF6eFFBQUJBWUFBREpGZ0FBM0JZQUFNRVJBQURnRndBQXV4UUFBSFFVQUFCOEZRQUE1UlFBQUFnWEFBQWZFQUFBWlJVQUFLTVVBQUFvRlFBQUFoVUFBSmtWQUFBc0VBQUFpeGtBQUU4UEFBRFVEZ0FBYWhBQUFNNFFBQUFDRndBQWlRNEFBRzRUQUFBY0V3QUFaaFFBQUZZWEFBREJFd0FBelJNQUFHd1RBQUJvRndBQVpoY0FBRjhYQUFBaUV3QUF6ZzhBQUdrT0FBRFlEZ0FBWXhZQUFNc1RBQUNxRGdBQUtCY0FBQ1lYQUFERkV3QUFYUllBQU9nUkFBQm5Fd0FBWlJNQUFQSVdBQUJ6RXdBQUhSY0FBUGtXQUFEekVRQUF6dzRBQU00VkFBQU1FZ0FBc3hFQUFLVVJBQUJoRUFBQU1oY0FBTHNUQUVINU5Rc0JBUUJCa0RZTDRBRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQkIvVGNMQVFFQVFaRTRDMTRDQXdJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQVFBQUFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSDlPUXNCQVFCQmtUb0xYZ0lBQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFBd0FFQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQVFmQTdDdzFzYjNObFpXVndMV0ZzYVhabEFFR0pQQXNCQVFCQm9Ed0w0QUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCaVQ0TEFRRUFRYUErQytjQkFRRUJBUUVCQVFFQkFRRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGamFIVnVhMlZrQUVHd3dBQUxYd0VCQUFFQkFRRUJBQUFCQVFBQkFRQUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFBQkFFR1F3Z0FMSVdWamRHbHZibVZ1ZEMxc1pXNW5kR2h2Ym5KdmVIa3RZMjl1Ym1WamRHbHZiZ0JCd01JQUN5MXlZVzV6Wm1WeUxXVnVZMjlrYVc1bmNHZHlZV1JsRFFvTkNnMEtVMDBOQ2cwS1ZGUlFMME5GTDFSVFVDOEFRZm5DQUFzRkFRSUFBUU1BUVpEREFBdmdBUVFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg1eEFBTEJRRUNBQUVEQUVHUXhRQUw0QUVFQVFFRkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NZQUN3UUJBQUFCQUVHUnh3QUwzd0VCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg2eUFBTEJBRUFBQUlBUVpESkFBdGZBd1FBQUFRRUJBUUVCQVFFQkFRRUJRUUVCQVFFQkFRRUJBUUVCQUFFQUFZSEJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUFCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFRQVFmcktBQXNFQVFBQUFRQkJrTXNBQ3dFQkFFR3F5d0FMUVFJQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSDZ6QUFMQkFFQUFBRUFRWkROQUFzQkFRQkJtczBBQ3dZQ0FBQUFBQUlBUWJITkFBczZBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdCQjhNNEFDNVlCVGs5VlRrTkZSVU5MVDFWVVRrVkRWRVZVUlVOU1NVSkZURlZUU0VWVVJVRkVVMFZCVWtOSVVrZEZRMVJKVmtsVVdVeEZUa1JCVWxaRlQxUkpSbGxRVkVsUFRsTkRTRk5GUVZsVFZFRlVRMGhIUlU5U1JFbFNSVU5VVDFKVVVrTklVRUZTUVUxRlZFVlNWVkpEUlVKVFExSkpRa1ZCVWtSUFYwNUJRMFZKVGtST1MwTkxWVUpUUTFKSlFrVklWRlJRTDBGRVZGQXYnLCAnYmFzZTY0JylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzc3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3R6QUNBQVFSQnEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNEQUNBQS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVRCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVNCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUWQwQk5nSWNDd1lBSUFBUU1ndWFMUUVMZnlNQVFSQnJJZ29rQUVHazBBQW9BZ0FpQ1VVRVFFSGswd0FvQWdBaUJVVUVRRUh3MHdCQ2Z6Y0NBRUhvMHdCQ2dJQ0VnSUNBd0FBM0FnQkI1Tk1BSUFwQkNHcEJjSEZCMktyVnFnVnpJZ1UyQWdCQitOTUFRUUEyQWdCQnlOTUFRUUEyQWdBTFFjelRBRUdBMUFRMkFnQkJuTkFBUVlEVUJEWUNBRUd3MEFBZ0JUWUNBRUdzMEFCQmZ6WUNBRUhRMHdCQmdLd0ROZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCak5RRVFjR3JBellDQUVHbzBBQkI5Tk1BS0FJQU5nSUFRWmpRQUVIQXF3TTJBZ0JCcE5BQVFZalVCRFlDQUVITS93ZEJPRFlDQUVHSTFBUWhDUXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUFRZXdCVFFSQVFZelFBQ2dDQUNJR1FSQWdBRUVUYWtGd2NTQUFRUXRKR3lJRVFRTjJJZ0IySWdGQkEzRUVRQUpBSUFGQkFYRWdBSEpCQVhNaUFrRURkQ0lBUWJUUUFHb2lBU0FBUWJ6UUFHb29BZ0FpQUNnQ0NDSURSZ1JBUVl6UUFDQUdRWDRnQW5keE5nSUFEQUVMSUFFZ0F6WUNDQ0FESUFFMkFnd0xJQUJCQ0dvaEFTQUFJQUpCQTNRaUFrRURjallDQkNBQUlBSnFJZ0FnQUNnQ0JFRUJjallDQkF3UkMwR1UwQUFvQWdBaUNDQUVUdzBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQUVFRGRDSUNRYlRRQUdvaUFTQUNRYnpRQUdvb0FnQWlBaWdDQ0NJRFJnUkFRWXpRQUNBR1FYNGdBSGR4SWdZMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBaUFFUVFOeU5nSUVJQUJCQTNRaUFDQUVheUVGSUFBZ0Ftb2dCVFlDQUNBQ0lBUnFJZ1FnQlVFQmNqWUNCQ0FJQkVBZ0NFRjRjVUcwMEFCcUlRQkJvTkFBS0FJQUlRTUNmMEVCSUFoQkEzWjBJZ0VnQm5GRkJFQkJqTkFBSUFFZ0JuSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBTTJBZ3dnQUNBRE5nSUlJQU1nQURZQ0RDQURJQUUyQWdnTElBSkJDR29oQVVHZzBBQWdCRFlDQUVHVTBBQWdCVFlDQUF3UkMwR1EwQUFvQWdBaUMwVU5BU0FMYUVFQ2RFRzgwZ0JxS0FJQUlnQW9BZ1JCZUhFZ0JHc2hCU0FBSVFJRFFBSkFJQUlvQWhBaUFVVUVRQ0FDUVJScUtBSUFJZ0ZGRFFFTElBRW9BZ1JCZUhFZ0JHc2lBeUFGU1NFQ0lBTWdCU0FDR3lFRklBRWdBQ0FDR3lFQUlBRWhBZ3dCQ3dzZ0FDZ0NHQ0VKSUFBb0Fnd2lBeUFBUndSQVFaelFBQ2dDQUJvZ0F5QUFLQUlJSWdFMkFnZ2dBU0FETmdJTURCQUxJQUJCRkdvaUFpZ0NBQ0lCUlFSQUlBQW9BaEFpQVVVTkF5QUFRUkJxSVFJTEEwQWdBaUVISUFFaUEwRVVhaUlDS0FJQUlnRU5BQ0FEUVJCcUlRSWdBeWdDRUNJQkRRQUxJQWRCQURZQ0FBd1BDMEYvSVFRZ0FFRy9mMHNOQUNBQVFSTnFJZ0ZCY0hFaEJFR1EwQUFvQWdBaUNFVU5BRUVBSUFScklRVUNRQUpBQWtBQ2YwRUFJQVJCZ0FKSkRRQWFRUjhnQkVILy8vOEhTdzBBR2lBRVFTWWdBVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxQ3lJR1FRSjBRYnpTQUdvb0FnQWlBa1VFUUVFQUlRRkJBQ0VEREFFTFFRQWhBU0FFUVJrZ0JrRUJkbXRCQUNBR1FSOUhHM1FoQUVFQUlRTURRQUpBSUFJb0FnUkJlSEVnQkdzaUJ5QUZUdzBBSUFJaEF5QUhJZ1VOQUVFQUlRVWdBaUVCREFNTElBRWdBa0VVYWlnQ0FDSUhJQWNnQWlBQVFSMTJRUVJ4YWtFUWFpZ0NBQ0lDUmhzZ0FTQUhHeUVCSUFCQkFYUWhBQ0FDRFFBTEN5QUJJQU55UlFSQVFRQWhBMEVDSUFaMElnQkJBQ0FBYTNJZ0NIRWlBRVVOQXlBQWFFRUNkRUc4MGdCcUtBSUFJUUVMSUFGRkRRRUxBMEFnQVNnQ0JFRjRjU0FFYXlJQ0lBVkpJUUFnQWlBRklBQWJJUVVnQVNBRElBQWJJUU1nQVNnQ0VDSUFCSDhnQUFVZ0FVRVVhaWdDQUFzaUFRMEFDd3NnQTBVTkFDQUZRWlRRQUNnQ0FDQUVhMDhOQUNBREtBSVlJUWNnQXlBREtBSU1JZ0JIQkVCQm5OQUFLQUlBR2lBQUlBTW9BZ2dpQVRZQ0NDQUJJQUEyQWd3TURnc2dBMEVVYWlJQ0tBSUFJZ0ZGQkVBZ0F5Z0NFQ0lCUlEwRElBTkJFR29oQWdzRFFDQUNJUVlnQVNJQVFSUnFJZ0lvQWdBaUFRMEFJQUJCRUdvaEFpQUFLQUlRSWdFTkFBc2dCa0VBTmdJQURBMExRWlRRQUNnQ0FDSURJQVJQQkVCQm9OQUFLQUlBSVFFQ1FDQURJQVJySWdKQkVFOEVRQ0FCSUFScUlnQWdBa0VCY2pZQ0JDQUJJQU5xSUFJMkFnQWdBU0FFUVFOeU5nSUVEQUVMSUFFZ0EwRURjallDQkNBQklBTnFJZ0FnQUNnQ0JFRUJjallDQkVFQUlRQkJBQ0VDQzBHVTBBQWdBallDQUVHZzBBQWdBRFlDQUNBQlFRaHFJUUVNRHd0Qm1OQUFLQUlBSWdNZ0JFc0VRQ0FFSUFscUlnQWdBeUFFYXlJQlFRRnlOZ0lFUWFUUUFDQUFOZ0lBUVpqUUFDQUJOZ0lBSUFrZ0JFRURjallDQkNBSlFRaHFJUUVNRHd0QkFDRUJJQVFDZjBIazB3QW9BZ0FFUUVIczB3QW9BZ0FNQVF0QjhOTUFRbjgzQWdCQjZOTUFRb0NBaElDQWdNQUFOd0lBUWVUVEFDQUtRUXhxUVhCeFFkaXExYW9GY3pZQ0FFSDQwd0JCQURZQ0FFSEkwd0JCQURZQ0FFR0FnQVFMSWdBZ0JFSEhBR29pQldvaUJrRUFJQUJySWdkeElnSlBCRUJCL05NQVFUQTJBZ0FNRHdzQ1FFSEUwd0FvQWdBaUFVVU5BRUc4MHdBb0FnQWlDQ0FDYWlFQUlBQWdBVTBnQUNBSVMzRU5BRUVBSVFGQi9OTUFRVEEyQWdBTUR3dEJ5Tk1BTFFBQVFRUnhEUVFDUUFKQUlBa0VRRUhNMHdBaEFRTkFJQUVvQWdBaUFDQUpUUVJBSUFBZ0FTZ0NCR29nQ1VzTkF3c2dBU2dDQ0NJQkRRQUxDMEVBRURNaUFFRi9SZzBGSUFJaEJrSG8wd0FvQWdBaUFVRUJheUlESUFCeEJFQWdBaUFBYXlBQUlBTnFRUUFnQVd0eGFpRUdDeUFFSUFaUERRVWdCa0grLy8vL0Iwc05CVUhFMHdBb0FnQWlBd1JBUWJ6VEFDZ0NBQ0lISUFacUlRRWdBU0FIVFEwR0lBRWdBMHNOQmdzZ0JoQXpJZ0VnQUVjTkFRd0hDeUFHSUFOcklBZHhJZ1pCL3YvLy93ZExEUVFnQmhBeklRQWdBQ0FCS0FJQUlBRW9BZ1JxUmcwRElBQWhBUXNDUUNBR0lBUkJ5QUJxVHcwQUlBRkJmMFlOQUVIczB3QW9BZ0FpQUNBRklBWnJha0VBSUFCcmNTSUFRZjcvLy84SFN3UkFJQUVoQUF3SEN5QUFFRE5CZjBjRVFDQUFJQVpxSVFZZ0FTRUFEQWNMUVFBZ0Jtc1FNeG9NQkFzZ0FTSUFRWDlIRFFVTUF3dEJBQ0VEREF3TFFRQWhBQXdLQ3lBQVFYOUhEUUlMUWNqVEFFSEkwd0FvQWdCQkJISTJBZ0FMSUFKQi92Ly8vd2RMRFFFZ0FoQXpJUUJCQUJBeklRRWdBRUYvUmcwQklBRkJmMFlOQVNBQUlBRlBEUUVnQVNBQWF5SUdJQVJCT0dwTkRRRUxRYnpUQUVHODB3QW9BZ0FnQm1vaUFUWUNBRUhBMHdBb0FnQWdBVWtFUUVIQTB3QWdBVFlDQUFzQ1FBSkFBa0JCcE5BQUtBSUFJZ0lFUUVITTB3QWhBUU5BSUFBZ0FTZ0NBQ0lESUFFb0FnUWlCV3BHRFFJZ0FTZ0NDQ0lCRFFBTERBSUxRWnpRQUNnQ0FDSUJRUUJISUFBZ0FVOXhSUVJBUVp6UUFDQUFOZ0lBQzBFQUlRRkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkJyTkFBUVg4MkFnQkJzTkFBUWVUVEFDZ0NBRFlDQUVIWTB3QkJBRFlDQUFOQUlBRkJ5TkFBYWlBQlFielFBR29pQWpZQ0FDQUNJQUZCdE5BQWFpSUROZ0lBSUFGQndOQUFhaUFETmdJQUlBRkIwTkFBYWlBQlFjVFFBR29pQXpZQ0FDQURJQUkyQWdBZ0FVSFkwQUJxSUFGQnpOQUFhaUlDTmdJQUlBSWdBellDQUNBQlFkVFFBR29nQWpZQ0FDQUJRU0JxSWdGQmdBSkhEUUFMUVhnZ0FHdEJEM0VpQVNBQWFpSUNJQVpCT0dzaUF5QUJheUlCUVFGeU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQUkyQWdBZ0FDQURha0U0TmdJRURBSUxJQUFnQWswTkFDQUNJQU5KRFFBZ0FTZ0NERUVJY1EwQVFYZ2dBbXRCRDNFaUFDQUNhaUlEUVpqUUFDZ0NBQ0FHYWlJSElBQnJJZ0JCQVhJMkFnUWdBU0FGSUFacU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUEyQWdCQnBOQUFJQU0yQWdBZ0FpQUhha0U0TmdJRURBRUxJQUJCbk5BQUtBSUFTUVJBUVp6UUFDQUFOZ0lBQ3lBQUlBWnFJUU5Cek5NQUlRRUNRQUpBQWtBRFFDQURJQUVvQWdCSEJFQWdBU2dDQ0NJQkRRRU1BZ3NMSUFFdEFBeEJDSEZGRFFFTFFjelRBQ0VCQTBBZ0FTZ0NBQ0lESUFKTkJFQWdBeUFCS0FJRWFpSUZJQUpMRFFNTElBRW9BZ2doQVF3QUN3QUxJQUVnQURZQ0FDQUJJQUVvQWdRZ0JtbzJBZ1FnQUVGNElBQnJRUTl4YWlJSklBUkJBM0kyQWdRZ0EwRjRJQU5yUVE5eGFpSUdJQVFnQ1dvaUJHc2hBU0FDSUFaR0JFQkJwTkFBSUFRMkFnQkJtTkFBUVpqUUFDZ0NBQ0FCYWlJQU5nSUFJQVFnQUVFQmNqWUNCQXdJQzBHZzBBQW9BZ0FnQmtZRVFFR2cwQUFnQkRZQ0FFR1UwQUJCbE5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVJQUFnQkdvZ0FEWUNBQXdJQ3lBR0tBSUVJZ1ZCQTNGQkFVY05CaUFGUVhoeElRZ2dCVUgvQVUwRVFDQUZRUU4ySVFNZ0JpZ0NDQ0lBSUFZb0Fnd2lBa1lFUUVHTTBBQkJqTkFBS0FJQVFYNGdBM2R4TmdJQURBY0xJQUlnQURZQ0NDQUFJQUkyQWd3TUJnc2dCaWdDR0NFSElBWWdCaWdDRENJQVJ3UkFJQUFnQmlnQ0NDSUNOZ0lJSUFJZ0FEWUNEQXdGQ3lBR1FSUnFJZ0lvQWdBaUJVVUVRQ0FHS0FJUUlnVkZEUVFnQmtFUWFpRUNDd05BSUFJaEF5QUZJZ0JCRkdvaUFpZ0NBQ0lGRFFBZ0FFRVFhaUVDSUFBb0FoQWlCUTBBQ3lBRFFRQTJBZ0FNQkF0QmVDQUFhMEVQY1NJQklBQnFJZ2NnQmtFNGF5SURJQUZySWdGQkFYSTJBZ1FnQUNBRGFrRTROZ0lFSUFJZ0JVRTNJQVZyUVE5eGFrRS9heUlESUFNZ0FrRVFha2tiSWdOQkl6WUNCRUdvMEFCQjlOTUFLQUlBTmdJQVFaalFBQ0FCTmdJQVFhVFFBQ0FITmdJQUlBTkJFR3BCMU5NQUtRSUFOd0lBSUFOQnpOTUFLUUlBTndJSVFkVFRBQ0FEUVFocU5nSUFRZERUQUNBR05nSUFRY3pUQUNBQU5nSUFRZGpUQUVFQU5nSUFJQU5CSkdvaEFRTkFJQUZCQnpZQ0FDQUZJQUZCQkdvaUFVc05BQXNnQWlBRFJnMEFJQU1nQXlnQ0JFRitjVFlDQkNBRElBTWdBbXNpQlRZQ0FDQUNJQVZCQVhJMkFnUWdCVUgvQVUwRVFDQUZRWGh4UWJUUUFHb2hBQUovUVl6UUFDZ0NBQ0lCUVFFZ0JVRURkblFpQTNGRkJFQkJqTkFBSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBSTJBZ3dnQUNBQ05nSUlJQUlnQURZQ0RDQUNJQUUyQWdnTUFRdEJIeUVCSUFWQi8vLy9CMDBFUUNBRlFTWWdCVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFFTElBSWdBVFlDSENBQ1FnQTNBaEFnQVVFQ2RFRzgwZ0JxSVFCQmtOQUFLQUlBSWdOQkFTQUJkQ0lHY1VVRVFDQUFJQUkyQWdCQmtOQUFJQU1nQm5JMkFnQWdBaUFBTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQVFzZ0JVRVpJQUZCQVhaclFRQWdBVUVmUnh0MElRRWdBQ2dDQUNFREFrQURRQ0FESWdBb0FnUkJlSEVnQlVZTkFTQUJRUjEySVFNZ0FVRUJkQ0VCSUFBZ0EwRUVjV3BCRUdvaUJpZ0NBQ0lERFFBTElBWWdBallDQUNBQ0lBQTJBaGdnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFBS0FJSUlnRWdBallDRENBQUlBSTJBZ2dnQWtFQU5nSVlJQUlnQURZQ0RDQUNJQUUyQWdnTFFaalFBQ2dDQUNJQklBUk5EUUJCcE5BQUtBSUFJZ0FnQkdvaUFpQUJJQVJySWdGQkFYSTJBZ1JCbU5BQUlBRTJBZ0JCcE5BQUlBSTJBZ0FnQUNBRVFRTnlOZ0lFSUFCQkNHb2hBUXdJQzBFQUlRRkIvTk1BUVRBMkFnQU1Cd3RCQUNFQUN5QUhSUTBBQWtBZ0JpZ0NIQ0lDUVFKMFFielNBR29pQXlnQ0FDQUdSZ1JBSUFNZ0FEWUNBQ0FBRFFGQmtOQUFRWkRRQUNnQ0FFRitJQUozY1RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFaR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFjMkFoZ2dCaWdDRUNJQ0JFQWdBQ0FDTmdJUUlBSWdBRFlDR0FzZ0JrRVVhaWdDQUNJQ1JRMEFJQUJCRkdvZ0FqWUNBQ0FDSUFBMkFoZ0xJQUVnQ0dvaEFTQUdJQWhxSWdZb0FnUWhCUXNnQmlBRlFYNXhOZ0lFSUFFZ0JHb2dBVFlDQUNBRUlBRkJBWEkyQWdRZ0FVSC9BVTBFUUNBQlFYaHhRYlRRQUdvaEFBSi9RWXpRQUNnQ0FDSUNRUUVnQVVFRGRuUWlBWEZGQkVCQmpOQUFJQUVnQW5JMkFnQWdBQXdCQ3lBQUtBSUlDeUlCSUFRMkFnd2dBQ0FFTmdJSUlBUWdBRFlDRENBRUlBRTJBZ2dNQVF0Qkh5RUZJQUZCLy8vL0IwMEVRQ0FCUVNZZ0FVRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUVVMSUFRZ0JUWUNIQ0FFUWdBM0FoQWdCVUVDZEVHODBnQnFJUUJCa05BQUtBSUFJZ0pCQVNBRmRDSURjVVVFUUNBQUlBUTJBZ0JCa05BQUlBSWdBM0kyQWdBZ0JDQUFOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01BUXNnQVVFWklBVkJBWFpyUVFBZ0JVRWZSeHQwSVFVZ0FDZ0NBQ0VBQWtBRFFDQUFJZ0lvQWdSQmVIRWdBVVlOQVNBRlFSMTJJUUFnQlVFQmRDRUZJQUlnQUVFRWNXcEJFR29pQXlnQ0FDSUFEUUFMSUFNZ0JEWUNBQ0FFSUFJMkFoZ2dCQ0FFTmdJTUlBUWdCRFlDQ0F3QkN5QUNLQUlJSWdBZ0JEWUNEQ0FDSUFRMkFnZ2dCRUVBTmdJWUlBUWdBallDRENBRUlBQTJBZ2dMSUFsQkNHb2hBUXdDQ3dKQUlBZEZEUUFDUUNBREtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBTkdCRUFnQWlBQU5nSUFJQUFOQVVHUTBBQWdDRUYrSUFGM2NTSUlOZ0lBREFJTElBZEJFRUVVSUFjb0FoQWdBMFliYWlBQU5nSUFJQUJGRFFFTElBQWdCellDR0NBREtBSVFJZ0VFUUNBQUlBRTJBaEFnQVNBQU5nSVlDeUFEUVJScUtBSUFJZ0ZGRFFBZ0FFRVVhaUFCTmdJQUlBRWdBRFlDR0FzQ1FDQUZRUTlOQkVBZ0F5QUVJQVZxSWdCQkEzSTJBZ1FnQUNBRGFpSUFJQUFvQWdSQkFYSTJBZ1FNQVFzZ0F5QUVhaUlDSUFWQkFYSTJBZ1FnQXlBRVFRTnlOZ0lFSUFJZ0JXb2dCVFlDQUNBRlFmOEJUUVJBSUFWQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnRkJBU0FGUVFOMmRDSUZjVVVFUUVHTTBBQWdBU0FGY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQWpZQ0RDQUFJQUkyQWdnZ0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRRWdCVUgvLy84SFRRUkFJQVZCSmlBRlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBUXNnQWlBQk5nSWNJQUpDQURjQ0VDQUJRUUowUWJ6U0FHb2hBRUVCSUFGMElnUWdDSEZGQkVBZ0FDQUNOZ0lBUVpEUUFDQUVJQWh5TmdJQUlBSWdBRFlDR0NBQ0lBSTJBZ2dnQWlBQ05nSU1EQUVMSUFWQkdTQUJRUUYyYTBFQUlBRkJIMGNiZENFQklBQW9BZ0FoQkFKQUEwQWdCQ0lBS0FJRVFYaHhJQVZHRFFFZ0FVRWRkaUVFSUFGQkFYUWhBU0FBSUFSQkJIRnFRUkJxSWdZb0FnQWlCQTBBQ3lBR0lBSTJBZ0FnQWlBQU5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFRc2dBQ2dDQ0NJQklBSTJBZ3dnQUNBQ05nSUlJQUpCQURZQ0dDQUNJQUEyQWd3Z0FpQUJOZ0lJQ3lBRFFRaHFJUUVNQVFzQ1FDQUpSUTBBQWtBZ0FDZ0NIQ0lCUVFKMFFielNBR29pQWlnQ0FDQUFSZ1JBSUFJZ0F6WUNBQ0FERFFGQmtOQUFJQXRCZmlBQmQzRTJBZ0FNQWdzZ0NVRVFRUlFnQ1NnQ0VDQUFSaHRxSUFNMkFnQWdBMFVOQVFzZ0F5QUpOZ0lZSUFBb0FoQWlBUVJBSUFNZ0FUWUNFQ0FCSUFNMkFoZ0xJQUJCRkdvb0FnQWlBVVVOQUNBRFFSUnFJQUUyQWdBZ0FTQUROZ0lZQ3dKQUlBVkJEMDBFUUNBQUlBUWdCV29pQVVFRGNqWUNCQ0FBSUFGcUlnRWdBU2dDQkVFQmNqWUNCQXdCQ3lBQUlBUnFJZ2NnQlVFQmNqWUNCQ0FBSUFSQkEzSTJBZ1FnQlNBSGFpQUZOZ0lBSUFnRVFDQUlRWGh4UWJUUUFHb2hBVUdnMEFBb0FnQWhBd0ovUVFFZ0NFRURkblFpQWlBR2NVVUVRRUdNMEFBZ0FpQUdjallDQUNBQkRBRUxJQUVvQWdnTElnSWdBellDRENBQklBTTJBZ2dnQXlBQk5nSU1JQU1nQWpZQ0NBdEJvTkFBSUFjMkFnQkJsTkFBSUFVMkFnQUxJQUJCQ0dvaEFRc2dDa0VRYWlRQUlBRUxRd0FnQUVVRVFEOEFRUkIwRHdzQ1FDQUFRZi8vQTNFTkFDQUFRUUJJRFFBZ0FFRVFka0FBSWdCQmYwWUVRRUg4MHdCQk1EWUNBRUYvRHdzZ0FFRVFkQThMQUFzTDNEOGlBRUdBQ0FzSkFRQUFBQUlBQUFBREFFR1VDQXNGQkFBQUFBVUFRYVFJQ3drR0FBQUFCd0FBQUFnQVFkd0lDNG90U1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCeGRXVnllUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMkp2WkhrQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnYjNabGNtWnNiM2NBUTJoMWJtc2djMmw2WlNCdmRtVnlabXh2ZHdCU1pYTndiMjV6WlNCdmRtVnlabXh2ZHdCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1NGUlVVQzk0TG5nZ2NtVnhkV1Z6ZEFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1VsUlRVQzk0TG5nZ2NtVnhkV1Z6ZEFCRmVIQmxZM1JsWkNCVFQxVlNRMFVnYldWMGFHOWtJR1p2Y2lCSlEwVXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCbWNtRm5iV1Z1ZENCemRHRnlkQUJGZUhCbFkzUmxaQ0JrYjNRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5emRHRjBkWE1BU1c1MllXeHBaQ0J5WlhOd2IyNXpaU0J6ZEdGMGRYTUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjd0JWYzJWeUlHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXlaWE5sZEdBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJobFlXUmxjbUFnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGMzTmhaMlZmWW1WbmFXNWdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkWEpzWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBRlZ1Wlhod1pXTjBaV1FnWTJoaGNpQnBiaUIxY213Z2MyVnlkbVZ5QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFpoYkhWbElHTm9ZWElBU1c1MllXeHBaQ0JvWldGa1pYSWdabWxsYkdRZ1kyaGhjZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1psY25OcGIyNEFTVzUyWVd4cFpDQnRhVzV2Y2lCMlpYSnphVzl1QUVsdWRtRnNhV1FnYldGcWIzSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUIyWlhKemFXOXVBRVY0Y0dWamRHVmtJRU5TVEVZZ1lXWjBaWElnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRWhVVkZBZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUdobFlXUmxjaUIwYjJ0bGJnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzVnliQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjbk1nYVc0Z2RYSnNBRlZ1Wlhod1pXTjBaV1FnYzNSaGNuUWdZMmhoY2lCcGJpQjFjbXdBUkc5MVlteGxJRUFnYVc0Z2RYSnNBRVZ0Y0hSNUlFTnZiblJsYm5RdFRHVnVaM1JvQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlFTnZiblJsYm5RdFRHVnVaM1JvQUVSMWNHeHBZMkYwWlNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhCaGRHZ0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ1kyRnVKM1FnWW1VZ2NISmxjMlZ1ZENCM2FYUm9JRlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJSE5wZW1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCMllXeDFaUUJOYVhOemFXNW5JR1Y0Y0dWamRHVmtJRXhHSUdGbWRHVnlJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBZ2FHVmhaR1Z5SUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVWdkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QnhkVzkwWldRZ2RtRnNkV1VBVUdGMWMyVmtJR0o1SUc5dVgyaGxZV1JsY25OZlkyOXRjR3hsZEdVQVNXNTJZV3hwWkNCRlQwWWdjM1JoZEdVQWIyNWZjbVZ6WlhRZ2NHRjFjMlVBYjI1ZlkyaDFibXRmYUdWaFpHVnlJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZbVZuYVc0Z2NHRjFjMlVBYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxJSEJoZFhObEFHOXVYM04wWVhSMWMxOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzVnliRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbElIQmhkWE5sQUZWdVpYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdjM1JoY25RZ2JHbHVaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2JtRnRaUUJRWVhWelpTQnZiaUJEVDA1T1JVTlVMMVZ3WjNKaFpHVUFVR0YxYzJVZ2IyNGdVRkpKTDFWd1ozSmhaR1VBUlhod1pXTjBaV1FnU0ZSVVVDOHlJRU52Ym01bFkzUnBiMjRnVUhKbFptRmpaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMjFsZEdodlpBQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUJ0WlhSb2IyUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZlptbGxiR1FBVUdGMWMyVmtBRWx1ZG1Gc2FXUWdkMjl5WkNCbGJtTnZkVzUwWlhKbFpBQkpiblpoYkdsa0lHMWxkR2h2WkNCbGJtTnZkVzUwWlhKbFpBQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhOamFHVnRZUUJTWlhGMVpYTjBJR2hoY3lCcGJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBQVUxZEpWRU5JWDFCU1QxaFpBRlZUUlY5UVVrOVlXUUJOUzBGRFZFbFdTVlJaQUZWT1VGSlBRMFZUVTBGQ1RFVmZSVTVVU1ZSWkFFTlBVRmtBVFU5V1JVUmZVRVZTVFVGT1JVNVVURmtBVkU5UFgwVkJVa3haQUU1UFZFbEdXUUJHUVVsTVJVUmZSRVZRUlU1RVJVNURXUUJDUVVSZlIwRlVSVmRCV1FCUVRFRlpBRkJWVkFCRFNFVkRTMDlWVkFCSFFWUkZWMEZaWDFSSlRVVlBWVlFBVWtWUlZVVlRWRjlVU1UxRlQxVlVBRTVGVkZkUFVrdGZRMDlPVGtWRFZGOVVTVTFGVDFWVUFFTlBUazVGUTFSSlQwNWZWRWxOUlU5VlZBQk1UMGRKVGw5VVNVMUZUMVZVQUU1RlZGZFBVa3RmVWtWQlJGOVVTVTFGVDFWVUFGQlBVMVFBVFVsVFJFbFNSVU5VUlVSZlVrVlJWVVZUVkFCRFRFbEZUbFJmUTB4UFUwVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5TVQwRkVYMEpCVEVGT1EwVkVYMUpGVVZWRlUxUUFRa0ZFWDFKRlVWVkZVMVFBU0ZSVVVGOVNSVkZWUlZOVVgxTkZUbFJmVkU5ZlNGUlVVRk5mVUU5U1ZBQlNSVkJQVWxRQVNVMWZRVjlVUlVGUVQxUUFVa1ZUUlZSZlEwOU9WRVZPVkFCT1QxOURUMDVVUlU1VUFGQkJVbFJKUVV4ZlEwOU9WRVZPVkFCSVVFVmZTVTVXUVV4SlJGOURUMDVUVkVGT1ZBQklVRVZmUTBKZlVrVlRSVlFBUjBWVUFFaFFSVjlUVkZKSlExUUFRMDlPUmt4SlExUUFWRVZOVUU5U1FWSlpYMUpGUkVsU1JVTlVBRkJGVWsxQlRrVk9WRjlTUlVSSlVrVkRWQUJEVDA1T1JVTlVBRTFWVEZSSlgxTlVRVlJWVXdCSVVFVmZTVTVXUVV4SlJGOVRWRUZVVlZNQVZFOVBYMDFCVGxsZlVrVlJWVVZUVkZNQVJVRlNURmxmU0VsT1ZGTUFWVTVCVmtGSlRFRkNURVZmUms5U1gweEZSMEZNWDFKRlFWTlBUbE1BVDFCVVNVOU9Vd0JUVjBsVVEwaEpUa2RmVUZKUFZFOURUMHhUQUZaQlVrbEJUbFJmUVV4VFQxOU9SVWRQVkVsQlZFVlRBRTFWVEZSSlVFeEZYME5JVDBsRFJWTUFTVTVVUlZKT1FVeGZVMFZTVmtWU1gwVlNVazlTQUZkRlFsOVRSVkpXUlZKZlZVNUxUazlYVGw5RlVsSlBVZ0JTUVVsTVIxVk9YMFZTVWs5U0FFbEVSVTVVU1ZSWlgxQlNUMVpKUkVWU1gwRlZWRWhGVGxSSlEwRlVTVTlPWDBWU1VrOVNBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOUZVbEpQVWdCSlRsWkJURWxFWDFoZlJrOVNWMEZTUkVWRVgwWlBVZ0JUUlZSZlVFRlNRVTFGVkVWU0FFZEZWRjlRUVZKQlRVVlVSVklBU0ZCRlgxVlRSVklBVTBWRlgwOVVTRVZTQUVoUVJWOURRbDlEU0ZWT1MxOUlSVUZFUlZJQVRVdERRVXhGVGtSQlVnQlRSVlJWVUFCWFJVSmZVMFZTVmtWU1gwbFRYMFJQVjA0QVZFVkJVa1JQVjA0QVNGQkZYME5NVDFORlJGOURUMDVPUlVOVVNVOU9BRWhGVlZKSlUxUkpRMTlGV0ZCSlVrRlVTVTlPQUVSSlUwTlBUazVGUTFSRlJGOVBVRVZTUVZSSlQwNEFUazlPWDBGVlZFaFBVa2xVUVZSSlZrVmZTVTVHVDFKTlFWUkpUMDRBU0ZCRlgwbE9Wa0ZNU1VSZlZrVlNVMGxQVGdCSVVFVmZRMEpmVFVWVFUwRkhSVjlDUlVkSlRnQlRTVlJGWDBsVFgwWlNUMXBGVGdCSVVFVmZTVTVXUVV4SlJGOUlSVUZFUlZKZlZFOUxSVTRBU1U1V1FVeEpSRjlVVDB0RlRnQkdUMUpDU1VSRVJVNEFSVTVJUVU1RFJWOVpUMVZTWDBOQlRFMEFTRkJGWDBsT1ZrRk1TVVJmVlZKTUFFSk1UME5MUlVSZlFsbGZVRUZTUlU1VVFVeGZRMDlPVkZKUFRBQk5TME5QVEFCQlEwd0FTRkJGWDBsT1ZFVlNUa0ZNQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVmZWVTVQUmtaSlEwbEJUQUJJVUVWZlQwc0FWVTVNU1U1TEFGVk9URTlEU3dCUVVra0FVa1ZVVWxsZlYwbFVTQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJJVUVWZlZVNUZXRkJGUTFSRlJGOURUMDVVUlU1VVgweEZUa2RVU0FCR1RGVlRTQUJRVWs5UVVFRlVRMGdBVFMxVFJVRlNRMGdBVlZKSlgxUlBUMTlNVDA1SEFGQlNUME5GVTFOSlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5UVJWSlRTVk5VUlU1VVgxZEJVazVKVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlYUVZKT1NVNUhBRWhRUlY5SlRsWkJURWxFWDFSU1FVNVRSa1ZTWDBWT1EwOUVTVTVIQUVWNGNHVmpkR1ZrSUVOU1RFWUFTRkJGWDBsT1ZrRk1TVVJmUTBoVlRrdGZVMGxhUlFCTlQxWkZBRU5QVGxSSlRsVkZBRWhRUlY5RFFsOVRWRUZVVlZOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbE5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVpGVWxOSlQwNWZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxVlNURjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDFaQlRGVkZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RldGUkZUbE5KVDA1ZlRrRk5SVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZUVTBGSFJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlVTRTlFWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZSa2xGVEVSZlEwOU5VRXhGVkVVQVJFVk1SVlJGQUVoUVJWOUpUbFpCVEVsRVgwVlBSbDlUVkVGVVJRQkpUbFpCVEVsRVgxTlRURjlEUlZKVVNVWkpRMEZVUlFCUVFWVlRSUUJPVDE5U1JWTlFUMDVUUlFCVlRsTlZVRkJQVWxSRlJGOU5SVVJKUVY5VVdWQkZBRWRQVGtVQVRrOVVYMEZEUTBWUVZFRkNURVVBVTBWU1ZrbERSVjlWVGtGV1FVbE1RVUpNUlFCU1FVNUhSVjlPVDFSZlUwRlVTVk5HU1VGQ1RFVUFUMUpKUjBsT1gwbFRYMVZPVWtWQlEwaEJRa3hGQUZKRlUxQlBUbE5GWDBsVFgxTlVRVXhGQUZCVlVrZEZBRTFGVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFVBVWtWUlZVVlRWRjlJUlVGRVJWSmZWRTlQWDB4QlVrZEZBRkJCV1V4UFFVUmZWRTlQWDB4QlVrZEZBRWxPVTFWR1JrbERTVVZPVkY5VFZFOVNRVWRGQUVoUVJWOVFRVlZUUlVSZlZWQkhVa0ZFUlFCSVVFVmZVRUZWVTBWRVgwZ3lYMVZRUjFKQlJFVUFVMDlWVWtORkFFRk9UazlWVGtORkFGUlNRVU5GQUVoUVJWOVZUa1ZZVUVWRFZFVkVYMU5RUVVORkFFUkZVME5TU1VKRkFGVk9VMVZDVTBOU1NVSkZBRkpGUTA5U1JBQklVRVZmU1U1V1FVeEpSRjlOUlZSSVQwUUFUazlVWDBaUFZVNUVBRkJTVDFCR1NVNUVBRlZPUWtsT1JBQlNSVUpKVGtRQVZVNUJWVlJJVDFKSldrVkVBRTFGVkVoUFJGOU9UMVJmUVV4TVQxZEZSQUJJVkZSUVgxWkZVbE5KVDA1ZlRrOVVYMU5WVUZCUFVsUkZSQUJCVEZKRlFVUlpYMUpGVUU5U1ZFVkVBRUZEUTBWUVZFVkVBRTVQVkY5SlRWQk1SVTFGVGxSRlJBQk1UMDlRWDBSRlZFVkRWRVZFQUVoUVJWOURVbDlGV0ZCRlExUkZSQUJJVUVWZlRFWmZSVmhRUlVOVVJVUUFRMUpGUVZSRlJBQkpUVjlWVTBWRUFFaFFSVjlRUVZWVFJVUUFWRWxOUlU5VlZGOVBRME5WVWtWRUFGQkJXVTFGVGxSZlVrVlJWVWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMUpGVVZWSlVrVkVBRkJTVDFoWlgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUU1RlZGZFBVa3RmUVZWVVNFVk9WRWxEUVZSSlQwNWZVa1ZSVlVsU1JVUUFURVZPUjFSSVgxSkZVVlZKVWtWRUFGTlRURjlEUlZKVVNVWkpRMEZVUlY5U1JWRlZTVkpGUkFCVlVFZFNRVVJGWDFKRlVWVkpVa1ZFQUZCQlIwVmZSVmhRU1ZKRlJBQlFVa1ZEVDA1RVNWUkpUMDVmUmtGSlRFVkVBRVZZVUVWRFZFRlVTVTlPWDBaQlNVeEZSQUJTUlZaQlRFbEVRVlJKVDA1ZlJrRkpURVZFQUZOVFRGOUlRVTVFVTBoQlMwVmZSa0ZKVEVWRUFFeFBRMHRGUkFCVVVrRk9VMFpQVWsxQlZFbFBUbDlCVUZCTVNVVkVBRTVQVkY5TlQwUkpSa2xGUkFCT1QxUmZSVmhVUlU1RVJVUUFRa0ZPUkZkSlJGUklYMHhKVFVsVVgwVllRMFZGUkVWRUFGTkpWRVZmU1ZOZlQxWkZVa3hQUVVSRlJBQklSVUZFQUVWNGNHVmpkR1ZrSUVoVVZGQXZBQUJlRXdBQUpoTUFBREFRQUFEd0Z3QUFuUk1BQUJVU0FBQTVGd0FBOEJJQUFBb1FBQUIxRWdBQXJSSUFBSUlUQUFCUEZBQUFmeEFBQUtBVkFBQWpGQUFBaVJJQUFJc1VBQUJORlFBQTFCRUFBTThVQUFBUUdBQUF5UllBQU53V0FBREJFUUFBNEJjQUFMc1VBQUIwRkFBQWZCVUFBT1VVQUFBSUZ3QUFIeEFBQUdVVkFBQ2pGQUFBS0JVQUFBSVZBQUNaRlFBQUxCQUFBSXNaQUFCUER3QUExQTRBQUdvUUFBRE9FQUFBQWhjQUFJa09BQUJ1RXdBQUhCTUFBR1lVQUFCV0Z3QUF3Uk1BQU0wVEFBQnNFd0FBYUJjQUFHWVhBQUJmRndBQUloTUFBTTRQQUFCcERnQUEyQTRBQUdNV0FBRExFd0FBcWc0QUFDZ1hBQUFtRndBQXhSTUFBRjBXQUFEb0VRQUFaeE1BQUdVVEFBRHlGZ0FBY3hNQUFCMFhBQUQ1RmdBQTh4RUFBTThPQUFET0ZRQUFEQklBQUxNUkFBQ2xFUUFBWVJBQUFESVhBQUM3RXdCQitUVUxBUUVBUVpBMkMrQUJBUUVDQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFRZjAzQ3dFQkFFR1JPQXRlQWdNQ0FnSUNBZ0FBQWdJQUFnSUFBZ0lDQWdJQ0FnSUNBZ0FFQUFBQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFJQUFnQkIvVGtMQVFFQVFaRTZDMTRDQUFJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQU1BQkFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSHdPd3NOYkc5elpXVmxjQzFoYkdsMlpRQkJpVHdMQVFFQVFhQThDK0FCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUVlrK0N3RUJBRUdnUGd2bkFRRUJBUUVCQVFFQkFRRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQlkyaDFibXRsWkFCQnNNQUFDMThCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQkJrTUlBQ3lGbFkzUnBiMjVsYm5RdGJHVnVaM1JvYjI1eWIzaDVMV052Ym01bFkzUnBiMjRBUWNEQ0FBc3RjbUZ1YzJabGNpMWxibU52WkdsdVozQm5jbUZrWlEwS0RRb05DbE5ORFFvTkNsUlVVQzlEUlM5VVUxQXZBRUg1d2dBTEJRRUNBQUVEQUVHUXd3QUw0QUVFQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NRQUN3VUJBZ0FCQXdCQmtNVUFDK0FCQkFFQkJRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUWZuR0FBc0VBUUFBQVFCQmtjY0FDOThCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK3NnQUN3UUJBQUFDQUVHUXlRQUxYd01FQUFBRUJBUUVCQVFFQkFRRUJBVUVCQVFFQkFRRUJBUUVCQVFBQkFBR0J3UUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUFFSDZ5Z0FMQkFFQUFBRUFRWkRMQUFzQkFRQkJxc3NBQzBFQ0FBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QkIrc3dBQ3dRQkFBQUJBRUdRelFBTEFRRUFRWnJOQUFzR0FnQUFBQUFDQUVHeHpRQUxPZ01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQVFmRE9BQXVXQVU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09JywgJ2Jhc2U2NCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ0dFVCcsICdIRUFEJywgJ1BPU1QnXSlcbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCA9IG5ldyBTZXQoY29yc1NhZmVMaXN0ZWRNZXRob2RzKVxuXG5jb25zdCBudWxsQm9keVN0YXR1cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbMTAxLCAyMDQsIDIwNSwgMzA0XSlcblxuY29uc3QgcmVkaXJlY3RTdGF0dXMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XSlcbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNibG9jay1iYWQtcG9ydFxuICovXG5jb25zdCBiYWRQb3J0cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcxJywgJzcnLCAnOScsICcxMScsICcxMycsICcxNScsICcxNycsICcxOScsICcyMCcsICcyMScsICcyMicsICcyMycsICcyNScsICczNycsICc0MicsICc0MycsICc1MycsICc2OScsICc3NycsICc3OScsXG4gICc4NycsICc5NScsICcxMDEnLCAnMTAyJywgJzEwMycsICcxMDQnLCAnMTA5JywgJzExMCcsICcxMTEnLCAnMTEzJywgJzExNScsICcxMTcnLCAnMTE5JywgJzEyMycsICcxMzUnLCAnMTM3JyxcbiAgJzEzOScsICcxNDMnLCAnMTYxJywgJzE3OScsICczODknLCAnNDI3JywgJzQ2NScsICc1MTInLCAnNTEzJywgJzUxNCcsICc1MTUnLCAnNTI2JywgJzUzMCcsICc1MzEnLCAnNTMyJyxcbiAgJzU0MCcsICc1NDgnLCAnNTU0JywgJzU1NicsICc1NjMnLCAnNTg3JywgJzYwMScsICc2MzYnLCAnOTg5JywgJzk5MCcsICc5OTMnLCAnOTk1JywgJzE3MTknLCAnMTcyMCcsICcxNzIzJyxcbiAgJzIwNDknLCAnMzY1OScsICc0MDQ1JywgJzQxOTAnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY3OScsXG4gICc2Njk3JywgJzEwMDgwJ1xuXSlcbmNvbnN0IGJhZFBvcnRzU2V0ID0gbmV3IFNldChiYWRQb3J0cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY2llc1xuICovXG5jb25zdCByZWZlcnJlclBvbGljeSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcnLFxuICAnbm8tcmVmZXJyZXInLFxuICAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnLFxuICAnc2FtZS1vcmlnaW4nLFxuICAnb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4nLFxuICAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAndW5zYWZlLXVybCdcbl0pXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ2ZvbGxvdycsICdtYW51YWwnLCAnZXJyb3InXSlcblxuY29uc3Qgc2FmZU1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10pXG5jb25zdCBzYWZlTWV0aG9kc1NldCA9IG5ldyBTZXQoc2FmZU1ldGhvZHMpXG5cbmNvbnN0IHJlcXVlc3RNb2RlID0gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFsnbmF2aWdhdGUnLCAnc2FtZS1vcmlnaW4nLCAnbm8tY29ycycsICdjb3JzJ10pXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ29taXQnLCAnc2FtZS1vcmlnaW4nLCAnaW5jbHVkZSddKVxuXG5jb25zdCByZXF1ZXN0Q2FjaGUgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtYm9keS1oZWFkZXItbmFtZVxuICovXG5jb25zdCByZXF1ZXN0Qm9keUhlYWRlciA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LXR5cGUnLFxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMjFcbiAgLy8gJ0NvbnRlbnQtTGVuZ3RoJyBpcyBhIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgd2hpY2ggaXMgdHlwaWNhbGx5XG4gIC8vIHJlbW92ZWQgaW4gdGhlIEhlYWRlcnMgaW1wbGVtZW50YXRpb24uIEhvd2V2ZXIsIHVuZGljaSBkb2Vzbid0XG4gIC8vIGZpbHRlciBvdXQgaGVhZGVycywgc28gd2UgYWRkIGl0IGhlcmUuXG4gICdjb250ZW50LWxlbmd0aCdcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZW51bWRlZi1yZXF1ZXN0ZHVwbGV4XG4gKi9cbmNvbnN0IHJlcXVlc3REdXBsZXggPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnaGFsZidcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG4gKi9cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ10pXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzU2V0ID0gbmV3IFNldChmb3JiaWRkZW5NZXRob2RzKVxuXG5jb25zdCBzdWJyZXNvdXJjZSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdhdWRpbycsXG4gICdhdWRpb3dvcmtsZXQnLFxuICAnZm9udCcsXG4gICdpbWFnZScsXG4gICdtYW5pZmVzdCcsXG4gICdwYWludHdvcmtsZXQnLFxuICAnc2NyaXB0JyxcbiAgJ3N0eWxlJyxcbiAgJ3RyYWNrJyxcbiAgJ3ZpZGVvJyxcbiAgJ3hzbHQnLFxuICAnJ1xuXSlcbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN1YnJlc291cmNlLFxuICBmb3JiaWRkZW5NZXRob2RzLFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZWRpcmVjdFN0YXR1cyxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzLFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHMsXG4gIGJhZFBvcnRzLFxuICByZXF1ZXN0RHVwbGV4LFxuICBzdWJyZXNvdXJjZVNldCxcbiAgYmFkUG9ydHNTZXQsXG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHNhZmVNZXRob2RzU2V0LFxuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeVNldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsIGluY3JlYXNlIHRoZSB2ZXJzaW9uXG4vLyBudW1iZXIgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsT3JpZ2luID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbE9yaWdpbi4xJylcblxuZnVuY3Rpb24gZ2V0R2xvYmFsT3JpZ2luICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsT3JpZ2luXVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxPcmlnaW4gKG5ld09yaWdpbikge1xuICBpZiAobmV3T3JpZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG5ld09yaWdpbilcblxuICBpZiAocGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cDonICYmIHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IGh0dHAgJiBodHRwcyB1cmxzIGFyZSBhbGxvd2VkLCByZWNlaXZlZCAke3BhcnNlZFVSTC5wcm90b2NvbH1gKVxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgIHZhbHVlOiBwYXJzZWRVUkwsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0R2xvYmFsT3JpZ2luLFxuICBzZXRHbG9iYWxPcmlnaW5cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorXFwtLl5ffH5BLVphLXowLTldKyQvXG5jb25zdCBIVFRQX1dISVRFU1BBQ0VfUkVHRVggPSAvW1xcdTAwMEFcXHUwMDBEXFx1MDAwOVxcdTAwMjBdLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5jb25zdCBBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVggPSAvW1xcdTAwMDlcXHUwMDBBXFx1MDAwQ1xcdTAwMERcXHUwMDIwXS9nIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcXVvdGVkLXN0cmluZy10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdFXFx1MDA4MC1cXHUwMEZGXSskLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1wcm9jZXNzb3Jcbi8qKiBAcGFyYW0ge1VSTH0gZGF0YVVSTCAqL1xuZnVuY3Rpb24gZGF0YVVSTFByb2Nlc3NvciAoZGF0YVVSTCkge1xuICAvLyAxLiBBc3NlcnQ6IGRhdGFVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIi5cbiAgYXNzZXJ0KGRhdGFVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpXG5cbiAgLy8gMi4gTGV0IGlucHV0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgVVJMXG4gIC8vIHNlcmlhbGl6ZXIgb24gZGF0YVVSTCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnRcbiAgLy8gc2V0IHRvIHRydWUuXG4gIGxldCBpbnB1dCA9IFVSTFNlcmlhbGl6ZXIoZGF0YVVSTCwgdHJ1ZSlcblxuICAvLyAzLiBSZW1vdmUgdGhlIGxlYWRpbmcgXCJkYXRhOlwiIHN0cmluZyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IGlucHV0LnNsaWNlKDUpXG5cbiAgLy8gNC4gTGV0IHBvc2l0aW9uIHBvaW50IGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyA1LiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IGVxdWFsXG4gIC8vIHRvIFUrMDAyQyAoLCksIGdpdmVuIHBvc2l0aW9uLlxuICBsZXQgbWltZVR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLCcsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDYuIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBtaW1lVHlwZS5cbiAgLy8gVW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHdlIG5lZWQgdG8gc3RvcmUgdGhlXG4gIC8vIGxlbmd0aCBiZWNhdXNlIGlmIHRoZSBtaW1ldHlwZSBoYXMgc3BhY2VzIHJlbW92ZWQsXG4gIC8vIHRoZSB3cm9uZyBhbW91bnQgd2lsbCBiZSBzbGljZWQgZnJvbSB0aGUgaW5wdXQgaW5cbiAgLy8gc3RlcCAjOVxuICBjb25zdCBtaW1lVHlwZUxlbmd0aCA9IG1pbWVUeXBlLmxlbmd0aFxuICBtaW1lVHlwZSA9IHJlbW92ZUFTQ0lJV2hpdGVzcGFjZShtaW1lVHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyA3LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW5cbiAgLy8gcmV0dXJuIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDkuIExldCBlbmNvZGVkQm9keSBiZSB0aGUgcmVtYWluZGVyIG9mIGlucHV0LlxuICBjb25zdCBlbmNvZGVkQm9keSA9IGlucHV0LnNsaWNlKG1pbWVUeXBlTGVuZ3RoICsgMSlcblxuICAvLyAxMC4gTGV0IGJvZHkgYmUgdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgZW5jb2RlZEJvZHkuXG4gIGxldCBib2R5ID0gc3RyaW5nUGVyY2VudERlY29kZShlbmNvZGVkQm9keSlcblxuICAvLyAxMS4gSWYgbWltZVR5cGUgZW5kcyB3aXRoIFUrMDAzQiAoOyksIGZvbGxvd2VkIGJ5XG4gIC8vIHplcm8gb3IgbW9yZSBVKzAwMjAgU1BBQ0UsIGZvbGxvd2VkIGJ5IGFuIEFTQ0lJXG4gIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIFwiYmFzZTY0XCIsIHRoZW46XG4gIGlmICgvOyhcXHUwMDIwKXswLH1iYXNlNjQkL2kudGVzdChtaW1lVHlwZSkpIHtcbiAgICAvLyAxLiBMZXQgc3RyaW5nQm9keSBiZSB0aGUgaXNvbW9ycGhpYyBkZWNvZGUgb2YgYm9keS5cbiAgICBjb25zdCBzdHJpbmdCb2R5ID0gaXNvbW9ycGhpY0RlY29kZShib2R5KVxuXG4gICAgLy8gMi4gU2V0IGJvZHkgdG8gdGhlIGZvcmdpdmluZy1iYXNlNjQgZGVjb2RlIG9mXG4gICAgLy8gc3RyaW5nQm9keS5cbiAgICBib2R5ID0gZm9yZ2l2aW5nQmFzZTY0KHN0cmluZ0JvZHkpXG5cbiAgICAvLyAzLiBJZiBib2R5IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGJvZHkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDQuIFJlbW92ZSB0aGUgbGFzdCA2IGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtNilcblxuICAgIC8vIDUuIFJlbW92ZSB0cmFpbGluZyBVKzAwMjAgU1BBQ0UgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZSxcbiAgICAvLyBpZiBhbnkuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5yZXBsYWNlKC8oXFx1MDAyMCkrJC8sICcnKVxuXG4gICAgLy8gNi4gUmVtb3ZlIHRoZSBsYXN0IFUrMDAzQiAoOykgY29kZSBwb2ludCBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTEpXG4gIH1cblxuICAvLyAxMi4gSWYgbWltZVR5cGUgc3RhcnRzIHdpdGggVSswMDNCICg7KSwgdGhlbiBwcmVwZW5kXG4gIC8vIFwidGV4dC9wbGFpblwiIHRvIG1pbWVUeXBlLlxuICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgnOycpKSB7XG4gICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbicgKyBtaW1lVHlwZVxuICB9XG5cbiAgLy8gMTMuIExldCBtaW1lVHlwZVJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgLy8gbWltZVR5cGUuXG4gIGxldCBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgLy8gMTQuIElmIG1pbWVUeXBlUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gc2V0XG4gIC8vIG1pbWVUeXBlUmVjb3JkIHRvIHRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSS5cbiAgaWYgKG1pbWVUeXBlUmVjb3JkID09PSAnZmFpbHVyZScpIHtcbiAgICBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUoJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScpXG4gIH1cblxuICAvLyAxNS4gUmV0dXJuIGEgbmV3IGRhdGE6IFVSTCBzdHJ1Y3Qgd2hvc2UgTUlNRVxuICAvLyB0eXBlIGlzIG1pbWVUeXBlUmVjb3JkIGFuZCBib2R5IGlzIGJvZHkuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1zdHJ1Y3RcbiAgcmV0dXJuIHsgbWltZVR5cGU6IG1pbWVUeXBlUmVjb3JkLCBib2R5IH1cbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4vKipcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIFVSTFNlcmlhbGl6ZXIgKHVybCwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgaWYgKCFleGNsdWRlRnJhZ21lbnQpIHtcbiAgICByZXR1cm4gdXJsLmhyZWZcbiAgfVxuXG4gIGNvbnN0IGhyZWYgPSB1cmwuaHJlZlxuICBjb25zdCBoYXNoTGVuZ3RoID0gdXJsLmhhc2gubGVuZ3RoXG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IGhhc2hMZW5ndGggPT09IDAgPyBocmVmIDogaHJlZi5zdWJzdHJpbmcoMCwgaHJlZi5sZW5ndGggLSBoYXNoTGVuZ3RoKVxuXG4gIGlmICghaGFzaExlbmd0aCAmJiBocmVmLmVuZHNXaXRoKCcjJykpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplZC5zbGljZSgwLCAtMSlcbiAgfVxuXG4gIHJldHVybiBzZXJpYWxpemVkXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWEtc2VxdWVuY2Utb2YtY29kZS1wb2ludHNcbi8qKlxuICogQHBhcmFtIHsoY2hhcjogc3RyaW5nKSA9PiBib29sZWFufSBjb25kaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgcmVzdWx0ID0gJydcblxuICAvLyAyLiBXaGlsZSBwb3NpdGlvbiBkb2Vzblx1MjAxOXQgcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGlucHV0IGFuZCB0aGVcbiAgLy8gY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgbWVldHMgdGhlIGNvbmRpdGlvbiBjb25kaXRpb246XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCAmJiBjb25kaXRpb24oaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dKSkge1xuICAgIC8vIDEuIEFwcGVuZCB0aGF0IGNvZGUgcG9pbnQgdG8gdGhlIGVuZCBvZiByZXN1bHQuXG4gICAgcmVzdWx0ICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDMuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBBIGZhc3RlciBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIHRoYXQgb25seSB3b3JrcyB3aGVuIGNvbXBhcmluZyBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCAoY2hhciwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGNvbnN0IGlkeCA9IGlucHV0LmluZGV4T2YoY2hhciwgcG9zaXRpb24ucG9zaXRpb24pXG4gIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uID0gaW5wdXQubGVuZ3RoXG4gICAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0KVxuICB9XG5cbiAgcG9zaXRpb24ucG9zaXRpb24gPSBpZHhcbiAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdHJpbmctcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHN0cmluZ1BlcmNlbnREZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgaW5wdXQuXG4gIGNvbnN0IGJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGJ5dGVzLlxuICByZXR1cm4gcGVyY2VudERlY29kZShieXRlcylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYnl0ZVxuICovXG5mdW5jdGlvbiBpc0hleENoYXJCeXRlIChieXRlKSB7XG4gIC8vIDAtOSBBLUYgYS1mXG4gIHJldHVybiAoYnl0ZSA+PSAweDMwICYmIGJ5dGUgPD0gMHgzOSkgfHwgKGJ5dGUgPj0gMHg0MSAmJiBieXRlIDw9IDB4NDYpIHx8IChieXRlID49IDB4NjEgJiYgYnl0ZSA8PSAweDY2KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBieXRlXG4gKi9cbmZ1bmN0aW9uIGhleEJ5dGVUb051bWJlciAoYnl0ZSkge1xuICByZXR1cm4gKFxuICAgIC8vIDAtOVxuICAgIGJ5dGUgPj0gMHgzMCAmJiBieXRlIDw9IDB4MzlcbiAgICAgID8gKGJ5dGUgLSA0OClcbiAgICAvLyBDb252ZXJ0IHRvIHVwcGVyY2FzZVxuICAgIC8vICgoYnl0ZSAmIDB4REYpIC0gNjUpICsgMTBcbiAgICAgIDogKChieXRlICYgMHhERikgLSA1NSlcbiAgKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIC8vIDEuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqL1xuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGxldCBqID0gMFxuICAvLyAyLiBGb3IgZWFjaCBieXRlIGJ5dGUgaW4gaW5wdXQ6XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBieXRlID0gaW5wdXRbaV1cblxuICAgIC8vIDEuIElmIGJ5dGUgaXMgbm90IDB4MjUgKCUpLCB0aGVuIGFwcGVuZCBieXRlIHRvIG91dHB1dC5cbiAgICBpZiAoYnl0ZSAhPT0gMHgyNSkge1xuICAgICAgb3V0cHV0W2orK10gPSBieXRlXG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJ5dGUgaXMgMHgyNSAoJSkgYW5kIHRoZSBuZXh0IHR3byBieXRlc1xuICAgIC8vIGFmdGVyIGJ5dGUgaW4gaW5wdXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2VzXG4gICAgLy8gMHgzMCAoMCkgdG8gMHgzOSAoOSksIDB4NDEgKEEpIHRvIDB4NDYgKEYpLFxuICAgIC8vIGFuZCAweDYxIChhKSB0byAweDY2IChmKSwgYWxsIGluY2x1c2l2ZSwgYXBwZW5kIGJ5dGVcbiAgICAvLyB0byBvdXRwdXQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ5dGUgPT09IDB4MjUgJiZcbiAgICAgICEoaXNIZXhDaGFyQnl0ZShpbnB1dFtpICsgMV0pICYmIGlzSGV4Q2hhckJ5dGUoaW5wdXRbaSArIDJdKSlcbiAgICApIHtcbiAgICAgIG91dHB1dFtqKytdID0gMHgyNVxuXG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBMZXQgYnl0ZVBvaW50IGJlIHRoZSB0d28gYnl0ZXMgYWZ0ZXIgYnl0ZSBpbiBpbnB1dCxcbiAgICAgIC8vIGRlY29kZWQsIGFuZCB0aGVuIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsIG51bWJlci5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dFtqKytdID0gKGhleEJ5dGVUb051bWJlcihpbnB1dFtpICsgMV0pIDw8IDQpIHwgaGV4Qnl0ZVRvTnVtYmVyKGlucHV0W2kgKyAyXSlcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gbGVuZ3RoID09PSBqID8gb3V0cHV0IDogb3V0cHV0LnN1YmFycmF5KDAsIGopXG59XG5cbi8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtYS1taW1lLXR5cGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHBhcnNlTUlNRVR5cGUgKGlucHV0KSB7XG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gaW5wdXQuXG4gIGlucHV0ID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UoaW5wdXQsIHRydWUsIHRydWUpXG5cbiAgLy8gMi4gTGV0IHBvc2l0aW9uIGJlIGEgcG9zaXRpb24gdmFyaWFibGUgZm9yIGlucHV0LFxuICAvLyBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGlucHV0LlxuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gIC8vIDMuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlXG4gIC8vIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMkYgKC8pIGZyb21cbiAgLy8gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCB0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJy8nLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA0LiBJZiB0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAgaWYgKHR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdCh0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDUuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiByZXR1cm5cbiAgLy8gZmFpbHVyZVxuICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDJGICgvKS4pXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBMZXQgc3VidHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZlxuICAvLyBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlblxuICAvLyBwb3NpdGlvbi5cbiAgbGV0IHN1YnR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnOycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDguIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gc3VidHlwZS5cbiAgc3VidHlwZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHN1YnR5cGUsIGZhbHNlLCB0cnVlKVxuXG4gIC8vIDkuIElmIHN1YnR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoc3VidHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHN1YnR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgdHlwZUxvd2VyY2FzZSA9IHR5cGUudG9Mb3dlckNhc2UoKVxuICBjb25zdCBzdWJ0eXBlTG93ZXJjYXNlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gMTAuIExldCBtaW1lVHlwZSBiZSBhIG5ldyBNSU1FIHR5cGUgcmVjb3JkIHdob3NlIHR5cGVcbiAgLy8gaXMgdHlwZSwgaW4gQVNDSUkgbG93ZXJjYXNlLCBhbmQgc3VidHlwZSBpcyBzdWJ0eXBlLFxuICAvLyBpbiBBU0NJSSBsb3dlcmNhc2UuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlXG4gIGNvbnN0IG1pbWVUeXBlID0ge1xuICAgIHR5cGU6IHR5cGVMb3dlcmNhc2UsXG4gICAgc3VidHlwZTogc3VidHlwZUxvd2VyY2FzZSxcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgcGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlLWVzc2VuY2VcbiAgICBlc3NlbmNlOiBgJHt0eXBlTG93ZXJjYXNlfS8ke3N1YnR5cGVMb3dlcmNhc2V9YFxuICB9XG5cbiAgLy8gMTEuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDEuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0IgKDspLilcbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgSFRUUFxuICAgIC8vIHdoaXRlc3BhY2UgZnJvbSBpbnB1dCBnaXZlbiBwb3NpdGlvbi5cbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICAgICAgY2hhciA9PiBIVFRQX1dISVRFU1BBQ0VfUkVHRVgudGVzdChjaGFyKSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAzLiBMZXQgcGFyYW1ldGVyTmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYVxuICAgIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgLy8gb3IgVSswMDNEICg9KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICBsZXQgcGFyYW1ldGVyTmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJzsnICYmIGNoYXIgIT09ICc9JyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA0LiBTZXQgcGFyYW1ldGVyTmFtZSB0byBwYXJhbWV0ZXJOYW1lLCBpbiBBU0NJSVxuICAgIC8vIGxvd2VyY2FzZS5cbiAgICBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuOlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgLy8gMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgICAvLyBVKzAwM0IgKDspLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJzsnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0QgKD0pLilcbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgICB9XG5cbiAgICAvLyA2LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIC8vIDcuIExldCBwYXJhbWV0ZXJWYWx1ZSBiZSBudWxsLlxuICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IG51bGxcblxuICAgIC8vIDguIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgIC8vIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGFuIEhUVFAgcXVvdGVkIHN0cmluZyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvblxuICAgICAgLy8gYW5kIHRoZSBleHRyYWN0LXZhbHVlIGZsYWcuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcoaW5wdXQsIHBvc2l0aW9uLCB0cnVlKVxuXG4gICAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90XG4gICAgICAvLyBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAvLyA5LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAgIC8vIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgICAgLy8gMi4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBwYXJhbWV0ZXJWYWx1ZS5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UocGFyYW1ldGVyVmFsdWUsIGZhbHNlLCB0cnVlKVxuXG4gICAgICAvLyAzLiBJZiBwYXJhbWV0ZXJWYWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBzb2xlbHkgY29udGFpbnMgSFRUUCB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gcGFyYW1ldGVyVmFsdWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgcXVvdGVkLXN0cmluZyB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gZG9lcyBub3QgZXhpc3RcbiAgICAvLyB0aGVuIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSB0byBwYXJhbWV0ZXJWYWx1ZS5cbiAgICBpZiAoXG4gICAgICBwYXJhbWV0ZXJOYW1lLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QocGFyYW1ldGVyTmFtZSkgJiZcbiAgICAgIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDAgfHwgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUy50ZXN0KHBhcmFtZXRlclZhbHVlKSkgJiZcbiAgICAgICFtaW1lVHlwZS5wYXJhbWV0ZXJzLmhhcyhwYXJhbWV0ZXJOYW1lKVxuICAgICkge1xuICAgICAgbWltZVR5cGUucGFyYW1ldGVycy5zZXQocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNmb3JnaXZpbmctYmFzZTY0LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICovXG5mdW5jdGlvbiBmb3JnaXZpbmdCYXNlNjQgKGRhdGEpIHtcbiAgLy8gMS4gUmVtb3ZlIGFsbCBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gZGF0YS5cbiAgZGF0YSA9IGRhdGEucmVwbGFjZShBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVgsICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGxldCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGhcbiAgLy8gMi4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gbm8gcmVtYWluZGVyLCB0aGVuOlxuICBpZiAoZGF0YUxlbmd0aCAlIDQgPT09IDApIHtcbiAgICAvLyAxLiBJZiBkYXRhIGVuZHMgd2l0aCBvbmUgb3IgdHdvIFUrMDAzRCAoPSkgY29kZSBwb2ludHMsXG4gICAgLy8gdGhlbiByZW1vdmUgdGhlbSBmcm9tIGRhdGEuXG4gICAgaWYgKGRhdGEuY2hhckNvZGVBdChkYXRhTGVuZ3RoIC0gMSkgPT09IDB4MDAzRCkge1xuICAgICAgLS1kYXRhTGVuZ3RoXG4gICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KGRhdGFMZW5ndGggLSAxKSA9PT0gMHgwMDNEKSB7XG4gICAgICAgIC0tZGF0YUxlbmd0aFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIGEgcmVtYWluZGVyIG9mIDEsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhTGVuZ3RoICUgNCA9PT0gMSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDQuIElmIGRhdGEgY29udGFpbnMgYSBjb2RlIHBvaW50IHRoYXQgaXMgbm90IG9uZSBvZlxuICAvLyAgVSswMDJCICgrKVxuICAvLyAgVSswMDJGICgvKVxuICAvLyAgQVNDSUkgYWxwaGFudW1lcmljXG4gIC8vIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICgvW14rLzAtOUEtWmEtel0vLnRlc3QoZGF0YS5sZW5ndGggPT09IGRhdGFMZW5ndGggPyBkYXRhIDogZGF0YS5zdWJzdHJpbmcoMCwgZGF0YUxlbmd0aCkpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSwgJ2Jhc2U2NCcpXG4gIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZVx1MjAxOXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBlXHUyMDE5cyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIFx1MjE5MiB2YWx1ZSBvZiBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VycmVuY2Ugb2YgVSswMDIyIChcIikgb3JcbiAgICAgIC8vICAgIFUrMDA1QyAoXFwpIGluIHZhbHVlIHdpdGggVSswMDVDIChcXCkuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhcXFxcfFwiKS9nLCAnXFxcXCQxJylcblxuICAgICAgLy8gMi4gUHJlcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlID0gJ1wiJyArIHZhbHVlXG5cbiAgICAgIC8vIDMuIEFwcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9ICdcIidcbiAgICB9XG5cbiAgICAvLyA1LiBBcHBlbmQgdmFsdWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IHZhbHVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gc2VyaWFsaXphdGlvbi5cbiAgcmV0dXJuIHNlcmlhbGl6YXRpb25cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2UgKGNoYXIpIHtcbiAgLy8gXCJcXHJcXG5cXHQgXCJcbiAgcmV0dXJuIGNoYXIgPT09IDB4MDBkIHx8IGNoYXIgPT09IDB4MDBhIHx8IGNoYXIgPT09IDB4MDA5IHx8IGNoYXIgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsZWFkaW5nPXRydWVdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmFpbGluZz10cnVlXVxuICovXG5mdW5jdGlvbiByZW1vdmVIVFRQV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0hUVFBXaGl0ZVNwYWNlKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIC8vIFwiXFxyXFxuXFx0XFxmIFwiXG4gIHJldHVybiBjaGFyID09PSAweDAwZCB8fCBjaGFyID09PSAweDAwYSB8fCBjaGFyID09PSAweDAwOSB8fCBjaGFyID09PSAweDAwYyB8fCBjaGFyID09PSAweDAyMFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWxlYWRpbmctYW5kLXRyYWlsaW5nLWFzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlYWRpbmc9dHJ1ZV1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYWlsaW5nPXRydWVdXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0FTQ0lJV2hpdGVzcGFjZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKHN0ciwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgc3RyLmxlbmd0aCAmJiBwcmVkaWNhdGUoc3RyLmNoYXJDb2RlQXQobGVhZCkpKSBsZWFkKytcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIHdoaWxlICh0cmFpbCA+IDAgJiYgcHJlZGljYXRlKHN0ci5jaGFyQ29kZUF0KHRyYWlsKSkpIHRyYWlsLS1cbiAgfVxuXG4gIHJldHVybiBsZWFkID09PSAwICYmIHRyYWlsID09PSBzdHIubGVuZ3RoIC0gMSA/IHN0ciA6IHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNEZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIFRvIGlzb21vcnBoaWMgZGVjb2RlIGEgYnl0ZSBzZXF1ZW5jZSBpbnB1dCwgcmV0dXJuIGEgc3RyaW5nIHdob3NlIGNvZGUgcG9pbnRcbiAgLy8gICAgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBsZW5ndGggYW5kIHdob3NlIGNvZGUgcG9pbnRzIGhhdmUgdGhlIHNhbWUgdmFsdWVzXG4gIC8vICAgIGFzIHRoZSB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGJ5dGVzLCBpbiB0aGUgc2FtZSBvcmRlci5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIGlmICgoMiA8PCAxNSkgLSAxID4gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgaW5wdXQpXG4gIH1cbiAgbGV0IHJlc3VsdCA9ICcnOyBsZXQgaSA9IDBcbiAgbGV0IGFkZGl0aW9uID0gKDIgPDwgMTUpIC0gMVxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGlmIChpICsgYWRkaXRpb24gPiBsZW5ndGgpIHtcbiAgICAgIGFkZGl0aW9uID0gbGVuZ3RoIC0gaVxuICAgIH1cbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBpbnB1dC5zdWJhcnJheShpLCBpICs9IGFkZGl0aW9uKSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbmltaXplLWEtc3VwcG9ydGVkLW1pbWUtdHlwZVxuICogQHBhcmFtIHtFeGNsdWRlPFJldHVyblR5cGU8dHlwZW9mIHBhcnNlTUlNRVR5cGU+LCAnZmFpbHVyZSc+fSBtaW1lVHlwZVxuICovXG5mdW5jdGlvbiBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIChtaW1lVHlwZSkge1xuICBzd2l0Y2ggKG1pbWVUeXBlLmVzc2VuY2UpIHtcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9lY21hc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQnOlxuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9lY21hc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQnOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMCc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS4xJzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjInOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMyc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS40JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjUnOlxuICAgIGNhc2UgJ3RleHQvanNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9saXZlc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L3gtZWNtYXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC94LWphdmFzY3JpcHQnOlxuICAgICAgLy8gMS4gSWYgbWltZVR5cGUgaXMgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZSwgdGhlbiByZXR1cm4gXCJ0ZXh0L2phdmFzY3JpcHRcIi5cbiAgICAgIHJldHVybiAndGV4dC9qYXZhc2NyaXB0J1xuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxuICAgIGNhc2UgJ3RleHQvanNvbic6XG4gICAgICAvLyAyLiBJZiBtaW1lVHlwZSBpcyBhIEpTT04gTUlNRSB0eXBlLCB0aGVuIHJldHVybiBcImFwcGxpY2F0aW9uL2pzb25cIi5cbiAgICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgICBjYXNlICdpbWFnZS9zdmcreG1sJzpcbiAgICAgIC8vIDMuIElmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwiaW1hZ2Uvc3ZnK3htbFwiLCB0aGVuIHJldHVybiBcImltYWdlL3N2Zyt4bWxcIi5cbiAgICAgIHJldHVybiAnaW1hZ2Uvc3ZnK3htbCdcbiAgICBjYXNlICd0ZXh0L3htbCc6XG4gICAgY2FzZSAnYXBwbGljYXRpb24veG1sJzpcbiAgICAgIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlIGlzIGEgSlNPTiBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiLlxuICBpZiAobWltZVR5cGUuc3VidHlwZS5lbmRzV2l0aCgnK2pzb24nKSkge1xuICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgfVxuXG4gIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gIGlmIChtaW1lVHlwZS5zdWJ0eXBlLmVuZHNXaXRoKCcreG1sJykpIHtcbiAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDUuIElmIG1pbWVUeXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgdXNlciBhZ2VudCwgdGhlbiByZXR1cm4gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gIC8vIFRlY2huaWNhbGx5LCBub2RlIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgbWltZXR5cGVzLlxuXG4gIC8vIDYuIFJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICByZXR1cm4gJydcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRhdGFVUkxQcm9jZXNzb3IsXG4gIFVSTFNlcmlhbGl6ZXIsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0LFxuICBzdHJpbmdQZXJjZW50RGVjb2RlLFxuICBwYXJzZU1JTUVUeXBlLFxuICBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLFxuICBzZXJpYWxpemVBTWltZVR5cGUsXG4gIHJlbW92ZUNoYXJzLFxuICByZW1vdmVIVFRQV2hpdGVzcGFjZSxcbiAgbWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZSxcbiAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLFxuICBpc29tb3JwaGljRGVjb2RlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdHlwZXMsIGluc3BlY3QgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IG1hcmtBc1VuY2xvbmVhYmxlIH0gPSByZXF1aXJlKCdub2RlOndvcmtlcl90aHJlYWRzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi8uLi90eXBlcy93ZWJpZGwnKS5XZWJpZGx9ICovXG5jb25zdCB3ZWJpZGwgPSB7fVxud2ViaWRsLmNvbnZlcnRlcnMgPSB7fVxud2ViaWRsLnV0aWwgPSB7fVxud2ViaWRsLmVycm9ycyA9IHt9XG5cbndlYmlkbC5lcnJvcnMuZXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYCR7bWVzc2FnZS5oZWFkZXJ9OiAke21lc3NhZ2UubWVzc2FnZX1gKVxufVxuXG53ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCBwbHVyYWwgPSBjb250ZXh0LnR5cGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJyBvbmUgb2YnXG4gIGNvbnN0IG1lc3NhZ2UgPVxuICAgIGAke2NvbnRleHQuYXJndW1lbnR9IGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG9gICtcbiAgICBgJHtwbHVyYWx9OiAke2NvbnRleHQudHlwZXMuam9pbignLCAnKX0uYFxuXG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbndlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2U6IGBcIiR7Y29udGV4dC52YWx1ZX1cIiBpcyBhbiBpbnZhbGlkICR7Y29udGV4dC50eXBlfS5gXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaW1wbGVtZW50c1xud2ViaWRsLmJyYW5kQ2hlY2sgPSBmdW5jdGlvbiAoViwgSSwgb3B0cykge1xuICBpZiAob3B0cz8uc3RyaWN0ICE9PSBmYWxzZSkge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBJKSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChWPy5bU3ltYm9sLnRvU3RyaW5nVGFnXSAhPT0gSS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbndlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrID0gZnVuY3Rpb24gKHsgbGVuZ3RoIH0sIG1pbiwgY3R4KSB7XG4gIGlmIChsZW5ndGggPCBtaW4pIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBtZXNzYWdlOiBgJHttaW59IGFyZ3VtZW50JHttaW4gIT09IDEgPyAncycgOiAnJ30gcmVxdWlyZWQsIGAgK1xuICAgICAgICAgICAgICAgYGJ1dCR7bGVuZ3RoID8gJyBvbmx5JyA6ICcnfSAke2xlbmd0aH0gZm91bmQuYCxcbiAgICAgIGhlYWRlcjogY3R4XG4gICAgfSlcbiAgfVxufVxuXG53ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiAnVHlwZUVycm9yJyxcbiAgICBtZXNzYWdlOiAnSWxsZWdhbCBjb25zdHJ1Y3RvcidcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWRhdGEtdHlwZXMtYW5kLXZhbHVlc1xud2ViaWRsLnV0aWwuVHlwZSA9IGZ1bmN0aW9uIChWKSB7XG4gIHN3aXRjaCAodHlwZW9mIFYpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gJ1VuZGVmaW5lZCdcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuICdCb29sZWFuJ1xuICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiAnU3RyaW5nJ1xuICAgIGNhc2UgJ3N5bWJvbCc6IHJldHVybiAnU3ltYm9sJ1xuICAgIGNhc2UgJ251bWJlcic6IHJldHVybiAnTnVtYmVyJ1xuICAgIGNhc2UgJ2JpZ2ludCc6IHJldHVybiAnQmlnSW50J1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ051bGwnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnT2JqZWN0J1xuICAgIH1cbiAgfVxufVxuXG53ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSA9IG1hcmtBc1VuY2xvbmVhYmxlIHx8ICgoKSA9PiB7fSlcbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzKSB7XG4gIGxldCB1cHBlckJvdW5kXG4gIGxldCBsb3dlckJvdW5kXG5cbiAgLy8gMS4gSWYgYml0TGVuZ3RoIGlzIDY0LCB0aGVuOlxuICBpZiAoYml0TGVuZ3RoID09PSA2NCkge1xuICAgIC8vIDEuIExldCB1cHBlckJvdW5kIGJlIDJeNTMgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIDUzKSAtIDFcblxuICAgIC8vIDIuIElmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuIGxldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAgIGxvd2VyQm91bmQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSBsZXQgbG93ZXJCb3VuZCBiZSBcdTIyMTIyXjUzICsgMS5cbiAgICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgNTMpICsgMVxuICAgIH1cbiAgfSBlbHNlIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbjpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgbG93ZXJCb3VuZCA9IDBcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIC0yXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIGJpdExlbmd0aCkgLSAxXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMSBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSkgLSAxXG4gIH1cblxuICAvLyA0LiBMZXQgeCBiZSA/IFRvTnVtYmVyKFYpLlxuICBsZXQgeCA9IE51bWJlcihWKVxuXG4gIC8vIDUuIElmIHggaXMgXHUyMjEyMCwgdGhlbiBzZXQgeCB0byArMC5cbiAgaWYgKHggPT09IDApIHtcbiAgICB4ID0gMFxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbRW5mb3JjZVJhbmdlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmIChvcHRzPy5lbmZvcmNlUmFuZ2UgPT09IHRydWUpIHtcbiAgICAvLyAxLiBJZiB4IGlzIE5hTiwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBjb252ZXJ0ICR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSB0byBhbiBpbnRlZ2VyLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gICAgeCA9IHdlYmlkbC51dGlsLkludGVnZXJQYXJ0KHgpXG5cbiAgICAvLyAzLiBJZiB4IDwgbG93ZXJCb3VuZCBvciB4ID4gdXBwZXJCb3VuZCwgdGhlblxuICAgIC8vICAgIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdJbnRlZ2VyIGNvbnZlcnNpb24nLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgbXVzdCBiZSBiZXR3ZWVuICR7bG93ZXJCb3VuZH0tJHt1cHBlckJvdW5kfSwgZ290ICR7eH0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gNy4gSWYgeCBpcyBub3QgTmFOIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJRExcbiAgLy8gICAgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIFtDbGFtcF0gZXh0ZW5kZWRcbiAgLy8gICAgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAoIU51bWJlci5pc05hTih4KSAmJiBvcHRzPy5jbGFtcCA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIFNldCB4IHRvIG1pbihtYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpLlxuICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZClcblxuICAgIC8vIDIuIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlXG4gICAgLy8gICAgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byxcbiAgICAvLyAgICBhbmQgY2hvb3NpbmcgKzAgcmF0aGVyIHRoYW4gXHUyMjEyMC5cbiAgICBpZiAoTWF0aC5mbG9vcih4KSAlIDIgPT09IDApIHtcbiAgICAgIHggPSBNYXRoLmZsb29yKHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBNYXRoLmNlaWwoeClcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gOC4gSWYgeCBpcyBOYU4sICswLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gcmV0dXJuICswLlxuICBpZiAoXG4gICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgKHggPT09IDAgJiYgT2JqZWN0LmlzKDAsIHgpKSB8fFxuICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICApIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gOS4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gIC8vIDEwLiBTZXQgeCB0byB4IG1vZHVsbyAyXmJpdExlbmd0aC5cbiAgeCA9IHggJSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG5cbiAgLy8gMTEuIElmIHNpZ25lZG5lc3MgaXMgXCJzaWduZWRcIiBhbmQgeCBcdTIyNjUgMl5iaXRMZW5ndGggXHUyMjEyIDEsXG4gIC8vICAgIHRoZW4gcmV0dXJuIHggXHUyMjEyIDJeYml0TGVuZ3RoLlxuICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3NpZ25lZCcgJiYgeCA+PSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMSkge1xuICAgIHJldHVybiB4IC0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuICB9XG5cbiAgLy8gMTIuIE90aGVyd2lzZSwgcmV0dXJuIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtaW50ZWdlcnBhcnRcbndlYmlkbC51dGlsLkludGVnZXJQYXJ0ID0gZnVuY3Rpb24gKG4pIHtcbiAgLy8gMS4gTGV0IHIgYmUgZmxvb3IoYWJzKG4pKS5cbiAgY29uc3QgciA9IE1hdGguZmxvb3IoTWF0aC5hYnMobikpXG5cbiAgLy8gMi4gSWYgbiA8IDAsIHRoZW4gcmV0dXJuIC0xIFx1MDBENyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG53ZWJpZGwudXRpbC5TdHJpbmdpZnkgPSBmdW5jdGlvbiAoVikge1xuICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShWKVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgICByZXR1cm4gYFN5bWJvbCgke1YuZGVzY3JpcHRpb259KWBcbiAgICBjYXNlICdPYmplY3QnOlxuICAgICAgcmV0dXJuIGluc3BlY3QoVilcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgcmV0dXJuIGBcIiR7Vn1cImBcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAke1Z9YFxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtc2VxdWVuY2VcbndlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWLCBwcmVmaXgsIGFyZ3VtZW50LCBJdGVyYWJsZSkgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gKCR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSkgaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSB0eXBlb2YgSXRlcmFibGUgPT09ICdmdW5jdGlvbicgPyBJdGVyYWJsZSgpIDogVj8uW1N5bWJvbC5pdGVyYXRvcl0/LigpXG4gICAgY29uc3Qgc2VxID0gW11cbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICAvLyAzLiBJZiBtZXRob2QgaXMgdW5kZWZpbmVkLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBtZXRob2QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdHlwZW9mIG1ldGhvZC5uZXh0ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH1bJHtpbmRleCsrfV1gKSlcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy10by1yZWNvcmRcbndlYmlkbC5yZWNvcmRDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoa2V5Q29udmVydGVyLCB2YWx1ZUNvbnZlcnRlcikge1xuICByZXR1cm4gKE8sIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IHByZWZpeCxcbiAgICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IChcIiR7d2ViaWRsLnV0aWwuVHlwZShPKX1cIikgaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LlxuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBpZiAoIXR5cGVzLmlzUHJveHkoTykpIHtcbiAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS5cbiAgICAgIGNvbnN0IGtleXMgPSBbLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTyksIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTyldXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5LCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSwgcHJlZml4LCBhcmd1bWVudClcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXksIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCwgb3B0cykgPT4ge1xuICAgIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIGkpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpIHRvIGJlIGFuIGluc3RhbmNlIG9mICR7aS5uYW1lfS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBWXG4gIH1cbn1cblxud2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVycykge1xuICByZXR1cm4gKGRpY3Rpb25hcnksIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShkaWN0aW9uYXJ5KVxuICAgIGNvbnN0IGRpY3QgPSB7fVxuXG4gICAgaWYgKHR5cGUgPT09ICdOdWxsJyB8fCB0eXBlID09PSAnVW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRpY3RcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtkaWN0aW9uYXJ5fSB0byBiZSBvbmUgb2Y6IE51bGwsIFVuZGVmaW5lZCwgT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvcHRpb25zIG9mIGNvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnN0IHsga2V5LCBkZWZhdWx0VmFsdWUsIHJlcXVpcmVkLCBjb252ZXJ0ZXIgfSA9IG9wdGlvbnNcblxuICAgICAgaWYgKHJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093bihkaWN0aW9uYXJ5LCBrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBrZXkgXCIke2tleX1cIi5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWUgPSBkaWN0aW9uYXJ5W2tleV1cbiAgICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBPYmplY3QuaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA/Pz0gZGVmYXVsdFZhbHVlKClcbiAgICAgIH1cblxuICAgICAgLy8gQSBrZXkgY2FuIGJlIG9wdGlvbmFsIGFuZCBoYXZlIG5vIGRlZmF1bHQgdmFsdWUuXG4gICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZG8gbm90IHBlcmZvcm0gYSBjb252ZXJzaW9uLFxuICAgICAgLy8gYW5kIGRvIG5vdCBhc3NpZ24gdGhlIGtleSBhIHZhbHVlLlxuICAgICAgaWYgKHJlcXVpcmVkIHx8IGhhc0RlZmF1bHQgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH0uJHtrZXl9YClcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkVmFsdWVzICYmXG4gICAgICAgICAgIW9wdGlvbnMuYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt2YWx1ZX0gaXMgbm90IGFuIGFjY2VwdGVkIHR5cGUuIEV4cGVjdGVkIG9uZSBvZiAke29wdGlvbnMuYWxsb3dlZFZhbHVlcy5qb2luKCcsICcpfS5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpY3RcbiAgfVxufVxuXG53ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCkgPT4ge1xuICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gVlxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0ZXIoViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLURPTVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgViBpcyBudWxsIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZVxuICAvLyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFtMZWdhY3lOdWxsVG9FbXB0eVN0cmluZ11cbiAgLy8gICAgZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuIHJldHVybiB0aGUgRE9NU3RyaW5nIHZhbHVlXG4gIC8vICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoViA9PT0gbnVsbCAmJiBvcHRzPy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IGlzIGEgc3ltYm9sLCB3aGljaCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgRE9NU3RyaW5nLmBcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBhcmd1bWVudCkge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbi8vIFRPRE86IHJld3JpdGUgdGhpcyBzbyB3ZSBjYW4gY29udHJvbCB0aGUgZXJyb3JzIHRocm93blxud2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nID0gdG9VU1ZTdHJpbmdcblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ib29sZWFuXG53ZWJpZGwuY29udmVydGVycy5ib29sZWFuID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgVG9Cb29sZWFuKFYpLlxuICBjb25zdCB4ID0gQm9vbGVhbihWKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGJvb2xlYW4gdmFsdWUgdGhhdCBpcyB0aGUgb25lIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSB0cnV0aCB2YWx1ZSBhcyB0aGUgRUNNQVNjcmlwdCBCb29sZWFuIHZhbHVlIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYW55XG53ZWJpZGwuY29udmVydGVycy5hbnkgPSBmdW5jdGlvbiAoVikge1xuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwic2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAnc2lnbmVkJywgdW5kZWZpbmVkLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGxvbmcgbG9uZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtc2hvcnRcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMTYsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMTYsICd1bnNpZ25lZCcsIG9wdHMsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgc2hvcnQgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpZGwtQXJyYXlCdWZmZXJcbndlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzPy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICBpZiAoVi5yZXNpemFibGUgfHwgVi5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBUXHUyMDE5cyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHtuYW1lfSAoXCIke3dlYmlkbC51dGlsLlN0cmluZ2lmeShWKX1cIilgLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDUuIFJldHVybiB0aGUgSURMIHZhbHVlIG9mIHR5cGUgVCB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIG5hbWUsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW0RhdGFWaWV3XV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8ICF0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICBtZXNzYWdlOiBgJHtuYW1lfSBpcyBub3QgYSBEYXRhVmlldy5gXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIERhdGFWaWV3IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jQnVmZmVyU291cmNlXG53ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIGlmICh0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyKFYsIHByZWZpeCwgbmFtZSwgeyAuLi5vcHRzLCBhbGxvd1NoYXJlZDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmICh0eXBlcy5pc1R5cGVkQXJyYXkoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheShWLCBWLmNvbnN0cnVjdG9yLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgIHByZWZpeCxcbiAgICBhcmd1bWVudDogYCR7bmFtZX0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICB0eXBlczogWydCdWZmZXJTb3VyY2UnXVxuICB9KVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ25vZGU6emxpYicpXG5jb25zdCB7IHJlZGlyZWN0U3RhdHVzU2V0LCByZWZlcnJlclBvbGljeVNldDogcmVmZXJyZXJQb2xpY3lUb2tlbnMsIGJhZFBvcnRzU2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzLCBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLCByZW1vdmVDaGFycywgcGFyc2VNSU1FVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IHBlcmZvcm1hbmNlIH0gPSByZXF1aXJlKCdub2RlOnBlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCBSZWFkYWJsZVN0cmVhbUZyb20sIGlzVmFsaWRIVFRQVG9rZW4sIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCdub2RlOnV0aWwvdHlwZXMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbiAgY29uc3QgcG9zc2libGVSZWxldmFudEhhc2hlcyA9IFsnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInXVxuICBzdXBwb3J0ZWRIYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCkuZmlsdGVyKChoYXNoKSA9PiBwb3NzaWJsZVJlbGV2YW50SGFzaGVzLmluY2x1ZGVzKGhhc2gpKVxuLyogYzggaWdub3JlIG5leHQgMyAqL1xufSBjYXRjaCB7XG5cbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VVUkwgKHJlc3BvbnNlKSB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZXNcbiAgLy8gQSByZXNwb25zZSBoYXMgYW4gYXNzb2NpYXRlZCBVUkwuIEl0IGlzIGEgcG9pbnRlciB0byB0aGUgbGFzdCBVUkxcbiAgLy8gaW4gcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGFuZCBudWxsIGlmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eS5cbiAgY29uc3QgdXJsTGlzdCA9IHJlc3BvbnNlLnVybExpc3RcbiAgY29uc3QgbGVuZ3RoID0gdXJsTGlzdC5sZW5ndGhcbiAgcmV0dXJuIGxlbmd0aCA9PT0gMCA/IG51bGwgOiB1cmxMaXN0W2xlbmd0aCAtIDFdLnRvU3RyaW5nKClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtbG9jYXRpb24tdXJsXG5mdW5jdGlvbiByZXNwb25zZUxvY2F0aW9uVVJMIChyZXNwb25zZSwgcmVxdWVzdEZyYWdtZW50KSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHJldHVybiBudWxsLlxuICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDIuIExldCBsb2NhdGlvbiBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuXG4gIC8vIGBMb2NhdGlvbmAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgbGV0IGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdsb2NhdGlvbicsIHRydWUpXG5cbiAgLy8gMy4gSWYgbG9jYXRpb24gaXMgYSBoZWFkZXIgdmFsdWUsIHRoZW4gc2V0IGxvY2F0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgcGFyc2luZyBsb2NhdGlvbiB3aXRoIHJlc3BvbnNlXHUyMDE5cyBVUkwuXG4gIGlmIChsb2NhdGlvbiAhPT0gbnVsbCAmJiBpc1ZhbGlkSGVhZGVyVmFsdWUobG9jYXRpb24pKSB7XG4gICAgaWYgKCFpc1ZhbGlkRW5jb2RlZFVSTChsb2NhdGlvbikpIHtcbiAgICAgIC8vIFNvbWUgd2Vic2l0ZXMgcmVzcG9uZCBsb2NhdGlvbiBoZWFkZXIgaW4gVVRGLTggZm9ybSB3aXRob3V0IGVuY29kaW5nIHRoZW0gYXMgQVNDSUlcbiAgICAgIC8vIGFuZCBtYWpvciBicm93c2VycyByZWRpcmVjdCB0aGVtIHRvIGNvcnJlY3RseSBVVEYtOCBlbmNvZGVkIGFkZHJlc3Nlcy5cbiAgICAgIC8vIEhlcmUsIHdlIGhhbmRsZSB0aGF0IGJlaGF2aW9yIGluIHRoZSBzYW1lIHdheS5cbiAgICAgIGxvY2F0aW9uID0gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4KGxvY2F0aW9uKVxuICAgIH1cbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9uXHUyMDE5c1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMTczOCNzZWN0aW9uLTIuMlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbmNvZGVkVVJMICh1cmwpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmwubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gdXJsLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPiAweDdFIHx8IC8vIE5vbi1VUy1BU0NJSSArIERFTFxuICAgICAgY29kZSA8IDB4MjAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzIE5VTCAtIFVTXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBJZiBzdHJpbmcgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGFzc3VtZXMgaXQncyBVVEYtOCBlbmNvZGVkIGFuZCBkZWNvZGVzIGl0LlxuICogU2luY2UgVVRGLTggaXMgYSBzdXBlcnNldCBvZiBBU0NJSSwgdGhpcyB3aWxsIHdvcmsgZm9yIEFTQ0lJIHN0cmluZ3MgYXMgd2VsbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4ICh2YWx1ZSkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsICdiaW5hcnknKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJsXHUyMDE5cyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gaXNWYWxpZEhUVFBUb2tlblxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci12YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gLSBIYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBIVFRQIHRhYiBvciBzcGFjZSBieXRlcy5cbiAgLy8gLSBDb250YWlucyBubyAweDAwIChOVUwpIG9yIEhUVFAgbmV3bGluZSBieXRlcy5cbiAgcmV0dXJuIChcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJ1xcdCcgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJyAnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICdcXHQnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICcgJyB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXG4nKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXHInKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXDAnKVxuICApID09PSBmYWxzZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc2V0LXJlcXVlc3RzLXJlZmVycmVyLXBvbGljeS1vbi1yZWRpcmVjdFxuZnVuY3Rpb24gc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCAocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpIHtcbiAgLy8gIEdpdmVuIGEgcmVxdWVzdCByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlIGFjdHVhbFJlc3BvbnNlLCB0aGlzIGFsZ29yaXRobVxuICAvLyAgdXBkYXRlcyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgYWNjb3JkaW5nIHRvIHRoZSBSZWZlcnJlci1Qb2xpY3lcbiAgLy8gIGhlYWRlciAoaWYgYW55KSBpbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyAxLiBMZXQgcG9saWN5IGJlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIFx1MDBBNyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JywgdHJ1ZSkgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHJcdTIwMTlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHJcdTIwMTlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiByXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlciwgdHJ1ZSlcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXG4gIC8vICAgIHdpdGggcmVxdWVzdC5cbiAgLy8gVE9ETzogaW1wbGVtZW50IFwiYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXCJcbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIC0gXCInY2xpZW50JyBpcyBjaGFuZ2VkIHRvIGFuIG9yaWdpbiBkdXJpbmcgZmV0Y2hpbmcuXCJcbiAgLy8gICBUaGlzIGRvZXNuJ3QgaGFwcGVuIGluIHVuZGljaSAoaW4gbW9zdCBjYXNlcykgYmVjYXVzZSB1bmRpY2ksIGJ5IGRlZmF1bHQsXG4gIC8vICAgaGFzIG5vIGNvbmNlcHQgb2Ygb3JpZ2luLlxuICAvLyAtIHJlcXVlc3Qub3JpZ2luIGNhbiBhbHNvIGJlIHNldCB0byByZXF1ZXN0LmNsaWVudC5vcmlnaW4gKGNsaWVudCBiZWluZ1xuICAvLyAgIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCksIHdoaWNoIGlzIHVuZGVmaW5lZCB3aXRob3V0IHVzaW5nXG4gIC8vICAgc2V0R2xvYmFsT3JpZ2luLlxuICBpZiAoc2VyaWFsaXplZE9yaWdpbiA9PT0gJ2NsaWVudCcgfHwgc2VyaWFsaXplZE9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBvciByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwid2Vic29ja2V0XCIsXG4gIC8vICAgIHRoZW4gYXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbiwgdHJ1ZSlcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZFxuICAgICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0XG4gICAgICAgIC8vIHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXNcbiAgICAgICAgLy8gb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4sIHRydWUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2hyLXRpbWUvI2Rmbi1jb2Fyc2VuLXRpbWVcbmZ1bmN0aW9uIGNvYXJzZW5UaW1lICh0aW1lc3RhbXAsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHRpbWVzdGFtcFxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY2xhbXAtYW5kLWNvYXJzZW4tY29ubmVjdGlvbi10aW1pbmctaW5mb1xuZnVuY3Rpb24gY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8gKGNvbm5lY3Rpb25UaW1pbmdJbmZvLCBkZWZhdWx0U3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICBpZiAoIWNvbm5lY3Rpb25UaW1pbmdJbmZvPy5zdGFydFRpbWUgfHwgY29ubmVjdGlvblRpbWluZ0luZm8uc3RhcnRUaW1lIDwgZGVmYXVsdFN0YXJ0VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGRlZmF1bHRTdGFydFRpbWUsXG4gICAgICBkb21haW5Mb29rdXBFbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgY29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIGNvbm5lY3Rpb25FbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvPy5BTFBOTmVnb3RpYXRlZFByb3RvY29sXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cFN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIGRvbWFpbkxvb2t1cEVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cEVuZFRpbWUsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSxcbiAgICBjb25uZWN0aW9uU3RhcnRUaW1lOiBjb2Fyc2VuVGltZShjb25uZWN0aW9uVGltaW5nSW5mby5jb25uZWN0aW9uU3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgY29ubmVjdGlvbkVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmNvbm5lY3Rpb25FbmRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogY29hcnNlblRpbWUoY29ubmVjdGlvblRpbWluZ0luZm8uc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvLkFMUE5OZWdvdGlhdGVkUHJvdG9jb2xcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vaHItdGltZS8jZGZuLWNvYXJzZW5lZC1zaGFyZWQtY3VycmVudC10aW1lXG5mdW5jdGlvbiBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSAoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpIHtcbiAgcmV0dXJuIGNvYXJzZW5UaW1lKHBlcmZvcm1hbmNlLm5vdygpLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1hbi1vcGFxdWUtdGltaW5nLWluZm9cbmZ1bmN0aW9uIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8gKHRpbWluZ0luZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgcmVkaXJlY3RTdGFydFRpbWU6IDAsXG4gICAgcmVkaXJlY3RFbmRUaW1lOiAwLFxuICAgIHBvc3RSZWRpcmVjdFN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICBmaW5hbFNlcnZpY2VXb3JrZXJTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVzcG9uc2VTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZTogMCxcbiAgICBlbmRUaW1lOiAwLFxuICAgIGVuY29kZWRCb2R5U2l6ZTogMCxcbiAgICBkZWNvZGVkQm9keVNpemU6IDAsXG4gICAgZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbzogbnVsbFxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3BvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIG1ha2VQb2xpY3lDb250YWluZXIgKCkge1xuICAvLyBOb3RlOiB0aGUgZmV0Y2ggc3BlYyBkb2Vzbid0IG1ha2UgdXNlIG9mIGVtYmVkZGVyIHBvbGljeSBvciBDU1AgbGlzdFxuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNjbG9uZS1hLXBvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIGNsb25lUG9saWN5Q29udGFpbmVyIChwb2xpY3lDb250YWluZXIpIHtcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogcG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI2RldGVybWluZS1yZXF1ZXN0cy1yZWZlcnJlclxuZnVuY3Rpb24gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgcG9saWN5IGJlIHJlcXVlc3QncyByZWZlcnJlciBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeSA9IHJlcXVlc3QucmVmZXJyZXJQb2xpY3lcblxuICAvLyBOb3RlOiBwb2xpY3kgY2Fubm90IChzaG91bGRuJ3QpIGJlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICBhc3NlcnQocG9saWN5KVxuXG4gIC8vIDIuIExldCBlbnZpcm9ubWVudCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnQuXG5cbiAgbGV0IHJlZmVycmVyU291cmNlID0gbnVsbFxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlcjpcbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gTm90ZTogbm9kZSBpc24ndCBhIGJyb3dzZXIgYW5kIGRvZXNuJ3QgaW1wbGVtZW50IGRvY3VtZW50L2lmcmFtZXMsXG4gICAgLy8gc28gd2UgYnlwYXNzIHRoaXMgc3RlcCBhbmQgcmVwbGFjZSBpdCB3aXRoIG91ciBvd24uXG5cbiAgICBjb25zdCBnbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgaWYgKCFnbG9iYWxPcmlnaW4gfHwgZ2xvYmFsT3JpZ2luLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgIH1cblxuICAgIC8vIG5vdGU6IHdlIG5lZWQgdG8gY2xvbmUgaXQgYXMgaXQncyBtdXRhdGVkXG4gICAgcmVmZXJyZXJTb3VyY2UgPSBuZXcgVVJMKGdsb2JhbE9yaWdpbilcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgLy8gTGV0IHJlZmVycmVyU291cmNlIGJlIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgIHJlZmVycmVyU291cmNlID0gcmVxdWVzdC5yZWZlcnJlclxuICB9XG5cbiAgLy8gNC4gTGV0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyVVJMIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvclxuICAvLyAgICB1c2UgYXMgYSByZWZlcnJlci5cbiAgbGV0IHJlZmVycmVyVVJMID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSlcblxuICAvLyA1LiBMZXQgcmVmZXJyZXJPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yIHVzZSBhc1xuICAvLyAgICBhIHJlZmVycmVyLCB3aXRoIHRoZSBvcmlnaW4tb25seSBmbGFnIHNldCB0byB0cnVlLlxuICBjb25zdCByZWZlcnJlck9yaWdpbiA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG5cbiAgLy8gNi4gSWYgdGhlIHJlc3VsdCBvZiBzZXJpYWxpemluZyByZWZlcnJlclVSTCBpcyBhIHN0cmluZyB3aG9zZSBsZW5ndGggaXNcbiAgLy8gICAgZ3JlYXRlciB0aGFuIDQwOTYsIHNldCByZWZlcnJlclVSTCB0byByZWZlcnJlck9yaWdpbi5cbiAgaWYgKHJlZmVycmVyVVJMLnRvU3RyaW5nKCkubGVuZ3RoID4gNDA5Nikge1xuICAgIHJlZmVycmVyVVJMID0gcmVmZXJyZXJPcmlnaW5cbiAgfVxuXG4gIGNvbnN0IGFyZVNhbWVPcmlnaW4gPSBzYW1lT3JpZ2luKHJlcXVlc3QsIHJlZmVycmVyVVJMKVxuICBjb25zdCBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPSBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmXG4gICAgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZXF1ZXN0LnVybClcblxuICAvLyA4LiBFeGVjdXRlIHRoZSBzd2l0Y2ggc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiBwb2xpY3k6XG4gIHN3aXRjaCAocG9saWN5KSB7XG4gICAgY2FzZSAnb3JpZ2luJzogcmV0dXJuIHJlZmVycmVyT3JpZ2luICE9IG51bGwgPyByZWZlcnJlck9yaWdpbiA6IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG4gICAgY2FzZSAndW5zYWZlLXVybCc6IHJldHVybiByZWZlcnJlclVSTFxuICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJPcmlnaW4gOiAnbm8tcmVmZXJyZXInXG4gICAgY2FzZSAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJVUkwgOiByZWZlcnJlck9yaWdpblxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gMS4gSWYgdGhlIG9yaWdpbiBvZiByZWZlcnJlclVSTCBhbmQgdGhlIG9yaWdpbiBvZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gICAgICAvLyAgICBVUkwgYXJlIHRoZSBzYW1lLCB0aGVuIHJldHVybiByZWZlcnJlclVSTC5cbiAgICAgIGlmIChzYW1lT3JpZ2luKHJlZmVycmVyVVJMLCBjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kIHJlcXVlc3RcdTIwMTlzXG4gICAgICAvLyAgICBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIHRoZW4gcmV0dXJuIG5vXG4gICAgICAvLyAgICByZWZlcnJlci5cbiAgICAgIGlmIChpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICAgIH1cblxuICAgICAgLy8gMy4gUmV0dXJuIHJlZmVycmVyT3JpZ2luLlxuICAgICAgcmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgfVxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgICAqL1xuICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAqL1xuXG4gICAgZGVmYXVsdDogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA/ICduby1yZWZlcnJlcicgOiByZWZlcnJlck9yaWdpblxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc3RyaXAtdXJsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvcmlnaW5Pbmx5XG4gKi9cbmZ1bmN0aW9uIHN0cmlwVVJMRm9yUmVmZXJyZXIgKHVybCwgb3JpZ2luT25seSkge1xuICAvLyAxLiBBc3NlcnQ6IHVybCBpcyBhIFVSTC5cbiAgYXNzZXJ0KHVybCBpbnN0YW5jZW9mIFVSTClcblxuICB1cmwgPSBuZXcgVVJMKHVybClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhIGxvY2FsIHNjaGVtZSwgdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgdXJsLnByb3RvY29sID09PSAnYWJvdXQ6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdibGFuazonKSB7XG4gICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgfVxuXG4gIC8vIDMuIFNldCB1cmxcdTIwMTlzIHVzZXJuYW1lIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC51c2VybmFtZSA9ICcnXG5cbiAgLy8gNC4gU2V0IHVybFx1MjAxOXMgcGFzc3dvcmQgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnBhc3N3b3JkID0gJydcblxuICAvLyA1LiBTZXQgdXJsXHUyMDE5cyBmcmFnbWVudCB0byBudWxsLlxuICB1cmwuaGFzaCA9ICcnXG5cbiAgLy8gNi4gSWYgdGhlIG9yaWdpbi1vbmx5IGZsYWcgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKG9yaWdpbk9ubHkpIHtcbiAgICAvLyAxLiBTZXQgdXJsXHUyMDE5cyBwYXRoIHRvIFx1MDBBQiB0aGUgZW1wdHkgc3RyaW5nIFx1MDBCQi5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybFx1MjAxOXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZVttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCBcdTAwQUIgdmFsdWUgXHUwMEJCKS5cbiAgY29uc3QgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG5cbiAgLy8gMi4gSWYgcmVzdWx0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlJylcbiAgfVxuXG4gIC8vIDMuIEFzc2VydDogcmVzdWx0IGlzIGEgc3RyaW5nLlxuICBhc3NlcnQodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpXG5cbiAgLy8gNC4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSUyNWl0ZXJhdG9ycHJvdG90eXBlJTI1LW9iamVjdFxuY29uc3QgZXNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yIChuYW1lLCBrSW50ZXJuYWxJdGVyYXRvciwga2V5SW5kZXggPSAwLCB2YWx1ZUluZGV4ID0gMSkge1xuICBjbGFzcyBGYXN0SXRlcmFibGVJdGVyYXRvciB7XG4gICAgLyoqIEB0eXBlIHthbnl9ICovXG4gICAgI3RhcmdldFxuICAgIC8qKiBAdHlwZSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9ICovXG4gICAgI2tpbmRcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICAjaW5kZXhcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4tZGVmYXVsdC1pdGVyYXRvci1vYmplY3RcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IHRhcmdldFxuICAgICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciAodGFyZ2V0LCBraW5kKSB7XG4gICAgICB0aGlzLiN0YXJnZXQgPSB0YXJnZXRcbiAgICAgIHRoaXMuI2tpbmQgPSBraW5kXG4gICAgICB0aGlzLiNpbmRleCA9IDBcbiAgICB9XG5cbiAgICBuZXh0ICgpIHtcbiAgICAgIC8vIDEuIExldCBpbnRlcmZhY2UgYmUgdGhlIGludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZXhpc3RzLlxuICAgICAgLy8gMi4gTGV0IHRoaXNWYWx1ZSBiZSB0aGUgdGhpcyB2YWx1ZS5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuICAgICAgLy8gNC4gSWYgb2JqZWN0IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuIHBlcmZvcm0gYSBzZWN1cml0eVxuICAgICAgLy8gICAgY2hlY2ssIHBhc3Npbmc6XG4gICAgICAvLyA1LiBJZiBvYmplY3QgaXMgbm90IGEgZGVmYXVsdCBpdGVyYXRvciBvYmplY3QgZm9yIGludGVyZmFjZSxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAodHlwZW9mIHRoaXMgIT09ICdvYmplY3QnIHx8IHRoaXMgPT09IG51bGwgfHwgISgjdGFyZ2V0IGluIHRoaXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCduZXh0JyBjYWxsZWQgb24gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGludGVyZmFjZSAke25hbWV9IEl0ZXJhdG9yLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBMZXQgaW5kZXggYmUgb2JqZWN0XHUyMDE5cyBpbmRleC5cbiAgICAgIC8vIDcuIExldCBraW5kIGJlIG9iamVjdFx1MjAxOXMga2luZC5cbiAgICAgIC8vIDguIExldCB2YWx1ZXMgYmUgb2JqZWN0XHUyMDE5cyB0YXJnZXQncyB2YWx1ZSBwYWlycyB0byBpdGVyYXRlIG92ZXIuXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2luZGV4XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLiN0YXJnZXRba0ludGVybmFsSXRlcmF0b3JdXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAxMS4gTGV0IHBhaXIgYmUgdGhlIGVudHJ5IGluIHZhbHVlcyBhdCBpbmRleCBpbmRleC5cbiAgICAgIGNvbnN0IHsgW2tleUluZGV4XToga2V5LCBbdmFsdWVJbmRleF06IHZhbHVlIH0gPSB2YWx1ZXNbaW5kZXhdXG5cbiAgICAgIC8vIDEyLiBTZXQgb2JqZWN0XHUyMDE5cyBpbmRleCB0byBpbmRleCArIDEuXG4gICAgICB0aGlzLiNpbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG5cbiAgICAgIC8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaXRlcmF0b3ItcmVzdWx0XG5cbiAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBraW5kOlxuICAgICAgbGV0IHJlc3VsdFxuICAgICAgc3dpdGNoICh0aGlzLiNraW5kKSB7XG4gICAgICAgIGNhc2UgJ2tleSc6XG4gICAgICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWlyXHUyMDE5cyBrZXkuXG4gICAgICAgICAgLy8gMi4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgICAgIHJlc3VsdCA9IGtleVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAna2V5K3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA1LiBMZXQgYXJyYXkgYmUgISBBcnJheUNyZWF0ZSgyKS5cbiAgICAgICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgICAgICAvLyA3LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjFcIiwgdmFsdWUpLlxuICAgICAgICAgIC8vIDguIHJlc3VsdCBpcyBhcnJheS5cbiAgICAgICAgICByZXN1bHQgPSBba2V5LCB2YWx1ZV1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBSZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIGZhbHNlKS5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4taXRlcmF0b3ItcHJvdG90eXBlLW9iamVjdFxuICAvLyBAdHMtaWdub3JlXG4gIGRlbGV0ZSBGYXN0SXRlcmFibGVJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3JcblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRmFzdEl0ZXJhYmxlSXRlcmF0b3IucHJvdG90eXBlLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZhc3RJdGVyYWJsZUl0ZXJhdG9yLnByb3RvdHlwZSwge1xuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgICB9LFxuICAgIG5leHQ6IHsgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9XG4gIH0pXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICogQHJldHVybnMge0l0ZXJhYmxlSXRlcmF0b3I8YW55Pn1cbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBraW5kKSB7XG4gICAgcmV0dXJuIG5ldyBGYXN0SXRlcmFibGVJdGVyYXRvcih0YXJnZXQsIGtpbmQpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge2FueX0gb2JqZWN0IGNsYXNzXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yTWl4aW4gKG5hbWUsIG9iamVjdCwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4ID0gMCwgdmFsdWVJbmRleCA9IDEpIHtcbiAgY29uc3QgbWFrZUl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IobmFtZSwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4LCB2YWx1ZUluZGV4KVxuXG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAga2V5czoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGtleXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleScpXG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ3ZhbHVlJylcbiAgICAgIH1cbiAgICB9LFxuICAgIGVudHJpZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnRyaWVzICgpIHtcbiAgICAgICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgb2JqZWN0KVxuICAgICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKVxuICAgICAgfVxuICAgIH0sXG4gICAgZm9yRWFjaDoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZvckVhY2ggKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIG9iamVjdClcbiAgICAgICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBgJHtuYW1lfS5mb3JFYWNoYClcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFja2ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJyR7bmFtZX0nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB7IDA6IGtleSwgMTogdmFsdWUgfSBvZiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleSt2YWx1ZScpKSB7XG4gICAgICAgICAgY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsIHZhbHVlLCBrZXksIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC4uLnByb3BlcnRpZXMsXG4gICAgW1N5bWJvbC5pdGVyYXRvcl06IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogcHJvcGVydGllcy5lbnRyaWVzLnZhbHVlXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktZnVsbHktcmVhZFxuICovXG5hc3luYyBmdW5jdGlvbiBmdWxseVJlYWRCb2R5IChib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcikge1xuICAvLyAxLiBJZiB0YXNrRGVzdGluYXRpb24gaXMgbnVsbCwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvXG4gIC8vICAgIHRoZSByZXN1bHQgb2Ygc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG5cbiAgLy8gMi4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXMgYmUgdG8gcXVldWUgYVxuICAvLyAgICBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keSBnaXZlbiBieXRlcywgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IHByb2Nlc3NCb2R5XG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgYmUgdG8gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keUVycm9yLFxuICAvLyAgICB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IHByb2Nlc3NCb2R5RXJyb3JcblxuICAvLyA0LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmb3IgYm9keVx1MjAxOXMgc3RyZWFtLlxuICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwcyB3aXRoIHRoYXRcbiAgLy8gICAgZXhjZXB0aW9uIGFuZCByZXR1cm4uXG4gIGxldCByZWFkZXJcblxuICB0cnkge1xuICAgIHJlYWRlciA9IGJvZHkuc3RyZWFtLmdldFJlYWRlcigpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA1LiBSZWFkIGFsbCBieXRlcyBmcm9tIHJlYWRlciwgZ2l2ZW4gc3VjY2Vzc1N0ZXBzIGFuZCBlcnJvclN0ZXBzLlxuICB0cnkge1xuICAgIHN1Y2Nlc3NTdGVwcyhhd2FpdCByZWFkQWxsQnl0ZXMocmVhZGVyKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZSAoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCAoXG4gICAgc3RyZWFtW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdSZWFkYWJsZVN0cmVhbScgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLnRlZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgIGNvbnRyb2xsZXIuYnlvYlJlcXVlc3Q/LnJlc3BvbmQoMClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVE9ETzogYWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhpcyBlcnJvciBvY2N1cnMuXG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29udHJvbGxlciBpcyBhbHJlYWR5IGNsb3NlZCcpICYmICFlcnIubWVzc2FnZS5pbmNsdWRlcygnUmVhZGFibGVTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQnKSkge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleCA9IC9bXlxceDAwLVxceEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBhc3NlcnQoIWludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleC50ZXN0KGlucHV0KSlcblxuICAvLyAyLiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIHdob3NlIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgY29kZVxuICAvLyAgICBwb2ludCBsZW5ndGggYW5kIHdob3NlIGJ5dGVzIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAvLyAgICB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGNvZGUgcG9pbnRzLCBpbiB0aGUgc2FtZSBvcmRlclxuICByZXR1cm4gaW5wdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtZGVmYXVsdHJlYWRlci1yZWFkLWFsbC1ieXRlc1xuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkLWxvb3BcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyfSByZWFkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEJ5dGVzIChyZWFkZXIpIHtcbiAgY29uc3QgYnl0ZXMgPSBbXVxuICBsZXQgYnl0ZUxlbmd0aCA9IDBcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IGNodW5rIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gMS4gQ2FsbCBzdWNjZXNzU3RlcHMgd2l0aCBieXRlcy5cbiAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ5dGVzLCBieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNodW5rIGlzIG5vdCBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBjYWxsIGZhaWx1cmVTdGVwc1xuICAgIC8vICAgIHdpdGggYSBUeXBlRXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVjZWl2ZWQgbm9uLVVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCB0aGUgYnl0ZXMgcmVwcmVzZW50ZWQgYnkgY2h1bmsgdG8gYnl0ZXMuXG4gICAgYnl0ZXMucHVzaChjaHVuaylcbiAgICBieXRlTGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuXG4gICAgLy8gMy4gUmVhZC1sb29wIGdpdmVuIHJlYWRlciwgYnl0ZXMsIHN1Y2Nlc3NTdGVwcywgYW5kIGZhaWx1cmVTdGVwcy5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2lzLWxvY2FsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzTG9jYWwgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnYWJvdXQ6JyB8fCBwcm90b2NvbCA9PT0gJ2Jsb2I6JyB8fCBwcm90b2NvbCA9PT0gJ2RhdGE6J1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICByZXR1cm4gKFxuICAgIChcbiAgICAgIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmXG4gICAgICB1cmxbNV0gPT09ICc6JyAmJlxuICAgICAgdXJsWzBdID09PSAnaCcgJiZcbiAgICAgIHVybFsxXSA9PT0gJ3QnICYmXG4gICAgICB1cmxbMl0gPT09ICd0JyAmJlxuICAgICAgdXJsWzNdID09PSAncCcgJiZcbiAgICAgIHVybFs0XSA9PT0gJ3MnXG4gICAgKSB8fFxuICAgIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNzaW1wbGUtcmFuZ2UtaGVhZGVyLXZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsb3dXaGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUgKHZhbHVlLCBhbGxvd1doaXRlc3BhY2UpIHtcbiAgLy8gMS4gTGV0IGRhdGEgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2Rpbmcgb2YgdmFsdWUuXG4gIC8vIE5vdGU6IGlzb21vcnBoaWMgZGVjb2RpbmcgdGFrZXMgYSBzZXF1ZW5jZSBvZiBieXRlcyAoaWUuIGEgVWludDhBcnJheSkgYW5kIHR1cm5zIGl0IGludG8gYSBzdHJpbmcsXG4gIC8vIG5vdGhpbmcgbW9yZS4gV2Ugb2J2aW91c2x5IGRvbid0IG5lZWQgdG8gZG8gdGhhdCBpZiB2YWx1ZSBpcyBhIHN0cmluZyBhbHJlYWR5LlxuICBjb25zdCBkYXRhID0gdmFsdWVcblxuICAvLyAyLiBJZiBkYXRhIGRvZXMgbm90IHN0YXJ0IHdpdGggXCJieXRlc1wiLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoIWRhdGEuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDMuIExldCBwb3NpdGlvbiBiZSBhIHBvc2l0aW9uIHZhcmlhYmxlIGZvciBkYXRhLCBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIDV0aCBjb2RlIHBvaW50IG9mIGRhdGEuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogNSB9XG5cbiAgLy8gNC4gSWYgYWxsb3dXaGl0ZXNwYWNlIGlzIHRydWUsIGNvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQIHRhYiBvciBzcGFjZSxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyA1LiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gZGF0YSBpcyBub3QgVSswMDNEICg9KSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKGRhdGEuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgIT09IDB4M0QpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLCBmcm9tXG4gIC8vICAgIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIGlmIChhbGxvd1doaXRlc3BhY2UpIHtcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICcgJyxcbiAgICAgIGRhdGEsXG4gICAgICBwb3NpdGlvblxuICAgIClcbiAgfVxuXG4gIC8vIDguIExldCByYW5nZVN0YXJ0IGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEFTQ0lJIGRpZ2l0cyxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCByYW5nZVN0YXJ0ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOS4gTGV0IHJhbmdlU3RhcnRWYWx1ZSBiZSByYW5nZVN0YXJ0LCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VTdGFydCBpcyBub3QgdGhlXG4gIC8vICAgIGVtcHR5IHN0cmluZzsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IHJhbmdlU3RhcnRWYWx1ZSA9IHJhbmdlU3RhcnQubGVuZ3RoID8gTnVtYmVyKHJhbmdlU3RhcnQpIDogbnVsbFxuXG4gIC8vIDEwLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLFxuICAvLyAgICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyAxMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGRhdGEgaXMgbm90IFUrMDAyRCAoLSksIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhLmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pICE9PSAweDJEKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDEzLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiXG4gIC8vICAgICBvciBzcGFjZSwgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICAvLyBOb3RlIGZyb20gS2hhZnJhOiBpdHMgdGhlIHNhbWUgc3RlcCBhcyBpbiAjOCBhZ2FpbiBsb2xcbiAgaWYgKGFsbG93V2hpdGVzcGFjZSkge1xuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnLFxuICAgICAgZGF0YSxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICB9XG5cbiAgLy8gMTQuIExldCByYW5nZUVuZCBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZVxuICAvLyAgICAgQVNDSUkgZGlnaXRzLCBmcm9tIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIC8vIE5vdGUgZnJvbSBLaGFmcmE6IHlvdSB3b3VsZG4ndCBndWVzcyBpdCwgYnV0IHRoaXMgaXMgYWxzbyB0aGUgc2FtZSBzdGVwIGFzICM4XG4gIGNvbnN0IHJhbmdlRW5kID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gMTUuIExldCByYW5nZUVuZFZhbHVlIGJlIHJhbmdlRW5kLCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VFbmRcbiAgLy8gICAgIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nOyBvdGhlcndpc2UgbnVsbC5cbiAgLy8gTm90ZSBmcm9tIEtoYWZyYTogVEhFIFNBTUUgU1RFUCwgQUdBSU4hISFcbiAgLy8gTm90ZTogd2h5IGludGVycHJldCBhcyBhIGRlY2ltYWwgaWYgd2Ugb25seSBjb2xsZWN0IGFzY2lpIGRpZ2l0cz9cbiAgY29uc3QgcmFuZ2VFbmRWYWx1ZSA9IHJhbmdlRW5kLmxlbmd0aCA/IE51bWJlcihyYW5nZUVuZCkgOiBudWxsXG5cbiAgLy8gMTYuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgZGF0YSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxNy4gSWYgcmFuZ2VFbmRWYWx1ZSBhbmQgcmFuZ2VTdGFydFZhbHVlIGFyZSBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAocmFuZ2VFbmRWYWx1ZSA9PT0gbnVsbCAmJiByYW5nZVN0YXJ0VmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxOC4gSWYgcmFuZ2VTdGFydFZhbHVlIGFuZCByYW5nZUVuZFZhbHVlIGFyZSBudW1iZXJzLCBhbmQgcmFuZ2VTdGFydFZhbHVlIGlzXG4gIC8vICAgICBncmVhdGVyIHRoYW4gcmFuZ2VFbmRWYWx1ZSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gTm90ZTogLi4uIHdoZW4gY2FuIHRoZXkgbm90IGJlIG51bWJlcnM/XG4gIGlmIChyYW5nZVN0YXJ0VmFsdWUgPiByYW5nZUVuZFZhbHVlKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTkuIFJldHVybiAocmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlKS5cbiAgcmV0dXJuIHsgcmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNidWlsZC1hLWNvbnRlbnQtcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZVN0YXJ0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2VFbmRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmdWxsTGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29udGVudFJhbmdlIChyYW5nZVN0YXJ0LCByYW5nZUVuZCwgZnVsbExlbmd0aCkge1xuICAvLyAxLiBMZXQgY29udGVudFJhbmdlIGJlIGBieXRlcyBgLlxuICBsZXQgY29udGVudFJhbmdlID0gJ2J5dGVzICdcblxuICAvLyAyLiBBcHBlbmQgcmFuZ2VTdGFydCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLCB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSBpc29tb3JwaGljRW5jb2RlKGAke3JhbmdlU3RhcnR9YClcblxuICAvLyAzLiBBcHBlbmQgMHgyRCAoLSkgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gJy0nXG5cbiAgLy8gNC4gQXBwZW5kIHJhbmdlRW5kLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gaXNvbW9ycGhpY0VuY29kZShgJHtyYW5nZUVuZH1gKVxuXG4gIC8vIDUuIEFwcGVuZCAweDJGICgvKSB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSAnLydcblxuICAvLyA2LiBBcHBlbmQgZnVsbExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkIHRvIGNvbnRlbnRSYW5nZS5cbiAgY29udGVudFJhbmdlICs9IGlzb21vcnBoaWNFbmNvZGUoYCR7ZnVsbExlbmd0aH1gKVxuXG4gIC8vIDcuIFJldHVybiBjb250ZW50UmFuZ2UuXG4gIHJldHVybiBjb250ZW50UmFuZ2Vcbn1cblxuLy8gQSBTdHJlYW0sIHdoaWNoIHBpcGVzIHRoZSByZXNwb25zZSB0byB6bGliLmNyZWF0ZUluZmxhdGUoKSBvclxuLy8gemxpYi5jcmVhdGVJbmZsYXRlUmF3KCkgZGVwZW5kaW5nIG9uIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBCdWZmZXIuXG4vLyBJZiB0aGUgbG93ZXIgYnl0ZSBvZiB0aGUgZmlyc3QgYnl0ZSBpcyAweDA4LCB0aGVuIHRoZSBzdHJlYW0gaXNcbi8vIGludGVycHJldGVkIGFzIGEgemxpYiBzdHJlYW0sIG90aGVyd2lzZSBpdCdzIGludGVycHJldGVkIGFzIGFcbi8vIHJhdyBkZWZsYXRlIHN0cmVhbS5cbmNsYXNzIEluZmxhdGVTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAjemxpYk9wdGlvbnNcblxuICAvKiogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdICovXG4gIGNvbnN0cnVjdG9yICh6bGliT3B0aW9ucykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLiN6bGliT3B0aW9ucyA9IHpsaWJPcHRpb25zXG4gIH1cblxuICBfdHJhbnNmb3JtIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9pbmZsYXRlU3RyZWFtKSB7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtID0gKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDhcbiAgICAgICAgPyB6bGliLmNyZWF0ZUluZmxhdGUodGhpcy4jemxpYk9wdGlvbnMpXG4gICAgICAgIDogemxpYi5jcmVhdGVJbmZsYXRlUmF3KHRoaXMuI3psaWJPcHRpb25zKVxuXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdkYXRhJywgdGhpcy5wdXNoLmJpbmQodGhpcykpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB0aGlzLnB1c2gobnVsbCkpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHRoaXMuZGVzdHJveShlcnIpKVxuICAgIH1cblxuICAgIHRoaXMuX2luZmxhdGVTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgfVxuXG4gIF9maW5hbCAoY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5faW5mbGF0ZVN0cmVhbSkge1xuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbS5lbmQoKVxuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbSA9IG51bGxcbiAgICB9XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdXG4gKiBAcmV0dXJucyB7SW5mbGF0ZVN0cmVhbX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5mbGF0ZSAoemxpYk9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBJbmZsYXRlU3RyZWFtKHpsaWJPcHRpb25zKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWV4dHJhY3QtbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9oZWFkZXJzJykuSGVhZGVyc0xpc3R9IGhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1pbWVUeXBlIChoZWFkZXJzKSB7XG4gIC8vIDEuIExldCBjaGFyc2V0IGJlIG51bGwuXG4gIGxldCBjaGFyc2V0ID0gbnVsbFxuXG4gIC8vIDIuIExldCBlc3NlbmNlIGJlIG51bGwuXG4gIGxldCBlc3NlbmNlID0gbnVsbFxuXG4gIC8vIDMuIExldCBtaW1lVHlwZSBiZSBudWxsLlxuICBsZXQgbWltZVR5cGUgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHZhbHVlcyBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIGBDb250ZW50LVR5cGVgIGZyb20gaGVhZGVycy5cbiAgY29uc3QgdmFsdWVzID0gZ2V0RGVjb2RlU3BsaXQoJ2NvbnRlbnQtdHlwZScsIGhlYWRlcnMpXG5cbiAgLy8gNS4gSWYgdmFsdWVzIGlzIG51bGwsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgLy8gNi4xLiBMZXQgdGVtcG9yYXJ5TWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHZhbHVlLlxuICAgIGNvbnN0IHRlbXBvcmFyeU1pbWVUeXBlID0gcGFyc2VNSU1FVHlwZSh2YWx1ZSlcblxuICAgIC8vIDYuMi4gSWYgdGVtcG9yYXJ5TWltZVR5cGUgaXMgZmFpbHVyZSBvciBpdHMgZXNzZW5jZSBpcyBcIiovKlwiLCB0aGVuIGNvbnRpbnVlLlxuICAgIGlmICh0ZW1wb3JhcnlNaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnIHx8IHRlbXBvcmFyeU1pbWVUeXBlLmVzc2VuY2UgPT09ICcqLyonKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIDYuMy4gU2V0IG1pbWVUeXBlIHRvIHRlbXBvcmFyeU1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gdGVtcG9yYXJ5TWltZVR5cGVcblxuICAgIC8vIDYuNC4gSWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgbm90IGVzc2VuY2UsIHRoZW46XG4gICAgaWYgKG1pbWVUeXBlLmVzc2VuY2UgIT09IGVzc2VuY2UpIHtcbiAgICAgIC8vIDYuNC4xLiBTZXQgY2hhcnNldCB0byBudWxsLlxuICAgICAgY2hhcnNldCA9IG51bGxcblxuICAgICAgLy8gNi40LjIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBleGlzdHMsIHRoZW4gc2V0IGNoYXJzZXQgdG9cbiAgICAgIC8vICAgICAgICBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICBpZiAobWltZVR5cGUucGFyYW1ldGVycy5oYXMoJ2NoYXJzZXQnKSkge1xuICAgICAgICBjaGFyc2V0ID0gbWltZVR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKVxuICAgICAgfVxuXG4gICAgICAvLyA2LjQuMy4gU2V0IGVzc2VuY2UgdG8gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gICAgICBlc3NlbmNlID0gbWltZVR5cGUuZXNzZW5jZVxuICAgIH0gZWxzZSBpZiAoIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKCdjaGFyc2V0JykgJiYgY2hhcnNldCAhPT0gbnVsbCkge1xuICAgICAgLy8gNi41LiBPdGhlcndpc2UsIGlmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBkb2VzIG5vdCBleGlzdCwgYW5kXG4gICAgICAvLyAgICAgIGNoYXJzZXQgaXMgbm9uLW51bGwsIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0gdG8gY2hhcnNldC5cbiAgICAgIG1pbWVUeXBlLnBhcmFtZXRlcnMuc2V0KCdjaGFyc2V0JywgY2hhcnNldClcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBtaW1lVHlwZSBpcyBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAobWltZVR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLXZhbHVlLWdldC1kZWNvZGUtYW5kLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXR0aW5nRGVjb2RpbmdTcGxpdHRpbmcgKHZhbHVlKSB7XG4gIC8vIDEuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIGlzb21vcnBoaWMgZGVjb2RpbmcgdmFsdWUuXG4gIGNvbnN0IGlucHV0ID0gdmFsdWVcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHZhbHVlcyBiZSBhIGxpc3Qgb2Ygc3RyaW5ncywgaW5pdGlhbGx5IGVtcHR5LlxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIC8vIDQuIExldCB0ZW1wb3JhcnlWYWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdGVtcG9yYXJ5VmFsdWUgPSAnJ1xuXG4gIC8vIDUuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDUuMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMjIgKFwiKVxuICAgIC8vICAgICAgb3IgVSswMDJDICgsKSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbiwgdG8gdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnXCInICYmIGNoYXIgIT09ICcsJyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA1LjIuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyA1LjIuMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pID09PSAweDIyKSB7XG4gICAgICAgIC8vIDUuMi4xLjEuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLCB0byB0ZW1wb3JhcnlWYWx1ZS5cbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gNS4yLjEuMi4gSWYgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBjb250aW51ZS5cbiAgICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4yLjIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyA1LjIuMi4xLiBBc3NlcnQ6IHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpcyBVKzAwMkMgKCwpLlxuICAgICAgICBhc3NlcnQoaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgPT09IDB4MkMpXG5cbiAgICAgICAgLy8gNS4yLjIuMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4zLiBSZW1vdmUgYWxsIEhUVFAgdGFiIG9yIHNwYWNlIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgPSByZW1vdmVDaGFycyh0ZW1wb3JhcnlWYWx1ZSwgdHJ1ZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgLy8gNS40LiBBcHBlbmQgdGVtcG9yYXJ5VmFsdWUgdG8gdmFsdWVzLlxuICAgIHZhbHVlcy5wdXNoKHRlbXBvcmFyeVZhbHVlKVxuXG4gICAgLy8gNS42LiBTZXQgdGVtcG9yYXJ5VmFsdWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICB0ZW1wb3JhcnlWYWx1ZSA9ICcnXG4gIH1cblxuICAvLyA2LiBSZXR1cm4gdmFsdWVzLlxuICByZXR1cm4gdmFsdWVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXQtZGVjb2RlLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBsb3dlcmNhc2UgaGVhZGVyIG5hbWVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2hlYWRlcnMnKS5IZWFkZXJzTGlzdH0gbGlzdFxuICovXG5mdW5jdGlvbiBnZXREZWNvZGVTcGxpdCAobmFtZSwgbGlzdCkge1xuICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuICBjb25zdCB2YWx1ZSA9IGxpc3QuZ2V0KG5hbWUsIHRydWUpXG5cbiAgLy8gMi4gSWYgdmFsdWUgaXMgbnVsbCwgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIHZhbHVlLlxuICByZXR1cm4gZ2V0dGluZ0RlY29kaW5nU3BsaXR0aW5nKHZhbHVlKVxufVxuXG5jb25zdCB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIHV0ZjhEZWNvZGVCeXRlcyAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAxLiBMZXQgYnVmZmVyIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyB0aHJlZSBieXRlcyBmcm9tXG4gIC8vICAgIGlvUXVldWUsIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG5cbiAgLy8gMi4gSWYgYnVmZmVyIGlzIDB4RUYgMHhCQiAweEJGLCB0aGVuIHJlYWQgdGhyZWVcbiAgLy8gICAgYnl0ZXMgZnJvbSBpb1F1ZXVlLiAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgaWYgKGJ1ZmZlclswXSA9PT0gMHhFRiAmJiBidWZmZXJbMV0gPT09IDB4QkIgJiYgYnVmZmVyWzJdID09PSAweEJGKSB7XG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDMpXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBVVEYtOFx1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuICBjb25zdCBvdXRwdXQgPSB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuY2xhc3MgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2Uge1xuICBnZXQgYmFzZVVybCAoKSB7XG4gICAgcmV0dXJuIGdldEdsb2JhbE9yaWdpbigpXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgfVxuXG4gIHBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxufVxuXG5jbGFzcyBFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IHtcbiAgc2V0dGluZ3NPYmplY3QgPSBuZXcgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2UoKVxufVxuXG5jb25zdCBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0ID0gbmV3IEVudmlyb25tZW50U2V0dGluZ3NPYmplY3QoKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNWYWxpZEVuY29kZWRVUkwsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNsYW1wQW5kQ29hcnNlbkNvbm5lY3Rpb25UaW1pbmdJbmZvLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIFRBT0NoZWNrLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICByZXNwb25zZVVSTCxcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgaXNCbG9iTGlrZSxcbiAgaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5LFxuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXRlcmF0b3JNaXhpbixcbiAgY3JlYXRlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICBieXRlc01hdGNoLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSGFzSHR0cHNTY2hlbWUsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICByZWFkQWxsQnl0ZXMsXG4gIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUsXG4gIGJ1aWxkQ29udGVudFJhbmdlLFxuICBwYXJzZU1ldGFkYXRhLFxuICBjcmVhdGVJbmZsYXRlLFxuICBleHRyYWN0TWltZVR5cGUsXG4gIGdldERlY29kZVNwbGl0LFxuICB1dGY4RGVjb2RlQnl0ZXMsXG4gIGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtIZWFkZXJzOiBTeW1ib2woJ2hlYWRlcnMnKSxcbiAga1NpZ25hbDogU3ltYm9sKCdzaWduYWwnKSxcbiAga1N0YXRlOiBTeW1ib2woJ3N0YXRlJyksXG4gIGtEaXNwYXRjaGVyOiBTeW1ib2woJ2Rpc3BhdGNoZXInKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJsb2IsIEZpbGUgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxuLy8gVE9ETyhAS2hhZnJhRGV2KTogcmVtb3ZlXG5jbGFzcyBGaWxlTGlrZSB7XG4gIGNvbnN0cnVjdG9yIChibG9iTGlrZSwgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRPRE86IGFyZ3VtZW50IGlkbCB0eXBlIGNoZWNrXG5cbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgVE9ET1xuICAgIGNvbnN0IHQgPSBvcHRpb25zLnR5cGVcblxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIC8vICAgIFRPRE9cblxuICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgIGNvbnN0IGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA/PyBEYXRlLm5vdygpXG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBibG9iTGlrZSxcbiAgICAgIG5hbWU6IG4sXG4gICAgICB0eXBlOiB0LFxuICAgICAgbGFzdE1vZGlmaWVkOiBkXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnN0cmVhbSguLi5hcmdzKVxuICB9XG5cbiAgYXJyYXlCdWZmZXIgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UuYXJyYXlCdWZmZXIoLi4uYXJncylcbiAgfVxuXG4gIHNsaWNlICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNsaWNlKC4uLmFyZ3MpXG4gIH1cblxuICB0ZXh0ICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnRleHQoLi4uYXJncylcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2l6ZVxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50eXBlXG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuICdGaWxlJ1xuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2IgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKEJsb2IpXG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAob2JqZWN0IGluc3RhbmNlb2YgRmlsZSkgfHxcbiAgICAoXG4gICAgICBvYmplY3QgJiZcbiAgICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZSdcbiAgICApXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc0Jsb2JMaWtlLCBpdGVyYXRvck1peGluIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTmF0aXZlRmlsZVxuXG4vLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2Zvcm1kYXRhXG5jbGFzcyBGb3JtRGF0YSB7XG4gIGNvbnN0cnVjdG9yIChmb3JtKSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnRm9ybURhdGEuYXBwZW5kJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHByZWZpeCwgJ3ZhbHVlJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZW5hbWUsIHByZWZpeCwgJ2ZpbGVuYW1lJylcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoXG4gICAgLy8gbmFtZSwgdmFsdWUsIGFuZCBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBBcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgfVxuXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0Zvcm1EYXRhLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyBUaGUgZGVsZXRlKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzIHdob3NlIG5hbWVcbiAgICAvLyBpcyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSB0aGlzW2tTdGF0ZV0uZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gIH1cblxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXRBbGwnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gdGhlIGVtcHR5IGxpc3QuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGVudHJpZXMgd2hvc2UgbmFtZSBpcyBuYW1lLCBpbiBvcmRlcixcbiAgICAvLyBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudmFsdWUpXG4gIH1cblxuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5oYXMnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gVGhlIGhhcyhuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFuIGVudHJ5XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3Q7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpICE9PSAtMVxuICB9XG5cbiAgc2V0IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5zZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCBwcmVmaXgpXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBUaGUgc2V0KG5hbWUsIHZhbHVlKSBhbmQgc2V0KG5hbWUsIGJsb2JWYWx1ZSwgZmlsZW5hbWUpIG1ldGhvZCBzdGVwc1xuICAgIC8vIGFyZTpcblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCBwcmVmaXgsICduYW1lJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAnbmFtZScpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlbmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aCBuYW1lLCB2YWx1ZSwgYW5kXG4gICAgLy8gZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCB3aG9zZSBuYW1lIGlzIG5hbWUsIHRoZW5cbiAgICAvLyByZXBsYWNlIHRoZSBmaXJzdCBzdWNoIGVudHJ5IHdpdGggZW50cnkgYW5kIHJlbW92ZSB0aGUgb3RoZXJzLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSBbXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZSgwLCBpZHgpLFxuICAgICAgICBlbnRyeSxcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKGlkeCArIDEpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgYXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgICB9XG4gIH1cblxuICBbbm9kZVV0aWwuaW5zcGVjdC5jdXN0b21dIChkZXB0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpc1trU3RhdGVdLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgaWYgKGFbYi5uYW1lXSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhW2IubmFtZV0pKSB7XG4gICAgICAgICAgYVtiLm5hbWVdLnB1c2goYi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhW2IubmFtZV0gPSBbYVtiLm5hbWVdLCBiLnZhbHVlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW2IubmFtZV0gPSBiLnZhbHVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhXG4gICAgfSwgeyBfX3Byb3RvX186IG51bGwgfSlcblxuICAgIG9wdGlvbnMuZGVwdGggPz89IGRlcHRoXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IG91dHB1dCA9IG5vZGVVdGlsLmZvcm1hdFdpdGhPcHRpb25zKG9wdGlvbnMsIHN0YXRlKVxuXG4gICAgLy8gcmVtb3ZlIFtPYmplY3QgbnVsbCBwcm90b3R5cGVdXG4gICAgcmV0dXJuIGBGb3JtRGF0YSAke291dHB1dC5zbGljZShvdXRwdXQuaW5kZXhPZignXScpICsgMil9YFxuICB9XG59XG5cbml0ZXJhdG9yTWl4aW4oJ0Zvcm1EYXRhJywgRm9ybURhdGEsIGtTdGF0ZSwgJ25hbWUnLCAndmFsdWUnKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGb3JtRGF0YS5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0QWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Zvcm1EYXRhJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2NyZWF0ZS1hbi1lbnRyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfEJsb2J9IHZhbHVlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGZpbGVuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBtYWtlRW50cnkgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSkge1xuICAvLyAxLiBTZXQgbmFtZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbmFtZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuXG4gIC8vIDIuIElmIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGVuIHNldCB2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmdcbiAgLy8gICAgdmFsdWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIElmIHZhbHVlIGlzIG5vdCBhIEZpbGUgb2JqZWN0LCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIHZhbHVlIGlzIFwiYmxvYlwiXG4gICAgaWYgKCFpc0ZpbGVMaWtlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSBpcyBmaWxlbmFtZS5cbiAgICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLyoqIEB0eXBlIHtGaWxlUHJvcGVydHlCYWd9ICovXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZFxuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgTmF0aXZlRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhLCBtYWtlRW50cnkgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzVVNWU3RyaW5nLCBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyB1dGY4RGVjb2RlQnl0ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEhUVFBfVE9LRU5fQ09ERVBPSU5UUywgaXNvbW9ycGhpY0RlY29kZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IG1ha2VFbnRyeSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IEZpbGU6IE5vZGVGaWxlIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTm9kZUZpbGVcblxuY29uc3QgZm9ybURhdGFOYW1lQnVmZmVyID0gQnVmZmVyLmZyb20oJ2Zvcm0tZGF0YTsgbmFtZT1cIicpXG5jb25zdCBmaWxlbmFtZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKCc7IGZpbGVuYW1lJylcbmNvbnN0IGRkID0gQnVmZmVyLmZyb20oJy0tJylcbmNvbnN0IGRkY3JsZiA9IEJ1ZmZlci5mcm9tKCctLVxcclxcbicpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJzXG4gKi9cbmZ1bmN0aW9uIGlzQXNjaWlTdHJpbmcgKGNoYXJzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGNoYXJzLmNoYXJDb2RlQXQoaSkgJiB+MHg3RikgIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNtdWx0aXBhcnQtZm9ybS1kYXRhLWJvdW5kYXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRhcnlcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb3VuZGFyeSAoYm91bmRhcnkpIHtcbiAgY29uc3QgbGVuZ3RoID0gYm91bmRhcnkubGVuZ3RoXG5cbiAgLy8gLSBpdHMgbGVuZ3RoIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMjcgYW5kIGxlc3NlciBvciBlcXVhbCB0byA3MCwgYW5kXG4gIGlmIChsZW5ndGggPCAyNyB8fCBsZW5ndGggPiA3MCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gLSBpdCBpcyBjb21wb3NlZCBieSBieXRlcyBpbiB0aGUgcmFuZ2VzIDB4MzAgdG8gMHgzOSwgMHg0MSB0byAweDVBLCBvclxuICAvLyAgIDB4NjEgdG8gMHg3QSwgaW5jbHVzaXZlIChBU0NJSSBhbHBoYW51bWVyaWMpLCBvciB3aGljaCBhcmUgMHgyNyAoJyksXG4gIC8vICAgMHgyRCAoLSkgb3IgMHg1RiAoXykuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjcCA9IGJvdW5kYXJ5LmNoYXJDb2RlQXQoaSlcblxuICAgIGlmICghKFxuICAgICAgKGNwID49IDB4MzAgJiYgY3AgPD0gMHgzOSkgfHxcbiAgICAgIChjcCA+PSAweDQxICYmIGNwIDw9IDB4NWEpIHx8XG4gICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdhKSB8fFxuICAgICAgY3AgPT09IDB4MjcgfHxcbiAgICAgIGNwID09PSAweDJkIHx8XG4gICAgICBjcCA9PT0gMHg1ZlxuICAgICkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2FuZHJldWJvdGVsbGEuZ2l0aHViLmlvL211bHRpcGFydC1mb3JtLWRhdGEvI211bHRpcGFydC1mb3JtLWRhdGEtcGFyc2VyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW5wdXRcbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTxpbXBvcnQoJy4vZGF0YS11cmwnKVsncGFyc2VNSU1FVHlwZSddPn0gbWltZVR5cGVcbiAqL1xuZnVuY3Rpb24gbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgKGlucHV0LCBtaW1lVHlwZSkge1xuICAvLyAxLiBBc3NlcnQ6IG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLlxuICBhc3NlcnQobWltZVR5cGUgIT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZS5lc3NlbmNlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG5cbiAgY29uc3QgYm91bmRhcnlTdHJpbmcgPSBtaW1lVHlwZS5wYXJhbWV0ZXJzLmdldCgnYm91bmRhcnknKVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0gZG9lcyBub3QgZXhpc3QsIHJldHVybiBmYWlsdXJlLlxuICAvLyAgICBPdGhlcndpc2UsIGxldCBib3VuZGFyeSBiZSB0aGUgcmVzdWx0IG9mIFVURi04IGRlY29kaW5nIG1pbWVUeXBlXHUyMDE5c1xuICAvLyAgICBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0uXG4gIGlmIChib3VuZGFyeVN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYm91bmRhcnkgPSBCdWZmZXIuZnJvbShgLS0ke2JvdW5kYXJ5U3RyaW5nfWAsICd1dGY4JylcblxuICAvLyAzLiBMZXQgZW50cnkgbGlzdCBiZSBhbiBlbXB0eSBlbnRyeSBsaXN0LlxuICBjb25zdCBlbnRyeUxpc3QgPSBbXVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIgdG8gYSBieXRlIGluIGlucHV0LCBpbml0aWFsbHkgcG9pbnRpbmcgYXRcbiAgLy8gICAgdGhlIGZpcnN0IGJ5dGUuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gTm90ZTogdW5kaWNpIGFkZGl0aW9uLCBhbGxvd3MgbGVhZGluZyBhbmQgdHJhaWxpbmcgQ1JMRnMuXG4gIHdoaWxlIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcbiAgfVxuXG4gIGxldCB0cmFpbGluZyA9IGlucHV0Lmxlbmd0aFxuXG4gIHdoaWxlIChpbnB1dFt0cmFpbGluZyAtIDFdID09PSAweDBhICYmIGlucHV0W3RyYWlsaW5nIC0gMl0gPT09IDB4MGQpIHtcbiAgICB0cmFpbGluZyAtPSAyXG4gIH1cblxuICBpZiAodHJhaWxpbmcgIT09IGlucHV0Lmxlbmd0aCkge1xuICAgIGlucHV0ID0gaW5wdXQuc3ViYXJyYXkoMCwgdHJhaWxpbmcpXG4gIH1cblxuICAvLyA1LiBXaGlsZSB0cnVlOlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIDUuMS4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aCAweDJEIDB4MkRcbiAgICAvLyAgICAgIChgLS1gKSBmb2xsb3dlZCBieSBib3VuZGFyeSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyICsgdGhlIGxlbmd0aCBvZlxuICAgIC8vICAgICAgYm91bmRhcnkuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgLy8gTm90ZTogYm91bmRhcnkgaXMgcGFkZGVkIHdpdGggMiBkYXNoZXMgYWxyZWFkeSwgbm8gbmVlZCB0byBhZGQgMi5cbiAgICBpZiAoaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIHBvc2l0aW9uLnBvc2l0aW9uICsgYm91bmRhcnkubGVuZ3RoKS5lcXVhbHMoYm91bmRhcnkpKSB7XG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbiArPSBib3VuZGFyeS5sZW5ndGhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDUuMi4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIHRoZSBzZXF1ZW5jZSBvZiBieXRlcyAweDJEIDB4MkQgMHgwRCAweDBBXG4gICAgLy8gICAgICAoYC0tYCBmb2xsb3dlZCBieSBDUiBMRikgZm9sbG93ZWQgYnkgdGhlIGVuZCBvZiBpbnB1dCwgcmV0dXJuIGVudHJ5IGxpc3QuXG4gICAgLy8gTm90ZTogYSBib2R5IGRvZXMgTk9UIG5lZWQgdG8gZW5kIHdpdGggQ1JMRi4gSXQgY2FuIGVuZCB3aXRoIC0tLlxuICAgIGlmIChcbiAgICAgIChwb3NpdGlvbi5wb3NpdGlvbiA9PT0gaW5wdXQubGVuZ3RoIC0gMiAmJiBidWZmZXJTdGFydHNXaXRoKGlucHV0LCBkZCwgcG9zaXRpb24pKSB8fFxuICAgICAgKHBvc2l0aW9uLnBvc2l0aW9uID09PSBpbnB1dC5sZW5ndGggLSA0ICYmIGJ1ZmZlclN0YXJ0c1dpdGgoaW5wdXQsIGRkY3JsZiwgcG9zaXRpb24pKVxuICAgICkge1xuICAgICAgcmV0dXJuIGVudHJ5TGlzdFxuICAgIH1cblxuICAgIC8vIDUuMy4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MERcbiAgICAvLyAgICAgIDB4MEEgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSAhPT0gMHgwZCB8fCBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbiArIDFdICE9PSAweDBhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gNS40LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIG5ld2xpbmUuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcblxuICAgIC8vIDUuNS4gTGV0IG5hbWUsIGZpbGVuYW1lIGFuZCBjb250ZW50VHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgICAvLyAgICAgIG11bHRpcGFydC9mb3JtLWRhdGEgaGVhZGVycyBvbiBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHRcbiAgICAvLyAgICAgIGlzIG5vdCBmYWlsdXJlLiBPdGhlcndpc2UsIHJldHVybiBmYWlsdXJlLlxuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFIZWFkZXJzKGlucHV0LCBwb3NpdGlvbilcblxuICAgIGlmIChyZXN1bHQgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIGxldCB7IG5hbWUsIGZpbGVuYW1lLCBjb250ZW50VHlwZSwgZW5jb2RpbmcgfSA9IHJlc3VsdFxuXG4gICAgLy8gNS42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIGVtcHR5IGxpbmUgdGhhdCBtYXJrc1xuICAgIC8vICAgICAgdGhlIGVuZCBvZiB0aGUgaGVhZGVycy4pXG4gICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuXG4gICAgLy8gNS43LiBMZXQgYm9keSBiZSB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgICBsZXQgYm9keVxuXG4gICAgLy8gNS44LiBCb2R5IGxvb3A6IFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gICAgLy8gVE9ETzogdGhlIHN0ZXBzIGhlcmUgYXJlIGNvbXBsZXRlbHkgd3JvbmdcbiAgICB7XG4gICAgICBjb25zdCBib3VuZGFyeUluZGV4ID0gaW5wdXQuaW5kZXhPZihib3VuZGFyeS5zdWJhcnJheSgyKSwgcG9zaXRpb24ucG9zaXRpb24pXG5cbiAgICAgIGlmIChib3VuZGFyeUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIGJvZHkgPSBpbnB1dC5zdWJhcnJheShwb3NpdGlvbi5wb3NpdGlvbiwgYm91bmRhcnlJbmRleCAtIDQpXG5cbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IGJvZHkubGVuZ3RoXG5cbiAgICAgIC8vIE5vdGU6IHBvc2l0aW9uIG11c3QgYmUgYWR2YW5jZWQgYnkgdGhlIGJvZHkncyBsZW5ndGggYmVmb3JlIGJlaW5nXG4gICAgICAvLyBkZWNvZGVkLCBvdGhlcndpc2UgdGhlIHBhcnNpbmcgd2lsbCBmYWlsLlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0Jykge1xuICAgICAgICBib2R5ID0gQnVmZmVyLmZyb20oYm9keS50b1N0cmluZygpLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjkuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgIC8vICAgICAgMHgwRCAweDBBIChDUiBMRiksIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGFkdmFuY2UgcG9zaXRpb24gYnkgMi5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkIHx8IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cblxuICAgIC8vIDUuMTAuIElmIGZpbGVuYW1lIGlzIG5vdCBudWxsOlxuICAgIGxldCB2YWx1ZVxuXG4gICAgaWYgKGZpbGVuYW1lICE9PSBudWxsKSB7XG4gICAgICAvLyA1LjEwLjEuIElmIGNvbnRlbnRUeXBlIGlzIG51bGwsIHNldCBjb250ZW50VHlwZSB0byBcInRleHQvcGxhaW5cIi5cbiAgICAgIGNvbnRlbnRUeXBlID8/PSAndGV4dC9wbGFpbidcblxuICAgICAgLy8gNS4xMC4yLiBJZiBjb250ZW50VHlwZSBpcyBub3QgYW4gQVNDSUkgc3RyaW5nLCBzZXQgY29udGVudFR5cGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgLy8gTm90ZTogYGJ1ZmZlci5pc0FzY2lpYCBjYW4gYmUgdXNlZCBhdCB6ZXJvLWNvc3QsIGJ1dCBjb252ZXJ0aW5nIGEgc3RyaW5nIHRvIGEgYnVmZmVyIGlzIGEgaGlnaCBvdmVyaGVhZC5cbiAgICAgIC8vIENvbnRlbnQtVHlwZSBpcyBhIHJlbGF0aXZlbHkgc21hbGwgc3RyaW5nLCBzbyBpdCBpcyBmYXN0ZXIgdG8gdXNlIGBTdHJpbmcjY2hhckNvZGVBdGAuXG4gICAgICBpZiAoIWlzQXNjaWlTdHJpbmcoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gJydcbiAgICAgIH1cblxuICAgICAgLy8gNS4xMC4zLiBMZXQgdmFsdWUgYmUgYSBuZXcgRmlsZSBvYmplY3Qgd2l0aCBuYW1lIGZpbGVuYW1lLCB0eXBlIGNvbnRlbnRUeXBlLCBhbmQgYm9keSBib2R5LlxuICAgICAgdmFsdWUgPSBuZXcgRmlsZShbYm9keV0sIGZpbGVuYW1lLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDUuMTEuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNS4xMS4xLiBMZXQgdmFsdWUgYmUgdGhlIFVURi04IGRlY29kaW5nIHdpdGhvdXQgQk9NIG9mIGJvZHkuXG4gICAgICB2YWx1ZSA9IHV0ZjhEZWNvZGVCeXRlcyhCdWZmZXIuZnJvbShib2R5KSlcbiAgICB9XG5cbiAgICAvLyA1LjEyLiBBc3NlcnQ6IG5hbWUgaXMgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIGFuZCB2YWx1ZSBpcyBlaXRoZXIgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIG9yIGEgRmlsZSBvYmplY3QuXG4gICAgYXNzZXJ0KGlzVVNWU3RyaW5nKG5hbWUpKVxuICAgIGFzc2VydCgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBpc1VTVlN0cmluZyh2YWx1ZSkpIHx8IGlzRmlsZUxpa2UodmFsdWUpKVxuXG4gICAgLy8gNS4xMy4gQ3JlYXRlIGFuIGVudHJ5IHdpdGggbmFtZSBhbmQgdmFsdWUsIGFuZCBhcHBlbmQgaXQgdG8gZW50cnkgbGlzdC5cbiAgICBlbnRyeUxpc3QucHVzaChtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1tdWx0aXBhcnQtZm9ybS1kYXRhLWhlYWRlcnNcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VNdWx0aXBhcnRGb3JtRGF0YUhlYWRlcnMgKGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlIGJlIG51bGwuXG4gIGxldCBuYW1lID0gbnVsbFxuICBsZXQgZmlsZW5hbWUgPSBudWxsXG4gIGxldCBjb250ZW50VHlwZSA9IG51bGxcbiAgbGV0IGVuY29kaW5nID0gbnVsbFxuXG4gIC8vIDIuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMi4xLiBJZiBwb3NpdGlvbiBwb2ludHMgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQSAoQ1IgTEYpOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgICAgLy8gMi4xLjEuIElmIG5hbWUgaXMgbnVsbCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIC8vIDIuMS4yLiBSZXR1cm4gbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlLlxuICAgICAgcmV0dXJuIHsgbmFtZSwgZmlsZW5hbWUsIGNvbnRlbnRUeXBlLCBlbmNvZGluZyB9XG4gICAgfVxuXG4gICAgLy8gMi4yLiBMZXQgaGVhZGVyIG5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmVcbiAgICAvLyAgICAgIG5vdCAweDBBIChMRiksIDB4MEQgKENSKSBvciAweDNBICg6KSwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgbGV0IGhlYWRlck5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQgJiYgY2hhciAhPT0gMHgzYSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAyLjMuIFJlbW92ZSBhbnkgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb3IgZW5kIG9mIGhlYWRlciBuYW1lLlxuICAgIGhlYWRlck5hbWUgPSByZW1vdmVDaGFycyhoZWFkZXJOYW1lLCB0cnVlLCB0cnVlLCAoY2hhcikgPT4gY2hhciA9PT0gMHg5IHx8IGNoYXIgPT09IDB4MjApXG5cbiAgICAvLyAyLjQuIElmIGhlYWRlciBuYW1lIGRvZXMgbm90IG1hdGNoIHRoZSBmaWVsZC1uYW1lIHRva2VuIHByb2R1Y3Rpb24sIHJldHVybiBmYWlsdXJlLlxuICAgIGlmICghSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QoaGVhZGVyTmFtZS50b1N0cmluZygpKSkge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDIuNS4gSWYgdGhlIGJ5dGUgYXQgcG9zaXRpb24gaXMgbm90IDB4M0EgKDopLCByZXR1cm4gZmFpbHVyZS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDNhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gMi42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gMi43LiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmUgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZ2l2ZW4gcG9zaXRpb24uXG4gICAgLy8gICAgICAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAweDIwIHx8IGNoYXIgPT09IDB4MDksXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi44LiBCeXRlLWxvd2VyY2FzZSBoZWFkZXIgbmFtZSBhbmQgc3dpdGNoIG9uIHRoZSByZXN1bHQ6XG4gICAgc3dpdGNoIChidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGhlYWRlck5hbWUpKSB7XG4gICAgICBjYXNlICdjb250ZW50LWRpc3Bvc2l0aW9uJzoge1xuICAgICAgICAvLyAxLiBTZXQgbmFtZSBhbmQgZmlsZW5hbWUgdG8gbnVsbC5cbiAgICAgICAgbmFtZSA9IGZpbGVuYW1lID0gbnVsbFxuXG4gICAgICAgIC8vIDIuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgICAgICAvLyAgICBgZm9ybS1kYXRhOyBuYW1lPVwiYCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgIGlmICghYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZm9ybURhdGFOYW1lQnVmZmVyLCBwb3NpdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIHNvIGl0IHBvaW50cyBhdCB0aGUgYnl0ZSBhZnRlciB0aGUgbmV4dCAweDIyIChcIilcbiAgICAgICAgLy8gICAgYnl0ZSAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDE3XG5cbiAgICAgICAgLy8gNC4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBuYW1lIGdpdmVuXG4gICAgICAgIC8vICAgIGlucHV0IGFuZCBwb3NpdGlvbiwgaWYgdGhlIHJlc3VsdCBpcyBub3QgZmFpbHVyZS4gT3RoZXJ3aXNlLCByZXR1cm5cbiAgICAgICAgLy8gICAgZmFpbHVyZS5cbiAgICAgICAgbmFtZSA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFOYW1lKGlucHV0LCBwb3NpdGlvbilcblxuICAgICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIElmIHBvc2l0aW9uIHBvaW50cyB0byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHN0YXJ0aW5nIHdpdGggYDsgZmlsZW5hbWU9XCJgOlxuICAgICAgICBpZiAoYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZmlsZW5hbWVCdWZmZXIsIHBvc2l0aW9uKSkge1xuICAgICAgICAgIC8vIE5vdGU6IHVuZGljaSBhbHNvIGhhbmRsZXMgZmlsZW5hbWUqXG4gICAgICAgICAgbGV0IGNoZWNrID0gcG9zaXRpb24ucG9zaXRpb24gKyBmaWxlbmFtZUJ1ZmZlci5sZW5ndGhcblxuICAgICAgICAgIGlmIChpbnB1dFtjaGVja10gPT09IDB4MmEpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDFcbiAgICAgICAgICAgIGNoZWNrICs9IDFcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5wdXRbY2hlY2tdICE9PSAweDNkIHx8IGlucHV0W2NoZWNrICsgMV0gIT09IDB4MjIpIHsgLy8gPVwiXG4gICAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBzbyBpdCBwb2ludHMgYXQgdGhlIGJ5dGUgYWZ0ZXIgdGhlIG5leHQgMHgyMiAoXCIpIGJ5dGVcbiAgICAgICAgICAvLyAgICAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMTJcblxuICAgICAgICAgIC8vIDIuIFNldCBmaWxlbmFtZSB0byB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBtdWx0aXBhcnQvZm9ybS1kYXRhIG5hbWUgZ2l2ZW5cbiAgICAgICAgICAvLyAgICBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHQgaXMgbm90IGZhaWx1cmUuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZShpbnB1dCwgcG9zaXRpb24pXG5cbiAgICAgICAgICBpZiAoZmlsZW5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10eXBlJzoge1xuICAgICAgICAvLyAxLiBMZXQgaGVhZGVyIHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlXG4gICAgICAgIC8vICAgIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gMi4gUmVtb3ZlIGFueSBIVFRQIHRhYiBvciBzcGFjZSBieXRlcyBmcm9tIHRoZSBlbmQgb2YgaGVhZGVyIHZhbHVlLlxuICAgICAgICBoZWFkZXJWYWx1ZSA9IHJlbW92ZUNoYXJzKGhlYWRlclZhbHVlLCBmYWxzZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgICAgIC8vIDMuIFNldCBjb250ZW50VHlwZSB0byB0aGUgaXNvbW9ycGhpYyBkZWNvZGluZyBvZiBoZWFkZXIgdmFsdWUuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gaXNvbW9ycGhpY0RlY29kZShoZWFkZXJWYWx1ZSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyc6IHtcbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgaGVhZGVyVmFsdWUgPSByZW1vdmVDaGFycyhoZWFkZXJWYWx1ZSwgZmFsc2UsIHRydWUsIChjaGFyKSA9PiBjaGFyID09PSAweDkgfHwgY2hhciA9PT0gMHgyMClcblxuICAgICAgICBlbmNvZGluZyA9IGlzb21vcnBoaWNEZWNvZGUoaGVhZGVyVmFsdWUpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgLy8gKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgICAgIGNvbGxlY3RBU2VxdWVuY2VPZkJ5dGVzKFxuICAgICAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQsXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuOS4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQVxuICAgIC8vICAgICAgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyIChwYXN0IHRoZSBuZXdsaW5lKS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkICYmIGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1hLW11bHRpcGFydC1mb3JtLWRhdGEtbmFtZVxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZSAoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIC8vIDEuIEFzc2VydDogVGhlIGJ5dGUgYXQgKHBvc2l0aW9uIC0gMSkgaXMgMHgyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gLSAxXSA9PT0gMHgyMilcblxuICAvLyAyLiBMZXQgbmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBieXRlcyB0aGF0IGFyZSBub3QgMHgwQSAoTEYpLCAweDBEIChDUikgb3IgMHgyMiAoXCIpLCBnaXZlbiBwb3NpdGlvbi5cbiAgLyoqIEB0eXBlIHtzdHJpbmcgfCBCdWZmZXJ9ICovXG4gIGxldCBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCAmJiBjaGFyICE9PSAweDIyLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyAzLiBJZiB0aGUgYnl0ZSBhdCBwb3NpdGlvbiBpcyBub3QgMHgyMiAoXCIpLCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBhZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gIT09IDB4MjIpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBuYW1lIGNvdWxkIGJlICdmYWlsdXJlJ1xuICB9IGVsc2Uge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDQuIFJlcGxhY2UgYW55IG9jY3VycmVuY2Ugb2YgdGhlIGZvbGxvd2luZyBzdWJzZXF1ZW5jZXMgaW4gbmFtZSB3aXRoIHRoZSBnaXZlbiBieXRlOlxuICAvLyAtIGAlMEFgOiAweDBBIChMRilcbiAgLy8gLSBgJTBEYDogMHgwRCAoQ1IpXG4gIC8vIC0gYCUyMmA6IDB4MjIgKFwiKVxuICBuYW1lID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5hbWUpXG4gICAgLnJlcGxhY2UoLyUwQS9pZywgJ1xcbicpXG4gICAgLnJlcGxhY2UoLyUwRC9pZywgJ1xccicpXG4gICAgLnJlcGxhY2UoLyUyMi9nLCAnXCInKVxuXG4gIC8vIDUuIFJldHVybiB0aGUgVVRGLTggZGVjb2Rpbmcgd2l0aG91dCBCT00gb2YgbmFtZS5cbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBudW1iZXIpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgbGV0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICB3aGlsZSAoc3RhcnQgPCBpbnB1dC5sZW5ndGggJiYgY29uZGl0aW9uKGlucHV0W3N0YXJ0XSkpIHtcbiAgICArK3N0YXJ0XG4gIH1cblxuICByZXR1cm4gaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIChwb3NpdGlvbi5wb3NpdGlvbiA9IHN0YXJ0KSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKGJ1ZiwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gYnVmLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgYnVmLmxlbmd0aCAmJiBwcmVkaWNhdGUoYnVmW2xlYWRdKSkgbGVhZCsrXG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICB3aGlsZSAodHJhaWwgPiAwICYmIHByZWRpY2F0ZShidWZbdHJhaWxdKSkgdHJhaWwtLVxuICB9XG5cbiAgcmV0dXJuIGxlYWQgPT09IDAgJiYgdHJhaWwgPT09IGJ1Zi5sZW5ndGggLSAxID8gYnVmIDogYnVmLnN1YmFycmF5KGxlYWQsIHRyYWlsICsgMSlcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYge0BwYXJhbSBidWZmZXJ9IHN0YXJ0cyB3aXRoIHtAcGFyYW0gc3RhcnR9XG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc3RhcnRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlclN0YXJ0c1dpdGggKGJ1ZmZlciwgc3RhcnQsIHBvc2l0aW9uKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgc3RhcnQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0W2ldICE9PSBidWZmZXJbcG9zaXRpb24ucG9zaXRpb24gKyBpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG11bHRpcGFydEZvcm1EYXRhUGFyc2VyLFxuICB2YWxpZGF0ZUJvdW5kYXJ5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQmxvYkxpa2UsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGV4dHJhY3RNaW1lVHlwZSxcbiAgdXRmOERlY29kZUJ5dGVzXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGlzRXJyb3JlZCwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsL3R5cGVzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsgbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEtcGFyc2VyJylcbmxldCByYW5kb21cblxudHJ5IHtcbiAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnbm9kZTpjcnlwdG8nKVxuICByYW5kb20gPSAobWF4KSA9PiBjcnlwdG8ucmFuZG9tSW50KDAsIG1heClcbn0gY2F0Y2gge1xuICByYW5kb20gPSAobWF4KSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKG1heCkpXG59XG5cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuY29uc3QgaGFzRmluYWxpemF0aW9uUmVnaXN0cnkgPSBnbG9iYWxUaGlzLkZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MTgnKSAhPT0gMFxubGV0IHN0cmVhbVJlZ2lzdHJ5XG5cbmlmIChoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSkge1xuICBzdHJlYW1SZWdpc3RyeSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgod2Vha1JlZikgPT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHdlYWtSZWYuZGVyZWYoKVxuICAgIGlmIChzdHJlYW0gJiYgIXN0cmVhbS5sb2NrZWQgJiYgIWlzRGlzdHVyYmVkKHN0cmVhbSkgJiYgIWlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICBzdHJlYW0uY2FuY2VsKCdSZXNwb25zZSBvYmplY3QgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQnKS5jYXRjaChub29wKVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHN0cmVhbSBiZSBudWxsLlxuICBsZXQgc3RyZWFtID0gbnVsbFxuXG4gIC8vIDIuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbiBzZXQgc3RyZWFtIHRvIG9iamVjdC5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgc3RyZWFtID0gb2JqZWN0XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBvYmplY3QgaXMgYSBCbG9iIG9iamVjdCwgc2V0IHN0cmVhbSB0byB0aGVcbiAgICAvLyAgICByZXN1bHQgb2YgcnVubmluZyBvYmplY3RcdTIwMTlzIGdldCBzdHJlYW0uXG4gICAgc3RyZWFtID0gb2JqZWN0LnN0cmVhbSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgc3RyZWFtIHRvIGEgbmV3IFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgYW5kIHNldFxuICAgIC8vICAgIHVwIHN0cmVhbSB3aXRoIGJ5dGUgcmVhZGluZyBzdXBwb3J0LlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnID8gdGV4dEVuY29kZXIuZW5jb2RlKHNvdXJjZSkgOiBzb3VyY2VcblxuICAgICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYnVmZmVyKVxuICAgICAgICB9XG5cbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6ICdieXRlcydcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gQXNzZXJ0OiBzdHJlYW0gaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QuXG4gIGFzc2VydChpc1JlYWRhYmxlU3RyZWFtTGlrZShzdHJlYW0pKVxuXG4gIC8vIDYuIExldCBhY3Rpb24gYmUgbnVsbC5cbiAgbGV0IGFjdGlvbiA9IG51bGxcblxuICAvLyA3LiBMZXQgc291cmNlIGJlIG51bGwuXG4gIGxldCBzb3VyY2UgPSBudWxsXG5cbiAgLy8gOC4gTGV0IGxlbmd0aCBiZSBudWxsLlxuICBsZXQgbGVuZ3RoID0gbnVsbFxuXG4gIC8vIDkuIExldCB0eXBlIGJlIG51bGwuXG4gIGxldCB0eXBlID0gbnVsbFxuXG4gIC8vIDEwLiBTd2l0Y2ggb24gb2JqZWN0OlxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBvYmplY3QuXG4gICAgLy8gTm90ZTogc2V0dGluZyBzb3VyY2UgdG8gYSBVaW50OEFycmF5IGhlcmUgYnJlYWtzIHNvbWUgbW9ja2luZyBhc3N1bXB0aW9ucy5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCB0eXBlIHRvIGB0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIC8vIFVSTFNlYXJjaFBhcmFtc1xuXG4gICAgLy8gc3BlYyBzYXlzIHRvIHJ1biBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb24gYm9keS5saXN0XG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBOb2RlLmpzIGFzIGFwYXJ0IG9mIGFuIFVSTFNlYXJjaFBhcmFtcyBpbnN0YW5jZSB0b1N0cmluZyBtZXRob2RcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMNDkwXG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMMTEwMFxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBzZXJpYWxpemVyIHdpdGggb2JqZWN0XHUyMDE5cyBsaXN0LlxuICAgIHNvdXJjZSA9IG9iamVjdC50b1N0cmluZygpXG5cbiAgICAvLyBTZXQgdHlwZSB0byBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LnNsaWNlKCkpXG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJWaWV3XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LmJ1ZmZlci5zbGljZShvYmplY3QuYnl0ZU9mZnNldCwgb2JqZWN0LmJ5dGVPZmZzZXQgKyBvYmplY3QuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShvYmplY3QpKSB7XG4gICAgY29uc3QgYm91bmRhcnkgPSBgLS0tLWZvcm1kYXRhLXVuZGljaS0wJHtgJHtyYW5kb20oMWUxMSl9YC5wYWRTdGFydCgxMSwgJzAnKX1gXG4gICAgY29uc3QgcHJlZml4ID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGFgXG5cbiAgICAvKiEgZm9ybWRhdGEtcG9seWZpbGwuIE1JVCBMaWNlbnNlLiBKaW1teSBXXHUwMEU0cnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdFx1MjAxOXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ1JMRiBpcyBhcHBlbmRlZCB0byB0aGUgYm9keSB0byBmdW5jdGlvbiB3aXRoIGxlZ2FjeSBzZXJ2ZXJzIGFuZCBtYXRjaCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9ibG9iLzM0MzRjNmI0NmU2ODI0NTI5NzM5NzJlODMxMzYxM2RmYTU4Y2Q2OTAvbGliL21pbWUuYyNMMTAyOS1MMTAzMFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy82M1xuICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAtLSR7Ym91bmRhcnl9LS1cXHJcXG5gKVxuICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rKVxuICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgaWYgKGhhc1Vua25vd25TaXplVmFsdWUpIHtcbiAgICAgIGxlbmd0aCA9IG51bGxcbiAgICB9XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGJsb2JQYXJ0cykge1xuICAgICAgICBpZiAocGFydC5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHBhcnQuc3RyZWFtKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB5aWVsZCBwYXJ0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdHlwZSB0byBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9YCxcbiAgICAvLyBmb2xsb3dlZCBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBib3VuZGFyeSBzdHJpbmcgZ2VuZXJhdGVkXG4gICAgLy8gYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgZW5jb2RpbmcgYWxnb3JpdGhtLlxuICAgIHR5cGUgPSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gQmxvYlxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICAvLyBTZXQgbGVuZ3RoIHRvIG9iamVjdFx1MjAxOXMgc2l6ZS5cbiAgICBsZW5ndGggPSBvYmplY3Quc2l6ZVxuXG4gICAgLy8gSWYgb2JqZWN0XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSBpcyBub3QgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIHNldFxuICAgIC8vIHR5cGUgdG8gaXRzIHZhbHVlLlxuICAgIGlmIChvYmplY3QudHlwZSkge1xuICAgICAgdHlwZSA9IG9iamVjdC50eXBlXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3RbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYga2VlcGFsaXZlIGlzIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGtlZXBhbGl2ZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2VlcGFsaXZlJylcbiAgICB9XG5cbiAgICAvLyBJZiBvYmplY3QgaXMgZGlzdHVyYmVkIG9yIGxvY2tlZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpIHx8IG9iamVjdC5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdSZXNwb25zZSBib2R5IG9iamVjdCBzaG91bGQgbm90IGJlIGRpc3R1cmJlZCBvciBsb2NrZWQnXG4gICAgICApXG4gICAgfVxuXG4gICAgc3RyZWFtID1cbiAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtID8gb2JqZWN0IDogUmVhZGFibGVTdHJlYW1Gcm9tKG9iamVjdClcbiAgfVxuXG4gIC8vIDExLiBJZiBzb3VyY2UgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCBhY3Rpb24gdG8gYVxuICAvLyBzdGVwIHRoYXQgcmV0dXJucyBzb3VyY2UgYW5kIGxlbmd0aCB0byBzb3VyY2VcdTIwMTlzIGxlbmd0aC5cbiAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnIHx8IHV0aWwuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHNvdXJjZSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBhY3Rpb24gaXMgbm9uLW51bGwsIHRoZW4gcnVuIHRoZXNlIHN0ZXBzIGluIGluIHBhcmFsbGVsOlxuICBpZiAoYWN0aW9uICE9IG51bGwpIHtcbiAgICAvLyBSdW4gYWN0aW9uLlxuICAgIGxldCBpdGVyYXRvclxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gYWN0aW9uKG9iamVjdClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIFdoZW4gcnVubmluZyBhY3Rpb24gaXMgZG9uZSwgY2xvc2Ugc3RyZWFtLlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgICAgY29udHJvbGxlci5ieW9iUmVxdWVzdD8ucmVzcG9uZCgwKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgb25lIG9yIG1vcmUgYnl0ZXMgYXJlIGF2YWlsYWJsZSBhbmQgc3RyZWFtIGlzIG5vdCBlcnJvcmVkLFxuICAgICAgICAgIC8vIGVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZVxuICAgICAgICAgIC8vIGJ5dGVzIGludG8gc3RyZWFtLlxuICAgICAgICAgIGlmICghaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHZhbHVlKVxuICAgICAgICAgICAgaWYgKGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShidWZmZXIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogJ2J5dGVzJ1xuICAgIH0pXG4gIH1cblxuICAvLyAxMy4gTGV0IGJvZHkgYmUgYSBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0sIHNvdXJjZSBpcyBzb3VyY2UsXG4gIC8vIGFuZCBsZW5ndGggaXMgbGVuZ3RoLlxuICBjb25zdCBib2R5ID0geyBzdHJlYW0sIHNvdXJjZSwgbGVuZ3RoIH1cblxuICAvLyAxNC4gUmV0dXJuIChib2R5LCB0eXBlKS5cbiAgcmV0dXJuIFtib2R5LCB0eXBlXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXQtc2FmZWx5LWV4dHJhY3RcbmZ1bmN0aW9uIHNhZmVseUV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIC8vIFRvIHNhZmVseSBleHRyYWN0IGEgYm9keSBhbmQgYSBgQ29udGVudC1UeXBlYCB2YWx1ZSBmcm9tXG4gIC8vIGEgYnl0ZSBzZXF1ZW5jZSBvciBCb2R5SW5pdCBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuOlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBBc3NlcnQ6IG9iamVjdCBpcyBuZWl0aGVyIGRpc3R1cmJlZCBub3IgbG9ja2VkLlxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCF1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCksICdUaGUgYm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLicpXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIW9iamVjdC5sb2NrZWQsICdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGV4dHJhY3Rpbmcgb2JqZWN0LlxuICByZXR1cm4gZXh0cmFjdEJvZHkob2JqZWN0LCBrZWVwYWxpdmUpXG59XG5cbmZ1bmN0aW9uIGNsb25lQm9keSAoaW5zdGFuY2UsIGJvZHkpIHtcbiAgLy8gVG8gY2xvbmUgYSBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNsb25lXG5cbiAgLy8gMS4gTGV0IFx1MDBBQiBvdXQxLCBvdXQyIFx1MDBCQiBiZSB0aGUgcmVzdWx0IG9mIHRlZWluZyBib2R5XHUyMDE5cyBzdHJlYW0uXG4gIGNvbnN0IFtvdXQxLCBvdXQyXSA9IGJvZHkuc3RyZWFtLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHlcdTIwMTlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogb3V0MixcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxufVxuXG5mdW5jdGlvbiBib2R5TWl4aW5NZXRob2RzIChpbnN0YW5jZSkge1xuICBjb25zdCBtZXRob2RzID0ge1xuICAgIGJsb2IgKCkge1xuICAgICAgLy8gVGhlIGJsb2IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBCbG9iIHdob3NlXG4gICAgICAvLyBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHdob3NlIHR5cGUgYXR0cmlidXRlIGlzIHRoaXNcdTIwMTlzXG4gICAgICAvLyBNSU1FIHR5cGUuXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG1pbWVUeXBlID0gJydcbiAgICAgICAgfSBlbHNlIGlmIChtaW1lVHlwZSkge1xuICAgICAgICAgIG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKG1pbWVUeXBlKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgQmxvYiB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHR5cGUgYXR0cmlidXRlXG4gICAgICAgIC8vIGlzIG1pbWVUeXBlLlxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiBtaW1lVHlwZSB9KVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFycmF5QnVmZmVyICgpIHtcbiAgICAgIC8vIFRoZSBhcnJheUJ1ZmZlcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHRcbiAgICAgIC8vIG9mIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIG5ldyBBcnJheUJ1ZmZlclxuICAgICAgLy8gd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBjb25zdW1lQm9keSh0aGlzLCB1dGY4RGVjb2RlQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBqc29uICgpIHtcbiAgICAgIC8vIFRoZSBqc29uKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBwYXJzZSBKU09OIGZyb20gYnl0ZXMuXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgcGFyc2VKU09ORnJvbUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgZm9ybURhdGEgKCkge1xuICAgICAgLy8gVGhlIGZvcm1EYXRhKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXAgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsICh2YWx1ZSkgPT4ge1xuICAgICAgICAvLyAxLiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBnZXQgdGhlIE1JTUUgdHlwZSB3aXRoIHRoaXMuXG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gYm9keU1pbWVUeXBlKHRoaXMpXG5cbiAgICAgICAgLy8gMi4gSWYgbWltZVR5cGUgaXMgbm9uLW51bGwsIHRoZW4gc3dpdGNoIG9uIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGFuZCBydW5cbiAgICAgICAgLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgc3RlcHM6XG4gICAgICAgIGlmIChtaW1lVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN3aXRjaCAobWltZVR5cGUuZXNzZW5jZSkge1xuICAgICAgICAgICAgY2FzZSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc6IHtcbiAgICAgICAgICAgICAgLy8gMS4gLi4uIFtsb25nIHN0ZXBdXG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IG11bHRpcGFydEZvcm1EYXRhUGFyc2VyKHZhbHVlLCBtaW1lVHlwZSlcblxuICAgICAgICAgICAgICAvLyAyLiBJZiB0aGF0IGZhaWxzIGZvciBzb21lIHJlYXNvbiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICAgICAgaWYgKHBhcnNlZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIGJvZHkgYXMgRm9ybURhdGEuJylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIDMuIFJldHVybiBhIG5ldyBGb3JtRGF0YSBvYmplY3QsIGFwcGVuZGluZyBlYWNoIGVudHJ5LFxuICAgICAgICAgICAgICAvLyAgICByZXN1bHRpbmcgZnJvbSB0aGUgcGFyc2luZyBvcGVyYXRpb24sIHRvIGl0cyBlbnRyeSBsaXN0LlxuICAgICAgICAgICAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgICAgICAgIGZkW2tTdGF0ZV0gPSBwYXJzZWRcblxuICAgICAgICAgICAgICByZXR1cm4gZmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IHtcbiAgICAgICAgICAgICAgLy8gMS4gTGV0IGVudHJpZXMgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGJ5dGVzLlxuICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh2YWx1ZS50b1N0cmluZygpKVxuXG4gICAgICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cblxuICAgICAgICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJ5IGxpc3QgaXMgZW50cmllcy5cbiAgICAgICAgICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgZmQuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSB3YXMgbm90IG9uZSBvZiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBvciBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLidcbiAgICAgICAgKVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGJ5dGVzICgpIHtcbiAgICAgIC8vIFRoZSBieXRlcygpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBjb25zdW1lIGJvZHlcbiAgICAgIC8vIHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIHRoZVxuICAgICAgLy8gcmVzdWx0IG9mIGNyZWF0aW5nIGEgVWludDhBcnJheSBmcm9tIGJ5dGVzIGluIHRoaXNcdTIwMTlzIHJlbGV2YW50IHJlYWxtLlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0aG9kc1xufVxuXG5mdW5jdGlvbiBtaXhpbkJvZHkgKHByb3RvdHlwZSkge1xuICBPYmplY3QuYXNzaWduKHByb3RvdHlwZS5wcm90b3R5cGUsIGJvZHlNaXhpbk1ldGhvZHMocHJvdG90eXBlKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IG9iamVjdFxuICogQHBhcmFtIHsodmFsdWU6IHVua25vd24pID0+IHVua25vd259IGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBpbnN0YW5jZVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBpcyB1bnVzYWJsZTogQm9keSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQnKVxuICB9XG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN0XHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMoQnVmZmVyLmFsbG9jVW5zYWZlKDApKVxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCBvYmplY3RcdTIwMTlzIGJvZHkgZ2l2ZW4gc3VjY2Vzc1N0ZXBzLFxuICAvLyAgICBlcnJvclN0ZXBzLCBhbmQgb2JqZWN0XHUyMDE5cyByZWxldmFudCBnbG9iYWwgb2JqZWN0LlxuICBhd2FpdCBmdWxseVJlYWRCb2R5KG9iamVjdFtrU3RhdGVdLmJvZHksIHN1Y2Nlc3NTdGVwcywgZXJyb3JTdGVwcylcblxuICAvLyA3LiBSZXR1cm4gcHJvbWlzZS5cbiAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gYm9keVVudXNhYmxlIChvYmplY3QpIHtcbiAgY29uc3QgYm9keSA9IG9iamVjdFtrU3RhdGVdLmJvZHlcblxuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keVx1MjAxOXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1qc29uLWJ5dGVzLXRvLWEtamF2YXNjcmlwdC12YWx1ZVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICovXG5mdW5jdGlvbiBwYXJzZUpTT05Gcm9tQnl0ZXMgKGJ5dGVzKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHV0ZjhEZWNvZGVCeXRlcyhieXRlcykpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LW1pbWUtdHlwZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vcmVzcG9uc2UnKS5SZXNwb25zZXxpbXBvcnQoJy4vcmVxdWVzdCcpLlJlcXVlc3R9IHJlcXVlc3RPclJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAocmVxdWVzdE9yUmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgbnVsbC5cbiAgLy8gMi4gSWYgcmVxdWVzdE9yUmVzcG9uc2UgaXMgYSBSZXF1ZXN0IG9iamVjdCwgdGhlbiBzZXQgaGVhZGVycyB0byByZXF1ZXN0T3JSZXNwb25zZVx1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDMuIE90aGVyd2lzZSwgc2V0IGhlYWRlcnMgdG8gcmVxdWVzdE9yUmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vaGVhZGVycycpLkhlYWRlcnNMaXN0fSAqL1xuICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdE9yUmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdFxuXG4gIC8vIDQuIExldCBtaW1lVHlwZSBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYSBNSU1FIHR5cGUgZnJvbSBoZWFkZXJzLlxuICBjb25zdCBtaW1lVHlwZSA9IGV4dHJhY3RNaW1lVHlwZShoZWFkZXJzKVxuXG4gIC8vIDUuIElmIG1pbWVUeXBlIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBleHRyYWN0Qm9keSxcbiAgc2FmZWx5RXh0cmFjdEJvZHksXG4gIGNsb25lQm9keSxcbiAgbWl4aW5Cb2R5LFxuICBzdHJlYW1SZWdpc3RyeSxcbiAgaGFzRmluYWxpemF0aW9uUmVnaXN0cnksXG4gIGJvZHlVbnVzYWJsZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiBnbG9iYWwgV2ViQXNzZW1ibHkgKi9cblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbC5qcycpXG5jb25zdCB7IGNoYW5uZWxzIH0gPSByZXF1aXJlKCcuLi9jb3JlL2RpYWdub3N0aWNzLmpzJylcbmNvbnN0IHRpbWVycyA9IHJlcXVpcmUoJy4uL3V0aWwvdGltZXJzLmpzJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzLmpzJylcbmNvbnN0IHtcbiAga1VybCxcbiAga1Jlc2V0LFxuICBrQ2xpZW50LFxuICBrUGFyc2VyLFxuICBrQmxvY2tpbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtOb1JlZixcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0LFxuICBrSG9zdEhlYWRlcixcbiAga1BlbmRpbmdJZHgsXG4gIGtSdW5uaW5nSWR4LFxuICBrRXJyb3IsXG4gIGtQaXBlbGluaW5nLFxuICBrU29ja2V0LFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlLFxuICBrTWF4SGVhZGVyc1NpemUsXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0LFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAga0hlYWRlcnNUaW1lb3V0LFxuICBrQm9keVRpbWVvdXQsXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoLFxuICBrTWF4UmVxdWVzdHMsXG4gIGtDb3VudGVyLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrT25FcnJvcixcbiAga1Jlc3VtZSxcbiAga0hUVFBDb250ZXh0XG59ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzLmpzJylcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi4vbGxodHRwL2NvbnN0YW50cy5qcycpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5jb25zdCBhZGRMaXN0ZW5lciA9IHV0aWwuYWRkTGlzdGVuZXJcbmNvbnN0IHJlbW92ZUFsbExpc3RlbmVycyA9IHV0aWwucmVtb3ZlQWxsTGlzdGVuZXJzXG5jb25zdCBrSWRsZVNvY2tldFZhbGlkYXRpb24gPSBTeW1ib2woJ2tJZGxlU29ja2V0VmFsaWRhdGlvbicpXG5jb25zdCBrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0ID0gU3ltYm9sKCdrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0JylcbmNvbnN0IGtTb2NrZXRVc2VkID0gU3ltYm9sKCdrU29ja2V0VXNlZCcpXG5cbmxldCBleHRyYWN0Qm9keVxuXG5hc3luYyBmdW5jdGlvbiBsYXp5bGxodHRwICgpIHtcbiAgY29uc3QgbGxodHRwV2FzbURhdGEgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA/IHJlcXVpcmUoJy4uL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUocmVxdWlyZSgnLi4vbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMnKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSB0aGUgc2ltZCBvcHRpb24gbm90XG4gICAgLy8gYmVpbmcgZW5hYmxlZCwgYnV0IHRoZSBvY2N1cnJpbmcgb2YgdGhpcyBvdGhlciBlcnJvclxuICAgIC8vICogaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL2lzc3Vlcy8xMTQ5NVxuICAgIC8vIGdvdCBtZSB0byByZW1vdmUgdGhhdCBjaGVjayB0byBhdm9pZCBicmVha2luZyBOb2RlIDEyLlxuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUobGxodHRwV2FzbURhdGEgfHwgcmVxdWlyZSgnLi4vbGxodHRwL2xsaHR0cC13YXNtLmpzJykpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kLCB7XG4gICAgZW52OiB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cblxuICAgICAgd2FzbV9vbl91cmw6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9zdGF0dXM6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25TdGF0dXMobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2JlZ2luOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUJlZ2luKCkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX2ZpZWxkOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyRmllbGQobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfdmFsdWU6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJWYWx1ZShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcnNfY29tcGxldGU6IChwLCBzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlcnNDb21wbGV0ZShzdGF0dXNDb2RlLCBCb29sZWFuKHVwZ3JhZGUpLCBCb29sZWFuKHNob3VsZEtlZXBBbGl2ZSkpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2JvZHk6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25Cb2R5KG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZTogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpIHx8IDBcbiAgICAgIH1cblxuICAgICAgLyogZXNsaW50LWVuYWJsZSBjYW1lbGNhc2UgKi9cbiAgICB9XG4gIH0pXG59XG5cbmxldCBsbGh0dHBJbnN0YW5jZSA9IG51bGxcbmxldCBsbGh0dHBQcm9taXNlID0gbGF6eWxsaHR0cCgpXG5sbGh0dHBQcm9taXNlLmNhdGNoKClcblxubGV0IGN1cnJlbnRQYXJzZXIgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyU2l6ZSA9IDBcbmxldCBjdXJyZW50QnVmZmVyUHRyID0gbnVsbFxuXG5jb25zdCBVU0VfTkFUSVZFX1RJTUVSID0gMFxuY29uc3QgVVNFX0ZBU1RfVElNRVIgPSAxXG5cbi8vIFVzZSBmYXN0IHRpbWVycyBmb3IgaGVhZGVycyBhbmQgYm9keSB0byB0YWtlIGV2ZW50dWFsIGV2ZW50IGxvb3Bcbi8vIGxhdGVuY3kgaW50byBhY2NvdW50LlxuY29uc3QgVElNRU9VVF9IRUFERVJTID0gMiB8IFVTRV9GQVNUX1RJTUVSXG5jb25zdCBUSU1FT1VUX0JPRFkgPSA0IHwgVVNFX0ZBU1RfVElNRVJcblxuLy8gVXNlIG5hdGl2ZSB0aW1lcnMgdG8gaWdub3JlIGV2ZW50IGxvb3AgbGF0ZW5jeSBmb3Iga2VlcC1hbGl2ZVxuLy8gaGFuZGxpbmcuXG5jb25zdCBUSU1FT1VUX0tFRVBfQUxJVkUgPSA4IHwgVVNFX05BVElWRV9USU1FUlxuXG5jbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoY2xpZW50LCBzb2NrZXQsIHsgZXhwb3J0cyB9KSB7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShjbGllbnRba01heEhlYWRlcnNTaXplXSkgJiYgY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0gPiAwKVxuXG4gICAgdGhpcy5sbGh0dHAgPSBleHBvcnRzXG4gICAgdGhpcy5wdHIgPSB0aGlzLmxsaHR0cC5sbGh0dHBfYWxsb2MoY29uc3RhbnRzLlRZUEUuUkVTUE9OU0UpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMudXBncmFkZSA9IGZhbHNlXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuICAgIHRoaXMuaGVhZGVyc01heFNpemUgPSBjbGllbnRba01heEhlYWRlcnNTaXplXVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gZmFsc2VcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXN1bWUgPSB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG4gICAgdGhpcy5tYXhSZXNwb25zZVNpemUgPSBjbGllbnRba01heFJlc3BvbnNlU2l6ZV1cbiAgfVxuXG4gIHNldFRpbWVvdXQgKGRlbGF5LCB0eXBlKSB7XG4gICAgLy8gSWYgdGhlIGV4aXN0aW5nIHRpbWVyIGFuZCB0aGUgbmV3IHRpbWVyIGFyZSBvZiBkaWZmZXJlbnQgdGltZXIgdHlwZVxuICAgIC8vIChmYXN0IG9yIG5hdGl2ZSkgb3IgaGF2ZSBkaWZmZXJlbnQgZGVsYXksIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4aXN0aW5nXG4gICAgLy8gdGltZXIgYW5kIHNldCBhIG5ldyBvbmUuXG4gICAgaWYgKFxuICAgICAgZGVsYXkgIT09IHRoaXMudGltZW91dFZhbHVlIHx8XG4gICAgICAodHlwZSAmIFVTRV9GQVNUX1RJTUVSKSBeICh0aGlzLnRpbWVvdXRUeXBlICYgVVNFX0ZBU1RfVElNRVIpXG4gICAgKSB7XG4gICAgICAvLyBJZiBhIHRpbWVvdXQgaXMgYWxyZWFkeSBzZXQsIGNsZWFyIGl0IHdpdGggY2xlYXJUaW1lb3V0IG9mIHRoZSBmYXN0XG4gICAgICAvLyB0aW1lciBpbXBsZW1lbnRhdGlvbiwgYXMgaXQgY2FuIGNsZWFyIGZhc3QgYW5kIG5hdGl2ZSB0aW1lcnMuXG4gICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmIChkZWxheSkge1xuICAgICAgICBpZiAodHlwZSAmIFVTRV9GQVNUX1RJTUVSKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldEZhc3RUaW1lb3V0KG9uUGFyc2VyVGltZW91dCwgZGVsYXksIG5ldyBXZWFrUmVmKHRoaXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCBkZWxheSwgbmV3IFdlYWtSZWYodGhpcykpXG4gICAgICAgICAgdGhpcy50aW1lb3V0LnVucmVmKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IGRlbGF5XG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX3Jlc3VtZSh0aGlzLnB0cilcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnNvY2tldC5yZWFkKCkgfHwgRU1QVFlfQlVGKSAvLyBGbHVzaCBwYXJzZXIuXG4gICAgdGhpcy5yZWFkTW9yZSgpXG4gIH1cblxuICByZWFkTW9yZSAoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiB0aGlzLnB0cikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLnNvY2tldC5yZWFkKClcbiAgICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgdGhpcy5leGVjdXRlKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGUgKGRhdGEpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG5cbiAgICBjb25zdCB7IHNvY2tldCwgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiBjdXJyZW50QnVmZmVyU2l6ZSkge1xuICAgICAgaWYgKGN1cnJlbnRCdWZmZXJQdHIpIHtcbiAgICAgICAgbGxodHRwLmZyZWUoY3VycmVudEJ1ZmZlclB0cilcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCdWZmZXJTaXplID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gNDA5NikgKiA0MDk2XG4gICAgICBjdXJyZW50QnVmZmVyUHRyID0gbGxodHRwLm1hbGxvYyhjdXJyZW50QnVmZmVyU2l6ZSlcbiAgICB9XG5cbiAgICBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgY3VycmVudEJ1ZmZlclB0ciwgY3VycmVudEJ1ZmZlclNpemUpLnNldChkYXRhKVxuXG4gICAgLy8gQ2FsbCBgZXhlY3V0ZWAgb24gdGhlIHdhc20gcGFyc2VyLlxuICAgIC8vIFdlIHBhc3MgdGhlIGBsbGh0dHBfcGFyc2VyYCBwb2ludGVyIGFkZHJlc3MsIHRoZSBwb2ludGVyIGFkZHJlc3Mgb2YgYnVmZmVyIHZpZXcgZGF0YSxcbiAgICAvLyBhbmQgZmluYWxseSB0aGUgbGVuZ3RoIG9mIGJ5dGVzIHRvIHBhcnNlLlxuICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgY29kZSBvciBgY29uc3RhbnRzLkVSUk9SLk9LYC5cbiAgICB0cnkge1xuICAgICAgbGV0IHJldFxuXG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gZGF0YVxuICAgICAgICBjdXJyZW50UGFyc2VyID0gdGhpc1xuICAgICAgICByZXQgPSBsbGh0dHAubGxodHRwX2V4ZWN1dGUodGhpcy5wdHIsIGN1cnJlbnRCdWZmZXJQdHIsIGRhdGEubGVuZ3RoKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYXRjaCAqL1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBvZmZzZXQgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9wb3ModGhpcy5wdHIpIC0gY3VycmVudEJ1ZmZlclB0clxuXG4gICAgICBpZiAocmV0ICE9PSBjb25zdGFudHMuRVJST1IuT0spIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0KVxuXG4gICAgICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRURfVVBHUkFERSkge1xuICAgICAgICAgIHRoaXMub25VcGdyYWRlKGJvZHkpXG4gICAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlXG4gICAgICAgICAgc29ja2V0LnVuc2hpZnQoYm9keSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKHJldCwgYm9keSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGZpbmlzaCAoKSB7XG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT09IG51bGwpXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcblxuICAgIGNvbnN0IHsgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBsZXQgcmV0XG5cbiAgICB0cnkge1xuICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgIHJldCA9IGxsaHR0cC5sbGh0dHBfZmluaXNoKHRoaXMucHRyKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5PSykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEIHx8IHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICB0aGlzLnBhdXNlZCA9IHRydWVcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRXJyb3IocmV0LCBFTVBUWV9CVUYpXG4gIH1cblxuICBjcmVhdGVFcnJvciAocmV0LCBkYXRhKSB7XG4gICAgY29uc3QgeyBsbGh0dHAsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCB9ID0gdGhpc1xuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgYnl0ZXNSZWFkICE9PSBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkpIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgcHRyID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcmVhc29uKHRoaXMucHRyKVxuICAgIGxldCBtZXNzYWdlID0gJydcbiAgICBpZiAocHRyKSB7XG4gICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgJ1Jlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHRoZSBIVFRQLzEuMSBwcm90b2NvbCAoJyArXG4gICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICcpJ1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGhpcy50aW1lb3V0ICYmIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICB9XG5cbiAgb25TdGF0dXMgKGJ1Zikge1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IGJ1Zi50b1N0cmluZygpXG4gIH1cblxuICBvbk1lc3NhZ2VCZWdpbiAoKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgcmVzcG9uc2UnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXF1ZXN0Lm9uUmVzcG9uc2VTdGFydGVkKClcbiAgfVxuXG4gIG9uSGVhZGVyRmllbGQgKGJ1Zikge1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDApIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIG9uSGVhZGVyVmFsdWUgKGJ1Zikge1xuICAgIGxldCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAxKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgICBsZW4gKz0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gdGhpcy5oZWFkZXJzW2xlbiAtIDJdXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDEwKSB7XG4gICAgICBjb25zdCBoZWFkZXJOYW1lID0gdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSlcbiAgICAgIGlmIChoZWFkZXJOYW1lID09PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgICAgdGhpcy5rZWVwQWxpdmUgKz0gYnVmLnRvU3RyaW5nKClcbiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiArPSBidWYudG9TdHJpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYgdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG4gICAgYXNzZXJ0KGNsaWVudFtrU29ja2V0XSA9PT0gc29ja2V0KVxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuICAgIGFzc2VydCgoaGVhZGVycy5sZW5ndGggJiAxKSA9PT0gMClcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuICAgIGFzc2VydChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gbnVsbFxuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgc29ja2V0LnVuc2hpZnQoaGVhZClcblxuICAgIHNvY2tldFtrUGFyc2VyXS5kZXN0cm95KClcbiAgICBzb2NrZXRba1BhcnNlcl0gPSBudWxsXG5cbiAgICBzb2NrZXRba0NsaWVudF0gPSBudWxsXG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoc29ja2V0KVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICAgIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbCAvLyBUT0RPIChmaXgpOiBUaGlzIGlzIGhhY2t5Li4uXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID09PSAwKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCByZXNwb25zZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KCh0aGlzLmhlYWRlcnMubGVuZ3RoICYgMSkgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHRoaXMuc2hvdWxkS2VlcEFsaXZlICYmIGNsaWVudFtrUGlwZWxpbmluZ10pIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZVRpbWVvdXQgPSB0aGlzLmtlZXBBbGl2ZSA/IHV0aWwucGFyc2VLZWVwQWxpdmVUaW1lb3V0KHRoaXMua2VlcEFsaXZlKSA6IG51bGxcblxuICAgICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gTWF0aC5taW4oXG4gICAgICAgICAga2VlcEFsaXZlVGltZW91dCAtIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0sXG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVNYXhUaW1lb3V0XVxuICAgICAgICApXG4gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aW1lb3V0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IGNsaWVudFtrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3AgbW9yZSByZXF1ZXN0cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwYXVzZSA9IHJlcXVlc3Qub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHRoaXMucmVzdW1lLCBzdGF0dXNUZXh0KSA9PT0gZmFsc2VcblxuICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICB9XG5cbiAgICByZXR1cm4gcGF1c2UgPyBjb25zdGFudHMuRVJST1IuUEFVU0VEIDogMFxuICB9XG5cbiAgb25Cb2R5IChidWYpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCBtYXhSZXNwb25zZVNpemUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMjAwKVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSA+IC0xICYmIHRoaXMuYnl0ZXNSZWFkICsgYnVmLmxlbmd0aCA+IG1heFJlc3BvbnNlU2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ1Zi5sZW5ndGhcblxuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShidWYpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9XG4gIH1cblxuICBvbk1lc3NhZ2VDb21wbGV0ZSAoKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgaGVhZGVycywgY29udGVudExlbmd0aCwgYnl0ZXNSZWFkLCBzaG91bGRLZWVwQWxpdmUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkICYmICghc3RhdHVzQ29kZSB8fCBzaG91bGRLZWVwQWxpdmUpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuICAgIGFzc2VydCgodGhpcy5oZWFkZXJzLmxlbmd0aCAmIDEpID09PSAwKVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgYmUgaGFuZGxlZCBieSBsbGh0dHA/ICovXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgY29udGVudExlbmd0aCAmJiBieXRlc1JlYWQgIT09IHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Db21wbGV0ZShoZWFkZXJzKVxuXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBzb2NrZXRba1NvY2tldFVzZWRdID0gdHJ1ZVxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09IG51bGwgfHwgY2xpZW50W2tQaXBlbGluaW5nXSA9PT0gMSkge1xuICAgICAgLy8gV2UgbXVzdCB3YWl0IGEgZnVsbCBldmVudCBsb29wIGN5Y2xlIHRvIHJldXNlIHRoaXMgc29ja2V0IHRvIG1ha2Ugc3VyZVxuICAgICAgLy8gdGhhdCBub24tc3BlYyBjb21wbGlhbnQgc2VydmVycyBhcmUgbm90IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gZXZlbiBpZiB0aGV5XG4gICAgICAvLyBzYWlkIHRoZXkgd29uJ3QuXG4gICAgICBzZXRJbW1lZGlhdGUoKCkgPT4gY2xpZW50W2tSZXN1bWVdKCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uUGFyc2VyVGltZW91dCAocGFyc2VyKSB7XG4gIGNvbnN0IHsgc29ja2V0LCB0aW1lb3V0VHlwZSwgY2xpZW50LCBwYXVzZWQgfSA9IHBhcnNlci5kZXJlZigpXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICBpZiAoIXNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0LndyaXRhYmxlTmVlZERyYWluIHx8IGNsaWVudFtrUnVubmluZ10gPiAxKSB7XG4gICAgICBhc3NlcnQoIXBhdXNlZCwgJ2Nhbm5vdCBiZSBwYXVzZWQgd2hpbGUgd2FpdGluZyBmb3IgaGVhZGVycycpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSGVhZGVyc1RpbWVvdXRFcnJvcigpKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKSB7XG4gICAgaWYgKCFwYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0tFRVBfQUxJVkUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3RIMSAoY2xpZW50LCBzb2NrZXQpIHtcbiAgY2xpZW50W2tTb2NrZXRdID0gc29ja2V0XG5cbiAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgIGxsaHR0cEluc3RhbmNlID0gYXdhaXQgbGxodHRwUHJvbWlzZVxuICAgIGxsaHR0cFByb21pc2UgPSBudWxsXG4gIH1cblxuICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAwXG4gIHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0XSA9IG51bGxcbiAgc29ja2V0W2tTb2NrZXRVc2VkXSA9IGZhbHNlXG4gIHNvY2tldFtrUGFyc2VyXSA9IG5ldyBQYXJzZXIoY2xpZW50LCBzb2NrZXQsIGxsaHR0cEluc3RhbmNlKVxuXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgY29uc3QgcGFyc2VyID0gdGhpc1trUGFyc2VyXVxuXG4gICAgLy8gT24gTWFjIE9TLCB3ZSBnZXQgYW4gRUNPTk5SRVNFVCBldmVuIGlmIHRoZXJlIGlzIGEgZnVsbCBib2R5IHRvIGJlIGZvcndhcmRlZFxuICAgIC8vIHRvIHRoZSB1c2VyLlxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICBjb25zdCBwYXJzZXJFcnIgPSBwYXJzZXIuZmluaXNoKClcbiAgICAgIGlmIChwYXJzZXJFcnIpIHtcbiAgICAgICAgdGhpc1trRXJyb3JdID0gcGFyc2VyRXJyXG4gICAgICAgIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKHBhcnNlckVycilcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gICAgdGhpc1trQ2xpZW50XVtrT25FcnJvcl0oZXJyKVxuICB9KVxuICBhZGRMaXN0ZW5lcihzb2NrZXQsICdyZWFkYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJzZXIgPSB0aGlzW2tQYXJzZXJdXG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICBwYXJzZXIucmVhZE1vcmUoKVxuICAgIH1cbiAgfSlcbiAgYWRkTGlzdGVuZXIoc29ja2V0LCAnZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhcnNlciA9IHRoaXNba1BhcnNlcl1cblxuICAgIGlmIChwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgY29uc3QgcGFyc2VyRXJyID0gcGFyc2VyLmZpbmlzaCgpXG4gICAgICBpZiAocGFyc2VyRXJyKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBwYXJzZXJFcnIpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSkpXG4gIH0pXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cbiAgICBjb25zdCBwYXJzZXIgPSB0aGlzW2tQYXJzZXJdXG5cbiAgICBjbGVhcklkbGVTb2NrZXRWYWxpZGF0aW9uKHRoaXMpXG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgICB0aGlzW2tFcnJvcl0gPSBwYXJzZXIuZmluaXNoKCkgfHwgdGhpc1trRXJyb3JdXG4gICAgICB9XG5cbiAgICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgICB0aGlzW2tQYXJzZXJdID0gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgICBjbGllbnRba0hUVFBDb250ZXh0XSA9IG51bGwgLy8gVE9ETyAoZml4KTogVGhpcyBpcyBoYWNreS4uLlxuXG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuXG4gICAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG5cbiAgICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0pXG5cbiAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJ2gxJyxcbiAgICBkZWZhdWx0UGlwZWxpbmluZzogMSxcbiAgICB3cml0ZSAoLi4uYXJncykge1xuICAgICAgcmV0dXJuIHdyaXRlSDEoY2xpZW50LCAuLi5hcmdzKVxuICAgIH0sXG4gICAgcmVzdW1lICgpIHtcbiAgICAgIHJlc3VtZUgxKGNsaWVudClcbiAgICB9LFxuICAgIGRlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChjbG9zZWQpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQuZGVzdHJveShlcnIpLm9uKCdjbG9zZScsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgICByZXR1cm4gc29ja2V0LmRlc3Ryb3llZFxuICAgIH0sXG4gICAgYnVzeSAocmVxdWVzdCkge1xuICAgICAgaWYgKHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tCbG9ja2luZ10gfHwgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmICFyZXF1ZXN0LmlkZW1wb3RlbnQpIHtcbiAgICAgICAgICAvLyBOb24taWRlbXBvdGVudCByZXF1ZXN0IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgICAgICAvLyBjb3VsZCBjYXVzZSBmYWlsdXJlLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgICAgIC8vIERvbid0IGRpc3BhdGNoIGFuIHVwZ3JhZGUgdW50aWwgYWxsIHByZWNlZGluZyByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgICAgICAvLyBBIG1pc2JlaGF2aW5nIHNlcnZlciBtaWdodCB1cGdyYWRlIHRoZSBjb25uZWN0aW9uIGJlZm9yZSBhbGwgcGlwZWxpbmVkXG4gICAgICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgdXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgIT09IDAgJiZcbiAgICAgICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkgfHwgdXRpbC5pc0Zvcm1EYXRhTGlrZShyZXF1ZXN0LmJvZHkpKSkge1xuICAgICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW4gZXJyb3Igd2hpbGUgb3RoZXIgcmVxdWVzdHNcbiAgICAgICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbiBieSB3YWl0aW5nIGZvciBpbmZsaWdodFxuICAgICAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBkaXNwYXRjaGluZy5cblxuICAgICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBubyBvdGhlciByZXF1ZXN0cyBhcmUgaW5mbGlnaHQgYW5kXG4gICAgICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhcklkbGVTb2NrZXRWYWxpZGF0aW9uIChzb2NrZXQpIHtcbiAgaWYgKHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0XSkge1xuICAgIGNsZWFyVGltZW91dChzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0pXG4gICAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvblRpbWVvdXRdID0gbnVsbFxuICB9XG5cbiAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAwXG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSWRsZVNvY2tldFZhbGlkYXRpb24gKGNsaWVudCwgc29ja2V0KSB7XG4gIHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25dID0gMVxuICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0gPSBudWxsXG4gICAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAyXG5cbiAgICBpZiAoY2xpZW50W2tTb2NrZXRdID09PSBzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gICAgfVxuICB9LCAwKVxuICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0udW5yZWY/LigpXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vY2xpZW50LmpzJyl9IGNsaWVudFxuICovXG5mdW5jdGlvbiByZXN1bWVIMSAoY2xpZW50KSB7XG4gIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgc29ja2V0LnVucmVmKClcbiAgICAgICAgc29ja2V0W2tOb1JlZl0gPSB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQucmVmKSB7XG4gICAgICBzb2NrZXQucmVmKClcbiAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba1BlbmRpbmddID4gMCAmJiBzb2NrZXRba1NvY2tldFVzZWRdKSB7XG4gICAgICBpZiAoc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPT09IDApIHtcbiAgICAgICAgc2NoZWR1bGVJZGxlU29ja2V0VmFsaWRhdGlvbihjbGllbnQsIHNvY2tldClcbiAgICAgICAgc29ja2V0W2tQYXJzZXJdLnJlYWRNb3JlKClcbiAgICAgICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25dID09PSAxKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5yZWFkTW9yZSgpXG4gICAgICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIHNvY2tldFtrUGFyc2VyXS5yZWFkTW9yZSgpXG4gICAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9LRUVQX0FMSVZFKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSwgVElNRU9VVF9LRUVQX0FMSVZFKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgIT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICA/IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXRcbiAgICAgICAgICA6IGNsaWVudFtrSGVhZGVyc1RpbWVvdXRdXG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlSDEgKGNsaWVudCwgcmVxdWVzdCkge1xuICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgbGV0IHsgYm9keSwgaGVhZGVycywgY29udGVudExlbmd0aCB9ID0gcmVxdWVzdFxuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCcgfHxcbiAgICBtZXRob2QgPT09ICdRVUVSWScgfHxcbiAgICBtZXRob2QgPT09ICdQUk9QRklORCcgfHxcbiAgICBtZXRob2QgPT09ICdQUk9QUEFUQ0gnXG4gIClcblxuICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShib2R5KSkge1xuICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgIGV4dHJhY3RCb2R5ID0gcmVxdWlyZSgnLi4vd2ViL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuICAgIH1cblxuICAgIGNvbnN0IFtib2R5U3RyZWFtLCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgIGlmIChyZXF1ZXN0LmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMucHVzaCgnY29udGVudC10eXBlJywgY29udGVudFR5cGUpXG4gICAgfVxuICAgIGJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgIGNvbnRlbnRMZW5ndGggPSBib2R5U3RyZWFtLmxlbmd0aFxuICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiByZXF1ZXN0LmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGJvZHkudHlwZVxuICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgY29uc3QgY29udGVudFR5cGVWYWx1ZSA9IGAke2NvbnRlbnRUeXBlfWBcbiAgICAgIGlmICghdXRpbC5pc1ZhbGlkSGVhZGVyVmFsdWUoY29udGVudFR5cGVWYWx1ZSkpIHtcbiAgICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29udGVudC10eXBlIGhlYWRlcicpKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGhlYWRlcnMucHVzaCgnY29udGVudC10eXBlJywgY29udGVudFR5cGVWYWx1ZSlcbiAgICB9XG4gIH1cblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBjb25zdCBib2R5TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgY29udGVudExlbmd0aCA9IGJvZHlMZW5ndGggPz8gY29udGVudExlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cbiAgY2xlYXJJZGxlU29ja2V0VmFsaWRhdGlvbihzb2NrZXQpXG5cbiAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ2Fib3J0ZWQnKSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9pc3N1ZXMvMjU4XG4gICAgLy8gQ2xvc2UgYWZ0ZXIgYSBIRUFEIHJlcXVlc3QgdG8gaW50ZXJvcCB3aXRoIG1pc2JlaGF2aW5nIHNlcnZlcnNcbiAgICAvLyB0aGF0IG1heSBzZW5kIGEgYm9keSBpbiB0aGUgcmVzcG9uc2UuXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgLy8gT24gQ09OTkVDVCBvciB1cGdyYWRlLCBibG9jayBwaXBlbGluZSBmcm9tIGRpc3BhdGNoaW5nIGZ1cnRoZXJcbiAgICAvLyByZXF1ZXN0cyBvbiB0aGlzIGNvbm5lY3Rpb24uXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChyZXNldCAhPSBudWxsKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSByZXNldFxuICB9XG5cbiAgaWYgKGNsaWVudFtrTWF4UmVxdWVzdHNdICYmIHNvY2tldFtrQ291bnRlcl0rKyA+PSBjbGllbnRba01heFJlcXVlc3RzXSkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGJsb2NraW5nKSB7XG4gICAgc29ja2V0W2tCbG9ja2luZ10gPSB0cnVlXG4gIH1cblxuICBsZXQgaGVhZGVyID0gYCR7bWV0aG9kfSAke3BhdGh9IEhUVFAvMS4xXFxyXFxuYFxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBoZWFkZXIgKz0gYGhvc3Q6ICR7aG9zdH1cXHJcXG5gXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9IGNsaWVudFtrSG9zdEhlYWRlcl1cbiAgfVxuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgaGVhZGVyICs9IGBjb25uZWN0aW9uOiB1cGdyYWRlXFxyXFxudXBncmFkZTogJHt1cGdyYWRlfVxcclxcbmBcbiAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddICYmICFzb2NrZXRba1Jlc2V0XSkge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjoga2VlcC1hbGl2ZVxcclxcbidcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGNsb3NlXFxyXFxuJ1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnMubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbbiArIDBdXG4gICAgICBjb25zdCB2YWwgPSBoZWFkZXJzW24gKyAxXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsW2ldfVxcclxcbmBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsfVxcclxcbmBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY2hhbm5lbHMuc2VuZEhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zZW5kSGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdCwgaGVhZGVyczogaGVhZGVyLCBzb2NrZXQgfSlcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBhc3NlcnRpb24gKi9cbiAgaWYgKCFib2R5IHx8IGJvZHlMZW5ndGggPT09IDApIHtcbiAgICB3cml0ZUJ1ZmZlcihhYm9ydCwgbnVsbCwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIHdyaXRlQnVmZmVyKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LnN0cmVhbSgpLCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbSAoYWJvcnQsIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuXG4gIGNvbnN0IG9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSAmJiB0aGlzLnBhdXNlKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMsIGVycilcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25EcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5LnJlc3VtZSkge1xuICAgICAgYm9keS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICdjbG9zZScgbWlnaHQgYmUgZW1pdHRlZCAqYmVmb3JlKiAnZXJyb3InIGZvclxuICAgIC8vIGJyb2tlbiBzdHJlYW1zLiBXYWl0IGEgdGljayB0byBhdm9pZCB0aGlzIGNhc2UuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gSXQncyBvbmx5IHNhZmUgdG8gcmVtb3ZlICdlcnJvcicgbGlzdGVuZXIgYWZ0ZXJcbiAgICAgIC8vICdjbG9zZScuXG4gICAgICBib2R5LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgfSlcblxuICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IG9uRmluaXNoZWQoZXJyKSlcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25GaW5pc2hlZCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgYXNzZXJ0KHNvY2tldC5kZXN0cm95ZWQgfHwgKHNvY2tldFtrV3JpdGluZ10gJiYgY2xpZW50W2tSdW5uaW5nXSA8PSAxKSlcblxuICAgIHNvY2tldFxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgICAgLm9mZignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gICAgYm9keVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2UpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkNsb3NlKVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gIGlmIChib2R5LmVycm9yRW1pdHRlZCA/PyBib2R5LmVycm9yZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChib2R5LmVycm9yZWQpKVxuICB9IGVsc2UgaWYgKGJvZHkuZW5kRW1pdHRlZCA/PyBib2R5LnJlYWRhYmxlRW5kZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChudWxsKSlcbiAgfVxuXG4gIGlmIChib2R5LmNsb3NlRW1pdHRlZCA/PyBib2R5LmNsb3NlZCkge1xuICAgIHNldEltbWVkaWF0ZShvbkNsb3NlKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgICBzb2NrZXQuY29yaygpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG5cbiAgICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVCbG9iIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBjb250ZW50TGVuZ3RoICE9PSBib2R5LnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IGJvZHkuYXJyYXlCdWZmZXIoKSlcblxuICAgIHNvY2tldC5jb3JrKClcbiAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICBzb2NrZXQudW5jb3JrKClcblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFib3J0KGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ2l0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgbGV0IGNhbGxiYWNrID0gbnVsbFxuICBmdW5jdGlvbiBvbkRyYWluICgpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgY2IoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JEcmFpbiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhc3NlcnQoY2FsbGJhY2sgPT09IG51bGwpXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHJlamVjdChzb2NrZXRba0Vycm9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlXG4gICAgfVxuICB9KVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuICB0cnkge1xuICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gc29tZWhvdyBhYm9ydCB0aGUgYXN5bmMgaXRlcmFibGUuXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICAgIH1cblxuICAgICAgaWYgKCF3cml0ZXIud3JpdGUoY2h1bmspKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmVuZCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHdyaXRlci5kZXN0cm95KGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5jbGFzcyBBc3luY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yICh7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KSB7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aFxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwXG4gICAgdGhpcy5leHBlY3RzUGF5bG9hZCA9IGV4cGVjdHNQYXlsb2FkXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSB0cnVlXG4gIH1cblxuICB3cml0ZSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgaWYgKCFsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIGRlZmVyIHdyaXRpbmcgY2h1bmtzLlxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiArIGxlbiA+IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICB9XG5cbiAgICBzb2NrZXQuY29yaygpXG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoIWV4cGVjdHNQYXlsb2FkICYmIHJlcXVlc3QucmVzZXQgIT09IGZhbHNlKSB7XG4gICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfXRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZShgXFxyXFxuJHtsZW4udG9TdHJpbmcoMTYpfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGxlblxuXG4gICAgY29uc3QgcmV0ID0gc29ja2V0LndyaXRlKGNodW5rKVxuXG4gICAgc29ja2V0LnVuY29yaygpXG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG5cbiAgICBpZiAoIXJldCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBlbmQgKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciwgcmVxdWVzdCB9ID0gdGhpc1xuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKGV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBzZW5kIGEgQ29udGVudC1MZW5ndGggaW4gYSByZXF1ZXN0IG1lc3NhZ2Ugd2hlblxuICAgICAgICAvLyBubyBUcmFuc2Zlci1FbmNvZGluZyBpcyBzZW50IGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgZGVmaW5lcyBhIG1lYW5pbmdcbiAgICAgICAgLy8gZm9yIGFuIGVuY2xvc2VkIHBheWxvYWQgYm9keS5cblxuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKCdcXHJcXG4wXFxyXFxuXFxyXFxuJywgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgYWJvcnQoZXJyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsLmpzJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMuanMnKVxuY29uc3Qge1xuICBrVXJsLFxuICBrUmVzZXQsXG4gIGtDbGllbnQsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1F1ZXVlLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1NvY2tldCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtPbkVycm9yLFxuICBrTWF4Q29uY3VycmVudFN0cmVhbXMsXG4gIGtIVFRQMlNlc3Npb24sXG4gIGtSZXN1bWUsXG4gIGtTaXplLFxuICBrSFRUUENvbnRleHRcbn0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMuanMnKVxuXG5jb25zdCBrT3BlblN0cmVhbXMgPSBTeW1ib2woJ29wZW4gc3RyZWFtcycpXG5cbmxldCBleHRyYWN0Qm9keVxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ25vZGU6aHR0cDInKVxufSBjYXRjaCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cDIgPSB7IGNvbnN0YW50czoge30gfVxufVxuXG5jb25zdCB7XG4gIGNvbnN0YW50czoge1xuICAgIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gICAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgICBIVFRQMl9IRUFERVJfU0NIRU1FLFxuICAgIEhUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSCxcbiAgICBIVFRQMl9IRUFERVJfRVhQRUNULFxuICAgIEhUVFAyX0hFQURFUl9TVEFUVVNcbiAgfVxufSA9IGh0dHAyXG5cbmZ1bmN0aW9uIHBhcnNlSDJIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgLy8gaDIgbWF5IGNvbmNhdCB0aGUgaGVhZGVyIHZhbHVlIGJ5IGFycmF5XG4gICAgLy8gZS5nLiBTZXQtQ29va2llXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gcHJvdmlkZSBlYWNoIGhlYWRlciB2YWx1ZSBvZiBoZWFkZXIgbmFtZVxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBoZWFkZXJzIGhhbmRsZXIgZXhwZWN0IG5hbWUtdmFsdWUgcGFpclxuICAgICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20oc3VidmFsdWUpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20odmFsdWUpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29ubmVjdEgyIChjbGllbnQsIHNvY2tldCkge1xuICBjbGllbnRba1NvY2tldF0gPSBzb2NrZXRcblxuICBpZiAoIWgyRXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgaDJFeHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICBjb2RlOiAnVU5ESUNJLUgyJ1xuICAgIH0pXG4gIH1cblxuICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdChjbGllbnRba1VybF0sIHtcbiAgICBjcmVhdGVDb25uZWN0aW9uOiAoKSA9PiBzb2NrZXQsXG4gICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba01heENvbmN1cnJlbnRTdHJlYW1zXVxuICB9KVxuXG4gIHNlc3Npb25ba09wZW5TdHJlYW1zXSA9IDBcbiAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICBzZXNzaW9uW2tTb2NrZXRdID0gc29ja2V0XG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzZXNzaW9uLCAnZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdmcmFtZUVycm9yJywgb25IdHRwMkZyYW1lRXJyb3IpXG4gIHV0aWwuYWRkTGlzdGVuZXIoc2Vzc2lvbiwgJ2VuZCcsIG9uSHR0cDJTZXNzaW9uRW5kKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50IH0gPSB0aGlzXG4gICAgY29uc3QgeyBba1NvY2tldF06IHNvY2tldCB9ID0gY2xpZW50XG5cbiAgICBjb25zdCBlcnIgPSB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gfHwgdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpXG5cbiAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG5cbiAgICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBzZXNzaW9uLnVucmVmKClcblxuICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBzZXNzaW9uXG4gIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cblxuICB1dGlsLmFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgdGhpc1trRXJyb3JdID0gZXJyXG5cbiAgICB0aGlzW2tDbGllbnRdW2tPbkVycm9yXShlcnIpXG4gIH0pXG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzb2NrZXQsICdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpKVxuICB9KVxuXG4gIHV0aWwuYWRkTGlzdGVuZXIoc29ja2V0LCAnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXJyID0gdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuXG4gICAgaWYgKHRoaXNba0hUVFAyU2Vzc2lvbl0gIT0gbnVsbCkge1xuICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXS5kZXN0cm95KGVycilcbiAgICB9XG5cbiAgICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0pXG5cbiAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJ2gyJyxcbiAgICBkZWZhdWx0UGlwZWxpbmluZzogSW5maW5pdHksXG4gICAgd3JpdGUgKC4uLmFyZ3MpIHtcbiAgICAgIHJldHVybiB3cml0ZUgyKGNsaWVudCwgLi4uYXJncylcbiAgICB9LFxuICAgIHJlc3VtZSAoKSB7XG4gICAgICByZXN1bWVIMihjbGllbnQpXG4gICAgfSxcbiAgICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoY2xvc2VkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVzdHJveWluZyB0aGUgc29ja2V0IHdpbGwgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICAgICAgICBzb2NrZXQuZGVzdHJveShlcnIpLm9uKCdjbG9zZScsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgICByZXR1cm4gc29ja2V0LmRlc3Ryb3llZFxuICAgIH0sXG4gICAgYnVzeSAoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lSDIgKGNsaWVudCkge1xuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICBpZiAoc29ja2V0Py5kZXN0cm95ZWQgPT09IGZhbHNlKSB7XG4gICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDAgJiYgY2xpZW50W2tNYXhDb25jdXJyZW50U3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0udW5yZWYoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzb2NrZXQucmVmKClcbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXS5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKGVycilcbn1cblxuZnVuY3Rpb24gb25IdHRwMkZyYW1lRXJyb3IgKHR5cGUsIGNvZGUsIGlkKSB7XG4gIGlmIChpZCA9PT0gMCkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG4gICAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gICAgdGhpc1trQ2xpZW50XVtrT25FcnJvcl0oZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgY29uc3QgZXJyID0gbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzW2tTb2NrZXRdKSlcbiAgdGhpcy5kZXN0cm95KGVycilcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIGVycilcbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSByb290IGNhdXNlIG9mICMzMDExXG4gKiBXZSBuZWVkIHRvIGhhbmRsZSBHT0FXQVkgZnJhbWVzIHByb3Blcmx5LCBhbmQgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICogYWxvbmcgd2l0aCB0aGUgc29ja2V0IHJpZ2h0IGF3YXlcbiAqL1xuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICAvLyBXZSBjYW5ub3QgcmVjb3Zlciwgc28gYmVzdCB0byBjbG9zZSB0aGUgc2Vzc2lvbiBhbmQgdGhlIHNvY2tldFxuICBjb25zdCBlcnIgPSB0aGlzW2tFcnJvcl0gfHwgbmV3IFNvY2tldEVycm9yKGBIVFRQLzI6IFwiR09BV0FZXCIgZnJhbWUgcmVjZWl2ZWQgd2l0aCBjb2RlICR7Y29kZX1gLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpXG4gIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbFxuXG4gIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dLmRlc3Ryb3koZXJyKVxuICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gIH1cblxuICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XSwgZXJyKVxuXG4gIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPCBjbGllbnRba1F1ZXVlXS5sZW5ndGgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gIH1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICBjbGllbnRba1Jlc3VtZV0oKVxufVxuXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG5mdW5jdGlvbiBzaG91bGRTZW5kQ29udGVudExlbmd0aCAobWV0aG9kKSB7XG4gIHJldHVybiBtZXRob2QgIT09ICdHRVQnICYmIG1ldGhvZCAhPT0gJ0hFQUQnICYmIG1ldGhvZCAhPT0gJ09QVElPTlMnICYmIG1ldGhvZCAhPT0gJ1RSQUNFJyAmJiBtZXRob2QgIT09ICdDT05ORUNUJ1xufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IGNsaWVudFtrSFRUUDJTZXNzaW9uXVxuICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgZXhwZWN0Q29udGludWUsIHNpZ25hbCwgaGVhZGVyczogcmVxSGVhZGVycyB9ID0gcmVxdWVzdFxuICBsZXQgeyBib2R5IH0gPSByZXF1ZXN0XG5cbiAgaWYgKHVwZ3JhZGUpIHtcbiAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IHt9XG4gIGZvciAobGV0IG4gPSAwOyBuIDwgcmVxSGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGNvbnN0IGtleSA9IHJlcUhlYWRlcnNbbiArIDBdXG4gICAgY29uc3QgdmFsID0gcmVxSGVhZGVyc1tuICsgMV1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW2tleV0pIHtcbiAgICAgICAgICBoZWFkZXJzW2tleV0gKz0gYCwke3ZhbFtpXX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsW2ldXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyc1trZXldID0gdmFsXG4gICAgfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuXG4gIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0IHx8IGAke2hvc3RuYW1lfSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlcnIgPSBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoc3RyZWFtICE9IG51bGwpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG5cbiAgICAvLyBXZSBkbyBub3QgZGVzdHJveSB0aGUgc29ja2V0IGFzIHdlIGNhbiBjb250aW51ZSB1c2luZyB0aGUgc2Vzc2lvblxuICAgIC8vIHRoZSBzdHJlYW0gZ2V0J3MgZGVzdHJveWVkIGFuZCB0aGUgc2Vzc2lvbiByZW1haW5zIHRvIGNyZWF0ZSBuZXcgc3RyZWFtc1xuICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBXZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHN0cmVhbXMgYXJlIHBlbmRpbmcuXG4gICAgLy8gV2UgY2FuIGNhbGwgb24gY29ubmVjdCwgYW5kIHdhaXQgZm9yIGFib3J0XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgc2Vzc2lvbi5yZWYoKVxuICAgIC8vIFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc3RyZWFtcyBhcmUgcGVuZGluZywgZmlyc3QgcmVxdWVzdFxuICAgIC8vIHdpbGwgY3JlYXRlIGEgbmV3IHN0cmVhbS4gV2UgdHJpZ2dlciBhIHJlcXVlc3QgdG8gY3JlYXRlIHRoZSBzdHJlYW0gYW5kIHdhaXQgdW50aWxcbiAgICAvLyBgcmVhZHlgIGV2ZW50IGlzIHRyaWdnZXJlZFxuICAgIC8vIFdlIGRpc2FibGVkIGVuZFN0cmVhbSB0byBhbGxvdyB0aGUgdXNlciB0byB3cml0ZSB0byB0aGUgc3RyZWFtXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBmYWxzZSwgc2lnbmFsIH0pXG5cbiAgICBpZiAoc3RyZWFtLmlkICYmICFzdHJlYW0ucGVuZGluZykge1xuICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgKytzZXNzaW9uW2tPcGVuU3RyZWFtc11cbiAgICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbmNlKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgICArK3Nlc3Npb25ba09wZW5TdHJlYW1zXVxuICAgICAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkgc2Vzc2lvbi51bnJlZigpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTguM1xuICAvLyA6cGF0aCBhbmQgOnNjaGVtZSBoZWFkZXJzIG11c3QgYmUgb21pdHRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoYm9keSkpIHtcbiAgICBleHRyYWN0Qm9keSA/Pz0gcmVxdWlyZSgnLi4vd2ViL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuXG4gICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBjb250ZW50VHlwZVxuXG4gICAgYm9keSA9IGJvZHlTdHJlYW0uc3RyZWFtXG4gICAgY29udGVudExlbmd0aCA9IGJvZHlTdHJlYW0ubGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgfHwgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBhc3NlcnQoYm9keSwgJ25vIGJvZHkgbXVzdCBub3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEhdID0gYCR7Y29udGVudExlbmd0aH1gXG4gIH1cblxuICBzZXNzaW9uLnJlZigpXG5cbiAgY29uc3Qgc2hvdWxkRW5kU3RyZWFtID0gbWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJyB8fCBib2R5ID09PSBudWxsXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc3RyZWFtcyBvcGVuXG4gICsrc2Vzc2lvbltrT3BlblN0cmVhbXNdXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG4gICAgcmVxdWVzdC5vblJlc3BvbnNlU3RhcnRlZCgpXG5cbiAgICAvLyBEdWUgdG8gdGhlIHN0cmVhbSBuYXR1cmUsIGl0IGlzIHBvc3NpYmxlIHdlIGZhY2UgYSByYWNlIGNvbmRpdGlvblxuICAgIC8vIHdoZXJlIHRoZSBzdHJlYW0gaGFzIGJlZW4gYXNzaWduZWQsIGJ1dCB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkXG4gICAgLy8gdGhlIHJlcXVlc3QgcmVtYWlucyBpbi1mbGlnaHQgYW5kIGhlYWRlcnMgaGFzbid0IGJlZW4gcmVjZWl2ZWQgeWV0XG4gICAgLy8gZm9yIHRob3NlIHNjZW5hcmlvcywgYmVzdCBlZmZvcnQgaXMgdG8gZGVzdHJveSB0aGUgc3RyZWFtIGltbWVkaWF0ZWx5XG4gICAgLy8gYXMgdGhlcmUncyBubyB2YWx1ZSB0byBrZWVwIGl0IG9wZW4uXG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCBwYXJzZUgySGVhZGVycyhyZWFsSGVhZGVycyksIHN0cmVhbS5yZXN1bWUuYmluZChzdHJlYW0pLCAnJykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cblxuICAgIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKHJlcXVlc3Qub25EYXRhKGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgLy8gV2hlbiBzdGF0ZSBpcyBudWxsLCBpdCBtZWFucyB3ZSBoYXZlbid0IGNvbnN1bWVkIGJvZHkgYW5kIHRoZSBzdHJlYW0gc3RpbGwgZG8gbm90IGhhdmVcbiAgICAvLyBhIHN0YXRlLlxuICAgIC8vIFByZXNlbnQgc3BlY2lhbGx5IHdoZW4gdXNpbmcgcGlwZWxpbmUgb3Igc3RyZWFtXG4gICAgaWYgKHN0cmVhbS5zdGF0ZT8uc3RhdGUgPT0gbnVsbCB8fCBzdHJlYW0uc3RhdGUuc3RhdGUgPCA2KSB7XG4gICAgICByZXF1ZXN0Lm9uQ29tcGxldGUoW10pXG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkge1xuICAgICAgLy8gU3RyZWFtIGlzIGNsb3NlZCBvciBoYWxmLWNsb3NlZC1yZW1vdGUgKDYpLCBkZWNyZW1lbnQgY291bnRlciBhbmQgY2xlYW51cFxuICAgICAgLy8gSXQgZG9lcyBub3QgaGF2ZSBzZW5zZSB0byBjb250aW51ZSB3b3JraW5nIHdpdGggdGhlIHN0cmVhbSBhcyB3ZSBkbyBub3RcbiAgICAgIC8vIGhhdmUgeWV0IFJTVF9TVFJFQU0gc3VwcG9ydCBvbiBjbGllbnQtc2lkZVxuXG4gICAgICBzZXNzaW9uLnVucmVmKClcbiAgICB9XG5cbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdIVFRQLzI6IHN0cmVhbSBoYWxmLWNsb3NlZCAocmVtb3RlKScpKVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgIGlmIChzZXNzaW9uW2tPcGVuU3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdmcmFtZUVycm9yJywgKHR5cGUsIGNvZGUpID0+IHtcbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKSlcbiAgfSlcblxuICAvLyBzdHJlYW0ub24oJ2Fib3J0ZWQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IGFib3J0ZWRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRpbWVvdXRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3B1c2gnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgcHVzaFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndHJhaWxlcnMnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdHJhaWxlcnNcbiAgLy8gfSlcblxuICByZXR1cm4gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHdyaXRlQm9keUgyICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gICAgaWYgKCFib2R5IHx8IGNvbnRlbnRMZW5ndGggPT09IDApIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBudWxsLFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3cml0ZUl0ZXJhYmxlKFxuICAgICAgICAgIGFib3J0LFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYihcbiAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjbGllbnRba1NvY2tldF0sXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB3cml0ZVN0cmVhbShcbiAgICAgICAgYWJvcnQsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoXG4gICAgICApXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoXG4gICAgICAgIGFib3J0LFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBleHBlY3RzUGF5bG9hZCkge1xuICB0cnkge1xuICAgIGlmIChib2R5ICE9IG51bGwgJiYgdXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBoMnN0cmVhbS5jb3JrKClcbiAgICAgIGgyc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBoMnN0cmVhbS51bmNvcmsoKVxuICAgICAgaDJzdHJlYW0uZW5kKClcblxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGFib3J0KGVycm9yKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtIChhYm9ydCwgc29ja2V0LCBleHBlY3RzUGF5bG9hZCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgY29udGVudExlbmd0aCkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCAhPT0gMCB8fCBjbGllbnRba1J1bm5pbmddID09PSAwLCAnc3RyZWFtIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICBjb25zdCBwaXBlID0gcGlwZWxpbmUoXG4gICAgYm9keSxcbiAgICBoMnN0cmVhbSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShwaXBlLCBlcnIpXG4gICAgICAgIGFib3J0KGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwucmVtb3ZlQWxsTGlzdGVuZXJzKHBpcGUpXG4gICAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICB1dGlsLmFkZExpc3RlbmVyKHBpcGUsICdkYXRhJywgb25QaXBlRGF0YSlcblxuICBmdW5jdGlvbiBvblBpcGVEYXRhIChjaHVuaykge1xuICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LnNpemUsICdibG9iIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcblxuICB0cnkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCAhPT0gYm9keS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCBib2R5LmFycmF5QnVmZmVyKCkpXG5cbiAgICBoMnN0cmVhbS5jb3JrKClcbiAgICBoMnN0cmVhbS53cml0ZShidWZmZXIpXG4gICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICBoMnN0cmVhbS5lbmQoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJ1ZmZlcilcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSXRlcmFibGUgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBoMnN0cmVhbVxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBoMnN0cmVhbS53cml0ZShjaHVuaylcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaDJzdHJlYW0uZW5kKClcblxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMlxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG4gICAgdGhpcy5yZWRpcmVjdGlvbkxpbWl0UmVhY2hlZCA9IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMudGhyb3dPbk1heFJlZGlyZWN0ICYmIHRoaXMuaGlzdG9yeS5sZW5ndGggPj0gdGhpcy5tYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmFib3J0KG5ldyBFcnJvcignbWF4IHJlZGlyZWN0cycpKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJlZGlyZWN0aW9uTGltaXRSZWFjaGVkID0gdHJ1ZVxuICAgICAgdGhpcy5hYm9ydChuZXcgRXJyb3IoJ21heCByZWRpcmVjdHMnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGx5IGNob29zZXMgbm90IHRvIHNwZWNpZnkgYSBmb3JtYXQgZm9yIHN1Y2ggYm9keSBhbmQgbGVhdmUgaXQgdG9cbiAgICAgICAgc2VydmVycyBhbmQgYnJvd3NlcnMgaW1wbGVtZW50b3JzLCB3ZSBpZ25vcmUgdGhlIGJvZHkgYXMgdGhlcmUgaXMgbm8gc3BlY2lmaWVkIHdheSB0byBldmVudHVhbGx5IHBhcnNlIGl0LlxuICAgICAgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIHRyYWlsZXJzIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCBpbiBjYXNlIG9mIHJlZGlyZWN0aW9uc1xuICAgICAgICBhbmQgbmVpdGhlciBhcmUgdXNlZnVsIGlmIHByZXNlbnQuXG5cbiAgICAgICAgU2VlIGNvbW1lbnQgb24gb25EYXRhIG1ldGhvZCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbi5cbiAgICAgICovXG5cbiAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2F0aW9uIChzdGF0dXNDb2RlLCBoZWFkZXJzKSB7XG4gIGlmIChyZWRpcmVjdGFibGVTdGF0dXNDb2Rlcy5pbmRleE9mKHN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoaGVhZGVyc1tpXS5sZW5ndGggPT09IDggJiYgdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyc1tpXSkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVIZWFkZXIgKGhlYWRlciwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBpZiAoaGVhZGVyLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpID09PSAnaG9zdCdcbiAgfVxuICBpZiAocmVtb3ZlQ29udGVudCAmJiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpLnN0YXJ0c1dpdGgoJ2NvbnRlbnQtJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh1bmtub3duT3JpZ2luICYmIChoZWFkZXIubGVuZ3RoID09PSAxMyB8fCBoZWFkZXIubGVuZ3RoID09PSA2IHx8IGhlYWRlci5sZW5ndGggPT09IDE5KSkge1xuICAgIGNvbnN0IG5hbWUgPSB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpXG4gICAgcmV0dXJuIG5hbWUgPT09ICdhdXRob3JpemF0aW9uJyB8fCBuYW1lID09PSAnY29va2llJyB8fCBuYW1lID09PSAncHJveHktYXV0aG9yaXphdGlvbidcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbmZ1bmN0aW9uIGNsZWFuUmVxdWVzdEhlYWRlcnMgKGhlYWRlcnMsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGhlYWRlcnNbaV0sIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihrZXksIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoaGVhZGVycyA9PSBudWxsLCAnaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZGlyZWN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXInKVxuXG5mdW5jdGlvbiBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yICh7IG1heFJlZGlyZWN0aW9uczogZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gSW50ZXJjZXB0IChvcHRzLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCB7IG1heFJlZGlyZWN0aW9ucyA9IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSA9IG9wdHNcblxuICAgICAgaWYgKCFtYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZGlyZWN0SGFuZGxlciA9IG5ldyBSZWRpcmVjdEhhbmRsZXIoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcilcbiAgICAgIG9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIFN0b3Agc3ViIGRpc3BhdGNoZXIgZnJvbSBhbHNvIHJlZGlyZWN0aW5nLlxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG4iLCAiLy8gQHRzLWNoZWNrXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCBuZXQgPSByZXF1aXJlKCdub2RlOm5ldCcpXG5jb25zdCBodHRwID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwuanMnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi4vY29yZS9kaWFnbm9zdGljcy5qcycpXG5jb25zdCBSZXF1ZXN0ID0gcmVxdWlyZSgnLi4vY29yZS9yZXF1ZXN0LmpzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzLmpzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi4vY29yZS9jb25uZWN0LmpzJylcbmNvbnN0IHtcbiAga1VybCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrQ29ubmVjdCxcbiAga1Jlc3VtaW5nLFxuICBrUnVubmluZyxcbiAga1BlbmRpbmcsXG4gIGtTaXplLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQsXG4gIGtIb3N0SGVhZGVyLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1BpcGVsaW5pbmcsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWUsXG4gIGtNYXhIZWFkZXJzU2l6ZSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkLFxuICBrSGVhZGVyc1RpbWVvdXQsXG4gIGtCb2R5VGltZW91dCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtDb25uZWN0b3IsXG4gIGtNYXhSZWRpcmVjdGlvbnMsXG4gIGtNYXhSZXF1ZXN0cyxcbiAga0NvdW50ZXIsXG4gIGtDbG9zZSxcbiAga0Rlc3Ryb3ksXG4gIGtEaXNwYXRjaCxcbiAga0ludGVyY2VwdG9ycyxcbiAga0xvY2FsQWRkcmVzcyxcbiAga01heFJlc3BvbnNlU2l6ZSxcbiAga09uRXJyb3IsXG4gIGtIVFRQQ29udGV4dCxcbiAga01heENvbmN1cnJlbnRTdHJlYW1zLFxuICBrUmVzdW1lXG59ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzLmpzJylcbmNvbnN0IGNvbm5lY3RIMSA9IHJlcXVpcmUoJy4vY2xpZW50LWgxLmpzJylcbmNvbnN0IGNvbm5lY3RIMiA9IHJlcXVpcmUoJy4vY2xpZW50LWgyLmpzJylcbmxldCBkZXByZWNhdGVkSW50ZXJjZXB0b3JXYXJuZWQgPSBmYWxzZVxuXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgna0Nsb3NlZFJlc29sdmUnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZnVuY3Rpb24gZ2V0UGlwZWxpbmluZyAoY2xpZW50KSB7XG4gIHJldHVybiBjbGllbnRba1BpcGVsaW5pbmddID8/IGNsaWVudFtrSFRUUENvbnRleHRdPy5kZWZhdWx0UGlwZWxpbmluZyA/PyAxXG59XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2xpZW50LmpzJykuZGVmYXVsdH1cbiAqL1xuY2xhc3MgQ2xpZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NsaWVudC5qcycpLkNsaWVudC5PcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCB7XG4gICAgaW50ZXJjZXB0b3JzLFxuICAgIG1heEhlYWRlclNpemUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgc29ja2V0VGltZW91dCxcbiAgICByZXF1ZXN0VGltZW91dCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICBpZGxlVGltZW91dCxcbiAgICBrZWVwQWxpdmUsXG4gICAga2VlcEFsaXZlVGltZW91dCxcbiAgICBtYXhLZWVwQWxpdmVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZU1heFRpbWVvdXQsXG4gICAga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAgICBzb2NrZXRQYXRoLFxuICAgIHBpcGVsaW5pbmcsXG4gICAgdGxzLFxuICAgIHN0cmljdENvbnRlbnRMZW5ndGgsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgIGNvbm5lY3QsXG4gICAgbWF4UmVxdWVzdHNQZXJDbGllbnQsXG4gICAgbG9jYWxBZGRyZXNzLFxuICAgIG1heFJlc3BvbnNlU2l6ZSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICAvLyBoMlxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zLFxuICAgIGFsbG93SDIsXG4gICAgd2ViU29ja2V0XG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKHsgd2ViU29ja2V0IH0pXG5cbiAgICBpZiAoa2VlcEFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQga2VlcEFsaXZlLCB1c2UgcGlwZWxpbmluZz0wIGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgc29ja2V0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgcmVxdWVzdFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChpZGxlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGlkbGVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlVGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4S2VlcEFsaXZlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG1heEtlZXBBbGl2ZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVNYXhUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhIZWFkZXJTaXplICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShtYXhIZWFkZXJTaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1heEhlYWRlclNpemUnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRQYXRoICE9IG51bGwgJiYgdHlwZW9mIHNvY2tldFBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgc29ja2V0UGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3RUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdFRpbWVvdXQpIHx8IGNvbm5lY3RUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0KSB8fCBrZWVwQWxpdmVUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZU1heFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVNYXhUaW1lb3V0KSB8fCBrZWVwQWxpdmVNYXhUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlTWF4VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCcpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnNUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZWRpcmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlcXVlc3RzUGVyQ2xpZW50ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlcXVlc3RzUGVyQ2xpZW50KSB8fCBtYXhSZXF1ZXN0c1BlckNsaWVudCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlcXVlc3RzUGVyQ2xpZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChsb2NhbEFkZHJlc3MgIT0gbnVsbCAmJiAodHlwZW9mIGxvY2FsQWRkcmVzcyAhPT0gJ3N0cmluZycgfHwgbmV0LmlzSVAobG9jYWxBZGRyZXNzKSA9PT0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbG9jYWxBZGRyZXNzIG11c3QgYmUgdmFsaWQgc3RyaW5nIElQIGFkZHJlc3MnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVzcG9uc2VTaXplKSB8fCBtYXhSZXNwb25zZVNpemUgPCAtMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVzcG9uc2VTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCAhPSBudWxsICYmXG4gICAgICAoIU51bWJlci5pc0ludGVnZXIoYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0KSB8fCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgPCAtMSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIC8vIGgyXG4gICAgaWYgKGFsbG93SDIgIT0gbnVsbCAmJiB0eXBlb2YgYWxsb3dIMiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2FsbG93SDIgbXVzdCBiZSBhIHZhbGlkIGJvb2xlYW4gdmFsdWUnKVxuICAgIH1cblxuICAgIGlmIChtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsICYmICh0eXBlb2YgbWF4Q29uY3VycmVudFN0cmVhbXMgIT09ICdudW1iZXInIHx8IG1heENvbmN1cnJlbnRTdHJlYW1zIDwgMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q29uY3VycmVudFN0cmVhbXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4oYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChpbnRlcmNlcHRvcnM/LkNsaWVudCAmJiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9ycy5DbGllbnQpKSB7XG4gICAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgaWYgKCFkZXByZWNhdGVkSW50ZXJjZXB0b3JXYXJuZWQpIHtcbiAgICAgICAgZGVwcmVjYXRlZEludGVyY2VwdG9yV2FybmVkID0gdHJ1ZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdDbGllbnQuT3B0aW9ucyNpbnRlcmNlcHRvciBpcyBkZXByZWNhdGVkLiBVc2UgRGlzcGF0Y2hlciNjb21wb3NlIGluc3RlYWQuJywge1xuICAgICAgICAgIGNvZGU6ICdVTkRJQ0ktQ0xJRU5ULUlOVEVSQ0VQVE9SLURFUFJFQ0FURUQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB9XG5cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tQaXBlbGluaW5nXSA9IHBpcGVsaW5pbmcgIT0gbnVsbCA/IHBpcGVsaW5pbmcgOiAxXG4gICAgdGhpc1trTWF4SGVhZGVyc1NpemVdID0gbWF4SGVhZGVyU2l6ZSB8fCBodHRwLm1heEhlYWRlclNpemVcbiAgICB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF0gPSBrZWVwQWxpdmVUaW1lb3V0ID09IG51bGwgPyA0ZTMgOiBrZWVwQWxpdmVUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlTWF4VGltZW91dF0gPSBrZWVwQWxpdmVNYXhUaW1lb3V0ID09IG51bGwgPyA2MDBlMyA6IGtlZXBBbGl2ZU1heFRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXSA9IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgPT0gbnVsbCA/IDJlMyA6IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgdGhpc1trU2VydmVyTmFtZV0gPSBudWxsXG4gICAgdGhpc1trTG9jYWxBZGRyZXNzXSA9IGxvY2FsQWRkcmVzcyAhPSBudWxsID8gbG9jYWxBZGRyZXNzIDogbnVsbFxuICAgIHRoaXNba1Jlc3VtaW5nXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trTmVlZERyYWluXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trSG9zdEhlYWRlcl0gPSBgaG9zdDogJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9XFxyXFxuYFxuICAgIHRoaXNba0JvZHlUaW1lb3V0XSA9IGJvZHlUaW1lb3V0ICE9IG51bGwgPyBib2R5VGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trSGVhZGVyc1RpbWVvdXRdID0gaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCA/IGhlYWRlcnNUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tTdHJpY3RDb250ZW50TGVuZ3RoXSA9IHN0cmljdENvbnRlbnRMZW5ndGggPT0gbnVsbCA/IHRydWUgOiBzdHJpY3RDb250ZW50TGVuZ3RoXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba01heFJlcXVlc3RzXSA9IG1heFJlcXVlc3RzUGVyQ2xpZW50XG4gICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgdGhpc1trTWF4UmVzcG9uc2VTaXplXSA9IG1heFJlc3BvbnNlU2l6ZSA+IC0xID8gbWF4UmVzcG9uc2VTaXplIDogLTFcbiAgICB0aGlzW2tNYXhDb25jdXJyZW50U3RyZWFtc10gPSBtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsID8gbWF4Q29uY3VycmVudFN0cmVhbXMgOiAxMDAgLy8gTWF4IHBlZXJDb25jdXJyZW50U3RyZWFtcyBmb3IgYSBOb2RlIGgyIHNlcnZlclxuICAgIHRoaXNba0hUVFBDb250ZXh0XSA9IG51bGxcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcblxuICAgIHRoaXNba1Jlc3VtZV0gPSAoc3luYykgPT4gcmVzdW1lKHRoaXMsIHN5bmMpXG4gICAgdGhpc1trT25FcnJvcl0gPSAoZXJyKSA9PiBvbkVycm9yKHRoaXMsIGVycilcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICB0aGlzW2tSZXN1bWVdKHRydWUpXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tQZW5kaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tQZW5kaW5nSWR4XSAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuICEhdGhpc1trSFRUUENvbnRleHRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trSFRUUENvbnRleHRdLmRlc3Ryb3llZFxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpc1trSFRUUENvbnRleHRdPy5idXN5KG51bGwpIHx8XG4gICAgICAodGhpc1trU2l6ZV0gPj0gKGdldFBpcGVsaW5pbmcodGhpcykgfHwgMSkpIHx8XG4gICAgICB0aGlzW2tQZW5kaW5nXSA+IDBcbiAgICApXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmU6IG9ubHkgdXNlZCBmb3IgdGVzdCAqL1xuICBba0Nvbm5lY3RdIChjYikge1xuICAgIGNvbm5lY3QodGhpcylcbiAgICB0aGlzLm9uY2UoJ2Nvbm5lY3QnLCBjYilcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gb3B0cy5vcmlnaW4gfHwgdGhpc1trVXJsXS5vcmlnaW5cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgdGhpc1trUXVldWVdLnB1c2gocmVxdWVzdClcbiAgICBpZiAodGhpc1trUmVzdW1pbmddKSB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAodXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgPT0gbnVsbCAmJiB1dGlsLmlzSXRlcmFibGUocmVxdWVzdC5ib2R5KSkge1xuICAgICAgLy8gV2FpdCBhIHRpY2sgaW4gY2FzZSBzdHJlYW0vaXRlcmF0b3IgaXMgZW5kZWQgaW4gdGhlIHNhbWUgdGljay5cbiAgICAgIHRoaXNba1Jlc3VtaW5nXSA9IDFcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHJlc3VtZSh0aGlzKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trUmVzdW1lXSh0cnVlKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tSZXN1bWluZ10gJiYgdGhpc1trTmVlZERyYWluXSAhPT0gMiAmJiB0aGlzW2tCdXN5XSkge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IDJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXSA8IDJcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICAvLyBUT0RPOiBmb3IgSDIgd2UgbmVlZCB0byBncmFjZWZ1bGx5IGZsdXNoIHRoZSByZW1haW5pbmcgZW5xdWV1ZWRcbiAgICAvLyByZXF1ZXN0IGFuZCBjbG9zZSBlYWNoIHN0cmVhbS5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzW2tTaXplXSkge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICB1dGlsLmVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trQ2xvc2VkUmVzb2x2ZV0pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBTaG91bGQgd2UgZXJyb3IgaGVyZSB3aXRoIENsaWVudERlc3Ryb3llZEVycm9yP1xuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQQ29udGV4dF0pIHtcbiAgICAgICAgdGhpc1trSFRUUENvbnRleHRdLmRlc3Ryb3koZXJyLCBjYWxsYmFjaylcbiAgICAgICAgdGhpc1trSFRUUENvbnRleHRdID0gbnVsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9XG5cbiAgICAgIHRoaXNba1Jlc3VtZV0oKVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4uL2ludGVyY2VwdG9yL3JlZGlyZWN0LWludGVyY2VwdG9yLmpzJylcblxuZnVuY3Rpb24gb25FcnJvciAoY2xpZW50LCBlcnIpIHtcbiAgaWYgKFxuICAgIGNsaWVudFtrUnVubmluZ10gPT09IDAgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfU09DS0VUJ1xuICApIHtcbiAgICAvLyBFcnJvciBpcyBub3QgY2F1c2VkIGJ5IHJ1bm5pbmcgcmVxdWVzdCBhbmQgbm90IGEgcmVjb3ZlcmFibGVcbiAgICAvLyBzb2NrZXQgZXJyb3IuXG5cbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nSWR4XSA9PT0gY2xpZW50W2tSdW5uaW5nSWR4XSlcblxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgICBhc3NlcnQoY2xpZW50W2tTaXplXSA9PT0gMClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Q2xpZW50fSBjbGllbnRcbiAqIEByZXR1cm5zXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKGNsaWVudCkge1xuICBhc3NlcnQoIWNsaWVudFtrQ29ubmVjdGluZ10pXG4gIGFzc2VydCghY2xpZW50W2tIVFRQQ29udGV4dF0pXG5cbiAgbGV0IHsgaG9zdCwgaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0IH0gPSBjbGllbnRba1VybF1cblxuICAvLyBSZXNvbHZlIGlwdjZcbiAgaWYgKGhvc3RuYW1lWzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0bmFtZS5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIGNvbnN0IGlwID0gaG9zdG5hbWUuc3Vic3RyaW5nKDEsIGlkeClcblxuICAgIGFzc2VydChuZXQuaXNJUChpcCkpXG4gICAgaG9zdG5hbWUgPSBpcFxuICB9XG5cbiAgY2xpZW50W2tDb25uZWN0aW5nXSA9IHRydWVcblxuICBpZiAoY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QucHVibGlzaCh7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgdmVyc2lvbjogY2xpZW50W2tIVFRQQ29udGV4dF0/LnZlcnNpb24sXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LFxuICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl1cbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjbGllbnRba0Nvbm5lY3Rvcl0oe1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LCAoZXJyLCBzb2NrZXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0Lm9uKCdlcnJvcicsIG5vb3ApLCBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydChzb2NrZXQpXG5cbiAgICB0cnkge1xuICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0gPSBzb2NrZXQuYWxwblByb3RvY29sID09PSAnaDInXG4gICAgICAgID8gYXdhaXQgY29ubmVjdEgyKGNsaWVudCwgc29ja2V0KVxuICAgICAgICA6IGF3YWl0IGNvbm5lY3RIMShjbGllbnQsIHNvY2tldClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNvY2tldC5kZXN0cm95KCkub24oJ2Vycm9yJywgbm9vcClcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIGNsaWVudFtrQ29ubmVjdGluZ10gPSBmYWxzZVxuXG4gICAgc29ja2V0W2tDb3VudGVyXSA9IDBcbiAgICBzb2NrZXRba01heFJlcXVlc3RzXSA9IGNsaWVudFtrTWF4UmVxdWVzdHNdXG4gICAgc29ja2V0W2tDbGllbnRdID0gY2xpZW50XG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdGVkLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0ZWQucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgdmVyc2lvbjogY2xpZW50W2tIVFRQQ29udGV4dF0/LnZlcnNpb24sXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgc29ja2V0XG4gICAgICB9KVxuICAgIH1cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RFcnJvci5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICB2ZXJzaW9uOiBjbGllbnRba0hUVFBDb250ZXh0XT8udmVyc2lvbixcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcbiAgICAgIHdoaWxlIChjbGllbnRba1BlbmRpbmddID4gMCAmJiBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXS5zZXJ2ZXJuYW1lID09PSBjbGllbnRba1NlcnZlck5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdKytdXG4gICAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkVycm9yKGNsaWVudCwgZXJyKVxuICAgIH1cblxuICAgIGNsaWVudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBlcnIpXG4gIH1cblxuICBjbGllbnRba1Jlc3VtZV0oKVxufVxuXG5mdW5jdGlvbiBlbWl0RHJhaW4gKGNsaWVudCkge1xuICBjbGllbnRba05lZWREcmFpbl0gPSAwXG4gIGNsaWVudC5lbWl0KCdkcmFpbicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG59XG5cbmZ1bmN0aW9uIHJlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIGlmIChjbGllbnRba1Jlc3VtaW5nXSA9PT0gMikge1xuICAgIHJldHVyblxuICB9XG5cbiAgY2xpZW50W2tSZXN1bWluZ10gPSAyXG5cbiAgX3Jlc3VtZShjbGllbnQsIHN5bmMpXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMFxuXG4gIGlmIChjbGllbnRba1J1bm5pbmdJZHhdID4gMjU2KSB7XG4gICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKDAsIGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSAtPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gICAgY2xpZW50W2tSdW5uaW5nSWR4XSA9IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDbG9zZWRSZXNvbHZlXSAmJiAhY2xpZW50W2tTaXplXSkge1xuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrSFRUUENvbnRleHRdKSB7XG4gICAgICBjbGllbnRba0hUVFBDb250ZXh0XS5yZXN1bWUoKVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0J1c3ldKSB7XG4gICAgICBjbGllbnRba05lZWREcmFpbl0gPSAyXG4gICAgfSBlbHNlIGlmIChjbGllbnRba05lZWREcmFpbl0gPT09IDIpIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDFcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZW1pdERyYWluKGNsaWVudCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGdldFBpcGVsaW5pbmcoY2xpZW50KSB8fCAxKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dXG5cbiAgICBpZiAoY2xpZW50W2tVcmxdLnByb3RvY29sID09PSAnaHR0cHM6JyAmJiBjbGllbnRba1NlcnZlck5hbWVdICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY2xpZW50W2tTZXJ2ZXJOYW1lXSA9IHJlcXVlc3Quc2VydmVybmFtZVxuICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0/LmRlc3Ryb3kobmV3IEluZm9ybWF0aW9uYWxFcnJvcignc2VydmVybmFtZSBjaGFuZ2VkJyksICgpID0+IHtcbiAgICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0gPSBudWxsXG4gICAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nvbm5lY3RpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWNsaWVudFtrSFRUUENvbnRleHRdKSB7XG4gICAgICBjb25uZWN0KGNsaWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0hUVFBDb250ZXh0XS5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0hUVFBDb250ZXh0XS5idXN5KHJlcXVlc3QpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiBjbGllbnRba0hUVFBDb250ZXh0XS53cml0ZShyZXF1ZXN0KSkge1xuICAgICAgY2xpZW50W2tQZW5kaW5nSWR4XSsrXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1BlbmRpbmdJZHhdLCAxKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFxuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vLyBFeHRyYWN0ZWQgZnJvbSBub2RlL2xpYi9pbnRlcm5hbC9maXhlZF9xdWV1ZS5qc1xuXG4vLyBDdXJyZW50bHkgb3B0aW1hbCBxdWV1ZSBzaXplLCB0ZXN0ZWQgb24gVjggNi4wIC0gNi42LiBNdXN0IGJlIHBvd2VyIG9mIHR3by5cbmNvbnN0IGtTaXplID0gMjA0ODtcbmNvbnN0IGtNYXNrID0ga1NpemUgLSAxO1xuXG4vLyBUaGUgRml4ZWRRdWV1ZSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBmaXhlZC1zaXplXG4vLyBjaXJjdWxhciBidWZmZXJzLiBJdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuLy9cbi8vICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxcbi8vICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLy8gICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2XG4vLyArLS0tLS0tLS0tLS0rIDwtLS0tLVxcICAgICAgICstLS0tLS0tLS0tLSsgPC0tLS0tLVxcICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgXFwtLS0tLSB8ICAgbmV4dCAgICB8ICAgICAgICAgXFwtLS0tLS0tIHwgICBuZXh0ICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8IDwtLSB0b3AgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gT3IsIGlmIHRoZXJlIGlzIG9ubHkgb25lIGNpcmN1bGFyIGJ1ZmZlciwgaXQgbG9va3Mgc29tZXRoaW5nXG4vLyBsaWtlIGVpdGhlciBvZiB0aGVzZTpcbi8vXG4vLyAgaGVhZCAgIHRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICAgdGFpbFxuLy8gICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8XG4vLyAgICB2ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbbnVsbF0gICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgICAgICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIEFkZGluZyBhIHZhbHVlIG1lYW5zIG1vdmluZyBgdG9wYCBmb3J3YXJkIGJ5IG9uZSwgcmVtb3ZpbmcgbWVhbnNcbi8vIG1vdmluZyBgYm90dG9tYCBmb3J3YXJkIGJ5IG9uZS4gQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCwgdGhlIHF1ZXVlXG4vLyB3cmFwcyBhcm91bmQuXG4vL1xuLy8gV2hlbiBgdG9wID09PSBib3R0b21gIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGVtcHR5IGFuZCB3aGVuXG4vLyBgdG9wICsgMSA9PT0gYm90dG9tYCBpdCdzIGZ1bGwuIFRoaXMgd2FzdGVzIGEgc2luZ2xlIHNwYWNlIG9mIHN0b3JhZ2Vcbi8vIGJ1dCBhbGxvd3MgbXVjaCBxdWlja2VyIGNoZWNrcy5cblxuY2xhc3MgRml4ZWRDaXJjdWxhckJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYm90dG9tID0gMDtcbiAgICB0aGlzLnRvcCA9IDA7XG4gICAgdGhpcy5saXN0ID0gbmV3IEFycmF5KGtTaXplKTtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy50b3AgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgaXNGdWxsKCkge1xuICAgIHJldHVybiAoKHRoaXMudG9wICsgMSkgJiBrTWFzaykgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgdGhpcy5saXN0W3RoaXMudG9wXSA9IGRhdGE7XG4gICAgdGhpcy50b3AgPSAodGhpcy50b3AgKyAxKSAmIGtNYXNrO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLmxpc3RbdGhpcy5ib3R0b21dO1xuICAgIGlmIChuZXh0SXRlbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5saXN0W3RoaXMuYm90dG9tXSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJvdHRvbSA9ICh0aGlzLmJvdHRvbSArIDEpICYga01hc2s7XG4gICAgcmV0dXJuIG5leHRJdGVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuaXNFbXB0eSgpO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgaWYgKHRoaXMuaGVhZC5pc0Z1bGwoKSkge1xuICAgICAgLy8gSGVhZCBpcyBmdWxsOiBDcmVhdGVzIGEgbmV3IHF1ZXVlLCBzZXRzIHRoZSBvbGQgcXVldWUncyBgLm5leHRgIHRvIGl0LFxuICAgICAgLy8gYW5kIHNldHMgaXQgYXMgdGhlIG5ldyBtYWluIHF1ZXVlLlxuICAgICAgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICAgIH1cbiAgICB0aGlzLmhlYWQucHVzaChkYXRhKTtcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgY29uc3QgbmV4dCA9IHRhaWwuc2hpZnQoKTtcbiAgICBpZiAodGFpbC5pc0VtcHR5KCkgJiYgdGFpbC5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhbm90aGVyIHF1ZXVlLCBpdCBmb3JtcyB0aGUgbmV3IHRhaWwuXG4gICAgICB0aGlzLnRhaWwgPSB0YWlsLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0O1xuICB9XG59O1xuIiwgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBrUG9vbCA9IFN5bWJvbCgncG9vbCcpXG5cbmNsYXNzIFBvb2xTdGF0cyB7XG4gIGNvbnN0cnVjdG9yIChwb29sKSB7XG4gICAgdGhpc1trUG9vbF0gPSBwb29sXG4gIH1cblxuICBnZXQgY29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIGdldCBmcmVlICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0ZyZWVdXG4gIH1cblxuICBnZXQgcGVuZGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tQZW5kaW5nXVxuICB9XG5cbiAgZ2V0IHF1ZXVlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tRdWV1ZWRdXG4gIH1cblxuICBnZXQgcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tSdW5uaW5nXVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrU2l6ZV1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xTdGF0c1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL2ZpeGVkLXF1ZXVlJylcbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUsIGtSdW5uaW5nLCBrUGVuZGluZywga1F1ZXVlZCwga0J1c3ksIGtGcmVlLCBrVXJsLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBQb29sU3RhdHMgPSByZXF1aXJlKCcuL3Bvb2wtc3RhdHMnKVxuXG5jb25zdCBrQ2xpZW50cyA9IFN5bWJvbCgnY2xpZW50cycpXG5jb25zdCBrTmVlZERyYWluID0gU3ltYm9sKCduZWVkRHJhaW4nKVxuY29uc3Qga1F1ZXVlID0gU3ltYm9sKCdxdWV1ZScpXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgnY2xvc2VkIHJlc29sdmUnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtHZXREaXNwYXRjaGVyID0gU3ltYm9sKCdnZXQgZGlzcGF0Y2hlcicpXG5jb25zdCBrQWRkQ2xpZW50ID0gU3ltYm9sKCdhZGQgY2xpZW50JylcbmNvbnN0IGtSZW1vdmVDbGllbnQgPSBTeW1ib2woJ3JlbW92ZSBjbGllbnQnKVxuY29uc3Qga1N0YXRzID0gU3ltYm9sKCdzdGF0cycpXG5cbmNsYXNzIFBvb2xCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBuZXcgRml4ZWRRdWV1ZSgpXG4gICAgdGhpc1trQ2xpZW50c10gPSBbXVxuICAgIHRoaXNba1F1ZXVlZF0gPSAwXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSBmdW5jdGlvbiBvbkRyYWluIChvcmlnaW4sIHRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHF1ZXVlID0gcG9vbFtrUXVldWVdXG5cbiAgICAgIGxldCBuZWVkRHJhaW4gPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIW5lZWREcmFpbikge1xuICAgICAgICBjb25zdCBpdGVtID0gcXVldWUuc2hpZnQoKVxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHBvb2xba1F1ZXVlZF0tLVxuICAgICAgICBuZWVkRHJhaW4gPSAhdGhpcy5kaXNwYXRjaChpdGVtLm9wdHMsIGl0ZW0uaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpc1trTmVlZERyYWluXSA9IG5lZWREcmFpblxuXG4gICAgICBpZiAoIXRoaXNba05lZWREcmFpbl0gJiYgcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBwb29sW2tOZWVkRHJhaW5dID0gZmFsc2VcbiAgICAgICAgcG9vbC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgICAgfVxuXG4gICAgICBpZiAocG9vbFtrQ2xvc2VkUmVzb2x2ZV0gJiYgcXVldWUuaXNFbXB0eSgpKSB7XG4gICAgICAgIFByb21pc2VcbiAgICAgICAgICAuYWxsKHBvb2xba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgICAgICAgLnRoZW4ocG9vbFtrQ2xvc2VkUmVzb2x2ZV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uRGlzY29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdHNdID0gbmV3IFBvb2xTdGF0cyh0aGlzKVxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrRnJlZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSAmJiAhY2xpZW50W2tOZWVkRHJhaW5dKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1BlbmRpbmddOiBwZW5kaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBwZW5kaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICBsZXQgcmV0ID0gMFxuICAgIGZvciAoY29uc3QgeyBba1J1bm5pbmddOiBydW5uaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBydW5uaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1NpemVdOiBzaXplIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBzaXplXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBzdGF0cyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1N0YXRzXVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGlmICh0aGlzW2tRdWV1ZV0uaXNFbXB0eSgpKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzW2tRdWV1ZV0uc2hpZnQoKVxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpdGVtLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpc1trQ2xpZW50c10ubWFwKGMgPT4gYy5kZXN0cm95KGVycikpKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trUXVldWVdLnB1c2goeyBvcHRzLCBoYW5kbGVyIH0pXG4gICAgICB0aGlzW2tRdWV1ZWRdKytcbiAgICB9IGVsc2UgaWYgKCFkaXNwYXRjaGVyLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpKSB7XG4gICAgICBkaXNwYXRjaGVyW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trTmVlZERyYWluXSA9ICF0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBba0FkZENsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudFxuICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgIC5vbignZGlzY29ubmVjdCcsIHRoaXNba09uRGlzY29ubmVjdF0pXG4gICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgIHRoaXNba0NsaWVudHNdLnB1c2goY2xpZW50KVxuXG4gICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgICAgICB0aGlzW2tPbkRyYWluXShjbGllbnRba1VybF0sIFt0aGlzLCBjbGllbnRdKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBba1JlbW92ZUNsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudC5jbG9zZSgoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKGNsaWVudClcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXNba05lZWREcmFpbl0gPSB0aGlzW2tDbGllbnRzXS5zb21lKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrQ29ubmVjdGlvbnMgPSBTeW1ib2woJ2Nvbm5lY3Rpb25zJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBjb25uZWN0aW9ucyxcbiAgICBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksXG4gICAgY29ubmVjdCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICB0bHMsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgc29ja2V0UGF0aCxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICBhbGxvd0gyLFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgaWYgKGNvbm5lY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdGlvbnMpIHx8IGNvbm5lY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9ucycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4oYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHN1cGVyKG9wdGlvbnMpXG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM/LlBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sKVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trQ29ubmVjdGlvbnNdID0gY29ubmVjdGlvbnMgfHwgbnVsbFxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKG9yaWdpbilcbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QsIGFsbG93SDIgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIHRoaXMub24oJ2Nvbm5lY3Rpb25FcnJvcicsIChvcmlnaW4sIHRhcmdldHMsIGVycm9yKSA9PiB7XG4gICAgICAvLyBJZiBhIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJzLCB3ZSByZW1vdmUgdGhlIGNsaWVudCBmcm9tIHRoZSBwb29sLFxuICAgICAgLy8gYW5kIGVtaXQgYSBjb25uZWN0aW9uRXJyb3IgZXZlbnQuIFRoZXkgd2lsbCBub3QgYmUgcmUtdXNlZC5cbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8zODk1XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIC8vIERvIG5vdCB1c2Uga1JlbW92ZUNsaWVudCBoZXJlLCBhcyBpdCB3aWxsIGNsb3NlIHRoZSBjbGllbnQsXG4gICAgICAgIC8vIGJ1dCB0aGUgY2xpZW50IGNhbm5vdCBiZSBjbG9zZWQgaW4gdGhpcyBzdGF0ZS5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZih0YXJnZXQpXG4gICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgaWYgKCFjbGllbnRba05lZWREcmFpbl0pIHtcbiAgICAgICAgcmV0dXJuIGNsaWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHBhcnNlT3JpZ2luIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrR3JlYXRlc3RDb21tb25EaXZpc29yID0gU3ltYm9sKCdrR3JlYXRlc3RDb21tb25EaXZpc29yJylcbmNvbnN0IGtDdXJyZW50V2VpZ2h0ID0gU3ltYm9sKCdrQ3VycmVudFdlaWdodCcpXG5jb25zdCBrSW5kZXggPSBTeW1ib2woJ2tJbmRleCcpXG5jb25zdCBrV2VpZ2h0ID0gU3ltYm9sKCdrV2VpZ2h0JylcbmNvbnN0IGtNYXhXZWlnaHRQZXJTZXJ2ZXIgPSBTeW1ib2woJ2tNYXhXZWlnaHRQZXJTZXJ2ZXInKVxuY29uc3Qga0Vycm9yUGVuYWx0eSA9IFN5bWJvbCgna0Vycm9yUGVuYWx0eScpXG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gbnVtYmVycyBieVxuICogdXNpbmcgdGhlIEV1Y2xpZGVhbiBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGEgPT09IDApIHJldHVybiBiXG5cbiAgd2hpbGUgKGIgIT09IDApIHtcbiAgICBjb25zdCB0ID0gYlxuICAgIGIgPSBhICUgYlxuICAgIGEgPSB0XG4gIH1cbiAgcmV0dXJuIGFcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh1cHN0cmVhbXMgPSBbXSwgeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIC4uLm9wdHMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSBvcHRzXG4gICAgdGhpc1trSW5kZXhdID0gLTFcbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IDBcblxuICAgIHRoaXNba01heFdlaWdodFBlclNlcnZlcl0gPSB0aGlzW2tPcHRpb25zXS5tYXhXZWlnaHRQZXJTZXJ2ZXIgfHwgMTAwXG4gICAgdGhpc1trRXJyb3JQZW5hbHR5XSA9IHRoaXNba09wdGlvbnNdLmVycm9yUGVuYWx0eSB8fCAxNVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVwc3RyZWFtcykpIHtcbiAgICAgIHVwc3RyZWFtcyA9IFt1cHN0cmVhbXNdXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzPy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIGxldCByZXN1bHQgPSAwXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzW2tDbGllbnRzXS5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ID0gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yKHRoaXNba0NsaWVudHNdW2ldW2tXZWlnaHRdLCByZXN1bHQpXG4gICAgfVxuXG4gICAgdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXSA9IHJlc3VsdFxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrQ2xpZW50cywga1J1bm5pbmcsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvcicpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIG9wdHMuY29ubmVjdGlvbnMgPT09IDFcbiAgICA/IG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxuICAgIDogbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCBtYXhSZWRpcmVjdGlvbnMgPSAwLCBjb25uZWN0LCAuLi5vcHRpb25zIH0gPSB7fSkge1xuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM/LkFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0IH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuICAgIHRoaXNba0NsaWVudHNdID0gbmV3IE1hcCgpXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFt0aGlzLCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgcmV0ICs9IGNsaWVudFtrUnVubmluZ11cbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBsZXQga2V5XG4gICAgaWYgKG9wdHMub3JpZ2luICYmICh0eXBlb2Ygb3B0cy5vcmlnaW4gPT09ICdzdHJpbmcnIHx8IG9wdHMub3JpZ2luIGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAga2V5ID0gU3RyaW5nKG9wdHMub3JpZ2luKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMub3JpZ2luIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIFVSTC4nKVxuICAgIH1cblxuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9wdHMub3JpZ2luLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgICAgLy8gVGhpcyBpbnRyb2R1Y2VzIGEgdGlueSBtZW1vcnkgbGVhaywgYXMgZGlzcGF0Y2hlcnMgYXJlIG5ldmVyIHJlbW92ZWQgZnJvbSB0aGUgbWFwLlxuICAgICAgLy8gVE9ETyhtY29sbGluYSk6IHJlbW92ZSB0ZSB0aW1lciB3aGVuIHRoZSBjbGllbnQvcG9vbCBkbyBub3QgaGF2ZSBhbnkgbW9yZVxuICAgICAgLy8gYWN0aXZlIGNvbm5lY3Rpb25zLlxuICAgICAgdGhpc1trQ2xpZW50c10uc2V0KGtleSwgZGlzcGF0Y2hlcilcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjbG9zZVByb21pc2VzLnB1c2goY2xpZW50LmNsb3NlKCkpXG4gICAgfVxuICAgIHRoaXNba0NsaWVudHNdLmNsZWFyKClcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgIH1cbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChkZXN0cm95UHJvbWlzZXMpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBZ2VudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtQcm94eSwga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBVUkwgfSA9IHJlcXVpcmUoJ25vZGU6dXJsJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi4vY29yZS9jb25uZWN0JylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcblxuY29uc3Qga0FnZW50ID0gU3ltYm9sKCdwcm94eSBhZ2VudCcpXG5jb25zdCBrQ2xpZW50ID0gU3ltYm9sKCdwcm94eSBjbGllbnQnKVxuY29uc3Qga1Byb3h5SGVhZGVycyA9IFN5bWJvbCgncHJveHkgaGVhZGVycycpXG5jb25zdCBrUmVxdWVzdFRscyA9IFN5bWJvbCgncmVxdWVzdCB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga1Byb3h5VGxzID0gU3ltYm9sKCdwcm94eSB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga0Nvbm5lY3RFbmRwb2ludCA9IFN5bWJvbCgnY29ubmVjdCBlbmRwb2ludCBmdW5jdGlvbicpXG5jb25zdCBrVHVubmVsUHJveHkgPSBTeW1ib2woJ3R1bm5lbCBwcm94eScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm90b2NvbFBvcnQgKHByb3RvY29sKSB7XG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MFxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5mdW5jdGlvbiBkZWZhdWx0QWdlbnRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgaWYgKG9wdHMuY29ubmVjdGlvbnMgPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG4gIH1cbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgSHR0cDFQcm94eVdyYXBwZXIgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gICNjbGllbnRcblxuICBjb25zdHJ1Y3RvciAocHJveHlVcmwsIHsgaGVhZGVycyA9IHt9LCBjb25uZWN0LCBmYWN0b3J5IH0pIHtcbiAgICBzdXBlcigpXG4gICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBVUkwgaXMgbWFuZGF0b3J5JylcbiAgICB9XG5cbiAgICB0aGlzW2tQcm94eUhlYWRlcnNdID0gaGVhZGVyc1xuICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICB0aGlzLiNjbGllbnQgPSBmYWN0b3J5KHByb3h5VXJsLCB7IGNvbm5lY3QgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jY2xpZW50ID0gbmV3IENsaWVudChwcm94eVVybCwgeyBjb25uZWN0IH0pXG4gICAgfVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvbkhlYWRlcnMgPSBoYW5kbGVyLm9uSGVhZGVyc1xuICAgIGhhbmRsZXIub25IZWFkZXJzID0gZnVuY3Rpb24gKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3VtZSkge1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwNykge1xuICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGhhbmRsZXIub25FcnJvcihuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkICg0MDcpJykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25IZWFkZXJzKSBvbkhlYWRlcnMuY2FsbCh0aGlzLCBzdGF0dXNDb2RlLCBkYXRhLCByZXN1bWUpXG4gICAgfVxuXG4gICAgLy8gUmV3cml0ZSByZXF1ZXN0IGFzIGFuIEhUVFAxIFByb3h5IHJlcXVlc3QsIHdpdGhvdXQgdHVubmVsaW5nLlxuICAgIGNvbnN0IHtcbiAgICAgIG9yaWdpbixcbiAgICAgIHBhdGggPSAnLycsXG4gICAgICBoZWFkZXJzID0ge31cbiAgICB9ID0gb3B0c1xuXG4gICAgb3B0cy5wYXRoID0gb3JpZ2luICsgcGF0aFxuXG4gICAgaWYgKCEoJ2hvc3QnIGluIGhlYWRlcnMpICYmICEoJ0hvc3QnIGluIGhlYWRlcnMpKSB7XG4gICAgICBjb25zdCB7IGhvc3QgfSA9IG5ldyBVUkwob3JpZ2luKVxuICAgICAgaGVhZGVycy5ob3N0ID0gaG9zdFxuICAgIH1cbiAgICBvcHRzLmhlYWRlcnMgPSB7IC4uLnRoaXNba1Byb3h5SGVhZGVyc10sIC4uLmhlYWRlcnMgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudFtrRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudC5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICByZXR1cm4gdGhpcy4jY2xpZW50LmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmNsYXNzIFByb3h5QWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKCFvcHRzIHx8ICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgIShvcHRzIGluc3RhbmNlb2YgVVJMKSAmJiAhb3B0cy51cmkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IHVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG4gICAgaWYgKHR5cGVvZiBjbGllbnRGYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMuY2xpZW50RmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHByb3h5VHVubmVsID0gdHJ1ZSB9ID0gb3B0c1xuXG4gICAgY29uc3QgdXJsID0gdGhpcy4jZ2V0VXJsKG9wdHMpXG4gICAgY29uc3QgeyBocmVmLCBvcmlnaW4sIHBvcnQsIHByb3RvY29sLCB1c2VybmFtZSwgcGFzc3dvcmQsIGhvc3RuYW1lOiBwcm94eUhvc3RuYW1lIH0gPSB1cmxcblxuICAgIHRoaXNba1Byb3h5XSA9IHsgdXJpOiBocmVmLCBwcm90b2NvbCB9XG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzPy5Qcm94eUFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudFxuICAgICAgOiBbXVxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cbiAgICB0aGlzW2tUdW5uZWxQcm94eV0gPSBwcm94eVR1bm5lbFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG5cbiAgICBjb25zdCBhZ2VudEZhY3RvcnkgPSBvcHRzLmZhY3RvcnkgfHwgZGVmYXVsdEFnZW50RmFjdG9yeVxuICAgIGNvbnN0IGZhY3RvcnkgPSAob3JpZ2luLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCB7IHByb3RvY29sIH0gPSBuZXcgVVJMKG9yaWdpbilcbiAgICAgIGlmICghdGhpc1trVHVubmVsUHJveHldICYmIHByb3RvY29sID09PSAnaHR0cDonICYmIHRoaXNba1Byb3h5XS5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHAxUHJveHlXcmFwcGVyKHRoaXNba1Byb3h5XS51cmksIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgIGNvbm5lY3QsXG4gICAgICAgICAgZmFjdG9yeTogYWdlbnRGYWN0b3J5XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gYWdlbnRGYWN0b3J5KG9yaWdpbiwgb3B0aW9ucylcbiAgICB9XG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkodXJsLCB7IGNvbm5lY3QgfSlcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGZhY3RvcnksXG4gICAgICBjb25uZWN0OiBhc3luYyAob3B0cywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZFBhdGggPSBvcHRzLmhvc3RcbiAgICAgICAgaWYgKCFvcHRzLnBvcnQpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRQYXRoICs9IGA6JHtkZWZhdWx0UHJvdG9jb2xQb3J0KG9wdHMucHJvdG9jb2wpfWBcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgc29ja2V0LCBzdGF0dXNDb2RlIH0gPSBhd2FpdCB0aGlzW2tDbGllbnRdLmNvbm5lY3Qoe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHJlcXVlc3RlZFBhdGgsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgICAgICBob3N0OiBvcHRzLmhvc3RcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXJ2ZXJuYW1lOiB0aGlzW2tQcm94eVRsc10/LnNlcnZlcm5hbWUgfHwgcHJveHlIb3N0bmFtZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIG5vb3ApLmRlc3Ryb3koKVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoYFByb3h5IHJlc3BvbnNlICgke3N0YXR1c0NvZGV9KSAhPT0gMjAwIHdoZW4gSFRUUCBUdW5uZWxpbmdgKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdHMucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzb2NrZXQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHNlcnZlcm5hbWVcbiAgICAgICAgICBpZiAodGhpc1trUmVxdWVzdFRsc10pIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSB0aGlzW2tSZXF1ZXN0VGxzXS5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSh7IC4uLm9wdHMsIHNlcnZlcm5hbWUsIGh0dHBTb2NrZXQ6IHNvY2tldCB9LCBjYWxsYmFjaylcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpIHtcbiAgICAgICAgICAgIC8vIFRocm93IGEgY3VzdG9tIGVycm9yIHRvIGF2b2lkIGxvb3AgaW4gY2xpZW50LmpzI2Nvbm5lY3RcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcihlcnIpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IGJ1aWxkSGVhZGVycyhvcHRzLmhlYWRlcnMpXG4gICAgdGhyb3dJZlByb3h5QXV0aElzU2VudChoZWFkZXJzKVxuXG4gICAgaWYgKGhlYWRlcnMgJiYgISgnaG9zdCcgaW4gaGVhZGVycykgJiYgISgnSG9zdCcgaW4gaGVhZGVycykpIHtcbiAgICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICAgIGhlYWRlcnMuaG9zdCA9IGhvc3RcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBoZWFkZXJzXG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvcHJveHktYWdlbnQnKS5Qcm94eUFnZW50Lk9wdGlvbnMgfCBzdHJpbmcgfCBVUkx9IG9wdHNcbiAgICogQHJldHVybnMge1VSTH1cbiAgICovXG4gICNnZXRVcmwgKG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChvcHRzKVxuICAgIH0gZWxzZSBpZiAob3B0cyBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgcmV0dXJuIG9wdHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBVUkwob3B0cy51cmkpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uZGVzdHJveSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5kZXN0cm95KClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzIChoZWFkZXJzKSB7XG4gIC8vIFdoZW4gdXNpbmcgdW5kaWNpLmZldGNoLCB0aGUgaGVhZGVycyBsaXN0IGlzIHN0b3JlZFxuICAvLyBhcyBhbiBhcnJheS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3QgaGVhZGVyc1BhaXIgPSB7fVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBoZWFkZXJzUGFpcltoZWFkZXJzW2ldXSA9IGhlYWRlcnNbaSArIDFdXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNQYWlyXG4gIH1cblxuICByZXR1cm4gaGVhZGVyc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICpcbiAqIFByZXZpb3VzIHZlcnNpb25zIG9mIFByb3h5QWdlbnQgc3VnZ2VzdHMgdGhlIFByb3h5LUF1dGhvcml6YXRpb24gaW4gcmVxdWVzdCBoZWFkZXJzXG4gKiBOZXZlcnRoZWxlc3MsIGl0IHdhcyBjaGFuZ2VkIGFuZCB0byBhdm9pZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYnkgZW5kIHVzZXJzXG4gKiB0aGlzIGNoZWNrIHdhcyBjcmVhdGVkLlxuICogSXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICovXG5mdW5jdGlvbiB0aHJvd0lmUHJveHlBdXRoSXNTZW50IChoZWFkZXJzKSB7XG4gIGNvbnN0IGV4aXN0UHJveHlBdXRoID0gaGVhZGVycyAmJiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5maW5kKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSAncHJveHktYXV0aG9yaXphdGlvbicpXG4gIGlmIChleGlzdFByb3h5QXV0aCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgYmUgc2VudCBpbiBQcm94eUFnZW50IGNvbnN0cnVjdG9yJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3h5QWdlbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IGtDbG9zZSwga0Rlc3Ryb3ksIGtDbG9zZWQsIGtEZXN0cm95ZWQsIGtEaXNwYXRjaCwga05vUHJveHlBZ2VudCwga0h0dHBQcm94eUFnZW50LCBrSHR0cHNQcm94eUFnZW50IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vcHJveHktYWdlbnQnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuY29uc3QgREVGQVVMVF9QT1JUUyA9IHtcbiAgJ2h0dHA6JzogODAsXG4gICdodHRwczonOiA0NDNcbn1cblxubGV0IGV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNsYXNzIEVudkh0dHBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAjbm9Qcm94eVZhbHVlID0gbnVsbFxuICAjbm9Qcm94eUVudHJpZXMgPSBudWxsXG4gICNvcHRzID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy4jb3B0cyA9IG9wdHNcblxuICAgIGlmICghZXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICBleHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdFbnZIdHRwUHJveHlBZ2VudCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgIGNvZGU6ICdVTkRJQ0ktRUhQQSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgeyBodHRwUHJveHksIGh0dHBzUHJveHksIG5vUHJveHksIC4uLmFnZW50T3B0cyB9ID0gb3B0c1xuXG4gICAgdGhpc1trTm9Qcm94eUFnZW50XSA9IG5ldyBBZ2VudChhZ2VudE9wdHMpXG5cbiAgICBjb25zdCBIVFRQX1BST1hZID0gaHR0cFByb3h5ID8/IHByb2Nlc3MuZW52Lmh0dHBfcHJveHkgPz8gcHJvY2Vzcy5lbnYuSFRUUF9QUk9YWVxuICAgIGlmIChIVFRQX1BST1hZKSB7XG4gICAgICB0aGlzW2tIdHRwUHJveHlBZ2VudF0gPSBuZXcgUHJveHlBZ2VudCh7IC4uLmFnZW50T3B0cywgdXJpOiBIVFRQX1BST1hZIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0h0dHBQcm94eUFnZW50XSA9IHRoaXNba05vUHJveHlBZ2VudF1cbiAgICB9XG5cbiAgICBjb25zdCBIVFRQU19QUk9YWSA9IGh0dHBzUHJveHkgPz8gcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHkgPz8gcHJvY2Vzcy5lbnYuSFRUUFNfUFJPWFlcbiAgICBpZiAoSFRUUFNfUFJPWFkpIHtcbiAgICAgIHRoaXNba0h0dHBzUHJveHlBZ2VudF0gPSBuZXcgUHJveHlBZ2VudCh7IC4uLmFnZW50T3B0cywgdXJpOiBIVFRQU19QUk9YWSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdID0gdGhpc1trSHR0cFByb3h5QWdlbnRdXG4gICAgfVxuXG4gICAgdGhpcy4jcGFyc2VOb1Byb3h5KClcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBhZ2VudCA9IHRoaXMuI2dldFByb3h5QWdlbnRGb3JVcmwodXJsKVxuICAgIHJldHVybiBhZ2VudC5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba05vUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIGlmICghdGhpc1trSHR0cFByb3h5QWdlbnRdW2tDbG9zZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIH1cbiAgICBpZiAoIXRoaXNba0h0dHBzUHJveHlBZ2VudF1ba0Nsb3NlZF0pIHtcbiAgICAgIGF3YWl0IHRoaXNba0h0dHBzUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIGF3YWl0IHRoaXNba05vUHJveHlBZ2VudF0uZGVzdHJveShlcnIpXG4gICAgaWYgKCF0aGlzW2tIdHRwUHJveHlBZ2VudF1ba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGF3YWl0IHRoaXNba0h0dHBQcm94eUFnZW50XS5kZXN0cm95KGVycilcbiAgICB9XG4gICAgaWYgKCF0aGlzW2tIdHRwc1Byb3h5QWdlbnRdW2tEZXN0cm95ZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdLmRlc3Ryb3koZXJyKVxuICAgIH1cbiAgfVxuXG4gICNnZXRQcm94eUFnZW50Rm9yVXJsICh1cmwpIHtcbiAgICBsZXQgeyBwcm90b2NvbCwgaG9zdDogaG9zdG5hbWUsIHBvcnQgfSA9IHVybFxuXG4gICAgLy8gU3RyaXBwaW5nIHBvcnRzIGluIHRoaXMgd2F5IGluc3RlYWQgb2YgdXNpbmcgcGFyc2VkVXJsLmhvc3RuYW1lIHRvIG1ha2VcbiAgICAvLyBzdXJlIHRoYXQgdGhlIGJyYWNrZXRzIGFyb3VuZCBJUHY2IGFkZHJlc3NlcyBhcmUga2VwdC5cbiAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoLzpcXGQqJC8sICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgcG9ydCA9IE51bWJlci5wYXJzZUludChwb3J0LCAxMCkgfHwgREVGQVVMVF9QT1JUU1twcm90b2NvbF0gfHwgMFxuICAgIGlmICghdGhpcy4jc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpKSB7XG4gICAgICByZXR1cm4gdGhpc1trTm9Qcm94eUFnZW50XVxuICAgIH1cbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICByZXR1cm4gdGhpc1trSHR0cHNQcm94eUFnZW50XVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1trSHR0cFByb3h5QWdlbnRdXG4gIH1cblxuICAjc2hvdWxkUHJveHkgKGhvc3RuYW1lLCBwb3J0KSB7XG4gICAgaWYgKHRoaXMuI25vUHJveHlDaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNwYXJzZU5vUHJveHkoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLiNub1Byb3h5RW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlIC8vIEFsd2F5cyBwcm94eSBpZiBOT19QUk9YWSBpcyBub3Qgc2V0IG9yIGVtcHR5LlxuICAgIH1cbiAgICBpZiAodGhpcy4jbm9Qcm94eVZhbHVlID09PSAnKicpIHtcbiAgICAgIHJldHVybiBmYWxzZSAvLyBOZXZlciBwcm94eSBpZiB3aWxkY2FyZCBpcyBzZXQuXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNub1Byb3h5RW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiNub1Byb3h5RW50cmllc1tpXVxuICAgICAgaWYgKGVudHJ5LnBvcnQgJiYgZW50cnkucG9ydCAhPT0gcG9ydCkge1xuICAgICAgICBjb250aW51ZSAvLyBTa2lwIGlmIHBvcnRzIGRvbid0IG1hdGNoLlxuICAgICAgfVxuICAgICAgaWYgKCEvXlsuKl0vLnRlc3QoZW50cnkuaG9zdG5hbWUpKSB7XG4gICAgICAgIC8vIE5vIHdpbGRjYXJkcywgc28gZG9uJ3QgcHJveHkgb25seSBpZiB0aGVyZSBpcyBub3QgYW4gZXhhY3QgbWF0Y2guXG4gICAgICAgIGlmIChob3N0bmFtZSA9PT0gZW50cnkuaG9zdG5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG9uJ3QgcHJveHkgaWYgdGhlIGhvc3RuYW1lIGVuZHMgd2l0aCB0aGUgbm9fcHJveHkgaG9zdC5cbiAgICAgICAgaWYgKGhvc3RuYW1lLmVuZHNXaXRoKGVudHJ5Lmhvc3RuYW1lLnJlcGxhY2UoL15cXCovLCAnJykpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgI3BhcnNlTm9Qcm94eSAoKSB7XG4gICAgY29uc3Qgbm9Qcm94eVZhbHVlID0gdGhpcy4jb3B0cy5ub1Byb3h5ID8/IHRoaXMuI25vUHJveHlFbnZcbiAgICBjb25zdCBub1Byb3h5U3BsaXQgPSBub1Byb3h5VmFsdWUuc3BsaXQoL1ssXFxzXS8pXG4gICAgY29uc3Qgbm9Qcm94eUVudHJpZXMgPSBbXVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub1Byb3h5U3BsaXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gbm9Qcm94eVNwbGl0W2ldXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBwYXJzZWQgPSBlbnRyeS5tYXRjaCgvXiguKyk6KFxcZCspJC8pXG4gICAgICBub1Byb3h5RW50cmllcy5wdXNoKHtcbiAgICAgICAgaG9zdG5hbWU6IChwYXJzZWQgPyBwYXJzZWRbMV0gOiBlbnRyeSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcG9ydDogcGFyc2VkID8gTnVtYmVyLnBhcnNlSW50KHBhcnNlZFsyXSwgMTApIDogMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLiNub1Byb3h5VmFsdWUgPSBub1Byb3h5VmFsdWVcbiAgICB0aGlzLiNub1Byb3h5RW50cmllcyA9IG5vUHJveHlFbnRyaWVzXG4gIH1cblxuICBnZXQgI25vUHJveHlDaGFuZ2VkICgpIHtcbiAgICBpZiAodGhpcy4jb3B0cy5ub1Byb3h5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jbm9Qcm94eVZhbHVlICE9PSB0aGlzLiNub1Byb3h5RW52XG4gIH1cblxuICBnZXQgI25vUHJveHlFbnYgKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5ub19wcm94eSA/PyBwcm9jZXNzLmVudi5OT19QUk9YWSA/PyAnJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW52SHR0cFByb3h5QWdlbnRcbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuY29uc3QgeyBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBSZXF1ZXN0UmV0cnlFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBpc0Rpc3R1cmJlZCxcbiAgcGFyc2VIZWFkZXJzLFxuICBwYXJzZVJhbmdlSGVhZGVyLFxuICB3cmFwUmVxdWVzdEJvZHlcbn0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyIChyZXRyeUFmdGVyKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBEYXRlLm5vdygpXG4gIHJldHVybiBuZXcgRGF0ZShyZXRyeUFmdGVyKS5nZXRUaW1lKCkgLSBjdXJyZW50XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aCAoaGVhZGVycywgcmFuZ2UsIHN0YXR1c0NvZGUsIHJldHJ5Q291bnQpIHtcbiAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShyYW5nZS5zdGFydCkgfHwgIU51bWJlci5pc0Zpbml0ZShyYW5nZS5lbmQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aCA9IE51bWJlcihjb250ZW50TGVuZ3RoKVxuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IHJhbmdlLmVuZCAtIHJhbmdlLnN0YXJ0ICsgMVxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShsZW5ndGgpIHx8IGxlbmd0aCAhPT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LUxlbmd0aCBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBkYXRhOiB7IGNvdW50OiByZXRyeUNvdW50IH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY2xhc3MgUmV0cnlIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXJzKSB7XG4gICAgY29uc3QgeyByZXRyeU9wdGlvbnMsIC4uLmRpc3BhdGNoT3B0cyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIFJldHJ5IHNjb3BlZFxuICAgICAgcmV0cnk6IHJldHJ5Rm4sXG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIG1pblRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgLy8gUmVzcG9uc2Ugc2NvcGVkXG4gICAgICBtZXRob2RzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIHJldHJ5QWZ0ZXIsXG4gICAgICBzdGF0dXNDb2Rlc1xuICAgIH0gPSByZXRyeU9wdGlvbnMgPz8ge31cblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBoYW5kbGVycy5kaXNwYXRjaFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJzLmhhbmRsZXJcbiAgICB0aGlzLm9wdHMgPSB7IC4uLmRpc3BhdGNoT3B0cywgYm9keTogd3JhcFJlcXVlc3RCb2R5KG9wdHMuYm9keSkgfVxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcbiAgICB0aGlzLnJldHJ5T3B0cyA9IHtcbiAgICAgIHJldHJ5OiByZXRyeUZuID8/IFJldHJ5SGFuZGxlcltrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSxcbiAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXIgPz8gdHJ1ZSxcbiAgICAgIG1heFRpbWVvdXQ6IG1heFRpbWVvdXQgPz8gMzAgKiAxMDAwLCAvLyAzMHMsXG4gICAgICBtaW5UaW1lb3V0OiBtaW5UaW1lb3V0ID8/IDUwMCwgLy8gLjVzXG4gICAgICB0aW1lb3V0RmFjdG9yOiB0aW1lb3V0RmFjdG9yID8/IDIsXG4gICAgICBtYXhSZXRyaWVzOiBtYXhSZXRyaWVzID8/IDUsXG4gICAgICAvLyBXaGF0IGVycm9ycyB3ZSBzaG91bGQgcmV0cnlcbiAgICAgIG1ldGhvZHM6IG1ldGhvZHMgPz8gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BVVCcsICdERUxFVEUnLCAnVFJBQ0UnXSxcbiAgICAgIC8vIEluZGljYXRlcyB3aGljaCBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIHN0YXR1c0NvZGVzOiBzdGF0dXNDb2RlcyA/PyBbNTAwLCA1MDIsIDUwMywgNTA0LCA0MjldLFxuICAgICAgLy8gTGlzdCBvZiBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIGVycm9yQ29kZXM6IGVycm9yQ29kZXMgPz8gW1xuICAgICAgICAnRUNPTk5SRVNFVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VORVRET1dOJyxcbiAgICAgICAgJ0VORVRVTlJFQUNIJyxcbiAgICAgICAgJ0VIT1NURE9XTicsXG4gICAgICAgICdFSE9TVFVOUkVBQ0gnLFxuICAgICAgICAnRVBJUEUnLFxuICAgICAgICAnVU5EX0VSUl9TT0NLRVQnXG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWluVGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBjb25zdCB7IGNvdW50ZXIgfSA9IHN0YXRlXG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoY29kZSAmJiBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmICFlcnJvckNvZGVzLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBtZXRob2QgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBtZXRob2QgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWV0aG9kcykgJiYgIW1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2Ygc3RhdHVzIGNvZGUgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBzdGF0dXMgY29kZSBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoXG4gICAgICBzdGF0dXNDb2RlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdHVzQ29kZXMpICYmXG4gICAgICAhc3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgcmV0cmllc1xuICAgIGlmIChjb3VudGVyID4gbWF4UmV0cmllcykge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzPy5bJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlci5pc05hTihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA/IGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgOiByZXRyeUFmdGVySGVhZGVyICogMWUzIC8vIFJldHJ5LUFmdGVyIGlzIGluIHNlY29uZHNcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVRpbWVvdXQgPVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA+IDBcbiAgICAgICAgPyBNYXRoLm1pbihyZXRyeUFmdGVySGVhZGVyLCBtYXhUaW1lb3V0KVxuICAgICAgICA6IE1hdGgubWluKG1pblRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIChjb3VudGVyIC0gMSksIG1heFRpbWVvdXQpXG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IGNiKG51bGwpLCByZXRyeVRpbWVvdXQpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBwYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgIGlmICh0aGlzLnJldHJ5T3B0cy5zdGF0dXNDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrcG9pbnQgZm9yIHJlc3VtZSBmcm9tIHdoZXJlIHdlIGxlZnQgaXRcbiAgICBpZiAodGhpcy5yZXN1bWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAgIC8vIE9ubHkgUGFydGlhbCBDb250ZW50IDIwNiBzdXBwb3NlZCB0byBwcm92aWRlIENvbnRlbnQtUmFuZ2UsXG4gICAgICAvLyBhbnkgb3RoZXIgc3RhdHVzIGNvZGUgdGhhdCBwYXJ0aWFsbHkgY29uc3VtZWQgdGhlIHBheWxvYWRcbiAgICAgIC8vIHNob3VsZCBub3QgYmUgcmV0cnkgYmVjYXVzZSBpdCB3b3VsZCByZXN1bHQgaW4gZG93bnN0cmVhbVxuICAgICAgLy8gd3JvbmdseSBjb25jYXRhbmV0ZSBtdWx0aXBsZSByZXNwb25zZXMuXG4gICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjA2ICYmICh0aGlzLnN0YXJ0ID4gMCB8fCBzdGF0dXNDb2RlICE9PSAyMDApKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmFuZ2UgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCB3YXMgcGFydGlhbGx5IGNvbnN1bWVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IHsgY291bnQ6IHRoaXMucmV0cnlDb3VudCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG4gICAgICAvLyBJZiBubyBjb250ZW50IHJhbmdlXG4gICAgICBpZiAoIWNvbnRlbnRSYW5nZSkge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignQ29udGVudC1SYW5nZSBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggYSB3ZWFrIGV0YWcgY2hlY2tcbiAgICAgIGlmICh0aGlzLmV0YWcgIT0gbnVsbCAmJiB0aGlzLmV0YWcgIT09IGhlYWRlcnMuZXRhZykge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignRVRhZyBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhFcnJvciA9IHZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aChoZWFkZXJzLCBjb250ZW50UmFuZ2UsIHN0YXR1c0NvZGUsIHRoaXMucmV0cnlDb3VudClcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmFib3J0KGNvbnRlbnRMZW5ndGhFcnJvcilcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgLSAxIH0gPSBjb250ZW50UmFuZ2VcblxuICAgICAgYXNzZXJ0KHRoaXMuc3RhcnQgPT09IHN0YXJ0LCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG4gICAgICBhc3NlcnQodGhpcy5lbmQgPT0gbnVsbCB8fCB0aGlzLmVuZCA9PT0gZW5kLCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA2KSB7XG4gICAgICAgIC8vIEZpcnN0IHRpbWUgd2UgcmVjZWl2ZSAyMDZcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcblxuICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgICAgICByZXN1bWUsXG4gICAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aEVycm9yID0gdmFsaWRhdGVQYXJ0aWFsUmVzcG9uc2VDb250ZW50TGVuZ3RoKGhlYWRlcnMsIHJhbmdlLCBzdGF0dXNDb2RlLCB0aGlzLnJldHJ5Q291bnQpXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoY29udGVudExlbmd0aEVycm9yKVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSAtIDEgfSA9IHJhbmdlXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCksXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KGVuZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShlbmQpLCAnaW52YWxpZCBjb250ZW50LWxlbmd0aCcpXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSAtIDEgOiBudWxsXG4gICAgICB9XG5cbiAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUodGhpcy5zdGFydCkpXG4gICAgICBhc3NlcnQoXG4gICAgICAgIHRoaXMuZW5kID09IG51bGwgfHwgTnVtYmVyLmlzRmluaXRlKHRoaXMuZW5kKSxcbiAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICApXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICB0aGlzLmV0YWcgPSBoZWFkZXJzLmV0YWcgIT0gbnVsbCA/IGhlYWRlcnMuZXRhZyA6IG51bGxcblxuICAgICAgLy8gV2VhayBldGFncyBhcmUgbm90IHVzZWZ1bCBmb3IgY29tcGFyaXNvbiBub3IgY2FjaGVcbiAgICAgIC8vIGZvciBpbnN0YW5jZSBub3Qgc2FmZSB0byBhc3N1bWUgaWYgdGhlIHJlc3BvbnNlIGlzIGJ5dGUtcGVyLWJ5dGVcbiAgICAgIC8vIGVxdWFsXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnLnN0YXJ0c1dpdGgoJ1cvJykpIHtcbiAgICAgICAgdGhpcy5ldGFnID0gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgIH0pXG5cbiAgICB0aGlzLmFib3J0KGVycilcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuc3RhcnQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHJhd1RyYWlsZXJzKSB7XG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZShyYXdUcmFpbGVycylcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGlmICh0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIC8vIFdlIHJlY29uY2lsZSBpbiBjYXNlIG9mIGEgbWl4IGJldHdlZW4gbmV0d29yayBlcnJvcnNcbiAgICAvLyBhbmQgc2VydmVyIGVycm9yIHJlc3BvbnNlXG4gICAgaWYgKHRoaXMucmV0cnlDb3VudCAtIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQgPiAwKSB7XG4gICAgICAvLyBXZSBjb3VudCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsYXN0IGNoZWNrcG9pbnQgYW5kIHRoZSBjdXJyZW50IHJldHJ5IGNvdW50XG4gICAgICB0aGlzLnJldHJ5Q291bnQgPVxuICAgICAgICB0aGlzLnJldHJ5Q291bnRDaGVja3BvaW50ICtcbiAgICAgICAgKHRoaXMucmV0cnlDb3VudCAtIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCB9LFxuICAgICAgICBvcHRzOiB7IHJldHJ5T3B0aW9uczogdGhpcy5yZXRyeU9wdHMsIC4uLnRoaXMub3B0cyB9XG4gICAgICB9LFxuICAgICAgb25SZXRyeS5iaW5kKHRoaXMpXG4gICAgKVxuXG4gICAgZnVuY3Rpb24gb25SZXRyeSAoZXJyKSB7XG4gICAgICBpZiAoZXJyICE9IG51bGwgfHwgdGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCAhPT0gMCkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0geyByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gIH1cblxuICAgICAgICAvLyBXZWFrIGV0YWcgY2hlY2sgLSB3ZWFrIGV0YWdzIHdpbGwgbWFrZSBjb21wYXJpc29uIGFsZ29yaXRobXMgbmV2ZXIgbWF0Y2hcbiAgICAgICAgaWYgKHRoaXMuZXRhZyAhPSBudWxsKSB7XG4gICAgICAgICAgaGVhZGVyc1snaWYtbWF0Y2gnXSA9IHRoaXMuZXRhZ1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRzID0ge1xuICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdHMuaGVhZGVycyxcbiAgICAgICAgICAgIC4uLmhlYWRlcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50Q2hlY2twb2ludCA9IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmV0cnlIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXInKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9yZXRyeS1oYW5kbGVyJylcblxuY2xhc3MgUmV0cnlBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICAjYWdlbnQgPSBudWxsXG4gICNvcHRpb25zID0gbnVsbFxuICBjb25zdHJ1Y3RvciAoYWdlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKG9wdGlvbnMpXG4gICAgdGhpcy4jYWdlbnQgPSBhZ2VudFxuICAgIHRoaXMuI29wdGlvbnMgPSBvcHRpb25zXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHJldHJ5ID0gbmV3IFJldHJ5SGFuZGxlcih7XG4gICAgICAuLi5vcHRzLFxuICAgICAgcmV0cnlPcHRpb25zOiB0aGlzLiNvcHRpb25zXG4gICAgfSwge1xuICAgICAgZGlzcGF0Y2g6IHRoaXMuI2FnZW50LmRpc3BhdGNoLmJpbmQodGhpcy4jYWdlbnQpLFxuICAgICAgaGFuZGxlclxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXMuI2FnZW50LmRpc3BhdGNoKG9wdHMsIHJldHJ5KVxuICB9XG5cbiAgY2xvc2UgKCkge1xuICAgIHJldHVybiB0aGlzLiNhZ2VudC5jbG9zZSgpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICByZXR1cm4gdGhpcy4jYWdlbnQuZGVzdHJveSgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUFnZW50XG4iLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC85MDdcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yLCBBYm9ydEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jb25zdCBrQ29uc3VtZSA9IFN5bWJvbCgna0NvbnN1bWUnKVxuY29uc3Qga1JlYWRpbmcgPSBTeW1ib2woJ2tSZWFkaW5nJylcbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdrQm9keScpXG5jb25zdCBrQWJvcnQgPSBTeW1ib2woJ2tBYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5jb25zdCBrQ29udGVudExlbmd0aCA9IFN5bWJvbCgna0NvbnRlbnRMZW5ndGgnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY2xhc3MgQm9keVJlYWRhYmxlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHJlc3VtZSxcbiAgICBhYm9ydCxcbiAgICBjb250ZW50VHlwZSA9ICcnLFxuICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgaGlnaFdhdGVyTWFyayA9IDY0ICogMTAyNCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICB9KSB7XG4gICAgc3VwZXIoe1xuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiByZXN1bWUsXG4gICAgICBoaWdoV2F0ZXJNYXJrXG4gICAgfSlcblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSBmYWxzZVxuXG4gICAgdGhpc1trQWJvcnRdID0gYWJvcnRcbiAgICB0aGlzW2tDb25zdW1lXSA9IG51bGxcbiAgICB0aGlzW2tCb2R5XSA9IG51bGxcbiAgICB0aGlzW2tDb250ZW50VHlwZV0gPSBjb250ZW50VHlwZVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gY29udGVudExlbmd0aFxuXG4gICAgLy8gSXMgc3RyZWFtIGJlaW5nIGNvbnN1bWVkIHRocm91Z2ggUmVhZGFibGUgQVBJP1xuICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHRoYXQgd2UgYXZvaWQgY2hlY2tpbmdcbiAgICAvLyBmb3IgJ2RhdGEnIGFuZCAncmVhZGFibGUnIGxpc3RlbmVycyBpbiB0aGUgaG90IHBhdGhcbiAgICAvLyBpbnNpZGUgcHVzaCgpLlxuICAgIHRoaXNba1JlYWRpbmddID0gZmFsc2VcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzW2tBYm9ydF0oKVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5kZXN0cm95KGVycilcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgTm9kZSBcImJ1Z1wiLiBJZiB0aGUgc3RyZWFtIGlzIGRlc3Ryb3llZCBpbiBzYW1lXG4gICAgLy8gdGljayBhcyBpdCBpcyBjcmVhdGVkLCB0aGVuIGEgdXNlciB3aG8gaXMgd2FpdGluZyBmb3IgYVxuICAgIC8vIHByb21pc2UgKGkuZSBtaWNybyB0aWNrKSBmb3IgaW5zdGFsbGluZyBhICdlcnJvcicgbGlzdGVuZXIgd2lsbFxuICAgIC8vIG5ldmVyIGdldCBhIGNoYW5jZSBhbmQgd2lsbCBhbHdheXMgZW5jb3VudGVyIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgaWYgKCF0aGlzW2tSZWFkaW5nXSkge1xuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uIChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgYWRkTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvZmYgKGV2LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCAuLi5hcmdzKVxuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IChcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwIHx8XG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgcHVzaCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trQ29uc3VtZV0gJiYgY2h1bmsgIT09IG51bGwpIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ieXRlc1xuICBhc3luYyBieXRlcyAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2J5dGVzJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBhc3luYyBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gTnVtYmVyLmlzRmluaXRlKG9wdHM/LmxpbWl0KSA/IG9wdHMubGltaXQgOiAxMjggKiAxMDI0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cz8uc2lnbmFsXG5cbiAgICBpZiAoc2lnbmFsICE9IG51bGwgJiYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICB9XG5cbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKClcblxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlRW1pdHRlZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXNba0NvbnRlbnRMZW5ndGhdID4gbGltaXQpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShzaWduYWwucmVhc29uID8/IG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICB9XG4gICAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydClcblxuICAgICAgdGhpc1xuICAgICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KVxuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uID8/IG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZXJyb3InLCBub29wKVxuICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICBsaW1pdCAtPSBjaHVuay5sZW5ndGhcbiAgICAgICAgICBpZiAobGltaXQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXN1bWUoKVxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tbG9ja2VkXG5mdW5jdGlvbiBpc0xvY2tlZCAoc2VsZikge1xuICAvLyBDb25zdW1lIGlzIGFuIGltcGxpY2l0IGxvY2suXG4gIHJldHVybiAoc2VsZltrQm9keV0gJiYgc2VsZltrQm9keV0ubG9ja2VkID09PSB0cnVlKSB8fCBzZWxmW2tDb25zdW1lXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gaXNVbnVzYWJsZSAoc2VsZikge1xuICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZChzZWxmKSB8fCBpc0xvY2tlZChzZWxmKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lIChzdHJlYW0sIHR5cGUpIHtcbiAgYXNzZXJ0KCFzdHJlYW1ba0NvbnN1bWVdKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGlzVW51c2FibGUoc3RyZWFtKSkge1xuICAgICAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoclN0YXRlLmRlc3Ryb3llZCAmJiByU3RhdGUuY2xvc2VFbWl0dGVkID09PSBmYWxzZSkge1xuICAgICAgICBzdHJlYW1cbiAgICAgICAgICAub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgICAub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJykpXG4gICAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChyU3RhdGUuZXJyb3JlZCA/PyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHN0cmVhbVtrQ29uc3VtZV0gPSB7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgIGJvZHk6IFtdXG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1cbiAgICAgICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICBjb25zdW1lU3RhcnQoc3RyZWFtW2tDb25zdW1lXSlcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgaWYgKHN0YXRlLmJ1ZmZlckluZGV4KSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzdGF0ZS5idWZmZXJJbmRleFxuICAgIGNvbnN0IGVuZCA9IHN0YXRlLmJ1ZmZlci5sZW5ndGhcbiAgICBmb3IgKGxldCBuID0gc3RhcnQ7IG4gPCBlbmQ7IG4rKykge1xuICAgICAgY29uc3VtZVB1c2goY29uc3VtZSwgc3RhdGUuYnVmZmVyW25dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIHN0YXRlLmJ1ZmZlcikge1xuICAgICAgY29uc3VtZVB1c2goY29uc3VtZSwgY2h1bmspXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUuc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICAgIH0pXG4gIH1cblxuICBjb25zdW1lLnN0cmVhbS5yZXN1bWUoKVxuXG4gIHdoaWxlIChjb25zdW1lLnN0cmVhbS5yZWFkKCkgIT0gbnVsbCkge1xuICAgIC8vIExvb3BcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyW119IGNodW5rc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5mdW5jdGlvbiBjaHVua3NEZWNvZGUgKGNodW5rcywgbGVuZ3RoKSB7XG4gIGlmIChjaHVua3MubGVuZ3RoID09PSAwIHx8IGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IGNodW5rcy5sZW5ndGggPT09IDEgPyBjaHVua3NbMF0gOiBCdWZmZXIuY29uY2F0KGNodW5rcywgbGVuZ3RoKVxuICBjb25zdCBidWZmZXJMZW5ndGggPSBidWZmZXIubGVuZ3RoXG5cbiAgLy8gU2tpcCBCT00uXG4gIGNvbnN0IHN0YXJ0ID1cbiAgICBidWZmZXJMZW5ndGggPiAyICYmXG4gICAgYnVmZmVyWzBdID09PSAweGVmICYmXG4gICAgYnVmZmVyWzFdID09PSAweGJiICYmXG4gICAgYnVmZmVyWzJdID09PSAweGJmXG4gICAgICA/IDNcbiAgICAgIDogMFxuICByZXR1cm4gYnVmZmVyLnV0ZjhTbGljZShzdGFydCwgYnVmZmVyTGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyW119IGNodW5rc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGNodW5rc0NvbmNhdCAoY2h1bmtzLCBsZW5ndGgpIHtcbiAgaWYgKGNodW5rcy5sZW5ndGggPT09IDAgfHwgbGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApXG4gIH1cbiAgaWYgKGNodW5rcy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyBmYXN0LXBhdGhcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY2h1bmtzWzBdKVxuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cobGVuZ3RoKS5idWZmZXIpXG5cbiAgbGV0IG9mZnNldCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXVxuICAgIGJ1ZmZlci5zZXQoY2h1bmssIG9mZnNldClcbiAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVFbmQgKGNvbnN1bWUpIHtcbiAgY29uc3QgeyB0eXBlLCBib2R5LCByZXNvbHZlLCBzdHJlYW0sIGxlbmd0aCB9ID0gY29uc3VtZVxuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcmVzb2x2ZShjaHVua3NEZWNvZGUoYm9keSwgbGVuZ3RoKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdqc29uJykge1xuICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGNodW5rc0RlY29kZShib2R5LCBsZW5ndGgpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgIHJlc29sdmUoY2h1bmtzQ29uY2F0KGJvZHksIGxlbmd0aCkuYnVmZmVyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICByZXNvbHZlKG5ldyBCbG9iKGJvZHksIHsgdHlwZTogc3RyZWFtW2tDb250ZW50VHlwZV0gfSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYnl0ZXMnKSB7XG4gICAgICByZXNvbHZlKGNodW5rc0NvbmNhdChib2R5LCBsZW5ndGgpKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVhZGFibGU6IEJvZHlSZWFkYWJsZSwgY2h1bmtzRGVjb2RlIH1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7XG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCB7IGNodW5rc0RlY29kZSB9ID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCBDSFVOS19MSU1JVCA9IDEyOCAqIDEwMjRcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrICh7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9KSB7XG4gIGFzc2VydChib2R5KVxuXG4gIGxldCBjaHVua3MgPSBbXVxuICBsZXQgbGVuZ3RoID0gMFxuXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgIGxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgICAgIGlmIChsZW5ndGggPiBDSFVOS19MSU1JVCkge1xuICAgICAgICBjaHVua3MgPSBbXVxuICAgICAgICBsZW5ndGggPSAwXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBjaHVua3MgPSBbXVxuICAgIGxlbmd0aCA9IDBcbiAgICAvLyBEbyBub3RoaW5nLi4uLlxuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gXG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWxlbmd0aCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSkpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzdGFja1RyYWNlTGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXRcbiAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gMFxuICBsZXQgcGF5bG9hZFxuXG4gIHRyeSB7XG4gICAgaWYgKGlzQ29udGVudFR5cGVBcHBsaWNhdGlvbkpzb24oY29udGVudFR5cGUpKSB7XG4gICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShjaHVua3NEZWNvZGUoY2h1bmtzLCBsZW5ndGgpKVxuICAgIH0gZWxzZSBpZiAoaXNDb250ZW50VHlwZVRleHQoY29udGVudFR5cGUpKSB7XG4gICAgICBwYXlsb2FkID0gY2h1bmtzRGVjb2RlKGNodW5rcywgbGVuZ3RoKVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gcHJvY2VzcyBpbiBhIGNhbGxiYWNrIHRvIGF2b2lkIHRocm93aW5nIGluIHRoZSBtaWNyb3Rhc2sgcXVldWVcbiAgfSBmaW5hbGx5IHtcbiAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBzdGFja1RyYWNlTGltaXRcbiAgfVxuICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpKVxufVxuXG5jb25zdCBpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uID0gKGNvbnRlbnRUeXBlKSA9PiB7XG4gIHJldHVybiAoXG4gICAgY29udGVudFR5cGUubGVuZ3RoID4gMTUgJiZcbiAgICBjb250ZW50VHlwZVsxMV0gPT09ICcvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzBdID09PSAnYScgJiZcbiAgICBjb250ZW50VHlwZVsxXSA9PT0gJ3AnICYmXG4gICAgY29udGVudFR5cGVbMl0gPT09ICdwJyAmJlxuICAgIGNvbnRlbnRUeXBlWzNdID09PSAnbCcgJiZcbiAgICBjb250ZW50VHlwZVs0XSA9PT0gJ2knICYmXG4gICAgY29udGVudFR5cGVbNV0gPT09ICdjJyAmJlxuICAgIGNvbnRlbnRUeXBlWzZdID09PSAnYScgJiZcbiAgICBjb250ZW50VHlwZVs3XSA9PT0gJ3QnICYmXG4gICAgY29udGVudFR5cGVbOF0gPT09ICdpJyAmJlxuICAgIGNvbnRlbnRUeXBlWzldID09PSAnbycgJiZcbiAgICBjb250ZW50VHlwZVsxMF0gPT09ICduJyAmJlxuICAgIGNvbnRlbnRUeXBlWzEyXSA9PT0gJ2onICYmXG4gICAgY29udGVudFR5cGVbMTNdID09PSAncycgJiZcbiAgICBjb250ZW50VHlwZVsxNF0gPT09ICdvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzE1XSA9PT0gJ24nXG4gIClcbn1cblxuY29uc3QgaXNDb250ZW50VHlwZVRleHQgPSAoY29udGVudFR5cGUpID0+IHtcbiAgcmV0dXJuIChcbiAgICBjb250ZW50VHlwZS5sZW5ndGggPiA0ICYmXG4gICAgY29udGVudFR5cGVbNF0gPT09ICcvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzBdID09PSAndCcgJiZcbiAgICBjb250ZW50VHlwZVsxXSA9PT0gJ2UnICYmXG4gICAgY29udGVudFR5cGVbMl0gPT09ICd4JyAmJlxuICAgIGNvbnRlbnRUeXBlWzNdID09PSAndCdcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLFxuICBpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uLFxuICBpc0NvbnRlbnRUeXBlVGV4dFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ25vZGU6YXN5bmNfaG9va3MnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMudHJhaWxlcnMgPSB7fVxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3JcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5zaWduYWwgPSBzaWduYWxcbiAgICB0aGlzLnJlYXNvbiA9IG51bGxcbiAgICB0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIgPSBudWxsXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNpZ25hbCkge1xuICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLnNpZ25hbC5yZWFzb24gPz8gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyID0gdXRpbC5hZGRBYm9ydExpc3RlbmVyKHRoaXMuc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLnNpZ25hbC5yZWFzb24gPz8gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgICAgIGlmICh0aGlzLnJlcykge1xuICAgICAgICAgICAgdXRpbC5kZXN0cm95KHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKSwgdGhpcy5yZWFzb24pXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICB0aGlzLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzPy5vZmYoJ2Nsb3NlJywgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKClcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lciA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcGFyc2VkSGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgIGNvbnN0IHJlcyA9IG5ldyBSZWFkYWJsZSh7XG4gICAgICByZXN1bWUsXG4gICAgICBhYm9ydCxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgY29udGVudExlbmd0aDogdGhpcy5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoXG4gICAgICAgID8gTnVtYmVyKGNvbnRlbnRMZW5ndGgpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcikge1xuICAgICAgcmVzLm9uKCdjbG9zZScsIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcilcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIHRoaXMucmVzID0gcmVzXG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB0cmFpbGVyczogdGhpcy50cmFpbGVycyxcbiAgICAgICAgICBvcGFxdWUsXG4gICAgICAgICAgYm9keTogcmVzLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzLCB0aGlzLnRyYWlsZXJzKVxuICAgIHRoaXMucmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgYm9keSwgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHF1ZXVlTWljcm90YXNrP1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAvLyBFbnN1cmUgYWxsIHF1ZXVlZCBoYW5kbGVycyBhcmUgaW52b2tlZCBiZWZvcmUgZGVzdHJveWluZyByZXMuXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcikge1xuICAgICAgcmVzPy5vZmYoJ2Nsb3NlJywgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKVxuICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKClcbiAgICAgIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lciA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBSZXF1ZXN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwgImNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCBrTGlzdGVuZXIgPSBTeW1ib2woJ2tMaXN0ZW5lcicpXG5jb25zdCBrU2lnbmFsID0gU3ltYm9sKCdrU2lnbmFsJylcblxuZnVuY3Rpb24gYWJvcnQgKHNlbGYpIHtcbiAgaWYgKHNlbGYuYWJvcnQpIHtcbiAgICBzZWxmLmFib3J0KHNlbGZba1NpZ25hbF0/LnJlYXNvbilcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnJlYXNvbiA9IHNlbGZba1NpZ25hbF0/LnJlYXNvbiA/PyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gIH1cbiAgcmVtb3ZlU2lnbmFsKHNlbGYpXG59XG5cbmZ1bmN0aW9uIGFkZFNpZ25hbCAoc2VsZiwgc2lnbmFsKSB7XG4gIHNlbGYucmVhc29uID0gbnVsbFxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcblxuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgYWJvcnQoc2VsZilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBzaWduYWxcbiAgc2VsZltrTGlzdGVuZXJdID0gKCkgPT4ge1xuICAgIGFib3J0KHNlbGYpXG4gIH1cblxuICBhZGRBYm9ydExpc3RlbmVyKHNlbGZba1NpZ25hbF0sIHNlbGZba0xpc3RlbmVyXSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2lnbmFsIChzZWxmKSB7XG4gIGlmICghc2VsZltrU2lnbmFsXSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCdyZW1vdmVFdmVudExpc3RlbmVyJyBpbiBzZWxmW2tTaWduYWxdKSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfSBlbHNlIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFkZFNpZ25hbCxcbiAgcmVtb3ZlU2lnbmFsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgZmluaXNoZWQsIFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFN0cmVhbUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBmYWN0b3J5JylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1NUUkVBTScpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeVxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMudHJhaWxlcnMgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciB8fCBmYWxzZVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBmYWN0b3J5LCBvcGFxdWUsIGNvbnRleHQsIGNhbGxiYWNrLCByZXNwb25zZUhlYWRlcnMgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGxldCByZXNcblxuICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICAgIHJlcyA9IG5ldyBQYXNzVGhyb3VnaCgpXG5cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFjdG9yeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoZmFjdG9yeSwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgIXJlcyB8fFxuICAgICAgICB0eXBlb2YgcmVzLndyaXRlICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMuZW5kICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMub24gIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFdyaXRhYmxlJylcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogQXZvaWQgZmluaXNoZWQuIEl0IHJlZ2lzdGVycyBhbiB1bm5lY2Vzc2FyeSBhbW91bnQgb2YgbGlzdGVuZXJzLlxuICAgICAgZmluaXNoZWQocmVzLCB7IHJlYWRhYmxlOiBmYWxzZSB9LCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHJlcywgb3BhcXVlLCB0cmFpbGVycywgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgICAgaWYgKGVyciB8fCAhcmVzLnJlYWRhYmxlKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciB8fCBudWxsLCB7IG9wYXF1ZSwgdHJhaWxlcnMgfSlcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJlcy5vbignZHJhaW4nLCByZXN1bWUpXG5cbiAgICB0aGlzLnJlcyA9IHJlc1xuXG4gICAgY29uc3QgbmVlZERyYWluID0gcmVzLndyaXRhYmxlTmVlZERyYWluICE9PSB1bmRlZmluZWRcbiAgICAgID8gcmVzLndyaXRhYmxlTmVlZERyYWluXG4gICAgICA6IHJlcy5fd3JpdGFibGVTdGF0ZT8ubmVlZERyYWluXG5cbiAgICByZXR1cm4gbmVlZERyYWluICE9PSB0cnVlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJldHVybiByZXMgPyByZXMud3JpdGUoY2h1bmspIDogdHJ1ZVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy50cmFpbGVycyA9IHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzKVxuXG4gICAgcmVzLmVuZCgpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIG9wYXF1ZSwgYm9keSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyZWFtIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0uY2FsbCh0aGlzLCBvcHRzLCBmYWN0b3J5LCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgU3RyZWFtSGFuZGxlcihvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgUGFzc1Rocm91Z2hcbn0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdub2RlOmFzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuY29uc3Qga1Jlc3VtZSA9IFN5bWJvbCgncmVzdW1lJylcblxuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0IGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuXG4gICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICBjb25zdCB7IFtrUmVzdW1lXTogcmVzdW1lIH0gPSB0aGlzXG5cbiAgICBpZiAocmVzdW1lKSB7XG4gICAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICAgICAgcmVzdW1lKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3JlYWQoKVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lUmVzcG9uc2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChyZXN1bWUpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG4gICAgdGhpc1trUmVzdW1lXSA9IHJlc3VtZVxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIHRoaXNba1Jlc3VtZV0oKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoYW5kbGVyJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfUElQRUxJTkUnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuXG4gICAgdGhpcy5yZXEgPSBuZXcgUGlwZWxpbmVSZXF1ZXN0KCkub24oJ2Vycm9yJywgdXRpbC5ub3ApXG5cbiAgICB0aGlzLnJldCA9IG5ldyBEdXBsZXgoe1xuICAgICAgcmVhZGFibGVPYmplY3RNb2RlOiBvcHRzLm9iamVjdE1vZGUsXG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKGJvZHk/LnJlc3VtZSkge1xuICAgICAgICAgIGJvZHkucmVzdW1lKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHdyaXRlOiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChyZXEucHVzaChjaHVuaywgZW5jb2RpbmcpIHx8IHJlcS5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxW2tSZXN1bWVdID0gY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IChlcnIsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSwgcmVxLCByZXMsIHJldCwgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIWVyciAmJiAhcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWJvcnQgJiYgZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG5cbiAgICAgICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfVxuICAgIH0pLm9uKCdwcmVmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAvLyBOb2RlIDwgMTUgZG9lcyBub3QgY2FsbCBfZmluYWwgaW4gc2FtZSB0aWNrLlxuICAgICAgcmVxLnB1c2gobnVsbClcbiAgICB9KVxuXG4gICAgdGhpcy5yZXMgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgcmV0LCByZXMgfSA9IHRoaXNcblxuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQoIXJlcywgJ3BpcGVsaW5lIGNhbm5vdCBiZSByZXRyaWVkJylcbiAgICBhc3NlcnQoIXJldC5kZXN0cm95ZWQpXG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSkge1xuICAgIGNvbnN0IHsgb3BhcXVlLCBoYW5kbGVyLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSBuZXcgUGlwZWxpbmVSZXNwb25zZShyZXN1bWUpXG5cbiAgICBsZXQgYm9keVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgYm9keSA9IHRoaXMucnVuSW5Bc3luY1Njb3BlKGhhbmRsZXIsIG51bGwsIHtcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgb3BhcXVlLFxuICAgICAgICBib2R5OiB0aGlzLnJlcyxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5Lm9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFJlYWRhYmxlJylcbiAgICB9XG5cbiAgICBib2R5XG4gICAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQsIGJvZHkgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5wdXNoKGNodW5rKSAmJiBib2R5LnBhdXNlKSB7XG4gICAgICAgICAgYm9keS5wYXVzZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgICAgIH0pXG4gICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICByZXQucHVzaChudWxsKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kZWQpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcGlwZWxpbmUgKG9wdHMsIGhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaXBlbGluZUhhbmRsZXIgPSBuZXcgUGlwZWxpbmVIYW5kbGVyKG9wdHMsIGhhbmRsZXIpXG4gICAgdGhpcy5kaXNwYXRjaCh7IC4uLm9wdHMsIGJvZHk6IHBpcGVsaW5lSGFuZGxlci5yZXEgfSwgcGlwZWxpbmVIYW5kbGVyKVxuICAgIHJldHVybiBwaXBlbGluZUhhbmRsZXIucmV0XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBuZXcgUGFzc1Rocm91Z2goKS5kZXN0cm95KGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ25vZGU6YXN5bmNfaG9va3MnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5cbmNsYXNzIFVwZ3JhZGVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfVVBHUkFERScpXG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGFib3J0KHRoaXMucmVhc29uKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuY2FsbGJhY2spXG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIHVwZ3JhZGUnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA9PT0gMTAxKVxuXG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGUgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwZ3JhZGUuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBncmFkZUhhbmRsZXIgPSBuZXcgVXBncmFkZUhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgIHVwZ3JhZGU6IG9wdHMucHJvdG9jb2wgfHwgJ1dlYnNvY2tldCdcbiAgICB9LCB1cGdyYWRlSGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHM/Lm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIENvbm5lY3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfQ09OTkVDVCcpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgY29ubmVjdCcsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuXG4gICAgbGV0IGhlYWRlcnMgPSByYXdIZWFkZXJzXG4gICAgLy8gSW5kaWNhdGVzIGlzIGFuIEhUVFAyU2Vzc2lvblxuICAgIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgfVxuXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29ubmVjdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29ubmVjdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25uZWN0SGFuZGxlciA9IG5ldyBDb25uZWN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgbWV0aG9kOiAnQ09OTkVDVCcgfSwgY29ubmVjdEhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWlyZSgnLi9hcGktcmVxdWVzdCcpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL2FwaS1zdHJlYW0nKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSByZXF1aXJlKCcuL2FwaS1waXBlbGluZScpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gcmVxdWlyZSgnLi9hcGktdXBncmFkZScpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gcmVxdWlyZSgnLi9hcGktY29ubmVjdCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga01vY2tOb3RNYXRjaGVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX01PQ0tfRVJSX01PQ0tfTk9UX01BVENIRUQnKVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGRvZXMgbm90IG1hdGNoIGFueSByZWdpc3RlcmVkIG1vY2sgZGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja05vdE1hdGNoZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE1vY2tOb3RNYXRjaGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01vY2tOb3RNYXRjaGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIHJlcXVlc3QgZG9lcyBub3QgbWF0Y2ggYW55IHJlZ2lzdGVyZWQgbW9jayBkaXNwYXRjaGVzJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfTU9DS19FUlJfTU9DS19OT1RfTUFUQ0hFRCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba01vY2tOb3RNYXRjaGVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba01vY2tOb3RNYXRjaGVkRXJyb3JdID0gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTW9ja05vdE1hdGNoZWRFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNb2NrTm90TWF0Y2hlZEVycm9yIH0gPSByZXF1aXJlKCcuL21vY2stZXJyb3JzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrT3JpZ2luLFxuICBrR2V0TmV0Q29ubmVjdFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgYnVpbGRVUkwgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHtcbiAgdHlwZXM6IHtcbiAgICBpc1Byb21pc2VcbiAgfVxufSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmZ1bmN0aW9uIG1hdGNoVmFsdWUgKG1hdGNoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBtYXRjaCA9PT0gdmFsdWVcbiAgfVxuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gbWF0Y2gudGVzdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIG1hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1hdGNoKHZhbHVlKSA9PT0gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBsb3dlckNhc2VFbnRyaWVzIChoZWFkZXJzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoaGVhZGVycykubWFwKChbaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4gW2hlYWRlck5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSwgaGVhZGVyVmFsdWVdXG4gICAgfSlcbiAgKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9pbmRleCcpLkhlYWRlcnN8c3RyaW5nW118UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJCeU5hbWUgKGhlYWRlcnMsIGtleSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKGhlYWRlcnNbaV0udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0ga2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9IGVsc2UgaWYgKHR5cGVvZiBoZWFkZXJzLmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBoZWFkZXJzLmdldChrZXkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycylba2V5LnRvTG9jYWxlTG93ZXJDYXNlKCldXG4gIH1cbn1cblxuLyoqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlcnMgKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVyc0Zyb21BcnJheSAoaGVhZGVycykgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICBjb25zdCBjbG9uZSA9IGhlYWRlcnMuc2xpY2UoKVxuICBjb25zdCBlbnRyaWVzID0gW11cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNsb25lLmxlbmd0aDsgaW5kZXggKz0gMikge1xuICAgIGVudHJpZXMucHVzaChbY2xvbmVbaW5kZXhdLCBjbG9uZVtpbmRleCArIDFdXSlcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpXG59XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVycyAobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKSB7XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICAgICAgaGVhZGVycyA9IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShoZWFkZXJzKVxuICAgIH1cbiAgICByZXR1cm4gbW9ja0Rpc3BhdGNoLmhlYWRlcnMoaGVhZGVycyA/IGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycykgOiB7fSlcbiAgfVxuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHR5cGVvZiBoZWFkZXJzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IFttYXRjaEhlYWRlck5hbWUsIG1hdGNoSGVhZGVyVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1vY2tEaXNwYXRjaC5oZWFkZXJzKSkge1xuICAgIGNvbnN0IGhlYWRlclZhbHVlID0gZ2V0SGVhZGVyQnlOYW1lKGhlYWRlcnMsIG1hdGNoSGVhZGVyTmFtZSlcblxuICAgIGlmICghbWF0Y2hWYWx1ZShtYXRjaEhlYWRlclZhbHVlLCBoZWFkZXJWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBzYWZlVXJsIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnPycpXG5cbiAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcXAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhdGhTZWdtZW50cy5wb3AoKSlcbiAgcXAuc29ydCgpXG4gIHJldHVybiBbLi4ucGF0aFNlZ21lbnRzLCBxcC50b1N0cmluZygpXS5qb2luKCc/Jylcbn1cblxuZnVuY3Rpb24gbWF0Y2hLZXkgKG1vY2tEaXNwYXRjaCwgeyBwYXRoLCBtZXRob2QsIGJvZHksIGhlYWRlcnMgfSkge1xuICBjb25zdCBwYXRoTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5wYXRoLCBwYXRoKVxuICBjb25zdCBtZXRob2RNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLm1ldGhvZCwgbWV0aG9kKVxuICBjb25zdCBib2R5TWF0Y2ggPSB0eXBlb2YgbW9ja0Rpc3BhdGNoLmJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2guYm9keSwgYm9keSkgOiB0cnVlXG4gIGNvbnN0IGhlYWRlcnNNYXRjaCA9IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpXG4gIHJldHVybiBwYXRoTWF0Y2ggJiYgbWV0aG9kTWF0Y2ggJiYgYm9keU1hdGNoICYmIGhlYWRlcnNNYXRjaFxufVxuXG5mdW5jdGlvbiBnZXRSZXNwb25zZURhdGEgKGRhdGEpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBiYXNlUGF0aCA9IGtleS5xdWVyeSA/IGJ1aWxkVVJMKGtleS5wYXRoLCBrZXkucXVlcnkpIDoga2V5LnBhdGhcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdHlwZW9mIGJhc2VQYXRoID09PSAnc3RyaW5nJyA/IHNhZmVVcmwoYmFzZVBhdGgpIDogYmFzZVBhdGhcblxuICAvLyBNYXRjaCBwYXRoXG4gIGxldCBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgY29uc3VtZWQgfSkgPT4gIWNvbnN1bWVkKS5maWx0ZXIoKHsgcGF0aCB9KSA9PiBtYXRjaFZhbHVlKHNhZmVVcmwocGF0aCksIHJlc29sdmVkUGF0aCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggbWV0aG9kXG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgbWV0aG9kIH0pID0+IG1hdGNoVmFsdWUobWV0aG9kLCBrZXkubWV0aG9kKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgbWV0aG9kICcke2tleS5tZXRob2R9JyBvbiBwYXRoICcke3Jlc29sdmVkUGF0aH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nIG9uIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggaGVhZGVyc1xuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKChtb2NrRGlzcGF0Y2gpID0+IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGtleS5oZWFkZXJzKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzXG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7aGVhZGVyc30nIG9uIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldXG4gICAgY29uc3QgbmFtZSA9IEJ1ZmZlci5mcm9tKGAke2tleX1gKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7ICsraikge1xuICAgICAgICByZXN1bHQucHVzaChuYW1lLCBCdWZmZXIuZnJvbShgJHt2YWx1ZVtqXX1gKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2gobmFtZSwgQnVmZmVyLmZyb20oYCR7dmFsdWV9YCkpXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvU3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzQ29kZVxuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNUZXh0IChzdGF0dXNDb2RlKSB7XG4gIHJldHVybiBTVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gfHwgJ3Vua25vd24nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlIChib2R5KSB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBbXVxuICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgYm9keSkge1xuICAgIGJ1ZmZlcnMucHVzaChkYXRhKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpLnRvU3RyaW5nKCd1dGY4Jylcbn1cblxuLyoqXG4gKiBNb2NrIGRpc3BhdGNoIGZ1bmN0aW9uIHVzZWQgdG8gc2ltdWxhdGUgdW5kaWNpIGRpc3BhdGNoZXNcbiAqL1xuZnVuY3Rpb24gbW9ja0Rpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gIC8vIEdldCBtb2NrIGRpc3BhdGNoIGZyb20gYnVpbHQga2V5XG4gIGNvbnN0IGtleSA9IGJ1aWxkS2V5KG9wdHMpXG4gIGNvbnN0IG1vY2tEaXNwYXRjaCA9IGdldE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuXG4gIG1vY2tEaXNwYXRjaC50aW1lc0ludm9rZWQrK1xuXG4gIC8vIEhlcmUncyB3aGVyZSB3ZSByZXNvbHZlIGEgY2FsbGJhY2sgaWYgYSBjYWxsYmFjayBpcyBwcmVzZW50IGZvciB0aGUgZGlzcGF0Y2ggZGF0YS5cbiAgaWYgKG1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKSB7XG4gICAgbW9ja0Rpc3BhdGNoLmRhdGEgPSB7IC4uLm1vY2tEaXNwYXRjaC5kYXRhLCAuLi5tb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjayhvcHRzKSB9XG4gIH1cblxuICAvLyBQYXJzZSBtb2NrRGlzcGF0Y2ggZGF0YVxuICBjb25zdCB7IGRhdGE6IHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMsIGVycm9yIH0sIGRlbGF5LCBwZXJzaXN0IH0gPSBtb2NrRGlzcGF0Y2hcbiAgY29uc3QgeyB0aW1lc0ludm9rZWQsIHRpbWVzIH0gPSBtb2NrRGlzcGF0Y2hcblxuICAvLyBJZiBpdCdzIHVzZWQgdXAgYW5kIG5vdCBwZXJzaXN0ZW50LCBtYXJrIGFzIGNvbnN1bWVkXG4gIG1vY2tEaXNwYXRjaC5jb25zdW1lZCA9ICFwZXJzaXN0ICYmIHRpbWVzSW52b2tlZCA+PSB0aW1lc1xuICBtb2NrRGlzcGF0Y2gucGVuZGluZyA9IHRpbWVzSW52b2tlZCA8IHRpbWVzXG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB0cmlnZ2VyIGRpc3BhdGNoIGVycm9yXG4gIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuICAgIGhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IHdpdGggYSBkZWxheSBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgICB9LCBkZWxheSlcbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlcGx5IChtb2NrRGlzcGF0Y2hlcywgX2RhdGEgPSBkYXRhKSB7XG4gICAgLy8gZmV0Y2gncyBIZWFkZXJzTGlzdCBpcyBhIDFEIHN0cmluZyBhcnJheVxuICAgIGNvbnN0IG9wdHNIZWFkZXJzID0gQXJyYXkuaXNBcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA/IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA6IG9wdHMuaGVhZGVyc1xuICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgX2RhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gX2RhdGEoeyAuLi5vcHRzLCBoZWFkZXJzOiBvcHRzSGVhZGVycyB9KVxuICAgICAgOiBfZGF0YVxuXG4gICAgLy8gdXRpbC50eXBlcy5pc1Byb21pc2UgaXMgbGlrZWx5IG5lZWRlZCBmb3IgamVzdC5cbiAgICBpZiAoaXNQcm9taXNlKGJvZHkpKSB7XG4gICAgICAvLyBJZiBoYW5kbGVSZXBseSBpcyBhc3luY2hyb25vdXMsIHRocm93aW5nIGFuIGVycm9yXG4gICAgICAvLyBpbiB0aGUgY2FsbGJhY2sgd2lsbCByZWplY3QgdGhlIHByb21pc2UsIHJhdGhlciB0aGFuXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRocm93IHRoZSBlcnJvciwgd2hpY2ggYnJlYWtzIHNvbWUgdGVzdHMuXG4gICAgICAvLyBSYXRoZXIsIHdlIHdhaXQgZm9yIHRoZSBjYWxsYmFjayB0byByZXNvbHZlIGlmIGl0IGlzIGFcbiAgICAgIC8vIHByb21pc2UsIGFuZCB0aGVuIHJlLXJ1biBoYW5kbGVSZXBseSB3aXRoIHRoZSBuZXcgYm9keS5cbiAgICAgIGJvZHkudGhlbigobmV3RGF0YSkgPT4gaGFuZGxlUmVwbHkobW9ja0Rpc3BhdGNoZXMsIG5ld0RhdGEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGJvZHkpXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXMoaGVhZGVycylcbiAgICBjb25zdCByZXNwb25zZVRyYWlsZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXModHJhaWxlcnMpXG5cbiAgICBoYW5kbGVyLm9uQ29ubmVjdD8uKGVyciA9PiBoYW5kbGVyLm9uRXJyb3IoZXJyKSwgbnVsbClcbiAgICBoYW5kbGVyLm9uSGVhZGVycz8uKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhPy4oQnVmZmVyLmZyb20ocmVzcG9uc2VEYXRhKSlcbiAgICBoYW5kbGVyLm9uQ29tcGxldGU/LihyZXNwb25zZVRyYWlsZXJzKVxuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaChtb2NrRGlzcGF0Y2hlcywga2V5KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lICgpIHt9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrRGlzcGF0Y2ggKCkge1xuICBjb25zdCBhZ2VudCA9IHRoaXNba01vY2tBZ2VudF1cbiAgY29uc3Qgb3JpZ2luID0gdGhpc1trT3JpZ2luXVxuICBjb25zdCBvcmlnaW5hbERpc3BhdGNoID0gdGhpc1trT3JpZ2luYWxEaXNwYXRjaF1cblxuICByZXR1cm4gZnVuY3Rpb24gZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoYWdlbnQuaXNNb2NrQWN0aXZlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBtb2NrRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTW9ja05vdE1hdGNoZWRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG5ldENvbm5lY3QgPSBhZ2VudFtrR2V0TmV0Q29ubmVjdF0oKVxuICAgICAgICAgIGlmIChuZXRDb25uZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgZGlzYWJsZWQpYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoZWNrTmV0Q29ubmVjdChuZXRDb25uZWN0LCBvcmlnaW4pKSB7XG4gICAgICAgICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgaXMgbm90IGVuYWJsZWQgZm9yIHRoaXMgb3JpZ2luKWApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrTmV0Q29ubmVjdCAobmV0Q29ubmVjdCwgb3JpZ2luKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwob3JpZ2luKVxuICBpZiAobmV0Q29ubmVjdCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXRDb25uZWN0KSAmJiBuZXRDb25uZWN0LnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoVmFsdWUobWF0Y2hlciwgdXJsLmhvc3QpKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja09wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKG9wdHMpIHtcbiAgICBjb25zdCB7IGFnZW50LCAuLi5tb2NrT3B0aW9ucyB9ID0gb3B0c1xuICAgIHJldHVybiBtb2NrT3B0aW9uc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRSZXNwb25zZURhdGEsXG4gIGdldE1vY2tEaXNwYXRjaCxcbiAgYWRkTW9ja0Rpc3BhdGNoLFxuICBkZWxldGVNb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkS2V5LFxuICBnZW5lcmF0ZUtleVZhbHVlcyxcbiAgbWF0Y2hWYWx1ZSxcbiAgZ2V0UmVzcG9uc2UsXG4gIGdldFN0YXR1c1RleHQsXG4gIG1vY2tEaXNwYXRjaCxcbiAgYnVpbGRNb2NrRGlzcGF0Y2gsXG4gIGNoZWNrTmV0Q29ubmVjdCxcbiAgYnVpbGRNb2NrT3B0aW9ucyxcbiAgZ2V0SGVhZGVyQnlOYW1lLFxuICBidWlsZEhlYWRlcnNGcm9tQXJyYXlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBnZXRSZXNwb25zZURhdGEsIGJ1aWxkS2V5LCBhZGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrRGlzcGF0Y2hLZXksXG4gIGtEZWZhdWx0SGVhZGVycyxcbiAga0RlZmF1bHRUcmFpbGVycyxcbiAga0NvbnRlbnRMZW5ndGgsXG4gIGtNb2NrRGlzcGF0Y2hcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGJ1aWxkVVJMIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG4vKipcbiAqIERlZmluZXMgdGhlIHNjb3BlIEFQSSBmb3IgYW4gaW50ZXJjZXB0b3IgcmVwbHlcbiAqL1xuY2xhc3MgTW9ja1Njb3BlIHtcbiAgY29uc3RydWN0b3IgKG1vY2tEaXNwYXRjaCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0gPSBtb2NrRGlzcGF0Y2hcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheSBhIHJlcGx5IGJ5IGEgc2V0IGFtb3VudCBpbiBtcy5cbiAgICovXG4gIGRlbGF5ICh3YWl0SW5Ncykge1xuICAgIGlmICh0eXBlb2Ygd2FpdEluTXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHdhaXRJbk1zKSB8fCB3YWl0SW5NcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3dhaXRJbk1zIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5kZWxheSA9IHdhaXRJbk1zXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBkZWZpbmVkIHJlcGx5LCBuZXZlciBtYXJrIGFzIGNvbnN1bWVkLlxuICAgKi9cbiAgcGVyc2lzdCAoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5wZXJzaXN0ID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb25lIHRvIGRlZmluZSBhIHJlcGx5IGZvciBhIHNldCBhbW91bnQgb2YgbWF0Y2hpbmcgcmVxdWVzdHMuXG4gICAqL1xuICB0aW1lcyAocmVwZWF0VGltZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGVhdFRpbWVzICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRUaW1lcykgfHwgcmVwZWF0VGltZXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBlYXRUaW1lcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0udGltZXMgPSByZXBlYXRUaW1lc1xuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGludGVyY2VwdG9yIGZvciBhIE1vY2tcbiAqL1xuY2xhc3MgTW9ja0ludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIG1vY2tEaXNwYXRjaGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMucGF0aCBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzEyNDVcbiAgICAvLyBBcyBwZXIgUkZDIDM5ODYsIGNsaWVudHMgYXJlIG5vdCBzdXBwb3NlZCB0byBzZW5kIFVSSVxuICAgIC8vIGZyYWdtZW50cyB0byBzZXJ2ZXJzIHdoZW4gdGhleSByZXRyaWV2ZSBhIGRvY3VtZW50LFxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgICAgb3B0cy5wYXRoID0gYnVpbGRVUkwob3B0cy5wYXRoLCBvcHRzLnF1ZXJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iL21haW4vbGliL3dlYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoeyBzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMgfSkge1xuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShkYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzW2tDb250ZW50TGVuZ3RoXSA/IHsgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VEYXRhLmxlbmd0aCB9IDoge31cbiAgICBjb25zdCBoZWFkZXJzID0geyAuLi50aGlzW2tEZWZhdWx0SGVhZGVyc10sIC4uLmNvbnRlbnRMZW5ndGgsIC4uLnJlc3BvbnNlT3B0aW9ucy5oZWFkZXJzIH1cbiAgICBjb25zdCB0cmFpbGVycyA9IHsgLi4udGhpc1trRGVmYXVsdFRyYWlsZXJzXSwgLi4ucmVzcG9uc2VPcHRpb25zLnRyYWlsZXJzIH1cblxuICAgIHJldHVybiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzIH1cbiAgfVxuXG4gIHZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzIChyZXBseVBhcmFtZXRlcnMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGx5UGFyYW1ldGVycy5zdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVwbHlQYXJhbWV0ZXJzLnJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgcmVwbHlQYXJhbWV0ZXJzLnJlc3BvbnNlT3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXNwb25zZU9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIHJlcGx5LlxuICAgKi9cbiAgcmVwbHkgKHJlcGx5T3B0aW9uc0NhbGxiYWNrT3JTdGF0dXNDb2RlKSB7XG4gICAgLy8gVmFsdWVzIG9mIHJlcGx5IGFyZW4ndCBhdmFpbGFibGUgcmlnaHQgbm93IGFzIHRoZXlcbiAgICAvLyBjYW4gb25seSBiZSBhdmFpbGFibGUgd2hlbiB0aGUgcmVwbHkgY2FsbGJhY2sgaXMgaW52b2tlZC5cbiAgICBpZiAodHlwZW9mIHJlcGx5T3B0aW9uc0NhbGxiYWNrT3JTdGF0dXNDb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlPcHRpb25zQ2FsbGJhY2tPclN0YXR1c0NvZGUob3B0cylcblxuICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBpbiB0aGUgcmlnaHQgZm9ybWF0XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZWREYXRhICE9PSAnb2JqZWN0JyB8fCByZXNvbHZlZERhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcGx5UGFyYW1ldGVycyA9IHsgZGF0YTogJycsIHJlc3BvbnNlT3B0aW9uczoge30sIC4uLnJlc29sdmVkRGF0YSB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMocmVwbHlQYXJhbWV0ZXJzKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShyZXBseVBhcmFtZXRlcnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCByZXBseVBhcmFtZXRlcnMgPSB7XG4gICAgICBzdGF0dXNDb2RlOiByZXBseU9wdGlvbnNDYWxsYmFja09yU3RhdHVzQ29kZSxcbiAgICAgIGRhdGE6IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gJycgOiBhcmd1bWVudHNbMV0sXG4gICAgICByZXNwb25zZU9wdGlvbnM6IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMl1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhyZXBseVBhcmFtZXRlcnMpXG5cbiAgICAvLyBTZW5kIGluLWFscmVhZHkgcHJvdmlkZWQgZGF0YSBsaWtlIHVzdWFsXG4gICAgY29uc3QgZGlzcGF0Y2hEYXRhID0gdGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEocmVwbHlQYXJhbWV0ZXJzKVxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCBkaXNwYXRjaERhdGEpXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgZXJyb3IuXG4gICAqL1xuICByZXBseVdpdGhFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdlcnJvciBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB7IGVycm9yIH0pXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IGhlYWRlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseUhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSBoZWFkZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSB0cmFpbGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5VHJhaWxlcnMgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHR5cGVvZiB0cmFpbGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndHJhaWxlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0gdHJhaWxlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXBseSBjb250ZW50IGxlbmd0aCBoZWFkZXIgZm9yIHJlcGxpZXMgb24gdGhlIGludGVyY2VwdG9yXG4gICAqL1xuICByZXBseUNvbnRlbnRMZW5ndGggKCkge1xuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuTW9ja0ludGVyY2VwdG9yID0gTW9ja0ludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5Nb2NrU2NvcGUgPSBNb2NrU2NvcGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyL2NsaWVudCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tDbGllbnQgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgQ2xpZW50IHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tDbGllbnQgZXh0ZW5kcyBDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQ2xpZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXIvcG9vbCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tQb29sIHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIFBvb2wgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja1Bvb2wgZXh0ZW5kcyBQb29sIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja1Bvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgc2luZ3VsYXJzID0ge1xuICBwcm9ub3VuOiAnaXQnLFxuICBpczogJ2lzJyxcbiAgd2FzOiAnd2FzJyxcbiAgdGhpczogJ3RoaXMnXG59XG5cbmNvbnN0IHBsdXJhbHMgPSB7XG4gIHByb25vdW46ICd0aGV5JyxcbiAgaXM6ICdhcmUnLFxuICB3YXM6ICd3ZXJlJyxcbiAgdGhpczogJ3RoZXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBsdXJhbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoc2luZ3VsYXIsIHBsdXJhbCkge1xuICAgIHRoaXMuc2luZ3VsYXIgPSBzaW5ndWxhclxuICAgIHRoaXMucGx1cmFsID0gcGx1cmFsXG4gIH1cblxuICBwbHVyYWxpemUgKGNvdW50KSB7XG4gICAgY29uc3Qgb25lID0gY291bnQgPT09IDFcbiAgICBjb25zdCBrZXlzID0gb25lID8gc2luZ3VsYXJzIDogcGx1cmFsc1xuICAgIGNvbnN0IG5vdW4gPSBvbmUgPyB0aGlzLnNpbmd1bGFyIDogdGhpcy5wbHVyYWxcbiAgICByZXR1cm4geyAuLi5rZXlzLCBjb3VudCwgbm91biB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgQ29uc29sZSB9ID0gcmVxdWlyZSgnbm9kZTpjb25zb2xlJylcblxuY29uc3QgUEVSU0lTVEVOVCA9IHByb2Nlc3MudmVyc2lvbnMuaWN1ID8gJ1x1MjcwNScgOiAnWSAnXG5jb25zdCBOT1RfUEVSU0lTVEVOVCA9IHByb2Nlc3MudmVyc2lvbnMuaWN1ID8gJ1x1Mjc0QycgOiAnTiAnXG5cbi8qKlxuICogR2V0cyB0aGUgb3V0cHV0IG9mIGBjb25zb2xlLnRhYmxlKFx1MjAyNilgIGFzIGEgc3RyaW5nLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBkaXNhYmxlQ29sb3JzIH0gPSB7fSkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSh7XG4gICAgICB0cmFuc2Zvcm0gKGNodW5rLCBfZW5jLCBjYikge1xuICAgICAgICBjYihudWxsLCBjaHVuaylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgQ29uc29sZSh7XG4gICAgICBzdGRvdXQ6IHRoaXMudHJhbnNmb3JtLFxuICAgICAgaW5zcGVjdE9wdGlvbnM6IHtcbiAgICAgICAgY29sb3JzOiAhZGlzYWJsZUNvbG9ycyAmJiAhcHJvY2Vzcy5lbnYuQ0lcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZm9ybWF0IChwZW5kaW5nSW50ZXJjZXB0b3JzKSB7XG4gICAgY29uc3Qgd2l0aFByZXR0eUhlYWRlcnMgPSBwZW5kaW5nSW50ZXJjZXB0b3JzLm1hcChcbiAgICAgICh7IG1ldGhvZCwgcGF0aCwgZGF0YTogeyBzdGF0dXNDb2RlIH0sIHBlcnNpc3QsIHRpbWVzLCB0aW1lc0ludm9rZWQsIG9yaWdpbiB9KSA9PiAoe1xuICAgICAgICBNZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgT3JpZ2luOiBvcmlnaW4sXG4gICAgICAgIFBhdGg6IHBhdGgsXG4gICAgICAgICdTdGF0dXMgY29kZSc6IHN0YXR1c0NvZGUsXG4gICAgICAgIFBlcnNpc3RlbnQ6IHBlcnNpc3QgPyBQRVJTSVNURU5UIDogTk9UX1BFUlNJU1RFTlQsXG4gICAgICAgIEludm9jYXRpb25zOiB0aW1lc0ludm9rZWQsXG4gICAgICAgIFJlbWFpbmluZzogcGVyc2lzdCA/IEluZmluaXR5IDogdGltZXMgLSB0aW1lc0ludm9rZWRcbiAgICAgIH0pKVxuXG4gICAgdGhpcy5sb2dnZXIudGFibGUod2l0aFByZXR0eUhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlYWQoKS50b1N0cmluZygpXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9hZ2VudCcpXG5jb25zdCB7XG4gIGtBZ2VudCxcbiAga01vY2tBZ2VudFNldCxcbiAga01vY2tBZ2VudEdldCxcbiAga0Rpc3BhdGNoZXMsXG4gIGtJc01vY2tBY3RpdmUsXG4gIGtOZXRDb25uZWN0LFxuICBrR2V0TmV0Q29ubmVjdCxcbiAga09wdGlvbnMsXG4gIGtGYWN0b3J5XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL21vY2stcG9vbCcpXG5jb25zdCB7IG1hdGNoVmFsdWUsIGJ1aWxkTW9ja09wdGlvbnMgfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlcicpXG5jb25zdCBQbHVyYWxpemVyID0gcmVxdWlyZSgnLi9wbHVyYWxpemVyJylcbmNvbnN0IFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSByZXF1aXJlKCcuL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlcicpXG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzPy5hZ2VudCAmJiB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuICAgIGNvbnN0IGFnZW50ID0gb3B0cz8uYWdlbnQgPyBvcHRzLmFnZW50IDogbmV3IEFnZW50KG9wdHMpXG4gICAgdGhpc1trQWdlbnRdID0gYWdlbnRcblxuICAgIHRoaXNba0NsaWVudHNdID0gYWdlbnRba0NsaWVudHNdXG4gICAgdGhpc1trT3B0aW9uc10gPSBidWlsZE1vY2tPcHRpb25zKG9wdHMpXG4gIH1cblxuICBnZXQgKG9yaWdpbikge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trTW9ja0FnZW50R2V0XShvcmlnaW4pXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICB9XG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gQ2FsbCBNb2NrQWdlbnQuZ2V0IHRvIHBlcmZvcm0gYWRkaXRpb25hbCBzZXR1cCBiZWZvcmUgZGlzcGF0Y2hpbmcgYXMgbm9ybWFsXG4gICAgdGhpcy5nZXQob3B0cy5vcmlnaW4pXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgY2xvc2UgKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgdGhpc1trQ2xpZW50c10uY2xlYXIoKVxuICB9XG5cbiAgZGVhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IGZhbHNlXG4gIH1cblxuICBhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IHRydWVcbiAgfVxuXG4gIGVuYWJsZU5ldENvbm5lY3QgKG1hdGNoZXIpIHtcbiAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBtYXRjaGVyID09PSAnZnVuY3Rpb24nIHx8IG1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXNba05ldENvbm5lY3RdKSkge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XS5wdXNoKG1hdGNoZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IFttYXRjaGVyXVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdVbnN1cHBvcnRlZCBtYXRjaGVyLiBNdXN0IGJlIG9uZSBvZiBTdHJpbmd8RnVuY3Rpb258UmVnRXhwLicpXG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZU5ldENvbm5lY3QgKCkge1xuICAgIHRoaXNba05ldENvbm5lY3RdID0gZmFsc2VcbiAgfVxuXG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gYnlwYXNzIGlzc3VlcyBjYXVzZWQgYnkgdXNpbmcgZ2xvYmFsIHN5bWJvbHMgLSBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNDQ3XG4gIGdldCBpc01vY2tBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzW2tJc01vY2tBY3RpdmVdXG4gIH1cblxuICBba01vY2tBZ2VudFNldF0gKG9yaWdpbiwgZGlzcGF0Y2hlcikge1xuICAgIHRoaXNba0NsaWVudHNdLnNldChvcmlnaW4sIGRpc3BhdGNoZXIpXG4gIH1cblxuICBba0ZhY3RvcnldIChvcmlnaW4pIHtcbiAgICBjb25zdCBtb2NrT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBhZ2VudDogdGhpcyB9LCB0aGlzW2tPcHRpb25zXSlcbiAgICByZXR1cm4gdGhpc1trT3B0aW9uc10gJiYgdGhpc1trT3B0aW9uc10uY29ubmVjdGlvbnMgPT09IDFcbiAgICAgID8gbmV3IE1vY2tDbGllbnQob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgICAgIDogbmV3IE1vY2tQb29sKG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gIH1cblxuICBba01vY2tBZ2VudEdldF0gKG9yaWdpbikge1xuICAgIC8vIEZpcnN0IGNoZWNrIGlmIHdlIGNhbiBpbW1lZGlhdGVseSBmaW5kIGl0XG4gICAgY29uc3QgY2xpZW50ID0gdGhpc1trQ2xpZW50c10uZ2V0KG9yaWdpbilcbiAgICBpZiAoY2xpZW50KSB7XG4gICAgICByZXR1cm4gY2xpZW50XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXREaXNwYXRjaGVyXSBvZiBBcnJheS5mcm9tKHRoaXNba0NsaWVudHNdKSkge1xuICAgICAgaWYgKG5vbkV4cGxpY2l0RGlzcGF0Y2hlciAmJiB0eXBlb2Yga2V5TWF0Y2hlciAhPT0gJ3N0cmluZycgJiYgbWF0Y2hWYWx1ZShrZXlNYXRjaGVyLCBvcmlnaW4pKSB7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgICBkaXNwYXRjaGVyW2tEaXNwYXRjaGVzXSA9IG5vbkV4cGxpY2l0RGlzcGF0Y2hlcltrRGlzcGF0Y2hlc11cbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBba0dldE5ldENvbm5lY3RdICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmV0Q29ubmVjdF1cbiAgfVxuXG4gIHBlbmRpbmdJbnRlcmNlcHRvcnMgKCkge1xuICAgIGNvbnN0IG1vY2tBZ2VudENsaWVudHMgPSB0aGlzW2tDbGllbnRzXVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obW9ja0FnZW50Q2xpZW50cy5lbnRyaWVzKCkpXG4gICAgICAuZmxhdE1hcCgoW29yaWdpbiwgc2NvcGVdKSA9PiBzY29wZVtrRGlzcGF0Y2hlc10ubWFwKGRpc3BhdGNoID0+ICh7IC4uLmRpc3BhdGNoLCBvcmlnaW4gfSkpKVxuICAgICAgLmZpbHRlcigoeyBwZW5kaW5nIH0pID0+IHBlbmRpbmcpXG4gIH1cblxuICBhc3NlcnROb1BlbmRpbmdJbnRlcmNlcHRvcnMgKHsgcGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IG5ldyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyKCkgfSA9IHt9KSB7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ0ludGVyY2VwdG9ycygpXG5cbiAgICBpZiAocGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBsdXJhbGl6ZXIgPSBuZXcgUGx1cmFsaXplcignaW50ZXJjZXB0b3InLCAnaW50ZXJjZXB0b3JzJykucGx1cmFsaXplKHBlbmRpbmcubGVuZ3RoKVxuXG4gICAgdGhyb3cgbmV3IFVuZGljaUVycm9yKGBcbiR7cGx1cmFsaXplci5jb3VudH0gJHtwbHVyYWxpemVyLm5vdW59ICR7cGx1cmFsaXplci5pc30gcGVuZGluZzpcblxuJHtwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyLmZvcm1hdChwZW5kaW5nKX1cbmAudHJpbSgpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0FnZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXIvYWdlbnQnKVxuXG5pZiAoZ2V0R2xvYmFsRGlzcGF0Y2hlcigpID09PSB1bmRlZmluZWQpIHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcihuZXcgQWdlbnQoKSlcbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsRGlzcGF0Y2hlciAoYWdlbnQpIHtcbiAgaWYgKCFhZ2VudCB8fCB0eXBlb2YgYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IGFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsRGlzcGF0Y2hlciwge1xuICAgIHZhbHVlOiBhZ2VudCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERpc3BhdGNoZXIgKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxEaXNwYXRjaGVyXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcixcbiAgZ2V0R2xvYmFsRGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERlY29yYXRvckhhbmRsZXIge1xuICAjaGFuZGxlclxuXG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0JyB8fCBoYW5kbGVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgdGhpcy4jaGFuZGxlciA9IGhhbmRsZXJcbiAgfVxuXG4gIG9uQ29ubmVjdCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uQ29ubmVjdD8uKC4uLmFyZ3MpXG4gIH1cblxuICBvbkVycm9yICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25FcnJvcj8uKC4uLmFyZ3MpXG4gIH1cblxuICBvblVwZ3JhZGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vblVwZ3JhZGU/LiguLi5hcmdzKVxuICB9XG5cbiAgb25SZXNwb25zZVN0YXJ0ZWQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vblJlc3BvbnNlU3RhcnRlZD8uKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkhlYWRlcnM/LiguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25EYXRhPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkNvbXBsZXRlPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkJvZHlTZW50Py4oLi4uYXJncylcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgUmVkaXJlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9yZWRpcmVjdC1oYW5kbGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBvcHRzID0+IHtcbiAgY29uc3QgZ2xvYmFsTWF4UmVkaXJlY3Rpb25zID0gb3B0cz8ubWF4UmVkaXJlY3Rpb25zXG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJlZGlyZWN0SW50ZXJjZXB0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZ2xvYmFsTWF4UmVkaXJlY3Rpb25zLCAuLi5iYXNlT3B0cyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgaGFuZGxlclxuICAgICAgKVxuXG4gICAgICByZXR1cm4gZGlzcGF0Y2goYmFzZU9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IFJldHJ5SGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvcmV0cnktaGFuZGxlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsT3B0cyA9PiB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJldHJ5SW50ZXJjZXB0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaChcbiAgICAgICAgb3B0cyxcbiAgICAgICAgbmV3IFJldHJ5SGFuZGxlcihcbiAgICAgICAgICB7IC4uLm9wdHMsIHJldHJ5T3B0aW9uczogeyAuLi5nbG9iYWxPcHRzLCAuLi5vcHRzLnJldHJ5T3B0aW9ucyB9IH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIGRpc3BhdGNoXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXInKVxuXG5jbGFzcyBEdW1wSGFuZGxlciBleHRlbmRzIERlY29yYXRvckhhbmRsZXIge1xuICAjbWF4U2l6ZSA9IDEwMjQgKiAxMDI0XG4gICNhYm9ydCA9IG51bGxcbiAgI2R1bXBlZCA9IGZhbHNlXG4gICNhYm9ydGVkID0gZmFsc2VcbiAgI3NpemUgPSAwXG4gICNyZWFzb24gPSBudWxsXG4gICNoYW5kbGVyID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yICh7IG1heFNpemUgfSwgaGFuZGxlcikge1xuICAgIHN1cGVyKGhhbmRsZXIpXG5cbiAgICBpZiAobWF4U2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKG1heFNpemUpIHx8IG1heFNpemUgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhTaXplIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAnKVxuICAgIH1cblxuICAgIHRoaXMuI21heFNpemUgPSBtYXhTaXplID8/IHRoaXMuI21heFNpemVcbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIHRoaXMuI2Fib3J0ID0gYWJvcnRcblxuICAgIHRoaXMuI2hhbmRsZXIub25Db25uZWN0KHRoaXMuI2N1c3RvbUFib3J0LmJpbmQodGhpcykpXG4gIH1cblxuICAjY3VzdG9tQWJvcnQgKHJlYXNvbikge1xuICAgIHRoaXMuI2Fib3J0ZWQgPSB0cnVlXG4gICAgdGhpcy4jcmVhc29uID0gcmVhc29uXG4gIH1cblxuICAvLyBUT0RPOiB3aWxsIHJlcXVpcmUgYWRqdXN0bWVudCBhZnRlciBuZXcgaG9va3MgYXJlIG91dFxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggPiB0aGlzLiNtYXhTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcihcbiAgICAgICAgYFJlc3BvbnNlIHNpemUgKCR7Y29udGVudExlbmd0aH0pIGxhcmdlciB0aGFuIG1heFNpemUgKCR7XG4gICAgICAgICAgdGhpcy4jbWF4U2l6ZVxuICAgICAgICB9KWBcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICBzdGF0dXNDb2RlLFxuICAgICAgcmF3SGVhZGVycyxcbiAgICAgIHJlc3VtZSxcbiAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICApXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBpZiAodGhpcy4jZHVtcGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlcnIgPSB0aGlzLiNyZWFzb24gPz8gZXJyXG5cbiAgICB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuI3NpemUgPSB0aGlzLiNzaXplICsgY2h1bmsubGVuZ3RoXG5cbiAgICBpZiAodGhpcy4jc2l6ZSA+PSB0aGlzLiNtYXhTaXplKSB7XG4gICAgICB0aGlzLiNkdW1wZWQgPSB0cnVlXG5cbiAgICAgIGlmICh0aGlzLiNhYm9ydGVkKSB7XG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcih0aGlzLiNyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNoYW5kbGVyLm9uQ29tcGxldGUoW10pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMuI2R1bXBlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2Fib3J0ZWQpIHtcbiAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcih0aGlzLnJlYXNvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuI2hhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEdW1wSW50ZXJjZXB0b3IgKFxuICB7IG1heFNpemU6IGRlZmF1bHRNYXhTaXplIH0gPSB7XG4gICAgbWF4U2l6ZTogMTAyNCAqIDEwMjRcbiAgfVxuKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEludGVyY2VwdCAob3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3QgeyBkdW1wTWF4U2l6ZSA9IGRlZmF1bHRNYXhTaXplIH0gPVxuICAgICAgICBvcHRzXG5cbiAgICAgIGNvbnN0IGR1bXBIYW5kbGVyID0gbmV3IER1bXBIYW5kbGVyKFxuICAgICAgICB7IG1heFNpemU6IGR1bXBNYXhTaXplIH0sXG4gICAgICAgIGhhbmRsZXJcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGR1bXBIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUR1bXBJbnRlcmNlcHRvclxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgeyBpc0lQIH0gPSByZXF1aXJlKCdub2RlOm5ldCcpXG5jb25zdCB7IGxvb2t1cCB9ID0gcmVxdWlyZSgnbm9kZTpkbnMnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXInKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgSW5mb3JtYXRpb25hbEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBtYXhJbnQgPSBNYXRoLnBvdygyLCAzMSkgLSAxXG5cbmNsYXNzIEROU0luc3RhbmNlIHtcbiAgI21heFRUTCA9IDBcbiAgI21heEl0ZW1zID0gMFxuICAjcmVjb3JkcyA9IG5ldyBNYXAoKVxuICBkdWFsU3RhY2sgPSB0cnVlXG4gIGFmZmluaXR5ID0gbnVsbFxuICBsb29rdXAgPSBudWxsXG4gIHBpY2sgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICB0aGlzLiNtYXhUVEwgPSBvcHRzLm1heFRUTFxuICAgIHRoaXMuI21heEl0ZW1zID0gb3B0cy5tYXhJdGVtc1xuICAgIHRoaXMuZHVhbFN0YWNrID0gb3B0cy5kdWFsU3RhY2tcbiAgICB0aGlzLmFmZmluaXR5ID0gb3B0cy5hZmZpbml0eVxuICAgIHRoaXMubG9va3VwID0gb3B0cy5sb29rdXAgPz8gdGhpcy4jZGVmYXVsdExvb2t1cFxuICAgIHRoaXMucGljayA9IG9wdHMucGljayA/PyB0aGlzLiNkZWZhdWx0UGlja1xuICB9XG5cbiAgZ2V0IGZ1bGwgKCkge1xuICAgIHJldHVybiB0aGlzLiNyZWNvcmRzLnNpemUgPT09IHRoaXMuI21heEl0ZW1zXG4gIH1cblxuICBydW5Mb29rdXAgKG9yaWdpbiwgb3B0cywgY2IpIHtcbiAgICBjb25zdCBpcHMgPSB0aGlzLiNyZWNvcmRzLmdldChvcmlnaW4uaG9zdG5hbWUpXG5cbiAgICAvLyBJZiBmdWxsLCB3ZSBqdXN0IHJldHVybiB0aGUgb3JpZ2luXG4gICAgaWYgKGlwcyA9PSBudWxsICYmIHRoaXMuZnVsbCkge1xuICAgICAgY2IobnVsbCwgb3JpZ2luLm9yaWdpbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdHMgPSB7XG4gICAgICBhZmZpbml0eTogdGhpcy5hZmZpbml0eSxcbiAgICAgIGR1YWxTdGFjazogdGhpcy5kdWFsU3RhY2ssXG4gICAgICBsb29rdXA6IHRoaXMubG9va3VwLFxuICAgICAgcGljazogdGhpcy5waWNrLFxuICAgICAgLi4ub3B0cy5kbnMsXG4gICAgICBtYXhUVEw6IHRoaXMuI21heFRUTCxcbiAgICAgIG1heEl0ZW1zOiB0aGlzLiNtYXhJdGVtc1xuICAgIH1cblxuICAgIC8vIElmIG5vIElQcyB3ZSBsb29rdXBcbiAgICBpZiAoaXBzID09IG51bGwpIHtcbiAgICAgIHRoaXMubG9va3VwKG9yaWdpbiwgbmV3T3B0cywgKGVyciwgYWRkcmVzc2VzKSA9PiB7XG4gICAgICAgIGlmIChlcnIgfHwgYWRkcmVzc2VzID09IG51bGwgfHwgYWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNiKGVyciA/PyBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdObyBETlMgZW50cmllcyBmb3VuZCcpKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRSZWNvcmRzKG9yaWdpbiwgYWRkcmVzc2VzKVxuICAgICAgICBjb25zdCByZWNvcmRzID0gdGhpcy4jcmVjb3Jkcy5nZXQob3JpZ2luLmhvc3RuYW1lKVxuXG4gICAgICAgIGNvbnN0IGlwID0gdGhpcy5waWNrKFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIG5ld09wdHMuYWZmaW5pdHlcbiAgICAgICAgKVxuXG4gICAgICAgIGxldCBwb3J0XG4gICAgICAgIGlmICh0eXBlb2YgaXAucG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBwb3J0ID0gYDoke2lwLnBvcnR9YFxuICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbi5wb3J0ICE9PSAnJykge1xuICAgICAgICAgIHBvcnQgPSBgOiR7b3JpZ2luLnBvcnR9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvcnQgPSAnJ1xuICAgICAgICB9XG5cbiAgICAgICAgY2IoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBgJHtvcmlnaW4ucHJvdG9jb2x9Ly8ke1xuICAgICAgICAgICAgaXAuZmFtaWx5ID09PSA2ID8gYFske2lwLmFkZHJlc3N9XWAgOiBpcC5hZGRyZXNzXG4gICAgICAgICAgfSR7cG9ydH1gXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgSVBzIHdlIHBpY2tcbiAgICAgIGNvbnN0IGlwID0gdGhpcy5waWNrKFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGlwcyxcbiAgICAgICAgbmV3T3B0cy5hZmZpbml0eVxuICAgICAgKVxuXG4gICAgICAvLyBJZiBubyBJUHMgd2UgbG9va3VwIC0gZGVsZXRpbmcgb2xkIHJlY29yZHNcbiAgICAgIGlmIChpcCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuI3JlY29yZHMuZGVsZXRlKG9yaWdpbi5ob3N0bmFtZSlcbiAgICAgICAgdGhpcy5ydW5Mb29rdXAob3JpZ2luLCBvcHRzLCBjYilcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBwb3J0XG4gICAgICBpZiAodHlwZW9mIGlwLnBvcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHBvcnQgPSBgOiR7aXAucG9ydH1gXG4gICAgICB9IGVsc2UgaWYgKG9yaWdpbi5wb3J0ICE9PSAnJykge1xuICAgICAgICBwb3J0ID0gYDoke29yaWdpbi5wb3J0fWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvcnQgPSAnJ1xuICAgICAgfVxuXG4gICAgICBjYihcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYCR7b3JpZ2luLnByb3RvY29sfS8vJHtcbiAgICAgICAgICBpcC5mYW1pbHkgPT09IDYgPyBgWyR7aXAuYWRkcmVzc31dYCA6IGlwLmFkZHJlc3NcbiAgICAgICAgfSR7cG9ydH1gXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgI2RlZmF1bHRMb29rdXAgKG9yaWdpbiwgb3B0cywgY2IpIHtcbiAgICBsb29rdXAoXG4gICAgICBvcmlnaW4uaG9zdG5hbWUsXG4gICAgICB7XG4gICAgICAgIGFsbDogdHJ1ZSxcbiAgICAgICAgZmFtaWx5OiB0aGlzLmR1YWxTdGFjayA9PT0gZmFsc2UgPyB0aGlzLmFmZmluaXR5IDogMCxcbiAgICAgICAgb3JkZXI6ICdpcHY0Zmlyc3QnXG4gICAgICB9LFxuICAgICAgKGVyciwgYWRkcmVzc2VzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBNYXAoKVxuXG4gICAgICAgIGZvciAoY29uc3QgYWRkciBvZiBhZGRyZXNzZXMpIHtcbiAgICAgICAgICAvLyBPbiBsaW51eCB3ZSBmb3VuZCBkdXBsaWNhdGVzLCB3ZSBhdHRlbXB0IHRvIHJlbW92ZSB0aGVtIHdpdGhcbiAgICAgICAgICAvLyB0aGUgbGF0ZXN0IHJlY29yZFxuICAgICAgICAgIHJlc3VsdHMuc2V0KGAke2FkZHIuYWRkcmVzc306JHthZGRyLmZhbWlseX1gLCBhZGRyKVxuICAgICAgICB9XG5cbiAgICAgICAgY2IobnVsbCwgcmVzdWx0cy52YWx1ZXMoKSlcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICAjZGVmYXVsdFBpY2sgKG9yaWdpbiwgaG9zdG5hbWVSZWNvcmRzLCBhZmZpbml0eSkge1xuICAgIGxldCBpcCA9IG51bGxcbiAgICBjb25zdCB7IHJlY29yZHMsIG9mZnNldCB9ID0gaG9zdG5hbWVSZWNvcmRzXG5cbiAgICBsZXQgZmFtaWx5XG4gICAgaWYgKHRoaXMuZHVhbFN0YWNrKSB7XG4gICAgICBpZiAoYWZmaW5pdHkgPT0gbnVsbCkge1xuICAgICAgICAvLyBCYWxhbmNlIGJldHdlZW4gaXAgZmFtaWxpZXNcbiAgICAgICAgaWYgKG9mZnNldCA9PSBudWxsIHx8IG9mZnNldCA9PT0gbWF4SW50KSB7XG4gICAgICAgICAgaG9zdG5hbWVSZWNvcmRzLm9mZnNldCA9IDBcbiAgICAgICAgICBhZmZpbml0eSA9IDRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBob3N0bmFtZVJlY29yZHMub2Zmc2V0KytcbiAgICAgICAgICBhZmZpbml0eSA9IChob3N0bmFtZVJlY29yZHMub2Zmc2V0ICYgMSkgPT09IDEgPyA2IDogNFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmRzW2FmZmluaXR5XSAhPSBudWxsICYmIHJlY29yZHNbYWZmaW5pdHldLmlwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZhbWlseSA9IHJlY29yZHNbYWZmaW5pdHldXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYW1pbHkgPSByZWNvcmRzW2FmZmluaXR5ID09PSA0ID8gNiA6IDRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhbWlseSA9IHJlY29yZHNbYWZmaW5pdHldXG4gICAgfVxuXG4gICAgLy8gSWYgbm8gSVBzIHdlIHJldHVybiBudWxsXG4gICAgaWYgKGZhbWlseSA9PSBudWxsIHx8IGZhbWlseS5pcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gaXBcbiAgICB9XG5cbiAgICBpZiAoZmFtaWx5Lm9mZnNldCA9PSBudWxsIHx8IGZhbWlseS5vZmZzZXQgPT09IG1heEludCkge1xuICAgICAgZmFtaWx5Lm9mZnNldCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgZmFtaWx5Lm9mZnNldCsrXG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb24gPSBmYW1pbHkub2Zmc2V0ICUgZmFtaWx5Lmlwcy5sZW5ndGhcbiAgICBpcCA9IGZhbWlseS5pcHNbcG9zaXRpb25dID8/IG51bGxcblxuICAgIGlmIChpcCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaXBcbiAgICB9XG5cbiAgICBpZiAoRGF0ZS5ub3coKSAtIGlwLnRpbWVzdGFtcCA+IGlwLnR0bCkgeyAvLyByZWNvcmQgVFRMIGlzIGFscmVhZHkgaW4gbXNcbiAgICAgIC8vIFdlIGRlbGV0ZSBleHBpcmVkIHJlY29yZHNcbiAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhleSBoYXZlIGRpZmZlcmVudCBUVEwsIHNvIHdlIG1hbmFnZSB0aGVtIGluZGl2aWR1YWxseVxuICAgICAgZmFtaWx5Lmlwcy5zcGxpY2UocG9zaXRpb24sIDEpXG4gICAgICByZXR1cm4gdGhpcy5waWNrKG9yaWdpbiwgaG9zdG5hbWVSZWNvcmRzLCBhZmZpbml0eSlcbiAgICB9XG5cbiAgICByZXR1cm4gaXBcbiAgfVxuXG4gIHNldFJlY29yZHMgKG9yaWdpbiwgYWRkcmVzc2VzKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IHJlY29yZHMgPSB7IHJlY29yZHM6IHsgNDogbnVsbCwgNjogbnVsbCB9IH1cbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBhZGRyZXNzZXMpIHtcbiAgICAgIHJlY29yZC50aW1lc3RhbXAgPSB0aW1lc3RhbXBcbiAgICAgIGlmICh0eXBlb2YgcmVjb3JkLnR0bCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgLy8gVGhlIHJlY29yZCBUVEwgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gbXNcbiAgICAgICAgcmVjb3JkLnR0bCA9IE1hdGgubWluKHJlY29yZC50dGwsIHRoaXMuI21heFRUTClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZC50dGwgPSB0aGlzLiNtYXhUVExcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmFtaWx5UmVjb3JkcyA9IHJlY29yZHMucmVjb3Jkc1tyZWNvcmQuZmFtaWx5XSA/PyB7IGlwczogW10gfVxuXG4gICAgICBmYW1pbHlSZWNvcmRzLmlwcy5wdXNoKHJlY29yZClcbiAgICAgIHJlY29yZHMucmVjb3Jkc1tyZWNvcmQuZmFtaWx5XSA9IGZhbWlseVJlY29yZHNcbiAgICB9XG5cbiAgICB0aGlzLiNyZWNvcmRzLnNldChvcmlnaW4uaG9zdG5hbWUsIHJlY29yZHMpXG4gIH1cblxuICBnZXRIYW5kbGVyIChtZXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBETlNEaXNwYXRjaEhhbmRsZXIodGhpcywgbWV0YSwgb3B0cylcbiAgfVxufVxuXG5jbGFzcyBETlNEaXNwYXRjaEhhbmRsZXIgZXh0ZW5kcyBEZWNvcmF0b3JIYW5kbGVyIHtcbiAgI3N0YXRlID0gbnVsbFxuICAjb3B0cyA9IG51bGxcbiAgI2Rpc3BhdGNoID0gbnVsbFxuICAjaGFuZGxlciA9IG51bGxcbiAgI29yaWdpbiA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoc3RhdGUsIHsgb3JpZ2luLCBoYW5kbGVyLCBkaXNwYXRjaCB9LCBvcHRzKSB7XG4gICAgc3VwZXIoaGFuZGxlcilcbiAgICB0aGlzLiNvcmlnaW4gPSBvcmlnaW5cbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuI29wdHMgPSB7IC4uLm9wdHMgfVxuICAgIHRoaXMuI3N0YXRlID0gc3RhdGVcbiAgICB0aGlzLiNkaXNwYXRjaCA9IGRpc3BhdGNoXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICBjYXNlICdFVElNRURPVVQnOlxuICAgICAgY2FzZSAnRUNPTk5SRUZVU0VEJzoge1xuICAgICAgICBpZiAodGhpcy4jc3RhdGUuZHVhbFN0YWNrKSB7XG4gICAgICAgICAgLy8gV2UgZGVsZXRlIHRoZSByZWNvcmQgYW5kIHJldHJ5XG4gICAgICAgICAgdGhpcy4jc3RhdGUucnVuTG9va3VwKHRoaXMuI29yaWdpbiwgdGhpcy4jb3B0cywgKGVyciwgbmV3T3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaXNwYXRjaE9wdHMgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuI29wdHMsXG4gICAgICAgICAgICAgIG9yaWdpbjogbmV3T3JpZ2luXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuI2Rpc3BhdGNoKGRpc3BhdGNoT3B0cywgdGhpcylcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gaWYgZHVhbC1zdGFjayBkaXNhYmxlZCwgd2UgZXJyb3Igb3V0XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VOT1RGT1VORCc6XG4gICAgICAgIHRoaXMuI3N0YXRlLmRlbGV0ZVJlY29yZCh0aGlzLiNvcmlnaW4pXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJjZXB0b3JPcHRzID0+IHtcbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubWF4VFRMICE9IG51bGwgJiZcbiAgICAodHlwZW9mIGludGVyY2VwdG9yT3B0cz8ubWF4VFRMICE9PSAnbnVtYmVyJyB8fCBpbnRlcmNlcHRvck9wdHM/Lm1heFRUTCA8IDApXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBtYXhUVEwuIE11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgIT0gbnVsbCAmJlxuICAgICh0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5tYXhJdGVtcyAhPT0gJ251bWJlcicgfHxcbiAgICAgIGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgPCAxKVxuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnSW52YWxpZCBtYXhJdGVtcy4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBhbmQgZ3JlYXRlciB0aGFuIHplcm8nXG4gICAgKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgIT0gbnVsbCAmJlxuICAgIGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgIT09IDQgJiZcbiAgICBpbnRlcmNlcHRvck9wdHM/LmFmZmluaXR5ICE9PSA2XG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBhZmZpbml0eS4gTXVzdCBiZSBlaXRoZXIgNCBvciA2JylcbiAgfVxuXG4gIGlmIChcbiAgICBpbnRlcmNlcHRvck9wdHM/LmR1YWxTdGFjayAhPSBudWxsICYmXG4gICAgdHlwZW9mIGludGVyY2VwdG9yT3B0cz8uZHVhbFN0YWNrICE9PSAnYm9vbGVhbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIGR1YWxTdGFjay4gTXVzdCBiZSBhIGJvb2xlYW4nKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubG9va3VwICE9IG51bGwgJiZcbiAgICB0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5sb29rdXAgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIGxvb2t1cC4gTXVzdCBiZSBhIGZ1bmN0aW9uJylcbiAgfVxuXG4gIGlmIChcbiAgICBpbnRlcmNlcHRvck9wdHM/LnBpY2sgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBpbnRlcmNlcHRvck9wdHM/LnBpY2sgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIHBpY2suIE11c3QgYmUgYSBmdW5jdGlvbicpXG4gIH1cblxuICBjb25zdCBkdWFsU3RhY2sgPSBpbnRlcmNlcHRvck9wdHM/LmR1YWxTdGFjayA/PyB0cnVlXG4gIGxldCBhZmZpbml0eVxuICBpZiAoZHVhbFN0YWNrKSB7XG4gICAgYWZmaW5pdHkgPSBpbnRlcmNlcHRvck9wdHM/LmFmZmluaXR5ID8/IG51bGxcbiAgfSBlbHNlIHtcbiAgICBhZmZpbml0eSA9IGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgPz8gNFxuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBtYXhUVEw6IGludGVyY2VwdG9yT3B0cz8ubWF4VFRMID8/IDEwZTMsIC8vIEV4cHJlc3NlZCBpbiBtc1xuICAgIGxvb2t1cDogaW50ZXJjZXB0b3JPcHRzPy5sb29rdXAgPz8gbnVsbCxcbiAgICBwaWNrOiBpbnRlcmNlcHRvck9wdHM/LnBpY2sgPz8gbnVsbCxcbiAgICBkdWFsU3RhY2ssXG4gICAgYWZmaW5pdHksXG4gICAgbWF4SXRlbXM6IGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgPz8gSW5maW5pdHlcbiAgfVxuXG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IEROU0luc3RhbmNlKG9wdHMpXG5cbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZG5zSW50ZXJjZXB0b3IgKG9yaWdEaXNwYXRjaE9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9XG4gICAgICAgIG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luLmNvbnN0cnVjdG9yID09PSBVUkxcbiAgICAgICAgICA/IG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luXG4gICAgICAgICAgOiBuZXcgVVJMKG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luKVxuXG4gICAgICBpZiAoaXNJUChvcmlnaW4uaG9zdG5hbWUpICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChvcmlnRGlzcGF0Y2hPcHRzLCBoYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5ydW5Mb29rdXAob3JpZ2luLCBvcmlnRGlzcGF0Y2hPcHRzLCAoZXJyLCBuZXdPcmlnaW4pID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRpc3BhdGNoT3B0cyA9IG51bGxcbiAgICAgICAgZGlzcGF0Y2hPcHRzID0ge1xuICAgICAgICAgIC4uLm9yaWdEaXNwYXRjaE9wdHMsXG4gICAgICAgICAgc2VydmVybmFtZTogb3JpZ2luLmhvc3RuYW1lLCAvLyBGb3IgU05JIG9uIFRMU1xuICAgICAgICAgIG9yaWdpbjogbmV3T3JpZ2luLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIGhvc3Q6IG9yaWdpbi5ob3N0bmFtZSxcbiAgICAgICAgICAgIC4uLm9yaWdEaXNwYXRjaE9wdHMuaGVhZGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGRpc3BhdGNoT3B0cyxcbiAgICAgICAgICBpbnN0YW5jZS5nZXRIYW5kbGVyKHsgb3JpZ2luLCBkaXNwYXRjaCwgaGFuZGxlciB9LCBvcmlnRGlzcGF0Y2hPcHRzKVxuICAgICAgICApXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgaXRlcmF0b3JNaXhpbixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlclx1MjAxOXMgZmlyc3QgaXRlbSwgaGVhZGVyXHUyMDE5cyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSBcdTIxOTIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgLy8gICAgVE9ET1xuICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgaWYgKGdldEhlYWRlcnNHdWFyZChoZWFkZXJzKSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cblxuICAvLyA3LiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmV0dXJuIGdldEhlYWRlcnNMaXN0KGhlYWRlcnMpLmFwcGVuZChuYW1lLCB2YWx1ZSwgZmFsc2UpXG5cbiAgLy8gOC4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIGhlYWRlcnNcbn1cblxuZnVuY3Rpb24gY29tcGFyZUhlYWRlck5hbWUgKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPCBiWzBdID8gLTEgOiAxXG59XG5cbmNsYXNzIEhlYWRlcnNMaXN0IHtcbiAgLyoqIEB0eXBlIHtbc3RyaW5nLCBzdHJpbmddW118bnVsbH0gKi9cbiAgY29va2llcyA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoaW5pdCkge1xuICAgIGlmIChpbml0IGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0W2tIZWFkZXJzTWFwXSlcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gaW5pdFtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHRoaXMuY29va2llcyA9IGluaXQuY29va2llcyA9PT0gbnVsbCA/IG51bGwgOiBbLi4uaW5pdC5jb29raWVzXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdClcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbGlzdC1jb250YWluc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqL1xuICBjb250YWlucyAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0uaGFzKGlzTG93ZXJDYXNlID8gbmFtZSA6IG5hbWUudG9Mb3dlckNhc2UoKSlcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5jbGVhcigpXG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgdGhpcy5jb29raWVzID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtYXBwZW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqL1xuICBhcHBlbmQgKG5hbWUsIHZhbHVlLCBpc0xvd2VyQ2FzZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVyXHUyMDE5cyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBpc0xvd2VyQ2FzZSA/IG5hbWUgOiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICh0aGlzLmNvb2tpZXMgPz89IFtdKS5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvd2VyQ2FzZVxuICAgKi9cbiAgc2V0IChuYW1lLCB2YWx1ZSwgaXNMb3dlckNhc2UpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gaXNMb3dlckNhc2UgPyBuYW1lIDogbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBbdmFsdWVdXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCB0aGUgdmFsdWUgb2ZcbiAgICAvLyAgICB0aGUgZmlyc3Qgc3VjaCBoZWFkZXIgdG8gdmFsdWUgYW5kIHJlbW92ZSB0aGVcbiAgICAvLyAgICBvdGhlcnMuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBhcHBlbmQgaGVhZGVyIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZGVsZXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb3dlckNhc2VcbiAgICovXG4gIGRlbGV0ZSAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBpZiAoIWlzTG93ZXJDYXNlKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvd2VyQ2FzZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG4gIGdldCAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmdldChpc0xvd2VyQ2FzZSA/IG5hbWUgOiBuYW1lLnRvTG93ZXJDYXNlKCkpPy52YWx1ZSA/PyBudWxsXG4gIH1cblxuICAqIFtTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAvLyB1c2UgdGhlIGxvd2VyY2FzZWQgbmFtZVxuICAgIGZvciAoY29uc3QgeyAwOiBuYW1lLCAxOiB7IHZhbHVlIH0gfSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplICE9PSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgcmF3VmFsdWVzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0udmFsdWVzKClcbiAgfVxuXG4gIGdldCBlbnRyaWVzTGlzdCAoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICBpZiAodGhpc1trSGVhZGVyc01hcF0uc2l6ZSAhPT0gMCkge1xuICAgICAgZm9yIChjb25zdCB7IDA6IGxvd2VyTmFtZSwgMTogeyBuYW1lLCB2YWx1ZSB9IH0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgICAgaWYgKGxvd2VyTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb29raWUgb2YgdGhpcy5jb29raWVzKSB7XG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIGNvb2tpZV0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgdmFsdWVdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb252ZXJ0LWhlYWRlci1uYW1lcy10by1hLXNvcnRlZC1sb3dlcmNhc2Utc2V0XG4gIHRvU29ydGVkQXJyYXkgKCkge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzW2tIZWFkZXJzTWFwXS5zaXplXG4gICAgY29uc3QgYXJyYXkgPSBuZXcgQXJyYXkoc2l6ZSlcbiAgICAvLyBJbiBtb3N0IGNhc2VzLCB5b3Ugd2lsbCB1c2UgdGhlIGZhc3QtcGF0aC5cbiAgICAvLyBmYXN0LXBhdGg6IFVzZSBiaW5hcnkgaW5zZXJ0aW9uIHNvcnQgZm9yIHNtYWxsIGFycmF5cy5cbiAgICBpZiAoc2l6ZSA8PSAzMikge1xuICAgICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgICAgLy8gSWYgZW1wdHksIGl0IGlzIGFuIGVtcHR5IGFycmF5LiBUbyBhdm9pZCB0aGUgZmlyc3QgaW5kZXggYXNzaWdubWVudC5cbiAgICAgICAgcmV0dXJuIGFycmF5XG4gICAgICB9XG4gICAgICAvLyBJbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHVucm9sbGluZyBsb29wIGFuZCBhdm9pZGluZyBkb3VibGUtbG9vcC5cbiAgICAgIC8vIERvdWJsZS1sb29wLWxlc3MgdmVyc2lvbiBvZiB0aGUgYmluYXJ5IGluc2VydGlvbiBzb3J0LlxuICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzW2tIZWFkZXJzTWFwXVtTeW1ib2wuaXRlcmF0b3JdKClcbiAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWVcbiAgICAgIC8vIHNldCBbbmFtZSwgdmFsdWVdIHRvIGZpcnN0IGluZGV4LlxuICAgICAgYXJyYXlbMF0gPSBbZmlyc3RWYWx1ZVswXSwgZmlyc3RWYWx1ZVsxXS52YWx1ZV1cbiAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNvcnQtYW5kLWNvbWJpbmVcbiAgICAgIC8vIDMuMi4yLiBBc3NlcnQ6IHZhbHVlIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGZpcnN0VmFsdWVbMV0udmFsdWUgIT09IG51bGwpXG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgaSA9IDEsIGogPSAwLCByaWdodCA9IDAsIGxlZnQgPSAwLCBwaXZvdCA9IDAsIHgsIHZhbHVlO1xuICAgICAgICBpIDwgc2l6ZTtcbiAgICAgICAgKytpXG4gICAgICApIHtcbiAgICAgICAgLy8gZ2V0IG5leHQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWVcbiAgICAgICAgLy8gc2V0IFtuYW1lLCB2YWx1ZV0gdG8gY3VycmVudCBpbmRleC5cbiAgICAgICAgeCA9IGFycmF5W2ldID0gW3ZhbHVlWzBdLCB2YWx1ZVsxXS52YWx1ZV1cbiAgICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICAgICAgICAvLyAzLjIuMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHhbMV0gIT09IG51bGwpXG4gICAgICAgIGxlZnQgPSAwXG4gICAgICAgIHJpZ2h0ID0gaVxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoXG4gICAgICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcbiAgICAgICAgICAvLyBtaWRkbGUgaW5kZXhcbiAgICAgICAgICBwaXZvdCA9IGxlZnQgKyAoKHJpZ2h0IC0gbGVmdCkgPj4gMSlcbiAgICAgICAgICAvLyBjb21wYXJlIGhlYWRlciBuYW1lXG4gICAgICAgICAgaWYgKGFycmF5W3Bpdm90XVswXSA8PSB4WzBdKSB7XG4gICAgICAgICAgICBsZWZ0ID0gcGl2b3QgKyAxXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJpZ2h0ID0gcGl2b3RcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBpdm90KSB7XG4gICAgICAgICAgaiA9IGlcbiAgICAgICAgICB3aGlsZSAoaiA+IGxlZnQpIHtcbiAgICAgICAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXVxuICAgICAgICAgIH1cbiAgICAgICAgICBhcnJheVtsZWZ0XSA9IHhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogYzggaWdub3JlIG5leHQgNCAqL1xuICAgICAgaWYgKCFpdGVyYXRvci5uZXh0KCkuZG9uZSkge1xuICAgICAgICAvLyBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgYW5kIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnJlYWNoYWJsZScpXG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBjYXNlIHdvdWxkIGJlIGEgcmFyZSBvY2N1cnJlbmNlLlxuICAgICAgLy8gc2xvdy1wYXRoOiBmYWxsYmFja1xuICAgICAgbGV0IGkgPSAwXG4gICAgICBmb3IgKGNvbnN0IHsgMDogbmFtZSwgMTogeyB2YWx1ZSB9IH0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgICAgYXJyYXlbaSsrXSA9IFtuYW1lLCB2YWx1ZV1cbiAgICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICAgICAgICAvLyAzLjIuMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHZhbHVlICE9PSBudWxsKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5LnNvcnQoY29tcGFyZUhlYWRlck5hbWUpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgI2d1YXJkXG4gICNoZWFkZXJzTGlzdFxuXG4gIGNvbnN0cnVjdG9yIChpbml0ID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGlmIChpbml0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLiNoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXMuI2d1YXJkID0gJ25vbmUnXG5cbiAgICAvLyAyLiBJZiBpbml0IGlzIGdpdmVuLCB0aGVuIGZpbGwgdGhpcyB3aXRoIGluaXQuXG4gICAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KGluaXQsICdIZWFkZXJzIGNvbnRydWN0b3InLCAnaW5pdCcpXG4gICAgICBmaWxsKHRoaXMsIGluaXQpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgJ0hlYWRlcnMuYXBwZW5kJylcblxuICAgIGNvbnN0IHByZWZpeCA9ICdIZWFkZXJzLmFwcGVuZCdcbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUsIHByZWZpeCwgJ3ZhbHVlJylcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmRlbGV0ZScpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5kZWxldGUnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5kZWxldGUnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgbmFtZVxuICAgIC8vICAgIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlciBuYW1lLCBhbmRcbiAgICAvLyAgICBuYW1lIGlzIG5vdCBhIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpc1xuICAgIC8vICAgIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXMuI2d1YXJkID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9XG5cbiAgICAvLyA2LiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW5cbiAgICAvLyAgICByZXR1cm4uXG4gICAgaWYgKCF0aGlzLiNoZWFkZXJzTGlzdC5jb250YWlucyhuYW1lLCBmYWxzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDcuIERlbGV0ZSBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpcy5cbiAgICB0aGlzLiNoZWFkZXJzTGlzdC5kZWxldGUobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmdldCcpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5nZXQnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzLiNoZWFkZXJzTGlzdC5nZXQobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmhhcycpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5oYXMnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBuYW1lO1xuICAgIC8vICAgIG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpcy4jaGVhZGVyc0xpc3QuY29udGFpbnMobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCAnSGVhZGVycy5zZXQnKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0hlYWRlcnMuc2V0J1xuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXMuI2d1YXJkID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9XG5cbiAgICAvLyA3LiBTZXQgKG5hbWUsIHZhbHVlKSBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzXG4gICAgdGhpcy4jaGVhZGVyc0xpc3Quc2V0KG5hbWUsIHZhbHVlLCBmYWxzZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRzZXRjb29raWVcbiAgZ2V0U2V0Q29va2llICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgU2V0LUNvb2tpZWAsIHRoZW4gcmV0dXJuIFx1MDBBQiBcdTAwQkIuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGhlYWRlcnMgaW4gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3Qgd2hvc2UgbmFtZSBpc1xuICAgIC8vICAgIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBgU2V0LUNvb2tpZWAsIGluIG9yZGVyLlxuXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuI2hlYWRlcnNMaXN0LmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdKSB7XG4gICAgICByZXR1cm4gdGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYW4gZW1wdHkgbGlzdCBvZiBoZWFkZXJzIHdpdGggdGhlIGtleSBiZWluZyB0aGUgbmFtZVxuICAgIC8vICAgIGFuZCB2YWx1ZSB0aGUgdmFsdWUuXG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICAvLyAyLiBMZXQgbmFtZXMgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0IGhlYWRlciBuYW1lcyB0byBhIHNvcnRlZC1sb3dlcmNhc2VcbiAgICAvLyAgICBzZXQgd2l0aCBhbGwgdGhlIG5hbWVzIG9mIHRoZSBoZWFkZXJzIGluIGxpc3QuXG4gICAgY29uc3QgbmFtZXMgPSB0aGlzLiNoZWFkZXJzTGlzdC50b1NvcnRlZEFycmF5KClcblxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzLiNoZWFkZXJzTGlzdC5jb29raWVzXG5cbiAgICAvLyBmYXN0LXBhdGhcbiAgICBpZiAoY29va2llcyA9PT0gbnVsbCB8fCBjb29raWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gTm90ZTogVGhlIG5vbi1udWxsIGFzc2VydGlvbiBvZiB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgYnkgYEhlYWRlcnNMaXN0I3RvU29ydGVkQXJyYXlgXG4gICAgICByZXR1cm4gKHRoaXMuI2hlYWRlcnNMaXN0W2tIZWFkZXJzU29ydGVkTWFwXSA9IG5hbWVzKVxuICAgIH1cblxuICAgIC8vIDMuIEZvciBlYWNoIG5hbWUgb2YgbmFtZXM6XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgeyAwOiBuYW1lLCAxOiB2YWx1ZSB9ID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIC8vIE5vdGU6IFRoaXMgb3BlcmF0aW9uIHdhcyBkb25lIGJ5IGBIZWFkZXJzTGlzdCN0b1NvcnRlZEFycmF5YC5cblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gaGVhZGVycy5cbiAgICByZXR1cm4gKHRoaXMuI2hlYWRlcnNMaXN0W2tIZWFkZXJzU29ydGVkTWFwXSA9IGhlYWRlcnMpXG4gIH1cblxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV0gKGRlcHRoLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucy5kZXB0aCA/Pz0gZGVwdGhcblxuICAgIHJldHVybiBgSGVhZGVycyAke3V0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgdGhpcy4jaGVhZGVyc0xpc3QuZW50cmllcyl9YFxuICB9XG5cbiAgc3RhdGljIGdldEhlYWRlcnNHdWFyZCAobykge1xuICAgIHJldHVybiBvLiNndWFyZFxuICB9XG5cbiAgc3RhdGljIHNldEhlYWRlcnNHdWFyZCAobywgZ3VhcmQpIHtcbiAgICBvLiNndWFyZCA9IGd1YXJkXG4gIH1cblxuICBzdGF0aWMgZ2V0SGVhZGVyc0xpc3QgKG8pIHtcbiAgICByZXR1cm4gby4jaGVhZGVyc0xpc3RcbiAgfVxuXG4gIHN0YXRpYyBzZXRIZWFkZXJzTGlzdCAobywgbGlzdCkge1xuICAgIG8uI2hlYWRlcnNMaXN0ID0gbGlzdFxuICB9XG59XG5cbmNvbnN0IHsgZ2V0SGVhZGVyc0d1YXJkLCBzZXRIZWFkZXJzR3VhcmQsIGdldEhlYWRlcnNMaXN0LCBzZXRIZWFkZXJzTGlzdCB9ID0gSGVhZGVyc1xuUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShIZWFkZXJzLCAnZ2V0SGVhZGVyc0d1YXJkJylcblJlZmxlY3QuZGVsZXRlUHJvcGVydHkoSGVhZGVycywgJ3NldEhlYWRlcnNHdWFyZCcpXG5SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KEhlYWRlcnMsICdnZXRIZWFkZXJzTGlzdCcpXG5SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KEhlYWRlcnMsICdzZXRIZWFkZXJzTGlzdCcpXG5cbml0ZXJhdG9yTWl4aW4oJ0hlYWRlcnMnLCBIZWFkZXJzLCBrSGVhZGVyc1NvcnRlZE1hcCwgMCwgMSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSGVhZGVycy5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldFNldENvb2tpZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0hlYWRlcnMnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV06IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdCA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gUmVmbGVjdC5nZXQoViwgU3ltYm9sLml0ZXJhdG9yKVxuXG4gICAgLy8gQSB3b3JrLWFyb3VuZCB0byBlbnN1cmUgd2Ugc2VuZCB0aGUgcHJvcGVybHktY2FzZWQgSGVhZGVycyB3aGVuIFYgaXMgYSBIZWFkZXJzIG9iamVjdC5cbiAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvMzE1OSNpc3N1ZWNvbW1lbnQtMjA3NTUzNzIyNiBiZWZvcmUgdG91Y2hpbmcsIHBsZWFzZS5cbiAgICBpZiAoIXV0aWwudHlwZXMuaXNQcm94eShWKSAmJiBpdGVyYXRvciA9PT0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllcykgeyAvLyBIZWFkZXJzIG9iamVjdFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEhlYWRlcnNMaXN0KFYpLmVudHJpZXNMaXN0XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gZmFsbC10aHJvdWdoXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nXShWLCBwcmVmaXgsIGFyZ3VtZW50LCBpdGVyYXRvci5iaW5kKFYpKVxuICAgIH1cblxuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J10oViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxuXG4gIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZpbGwsXG4gIC8vIGZvciB0ZXN0LlxuICBjb21wYXJlSGVhZGVyTmFtZSxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3QsXG4gIGdldEhlYWRlcnNHdWFyZCxcbiAgc2V0SGVhZGVyc0d1YXJkLFxuICBzZXRIZWFkZXJzTGlzdCxcbiAgZ2V0SGVhZGVyc0xpc3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBIZWFkZXJzLCBIZWFkZXJzTGlzdCwgZmlsbCwgZ2V0SGVhZGVyc0d1YXJkLCBzZXRIZWFkZXJzR3VhcmQsIHNldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBleHRyYWN0Qm9keSwgY2xvbmVCb2R5LCBtaXhpbkJvZHksIGhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5LCBzdHJlYW1SZWdpc3RyeSwgYm9keVVudXNhYmxlIH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCBub2RlVXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHtcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBpc0Vycm9yTGlrZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdDogcmVsZXZhbnRSZWFsbVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1c1xufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY2xhc3NcbmNsYXNzIFJlc3BvbnNlIHtcbiAgLy8gQ3JlYXRlcyBuZXR3b3JrIGVycm9yIFJlc3BvbnNlLlxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIC8vIFRoZSBzdGF0aWMgZXJyb3IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFcbiAgICAvLyBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IG5ldHdvcmsgZXJyb3IsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5c1xuICAgIC8vIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gZnJvbUlubmVyUmVzcG9uc2UobWFrZU5ldHdvcmtFcnJvcigpLCAnaW1tdXRhYmxlJylcblxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdSZXNwb25zZS5qc29uJylcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBmcm9tSW5uZXJSZXNwb25zZShtYWtlUmVzcG9uc2Uoe30pLCAncmVzcG9uc2UnKVxuXG4gICAgLy8gNC4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2VPYmplY3QsIGluaXQsIGFuZCAoYm9keSwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLlxuICAgIGluaXRpYWxpemVSZXNwb25zZShyZXNwb25zZU9iamVjdCwgaW5pdCwgeyBib2R5OiBib2R5WzBdLCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSlcblxuICAgIC8vIDUuIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSByZWRpcmVjdCBSZXNwb25zZSB0aGF0IHJlZGlyZWN0cyB0byB1cmwgd2l0aCBzdGF0dXMgc3RhdHVzLlxuICBzdGF0aWMgcmVkaXJlY3QgKHVybCwgc3RhdHVzID0gMzAyKSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnUmVzcG9uc2UucmVkaXJlY3QnKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBzdGF0dXMgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShzdGF0dXMpXG5cbiAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB1cmwgd2l0aCBjdXJyZW50IHNldHRpbmdzXG4gICAgLy8gb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gVE9ETzogYmFzZS1VUkw/XG4gICAgbGV0IHBhcnNlZFVSTFxuICAgIHRyeSB7XG4gICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKHVybCwgcmVsZXZhbnRSZWFsbS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICR7dXJsfWAsIHsgY2F1c2U6IGVyciB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gdGhyb3cgYSBSYW5nZUVycm9yLlxuICAgIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHN0YXR1cyBjb2RlICR7c3RhdHVzfWApXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IGZyb21Jbm5lclJlc3BvbnNlKG1ha2VSZXNwb25zZSh7fSksICdpbW11dGFibGUnKVxuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIHN0YXR1cy5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLnN0YXR1cyA9IHN0YXR1c1xuXG4gICAgLy8gNi4gTGV0IHZhbHVlIGJlIHBhcnNlZFVSTCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgIGNvbnN0IHZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShVUkxTZXJpYWxpemVyKHBhcnNlZFVSTCkpXG5cbiAgICAvLyA3LiBBcHBlbmQgYExvY2F0aW9uYC92YWx1ZSB0byByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdsb2NhdGlvbicsIHZhbHVlLCB0cnVlKVxuXG4gICAgLy8gOC4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZVxuICBjb25zdHJ1Y3RvciAoYm9keSA9IG51bGwsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgaWYgKGJvZHkgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5ICE9PSBudWxsKSB7XG4gICAgICBib2R5ID0gd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQoYm9keSlcbiAgICB9XG5cbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgcmVzcG9uc2UgdG8gYSBuZXcgcmVzcG9uc2UuXG4gICAgdGhpc1trU3RhdGVdID0gbWFrZVJlc3BvbnNlKHt9KVxuXG4gICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkXG4gICAgLy8gaXMgXCJyZXNwb25zZVwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICBzZXRIZWFkZXJzR3VhcmQodGhpc1trSGVhZGVyc10sICdyZXNwb25zZScpXG4gICAgc2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10sIHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdClcblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoYm9keVVudXNhYmxlKHRoaXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc1x1MjAxOXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIE5vdGU6IFRvIHJlLXJlZ2lzdGVyIGJlY2F1c2Ugb2YgYSBuZXcgc3RyZWFtLlxuICAgIGlmIChoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSAmJiB0aGlzW2tTdGF0ZV0uYm9keT8uc3RyZWFtKSB7XG4gICAgICBzdHJlYW1SZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCBuZXcgV2Vha1JlZih0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pKVxuICAgIH1cblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIHJldHVybiBmcm9tSW5uZXJSZXNwb25zZShjbG9uZWRSZXNwb25zZSwgZ2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdKSlcbiAgfVxuXG4gIFtub2RlVXRpbC5pbnNwZWN0LmN1c3RvbV0gKGRlcHRoLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZGVwdGggPT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGggPSAyXG4gICAgfVxuXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgYm9keTogdGhpcy5ib2R5LFxuICAgICAgYm9keVVzZWQ6IHRoaXMuYm9keVVzZWQsXG4gICAgICBvazogdGhpcy5vayxcbiAgICAgIHJlZGlyZWN0ZWQ6IHRoaXMucmVkaXJlY3RlZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9XG5cbiAgICByZXR1cm4gYFJlc3BvbnNlICR7bm9kZVV0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgcHJvcGVydGllcyl9YFxuICB9XG59XG5cbm1peGluQm9keShSZXNwb25zZSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG4gIHR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvazoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3RlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVzcG9uc2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZSwge1xuICBqc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlc3BvbnNlIChyZXNwb25zZSkge1xuICAvLyBUbyBjbG9uZSBhIHJlc3BvbnNlIHJlc3BvbnNlLCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSwgdGhlbiByZXR1cm4gYSBuZXcgaWRlbnRpY2FsXG4gIC8vIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsIHJlc3BvbnNlIGlzIGEgY2xvbmUgb2YgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLlxuICBpZiAocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHJldHVybiBmaWx0ZXJSZXNwb25zZShcbiAgICAgIGNsb25lUmVzcG9uc2UocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSksXG4gICAgICByZXNwb25zZS50eXBlXG4gICAgKVxuICB9XG5cbiAgLy8gMi4gTGV0IG5ld1Jlc3BvbnNlIGJlIGEgY29weSBvZiByZXNwb25zZSwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyAuLi5yZXNwb25zZSwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBuZXdSZXNwb25zZVx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXNwb25zZS5ib2R5ID0gY2xvbmVCb2R5KG5ld1Jlc3BvbnNlLCByZXNwb25zZS5ib2R5KVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5ld1Jlc3BvbnNlLlxuICByZXR1cm4gbmV3UmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gbWFrZVJlc3BvbnNlIChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgcmFuZ2VSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93UGFzc2VkOiBmYWxzZSxcbiAgICByZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFsczogZmFsc2UsXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIHN0YXR1czogMjAwLFxuICAgIHRpbWluZ0luZm86IG51bGwsXG4gICAgY2FjaGVTdGF0ZTogJycsXG4gICAgc3RhdHVzVGV4dDogJycsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdD8uaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQ/LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKSxcbiAgICB1cmxMaXN0OiBpbml0Py51cmxMaXN0ID8gWy4uLmluaXQudXJsTGlzdF0gOiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXR3b3JrRXJyb3IgKHJlYXNvbikge1xuICBjb25zdCBpc0Vycm9yID0gaXNFcnJvckxpa2UocmVhc29uKVxuICByZXR1cm4gbWFrZVJlc3BvbnNlKHtcbiAgICB0eXBlOiAnZXJyb3InLFxuICAgIHN0YXR1czogMCxcbiAgICBlcnJvcjogaXNFcnJvclxuICAgICAgPyByZWFzb25cbiAgICAgIDogbmV3IEVycm9yKHJlYXNvbiA/IFN0cmluZyhyZWFzb24pIDogcmVhc29uKSxcbiAgICBhYm9ydGVkOiByZWFzb24gJiYgcmVhc29uLm5hbWUgPT09ICdBYm9ydEVycm9yJ1xuICB9KVxufVxuXG4vLyBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIGlzTmV0d29ya0Vycm9yIChyZXNwb25zZSkge1xuICByZXR1cm4gKFxuICAgIC8vIEEgbmV0d29yayBlcnJvciBpcyBhIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJlcnJvclwiLFxuICAgIHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiZcbiAgICAvLyBzdGF0dXMgaXMgMFxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMFxuICApXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWx0ZXJlZFJlc3BvbnNlIChyZXNwb25zZSwgc3RhdGUpIHtcbiAgc3RhdGUgPSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgLi4uc3RhdGVcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICBnZXQgKHRhcmdldCwgcCkge1xuICAgICAgcmV0dXJuIHAgaW4gc3RhdGUgPyBzdGF0ZVtwXSA6IHRhcmdldFtwXVxuICAgIH0sXG4gICAgc2V0ICh0YXJnZXQsIHAsIHZhbHVlKSB7XG4gICAgICBhc3NlcnQoIShwIGluIHN0YXRlKSlcbiAgICAgIHRhcmdldFtwXSA9IHZhbHVlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZmlsdGVyZWQtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbHRlclJlc3BvbnNlIChyZXNwb25zZSwgdHlwZSkge1xuICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICBpZiAodHlwZSA9PT0gJ2Jhc2ljJykge1xuICAgIC8vIEEgYmFzaWMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiYmFzaWNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3RcbiAgICAvLyB3aG9zZSBuYW1lIGlzIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnYmFzaWMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY29ycycpIHtcbiAgICAvLyBBIENPUlMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiY29yc1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJcbiAgICAvLyBsaXN0IHdob3NlIG5hbWUgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lLCBnaXZlblxuICAgIC8vIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdC5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2NvcnMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlJykge1xuICAgIC8vIEFuIG9wYXF1ZSBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXNcbiAgICAvLyBcIm9wYXF1ZVwiLCBVUkwgbGlzdCBpcyB0aGUgZW1wdHkgbGlzdCwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlXG4gICAgLy8gaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlJyxcbiAgICAgIHVybExpc3Q6IE9iamVjdC5mcmVlemUoW10pLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlcmVkaXJlY3QnKSB7XG4gICAgLy8gQW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZVxuICAgIC8vIGlzIFwib3BhcXVlcmVkaXJlY3RcIiwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlIGlzIHRoZSBlbXB0eSBieXRlXG4gICAgLy8gc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlcmVkaXJlY3QnLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBoZWFkZXJzTGlzdDogW10sXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcHJvcHJpYXRlLW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvciAoZmV0Y2hQYXJhbXMsIGVyciA9IG51bGwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZC5cbiAgYXNzZXJ0KGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSlcblxuICAvLyAyLiBSZXR1cm4gYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yIGlmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQ7XG4gIC8vIG90aGVyd2lzZSByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICByZXR1cm4gaXNBYm9ydGVkKGZldGNoUGFyYW1zKVxuICAgID8gbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSwgeyBjYXVzZTogZXJyIH0pKVxuICAgIDogbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1JlcXVlc3Qgd2FzIGNhbmNlbGxlZC4nKSwgeyBjYXVzZTogZXJyIH0pKVxufVxuXG4vLyBodHRwczovL3doYXRwci5vcmcvZmV0Y2gvMTM5Mi5odG1sI2luaXRpYWxpemUtYS1yZXNwb25zZVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlc3BvbnNlIChyZXNwb25zZSwgaW5pdCwgYm9keSkge1xuICAvLyAxLiBJZiBpbml0W1wic3RhdHVzXCJdIGlzIG5vdCBpbiB0aGUgcmFuZ2UgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLCB0aGVuXG4gIC8vICAgIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgaWYgKGluaXQuc3RhdHVzICE9PSBudWxsICYmIChpbml0LnN0YXR1cyA8IDIwMCB8fCBpbml0LnN0YXR1cyA+IDU5OSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5pdFtcInN0YXR1c1wiXSBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiAyMDAgdG8gNTk5LCBpbmNsdXNpdmUuJylcbiAgfVxuXG4gIC8vIDIuIElmIGluaXRbXCJzdGF0dXNUZXh0XCJdIGRvZXMgbm90IG1hdGNoIHRoZSByZWFzb24tcGhyYXNlIHRva2VuIHByb2R1Y3Rpb24sXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIC8vIFNlZSwgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4xLjI6XG4gICAgLy8gICByZWFzb24tcGhyYXNlICA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICAgIGlmICghaXNWYWxpZFJlYXNvblBocmFzZShTdHJpbmcoaW5pdC5zdGF0dXNUZXh0KSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RhdHVzVGV4dCcpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIGluaXRbXCJzdGF0dXNcIl0uXG4gIGlmICgnc3RhdHVzJyBpbiBpbml0ICYmIGluaXQuc3RhdHVzICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1cyA9IGluaXQuc3RhdHVzXG4gIH1cblxuICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZSB0byBpbml0W1wic3RhdHVzVGV4dFwiXS5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXNUZXh0ID0gaW5pdC5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyA1LiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gZmlsbCByZXNwb25zZVx1MjAxOXMgaGVhZGVycyB3aXRoIGluaXRbXCJoZWFkZXJzXCJdLlxuICBpZiAoJ2hlYWRlcnMnIGluIGluaXQgJiYgaW5pdC5oZWFkZXJzICE9IG51bGwpIHtcbiAgICBmaWxsKHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5pdC5oZWFkZXJzKVxuICB9XG5cbiAgLy8gNi4gSWYgYm9keSB3YXMgZ2l2ZW4sIHRoZW46XG4gIGlmIChib2R5KSB7XG4gICAgLy8gMS4gSWYgcmVzcG9uc2UncyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9YFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UncyBib2R5IHRvIGJvZHkncyBib2R5LlxuICAgIHJlc3BvbnNlW2tTdGF0ZV0uYm9keSA9IGJvZHkuYm9keVxuXG4gICAgLy8gMy4gSWYgYm9keSdzIHR5cGUgaXMgbm9uLW51bGwgYW5kIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpblxuICAgIC8vICAgIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtVHlwZWAsIGJvZHkncyB0eXBlKSB0byByZXNwb25zZSdzIGhlYWRlciBsaXN0LlxuICAgIGlmIChib2R5LnR5cGUgIT0gbnVsbCAmJiAhcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5jb250YWlucygnY29udGVudC10eXBlJywgdHJ1ZSkpIHtcbiAgICAgIHJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LXR5cGUnLCBib2R5LnR5cGUsIHRydWUpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY3JlYXRlXG4gKiBAcGFyYW0ge2FueX0gaW5uZXJSZXNwb25zZVxuICogQHBhcmFtIHsncmVxdWVzdCcgfCAnaW1tdXRhYmxlJyB8ICdyZXF1ZXN0LW5vLWNvcnMnIHwgJ3Jlc3BvbnNlJyB8ICdub25lJ30gZ3VhcmRcbiAqIEByZXR1cm5zIHtSZXNwb25zZX1cbiAqL1xuZnVuY3Rpb24gZnJvbUlubmVyUmVzcG9uc2UgKGlubmVyUmVzcG9uc2UsIGd1YXJkKSB7XG4gIGNvbnN0IHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGtDb25zdHJ1Y3QpXG4gIHJlc3BvbnNlW2tTdGF0ZV0gPSBpbm5lclJlc3BvbnNlXG4gIHJlc3BvbnNlW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gIHNldEhlYWRlcnNMaXN0KHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdClcbiAgc2V0SGVhZGVyc0d1YXJkKHJlc3BvbnNlW2tIZWFkZXJzXSwgZ3VhcmQpXG5cbiAgaWYgKGhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmIGlubmVyUmVzcG9uc2UuYm9keT8uc3RyZWFtKSB7XG4gICAgLy8gSWYgdGhlIHRhcmdldCAocmVzcG9uc2UpIGlzIHJlY2xhaW1lZCwgdGhlIGNsZWFudXAgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IHdpdGhcbiAgICAvLyB0aGUgaGVsZCB2YWx1ZSBwcm92aWRlZCBmb3IgaXQgKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pLiBUaGUgaGVsZCB2YWx1ZSBjYW4gYmUgYW55IHZhbHVlOlxuICAgIC8vIGEgcHJpbWl0aXZlIG9yIGFuIG9iamVjdCwgZXZlbiB1bmRlZmluZWQuIElmIHRoZSBoZWxkIHZhbHVlIGlzIGFuIG9iamVjdCwgdGhlIHJlZ2lzdHJ5IGtlZXBzXG4gICAgLy8gYSBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0IChzbyBpdCBjYW4gcGFzcyBpdCB0byB0aGUgY2xlYW51cCBjYWxsYmFjayBsYXRlcikuIFJld29yZGVkIGZyb21cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GaW5hbGl6YXRpb25SZWdpc3RyeVxuICAgIHN0cmVhbVJlZ2lzdHJ5LnJlZ2lzdGVyKHJlc3BvbnNlLCBuZXcgV2Vha1JlZihpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSlcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlYWRhYmxlU3RyZWFtXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgRm9ybURhdGFcbilcblxud2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgVVJMU2VhcmNoUGFyYW1zXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyN0eXBlZGVmZGVmLXhtbGh0dHByZXF1ZXN0Ym9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIHByZWZpeCwgbmFtZSlcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgcHJlZml4LCBuYW1lLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoViwgcHJlZml4LCBuYW1lKVxuICB9XG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEoViwgcHJlZml4LCBuYW1lLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyhWLCBwcmVmaXgsIG5hbWUpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgbmFtZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdCA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmIChWIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0oViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaW5jbHVkZSBhc3luYyBpdGVyYWJsZXMsXG4gIC8vIHRoaXMgaXMgYW4gdW5kaWNpIGV4dGVuc2lvbi5cbiAgaWYgKFY/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gVlxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQoViwgcHJlZml4LCBhcmd1bWVudClcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMjAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzdGF0dXNUZXh0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNOZXR3b3JrRXJyb3IsXG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2UsXG4gIGZyb21Jbm5lclJlc3BvbnNlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyIChrZXkpIHt9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgYmFja3BvcnRlZCB0byB2MThcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSAmJiBwcm9jZXNzLnZlcnNpb24uc3RhcnRzV2l0aCgndjE4JykpIHtcbiAgICBwcm9jZXNzLl9yYXdEZWJ1ZygnVXNpbmcgY29tcGF0aWJpbGl0eSBXZWFrUmVmIGFuZCBGaW5hbGl6YXRpb25SZWdpc3RyeScpXG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH1cbn1cbiIsICIvKiBnbG9iYWxzIEFib3J0Q29udHJvbGxlciAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBleHRyYWN0Qm9keSwgbWl4aW5Cb2R5LCBjbG9uZUJvZHksIGJvZHlVbnVzYWJsZSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHsgSGVhZGVycywgZmlsbDogZmlsbEhlYWRlcnMsIEhlYWRlcnNMaXN0LCBzZXRIZWFkZXJzR3VhcmQsIGdldEhlYWRlcnNHdWFyZCwgc2V0SGVhZGVyc0xpc3QsIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBGaW5hbGl6YXRpb25SZWdpc3RyeSB9ID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IG5vZGVVdGlsID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHtcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgc2FtZU9yaWdpbixcbiAgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZXF1ZXN0RHVwbGV4XG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UsIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzIH0gPSB1dGlsXG5jb25zdCB7IGtIZWFkZXJzLCBrU2lnbmFsLCBrU3RhdGUsIGtEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGdldE1heExpc3RlbmVycywgc2V0TWF4TGlzdGVuZXJzLCBnZXRFdmVudExpc3RlbmVycywgZGVmYXVsdE1heExpc3RlbmVycyB9ID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKVxuXG5jb25zdCBrQWJvcnRDb250cm9sbGVyID0gU3ltYm9sKCdhYm9ydENvbnRyb2xsZXInKVxuXG5jb25zdCByZXF1ZXN0RmluYWxpemVyID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KCh7IHNpZ25hbCwgYWJvcnQgfSkgPT4ge1xuICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydClcbn0pXG5cbmNvbnN0IGRlcGVuZGVudENvbnRyb2xsZXJNYXAgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGJ1aWxkQWJvcnQgKGFjUmVmKSB7XG4gIHJldHVybiBhYm9ydFxuXG4gIGZ1bmN0aW9uIGFib3J0ICgpIHtcbiAgICBjb25zdCBhYyA9IGFjUmVmLmRlcmVmKClcbiAgICBpZiAoYWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3VycmVudGx5LCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBGaW5hbGl6YXRpb25SZWdpc3RyeS5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDc3NDhcbiAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGFib3J0LCB0aGUgZmlyc3Qgc3RlcCBpcyB0byB1bnJlZ2lzdGVyIGZyb20gaXQuXG4gICAgICAvLyBJZiB0aGUgY29udHJvbGxlciBjYW4gcmVmZXIgdG8gaXQsIGl0IGlzIHN0aWxsIHJlZ2lzdGVyZWQuXG4gICAgICAvLyBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIHJlcXVlc3RGaW5hbGl6ZXIudW5yZWdpc3RlcihhYm9ydClcblxuICAgICAgLy8gVW5zdWJzY3JpYmUgYSBsaXN0ZW5lci5cbiAgICAgIC8vIEZpbmFsaXphdGlvblJlZ2lzdHJ5IHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZCwgc28gdGhpcyBtdXN0IGJlIGRvbmUuXG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG5cbiAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuXG4gICAgICBjb25zdCBjb250cm9sbGVyTGlzdCA9IGRlcGVuZGVudENvbnRyb2xsZXJNYXAuZ2V0KGFjLnNpZ25hbClcblxuICAgICAgaWYgKGNvbnRyb2xsZXJMaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXJMaXN0LnNpemUgIT09IDApIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBjb250cm9sbGVyTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHJlZi5kZXJlZigpXG4gICAgICAgICAgICBpZiAoY3RybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN0cmwuYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xsZXJMaXN0LmNsZWFyKClcbiAgICAgICAgfVxuICAgICAgICBkZXBlbmRlbnRDb250cm9sbGVyTWFwLmRlbGV0ZShhYy5zaWduYWwpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmxldCBwYXRjaE1ldGhvZFdhcm5pbmcgPSBmYWxzZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgaWYgKGlucHV0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSAnUmVxdWVzdCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGlucHV0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8oaW5wdXQsIHByZWZpeCwgJ2lucHV0JylcbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQoaW5pdCwgcHJlZml4LCAnaW5pdCcpXG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5iYXNlVXJsXG5cbiAgICAvLyA0LiBMZXQgc2lnbmFsIGJlIG51bGwuXG4gICAgbGV0IHNpZ25hbCA9IG51bGxcblxuICAgIC8vIDUuIElmIGlucHV0IGlzIGEgc3RyaW5nLCB0aGVuOlxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzW2tEaXNwYXRjaGVyXSA9IGluaXQuZGlzcGF0Y2hlclxuXG4gICAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBpbnB1dCB3aXRoIGJhc2VVUkwuXG4gICAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGxldCBwYXJzZWRVUkxcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwoaW5wdXQsIGJhc2VVcmwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyBpbnB1dCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHBhcnNlZFVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGZyb20gYSBVUkwgdGhhdCBpbmNsdWRlcyBjcmVkZW50aWFsczogJyArXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2hvc2UgVVJMIGlzIHBhcnNlZFVSTC5cbiAgICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IHVybExpc3Q6IFtwYXJzZWRVUkxdIH0pXG5cbiAgICAgIC8vIDUuIFNldCBmYWxsYmFja01vZGUgdG8gXCJjb3JzXCIuXG4gICAgICBmYWxsYmFja01vZGUgPSAnY29ycydcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRGlzcGF0Y2hlcl0gPSBpbml0LmRpc3BhdGNoZXIgfHwgaW5wdXRba0Rpc3BhdGNoZXJdXG5cbiAgICAgIC8vIDYuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNy4gQXNzZXJ0OiBpbnB1dCBpcyBhIFJlcXVlc3Qgb2JqZWN0LlxuICAgICAgYXNzZXJ0KGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdClcblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3QgdG8gaW5wdXRcdTIwMTlzIHJlcXVlc3QuXG4gICAgICByZXF1ZXN0ID0gaW5wdXRba1N0YXRlXVxuXG4gICAgICAvLyA5LiBTZXQgc2lnbmFsIHRvIGlucHV0XHUyMDE5cyBzaWduYWwuXG4gICAgICBzaWduYWwgPSBpbnB1dFtrU2lnbmFsXVxuICAgIH1cblxuICAgIC8vIDcuIExldCBvcmlnaW4gYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBvcmlnaW4uXG4gICAgY29uc3Qgb3JpZ2luID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdFx1MjAxOXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0LFxuICAgICAgLy8gd2luZG93IHdpbmRvdy5cbiAgICAgIHdpbmRvdyxcbiAgICAgIC8vIHByaW9yaXR5IHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5LlxuICAgICAgcHJpb3JpdHk6IHJlcXVlc3QucHJpb3JpdHksXG4gICAgICAvLyBvcmlnaW4gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLiBUaGUgcHJvcGFnYXRpb24gb2YgdGhlIG9yaWdpbiBpcyBvbmx5IHNpZ25pZmljYW50IGZvciBuYXZpZ2F0aW9uIHJlcXVlc3RzXG4gICAgICAvLyBiZWluZyBoYW5kbGVkIGJ5IGEgc2VydmljZSB3b3JrZXIuIEluIHRoaXMgc2NlbmFyaW8gYSByZXF1ZXN0IGNhbiBoYXZlIGFuIG9yaWdpbiB0aGF0IGlzIGRpZmZlcmVudFxuICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCBjbGllbnQuXG4gICAgICBvcmlnaW46IHJlcXVlc3Qub3JpZ2luLFxuICAgICAgLy8gcmVmZXJyZXIgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgICByZWZlcnJlcjogcmVxdWVzdC5yZWZlcnJlcixcbiAgICAgIC8vIHJlZmVycmVyIHBvbGljeSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgICByZWZlcnJlclBvbGljeTogcmVxdWVzdC5yZWZlcnJlclBvbGljeSxcbiAgICAgIC8vIG1vZGUgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICAgIG1vZGU6IHJlcXVlc3QubW9kZSxcbiAgICAgIC8vIGNyZWRlbnRpYWxzIG1vZGUgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0LmNyZWRlbnRpYWxzLFxuICAgICAgLy8gY2FjaGUgbW9kZSByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgICAgY2FjaGU6IHJlcXVlc3QuY2FjaGUsXG4gICAgICAvLyByZWRpcmVjdCBtb2RlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgICByZWRpcmVjdDogcmVxdWVzdC5yZWRpcmVjdCxcbiAgICAgIC8vIGludGVncml0eSBtZXRhZGF0YSByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEuXG4gICAgICBpbnRlZ3JpdHk6IHJlcXVlc3QuaW50ZWdyaXR5LFxuICAgICAgLy8ga2VlcGFsaXZlIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGtlZXBhbGl2ZTogcmVxdWVzdC5rZWVwYWxpdmUsXG4gICAgICAvLyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZWxvYWROYXZpZ2F0aW9uOiByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24sXG4gICAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIGhpc3RvcnlOYXZpZ2F0aW9uOiByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uLFxuICAgICAgLy8gVVJMIGxpc3QgQSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgICAgIHVybExpc3Q6IFsuLi5yZXF1ZXN0LnVybExpc3RdXG4gICAgfSlcblxuICAgIGNvbnN0IGluaXRIYXNLZXkgPSBPYmplY3Qua2V5cyhpbml0KS5sZW5ndGggIT09IDBcblxuICAgIC8vIDEzLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gc2V0IGl0IHRvIFwic2FtZS1vcmlnaW5cIi5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgICAgcmVxdWVzdC5tb2RlID0gJ3NhbWUtb3JpZ2luJ1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBVbnNldCByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gMy4gVW5zZXQgcmVxdWVzdFx1MjAxOXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byBcImNsaWVudFwiLlxuICAgICAgcmVxdWVzdC5vcmlnaW4gPSAnY2xpZW50J1xuXG4gICAgICAvLyA1LiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIlxuICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDYuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSAnJ1xuXG4gICAgICAvLyA3LiBTZXQgcmVxdWVzdFx1MjAxOXMgVVJMIHRvIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbcmVxdWVzdC51cmxMaXN0Lmxlbmd0aCAtIDFdXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgcmVxdWVzdFx1MjAxOXMgVVJMIFx1MDBCQi5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Quc2V0dGluZ3NPYmplY3QuYmFzZVVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnY2xpZW50J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIDQuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIHBhcnNlZFJlZmVycmVyLlxuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSBwYXJzZWRSZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTUuIElmIGluaXRbXCJyZWZlcnJlclBvbGljeVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZmVycmVyUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSBpbml0LnJlZmVycmVyUG9saWN5XG4gICAgfVxuXG4gICAgLy8gMTYuIExldCBtb2RlIGJlIGluaXRbXCJtb2RlXCJdIGlmIGl0IGV4aXN0cywgYW5kIGZhbGxiYWNrTW9kZSBvdGhlcndpc2UuXG4gICAgbGV0IG1vZGVcbiAgICBpZiAoaW5pdC5tb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1vZGUgPSBpbml0Lm1vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kZSA9IGZhbGxiYWNrTW9kZVxuICAgIH1cblxuICAgIC8vIDE3LiBJZiBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgcmVxdWVzdCBtb2RlIG5hdmlnYXRlLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMTguIElmIG1vZGUgaXMgbm9uLW51bGwsIHNldCByZXF1ZXN0XHUyMDE5cyBtb2RlIHRvIG1vZGUuXG4gICAgaWYgKG1vZGUgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5tb2RlID0gbW9kZVxuICAgIH1cblxuICAgIC8vIDE5LiBJZiBpbml0W1wiY3JlZGVudGlhbHNcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlXG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQuY3JlZGVudGlhbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jcmVkZW50aWFscyA9IGluaXQuY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgaW5pdFtcImNhY2hlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5jYWNoZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNhY2hlID0gaW5pdC5jYWNoZVxuICAgIH1cblxuICAgIC8vIDIxLiBJZiByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiBhbmQgcmVxdWVzdFx1MjAxOXMgbW9kZSBpc1xuICAgIC8vIG5vdCBcInNhbWUtb3JpZ2luXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHJlcXVlc3QuY2FjaGUgPT09ICdvbmx5LWlmLWNhY2hlZCcgJiYgcmVxdWVzdC5tb2RlICE9PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIidvbmx5LWlmLWNhY2hlZCcgY2FuIGJlIHNldCBvbmx5IHdpdGggJ3NhbWUtb3JpZ2luJyBtb2RlXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAyMi4gSWYgaW5pdFtcInJlZGlyZWN0XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWRpcmVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZGlyZWN0ID0gaW5pdC5yZWRpcmVjdFxuICAgIH1cblxuICAgIC8vIDIzLiBJZiBpbml0W1wiaW50ZWdyaXR5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIHRvIGl0LlxuICAgIGlmIChpbml0LmludGVncml0eSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0LmludGVncml0eSA9IFN0cmluZyhpbml0LmludGVncml0eSlcbiAgICB9XG5cbiAgICAvLyAyNC4gSWYgaW5pdFtcImtlZXBhbGl2ZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZSB0byBpdC5cbiAgICBpZiAoaW5pdC5rZWVwYWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5rZWVwYWxpdmUgPSBCb29sZWFuKGluaXQua2VlcGFsaXZlKVxuICAgIH1cblxuICAgIC8vIDI1LiBJZiBpbml0W1wibWV0aG9kXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IG1ldGhvZCBiZSBpbml0W1wibWV0aG9kXCJdLlxuICAgICAgbGV0IG1ldGhvZCA9IGluaXQubWV0aG9kXG5cbiAgICAgIGNvbnN0IG1heUJlTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzW21ldGhvZF1cblxuICAgICAgaWYgKG1heUJlTm9ybWFsaXplZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIE5vdGU6IEJ5cGFzcyB2YWxpZGF0aW9uIERFTEVURSwgR0VULCBIRUFELCBPUFRJT05TLCBQT1NULCBQVVQsIFBBVENIIGFuZCB0aGVzZSBsb3dlcmNhc2Ugb25lc1xuICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9IG1heUJlTm9ybWFsaXplZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAgIC8vIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBpZiAoIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cHBlckNhc2UgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuXG4gICAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0Lmhhcyh1cHBlckNhc2UpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIE5vcm1hbGl6ZSBtZXRob2QuXG4gICAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAgICAgICAgLy8gTm90ZTogbXVzdCBiZSBpbiB1cHBlcmNhc2VcbiAgICAgICAgbWV0aG9kID0gbm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlW3VwcGVyQ2FzZV0gPz8gbWV0aG9kXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG1ldGhvZCB0byBtZXRob2QuXG4gICAgICAgIHJlcXVlc3QubWV0aG9kID0gbWV0aG9kXG4gICAgICB9XG5cbiAgICAgIGlmICghcGF0Y2hNZXRob2RXYXJuaW5nICYmIHJlcXVlc3QubWV0aG9kID09PSAncGF0Y2gnKSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1VzaW5nIGBwYXRjaGAgaXMgaGlnaGx5IGxpa2VseSB0byByZXN1bHQgaW4gYSBgNDA1IE1ldGhvZCBOb3QgQWxsb3dlZGAuIGBQQVRDSGAgaXMgbXVjaCBtb3JlIGxpa2VseSB0byBzdWNjZWVkLicsIHtcbiAgICAgICAgICBjb2RlOiAnVU5ESUNJLUZFVENILXBhdGNoJ1xuICAgICAgICB9KVxuXG4gICAgICAgIHBhdGNoTWV0aG9kV2FybmluZyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXNcdTIwMTlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc1x1MjAxOXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBidWlsZEFib3J0KGFjUmVmKVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTUwMCwgc2lnbmFsKVxuICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0RXZlbnRMaXN0ZW5lcnMoc2lnbmFsLCAnYWJvcnQnKS5sZW5ndGggPj0gZGVmYXVsdE1heExpc3RlbmVycykge1xuICAgICAgICAgICAgc2V0TWF4TGlzdGVuZXJzKDE1MDAsIHNpZ25hbClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBhYm9ydClcbiAgICAgICAgLy8gVGhlIHRoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSByZWdpc3RyeSBrZXkgdG8gYmUgdW5yZWdpc3RlcmVkLlxuICAgICAgICAvLyBXaXRob3V0IGl0LCB5b3UgY2Fubm90IHVucmVnaXN0ZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ZpbmFsaXphdGlvblJlZ2lzdHJ5XG4gICAgICAgIC8vIGFib3J0IGlzIHVzZWQgYXMgdGhlIHVucmVnaXN0ZXIga2V5LiAoYmVjYXVzZSBpdCBpcyB1bmlxdWUpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9LCBhYm9ydClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMC4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmQgaXNcbiAgICAvLyBcInJlcXVlc3RcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgc2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10sIHJlcXVlc3QuaGVhZGVyc0xpc3QpXG4gICAgc2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdLCAncmVxdWVzdCcpXG5cbiAgICAvLyAzMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgc2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdLCAncmVxdWVzdC1uby1jb3JzJylcbiAgICB9XG5cbiAgICAvLyAzMi4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGVhZGVyc0xpc3R9ICovXG4gICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IGdldEhlYWRlcnNMaXN0KHRoaXNba0hlYWRlcnNdKVxuICAgICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYSBjb3B5IG9mIHRoaXNcdTIwMTlzIGhlYWRlcnMgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlclxuICAgICAgLy8gbGlzdC5cbiAgICAgIC8vIDIuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBzZXQgaGVhZGVycyB0byBpbml0W1wiaGVhZGVyc1wiXS5cbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBpbml0LmhlYWRlcnMgIT09IHVuZGVmaW5lZCA/IGluaXQuaGVhZGVycyA6IG5ldyBIZWFkZXJzTGlzdChoZWFkZXJzTGlzdClcblxuICAgICAgLy8gMy4gRW1wdHkgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICBoZWFkZXJzTGlzdC5jbGVhcigpXG5cbiAgICAgIC8vIDQuIElmIGhlYWRlcnMgaXMgYSBIZWFkZXJzIG9iamVjdCwgdGhlbiBmb3IgZWFjaCBoZWFkZXIgaW4gaXRzIGhlYWRlclxuICAgICAgLy8gbGlzdCwgYXBwZW5kIGhlYWRlclx1MjAxOXMgbmFtZS9oZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGhlYWRlcnMucmF3VmFsdWVzKCkpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQobmFtZSwgdmFsdWUsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IENvcHkgdGhlIGBzZXQtY29va2llYCBtZXRhLWRhdGEuXG4gICAgICAgIGhlYWRlcnNMaXN0LmNvb2tpZXMgPSBoZWFkZXJzLmNvb2tpZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDUuIE90aGVyd2lzZSwgZmlsbCB0aGlzXHUyMDE5cyBoZWFkZXJzIHdpdGggaGVhZGVycy5cbiAgICAgICAgZmlsbEhlYWRlcnModGhpc1trSGVhZGVyc10sIGhlYWRlcnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzMuIExldCBpbnB1dEJvZHkgYmUgaW5wdXRcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgaWYgaW5wdXQgaXMgYSBSZXF1ZXN0XG4gICAgLy8gb2JqZWN0OyBvdGhlcndpc2UgbnVsbC5cbiAgICBjb25zdCBpbnB1dEJvZHkgPSBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpbnB1dFtrU3RhdGVdLmJvZHkgOiBudWxsXG5cbiAgICAvLyAzNC4gSWYgZWl0aGVyIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwgb3IgaW5wdXRCb2R5IGlzXG4gICAgLy8gbm9uLW51bGwsIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYEdFVGAgb3IgYEhFQURgLCB0aGVuIHRocm93IGFcbiAgICAvLyBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgKGluaXQuYm9keSAhPSBudWxsIHx8IGlucHV0Qm9keSAhPSBudWxsKSAmJlxuICAgICAgKHJlcXVlc3QubWV0aG9kID09PSAnR0VUJyB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5LicpXG4gICAgfVxuXG4gICAgLy8gMzUuIExldCBpbml0Qm9keSBiZSBudWxsLlxuICAgIGxldCBpbml0Qm9keSA9IG51bGxcblxuICAgIC8vIDM2LiBJZiBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0LmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMS4gTGV0IENvbnRlbnQtVHlwZSBiZSBudWxsLlxuICAgICAgLy8gMi4gU2V0IGluaXRCb2R5IGFuZCBDb250ZW50LVR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nXG4gICAgICAvLyBpbml0W1wiYm9keVwiXSwgd2l0aCBrZWVwYWxpdmUgc2V0IHRvIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShcbiAgICAgICAgaW5pdC5ib2R5LFxuICAgICAgICByZXF1ZXN0LmtlZXBhbGl2ZVxuICAgICAgKVxuICAgICAgaW5pdEJvZHkgPSBleHRyYWN0ZWRCb2R5XG5cbiAgICAgIC8vIDMsIElmIENvbnRlbnQtVHlwZSBpcyBub24tbnVsbCBhbmQgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lc1xuICAgICAgLy8gbm90IGNvbnRhaW4gYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIGBDb250ZW50LVR5cGVgL0NvbnRlbnQtVHlwZSB0b1xuICAgICAgLy8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChjb250ZW50VHlwZSAmJiAhZ2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10pLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnLCB0cnVlKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHlcdTIwMTlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChib2R5VW51c2FibGUoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIC8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWNyZWF0ZS1hLXByb3h5XG4gICAgICBjb25zdCBpZGVudGl0eVRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oKVxuICAgICAgaW5wdXRCb2R5LnN0cmVhbS5waXBlVGhyb3VnaChpZGVudGl0eVRyYW5zZm9ybSlcbiAgICAgIGZpbmFsQm9keSA9IHtcbiAgICAgICAgc291cmNlOiBpbnB1dEJvZHkuc291cmNlLFxuICAgICAgICBsZW5ndGg6IGlucHV0Qm9keS5sZW5ndGgsXG4gICAgICAgIHN0cmVhbTogaWRlbnRpdHlUcmFuc2Zvcm0ucmVhZGFibGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0MS4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gZmluYWxCb2R5LlxuICAgIHRoaXNba1N0YXRlXS5ib2R5ID0gZmluYWxCb2R5XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIEhUVFAgbWV0aG9kLCB3aGljaCBpcyBcIkdFVFwiIGJ5IGRlZmF1bHQuXG4gIGdldCBtZXRob2QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbWV0aG9kIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1ldGhvZFxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgVVJMIG9mIHJlcXVlc3QgYXMgYSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tTdGF0ZV0udXJsKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIEhlYWRlcnMgb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGhlYWRlcnMgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIE5vdGUgdGhhdCBoZWFkZXJzIGFkZGVkIGluIHRoZSBuZXR3b3JrIGxheWVyIGJ5IHRoZSB1c2VyIGFnZW50IHdpbGwgbm90XG4gIC8vIGJlIGFjY291bnRlZCBmb3IgaW4gdGhpcyBvYmplY3QsIGUuZy4sIHRoZSBcIkhvc3RcIiBoZWFkZXIuXG4gIGdldCBoZWFkZXJzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGtpbmQgb2YgcmVzb3VyY2UgcmVxdWVzdGVkIGJ5IHJlcXVlc3QsIGUuZy4sIFwiZG9jdW1lbnRcIlxuICAvLyBvciBcInNjcmlwdFwiLlxuICBnZXQgZGVzdGluYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgZGVzdGluYXRpb24gZ2V0dGVyIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24uXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5kZXN0aW5hdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgb2YgcmVxdWVzdC4gSXRzIHZhbHVlIGNhbiBiZSBhIHNhbWUtb3JpZ2luIFVSTCBpZlxuICAvLyBleHBsaWNpdGx5IHNldCBpbiBpbml0LCB0aGUgZW1wdHkgc3RyaW5nIHRvIGluZGljYXRlIG5vIHJlZmVycmVyLCBhbmRcbiAgLy8gXCJhYm91dDpjbGllbnRcIiB3aGVuIGRlZmF1bHRpbmcgdG8gdGhlIGdsb2JhbFx1MjAxOXMgZGVmYXVsdC4gVGhpcyBpcyB1c2VkXG4gIC8vIGR1cmluZyBmZXRjaGluZyB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoZSBgUmVmZXJlcmAgaGVhZGVyIG9mIHRoZVxuICAvLyByZXF1ZXN0IGJlaW5nIG1hZGUuXG4gIGdldCByZWZlcnJlciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwibm8tcmVmZXJyZXJcIiwgdGhlbiByZXR1cm4gdGhlXG4gICAgLy8gZW1wdHkgc3RyaW5nLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICduby1yZWZlcnJlcicpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwiY2xpZW50XCIsIHRoZW4gcmV0dXJuXG4gICAgLy8gXCJhYm91dDpjbGllbnRcIi5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnY2xpZW50Jykge1xuICAgICAgcmV0dXJuICdhYm91dDpjbGllbnQnXG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXIudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBUaGlzIGlzIHVzZWQgZHVyaW5nIGZldGNoaW5nIHRvIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlci5cbiAgZ2V0IHJlZmVycmVyUG9saWN5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZmVycmVyUG9saWN5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyUG9saWN5XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nXG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3Qgd2lsbCB1c2UgQ09SUywgb3Igd2lsbCBiZSByZXN0cmljdGVkIHRvIHNhbWUtb3JpZ2luXG4gIC8vIFVSTHMuXG4gIGdldCBtb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1vZGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1vZGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNyZWRlbnRpYWxzIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGVcbiAgLy8gcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgZ2V0IGNyZWRlbnRpYWxzICgpIHtcbiAgICAvLyBUaGUgY3JlZGVudGlhbHMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjYWNoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyB0aGUgcmVxdWVzdCB3aWxsXG4gIC8vIGludGVyYWN0IHdpdGggdGhlIGJyb3dzZXJcdTIwMTlzIGNhY2hlIHdoZW4gZmV0Y2hpbmcuXG4gIGdldCBjYWNoZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBjYWNoZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY2FjaGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZGlyZWN0IG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHJlZGlyZWN0cyBmb3IgdGhlXG4gIC8vIHJlcXVlc3Qgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBmZXRjaGluZy4gQSByZXF1ZXN0XG4gIC8vIHdpbGwgZm9sbG93IHJlZGlyZWN0cyBieSBkZWZhdWx0LlxuICBnZXQgcmVkaXJlY3QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZGlyZWN0XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIHN1YnJlc291cmNlIGludGVncml0eSBtZXRhZGF0YSwgd2hpY2ggaXMgYVxuICAvLyBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIHJlc291cmNlIGJlaW5nIGZldGNoZWQuIEl0cyB2YWx1ZVxuICAvLyBjb25zaXN0cyBvZiBtdWx0aXBsZSBoYXNoZXMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuIFtTUkldXG4gIGdldCBpbnRlZ3JpdHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaW50ZWdyaXR5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGludGVncml0eVxuICAgIC8vIG1ldGFkYXRhLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaW50ZWdyaXR5XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgY2FuIG91dGxpdmUgdGhlXG4gIC8vIGdsb2JhbCBpbiB3aGljaCBpdCB3YXMgY3JlYXRlZC5cbiAgZ2V0IGtlZXBhbGl2ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBrZWVwYWxpdmUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ua2VlcGFsaXZlXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgcmVsb2FkXG4gIC8vIG5hdmlnYXRpb24uXG4gIGdldCBpc1JlbG9hZE5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNSZWxvYWROYXZpZ2F0aW9uIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVsb2FkTmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIGhpc3RvcnlcbiAgLy8gbmF2aWdhdGlvbiAoYS5rLmEuIGJhY2stZm9yd2FyZCBuYXZpZ2F0aW9uKS5cbiAgZ2V0IGlzSGlzdG9yeU5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNIaXN0b3J5TmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5oaXN0b3J5TmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgc2lnbmFsIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhbiBBYm9ydFNpZ25hbFxuICAvLyBvYmplY3QgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQsIGFuZCBpdHNcbiAgLy8gYWJvcnQgZXZlbnQgaGFuZGxlci5cbiAgZ2V0IHNpZ25hbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBzaWduYWwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIHJldHVybiB0aGlzW2tTaWduYWxdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgZ2V0IGR1cGxleCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAnaGFsZidcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXF1ZXN0LlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGJvZHlVbnVzYWJsZSh0aGlzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW51c2FibGUnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXF1ZXN0IGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXF1ZXN0LlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gTGV0IGNsb25lZFJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlcXVlc3Qgb2JqZWN0LFxuICAgIC8vIGdpdmVuIGNsb25lZFJlcXVlc3QsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWwgZm9sbG93IHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsaXN0ID0gZGVwZW5kZW50Q29udHJvbGxlck1hcC5nZXQodGhpcy5zaWduYWwpXG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxpc3QgPSBuZXcgU2V0KClcbiAgICAgICAgZGVwZW5kZW50Q29udHJvbGxlck1hcC5zZXQodGhpcy5zaWduYWwsIGxpc3QpXG4gICAgICB9XG4gICAgICBjb25zdCBhY1JlZiA9IG5ldyBXZWFrUmVmKGFjKVxuICAgICAgbGlzdC5hZGQoYWNSZWYpXG4gICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoXG4gICAgICAgIGFjLnNpZ25hbCxcbiAgICAgICAgYnVpbGRBYm9ydChhY1JlZilcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdC5cbiAgICByZXR1cm4gZnJvbUlubmVyUmVxdWVzdChjbG9uZWRSZXF1ZXN0LCBhYy5zaWduYWwsIGdldEhlYWRlcnNHdWFyZCh0aGlzW2tIZWFkZXJzXSkpXG4gIH1cblxuICBbbm9kZVV0aWwuaW5zcGVjdC5jdXN0b21dIChkZXB0aCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmRlcHRoID09PSBudWxsKSB7XG4gICAgICBvcHRpb25zLmRlcHRoID0gMlxuICAgIH1cblxuICAgIG9wdGlvbnMuY29sb3JzID8/PSB0cnVlXG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICBkZXN0aW5hdGlvbjogdGhpcy5kZXN0aW5hdGlvbixcbiAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgcmVmZXJyZXJQb2xpY3k6IHRoaXMucmVmZXJyZXJQb2xpY3ksXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgcmVkaXJlY3Q6IHRoaXMucmVkaXJlY3QsXG4gICAgICBpbnRlZ3JpdHk6IHRoaXMuaW50ZWdyaXR5LFxuICAgICAga2VlcGFsaXZlOiB0aGlzLmtlZXBhbGl2ZSxcbiAgICAgIGlzUmVsb2FkTmF2aWdhdGlvbjogdGhpcy5pc1JlbG9hZE5hdmlnYXRpb24sXG4gICAgICBpc0hpc3RvcnlOYXZpZ2F0aW9uOiB0aGlzLmlzSGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICBzaWduYWw6IHRoaXMuc2lnbmFsXG4gICAgfVxuXG4gICAgcmV0dXJuIGBSZXF1ZXN0ICR7bm9kZVV0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgcHJvcGVydGllcyl9YFxuICB9XG59XG5cbm1peGluQm9keShSZXF1ZXN0KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHNcbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0IChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBpbml0Lm1ldGhvZCA/PyAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBpbml0LmxvY2FsVVJMc09ubHkgPz8gZmFsc2UsXG4gICAgdW5zYWZlUmVxdWVzdDogaW5pdC51bnNhZmVSZXF1ZXN0ID8/IGZhbHNlLFxuICAgIGJvZHk6IGluaXQuYm9keSA/PyBudWxsLFxuICAgIGNsaWVudDogaW5pdC5jbGllbnQgPz8gbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogaW5pdC5yZXNlcnZlZENsaWVudCA/PyBudWxsLFxuICAgIHJlcGxhY2VzQ2xpZW50SWQ6IGluaXQucmVwbGFjZXNDbGllbnRJZCA/PyAnJyxcbiAgICB3aW5kb3c6IGluaXQud2luZG93ID8/ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogaW5pdC5rZWVwYWxpdmUgPz8gZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6IGluaXQuc2VydmljZVdvcmtlcnMgPz8gJ2FsbCcsXG4gICAgaW5pdGlhdG9yOiBpbml0LmluaXRpYXRvciA/PyAnJyxcbiAgICBkZXN0aW5hdGlvbjogaW5pdC5kZXN0aW5hdGlvbiA/PyAnJyxcbiAgICBwcmlvcml0eTogaW5pdC5wcmlvcml0eSA/PyBudWxsLFxuICAgIG9yaWdpbjogaW5pdC5vcmlnaW4gPz8gJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiBpbml0LnBvbGljeUNvbnRhaW5lciA/PyAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogaW5pdC5yZWZlcnJlciA/PyAnY2xpZW50JyxcbiAgICByZWZlcnJlclBvbGljeTogaW5pdC5yZWZlcnJlclBvbGljeSA/PyAnJyxcbiAgICBtb2RlOiBpbml0Lm1vZGUgPz8gJ25vLWNvcnMnLFxuICAgIHVzZUNPUlNQcmVmbGlnaHRGbGFnOiBpbml0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID8/IGZhbHNlLFxuICAgIGNyZWRlbnRpYWxzOiBpbml0LmNyZWRlbnRpYWxzID8/ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGluaXQudXNlQ3JlZGVudGlhbHMgPz8gZmFsc2UsXG4gICAgY2FjaGU6IGluaXQuY2FjaGUgPz8gJ2RlZmF1bHQnLFxuICAgIHJlZGlyZWN0OiBpbml0LnJlZGlyZWN0ID8/ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogaW5pdC5pbnRlZ3JpdHkgPz8gJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiBpbml0LmNyeXB0b0dyYXBoaWNzTm9uY2VNZXRhZGF0YSA/PyAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogaW5pdC5wYXJzZXJNZXRhZGF0YSA/PyAnJyxcbiAgICByZWxvYWROYXZpZ2F0aW9uOiBpbml0LnJlbG9hZE5hdmlnYXRpb24gPz8gZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGluaXQuaGlzdG9yeU5hdmlnYXRpb24gPz8gZmFsc2UsXG4gICAgdXNlckFjdGl2YXRpb246IGluaXQudXNlckFjdGl2YXRpb24gPz8gZmFsc2UsXG4gICAgdGFpbnRlZE9yaWdpbjogaW5pdC50YWludGVkT3JpZ2luID8/IGZhbHNlLFxuICAgIHJlZGlyZWN0Q291bnQ6IGluaXQucmVkaXJlY3RDb3VudCA/PyAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6IGluaXQucmVzcG9uc2VUYWludGluZyA/PyAnYmFzaWMnLFxuICAgIHByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uOiBpbml0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uID8/IGZhbHNlLFxuICAgIGRvbmU6IGluaXQuZG9uZSA/PyBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd0ZhaWxlZDogaW5pdC50aW1pbmdBbGxvd0ZhaWxlZCA/PyBmYWxzZSxcbiAgICB1cmxMaXN0OiBpbml0LnVybExpc3QsXG4gICAgdXJsOiBpbml0LnVybExpc3RbMF0sXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXF1ZXN0IChyZXF1ZXN0KSB7XG4gIC8vIFRvIGNsb25lIGEgcmVxdWVzdCByZXF1ZXN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gTGV0IG5ld1JlcXVlc3QgYmUgYSBjb3B5IG9mIHJlcXVlc3QsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1JlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IC4uLnJlcXVlc3QsIGJvZHk6IG51bGwgfSlcblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBzZXQgbmV3UmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVxdWVzdFx1MjAxOXMgYm9keS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVxdWVzdC5ib2R5ID0gY2xvbmVCb2R5KG5ld1JlcXVlc3QsIHJlcXVlc3QuYm9keSlcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBuZXdSZXF1ZXN0LlxuICByZXR1cm4gbmV3UmVxdWVzdFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtY3JlYXRlXG4gKiBAcGFyYW0ge2FueX0gaW5uZXJSZXF1ZXN0XG4gKiBAcGFyYW0ge0Fib3J0U2lnbmFsfSBzaWduYWxcbiAqIEBwYXJhbSB7J3JlcXVlc3QnIHwgJ2ltbXV0YWJsZScgfCAncmVxdWVzdC1uby1jb3JzJyB8ICdyZXNwb25zZScgfCAnbm9uZSd9IGd1YXJkXG4gKiBAcmV0dXJucyB7UmVxdWVzdH1cbiAqL1xuZnVuY3Rpb24gZnJvbUlubmVyUmVxdWVzdCAoaW5uZXJSZXF1ZXN0LCBzaWduYWwsIGd1YXJkKSB7XG4gIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChrQ29uc3RydWN0KVxuICByZXF1ZXN0W2tTdGF0ZV0gPSBpbm5lclJlcXVlc3RcbiAgcmVxdWVzdFtrU2lnbmFsXSA9IHNpZ25hbFxuICByZXF1ZXN0W2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gIHNldEhlYWRlcnNMaXN0KHJlcXVlc3Rba0hlYWRlcnNdLCBpbm5lclJlcXVlc3QuaGVhZGVyc0xpc3QpXG4gIHNldEhlYWRlcnNHdWFyZChyZXF1ZXN0W2tIZWFkZXJzXSwgZ3VhcmQpXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlcXVlc3QucHJvdG90eXBlLCB7XG4gIG1ldGhvZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNpZ25hbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZHVwbGV4OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZXN0aW5hdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzSGlzdG9yeU5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzUmVsb2FkTmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2VlcGFsaXZlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbnRlZ3JpdHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNhY2hlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYXR0cmlidXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlclBvbGljeToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1vZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXF1ZXN0JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlcXVlc3RcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RpbmZvXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdChWLCBwcmVmaXgsIGFyZ3VtZW50KVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBwcmVmaXgsIGFyZ3VtZW50KVxufVxuXG53ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEFib3J0U2lnbmFsXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdtZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9LFxuICB7XG4gICAga2V5OiAnYm9keScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdFxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXJQb2xpY3knLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY3lcbiAgICBhbGxvd2VkVmFsdWVzOiByZWZlcnJlclBvbGljeVxuICB9LFxuICB7XG4gICAga2V5OiAnbW9kZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1tb2RlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdE1vZGVcbiAgfSxcbiAge1xuICAgIGtleTogJ2NyZWRlbnRpYWxzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNyZWRlbnRpYWxzXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENyZWRlbnRpYWxzXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYWNoZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjYWNoZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDYWNoZVxuICB9LFxuICB7XG4gICAga2V5OiAncmVkaXJlY3QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0cmVkaXJlY3RcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0UmVkaXJlY3RcbiAgfSxcbiAge1xuICAgIGtleTogJ2ludGVncml0eScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2tlZXBhbGl2ZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzaWduYWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgKHNpZ25hbCkgPT4gd2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwoXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgJ1JlcXVlc3RJbml0JyxcbiAgICAgICAgJ3NpZ25hbCcsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9XG4gICAgICApXG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAnd2luZG93JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9LFxuICB7XG4gICAga2V5OiAnZHVwbGV4JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0RHVwbGV4XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJywgLy8gdW5kaWNpIHNwZWNpZmljIG9wdGlvblxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0geyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCwgZnJvbUlubmVyUmVxdWVzdCwgY2xvbmVSZXF1ZXN0IH1cbiIsICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIG1ha2VSZXNwb25zZSxcbiAgZnJvbUlubmVyUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IFJlcXVlc3QsIGNsb25lUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9yZXF1ZXN0JylcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCdub2RlOnpsaWInKVxuY29uc3Qge1xuICBieXRlc01hdGNoLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIFRBT0NoZWNrLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgaXNCbG9iTGlrZSxcbiAgc2FtZU9yaWdpbixcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8sXG4gIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUsXG4gIGJ1aWxkQ29udGVudFJhbmdlLFxuICBjcmVhdGVJbmZsYXRlLFxuICBleHRyYWN0TWltZVR5cGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUsIGtEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSwgZXh0cmFjdEJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICBzdWJyZXNvdXJjZVNldFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKVxuY29uc3QgeyBSZWFkYWJsZSwgcGlwZWxpbmUsIGZpbmlzaGVkIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGFkZEFib3J0TGlzdGVuZXIsIGlzRXJyb3JlZCwgaXNSZWFkYWJsZSwgYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZGF0YVVSTFByb2Nlc3Nvciwgc2VyaWFsaXplQU1pbWVUeXBlLCBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vLi4vZ2xvYmFsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IEdFVF9PUl9IRUFEID0gWydHRVQnLCAnSEVBRCddXG5cbmNvbnN0IGRlZmF1bHRVc2VyQWdlbnQgPSB0eXBlb2YgX19VTkRJQ0lfSVNfTk9ERV9fICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXNidWlsZERldGVjdGlvbiAhPT0gJ3VuZGVmaW5lZCdcbiAgPyAnbm9kZSdcbiAgOiAndW5kaWNpJ1xuXG4vKiogQHR5cGUge2ltcG9ydCgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTH0gKi9cbmxldCByZXNvbHZlT2JqZWN0VVJMXG5cbmNsYXNzIEZldGNoIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2hlcikge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsXG4gICAgdGhpcy5kdW1wID0gZmFsc2VcbiAgICB0aGlzLnN0YXRlID0gJ29uZ29pbmcnXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZldGNoRG9uZSAocmVzcG9uc2UpIHtcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHVuZGVmaW5lZCkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdnbG9iYWxUaGlzLmZldGNoJylcblxuICAvLyAxLiBMZXQgcCBiZSBhIG5ldyBwcm9taXNlLlxuICBsZXQgcCA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZlxuICAvLyBSZXF1ZXN0IGFzIGNvbnN0cnVjdG9yIHdpdGggaW5wdXQgYW5kIGluaXQgYXMgYXJndW1lbnRzLiBJZiB0aGlzIHRocm93c1xuICAvLyBhbiBleGNlcHRpb24sIHJlamVjdCBwIHdpdGggaXQgYW5kIHJldHVybiBwLlxuICBsZXQgcmVxdWVzdE9iamVjdFxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgcC5yZWplY3QoZSlcbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyAzLiBMZXQgcmVxdWVzdCBiZSByZXF1ZXN0T2JqZWN0XHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNC4gSWYgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICBpZiAocmVxdWVzdE9iamVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgIC8vIDEuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCBudWxsLCBhbmRcbiAgICAvLyAgICByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIG51bGwsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgIC8vIDIuIFJldHVybiBwLlxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDUuIExldCBnbG9iYWxPYmplY3QgYmUgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICBjb25zdCBnbG9iYWxPYmplY3QgPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAvLyA2LiBJZiBnbG9iYWxPYmplY3QgaXMgYSBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgb2JqZWN0LCB0aGVuIHNldFxuICAvLyByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgaWYgKGdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUnKSB7XG4gICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICB9XG5cbiAgLy8gNy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIG51bGwuXG4gIGxldCByZXNwb25zZU9iamVjdCA9IG51bGxcblxuICAvLyA4LiBMZXQgcmVsZXZhbnRSZWFsbSBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cblxuICAvLyA5LiBMZXQgbG9jYWxseUFib3J0ZWQgYmUgZmFsc2UuXG4gIGxldCBsb2NhbGx5QWJvcnRlZCA9IGZhbHNlXG5cbiAgLy8gMTAuIExldCBjb250cm9sbGVyIGJlIG51bGwuXG4gIGxldCBjb250cm9sbGVyID0gbnVsbFxuXG4gIC8vIDExLiBBZGQgdGhlIGZvbGxvd2luZyBhYm9ydCBzdGVwcyB0byByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWw6XG4gIGFkZEFib3J0TGlzdGVuZXIoXG4gICAgcmVxdWVzdE9iamVjdC5zaWduYWwsXG4gICAgKCkgPT4ge1xuICAgICAgLy8gMS4gU2V0IGxvY2FsbHlBYm9ydGVkIHRvIHRydWUuXG4gICAgICBsb2NhbGx5QWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gQXNzZXJ0OiBjb250cm9sbGVyIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT0gbnVsbClcblxuICAgICAgLy8gMy4gQWJvcnQgY29udHJvbGxlciB3aXRoIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgY29udHJvbGxlci5hYm9ydChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAgIGNvbnN0IHJlYWxSZXNwb25zZSA9IHJlc3BvbnNlT2JqZWN0Py5kZXJlZigpXG5cbiAgICAgIC8vIDQuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCxcbiAgICAgIC8vICAgIGFuZCByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVhbFJlc3BvbnNlLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICAvLyBzZWUgZnVuY3Rpb24gaGFuZGxlRmV0Y2hEb25lXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNlXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcsIHsgY2F1c2U6IHJlc3BvbnNlLmVycm9yIH0pKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFdlYWtSZWYoZnJvbUlubmVyUmVzcG9uc2UocmVzcG9uc2UsICdpbW11dGFibGUnKSlcblxuICAgIC8vIDUuIFJlc29sdmUgcCB3aXRoIHJlc3BvbnNlT2JqZWN0LlxuICAgIHAucmVzb2x2ZShyZXNwb25zZU9iamVjdC5kZXJlZigpKVxuICAgIHAgPSBudWxsXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IHJlcXVlc3RPYmplY3Rba0Rpc3BhdGNoZXJdIC8vIHVuZGljaVxuICB9KVxuXG4gIC8vIDE0LiBSZXR1cm4gcC5cbiAgcmV0dXJuIHAucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtYW5kLXJlcG9ydC10aW1pbmdcbmZ1bmN0aW9uIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nIChyZXNwb25zZSwgaW5pdGlhdG9yVHlwZSA9ICdvdGhlcicpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiYgcmVzcG9uc2UuYWJvcnRlZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIG51bGwgb3IgZW1wdHksIHRoZW4gcmV0dXJuLlxuICBpZiAoIXJlc3BvbnNlLnVybExpc3Q/Lmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMy4gTGV0IG9yaWdpbmFsVVJMIGJlIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdFswXS5cbiAgY29uc3Qgb3JpZ2luYWxVUkwgPSByZXNwb25zZS51cmxMaXN0WzBdXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBsZXQgdGltaW5nSW5mbyA9IHJlc3BvbnNlLnRpbWluZ0luZm9cblxuICAvLyA1LiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gIGxldCBjYWNoZVN0YXRlID0gcmVzcG9uc2UuY2FjaGVTdGF0ZVxuXG4gIC8vIDYuIElmIG9yaWdpbmFsVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShvcmlnaW5hbFVSTCkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDcuIElmIHRpbWluZ0luZm8gaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmICh0aW1pbmdJbmZvID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA4LiBJZiByZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnIGlzIG5vdCBzZXQsIHRoZW46XG4gIGlmICghcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQpIHtcbiAgICAvLyAgMS4gU2V0IHRpbWluZ0luZm8gdG8gYSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmcgaW5mbyBmb3IgdGltaW5nSW5mby5cbiAgICB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcblxuICAgIC8vICAyLiBTZXQgY2FjaGVTdGF0ZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIGNhY2hlU3RhdGUgPSAnJ1xuICB9XG5cbiAgLy8gOS4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGVuZCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZVxuICAvLyBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIC8vIFRPRE86IGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eT9cbiAgdGltaW5nSW5mby5lbmRUaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoKVxuXG4gIC8vIDEwLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTEuIE1hcmsgcmVzb3VyY2UgdGltaW5nIGZvciB0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSxcbiAgLy8gZ2xvYmFsLCBhbmQgY2FjaGVTdGF0ZS5cbiAgbWFya1Jlc291cmNlVGltaW5nKFxuICAgIHRpbWluZ0luZm8sXG4gICAgb3JpZ2luYWxVUkwuaHJlZixcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuY29uc3QgbWFya1Jlc291cmNlVGltaW5nID0gcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhYm9ydC1mZXRjaFxuZnVuY3Rpb24gYWJvcnRGZXRjaCAocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGVycm9yKSB7XG4gIC8vIDEuIFJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIGlmIChwKSB7XG4gICAgLy8gV2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoZSBwcm9taXNlIGF0IHRoaXMgc3RhZ2VcbiAgICBwLnJlamVjdChlcnJvcilcbiAgfVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGNhbmNlbCByZXF1ZXN0XHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlcXVlc3QuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlcXVlc3QuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlT2JqZWN0IGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2VPYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZS5cbiAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNS4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXNwb25zZS5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVzcG9uc2UuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2hpbmdcbmZ1bmN0aW9uIGZldGNoaW5nICh7XG4gIHJlcXVlc3QsXG4gIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlLFxuICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICB1c2VQYXJhbGxlbFF1ZXVlID0gZmFsc2UsXG4gIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG59KSB7XG4gIC8vIEVuc3VyZSB0aGF0IHRoZSBkaXNwYXRjaGVyIGlzIHNldCBhY2NvcmRpbmdseVxuICBhc3NlcnQoZGlzcGF0Y2hlcilcblxuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVudFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbiAgY29uc3QgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgIHN0YXJ0VGltZTogY3VycmVudFRpbWVcbiAgfSlcblxuICAvLyA2LiBMZXQgZmV0Y2hQYXJhbXMgYmUgYSBuZXcgZmV0Y2ggcGFyYW1zIHdob3NlXG4gIC8vIHJlcXVlc3QgaXMgcmVxdWVzdCxcbiAgLy8gdGltaW5nIGluZm8gaXMgdGltaW5nSW5mbyxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGJvZHkgY2h1bmsgbGVuZ3RoIGlzIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgaXMgcHJvY2Vzc1Jlc3BvbnNlLFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIC8vIHRhc2sgZGVzdGluYXRpb24gaXMgdGFza0Rlc3RpbmF0aW9uLFxuICAvLyBhbmQgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkgaXMgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGZldGNoUGFyYW1zID0ge1xuICAgIGNvbnRyb2xsZXI6IG5ldyBGZXRjaChkaXNwYXRjaGVyKSxcbiAgICByZXF1ZXN0LFxuICAgIHRpbWluZ0luZm8sXG4gICAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gICAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgICB0YXNrRGVzdGluYXRpb24sXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvXG4gIC8vICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAvLyBOT1RFOiBTaW5jZSBmZXRjaGluZyBpcyBvbmx5IGNhbGxlZCBmcm9tIGZldGNoLCBib2R5IHNob3VsZCBhbHJlYWR5IGJlXG4gIC8vIGV4dHJhY3RlZC5cbiAgYXNzZXJ0KCFyZXF1ZXN0LmJvZHkgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSlcblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudCwgaWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0IGlzIGEgV2luZG93IG9iamVjdDsgb3RoZXJ3aXNlXG4gIC8vIFwibm8td2luZG93XCIuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC53aW5kb3cgPVxuICAgICAgcmVxdWVzdC5jbGllbnQ/Lmdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdXaW5kb3cnXG4gICAgICAgID8gcmVxdWVzdC5jbGllbnRcbiAgICAgICAgOiAnbm8td2luZG93J1xuICB9XG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyBjbGllbnRcdTIwMTlzIG9yaWdpbi5cbiAgaWYgKHJlcXVlc3Qub3JpZ2luID09PSAnY2xpZW50Jykge1xuICAgIHJlcXVlc3Qub3JpZ2luID0gcmVxdWVzdC5jbGllbnQub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnLCB0cnVlKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUsIHRydWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScsIHRydWUpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJywgdHJ1ZSlcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lclx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3RcdTIwMTlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3RcdTIwMTlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNlXHUyMDE5cyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJywgdHJ1ZSlcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgXHUwMEFCIChgQ29udGVudC1UeXBlYCwgYHRleHQvaHRtbDtjaGFyc2V0PXV0Zi04YCkgXHUwMEJCLFxuICAgICAgLy8gYW5kIGJvZHkgaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UgYXMgYSBib2R5LlxuXG4gICAgICAvLyBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Fib3V0IHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkJykpXG4gICAgfVxuICAgIGNhc2UgJ2Jsb2I6Jzoge1xuICAgICAgaWYgKCFyZXNvbHZlT2JqZWN0VVJMKSB7XG4gICAgICAgIHJlc29sdmVPYmplY3RVUkwgPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpLnJlc29sdmVPYmplY3RVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMS4gTGV0IGJsb2JVUkxFbnRyeSBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgYmxvYiBVUkwgZW50cnkuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnkgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iLzdiMGViYWNjYzYyYjU2NmExOTY1Mzk2ZTViZTdiYjJiYzA2Zjg0MWYvRmlsZUFQSS91cmwvcmVzb3VyY2VzL2ZldGNoLXRlc3RzLmpzI0w1Mi1MNTZcbiAgICAgIC8vIEJ1ZmZlci5yZXNvbHZlT2JqZWN0VVJMIGRvZXMgbm90IGlnbm9yZSBVUkwgcXVlcmllcy5cbiAgICAgIGlmIChibG9iVVJMRW50cnkuc2VhcmNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJykpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJsb2IgPSByZXNvbHZlT2JqZWN0VVJMKGJsb2JVUkxFbnRyeS50b1N0cmluZygpKVxuXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgLCBibG9iVVJMRW50cnkgaXMgbnVsbCwgb3IgYmxvYlVSTEVudHJ5XHUyMDE5c1xuICAgICAgLy8gICAgb2JqZWN0IGlzIG5vdCBhIEJsb2Igb2JqZWN0LCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnIHx8ICFpc0Jsb2JMaWtlKGJsb2IpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJsb2IgYmUgYmxvYlVSTEVudHJ5XHUyMDE5cyBvYmplY3QuXG4gICAgICAvLyBOb3RlOiBkb25lIGFib3ZlXG5cbiAgICAgIC8vIDQuIExldCByZXNwb25zZSBiZSBhIG5ldyByZXNwb25zZS5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKClcblxuICAgICAgLy8gNS4gTGV0IGZ1bGxMZW5ndGggYmUgYmxvYlx1MjAxOXMgc2l6ZS5cbiAgICAgIGNvbnN0IGZ1bGxMZW5ndGggPSBibG9iLnNpemVcblxuICAgICAgLy8gNi4gTGV0IHNlcmlhbGl6ZWRGdWxsTGVuZ3RoIGJlIGZ1bGxMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRGdWxsTGVuZ3RoID0gaXNvbW9ycGhpY0VuY29kZShgJHtmdWxsTGVuZ3RofWApXG5cbiAgICAgIC8vIDcuIExldCB0eXBlIGJlIGJsb2JcdTIwMTlzIHR5cGUuXG4gICAgICBjb25zdCB0eXBlID0gYmxvYi50eXBlXG5cbiAgICAgIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYDpcbiAgICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnLCB0cnVlKSkge1xuICAgICAgICAvLyAxLiBMZXQgYm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgYmxvYi5cbiAgICAgICAgLy8gTm90ZTogaW4gdGhlIEZpbGVBUEkgYSBibG9iIFwib2JqZWN0XCIgaXMgYSBCbG9iICpvciogYSBNZWRpYVNvdXJjZS5cbiAgICAgICAgLy8gSW4gbm9kZSwgdGhpcyBjYW4gb25seSBldmVyIGJlIGEgQmxvYi4gVGhlcmVmb3JlIHdlIGNhbiBzYWZlbHlcbiAgICAgICAgLy8gdXNlIGV4dHJhY3RCb2R5IGRpcmVjdGx5LlxuICAgICAgICBjb25zdCBib2R5V2l0aFR5cGUgPSBleHRyYWN0Qm9keShibG9iKVxuXG4gICAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UgdG8gYE9LYC5cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dCA9ICdPSydcblxuICAgICAgICAvLyAzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYm9keVdpdGhUeXBlXHUyMDE5cyBib2R5LlxuICAgICAgICByZXNwb25zZS5ib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCB0byBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIHNlcmlhbGl6ZWRGdWxsTGVuZ3RoKSwgKGBDb250ZW50LVR5cGVgLCB0eXBlKSBcdTAwQkIuXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1sZW5ndGgnLCBzZXJpYWxpemVkRnVsbExlbmd0aCwgdHJ1ZSlcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVyc0xpc3Quc2V0KCdjb250ZW50LXR5cGUnLCB0eXBlLCB0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgICAgICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gMi4gTGV0IHJhbmdlSGVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBgUmFuZ2VgIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAgIGNvbnN0IHJhbmdlSGVhZGVyID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoJ3JhbmdlJywgdHJ1ZSlcblxuICAgICAgICAvLyAzLiBMZXQgcmFuZ2VWYWx1ZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBzaW5nbGUgcmFuZ2UgaGVhZGVyIHZhbHVlIGdpdmVuIHJhbmdlSGVhZGVyIGFuZCB0cnVlLlxuICAgICAgICBjb25zdCByYW5nZVZhbHVlID0gc2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZShyYW5nZUhlYWRlciwgdHJ1ZSlcblxuICAgICAgICAvLyA0LiBJZiByYW5nZVZhbHVlIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgaWYgKHJhbmdlVmFsdWUgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignZmFpbGVkIHRvIGZldGNoIHRoZSBkYXRhIFVSTCcpKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gTGV0IChyYW5nZVN0YXJ0LCByYW5nZUVuZCkgYmUgcmFuZ2VWYWx1ZS5cbiAgICAgICAgbGV0IHsgcmFuZ2VTdGFydFZhbHVlOiByYW5nZVN0YXJ0LCByYW5nZUVuZFZhbHVlOiByYW5nZUVuZCB9ID0gcmFuZ2VWYWx1ZVxuXG4gICAgICAgIC8vIDYuIElmIHJhbmdlU3RhcnQgaXMgbnVsbDpcbiAgICAgICAgLy8gNy4gT3RoZXJ3aXNlOlxuICAgICAgICBpZiAocmFuZ2VTdGFydCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIDEuIFNldCByYW5nZVN0YXJ0IHRvIGZ1bGxMZW5ndGggXHUyMjEyIHJhbmdlRW5kLlxuICAgICAgICAgIHJhbmdlU3RhcnQgPSBmdWxsTGVuZ3RoIC0gcmFuZ2VFbmRcblxuICAgICAgICAgIC8vIDIuIFNldCByYW5nZUVuZCB0byByYW5nZVN0YXJ0ICsgcmFuZ2VFbmQgXHUyMjEyIDEuXG4gICAgICAgICAgcmFuZ2VFbmQgPSByYW5nZVN0YXJ0ICsgcmFuZ2VFbmQgLSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gMS4gSWYgcmFuZ2VTdGFydCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gZnVsbExlbmd0aCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICAgIGlmIChyYW5nZVN0YXJ0ID49IGZ1bGxMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignUmFuZ2Ugc3RhcnQgaXMgZ3JlYXRlciB0aGFuIHRoZSBibG9iXFwncyBzaXplLicpKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuIElmIHJhbmdlRW5kIGlzIG51bGwgb3IgcmFuZ2VFbmQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGZ1bGxMZW5ndGgsIHRoZW4gc2V0XG4gICAgICAgICAgLy8gICAgcmFuZ2VFbmQgdG8gZnVsbExlbmd0aCBcdTIyMTIgMS5cbiAgICAgICAgICBpZiAocmFuZ2VFbmQgPT09IG51bGwgfHwgcmFuZ2VFbmQgPj0gZnVsbExlbmd0aCkge1xuICAgICAgICAgICAgcmFuZ2VFbmQgPSBmdWxsTGVuZ3RoIC0gMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDguIExldCBzbGljZWRCbG9iIGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgc2xpY2UgYmxvYiBnaXZlbiBibG9iLCByYW5nZVN0YXJ0LFxuICAgICAgICAvLyAgICByYW5nZUVuZCArIDEsIGFuZCB0eXBlLlxuICAgICAgICBjb25zdCBzbGljZWRCbG9iID0gYmxvYi5zbGljZShyYW5nZVN0YXJ0LCByYW5nZUVuZCwgdHlwZSlcblxuICAgICAgICAvLyA5LiBMZXQgc2xpY2VkQm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3Rpbmcgc2xpY2VkQmxvYi5cbiAgICAgICAgLy8gTm90ZTogc2FtZSByZWFzb24gYXMgbWVudGlvbmVkIGFib3ZlIGFzIHRvIHdoeSB3ZSB1c2UgZXh0cmFjdEJvZHlcbiAgICAgICAgY29uc3Qgc2xpY2VkQm9keVdpdGhUeXBlID0gZXh0cmFjdEJvZHkoc2xpY2VkQmxvYilcblxuICAgICAgICAvLyAxMC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHNsaWNlZEJvZHlXaXRoVHlwZVx1MjAxOXMgYm9keS5cbiAgICAgICAgcmVzcG9uc2UuYm9keSA9IHNsaWNlZEJvZHlXaXRoVHlwZVswXVxuXG4gICAgICAgIC8vIDExLiBMZXQgc2VyaWFsaXplZFNsaWNlZExlbmd0aCBiZSBzbGljZWRCbG9iXHUyMDE5cyBzaXplLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRTbGljZWRMZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke3NsaWNlZEJsb2Iuc2l6ZX1gKVxuXG4gICAgICAgIC8vIDEyLiBMZXQgY29udGVudFJhbmdlIGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgYnVpbGQgYSBjb250ZW50IHJhbmdlIGdpdmVuIHJhbmdlU3RhcnQsXG4gICAgICAgIC8vICAgICByYW5nZUVuZCwgYW5kIGZ1bGxMZW5ndGguXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSYW5nZSA9IGJ1aWxkQ29udGVudFJhbmdlKHJhbmdlU3RhcnQsIHJhbmdlRW5kLCBmdWxsTGVuZ3RoKVxuXG4gICAgICAgIC8vIDEzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyB0byAyMDYuXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cyA9IDIwNlxuXG4gICAgICAgIC8vIDE0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlIHRvIGBQYXJ0aWFsIENvbnRlbnRgLlxuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0ID0gJ1BhcnRpYWwgQ29udGVudCdcblxuICAgICAgICAvLyAxNS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCB0byBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIHNlcmlhbGl6ZWRTbGljZWRMZW5ndGgpLFxuICAgICAgICAvLyAgICAgKGBDb250ZW50LVR5cGVgLCB0eXBlKSwgKGBDb250ZW50LVJhbmdlYCwgY29udGVudFJhbmdlKSBcdTAwQkIuXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1sZW5ndGgnLCBzZXJpYWxpemVkU2xpY2VkTGVuZ3RoLCB0cnVlKVxuICAgICAgICByZXNwb25zZS5oZWFkZXJzTGlzdC5zZXQoJ2NvbnRlbnQtdHlwZScsIHR5cGUsIHRydWUpXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1yYW5nZScsIGNvbnRlbnRSYW5nZSwgdHJ1ZSlcbiAgICAgIH1cblxuICAgICAgLy8gMTAuIFJldHVybiByZXNwb25zZS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgfVxuICAgIGNhc2UgJ2RhdGE6Jzoge1xuICAgICAgLy8gMS4gTGV0IGRhdGFVUkxTdHJ1Y3QgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZVxuICAgICAgLy8gICAgZGF0YTogVVJMIHByb2Nlc3NvciBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgICAgY29uc3QgZGF0YVVSTFN0cnVjdCA9IGRhdGFVUkxQcm9jZXNzb3IoY3VycmVudFVSTClcblxuICAgICAgLy8gMi4gSWYgZGF0YVVSTFN0cnVjdCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhXG4gICAgICAvLyAgICBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKGRhdGFVUkxTdHJ1Y3QgPT09ICdmYWlsdXJlJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCB0aGUgZGF0YSBVUkwnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IG1pbWVUeXBlIGJlIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIE1JTUUgdHlwZSwgc2VyaWFsaXplZC5cbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKGRhdGFVUkxTdHJ1Y3QubWltZVR5cGUpXG5cbiAgICAgIC8vIDQuIFJldHVybiBhIHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgXHUwMEJCLFxuICAgICAgLy8gICAgYW5kIGJvZHkgaXMgZGF0YVVSTFN0cnVjdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogbWltZVR5cGUgfV1cbiAgICAgICAgXSxcbiAgICAgICAgYm9keTogc2FmZWx5RXh0cmFjdEJvZHkoZGF0YVVSTFN0cnVjdC5ib2R5KVswXVxuICAgICAgfSkpXG4gICAgfVxuICAgIGNhc2UgJ2ZpbGU6Jzoge1xuICAgICAgLy8gRm9yIG5vdywgdW5mb3J0dW5hdGUgYXMgaXQgaXMsIGZpbGUgVVJMcyBhcmUgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci5cbiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ25vdCBpbXBsZW1lbnRlZC4uLiB5ZXQuLi4nKSlcbiAgICB9XG4gICAgY2FzZSAnaHR0cDonOlxuICAgIGNhc2UgJ2h0dHBzOic6IHtcbiAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cblxuICAgICAgcmV0dXJuIGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCd1bmtub3duIHNjaGVtZScpKVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbmFsaXplUmVzcG9uc2UgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gIC8vIDIsIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgaXMgbm90IG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaFxuICAvLyB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGdpdmVuIHJlc3BvbnNlLCB3aXRoXG4gIC8vIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZShyZXNwb25zZSkpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWZpbmFsZVxuZnVuY3Rpb24gZmV0Y2hGaW5hbGUgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgYSBzZWN1cmUgY29udGV4dCxcbiAgLy8gICAgdGhlbiBzZXQgdGltaW5nSW5mb1x1MjAxOXMgc2VydmVyLXRpbWluZyBoZWFkZXJzIHRvIHRoZSByZXN1bHQgb2YgZ2V0dGluZywgZGVjb2RpbmcsIGFuZCBzcGxpdHRpbmdcbiAgLy8gICAgYFNlcnZlci1UaW1pbmdgIGZyb20gcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDMuIExldCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgYmUgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgIC8vIDEuIExldCB1bnNhZmVFbmRUaW1lIGJlIHRoZSB1bnNhZmUgc2hhcmVkIGN1cnJlbnQgdGltZS5cbiAgICBjb25zdCB1bnNhZmVFbmRUaW1lID0gRGF0ZS5ub3coKSAvLyA/XG5cbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24gaXMgXCJkb2N1bWVudFwiLCB0aGVuIHNldCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlclx1MjAxOXNcbiAgICAvLyAgICBmdWxsIHRpbWluZyBpbmZvIHRvIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucmVxdWVzdC5kZXN0aW5hdGlvbiA9PT0gJ2RvY3VtZW50Jykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5mdWxsVGltaW5nSW5mbyA9IHRpbWluZ0luZm9cbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXJcdTIwMTlzIHJlcG9ydCB0aW1pbmcgc3RlcHMgdG8gdGhlIGZvbGxvd2luZyBzdGVwcyBnaXZlbiBhIGdsb2JhbCBvYmplY3QgZ2xvYmFsOlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVwb3J0VGltaW5nU3RlcHMgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBlbmQgdGltZSB0byB0aGUgcmVsYXRpdmUgaGlnaCByZXNvbHV0aW9uIHRpbWUgZ2l2ZW4gdW5zYWZlRW5kVGltZSBhbmQgZ2xvYmFsLlxuICAgICAgdGltaW5nSW5mby5lbmRUaW1lID0gdW5zYWZlRW5kVGltZVxuXG4gICAgICAvLyAzLiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gICAgICBsZXQgY2FjaGVTdGF0ZSA9IHJlc3BvbnNlLmNhY2hlU3RhdGVcblxuICAgICAgLy8gNC4gTGV0IGJvZHlJbmZvIGJlIHJlc3BvbnNlXHUyMDE5cyBib2R5IGluZm8uXG4gICAgICBjb25zdCBib2R5SW5mbyA9IHJlc3BvbnNlLmJvZHlJbmZvXG5cbiAgICAgIC8vIDUuIElmIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbiBzZXQgdGltaW5nSW5mbyB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuXG4gICAgICAvLyAgICBvcGFxdWUgdGltaW5nIGluZm8gZm9yIHRpbWluZ0luZm8gYW5kIHNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICBpZiAoIXJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkKSB7XG4gICAgICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHRpbWluZ0luZm8pXG5cbiAgICAgICAgY2FjaGVTdGF0ZSA9ICcnXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIExldCByZXNwb25zZVN0YXR1cyBiZSAwLlxuICAgICAgbGV0IHJlc3BvbnNlU3RhdHVzID0gMFxuXG4gICAgICAvLyA3LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBub3QgXCJuYXZpZ2F0ZVwiIG9yIHJlc3BvbnNlXHUyMDE5cyBoYXMtY3Jvc3Mtb3JpZ2luLXJlZGlyZWN0cyBpcyBmYWxzZTpcbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0Lm1vZGUgIT09ICduYXZpZ2F0b3InIHx8ICFyZXNwb25zZS5oYXNDcm9zc09yaWdpblJlZGlyZWN0cykge1xuICAgICAgICAvLyAxLiBTZXQgcmVzcG9uc2VTdGF0dXMgdG8gcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgICAgICAgcmVzcG9uc2VTdGF0dXMgPSByZXNwb25zZS5zdGF0dXNcblxuICAgICAgICAvLyAyLiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGEgTUlNRSB0eXBlIGZyb20gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgICBjb25zdCBtaW1lVHlwZSA9IGV4dHJhY3RNaW1lVHlwZShyZXNwb25zZS5oZWFkZXJzTGlzdClcblxuICAgICAgICAvLyAzLiBJZiBtaW1lVHlwZSBpcyBub3QgZmFpbHVyZSwgdGhlbiBzZXQgYm9keUluZm9cdTIwMTlzIGNvbnRlbnQgdHlwZSB0byB0aGUgcmVzdWx0IG9mIG1pbmltaXppbmcgYSBzdXBwb3J0ZWQgTUlNRSB0eXBlIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBpZiAobWltZVR5cGUgIT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIGJvZHlJbmZvLmNvbnRlbnRUeXBlID0gbWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZShtaW1lVHlwZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA4LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIHR5cGUgaXMgbm9uLW51bGwsIHRoZW4gbWFyayByZXNvdXJjZSB0aW1pbmcgZ2l2ZW4gdGltaW5nSW5mbyxcbiAgICAgIC8vICAgIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwsIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgdHlwZSwgZ2xvYmFsLCBjYWNoZVN0YXRlLCBib2R5SW5mbyxcbiAgICAgIC8vICAgIGFuZCByZXNwb25zZVN0YXR1cy5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUgIT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiB1cGRhdGUgbWFya3Jlc291cmNldGltaW5nXG4gICAgICAgIG1hcmtSZXNvdXJjZVRpbWluZyh0aW1pbmdJbmZvLCBmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybC5ocmVmLCBmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUsIGJvZHlJbmZvLCByZXNwb25zZVN0YXR1cylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2sgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgICAgIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAgICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzXG4gICAgICAvLyAgICByZXNwb25zZSBlbmQtb2YtYm9keSBnaXZlbiByZXNwb25zZS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgIT0gbnVsbCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkocmVzcG9uc2UpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIHR5cGUgaXMgbm9uLW51bGwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzXG4gICAgICAvLyAgICBnbG9iYWwgb2JqZWN0IGlzIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLCB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlclx1MjAxOXMgcmVwb3J0XG4gICAgICAvLyAgICB0aW1pbmcgc3RlcHMgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUgIT0gbnVsbCkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlcG9ydFRpbWluZ1N0ZXBzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBRdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2sgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2soKSlcbiAgfVxuXG4gIC8vIDQuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGlzIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vICAgIHByb2Nlc3MgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZShyZXNwb25zZSlcbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSA9IG51bGxcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcjsgb3RoZXJ3aXNlIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZS5cbiAgY29uc3QgaW50ZXJuYWxSZXNwb25zZSA9IHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgPyByZXNwb25zZSA6IChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlID8/IHJlc3BvbnNlKVxuXG4gIC8vIDYuIElmIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAvLyA3LiBPdGhlcndpc2U6XG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gbWNvbGxpbmE6IGFsbCB0aGUgZm9sbG93aW5nIHN0ZXBzIG9mIHRoZSBzcGVjcyBhcmUgc2tpcHBlZC5cbiAgICAvLyBUaGUgaW50ZXJuYWwgdHJhbnNmb3JtIHN0cmVhbSBpcyBub3QgbmVlZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzMwOTMjaXNzdWVjb21tZW50LTIwNTAxOTg1NDFcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgVHJhbnNmb3JtU3RyZWFtLlxuICAgIC8vIDIuIExldCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gd2hpY2gsIGdpdmVuIGNodW5rLCBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgLy8gMy4gU2V0IHVwIHRyYW5zZm9ybVN0cmVhbSB3aXRoIHRyYW5zZm9ybUFsZ29yaXRobSBzZXQgdG8gaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYW5kIGZsdXNoQWxnb3JpdGhtXG4gICAgLy8gICAgc2V0IHRvIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgICAvLyA0LiBTZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keVx1MjAxOXMgc3RyZWFtIHRvIHRoZSByZXN1bHQgb2YgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keVx1MjAxOXMgc3RyZWFtIHBpcGVkIHRocm91Z2ggdHJhbnNmb3JtU3RyZWFtLlxuXG4gICAgZmluaXNoZWQoaW50ZXJuYWxSZXNwb25zZS5ib2R5LnN0cmVhbSwgKCkgPT4ge1xuICAgICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdFx1MjAxOXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2VcdTIwMTlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLCByZXF1ZXN0XHUyMDE5cyBjbGllbnQsIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3kodW5kZWZpbmVkLCBmYWxzZSlcbiAgICB9XG5cbiAgICAvLyAyLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZTpcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigndW5leHBlY3RlZCByZWRpcmVjdCcpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnbWFudWFsJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbFxuICAgICAgLy8gcmVzcG9uc2UgaXMgYWN0dWFsUmVzcG9uc2UuXG4gICAgICAvLyBOT1RFKHNwZWMpOiBPbiB0aGUgd2ViIHRoaXMgd291bGQgcmV0dXJuIGFuIGBvcGFxdWVyZWRpcmVjdGAgcmVzcG9uc2UsXG4gICAgICAvLyBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2VydmVyIHNpZGUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzExOTMuXG4gICAgICByZXNwb25zZSA9IGFjdHVhbFJlc3BvbnNlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLXJlZGlyZWN0IGZldGNoIGdpdmVuXG4gICAgICAvLyBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBSZWRpcmVjdEZldGNoKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDkuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcmVkaXJlY3QtZmV0Y2hcbmZ1bmN0aW9uIGh0dHBSZWRpcmVjdEZldGNoIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZCByZXNwb25zZSxcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGNvbnN0IGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgID8gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgIDogcmVzcG9uc2VcblxuICAvLyAzLiBMZXQgbG9jYXRpb25VUkwgYmUgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIGxvY2F0aW9uIFVSTCBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gIC8vIFVSTFx1MjAxOXMgZnJhZ21lbnQuXG4gIGxldCBsb2NhdGlvblVSTFxuXG4gIHRyeSB7XG4gICAgbG9jYXRpb25VUkwgPSByZXNwb25zZUxvY2F0aW9uVVJMKFxuICAgICAgYWN0dWFsUmVzcG9uc2UsXG4gICAgICByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KS5oYXNoXG4gICAgKVxuXG4gICAgLy8gNC4gSWYgbG9jYXRpb25VUkwgaXMgbnVsbCwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gICAgaWYgKGxvY2F0aW9uVVJMID09IG51bGwpIHtcbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gNS4gSWYgbG9jYXRpb25VUkwgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICB9XG5cbiAgLy8gNi4gSWYgbG9jYXRpb25VUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyBlcnJvci5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShsb2NhdGlvblVSTCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJykpXG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBjb3VudCBpcyAyMCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAyMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigncmVkaXJlY3QgY291bnQgZXhjZWVkZWQnKSlcbiAgfVxuXG4gIC8vIDguIEluY3JlYXNlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGJ5IDEuXG4gIHJlcXVlc3QucmVkaXJlY3RDb3VudCArPSAxXG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcImNvcnNcIiwgbG9jYXRpb25VUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIGFuZFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiByZXR1cm5cbiAgLy8gIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QubW9kZSA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKSAmJlxuICAgICFzYW1lT3JpZ2luKHJlcXVlc3QsIGxvY2F0aW9uVVJMKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Nyb3NzIG9yaWdpbiBub3QgYWxsb3dlZCBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJykpXG4gIH1cblxuICAvLyAxMC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGxvY2F0aW9uVVJMIGluY2x1ZGVzXG4gIC8vIGNyZWRlbnRpYWxzLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgJ1VSTCBjYW5ub3QgY29udGFpbiBjcmVkZW50aWFscyBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJ1xuICAgICkpXG4gIH1cblxuICAvLyAxMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIGFjdHVhbFJlc3BvbnNlLnN0YXR1cyAhPT0gMzAzICYmXG4gICAgcmVxdWVzdC5ib2R5ICE9IG51bGwgJiZcbiAgICByZXF1ZXN0LmJvZHkuc291cmNlID09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCkpXG4gIH1cblxuICAvLyAxMi4gSWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZVxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAxIG9yIDMwMiBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYFxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAzIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgIG9yIGBIRUFEYFxuICBpZiAoXG4gICAgKFszMDEsIDMwMl0uaW5jbHVkZXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB8fFxuICAgIChhY3R1YWxSZXNwb25zZS5zdGF0dXMgPT09IDMwMyAmJlxuICAgICAgIUdFVF9PUl9IRUFELmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSlcbiAgKSB7XG4gICAgLy8gdGhlbjpcbiAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIGBHRVRgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIG51bGwuXG4gICAgcmVxdWVzdC5tZXRob2QgPSAnR0VUJ1xuICAgIHJlcXVlc3QuYm9keSA9IG51bGxcblxuICAgIC8vIDIuIEZvciBlYWNoIGhlYWRlck5hbWUgb2YgcmVxdWVzdC1ib2R5LWhlYWRlciBuYW1lLCBkZWxldGUgaGVhZGVyTmFtZSBmcm9tXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIHJlcXVlc3RCb2R5SGVhZGVyKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZShoZWFkZXJOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJMXHUyMDE5c1xuICAvLyAgICAgb3JpZ2luLCB0aGVuIGZvciBlYWNoIGhlYWRlck5hbWUgb2YgQ09SUyBub24td2lsZGNhcmQgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgLy8gICAgIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSwgbG9jYXRpb25VUkwpKSB7XG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvcnMtbm9uLXdpbGRjYXJkLXJlcXVlc3QtaGVhZGVyLW5hbWVcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnYXV0aG9yaXphdGlvbicsIHRydWUpXG5cbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXV0aGVudGljYXRpb24tZW50cmllc1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdwcm94eS1hdXRob3JpemF0aW9uJywgdHJ1ZSlcblxuICAgIC8vIFwiQ29va2llXCIgYW5kIFwiSG9zdFwiIGFyZSBmb3JiaWRkZW4gcmVxdWVzdC1oZWFkZXJzLCB3aGljaCB1bmRpY2kgZG9lc24ndCBpbXBsZW1lbnQuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2Nvb2tpZScsIHRydWUpXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnLCB0cnVlKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlIGZpcnN0IHJldHVyblxuICAvLyB2YWx1ZSBvZiBzYWZlbHkgZXh0cmFjdGluZyByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIGFzc2VydChyZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICAgcmVxdWVzdC5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkocmVxdWVzdC5ib2R5LnNvdXJjZSlbMF1cbiAgfVxuXG4gIC8vIDE1LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gMTYuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBlbmQgdGltZSBhbmQgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRoZVxuICAvLyBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIHRpbWluZ0luZm8ucmVkaXJlY3RFbmRUaW1lID0gdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUgPVxuICAgIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gIC8vIDE3LiBJZiB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBzdGFydCB0aW1lIGlzIDAsIHRoZW4gc2V0IHRpbWluZ0luZm9cdTIwMTlzXG4gIC8vICByZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRpbWluZ0luZm9cdTIwMTlzIHN0YXJ0IHRpbWUuXG4gIGlmICh0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID09PSAwKSB7XG4gICAgdGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gIH1cblxuICAvLyAxOC4gQXBwZW5kIGxvY2F0aW9uVVJMIHRvIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICByZXF1ZXN0LnVybExpc3QucHVzaChsb2NhdGlvblVSTClcblxuICAvLyAxOS4gSW52b2tlIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgb24gcmVkaXJlY3Qgb24gcmVxdWVzdCBhbmRcbiAgLy8gYWN0dWFsUmVzcG9uc2UuXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpXG5cbiAgLy8gMjAuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgcmV0dXJuIG1haW5GZXRjaChmZXRjaFBhcmFtcywgdHJ1ZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1vci1jYWNoZS1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaXNBdXRoZW50aWNhdGlvbkZldGNoID0gZmFsc2UsXG4gIGlzTmV3Q29ubmVjdGlvbkZldGNoID0gZmFsc2Vcbikge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgaHR0cEZldGNoUGFyYW1zIGJlIG51bGwuXG4gIGxldCBodHRwRmV0Y2hQYXJhbXMgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGh0dHBSZXF1ZXN0IGJlIG51bGwuXG4gIGxldCBodHRwUmVxdWVzdCA9IG51bGxcblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdG9yZWRSZXNwb25zZSBiZSBudWxsLlxuICAvLyBUT0RPOiBjYWNoZVxuXG4gIC8vIDYuIExldCBodHRwQ2FjaGUgYmUgbnVsbC5cbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDcuIExldCB0aGUgcmV2YWxpZGF0aW5nRmxhZyBiZSB1bnNldC5cbiAgY29uc3QgcmV2YWxpZGF0aW5nRmxhZyA9IGZhbHNlXG5cbiAgLy8gOC4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiIGFuZCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzXG4gIC8vICAgIFwiZXJyb3JcIiwgdGhlbiBzZXQgaHR0cEZldGNoUGFyYW1zIHRvIGZldGNoUGFyYW1zIGFuZCBodHRwUmVxdWVzdCB0b1xuICAvLyAgICByZXF1ZXN0LlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnICYmIHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICBodHRwRmV0Y2hQYXJhbXMgPSBmZXRjaFBhcmFtc1xuICAgIGh0dHBSZXF1ZXN0ID0gcmVxdWVzdFxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFNldCBodHRwUmVxdWVzdCB0byBhIGNsb25lIG9mIHJlcXVlc3QuXG4gICAgaHR0cFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QocmVxdWVzdClcblxuICAgIC8vIDIuIFNldCBodHRwRmV0Y2hQYXJhbXMgdG8gYSBjb3B5IG9mIGZldGNoUGFyYW1zLlxuICAgIGh0dHBGZXRjaFBhcmFtcyA9IHsgLi4uZmV0Y2hQYXJhbXMgfVxuXG4gICAgLy8gMy4gU2V0IGh0dHBGZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdCB0byBodHRwUmVxdWVzdC5cbiAgICBodHRwRmV0Y2hQYXJhbXMucmVxdWVzdCA9IGh0dHBSZXF1ZXN0XG4gIH1cblxuICAvLyAgICAzLiBMZXQgaW5jbHVkZUNyZWRlbnRpYWxzIGJlIHRydWUgaWYgb25lIG9mXG4gIGNvbnN0IGluY2x1ZGVDcmVkZW50aWFscyA9XG4gICAgcmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnIHx8XG4gICAgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdzYW1lLW9yaWdpbicgJiZcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJylcblxuICAvLyAgICA0LiBMZXQgY29udGVudExlbmd0aCBiZSBodHRwUmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgbGVuZ3RoLCBpZiBodHRwUmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgYm9keSBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBodHRwUmVxdWVzdC5ib2R5ID8gaHR0cFJlcXVlc3QuYm9keS5sZW5ndGggOiBudWxsXG5cbiAgLy8gICAgNS4gTGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBiZSBudWxsLlxuICBsZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gbnVsbFxuXG4gIC8vICAgIDYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgIG9yXG4gIC8vICAgIGBQVVRgLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gYDBgLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuYm9keSA9PSBudWxsICYmXG4gICAgWydQT1NUJywgJ1BVVCddLmluY2x1ZGVzKGh0dHBSZXF1ZXN0Lm1ldGhvZClcbiAgKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gJzAnXG4gIH1cblxuICAvLyAgICA3LiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG9cbiAgLy8gICAgY29udGVudExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShgJHtjb250ZW50TGVuZ3RofWApXG4gIH1cblxuICAvLyAgICA4LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDb250ZW50LUxlbmd0aGAvY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgaWYgKGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSAhPSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LWxlbmd0aCcsIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSwgdHJ1ZSlcbiAgfVxuXG4gIC8vICAgIDkuIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LUxlbmd0aGAsXG4gIC8vICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSkgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDEwLiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIGlzIHRydWUsXG4gIC8vICAgIHRoZW46XG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgaHR0cFJlcXVlc3Qua2VlcGFsaXZlKSB7XG4gICAgLy8gTk9URToga2VlcGFsaXZlIGlzIGEgbm9vcCBvdXRzaWRlIG9mIGJyb3dzZXIgY29udGV4dC5cbiAgfVxuXG4gIC8vICAgIDExLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgYSBVUkwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBSZWZlcmVyYC9odHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZCxcbiAgLy8gICAgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdyZWZlcmVyJywgaXNvbW9ycGhpY0VuY29kZShodHRwUmVxdWVzdC5yZWZlcnJlci5ocmVmKSwgdHJ1ZSlcbiAgfVxuXG4gIC8vICAgIDEyLiBBcHBlbmQgYSByZXF1ZXN0IGBPcmlnaW5gIGhlYWRlciBmb3IgaHR0cFJlcXVlc3QuXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTMuIEFwcGVuZCB0aGUgRmV0Y2ggbWV0YWRhdGEgaGVhZGVycyBmb3IgaHR0cFJlcXVlc3QuIFtGRVRDSC1NRVRBREFUQV1cbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YShodHRwUmVxdWVzdClcblxuICAvLyAgICAxNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFVzZXItQWdlbnRgLCB0aGVuXG4gIC8vICAgIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYFVzZXItQWdlbnRgL2RlZmF1bHQgYFVzZXItQWdlbnRgIHZhbHVlIHRvXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygndXNlci1hZ2VudCcsIHRydWUpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCd1c2VyLWFnZW50JywgZGVmYXVsdFVzZXJBZ2VudClcbiAgfVxuXG4gIC8vICAgIDE1LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcImRlZmF1bHRcIiBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0IGNvbnRhaW5zIGBJZi1Nb2RpZmllZC1TaW5jZWAsIGBJZi1Ob25lLU1hdGNoYCxcbiAgLy8gICAgYElmLVVubW9kaWZpZWQtU2luY2VgLCBgSWYtTWF0Y2hgLCBvciBgSWYtUmFuZ2VgLCB0aGVuIHNldFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ2RlZmF1bHQnICYmXG4gICAgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tb2RpZmllZC1zaW5jZScsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbm9uZS1tYXRjaCcsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtdW5tb2RpZmllZC1zaW5jZScsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbWF0Y2gnLCB0cnVlKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXJhbmdlJywgdHJ1ZSkpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMTYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tY2FjaGVcIiwgaHR0cFJlcXVlc3RcdTIwMTlzIHByZXZlbnRcbiAgLy8gICAgbm8tY2FjaGUgY2FjaGUtY29udHJvbCBoZWFkZXIgbW9kaWZpY2F0aW9uIGZsYWcgaXMgdW5zZXQsIGFuZFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDYWNoZS1Db250cm9sYC9gbWF4LWFnZT0wYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLWNhY2hlJyAmJlxuICAgICFodHRwUmVxdWVzdC5wcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbiAmJlxuICAgICFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcsIHRydWUpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICdtYXgtYWdlPTAnLCB0cnVlKVxuICB9XG5cbiAgLy8gICAgMTcuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiBvciBcInJlbG9hZFwiLCB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1zdG9yZScgfHwgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdyZWxvYWQnKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFByYWdtYWAsIHRoZW4gYXBwZW5kXG4gICAgLy8gYFByYWdtYWAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncHJhZ21hJywgdHJ1ZSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncHJhZ21hJywgJ25vLWNhY2hlJywgdHJ1ZSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsXG4gICAgLy8gdGhlbiBhcHBlbmQgYENhY2hlLUNvbnRyb2xgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnLCB0cnVlKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ25vLWNhY2hlJywgdHJ1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAgICAxOC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBBY2NlcHQtRW5jb2RpbmdgL2BpZGVudGl0eWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJywgdHJ1ZSkpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdpZGVudGl0eScsIHRydWUpXG4gIH1cblxuICAvLyAgICAxOS4gTW9kaWZ5IGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBwZXIgSFRUUC4gRG8gbm90IGFwcGVuZCBhIGdpdmVuXG4gIC8vICAgIGhlYWRlciBpZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgdGhhdCBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gIC8vICAgIFRPRE86IGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODUjaXNzdWVjb21tZW50LTg5NjU2MDEyOVxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtZW5jb2RpbmcnLCB0cnVlKSkge1xuICAgIGlmICh1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChodHRwUmVxdWVzdCkpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdiciwgZ3ppcCwgZGVmbGF0ZScsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsIGRlZmxhdGUnLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcsIHRydWUpXG5cbiAgLy8gICAgMjAuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCB0aGVuOlxuICBpZiAoaW5jbHVkZUNyZWRlbnRpYWxzKSB7XG4gICAgLy8gMS4gSWYgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gYmxvY2sgY29va2llcyBmb3IgaHR0cFJlcXVlc3RcbiAgICAvLyAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyAgICAyMS4gSWYgdGhlcmVcdTIwMTlzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnksIHVzZSBpdCBhcyBhcHByb3ByaWF0ZS5cbiAgLy8gICAgVE9ETzogcHJveHktYXV0aGVudGljYXRpb25cblxuICAvLyAgICAyMi4gU2V0IGh0dHBDYWNoZSB0byB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlXG4gIC8vICAgIHBhcnRpdGlvbiwgZ2l2ZW4gaHR0cFJlcXVlc3QuXG4gIC8vICAgIFRPRE86IGNhY2hlXG5cbiAgLy8gICAgMjMuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0b1xuICAvLyAgICBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMjQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIG5laXRoZXIgXCJuby1zdG9yZVwiIG5vciBcInJlbG9hZFwiLFxuICAvLyAgICB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgIT09ICduby1zdG9yZScgJiYgaHR0cFJlcXVlc3QuY2FjaGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnb25seS1pZi1jYWNoZWQnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignb25seSBpZiBjYWNoZWQnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBmb3J3YXJkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yayBmZXRjaFxuICAgIC8vIGdpdmVuIGh0dHBGZXRjaFBhcmFtcywgaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgaXNOZXdDb25uZWN0aW9uRmV0Y2guXG4gICAgY29uc3QgZm9yd2FyZFJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtGZXRjaChcbiAgICAgIGh0dHBGZXRjaFBhcmFtcyxcbiAgICAgIGluY2x1ZGVDcmVkZW50aWFscyxcbiAgICAgIGlzTmV3Q29ubmVjdGlvbkZldGNoXG4gICAgKVxuXG4gICAgLy8gMy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyB1bnNhZmUgYW5kIGZvcndhcmRSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzXG4gICAgLy8gaW4gdGhlIHJhbmdlIDIwMCB0byAzOTksIGluY2x1c2l2ZSwgaW52YWxpZGF0ZSBhcHByb3ByaWF0ZSBzdG9yZWRcbiAgICAvLyByZXNwb25zZXMgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlIFwiSW52YWxpZGF0aW9uXCIgY2hhcHRlciBvZiBIVFRQXG4gICAgLy8gQ2FjaGluZywgYW5kIHNldCBzdG9yZWRSZXNwb25zZSB0byBudWxsLiBbSFRUUC1DQUNISU5HXVxuICAgIGlmIChcbiAgICAgICFzYWZlTWV0aG9kc1NldC5oYXMoaHR0cFJlcXVlc3QubWV0aG9kKSAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPD0gMzk5XG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDQuIElmIHRoZSByZXZhbGlkYXRpbmdGbGFnIGlzIHNldCBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzA0LFxuICAgIC8vIHRoZW46XG4gICAgaWYgKHJldmFsaWRhdGluZ0ZsYWcgJiYgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDUuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZSB0byBmb3J3YXJkUmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGZvcndhcmRSZXNwb25zZVxuXG4gICAgICAvLyAyLiBTdG9yZSBodHRwUmVxdWVzdCBhbmQgZm9yd2FyZFJlc3BvbnNlIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZVxuICAgICAgLy8gXCJTdG9yaW5nIFJlc3BvbnNlcyBpbiBDYWNoZXNcIiBjaGFwdGVyIG9mIEhUVFAgQ2FjaGluZy4gW0hUVFAtQ0FDSElOR11cbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuICB9XG5cbiAgLy8gMTEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gYSBjbG9uZSBvZiBodHRwUmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlc3BvbnNlLnVybExpc3QgPSBbLi4uaHR0cFJlcXVlc3QudXJsTGlzdF1cblxuICAvLyAxMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5c1xuICAvLyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScsIHRydWUpKSB7XG4gICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXF1ZXN0LWluY2x1ZGVzLWNyZWRlbnRpYWxzIHRvIGluY2x1ZGVDcmVkZW50aWFscy5cbiAgcmVzcG9uc2UucmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHMgPSBpbmNsdWRlQ3JlZGVudGlhbHNcblxuICAvLyAxNC4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MDEsIGh0dHBSZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBub3RcbiAgLy8gXCJjb3JzXCIsIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCBhbmQgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50XG4gIC8vIHNldHRpbmdzIG9iamVjdCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwNywgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA3KSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgfVxuXG4gICAgLy8gMi4gPz8/XG5cbiAgICAvLyAzLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gNC4gUHJvbXB0IHRoZSBlbmQgdXNlciBhcyBhcHByb3ByaWF0ZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgYW5kIHN0b3JlXG4gICAgLy8gdGhlIHJlc3VsdCBhcyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LiBbSFRUUC1BVVRIXVxuICAgIC8vIFRPRE86IEludm9rZSBzb21lIGtpbmQgb2YgY2FsbGJhY2s/XG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlblxuICAgIC8vIGZldGNoUGFyYW1zLlxuICAgIC8vIFRPRE9cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncHJveHkgYXV0aGVudGljYXRpb24gcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gMTYuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gIGlmIChcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQyMVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDIxICYmXG4gICAgLy8gaXNOZXdDb25uZWN0aW9uRmV0Y2ggaXMgZmFsc2VcbiAgICAhaXNOZXdDb25uZWN0aW9uRmV0Y2ggJiZcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwsIG9yIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBub24tbnVsbFxuICAgIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCB8fCByZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICkge1xuICAgIC8vIHRoZW46XG5cbiAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGVcbiAgICAvLyBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcywgaXNBdXRoZW50aWNhdGlvbkZldGNoLCBhbmQgdHJ1ZS5cblxuICAgIC8vIFRPRE8gKHNwZWMpOiBUaGUgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBidXQgd2UgbmVlZCB0byBjYW5jZWxcbiAgICAvLyB0aGUgYWN0aXZlIHJlc3BvbnNlIGJlZm9yZSB3ZSBjYW4gc3RhcnQgYSBuZXcgb25lLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyOTNcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKFxuICAgICAgZmV0Y2hQYXJhbXMsXG4gICAgICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsXG4gICAgICB0cnVlXG4gICAgKVxuICB9XG5cbiAgLy8gMTcuIElmIGlzQXV0aGVudGljYXRpb25GZXRjaCBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBhdXRoZW50aWNhdGlvbiBlbnRyeVxuICBpZiAoaXNBdXRoZW50aWNhdGlvbkZldGNoKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTguIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaW5jbHVkZUNyZWRlbnRpYWxzID0gZmFsc2UsXG4gIGZvcmNlTmV3Q29ubmVjdGlvbiA9IGZhbHNlXG4pIHtcbiAgYXNzZXJ0KCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gfHwgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3llZClcblxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gPSB7XG4gICAgYWJvcnQ6IG51bGwsXG4gICAgZGVzdHJveWVkOiBmYWxzZSxcbiAgICBkZXN0cm95IChlcnIsIGFib3J0ID0gdHJ1ZSkge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgaWYgKGFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA0LiBMZXQgaHR0cENhY2hlIGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGUgcGFydGl0aW9uLFxuICAvLyBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPOiBjYWNoZVxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNS4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICByZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gNi4gTGV0IG5ldHdvcmtQYXJ0aXRpb25LZXkgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgbmV0d29ya1xuICAvLyBwYXJ0aXRpb24ga2V5IGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA3LiBMZXQgbmV3Q29ubmVjdGlvbiBiZSBcInllc1wiIGlmIGZvcmNlTmV3Q29ubmVjdGlvbiBpcyB0cnVlOyBvdGhlcndpc2VcbiAgLy8gXCJub1wiLlxuICBjb25zdCBuZXdDb25uZWN0aW9uID0gZm9yY2VOZXdDb25uZWN0aW9uID8gJ3llcycgOiAnbm8nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvLyA4LiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgbW9kZTpcbiAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLFxuICAgIC8vIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgIC8vIFRPRE9cbiAgfSBlbHNlIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIGNvbm5lY3Rpb24sIGdpdmVuXG4gICAgLy8gbmV0d29ya1BhcnRpdGlvbktleSwgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbixcbiAgICAvLyBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBmb3JjZU5ld0Nvbm5lY3Rpb24uXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gOS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIGNvbm5lY3Rpb24gaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgY2FsbGluZyBjbGFtcCBhbmQgY29hcnNlbiBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXNcbiAgLy8gICAgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSwgYW5kIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyAgICBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cblxuICAvLyAgICAzLiBJZiBjb25uZWN0aW9uIGlzIG5vdCBhbiBIVFRQLzIgY29ubmVjdGlvbiwgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gICAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIGFwcGVuZCAoYFRyYW5zZmVyLUVuY29kaW5nYCxcbiAgLy8gICAgYGNodW5rZWRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICA0LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gICAgY2FwYWJpbGl0eS5cblxuICAvLyAgICA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBtYWtpbmcgYW4gSFRUUCByZXF1ZXN0IG92ZXIgY29ubmVjdGlvblxuICAvLyAgICB1c2luZyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBjYXZlYXRzOlxuXG4gIC8vICAgICAgICAtIEZvbGxvdyB0aGUgcmVsZXZhbnQgcmVxdWlyZW1lbnRzIGZyb20gSFRUUC4gW0hUVFBdIFtIVFRQLVNFTUFOVElDU11cbiAgLy8gICAgICAgIFtIVFRQLUNPTkRdIFtIVFRQLUNBQ0hJTkddIFtIVFRQLUFVVEhdXG5cbiAgLy8gICAgICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLFxuICAvLyAgICAgICAgdGhlbiB0aGUgdXNlciBhZ2VudCBtYXkgaGF2ZSBhIGJ1ZmZlciBvZiB1cCB0byA2NCBraWJpYnl0ZXMgYW5kIHN0b3JlXG4gIC8vICAgICAgICBhIHBhcnQgb2YgcmVxdWVzdFx1MjAxOXMgYm9keSBpbiB0aGF0IGJ1ZmZlci4gSWYgdGhlIHVzZXIgYWdlbnQgcmVhZHMgZnJvbVxuICAvLyAgICAgICAgcmVxdWVzdFx1MjAxOXMgYm9keSBiZXlvbmQgdGhhdCBidWZmZXJcdTIwMTlzIHNpemUgYW5kIHRoZSB1c2VyIGFnZW50IG5lZWRzIHRvXG4gIC8vICAgICAgICByZXNlbmQgcmVxdWVzdCwgdGhlbiBpbnN0ZWFkIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgICAgIC0gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgICAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSxcbiAgLy8gICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB1c2VyIGFnZW50XHUyMDE5cyBIVFRQIHBhcnNlciByZWNlaXZlcyB0aGUgZmlyc3QgYnl0ZVxuICAvLyAgICAgICAgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXIgYnl0ZXMgZm9yIEhUVFAvMiBvciByZXNwb25zZSBzdGF0dXNcbiAgLy8gICAgICAgIGxpbmUgZm9yIEhUVFAvMS54KS5cblxuICAvLyAgICAgICAgLSBXYWl0IHVudGlsIGFsbCB0aGUgaGVhZGVycyBhcmUgdHJhbnNtaXR0ZWQuXG5cbiAgLy8gICAgICAgIC0gQW55IHJlc3BvbnNlcyB3aG9zZSBzdGF0dXMgaXMgaW4gdGhlIHJhbmdlIDEwMCB0byAxOTksIGluY2x1c2l2ZSxcbiAgLy8gICAgICAgIGFuZCBpcyBub3QgMTAxLCBhcmUgdG8gYmUgaWdub3JlZCwgZXhjZXB0IGZvciB0aGUgcHVycG9zZXMgb2Ygc2V0dGluZ1xuICAvLyAgICAgICAgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIGFib3ZlLlxuXG4gIC8vICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFRyYW5zZmVyLUVuY29kaW5nYC9gY2h1bmtlZGAgYW5kXG4gIC8vICAgIHJlc3BvbnNlIGlzIHRyYW5zZmVycmVkIHZpYSBIVFRQLzEuMCBvciBvbGRlciwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vICAgIGVycm9yLlxuXG4gIC8vICAgIC0gSWYgdGhlIEhUVFAgcmVxdWVzdCByZXN1bHRzIGluIGEgVExTIGNsaWVudCBjZXJ0aWZpY2F0ZSBkaWFsb2csIHRoZW46XG5cbiAgLy8gICAgICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QsIG1ha2UgdGhlXG4gIC8vICAgICAgICBkaWFsb2cgYXZhaWxhYmxlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cblxuICAvLyAgICAgICAgMi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vIFRvIHRyYW5zbWl0IHJlcXVlc3RcdTIwMTlzIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuICBsZXQgcmVxdWVzdEJvZHkgPSBudWxsXG4gIC8vIDEuIElmIGJvZHkgaXMgbnVsbCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpc1xuICAvLyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdFxuICAvLyBlbmQtb2YtYm9keSBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KCkpXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJvZHkgaXMgbm9uLW51bGw6XG5cbiAgICAvLyAgICAxLiBMZXQgcHJvY2Vzc0JvZHlDaHVuayBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUNodW5rID0gYXN5bmMgZnVuY3Rpb24gKiAoYnl0ZXMpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOiB0cmFuc21pdCBieXRlcy5cbiAgICAgIHlpZWxkIGJ5dGVzXG5cbiAgICAgIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBpcyBub24tbnVsbCwgdGhlbiBydW5cbiAgICAgIC8vIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBnaXZlbiBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGg/LihieXRlcy5ieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBwcm9jZXNzRW5kT2ZCb2R5IGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsXG4gICAgICAvLyB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5LlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBnaXZlbiBlIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZSkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBlIGlzIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbiwgdGhlbiBhYm9ydCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlci5cbiAgICAgIGlmIChlLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSW5jcmVtZW50YWxseSByZWFkIHJlcXVlc3RcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHlDaHVuaywgcHJvY2Vzc0VuZE9mQm9keSxcbiAgICAvLyBwcm9jZXNzQm9keUVycm9yLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgcmVxdWVzdEJvZHkgPSAoYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGJ5dGVzIG9mIHJlcXVlc3QuYm9keS5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHByb2Nlc3NCb2R5Q2h1bmsoYnl0ZXMpXG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0VuZE9mQm9keSgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzb2NrZXQgaXMgb25seSBwcm92aWRlZCBmb3Igd2Vic29ja2V0c1xuICAgIGNvbnN0IHsgYm9keSwgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0gPSBhd2FpdCBkaXNwYXRjaCh7IGJvZHk6IHJlcXVlc3RCb2R5IH0pXG5cbiAgICBpZiAoc29ja2V0KSB7XG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IGJvZHlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCA9ICgpID0+IGl0ZXJhdG9yLm5leHQoKVxuXG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QgfSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDEwLiBJZiBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAvLyAxLiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICAgIC8vIDIuIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zLCBlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoZXJyKVxuICB9XG5cbiAgLy8gMTEuIExldCBwdWxsQWxnb3JpdGhtIGJlIGFuIGFjdGlvbiB0aGF0IHJlc3VtZXMgdGhlIG9uZ29pbmcgZmV0Y2hcbiAgLy8gaWYgaXQgaXMgc3VzcGVuZGVkLlxuICBjb25zdCBwdWxsQWxnb3JpdGhtID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lKClcbiAgfVxuXG4gIC8vIDEyLiBMZXQgY2FuY2VsQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFib3J0cyBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gY29udHJvbGxlciB3aXRoIHJlYXNvbiwgZ2l2ZW4gcmVhc29uLlxuICBjb25zdCBjYW5jZWxBbGdvcml0aG0gPSAocmVhc29uKSA9PiB7XG4gICAgLy8gSWYgdGhlIGFib3J0ZWQgZmV0Y2ggd2FzIGFscmVhZHkgdGVybWluYXRlZCwgdGhlbiB3ZSBkbyBub3RcbiAgICAvLyBuZWVkIHRvIGRvIGFueXRoaW5nLlxuICAgIGlmICghaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KHJlYXNvbilcbiAgICB9XG4gIH1cblxuICAvLyAxMy4gTGV0IGhpZ2hXYXRlck1hcmsgYmUgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4gbnVtYmVyLCBjaG9zZW4gYnlcbiAgLy8gdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNC4gTGV0IHNpemVBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWNjZXB0cyBhIGNodW5rIG9iamVjdFxuICAvLyBhbmQgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiwgbm9uLWluZmluaXRlIG51bWJlciwgY2hvc2VuIGJ5IHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIExldCBzdHJlYW0gYmUgYSBuZXcgUmVhZGFibGVTdHJlYW0uXG4gIC8vIDE2LiBTZXQgdXAgc3RyZWFtIHdpdGggYnl0ZSByZWFkaW5nIHN1cHBvcnQgd2l0aCBwdWxsQWxnb3JpdGhtIHNldCB0byBwdWxsQWxnb3JpdGhtLFxuICAvLyAgICAgY2FuY2VsQWxnb3JpdGhtIHNldCB0byBjYW5jZWxBbGdvcml0aG0uXG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoY29udHJvbGxlcikge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBhd2FpdCBwdWxsQWxnb3JpdGhtKGNvbnRyb2xsZXIpXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgY2FuY2VsQWxnb3JpdGhtKHJlYXNvbilcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnYnl0ZXMnXG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0sIHNvdXJjZTogbnVsbCwgbGVuZ3RoOiBudWxsIH1cblxuICAvLyAgICAyLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzXG4gIC8vICAgIG5vdCBcIm5vLXN0b3JlXCIsIHRoZW4gdXBkYXRlIHJlc3BvbnNlIGluIGh0dHBDYWNoZSBmb3IgcmVxdWVzdC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vICAgIDMuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlIGFuZCB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZFxuICAvLyAgICB0byBibG9jayBjb29raWVzIGZvciByZXF1ZXN0IChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW4gcnVuIHRoZVxuICAvLyAgICBcInNldC1jb29raWUtc3RyaW5nXCIgcGFyc2luZyBhbGdvcml0aG0gKHNlZSBzZWN0aW9uIDUuMiBvZiBbQ09PS0lFU10pIG9uXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiBlYWNoIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAvLyAgICBgU2V0LUNvb2tpZWAgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LCBpZiBhbnksIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vIDE4LiBJZiBhYm9ydGVkLCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTkuIFJ1biB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbDpcblxuICAvLyAgICAxLiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkOlxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZCA9IG9uQWJvcnRlZFxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgb25BYm9ydGVkKVxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSA9IGFzeW5jICgpID0+IHtcbiAgICAvLyAxLiBXaGlsZSB0cnVlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIDEtMy4gU2VlIG9uRGF0YS4uLlxuXG4gICAgICAvLyA0LiBTZXQgYnl0ZXMgdG8gdGhlIHJlc3VsdCBvZiBoYW5kbGluZyBjb250ZW50IGNvZGluZ3MgZ2l2ZW5cbiAgICAgIC8vIGNvZGluZ3MgYW5kIGJ5dGVzLlxuICAgICAgbGV0IGJ5dGVzXG4gICAgICBsZXQgaXNGYWlsdXJlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQoKVxuXG4gICAgICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzID0gZG9uZSA/IHVuZGVmaW5lZCA6IHZhbHVlXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgJiYgIXRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplKSB7XG4gICAgICAgICAgLy8gemxpYiBkb2Vzbid0IGxpa2UgZW1wdHkgc3RyZWFtcy5cbiAgICAgICAgICBieXRlcyA9IHVuZGVmaW5lZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5dGVzID0gZXJyXG5cbiAgICAgICAgICAvLyBlcnIgbWF5IGJlIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgcmVhZGFibGVzdHJlYW0uY2FuY2VsLFxuICAgICAgICAgIC8vIHdoaWNoIG1pZ2h0IG5vdCBiZSBhbiBlcnJvci4gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMDlcbiAgICAgICAgICBpc0ZhaWx1cmUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGUgYnl0ZXMgdHJhbnNtaXNzaW9uIGZvciByZXNwb25zZVx1MjAxOXMgbWVzc2FnZVxuICAgICAgICAvLyBib2R5IGlzIGRvbmUgbm9ybWFsbHkgYW5kIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBjbG9zZVxuICAgICAgICAvLyBzdHJlYW0sIGZpbmFsaXplIHJlc3BvbnNlIGZvciBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UsIGFuZFxuICAgICAgICAvLyBhYm9ydCB0aGVzZSBpbi1wYXJhbGxlbCBzdGVwcy5cbiAgICAgICAgcmVhZGFibGVTdHJlYW1DbG9zZShmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIpXG5cbiAgICAgICAgZmluYWxpemVSZXNwb25zZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIEluY3JlYXNlIHRpbWluZ0luZm9cdTIwMTlzIGRlY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICB0aW1pbmdJbmZvLmRlY29kZWRCb2R5U2l6ZSArPSBieXRlcz8uYnl0ZUxlbmd0aCA/PyAwXG5cbiAgICAgIC8vIDYuIElmIGJ5dGVzIGlzIGZhaWx1cmUsIHRoZW4gdGVybWluYXRlIGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGlzRmFpbHVyZSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShieXRlcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDcuIEVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgYnl0ZXNcbiAgICAgIC8vIGludG8gc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpXG4gICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVucXVldWUoYnVmZmVyKVxuICAgICAgfVxuXG4gICAgICAvLyA4LiBJZiBzdHJlYW0gaXMgZXJyb3JlZCwgdGhlbiB0ZXJtaW5hdGUgdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gOS4gSWYgc3RyZWFtIGRvZXNuXHUyMDE5dCBuZWVkIG1vcmUgZGF0YSBhc2sgdGhlIHVzZXIgYWdlbnQgdG8gc3VzcGVuZFxuICAgICAgLy8gdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplIDw9IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gICAgMi4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgZnVuY3Rpb24gb25BYm9ydGVkIChyZWFzb24pIHtcbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZy5cbiAgICAgIHJlc3BvbnNlLmFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIElmIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciBzdHJlYW0gd2l0aCB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5c1xuICAgICAgLy8gICAgY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kIGFuXG4gICAgICAvLyAgICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJlYWxtLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IoXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHN0cmVhbSBpcyByZWFkYWJsZSwgZXJyb3Igc3RyZWFtIHdpdGggYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihuZXcgVHlwZUVycm9yKCd0ZXJtaW5hdGVkJywge1xuICAgICAgICAgIGNhdXNlOiBpc0Vycm9yTGlrZShyZWFzb24pID8gcmVhc29uIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyA1LiBPdGhlcndpc2UsIHRoZSB1c2VyIGFnZW50IHNob3VsZCBjbG9zZSBjb25uZWN0aW9uIHVubGVzcyBpdCB3b3VsZCBiZSBiYWQgZm9yIHBlcmZvcm1hbmNlIHRvIGRvIHNvLlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgfVxuXG4gIC8vIDIwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoICh7IGJvZHkgfSkge1xuICAgIGNvbnN0IHVybCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uJykuQWdlbnR9ICovXG4gICAgY29uc3QgYWdlbnQgPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXJcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBhZ2VudC5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCxcbiAgICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICBib2R5OiBhZ2VudC5pc01vY2tBY3RpdmUgPyByZXF1ZXN0LmJvZHkgJiYgKHJlcXVlc3QuYm9keS5zb3VyY2UgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSkgOiBib2R5LFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnNMaXN0LmVudHJpZXMsXG4gICAgICAgIG1heFJlZGlyZWN0aW9uczogMCxcbiAgICAgICAgdXBncmFkZTogcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JyA/ICd3ZWJzb2NrZXQnIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBib2R5OiBudWxsLFxuICAgICAgICBhYm9ydDogbnVsbCxcblxuICAgICAgICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCBjb25uZWN0aW9uIGhlcmU/XG4gICAgICAgICAgY29uc3QgeyBjb25uZWN0aW9uIH0gPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW5cbiAgICAgICAgICAvLyBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXMgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnRcbiAgICAgICAgICAvLyB0aW1lLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgICAgICAgIC8vIFRPRE86IGltcGxlbWVudCBjb25uZWN0aW9uIHRpbWluZ1xuICAgICAgICAgIHRpbWluZ0luZm8uZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbyA9IGNsYW1wQW5kQ29hcnNlbkNvbm5lY3Rpb25UaW1pbmdJbmZvKHVuZGVmaW5lZCwgdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUsIGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBhYm9ydChuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBhYm9ydClcbiAgICAgICAgICAgIHRoaXMuYWJvcnQgPSBjb25uZWN0aW9uLmFib3J0ID0gYWJvcnRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuXG4gICAgICAgICAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgICAgICAgIHRpbWluZ0luZm8uZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uUmVzcG9uc2VTdGFydGVkICgpIHtcbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnRcbiAgICAgICAgICAvLyB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICAgICAgICAgLy8gdXNlciBhZ2VudFx1MjAxOXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXJcbiAgICAgICAgICAvLyBieXRlcyBmb3IgSFRUUC8yIG9yIHJlc3BvbnNlIHN0YXR1cyBsaW5lIGZvciBIVFRQLzEueCkuXG4gICAgICAgICAgdGltaW5nSW5mby5maW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzIDwgMjAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbG9jYXRpb24gPSAnJ1xuXG4gICAgICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdIZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZShyYXdIZWFkZXJzW2ldKSwgcmF3SGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ2xhdGluMScpLCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBsb2NhdGlvbiA9IGhlYWRlcnNMaXN0LmdldCgnbG9jYXRpb24nLCB0cnVlKVxuXG4gICAgICAgICAgdGhpcy5ib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVhZDogcmVzdW1lIH0pXG5cbiAgICAgICAgICBjb25zdCBkZWNvZGVycyA9IFtdXG5cbiAgICAgICAgICBjb25zdCB3aWxsRm9sbG93ID0gbG9jYXRpb24gJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycgJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgY29uc3QgY29udGVudEVuY29kaW5nID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LWVuY29kaW5nJywgdHJ1ZSlcbiAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgICAgICAgICAgY29uc3QgY29kaW5ncyA9IGNvbnRlbnRFbmNvZGluZyA/IGNvbnRlbnRFbmNvZGluZy50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykgOiBbXVxuXG4gICAgICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbnRlbnQtZW5jb2RpbmdzIHRvIHByZXZlbnQgcmVzb3VyY2UgZXhoYXVzdGlvbi5cbiAgICAgICAgICAgIC8vIENWRSBmaXggc2ltaWxhciB0byB1cmxsaWIzIChHSFNBLWdtNjIteHYyai00dzUzKSBhbmQgY3VybCAoQ1ZFLTIwMjItMzIyMDYpLlxuICAgICAgICAgICAgY29uc3QgbWF4Q29udGVudEVuY29kaW5ncyA9IDVcbiAgICAgICAgICAgIGlmIChjb2RpbmdzLmxlbmd0aCA+IG1heENvbnRlbnRFbmNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdG9vIG1hbnkgY29udGVudC1lbmNvZGluZ3MgaW4gcmVzcG9uc2U6ICR7Y29kaW5ncy5sZW5ndGh9LCBtYXhpbXVtIGFsbG93ZWQgaXMgJHttYXhDb250ZW50RW5jb2RpbmdzfWApKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY29kaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICBjb25zdCBjb2RpbmcgPSBjb2RpbmdzW2ldLnRyaW0oKVxuICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMi5odG1sI3NlY3Rpb24tNy4yXG4gICAgICAgICAgICAgIGlmIChjb2RpbmcgPT09ICd4LWd6aXAnIHx8IGNvZGluZyA9PT0gJ2d6aXAnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUd1bnppcCh7XG4gICAgICAgICAgICAgICAgICAvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcbiAgICAgICAgICAgICAgICAgIC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgLy8gYnkgY29tbW9uIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cbiAgICAgICAgICAgICAgICAgIGZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnZGVmbGF0ZScpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKGNyZWF0ZUluZmxhdGUoe1xuICAgICAgICAgICAgICAgICAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0hcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyh7XG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuQlJPVExJX09QRVJBVElPTl9GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5CUk9UTElfT1BFUkFUSU9OX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMubGVuZ3RoID0gMFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBvbkVycm9yID0gdGhpcy5vbkVycm9yLmJpbmQodGhpcylcblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0LFxuICAgICAgICAgICAgYm9keTogZGVjb2RlcnMubGVuZ3RoXG4gICAgICAgICAgICAgID8gcGlwZWxpbmUodGhpcy5ib2R5LCAuLi5kZWNvZGVycywgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgICAgICA6IHRoaXMuYm9keS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRGF0YSAoY2h1bmspIHtcbiAgICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAxLiBJZiBvbmUgb3IgbW9yZSBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgZnJvbSByZXNwb25zZVx1MjAxOXNcbiAgICAgICAgICAvLyBtZXNzYWdlIGJvZHksIHRoZW46XG5cbiAgICAgICAgICAvLyAgMS4gTGV0IGJ5dGVzIGJlIHRoZSB0cmFuc21pdHRlZCBieXRlcy5cbiAgICAgICAgICBjb25zdCBieXRlcyA9IGNodW5rXG5cbiAgICAgICAgICAvLyAgMi4gTGV0IGNvZGluZ3MgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgICAgIC8vICBnaXZlbiBgQ29udGVudC1FbmNvZGluZ2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgICAgICAvLyAgU2VlIHB1bGxBbGdvcml0aG0uXG5cbiAgICAgICAgICAvLyAgMy4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZW5jb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgICAgICB0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSArPSBieXRlcy5ieXRlTGVuZ3RoXG5cbiAgICAgICAgICAvLyAgNC4gU2VlIHB1bGxBbGdvcml0aG0uLi5cblxuICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkucHVzaChieXRlcylcbiAgICAgICAgfSxcblxuICAgICAgICBvbkNvbXBsZXRlICgpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5ib2R5LnB1c2gobnVsbClcbiAgICAgICAgfSxcblxuICAgICAgICBvbkVycm9yIChlcnJvcikge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5Py5kZXN0cm95KGVycm9yKVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyb3IpXG5cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25VcGdyYWRlIChzdGF0dXMsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09IDEwMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdIZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZShyYXdIZWFkZXJzW2ldKSwgcmF3SGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ2xhdGluMScpLCB0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdCxcbiAgICAgICAgICAgIHNvY2tldFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmV0Y2gsXG4gIEZldGNoLFxuICBmZXRjaGluZyxcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuXG5jb25zdCBrU3RhdGUgPSBTeW1ib2woJ1Byb2dyZXNzRXZlbnQgc3RhdGUnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNwcm9ncmVzc2V2ZW50XG4gKi9cbmNsYXNzIFByb2dyZXNzRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUsICdQcm9ncmVzc0V2ZW50IGNvbnN0cnVjdG9yJywgJ3R5cGUnKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVuY29kaW5nLWdldFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBsYWJlbFxuICovXG5mdW5jdGlvbiBnZXRFbmNvZGluZyAobGFiZWwpIHtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAvLyAyLiBJZiBsYWJlbCBpcyBhbiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBhbnkgb2YgdGhlXG4gIC8vICAgIGxhYmVscyBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgY29ycmVzcG9uZGluZyBlbmNvZGluZzsgb3RoZXJ3aXNlIHJldHVybiBmYWlsdXJlLlxuICBzd2l0Y2ggKGxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAndW5pY29kZS0xLTEtdXRmLTgnOlxuICAgIGNhc2UgJ3VuaWNvZGUxMXV0ZjgnOlxuICAgIGNhc2UgJ3VuaWNvZGUyMHV0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd4LXVuaWNvZGUyMHV0ZjgnOlxuICAgICAgcmV0dXJuICdVVEYtOCdcbiAgICBjYXNlICc4NjYnOlxuICAgIGNhc2UgJ2NwODY2JzpcbiAgICBjYXNlICdjc2libTg2Nic6XG4gICAgY2FzZSAnaWJtODY2JzpcbiAgICAgIHJldHVybiAnSUJNODY2J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4yJzpcbiAgICBjYXNlICdpc28tODg1OS0yJzpcbiAgICBjYXNlICdpc28taXItMTAxJzpcbiAgICBjYXNlICdpc284ODU5LTInOlxuICAgIGNhc2UgJ2lzbzg4NTkyJzpcbiAgICBjYXNlICdpc29fODg1OS0yJzpcbiAgICBjYXNlICdpc29fODg1OS0yOjE5ODcnOlxuICAgIGNhc2UgJ2wyJzpcbiAgICBjYXNlICdsYXRpbjInOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0yJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4zJzpcbiAgICBjYXNlICdpc28tODg1OS0zJzpcbiAgICBjYXNlICdpc28taXItMTA5JzpcbiAgICBjYXNlICdpc284ODU5LTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkzJzpcbiAgICBjYXNlICdpc29fODg1OS0zJzpcbiAgICBjYXNlICdpc29fODg1OS0zOjE5ODgnOlxuICAgIGNhc2UgJ2wzJzpcbiAgICBjYXNlICdsYXRpbjMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0zJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW40JzpcbiAgICBjYXNlICdpc28tODg1OS00JzpcbiAgICBjYXNlICdpc28taXItMTEwJzpcbiAgICBjYXNlICdpc284ODU5LTQnOlxuICAgIGNhc2UgJ2lzbzg4NTk0JzpcbiAgICBjYXNlICdpc29fODg1OS00JzpcbiAgICBjYXNlICdpc29fODg1OS00OjE5ODgnOlxuICAgIGNhc2UgJ2w0JzpcbiAgICBjYXNlICdsYXRpbjQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS00J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5jeXJpbGxpYyc6XG4gICAgY2FzZSAnY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTUnOlxuICAgIGNhc2UgJ2lzby1pci0xNDQnOlxuICAgIGNhc2UgJ2lzbzg4NTktNSc6XG4gICAgY2FzZSAnaXNvODg1OTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTU6MTk4OCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTUnXG4gICAgY2FzZSAnYXJhYmljJzpcbiAgICBjYXNlICdhc21vLTcwOCc6XG4gICAgY2FzZSAnY3Npc284ODU5NmUnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZpJzpcbiAgICBjYXNlICdjc2lzb2xhdGluYXJhYmljJzpcbiAgICBjYXNlICdlY21hLTExNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNic6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1lJzpcbiAgICBjYXNlICdpc28tODg1OS02LWknOlxuICAgIGNhc2UgJ2lzby1pci0xMjcnOlxuICAgIGNhc2UgJ2lzbzg4NTktNic6XG4gICAgY2FzZSAnaXNvODg1OTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTY6MTk4Nyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTYnXG4gICAgY2FzZSAnY3Npc29sYXRpbmdyZWVrJzpcbiAgICBjYXNlICdlY21hLTExOCc6XG4gICAgY2FzZSAnZWxvdF85MjgnOlxuICAgIGNhc2UgJ2dyZWVrJzpcbiAgICBjYXNlICdncmVlazgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTcnOlxuICAgIGNhc2UgJ2lzby1pci0xMjYnOlxuICAgIGNhc2UgJ2lzbzg4NTktNyc6XG4gICAgY2FzZSAnaXNvODg1OTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTc6MTk4Nyc6XG4gICAgY2FzZSAnc3VuX2V1X2dyZWVrJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNydcbiAgICBjYXNlICdjc2lzbzg4NTk4ZSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmhlYnJldyc6XG4gICAgY2FzZSAnaGVicmV3JzpcbiAgICBjYXNlICdpc28tODg1OS04JzpcbiAgICBjYXNlICdpc28tODg1OS04LWUnOlxuICAgIGNhc2UgJ2lzby1pci0xMzgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOCc6XG4gICAgY2FzZSAnaXNvODg1OTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTg6MTk4OCc6XG4gICAgY2FzZSAndmlzdWFsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOCdcbiAgICBjYXNlICdjc2lzbzg4NTk4aSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1pJzpcbiAgICBjYXNlICdsb2dpY2FsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOC1JJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW42JzpcbiAgICBjYXNlICdpc28tODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvLWlyLTE1Nyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvODg1OTEwJzpcbiAgICBjYXNlICdsNic6XG4gICAgY2FzZSAnbGF0aW42JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTAnXG4gICAgY2FzZSAnaXNvLTg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEzJ1xuICAgIGNhc2UgJ2lzby04ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5MTQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNCdcbiAgICBjYXNlICdjc2lzb2xhdGluOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMTUnOlxuICAgIGNhc2UgJ2w5JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTUnXG4gICAgY2FzZSAnaXNvLTg4NTktMTYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNidcbiAgICBjYXNlICdjc2tvaThyJzpcbiAgICBjYXNlICdrb2knOlxuICAgIGNhc2UgJ2tvaTgnOlxuICAgIGNhc2UgJ2tvaTgtcic6XG4gICAgY2FzZSAna29pOF9yJzpcbiAgICAgIHJldHVybiAnS09JOC1SJ1xuICAgIGNhc2UgJ2tvaTgtcnUnOlxuICAgIGNhc2UgJ2tvaTgtdSc6XG4gICAgICByZXR1cm4gJ0tPSTgtVSdcbiAgICBjYXNlICdjc21hY2ludG9zaCc6XG4gICAgY2FzZSAnbWFjJzpcbiAgICBjYXNlICdtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ3gtbWFjLXJvbWFuJzpcbiAgICAgIHJldHVybiAnbWFjaW50b3NoJ1xuICAgIGNhc2UgJ2lzby04ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5MTEnOlxuICAgIGNhc2UgJ3Rpcy02MjAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtODc0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy04NzQnXG4gICAgY2FzZSAnY3AxMjUwJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTAnOlxuICAgIGNhc2UgJ3gtY3AxMjUwJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUwJ1xuICAgIGNhc2UgJ2NwMTI1MSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUxJzpcbiAgICBjYXNlICd4LWNwMTI1MSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MSdcbiAgICBjYXNlICdhbnNpX3gzLjQtMTk2OCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2NwMTI1Mic6XG4gICAgY2FzZSAnY3A4MTknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW4xJzpcbiAgICBjYXNlICdpYm04MTknOlxuICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgIGNhc2UgJ2lzby1pci0xMDAnOlxuICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgY2FzZSAnaXNvODg1OTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgY2FzZSAnbDEnOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAndXMtYXNjaWknOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTInXG4gICAgY2FzZSAnY3AxMjUzJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTMnOlxuICAgIGNhc2UgJ3gtY3AxMjUzJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUzJ1xuICAgIGNhc2UgJ2NwMTI1NCc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTknOlxuICAgIGNhc2UgJ2lzby1pci0xNDgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOSc6XG4gICAgY2FzZSAnaXNvODg1OTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTk6MTk4OSc6XG4gICAgY2FzZSAnbDUnOlxuICAgIGNhc2UgJ2xhdGluNSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU0JzpcbiAgICBjYXNlICd4LWNwMTI1NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NCdcbiAgICBjYXNlICdjcDEyNTUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NSc6XG4gICAgY2FzZSAneC1jcDEyNTUnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTUnXG4gICAgY2FzZSAnY3AxMjU2JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTYnOlxuICAgIGNhc2UgJ3gtY3AxMjU2JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU2J1xuICAgIGNhc2UgJ2NwMTI1Nyc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU3JzpcbiAgICBjYXNlICd4LWNwMTI1Nyc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NydcbiAgICBjYXNlICdjcDEyNTgnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1OCc6XG4gICAgY2FzZSAneC1jcDEyNTgnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTgnXG4gICAgY2FzZSAneC1tYWMtY3lyaWxsaWMnOlxuICAgIGNhc2UgJ3gtbWFjLXVrcmFpbmlhbic6XG4gICAgICByZXR1cm4gJ3gtbWFjLWN5cmlsbGljJ1xuICAgIGNhc2UgJ2NoaW5lc2UnOlxuICAgIGNhc2UgJ2NzZ2IyMzEyJzpcbiAgICBjYXNlICdjc2lzbzU4Z2IyMzEyODAnOlxuICAgIGNhc2UgJ2diMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMi04MCc6XG4gICAgY2FzZSAnZ2JrJzpcbiAgICBjYXNlICdpc28taXItNTgnOlxuICAgIGNhc2UgJ3gtZ2JrJzpcbiAgICAgIHJldHVybiAnR0JLJ1xuICAgIGNhc2UgJ2diMTgwMzAnOlxuICAgICAgcmV0dXJuICdnYjE4MDMwJ1xuICAgIGNhc2UgJ2JpZzUnOlxuICAgIGNhc2UgJ2JpZzUtaGtzY3MnOlxuICAgIGNhc2UgJ2NuLWJpZzUnOlxuICAgIGNhc2UgJ2NzYmlnNSc6XG4gICAgY2FzZSAneC14LWJpZzUnOlxuICAgICAgcmV0dXJuICdCaWc1J1xuICAgIGNhc2UgJ2NzZXVjcGtkZm10amFwYW5lc2UnOlxuICAgIGNhc2UgJ2V1Yy1qcCc6XG4gICAgY2FzZSAneC1ldWMtanAnOlxuICAgICAgcmV0dXJuICdFVUMtSlAnXG4gICAgY2FzZSAnY3Npc28yMDIyanAnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWpwJzpcbiAgICAgIHJldHVybiAnSVNPLTIwMjItSlAnXG4gICAgY2FzZSAnY3NzaGlmdGppcyc6XG4gICAgY2FzZSAnbXM5MzInOlxuICAgIGNhc2UgJ21zX2thbmppJzpcbiAgICBjYXNlICdzaGlmdC1qaXMnOlxuICAgIGNhc2UgJ3NoaWZ0X2ppcyc6XG4gICAgY2FzZSAnc2ppcyc6XG4gICAgY2FzZSAnd2luZG93cy0zMWonOlxuICAgIGNhc2UgJ3gtc2ppcyc6XG4gICAgICByZXR1cm4gJ1NoaWZ0X0pJUydcbiAgICBjYXNlICdjc2V1Y2tyJzpcbiAgICBjYXNlICdjc2tzYzU2MDExOTg3JzpcbiAgICBjYXNlICdldWMta3InOlxuICAgIGNhc2UgJ2lzby1pci0xNDknOlxuICAgIGNhc2UgJ2tvcmVhbic6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODcnOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg5JzpcbiAgICBjYXNlICdrc2M1NjAxJzpcbiAgICBjYXNlICdrc2NfNTYwMSc6XG4gICAgY2FzZSAnd2luZG93cy05NDknOlxuICAgICAgcmV0dXJuICdFVUMtS1InXG4gICAgY2FzZSAnY3Npc28yMDIya3InOlxuICAgIGNhc2UgJ2h6LWdiLTIzMTInOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbi1leHQnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWtyJzpcbiAgICBjYXNlICdyZXBsYWNlbWVudCc6XG4gICAgICByZXR1cm4gJ3JlcGxhY2VtZW50J1xuICAgIGNhc2UgJ3VuaWNvZGVmZmZlJzpcbiAgICBjYXNlICd1dGYtMTZiZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICAgIGNhc2UgJ2NzdW5pY29kZSc6XG4gICAgY2FzZSAnaXNvLTEwNjQ2LXVjcy0yJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndW5pY29kZSc6XG4gICAgY2FzZSAndW5pY29kZWZlZmYnOlxuICAgIGNhc2UgJ3V0Zi0xNic6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgICBjYXNlICd4LXVzZXItZGVmaW5lZCc6XG4gICAgICByZXR1cm4gJ3gtdXNlci1kZWZpbmVkJ1xuICAgIGRlZmF1bHQ6IHJldHVybiAnZmFpbHVyZSdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0RW5jb2Rpbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBrU3RhdGUsXG4gIGtFcnJvcixcbiAga1Jlc3VsdCxcbiAga0Fib3J0ZWQsXG4gIGtMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgUHJvZ3Jlc3NFdmVudCB9ID0gcmVxdWlyZSgnLi9wcm9ncmVzc2V2ZW50JylcbmNvbnN0IHsgZ2V0RW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4vZW5jb2RpbmcnKVxuY29uc3QgeyBzZXJpYWxpemVBTWltZVR5cGUsIHBhcnNlTUlNRVR5cGUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJylcbmNvbnN0IHsgYnRvYSB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRPcGVyYXRpb25cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSBmclxuICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiByZWFkT3BlcmF0aW9uIChmciwgYmxvYiwgdHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBcImxvYWRpbmdcIiwgdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3JcbiAgLy8gICAgRE9NRXhjZXB0aW9uLlxuICBpZiAoZnJba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBzdGF0ZScsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gIH1cblxuICAvLyAyLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwibG9hZGluZ1wiLlxuICBmcltrU3RhdGVdID0gJ2xvYWRpbmcnXG5cbiAgLy8gMy4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gbnVsbC5cbiAgZnJba1Jlc3VsdF0gPSBudWxsXG5cbiAgLy8gNC4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBudWxsLlxuICBmcltrRXJyb3JdID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdHJlYW0gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGdldCBzdHJlYW0gb24gYmxvYi5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbX0gKi9cbiAgY29uc3Qgc3RyZWFtID0gYmxvYi5zdHJlYW0oKVxuXG4gIC8vIDYuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZyb20gc3RyZWFtLlxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAvLyA3LiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyA4LiBMZXQgY2h1bmtQcm9taXNlIGJlIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhIGNodW5rIGZyb21cbiAgLy8gICAgc3RyZWFtIHdpdGggcmVhZGVyLlxuICBsZXQgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuXG4gIC8vIDkuIExldCBpc0ZpcnN0Q2h1bmsgYmUgdHJ1ZS5cbiAgbGV0IGlzRmlyc3RDaHVuayA9IHRydWVcblxuICAvLyAxMC4gSW4gcGFyYWxsZWwsIHdoaWxlIHRydWU6XG4gIC8vIE5vdGU6IFwiSW4gcGFyYWxsZWxcIiBqdXN0IG1lYW5zIG5vbi1ibG9ja2luZ1xuICAvLyBOb3RlIDI6IHJlYWRPcGVyYXRpb24gaXRzZWxmIGNhbm5vdCBiZSBhc3luYyBhcyBkb3VibGVcbiAgLy8gcmVhZGluZyB0aGUgYm9keSB3b3VsZCB0aGVuIHJlamVjdCB0aGUgcHJvbWlzZSwgaW5zdGVhZFxuICAvLyBvZiB0aHJvd2luZyBhbiBlcnJvci5cbiAgOyhhc3luYyAoKSA9PiB7XG4gICAgd2hpbGUgKCFmcltrQWJvcnRlZF0pIHtcbiAgICAgIC8vIDEuIFdhaXQgZm9yIGNodW5rUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBjaHVua1Byb21pc2VcblxuICAgICAgICAvLyAyLiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkLCBhbmQgaXNGaXJzdENodW5rIGlzXG4gICAgICAgIC8vICAgIHRydWUsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkXG4gICAgICAgIC8vICAgIGxvYWRzdGFydCBhdCBmci5cbiAgICAgICAgaWYgKGlzRmlyc3RDaHVuayAmJiAhZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2Fkc3RhcnQnLCBmcilcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gU2V0IGlzRmlyc3RDaHVuayB0byBmYWxzZS5cbiAgICAgICAgaXNGaXJzdENodW5rID0gZmFsc2VcblxuICAgICAgICAvLyA0LiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW4gb2JqZWN0IHdob3NlXG4gICAgICAgIC8vICAgIGRvbmUgcHJvcGVydHkgaXMgZmFsc2UgYW5kIHdob3NlIHZhbHVlIHByb3BlcnR5IGlzXG4gICAgICAgIC8vICAgIGEgVWludDhBcnJheSBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcbiAgICAgICAgaWYgKCFkb25lICYmIHR5cGVzLmlzVWludDhBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyAxLiBMZXQgYnMgYmUgdGhlIGJ5dGUgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlXG4gICAgICAgICAgLy8gICAgVWludDhBcnJheSBvYmplY3QuXG5cbiAgICAgICAgICAvLyAyLiBBcHBlbmQgYnMgdG8gYnl0ZXMuXG4gICAgICAgICAgYnl0ZXMucHVzaCh2YWx1ZSlcblxuICAgICAgICAgIC8vIDMuIElmIHJvdWdobHkgNTBtcyBoYXZlIHBhc3NlZCBzaW5jZSB0aGVzZSBzdGVwc1xuICAgICAgICAgIC8vICAgIHdlcmUgbGFzdCBpbnZva2VkLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhXG4gICAgICAgICAgLy8gICAgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHByb2dyZXNzIGF0IGZyLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgRGF0ZS5ub3coKSAtIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA+PSA1MFxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIWZyW2tBYm9ydGVkXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ3Byb2dyZXNzJywgZnIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuIFNldCBjaHVua1Byb21pc2UgdG8gdGhlIHJlc3VsdCBvZiByZWFkaW5nIGFcbiAgICAgICAgICAvLyAgICBjaHVuayBmcm9tIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgICAgICAgICBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG4gICAgICAgIH0gZWxzZSBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuXG4gICAgICAgICAgLy8gICAgb2JqZWN0IHdob3NlIGRvbmUgcHJvcGVydHkgaXMgdHJ1ZSwgcXVldWUgYSB0YXNrXG4gICAgICAgICAgLy8gICAgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAgIC8vIDIuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiBwYWNrYWdlIGRhdGEgZ2l2ZW5cbiAgICAgICAgICAgIC8vICAgIGJ5dGVzLCB0eXBlLCBibG9iXHUyMDE5cyB0eXBlLCBhbmQgZW5jb2RpbmdOYW1lLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFja2FnZURhdGEoYnl0ZXMsIHR5cGUsIGJsb2IudHlwZSwgZW5jb2RpbmdOYW1lKVxuXG4gICAgICAgICAgICAgIC8vIDQuIEVsc2U6XG5cbiAgICAgICAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gcmVzdWx0LlxuICAgICAgICAgICAgICBmcltrUmVzdWx0XSA9IHJlc3VsdFxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgbG9hZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZCcsIGZyKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gMy4gSWYgcGFja2FnZSBkYXRhIHRocmV3IGFuIGV4Y2VwdGlvbiBlcnJvcjpcblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDUuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCBhblxuICAgICAgICAvLyAgICBlcnJvciBlcnJvciwgcXVldWUgYSB0YXNrIHRvIHJ1biB0aGUgZm9sbG93aW5nXG4gICAgICAgIC8vICAgIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgLy8gMi4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgIC8vIDMuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuXG4gICAgICAgICAgLy8gNC4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgZnIuXG4gICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9KSgpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZmlyZS1hLXByb2dyZXNzLWV2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSByZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmlyZUFQcm9ncmVzc0V2ZW50IChlLCByZWFkZXIpIHtcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgZG9lcyBub3QgYnViYmxlLiBlLmJ1YmJsZXMgbXVzdCBiZSBmYWxzZVxuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBpcyBOT1QgY2FuY2VsYWJsZS4gZS5jYW5jZWxhYmxlIG11c3QgYmUgZmFsc2VcbiAgY29uc3QgZXZlbnQgPSBuZXcgUHJvZ3Jlc3NFdmVudChlLCB7XG4gICAgYnViYmxlczogZmFsc2UsXG4gICAgY2FuY2VsYWJsZTogZmFsc2VcbiAgfSlcblxuICByZWFkZXIuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNibG9iLXBhY2thZ2UtZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBtaW1lVHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcGFja2FnZURhdGEgKGJ5dGVzLCB0eXBlLCBtaW1lVHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIEEgQmxvYiBoYXMgYW4gYXNzb2NpYXRlZCBwYWNrYWdlIGRhdGEgYWxnb3JpdGhtLCBnaXZlblxuICAvLyAgICBieXRlcywgYSB0eXBlLCBhIG9wdGlvbmFsIG1pbWVUeXBlLCBhbmQgYSBvcHRpb25hbFxuICAvLyAgICBlbmNvZGluZ05hbWUsIHdoaWNoIHN3aXRjaGVzIG9uIHR5cGUgYW5kIHJ1bnMgdGhlXG4gIC8vICAgIGFzc29jaWF0ZWQgc3RlcHM6XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnRGF0YVVSTCc6IHtcbiAgICAgIC8vIDEuIFJldHVybiBieXRlcyBhcyBhIERhdGFVUkwgW1JGQzIzOTddIHN1YmplY3QgdG9cbiAgICAgIC8vICAgIHRoZSBjb25zaWRlcmF0aW9ucyBiZWxvdzpcbiAgICAgIC8vICAqIFVzZSBtaW1lVHlwZSBhcyBwYXJ0IG9mIHRoZSBEYXRhIFVSTCBpZiBpdCBpc1xuICAgICAgLy8gICAgYXZhaWxhYmxlIGluIGtlZXBpbmcgd2l0aCB0aGUgRGF0YSBVUkxcbiAgICAgIC8vICAgIHNwZWNpZmljYXRpb24gW1JGQzIzOTddLlxuICAgICAgLy8gICogSWYgbWltZVR5cGUgaXMgbm90IGF2YWlsYWJsZSByZXR1cm4gYSBEYXRhIFVSTFxuICAgICAgLy8gICAgd2l0aG91dCBhIG1lZGlhLXR5cGUuIFtSRkMyMzk3XS5cblxuICAgICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3I3NlY3Rpb24tM1xuICAgICAgLy8gZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICAgICAgLy8gbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gICAgICAvLyBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gICAgICAvLyBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICAgICAgbGV0IGRhdGFVUkwgPSAnZGF0YTonXG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpXG5cbiAgICAgIGlmIChwYXJzZWQgIT09ICdmYWlsdXJlJykge1xuICAgICAgICBkYXRhVVJMICs9IHNlcmlhbGl6ZUFNaW1lVHlwZShwYXJzZWQpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gJztiYXNlNjQsJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIud3JpdGUoY2h1bmspKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci5lbmQoKSlcblxuICAgICAgcmV0dXJuIGRhdGFVUkxcbiAgICB9XG4gICAgY2FzZSAnVGV4dCc6IHtcbiAgICAgIC8vIDEuIExldCBlbmNvZGluZyBiZSBmYWlsdXJlXG4gICAgICBsZXQgZW5jb2RpbmcgPSAnZmFpbHVyZSdcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuY29kaW5nTmFtZSBpcyBwcmVzZW50LCBzZXQgZW5jb2RpbmcgdG8gdGhlXG4gICAgICAvLyAgICByZXN1bHQgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIGVuY29kaW5nTmFtZS5cbiAgICAgIGlmIChlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIGFuZCBtaW1lVHlwZSBpcyBwcmVzZW50OlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScgJiYgbWltZVR5cGUpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzZSBhIE1JTUUgdHlwZVxuICAgICAgICAvLyAgICBnaXZlbiBtaW1lVHlwZS5cbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgICAgICAgLy8gMi4gSWYgdHlwZSBpcyBub3QgZmFpbHVyZSwgc2V0IGVuY29kaW5nIHRvIHRoZSByZXN1bHRcbiAgICAgICAgLy8gICAgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIHR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbXCJjaGFyc2V0XCJdLlxuICAgICAgICBpZiAodHlwZSAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyh0eXBlLnBhcmFtZXRlcnMuZ2V0KCdjaGFyc2V0JykpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgdGhlbiBzZXQgZW5jb2RpbmcgdG8gVVRGLTguXG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJykge1xuICAgICAgICBlbmNvZGluZyA9ICdVVEYtOCdcbiAgICAgIH1cblxuICAgICAgLy8gNS4gRGVjb2RlIGJ5dGVzIHVzaW5nIGZhbGxiYWNrIGVuY29kaW5nIGVuY29kaW5nLCBhbmRcbiAgICAgIC8vICAgIHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgcmV0dXJuIGRlY29kZShieXRlcywgZW5jb2RpbmcpXG4gICAgfVxuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzoge1xuICAgICAgLy8gUmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIGNvbnN0IHNlcXVlbmNlID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoYnl0ZXMpXG5cbiAgICAgIHJldHVybiBzZXF1ZW5jZS5idWZmZXJcbiAgICB9XG4gICAgY2FzZSAnQmluYXJ5U3RyaW5nJzoge1xuICAgICAgLy8gUmV0dXJuIGJ5dGVzIGFzIGEgYmluYXJ5IHN0cmluZywgaW4gd2hpY2ggZXZlcnkgYnl0ZVxuICAgICAgLy8gIGlzIHJlcHJlc2VudGVkIGJ5IGEgY29kZSB1bml0IG9mIGVxdWFsIHZhbHVlIFswLi4yNTVdLlxuICAgICAgbGV0IGJpbmFyeVN0cmluZyA9ICcnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICAgIH1cblxuICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIuZW5kKClcblxuICAgICAgcmV0dXJuIGJpbmFyeVN0cmluZ1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2RlY29kZVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGlvUXVldWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICovXG5mdW5jdGlvbiBkZWNvZGUgKGlvUXVldWUsIGVuY29kaW5nKSB7XG4gIGNvbnN0IGJ5dGVzID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoaW9RdWV1ZSlcblxuICAvLyAxLiBMZXQgQk9NRW5jb2RpbmcgYmUgdGhlIHJlc3VsdCBvZiBCT00gc25pZmZpbmcgaW9RdWV1ZS5cbiAgY29uc3QgQk9NRW5jb2RpbmcgPSBCT01TbmlmZmluZyhieXRlcylcblxuICBsZXQgc2xpY2UgPSAwXG5cbiAgLy8gMi4gSWYgQk9NRW5jb2RpbmcgaXMgbm9uLW51bGw6XG4gIGlmIChCT01FbmNvZGluZyAhPT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCBlbmNvZGluZyB0byBCT01FbmNvZGluZy5cbiAgICBlbmNvZGluZyA9IEJPTUVuY29kaW5nXG5cbiAgICAvLyAyLiBSZWFkIHRocmVlIGJ5dGVzIGZyb20gaW9RdWV1ZSwgaWYgQk9NRW5jb2RpbmcgaXNcbiAgICAvLyAgICBVVEYtODsgb3RoZXJ3aXNlIHJlYWQgdHdvIGJ5dGVzLlxuICAgIC8vICAgIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICAgIHNsaWNlID0gQk9NRW5jb2RpbmcgPT09ICdVVEYtOCcgPyAzIDogMlxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgZW5jb2RpbmdcdTIwMTlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuXG4gIGNvbnN0IHNsaWNlZCA9IGJ5dGVzLnNsaWNlKHNsaWNlKVxuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nKS5kZWNvZGUoc2xpY2VkKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JvbS1zbmlmZlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBpb1F1ZXVlXG4gKi9cbmZ1bmN0aW9uIEJPTVNuaWZmaW5nIChpb1F1ZXVlKSB7XG4gIC8vIDEuIExldCBCT00gYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIDMgYnl0ZXMgZnJvbSBpb1F1ZXVlLFxuICAvLyAgICBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuICBjb25zdCBbYSwgYiwgY10gPSBpb1F1ZXVlXG5cbiAgLy8gMi4gRm9yIGVhY2ggb2YgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJlbG93LCBzdGFydGluZyB3aXRoXG4gIC8vICAgIHRoZSBmaXJzdCBvbmUgYW5kIGdvaW5nIGRvd24sIGlmIEJPTSBzdGFydHMgd2l0aCB0aGVcbiAgLy8gICAgYnl0ZXMgZ2l2ZW4gaW4gdGhlIGZpcnN0IGNvbHVtbiwgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGVuY29kaW5nIGdpdmVuIGluIHRoZSBjZWxsIGluIHRoZSBzZWNvbmQgY29sdW1uIG9mIHRoYXRcbiAgLy8gICAgcm93LiBPdGhlcndpc2UsIHJldHVybiBudWxsLlxuICBpZiAoYSA9PT0gMHhFRiAmJiBiID09PSAweEJCICYmIGMgPT09IDB4QkYpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkUgJiYgYiA9PT0gMHhGRikge1xuICAgIHJldHVybiAnVVRGLTE2QkUnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRiAmJiBiID09PSAweEZFKSB7XG4gICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtVaW50OEFycmF5W119IHNlcXVlbmNlc1xuICovXG5mdW5jdGlvbiBjb21iaW5lQnl0ZVNlcXVlbmNlcyAoc2VxdWVuY2VzKSB7XG4gIGNvbnN0IHNpemUgPSBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEgKyBiLmJ5dGVMZW5ndGhcbiAgfSwgMClcblxuICBsZXQgb2Zmc2V0ID0gMFxuXG4gIHJldHVybiBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgYS5zZXQoYiwgb2Zmc2V0KVxuICAgIG9mZnNldCArPSBiLmJ5dGVMZW5ndGhcbiAgICByZXR1cm4gYVxuICB9LCBuZXcgVWludDhBcnJheShzaXplKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyJylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdGaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZycpXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nLCAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JywgJ2VuY29kaW5nJylcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVhZEFzVGV4dChibG9iLCBlbmNvZGluZykgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggVGV4dCBhbmQgZW5jb2RpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnVGV4dCcsIGVuY29kaW5nKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNEYXRhVVJMXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNEYXRhVVJMIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcpXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNEYXRhVVJMKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLCBtdXN0XG4gICAgLy8gaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIERhdGFVUkwuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnRGF0YVVSTCcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLWFib3J0XG4gICAqL1xuICBhYm9ydCAoKSB7XG4gICAgLy8gMS4gSWYgdGhpcydzIHN0YXRlIGlzIFwiZW1wdHlcIiBvciBpZiB0aGlzJ3Mgc3RhdGUgaXNcbiAgICAvLyAgICBcImRvbmVcIiBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsIGFuZCB0ZXJtaW5hdGVcbiAgICAvLyAgICB0aGlzIGFsZ29yaXRobS5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnZW1wdHknIHx8IHRoaXNba1N0YXRlXSA9PT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpcydzIHN0YXRlIGlzIFwibG9hZGluZ1wiIHNldCB0aGlzJ3Mgc3RhdGUgdG9cbiAgICAvLyAgICBcImRvbmVcIiBhbmQgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbC5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9ICdkb25lJ1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgYW55IHRhc2tzIGZyb20gdGhpcyBvbiB0aGUgZmlsZSByZWFkaW5nXG4gICAgLy8gICAgdGFzayBzb3VyY2UgaW4gYW4gYWZmaWxpYXRlZCB0YXNrIHF1ZXVlLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHRob3NlIHRhc2tzIGZyb20gdGhhdCB0YXNrIHF1ZXVlLlxuICAgIHRoaXNba0Fib3J0ZWRdID0gdHJ1ZVxuXG4gICAgLy8gNC4gVGVybWluYXRlIHRoZSBhbGdvcml0aG0gZm9yIHRoZSByZWFkIG1ldGhvZCBiZWluZyBwcm9jZXNzZWQuXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gNS4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBhYm9ydCBhdCB0aGlzLlxuICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnYWJvcnQnLCB0aGlzKVxuXG4gICAgLy8gNi4gSWYgdGhpcydzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhpcy5cbiAgICBpZiAodGhpc1trU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlYWR5c3RhdGVcbiAgICovXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgc3dpdGNoICh0aGlzW2tTdGF0ZV0pIHtcbiAgICAgIGNhc2UgJ2VtcHR5JzogcmV0dXJuIHRoaXMuRU1QVFlcbiAgICAgIGNhc2UgJ2xvYWRpbmcnOiByZXR1cm4gdGhpcy5MT0FESU5HXG4gICAgICBjYXNlICdkb25lJzogcmV0dXJuIHRoaXMuRE9ORVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZXN1bHRcbiAgICovXG4gIGdldCByZXN1bHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgcmVzdWx0IGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIHJlc3VsdC5cbiAgICByZXR1cm4gdGhpc1trUmVzdWx0XVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVycm9yXG4gICAqL1xuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgZXJyb3IgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgZXJyb3IuXG4gICAgcmV0dXJuIHRoaXNba0Vycm9yXVxuICB9XG5cbiAgZ2V0IG9ubG9hZGVuZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRlbmRcbiAgfVxuXG4gIHNldCBvbmxvYWRlbmQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRlbmQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIHRoaXNba0V2ZW50c10ubG9hZGVuZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzW2tFdmVudHNdLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWRzdGFydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRzdGFydFxuICB9XG5cbiAgc2V0IG9ubG9hZHN0YXJ0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ucHJvZ3Jlc3MgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5wcm9ncmVzc1xuICB9XG5cbiAgc2V0IG9ucHJvZ3Jlc3MgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLnByb2dyZXNzKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpc1trRXZlbnRzXS5wcm9ncmVzcylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2FkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZFxuICB9XG5cbiAgc2V0IG9ubG9hZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpc1trRXZlbnRzXS5sb2FkKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmFib3J0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uYWJvcnRcbiAgfVxuXG4gIHNldCBvbmFib3J0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5hYm9ydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXNba0V2ZW50c10uYWJvcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lbXB0eVxuRmlsZVJlYWRlci5FTVBUWSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkVNUFRZID0gMFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWxvYWRpbmdcbkZpbGVSZWFkZXIuTE9BRElORyA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkxPQURJTkcgPSAxXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZG9uZVxuRmlsZVJlYWRlci5ET05FID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRE9ORSA9IDJcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlci5wcm90b3R5cGUsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRBc0FycmF5QnVmZmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNCaW5hcnlTdHJpbmc6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0RhdGFVUkw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZXN1bHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRzdGFydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25wcm9ncmVzczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlUmVhZGVyJyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGaWxlUmVhZGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi8uLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgeyBpc1ZhbGlkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLWVxdWFsc1xuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IGV4Y2x1ZGVGcmFnbWVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVybEVxdWFscyAoQSwgQiwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgY29uc3Qgc2VyaWFsaXplZEEgPSBVUkxTZXJpYWxpemVyKEEsIGV4Y2x1ZGVGcmFnbWVudClcblxuICBjb25zdCBzZXJpYWxpemVkQiA9IFVSTFNlcmlhbGl6ZXIoQiwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIHJldHVybiBzZXJpYWxpemVkQSA9PT0gc2VyaWFsaXplZEJcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzY5NGQyMGQxMzRjYjU1M2Q4ZDg5ZTU1MDBiOTE0ODAxMmIxYmEyOTkvY29udGVudC9icm93c2VyL2NhY2hlX3N0b3JhZ2UvY2FjaGVfc3RvcmFnZV9jYWNoZS5jYyNMMjYwLUwyNjJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZXMgKGhlYWRlcikge1xuICBhc3NlcnQoaGVhZGVyICE9PSBudWxsKVxuXG4gIGNvbnN0IHZhbHVlcyA9IFtdXG5cbiAgZm9yIChsZXQgdmFsdWUgb2YgaGVhZGVyLnNwbGl0KCcsJykpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKGlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXJsRXF1YWxzLFxuICBnZXRGaWVsZFZhbHVlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHVybEVxdWFscywgZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFJlc3BvbnNlLCBjbG9uZVJlc3BvbnNlLCBmcm9tSW5uZXJSZXNwb25zZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBSZXF1ZXN0LCBmcm9tSW5uZXJSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tY2FjaGUtYmF0Y2gtb3BlcmF0aW9uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYWNoZUJhdGNoT3BlcmF0aW9uXG4gKiBAcHJvcGVydHkgeydkZWxldGUnIHwgJ3B1dCd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXF1ZXN0XG4gKiBAcHJvcGVydHkge2FueX0gcmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gKiBAdHlwZWRlZiB7W2FueSwgYW55XVtdfSByZXF1ZXN0UmVzcG9uc2VMaXN0XG4gKi9cblxuY2xhc3MgQ2FjaGUge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICAgKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBhcmd1bWVudHNbMV1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZS5tYXRjaCdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICBjb25zdCBwID0gdGhpcy4jaW50ZXJuYWxNYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zLCAxKVxuXG4gICAgaWYgKHAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gcFswXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2hBbGwgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLm1hdGNoQWxsJ1xuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICByZXR1cm4gdGhpcy4jaW50ZXJuYWxNYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zKVxuICB9XG5cbiAgYXN5bmMgYWRkIChyZXF1ZXN0KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGUuYWRkJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QsIHByZWZpeCwgJ3JlcXVlc3QnKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IFtyZXF1ZXN0XVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXNwb25zZUFycmF5UHJvbWlzZSA9IHRoaXMuYWRkQWxsKHJlcXVlc3RzKVxuXG4gICAgLy8gMy5cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2VBcnJheVByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGFkZEFsbCAocmVxdWVzdHMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZS5hZGRBbGwnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZXMgPSBbXVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAvLyAzLlxuICAgIGZvciAobGV0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgICB0eXBlczogWyd1bmRlZmluZWQgaXMgbm90IGFsbG93ZWQnXVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAzLjFcbiAgICAgIGNvbnN0IHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgLy8gMy4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSB8fCByLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lLidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gNS40XG4gICAgICByLmluaXRpYXRvciA9ICdmZXRjaCdcbiAgICAgIHIuZGVzdGluYXRpb24gPSAnc3VicmVzb3VyY2UnXG5cbiAgICAgIC8vIDUuNVxuICAgICAgcmVxdWVzdExpc3QucHVzaChyKVxuXG4gICAgICAvLyA1LjZcbiAgICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAgIC8vIDUuN1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5wdXNoKGZldGNoaW5nKHtcbiAgICAgICAgcmVxdWVzdDogcixcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgfHwgcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+IDI5OSkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhbiBpbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHRoZSByZXF1ZXN0IGZhaWxlZC4nXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHsgLy8gMi5cbiAgICAgICAgICAgIC8vIDIuMVxuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgICAgICAgLy8gMi4yXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgZmV0Y2hDb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ2Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMi5cbiAgICAgICAgICByZXNwb25zZVByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIC8vIDUuOFxuICAgICAgcmVzcG9uc2VQcm9taXNlcy5wdXNoKHJlc3BvbnNlUHJvbWlzZS5wcm9taXNlKVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgY29uc3QgcCA9IFByb21pc2UuYWxsKHJlc3BvbnNlUHJvbWlzZXMpXG5cbiAgICAvLyA3LlxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IHBcblxuICAgIC8vIDcuMVxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gNy4yXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgLy8gNy4zXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDcuMy4xXG4gICAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdwdXQnLCAvLyA3LjMuMlxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0TGlzdFtpbmRleF0sIC8vIDcuMy4zXG4gICAgICAgIHJlc3BvbnNlIC8vIDcuMy40XG4gICAgICB9XG5cbiAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pIC8vIDcuMy41XG5cbiAgICAgIGluZGV4KysgLy8gNy4zLjZcbiAgICB9XG5cbiAgICAvLyA3LjVcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNy42LjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gNy42LjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gNy42LjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA3LjYuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDcuNi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDcuN1xuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgcHV0IChyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLnB1dCdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICByZXNwb25zZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlKHJlc3BvbnNlLCBwcmVmaXgsICdyZXNwb25zZScpXG5cbiAgICAvLyAxLlxuICAgIGxldCBpbm5lclJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaW5uZXJSZXF1ZXN0ID0gcmVxdWVzdFtrU3RhdGVdXG4gICAgfSBlbHNlIHsgLy8gMy5cbiAgICAgIGlubmVyUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoaW5uZXJSZXF1ZXN0LnVybCkgfHwgaW5uZXJSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBhbiBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgY29uc3QgaW5uZXJSZXNwb25zZSA9IHJlc3BvbnNlW2tTdGF0ZV1cblxuICAgIC8vIDYuXG4gICAgaWYgKGlubmVyUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiAnR290ICogdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOC5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICYmIChpc0Rpc3R1cmJlZChpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSB8fCBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtLmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNwb25zZSBib2R5IGlzIGxvY2tlZCBvciBkaXN0dXJiZWQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDkuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKGlubmVyUmVzcG9uc2UpXG5cbiAgICAvLyAxMC5cbiAgICBjb25zdCBib2R5UmVhZFByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTEuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxMS4xXG4gICAgICBjb25zdCBzdHJlYW0gPSBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtXG5cbiAgICAgIC8vIDExLjJcbiAgICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gICAgICAvLyAxMS4zXG4gICAgICByZWFkQWxsQnl0ZXMocmVhZGVyKS50aGVuKGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlLCBib2R5UmVhZFByb21pc2UucmVqZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICBib2R5UmVhZFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLy8gMTIuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyAxMy5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ3B1dCcsIC8vIDE0LlxuICAgICAgcmVxdWVzdDogaW5uZXJSZXF1ZXN0LCAvLyAxNS5cbiAgICAgIHJlc3BvbnNlOiBjbG9uZWRSZXNwb25zZSAvLyAxNi5cbiAgICB9XG5cbiAgICAvLyAxNy5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgLy8gMTkuXG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBib2R5UmVhZFByb21pc2UucHJvbWlzZVxuXG4gICAgaWYgKGNsb25lZFJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgY2xvbmVkUmVzcG9uc2UuYm9keS5zb3VyY2UgPSBieXRlc1xuICAgIH1cblxuICAgIC8vIDE5LjFcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTkuMi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDE5LjIuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyAxOS4yLjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyAxOS4yLjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9IGVsc2UgeyAvLyAxOS4yLjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBkZWxldGUgKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8cmVhZG9ubHkgUmVxdWVzdFtdPn1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLmtleXMnXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdCwgcHJlZml4LCAncmVxdWVzdCcpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMsIHByZWZpeCwgJ29wdGlvbnMnKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMi4xXG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7IC8vIDIuMlxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlcXVlc3RzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgLy8gNS4yLjEuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAvLyA1LjMuMi4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDUuNC4xXG4gICAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAgIC8vIDUuNC4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9iamVjdCA9IGZyb21Jbm5lclJlcXVlc3QoXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsLFxuICAgICAgICAgICdpbW11dGFibGUnXG4gICAgICAgIClcbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gICNpbnRlcm5hbE1hdGNoQWxsIChyZXF1ZXN0LCBvcHRpb25zLCBtYXhSZXNwb25zZXMgPSBJbmZpbml0eSkge1xuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgLy8gV2UgZG9uJ3QgaW1wbGVtZW50IENPUnMgc28gd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgdGhlIHJlc3BvbnNlcywgeWF5IVxuXG4gICAgLy8gNS41LjFcbiAgICBjb25zdCByZXNwb25zZUxpc3QgPSBbXVxuXG4gICAgLy8gNS41LjJcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNS41LjIuMVxuICAgICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBmcm9tSW5uZXJSZXNwb25zZShyZXNwb25zZSwgJ2ltbXV0YWJsZScpXG5cbiAgICAgIHJlc3BvbnNlTGlzdC5wdXNoKHJlc3BvbnNlT2JqZWN0LmNsb25lKCkpXG5cbiAgICAgIGlmIChyZXNwb25zZUxpc3QubGVuZ3RoID49IG1heFJlc3BvbnNlcykge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocmVzcG9uc2VMaXN0KVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbWF0Y2hBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwdXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuY29uc3QgY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMgPSBbXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVTZWFyY2gnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVNZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVWYXJ5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzLFxuICB7XG4gICAga2V5OiAnY2FjaGVOYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoUmVzcG9uc2UpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm9cbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgQ2FjaGUgfSA9IHJlcXVpcmUoJy4vY2FjaGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIENhY2hlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtbmFtZS10by1jYWNoZS1tYXBcbiAgICogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydCgnLi9jYWNoZScpLnJlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjY2FjaGVzID0gbmV3IE1hcCgpXG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0NhY2hlU3RvcmFnZS5tYXRjaCcpXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBpZiAob3B0aW9ucy5jYWNoZU5hbWUgIT0gbnVsbCkge1xuICAgICAgLy8gMS4xLjEuMVxuICAgICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMob3B0aW9ucy5jYWNoZU5hbWUpKSB7XG4gICAgICAgIC8vIDEuMS4xLjEuMVxuICAgICAgICBjb25zdCBjYWNoZUxpc3QgPSB0aGlzLiNjYWNoZXMuZ2V0KG9wdGlvbnMuY2FjaGVOYW1lKVxuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gMi5cbiAgICAgIC8vIDIuMlxuICAgICAgZm9yIChjb25zdCBjYWNoZUxpc3Qgb2YgdGhpcy4jY2FjaGVzLnZhbHVlcygpKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICAvLyAyLjIuMS4yXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcblxuICAgICAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtaGFzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBoYXMgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZVN0b3JhZ2UuaGFzJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSwgcHJlZml4LCAnY2FjaGVOYW1lJylcblxuICAgIC8vIDIuMS4xXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZXN0b3JhZ2Utb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlPn1cbiAgICovXG4gIGFzeW5jIG9wZW4gKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZVN0b3JhZ2Uub3BlbidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUsIHByZWZpeCwgJ2NhY2hlTmFtZScpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGVTdG9yYWdlLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUsIHByZWZpeCwgJ2NhY2hlTmFtZScpXG5cbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmRlbGV0ZShjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1rZXlzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIC8vIDIuMVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLiNjYWNoZXMua2V5cygpXG5cbiAgICAvLyAyLjJcbiAgICByZXR1cm4gWy4uLmtleXNdXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVTdG9yYWdlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGVTdG9yYWdlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVTdG9yYWdlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1hdHRyaWJ1dGUtdmFsdWUtc2l6ZVxuY29uc3QgbWF4QXR0cmlidXRlVmFsdWVTaXplID0gMTAyNFxuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tbmFtZS12YWx1ZS1wYWlyLXNpemVcbmNvbnN0IG1heE5hbWVWYWx1ZVBhaXJTaXplID0gNDA5NlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWF4QXR0cmlidXRlVmFsdWVTaXplLFxuICBtYXhOYW1lVmFsdWVQYWlyU2l6ZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSAweDAwICYmIGNvZGUgPD0gMHgwOCkgfHxcbiAgICAgIChjb2RlID49IDB4MEEgJiYgY29kZSA8PSAweDFGKSB8fFxuICAgICAgY29kZSA9PT0gMHg3RlxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuIENIQVIgICAgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiB0b2tlbiAgICAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gc2VwYXJhdG9ycyAgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gICAgICAgICAgICAgICAgfCBcIixcIiB8IFwiO1wiIHwgXCI6XCIgfCBcIlxcXCIgfCA8XCI+XG4gICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVOYW1lIChuYW1lKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSBuYW1lLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8IC8vIGV4Y2x1ZGUgQ1RMcyAoMC0zMSksIFNQIGFuZCBIVFxuICAgICAgY29kZSA+IDB4N0UgfHwgLy8gZXhjbHVkZSBub24tYXNjaWkgYW5kIERFTFxuICAgICAgY29kZSA9PT0gMHgyMiB8fCAvLyBcIlxuICAgICAgY29kZSA9PT0gMHgyOCB8fCAvLyAoXG4gICAgICBjb2RlID09PSAweDI5IHx8IC8vIClcbiAgICAgIGNvZGUgPT09IDB4M0MgfHwgLy8gPFxuICAgICAgY29kZSA9PT0gMHgzRSB8fCAvLyA+XG4gICAgICBjb2RlID09PSAweDQwIHx8IC8vIEBcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgzQiB8fCAvLyA7XG4gICAgICBjb2RlID09PSAweDNBIHx8IC8vIDpcbiAgICAgIGNvZGUgPT09IDB4NUMgfHwgLy8gXFxcbiAgICAgIGNvZGUgPT09IDB4MkYgfHwgLy8gL1xuICAgICAgY29kZSA9PT0gMHg1QiB8fCAvLyBbXG4gICAgICBjb2RlID09PSAweDVEIHx8IC8vIF1cbiAgICAgIGNvZGUgPT09IDB4M0YgfHwgLy8gP1xuICAgICAgY29kZSA9PT0gMHgzRCB8fCAvLyA9XG4gICAgICBjb2RlID09PSAweDdCIHx8IC8vIHtcbiAgICAgIGNvZGUgPT09IDB4N0QgLy8gfVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBuYW1lJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gY29va2llLXZhbHVlICAgICAgPSAqY29va2llLW9jdGV0IC8gKCBEUVVPVEUgKmNvb2tpZS1vY3RldCBEUVVPVEUgKVxuIGNvb2tpZS1vY3RldCAgICAgID0gJXgyMSAvICV4MjMtMkIgLyAleDJELTNBIC8gJXgzQy01QiAvICV4NUQtN0VcbiAgICAgICAgICAgICAgICAgICAgICAgOyBVUy1BU0NJSSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBDVExzLFxuICAgICAgICAgICAgICAgICAgICAgICA7IHdoaXRlc3BhY2UgRFFVT1RFLCBjb21tYSwgc2VtaWNvbG9uLFxuICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBiYWNrc2xhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVZhbHVlICh2YWx1ZSkge1xuICBsZXQgbGVuID0gdmFsdWUubGVuZ3RoXG4gIGxldCBpID0gMFxuXG4gIC8vIGlmIHRoZSB2YWx1ZSBpcyB3cmFwcGVkIGluIERRVU9URVxuICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICBpZiAobGVuID09PSAxIHx8IHZhbHVlW2xlbiAtIDFdICE9PSAnXCInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHZhbHVlJylcbiAgICB9XG4gICAgLS1sZW5cbiAgICArK2lcbiAgfVxuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgY29uc3QgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaSsrKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA+IDB4N0UgfHwgLy8gbm9uLWFzY2lpIGFuZCBERUwgKDEyNylcbiAgICAgIGNvZGUgPT09IDB4MjIgfHwgLy8gXCJcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgzQiB8fCAvLyA7XG4gICAgICBjb2RlID09PSAweDVDIC8vIFxcXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMCB8fCAvLyBleGNsdWRlIENUTHMgKDAtMzEpXG4gICAgICBjb2RlID4gMHg3RSB8fCAvLyBleGNsdWRlIERFTCBhbmQgbm9uLWFzY2lpXG4gICAgICBjb2RlID09PSAweDNCIC8vIDtcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogPGxldC1kaWc+IDo6PSA8bGV0dGVyPiB8IDxkaWdpdD5cbiAqXG4gKiA8bGV0dGVyPiA6Oj0gYW55IG9uZSBvZiB0aGUgNTIgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIEEgdGhyb3VnaCBaIGluXG4gKiB1cHBlciBjYXNlIGFuZCBhIHRocm91Z2ggeiBpbiBsb3dlciBjYXNlXG4gKlxuICogPGRpZ2l0PiA6Oj0gYW55IG9uZSBvZiB0aGUgdGVuIGRpZ2l0cyAwIHRocm91Z2ggOXJcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMxMDM0I3NlY3Rpb24tMy41XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0xldHRlck9yRGlnaXQgKGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICAoY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOSkgfHwgLy8gMC05XG4gICAgKGNvZGUgPj0gMHg0MSAmJiBjb2RlIDw9IDB4NUEpIHx8IC8vIEEtWlxuICAgIChjb2RlID49IDB4NjEgJiYgY29kZSA8PSAweDdBKSAvLyBhLXpcbiAgKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGNvb2tpZSBkb21haW4gYWdhaW5zdCB0aGUgXCJwcmVmZXJyZWQgbmFtZSBzeW50YXhcIi5cbiAqXG4gKiA8ZG9tYWluPiAgICAgIDo6PSA8c3ViZG9tYWluPiB8IFwiIFwiXG4gKiA8c3ViZG9tYWluPiAgIDo6PSA8bGFiZWw+IHwgPHN1YmRvbWFpbj4gXCIuXCIgPGxhYmVsPlxuICogPGxhYmVsPiAgICAgICA6Oj0gPGxldC1kaWc+IFsgWyA8bGRoLXN0cj4gXSA8bGV0LWRpZz4gXVxuICogPGxkaC1zdHI+ICAgICA6Oj0gPGxldC1kaWctaHlwPiB8IDxsZXQtZGlnLWh5cD4gPGxkaC1zdHI+XG4gKiA8bGV0LWRpZy1oeXA+IDo6PSA8bGV0LWRpZz4gfCBcIi1cIlxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzEwMzQjc2VjdGlvbi0zLjVcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzExMjMjc2VjdGlvbi0yLjFcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzEwMzUjc2VjdGlvbi0yLjMuNFxuICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZURvbWFpbiAoZG9tYWluKSB7XG4gIC8vIDxkb21haW4+IDo6PSA8c3ViZG9tYWluPiB8IFwiIFwiXG4gIGlmIChkb21haW4gPT09ICcgJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGRvbWFpbi5sZW5ndGggPiAyNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gIH1cblxuICBsZXQgbGFiZWxMZW5ndGggPSAwXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21haW4ubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gZG9tYWluLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChjb2RlID09PSAweDJFKSB7XG4gICAgICBpZiAobGFiZWxMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoZG9tYWluLmNoYXJDb2RlQXQoaSAtIDEpID09PSAweDJEKSB7IC8vIFwiLVwiXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgICAgIH1cblxuICAgICAgbGFiZWxMZW5ndGggPSAwXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChsYWJlbExlbmd0aCA9PT0gMCAmJiAhaXNMZXR0ZXJPckRpZ2l0KGNvZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gICAgfVxuXG4gICAgaWYgKCFpc0xldHRlck9yRGlnaXQoY29kZSkgJiYgY29kZSAhPT0gMHgyRCkgeyAvLyBcIi1cIlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICAgIH1cblxuICAgIGlmICgrK2xhYmVsTGVuZ3RoID4gNjMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgICB9XG4gIH1cblxuICBpZiAobGFiZWxMZW5ndGggPT09IDAgfHwgZG9tYWluLmNoYXJDb2RlQXQoZG9tYWluLmxlbmd0aCAtIDEpID09PSAweDJEKSB7IC8vIFwiLVwiXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbmNvbnN0IElNRkRheXMgPSBbXG4gICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLFxuICAnVGh1JywgJ0ZyaScsICdTYXQnXG5dXG5cbmNvbnN0IElNRk1vbnRocyA9IFtcbiAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ1xuXVxuXG5jb25zdCBJTUZQYWRkZWROdW1iZXJzID0gQXJyYXkoNjEpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMVxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGF0ZVxuICBJTUYtZml4ZGF0ZSAgPSBkYXktbmFtZSBcIixcIiBTUCBkYXRlMSBTUCB0aW1lLW9mLWRheSBTUCBHTVRcbiAgOyBmaXhlZCBsZW5ndGgvem9uZS9jYXBpdGFsaXphdGlvbiBzdWJzZXQgb2YgdGhlIGZvcm1hdFxuICA7IHNlZSBTZWN0aW9uIDMuMyBvZiBbUkZDNTMyMl1cblxuICBkYXktbmFtZSAgICAgPSAleDRELjZGLjZFIDsgXCJNb25cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0Ljc1LjY1IDsgXCJUdWVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU3LjY1LjY0IDsgXCJXZWRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0LjY4Ljc1IDsgXCJUaHVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjcyLjY5IDsgXCJGcmlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjYxLjc0IDsgXCJTYXRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjc1LjZFIDsgXCJTdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgZGF0ZTEgICAgICAgID0gZGF5IFNQIG1vbnRoIFNQIHllYXJcbiAgICAgICAgICAgICAgICAgIDsgZS5nLiwgMDIgSnVuIDE5ODJcblxuICBkYXkgICAgICAgICAgPSAyRElHSVRcbiAgbW9udGggICAgICAgID0gJXg0QS42MS42RSA7IFwiSmFuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni42NS42MiA7IFwiRmViXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43MiA7IFwiTWFyXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43MC43MiA7IFwiQXByXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43OSA7IFwiTWF5XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42RSA7IFwiSnVuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42QyA7IFwiSnVsXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43NS42NyA7IFwiQXVnXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42NS43MCA7IFwiU2VwXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ri42My43NCA7IFwiT2N0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RS42Ri43NiA7IFwiTm92XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0NC42NS42MyA7IFwiRGVjXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIHllYXIgICAgICAgICA9IDRESUdJVFxuXG4gIEdNVCAgICAgICAgICA9ICV4NDcuNEQuNTQgOyBcIkdNVFwiLCBjYXNlLXNlbnNpdGl2ZVxuXG4gIHRpbWUtb2YtZGF5ICA9IGhvdXIgXCI6XCIgbWludXRlIFwiOlwiIHNlY29uZFxuICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NjAgKGxlYXAgc2Vjb25kKVxuXG4gIGhvdXIgICAgICAgICA9IDJESUdJVFxuICBtaW51dGUgICAgICAgPSAyRElHSVRcbiAgc2Vjb25kICAgICAgID0gMkRJR0lUXG4gKi9cbmZ1bmN0aW9uIHRvSU1GRGF0ZSAoZGF0ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG4gIH1cblxuICByZXR1cm4gYCR7SU1GRGF5c1tkYXRlLmdldFVUQ0RheSgpXX0sICR7SU1GUGFkZGVkTnVtYmVyc1tkYXRlLmdldFVUQ0RhdGUoKV19ICR7SU1GTW9udGhzW2RhdGUuZ2V0VVRDTW9udGgoKV19ICR7ZGF0ZS5nZXRVVENGdWxsWWVhcigpfSAke0lNRlBhZGRlZE51bWJlcnNbZGF0ZS5nZXRVVENIb3VycygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDTWludXRlcygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDU2Vjb25kcygpXX0gR01UYFxufVxuXG4vKipcbiBtYXgtYWdlLWF2ICAgICAgICA9IFwiTWF4LUFnZT1cIiBub24temVyby1kaWdpdCAqRElHSVRcbiAgICAgICAgICAgICAgICAgICAgICAgOyBJbiBwcmFjdGljZSwgYm90aCBleHBpcmVzLWF2IGFuZCBtYXgtYWdlLWF2XG4gICAgICAgICAgICAgICAgICAgICAgIDsgYXJlIGxpbWl0ZWQgdG8gZGF0ZXMgcmVwcmVzZW50YWJsZSBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgOyB1c2VyIGFnZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IG1heEFnZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU1heEFnZSAobWF4QWdlKSB7XG4gIGlmIChtYXhBZ2UgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBtYXgtYWdlJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjUjc2VjdGlvbi00LjEuMVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Db29raWV9IGNvb2tpZVxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkgKGNvb2tpZSkge1xuICBpZiAoY29va2llLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhbGlkYXRlQ29va2llTmFtZShjb29raWUubmFtZSlcbiAgdmFsaWRhdGVDb29raWVWYWx1ZShjb29raWUudmFsdWUpXG5cbiAgY29uc3Qgb3V0ID0gW2Ake2Nvb2tpZS5uYW1lfT0ke2Nvb2tpZS52YWx1ZX1gXVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMVxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjJcbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fU2VjdXJlLScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgfVxuXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX0hvc3QtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICAgIGNvb2tpZS5kb21haW4gPSBudWxsXG4gICAgY29va2llLnBhdGggPSAnLydcbiAgfVxuXG4gIGlmIChjb29raWUuc2VjdXJlKSB7XG4gICAgb3V0LnB1c2goJ1NlY3VyZScpXG4gIH1cblxuICBpZiAoY29va2llLmh0dHBPbmx5KSB7XG4gICAgb3V0LnB1c2goJ0h0dHBPbmx5JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29va2llLm1heEFnZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZU1heEFnZShjb29raWUubWF4QWdlKVxuICAgIG91dC5wdXNoKGBNYXgtQWdlPSR7Y29va2llLm1heEFnZX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5kb21haW4pIHtcbiAgICB2YWxpZGF0ZUNvb2tpZURvbWFpbihjb29raWUuZG9tYWluKVxuICAgIG91dC5wdXNoKGBEb21haW49JHtjb29raWUuZG9tYWlufWApXG4gIH1cblxuICBpZiAoY29va2llLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZVBhdGgoY29va2llLnBhdGgpXG4gICAgb3V0LnB1c2goYFBhdGg9JHtjb29raWUucGF0aH1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5leHBpcmVzICYmIGNvb2tpZS5leHBpcmVzLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgb3V0LnB1c2goYEV4cGlyZXM9JHt0b0lNRkRhdGUoY29va2llLmV4cGlyZXMpfWApXG4gIH1cblxuICBpZiAoY29va2llLnNhbWVTaXRlKSB7XG4gICAgb3V0LnB1c2goYFNhbWVTaXRlPSR7Y29va2llLnNhbWVTaXRlfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgY29va2llLnVucGFyc2VkKSB7XG4gICAgaWYgKCFwYXJ0LmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bnBhcnNlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgW2tleSwgLi4udmFsdWVdID0gcGFydC5zcGxpdCgnPScpXG5cbiAgICBjb25zdCB0cmltbWVkS2V5ID0ga2V5LnRyaW0oKVxuICAgIGNvbnN0IGpvaW5lZFZhbHVlID0gdmFsdWUuam9pbignPScpXG5cbiAgICB2YWxpZGF0ZUNvb2tpZU5hbWUodHJpbW1lZEtleSlcbiAgICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGpvaW5lZFZhbHVlKVxuXG4gICAgb3V0LnB1c2goYCR7dHJpbW1lZEtleX09JHtqb2luZWRWYWx1ZX1gKVxuICB9XG5cbiAgcmV0dXJuIG91dC5qb2luKCc7ICcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0NUTEV4Y2x1ZGluZ0h0YWIsXG4gIHZhbGlkYXRlQ29va2llTmFtZSxcbiAgdmFsaWRhdGVDb29raWVQYXRoLFxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlLFxuICB0b0lNRkRhdGUsXG4gIHN0cmluZ2lmeVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heE5hbWVWYWx1ZVBhaXJTaXplLCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgaXNDVExFeGNsdWRpbmdIdGFiIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgdGhlIGZpZWxkLXZhbHVlIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlciBzdHJpbmcuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEByZXR1cm5zIGlmIHRoZSBoZWFkZXIgaXMgaW52YWxpZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2V0Q29va2llIChoZWFkZXIpIHtcbiAgLy8gMS4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgwMC0wOCAvICV4MEEtMUYgLyAleDdGXG4gIC8vICAgIGNoYXJhY3RlciAoQ1RMIGNoYXJhY3RlcnMgZXhjbHVkaW5nIEhUQUIpOiBBYm9ydCB0aGVzZSBzdGVwcyBhbmRcbiAgLy8gICAgaWdub3JlIHRoZSBzZXQtY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKGlzQ1RMRXhjbHVkaW5nSHRhYihoZWFkZXIpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBuYW1lVmFsdWVQYWlyID0gJydcbiAgbGV0IHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIGxldCBuYW1lID0gJydcbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAyLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyOlxuICBpZiAoaGVhZGVyLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0byxcbiAgICAvLyAgICBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSwgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgICAvLyAgICAoaW5jbHVkaW5nIHRoZSAleDNCIChcIjtcIikgaW4gcXVlc3Rpb24pLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBuYW1lVmFsdWVQYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBoZWFkZXIsIHBvc2l0aW9uKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IGhlYWRlci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnNcbiAgICAvLyAgICBjb250YWluZWQgaW4gdGhlIHNldC1jb29raWUtc3RyaW5nLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICBuYW1lVmFsdWVQYWlyID0gaGVhZGVyXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBsYWNrcyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIHRoZW5cbiAgLy8gICAgdGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5LCBhbmQgdGhlIHZhbHVlIHN0cmluZyBpcyB0aGUgdmFsdWUgb2ZcbiAgLy8gICAgbmFtZS12YWx1ZS1wYWlyLlxuICBpZiAoIW5hbWVWYWx1ZVBhaXIuaW5jbHVkZXMoJz0nKSkge1xuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpclxuICB9IGVsc2Uge1xuICAgIC8vICAgIE90aGVyd2lzZSwgdGhlIG5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHlcbiAgICAvLyAgICBlbXB0eSkgdmFsdWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdFxuICAgIC8vICAgICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cbiAgICBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBuYW1lVmFsdWVQYWlyLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfVxuXG4gIC8vIDQuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBuYW1lXG4gIC8vICAgIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZy5cbiAgbmFtZSA9IG5hbWUudHJpbSgpXG4gIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgLy8gNS4gSWYgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgbmFtZSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmdcbiAgLy8gICAgaXMgbW9yZSB0aGFuIDQwOTYgb2N0ZXRzLCBhYm9ydCB0aGVzZSBzdGVwcyBhbmQgaWdub3JlIHRoZSBzZXQtXG4gIC8vICAgIGNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChuYW1lLmxlbmd0aCArIHZhbHVlLmxlbmd0aCA+IG1heE5hbWVWYWx1ZVBhaXJTaXplKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFRoZSBjb29raWUtbmFtZSBpcyB0aGUgbmFtZSBzdHJpbmcsIGFuZCB0aGUgY29va2llLXZhbHVlIGlzIHRoZVxuICAvLyAgICB2YWx1ZSBzdHJpbmcuXG4gIHJldHVybiB7XG4gICAgbmFtZSwgdmFsdWUsIC4uLnBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcylcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlclxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1tPYmplY3QuPHN0cmluZywgdW5rbm93bj5dPXt9fSBjb29raWVBdHRyaWJ1dGVMaXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzICh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QgPSB7fSkge1xuICAvLyAxLiBJZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyBzdHJpbmcgaXMgZW1wdHksIHNraXAgdGhlIHJlc3Qgb2ZcbiAgLy8gICAgdGhlc2Ugc3RlcHMuXG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAgfVxuXG4gIC8vIDIuIERpc2NhcmQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyAod2hpY2hcbiAgLy8gICAgd2lsbCBiZSBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIpLlxuICBhc3NlcnQodW5wYXJzZWRBdHRyaWJ1dGVzWzBdID09PSAnOycpXG4gIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZSgxKVxuXG4gIGxldCBjb29raWVBdiA9ICcnXG5cbiAgLy8gMy4gSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gIC8vICAgIGNoYXJhY3RlcjpcbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgY29va2llQXYgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc7JyxcbiAgICAgIHVucGFyc2VkQXR0cmlidXRlcyxcbiAgICAgIHsgcG9zaXRpb246IDAgfVxuICAgIClcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoY29va2llQXYubGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIENvbnN1bWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcy5cbiAgICBjb29raWVBdiA9IHVucGFyc2VkQXR0cmlidXRlc1xuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIH1cblxuICAvLyBMZXQgdGhlIGNvb2tpZS1hdiBzdHJpbmcgYmUgdGhlIGNoYXJhY3RlcnMgY29uc3VtZWQgaW4gdGhpcyBzdGVwLlxuXG4gIGxldCBhdHRyaWJ1dGVOYW1lID0gJydcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gJydcblxuICAvLyA0LiBJZiB0aGUgY29va2llLWF2IHN0cmluZyBjb250YWlucyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXI6XG4gIGlmIChjb29raWVBdi5pbmNsdWRlcygnPScpKSB7XG4gICAgLy8gMS4gVGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZVxuICAgIC8vICAgIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLXZhbHVlIHN0cmluZ1xuICAgIC8vICAgIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIGNvb2tpZUF2LFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgYXR0cmlidXRlVmFsdWUgPSBjb29raWVBdi5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGNvb2tpZS1hdlxuICAgIC8vICAgIHN0cmluZywgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nIGlzIGVtcHR5LlxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb29raWVBdlxuICB9XG5cbiAgLy8gNS4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZS1cbiAgLy8gICAgbmFtZSBzdHJpbmcgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nLlxuICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50cmltKClcbiAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS50cmltKClcblxuICAvLyA2LiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGxvbmdlciB0aGFuIDEwMjQgb2N0ZXRzLCBpZ25vcmUgdGhlXG4gIC8vICAgIGNvb2tpZS1hdiBzdHJpbmcgYW5kIHJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPiBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUpIHtcbiAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICB9XG5cbiAgLy8gNy4gUHJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWUgYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlXG4gIC8vICAgIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiAgKE5vdGljZSB0aGF0XG4gIC8vICAgIGF0dHJpYnV0ZXMgd2l0aCB1bnJlY29nbml6ZWQgYXR0cmlidXRlLW5hbWVzIGFyZSBpZ25vcmVkLilcbiAgY29uc3QgYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMVxuICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAvLyBcIkV4cGlyZXNcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cbiAgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdleHBpcmVzJykge1xuICAgIC8vIDEuIExldCB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUtdmFsdWVcbiAgICAvLyAgICBhcyBjb29raWUtZGF0ZSAoc2VlIFNlY3Rpb24gNS4xLjEpLlxuICAgIGNvbnN0IGV4cGlyeVRpbWUgPSBuZXcgRGF0ZShhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDIuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZVxuICAgIC8vICAgIHRoZSBjb29raWUtYXYuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmV4cGlyZXMgPSBleHBpcnlUaW1lXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ21heC1hZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4yXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJNYXgtXG4gICAgLy8gQWdlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYVxuICAgIC8vICAgIFwiLVwiIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgY29uc3QgY2hhckNvZGUgPSBhdHRyaWJ1dGVWYWx1ZS5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgYXR0cmlidXRlVmFsdWVbMF0gIT09ICctJykge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhIG5vbi1ESUdJVFxuICAgIC8vICAgIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVsdGEtc2Vjb25kcyBiZSB0aGUgYXR0cmlidXRlLXZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLlxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDQuIExldCBjb29raWUtYWdlLWxpbWl0IGJlIHRoZSBtYXhpbXVtIGFnZSBvZiB0aGUgY29va2llICh3aGljaFxuICAgIC8vICAgIFNIT1VMRCBiZSA0MDAgZGF5cyBvciBsZXNzLCBzZWUgU2VjdGlvbiA0LjEuMi4yKS5cblxuICAgIC8vIDUuIFNldCBkZWx0YS1zZWNvbmRzIHRvIHRoZSBzbWFsbGVyIG9mIGl0cyBwcmVzZW50IHZhbHVlIGFuZCBjb29raWUtXG4gICAgLy8gICAgYWdlLWxpbWl0LlxuICAgIC8vIGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhU2Vjb25kcyAqIDEwMDAsIG1heEV4cGlyZXNNcylcblxuICAgIC8vIDYuIElmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LVxuICAgIC8vICAgIHRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgZGF0ZSBhbmQgdGltZS4gIE90aGVyd2lzZSwgbGV0XG4gICAgLy8gICAgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcGx1cyBkZWx0YS1zZWNvbmRzXG4gICAgLy8gICAgc2Vjb25kcy5cbiAgICAvLyBjb25zdCBleHBpcnlUaW1lID0gZGVsdGFTZWNvbmRzIDw9IDAgPyBEYXRlLm5vdygpIDogRGF0ZS5ub3coKSArIGRlbHRhU2Vjb25kc1xuXG4gICAgLy8gNy4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBNYXgtQWdlIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgZXhwaXJ5LXRpbWUuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5tYXhBZ2UgPSBkZWx0YVNlY29uZHNcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZG9tYWluJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuM1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiRG9tYWluXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIExldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgbGV0IGNvb2tpZURvbWFpbiA9IGF0dHJpYnV0ZVZhbHVlXG5cbiAgICAvLyAyLiBJZiBjb29raWUtZG9tYWluIHN0YXJ0cyB3aXRoICV4MkUgKFwiLlwiKSwgbGV0IGNvb2tpZS1kb21haW4gYmVcbiAgICAvLyAgICBjb29raWUtZG9tYWluIHdpdGhvdXQgaXRzIGxlYWRpbmcgJXgyRSAoXCIuXCIpLlxuICAgIGlmIChjb29raWVEb21haW5bMF0gPT09ICcuJykge1xuICAgICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnNsaWNlKDEpXG4gICAgfVxuXG4gICAgLy8gMy4gQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlxuICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA0LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIERvbWFpbiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1kb21haW4uXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5kb21haW4gPSBjb29raWVEb21haW5cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAncGF0aCcpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjRcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlBhdGhcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAgIC8vICAgIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgIGxldCBjb29raWVQYXRoID0gJydcbiAgICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID09PSAwIHx8IGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLycpIHtcbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICAgICAgY29va2llUGF0aCA9ICcvJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgICAgY29va2llUGF0aCA9IGF0dHJpYnV0ZVZhbHVlXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLXBhdGguXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5wYXRoID0gY29va2llUGF0aFxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzZWN1cmUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC41XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgIC8vIHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgU2VjdXJlIGFuZCBhbiBlbXB0eSBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNlY3VyZSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnaHR0cG9ubHknKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC42XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIkh0dHBPbmx5XCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLVxuICAgIC8vIGF0dHJpYnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgSHR0cE9ubHkgYW5kIGFuIGVtcHR5XG4gICAgLy8gYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5odHRwT25seSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2FtZXNpdGUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC43XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIlNhbWVTaXRlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3M6XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDEuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJOb25lXCIsIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgXCJOb25lXCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID09PSAnbm9uZScpIHtcbiAgICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSAnTm9uZSdcbiAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID09PSAnc3RyaWN0Jykge1xuICAgICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAgIC8vICAgIFwiU3RyaWN0XCIsIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoXG4gICAgICAvLyAgICBhbiBhdHRyaWJ1dGUtbmFtZSBvZiBcIlNhbWVTaXRlXCIgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZlxuICAgICAgLy8gICAgXCJTdHJpY3RcIi5cbiAgICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSAnU3RyaWN0J1xuICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPT09ICdsYXgnKSB7XG4gICAgICAvLyAzLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgICAgLy8gICAgXCJMYXhcIiwgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIFwiU2FtZVNpdGVcIiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIFwiTGF4XCIuXG4gICAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gJ0xheCdcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZCA/Pz0gW11cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQucHVzaChgJHthdHRyaWJ1dGVOYW1lfT0ke2F0dHJpYnV0ZVZhbHVlfWApXG4gIH1cblxuICAvLyA4LiBSZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2VTZXRDb29raWUsXG4gIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29va2llXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAcHJvcGVydHkge0RhdGV8bnVtYmVyfHVuZGVmaW5lZH0gZXhwaXJlc1xuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBtYXhBZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gZG9tYWluXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IHBhdGhcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IHNlY3VyZVxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gaHR0cE9ubHlcbiAqIEBwcm9wZXJ0eSB7J1N0cmljdCd8J0xheCd8J05vbmUnfSBzYW1lU2l0ZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gdW5wYXJzZWRcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnZ2V0Q29va2llcycpXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llID0gaGVhZGVycy5nZXQoJ2Nvb2tpZScpXG4gIGNvbnN0IG91dCA9IHt9XG5cbiAgaWYgKCFjb29raWUpIHtcbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGNvb2tpZS5zcGxpdCgnOycpKSB7XG4gICAgY29uc3QgW25hbWUsIC4uLnZhbHVlXSA9IHBpZWNlLnNwbGl0KCc9JylcblxuICAgIG91dFtuYW1lLnRyaW0oKV0gPSB2YWx1ZS5qb2luKCc9JylcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3sgcGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nIH18dW5kZWZpbmVkfSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZGVsZXRlQ29va2llIChoZWFkZXJzLCBuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IHByZWZpeCA9ICdkZWxldGVDb29raWUnXG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gIGF0dHJpYnV0ZXMgPSB3ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpXG5cbiAgLy8gTWF0Y2hlcyBiZWhhdmlvciBvZlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVub19zdGQvYmxvYi82MzgyN2IxNjMzMGI4MjQ4OWEwNDYxNDAyN2MzM2I3OTA0ZTA4YmU1L2h0dHAvY29va2llLnRzI0wyNzhcbiAgc2V0Q29va2llKGhlYWRlcnMsIHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiAnJyxcbiAgICBleHBpcmVzOiBuZXcgRGF0ZSgwKSxcbiAgICAuLi5hdHRyaWJ1dGVzXG4gIH0pXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7Q29va2llW119XG4gKi9cbmZ1bmN0aW9uIGdldFNldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnZ2V0U2V0Q29va2llcycpXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llcyA9IGhlYWRlcnMuZ2V0U2V0Q29va2llKClcblxuICBpZiAoIWNvb2tpZXMpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBjb29raWVzLm1hcCgocGFpcikgPT4gcGFyc2VTZXRDb29raWUocGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCAnc2V0Q29va2llJylcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyKVxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5Db29raWUgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICduYW1lJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAndmFsdWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcigodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10odmFsdWUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSlcbiAgICB9KSxcbiAgICBrZXk6ICdleHBpcmVzJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSksXG4gICAga2V5OiAnbWF4QWdlJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdzZWN1cmUnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnaHR0cE9ubHknLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAga2V5OiAnc2FtZVNpdGUnLFxuICAgIGFsbG93ZWRWYWx1ZXM6IFsnU3RyaWN0JywgJ0xheCcsICdOb25lJ11cbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAndW5wYXJzZWQnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb29raWVzLFxuICBkZWxldGVDb29raWUsXG4gIGdldFNldENvb2tpZXMsXG4gIHNldENvb2tpZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgTWVzc2FnZVBvcnQgfSA9IHJlcXVpcmUoJ25vZGU6d29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIGlmICh0eXBlID09PSBrQ29uc3RydWN0KSB7XG4gICAgICBzdXBlcihhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSlcbiAgICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSAnTWVzc2FnZUV2ZW50IGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlLCBwcmVmaXgsICd0eXBlJylcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdChldmVudEluaXREaWN0LCBwcmVmaXgsICdldmVudEluaXREaWN0JylcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgfVxuXG4gIGdldCBkYXRhICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmRhdGFcbiAgfVxuXG4gIGdldCBvcmlnaW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQub3JpZ2luXG4gIH1cblxuICBnZXQgbGFzdEV2ZW50SWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGFzdEV2ZW50SWRcbiAgfVxuXG4gIGdldCBzb3VyY2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuc291cmNlXG4gIH1cblxuICBnZXQgcG9ydHMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHRoaXMuI2V2ZW50SW5pdC5wb3J0cykpIHtcbiAgICAgIE9iamVjdC5mcmVlemUodGhpcy4jZXZlbnRJbml0LnBvcnRzKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucG9ydHNcbiAgfVxuXG4gIGluaXRNZXNzYWdlRXZlbnQgKFxuICAgIHR5cGUsXG4gICAgYnViYmxlcyA9IGZhbHNlLFxuICAgIGNhbmNlbGFibGUgPSBmYWxzZSxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBvcmlnaW4gPSAnJyxcbiAgICBsYXN0RXZlbnRJZCA9ICcnLFxuICAgIHNvdXJjZSA9IG51bGwsXG4gICAgcG9ydHMgPSBbXVxuICApIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdNZXNzYWdlRXZlbnQuaW5pdE1lc3NhZ2VFdmVudCcpXG5cbiAgICByZXR1cm4gbmV3IE1lc3NhZ2VFdmVudCh0eXBlLCB7XG4gICAgICBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVGYXN0TWVzc2FnZUV2ZW50ICh0eXBlLCBpbml0KSB7XG4gICAgY29uc3QgbWVzc2FnZUV2ZW50ID0gbmV3IE1lc3NhZ2VFdmVudChrQ29uc3RydWN0LCB0eXBlLCBpbml0KVxuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0ID0gaW5pdFxuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0LmRhdGEgPz89IG51bGxcbiAgICBtZXNzYWdlRXZlbnQuI2V2ZW50SW5pdC5vcmlnaW4gPz89ICcnXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQubGFzdEV2ZW50SWQgPz89ICcnXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQuc291cmNlID8/PSBudWxsXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQucG9ydHMgPz89IFtdXG4gICAgcmV0dXJuIG1lc3NhZ2VFdmVudFxuICB9XG59XG5cbmNvbnN0IHsgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCB9ID0gTWVzc2FnZUV2ZW50XG5kZWxldGUgTWVzc2FnZUV2ZW50LmNyZWF0ZUZhc3RNZXNzYWdlRXZlbnRcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIGNvbnN0IHByZWZpeCA9ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlLCBwcmVmaXgsICd0eXBlJylcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2xvc2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICBjb25zdCBwcmVmaXggPSAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSwgcHJlZml4LCAndHlwZScpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICd3YXNDbGVhbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWFzb24nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ21lc3NhZ2UnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2ZpbGVuYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsaW5lbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbG5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlcnJvcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1lc3NhZ2VFdmVudCxcbiAgQ2xvc2VFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUaGlzIGlzIGEgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIgdW5pcXVlIHVzZWRcbi8vIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGVuZHBvaW50IGFjY2VwdHMgd2Vic29ja2V0XG4vLyBjb25uZWN0aW9ucy5cbi8vIFNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tMS4zXG5jb25zdCB1aWQgPSAnMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExJ1xuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG5jb25zdCBzdGF0ZXMgPSB7XG4gIENPTk5FQ1RJTkc6IDAsXG4gIE9QRU46IDEsXG4gIENMT1NJTkc6IDIsXG4gIENMT1NFRDogM1xufVxuXG5jb25zdCBzZW50Q2xvc2VGcmFtZVN0YXRlID0ge1xuICBOT1RfU0VOVDogMCxcbiAgUFJPQ0VTU0lORzogMSxcbiAgU0VOVDogMlxufVxuXG5jb25zdCBvcGNvZGVzID0ge1xuICBDT05USU5VQVRJT046IDB4MCxcbiAgVEVYVDogMHgxLFxuICBCSU5BUlk6IDB4MixcbiAgQ0xPU0U6IDB4OCxcbiAgUElORzogMHg5LFxuICBQT05HOiAweEFcbn1cblxuY29uc3QgbWF4VW5zaWduZWQxNkJpdCA9IDIgKiogMTYgLSAxIC8vIDY1NTM1XG5cbmNvbnN0IHBhcnNlclN0YXRlcyA9IHtcbiAgSU5GTzogMCxcbiAgUEFZTE9BRExFTkdUSF8xNjogMixcbiAgUEFZTE9BRExFTkdUSF82NDogMyxcbiAgUkVBRF9EQVRBOiA0XG59XG5cbmNvbnN0IGVtcHR5QnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG5cbmNvbnN0IHNlbmRIaW50cyA9IHtcbiAgc3RyaW5nOiAxLFxuICB0eXBlZEFycmF5OiAyLFxuICBhcnJheUJ1ZmZlcjogMyxcbiAgYmxvYjogNFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdWlkLFxuICBzZW50Q2xvc2VGcmFtZVN0YXRlLFxuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBzdGF0ZXMsXG4gIG9wY29kZXMsXG4gIG1heFVuc2lnbmVkMTZCaXQsXG4gIHBhcnNlclN0YXRlcyxcbiAgZW1wdHlCdWZmZXIsXG4gIHNlbmRIaW50c1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga0NvbnRyb2xsZXIsIGtSZXNwb25zZSwga0JpbmFyeVR5cGUsIGtXZWJTb2NrZXRVUkwgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHN0YXRlcywgb3Bjb2RlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBFcnJvckV2ZW50LCBjcmVhdGVGYXN0TWVzc2FnZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IGlzVXRmOCB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCwgcmVtb3ZlSFRUUFdoaXRlc3BhY2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcblxuLyogZ2xvYmFscyBCbG9iICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGluZyAod3MpIHtcbiAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIG5vdCB5ZXQgZXN0YWJsaXNoZWQsIGFuZCB0aGUgY29ubmVjdGlvblxuICAvLyBpcyBub3QgeWV0IGNsb3NlZCwgdGhlbiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENPTk5FQ1RJTkcgc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DT05ORUNUSU5HXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRXN0YWJsaXNoZWQgKHdzKSB7XG4gIC8vIElmIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBpcyB2YWxpZGF0ZWQgYXMgcHJvdmlkZWQgZm9yIGFib3ZlLCBpdCBpc1xuICAvLyBzYWlkIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBFc3RhYmxpc2hlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIGluIHRoZSBPUEVOIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuT1BFTlxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDbG9zZWQgKHdzKSB7XG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TRURcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0geyguLi5hcmdzOiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIEV2ZW50PikgPT4gRXZlbnR9IGV2ZW50RmFjdG9yeVxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50RmFjdG9yeSA9ICh0eXBlLCBpbml0KSA9PiBuZXcgRXZlbnQodHlwZSwgaW5pdCksIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW50XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IGV2ZW50RmFjdG9yeShlLCBldmVudEluaXREaWN0KVxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSB1dGY4RGVjb2RlKGRhdGEpXG4gICAgfSBjYXRjaCB7XG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGludmFsaWQgVVRGLTggaW4gdGV4dCBmcmFtZS4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IG9wY29kZXMuQklOQVJZKSB7XG4gICAgaWYgKHdzW2tCaW5hcnlUeXBlXSA9PT0gJ2Jsb2InKSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJibG9iXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQmxvYiBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgICAgb2JqZWN0LCB0aGF0IHJlcHJlc2VudHMgZGF0YSBhcyBpdHMgcmF3IGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBCbG9iKFtkYXRhXSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYXJyYXlidWZmZXJcIlxuICAgICAgLy8gICAgICBhIG5ldyBBcnJheUJ1ZmZlciBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZVxuICAgICAgLy8gICAgICBXZWJTb2NrZXQgb2JqZWN0LCB3aG9zZSBjb250ZW50cyBhcmUgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gdG9BcnJheUJ1ZmZlcihkYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgbWVzc2FnZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCwgdXNpbmcgTWVzc2FnZUV2ZW50LFxuICAvLyAgICB3aXRoIHRoZSBvcmlnaW4gYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgb2JqZWN0XHUyMDE5cyB1cmwncyBvcmlnaW4sIGFuZCB0aGUgZGF0YSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gZGF0YUZvckV2ZW50LlxuICBmaXJlRXZlbnQoJ21lc3NhZ2UnLCB3cywgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG5mdW5jdGlvbiB0b0FycmF5QnVmZmVyIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5ieXRlTGVuZ3RoID09PSBidWZmZXIuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gYnVmZmVyLmJ1ZmZlclxuICB9XG4gIHJldHVybiBidWZmZXIuYnVmZmVyLnNsaWNlKGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZU9mZnNldCArIGJ1ZmZlci5ieXRlTGVuZ3RoKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm90b2NvbC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSBwcm90b2NvbC5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fCAvLyBDVEwsIGNvbnRhaW5zIFNQICgweDIwKSBhbmQgSFQgKDB4MDkpXG4gICAgICBjb2RlID4gMHg3RSB8fFxuICAgICAgY29kZSA9PT0gMHgyMiB8fCAvLyBcIlxuICAgICAgY29kZSA9PT0gMHgyOCB8fCAvLyAoXG4gICAgICBjb2RlID09PSAweDI5IHx8IC8vIClcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgyRiB8fCAvLyAvXG4gICAgICBjb2RlID09PSAweDNBIHx8IC8vIDpcbiAgICAgIGNvZGUgPT09IDB4M0IgfHwgLy8gO1xuICAgICAgY29kZSA9PT0gMHgzQyB8fCAvLyA8XG4gICAgICBjb2RlID09PSAweDNEIHx8IC8vID1cbiAgICAgIGNvZGUgPT09IDB4M0UgfHwgLy8gPlxuICAgICAgY29kZSA9PT0gMHgzRiB8fCAvLyA/XG4gICAgICBjb2RlID09PSAweDQwIHx8IC8vIEBcbiAgICAgIGNvZGUgPT09IDB4NUIgfHwgLy8gW1xuICAgICAgY29kZSA9PT0gMHg1QyB8fCAvLyBcXFxuICAgICAgY29kZSA9PT0gMHg1RCB8fCAvLyBdXG4gICAgICBjb2RlID09PSAweDdCIHx8IC8vIHtcbiAgICAgIGNvZGUgPT09IDB4N0QgLy8gfVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTctNFxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN0YXR1c0NvZGUgKGNvZGUpIHtcbiAgaWYgKGNvZGUgPj0gMTAwMCAmJiBjb2RlIDwgMTAxNSkge1xuICAgIHJldHVybiAoXG4gICAgICBjb2RlICE9PSAxMDA0ICYmIC8vIHJlc2VydmVkXG4gICAgICBjb2RlICE9PSAxMDA1ICYmIC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgICAgY29kZSAhPT0gMTAwNiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICApXG4gIH1cblxuICByZXR1cm4gY29kZSA+PSAzMDAwICYmIGNvZGUgPD0gNDk5OVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gKi9cbmZ1bmN0aW9uIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uICh3cywgcmVhc29uKSB7XG4gIGNvbnN0IHsgW2tDb250cm9sbGVyXTogY29udHJvbGxlciwgW2tSZXNwb25zZV06IHJlc3BvbnNlIH0gPSB3c1xuXG4gIGNvbnRyb2xsZXIuYWJvcnQoKVxuXG4gIGlmIChyZXNwb25zZT8uc29ja2V0ICYmICFyZXNwb25zZS5zb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3koKVxuICB9XG5cbiAgaWYgKHJlYXNvbikge1xuICAgIC8vIFRPRE86IHByb2Nlc3MubmV4dFRpY2tcbiAgICBmaXJlRXZlbnQoJ2Vycm9yJywgd3MsICh0eXBlLCBpbml0KSA9PiBuZXcgRXJyb3JFdmVudCh0eXBlLCBpbml0KSwge1xuICAgICAgZXJyb3I6IG5ldyBFcnJvcihyZWFzb24pLFxuICAgICAgbWVzc2FnZTogcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS41XG4gKiBAcGFyYW0ge251bWJlcn0gb3Bjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzQ29udHJvbEZyYW1lIChvcGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICBvcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UgfHxcbiAgICBvcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgIG9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HXG4gIClcbn1cblxuZnVuY3Rpb24gaXNDb250aW51YXRpb25GcmFtZSAob3Bjb2RlKSB7XG4gIHJldHVybiBvcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG59XG5cbmZ1bmN0aW9uIGlzVGV4dEJpbmFyeUZyYW1lIChvcGNvZGUpIHtcbiAgcmV0dXJuIG9wY29kZSA9PT0gb3Bjb2Rlcy5URVhUIHx8IG9wY29kZSA9PT0gb3Bjb2Rlcy5CSU5BUllcbn1cblxuZnVuY3Rpb24gaXNWYWxpZE9wY29kZSAob3Bjb2RlKSB7XG4gIHJldHVybiBpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpIHx8IGlzQ29udGludWF0aW9uRnJhbWUob3Bjb2RlKSB8fCBpc0NvbnRyb2xGcmFtZShvcGNvZGUpXG59XG5cbi8qKlxuICogUGFyc2VzIGEgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIGhlYWRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHRlbnNpb25zXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuLy8gVE9ETyhAVXpsb3BhaywgQEtoYWZyYURldik6IG1ha2UgY29tcGxpYW50IGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTkuMVxuZnVuY3Rpb24gcGFyc2VFeHRlbnNpb25zIChleHRlbnNpb25zKSB7XG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gIGNvbnN0IGV4dGVuc2lvbkxpc3QgPSBuZXcgTWFwKClcblxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBleHRlbnNpb25zLmxlbmd0aCkge1xuICAgIGNvbnN0IHBhaXIgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCgnOycsIGV4dGVuc2lvbnMsIHBvc2l0aW9uKVxuICAgIGNvbnN0IFtuYW1lLCB2YWx1ZSA9ICcnXSA9IHBhaXIuc3BsaXQoJz0nKVxuXG4gICAgZXh0ZW5zaW9uTGlzdC5zZXQoXG4gICAgICByZW1vdmVIVFRQV2hpdGVzcGFjZShuYW1lLCB0cnVlLCBmYWxzZSksXG4gICAgICByZW1vdmVIVFRQV2hpdGVzcGFjZSh2YWx1ZSwgZmFsc2UsIHRydWUpXG4gICAgKVxuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgcmV0dXJuIGV4dGVuc2lvbkxpc3Rcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3NjkyI3NlY3Rpb24tNy4xLjIuMlxuICogQGRlc2NyaXB0aW9uIFwiY2xpZW50LW1heC13aW5kb3ctYml0cyA9IDEqRElHSVRcIlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRDbGllbnRXaW5kb3dCaXRzICh2YWx1ZSkge1xuICAvLyBNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlclxuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBDaGVjayBhbGwgY2hhcmFjdGVycyBhcmUgQVNDSUkgZGlnaXRzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBieXRlID0gdmFsdWUuY2hhckNvZGVBdChpKVxuXG4gICAgaWYgKGJ5dGUgPCAweDMwIHx8IGJ5dGUgPiAweDM5KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBudW1lcmljIHJhbmdlOiB6bGliIHJlcXVpcmVzIHdpbmRvd0JpdHMgaW4gcmFuZ2UgOC0xNVxuICBjb25zdCBudW0gPSBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKVxuICByZXR1cm4gbnVtID49IDggJiYgbnVtIDw9IDE1XG59XG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaW50bC5odG1sI2RldGVjdGluZy1pbnRlcm5hdGlvbmFsaXphdGlvbi1zdXBwb3J0XG5jb25zdCBoYXNJbnRsID0gdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMuaWN1ID09PSAnc3RyaW5nJ1xuY29uc3QgZmF0YWxEZWNvZGVyID0gaGFzSW50bCA/IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pIDogdW5kZWZpbmVkXG5cbi8qKlxuICogQ29udmVydHMgYSBCdWZmZXIgdG8gdXRmLTgsIGV2ZW4gb24gcGxhdGZvcm1zIHdpdGhvdXQgaWN1LlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICovXG5jb25zdCB1dGY4RGVjb2RlID0gaGFzSW50bFxuICA/IGZhdGFsRGVjb2Rlci5kZWNvZGUuYmluZChmYXRhbERlY29kZXIpXG4gIDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuICAgIGlmIChpc1V0ZjgoYnVmZmVyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygndXRmLTgnKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHV0Zi04IHJlY2VpdmVkLicpXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ29ubmVjdGluZyxcbiAgaXNFc3RhYmxpc2hlZCxcbiAgaXNDbG9zaW5nLFxuICBpc0Nsb3NlZCxcbiAgZmlyZUV2ZW50LFxuICBpc1ZhbGlkU3VicHJvdG9jb2wsXG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkLFxuICB1dGY4RGVjb2RlLFxuICBpc0NvbnRyb2xGcmFtZSxcbiAgaXNDb250aW51YXRpb25GcmFtZSxcbiAgaXNUZXh0QmluYXJ5RnJhbWUsXG4gIGlzVmFsaWRPcGNvZGUsXG4gIHBhcnNlRXh0ZW5zaW9ucyxcbiAgaXNWYWxpZENsaWVudFdpbmRvd0JpdHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhVbnNpZ25lZDE2Qml0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IEJVRkZFUl9TSVpFID0gMTYzODZcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xubGV0IGJ1ZmZlciA9IG51bGxcbmxldCBidWZJZHggPSBCVUZGRVJfU0laRVxuXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdub2RlOmNyeXB0bycpXG4vKiBjOCBpZ25vcmUgbmV4dCAzICovXG59IGNhdGNoIHtcbiAgY3J5cHRvID0ge1xuICAgIC8vIG5vdCBmdWxsIGNvbXBhdGliaWxpdHksIGJ1dCBtaW5pbXVtLlxuICAgIHJhbmRvbUZpbGxTeW5jOiBmdW5jdGlvbiByYW5kb21GaWxsU3luYyAoYnVmZmVyLCBfb2Zmc2V0LCBfc2l6ZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW2ldID0gTWF0aC5yYW5kb20oKSAqIDI1NSB8IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWZmZXJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVNYXNrICgpIHtcbiAgaWYgKGJ1ZklkeCA9PT0gQlVGRkVSX1NJWkUpIHtcbiAgICBidWZJZHggPSAwXG4gICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKChidWZmZXIgPz89IEJ1ZmZlci5hbGxvY1Vuc2FmZShCVUZGRVJfU0laRSkpLCAwLCBCVUZGRVJfU0laRSlcbiAgfVxuICByZXR1cm4gW2J1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK11dXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgZnJhbWVEYXRhID0gdGhpcy5mcmFtZURhdGFcbiAgICBjb25zdCBtYXNrS2V5ID0gZ2VuZXJhdGVNYXNrKClcbiAgICBjb25zdCBib2R5TGVuZ3RoID0gZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gbWFza0tleVswXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAzXSA9IG1hc2tLZXlbMV1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMl0gPSBtYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gbWFza0tleVszXVxuXG4gICAgYnVmZmVyWzFdID0gcGF5bG9hZExlbmd0aFxuXG4gICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2QkUoYm9keUxlbmd0aCwgMilcbiAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgLy8gQ2xlYXIgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGhcbiAgICAgIGJ1ZmZlclsyXSA9IGJ1ZmZlclszXSA9IDBcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnRCRShib2R5TGVuZ3RoLCA0LCA2KVxuICAgIH1cblxuICAgIGJ1ZmZlclsxXSB8PSAweDgwIC8vIE1BU0tcblxuICAgIC8vIG1hc2sgYm9keVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keUxlbmd0aDsgKytpKSB7XG4gICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSBmcmFtZURhdGFbaV0gXiBtYXNrS2V5W2kgJiAzXVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdWlkLCBzdGF0ZXMsIHNlbnRDbG9zZUZyYW1lU3RhdGUsIGVtcHR5QnVmZmVyLCBvcGNvZGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtSZWFkeVN0YXRlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlcixcbiAga1JlY2VpdmVkQ2xvc2UsXG4gIGtSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGZpcmVFdmVudCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIGlzQ2xvc2luZywgaXNDbG9zZWQsIGlzRXN0YWJsaXNoZWQsIHBhcnNlRXh0ZW5zaW9ucyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY2hhbm5lbHMgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvZGlhZ25vc3RpY3MnKVxuY29uc3QgeyBDbG9zZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgSGVhZGVycywgZ2V0SGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXREZWNvZGVTcGxpdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xuXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXdlYnNvY2tldC1lc3RhYmxpc2hcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7KHJlc3BvbnNlOiBhbnksIGV4dGVuc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA9PiB2b2lkfSBvbkVzdGFibGlzaFxuICogQHBhcmFtIHtQYXJ0aWFsPGltcG9ydCgnLi4vLi4vdHlwZXMvd2Vic29ja2V0JykuV2ViU29ja2V0SW5pdD59IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiAodXJsLCBwcm90b2NvbHMsIGNsaWVudCwgd3MsIG9uRXN0YWJsaXNoLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0VVJMIGJlIGEgY29weSBvZiB1cmwsIHdpdGggaXRzIHNjaGVtZSBzZXQgdG8gXCJodHRwXCIsIGlmIHVybFx1MjAxOXNcbiAgLy8gICAgc2NoZW1lIGlzIFwid3NcIiwgYW5kIHRvIFwiaHR0cHNcIiBvdGhlcndpc2UuXG4gIGNvbnN0IHJlcXVlc3RVUkwgPSB1cmxcblxuICByZXF1ZXN0VVJMLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSAnd3M6JyA/ICdodHRwOicgOiAnaHR0cHM6J1xuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGEgbmV3IHJlcXVlc3QsIHdob3NlIFVSTCBpcyByZXF1ZXN0VVJMLCBjbGllbnQgaXMgY2xpZW50LFxuICAvLyAgICBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcIm5vbmVcIiwgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCBtb2RlIGlzXG4gIC8vICAgIFwid2Vic29ja2V0XCIsIGNyZWRlbnRpYWxzIG1vZGUgaXMgXCJpbmNsdWRlXCIsIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiICxcbiAgLy8gICAgYW5kIHJlZGlyZWN0IG1vZGUgaXMgXCJlcnJvclwiLlxuICBjb25zdCByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgIHVybExpc3Q6IFtyZXF1ZXN0VVJMXSxcbiAgICBjbGllbnQsXG4gICAgc2VydmljZVdvcmtlcnM6ICdub25lJyxcbiAgICByZWZlcnJlcjogJ25vLXJlZmVycmVyJyxcbiAgICBtb2RlOiAnd2Vic29ja2V0JyxcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICAgIHJlZGlyZWN0OiAnZXJyb3InXG4gIH0pXG5cbiAgLy8gTm90ZTogdW5kaWNpIGV4dGVuc2lvbiwgYWxsb3cgc2V0dGluZyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gZ2V0SGVhZGVyc0xpc3QobmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKSlcblxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QgPSBoZWFkZXJzTGlzdFxuICB9XG5cbiAgLy8gMy4gQXBwZW5kIChgVXBncmFkZWAsIGB3ZWJzb2NrZXRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gNC4gQXBwZW5kIChgQ29ubmVjdGlvbmAsIGBVcGdyYWRlYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIE5vdGU6IGJvdGggb2YgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdW5kaWNpIGN1cnJlbnRseS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi82OGMyNjljNDE0NGM0NDZmM2YxMjIwOTUxMzM4ZGFlZjRhNmI1ZWM0L2xpYi9jbGllbnQuanMjTDEzOTdcblxuICAvLyA1LiBMZXQga2V5VmFsdWUgYmUgYSBub25jZSBjb25zaXN0aW5nIG9mIGEgcmFuZG9tbHkgc2VsZWN0ZWRcbiAgLy8gICAgMTYtYnl0ZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIGZvcmdpdmluZy1iYXNlNjQtZW5jb2RlZCBhbmRcbiAgLy8gICAgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBjb25zdCBrZXlWYWx1ZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpXG5cbiAgLy8gNi4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1LZXlgLCBrZXlWYWx1ZSkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWtleScsIGtleVZhbHVlKVxuXG4gIC8vIDcuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtVmVyc2lvbmAsIGAxM2ApIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC12ZXJzaW9uJywgJzEzJylcblxuICAvLyA4LiBGb3IgZWFjaCBwcm90b2NvbCBpbiBwcm90b2NvbHMsIGNvbWJpbmVcbiAgLy8gICAgKGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCwgcHJvdG9jb2wpIGluIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBmb3IgKGNvbnN0IHByb3RvY29sIG9mIHByb3RvY29scykge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXByb3RvY29sJywgcHJvdG9jb2wpXG4gIH1cblxuICAvLyA5LiBMZXQgcGVybWVzc2FnZURlZmxhdGUgYmUgYSB1c2VyLWFnZW50IGRlZmluZWRcbiAgLy8gICAgXCJwZXJtZXNzYWdlLWRlZmxhdGVcIiBleHRlbnNpb24gaGVhZGVyIHZhbHVlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi9jZTc4MjM0ZjVlNjUzYTVkMzkxNjgxM2ZmOTkwZjA1MzUxMDIyN2JjL25ldHdlcmsvcHJvdG9jb2wvd2Vic29ja2V0L1dlYlNvY2tldENoYW5uZWwuY3BwI0wyNjczXG4gIGNvbnN0IHBlcm1lc3NhZ2VEZWZsYXRlID0gJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgY2xpZW50X21heF93aW5kb3dfYml0cydcblxuICAvLyAxMC4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zYCwgcGVybWVzc2FnZURlZmxhdGUpIHRvXG4gIC8vICAgICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycsIHBlcm1lc3NhZ2VEZWZsYXRlKVxuXG4gIC8vIDExLiBGZXRjaCByZXF1ZXN0IHdpdGggdXNlUGFyYWxsZWxRdWV1ZSBzZXQgdG8gdHJ1ZSwgYW5kXG4gIC8vICAgICBwcm9jZXNzUmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3RlcHM6XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICB1c2VQYXJhbGxlbFF1ZXVlOiB0cnVlLFxuICAgIGRpc3BhdGNoZXI6IG9wdGlvbnMuZGlzcGF0Y2hlcixcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2VcdTIwMTlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcbiAgICAgIGxldCBleHRlbnNpb25zXG5cbiAgICAgIGlmIChzZWNFeHRlbnNpb24gIT09IG51bGwpIHtcbiAgICAgICAgZXh0ZW5zaW9ucyA9IHBhcnNlRXh0ZW5zaW9ucyhzZWNFeHRlbnNpb24pXG5cbiAgICAgICAgaWYgKCFleHRlbnNpb25zLmhhcygncGVybWVzc2FnZS1kZWZsYXRlJykpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXIgZG9lcyBub3QgbWF0Y2guJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm90b2NvbHMgPSBnZXREZWNvZGVTcGxpdCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcsIHJlcXVlc3QuaGVhZGVyc0xpc3QpXG5cbiAgICAgICAgLy8gVGhlIGNsaWVudCBjYW4gcmVxdWVzdCB0aGF0IHRoZSBzZXJ2ZXIgdXNlIGEgc3BlY2lmaWMgc3VicHJvdG9jb2wgYnlcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgZmllbGQgaW4gaXRzIGhhbmRzaGFrZS4gIElmIGl0XG4gICAgICAgIC8vIGlzIHNwZWNpZmllZCwgdGhlIHNlcnZlciBuZWVkcyB0byBpbmNsdWRlIHRoZSBzYW1lIGZpZWxkIGFuZCBvbmUgb2ZcbiAgICAgICAgLy8gdGhlIHNlbGVjdGVkIHN1YnByb3RvY29sIHZhbHVlcyBpbiBpdHMgcmVzcG9uc2UgZm9yIHRoZSBjb25uZWN0aW9uIHRvXG4gICAgICAgIC8vIGJlIGVzdGFibGlzaGVkLlxuICAgICAgICBpZiAoIXJlcXVlc3RQcm90b2NvbHMuaW5jbHVkZXMoc2VjUHJvdG9jb2wpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdQcm90b2NvbCB3YXMgbm90IHNldCBpbiB0aGUgb3BlbmluZyBoYW5kc2hha2UuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSwgZXh0ZW5zaW9ucylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuZnVuY3Rpb24gY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uICh3cywgY29kZSwgcmVhc29uLCByZWFzb25CeXRlTGVuZ3RoKSB7XG4gIGlmIChpc0Nsb3Npbmcod3MpIHx8IGlzQ2xvc2VkKHdzKSkge1xuICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgLy8gRG8gbm90aGluZy5cbiAgfSBlbHNlIGlmICghaXNFc3RhYmxpc2hlZCh3cykpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgbm90IHlldCBlc3RhYmxpc2hlZFxuICAgIC8vIEZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGFuZCBzZXQgdGhpcydzIHJlYWR5IHN0YXRlXG4gICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIGl0IHdhcyBlc3RhYmxpc2hlZC4nKVxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSBpZiAod3Nba1NlbnRDbG9zZV0gPT09IHNlbnRDbG9zZUZyYW1lU3RhdGUuTk9UX1NFTlQpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZFxuICAgIC8vIFN0YXJ0IHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgYW5kIHNldCB0aGlzJ3MgcmVhZHlcbiAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAvLyAtIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAvLyAgIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG4gICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAvLyAgIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAvLyAtIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgd3Nba1NlbnRDbG9zZV0gPSBzZW50Q2xvc2VGcmFtZVN0YXRlLlBST0NFU1NJTkdcblxuICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgLy8gbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cblxuICAgIC8vIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgfSBlbHNlIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIgKyByZWFzb25CeXRlTGVuZ3RoKVxuICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGUocmVhc29uLCAyLCAndXRmLTgnKVxuICAgIH0gZWxzZSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgY29uc3Qgc29ja2V0ID0gd3Nba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIHNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSlcblxuICAgIHdzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UXG5cbiAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlXG4gICAgLy8gU2V0IHRoaXMncyByZWFkeSBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0RGF0YSAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLndzW2tCeXRlUGFyc2VyXS53cml0ZShjaHVuaykpIHtcbiAgICB0aGlzLnBhdXNlKClcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjRcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcbiAgY29uc3QgeyBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignZGF0YScsIG9uU29ja2V0RGF0YSlcbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICByZXNwb25zZS5zb2NrZXQub2ZmKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG5cbiAgLy8gSWYgdGhlIFRDUCBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWZ0ZXIgdGhlXG4gIC8vIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSB3YXMgY29tcGxldGVkLCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAgLy8gaXMgc2FpZCB0byBoYXZlIGJlZW4gY2xvc2VkIF9jbGVhbmx5Xy5cbiAgY29uc3Qgd2FzQ2xlYW4gPSB3c1trU2VudENsb3NlXSA9PT0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UICYmIHdzW2tSZWNlaXZlZENsb3NlXVxuXG4gIGxldCBjb2RlID0gMTAwNVxuICBsZXQgcmVhc29uID0gJydcblxuICBjb25zdCByZXN1bHQgPSB3c1trQnl0ZVBhcnNlcl0uY2xvc2luZ0luZm9cblxuICBpZiAocmVzdWx0ICYmICFyZXN1bHQuZXJyb3IpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgLy8gSWYgX1RoZSBXZWJTb2NrZXRcbiAgICAvLyBDb25uZWN0aW9uIGlzIENsb3NlZF8gYW5kIG5vIENsb3NlIGNvbnRyb2wgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZVxuICAgIC8vIGVuZHBvaW50IChzdWNoIGFzIGNvdWxkIG9jY3VyIGlmIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uXG4gICAgLy8gaXMgbG9zdCksIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXMgY29uc2lkZXJlZCB0byBiZVxuICAgIC8vIDEwMDYuXG4gICAgY29kZSA9IDEwMDZcbiAgfVxuXG4gIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gQ0xPU0VEICgzKS5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NFRFxuXG4gIC8vIDIuIElmIHRoZSB1c2VyIGFnZW50IHdhcyByZXF1aXJlZCB0byBmYWlsIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgY29ubmVjdGlvbiwgb3IgaWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHdhcyBjbG9zZWRcbiAgLy8gICAgYWZ0ZXIgYmVpbmcgZmxhZ2dlZCBhcyBmdWxsLCBmaXJlIGFuIGV2ZW50IG5hbWVkIGVycm9yXG4gIC8vICAgIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAvLyBUT0RPXG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBjbG9zZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCxcbiAgLy8gICAgdXNpbmcgQ2xvc2VFdmVudCwgd2l0aCB0aGUgd2FzQ2xlYW4gYXR0cmlidXRlXG4gIC8vICAgIGluaXRpYWxpemVkIHRvIHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gY2xvc2VkIGNsZWFubHlcbiAgLy8gICAgYW5kIGZhbHNlIG90aGVyd2lzZSwgdGhlIGNvZGUgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvXG4gIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZSBjb2RlLCBhbmQgdGhlIHJlYXNvblxuICAvLyAgICBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBVVEYtOFxuICAvLyAgICBkZWNvZGUgd2l0aG91dCBCT00gdG8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlXG4gIC8vICAgIHJlYXNvbi5cbiAgLy8gVE9ETzogcHJvY2Vzcy5uZXh0VGlja1xuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsICh0eXBlLCBpbml0KSA9PiBuZXcgQ2xvc2VFdmVudCh0eXBlLCBpbml0KSwge1xuICAgIHdhc0NsZWFuLCBjb2RlLCByZWFzb25cbiAgfSlcblxuICBpZiAoY2hhbm5lbHMuY2xvc2UuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5jbG9zZS5wdWJsaXNoKHtcbiAgICAgIHdlYnNvY2tldDogd3MsXG4gICAgICBjb2RlLFxuICAgICAgcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnJvcikge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcblxuICBpZiAoY2hhbm5lbHMuc29ja2V0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zb2NrZXRFcnJvci5wdWJsaXNoKGVycm9yKVxuICB9XG5cbiAgdGhpcy5kZXN0cm95KClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24sXG4gIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGNyZWF0ZUluZmxhdGVSYXcsIFpfREVGQVVMVF9XSU5ET1dCSVRTIH0gPSByZXF1aXJlKCdub2RlOnpsaWInKVxuY29uc3QgeyBpc1ZhbGlkQ2xpZW50V2luZG93Qml0cyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL2Vycm9ycycpXG5cbmNvbnN0IHRhaWwgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHhmZiwgMHhmZl0pXG5jb25zdCBrQnVmZmVyID0gU3ltYm9sKCdrQnVmZmVyJylcbmNvbnN0IGtMZW5ndGggPSBTeW1ib2woJ2tMZW5ndGgnKVxuXG5jbGFzcyBQZXJNZXNzYWdlRGVmbGF0ZSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOnpsaWInKS5JbmZsYXRlUmF3fSAqL1xuICAjaW5mbGF0ZVxuXG4gICNvcHRpb25zID0ge31cblxuICAjbWF4UGF5bG9hZFNpemUgPSAwXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gZXh0ZW5zaW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dGVuc2lvbnMsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNvcHRpb25zLnNlcnZlck5vQ29udGV4dFRha2VvdmVyID0gZXh0ZW5zaW9ucy5oYXMoJ3NlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyJylcbiAgICB0aGlzLiNvcHRpb25zLnNlcnZlck1heFdpbmRvd0JpdHMgPSBleHRlbnNpb25zLmdldCgnc2VydmVyX21heF93aW5kb3dfYml0cycpXG5cbiAgICB0aGlzLiNtYXhQYXlsb2FkU2l6ZSA9IG9wdGlvbnMubWF4UGF5bG9hZFNpemVcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXByZXNzIGEgY29tcHJlc3NlZCBwYXlsb2FkLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmsgQ29tcHJlc3NlZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluIEZpbmFsIGZyYWdtZW50IGZsYWdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb25cbiAgICovXG4gIGRlY29tcHJlc3MgKGNodW5rLCBmaW4sIGNhbGxiYWNrKSB7XG4gICAgLy8gQW4gZW5kcG9pbnQgdXNlcyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSB0byBkZWNvbXByZXNzIGEgbWVzc2FnZS5cbiAgICAvLyAxLiAgQXBwZW5kIDQgb2N0ZXRzIG9mIDB4MDAgMHgwMCAweGZmIDB4ZmYgdG8gdGhlIHRhaWwgZW5kIG9mIHRoZVxuICAgIC8vICAgICBwYXlsb2FkIG9mIHRoZSBtZXNzYWdlLlxuICAgIC8vIDIuICBEZWNvbXByZXNzIHRoZSByZXN1bHRpbmcgZGF0YSB1c2luZyBERUZMQVRFLlxuICAgIGlmICghdGhpcy4jaW5mbGF0ZSkge1xuICAgICAgbGV0IHdpbmRvd0JpdHMgPSBaX0RFRkFVTFRfV0lORE9XQklUU1xuXG4gICAgICBpZiAodGhpcy4jb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzKSB7IC8vIGVtcHR5IHZhbHVlcyBkZWZhdWx0IHRvIFpfREVGQVVMVF9XSU5ET1dCSVRTXG4gICAgICAgIGlmICghaXNWYWxpZENsaWVudFdpbmRvd0JpdHModGhpcy4jb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzKSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignSW52YWxpZCBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3dCaXRzID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuI29wdGlvbnMuc2VydmVyTWF4V2luZG93Qml0cylcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy4jaW5mbGF0ZSA9IGNyZWF0ZUluZmxhdGVSYXcoeyB3aW5kb3dCaXRzIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0gPSBbXVxuICAgICAgdGhpcy4jaW5mbGF0ZVtrTGVuZ3RoXSA9IDBcblxuICAgICAgdGhpcy4jaW5mbGF0ZS5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuI2luZmxhdGVba0xlbmd0aF0gKz0gZGF0YS5sZW5ndGhcblxuICAgICAgICBpZiAodGhpcy4jbWF4UGF5bG9hZFNpemUgPiAwICYmIHRoaXMuI2luZmxhdGVba0xlbmd0aF0gPiB0aGlzLiNtYXhQYXlsb2FkU2l6ZSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3IoKSlcbiAgICAgICAgICB0aGlzLiNpbmZsYXRlLnJlbW92ZUFsbExpc3RlbmVycygpXG4gICAgICAgICAgdGhpcy4jaW5mbGF0ZSA9IG51bGxcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0ucHVzaChkYXRhKVxuICAgICAgfSlcblxuICAgICAgdGhpcy4jaW5mbGF0ZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuI2luZmxhdGUgPSBudWxsXG4gICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy4jaW5mbGF0ZS53cml0ZShjaHVuaylcbiAgICBpZiAoZmluKSB7XG4gICAgICB0aGlzLiNpbmZsYXRlLndyaXRlKHRhaWwpXG4gICAgfVxuXG4gICAgdGhpcy4jaW5mbGF0ZS5mbHVzaCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuI2luZmxhdGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGwgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2luZmxhdGVba0J1ZmZlcl0sIHRoaXMuI2luZmxhdGVba0xlbmd0aF0pXG5cbiAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0ubGVuZ3RoID0gMFxuICAgICAgdGhpcy4jaW5mbGF0ZVtrTGVuZ3RoXSA9IDBcblxuICAgICAgY2FsbGJhY2sobnVsbCwgZnVsbClcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBQZXJNZXNzYWdlRGVmbGF0ZSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV3JpdGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgcGFyc2VyU3RhdGVzLCBvcGNvZGVzLCBzdGF0ZXMsIGVtcHR5QnVmZmVyLCBzZW50Q2xvc2VGcmFtZVN0YXRlIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrU2VudENsb3NlLCBrUmVzcG9uc2UsIGtSZWNlaXZlZENsb3NlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9kaWFnbm9zdGljcycpXG5jb25zdCB7XG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBpc1ZhbGlkT3Bjb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkLFxuICB1dGY4RGVjb2RlLFxuICBpc0NvbnRyb2xGcmFtZSxcbiAgaXNUZXh0QmluYXJ5RnJhbWUsXG4gIGlzQ29udGludWF0aW9uRnJhbWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuY29uc3QgeyBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFBlck1lc3NhZ2VEZWZsYXRlIH0gPSByZXF1aXJlKCcuL3Blcm1lc3NhZ2UtZGVmbGF0ZScpXG5jb25zdCB7IE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9lcnJvcnMnKVxuXG5mdW5jdGlvbiBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlICh3cywgY29kZSwgcmVhc29uKSB7XG4gIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvbih3cywgY29kZSwgcmVhc29uLCBCdWZmZXIuYnl0ZUxlbmd0aChyZWFzb24pKVxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgcmVhc29uKVxufVxuXG4vLyBUaGlzIGNvZGUgd2FzIGluZmx1ZW5jZWQgYnkgd3MgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEVpbmFyIE90dG8gU3Rhbmd2aWsgPGVpbmFyb3NAZ21haWwuY29tPlxuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFybm91dCBLYXplbWllciBhbmQgY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYgTHVpZ2kgUGluY2EgYW5kIGNvbnRyaWJ1dG9yc1xuXG5jbGFzcyBCeXRlUGFyc2VyIGV4dGVuZHMgV3JpdGFibGUge1xuICAjYnVmZmVycyA9IFtdXG4gICNmcmFnbWVudHNCeXRlcyA9IDBcbiAgI2J5dGVPZmZzZXQgPSAwXG4gICNsb29wID0gZmFsc2VcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQZXJNZXNzYWdlRGVmbGF0ZT59ICovXG4gICNleHRlbnNpb25zXG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICNtYXhGcmFnbWVudHNcblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgI21heFBheWxvYWRTaXplXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBzdHJpbmc+fG51bGx9IGV4dGVuc2lvbnNcbiAgICogQHBhcmFtIHt7IG1heEZyYWdtZW50cz86IG51bWJlciwgbWF4UGF5bG9hZFNpemU/OiBudW1iZXIgfX0gW29wdGlvbnNdXG4gICAqL1xuICBjb25zdHJ1Y3RvciAod3MsIGV4dGVuc2lvbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMud3MgPSB3c1xuICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zID09IG51bGwgPyBuZXcgTWFwKCkgOiBleHRlbnNpb25zXG4gICAgdGhpcy4jbWF4RnJhZ21lbnRzID0gb3B0aW9ucy5tYXhGcmFnbWVudHMgPz8gMFxuICAgIHRoaXMuI21heFBheWxvYWRTaXplID0gb3B0aW9ucy5tYXhQYXlsb2FkU2l6ZSA/PyAwXG5cbiAgICBpZiAodGhpcy4jZXh0ZW5zaW9ucy5oYXMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpKSB7XG4gICAgICB0aGlzLiNleHRlbnNpb25zLnNldCgncGVybWVzc2FnZS1kZWZsYXRlJywgbmV3IFBlck1lc3NhZ2VEZWZsYXRlKGV4dGVuc2lvbnMsIG9wdGlvbnMpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKi9cbiAgX3dyaXRlIChjaHVuaywgXywgY2FsbGJhY2spIHtcbiAgICB0aGlzLiNidWZmZXJzLnB1c2goY2h1bmspXG4gICAgdGhpcy4jYnl0ZU9mZnNldCArPSBjaHVuay5sZW5ndGhcbiAgICB0aGlzLiNsb29wID0gdHJ1ZVxuXG4gICAgdGhpcy5ydW4oY2FsbGJhY2spXG4gIH1cblxuICAjdmFsaWRhdGVQYXlsb2FkTGVuZ3RoICgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNtYXhQYXlsb2FkU2l6ZSA+IDAgJiZcbiAgICAgICFpc0NvbnRyb2xGcmFtZSh0aGlzLiNpbmZvLm9wY29kZSkgJiZcbiAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCArIHRoaXMuI2ZyYWdtZW50c0J5dGVzID4gdGhpcy4jbWF4UGF5bG9hZFNpemVcbiAgICApIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOSwgJ1BheWxvYWQgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVuZXZlciBhIG5ldyBjaHVuayBpcyByZWNlaXZlZC5cbiAgICogQ2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBubyBtb3JlIGNodW5rcyBidWZmZXJpbmcsXG4gICAqIG9yIG5vdCBlbm91Z2ggYnl0ZXMgYXJlIGJ1ZmZlcmVkIHRvIHBhcnNlLlxuICAgKi9cbiAgcnVuIChjYWxsYmFjaykge1xuICAgIHdoaWxlICh0aGlzLiNsb29wKSB7XG4gICAgICBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5JTkZPKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZW4ndCBlbm91Z2ggYnl0ZXMgdG8gcGFyc2UgdGhlIHBheWxvYWQgbGVuZ3RoLCBldGMuXG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcbiAgICAgICAgY29uc3QgZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIGNvbnN0IG9wY29kZSA9IGJ1ZmZlclswXSAmIDB4MEZcbiAgICAgICAgY29uc3QgbWFza2VkID0gKGJ1ZmZlclsxXSAmIDB4ODApID09PSAweDgwXG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnRlZCA9ICFmaW4gJiYgb3Bjb2RlICE9PSBvcGNvZGVzLkNPTlRJTlVBVElPTlxuICAgICAgICBjb25zdCBwYXlsb2FkTGVuZ3RoID0gYnVmZmVyWzFdICYgMHg3RlxuXG4gICAgICAgIGNvbnN0IHJzdjEgPSBidWZmZXJbMF0gJiAweDQwXG4gICAgICAgIGNvbnN0IHJzdjIgPSBidWZmZXJbMF0gJiAweDIwXG4gICAgICAgIGNvbnN0IHJzdjMgPSBidWZmZXJbMF0gJiAweDEwXG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkT3Bjb2RlKG9wY29kZSkpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnSW52YWxpZCBvcGNvZGUgcmVjZWl2ZWQnKVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWFza2VkKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ZyYW1lIGNhbm5vdCBiZSBtYXNrZWQnKVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBNVVNUIGJlIDAgdW5sZXNzIGFuIGV4dGVuc2lvbiBpcyBuZWdvdGlhdGVkIHRoYXQgZGVmaW5lcyBtZWFuaW5nc1xuICAgICAgICAvLyBmb3Igbm9uLXplcm8gdmFsdWVzLiAgSWYgYSBub256ZXJvIHZhbHVlIGlzIHJlY2VpdmVkIGFuZCBub25lIG9mXG4gICAgICAgIC8vIHRoZSBuZWdvdGlhdGVkIGV4dGVuc2lvbnMgZGVmaW5lcyB0aGUgbWVhbmluZyBvZiBzdWNoIGEgbm9uemVyb1xuICAgICAgICAvLyB2YWx1ZSwgdGhlIHJlY2VpdmluZyBlbmRwb2ludCBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXRcbiAgICAgICAgLy8gQ29ubmVjdGlvbl8uXG4gICAgICAgIC8vIFRoaXMgZG9jdW1lbnQgYWxsb2NhdGVzIHRoZSBSU1YxIGJpdCBvZiB0aGUgV2ViU29ja2V0IGhlYWRlciBmb3JcbiAgICAgICAgLy8gUE1DRXMgYW5kIGNhbGxzIHRoZSBiaXQgdGhlIFwiUGVyLU1lc3NhZ2UgQ29tcHJlc3NlZFwiIGJpdC4gIE9uIGFcbiAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gd2hlcmUgYSBQTUNFIGlzIGluIHVzZSwgdGhpcyBiaXQgaW5kaWNhdGVzXG4gICAgICAgIC8vIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgICAgICBpZiAocnN2MSAhPT0gMCAmJiAhdGhpcy4jZXh0ZW5zaW9ucy5oYXMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0V4cGVjdGVkIFJTVjEgdG8gYmUgY2xlYXIuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyc3YyICE9PSAwIHx8IHJzdjMgIT09IDApIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUlNWMSwgUlNWMiwgUlNWMyBtdXN0IGJlIGNsZWFyJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnbWVudGVkICYmICFpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpKSB7XG4gICAgICAgICAgLy8gT25seSB0ZXh0IGFuZCBiaW5hcnkgZnJhbWVzIGNhbiBiZSBmcmFnbWVudGVkXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ludmFsaWQgZnJhbWUgdHlwZSB3YXMgZnJhZ21lbnRlZC4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgcGFyc2luZyBhIHRleHQvYmluYXJ5IGZyYW1lIGFuZCBkbyBub3QgcmVjZWl2ZSBlaXRoZXJcbiAgICAgICAgLy8gYSBjb250aW51YXRpb24gZnJhbWUgb3IgY2xvc2UgZnJhbWUsIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG4gICAgICAgIGlmIChpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpICYmIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0V4cGVjdGVkIGNvbnRpbnVhdGlvbiBmcmFtZScpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIGZyYWdtZW50ZWQpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFwiQWxsIGNvbnRyb2wgZnJhbWVzIE1VU1QgaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBvciBsZXNzXG4gICAgICAgIC8vIGFuZCBNVVNUIE5PVCBiZSBmcmFnbWVudGVkLlwiXG4gICAgICAgIGlmICgocGF5bG9hZExlbmd0aCA+IDEyNSB8fCBmcmFnbWVudGVkKSAmJiBpc0NvbnRyb2xGcmFtZShvcGNvZGUpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0NvbnRyb2wgZnJhbWUgZWl0aGVyIHRvbyBsYXJnZSBvciBmcmFnbWVudGVkJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvbnRpbnVhdGlvbkZyYW1lKG9wY29kZSkgJiYgdGhpcy4jZnJhZ21lbnRzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy4jaW5mby5jb21wcmVzc2VkKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1VuZXhwZWN0ZWQgY29udGludWF0aW9uIGZyYW1lJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoIDw9IDEyNSkge1xuICAgICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IHBheWxvYWRMZW5ndGhcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcblxuICAgICAgICAgIGlmICghdGhpcy4jdmFsaWRhdGVQYXlsb2FkTGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2XG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVGV4dEJpbmFyeUZyYW1lKG9wY29kZSkpIHtcbiAgICAgICAgICB0aGlzLiNpbmZvLmJpbmFyeVR5cGUgPSBvcGNvZGVcbiAgICAgICAgICB0aGlzLiNpbmZvLmNvbXByZXNzZWQgPSByc3YxICE9PSAwXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9IG9wY29kZVxuICAgICAgICB0aGlzLiNpbmZvLm1hc2tlZCA9IG1hc2tlZFxuICAgICAgICB0aGlzLiNpbmZvLmZpbiA9IGZpblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSBmcmFnbWVudGVkXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcblxuICAgICAgICBpZiAoIXRoaXMuI3ZhbGlkYXRlUGF5bG9hZExlbmd0aCgpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG4gICAgICAgIGNvbnN0IGxvd2VyID0gYnVmZmVyLnJlYWRVSW50MzJCRSg0KVxuXG4gICAgICAgIC8vIDJeMzEgaXMgdGhlIG1heGltdW0gYnl0ZXMgYW4gYXJyYXlidWZmZXIgY2FuIGNvbnRhaW5cbiAgICAgICAgLy8gb24gMzItYml0IHN5c3RlbXMuIEFsdGhvdWdoLCBvbiA2NC1iaXQgc3lzdGVtcywgdGhpcyBpc1xuICAgICAgICAvLyAyXjUzLTEgYnl0ZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9JbnZhbGlkX2FycmF5X2xlbmd0aFxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvY29tbW9uL2dsb2JhbHMuaDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZTticHY9MTticHQ9MTtsPTEyNzVcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLmg7bD0zNDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZVxuICAgICAgICBpZiAodXBwZXIgIT09IDAgfHwgbG93ZXIgPiAyICoqIDMxIC0gMSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBwYXlsb2FkIGxlbmd0aCA+IDJeMzEgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IGxvd2VyXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuXG4gICAgICAgIGlmICghdGhpcy4jdmFsaWRhdGVQYXlsb2FkTGVuZ3RoKCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlJFQURfREFUQSkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aClcblxuICAgICAgICBpZiAoaXNDb250cm9sRnJhbWUodGhpcy4jaW5mby5vcGNvZGUpKSB7XG4gICAgICAgICAgdGhpcy4jbG9vcCA9IHRoaXMucGFyc2VDb250cm9sRnJhbWUoYm9keSlcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmNvbXByZXNzZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy53cml0ZUZyYWdtZW50cyhib2R5KSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuI21heFBheWxvYWRTaXplID4gMCAmJiB0aGlzLiNmcmFnbWVudHNCeXRlcyA+IHRoaXMuI21heFBheWxvYWRTaXplKSB7XG4gICAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOSwgbmV3IE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvcigpLm1lc3NhZ2UpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgbm90IGZyYWdtZW50ZWQsIGEgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cbiAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyBmcmFnbWVudGVkLCBpdCB3aWxsIHRlcm1pbmF0ZSB3aXRoIGEgZmluIGJpdCBzZXRcbiAgICAgICAgICAgIC8vIGFuZCBhbiBvcGNvZGUgb2YgMCAoY29udGludWF0aW9uKSwgdGhlcmVmb3JlIHdlIGhhbmRsZSB0aGF0IHdoZW5cbiAgICAgICAgICAgIC8vIHBhcnNpbmcgY29udGludWF0aW9uIGZyYW1lcywgbm90IGhlcmUuXG4gICAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLmZpbikge1xuICAgICAgICAgICAgICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQodGhpcy53cywgdGhpcy4jaW5mby5iaW5hcnlUeXBlLCB0aGlzLmNvbnN1bWVGcmFnbWVudHMoKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNleHRlbnNpb25zLmdldCgncGVybWVzc2FnZS1kZWZsYXRlJykuZGVjb21wcmVzcyhcbiAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgdGhpcy4jaW5mby5maW4sXG4gICAgICAgICAgICAgIChlcnJvciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGVycm9yIGluc3RhbmNlb2YgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yID8gMTAwOSA6IDEwMDdcbiAgICAgICAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgY29kZSwgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy53cml0ZUZyYWdtZW50cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI21heFBheWxvYWRTaXplID4gMCAmJiB0aGlzLiNmcmFnbWVudHNCeXRlcyA+IHRoaXMuI21heFBheWxvYWRTaXplKSB7XG4gICAgICAgICAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlKHRoaXMud3MsIDEwMDksIG5ldyBNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3IoKS5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmZpbikge1xuICAgICAgICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgICAgICAgICAgdGhpcy4jbG9vcCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8uYmluYXJ5VHlwZSwgdGhpcy5jb25zdW1lRnJhZ21lbnRzKCkpXG5cbiAgICAgICAgICAgICAgICB0aGlzLiNsb29wID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cbiAgICAgICAgICAgICAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICB0aGlzLiNsb29wID0gZmFsc2VcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgbiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBCdWZmZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxlZCBjb25zdW1lKCkgYmVmb3JlIGJ1ZmZlcnMgc2F0aWF0ZWQuJylcbiAgICB9IGVsc2UgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIGlmICh0aGlzLiNidWZmZXJzWzBdLmxlbmd0aCA9PT0gbikge1xuICAgICAgdGhpcy4jYnl0ZU9mZnNldCAtPSB0aGlzLiNidWZmZXJzWzBdLmxlbmd0aFxuICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlcnMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKVxuICAgIGxldCBvZmZzZXQgPSAwXG5cbiAgICB3aGlsZSAob2Zmc2V0ICE9PSBuKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy4jYnVmZmVyc1swXVxuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG5leHRcblxuICAgICAgaWYgKGxlbmd0aCArIG9mZnNldCA9PT0gbikge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggKyBvZmZzZXQgPiBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQobmV4dC5zdWJhcnJheSgwLCBuIC0gb2Zmc2V0KSwgb2Zmc2V0KVxuICAgICAgICB0aGlzLiNidWZmZXJzWzBdID0gbmV4dC5zdWJhcnJheShuIC0gb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgb2Zmc2V0ICs9IG5leHQubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jYnl0ZU9mZnNldCAtPSBuXG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICB3cml0ZUZyYWdtZW50cyAoZnJhZ21lbnQpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNtYXhGcmFnbWVudHMgPiAwICYmXG4gICAgICB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID09PSB0aGlzLiNtYXhGcmFnbWVudHNcbiAgICApIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOCwgJ1RvbyBtYW55IG1lc3NhZ2UgZnJhZ21lbnRzJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMuI2ZyYWdtZW50c0J5dGVzICs9IGZyYWdtZW50Lmxlbmd0aFxuICAgIHRoaXMuI2ZyYWdtZW50cy5wdXNoKGZyYWdtZW50KVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdW1lRnJhZ21lbnRzICgpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB0aGlzLiNmcmFnbWVudHNcblxuICAgIGlmIChmcmFnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLiNmcmFnbWVudHNCeXRlcyA9IDBcbiAgICAgIHJldHVybiBmcmFnbWVudHMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoZnJhZ21lbnRzLCB0aGlzLiNmcmFnbWVudHNCeXRlcylcbiAgICB0aGlzLiNmcmFnbWVudHMgPSBbXVxuICAgIHRoaXMuI2ZyYWdtZW50c0J5dGVzID0gMFxuXG4gICAgcmV0dXJuIG91dHB1dFxuICB9XG5cbiAgcGFyc2VDbG9zZUJvZHkgKGRhdGEpIHtcbiAgICBhc3NlcnQoZGF0YS5sZW5ndGggIT09IDEpXG5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgY29kZVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoID49IDIpIHtcbiAgICAgIC8vIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXNcbiAgICAgIC8vIGRlZmluZWQgYXMgdGhlIHN0YXR1cyBjb2RlIChTZWN0aW9uIDcuNCkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBDbG9zZVxuICAgICAgLy8gY29udHJvbCBmcmFtZSByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb25cbiAgICAgIGNvZGUgPSBkYXRhLnJlYWRVSW50MTZCRSgwKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4geyBjb2RlOiAxMDAyLCByZWFzb246ICdJbnZhbGlkIHN0YXR1cyBjb2RlJywgZXJyb3I6IHRydWUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZWFzb24gPSB1dGY4RGVjb2RlKHJlYXNvbilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IDEwMDcsIHJlYXNvbjogJ0ludmFsaWQgVVRGLTgnLCBlcnJvcjogdHJ1ZSB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZSwgcmVhc29uLCBlcnJvcjogZmFsc2UgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBjb250cm9sIGZyYW1lcy5cbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJvZHlcbiAgICovXG4gIHBhcnNlQ29udHJvbEZyYW1lIChib2R5KSB7XG4gICAgY29uc3QgeyBvcGNvZGUsIHBheWxvYWRMZW5ndGggfSA9IHRoaXMuI2luZm9cblxuICAgIGlmIChvcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBjbG9zZSBmcmFtZSB3aXRoIGEgMS1ieXRlIGJvZHkuJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2luZm8uY2xvc2VJbmZvID0gdGhpcy5wYXJzZUNsb3NlQm9keShib2R5KVxuXG4gICAgICBpZiAodGhpcy4jaW5mby5jbG9zZUluZm8uZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBjb2RlLCByZWFzb24gfSA9IHRoaXMuI2luZm8uY2xvc2VJbmZvXG5cbiAgICAgICAgY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsIGNvZGUsIHJlYXNvbiwgcmVhc29uLmxlbmd0aClcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgcmVhc29uKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMud3Nba1NlbnRDbG9zZV0gIT09IHNlbnRDbG9zZUZyYW1lU3RhdGUuU0VOVCkge1xuICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgIC8vIENsb3NlIGZyYW1lLCB0aGUgZW5kcG9pbnQgTVVTVCBzZW5kIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UuICAoV2hlblxuICAgICAgICAvLyBzZW5kaW5nIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UsIHRoZSBlbmRwb2ludCB0eXBpY2FsbHkgZWNob3MgdGhlXG4gICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgbGV0IGJvZHkgPSBlbXB0eUJ1ZmZlclxuICAgICAgICBpZiAodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSkge1xuICAgICAgICAgIGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICBib2R5LndyaXRlVUludDE2QkUodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSwgMClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9zZUZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoXG4gICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0gPSB0cnVlXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAob3Bjb2RlID09PSBvcGNvZGVzLlBJTkcpIHtcbiAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgIC8vIHJlc3BvbnNlLCB1bmxlc3MgaXQgYWxyZWFkeSByZWNlaXZlZCBhIENsb3NlIGZyYW1lLlxuICAgICAgLy8gQSBQb25nIGZyYW1lIHNlbnQgaW4gcmVzcG9uc2UgdG8gYSBQaW5nIGZyYW1lIG11c3QgaGF2ZSBpZGVudGljYWxcbiAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgIGlmICghdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0pIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgIGlmIChjaGFubmVscy5waW5nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgY2hhbm5lbHMucGluZy5wdWJsaXNoKHtcbiAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcGNvZGUgPT09IG9wY29kZXMuUE9ORykge1xuICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgLy8gdW5pZGlyZWN0aW9uYWwgaGVhcnRiZWF0LiAgQSByZXNwb25zZSB0byBhbiB1bnNvbGljaXRlZCBQb25nIGZyYW1lIGlzXG4gICAgICAvLyBub3QgZXhwZWN0ZWQuXG5cbiAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgIGNoYW5uZWxzLnBvbmcucHVibGlzaCh7XG4gICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBnZXQgY2xvc2luZ0luZm8gKCkge1xuICAgIHJldHVybiB0aGlzLiNpbmZvLmNsb3NlSW5mb1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCeXRlUGFyc2VyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcbmNvbnN0IHsgb3Bjb2Rlcywgc2VuZEhpbnRzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCBGaXhlZFF1ZXVlID0gcmVxdWlyZSgnLi4vLi4vZGlzcGF0Y2hlci9maXhlZC1xdWV1ZScpXG5cbi8qKiBAdHlwZSB7dHlwZW9mIFVpbnQ4QXJyYXl9ICovXG5jb25zdCBGYXN0QnVmZmVyID0gQnVmZmVyW1N5bWJvbC5zcGVjaWVzXVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlbmRRdWV1ZU5vZGVcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTx2b2lkPiB8IG51bGx9IHByb21pc2VcbiAqIEBwcm9wZXJ0eSB7KCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KX0gY2FsbGJhY2tcbiAqIEBwcm9wZXJ0eSB7QnVmZmVyIHwgbnVsbH0gZnJhbWVcbiAqL1xuXG5jbGFzcyBTZW5kUXVldWUge1xuICAvKipcbiAgICogQHR5cGUge0ZpeGVkUXVldWV9XG4gICAqL1xuICAjcXVldWUgPSBuZXcgRml4ZWRRdWV1ZSgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgI3J1bm5pbmcgPSBmYWxzZVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOm5ldCcpLlNvY2tldH0gKi9cbiAgI3NvY2tldFxuXG4gIGNvbnN0cnVjdG9yIChzb2NrZXQpIHtcbiAgICB0aGlzLiNzb2NrZXQgPSBzb2NrZXRcbiAgfVxuXG4gIGFkZCAoaXRlbSwgY2IsIGhpbnQpIHtcbiAgICBpZiAoaGludCAhPT0gc2VuZEhpbnRzLmJsb2IpIHtcbiAgICAgIGNvbnN0IGZyYW1lID0gY3JlYXRlRnJhbWUoaXRlbSwgaGludClcbiAgICAgIGlmICghdGhpcy4jcnVubmluZykge1xuICAgICAgICAvLyBmYXN0LXBhdGhcbiAgICAgICAgdGhpcy4jc29ja2V0LndyaXRlKGZyYW1lLCBjYilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qKiBAdHlwZSB7U2VuZFF1ZXVlTm9kZX0gKi9cbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgICAgICBmcmFtZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3F1ZXVlLnB1c2gobm9kZSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7U2VuZFF1ZXVlTm9kZX0gKi9cbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgcHJvbWlzZTogaXRlbS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIG5vZGUucHJvbWlzZSA9IG51bGxcbiAgICAgICAgbm9kZS5mcmFtZSA9IGNyZWF0ZUZyYW1lKGFiLCBoaW50KVxuICAgICAgfSksXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBmcmFtZTogbnVsbFxuICAgIH1cblxuICAgIHRoaXMuI3F1ZXVlLnB1c2gobm9kZSlcblxuICAgIGlmICghdGhpcy4jcnVubmluZykge1xuICAgICAgdGhpcy4jcnVuKClcbiAgICB9XG4gIH1cblxuICBhc3luYyAjcnVuICgpIHtcbiAgICB0aGlzLiNydW5uaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHF1ZXVlID0gdGhpcy4jcXVldWVcbiAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgIC8vIHdhaXQgcGVuZGluZyBwcm9taXNlXG4gICAgICBpZiAobm9kZS5wcm9taXNlICE9PSBudWxsKSB7XG4gICAgICAgIGF3YWl0IG5vZGUucHJvbWlzZVxuICAgICAgfVxuICAgICAgLy8gd3JpdGVcbiAgICAgIHRoaXMuI3NvY2tldC53cml0ZShub2RlLmZyYW1lLCBub2RlLmNhbGxiYWNrKVxuICAgICAgLy8gY2xlYW51cFxuICAgICAgbm9kZS5jYWxsYmFjayA9IG5vZGUuZnJhbWUgPSBudWxsXG4gICAgfVxuICAgIHRoaXMuI3J1bm5pbmcgPSBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYW1lIChkYXRhLCBoaW50KSB7XG4gIHJldHVybiBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHRvQnVmZmVyKGRhdGEsIGhpbnQpKS5jcmVhdGVGcmFtZShoaW50ID09PSBzZW5kSGludHMuc3RyaW5nID8gb3Bjb2Rlcy5URVhUIDogb3Bjb2Rlcy5CSU5BUlkpXG59XG5cbmZ1bmN0aW9uIHRvQnVmZmVyIChkYXRhLCBoaW50KSB7XG4gIHN3aXRjaCAoaGludCkge1xuICAgIGNhc2Ugc2VuZEhpbnRzLnN0cmluZzpcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKVxuICAgIGNhc2Ugc2VuZEhpbnRzLmFycmF5QnVmZmVyOlxuICAgIGNhc2Ugc2VuZEhpbnRzLmJsb2I6XG4gICAgICByZXR1cm4gbmV3IEZhc3RCdWZmZXIoZGF0YSlcbiAgICBjYXNlIHNlbmRIaW50cy50eXBlZEFycmF5OlxuICAgICAgcmV0dXJuIG5ldyBGYXN0QnVmZmVyKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgU2VuZFF1ZXVlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcbmNvbnN0IHsgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCB7IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsIHN0YXRlcywgc2VudENsb3NlRnJhbWVTdGF0ZSwgc2VuZEhpbnRzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtXZWJTb2NrZXRVUkwsXG4gIGtSZWFkeVN0YXRlLFxuICBrQ29udHJvbGxlcixcbiAga0JpbmFyeVR5cGUsXG4gIGtSZXNwb25zZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXJcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3Qge1xuICBpc0Nvbm5lY3RpbmcsXG4gIGlzRXN0YWJsaXNoZWQsXG4gIGlzQ2xvc2luZyxcbiAgaXNWYWxpZFN1YnByb3RvY29sLFxuICBmaXJlRXZlbnRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uLCBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi8uLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHsgRXJyb3JFdmVudCwgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBTZW5kUXVldWUgfSA9IHJlcXVpcmUoJy4vc2VuZGVyJylcblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLWRlZmluaXRpb25cbmNsYXNzIFdlYlNvY2tldCBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgI2V2ZW50cyA9IHtcbiAgICBvcGVuOiBudWxsLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGNsb3NlOiBudWxsLFxuICAgIG1lc3NhZ2U6IG51bGxcbiAgfVxuXG4gICNidWZmZXJlZEFtb3VudCA9IDBcbiAgI3Byb3RvY29sID0gJydcbiAgI2V4dGVuc2lvbnMgPSAnJ1xuXG4gIC8qKiBAdHlwZSB7U2VuZFF1ZXVlfSAqL1xuICAjc2VuZFF1ZXVlXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSh0aGlzKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ1dlYlNvY2tldCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddKHByb3RvY29scywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsLCBwcmVmaXgsICd1cmwnKVxuICAgIHByb3RvY29scyA9IG9wdGlvbnMucHJvdG9jb2xzXG5cbiAgICAvLyAxLiBMZXQgYmFzZVVSTCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0J3MgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVUkwgPSBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3JkXHUyMDE5cyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgY29uc3QgY2xpZW50ID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdFxuXG4gICAgLy8gMTIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6XG5cbiAgICAvLyAgICAxLiBFc3RhYmxpc2ggYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBnaXZlbiB1cmxSZWNvcmQsIHByb3RvY29scyxcbiAgICAvLyAgICAgICBhbmQgY2xpZW50LlxuICAgIHRoaXNba0NvbnRyb2xsZXJdID0gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihcbiAgICAgIHVybFJlY29yZCxcbiAgICAgIHByb3RvY29scyxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRoaXMsXG4gICAgICAocmVzcG9uc2UsIGV4dGVuc2lvbnMpID0+IHRoaXMuI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkKHJlc3BvbnNlLCBleHRlbnNpb25zKSxcbiAgICAgIG9wdGlvbnNcbiAgICApXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgcmVhZHkgc3RhdGUsIHdoaWNoIGlzIGFcbiAgICAvLyBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4gSW5pdGlhbGx5IGl0IG11c3RcbiAgICAvLyBiZSBDT05ORUNUSU5HICgwKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DT05ORUNUSU5HXG5cbiAgICB0aGlzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5OT1RfU0VOVFxuXG4gICAgLy8gVGhlIGV4dGVuc2lvbnMgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gVGhlIHByb3RvY29sIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCBiaW5hcnkgdHlwZSwgd2hpY2ggaXMgYVxuICAgIC8vIEJpbmFyeVR5cGUuIEluaXRpYWxseSBpdCBtdXN0IGJlIFwiYmxvYlwiLlxuICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlXG4gICAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICAgKi9cbiAgY2xvc2UgKGNvZGUgPSB1bmRlZmluZWQsIHJlYXNvbiA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGNvbnN0IHByZWZpeCA9ICdXZWJTb2NrZXQuY2xvc2UnXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgcHJlZml4LCAnY29kZScsIHsgY2xhbXA6IHRydWUgfSlcbiAgICB9XG5cbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlYXNvbiA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhyZWFzb24sIHByZWZpeCwgJ3JlYXNvbicpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY29kZSBpcyBwcmVzZW50LCBidXQgaXMgbmVpdGhlciBhbiBpbnRlZ2VyIGVxdWFsIHRvIDEwMDAgbm9yIGFuXG4gICAgLy8gICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMzAwMCB0byA0OTk5LCBpbmNsdXNpdmUsIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkQWNjZXNzRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvZGUgIT09IDEwMDAgJiYgKGNvZGUgPCAzMDAwIHx8IGNvZGUgPiA0OTk5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdpbnZhbGlkIGNvZGUnLCAnSW52YWxpZEFjY2Vzc0Vycm9yJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVhc29uQnl0ZUxlbmd0aCA9IDBcblxuICAgIC8vIDIuIElmIHJlYXNvbiBpcyBwcmVzZW50LCB0aGVuIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWFzb25CeXRlcyBiZSB0aGUgcmVzdWx0IG9mIGVuY29kaW5nIHJlYXNvbi5cbiAgICAgIC8vIDIuIElmIHJlYXNvbkJ5dGVzIGlzIGxvbmdlciB0aGFuIDEyMyBieXRlcywgdGhlbiB0aHJvdyBhXG4gICAgICAvLyAgICBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgcmVhc29uQnl0ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlYXNvbilcblxuICAgICAgaWYgKHJlYXNvbkJ5dGVMZW5ndGggPiAxMjMpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgICBgUmVhc29uIG11c3QgYmUgbGVzcyB0aGFuIDEyMyBieXRlczsgcmVjZWl2ZWQgJHtyZWFzb25CeXRlTGVuZ3RofWAsXG4gICAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUnVuIHRoZSBmaXJzdCBtYXRjaGluZyBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24odGhpcywgY29kZSwgcmVhc29uLCByZWFzb25CeXRlTGVuZ3RoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1zZW5kXG4gICAqIEBwYXJhbSB7Tm9kZUpTLlR5cGVkQXJyYXl8QXJyYXlCdWZmZXJ8QmxvYnxzdHJpbmd9IGRhdGFcbiAgICovXG4gIHNlbmQgKGRhdGEpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnV2ViU29ja2V0LnNlbmQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBkYXRhID0gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEoZGF0YSwgcHJlZml4LCAnZGF0YScpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGlzQ29ubmVjdGluZyh0aGlzKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBkYXRhIGlzIGEgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgdGhlIGRhdGEgYXJndW1lbnRcbiAgICAgIC8vIHVzaW5nIGEgdGV4dCBmcmFtZSBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuXG4gICAgICAvLyBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCxcbiAgICAgIC8vIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2VcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhXG4gICAgICAvLyBzdHJpbmcgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZVxuICAgICAgLy8gdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0b1xuICAgICAgLy8gZXhwcmVzcyB0aGUgYXJndW1lbnQgYXMgVVRGLTguXG5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IGxlbmd0aFxuICAgICAgdGhpcy4jc2VuZFF1ZXVlLmFkZChkYXRhLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IGxlbmd0aFxuICAgICAgfSwgc2VuZEhpbnRzLnN0cmluZylcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZFxuICAgICAgLy8gdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgLy8gVGhlIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBkZXNjcmliZWRcbiAgICAgIC8vIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QuIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYW5cbiAgICAgIC8vIEFycmF5QnVmZmVyIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3RcbiAgICAgIC8vIGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIGxlbmd0aCBvZiB0aGVcbiAgICAgIC8vIEFycmF5QnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIHRoaXMuI3NlbmRRdWV1ZS5hZGQoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIH0sIHNlbmRIaW50cy5hcnJheUJ1ZmZlcilcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YVx1MjAxOXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIHRoaXMuI3NlbmRRdWV1ZS5hZGQoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIH0sIHNlbmRIaW50cy50eXBlZEFycmF5KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3RcdTIwMTlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gZGF0YS5zaXplXG4gICAgICB0aGlzLiNzZW5kUXVldWUuYWRkKGRhdGEsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gZGF0YS5zaXplXG4gICAgICB9LCBzZW5kSGludHMuYmxvYilcbiAgICB9XG4gIH1cblxuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHJlYWR5U3RhdGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHJlYWR5IHN0YXRlLlxuICAgIHJldHVybiB0aGlzW2tSZWFkeVN0YXRlXVxuICB9XG5cbiAgZ2V0IGJ1ZmZlcmVkQW1vdW50ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jYnVmZmVyZWRBbW91bnRcbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHVybCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tXZWJTb2NrZXRVUkxdKVxuICB9XG5cbiAgZ2V0IGV4dGVuc2lvbnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNleHRlbnNpb25zXG4gIH1cblxuICBnZXQgcHJvdG9jb2wgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNwcm90b2NvbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy4jZXZlbnRzLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25jbG9zZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5jbG9zZVxuICB9XG5cbiAgc2V0IG9uY2xvc2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5jbG9zZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoaXMuI2V2ZW50cy5jbG9zZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5tZXNzYWdlXG4gIH1cblxuICBzZXQgb25tZXNzYWdlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMubWVzc2FnZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy4jZXZlbnRzLm1lc3NhZ2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBiaW5hcnlUeXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpc1trQmluYXJ5VHlwZV1cbiAgfVxuXG4gIHNldCBiaW5hcnlUeXBlICh0eXBlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHR5cGUgIT09ICdibG9iJyAmJiB0eXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9IHR5cGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICAgKi9cbiAgI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkIChyZXNwb25zZSwgcGFyc2VkRXh0ZW5zaW9ucykge1xuICAgIC8vIHByb2Nlc3NSZXNwb25zZSBpcyBjYWxsZWQgd2hlbiB0aGUgXCJyZXNwb25zZSdzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHdlYlNvY2tldE9wdGlvbnMgPSB0aGlzW2tDb250cm9sbGVyXT8uZGlzcGF0Y2hlcj8ud2ViU29ja2V0T3B0aW9uc1xuICAgIGNvbnN0IG1heEZyYWdtZW50cyA9IHdlYlNvY2tldE9wdGlvbnM/Lm1heEZyYWdtZW50c1xuICAgIGNvbnN0IG1heFBheWxvYWRTaXplID0gd2ViU29ja2V0T3B0aW9ucz8ubWF4UGF5bG9hZFNpemVcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMsIHBhcnNlZEV4dGVuc2lvbnMsIHtcbiAgICAgIG1heEZyYWdtZW50cyxcbiAgICAgIG1heFBheWxvYWRTaXplXG4gICAgfSlcbiAgICBwYXJzZXIub24oJ2RyYWluJywgb25QYXJzZXJEcmFpbilcbiAgICBwYXJzZXIub24oJ2Vycm9yJywgb25QYXJzZXJFcnJvci5iaW5kKHRoaXMpKVxuXG4gICAgcmVzcG9uc2Uuc29ja2V0LndzID0gdGhpc1xuICAgIHRoaXNba0J5dGVQYXJzZXJdID0gcGFyc2VyXG5cbiAgICB0aGlzLiNzZW5kUXVldWUgPSBuZXcgU2VuZFF1ZXVlKHJlc3BvbnNlLnNvY2tldClcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZVx1MjAxOXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcG9zYWwgbWFkZSBpbiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3dlYnNvY2tldHMvaXNzdWVzLzQyXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAncHJvdG9jb2xzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQpXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdChWKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJvdG9jb2xzOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXShWKSB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBcnJheUJ1ZmZlcihWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxuZnVuY3Rpb24gb25QYXJzZXJEcmFpbiAoKSB7XG4gIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQucmVzdW1lKClcbn1cblxuZnVuY3Rpb24gb25QYXJzZXJFcnJvciAoZXJyKSB7XG4gIGxldCBtZXNzYWdlXG4gIGxldCBjb2RlXG5cbiAgaWYgKGVyciBpbnN0YW5jZW9mIENsb3NlRXZlbnQpIHtcbiAgICBtZXNzYWdlID0gZXJyLnJlYXNvblxuICAgIGNvZGUgPSBlcnIuY29kZVxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZVxuICB9XG5cbiAgZmlyZUV2ZW50KCdlcnJvcicsIHRoaXMsICgpID0+IG5ldyBFcnJvckV2ZW50KCdlcnJvcicsIHsgZXJyb3I6IGVyciwgbWVzc2FnZSB9KSlcblxuICBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24odGhpcywgY29kZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdlYlNvY2tldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSB2YWxpZCBMYXN0RXZlbnRJZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRMYXN0RXZlbnRJZCAodmFsdWUpIHtcbiAgLy8gTGFzdEV2ZW50SWQgc2hvdWxkIG5vdCBjb250YWluIFUrMDAwMCBOVUxMXG4gIHJldHVybiB2YWx1ZS5pbmRleE9mKCdcXHUwMDAwJykgPT09IC0xXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGJhc2UgMTAgZGlnaXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0FTQ0lJTnVtYmVyICh2YWx1ZSkge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh2YWx1ZS5jaGFyQ29kZUF0KGkpIDwgMHgzMCB8fCB2YWx1ZS5jaGFyQ29kZUF0KGkpID4gMHgzOSkgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzI2NjRcbmZ1bmN0aW9uIGRlbGF5IChtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKS51bnJlZigpXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1ZhbGlkTGFzdEV2ZW50SWQsXG4gIGlzQVNDSUlOdW1iZXIsXG4gIGRlbGF5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBpc0FTQ0lJTnVtYmVyLCBpc1ZhbGlkTGFzdEV2ZW50SWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8qKlxuICogQHR5cGUge251bWJlcltdfSBCT01cbiAqL1xuY29uc3QgQk9NID0gWzB4RUYsIDB4QkIsIDB4QkZdXG4vKipcbiAqIEB0eXBlIHsxMH0gTEZcbiAqL1xuY29uc3QgTEYgPSAweDBBXG4vKipcbiAqIEB0eXBlIHsxM30gQ1JcbiAqL1xuY29uc3QgQ1IgPSAweDBEXG4vKipcbiAqIEB0eXBlIHs1OH0gQ09MT05cbiAqL1xuY29uc3QgQ09MT04gPSAweDNBXG4vKipcbiAqIEB0eXBlIHszMn0gU1BBQ0VcbiAqL1xuY29uc3QgU1BBQ0UgPSAweDIwXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRXZlbnRTb3VyY2VTdHJlYW1FdmVudFxuICogQHR5cGUge29iamVjdH1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXZlbnRdIFRoZSBldmVudCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhXSBUaGUgZGF0YSBvZiB0aGUgbWVzc2FnZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaWRdIEEgdW5pcXVlIElEIGZvciB0aGUgZXZlbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JldHJ5XSBUaGUgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIGV2ZW50U291cmNlU2V0dGluZ3NcbiAqIEB0eXBlIHtvYmplY3R9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFzdEV2ZW50SWQgVGhlIGxhc3QgZXZlbnQgSUQgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9yaWdpbiBUaGUgb3JpZ2luIG9mIHRoZSBldmVudCBzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVjb25uZWN0aW9uVGltZSBUaGUgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuXG5jbGFzcyBFdmVudFNvdXJjZVN0cmVhbSBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBAdHlwZSB7ZXZlbnRTb3VyY2VTZXR0aW5nc31cbiAgICovXG4gIHN0YXRlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBMZWFkaW5nIGJ5dGUtb3JkZXItbWFyayBjaGVjay5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBjaGVja0JPTSA9IHRydWVcblxuICAvKipcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBjcmxmQ2hlY2sgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGV2ZW50RW5kQ2hlY2sgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7QnVmZmVyfVxuICAgKi9cbiAgYnVmZmVyID0gbnVsbFxuXG4gIHBvcyA9IDBcblxuICBldmVudCA9IHtcbiAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICBpZDogdW5kZWZpbmVkLFxuICAgIHJldHJ5OiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2V2ZW50U291cmNlU2V0dGluZ3N9IG9wdGlvbnMuZXZlbnRTb3VyY2VTZXR0aW5nc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5wdXNoXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEVuYWJsZSBvYmplY3QgbW9kZSBhcyBFdmVudFNvdXJjZVN0cmVhbSBlbWl0cyBvYmplY3RzIG9mIHNoYXBlXG4gICAgLy8gRXZlbnRTb3VyY2VTdHJlYW1FdmVudFxuICAgIG9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlID0gdHJ1ZVxuXG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIHRoaXMuc3RhdGUgPSBvcHRpb25zLmV2ZW50U291cmNlU2V0dGluZ3MgfHwge31cbiAgICBpZiAob3B0aW9ucy5wdXNoKSB7XG4gICAgICB0aGlzLnB1c2ggPSBvcHRpb25zLnB1c2hcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfZW5jb2RpbmdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfdHJhbnNmb3JtIChjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgIGlmIChjaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhY2hlIHRoZSBjaHVuayBpbiB0aGUgYnVmZmVyLCBhcyB0aGUgZGF0YSBtaWdodCBub3QgYmUgY29tcGxldGUgd2hpbGVcbiAgICAvLyBwcm9jZXNzaW5nIGl0XG4gICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgaWYgdGhlcmUgaXMgYSBtb3JlIHBlcmZvcm1hbnQgd2F5IHRvIGhhbmRsZVxuICAgIC8vIGluY29taW5nIGNodW5rc1xuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzI2MzBcbiAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWZmZXIsIGNodW5rXSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWZmZXIgPSBjaHVua1xuICAgIH1cblxuICAgIC8vIFN0cmlwIGxlYWRpbmcgYnl0ZS1vcmRlci1tYXJrIGlmIHdlIG9wZW5lZCB0aGUgc3RyZWFtIGFuZCBzdGFydGVkXG4gICAgLy8gdGhlIHByb2Nlc3Npbmcgb2YgdGhlIGluY29taW5nIGRhdGFcbiAgICBpZiAodGhpcy5jaGVja0JPTSkge1xuICAgICAgc3dpdGNoICh0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBCT01cbiAgICAgICAgICBpZiAodGhpcy5idWZmZXJbMF0gPT09IEJPTVswXSkge1xuICAgICAgICAgICAgLy8gSWYgaXQgaXMsIHdlIG5lZWQgdG8gd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgIC8vIEJPTSBhbnltb3JlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG5cbiAgICAgICAgICAvLyBUaGUgYnVmZmVyIG9ubHkgY29udGFpbnMgb25lIGJ5dGUgc28gd2UgbmVlZCB0byB3YWl0IGZvciBtb3JlIGRhdGFcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlyc3QgdHdvIGJ5dGVzIGFyZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgdHdvIGJ5dGVzXG4gICAgICAgICAgLy8gb2YgdGhlIEJPTVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzBdID09PSBCT01bMF0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzFdID09PSBCT01bMV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIG1vcmUgZGF0YSwgYmVjYXVzZSB0aGUgdGhpcmQgYnl0ZVxuICAgICAgICAgICAgLy8gaXMgbmVlZGVkIHRvIGRldGVybWluZSBpZiBpdCBpcyB0aGUgQk9NIG9yIG5vdFxuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgIC8vIEJPTSBhbnltb3JlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaXJzdCB0aHJlZSBieXRlcyBhcmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHRocmVlXG4gICAgICAgICAgLy8gYnl0ZXMgb2YgdGhlIEJPTVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzBdID09PSBCT01bMF0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzFdID09PSBCT01bMV0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzJdID09PSBCT01bMl1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzLCB3ZSBjYW4gZHJvcCB0aGUgYnVmZmVyZWQgZGF0YSwgYXMgaXQgaXMgb25seSB0aGUgQk9NXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygwKVxuICAgICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgICAgLy8gQk9NIGFueW1vcmVcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCT00gPSBmYWxzZVxuXG4gICAgICAgICAgICAvLyBBd2FpdCBtb3JlIGRhdGFcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgdGhlIEJPTSwgd2UgY2FuIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIGRhdGFcbiAgICAgICAgICB0aGlzLmNoZWNrQk9NID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgbG9uZ2VyIHRoYW4gMyBieXRlcywgc28gd2UgY2FuIGRyb3AgdGhlIEJPTSBpZiBpdCBpc1xuICAgICAgICAgIC8vIHByZXNlbnRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclswXSA9PT0gQk9NWzBdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsxXSA9PT0gQk9NWzFdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsyXSA9PT0gQk9NWzJdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIEJPTSBmcm9tIHRoZSBidWZmZXJcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkoMylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZXQgdGhlIGNoZWNrQk9NIGZsYWcgdG8gZmFsc2UgYXMgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgdGhlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBsaW5lIGVuZGVkIHdpdGggYW4gZW5kLW9mLWxpbmUsIHdlIG5lZWQgdG8gY2hlY2tcbiAgICAgIC8vIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhbHNvIGFuIGVuZC1vZi1saW5lLlxuICAgICAgaWYgKHRoaXMuZXZlbnRFbmRDaGVjaykge1xuICAgICAgICAvLyBJZiB0aGUgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGFuIGVuZC1vZi1saW5lLCB0aGVuIHRoZSBldmVudFxuICAgICAgICAvLyBpcyBmaW5pc2hlZCBhbmQgd2UgY2FuIHByb2Nlc3MgaXRcblxuICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgbGluZSBlbmRlZCB3aXRoIGEgY2FycmlhZ2UgcmV0dXJuLCB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGxpbmUgZmVlZCBhbmQgcmVtb3ZlIGl0XG4gICAgICAgIC8vIGZyb20gdGhlIGJ1ZmZlci5cbiAgICAgICAgaWYgKHRoaXMuY3JsZkNoZWNrKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGEgbGluZSBmZWVkLCB3ZSBjYW4gcmVtb3ZlIGl0XG4gICAgICAgICAgLy8gZnJvbSB0aGUgYnVmZmVyIGFuZCByZXNldCB0aGUgY3JsZkNoZWNrIGZsYWdcbiAgICAgICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBMRikge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyArIDEpXG4gICAgICAgICAgICB0aGlzLnBvcyA9IDBcbiAgICAgICAgICAgIHRoaXMuY3JsZkNoZWNrID0gZmFsc2VcblxuICAgICAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgbGluZSBmZWVkIGlzIG5vdCB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAgICAgLy8gZXZlbnQuIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGFuXG4gICAgICAgICAgICAvLyBlbmQtb2YtbGluZSBjaGFyYWN0ZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBldmVudCBpc1xuICAgICAgICAgICAgLy8gZmluaXNoZWQuIFdlIHNpbXBseSBjb250aW51ZSB0aGUgbG9vcCB0byBjaGVjayB0aGUgbmV4dFxuICAgICAgICAgICAgLy8gY2hhcmFjdGVyLlxuXG4gICAgICAgICAgICAvLyBBcyB3ZSByZW1vdmVkIHRoZSBsaW5lIGZlZWQgZnJvbSB0aGUgYnVmZmVyIGFuZCBzZXQgdGhlXG4gICAgICAgICAgICAvLyBjcmxmQ2hlY2sgZmxhZyB0byBmYWxzZSwgd2UgYmFzaWNhbGx5IGRvbid0IG1ha2UgYW55XG4gICAgICAgICAgICAvLyBkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgbGluZSBmZWVkIGFuZCBhIGNhcnJpYWdlIHJldHVybi5cbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3JsZkNoZWNrID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IExGIHx8IHRoaXMuYnVmZmVyW3RoaXMucG9zXSA9PT0gQ1IpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgYSBjYXJyaWFnZSByZXR1cm4sIHdlIG5lZWQgdG9cbiAgICAgICAgICAvLyBzZXQgdGhlIGNybGZDaGVjayBmbGFnIHRvIHRydWUsIGFzIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gICAgICAgICAgLy8gbmV4dCBjaGFyYWN0ZXIgaXMgYSBsaW5lIGZlZWQgc28gd2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuICAgICAgICAgIC8vIGJ1ZmZlclxuICAgICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgICAgICB0aGlzLmNybGZDaGVjayA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zICsgMSlcbiAgICAgICAgICB0aGlzLnBvcyA9IDBcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmV2ZW50LmRhdGEgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmV2ZW50LmV2ZW50IHx8IHRoaXMuZXZlbnQuaWQgfHwgdGhpcy5ldmVudC5yZXRyeSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnQodGhpcy5ldmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jbGVhckV2ZW50KClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBub3QgYW4gZW5kLW9mLWxpbmUsIHRoZW4gdGhlIGV2ZW50XG4gICAgICAgIC8vIGlzIG5vdCBmaW5pc2hlZCBhbmQgd2UgaGF2ZSB0byByZXNldCB0aGUgZXZlbnRFbmRDaGVjayBmbGFnXG4gICAgICAgIHRoaXMuZXZlbnRFbmRDaGVjayA9IGZhbHNlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhbiBlbmQtb2YtbGluZSwgd2UgY2FuIHByb2Nlc3MgdGhlXG4gICAgICAvLyBsaW5lXG4gICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBMRiB8fCB0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGNhcnJpYWdlIHJldHVybiwgd2UgbmVlZCB0b1xuICAgICAgICAvLyBzZXQgdGhlIGNybGZDaGVjayBmbGFnIHRvIHRydWUsIGFzIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gICAgICAgIC8vIG5leHQgY2hhcmFjdGVyIGlzIGEgbGluZSBmZWVkXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgICAgdGhpcy5jcmxmQ2hlY2sgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBhbnkgY2FzZSwgd2UgY2FuIHByb2Nlc3MgdGhlIGxpbmUgYXMgd2UgcmVhY2hlZCBhblxuICAgICAgICAvLyBlbmQtb2YtbGluZSBjaGFyYWN0ZXJcbiAgICAgICAgdGhpcy5wYXJzZUxpbmUodGhpcy5idWZmZXIuc3ViYXJyYXkoMCwgdGhpcy5wb3MpLCB0aGlzLmV2ZW50KVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgcHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MgKyAxKVxuICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24gYXMgd2UgcmVtb3ZlZCB0aGUgcHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICAgIHRoaXMucG9zID0gMFxuICAgICAgICAvLyBBIGxpbmUgd2FzIHByb2Nlc3NlZCBhbmQgdGhpcyBjb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBldmVudC4gV2UgbmVlZFxuICAgICAgICAvLyB0byBjaGVjayBpZiB0aGUgbmV4dCBsaW5lIGlzIGVtcHR5IHRvIGRldGVybWluZSBpZiB0aGUgZXZlbnQgaXNcbiAgICAgICAgLy8gZmluaXNoZWQuXG4gICAgICAgIHRoaXMuZXZlbnRFbmRDaGVjayA9IHRydWVcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MrK1xuICAgIH1cblxuICAgIGNhbGxiYWNrKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gbGluZVxuICAgKiBAcGFyYW0ge0V2ZW50U3RyZWFtRXZlbnR9IGV2ZW50XG4gICAqL1xuICBwYXJzZUxpbmUgKGxpbmUsIGV2ZW50KSB7XG4gICAgLy8gSWYgdGhlIGxpbmUgaXMgZW1wdHkgKGEgYmxhbmsgbGluZSlcbiAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQsIGFzIGRlZmluZWQgYmVsb3cuXG4gICAgLy8gVGhpcyB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIF90cmFuc2Zvcm0gbWV0aG9kXG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbGluZSBzdGFydHMgd2l0aCBhIFUrMDAzQSBDT0xPTiBjaGFyYWN0ZXIgKDopXG4gICAgLy8gSWdub3JlIHRoZSBsaW5lLlxuICAgIGNvbnN0IGNvbG9uUG9zaXRpb24gPSBsaW5lLmluZGV4T2YoQ09MT04pXG4gICAgaWYgKGNvbG9uUG9zaXRpb24gPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBmaWVsZCA9ICcnXG4gICAgbGV0IHZhbHVlID0gJydcblxuICAgIC8vIElmIHRoZSBsaW5lIGNvbnRhaW5zIGEgVSswMDNBIENPTE9OIGNoYXJhY3RlciAoOilcbiAgICBpZiAoY29sb25Qb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgIC8vIENvbGxlY3QgdGhlIGNoYXJhY3RlcnMgb24gdGhlIGxpbmUgYmVmb3JlIHRoZSBmaXJzdCBVKzAwM0EgQ09MT05cbiAgICAgIC8vIGNoYXJhY3RlciAoOiksIGFuZCBsZXQgZmllbGQgYmUgdGhhdCBzdHJpbmcuXG4gICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSBpZiB0aGVyZSBpcyBhIG1vcmUgcGVyZm9ybWFudCB3YXkgdG8gZXh0cmFjdCB0aGVcbiAgICAgIC8vIGZpZWxkXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yNjMwXG4gICAgICBmaWVsZCA9IGxpbmUuc3ViYXJyYXkoMCwgY29sb25Qb3NpdGlvbikudG9TdHJpbmcoJ3V0ZjgnKVxuXG4gICAgICAvLyBDb2xsZWN0IHRoZSBjaGFyYWN0ZXJzIG9uIHRoZSBsaW5lIGFmdGVyIHRoZSBmaXJzdCBVKzAwM0EgQ09MT05cbiAgICAgIC8vIGNoYXJhY3RlciAoOiksIGFuZCBsZXQgdmFsdWUgYmUgdGhhdCBzdHJpbmcuXG4gICAgICAvLyBJZiB2YWx1ZSBzdGFydHMgd2l0aCBhIFUrMDAyMCBTUEFDRSBjaGFyYWN0ZXIsIHJlbW92ZSBpdCBmcm9tIHZhbHVlLlxuICAgICAgbGV0IHZhbHVlU3RhcnQgPSBjb2xvblBvc2l0aW9uICsgMVxuICAgICAgaWYgKGxpbmVbdmFsdWVTdGFydF0gPT09IFNQQUNFKSB7XG4gICAgICAgICsrdmFsdWVTdGFydFxuICAgICAgfVxuICAgICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgaWYgdGhlcmUgaXMgYSBtb3JlIHBlcmZvcm1hbnQgd2F5IHRvIGV4dHJhY3QgdGhlXG4gICAgICAvLyB2YWx1ZVxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjYzMFxuICAgICAgdmFsdWUgPSBsaW5lLnN1YmFycmF5KHZhbHVlU3RhcnQpLnRvU3RyaW5nKCd1dGY4JylcblxuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgc3RyaW5nIGlzIG5vdCBlbXB0eSBidXQgZG9lcyBub3QgY29udGFpbiBhIFUrMDAzQSBDT0xPTlxuICAgICAgLy8gY2hhcmFjdGVyICg6KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcm9jZXNzIHRoZSBmaWVsZCB1c2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGJlbG93LCB1c2luZyB0aGUgd2hvbGVcbiAgICAgIC8vIGxpbmUgYXMgdGhlIGZpZWxkIG5hbWUsIGFuZCB0aGUgZW1wdHkgc3RyaW5nIGFzIHRoZSBmaWVsZCB2YWx1ZS5cbiAgICAgIGZpZWxkID0gbGluZS50b1N0cmluZygndXRmOCcpXG4gICAgICB2YWx1ZSA9ICcnXG4gICAgfVxuXG4gICAgLy8gTW9kaWZ5IHRoZSBldmVudCB3aXRoIHRoZSBmaWVsZCBuYW1lIGFuZCB2YWx1ZS4gVGhlIHZhbHVlIGlzIGFsc29cbiAgICAvLyBkZWNvZGVkIGFzIFVURi04XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgIGlmIChldmVudFtmaWVsZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnRbZmllbGRdICs9IGBcXG4ke3ZhbHVlfWBcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmV0cnknOlxuICAgICAgICBpZiAoaXNBU0NJSU51bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICBldmVudFtmaWVsZF0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdpZCc6XG4gICAgICAgIGlmIChpc1ZhbGlkTGFzdEV2ZW50SWQodmFsdWUpKSB7XG4gICAgICAgICAgZXZlbnRbZmllbGRdID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZXZlbnQnOlxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFNvdXJjZVN0cmVhbUV2ZW50fSBldmVudFxuICAgKi9cbiAgcHJvY2Vzc0V2ZW50IChldmVudCkge1xuICAgIGlmIChldmVudC5yZXRyeSAmJiBpc0FTQ0lJTnVtYmVyKGV2ZW50LnJldHJ5KSkge1xuICAgICAgdGhpcy5zdGF0ZS5yZWNvbm5lY3Rpb25UaW1lID0gcGFyc2VJbnQoZXZlbnQucmV0cnksIDEwKVxuICAgIH1cblxuICAgIGlmIChldmVudC5pZCAmJiBpc1ZhbGlkTGFzdEV2ZW50SWQoZXZlbnQuaWQpKSB7XG4gICAgICB0aGlzLnN0YXRlLmxhc3RFdmVudElkID0gZXZlbnQuaWRcbiAgICB9XG5cbiAgICAvLyBvbmx5IGRpc3BhdGNoIGV2ZW50LCB3aGVuIGRhdGEgaXMgcHJvdmlkZWRcbiAgICBpZiAoZXZlbnQuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2goe1xuICAgICAgICB0eXBlOiBldmVudC5ldmVudCB8fCAnbWVzc2FnZScsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBkYXRhOiBldmVudC5kYXRhLFxuICAgICAgICAgIGxhc3RFdmVudElkOiB0aGlzLnN0YXRlLmxhc3RFdmVudElkLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5zdGF0ZS5vcmlnaW5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjbGVhckV2ZW50ICgpIHtcbiAgICB0aGlzLmV2ZW50ID0ge1xuICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICByZXRyeTogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFNvdXJjZVN0cmVhbVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaCcpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBFdmVudFNvdXJjZVN0cmVhbSB9ID0gcmVxdWlyZSgnLi9ldmVudHNvdXJjZS1zdHJlYW0nKVxuY29uc3QgeyBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhLXVybCcpXG5jb25zdCB7IGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQgfSA9IHJlcXVpcmUoJy4uL3dlYnNvY2tldC9ldmVudHMnKVxuY29uc3QgeyBpc05ldHdvcmtFcnJvciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBkZWxheSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vKipcbiAqIEEgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBtdXN0IGluaXRpYWxseSBiZSBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLFxuICogcHJvYmFibHkgaW4gdGhlIHJlZ2lvbiBvZiBhIGZldyBzZWNvbmRzLlxuICpcbiAqIEluIENvbXBhcmlzb246XG4gKiAtIENocm9tZSB1c2VzIDMwMDBtcy5cbiAqIC0gRGVubyB1c2VzIDUwMDBtcy5cbiAqXG4gKiBAdHlwZSB7MzAwMH1cbiAqL1xuY29uc3QgZGVmYXVsdFJlY29ubmVjdGlvblRpbWUgPSAzMDAwXG5cbi8qKlxuICogVGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLlxuICogQGVudW1cbiAqIEByZWFkb25seVxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNkb20tZXZlbnRzb3VyY2UtcmVhZHlzdGF0ZS1kZXZcbiAqL1xuXG4vKipcbiAqIFRoZSBjb25uZWN0aW9uIGhhcyBub3QgeWV0IGJlZW4gZXN0YWJsaXNoZWQsIG9yIGl0IHdhcyBjbG9zZWQgYW5kIHRoZSB1c2VyXG4gKiBhZ2VudCBpcyByZWNvbm5lY3RpbmcuXG4gKiBAdHlwZSB7MH1cbiAqL1xuY29uc3QgQ09OTkVDVElORyA9IDBcblxuLyoqXG4gKiBUaGUgdXNlciBhZ2VudCBoYXMgYW4gb3BlbiBjb25uZWN0aW9uIGFuZCBpcyBkaXNwYXRjaGluZyBldmVudHMgYXMgaXRcbiAqIHJlY2VpdmVzIHRoZW0uXG4gKiBAdHlwZSB7MX1cbiAqL1xuY29uc3QgT1BFTiA9IDFcblxuLyoqXG4gKiBUaGUgY29ubmVjdGlvbiBpcyBub3Qgb3BlbiwgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCB0cnlpbmcgdG8gcmVjb25uZWN0LlxuICogQHR5cGUgezJ9XG4gKi9cbmNvbnN0IENMT1NFRCA9IDJcblxuLyoqXG4gKiBSZXF1ZXN0cyBmb3IgdGhlIGVsZW1lbnQgd2lsbCBoYXZlIHRoZWlyIG1vZGUgc2V0IHRvIFwiY29yc1wiIGFuZCB0aGVpciBjcmVkZW50aWFscyBtb2RlIHNldCB0byBcInNhbWUtb3JpZ2luXCIuXG4gKiBAdHlwZSB7J2Fub255bW91cyd9XG4gKi9cbmNvbnN0IEFOT05ZTU9VUyA9ICdhbm9ueW1vdXMnXG5cbi8qKlxuICogUmVxdWVzdHMgZm9yIHRoZSBlbGVtZW50IHdpbGwgaGF2ZSB0aGVpciBtb2RlIHNldCB0byBcImNvcnNcIiBhbmQgdGhlaXIgY3JlZGVudGlhbHMgbW9kZSBzZXQgdG8gXCJpbmNsdWRlXCIuXG4gKiBAdHlwZSB7J3VzZS1jcmVkZW50aWFscyd9XG4gKi9cbmNvbnN0IFVTRV9DUkVERU5USUFMUyA9ICd1c2UtY3JlZGVudGlhbHMnXG5cbi8qKlxuICogVGhlIEV2ZW50U291cmNlIGludGVyZmFjZSBpcyB1c2VkIHRvIHJlY2VpdmUgc2VydmVyLXNlbnQgZXZlbnRzLiBJdFxuICogY29ubmVjdHMgdG8gYSBzZXJ2ZXIgb3ZlciBIVFRQIGFuZCByZWNlaXZlcyBldmVudHMgaW4gdGV4dC9ldmVudC1zdHJlYW1cbiAqIGZvcm1hdCB3aXRob3V0IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uXG4gKiBAZXh0ZW5kcyB7RXZlbnRUYXJnZXR9XG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI3NlcnZlci1zZW50LWV2ZW50c1xuICogQGFwaSBwdWJsaWNcbiAqL1xuY2xhc3MgRXZlbnRTb3VyY2UgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gICNldmVudHMgPSB7XG4gICAgb3BlbjogbnVsbCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsXG4gIH1cblxuICAjdXJsID0gbnVsbFxuICAjd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcblxuICAjcmVhZHlTdGF0ZSA9IENPTk5FQ1RJTkdcblxuICAjcmVxdWVzdCA9IG51bGxcbiAgI2NvbnRyb2xsZXIgPSBudWxsXG5cbiAgI2Rpc3BhdGNoZXJcblxuICAvKipcbiAgICogQHR5cGUge2ltcG9ydCgnLi9ldmVudHNvdXJjZS1zdHJlYW0nKS5ldmVudFNvdXJjZVNldHRpbmdzfVxuICAgKi9cbiAgI3N0YXRlXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRXZlbnRTb3VyY2Ugb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7RXZlbnRTb3VyY2VJbml0fSBbZXZlbnRTb3VyY2VJbml0RGljdF1cbiAgICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCN0aGUtZXZlbnRzb3VyY2UtaW50ZXJmYWNlXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCBldmVudFNvdXJjZUluaXREaWN0ID0ge30pIHtcbiAgICAvLyAxLiBMZXQgZXYgYmUgYSBuZXcgRXZlbnRTb3VyY2Ugb2JqZWN0LlxuICAgIHN1cGVyKClcblxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnRXZlbnRTb3VyY2UgY29uc3RydWN0b3InXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBpZiAoIWV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgZXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnRXZlbnRTb3VyY2UgaXMgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICBjb2RlOiAnVU5ESUNJLUVTJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsLCBwcmVmaXgsICd1cmwnKVxuICAgIGV2ZW50U291cmNlSW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5FdmVudFNvdXJjZUluaXREaWN0KGV2ZW50U291cmNlSW5pdERpY3QsIHByZWZpeCwgJ2V2ZW50U291cmNlSW5pdERpY3QnKVxuXG4gICAgdGhpcy4jZGlzcGF0Y2hlciA9IGV2ZW50U291cmNlSW5pdERpY3QuZGlzcGF0Y2hlclxuICAgIHRoaXMuI3N0YXRlID0ge1xuICAgICAgbGFzdEV2ZW50SWQ6ICcnLFxuICAgICAgcmVjb25uZWN0aW9uVGltZTogZGVmYXVsdFJlY29ubmVjdGlvblRpbWVcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgc2V0dGluZ3MgYmUgZXYncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIGNvbnN0IHNldHRpbmdzID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdFxuXG4gICAgbGV0IHVybFJlY29yZFxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIDMuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBlbmNvZGluZy1wYXJzaW5nIGEgVVJMIGdpdmVuIHVybCwgcmVsYXRpdmUgdG8gc2V0dGluZ3MuXG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgc2V0dGluZ3Muc2V0dGluZ3NPYmplY3QuYmFzZVVybClcbiAgICAgIHRoaXMuI3N0YXRlLm9yaWdpbiA9IHVybFJlY29yZC5vcmlnaW5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyA0LiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNS4gU2V0IGV2J3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzLiN1cmwgPSB1cmxSZWNvcmQuaHJlZlxuXG4gICAgLy8gNi4gTGV0IGNvcnNBdHRyaWJ1dGVTdGF0ZSBiZSBBbm9ueW1vdXMuXG4gICAgbGV0IGNvcnNBdHRyaWJ1dGVTdGF0ZSA9IEFOT05ZTU9VU1xuXG4gICAgLy8gNy4gSWYgdGhlIHZhbHVlIG9mIGV2ZW50U291cmNlSW5pdERpY3QncyB3aXRoQ3JlZGVudGlhbHMgbWVtYmVyIGlzIHRydWUsXG4gICAgLy8gdGhlbiBzZXQgY29yc0F0dHJpYnV0ZVN0YXRlIHRvIFVzZSBDcmVkZW50aWFscyBhbmQgc2V0IGV2J3NcbiAgICAvLyB3aXRoQ3JlZGVudGlhbHMgYXR0cmlidXRlIHRvIHRydWUuXG4gICAgaWYgKGV2ZW50U291cmNlSW5pdERpY3Qud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICBjb3JzQXR0cmlidXRlU3RhdGUgPSBVU0VfQ1JFREVOVElBTFNcbiAgICAgIHRoaXMuI3dpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9XG5cbiAgICAvLyA4LiBMZXQgcmVxdWVzdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcG90ZW50aWFsLUNPUlMgcmVxdWVzdCBnaXZlblxuICAgIC8vIHVybFJlY29yZCwgdGhlIGVtcHR5IHN0cmluZywgYW5kIGNvcnNBdHRyaWJ1dGVTdGF0ZS5cbiAgICBjb25zdCBpbml0UmVxdWVzdCA9IHtcbiAgICAgIHJlZGlyZWN0OiAnZm9sbG93JyxcbiAgICAgIGtlZXBhbGl2ZTogdHJ1ZSxcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdXJscy1hbmQtZmV0Y2hpbmcuaHRtbCNjb3JzLXNldHRpbmdzLWF0dHJpYnV0ZXNcbiAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICAgIGNyZWRlbnRpYWxzOiBjb3JzQXR0cmlidXRlU3RhdGUgPT09ICdhbm9ueW1vdXMnXG4gICAgICAgID8gJ3NhbWUtb3JpZ2luJ1xuICAgICAgICA6ICdvbWl0JyxcbiAgICAgIHJlZmVycmVyOiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gOS4gU2V0IHJlcXVlc3QncyBjbGllbnQgdG8gc2V0dGluZ3MuXG4gICAgaW5pdFJlcXVlc3QuY2xpZW50ID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdFxuXG4gICAgLy8gMTAuIFVzZXIgYWdlbnRzIG1heSBzZXQgKGBBY2NlcHRgLCBgdGV4dC9ldmVudC1zdHJlYW1gKSBpbiByZXF1ZXN0J3MgaGVhZGVyIGxpc3QuXG4gICAgaW5pdFJlcXVlc3QuaGVhZGVyc0xpc3QgPSBbWydhY2NlcHQnLCB7IG5hbWU6ICdhY2NlcHQnLCB2YWx1ZTogJ3RleHQvZXZlbnQtc3RyZWFtJyB9XV1cblxuICAgIC8vIDExLiBTZXQgcmVxdWVzdCdzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICAgIGluaXRSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuXG4gICAgLy8gMTIuIFNldCByZXF1ZXN0J3MgaW5pdGlhdG9yIHR5cGUgdG8gXCJvdGhlclwiLlxuICAgIGluaXRSZXF1ZXN0LmluaXRpYXRvciA9ICdvdGhlcidcblxuICAgIGluaXRSZXF1ZXN0LnVybExpc3QgPSBbbmV3IFVSTCh0aGlzLiN1cmwpXVxuXG4gICAgLy8gMTMuIFNldCBldidzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzLiNyZXF1ZXN0ID0gbWFrZVJlcXVlc3QoaW5pdFJlcXVlc3QpXG5cbiAgICB0aGlzLiNjb25uZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGlzIEV2ZW50U291cmNlIG9iamVjdCdzIGNvbm5lY3Rpb24uIEl0IGNhbiBoYXZlIHRoZVxuICAgKiB2YWx1ZXMgZGVzY3JpYmVkIGJlbG93LlxuICAgKiBAcmV0dXJucyB7MHwxfDJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHJldHVybiB0aGlzLiNyZWFkeVN0YXRlXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgVVJMIHByb3ZpZGluZyB0aGUgZXZlbnQgc3RyZWFtLlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldCB1cmwgKCkge1xuICAgIHJldHVybiB0aGlzLiN1cmxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIEV2ZW50U291cmNlIG9iamVjdCB3YXNcbiAgICogaW5zdGFudGlhdGVkIHdpdGggQ09SUyBjcmVkZW50aWFscyBzZXQgKHRydWUpLCBvciBub3QgKGZhbHNlLCB0aGUgZGVmYXVsdCkuXG4gICAqL1xuICBnZXQgd2l0aENyZWRlbnRpYWxzICgpIHtcbiAgICByZXR1cm4gdGhpcy4jd2l0aENyZWRlbnRpYWxzXG4gIH1cblxuICAjY29ubmVjdCAoKSB7XG4gICAgaWYgKHRoaXMuI3JlYWR5U3RhdGUgPT09IENMT1NFRCkgcmV0dXJuXG5cbiAgICB0aGlzLiNyZWFkeVN0YXRlID0gQ09OTkVDVElOR1xuXG4gICAgY29uc3QgZmV0Y2hQYXJhbXMgPSB7XG4gICAgICByZXF1ZXN0OiB0aGlzLiNyZXF1ZXN0LFxuICAgICAgZGlzcGF0Y2hlcjogdGhpcy4jZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIC8vIDE0LiBMZXQgcHJvY2Vzc0V2ZW50U291cmNlRW5kT2ZCb2R5IGdpdmVuIHJlc3BvbnNlIHJlcyBiZSB0aGUgZm9sbG93aW5nIHN0ZXA6IGlmIHJlcyBpcyBub3QgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uLlxuICAgIGNvbnN0IHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keSA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGlzTmV0d29ya0Vycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy4jcmVjb25uZWN0KClcbiAgICB9XG5cbiAgICAvLyAxNS4gRmV0Y2ggcmVxdWVzdCwgd2l0aCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgc2V0IHRvIHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keS4uLlxuICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSA9IHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keVxuXG4gICAgLy8gYW5kIHByb2Nlc3NSZXNwb25zZSBzZXQgdG8gdGhlIGZvbGxvd2luZyBzdGVwcyBnaXZlbiByZXNwb25zZSByZXM6XG4gICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyAxLiBJZiByZXMgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG5cbiAgICAgIGlmIChpc05ldHdvcmtFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgLy8gMS4gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gZmFpbCB0aGUgY29ubmVjdGlvbiwgdGhlIHVzZXIgYWdlbnRcbiAgICAgICAgLy8gbXVzdCBxdWV1ZSBhIHRhc2sgd2hpY2gsIGlmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYVxuICAgICAgICAvLyB2YWx1ZSBvdGhlciB0aGFuIENMT1NFRCwgc2V0cyB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gQ0xPU0VEXG4gICAgICAgIC8vIGFuZCBmaXJlcyBhbiBldmVudCBuYW1lZCBlcnJvciBhdCB0aGUgRXZlbnRTb3VyY2Ugb2JqZWN0LiBPbmNlIHRoZVxuICAgICAgICAvLyB1c2VyIGFnZW50IGhhcyBmYWlsZWQgdGhlIGNvbm5lY3Rpb24sIGl0IGRvZXMgbm90IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gcmVjb25uZWN0LlxuICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiByZXMgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlZXN0YWJsaXNoIHRoZVxuICAgICAgICAgIC8vIGNvbm5lY3Rpb24sIHVubGVzcyB0aGUgdXNlciBhZ2VudCBrbm93cyB0aGF0IHRvIGJlIGZ1dGlsZSwgaW5cbiAgICAgICAgICAvLyB3aGljaCBjYXNlIHRoZSB1c2VyIGFnZW50IG1heSBmYWlsIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI3JlY29ubmVjdCgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiByZXMncyBzdGF0dXMgaXMgbm90IDIwMCwgb3IgaWYgcmVzJ3MgYENvbnRlbnQtVHlwZWBcbiAgICAgIC8vIGlzIG5vdCBgdGV4dC9ldmVudC1zdHJlYW1gLCB0aGVuIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnY29udGVudC10eXBlJywgdHJ1ZSlcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gY29udGVudFR5cGUgIT09IG51bGwgPyBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKSA6ICdmYWlsdXJlJ1xuICAgICAgY29uc3QgY29udGVudFR5cGVWYWxpZCA9IG1pbWVUeXBlICE9PSAnZmFpbHVyZScgJiYgbWltZVR5cGUuZXNzZW5jZSA9PT0gJ3RleHQvZXZlbnQtc3RyZWFtJ1xuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDIwMCB8fFxuICAgICAgICBjb250ZW50VHlwZVZhbGlkID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhbm5vdW5jZSB0aGUgY29ubmVjdGlvbiBhbmQgaW50ZXJwcmV0IHJlcydzIGJvZHlcbiAgICAgIC8vIGxpbmUgYnkgbGluZS5cblxuICAgICAgLy8gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gYW5ub3VuY2UgdGhlIGNvbm5lY3Rpb24sIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHF1ZXVlIGEgdGFzayB3aGljaCwgaWYgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIGlzIHNldCB0byBhXG4gICAgICAvLyB2YWx1ZSBvdGhlciB0aGFuIENMT1NFRCwgc2V0cyB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gT1BFTlxuICAgICAgLy8gYW5kIGZpcmVzIGFuIGV2ZW50IG5hbWVkIG9wZW4gYXQgdGhlIEV2ZW50U291cmNlIG9iamVjdC5cbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VydmVyLXNlbnQtZXZlbnRzLmh0bWwjc3NlLXByb2Nlc3NpbmctbW9kZWxcbiAgICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBPUEVOXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdvcGVuJykpXG5cbiAgICAgIC8vIElmIHJlZGlyZWN0ZWQgdG8gYSBkaWZmZXJlbnQgb3JpZ2luLCBzZXQgdGhlIG9yaWdpbiB0byB0aGUgbmV3IG9yaWdpbi5cbiAgICAgIHRoaXMuI3N0YXRlLm9yaWdpbiA9IHJlc3BvbnNlLnVybExpc3RbcmVzcG9uc2UudXJsTGlzdC5sZW5ndGggLSAxXS5vcmlnaW5cblxuICAgICAgY29uc3QgZXZlbnRTb3VyY2VTdHJlYW0gPSBuZXcgRXZlbnRTb3VyY2VTdHJlYW0oe1xuICAgICAgICBldmVudFNvdXJjZVNldHRpbmdzOiB0aGlzLiNzdGF0ZSxcbiAgICAgICAgcHVzaDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQoXG4gICAgICAgICAgICBldmVudC50eXBlLFxuICAgICAgICAgICAgZXZlbnQub3B0aW9uc1xuICAgICAgICAgICkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHBpcGVsaW5lKHJlc3BvbnNlLmJvZHkuc3RyZWFtLFxuICAgICAgICBldmVudFNvdXJjZVN0cmVhbSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXJyb3I/LmFib3J0ZWQgPT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuI2NvbnRyb2xsZXIgPSBmZXRjaGluZyhmZXRjaFBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI3NzZS1wcm9jZXNzaW5nLW1vZGVsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgI3JlY29ubmVjdCAoKSB7XG4gICAgLy8gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gcmVlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24sIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAvLyBydW4gdGhlIGZvbGxvd2luZyBzdGVwcy4gVGhlc2Ugc3RlcHMgYXJlIHJ1biBpbiBwYXJhbGxlbCwgbm90IGFzIHBhcnQgb2ZcbiAgICAvLyBhIHRhc2suIChUaGUgdGFza3MgdGhhdCBpdCBxdWV1ZXMsIG9mIGNvdXJzZSwgYXJlIHJ1biBsaWtlIG5vcm1hbCB0YXNrc1xuICAgIC8vIGFuZCBub3QgdGhlbXNlbHZlcyBpbiBwYXJhbGxlbC4pXG5cbiAgICAvLyAxLiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAgIDEuIElmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gQ0xPU0VELCBhYm9ydCB0aGUgdGFzay5cbiAgICBpZiAodGhpcy4jcmVhZHlTdGF0ZSA9PT0gQ0xPU0VEKSByZXR1cm5cblxuICAgIC8vICAgMi4gU2V0IHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBDT05ORUNUSU5HLlxuICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBDT05ORUNUSU5HXG5cbiAgICAvLyAgIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3IgYXQgdGhlIEV2ZW50U291cmNlIG9iamVjdC5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuXG4gICAgLy8gMi4gV2FpdCBhIGRlbGF5IGVxdWFsIHRvIHRoZSByZWNvbm5lY3Rpb24gdGltZSBvZiB0aGUgZXZlbnQgc291cmNlLlxuICAgIGF3YWl0IGRlbGF5KHRoaXMuI3N0YXRlLnJlY29ubmVjdGlvblRpbWUpXG5cbiAgICAvLyA1LiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAgIDEuIElmIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IHRvXG4gICAgLy8gICAgICBDT05ORUNUSU5HLCB0aGVuIHJldHVybi5cbiAgICBpZiAodGhpcy4jcmVhZHlTdGF0ZSAhPT0gQ09OTkVDVElORykgcmV0dXJuXG5cbiAgICAvLyAgIDIuIExldCByZXF1ZXN0IGJlIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyByZXF1ZXN0LlxuICAgIC8vICAgMy4gSWYgdGhlIEV2ZW50U291cmNlIG9iamVjdCdzIGxhc3QgZXZlbnQgSUQgc3RyaW5nIGlzIG5vdCB0aGUgZW1wdHlcbiAgICAvLyAgICAgIHN0cmluZywgdGhlbjpcbiAgICAvLyAgICAgIDEuIExldCBsYXN0RXZlbnRJRFZhbHVlIGJlIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyBsYXN0IGV2ZW50IElEXG4gICAgLy8gICAgICAgICBzdHJpbmcsIGVuY29kZWQgYXMgVVRGLTguXG4gICAgLy8gICAgICAyLiBTZXQgKGBMYXN0LUV2ZW50LUlEYCwgbGFzdEV2ZW50SURWYWx1ZSkgaW4gcmVxdWVzdCdzIGhlYWRlclxuICAgIC8vICAgICAgICAgbGlzdC5cbiAgICBpZiAodGhpcy4jc3RhdGUubGFzdEV2ZW50SWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNyZXF1ZXN0LmhlYWRlcnNMaXN0LnNldCgnbGFzdC1ldmVudC1pZCcsIHRoaXMuI3N0YXRlLmxhc3RFdmVudElkLCB0cnVlKVxuICAgIH1cblxuICAgIC8vICAgNC4gRmV0Y2ggcmVxdWVzdCBhbmQgcHJvY2VzcyB0aGUgcmVzcG9uc2Ugb2J0YWluZWQgaW4gdGhpcyBmYXNoaW9uLCBpZiBhbnksIGFzIGRlc2NyaWJlZCBlYXJsaWVyIGluIHRoaXMgc2VjdGlvbi5cbiAgICB0aGlzLiNjb25uZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24sIGlmIGFueSwgYW5kIHNldHMgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHRvXG4gICAqIENMT1NFRC5cbiAgICovXG4gIGNsb3NlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFdmVudFNvdXJjZSlcblxuICAgIGlmICh0aGlzLiNyZWFkeVN0YXRlID09PSBDTE9TRUQpIHJldHVyblxuICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBDTE9TRURcbiAgICB0aGlzLiNjb250cm9sbGVyLmFib3J0KClcbiAgICB0aGlzLiNyZXF1ZXN0ID0gbnVsbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGNvbnN0YW50c1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIENPTk5FQ1RJTkc6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBDT05ORUNUSU5HLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9LFxuICBPUEVOOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogT1BFTixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSxcbiAgQ0xPU0VEOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogQ0xPU0VELFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEV2ZW50U291cmNlLCBjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzKVxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRXZlbnRTb3VyY2UucHJvdG90eXBlLCBjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFdmVudFNvdXJjZS5wcm90b3R5cGUsIHtcbiAgY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25vcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdpdGhDcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXZlbnRTb3VyY2VJbml0RGljdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3dpdGhDcmVkZW50aWFscycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2Rpc3BhdGNoZXInLCAvLyB1bmRpY2kgb25seVxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFNvdXJjZSxcbiAgZGVmYXVsdFJlY29ubmVjdGlvblRpbWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9jbGllbnQnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlcicpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9wb29sJylcbmNvbnN0IEJhbGFuY2VkUG9vbCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvYmFsYW5jZWQtcG9vbCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvYWdlbnQnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQnKVxuY29uc3QgRW52SHR0cFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50JylcbmNvbnN0IFJldHJ5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL3JldHJ5LWFnZW50JylcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoJy4vbGliL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2xpYi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gZXJyb3JzXG5jb25zdCBhcGkgPSByZXF1aXJlKCcuL2xpYi9hcGknKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Nvbm5lY3QnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja0FnZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWFnZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLXBvb2wnKVxuY29uc3QgbW9ja0Vycm9ycyA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1lcnJvcnMnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciwgc2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi9saWIvZ2xvYmFsJylcbmNvbnN0IERlY29yYXRvckhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL2RlY29yYXRvci1oYW5kbGVyJylcbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvcmVkaXJlY3QtaGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QtaW50ZXJjZXB0b3InKVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5FbnZIdHRwUHJveHlBZ2VudCA9IEVudkh0dHBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUFnZW50ID0gUmV0cnlBZ2VudFxubW9kdWxlLmV4cG9ydHMuUmV0cnlIYW5kbGVyID0gUmV0cnlIYW5kbGVyXG5cbm1vZHVsZS5leHBvcnRzLkRlY29yYXRvckhhbmRsZXIgPSBEZWNvcmF0b3JIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5SZWRpcmVjdEhhbmRsZXIgPSBSZWRpcmVjdEhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5pbnRlcmNlcHRvcnMgPSB7XG4gIHJlZGlyZWN0OiByZXF1aXJlKCcuL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdCcpLFxuICByZXRyeTogcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmV0cnknKSxcbiAgZHVtcDogcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvZHVtcCcpLFxuICBkbnM6IHJlcXVpcmUoJy4vbGliL2ludGVyY2VwdG9yL2RucycpXG59XG5cbm1vZHVsZS5leHBvcnRzLmJ1aWxkQ29ubmVjdG9yID0gYnVpbGRDb25uZWN0b3Jcbm1vZHVsZS5leHBvcnRzLmVycm9ycyA9IGVycm9yc1xubW9kdWxlLmV4cG9ydHMudXRpbCA9IHtcbiAgcGFyc2VIZWFkZXJzOiB1dGlsLnBhcnNlSGVhZGVycyxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nOiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZ1xufVxuXG5mdW5jdGlvbiBtYWtlRGlzcGF0Y2hlciAoZm4pIHtcbiAgcmV0dXJuICh1cmwsIG9wdHMsIGhhbmRsZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGhhbmRsZXIgPSBvcHRzXG4gICAgICBvcHRzID0gbnVsbFxuICAgIH1cblxuICAgIGlmICghdXJsIHx8ICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdXJsICE9PSAnb2JqZWN0JyAmJiAhKHVybCBpbnN0YW5jZW9mIFVSTCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAhPSBudWxsICYmIHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICYmIG9wdHMucGF0aCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMucGF0aCcpXG4gICAgICB9XG5cbiAgICAgIGxldCBwYXRoID0gb3B0cy5wYXRoXG4gICAgICBpZiAoIW9wdHMucGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICAgIH1cblxuICAgICAgdXJsID0gbmV3IFVSTCh1dGlsLnBhcnNlT3JpZ2luKHVybCkub3JpZ2luICsgcGF0aClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIG9wdHMgPSB0eXBlb2YgdXJsID09PSAnb2JqZWN0JyA/IHVybCA6IHt9XG4gICAgICB9XG5cbiAgICAgIHVybCA9IHV0aWwucGFyc2VVUkwodXJsKVxuICAgIH1cblxuICAgIGNvbnN0IHsgYWdlbnQsIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgfSA9IG9wdHNcblxuICAgIGlmIChhZ2VudCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBvcHRzLmFnZW50LiBEaWQgeW91IG1lYW4gb3B0cy5jbGllbnQ/JylcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uY2FsbChkaXNwYXRjaGVyLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgcGF0aDogdXJsLnNlYXJjaCA/IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCA6IHVybC5wYXRobmFtZSxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgKG9wdHMuYm9keSA/ICdQVVQnIDogJ0dFVCcpXG4gICAgfSwgaGFuZGxlcilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxEaXNwYXRjaGVyID0gc2V0R2xvYmFsRGlzcGF0Y2hlclxubW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsRGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXJcblxuY29uc3QgZmV0Y2hJbXBsID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoJykuZmV0Y2hcbm1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKGluaXQsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZmV0Y2hJbXBsKGluaXQsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgJiYgdHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycilcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaC9oZWFkZXJzJykuSGVhZGVyc1xubW9kdWxlLmV4cG9ydHMuUmVzcG9uc2UgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdCA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaC9yZXF1ZXN0JykuUmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvZm9ybWRhdGEnKS5Gb3JtRGF0YVxubW9kdWxlLmV4cG9ydHMuRmlsZSA9IGdsb2JhbFRoaXMuRmlsZSA/PyByZXF1aXJlKCdub2RlOmJ1ZmZlcicpLkZpbGVcbm1vZHVsZS5leHBvcnRzLkZpbGVSZWFkZXIgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG5jb25zdCB7IHNldEdsb2JhbE9yaWdpbiwgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsJylcblxubW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW5cblxuY29uc3QgeyBDYWNoZVN0b3JhZ2UgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvY2FjaGUvc3ltYm9scycpXG5cbi8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4vLyBpbiBhbiBvbGRlciB2ZXJzaW9uIG9mIE5vZGUsIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgdXNlIHdpdGhvdXQgZmV0Y2guXG5tb2R1bGUuZXhwb3J0cy5jYWNoZXMgPSBuZXcgQ2FjaGVTdG9yYWdlKGtDb25zdHJ1Y3QpXG5cbmNvbnN0IHsgZGVsZXRlQ29va2llLCBnZXRDb29raWVzLCBnZXRTZXRDb29raWVzLCBzZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9jb29raWVzJylcblxubW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG5tb2R1bGUuZXhwb3J0cy5nZXRDb29raWVzID0gZ2V0Q29va2llc1xubW9kdWxlLmV4cG9ydHMuZ2V0U2V0Q29va2llcyA9IGdldFNldENvb2tpZXNcbm1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoL2RhdGEtdXJsJylcblxubW9kdWxlLmV4cG9ydHMucGFyc2VNSU1FVHlwZSA9IHBhcnNlTUlNRVR5cGVcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUFNaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZVxuXG5jb25zdCB7IENsb3NlRXZlbnQsIEVycm9yRXZlbnQsIE1lc3NhZ2VFdmVudCB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMnKVxubW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gcmVxdWlyZSgnLi9saWIvd2ViL3dlYnNvY2tldC93ZWJzb2NrZXQnKS5XZWJTb2NrZXRcbm1vZHVsZS5leHBvcnRzLkNsb3NlRXZlbnQgPSBDbG9zZUV2ZW50XG5tb2R1bGUuZXhwb3J0cy5FcnJvckV2ZW50ID0gRXJyb3JFdmVudFxubW9kdWxlLmV4cG9ydHMuTWVzc2FnZUV2ZW50ID0gTWVzc2FnZUV2ZW50XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcblxuY29uc3QgeyBFdmVudFNvdXJjZSB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlJylcblxubW9kdWxlLmV4cG9ydHMuRXZlbnRTb3VyY2UgPSBFdmVudFNvdXJjZVxuIiwgbnVsbCwgbnVsbCwgIi8qIVxuICogY29udGVudC10eXBlXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuY29uc3QgVEVYVF9SRUdFWFAgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSokLztcbmNvbnN0IFRPS0VOX1JFR0VYUCA9IC9eWyEjJCUmJyorLl5fYHx+MC05QS1aYS16LV0rJC87XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIGNoYXJzIHRoYXQgbXVzdCBiZSBxdW90ZWQtcGFpciBpbiBSRkMgOTExMCBzZWMgNS42LjRcbiAqL1xuY29uc3QgUVVPVEVfUkVHRVhQID0gL1tcXFxcXCJdL2c7XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHR5cGUgaW4gUkZDIDkxMTAgc2VjIDguMy4xXG4gKlxuICogbWVkaWEtdHlwZSA9IHR5cGUgXCIvXCIgc3VidHlwZVxuICogdHlwZSAgICAgICA9IHRva2VuXG4gKiBzdWJ0eXBlICAgID0gdG9rZW5cbiAqL1xuY29uc3QgVFlQRV9SRUdFWFAgPVxuICAvXlshIyQlJicqKy5eX2B8fjAtOUEtWmEtei1dK1xcL1shIyQlJicqKy5eX2B8fjAtOUEtWmEtei1dKyQvO1xuXG4vKipcbiAqIE51bGwgb2JqZWN0IHBlcmYgb3B0aW1pemF0aW9uLiBGYXN0ZXIgdGhhbiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgYW5kIGB7IF9fcHJvdG9fXzogbnVsbCB9YC5cbiAqL1xuY29uc3QgTnVsbE9iamVjdCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICBjb25zdCBDID0gZnVuY3Rpb24gKCkge307XG4gIEMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIEM7XG59KSgpIGFzIHVua25vd24gYXMgeyBuZXcgKCk6IGFueSB9O1xuXG4vKipcbiAqIFRoZSBjb250ZW50IHR5cGUgb2JqZWN0IGNvbnRhaW5zIGEgdHlwZSBzdHJpbmcgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFR5cGUge1xuICB0eXBlOiBzdHJpbmc7XG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogRm9ybWF0IGFuIG9iamVjdCBpbnRvIGEgYENvbnRlbnQtVHlwZWAgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KG9iajogUGFydGlhbDxDb250ZW50VHlwZT4pOiBzdHJpbmcge1xuICBjb25zdCB7IHR5cGUsIHBhcmFtZXRlcnMgfSA9IG9iajtcblxuICBpZiAoIXR5cGUgfHwgIVRZUEVfUkVHRVhQLnRlc3QodHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSB0eXBlO1xuXG4gIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKSkge1xuICAgICAgaWYgKCFUT0tFTl9SRUdFWFAudGVzdChwYXJhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgbmFtZTogJHtwYXJhbX1gKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IGA7ICR7cGFyYW19PSR7cXN0cmluZyhwYXJhbWV0ZXJzW3BhcmFtXSl9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHBhcnNpbmcgYSBgQ29udGVudC1UeXBlYCBoZWFkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VPcHRpb25zIHtcbiAgcGFyYW1ldGVycz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSBgQ29udGVudC1UeXBlYCBoZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShoZWFkZXI6IHN0cmluZywgb3B0aW9ucz86IFBhcnNlT3B0aW9ucyk6IENvbnRlbnRUeXBlIHtcbiAgY29uc3QgbGVuID0gaGVhZGVyLmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gc2tpcE9XUyhoZWFkZXIsIDAsIGxlbik7XG5cbiAgY29uc3QgdmFsdWVTdGFydCA9IGluZGV4O1xuICBpbmRleCA9IHNraXBWYWx1ZShoZWFkZXIsIGluZGV4LCBsZW4pO1xuICBjb25zdCB2YWx1ZUVuZCA9IHRyYWlsaW5nT1dTKGhlYWRlciwgdmFsdWVTdGFydCwgaW5kZXgpO1xuICBjb25zdCB0eXBlID0gaGVhZGVyLnNsaWNlKHZhbHVlU3RhcnQsIHZhbHVlRW5kKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwYXJhbWV0ZXJzID1cbiAgICBvcHRpb25zPy5wYXJhbWV0ZXJzID09PSBmYWxzZVxuICAgICAgPyBuZXcgTnVsbE9iamVjdCgpXG4gICAgICA6IHBhcnNlUGFyYW1ldGVycyhoZWFkZXIsIGluZGV4LCBsZW4pO1xuXG4gIHJldHVybiB7IHR5cGUsIHBhcmFtZXRlcnMgfTtcbn1cblxuY29uc3QgU1AgPSAzMjsgLy8gXCIgXCJcbmNvbnN0IEhUQUIgPSA5OyAvLyBcIlxcdFwiXG5jb25zdCBTRU1JID0gNTk7IC8vIFwiO1wiXG5jb25zdCBFUSA9IDYxOyAvLyBcIj1cIlxuY29uc3QgRFFVT1RFID0gMzQ7IC8vICdcIidcbmNvbnN0IEJTTEFTSCA9IDkyOyAvLyBcIlxcXFxcIlxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcGFyYW1ldGVycyBvZiBhIGBDb250ZW50LVR5cGVgIGhlYWRlciBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVycyhcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIGluZGV4OiBudW1iZXIsXG4gIGxlbjogbnVtYmVyLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTnVsbE9iamVjdCgpO1xuXG4gIHBhcmFtZXRlcjogd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgaW5kZXggPSBza2lwT1dTKGhlYWRlciwgaW5kZXggKyAxIC8qIFNraXAgb3ZlciA7ICovLCBsZW4pO1xuXG4gICAgY29uc3Qga2V5U3RhcnQgPSBpbmRleDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbikge1xuICAgICAgY29uc3QgY29kZSA9IGhlYWRlci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgIGlmIChjb2RlID09PSBTRU1JKSBjb250aW51ZSBwYXJhbWV0ZXI7XG5cbiAgICAgIGlmIChjb2RlID09PSBFUSkge1xuICAgICAgICBjb25zdCBrZXlFbmQgPSB0cmFpbGluZ09XUyhoZWFkZXIsIGtleVN0YXJ0LCBpbmRleCk7XG4gICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZShrZXlTdGFydCwga2V5RW5kKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGluZGV4ID0gc2tpcE9XUyhoZWFkZXIsIGluZGV4ICsgMSwgbGVuKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBsZW4gJiYgaGVhZGVyLmNoYXJDb2RlQXQoaW5kZXgpID09PSBEUVVPVEUpIHtcbiAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBoZWFkZXIuY2hhckNvZGVBdChpbmRleCsrKTtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBEUVVPVEUpIHtcbiAgICAgICAgICAgICAgaW5kZXggPSBza2lwVmFsdWUoaGVhZGVyLCBpbmRleCwgbGVuKTtcbiAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNba2V5XSA9PT0gdW5kZWZpbmVkKSBwYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSBCU0xBU0ggJiYgaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgICAgdmFsdWUgKz0gaGVhZGVyW2luZGV4KytdO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZSBwYXJhbWV0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIGluZGV4ID0gc2tpcFZhbHVlKGhlYWRlciwgaW5kZXgsIGxlbik7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcnNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVFbmQgPSB0cmFpbGluZ09XUyhoZWFkZXIsIHZhbHVlU3RhcnQsIGluZGV4KTtcbiAgICAgICAgICBwYXJhbWV0ZXJzW2tleV0gPSBoZWFkZXIuc2xpY2UodmFsdWVTdGFydCwgdmFsdWVFbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWUgcGFyYW1ldGVyO1xuICAgICAgfVxuXG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG4vKipcbiAqIFNraXAgb3ZlciBjaGFyYWN0ZXJzIHVudGlsIGEgc2VtaWNvbG9uLlxuICovXG5mdW5jdGlvbiBza2lwVmFsdWUoc3RyOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICBpZiAoY2hhciA9PT0gU0VNSSkgYnJlYWs7XG4gICAgaW5kZXgrKztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbi8qKlxuICogU2tpcCBvcHRpb25hbCB3aGl0ZXNwYWNlIChPV1MpIGluIGFuIEhUVFAgaGVhZGVyIHZhbHVlLlxuICpcbiAqIE9XUyBpcyBkZWZpbmVkIGluIFJGQyA5MTEwIHNlYyA1LjYuMyBhcyBTUCAoXCIgXCIpIG9yIEhUQUIgKFwiXFx0XCIpLlxuICovXG5mdW5jdGlvbiBza2lwT1dTKGhlYWRlcjogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBsZW46IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChpbmRleCA8IGxlbikge1xuICAgIGNvbnN0IGNoYXIgPSBoZWFkZXIuY2hhckNvZGVBdChpbmRleCk7XG4gICAgaWYgKGNoYXIgIT09IFNQICYmIGNoYXIgIT09IEhUQUIpIGJyZWFrO1xuICAgIGluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFRyaW0gb3B0aW9uYWwgd2hpdGVzcGFjZSAoT1dTKSBmcm9tIHRoZSBlbmQgb2YgYSBzdWJzdHJpbmcuXG4gKlxuICogT1dTIGlzIGRlZmluZWQgaW4gUkZDIDkxMTAgc2VjIDUuNi4zIGFzIFNQIChcIiBcIikgb3IgSFRBQiAoXCJcXHRcIikuXG4gKi9cbmZ1bmN0aW9uIHRyYWlsaW5nT1dTKGhlYWRlcjogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChlbmQgPiBzdGFydCkge1xuICAgIGNvbnN0IGNoYXIgPSBoZWFkZXIuY2hhckNvZGVBdChlbmQgLSAxKTtcbiAgICBpZiAoY2hhciAhPT0gU1AgJiYgY2hhciAhPT0gSFRBQikgYnJlYWs7XG4gICAgZW5kLS07XG4gIH1cbiAgcmV0dXJuIGVuZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBwYXJhbWV0ZXIgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHFzdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoVE9LRU5fUkVHRVhQLnRlc3Qoc3RyKSkgcmV0dXJuIHN0cjtcbiAgaWYgKFRFWFRfUkVHRVhQLnRlc3Qoc3RyKSkgcmV0dXJuIGBcIiR7c3RyLnJlcGxhY2UoUVVPVEVfUkVHRVhQLCBcIlxcXFwkJlwiKX1cImA7XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgdmFsdWU6ICR7c3RyfWApO1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBOb3RlOiB0aGlzIGlzIHRoZSBzZW12ZXIub3JnIHZlcnNpb24gb2YgdGhlIHNwZWMgdGhhdCBpdCBpbXBsZW1lbnRzXG4vLyBOb3QgbmVjZXNzYXJpbHkgdGhlIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGNvZGUuXG5jb25zdCBTRU1WRVJfU1BFQ19WRVJTSU9OID0gJzIuMC4wJ1xuXG5jb25zdCBNQVhfTEVOR1RIID0gMjU2XG5jb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDkwMDcxOTkyNTQ3NDA5OTFcblxuLy8gTWF4IHNhZmUgc2VnbWVudCBsZW5ndGggZm9yIGNvZXJjaW9uLlxuY29uc3QgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCA9IDE2XG5cbi8vIE1heCBzYWZlIGxlbmd0aCBmb3IgYSBidWlsZCBpZGVudGlmaWVyLiBUaGUgbWF4IGxlbmd0aCBtaW51cyA2IGNoYXJhY3RlcnMgZm9yXG4vLyB0aGUgc2hvcnRlc3QgdmVyc2lvbiB3aXRoIGEgYnVpbGQgMC4wLjArQlVJTEQuXG5jb25zdCBNQVhfU0FGRV9CVUlMRF9MRU5HVEggPSBNQVhfTEVOR1RIIC0gNlxuXG5jb25zdCBSRUxFQVNFX1RZUEVTID0gW1xuICAnbWFqb3InLFxuICAncHJlbWFqb3InLFxuICAnbWlub3InLFxuICAncHJlbWlub3InLFxuICAncGF0Y2gnLFxuICAncHJlcGF0Y2gnLFxuICAncHJlcmVsZWFzZScsXG5dXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RILFxuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9TQUZFX0lOVEVHRVIsXG4gIFJFTEVBU0VfVFlQRVMsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT04sXG4gIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFOiAwYjAwMSxcbiAgRkxBR19MT09TRTogMGIwMTAsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlYnVnID0gKFxuICB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgcHJvY2Vzcy5lbnYgJiZcbiAgcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJlxuICAvXFxic2VtdmVyXFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKVxuKSA/ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKCdTRU1WRVInLCAuLi5hcmdzKVxuICA6ICgpID0+IHt9XG5cbm1vZHVsZS5leHBvcnRzID0gZGVidWdcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9MRU5HVEgsXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnJylcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHt9XG5cbi8vIFRoZSBhY3R1YWwgcmVnZXhwcyBnbyBvbiBleHBvcnRzLnJlXG5jb25zdCByZSA9IGV4cG9ydHMucmUgPSBbXVxuY29uc3Qgc2FmZVJlID0gZXhwb3J0cy5zYWZlUmUgPSBbXVxuY29uc3Qgc3JjID0gZXhwb3J0cy5zcmMgPSBbXVxuY29uc3Qgc2FmZVNyYyA9IGV4cG9ydHMuc2FmZVNyYyA9IFtdXG5jb25zdCB0ID0gZXhwb3J0cy50ID0ge31cbmxldCBSID0gMFxuXG5jb25zdCBMRVRURVJEQVNITlVNQkVSID0gJ1thLXpBLVowLTktXSdcblxuLy8gUmVwbGFjZSBzb21lIGdyZWVkeSByZWdleCB0b2tlbnMgdG8gcHJldmVudCByZWdleCBkb3MgaXNzdWVzLiBUaGVzZSByZWdleCBhcmVcbi8vIHVzZWQgaW50ZXJuYWxseSB2aWEgdGhlIHNhZmVSZSBvYmplY3Qgc2luY2UgYWxsIGlucHV0cyBpbiB0aGlzIGxpYnJhcnkgZ2V0XG4vLyBub3JtYWxpemVkIGZpcnN0IHRvIHRyaW0gYW5kIGNvbGxhcHNlIGFsbCBleHRyYSB3aGl0ZXNwYWNlLiBUaGUgb3JpZ2luYWxcbi8vIHJlZ2V4ZXMgYXJlIGV4cG9ydGVkIGZvciB1c2VybGFuZCBjb25zdW1wdGlvbiBhbmQgbG93ZXIgbGV2ZWwgdXNhZ2UuIEFcbi8vIGZ1dHVyZSBicmVha2luZyBjaGFuZ2UgY291bGQgZXhwb3J0IHRoZSBzYWZlciByZWdleCBvbmx5IHdpdGggYSBub3RlIHRoYXRcbi8vIGFsbCBpbnB1dCBzaG91bGQgaGF2ZSBleHRyYSB3aGl0ZXNwYWNlIHJlbW92ZWQuXG5jb25zdCBzYWZlUmVnZXhSZXBsYWNlbWVudHMgPSBbXG4gIFsnXFxcXHMnLCAxXSxcbiAgWydcXFxcZCcsIE1BWF9MRU5HVEhdLFxuICBbTEVUVEVSREFTSE5VTUJFUiwgTUFYX1NBRkVfQlVJTERfTEVOR1RIXSxcbl1cblxuY29uc3QgbWFrZVNhZmVSZWdleCA9ICh2YWx1ZSkgPT4ge1xuICBmb3IgKGNvbnN0IFt0b2tlbiwgbWF4XSBvZiBzYWZlUmVnZXhSZXBsYWNlbWVudHMpIHtcbiAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAuc3BsaXQoYCR7dG9rZW59KmApLmpvaW4oYCR7dG9rZW59ezAsJHttYXh9fWApXG4gICAgICAuc3BsaXQoYCR7dG9rZW59K2ApLmpvaW4oYCR7dG9rZW59ezEsJHttYXh9fWApXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmNvbnN0IGNyZWF0ZVRva2VuID0gKG5hbWUsIHZhbHVlLCBpc0dsb2JhbCkgPT4ge1xuICBjb25zdCBzYWZlID0gbWFrZVNhZmVSZWdleCh2YWx1ZSlcbiAgY29uc3QgaW5kZXggPSBSKytcbiAgZGVidWcobmFtZSwgaW5kZXgsIHZhbHVlKVxuICB0W25hbWVdID0gaW5kZXhcbiAgc3JjW2luZGV4XSA9IHZhbHVlXG4gIHNhZmVTcmNbaW5kZXhdID0gc2FmZVxuICByZVtpbmRleF0gPSBuZXcgUmVnRXhwKHZhbHVlLCBpc0dsb2JhbCA/ICdnJyA6IHVuZGVmaW5lZClcbiAgc2FmZVJlW2luZGV4XSA9IG5ldyBSZWdFeHAoc2FmZSwgaXNHbG9iYWwgPyAnZycgOiB1bmRlZmluZWQpXG59XG5cbi8vIFRoZSBmb2xsb3dpbmcgUmVndWxhciBFeHByZXNzaW9ucyBjYW4gYmUgdXNlZCBmb3IgdG9rZW5pemluZyxcbi8vIHZhbGlkYXRpbmcsIGFuZCBwYXJzaW5nIFNlbVZlciB2ZXJzaW9uIHN0cmluZ3MuXG5cbi8vICMjIE51bWVyaWMgSWRlbnRpZmllclxuLy8gQSBzaW5nbGUgYDBgLCBvciBhIG5vbi16ZXJvIGRpZ2l0IGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBkaWdpdHMuXG5cbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUicsICcwfFsxLTldXFxcXGQqJylcbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUkxPT1NFJywgJ1xcXFxkKycpXG5cbi8vICMjIE5vbi1udW1lcmljIElkZW50aWZpZXJcbi8vIFplcm8gb3IgbW9yZSBkaWdpdHMsIGZvbGxvd2VkIGJ5IGEgbGV0dGVyIG9yIGh5cGhlbiwgYW5kIHRoZW4gemVybyBvclxuLy8gbW9yZSBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMuXG5cbmNyZWF0ZVRva2VuKCdOT05OVU1FUklDSURFTlRJRklFUicsIGBcXFxcZCpbYS16QS1aLV0ke0xFVFRFUkRBU0hOVU1CRVJ9KmApXG5cbi8vICMjIE1haW4gVmVyc2lvblxuLy8gVGhyZWUgZG90LXNlcGFyYXRlZCBudW1lcmljIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignTUFJTlZFUlNJT04nLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuY3JlYXRlVG9rZW4oJ01BSU5WRVJTSU9OTE9PU0UnLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb24gSWRlbnRpZmllclxuLy8gQSBudW1lcmljIGlkZW50aWZpZXIsIG9yIGEgbm9uLW51bWVyaWMgaWRlbnRpZmllci5cbi8vIE5vbi1udW1lcmljIGlkZW50aWZpZXJzIGluY2x1ZGUgbnVtZXJpYyBpZGVudGlmaWVycyBidXQgY2FuIGJlIGxvbmdlci5cbi8vIFRoZXJlZm9yZSBub24tbnVtZXJpYyBpZGVudGlmaWVycyBtdXN0IGdvIGZpcnN0LlxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUlERU5USUZJRVInLCBgKD86JHtzcmNbdC5OT05OVU1FUklDSURFTlRJRklFUl1cbn18JHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KWApXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFJywgYCg/OiR7c3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdXG59fCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb25cbi8vIEh5cGhlbiwgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgZG90LXNlcGFyYXRlZCBwcmUtcmVsZWFzZSB2ZXJzaW9uXG4vLyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0UnLCBgKD86LSgke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSXVxufSg/OlxcXFwuJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUl19KSopKWApXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFTE9PU0UnLCBgKD86LT8oJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXVxufSg/OlxcXFwuJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXX0pKikpYClcblxuLy8gIyMgQnVpbGQgTWV0YWRhdGEgSWRlbnRpZmllclxuLy8gQW55IGNvbWJpbmF0aW9uIG9mIGRpZ2l0cywgbGV0dGVycywgb3IgaHlwaGVucy5cblxuY3JlYXRlVG9rZW4oJ0JVSUxESURFTlRJRklFUicsIGAke0xFVFRFUkRBU0hOVU1CRVJ9K2ApXG5cbi8vICMjIEJ1aWxkIE1ldGFkYXRhXG4vLyBQbHVzIHNpZ24sIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHBlcmlvZC1zZXBhcmF0ZWQgYnVpbGQgbWV0YWRhdGFcbi8vIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignQlVJTEQnLCBgKD86XFxcXCsoJHtzcmNbdC5CVUlMRElERU5USUZJRVJdXG59KD86XFxcXC4ke3NyY1t0LkJVSUxESURFTlRJRklFUl19KSopKWApXG5cbi8vICMjIEZ1bGwgVmVyc2lvbiBTdHJpbmdcbi8vIEEgbWFpbiB2ZXJzaW9uLCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiBhbmRcbi8vIGJ1aWxkIG1ldGFkYXRhLlxuXG4vLyBOb3RlIHRoYXQgdGhlIG9ubHkgbWFqb3IsIG1pbm9yLCBwYXRjaCwgYW5kIHByZS1yZWxlYXNlIHNlY3Rpb25zIG9mXG4vLyB0aGUgdmVyc2lvbiBzdHJpbmcgYXJlIGNhcHR1cmluZyBncm91cHMuICBUaGUgYnVpbGQgbWV0YWRhdGEgaXMgbm90IGFcbi8vIGNhcHR1cmluZyBncm91cCwgYmVjYXVzZSBpdCBzaG91bGQgbm90IGV2ZXIgYmUgdXNlZCBpbiB2ZXJzaW9uXG4vLyBjb21wYXJpc29uLlxuXG5jcmVhdGVUb2tlbignRlVMTFBMQUlOJywgYHY/JHtzcmNbdC5NQUlOVkVSU0lPTl1cbn0ke3NyY1t0LlBSRVJFTEVBU0VdfT8ke1xuICBzcmNbdC5CVUlMRF19P2ApXG5cbmNyZWF0ZVRva2VuKCdGVUxMJywgYF4ke3NyY1t0LkZVTExQTEFJTl19JGApXG5cbi8vIGxpa2UgZnVsbCwgYnV0IGFsbG93cyB2MS4yLjMgYW5kID0xLjIuMywgd2hpY2ggcGVvcGxlIGRvIHNvbWV0aW1lcy5cbi8vIGFsc28sIDEuMC4wYWxwaGExIChwcmVyZWxlYXNlIHdpdGhvdXQgdGhlIGh5cGhlbikgd2hpY2ggaXMgcHJldHR5XG4vLyBjb21tb24gaW4gdGhlIG5wbSByZWdpc3RyeS5cbmNyZWF0ZVRva2VuKCdMT09TRVBMQUlOJywgYFt2PVxcXFxzXSoke3NyY1t0Lk1BSU5WRVJTSU9OTE9PU0VdXG59JHtzcmNbdC5QUkVSRUxFQVNFTE9PU0VdfT8ke1xuICBzcmNbdC5CVUlMRF19P2ApXG5cbmNyZWF0ZVRva2VuKCdMT09TRScsIGBeJHtzcmNbdC5MT09TRVBMQUlOXX0kYClcblxuY3JlYXRlVG9rZW4oJ0dUTFQnLCAnKCg/Ojx8Pik/PT8pJylcblxuLy8gU29tZXRoaW5nIGxpa2UgXCIyLipcIiBvciBcIjEuMi54XCIuXG4vLyBOb3RlIHRoYXQgXCJ4LnhcIiBpcyBhIHZhbGlkIHhSYW5nZSBpZGVudGlmaWVyLCBtZWFuaW5nIFwiYW55IHZlcnNpb25cIlxuLy8gT25seSB0aGUgZmlyc3QgaXRlbSBpcyBzdHJpY3RseSByZXF1aXJlZC5cbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSTE9PU0UnLCBgJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX18eHxYfFxcXFwqYClcbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfXx4fFh8XFxcXCpgKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU4nLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/JHtcbiAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU5MT09TRScsIGBbdj1cXFxcc10qKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKT8pP2ApXG5cbmNyZWF0ZVRva2VuKCdYUkFOR0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignWFJBTkdFTE9PU0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ29lcmNpb24uXG4vLyBFeHRyYWN0IGFueXRoaW5nIHRoYXQgY291bGQgY29uY2VpdmFibHkgYmUgYSBwYXJ0IG9mIGEgdmFsaWQgc2VtdmVyXG5jcmVhdGVUb2tlbignQ09FUkNFUExBSU4nLCBgJHsnKF58W15cXFxcZF0pJyArXG4gICAgICAgICAgICAgICcoXFxcXGR7MSwnfSR7TUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSH19KWAgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2AgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2ApXG5jcmVhdGVUb2tlbignQ09FUkNFJywgYCR7c3JjW3QuQ09FUkNFUExBSU5dfSg/OiR8W15cXFxcZF0pYClcbmNyZWF0ZVRva2VuKCdDT0VSQ0VGVUxMJywgc3JjW3QuQ09FUkNFUExBSU5dICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRV19KT9gICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuQlVJTERdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMJywgc3JjW3QuQ09FUkNFXSwgdHJ1ZSlcbmNyZWF0ZVRva2VuKCdDT0VSQ0VSVExGVUxMJywgc3JjW3QuQ09FUkNFRlVMTF0sIHRydWUpXG5cbi8vIFRpbGRlIHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJyZWFzb25hYmx5IGF0IG9yIGdyZWF0ZXIgdGhhblwiXG5jcmVhdGVUb2tlbignTE9ORVRJTERFJywgJyg/On4+PyknKVxuXG5jcmVhdGVUb2tlbignVElMREVUUklNJywgYChcXFxccyopJHtzcmNbdC5MT05FVElMREVdfVxcXFxzK2AsIHRydWUpXG5leHBvcnRzLnRpbGRlVHJpbVJlcGxhY2UgPSAnJDF+J1xuXG5jcmVhdGVUb2tlbignVElMREUnLCBgXiR7c3JjW3QuTE9ORVRJTERFXX0ke3NyY1t0LlhSQU5HRVBMQUlOXX0kYClcbmNyZWF0ZVRva2VuKCdUSUxERUxPT1NFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ2FyZXQgcmFuZ2VzLlxuLy8gTWVhbmluZyBpcyBcImF0IGxlYXN0IGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoXCJcbmNyZWF0ZVRva2VuKCdMT05FQ0FSRVQnLCAnKD86XFxcXF4pJylcblxuY3JlYXRlVG9rZW4oJ0NBUkVUVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORUNBUkVUXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy5jYXJldFRyaW1SZXBsYWNlID0gJyQxXidcblxuY3JlYXRlVG9rZW4oJ0NBUkVUJywgYF4ke3NyY1t0LkxPTkVDQVJFVF19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignQ0FSRVRMT09TRScsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIEEgc2ltcGxlIGd0L2x0L2VxIHRoaW5nLCBvciBqdXN0IFwiXCIgdG8gaW5kaWNhdGUgXCJhbnkgdmVyc2lvblwiXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUkxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfSkkfF4kYClcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkZVTExQTEFJTl19KSR8XiRgKVxuXG4vLyBBbiBleHByZXNzaW9uIHRvIHN0cmlwIGFueSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIGd0bHQgYW5kIHRoZSB0aGluZ1xuLy8gaXQgbW9kaWZpZXMsIHNvIHRoYXQgYD4gMS4yLjNgID09PiBgPjEuMi4zYFxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JUUklNJywgYChcXFxccyopJHtzcmNbdC5HVExUXVxufVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfXwke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCwgdHJ1ZSlcbmV4cG9ydHMuY29tcGFyYXRvclRyaW1SZXBsYWNlID0gJyQxJDIkMydcblxuLy8gU29tZXRoaW5nIGxpa2UgYDEuMi4zIC0gMS4yLjRgXG4vLyBOb3RlIHRoYXQgdGhlc2UgYWxsIHVzZSB0aGUgbG9vc2UgZm9ybSwgYmVjYXVzZSB0aGV5J2xsIGJlXG4vLyBjaGVja2VkIGFnYWluc3QgZWl0aGVyIHRoZSBzdHJpY3Qgb3IgbG9vc2UgY29tcGFyYXRvciBmb3JtXG4vLyBsYXRlci5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRScsIGBeXFxcXHMqKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5YUkFOR0VQTEFJTl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuY3JlYXRlVG9rZW4oJ0hZUEhFTlJBTkdFTE9PU0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccystXFxcXHMrYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFxcXFxzKiRgKVxuXG4vLyBTdGFyIHJhbmdlcyBiYXNpY2FsbHkganVzdCBhbGxvdyBhbnl0aGluZyBhdCBhbGwuXG5jcmVhdGVUb2tlbignU1RBUicsICcoPHw+KT89P1xcXFxzKlxcXFwqJylcbi8vID49MC4wLjAgaXMgbGlrZSBhIHN0YXJcbmNyZWF0ZVRva2VuKCdHVEUwJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjBcXFxccyokJylcbmNyZWF0ZVRva2VuKCdHVEUwUFJFJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjAtMFxcXFxzKiQnKVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBwYXJzZSBvdXQganVzdCB0aGUgb3B0aW9ucyB3ZSBjYXJlIGFib3V0XG5jb25zdCBsb29zZU9wdGlvbiA9IE9iamVjdC5mcmVlemUoeyBsb29zZTogdHJ1ZSB9KVxuY29uc3QgZW1wdHlPcHRzID0gT2JqZWN0LmZyZWV6ZSh7IH0pXG5jb25zdCBwYXJzZU9wdGlvbnMgPSBvcHRpb25zID0+IHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuIGVtcHR5T3B0c1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBsb29zZU9wdGlvblxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VPcHRpb25zXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG51bWVyaWMgPSAvXlswLTldKyQvXG5jb25zdCBjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4ge1xuICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhID09PSBiID8gMCA6IGEgPCBiID8gLTEgOiAxXG4gIH1cblxuICBjb25zdCBhbnVtID0gbnVtZXJpYy50ZXN0KGEpXG4gIGNvbnN0IGJudW0gPSBudW1lcmljLnRlc3QoYilcblxuICBpZiAoYW51bSAmJiBibnVtKSB7XG4gICAgYSA9ICthXG4gICAgYiA9ICtiXG4gIH1cblxuICByZXR1cm4gYSA9PT0gYiA/IDBcbiAgICA6IChhbnVtICYmICFibnVtKSA/IC0xXG4gICAgOiAoYm51bSAmJiAhYW51bSkgPyAxXG4gICAgOiBhIDwgYiA/IC0xXG4gICAgOiAxXG59XG5cbmNvbnN0IHJjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4gY29tcGFyZUlkZW50aWZpZXJzKGIsIGEpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgeyBNQVhfTEVOR1RILCBNQVhfU0FGRV9JTlRFR0VSIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBjb21wYXJlSWRlbnRpZmllcnMgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2lkZW50aWZpZXJzJylcblxuY29uc3QgaXNQcmVyZWxlYXNlSWRlbnRpZmllciA9IChwcmVyZWxlYXNlLCBpZGVudGlmaWVyKSA9PiB7XG4gIGNvbnN0IGlkZW50aWZpZXJzID0gaWRlbnRpZmllci5zcGxpdCgnLicpXG4gIGlmIChpZGVudGlmaWVycy5sZW5ndGggPiBwcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjb21wYXJlSWRlbnRpZmllcnMocHJlcmVsZWFzZVtpXSwgaWRlbnRpZmllcnNbaV0pICE9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5jbGFzcyBTZW1WZXIge1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgICBpZiAodmVyc2lvbi5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlICYmXG4gICAgICAgIHZlcnNpb24uaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgICByZXR1cm4gdmVyc2lvblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24udmVyc2lvblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHZlcnNpb24uIE11c3QgYmUgYSBzdHJpbmcuIEdvdCB0eXBlIFwiJHt0eXBlb2YgdmVyc2lvbn1cIi5gKVxuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uLmxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGB2ZXJzaW9uIGlzIGxvbmdlciB0aGFuICR7TUFYX0xFTkdUSH0gY2hhcmFjdGVyc2BcbiAgICAgIClcbiAgICB9XG5cbiAgICBkZWJ1ZygnU2VtVmVyJywgdmVyc2lvbiwgb3B0aW9ucylcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5sb29zZSA9ICEhb3B0aW9ucy5sb29zZVxuICAgIC8vIHRoaXMgaXNuJ3QgYWN0dWFsbHkgcmVsZXZhbnQgZm9yIHZlcnNpb25zLCBidXQga2VlcCBpdCBzbyB0aGF0IHdlXG4gICAgLy8gZG9uJ3QgcnVuIGludG8gdHJvdWJsZSBwYXNzaW5nIHRoaXMub3B0aW9ucyBhcm91bmQuXG4gICAgdGhpcy5pbmNsdWRlUHJlcmVsZWFzZSA9ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuXG4gICAgY29uc3QgbSA9IHZlcnNpb24udHJpbSgpLm1hdGNoKG9wdGlvbnMubG9vc2UgPyByZVt0LkxPT1NFXSA6IHJlW3QuRlVMTF0pXG5cbiAgICBpZiAoIW0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgVmVyc2lvbjogJHt2ZXJzaW9ufWApXG4gICAgfVxuXG4gICAgdGhpcy5yYXcgPSB2ZXJzaW9uXG5cbiAgICAvLyB0aGVzZSBhcmUgYWN0dWFsbHkgbnVtYmVyc1xuICAgIHRoaXMubWFqb3IgPSArbVsxXVxuICAgIHRoaXMubWlub3IgPSArbVsyXVxuICAgIHRoaXMucGF0Y2ggPSArbVszXVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMubWFqb3IgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG1ham9yIHZlcnNpb24nKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1pbm9yID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLm1pbm9yIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBtaW5vciB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXRjaCA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5wYXRjaCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcGF0Y2ggdmVyc2lvbicpXG4gICAgfVxuXG4gICAgLy8gbnVtYmVyaWZ5IGFueSBwcmVyZWxlYXNlIG51bWVyaWMgaWRzXG4gICAgaWYgKCFtWzRdKSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBtWzRdLnNwbGl0KCcuJykubWFwKChpZCkgPT4ge1xuICAgICAgICBpZiAoL15bMC05XSskLy50ZXN0KGlkKSkge1xuICAgICAgICAgIGNvbnN0IG51bSA9ICtpZFxuICAgICAgICAgIGlmIChudW0gPj0gMCAmJiBudW0gPCBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkID0gbVs1XSA/IG1bNV0uc3BsaXQoJy4nKSA6IFtdXG4gICAgdGhpcy5mb3JtYXQoKVxuICB9XG5cbiAgZm9ybWF0ICgpIHtcbiAgICB0aGlzLnZlcnNpb24gPSBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5wYXRjaH1gXG4gICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbiArPSBgLSR7dGhpcy5wcmVyZWxlYXNlLmpvaW4oJy4nKX1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZlcnNpb25cbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uXG4gIH1cblxuICBjb21wYXJlIChvdGhlcikge1xuICAgIGRlYnVnKCdTZW1WZXIuY29tcGFyZScsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zLCBvdGhlcilcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3RoZXIgPT09ICdzdHJpbmcnICYmIG90aGVyID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZU1haW4ob3RoZXIpIHx8IHRoaXMuY29tcGFyZVByZShvdGhlcilcbiAgfVxuXG4gIGNvbXBhcmVNYWluIChvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPCBvdGhlci5tYWpvcikge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGlmICh0aGlzLm1ham9yID4gb3RoZXIubWFqb3IpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICAgIGlmICh0aGlzLm1pbm9yIDwgb3RoZXIubWlub3IpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICBpZiAodGhpcy5taW5vciA+IG90aGVyLm1pbm9yKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICBpZiAodGhpcy5wYXRjaCA8IG90aGVyLnBhdGNoKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgaWYgKHRoaXMucGF0Y2ggPiBvdGhlci5wYXRjaCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGNvbXBhcmVQcmUgKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBOT1QgaGF2aW5nIGEgcHJlcmVsZWFzZSBpcyA+IGhhdmluZyBvbmVcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGggJiYgb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMucHJlcmVsZWFzZVtpXVxuICAgICAgY29uc3QgYiA9IG90aGVyLnByZXJlbGVhc2VbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIGNvbXBhcmVCdWlsZCAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGxldCBpID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmJ1aWxkW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIuYnVpbGRbaV1cbiAgICAgIGRlYnVnKCdidWlsZCBjb21wYXJlJywgaSwgYSwgYilcbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQgJiYgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9IGVsc2UgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfSBlbHNlIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlSWRlbnRpZmllcnMoYSwgYilcbiAgICAgIH1cbiAgICB9IHdoaWxlICgrK2kpXG4gIH1cblxuICAvLyBwcmVtaW5vciB3aWxsIGJ1bXAgdGhlIHZlcnNpb24gdXAgdG8gdGhlIG5leHQgbWlub3IgcmVsZWFzZSwgYW5kIGltbWVkaWF0ZWx5XG4gIC8vIGRvd24gdG8gcHJlLXJlbGVhc2UuIHByZW1ham9yIGFuZCBwcmVwYXRjaCB3b3JrIHRoZSBzYW1lIHdheS5cbiAgaW5jIChyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkge1xuICAgIGlmIChyZWxlYXNlLnN0YXJ0c1dpdGgoJ3ByZScpKSB7XG4gICAgICBpZiAoIWlkZW50aWZpZXIgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgaXMgZW1wdHknKVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgYW4gaW52YWxpZCBzZW12ZXIgcmVzdWx0c1xuICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBgLSR7aWRlbnRpZmllcn1gLm1hdGNoKHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuUFJFUkVMRUFTRUxPT1NFXSA6IHJlW3QuUFJFUkVMRUFTRV0pXG4gICAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gIT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaWRlbnRpZmllcjogJHtpZGVudGlmaWVyfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlbGVhc2UpIHtcbiAgICAgIGNhc2UgJ3ByZW1ham9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZW1pbm9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZXBhdGNoJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbHJlYWR5IGEgcHJlcmVsZWFzZSwgaXQgd2lsbCBidW1wIHRvIHRoZSBuZXh0IHZlcnNpb25cbiAgICAgICAgLy8gZHJvcCBhbnkgcHJlcmVsZWFzZXMgdGhhdCBtaWdodCBhbHJlYWR5IGV4aXN0LCBzaW5jZSB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gcmVsZXZhbnQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBhIG5vbi1wcmVyZWxlYXNlIHZlcnNpb24sIHRoaXMgYWN0cyB0aGUgc2FtZSBhc1xuICAgICAgLy8gcHJlcGF0Y2guXG4gICAgICBjYXNlICdwcmVyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmluYygncGF0Y2gnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZlcnNpb24gJHt0aGlzLnJhd30gaXMgbm90IGEgcHJlcmVsZWFzZWApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbWFqb3InOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlLW1ham9yIHZlcnNpb24sIGJ1bXAgdXAgdG8gdGhlIHNhbWUgbWFqb3IgdmVyc2lvbi5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGluY3JlbWVudCBtYWpvci5cbiAgICAgICAgLy8gMS4wLjAtNSBidW1wcyB0byAxLjAuMFxuICAgICAgICAvLyAxLjEuMCBidW1wcyB0byAyLjAuMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5taW5vciAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucGF0Y2ggIT09IDAgfHxcbiAgICAgICAgICB0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdtaW5vcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWlub3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtaW5vciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1pbm9yLlxuICAgICAgICAvLyAxLjIuMC01IGJ1bXBzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4xIGJ1bXBzIHRvIDEuMy4wXG4gICAgICAgIGlmICh0aGlzLnBhdGNoICE9PSAwIHx8IHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLm1pbm9yKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdGNoID0gMFxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncGF0Y2gnOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIHByZS1yZWxlYXNlIHZlcnNpb24sIGl0IHdpbGwgaW5jcmVtZW50IHRoZSBwYXRjaC5cbiAgICAgICAgLy8gSWYgaXQgaXMgYSBwcmUtcmVsZWFzZSBpdCB3aWxsIGJ1bXAgdXAgdG8gdGhlIHNhbWUgcGF0Y2ggdmVyc2lvbi5cbiAgICAgICAgLy8gMS4yLjAtNSBwYXRjaGVzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4wIHBhdGNoZXMgdG8gMS4yLjFcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnBhdGNoKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgLy8gVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdXNlZCBwdWJsaWNseS5cbiAgICAgIC8vIDEuMC4wICdwcmUnIHdvdWxkIGJlY29tZSAxLjAuMC0wIHdoaWNoIGlzIHRoZSB3cm9uZyBkaXJlY3Rpb24uXG4gICAgICBjYXNlICdwcmUnOiB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBOdW1iZXIoaWRlbnRpZmllckJhc2UpID8gMSA6IDBcblxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtiYXNlXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBpID0gdGhpcy5wcmVyZWxlYXNlLmxlbmd0aFxuICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXJlbGVhc2VbaV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZVtpXSsrXG4gICAgICAgICAgICAgIGkgPSAtMlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIGRpZG4ndCBpbmNyZW1lbnQgYW55dGhpbmdcbiAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09PSB0aGlzLnByZXJlbGVhc2Uuam9pbignLicpICYmIGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGFscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5wdXNoKGJhc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgLy8gMS4yLjAtYmV0YS4xIGJ1bXBzIHRvIDEuMi4wLWJldGEuMixcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLmZvb2JseiBvciAxLjIuMC1iZXRhIGJ1bXBzIHRvIDEuMi4wLWJldGEuMFxuICAgICAgICAgIGxldCBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXIsIGJhc2VdXG4gICAgICAgICAgaWYgKGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcHJlcmVsZWFzZSA9IFtpZGVudGlmaWVyXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNQcmVyZWxlYXNlSWRlbnRpZmllcih0aGlzLnByZXJlbGVhc2UsIGlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVyZWxlYXNlQmFzZSA9IHRoaXMucHJlcmVsZWFzZVtpZGVudGlmaWVyLnNwbGl0KCcuJykubGVuZ3RoXVxuICAgICAgICAgICAgaWYgKGlzTmFOKHByZXJlbGVhc2VCYXNlKSkge1xuICAgICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IHByZXJlbGVhc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6ICR7cmVsZWFzZX1gKVxuICAgIH1cbiAgICB0aGlzLnJhdyA9IHRoaXMuZm9ybWF0KClcbiAgICBpZiAodGhpcy5idWlsZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmF3ICs9IGArJHt0aGlzLmJ1aWxkLmpvaW4oJy4nKX1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZW1WZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSAodmVyc2lvbiwgb3B0aW9ucywgdGhyb3dFcnJvcnMgPSBmYWxzZSkgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmICghdGhyb3dFcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHRocm93IGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgdmFsaWQgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB2ID0gcGFyc2UodmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIHYgPyB2LnZlcnNpb24gOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHZhbGlkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCBjbGVhbiA9ICh2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHMgPSBwYXJzZSh2ZXJzaW9uLnRyaW0oKS5yZXBsYWNlKC9eWz12XSsvLCAnJyksIG9wdGlvbnMpXG4gIHJldHVybiBzID8gcy52ZXJzaW9uIDogbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBjbGVhblxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IGluYyA9ICh2ZXJzaW9uLCByZWxlYXNlLCBvcHRpb25zLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkgPT4ge1xuICBpZiAodHlwZW9mIChvcHRpb25zKSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZGVudGlmaWVyQmFzZSA9IGlkZW50aWZpZXJcbiAgICBpZGVudGlmaWVyID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWRcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBTZW1WZXIoXG4gICAgICB2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyID8gdmVyc2lvbi52ZXJzaW9uIDogdmVyc2lvbixcbiAgICAgIG9wdGlvbnNcbiAgICApLmluYyhyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkudmVyc2lvblxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gaW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZS5qcycpXG5cbmNvbnN0IGRpZmYgPSAodmVyc2lvbjEsIHZlcnNpb24yKSA9PiB7XG4gIGNvbnN0IHYxID0gcGFyc2UodmVyc2lvbjEsIG51bGwsIHRydWUpXG4gIGNvbnN0IHYyID0gcGFyc2UodmVyc2lvbjIsIG51bGwsIHRydWUpXG4gIGNvbnN0IGNvbXBhcmlzb24gPSB2MS5jb21wYXJlKHYyKVxuXG4gIGlmIChjb21wYXJpc29uID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHYxSGlnaGVyID0gY29tcGFyaXNvbiA+IDBcbiAgY29uc3QgaGlnaFZlcnNpb24gPSB2MUhpZ2hlciA/IHYxIDogdjJcbiAgY29uc3QgbG93VmVyc2lvbiA9IHYxSGlnaGVyID8gdjIgOiB2MVxuICBjb25zdCBoaWdoSGFzUHJlID0gISFoaWdoVmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aFxuICBjb25zdCBsb3dIYXNQcmUgPSAhIWxvd1ZlcnNpb24ucHJlcmVsZWFzZS5sZW5ndGhcblxuICBpZiAobG93SGFzUHJlICYmICFoaWdoSGFzUHJlKSB7XG4gICAgLy8gR29pbmcgZnJvbSBwcmVyZWxlYXNlIC0+IG5vIHByZXJlbGVhc2UgcmVxdWlyZXMgc29tZSBzcGVjaWFsIGNhc2luZ1xuXG4gICAgLy8gSWYgdGhlIGxvdyB2ZXJzaW9uIGhhcyBvbmx5IGEgbWFqb3IsIHRoZW4gaXQgd2lsbCBhbHdheXMgYmUgYSBtYWpvclxuICAgIC8vIFNvbWUgZXhhbXBsZXM6XG4gICAgLy8gMS4wLjAtMSAtPiAxLjAuMFxuICAgIC8vIDEuMC4wLTEgLT4gMS4xLjFcbiAgICAvLyAxLjAuMC0xIC0+IDIuMC4wXG4gICAgaWYgKCFsb3dWZXJzaW9uLnBhdGNoICYmICFsb3dWZXJzaW9uLm1pbm9yKSB7XG4gICAgICByZXR1cm4gJ21ham9yJ1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBtYWluIHBhcnQgaGFzIG5vIGRpZmZlcmVuY2VcbiAgICBpZiAobG93VmVyc2lvbi5jb21wYXJlTWFpbihoaWdoVmVyc2lvbikgPT09IDApIHtcbiAgICAgIGlmIChsb3dWZXJzaW9uLm1pbm9yICYmICFsb3dWZXJzaW9uLnBhdGNoKSB7XG4gICAgICAgIHJldHVybiAnbWlub3InXG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BhdGNoJ1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCB0aGUgYHByZWAgcHJlZml4IGlmIHdlIGFyZSBnb2luZyB0byBhIHByZXJlbGVhc2UgdmVyc2lvblxuICBjb25zdCBwcmVmaXggPSBoaWdoSGFzUHJlID8gJ3ByZScgOiAnJ1xuXG4gIGlmICh2MS5tYWpvciAhPT0gdjIubWFqb3IpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ21ham9yJ1xuICB9XG5cbiAgaWYgKHYxLm1pbm9yICE9PSB2Mi5taW5vcikge1xuICAgIHJldHVybiBwcmVmaXggKyAnbWlub3InXG4gIH1cblxuICBpZiAodjEucGF0Y2ggIT09IHYyLnBhdGNoKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdwYXRjaCdcbiAgfVxuXG4gIC8vIGhpZ2ggYW5kIGxvdyBhcmUgcHJlcmVsZWFzZXNcbiAgcmV0dXJuICdwcmVyZWxlYXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgbWFqb3IgPSAoYSwgbG9vc2UpID0+IG5ldyBTZW1WZXIoYSwgbG9vc2UpLm1ham9yXG5tb2R1bGUuZXhwb3J0cyA9IG1ham9yXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IG1pbm9yID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5taW5vclxubW9kdWxlLmV4cG9ydHMgPSBtaW5vclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBwYXRjaCA9IChhLCBsb29zZSkgPT4gbmV3IFNlbVZlcihhLCBsb29zZSkucGF0Y2hcbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHByZXJlbGVhc2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZSh2ZXJzaW9uLCBvcHRpb25zKVxuICByZXR1cm4gKHBhcnNlZCAmJiBwYXJzZWQucHJlcmVsZWFzZS5sZW5ndGgpID8gcGFyc2VkLnByZXJlbGVhc2UgOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHByZXJlbGVhc2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT5cbiAgbmV3IFNlbVZlcihhLCBsb29zZSkuY29tcGFyZShuZXcgU2VtVmVyKGIsIGxvb3NlKSlcblxubW9kdWxlLmV4cG9ydHMgPSBjb21wYXJlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgcmNvbXBhcmUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYiwgYSwgbG9vc2UpXG5tb2R1bGUuZXhwb3J0cyA9IHJjb21wYXJlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgY29tcGFyZUxvb3NlID0gKGEsIGIpID0+IGNvbXBhcmUoYSwgYiwgdHJ1ZSlcbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUxvb3NlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IGNvbXBhcmVCdWlsZCA9IChhLCBiLCBsb29zZSkgPT4ge1xuICBjb25zdCB2ZXJzaW9uQSA9IG5ldyBTZW1WZXIoYSwgbG9vc2UpXG4gIGNvbnN0IHZlcnNpb25CID0gbmV3IFNlbVZlcihiLCBsb29zZSlcbiAgcmV0dXJuIHZlcnNpb25BLmNvbXBhcmUodmVyc2lvbkIpIHx8IHZlcnNpb25BLmNvbXBhcmVCdWlsZCh2ZXJzaW9uQilcbn1cbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUJ1aWxkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmVCdWlsZCA9IHJlcXVpcmUoJy4vY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChhLCBiLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHJzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChiLCBhLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHJzb3J0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3QgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID4gMFxubW9kdWxlLmV4cG9ydHMgPSBndFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGx0ID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA8IDBcbm1vZHVsZS5leHBvcnRzID0gbHRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBlcSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPT09IDBcbm1vZHVsZS5leHBvcnRzID0gZXFcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBuZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpICE9PSAwXG5tb2R1bGUuZXhwb3J0cyA9IG5lcVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGd0ZSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPj0gMFxubW9kdWxlLmV4cG9ydHMgPSBndGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBsdGUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpIDw9IDBcbm1vZHVsZS5leHBvcnRzID0gbHRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGVxID0gcmVxdWlyZSgnLi9lcScpXG5jb25zdCBuZXEgPSByZXF1aXJlKCcuL25lcScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4vZ3QnKVxuY29uc3QgZ3RlID0gcmVxdWlyZSgnLi9ndGUnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2x0JylcbmNvbnN0IGx0ZSA9IHJlcXVpcmUoJy4vbHRlJylcblxuY29uc3QgY21wID0gKGEsIG9wLCBiLCBsb29zZSkgPT4ge1xuICBzd2l0Y2ggKG9wKSB7XG4gICAgY2FzZSAnPT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSA9PT0gYlxuXG4gICAgY2FzZSAnIT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSAhPT0gYlxuXG4gICAgY2FzZSAnJzpcbiAgICBjYXNlICc9JzpcbiAgICBjYXNlICc9PSc6XG4gICAgICByZXR1cm4gZXEoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICchPSc6XG4gICAgICByZXR1cm4gbmVxKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPic6XG4gICAgICByZXR1cm4gZ3QoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc+PSc6XG4gICAgICByZXR1cm4gZ3RlKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPCc6XG4gICAgICByZXR1cm4gbHQoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc8PSc6XG4gICAgICByZXR1cm4gbHRlKGEsIGIsIGxvb3NlKVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgb3BlcmF0b3I6ICR7b3B9YClcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBjbXBcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuXG5jb25zdCBjb2VyY2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInKSB7XG4gICAgdmVyc2lvbiA9IFN0cmluZyh2ZXJzaW9uKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGxldCBtYXRjaCA9IG51bGxcbiAgaWYgKCFvcHRpb25zLnJ0bCkge1xuICAgIG1hdGNoID0gdmVyc2lvbi5tYXRjaChvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VGVUxMXSA6IHJlW3QuQ09FUkNFXSlcbiAgfSBlbHNlIHtcbiAgICAvLyBGaW5kIHRoZSByaWdodC1tb3N0IGNvZXJjaWJsZSBzdHJpbmcgdGhhdCBkb2VzIG5vdCBzaGFyZVxuICAgIC8vIGEgdGVybWludXMgd2l0aCBhIG1vcmUgbGVmdC13YXJkIGNvZXJjaWJsZSBzdHJpbmcuXG4gICAgLy8gRWcsICcxLjIuMy40JyB3YW50cyB0byBjb2VyY2UgJzIuMy40Jywgbm90ICczLjQnIG9yICc0J1xuICAgIC8vIFdpdGggaW5jbHVkZVByZXJlbGVhc2Ugb3B0aW9uIHNldCwgJzEuMi4zLjQtcmMnIHdhbnRzIHRvIGNvZXJjZSAnMi4zLjQtcmMnLCBub3QgJzIuMy40J1xuICAgIC8vXG4gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzdHJpbmcgY2hlY2tpbmcgd2l0aCBhIC9nIHJlZ2V4cFxuICAgIC8vIE1hbnVhbGx5IHNldCB0aGUgaW5kZXggc28gYXMgdG8gcGljayB1cCBvdmVybGFwcGluZyBtYXRjaGVzLlxuICAgIC8vIFN0b3Agd2hlbiB3ZSBnZXQgYSBtYXRjaCB0aGF0IGVuZHMgYXQgdGhlIHN0cmluZyBlbmQsIHNpbmNlIG5vXG4gICAgLy8gY29lcmNpYmxlIHN0cmluZyBjYW4gYmUgbW9yZSByaWdodC13YXJkIHdpdGhvdXQgdGhlIHNhbWUgdGVybWludXMuXG4gICAgY29uc3QgY29lcmNlUnRsUmVnZXggPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VSVExGVUxMXSA6IHJlW3QuQ09FUkNFUlRMXVxuICAgIGxldCBuZXh0XG4gICAgd2hpbGUgKChuZXh0ID0gY29lcmNlUnRsUmVnZXguZXhlYyh2ZXJzaW9uKSkgJiZcbiAgICAgICAgKCFtYXRjaCB8fCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPT0gdmVyc2lvbi5sZW5ndGgpXG4gICAgKSB7XG4gICAgICBpZiAoIW1hdGNoIHx8XG4gICAgICAgICAgICBuZXh0LmluZGV4ICsgbmV4dFswXS5sZW5ndGggIT09IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSB7XG4gICAgICAgIG1hdGNoID0gbmV4dFxuICAgICAgfVxuICAgICAgY29lcmNlUnRsUmVnZXgubGFzdEluZGV4ID0gbmV4dC5pbmRleCArIG5leHRbMV0ubGVuZ3RoICsgbmV4dFsyXS5sZW5ndGhcbiAgICB9XG4gICAgLy8gbGVhdmUgaXQgaW4gYSBjbGVhbiBzdGF0ZVxuICAgIGNvZXJjZVJ0bFJlZ2V4Lmxhc3RJbmRleCA9IC0xXG4gIH1cblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbWFqb3IgPSBtYXRjaFsyXVxuICBjb25zdCBtaW5vciA9IG1hdGNoWzNdIHx8ICcwJ1xuICBjb25zdCBwYXRjaCA9IG1hdGNoWzRdIHx8ICcwJ1xuICBjb25zdCBwcmVyZWxlYXNlID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJiBtYXRjaFs1XSA/IGAtJHttYXRjaFs1XX1gIDogJydcbiAgY29uc3QgYnVpbGQgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIG1hdGNoWzZdID8gYCske21hdGNoWzZdfWAgOiAnJ1xuXG4gIHJldHVybiBwYXJzZShgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0ke3ByZXJlbGVhc2V9JHtidWlsZH1gLCBvcHRpb25zKVxufVxubW9kdWxlLmV4cG9ydHMgPSBjb2VyY2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2NvbnN0YW50cycpXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IHRydW5jYXRlID0gKHZlcnNpb24sIHRydW5jYXRpb24sIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFjb25zdGFudHMuUkVMRUFTRV9UWVBFUy5pbmNsdWRlcyh0cnVuY2F0aW9uKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBjbG9uZWRWZXJzaW9uID0gY2xvbmVJbnB1dFZlcnNpb24odmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIGNsb25lZFZlcnNpb24gJiYgZG9UcnVuY2F0aW9uKGNsb25lZFZlcnNpb24sIHRydW5jYXRpb24pXG59XG5cbmNvbnN0IGNsb25lSW5wdXRWZXJzaW9uID0gKHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgdmVyc2lvblN0cmluZ1RvUGFyc2UgPSAoXG4gICAgdmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlciA/IHZlcnNpb24udmVyc2lvbiA6IHZlcnNpb25cbiAgKVxuXG4gIHJldHVybiBwYXJzZSh2ZXJzaW9uU3RyaW5nVG9QYXJzZSwgb3B0aW9ucylcbn1cblxuY29uc3QgZG9UcnVuY2F0aW9uID0gKHZlcnNpb24sIHRydW5jYXRpb24pID0+IHtcbiAgaWYgKGlzUHJlcmVsZWFzZSh0cnVuY2F0aW9uKSkge1xuICAgIHJldHVybiB2ZXJzaW9uLnZlcnNpb25cbiAgfVxuXG4gIHZlcnNpb24ucHJlcmVsZWFzZSA9IFtdXG5cbiAgc3dpdGNoICh0cnVuY2F0aW9uKSB7XG4gICAgY2FzZSAnbWFqb3InOlxuICAgICAgdmVyc2lvbi5taW5vciA9IDBcbiAgICAgIHZlcnNpb24ucGF0Y2ggPSAwXG4gICAgICBicmVha1xuICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgIHZlcnNpb24ucGF0Y2ggPSAwXG4gICAgICBicmVha1xuICB9XG5cbiAgcmV0dXJuIHZlcnNpb24uZm9ybWF0KClcbn1cblxuY29uc3QgaXNQcmVyZWxlYXNlID0gKHR5cGUpID0+IHtcbiAgcmV0dXJuIHR5cGUuc3RhcnRzV2l0aCgncHJlJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cnVuY2F0ZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBMUlVDYWNoZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLm1heCA9IDEwMDBcbiAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKVxuICB9XG5cbiAgZ2V0IChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubWFwLmdldChrZXkpXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgbWFwIGFuZCBhZGQgaXQgdG8gdGhlIGVuZFxuICAgICAgdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgICAgIHRoaXMubWFwLnNldChrZXksIHZhbHVlKVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICB9XG5cbiAgZGVsZXRlIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgfVxuXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLmRlbGV0ZShrZXkpXG5cbiAgICBpZiAoIWRlbGV0ZWQgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgY2FjaGUgaXMgZnVsbCwgZGVsZXRlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW1cbiAgICAgIGlmICh0aGlzLm1hcC5zaXplID49IHRoaXMubWF4KSB7XG4gICAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5tYXAua2V5cygpLm5leHQoKS52YWx1ZVxuICAgICAgICB0aGlzLmRlbGV0ZShmaXJzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXAuc2V0KGtleSwgdmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExSVUNhY2hlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNQQUNFX0NIQVJBQ1RFUlMgPSAvXFxzKy9nXG5cbi8vIGhvaXN0ZWQgY2xhc3MgZm9yIGN5Y2xpYyBkZXBlbmRlbmN5XG5jbGFzcyBSYW5nZSB7XG4gIGNvbnN0cnVjdG9yIChyYW5nZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UgJiZcbiAgICAgICAgcmFuZ2UuaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZS5yYXcsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJhbmdlIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgLy8ganVzdCBwdXQgaXQgaW4gdGhlIHNldCBhbmQgcmV0dXJuXG4gICAgICB0aGlzLnJhdyA9IHJhbmdlLnZhbHVlXG4gICAgICB0aGlzLnNldCA9IFtbcmFuZ2VdXVxuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSB1bmRlZmluZWRcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICAvLyBGaXJzdCByZWR1Y2UgYWxsIHdoaXRlc3BhY2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZWx5XG4gICAgLy8gb24gcG90ZW50aWFsbHkgc2xvdyByZWdleGVzIGxpa2UgXFxzKi4gVGhpcyBpcyB0aGVuIHN0b3JlZCBhbmQgdXNlZCBmb3JcbiAgICAvLyBmdXR1cmUgZXJyb3IgbWVzc2FnZXMgYXMgd2VsbC5cbiAgICB0aGlzLnJhdyA9IHJhbmdlLnRyaW0oKS5yZXBsYWNlKFNQQUNFX0NIQVJBQ1RFUlMsICcgJylcblxuICAgIC8vIEZpcnN0LCBzcGxpdCBvbiB8fFxuICAgIHRoaXMuc2V0ID0gdGhpcy5yYXdcbiAgICAgIC5zcGxpdCgnfHwnKVxuICAgICAgLy8gbWFwIHRoZSByYW5nZSB0byBhIDJkIGFycmF5IG9mIGNvbXBhcmF0b3JzXG4gICAgICAubWFwKHIgPT4gdGhpcy5wYXJzZVJhbmdlKHIudHJpbSgpKSlcbiAgICAgIC8vIHRocm93IG91dCBhbnkgY29tcGFyYXRvciBsaXN0cyB0aGF0IGFyZSBlbXB0eVxuICAgICAgLy8gdGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCBpdCB3YXMgbm90IGEgdmFsaWQgcmFuZ2UsIHdoaWNoIGlzIGFsbG93ZWRcbiAgICAgIC8vIGluIGxvb3NlIG1vZGUsIGJ1dCB3aWxsIHN0aWxsIHRocm93IGlmIHRoZSBXSE9MRSByYW5nZSBpcyBpbnZhbGlkLlxuICAgICAgLmZpbHRlcihjID0+IGMubGVuZ3RoKVxuXG4gICAgaWYgKCF0aGlzLnNldC5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgU2VtVmVyIFJhbmdlOiAke3RoaXMucmF3fWApXG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZSBhbnkgdGhhdCBhcmUgbm90IHRoZSBudWxsIHNldCwgdGhyb3cgb3V0IG51bGwgc2V0cy5cbiAgICBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgLy8ga2VlcCB0aGUgZmlyc3Qgb25lLCBpbiBjYXNlIHRoZXkncmUgYWxsIG51bGwgc2V0c1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLnNldFswXVxuICAgICAgdGhpcy5zZXQgPSB0aGlzLnNldC5maWx0ZXIoYyA9PiAhaXNOdWxsU2V0KGNbMF0pKVxuICAgICAgaWYgKHRoaXMuc2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNldCA9IFtmaXJzdF1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlIGFueSB0aGF0IGFyZSAqLCB0aGVuIHRoZSByYW5nZSBpcyBqdXN0ICpcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgaWYgKGMubGVuZ3RoID09PSAxICYmIGlzQW55KGNbMF0pKSB7XG4gICAgICAgICAgICB0aGlzLnNldCA9IFtjXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1hdHRlZCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0IHJhbmdlICgpIHtcbiAgICBpZiAodGhpcy5mb3JtYXR0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSAnJ1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnfHwnXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSB0aGlzLnNldFtpXVxuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNvbXBzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgaWYgKGsgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnICdcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JtYXR0ZWQgKz0gY29tcHNba10udG9TdHJpbmcoKS50cmltKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWRcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZVxuICB9XG5cbiAgcGFyc2VSYW5nZSAocmFuZ2UpIHtcbiAgICAvLyBzdHJpcCBidWlsZCBtZXRhZGF0YSBzbyBpdCBjYW4ndCBibGVlZCBpbnRvIHRoZSB2ZXJzaW9uXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKEJVSUxEU1RSSVBSRSwgJycpXG5cbiAgICAvLyBtZW1vaXplIHJhbmdlIHBhcnNpbmcgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIHRoaXMgaXMgYSB2ZXJ5IGhvdCBwYXRoLCBhbmQgZnVsbHkgZGV0ZXJtaW5pc3RpYy5cbiAgICBjb25zdCBtZW1vT3B0cyA9XG4gICAgICAodGhpcy5vcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFKSB8XG4gICAgICAodGhpcy5vcHRpb25zLmxvb3NlICYmIEZMQUdfTE9PU0UpXG4gICAgY29uc3QgbWVtb0tleSA9IG1lbW9PcHRzICsgJzonICsgcmFuZ2VcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQobWVtb0tleSlcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkXG4gICAgfVxuXG4gICAgY29uc3QgbG9vc2UgPSB0aGlzLm9wdGlvbnMubG9vc2VcbiAgICAvLyBgMS4yLjMgLSAxLjIuNGAgPT4gYD49MS4yLjMgPD0xLjIuNGBcbiAgICBjb25zdCBociA9IGxvb3NlID8gcmVbdC5IWVBIRU5SQU5HRUxPT1NFXSA6IHJlW3QuSFlQSEVOUkFOR0VdXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKGhyLCBoeXBoZW5SZXBsYWNlKHRoaXMub3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkpXG4gICAgZGVidWcoJ2h5cGhlbiByZXBsYWNlJywgcmFuZ2UpXG5cbiAgICAvLyBgPiAxLjIuMyA8IDEuMi41YCA9PiBgPjEuMi4zIDwxLjIuNWBcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DT01QQVJBVE9SVFJJTV0sIGNvbXBhcmF0b3JUcmltUmVwbGFjZSlcbiAgICBkZWJ1ZygnY29tcGFyYXRvciB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgfiAxLjIuM2AgPT4gYH4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5USUxERVRSSU1dLCB0aWxkZVRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCd0aWxkZSB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgXiAxLjIuM2AgPT4gYF4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DQVJFVFRSSU1dLCBjYXJldFRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCdjYXJldCB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmFuZ2UgaXMgY29tcGxldGVseSB0cmltbWVkIGFuZFxuICAgIC8vIHJlYWR5IHRvIGJlIHNwbGl0IGludG8gY29tcGFyYXRvcnMuXG5cbiAgICBsZXQgcmFuZ2VMaXN0ID0gcmFuZ2VcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKGNvbXAgPT4gcGFyc2VDb21wYXJhdG9yKGNvbXAsIHRoaXMub3B0aW9ucykpXG4gICAgICAuam9pbignICcpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLy8gPj0wLjAuMCBpcyBlcXVpdmFsZW50IHRvICpcbiAgICAgIC5tYXAoY29tcCA9PiByZXBsYWNlR1RFMChjb21wLCB0aGlzLm9wdGlvbnMpKVxuXG4gICAgaWYgKGxvb3NlKSB7XG4gICAgICAvLyBpbiBsb29zZSBtb2RlLCB0aHJvdyBvdXQgYW55IHRoYXQgYXJlIG5vdCB2YWxpZCBjb21wYXJhdG9yc1xuICAgICAgcmFuZ2VMaXN0ID0gcmFuZ2VMaXN0LmZpbHRlcihjb21wID0+IHtcbiAgICAgICAgZGVidWcoJ2xvb3NlIGludmFsaWQgZmlsdGVyJywgY29tcCwgdGhpcy5vcHRpb25zKVxuICAgICAgICByZXR1cm4gISFjb21wLm1hdGNoKHJlW3QuQ09NUEFSQVRPUkxPT1NFXSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGRlYnVnKCdyYW5nZSBsaXN0JywgcmFuZ2VMaXN0KVxuXG4gICAgLy8gaWYgYW55IGNvbXBhcmF0b3JzIGFyZSB0aGUgbnVsbCBzZXQsIHRoZW4gcmVwbGFjZSB3aXRoIEpVU1QgbnVsbCBzZXRcbiAgICAvLyBpZiBtb3JlIHRoYW4gb25lIGNvbXBhcmF0b3IsIHJlbW92ZSBhbnkgKiBjb21wYXJhdG9yc1xuICAgIC8vIGFsc28sIGRvbid0IGluY2x1ZGUgdGhlIHNhbWUgY29tcGFyYXRvciBtb3JlIHRoYW4gb25jZVxuICAgIGNvbnN0IHJhbmdlTWFwID0gbmV3IE1hcCgpXG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZUxpc3QubWFwKGNvbXAgPT4gbmV3IENvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKSlcbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcGFyYXRvcnMpIHtcbiAgICAgIGlmIChpc051bGxTZXQoY29tcCkpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wXVxuICAgICAgfVxuICAgICAgcmFuZ2VNYXAuc2V0KGNvbXAudmFsdWUsIGNvbXApXG4gICAgfVxuICAgIGlmIChyYW5nZU1hcC5zaXplID4gMSAmJiByYW5nZU1hcC5oYXMoJycpKSB7XG4gICAgICByYW5nZU1hcC5kZWxldGUoJycpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLnJhbmdlTWFwLnZhbHVlcygpXVxuICAgIGNhY2hlLnNldChtZW1vS2V5LCByZXN1bHQpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaW50ZXJzZWN0cyAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIShyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBSYW5nZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0LnNvbWUoKHRoaXNDb21wYXJhdG9ycykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNTYXRpc2ZpYWJsZSh0aGlzQ29tcGFyYXRvcnMsIG9wdGlvbnMpICYmXG4gICAgICAgIHJhbmdlLnNldC5zb21lKChyYW5nZUNvbXBhcmF0b3JzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzU2F0aXNmaWFibGUocmFuZ2VDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgICAgIHRoaXNDb21wYXJhdG9ycy5ldmVyeSgodGhpc0NvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlQ29tcGFyYXRvcnMuZXZlcnkoKHJhbmdlQ29tcGFyYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzQ29tcGFyYXRvci5pbnRlcnNlY3RzKHJhbmdlQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG4gIH1cblxuICAvLyBpZiBBTlkgb2YgdGhlIHNldHMgbWF0Y2ggQUxMIG9mIGl0cyBjb21wYXJhdG9ycywgdGhlbiBwYXNzXG4gIHRlc3QgKHZlcnNpb24pIHtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIHRoaXMub3B0aW9ucylcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0ZXN0U2V0KHRoaXMuc2V0W2ldLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VcblxuY29uc3QgTFJVID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvbHJ1Y2FjaGUnKVxuY29uc3QgY2FjaGUgPSBuZXcgTFJVKClcblxuY29uc3QgcGFyc2VPcHRpb25zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcGFyc2Utb3B0aW9ucycpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jb21wYXJhdG9yJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3Qge1xuICBzYWZlUmU6IHJlLFxuICBzcmMsXG4gIHQsXG4gIGNvbXBhcmF0b3JUcmltUmVwbGFjZSxcbiAgdGlsZGVUcmltUmVwbGFjZSxcbiAgY2FyZXRUcmltUmVwbGFjZSxcbn0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCB7IEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFLCBGTEFHX0xPT1NFIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuXG4vLyB1bmJvdW5kZWQgZ2xvYmFsIGJ1aWxkLW1ldGFkYXRhIHN0cmlwcGVyIHVzZWQgYnkgcGFyc2VSYW5nZVxuY29uc3QgQlVJTERTVFJJUFJFID0gbmV3IFJlZ0V4cChzcmNbdC5CVUlMRF0sICdnJylcblxuY29uc3QgaXNOdWxsU2V0ID0gYyA9PiBjLnZhbHVlID09PSAnPDAuMC4wLTAnXG5jb25zdCBpc0FueSA9IGMgPT4gYy52YWx1ZSA9PT0gJydcblxuLy8gdGFrZSBhIHNldCBvZiBjb21wYXJhdG9ycyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmVcbi8vIGV4aXN0cyBhIHZlcnNpb24gd2hpY2ggY2FuIHNhdGlzZnkgaXRcbmNvbnN0IGlzU2F0aXNmaWFibGUgPSAoY29tcGFyYXRvcnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlc3VsdCA9IHRydWVcbiAgY29uc3QgcmVtYWluaW5nQ29tcGFyYXRvcnMgPSBjb21wYXJhdG9ycy5zbGljZSgpXG4gIGxldCB0ZXN0Q29tcGFyYXRvciA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLnBvcCgpXG5cbiAgd2hpbGUgKHJlc3VsdCAmJiByZW1haW5pbmdDb21wYXJhdG9ycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSByZW1haW5pbmdDb21wYXJhdG9ycy5ldmVyeSgob3RoZXJDb21wYXJhdG9yKSA9PiB7XG4gICAgICByZXR1cm4gdGVzdENvbXBhcmF0b3IuaW50ZXJzZWN0cyhvdGhlckNvbXBhcmF0b3IsIG9wdGlvbnMpXG4gICAgfSlcblxuICAgIHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gY29tcHJpc2VkIG9mIHhyYW5nZXMsIHRpbGRlcywgc3RhcnMsIGFuZCBndGx0J3MgYXQgdGhpcyBwb2ludC5cbi8vIGFscmVhZHkgcmVwbGFjZWQgdGhlIGh5cGhlbiByYW5nZXNcbi8vIHR1cm4gaW50byBhIHNldCBvZiBKVVNUIGNvbXBhcmF0b3JzLlxuY29uc3QgcGFyc2VDb21wYXJhdG9yID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29tcCA9IGNvbXAucmVwbGFjZShyZVt0LkJVSUxEXSwgJycpXG4gIGRlYnVnKCdjb21wJywgY29tcCwgb3B0aW9ucylcbiAgY29tcCA9IHJlcGxhY2VDYXJldHMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ2NhcmV0JywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VUaWxkZXMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ3RpbGRlcycsIGNvbXApXG4gIGNvbXAgPSByZXBsYWNlWFJhbmdlcyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygneHJhbmdlJywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VTdGFycyhjb21wLCBvcHRpb25zKVxuICBkZWJ1Zygnc3RhcnMnLCBjb21wKVxuICByZXR1cm4gY29tcFxufVxuXG5jb25zdCBpc1ggPSBpZCA9PiAhaWQgfHwgaWQudG9Mb3dlckNhc2UoKSA9PT0gJ3gnIHx8IGlkID09PSAnKidcblxuY29uc3QgaW52YWxpZFhSYW5nZU9yZGVyID0gKE0sIG0sIHApID0+IChcbiAgKGlzWChNKSAmJiAhaXNYKG0pKSB8fFxuICAoaXNYKG0pICYmIHAgJiYgIWlzWChwKSlcbilcblxuLy8gfiwgfj4gLS0+ICogKGFueSwga2luZGEgc2lsbHkpXG4vLyB+MiwgfjIueCwgfjIueC54LCB+PjIsIH4+Mi54IH4+Mi54LnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIH4yLjAsIH4yLjAueCwgfj4yLjAsIH4+Mi4wLnggLS0+ID49Mi4wLjAgPDIuMS4wLTBcbi8vIH4xLjIsIH4xLjIueCwgfj4xLjIsIH4+MS4yLnggLS0+ID49MS4yLjAgPDEuMy4wLTBcbi8vIH4xLjIuMywgfj4xLjIuMyAtLT4gPj0xLjIuMyA8MS4zLjAtMFxuLy8gfjEuMi4wLCB+PjEuMi4wIC0tPiA+PTEuMi4wIDwxLjMuMC0wXG4vLyB+MC4wLjEgLS0+ID49MC4wLjEgPDAuMS4wLTBcbmNvbnN0IHJlcGxhY2VUaWxkZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VUaWxkZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VUaWxkZSA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5USUxERUxPT1NFXSA6IHJlW3QuVElMREVdXG4gIC8vIGlmIHdlJ3JlIGluY2x1ZGluZyBwcmVyZWxlYXNlcyBpbiB0aGUgbWF0Y2gsIHRoZW4gdGhlIGxvd2VyIGJvdW5kIGlzXG4gIC8vIC0wLCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByZXJlbGVhc2UgdmFsdWUsIGp1c3QgbGlrZSB4LXJhbmdlcyBhbmQgY2FyZXRzLlxuICAvLyB0aGlzIGtlZXBzIGB+MS4yYCBlcXVpdmFsZW50IHRvIHRoZSBgMS4yLnhgIHgtcmFuZ2UgaXQncyBkb2N1bWVudGVkIGFzLlxuICBjb25zdCB6ID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCd0aWxkZScsIGNvbXAsIF8sIE0sIG0sIHAsIHByKVxuICAgIGxldCByZXRcblxuICAgIGlmIChpc1goTSkpIHtcbiAgICAgIHJldCA9ICcnXG4gICAgfSBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICAvLyB+MS4yID09ID49MS4yLjAgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHt6fSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH0gZWxzZSBpZiAocHIpIHtcbiAgICAgIGRlYnVnKCdyZXBsYWNlVGlsZGUgcHInLCBwcilcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gfjEuMi4zID09ID49MS4yLjMgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3BcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9XG5cbiAgICBkZWJ1ZygndGlsZGUgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuLy8gXiAtLT4gKiAoYW55LCBraW5kYSBzaWxseSlcbi8vIF4yLCBeMi54LCBeMi54LnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIF4yLjAsIF4yLjAueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gXjEuMiwgXjEuMi54IC0tPiA+PTEuMi4wIDwyLjAuMC0wXG4vLyBeMS4yLjMgLS0+ID49MS4yLjMgPDIuMC4wLTBcbi8vIF4xLjIuMCAtLT4gPj0xLjIuMCA8Mi4wLjAtMFxuLy8gXjAuMC4xIC0tPiA+PTAuMC4xIDwwLjAuMi0wXG4vLyBeMC4xLjAgLS0+ID49MC4xLjAgPDAuMi4wLTBcbmNvbnN0IHJlcGxhY2VDYXJldHMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VDYXJldChjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VDYXJldCA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGRlYnVnKCdjYXJldCcsIGNvbXAsIG9wdGlvbnMpXG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5DQVJFVExPT1NFXSA6IHJlW3QuQ0FSRVRdXG4gIGNvbnN0IHogPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gJy0wJyA6ICcnXG4gIHJldHVybiBjb21wLnJlcGxhY2UociwgKF8sIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ2NhcmV0JywgY29tcCwgXywgTSwgbSwgcCwgcHIpXG4gICAgbGV0IHJldFxuXG4gICAgaWYgKGlzWChNKSkge1xuICAgICAgcmV0ID0gJydcbiAgICB9IGVsc2UgaWYgKGlzWChtKSkge1xuICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3p9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgfSBlbHNlIGlmIChpc1gocCkpIHtcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3p9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByKSB7XG4gICAgICBkZWJ1ZygncmVwbGFjZUNhcmV0IHByJywgcHIpXG4gICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgIGlmIChtID09PSAnMCcpIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICAgICAgfSA8JHtNfS4ke219LiR7K3AgKyAxfS0wYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgfSA8JHsrTSArIDF9LjAuMC0wYFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Zygnbm8gcHInKVxuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICBpZiAobSA9PT0gJzAnKSB7XG4gICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgICAgIH0gPCR7TX0uJHttfS4keytwICsgMX0tMGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgIH0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWJ1ZygnY2FyZXQgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuY29uc3QgcmVwbGFjZVhSYW5nZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZVhSYW5nZXMnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZVhSYW5nZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VYUmFuZ2UgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBjb21wID0gY29tcC50cmltKClcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LlhSQU5HRUxPT1NFXSA6IHJlW3QuWFJBTkdFXVxuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChyZXQsIGd0bHQsIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ3hSYW5nZScsIGNvbXAsIHJldCwgZ3RsdCwgTSwgbSwgcCwgcHIpXG4gICAgaWYgKGludmFsaWRYUmFuZ2VPcmRlcihNLCBtLCBwKSkge1xuICAgICAgcmV0dXJuIGNvbXBcbiAgICB9XG5cbiAgICBjb25zdCB4TSA9IGlzWChNKVxuICAgIGNvbnN0IHhtID0geE0gfHwgaXNYKG0pXG4gICAgY29uc3QgeHAgPSB4bSB8fCBpc1gocClcbiAgICBjb25zdCBhbnlYID0geHBcblxuICAgIGlmIChndGx0ID09PSAnPScgJiYgYW55WCkge1xuICAgICAgZ3RsdCA9ICcnXG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgaW5jbHVkaW5nIHByZXJlbGVhc2VzIGluIHRoZSBtYXRjaCwgdGhlbiB3ZSBuZWVkXG4gICAgLy8gdG8gZml4IHRoaXMgdG8gLTAsIHRoZSBsb3dlc3QgcG9zc2libGUgcHJlcmVsZWFzZSB2YWx1ZVxuICAgIHByID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuXG4gICAgaWYgKHhNKSB7XG4gICAgICBpZiAoZ3RsdCA9PT0gJz4nIHx8IGd0bHQgPT09ICc8Jykge1xuICAgICAgICAvLyBub3RoaW5nIGlzIGFsbG93ZWRcbiAgICAgICAgcmV0ID0gJzwwLjAuMC0wJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm90aGluZyBpcyBmb3JiaWRkZW5cbiAgICAgICAgcmV0ID0gJyonXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChndGx0ICYmIGFueVgpIHtcbiAgICAgIC8vIHdlIGtub3cgcGF0Y2ggaXMgYW4geCwgYmVjYXVzZSB3ZSBoYXZlIGFueSB4IGF0IGFsbC5cbiAgICAgIC8vIHJlcGxhY2UgWCB3aXRoIDBcbiAgICAgIGlmICh4bSkge1xuICAgICAgICBtID0gMFxuICAgICAgfVxuICAgICAgcCA9IDBcblxuICAgICAgaWYgKGd0bHQgPT09ICc+Jykge1xuICAgICAgICAvLyA+MSA9PiA+PTIuMC4wXG4gICAgICAgIC8vID4xLjIgPT4gPj0xLjMuMFxuICAgICAgICBndGx0ID0gJz49J1xuICAgICAgICBpZiAoeG0pIHtcbiAgICAgICAgICBNID0gK00gKyAxXG4gICAgICAgICAgbSA9IDBcbiAgICAgICAgICBwID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG0gPSArbSArIDFcbiAgICAgICAgICBwID0gMFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGd0bHQgPT09ICc8PScpIHtcbiAgICAgICAgLy8gPD0wLjcueCBpcyBhY3R1YWxseSA8MC44LjAsIHNpbmNlIGFueSAwLjcueCBzaG91bGRcbiAgICAgICAgLy8gcGFzcy4gIFNpbWlsYXJseSwgPD03LnggaXMgYWN0dWFsbHkgPDguMC4wLCBldGMuXG4gICAgICAgIGd0bHQgPSAnPCdcbiAgICAgICAgaWYgKHhtKSB7XG4gICAgICAgICAgTSA9ICtNICsgMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG0gPSArbSArIDFcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ3RsdCA9PT0gJzwnKSB7XG4gICAgICAgIHByID0gJy0wJ1xuICAgICAgfVxuXG4gICAgICByZXQgPSBgJHtndGx0ICsgTX0uJHttfS4ke3B9JHtwcn1gXG4gICAgfSBlbHNlIGlmICh4bSkge1xuICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3ByfSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoeHApIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHtwclxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH1cblxuICAgIGRlYnVnKCd4UmFuZ2UgcmV0dXJuJywgcmV0KVxuXG4gICAgcmV0dXJuIHJldFxuICB9KVxufVxuXG4vLyBCZWNhdXNlICogaXMgQU5ELWVkIHdpdGggZXZlcnl0aGluZyBlbHNlIGluIHRoZSBjb21wYXJhdG9yLFxuLy8gYW5kICcnIG1lYW5zIFwiYW55IHZlcnNpb25cIiwganVzdCByZW1vdmUgdGhlICpzIGVudGlyZWx5LlxuY29uc3QgcmVwbGFjZVN0YXJzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ3JlcGxhY2VTdGFycycsIGNvbXAsIG9wdGlvbnMpXG4gIC8vIExvb3NlbmVzcyBpcyBpZ25vcmVkIGhlcmUuICBzdGFyIGlzIGFsd2F5cyBhcyBsb29zZSBhcyBpdCBnZXRzIVxuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZShyZVt0LlNUQVJdLCAnJylcbn1cblxuY29uc3QgcmVwbGFjZUdURTAgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZUdURTAnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZShyZVtvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gdC5HVEUwUFJFIDogdC5HVEUwXSwgJycpXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIHN0cmluZy5yZXBsYWNlKHJlW3QuSFlQSEVOUkFOR0VdKVxuLy8gTSwgbSwgcGF0Y2gsIHByZXJlbGVhc2UsIGJ1aWxkXG4vLyAxLjIgLSAzLjQuNSA9PiA+PTEuMi4wIDw9My40LjVcbi8vIDEuMi4zIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wLTAgQW55IDMuNC54IHdpbGwgZG9cbi8vIDEuMiAtIDMuNCA9PiA+PTEuMi4wIDwzLjUuMC0wXG4vLyBUT0RPIGJ1aWxkP1xuY29uc3QgaHlwaGVuUmVwbGFjZSA9IGluY1ByID0+ICgkMCxcbiAgZnJvbSwgZk0sIGZtLCBmcCwgZnByLCBmYixcbiAgdG8sIHRNLCB0bSwgdHAsIHRwcikgPT4ge1xuICBpZiAoaXNYKGZNKSkge1xuICAgIGZyb20gPSAnJ1xuICB9IGVsc2UgaWYgKGlzWChmbSkpIHtcbiAgICBmcm9tID0gYD49JHtmTX0uMC4wJHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH0gZWxzZSBpZiAoaXNYKGZwKSkge1xuICAgIGZyb20gPSBgPj0ke2ZNfS4ke2ZtfS4wJHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH0gZWxzZSBpZiAoZnByKSB7XG4gICAgZnJvbSA9IGA+PSR7ZnJvbX1gXG4gIH0gZWxzZSB7XG4gICAgZnJvbSA9IGA+PSR7ZnJvbX0ke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfVxuXG4gIGlmIChpc1godE0pKSB7XG4gICAgdG8gPSAnJ1xuICB9IGVsc2UgaWYgKGlzWCh0bSkpIHtcbiAgICB0byA9IGA8JHsrdE0gKyAxfS4wLjAtMGBcbiAgfSBlbHNlIGlmIChpc1godHApKSB7XG4gICAgdG8gPSBgPCR7dE19LiR7K3RtICsgMX0uMC0wYFxuICB9IGVsc2UgaWYgKHRwcikge1xuICAgIHRvID0gYDw9JHt0TX0uJHt0bX0uJHt0cH0tJHt0cHJ9YFxuICB9IGVsc2UgaWYgKGluY1ByKSB7XG4gICAgdG8gPSBgPCR7dE19LiR7dG19LiR7K3RwICsgMX0tMGBcbiAgfSBlbHNlIHtcbiAgICB0byA9IGA8PSR7dG99YFxuICB9XG5cbiAgcmV0dXJuIGAke2Zyb219ICR7dG99YC50cmltKClcbn1cblxuY29uc3QgdGVzdFNldCA9IChzZXQsIHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXNldFtpXS50ZXN0KHZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBpZiAodmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgIC8vIEZpbmQgdGhlIHNldCBvZiB2ZXJzaW9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIGhhdmUgcHJlcmVsZWFzZXNcbiAgICAvLyBGb3IgZXhhbXBsZSwgXjEuMi4zLXByLjEgZGVzdWdhcnMgdG8gPj0xLjIuMy1wci4xIDwyLjAuMFxuICAgIC8vIFRoYXQgc2hvdWxkIGFsbG93IGAxLjIuMy1wci4yYCB0byBwYXNzLlxuICAgIC8vIEhvd2V2ZXIsIGAxLjIuNC1hbHBoYS5ub3RyZWFkeWAgc2hvdWxkIE5PVCBiZSBhbGxvd2VkLFxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0J3Mgd2l0aGluIHRoZSByYW5nZSBzZXQgYnkgdGhlIGNvbXBhcmF0b3JzLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWJ1ZyhzZXRbaV0uc2VtdmVyKVxuICAgICAgaWYgKHNldFtpXS5zZW12ZXIgPT09IENvbXBhcmF0b3IuQU5ZKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXRbaV0uc2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBhbGxvd2VkID0gc2V0W2ldLnNlbXZlclxuICAgICAgICBpZiAoYWxsb3dlZC5tYWpvciA9PT0gdmVyc2lvbi5tYWpvciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5taW5vciA9PT0gdmVyc2lvbi5taW5vciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5wYXRjaCA9PT0gdmVyc2lvbi5wYXRjaCkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWZXJzaW9uIGhhcyBhIC1wcmUsIGJ1dCBpdCdzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2UgbGlrZS5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEFOWSA9IFN5bWJvbCgnU2VtVmVyIEFOWScpXG4vLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgQ29tcGFyYXRvciB7XG4gIHN0YXRpYyBnZXQgQU5ZICgpIHtcbiAgICByZXR1cm4gQU5ZXG4gIH1cblxuICBjb25zdHJ1Y3RvciAoY29tcCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChjb21wIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgaWYgKGNvbXAubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSkge1xuICAgICAgICByZXR1cm4gY29tcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcCA9IGNvbXAudmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wID0gY29tcC50cmltKCkuc3BsaXQoL1xccysvKS5qb2luKCcgJylcbiAgICBkZWJ1ZygnY29tcGFyYXRvcicsIGNvbXAsIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLnBhcnNlKGNvbXApXG5cbiAgICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wZXJhdG9yICsgdGhpcy5zZW12ZXIudmVyc2lvblxuICAgIH1cblxuICAgIGRlYnVnKCdjb21wJywgdGhpcylcbiAgfVxuXG4gIHBhcnNlIChjb21wKSB7XG4gICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuQ09NUEFSQVRPUkxPT1NFXSA6IHJlW3QuQ09NUEFSQVRPUl1cbiAgICBjb25zdCBtID0gY29tcC5tYXRjaChyKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGNvbXBhcmF0b3I6ICR7Y29tcH1gKVxuICAgIH1cblxuICAgIHRoaXMub3BlcmF0b3IgPSBtWzFdICE9PSB1bmRlZmluZWQgPyBtWzFdIDogJydcbiAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJz0nKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiBpdCBsaXRlcmFsbHkgaXMganVzdCAnPicgb3IgJycgdGhlbiBhbGxvdyBhbnl0aGluZy5cbiAgICBpZiAoIW1bMl0pIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gQU5ZXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gbmV3IFNlbVZlcihtWzJdLCB0aGlzLm9wdGlvbnMubG9vc2UpXG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cblxuICB0ZXN0ICh2ZXJzaW9uKSB7XG4gICAgZGVidWcoJ0NvbXBhcmF0b3IudGVzdCcsIHZlcnNpb24sIHRoaXMub3B0aW9ucy5sb29zZSlcblxuICAgIGlmICh0aGlzLnNlbXZlciA9PT0gQU5ZIHx8IHZlcnNpb24gPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY21wKHZlcnNpb24sIHRoaXMub3BlcmF0b3IsIHRoaXMuc2VtdmVyLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbnRlcnNlY3RzIChjb21wLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGNvbXAudmFsdWUsIG9wdGlvbnMpLnRlc3QodGhpcy52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKGNvbXAub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICBpZiAoY29tcC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy52YWx1ZSwgb3B0aW9ucykudGVzdChjb21wLnNlbXZlcilcbiAgICB9XG5cbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyBTcGVjaWFsIGNhc2VzIHdoZXJlIG5vdGhpbmcgY2FuIHBvc3NpYmx5IGJlIGxvd2VyXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICAgICh0aGlzLnZhbHVlID09PSAnPDAuMC4wLTAnIHx8IGNvbXAudmFsdWUgPT09ICc8MC4wLjAtMCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmXG4gICAgICAodGhpcy52YWx1ZS5zdGFydHNXaXRoKCc8MC4wLjAnKSB8fCBjb21wLnZhbHVlLnN0YXJ0c1dpdGgoJzwwLjAuMCcpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gU2FtZSBkaXJlY3Rpb24gaW5jcmVhc2luZyAoPiBvciA+PSlcbiAgICBpZiAodGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykgJiYgY29tcC5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFNhbWUgZGlyZWN0aW9uIGRlY3JlYXNpbmcgKDwgb3IgPD0pXG4gICAgaWYgKHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBzYW1lIFNlbVZlciBhbmQgYm90aCBzaWRlcyBhcmUgaW5jbHVzaXZlICg8PSBvciA+PSlcbiAgICBpZiAoXG4gICAgICAodGhpcy5zZW12ZXIudmVyc2lvbiA9PT0gY29tcC5zZW12ZXIudmVyc2lvbikgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IuaW5jbHVkZXMoJz0nKSAmJiBjb21wLm9wZXJhdG9yLmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIG9wcG9zaXRlIGRpcmVjdGlvbnMgbGVzcyB0aGFuXG4gICAgaWYgKGNtcCh0aGlzLnNlbXZlciwgJzwnLCBjb21wLnNlbXZlciwgb3B0aW9ucykgJiZcbiAgICAgIHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zIGdyZWF0ZXIgdGhhblxuICAgIGlmIChjbXAodGhpcy5zZW12ZXIsICc+JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJz4nKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb21wYXJhdG9yXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCBjbXAgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL3JhbmdlJylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IHNhdGlzZmllcyA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiByYW5nZS50ZXN0KHZlcnNpb24pXG59XG5tb2R1bGUuZXhwb3J0cyA9IHNhdGlzZmllc1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuXG4vLyBNb3N0bHkganVzdCBmb3IgdGVzdGluZyBhbmQgbGVnYWN5IEFQSSByZWFzb25zXG5jb25zdCB0b0NvbXBhcmF0b3JzID0gKHJhbmdlLCBvcHRpb25zKSA9PlxuICBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnNldFxuICAgIC5tYXAoY29tcCA9PiBjb21wLm1hcChjID0+IGMudmFsdWUpLmpvaW4oJyAnKS50cmltKCkuc3BsaXQoJyAnKSlcblxubW9kdWxlLmV4cG9ydHMgPSB0b0NvbXBhcmF0b3JzXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbmNvbnN0IG1heFNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtYXggPSBudWxsXG4gIGxldCBtYXhTViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1heCB8fCBtYXhTVi5jb21wYXJlKHYpID09PSAtMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1heCwgdiwgdHJ1ZSlcbiAgICAgICAgbWF4ID0gdlxuICAgICAgICBtYXhTViA9IG5ldyBTZW1WZXIobWF4LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1heFxufVxubW9kdWxlLmV4cG9ydHMgPSBtYXhTYXRpc2Z5aW5nXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBtaW5TYXRpc2Z5aW5nID0gKHZlcnNpb25zLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICBsZXQgbWluID0gbnVsbFxuICBsZXQgbWluU1YgPSBudWxsXG4gIGxldCByYW5nZU9iaiA9IG51bGxcbiAgdHJ5IHtcbiAgICByYW5nZU9iaiA9IG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucylcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHZlcnNpb25zLmZvckVhY2goKHYpID0+IHtcbiAgICBpZiAocmFuZ2VPYmoudGVzdCh2KSkge1xuICAgICAgLy8gc2F0aXNmaWVzKHYsIHJhbmdlLCBvcHRpb25zKVxuICAgICAgaWYgKCFtaW4gfHwgbWluU1YuY29tcGFyZSh2KSA9PT0gMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1pbiwgdiwgdHJ1ZSlcbiAgICAgICAgbWluID0gdlxuICAgICAgICBtaW5TViA9IG5ldyBTZW1WZXIobWluLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1pblxufVxubW9kdWxlLmV4cG9ydHMgPSBtaW5TYXRpc2Z5aW5nXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndCcpXG5cbmNvbnN0IG1pblZlcnNpb24gPSAocmFuZ2UsIGxvb3NlKSA9PiB7XG4gIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBsb29zZSlcblxuICBsZXQgbWludmVyID0gbmV3IFNlbVZlcignMC4wLjAnKVxuICBpZiAocmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgbWludmVyID0gbmV3IFNlbVZlcignMC4wLjAtMCcpXG4gIGlmIChyYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICBtaW52ZXIgPSBudWxsXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2V0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZS5zZXRbaV1cblxuICAgIGxldCBzZXRNaW4gPSBudWxsXG4gICAgY29tcGFyYXRvcnMuZm9yRWFjaCgoY29tcGFyYXRvcikgPT4ge1xuICAgICAgLy8gQ2xvbmUgdG8gYXZvaWQgbWFuaXB1bGF0aW5nIHRoZSBjb21wYXJhdG9yJ3Mgc2VtdmVyIG9iamVjdC5cbiAgICAgIGNvbnN0IGNvbXB2ZXIgPSBuZXcgU2VtVmVyKGNvbXBhcmF0b3Iuc2VtdmVyLnZlcnNpb24pXG4gICAgICBzd2l0Y2ggKGNvbXBhcmF0b3Iub3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSAnPic6XG4gICAgICAgICAgaWYgKGNvbXB2ZXIucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbXB2ZXIucGF0Y2grK1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wdmVyLnByZXJlbGVhc2UucHVzaCgwKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb21wdmVyLnJhdyA9IGNvbXB2ZXIuZm9ybWF0KClcbiAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgICAgICBjYXNlICcnOlxuICAgICAgICBjYXNlICc+PSc6XG4gICAgICAgICAgaWYgKCFzZXRNaW4gfHwgZ3QoY29tcHZlciwgc2V0TWluKSkge1xuICAgICAgICAgICAgc2V0TWluID0gY29tcHZlclxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FzZSAnPD0nOlxuICAgICAgICAgIC8qIElnbm9yZSBtYXhpbXVtIHZlcnNpb25zICovXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb3BlcmF0aW9uOiAke2NvbXBhcmF0b3Iub3BlcmF0b3J9YClcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmIChzZXRNaW4gJiYgKCFtaW52ZXIgfHwgZ3QobWludmVyLCBzZXRNaW4pKSkge1xuICAgICAgbWludmVyID0gc2V0TWluXG4gICAgfVxuICB9XG5cbiAgaWYgKG1pbnZlciAmJiByYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBtaW5WZXJzaW9uXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCB2YWxpZFJhbmdlID0gKHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gUmV0dXJuICcqJyBpbnN0ZWFkIG9mICcnIHNvIHRoYXQgdHJ1dGhpbmVzcyB3b3Jrcy5cbiAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgaXQncyBpbnZhbGlkIGFueXdheVxuICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnJhbmdlIHx8ICcqJ1xuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRSYW5nZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9jb21wYXJhdG9yJylcbmNvbnN0IHsgQU5ZIH0gPSBDb21wYXJhdG9yXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3NhdGlzZmllcycpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndCcpXG5jb25zdCBsdCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBsdGUgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGd0ZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndGUnKVxuXG5jb25zdCBvdXRzaWRlID0gKHZlcnNpb24sIHJhbmdlLCBoaWxvLCBvcHRpb25zKSA9PiB7XG4gIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIG9wdGlvbnMpXG4gIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuXG4gIGxldCBndGZuLCBsdGVmbiwgbHRmbiwgY29tcCwgZWNvbXBcbiAgc3dpdGNoIChoaWxvKSB7XG4gICAgY2FzZSAnPic6XG4gICAgICBndGZuID0gZ3RcbiAgICAgIGx0ZWZuID0gbHRlXG4gICAgICBsdGZuID0gbHRcbiAgICAgIGNvbXAgPSAnPidcbiAgICAgIGVjb21wID0gJz49J1xuICAgICAgYnJlYWtcbiAgICBjYXNlICc8JzpcbiAgICAgIGd0Zm4gPSBsdFxuICAgICAgbHRlZm4gPSBndGVcbiAgICAgIGx0Zm4gPSBndFxuICAgICAgY29tcCA9ICc8J1xuICAgICAgZWNvbXAgPSAnPD0nXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHByb3ZpZGUgYSBoaWxvIHZhbCBvZiBcIjxcIiBvciBcIj5cIicpXG4gIH1cblxuICAvLyBJZiBpdCBzYXRpc2ZpZXMgdGhlIHJhbmdlIGl0IGlzIG5vdCBvdXRzaWRlXG4gIGlmIChzYXRpc2ZpZXModmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBGcm9tIG5vdyBvbiwgdmFyaWFibGUgdGVybXMgYXJlIGFzIGlmIHdlJ3JlIGluIFwiZ3RyXCIgbW9kZS5cbiAgLy8gYnV0IG5vdGUgdGhhdCBldmVyeXRoaW5nIGlzIGZsaXBwZWQgZm9yIHRoZSBcImx0clwiIGZ1bmN0aW9uLlxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2V0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZS5zZXRbaV1cblxuICAgIGxldCBoaWdoID0gbnVsbFxuICAgIGxldCBsb3cgPSBudWxsXG5cbiAgICBjb21wYXJhdG9ycy5mb3JFYWNoKChjb21wYXJhdG9yKSA9PiB7XG4gICAgICBpZiAoY29tcGFyYXRvci5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgICBjb21wYXJhdG9yID0gbmV3IENvbXBhcmF0b3IoJz49MC4wLjAnKVxuICAgICAgfVxuICAgICAgaGlnaCA9IGhpZ2ggfHwgY29tcGFyYXRvclxuICAgICAgbG93ID0gbG93IHx8IGNvbXBhcmF0b3JcbiAgICAgIGlmIChndGZuKGNvbXBhcmF0b3Iuc2VtdmVyLCBoaWdoLnNlbXZlciwgb3B0aW9ucykpIHtcbiAgICAgICAgaGlnaCA9IGNvbXBhcmF0b3JcbiAgICAgIH0gZWxzZSBpZiAobHRmbihjb21wYXJhdG9yLnNlbXZlciwgbG93LnNlbXZlciwgb3B0aW9ucykpIHtcbiAgICAgICAgbG93ID0gY29tcGFyYXRvclxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBJZiB0aGUgZWRnZSB2ZXJzaW9uIGNvbXBhcmF0b3IgaGFzIGEgb3BlcmF0b3IgdGhlbiBvdXIgdmVyc2lvblxuICAgIC8vIGlzbid0IG91dHNpZGUgaXRcbiAgICBpZiAoaGlnaC5vcGVyYXRvciA9PT0gY29tcCB8fCBoaWdoLm9wZXJhdG9yID09PSBlY29tcCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGxvd2VzdCB2ZXJzaW9uIGNvbXBhcmF0b3IgaGFzIGFuIG9wZXJhdG9yIGFuZCBvdXIgdmVyc2lvblxuICAgIC8vIGlzIGxlc3MgdGhhbiBpdCB0aGVuIGl0IGlzbid0IGhpZ2hlciB0aGFuIHRoZSByYW5nZVxuICAgIGlmICgoIWxvdy5vcGVyYXRvciB8fCBsb3cub3BlcmF0b3IgPT09IGNvbXApICYmXG4gICAgICAgIGx0ZWZuKHZlcnNpb24sIGxvdy5zZW12ZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYgKGxvdy5vcGVyYXRvciA9PT0gZWNvbXAgJiYgbHRmbih2ZXJzaW9uLCBsb3cuc2VtdmVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0c2lkZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2UuXG5jb25zdCBvdXRzaWRlID0gcmVxdWlyZSgnLi9vdXRzaWRlJylcbmNvbnN0IGd0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJz4nLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBndHJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBsZXNzIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbmNvbnN0IGx0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJzwnLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBsdHJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IGludGVyc2VjdHMgPSAocjEsIHIyLCBvcHRpb25zKSA9PiB7XG4gIHIxID0gbmV3IFJhbmdlKHIxLCBvcHRpb25zKVxuICByMiA9IG5ldyBSYW5nZShyMiwgb3B0aW9ucylcbiAgcmV0dXJuIHIxLmludGVyc2VjdHMocjIsIG9wdGlvbnMpXG59XG5tb2R1bGUuZXhwb3J0cyA9IGludGVyc2VjdHNcbiIsICIndXNlIHN0cmljdCdcblxuLy8gZ2l2ZW4gYSBzZXQgb2YgdmVyc2lvbnMgYW5kIGEgcmFuZ2UsIGNyZWF0ZSBhIFwic2ltcGxpZmllZFwiIHJhbmdlXG4vLyB0aGF0IGluY2x1ZGVzIHRoZSBzYW1lIHZlcnNpb25zIHRoYXQgdGhlIG9yaWdpbmFsIHJhbmdlIGRvZXNcbi8vIElmIHRoZSBvcmlnaW5hbCByYW5nZSBpcyBzaG9ydGVyIHRoYW4gdGhlIHNpbXBsaWZpZWQgb25lLCByZXR1cm4gdGhhdC5cbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcbm1vZHVsZS5leHBvcnRzID0gKHZlcnNpb25zLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBzZXQgPSBbXVxuICBsZXQgZmlyc3QgPSBudWxsXG4gIGxldCBwcmV2ID0gbnVsbFxuICBjb25zdCB2ID0gdmVyc2lvbnMuc29ydCgoYSwgYikgPT4gY29tcGFyZShhLCBiLCBvcHRpb25zKSlcbiAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHYpIHtcbiAgICBjb25zdCBpbmNsdWRlZCA9IHNhdGlzZmllcyh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucylcbiAgICBpZiAoaW5jbHVkZWQpIHtcbiAgICAgIHByZXYgPSB2ZXJzaW9uXG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIGZpcnN0ID0gdmVyc2lvblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICBzZXQucHVzaChbZmlyc3QsIHByZXZdKVxuICAgICAgfVxuICAgICAgcHJldiA9IG51bGxcbiAgICAgIGZpcnN0ID0gbnVsbFxuICAgIH1cbiAgfVxuICBpZiAoZmlyc3QpIHtcbiAgICBzZXQucHVzaChbZmlyc3QsIG51bGxdKVxuICB9XG5cbiAgY29uc3QgcmFuZ2VzID0gW11cbiAgZm9yIChjb25zdCBbbWluLCBtYXhdIG9mIHNldCkge1xuICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgcmFuZ2VzLnB1c2gobWluKVxuICAgIH0gZWxzZSBpZiAoIW1heCAmJiBtaW4gPT09IHZbMF0pIHtcbiAgICAgIHJhbmdlcy5wdXNoKCcqJylcbiAgICB9IGVsc2UgaWYgKCFtYXgpIHtcbiAgICAgIHJhbmdlcy5wdXNoKGA+PSR7bWlufWApXG4gICAgfSBlbHNlIGlmIChtaW4gPT09IHZbMF0pIHtcbiAgICAgIHJhbmdlcy5wdXNoKGA8PSR7bWF4fWApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlcy5wdXNoKGAke21pbn0gLSAke21heH1gKVxuICAgIH1cbiAgfVxuICBjb25zdCBzaW1wbGlmaWVkID0gcmFuZ2VzLmpvaW4oJyB8fCAnKVxuICBjb25zdCBvcmlnaW5hbCA9IHR5cGVvZiByYW5nZS5yYXcgPT09ICdzdHJpbmcnID8gcmFuZ2UucmF3IDogU3RyaW5nKHJhbmdlKVxuICByZXR1cm4gc2ltcGxpZmllZC5sZW5ndGggPCBvcmlnaW5hbC5sZW5ndGggPyBzaW1wbGlmaWVkIDogcmFuZ2Vcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlLmpzJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3IuanMnKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcblxuLy8gQ29tcGxleCByYW5nZSBgcjEgfHwgcjIgfHwgLi4uYCBpcyBhIHN1YnNldCBvZiBgUjEgfHwgUjIgfHwgLi4uYCBpZmY6XG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIGlzIGEgbnVsbCBzZXQsIE9SXG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIHdoaWNoIGlzIG5vdCBhIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mXG4vLyAgIHNvbWUgYFIxLCBSMiwgLi4uYFxuLy9cbi8vIFNpbXBsZSByYW5nZSBgYzEgYzIgLi4uYCBpcyBhIHN1YnNldCBvZiBzaW1wbGUgcmFuZ2UgYEMxIEMyIC4uLmAgaWZmOlxuLy8gLSBJZiBjIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gSWYgQyBpcyBvbmx5IHRoZSBBTlkgY29tcGFyYXRvciwgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIGlmIGluIHByZXJlbGVhc2UgbW9kZSwgcmV0dXJuIGZhbHNlXG4vLyAgIC0gZWxzZSByZXBsYWNlIGMgd2l0aCBgWz49MC4wLjBdYFxuLy8gLSBJZiBDIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gaWYgaW4gcHJlcmVsZWFzZSBtb2RlLCByZXR1cm4gdHJ1ZVxuLy8gICAtIGVsc2UgcmVwbGFjZSBDIHdpdGggYFs+PTAuMC4wXWBcbi8vIC0gTGV0IEVRIGJlIHRoZSBzZXQgb2YgPSBjb21wYXJhdG9ycyBpbiBjXG4vLyAtIElmIEVRIGlzIG1vcmUgdGhhbiBvbmUsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vIC0gTGV0IEdUIGJlIHRoZSBoaWdoZXN0ID4gb3IgPj0gY29tcGFyYXRvciBpbiBjXG4vLyAtIExldCBMVCBiZSB0aGUgbG93ZXN0IDwgb3IgPD0gY29tcGFyYXRvciBpbiBjXG4vLyAtIElmIEdUIGFuZCBMVCwgYW5kIEdULnNlbXZlciA+IExULnNlbXZlciwgcmV0dXJuIHRydWUgKG51bGwgc2V0KVxuLy8gLSBJZiBhbnkgQyBpcyBhID0gcmFuZ2UsIGFuZCBHVCBvciBMVCBhcmUgc2V0LCByZXR1cm4gZmFsc2Vcbi8vIC0gSWYgRVFcbi8vICAgLSBJZiBHVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgR1QsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBMVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgTFQsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBFUSBzYXRpc2ZpZXMgZXZlcnkgQywgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIHJldHVybiBmYWxzZVxuLy8gLSBJZiBHVFxuLy8gICAtIElmIEdULnNlbXZlciBpcyBsb3dlciB0aGFuIGFueSA+IG9yID49IGNvbXAgaW4gQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1QgaXMgPj0sIGFuZCBHVC5zZW12ZXIgZG9lcyBub3Qgc2F0aXNmeSBldmVyeSBDLCByZXR1cm4gZmFsc2Vcbi8vICAgLSBJZiBHVC5zZW12ZXIgaGFzIGEgcHJlcmVsZWFzZSwgYW5kIG5vdCBpbiBwcmVyZWxlYXNlIG1vZGVcbi8vICAgICAtIElmIG5vIEMgaGFzIGEgcHJlcmVsZWFzZSBhbmQgdGhlIEdULnNlbXZlciB0dXBsZSwgcmV0dXJuIGZhbHNlXG4vLyAtIElmIExUXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGlzIGdyZWF0ZXIgdGhhbiBhbnkgPCBvciA8PSBjb21wIGluIEMsIHJldHVybiBmYWxzZVxuLy8gICAtIElmIExUIGlzIDw9LCBhbmQgTFQuc2VtdmVyIGRvZXMgbm90IHNhdGlzZnkgZXZlcnkgQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGhhcyBhIHByZXJlbGVhc2UsIGFuZCBub3QgaW4gcHJlcmVsZWFzZSBtb2RlXG4vLyAgICAgLSBJZiBubyBDIGhhcyBhIHByZXJlbGVhc2UgYW5kIHRoZSBMVC5zZW12ZXIgdHVwbGUsIHJldHVybiBmYWxzZVxuLy8gLSBFbHNlIHJldHVybiB0cnVlXG5cbmNvbnN0IHN1YnNldCA9IChzdWIsIGRvbSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChzdWIgPT09IGRvbSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBzdWIgPSBuZXcgUmFuZ2Uoc3ViLCBvcHRpb25zKVxuICBkb20gPSBuZXcgUmFuZ2UoZG9tLCBvcHRpb25zKVxuICBsZXQgc2F3Tm9uTnVsbCA9IGZhbHNlXG5cbiAgT1VURVI6IGZvciAoY29uc3Qgc2ltcGxlU3ViIG9mIHN1Yi5zZXQpIHtcbiAgICBmb3IgKGNvbnN0IHNpbXBsZURvbSBvZiBkb20uc2V0KSB7XG4gICAgICBjb25zdCBpc1N1YiA9IHNpbXBsZVN1YnNldChzaW1wbGVTdWIsIHNpbXBsZURvbSwgb3B0aW9ucylcbiAgICAgIHNhd05vbk51bGwgPSBzYXdOb25OdWxsIHx8IGlzU3ViICE9PSBudWxsXG4gICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgY29udGludWUgT1VURVJcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mIGV2ZXJ5dGhpbmcsIGJ1dCBudWxsIHNpbXBsZSByYW5nZXMgaW5cbiAgICAvLyBhIGNvbXBsZXggcmFuZ2Ugc2hvdWxkIGJlIGlnbm9yZWQuICBzbyBpZiB3ZSBzYXcgYSBub24tbnVsbCByYW5nZSxcbiAgICAvLyB0aGVuIHdlIGtub3cgdGhpcyBpc24ndCBhIHN1YnNldCwgYnV0IGlmIEVWRVJZIHNpbXBsZSByYW5nZSB3YXMgbnVsbCxcbiAgICAvLyB0aGVuIGl0IGlzIGEgc3Vic2V0LlxuICAgIGlmIChzYXdOb25OdWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgbWluaW11bVZlcnNpb25XaXRoUHJlUmVsZWFzZSA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMC0wJyldXG5jb25zdCBtaW5pbXVtVmVyc2lvbiA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXVxuXG5jb25zdCBzaW1wbGVTdWJzZXQgPSAoc3ViLCBkb20sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN1YiA9PT0gZG9tKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdWIubGVuZ3RoID09PSAxICYmIHN1YlswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgIGlmIChkb20ubGVuZ3RoID09PSAxICYmIGRvbVswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgIHN1YiA9IG1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBpZiAoZG9tLmxlbmd0aCA9PT0gMSAmJiBkb21bMF0uc2VtdmVyID09PSBBTlkpIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBjb25zdCBlcVNldCA9IG5ldyBTZXQoKVxuICBsZXQgZ3QsIGx0XG4gIGZvciAoY29uc3QgYyBvZiBzdWIpIHtcbiAgICBpZiAoYy5vcGVyYXRvciA9PT0gJz4nIHx8IGMub3BlcmF0b3IgPT09ICc+PScpIHtcbiAgICAgIGd0ID0gaGlnaGVyR1QoZ3QsIGMsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgbHQgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBlcVNldC5hZGQoYy5zZW12ZXIpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVxU2V0LnNpemUgPiAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBndGx0Q29tcFxuICBpZiAoZ3QgJiYgbHQpIHtcbiAgICBndGx0Q29tcCA9IGNvbXBhcmUoZ3Quc2VtdmVyLCBsdC5zZW12ZXIsIG9wdGlvbnMpXG4gICAgaWYgKGd0bHRDb21wID4gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGd0bHRDb21wID09PSAwICYmIChndC5vcGVyYXRvciAhPT0gJz49JyB8fCBsdC5vcGVyYXRvciAhPT0gJzw9JykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gd2lsbCBpdGVyYXRlIG9uZSBvciB6ZXJvIHRpbWVzXG4gIGZvciAoY29uc3QgZXEgb2YgZXFTZXQpIHtcbiAgICBpZiAoZ3QgJiYgIXNhdGlzZmllcyhlcSwgU3RyaW5nKGd0KSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKGx0ICYmICFzYXRpc2ZpZXMoZXEsIFN0cmluZyhsdCksIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICAgIGlmICghc2F0aXNmaWVzKGVxLCBTdHJpbmcoYyksIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgaGlnaGVyLCBsb3dlclxuICBsZXQgaGFzRG9tTFQsIGhhc0RvbUdUXG4gIC8vIGlmIHRoZSBzdWJzZXQgaGFzIGEgcHJlcmVsZWFzZSwgd2UgbmVlZCBhIGNvbXBhcmF0b3IgaW4gdGhlIHN1cGVyc2V0XG4gIC8vIHdpdGggdGhlIHNhbWUgdHVwbGUgYW5kIGEgcHJlcmVsZWFzZSwgb3IgaXQncyBub3QgYSBzdWJzZXRcbiAgbGV0IG5lZWREb21MVFByZSA9IGx0ICYmXG4gICAgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICBsdC5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPyBsdC5zZW12ZXIgOiBmYWxzZVxuICBsZXQgbmVlZERvbUdUUHJlID0gZ3QgJiZcbiAgICAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJlxuICAgIGd0LnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA/IGd0LnNlbXZlciA6IGZhbHNlXG4gIC8vIGV4Y2VwdGlvbjogPDEuMi4zLTAgaXMgdGhlIHNhbWUgYXMgPDEuMi4zXG4gIGlmIChuZWVkRG9tTFRQcmUgJiYgbmVlZERvbUxUUHJlLnByZXJlbGVhc2UubGVuZ3RoID09PSAxICYmXG4gICAgICBsdC5vcGVyYXRvciA9PT0gJzwnICYmIG5lZWREb21MVFByZS5wcmVyZWxlYXNlWzBdID09PSAwKSB7XG4gICAgbmVlZERvbUxUUHJlID0gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICBoYXNEb21HVCA9IGhhc0RvbUdUIHx8IGMub3BlcmF0b3IgPT09ICc+JyB8fCBjLm9wZXJhdG9yID09PSAnPj0nXG4gICAgaGFzRG9tTFQgPSBoYXNEb21MVCB8fCBjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9J1xuICAgIGlmIChndCkge1xuICAgICAgaWYgKG5lZWREb21HVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21HVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21HVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21HVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21HVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPicgfHwgYy5vcGVyYXRvciA9PT0gJz49Jykge1xuICAgICAgICBoaWdoZXIgPSBoaWdoZXJHVChndCwgYywgb3B0aW9ucylcbiAgICAgICAgaWYgKGhpZ2hlciA9PT0gYyAmJiBoaWdoZXIgIT09IGd0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3Qub3BlcmF0b3IgPT09ICc+PScgJiYgIWMudGVzdChndC5zZW12ZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobHQpIHtcbiAgICAgIGlmIChuZWVkRG9tTFRQcmUpIHtcbiAgICAgICAgaWYgKGMuc2VtdmVyLnByZXJlbGVhc2UgJiYgYy5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLm1ham9yID09PSBuZWVkRG9tTFRQcmUubWFqb3IgJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLm1pbm9yID09PSBuZWVkRG9tTFRQcmUubWlub3IgJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLnBhdGNoID09PSBuZWVkRG9tTFRQcmUucGF0Y2gpIHtcbiAgICAgICAgICBuZWVkRG9tTFRQcmUgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYy5vcGVyYXRvciA9PT0gJzwnIHx8IGMub3BlcmF0b3IgPT09ICc8PScpIHtcbiAgICAgICAgbG93ZXIgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgICAgICBpZiAobG93ZXIgPT09IGMgJiYgbG93ZXIgIT09IGx0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobHQub3BlcmF0b3IgPT09ICc8PScgJiYgIWMudGVzdChsdC5zZW12ZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWMub3BlcmF0b3IgJiYgKGx0IHx8IGd0KSAmJiBndGx0Q29tcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlcmUgd2FzIGEgPCBvciA+LCBhbmQgbm90aGluZyBpbiB0aGUgZG9tLCB0aGVuIG11c3QgYmUgZmFsc2VcbiAgLy8gVU5MRVNTIGl0IHdhcyBsaW1pdGVkIGJ5IGFub3RoZXIgcmFuZ2UgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi5cbiAgLy8gRWcsID4xLjAuMCA8MS4wLjEgaXMgc3RpbGwgYSBzdWJzZXQgb2YgPDIuMC4wXG4gIGlmIChndCAmJiBoYXNEb21MVCAmJiAhbHQgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChsdCAmJiBoYXNEb21HVCAmJiAhZ3QgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIHdlIG5lZWRlZCBhIHByZXJlbGVhc2UgcmFuZ2UgaW4gYSBzcGVjaWZpYyB0dXBsZSwgYnV0IGRpZG4ndCBnZXQgb25lXG4gIC8vIHRoZW4gdGhpcyBpc24ndCBhIHN1YnNldC4gIGVnID49MS4yLjMtcHJlIGlzIG5vdCBhIHN1YnNldCBvZiA+PTEuMC4wLFxuICAvLyBiZWNhdXNlIGl0IGluY2x1ZGVzIHByZXJlbGVhc2VzIGluIHRoZSAxLjIuMyB0dXBsZVxuICBpZiAobmVlZERvbUdUUHJlIHx8IG5lZWREb21MVFByZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gPj0xLjIuMyBpcyBsb3dlciB0aGFuID4xLjIuM1xuY29uc3QgaGlnaGVyR1QgPSAoYSwgYiwgb3B0aW9ucykgPT4ge1xuICBpZiAoIWEpIHtcbiAgICByZXR1cm4gYlxuICB9XG4gIGNvbnN0IGNvbXAgPSBjb21wYXJlKGEuc2VtdmVyLCBiLnNlbXZlciwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXAgPiAwID8gYVxuICAgIDogY29tcCA8IDAgPyBiXG4gICAgOiBiLm9wZXJhdG9yID09PSAnPicgJiYgYS5vcGVyYXRvciA9PT0gJz49JyA/IGJcbiAgICA6IGFcbn1cblxuLy8gPD0xLjIuMyBpcyBoaWdoZXIgdGhhbiA8MS4yLjNcbmNvbnN0IGxvd2VyTFQgPSAoYSwgYiwgb3B0aW9ucykgPT4ge1xuICBpZiAoIWEpIHtcbiAgICByZXR1cm4gYlxuICB9XG4gIGNvbnN0IGNvbXAgPSBjb21wYXJlKGEuc2VtdmVyLCBiLnNlbXZlciwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXAgPCAwID8gYVxuICAgIDogY29tcCA+IDAgPyBiXG4gICAgOiBiLm9wZXJhdG9yID09PSAnPCcgJiYgYS5vcGVyYXRvciA9PT0gJzw9JyA/IGJcbiAgICA6IGFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdWJzZXRcbiIsICIndXNlIHN0cmljdCdcblxuLy8ganVzdCBwcmUtbG9hZCBhbGwgdGhlIHN0dWZmIHRoYXQgaW5kZXguanMgbGF6aWx5IGV4cG9ydHNcbmNvbnN0IGludGVybmFsUmUgPSByZXF1aXJlKCcuL2ludGVybmFsL3JlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29uc3RhbnRzJylcbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgaWRlbnRpZmllcnMgPSByZXF1aXJlKCcuL2ludGVybmFsL2lkZW50aWZpZXJzJylcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcGFyc2UnKVxuY29uc3QgdmFsaWQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy92YWxpZCcpXG5jb25zdCBjbGVhbiA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NsZWFuJylcbmNvbnN0IGluYyA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2luYycpXG5jb25zdCBkaWZmID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZGlmZicpXG5jb25zdCBtYWpvciA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL21ham9yJylcbmNvbnN0IG1pbm9yID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbWlub3InKVxuY29uc3QgcGF0Y2ggPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wYXRjaCcpXG5jb25zdCBwcmVyZWxlYXNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcHJlcmVsZWFzZScpXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZScpXG5jb25zdCByY29tcGFyZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jjb21wYXJlJylcbmNvbnN0IGNvbXBhcmVMb29zZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NvbXBhcmUtbG9vc2UnKVxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc29ydCcpXG5jb25zdCByc29ydCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jzb3J0JylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZ3QnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBlcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2VxJylcbmNvbnN0IG5lcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL25lcScpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9ndGUnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGNtcCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NtcCcpXG5jb25zdCBjb2VyY2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb2VyY2UnKVxuY29uc3QgdHJ1bmNhdGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy90cnVuY2F0ZScpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jbGFzc2VzL2NvbXBhcmF0b3InKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc2F0aXNmaWVzJylcbmNvbnN0IHRvQ29tcGFyYXRvcnMgPSByZXF1aXJlKCcuL3Jhbmdlcy90by1jb21wYXJhdG9ycycpXG5jb25zdCBtYXhTYXRpc2Z5aW5nID0gcmVxdWlyZSgnLi9yYW5nZXMvbWF4LXNhdGlzZnlpbmcnKVxuY29uc3QgbWluU2F0aXNmeWluZyA9IHJlcXVpcmUoJy4vcmFuZ2VzL21pbi1zYXRpc2Z5aW5nJylcbmNvbnN0IG1pblZlcnNpb24gPSByZXF1aXJlKCcuL3Jhbmdlcy9taW4tdmVyc2lvbicpXG5jb25zdCB2YWxpZFJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvdmFsaWQnKVxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL291dHNpZGUnKVxuY29uc3QgZ3RyID0gcmVxdWlyZSgnLi9yYW5nZXMvZ3RyJylcbmNvbnN0IGx0ciA9IHJlcXVpcmUoJy4vcmFuZ2VzL2x0cicpXG5jb25zdCBpbnRlcnNlY3RzID0gcmVxdWlyZSgnLi9yYW5nZXMvaW50ZXJzZWN0cycpXG5jb25zdCBzaW1wbGlmeVJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvc2ltcGxpZnknKVxuY29uc3Qgc3Vic2V0ID0gcmVxdWlyZSgnLi9yYW5nZXMvc3Vic2V0Jylcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZSxcbiAgdmFsaWQsXG4gIGNsZWFuLFxuICBpbmMsXG4gIGRpZmYsXG4gIG1ham9yLFxuICBtaW5vcixcbiAgcGF0Y2gsXG4gIHByZXJlbGVhc2UsXG4gIGNvbXBhcmUsXG4gIHJjb21wYXJlLFxuICBjb21wYXJlTG9vc2UsXG4gIGNvbXBhcmVCdWlsZCxcbiAgc29ydCxcbiAgcnNvcnQsXG4gIGd0LFxuICBsdCxcbiAgZXEsXG4gIG5lcSxcbiAgZ3RlLFxuICBsdGUsXG4gIGNtcCxcbiAgY29lcmNlLFxuICB0cnVuY2F0ZSxcbiAgQ29tcGFyYXRvcixcbiAgUmFuZ2UsXG4gIHNhdGlzZmllcyxcbiAgdG9Db21wYXJhdG9ycyxcbiAgbWF4U2F0aXNmeWluZyxcbiAgbWluU2F0aXNmeWluZyxcbiAgbWluVmVyc2lvbixcbiAgdmFsaWRSYW5nZSxcbiAgb3V0c2lkZSxcbiAgZ3RyLFxuICBsdHIsXG4gIGludGVyc2VjdHMsXG4gIHNpbXBsaWZ5UmFuZ2UsXG4gIHN1YnNldCxcbiAgU2VtVmVyLFxuICByZTogaW50ZXJuYWxSZS5yZSxcbiAgc3JjOiBpbnRlcm5hbFJlLnNyYyxcbiAgdG9rZW5zOiBpbnRlcm5hbFJlLnQsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT046IGNvbnN0YW50cy5TRU1WRVJfU1BFQ19WRVJTSU9OLFxuICBSRUxFQVNFX1RZUEVTOiBjb25zdGFudHMuUkVMRUFTRV9UWVBFUyxcbiAgY29tcGFyZUlkZW50aWZpZXJzOiBpZGVudGlmaWVycy5jb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnM6IGlkZW50aWZpZXJzLnJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjYgVGhlIHpiIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbiAqL1xuXG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ0BhY3Rpb25zL2NvcmUnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ0BhY3Rpb25zL2V4ZWMnO1xuaW1wb3J0IHsgZ2V0T2N0b2tpdCB9IGZyb20gJ0BhY3Rpb25zL2dpdGh1Yic7XG5pbXBvcnQgeyBkb3dubG9hZFRvb2wsIGV4dHJhY3RUYXIsIGV4dHJhY3RaaXAgfSBmcm9tICdAYWN0aW9ucy90b29sLWNhY2hlJztcblxuaW50ZXJmYWNlIFJlbGVhc2Uge1xuICB0YWdOYW1lOiBzdHJpbmc7XG4gIHJlbGVhc2VBc3NldHM6IFJlbGVhc2VBc3NldENvbm5lY3Rpb247XG59XG5cbmludGVyZmFjZSBSZWxlYXNlQXNzZXRDb25uZWN0aW9uIHtcbiAgbm9kZXM6IFJlbGVhc2VBc3NldFtdO1xufVxuXG5pbnRlcmZhY2UgUmVsZWFzZUFzc2V0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkb3dubG9hZFVybDogc3RyaW5nO1xufVxuXG5jb25zdCByZWxlYXNlRnJhZ21lbnQgPVxuICBgXG4gICAgZnJhZ21lbnQgcmVsZWFzZUZpZWxkcyBvbiBSZWxlYXNlIHtcbiAgICAgIHRhZ05hbWVcbiAgICAgIHJlbGVhc2VBc3NldHMoZmlyc3Q6IDUwKSB7XG4gICAgICAgIG5vZGVzIHtcbiAgICAgICAgICBuYW1lXG4gICAgICAgICAgZG93bmxvYWRVcmxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgYDtcblxuKGFzeW5jICgpID0+IHtcbiAgY29uc3Qgb2N0b2tpdCA9IGdldE9jdG9raXQoJycpO1xuXG4gIGNvbnN0IHZlcnNpb24gPSBjb3JlLmdldElucHV0KCd6Yi12ZXJzaW9uJyk7XG4gIGNvbnN0IGdyYXBocWxSZXF1ZXN0ID1cbiAgICB2ZXJzaW9uID9cbiAgICAgIHtcbiAgICAgICAgcXVlcnk6XG4gICAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5IHJlbGVhc2VBc3NldHNGb3JWZXJzaW9uKCR0YWdOYW1lOiBTdHJpbmchKSB7XG4gICAgICAgICAgICByZXBvc2l0b3J5KG93bmVyOiBcIjI1NmxpZ2h0c1wiLCByZXBvOiBcInpiXCIpIHtcbiAgICAgICAgICAgICAgcmVsZWFzZSh0YWdOYW1lOiAkdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIC4uLnJlbGVhc2VGaWVsZHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICR7cmVsZWFzZUZyYWdtZW50fVxuICAgICAgICBgLFxuICAgICAgICB0YWdOYW1lOiAndicgKyB2ZXJzaW9uLFxuICAgICAgfSA6XG4gICAgICB7XG4gICAgICAgIHF1ZXJ5OlxuICAgICAgICAgIGBcbiAgICAgICAgICBxdWVyeSByZWxlYXNlQXNzZXRzRm9yTGF0ZXN0IHtcbiAgICAgICAgICAgIHJlcG9zaXRvcnkob3duZXI6IFwiMjU2bGlnaHRzXCIsIHJlcG86IFwiemJcIikge1xuICAgICAgICAgICAgICByZWxlYXNlOiBsYXRlc3RSZWxlYXNlIHtcbiAgICAgICAgICAgICAgICAuLi5yZWxlYXNlRmllbGRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAke3JlbGVhc2VGcmFnbWVudH1cbiAgICAgICAgYCxcbiAgICAgIH07XG4gIGNvbnN0IGdyYXBocWxSZXNwb25zZSA9IGF3YWl0IG9jdG9raXQuZ3JhcGhxbDx7XG4gICAgcmVwb3NpdG9yeToge1xuICAgICAgcmVsZWFzZTogUmVsZWFzZSB8IG51bGw7XG4gICAgfVxuICB9PihncmFwaHFsUmVxdWVzdCk7XG4gIGNvbnN0IHJlbGVhc2UgPSBncmFwaHFsUmVzcG9uc2UucmVwb3NpdG9yeS5yZWxlYXNlO1xuICBjb25zdCByZWxlYXNlQXNzZXRzID0gcmVsZWFzZT8ucmVsZWFzZUFzc2V0cz8ubm9kZXMgfHwgW107XG5cbiAgbGV0IGFzc2V0OiBSZWxlYXNlQXNzZXQgfCB1bmRlZmluZWQ7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyAmJiBwcm9jZXNzLmFyY2ggPT09ICdhcm02NCcpIHtcbiAgICBhc3NldCA9IHJlbGVhc2VBc3NldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUuaW5jbHVkZXMoJ2FhcmNoNjQtYXBwbGUtbWFjb3MnKSlcbiAgfSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnICYmIHByb2Nlc3MuYXJjaCA9PT0gJ3g2NCcpIHtcbiAgICBhc3NldCA9IHJlbGVhc2VBc3NldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUuaW5jbHVkZXMoJ3g4Nl82NC11bmtub3duLWxpbnV4JykpXG4gIH1cbiAgaWYgKCFhc3NldCkge1xuICAgIGNvcmUuc2V0RmFpbGVkKGBObyBkb3dubG9hZCBmb3VuZCBmb3IgJHtwcm9jZXNzLmFyY2h9LSR7cHJvY2Vzcy5wbGF0Zm9ybX0gdmVyc2lvbiAke3JlbGVhc2U/LnRhZ05hbWUgfHwgdmVyc2lvbn1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB6YkFyY2hpdmVQYXRoID0gYXdhaXQgZG93bmxvYWRUb29sKGFzc2V0LmRvd25sb2FkVXJsKTtcbiAgY29uc3QgemJFeHRyYWN0ZWRGb2xkZXJQYXRoID0gYXNzZXQuZG93bmxvYWRVcmwuZW5kc1dpdGgoJy56aXAnKSA/XG4gICAgYXdhaXQgZXh0cmFjdFppcCh6YkFyY2hpdmVQYXRoKSA6XG4gICAgYXdhaXQgZXh0cmFjdFRhcih6YkFyY2hpdmVQYXRoKTtcbiAgYXdhaXQgZXhlYyhwYXRoLmpvaW4oemJFeHRyYWN0ZWRGb2xkZXJQYXRoLCAnaW5zdGFsbCcpLCBbJy0tc2luZ2xlLXVzZXInLCAnLS1uby1zeXN0ZW1kJywgJy0tbm8tbGF1bmNoZCddKTtcbn0pKCk7XG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke1xuICAgICAgcHJvY2Vzcy5hcmNoXG4gICAgfSlgO1xuICB9XG5cbiAgcmV0dXJuIFwiPGVudmlyb25tZW50IHVuZGV0ZWN0YWJsZT5cIjtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKChjYWxsYmFjaywgbmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKChtZXRob2QsIHJlZ2lzdGVyZWQpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKHN0YXRlLCBraW5kLCBuYW1lLCBob29rKSB7XG4gIGNvbnN0IG9yaWcgPSBob29rO1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgc3RhdGUucmVnaXN0cnlbbmFtZV0gPSBbXTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImJlZm9yZVwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihvcmlnLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYWZ0ZXJcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbigocmVzdWx0XykgPT4ge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF87XG4gICAgICAgICAgcmV0dXJuIG9yaWcocmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiBvcmlnKGVycm9yLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnB1c2goe1xuICAgIGhvb2s6IGhvb2ssXG4gICAgb3JpZzogb3JpZyxcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gc3RhdGUucmVnaXN0cnlbbmFtZV1cbiAgICAubWFwKChyZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5vcmlnO1xuICAgIH0pXG4gICAgLmluZGV4T2YobWV0aG9kKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9saWIvcmVnaXN0ZXIuanNcIjtcbmltcG9ydCB7IGFkZEhvb2sgfSBmcm9tIFwiLi9saWIvYWRkLmpzXCI7XG5pbXBvcnQgeyByZW1vdmVIb29rIH0gZnJvbSBcIi4vbGliL3JlbW92ZS5qc1wiO1xuXG4vLyBiaW5kIHdpdGggYXJyYXkgb2YgYXJndW1lbnRzOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjE3OTI5MTNcbmNvbnN0IGJpbmQgPSBGdW5jdGlvbi5iaW5kO1xuY29uc3QgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgY29uc3QgcmVtb3ZlSG9va1JlZiA9IGJpbmRhYmxlKHJlbW92ZUhvb2ssIG51bGwpLmFwcGx5KFxuICAgIG51bGwsXG4gICAgbmFtZSA/IFtzdGF0ZSwgbmFtZV0gOiBbc3RhdGVdXG4gICk7XG4gIGhvb2suYXBpID0geyByZW1vdmU6IHJlbW92ZUhvb2tSZWYgfTtcbiAgaG9vay5yZW1vdmUgPSByZW1vdmVIb29rUmVmO1xuICBbXCJiZWZvcmVcIiwgXCJlcnJvclwiLCBcImFmdGVyXCIsIFwid3JhcFwiXS5mb3JFYWNoKChraW5kKSA9PiB7XG4gICAgY29uc3QgYXJncyA9IG5hbWUgPyBbc3RhdGUsIGtpbmQsIG5hbWVdIDogW3N0YXRlLCBraW5kXTtcbiAgICBob29rW2tpbmRdID0gaG9vay5hcGlba2luZF0gPSBiaW5kYWJsZShhZGRIb29rLCBudWxsKS5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFNpbmd1bGFyKCkge1xuICBjb25zdCBzaW5ndWxhckhvb2tOYW1lID0gU3ltYm9sKFwiU2luZ3VsYXJcIik7XG4gIGNvbnN0IHNpbmd1bGFySG9va1N0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcbiAgY29uc3Qgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24oKSB7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcblxuICBjb25zdCBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IFNpbmd1bGFyLCBDb2xsZWN0aW9uIH07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbnZhciBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIlxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9sb3dlcmNhc2Uta2V5cy5qc1xuZnVuY3Rpb24gbG93ZXJjYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbWVyZ2UtZGVlcC5qc1xuZnVuY3Rpb24gbWVyZ2VEZWVwKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9uc1trZXldKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGRlZmF1bHRzKSkgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICAgIGVsc2UgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9yZW1vdmUtdW5kZWZpbmVkLXByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9tZXJnZS5qc1xuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7IG1ldGhvZCwgdXJsIH0gOiB7IHVybDogbWV0aG9kIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH1cbiAgb3B0aW9ucy5oZWFkZXJzID0gbG93ZXJjYXNlS2V5cyhvcHRpb25zLmhlYWRlcnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMuaGVhZGVycyk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdHMgfHwge30sIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy51cmwgPT09IFwiL2dyYXBocWxcIikge1xuICAgIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKFxuICAgICAgICAocHJldmlldykgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpXG4gICAgICApLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gICAgfVxuICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gKG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzIHx8IFtdKS5tYXAoKHByZXZpZXcpID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnM7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2FkZC1xdWVyeS1wYXJhbWV0ZXJzLmpzXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHJldHVybiB1cmwgKyBzZXBhcmF0b3IgKyBuYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyc1tuYW1lXSl9YDtcbiAgfSkuam9pbihcIiZcIik7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2V4dHJhY3QtdXJsLXZhcmlhYmxlLW5hbWVzLmpzXG52YXIgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXnt9fV0rXFx9L2c7XG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC8oPzpeXFxXKyl8KD86KD88IVxcVylcXFcrJCkvZywgXCJcIikuc3BsaXQoLywvKTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXMubWFwKHJlbW92ZU5vbkNoYXJzKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL29taXQuanNcbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzVG9PbWl0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgX19wcm90b19fOiBudWxsIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICBpZiAoa2V5c1RvT21pdC5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC91cmwtdGVtcGxhdGUuanNcbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24ocGFydCkge1xuICAgIGlmICghLyVbMC05QS1GYS1mXS8udGVzdChwYXJ0KSkge1xuICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KS5yZXBsYWNlKC8lNUIvZywgXCJbXCIpLnJlcGxhY2UoLyU1RC9nLCBcIl1cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24oYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdm9pZCAwICYmIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIGtleSwgbW9kaWZpZXIpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLCByZXN1bHQgPSBbXTtcbiAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC8oPzwhW1xcdy1dKVtcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5leHBvcnQge1xuICBlbmRwb2ludFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IGVuZHBvaW50IH0gZnJvbSBcIkBvY3Rva2l0L2VuZHBvaW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMTAuMC4xMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciBkZWZhdWx0c19kZWZhdWx0ID0ge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSBcImNvbnRlbnQtdHlwZVwiO1xuaW1wb3J0IHsgSlNPTlBhcnNlLCBKU09OU3RyaW5naWZ5IH0gZnJvbSBcImpzb24td2l0aC1iaWdpbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG52YXIgbm9vcCA9ICgpID0+IFwiXCI7XG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoO1xuICBpZiAoIWZldGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJmZXRjaCBpcyBub3Qgc2V0LiBQbGVhc2UgcGFzcyBhIGZldGNoIGltcGxlbWVudGF0aW9uIGFzIG5ldyBPY3Rva2l0KHsgcmVxdWVzdDogeyBmZXRjaCB9fSkuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvb2N0b2tpdC5qcy8jZmV0Y2gtbWlzc2luZ1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5sb2cgfHwgY29uc29sZTtcbiAgY29uc3QgcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ICE9PSBmYWxzZTtcbiAgY29uc3QgYm9keSA9IGlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA/IEpTT05TdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSkgOiByZXF1ZXN0T3B0aW9ucy5ib2R5O1xuICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtcbiAgICAgIG5hbWUsXG4gICAgICBTdHJpbmcodmFsdWUpXG4gICAgXSlcbiAgKTtcbiAgbGV0IGZldGNoUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgZmV0Y2hSZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgICAgbWV0aG9kOiByZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgICBib2R5LFxuICAgICAgcmVkaXJlY3Q6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnJlZGlyZWN0LFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBzaWduYWw6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnNpZ25hbCxcbiAgICAgIC8vIGR1cGxleCBtdXN0IGJlIHNldCBpZiByZXF1ZXN0LmJvZHkgaXMgUmVhZGFibGVTdHJlYW0gb3IgQXN5bmMgSXRlcmFibGVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgICAgLi4ucmVxdWVzdE9wdGlvbnMuYm9keSAmJiB7IGR1cGxleDogXCJoYWxmXCIgfVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxldCBtZXNzYWdlID0gXCJVbmtub3duIEVycm9yXCI7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICBlcnJvci5zdGF0dXMgPSA1MDA7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2UubWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihtZXNzYWdlLCA1MDAsIHtcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gICAgcmVxdWVzdEVycm9yLmNhdXNlID0gZXJyb3I7XG4gICAgdGhyb3cgcmVxdWVzdEVycm9yO1xuICB9XG4gIGNvbnN0IHN0YXR1cyA9IGZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICBjb25zdCB1cmwgPSBmZXRjaFJlc3BvbnNlLnVybDtcbiAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGZldGNoUmVzcG9uc2UuaGVhZGVycykge1xuICAgIHJlc3BvbnNlSGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cbiAgY29uc3Qgb2N0b2tpdFJlc3BvbnNlID0ge1xuICAgIHVybCxcbiAgICBzdGF0dXMsXG4gICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgIGRhdGE6IFwiXCJcbiAgfTtcbiAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiByZXNwb25zZUhlYWRlcnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gcmVzcG9uc2VIZWFkZXJzLmxpbmsgJiYgcmVzcG9uc2VIZWFkZXJzLmxpbmsubWF0Y2goLzwoW148Pl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgbG9nLndhcm4oXG4gICAgICBgW0BvY3Rva2l0L3JlcXVlc3RdIFwiJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cmVxdWVzdE9wdGlvbnMudXJsfVwiIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIG9uICR7cmVzcG9uc2VIZWFkZXJzLnN1bnNldH0ke2RlcHJlY2F0aW9uTGluayA/IGAuIFNlZSAke2RlcHJlY2F0aW9uTGlua31gIDogXCJcIn1gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSAyMDQgfHwgc3RhdHVzID09PSAyMDUpIHtcbiAgICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xuICB9XG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihmZXRjaFJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMzA0KSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihcIk5vdCBtb2RpZmllZFwiLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcih0b0Vycm9yTWVzc2FnZShvY3Rva2l0UmVzcG9uc2UuZGF0YSksIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPyBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSkgOiBmZXRjaFJlc3BvbnNlLmJvZHk7XG4gIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKCFjb250ZW50VHlwZSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkuY2F0Y2gobm9vcCk7XG4gIH1cbiAgY29uc3QgbWltZXR5cGUgPSBwYXJzZShjb250ZW50VHlwZSk7XG4gIGlmIChpc0pTT05SZXNwb25zZShtaW1ldHlwZSkpIHtcbiAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICByZXR1cm4gSlNPTlBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbWV0eXBlLnR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpIHx8IG1pbWV0eXBlLnBhcmFtZXRlcnMuY2hhcnNldD8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaChub29wKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS5jYXRjaChcbiAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xuICAgICAgKCkgPT4gbmV3IEFycmF5QnVmZmVyKDApXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNKU09OUmVzcG9uc2UobWltZXR5cGUpIHtcbiAgcmV0dXJuIG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiIHx8IG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vc2NpbStqc29uXCI7XG59XG5mdW5jdGlvbiB0b0Vycm9yTWVzc2FnZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gXCJVbmtub3duIGVycm9yXCI7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIGRhdGEgIT09IG51bGwgJiYgXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGNvbnN0IG9iamVjdERhdGEgPSBkYXRhO1xuICAgIGNvbnN0IHN1ZmZpeCA9IFwiZG9jdW1lbnRhdGlvbl91cmxcIiBpbiBvYmplY3REYXRhID8gYCAtICR7b2JqZWN0RGF0YS5kb2N1bWVudGF0aW9uX3VybH1gIDogXCJcIjtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmplY3REYXRhLmVycm9ycykgPyBgJHtvYmplY3REYXRhLm1lc3NhZ2V9OiAke29iamVjdERhdGEuZXJyb3JzLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gIDogYCR7b2JqZWN0RGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LCBkZWZhdWx0c19kZWZhdWx0KTtcbmV4cG9ydCB7XG4gIHJlcXVlc3Rcbn07XG4vKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cbi8qIHY4IGlnbm9yZSBlbHNlIC0tIEBwcmVzZXJ2ZSAqL1xuIiwgImNvbnN0IGludFJlZ2V4ID0gL14tP1xcZCskLztcbmNvbnN0IG5vaXNlVmFsdWUgPSAvXi0/XFxkK24rJC87IC8vIE5vaXNlIC0gc3RyaW5ncyB0aGF0IG1hdGNoIHRoZSBjdXN0b20gZm9ybWF0IGJlZm9yZSBiZWluZyBjb252ZXJ0ZWQgdG8gaXRcbmNvbnN0IG9yaWdpbmFsU3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnk7XG5jb25zdCBvcmlnaW5hbFBhcnNlID0gSlNPTi5wYXJzZTtcbmNvbnN0IGN1c3RvbUZvcm1hdCA9IC9eLT9cXGQrbiQvO1xuXG5jb25zdCBiaWdJbnRzU3RyaW5naWZ5ID0gLyhbXFxbOl0pP1wiKC0/XFxkKyluXCIoJHxcXHMqWyxcXH1cXF1dKS9nO1xuY29uc3Qgbm9pc2VTdHJpbmdpZnkgPSAvKFtcXFs6XSk/KFwiLT9cXGQrbispbihcIiR8XCJcXHMqWyxcXH1cXF1dKS9nO1xuXG4vKipcbiAqIEB0eXBlZGVmIHsodGhpczogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSkgPT4gYW55fSBSZXBsYWNlclxuICogQHR5cGVkZWYgeyhrZXk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSwgY29udGV4dD86IHsgc291cmNlOiBzdHJpbmcgfSkgPT4gYW55fSBSZXZpdmVyXG4gKi9cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyB1bnN0cmluZ2lmaWFibGUgYWNjb3JkaW5nIHRvIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSBydWxlcy5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIGEgZnVuY3Rpb24sIG9yIGEgc3ltYm9sLlxuICovXG5jb25zdCBpc1Vuc3RyaW5naWZpYWJsZSA9ICh2YWwpID0+XG4gIHZhbCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgdmFsID09PSBcInN5bWJvbFwiO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgbmF0aXZlIEpTT04ucmF3SlNPTiBvYmplY3QgKE5vZGUuanMgMjIrKS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIFJhd0pTT04gaW5zdGFuY2UuXG4gKi9cbmNvbnN0IGlzUmF3SlNPTiA9ICh2YWwpID0+XG4gIHZhbCAhPT0gbnVsbCAmJlxuICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiICYmXG4gIHZhbC5jb25zdHJ1Y3RvciAmJlxuICB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gXCJSYXdKU09OXCI7XG5cbi8qKlxuICogSXRlcmF0aXZlbHkgY29udmVydHMgYSBKUyB2YWx1ZSB0byBhIEpTT04gc3RyaW5nLlxuICogVXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gdGhlIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSBoaXRzIHRoZSBNYXhpbXVtIENhbGwgU3RhY2sgc2l6ZS5cbiAqIEZ1bGx5IGNvbXBsaWFudCB3aXRoIEpTT04gZm9ybWF0dGluZyAoc3BhY2UpLCByZXBsYWNlcnMsIGFuZCB0b0pTT04gYmVoYXZpb3JzLlxuICpcbiAqIEBwYXJhbSB7YW55fSByb290VmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeS5cbiAqIEBwYXJhbSB7UmVwbGFjZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbH0gW3JlcGxhY2VyXSBVc2VyJ3MgY3VzdG9tIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IFtzcGFjZVBhcmFtXSBJbmRlbnRhdGlvbiBmb3IgcHJldHR5LXByaW50aW5nLlxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gVGhlIGdlbmVyYXRlZCBKU09OIHN0cmluZy5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5SXRlcmF0aXZlbHkgPSAocm9vdFZhbHVlLCByZXBsYWNlciwgc3BhY2VQYXJhbSkgPT4ge1xuICBsZXQgc3BhY2UgPSBcIlwiO1xuXG4gIGlmICh0eXBlb2Ygc3BhY2VQYXJhbSA9PT0gXCJudW1iZXJcIikge1xuICAgIHNwYWNlID0gXCIgXCIucmVwZWF0KE1hdGgubWluKDEwLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHNwYWNlUGFyYW0pKSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZVBhcmFtID09PSBcInN0cmluZ1wiKSB7XG4gICAgc3BhY2UgPSBzcGFjZVBhcmFtLnNsaWNlKDAsIDEwKTtcbiAgfVxuXG4gIGNvbnN0IGlzRnVuY3Rpb25SZXBsYWNlciA9IHR5cGVvZiByZXBsYWNlciA9PT0gXCJmdW5jdGlvblwiO1xuICBjb25zdCBwcm9wZXJ0eUxpc3QgPSBBcnJheS5pc0FycmF5KHJlcGxhY2VyKVxuICAgID8gbmV3IFNldChyZXBsYWNlci5tYXAoU3RyaW5nKSlcbiAgICA6IG51bGw7XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgdmFsdWUgZm9yIHN0cmluZ2lmaWNhdGlvbiBieSByZXNvbHZpbmcgdG9KU09OLCBoYW5kbGluZyBCaWdJbnRzLFxuICAgKiBhcHBseWluZyBjdXN0b20gcmVwbGFjZXJzLCBhbmQgdW53cmFwcGluZyBwcmltaXRpdmUgb2JqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R8QXJyYXl9IHBhcmVudCBUaGUgcGFyZW50IG9iamVjdCBvciBhcnJheSBob2xkaW5nIHRoZSB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgVGhlIHJhdyB2YWx1ZSB0byBwcm9jZXNzLlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgcHJvY2Vzc2VkIHZhbHVlIHJlYWR5IGZvciBzdHJpbmdpZmljYXRpb24uXG4gICAqL1xuICBjb25zdCBwcmVwYXJlVmFsID0gKHBhcmVudCwga2V5LCB2YWwpID0+IHtcbiAgICBjb25zdCBpc09iamVjdCA9IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiO1xuICAgIGNvbnN0IGhhc1RvSlNPTiA9IGlzT2JqZWN0ICYmIHR5cGVvZiB2YWwudG9KU09OID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICBpZiAoaGFzVG9KU09OKSB7XG4gICAgICB2YWwgPSB2YWwudG9KU09OKGtleSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOb2lzZSA9IHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgJiYgbm9pc2VWYWx1ZS50ZXN0KHZhbCk7XG5cbiAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIHZhbCArIFwiblwiO1xuXG4gICAgY29uc3QgaXNCaWdJbnQgPSB0eXBlb2YgdmFsID09PSBcImJpZ2ludFwiO1xuXG4gICAgaWYgKGlzQmlnSW50KSB7XG4gICAgICBjb25zdCBzdXBwb3J0c1Jhd0pTT04gPSBcInJhd0pTT05cIiBpbiBKU09OO1xuXG4gICAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSByZXR1cm4gSlNPTi5yYXdKU09OKHZhbC50b1N0cmluZygpKTtcblxuICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb25SZXBsYWNlcikge1xuICAgICAgdmFsID0gcmVwbGFjZXIuY2FsbChwYXJlbnQsIGtleSwgdmFsKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1Bvc3RSZXBsYWNlck9iamVjdCA9IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiO1xuXG4gICAgaWYgKGlzUG9zdFJlcGxhY2VyT2JqZWN0KSB7XG4gICAgICBjb25zdCBpc1ByaW1pdGl2ZVdyYXBwZXIgPVxuICAgICAgICB2YWwgaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgdmFsIGluc3RhbmNlb2YgU3RyaW5nIHx8XG4gICAgICAgIHZhbCBpbnN0YW5jZW9mIEJvb2xlYW47XG5cbiAgICAgIGlmIChpc1ByaW1pdGl2ZVdyYXBwZXIpIHtcbiAgICAgICAgdmFsID0gdmFsLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9O1xuXG4gIGNvbnN0IHJvb3RQcm9jZXNzZWQgPSBwcmVwYXJlVmFsKHsgXCJcIjogcm9vdFZhbHVlIH0sIFwiXCIsIHJvb3RWYWx1ZSk7XG5cbiAgaWYgKGlzVW5zdHJpbmdpZmlhYmxlKHJvb3RQcm9jZXNzZWQpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGlzUm9vdFByaW1pdGl2ZSA9XG4gICAgcm9vdFByb2Nlc3NlZCA9PT0gbnVsbCB8fCB0eXBlb2Ygcm9vdFByb2Nlc3NlZCAhPT0gXCJvYmplY3RcIjtcbiAgY29uc3QgaXNSb290TmF0aXZlUmF3SlNPTiA9IGlzUmF3SlNPTihyb290UHJvY2Vzc2VkKTtcblxuICBpZiAoaXNSb290UHJpbWl0aXZlIHx8IGlzUm9vdE5hdGl2ZVJhd0pTT04pIHtcbiAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmdpZnkocm9vdFByb2Nlc3NlZCk7XG4gIH1cblxuICBjb25zdCBjaHVua3MgPSBbXTtcbiAgbGV0IGxldmVsID0gMDtcblxuICBjb25zdCBzdGFjayA9IFtcbiAgICB7XG4gICAgICBwYXJlbnQ6IHsgXCJcIjogcm9vdFByb2Nlc3NlZCB9LFxuICAgICAga2V5OiBcIlwiLFxuICAgICAgdmFsOiByb290UHJvY2Vzc2VkLFxuICAgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheShyb290UHJvY2Vzc2VkKSxcbiAgICAgIGtleXM6IEFycmF5LmlzQXJyYXkocm9vdFByb2Nlc3NlZCkgPyBudWxsIDogT2JqZWN0LmtleXMocm9vdFByb2Nlc3NlZCksXG4gICAgICBpbmRleDogMCxcbiAgICAgIGZpcnN0OiB0cnVlLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KFtyb290UHJvY2Vzc2VkXSk7XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICBpZiAobm9kZS5pbmRleCA9PT0gMCkge1xuICAgICAgY2h1bmtzLnB1c2gobm9kZS5pc0FycmF5ID8gXCJbXCIgOiBcIntcIik7XG4gICAgICBsZXZlbCsrO1xuICAgIH1cblxuICAgIGxldCBpc0RvbmUgPSBmYWxzZTtcblxuICAgIGlmIChub2RlLmlzQXJyYXkpIHtcbiAgICAgIGlmIChub2RlLmluZGV4IDwgbm9kZS52YWwubGVuZ3RoKSB7XG4gICAgICAgIGlmICghbm9kZS5maXJzdCkgY2h1bmtzLnB1c2goXCIsXCIpO1xuXG4gICAgICAgIGlmIChzcGFjZSkgY2h1bmtzLnB1c2goXCJcXG5cIiArIHNwYWNlLnJlcGVhdChsZXZlbCkpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkUmF3ID0gbm9kZS52YWxbbm9kZS5pbmRleF07XG4gICAgICAgIGNvbnN0IGNoaWxkVmFsID0gcHJlcGFyZVZhbChub2RlLnZhbCwgU3RyaW5nKG5vZGUuaW5kZXgpLCBjaGlsZFJhdyk7XG5cbiAgICAgICAgaWYgKGlzVW5zdHJpbmdpZmlhYmxlKGNoaWxkVmFsKSkge1xuICAgICAgICAgIGNodW5rcy5wdXNoKFwibnVsbFwiKTtcbiAgICAgICAgICBub2RlLmZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzQ29tcGxleE9iamVjdCA9XG4gICAgICAgICAgICBjaGlsZFZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGRWYWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgICAgY29uc3QgaXNOYXRpdmVSYXcgPSBpc1Jhd0pTT04oY2hpbGRWYWwpO1xuXG4gICAgICAgICAgaWYgKGlzQ29tcGxleE9iamVjdCAmJiAhaXNOYXRpdmVSYXcpIHtcbiAgICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhjaGlsZFZhbCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKGNoaWxkVmFsKTtcblxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHBhcmVudDogbm9kZS52YWwsXG4gICAgICAgICAgICAgIGtleTogU3RyaW5nKG5vZGUuaW5kZXgpLFxuICAgICAgICAgICAgICB2YWw6IGNoaWxkVmFsLFxuICAgICAgICAgICAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKSxcbiAgICAgICAgICAgICAga2V5czogQXJyYXkuaXNBcnJheShjaGlsZFZhbCkgPyBudWxsIDogT2JqZWN0LmtleXMoY2hpbGRWYWwpLFxuICAgICAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAgICAgZmlyc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbm9kZS5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChvcmlnaW5hbFN0cmluZ2lmeShjaGlsZFZhbCkpO1xuICAgICAgICAgICAgbm9kZS5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNEb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKG5vZGUuaW5kZXggPCBub2RlLmtleXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGsgPSBub2RlLmtleXNbbm9kZS5pbmRleCsrXTtcblxuICAgICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0QnlBcnJheSA9IHByb3BlcnR5TGlzdCAmJiAhcHJvcGVydHlMaXN0LmhhcyhrKTtcblxuICAgICAgICBpZiAoaXNGaWx0ZXJlZE91dEJ5QXJyYXkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkUmF3ID0gbm9kZS52YWxba107XG4gICAgICAgIGNvbnN0IGNoaWxkVmFsID0gcHJlcGFyZVZhbChub2RlLnZhbCwgaywgY2hpbGRSYXcpO1xuXG4gICAgICAgIGlmIChpc1Vuc3RyaW5naWZpYWJsZShjaGlsZFZhbCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICghbm9kZS5maXJzdCkgY2h1bmtzLnB1c2goXCIsXCIpO1xuXG4gICAgICAgIGlmIChzcGFjZSkge1xuICAgICAgICAgIGNodW5rcy5wdXNoKFwiXFxuXCIgKyBzcGFjZS5yZXBlYXQobGV2ZWwpICsgb3JpZ2luYWxTdHJpbmdpZnkoaykgKyBcIjogXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rcy5wdXNoKG9yaWdpbmFsU3RyaW5naWZ5KGspICsgXCI6XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNDb21wbGV4T2JqZWN0ID1cbiAgICAgICAgICBjaGlsZFZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGRWYWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgIGNvbnN0IGlzTmF0aXZlUmF3ID0gaXNSYXdKU09OKGNoaWxkVmFsKTtcblxuICAgICAgICBpZiAoaXNDb21wbGV4T2JqZWN0ICYmICFpc05hdGl2ZVJhdykge1xuICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhjaGlsZFZhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZpc2l0ZWQuYWRkKGNoaWxkVmFsKTtcblxuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcGFyZW50OiBub2RlLnZhbCxcbiAgICAgICAgICAgIGtleTogayxcbiAgICAgICAgICAgIHZhbDogY2hpbGRWYWwsXG4gICAgICAgICAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKSxcbiAgICAgICAgICAgIGtleXM6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpID8gbnVsbCA6IE9iamVjdC5rZXlzKGNoaWxkVmFsKSxcbiAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgZmlyc3Q6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBub2RlLmZpcnN0ID0gZmFsc2U7XG5cbiAgICAgICAgICBicmVhazsgLy8gU3RvcCBjdXJyZW50IGxvb3AgbGV2ZWwgdG8gcHJvY2VzcyB0aGUgbmV3bHkgcHVzaGVkIHN0YWNrIG5vZGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaHVua3MucHVzaChvcmlnaW5hbFN0cmluZ2lmeShjaGlsZFZhbCkpO1xuICAgICAgICAgIG5vZGUuZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc05vZGVGdWxseVByb2Nlc3NlZCA9XG4gICAgICAgIG5vZGUuaW5kZXggPj0gbm9kZS5rZXlzLmxlbmd0aCAmJiBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9PT0gbm9kZTtcblxuICAgICAgaWYgKGlzTm9kZUZ1bGx5UHJvY2Vzc2VkKSB7XG4gICAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzRG9uZSkge1xuICAgICAgbGV2ZWwtLTtcblxuICAgICAgaWYgKCFub2RlLmZpcnN0ICYmIHNwYWNlKSBjaHVua3MucHVzaChcIlxcblwiICsgc3BhY2UucmVwZWF0KGxldmVsKSk7XG5cbiAgICAgIGNodW5rcy5wdXNoKG5vZGUuaXNBcnJheSA/IFwiXVwiIDogXCJ9XCIpO1xuICAgICAgdmlzaXRlZC5kZWxldGUobm9kZS52YWwpO1xuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNodW5rcy5qb2luKFwiXCIpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIEphdmFTY3JpcHQgdmFsdWUgdG8gYSBKU09OIHN0cmluZy5cbiAqXG4gKiBTdXBwb3J0cyBzZXJpYWxpemF0aW9uIG9mIEJpZ0ludCB2YWx1ZXMgdXNpbmcgdHdvIHN0cmF0ZWdpZXM6XG4gKiAxLiBDdXN0b20gZm9ybWF0IFwiMTIzblwiIFx1MjE5MiBcIjEyM1wiICh1bml2ZXJzYWwgZmFsbGJhY2spXG4gKiAyLiBOYXRpdmUgSlNPTi5yYXdKU09OKCkgKE5vZGUuanMgMjIrLCBmYXN0ZXN0KSB3aGVuIGF2YWlsYWJsZVxuICpcbiAqIEFsbCBvdGhlciB2YWx1ZXMgYXJlIHNlcmlhbGl6ZWQgZXhhY3RseSBsaWtlIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSgpLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBKU09OIHN0cmluZy5cbiAqIEBwYXJhbSB7UmVwbGFjZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbH0gW3JlcGxhY2VyXVxuICogQSBmdW5jdGlvbiB0aGF0IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN0cmluZ2lmaWNhdGlvbiBwcm9jZXNzLFxuICogb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy9udW1iZXJzIHRvIGluZGljYXRlIHByb3BlcnRpZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBbc3BhY2VdXG4gKiBBIHN0cmluZyBvciBudW1iZXIgdG8gc3BlY2lmeSBpbmRlbnRhdGlvbiBvciBwcmV0dHktcHJpbnRpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKi9cbmNvbnN0IEpTT05TdHJpbmdpZnkgPSAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN1cHBvcnRzUmF3SlNPTiA9IFwicmF3SlNPTlwiIGluIEpTT047XG5cbiAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmdpZnkoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAoa2V5LCB2YWwpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJiaWdpbnRcIikgcmV0dXJuIEpTT04ucmF3SlNPTih2YWwudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICBjb25zdCBoYXNGdW5jdGlvblJlcGxhY2VyID0gdHlwZW9mIHJlcGxhY2VyID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICAgICAgICBpZiAoaGFzRnVuY3Rpb25SZXBsYWNlcikgcmV0dXJuIHJlcGxhY2VyKGtleSwgdmFsKTtcblxuICAgICAgICAgIGNvbnN0IGlzS2V5SW5BcnJheVJlcGxhY2VyID1cbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVwbGFjZXIpICYmIHJlcGxhY2VyLmluY2x1ZGVzKGtleSk7XG5cbiAgICAgICAgICBpZiAoaXNLZXlJbkFycmF5UmVwbGFjZXIpIHJldHVybiB2YWw7XG5cbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBzcGFjZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG9yaWdpbmFsU3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpO1xuXG4gICAgY29uc3QgY29udmVydGVkVG9DdXN0b21KU09OID0gb3JpZ2luYWxTdHJpbmdpZnkoXG4gICAgICB2YWx1ZSxcbiAgICAgIChrZXksIHZhbCkgPT4ge1xuICAgICAgICBjb25zdCBpc05vaXNlID0gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiAmJiBub2lzZVZhbHVlLnRlc3QodmFsKTtcblxuICAgICAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7IC8vIE1hcmsgbm9pc2UgdmFsdWVzIHdpdGggYWRkaXRpb25hbCBcIm5cIiB0byBvZmZzZXQgdGhlIGRlbGV0aW9uIG9mIG9uZSBcIm5cIiBkdXJpbmcgdGhlIHByb2Nlc3NpbmdcblxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJiaWdpbnRcIikgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7XG5cbiAgICAgICAgY29uc3QgaGFzRnVuY3Rpb25SZXBsYWNlciA9IHR5cGVvZiByZXBsYWNlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICAgIGlmIChoYXNGdW5jdGlvblJlcGxhY2VyKSByZXR1cm4gcmVwbGFjZXIoa2V5LCB2YWwpO1xuXG4gICAgICAgIGNvbnN0IGlzS2V5SW5BcnJheVJlcGxhY2VyID1cbiAgICAgICAgICBBcnJheS5pc0FycmF5KHJlcGxhY2VyKSAmJiByZXBsYWNlci5pbmNsdWRlcyhrZXkpO1xuXG4gICAgICAgIGlmIChpc0tleUluQXJyYXlSZXBsYWNlcikgcmV0dXJuIHZhbDtcblxuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfSxcbiAgICAgIHNwYWNlLFxuICAgICk7XG5cbiAgICBjb25zdCBwcm9jZXNzZWRKU09OID0gY29udmVydGVkVG9DdXN0b21KU09OLnJlcGxhY2UoXG4gICAgICBiaWdJbnRzU3RyaW5naWZ5LFxuICAgICAgXCIkMSQyJDNcIixcbiAgICApOyAvLyBEZWxldGUgb25lIFwiblwiIG9mZiB0aGUgZW5kIG9mIGV2ZXJ5IEJpZ0ludCB2YWx1ZVxuXG4gICAgY29uc3QgZGVub2lzZWRKU09OID0gcHJvY2Vzc2VkSlNPTi5yZXBsYWNlKG5vaXNlU3RyaW5naWZ5LCBcIiQxJDIkM1wiKTsgLy8gUmVtb3ZlIG9uZSBcIm5cIiBvZmYgdGhlIGVuZCBvZiBldmVyeSBub2lzeSBzdHJpbmdcblxuICAgIHJldHVybiBkZW5vaXNlZEpTT047XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xuICAgICAgY29uc3QgY29udmVydGVkSlNPTiA9IHN0cmluZ2lmeUl0ZXJhdGl2ZWx5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpO1xuXG4gICAgICBpZiAoY29udmVydGVkSlNPTiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzdXBwb3J0c1Jhd0pTT04gPSBcInJhd0pTT05cIiBpbiBKU09OO1xuXG4gICAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSByZXR1cm4gY29udmVydGVkSlNPTjtcblxuICAgICAgY29uc3QgcHJvY2Vzc2VkSlNPTiA9IGNvbnZlcnRlZEpTT04ucmVwbGFjZShiaWdJbnRzU3RyaW5naWZ5LCBcIiQxJDIkM1wiKTtcblxuICAgICAgcmV0dXJuIHByb2Nlc3NlZEpTT04ucmVwbGFjZShub2lzZVN0cmluZ2lmeSwgXCIkMSQyJDNcIik7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGZlYXR1cmVDYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBEZXRlY3RzIGlmIHRoZSBjdXJyZW50IEpTT04ucGFyc2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgdGhlIGNvbnRleHQuc291cmNlIGZlYXR1cmUuXG4gKlxuICogVXNlcyB0b1N0cmluZygpIGZpbmdlcnByaW50aW5nIHRvIGNhY2hlIHJlc3VsdHMgYW5kIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHJ1bnRpbWVcbiAqIHJlcGxhY2VtZW50cyBvZiBKU09OLnBhcnNlIChwb2x5ZmlsbHMsIG1vY2tzLCBldGMuKS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBjb250ZXh0LnNvdXJjZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuY29uc3QgaXNDb250ZXh0U291cmNlU3VwcG9ydGVkID0gKCkgPT4ge1xuICBjb25zdCBwYXJzZUZpbmdlcnByaW50ID0gSlNPTi5wYXJzZS50b1N0cmluZygpO1xuXG4gIGlmIChmZWF0dXJlQ2FjaGUuaGFzKHBhcnNlRmluZ2VycHJpbnQpKSB7XG4gICAgcmV0dXJuIGZlYXR1cmVDYWNoZS5nZXQocGFyc2VGaW5nZXJwcmludCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoXG4gICAgICBcIjFcIixcbiAgICAgIChfLCBfXywgY29udGV4dCkgPT4gISFjb250ZXh0Py5zb3VyY2UgJiYgY29udGV4dC5zb3VyY2UgPT09IFwiMVwiLFxuICAgICk7XG4gICAgZmVhdHVyZUNhY2hlLnNldChwYXJzZUZpbmdlcnByaW50LCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCB7XG4gICAgZmVhdHVyZUNhY2hlLnNldChwYXJzZUZpbmdlcnByaW50LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogUmV2aXZlciBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGN1c3RvbS1mb3JtYXQgQmlnSW50IHN0cmluZ3MgYmFjayB0byBCaWdJbnQgdmFsdWVzLlxuICogQWxzbyBoYW5kbGVzIFwibm9pc2VcIiBzdHJpbmdzIHRoYXQgYWNjaWRlbnRhbGx5IG1hdGNoIHRoZSBCaWdJbnQgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkfSBrZXkgVGhlIG9iamVjdCBrZXkuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBiZWluZyBwYXJzZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIFBhcnNlIGNvbnRleHQgKGlmIHN1cHBvcnRlZCBieSBKU09OLnBhcnNlKS5cbiAqIEBwYXJhbSB7UmV2aXZlcn0gW3VzZXJSZXZpdmVyXSBVc2VyJ3MgY3VzdG9tIHJldml2ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7YW55fSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUuXG4gKi9cbmNvbnN0IGNvbnZlcnRNYXJrZWRCaWdJbnRzUmV2aXZlciA9IChrZXksIHZhbHVlLCBjb250ZXh0LCB1c2VyUmV2aXZlcikgPT4ge1xuICBjb25zdCBpc0N1c3RvbUZvcm1hdEJpZ0ludCA9XG4gICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIGN1c3RvbUZvcm1hdC50ZXN0KHZhbHVlKTtcblxuICBpZiAoaXNDdXN0b21Gb3JtYXRCaWdJbnQpIHJldHVybiBCaWdJbnQodmFsdWUuc2xpY2UoMCwgLTEpKTtcblxuICBjb25zdCBpc05vaXNlVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgbm9pc2VWYWx1ZS50ZXN0KHZhbHVlKTtcbiAgaWYgKGlzTm9pc2VWYWx1ZSkgcmV0dXJuIHZhbHVlLnNsaWNlKDAsIC0xKTtcblxuICBjb25zdCBoYXNVc2VyUmV2aXZlciA9IHR5cGVvZiB1c2VyUmV2aXZlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gIGlmICghaGFzVXNlclJldml2ZXIpIHJldHVybiB2YWx1ZTtcblxuICByZXR1cm4gdXNlclJldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIEZhc3QgSlNPTi5wYXJzZSBpbXBsZW1lbnRhdGlvbiAofjJ4IGZhc3RlciB0aGFuIGNsYXNzaWMgZmFsbGJhY2spLlxuICogVXNlcyBKU09OLnBhcnNlJ3MgY29udGV4dC5zb3VyY2UgZmVhdHVyZSB0byBkZXRlY3QgaW50ZWdlcnMgYW5kIGNvbnZlcnRcbiAqIGxhcmdlIG51bWJlcnMgZGlyZWN0bHkgdG8gQmlnSW50IHdpdGhvdXQgc3RyaW5nIG1hbmlwdWxhdGlvbi5cbiAqXG4gKiBEb2VzIG5vdCBzdXBwb3J0IGxlZ2FjeSBjdXN0b20gZm9ybWF0IGZyb20gdjEgb2YgdGhpcyBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IEpTT04gc3RyaW5nIHRvIHBhcnNlLlxuICogQHBhcmFtIHtSZXZpdmVyfSBbcmV2aXZlcl0gVHJhbnNmb3JtIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUuXG4gKiBAcmV0dXJucyB7YW55fSBQYXJzZWQgSmF2YVNjcmlwdCB2YWx1ZS5cbiAqL1xuY29uc3QgSlNPTlBhcnNlVjIgPSAodGV4dCwgcmV2aXZlcikgPT4ge1xuICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0LCAoa2V5LCB2YWx1ZSwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGlzTnVtYmVyID0gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlzT3V0T2ZCb3VuZHMgPVxuICAgICAgdmFsdWUgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCB2YWx1ZSA8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgIGNvbnN0IGlzQmlnTnVtYmVyID0gaXNOdW1iZXIgJiYgaXNPdXRPZkJvdW5kcztcbiAgICBjb25zdCBpc0ludCA9IGNvbnRleHQgJiYgaW50UmVnZXgudGVzdChjb250ZXh0LnNvdXJjZSk7XG4gICAgY29uc3QgaXNCaWdJbnQgPSBpc0JpZ051bWJlciAmJiBpc0ludDtcblxuICAgIGlmIChpc0JpZ0ludCkgcmV0dXJuIEJpZ0ludChjb250ZXh0LnNvdXJjZSk7XG5cbiAgICBjb25zdCBoYXNDdXN0b21SZXZpdmVyID0gdHlwZW9mIHJldml2ZXIgPT09IFwiZnVuY3Rpb25cIjtcblxuICAgIGlmICghaGFzQ3VzdG9tUmV2aXZlcikgcmV0dXJuIHZhbHVlO1xuXG4gICAgcmV0dXJuIHJldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuY29uc3QgTUFYX0lOVCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLnRvU3RyaW5nKCk7XG5jb25zdCBNQVhfRElHSVRTID0gTUFYX0lOVC5sZW5ndGg7XG5jb25zdCBzdHJpbmdzT3JMYXJnZU51bWJlcnMgPVxuICAvXCIoPzpcXFxcLnxbXlwiXSkqXCJ8LT8oMHxbMS05XVswLTldKikoXFwuWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8vZztcbmNvbnN0IG5vaXNlVmFsdWVXaXRoUXVvdGVzID0gL15cIi0/XFxkK24rXCIkLzsgLy8gTm9pc2UgLSBzdHJpbmdzIHRoYXQgbWF0Y2ggdGhlIGN1c3RvbSBmb3JtYXQgYmVmb3JlIGJlaW5nIGNvbnZlcnRlZCB0byBpdFxuXG4vKipcbiAqIEl0ZXJhdGl2ZWx5IHRyYXZlcnNlcyB0aGUgcGFyc2VkIG9iamVjdCBib3R0b20tdXAgKHBvc3Qtb3JkZXIpLFxuICogZW11bGF0aW5nIHRoZSBuYXRpdmUgSlNPTi5wYXJzZSByZXZpdmVyIGJlaGF2aW9yLlxuICogVGhpcyBhdm9pZHMgQ2FsbCBTdGFjayBvdmVyZmxvd3MgKFJhbmdlRXJyb3IpIG9uIGRlZXBseSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAqXG4gKiBAcGFyYW0ge2FueX0gcGFyc2VkIFRoZSBuYXRpdmVseSBwYXJzZWQgSlNPTiBvYmplY3QuXG4gKiBAcGFyYW0ge1Jldml2ZXJ9IFt1c2VyUmV2aXZlcl0gVXNlcidzIGN1c3RvbSByZXZpdmVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMge2FueX0gVGhlIGZ1bGx5IHByb2Nlc3NlZCBvYmplY3QuXG4gKi9cbmNvbnN0IGFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5ID0gKHBhcnNlZCwgdXNlclJldml2ZXIpID0+IHtcbiAgY29uc3Qgcm9vdEhvbGRlciA9IHsgXCJcIjogcGFyc2VkIH07XG4gIGNvbnN0IHN0YWNrID0gW3sgcGFyZW50OiByb290SG9sZGVyLCBrZXk6IFwiXCIsIHZpc2l0ZWQ6IGZhbHNlIH1dO1xuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKCFub2RlLnZpc2l0ZWQpIHtcbiAgICAgIG5vZGUudmlzaXRlZCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gbm9kZS5wYXJlbnRbbm9kZS5rZXldO1xuICAgICAgY29uc3QgaXNDb21wbGV4T2JqZWN0ID0gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xuXG4gICAgICBpZiAoaXNDb21wbGV4T2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGtleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHsgcGFyZW50OiB2YWx1ZSwga2V5OiBrZXlzW2ldLCB2aXNpdGVkOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHBhcmVudCwga2V5IH0gPSBub2RlO1xuICAgICAgbGV0IHZhbHVlID0gcGFyZW50W2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgaXNDdXN0b21Gb3JtYXRCaWdJbnQgPSBjdXN0b21Gb3JtYXQudGVzdCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGlzQ3VzdG9tRm9ybWF0QmlnSW50KSB7XG4gICAgICAgICAgdmFsdWUgPSBCaWdJbnQodmFsdWUuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpc05vaXNlID0gbm9pc2VWYWx1ZS50ZXN0KHZhbHVlKTtcblxuICAgICAgICAgIGlmIChpc05vaXNlKSB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNVc2VyUmV2aXZlciA9IHR5cGVvZiB1c2VyUmV2aXZlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICBpZiAoaGFzVXNlclJldml2ZXIpIHtcbiAgICAgICAgdmFsdWUgPSB1c2VyUmV2aXZlci5jYWxsKHBhcmVudCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRGVsZXRlZCA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0RlbGV0ZWQpIHtcbiAgICAgICAgZGVsZXRlIHBhcmVudFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3RIb2xkZXJbXCJcIl07XG59O1xuXG4vKipcbiAqIFByZS1wcm9jZXNzZXMgdGhlIEpTT04gc3RyaW5nIHRvIG1hcmsgbGFyZ2UgbnVtYmVycyB3aXRoIGFuICduJyBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHJhdyBKU09OIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzZXJpYWxpemVkIHN0cmluZyB3aXRoIG1hcmtlZCBCaWdJbnRzLlxuICovXG5jb25zdCBzZXJpYWxpemVCaWdJbnRzID0gKHRleHQpID0+IHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZShcbiAgICBzdHJpbmdzT3JMYXJnZU51bWJlcnMsXG4gICAgKG1hdGNoLCBkaWdpdHMsIGZyYWN0aW9uYWwsIGV4cG9uZW50aWFsKSA9PiB7XG4gICAgICBjb25zdCBpc1N0cmluZyA9IG1hdGNoWzBdID09PSAnXCInO1xuICAgICAgY29uc3QgaXNOb2lzZSA9IGlzU3RyaW5nICYmIG5vaXNlVmFsdWVXaXRoUXVvdGVzLnRlc3QobWF0Y2gpO1xuXG4gICAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIG1hdGNoLnN1YnN0cmluZygwLCBtYXRjaC5sZW5ndGggLSAxKSArICduXCInOyAvLyBNYXJrIG5vaXNlIHZhbHVlcyB3aXRoIGFkZGl0aW9uYWwgXCJuXCIgdG8gb2Zmc2V0IHRoZSBkZWxldGlvbiBvZiBvbmUgXCJuXCIgZHVyaW5nIHRoZSBwcm9jZXNzaW5nXG5cbiAgICAgIGNvbnN0IGhhc0ZyYWN0aW9uYWxPckV4cG9uZW50aWFsID0gZnJhY3Rpb25hbCB8fCBleHBvbmVudGlhbDtcblxuICAgICAgLy8gV2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMsIHdlIGNhbiBjb3JyZWN0bHkgdXNlIGxleGljb2dyYXBoaWNhbCBjb21wYXJpc29uIHRvIGRvIGEgbnVtZXJpYyBjb21wYXJpc29uXG4gICAgICBjb25zdCBpc0xlc3NUaGFuTWF4U2FmZUludCA9XG4gICAgICAgIGRpZ2l0cyAmJlxuICAgICAgICAoZGlnaXRzLmxlbmd0aCA8IE1BWF9ESUdJVFMgfHxcbiAgICAgICAgICAoZGlnaXRzLmxlbmd0aCA9PT0gTUFYX0RJR0lUUyAmJiBkaWdpdHMgPD0gTUFYX0lOVCkpO1xuXG4gICAgICBjb25zdCBpc1N0YW5kYXJkVmFsdWUgPVxuICAgICAgICBpc1N0cmluZyB8fCBoYXNGcmFjdGlvbmFsT3JFeHBvbmVudGlhbCB8fCBpc0xlc3NUaGFuTWF4U2FmZUludDtcblxuICAgICAgaWYgKGlzU3RhbmRhcmRWYWx1ZSkgcmV0dXJuIG1hdGNoO1xuXG4gICAgICByZXR1cm4gJ1wiJyArIG1hdGNoICsgJ25cIic7XG4gICAgfSxcbiAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBKU09OIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCB2YWx1ZS5cbiAqXG4gKiBTdXBwb3J0cyBwYXJzaW5nIG9mIGxhcmdlIGludGVnZXJzIHVzaW5nIHR3byBzdHJhdGVnaWVzOlxuICogMS4gQ2xhc3NpYyBmYWxsYmFjazogTWFya3MgbGFyZ2UgbnVtYmVycyB3aXRoIFwiMTIzblwiIGZvcm1hdCwgdGhlbiBjb252ZXJ0cyB0byBCaWdJbnRcbiAqIDIuIEZhc3QgcGF0aCAoSlNPTlBhcnNlVjIpOiBVc2VzIGNvbnRleHQuc291cmNlIGZlYXR1cmUgKH4yeCBmYXN0ZXIpIHdoZW4gYXZhaWxhYmxlXG4gKlxuICogQWxsIG90aGVyIEpTT04gdmFsdWVzIGFyZSBwYXJzZWQgZXhhY3RseSBsaWtlIG5hdGl2ZSBKU09OLnBhcnNlKCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgQSB2YWxpZCBKU09OIHN0cmluZy5cbiAqIEBwYXJhbSB7UmV2aXZlcn0gW3Jldml2ZXJdXG4gKiBBIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2ggbWVtYmVyXG4gKiBvZiB0aGUgb2JqZWN0LiBJZiBhIG1lbWJlciBjb250YWlucyBuZXN0ZWQgb2JqZWN0cywgdGhlIG5lc3RlZCBvYmplY3RzIGFyZVxuICogdHJhbnNmb3JtZWQgYmVmb3JlIHRoZSBwYXJlbnQgb2JqZWN0IGlzLlxuICogQHJldHVybnMge2FueX0gVGhlIHBhcnNlZCBKYXZhU2NyaXB0IHZhbHVlLlxuICogQHRocm93cyB7U3ludGF4RXJyb3J9IElmIHRleHQgaXMgbm90IHZhbGlkIEpTT04uXG4gKi9cbmNvbnN0IEpTT05QYXJzZSA9ICh0ZXh0LCByZXZpdmVyKSA9PiB7XG4gIGlmICghdGV4dCkgcmV0dXJuIG9yaWdpbmFsUGFyc2UodGV4dCwgcmV2aXZlcik7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaXNDb250ZXh0U291cmNlU3VwcG9ydGVkKCkpIHJldHVybiBKU09OUGFyc2VWMih0ZXh0LCByZXZpdmVyKTsgLy8gU2hvcnRjdXQgdG8gYSBmYXN0ZXIgKDJ4KSBhbmQgc2ltcGxlciB2ZXJzaW9uXG5cbiAgICAvLyBGaW5kIGFuZCBtYXJrIGJpZyBudW1iZXJzIHdpdGggXCJuXCJcbiAgICBjb25zdCBzZXJpYWxpemVkRGF0YSA9IHNlcmlhbGl6ZUJpZ0ludHModGV4dCk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWxQYXJzZShzZXJpYWxpemVkRGF0YSwgKGtleSwgdmFsdWUsIGNvbnRleHQpID0+XG4gICAgICBjb252ZXJ0TWFya2VkQmlnSW50c1Jldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCwgcmV2aXZlciksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSB7XG4gICAgICBjb25zdCBzZXJpYWxpemVkRGF0YSA9IHNlcmlhbGl6ZUJpZ0ludHModGV4dCk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBvcmlnaW5hbFBhcnNlKHNlcmlhbGl6ZWREYXRhKTtcblxuICAgICAgcmV0dXJuIGFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5KHBhcnNlZCwgcmV2aXZlcik7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCB7IEpTT05TdHJpbmdpZnksIEpTT05QYXJzZSB9O1xuIiwgImNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgbmFtZTtcbiAgLyoqXG4gICAqIGh0dHAgc3RhdHVzIGNvZGVcbiAgICovXG4gIHN0YXR1cztcbiAgLyoqXG4gICAqIFJlcXVlc3Qgb3B0aW9ucyB0aGF0IGxlYWQgdG8gdGhlIGVycm9yLlxuICAgKi9cbiAgcmVxdWVzdDtcbiAgLyoqXG4gICAqIFJlc3BvbnNlIG9iamVjdCBpZiBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxuICAgKi9cbiAgcmVzcG9uc2U7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlOiBvcHRpb25zLmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBOdW1iZXIucGFyc2VJbnQoc3RhdHVzQ29kZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih0aGlzLnN0YXR1cykpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIGVsc2UgLS0gQHByZXNlcnZlIC0tIEJ1ZyB3aXRoIHZpdGVzdCBjb3ZlcmFnZSB3aGVyZSBpdCBzZWVzIGFuIGVsc2UgYnJhbmNoIHRoYXQgZG9lc24ndCBleGlzdCAqL1xuICAgIGlmIChcInJlc3BvbnNlXCIgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0KTtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgcmVxdWVzdENvcHkuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLCB7XG4gICAgICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24ucmVwbGFjZShcbiAgICAgICAgICAvKD88ISApIC4qJC8sXG4gICAgICAgICAgXCIgW1JFREFDVEVEXVwiXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXF1ZXN0Q29weS51cmwgPSByZXF1ZXN0Q29weS51cmwucmVwbGFjZSgvXFxiY2xpZW50X3NlY3JldD1cXHcrL2csIFwiY2xpZW50X3NlY3JldD1bUkVEQUNURURdXCIpLnJlcGxhY2UoL1xcYmFjY2Vzc190b2tlbj1cXHcrL2csIFwiYWNjZXNzX3Rva2VuPVtSRURBQ1RFRF1cIik7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdENvcHk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIFJlcXVlc3RFcnJvclxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmltcG9ydCB7IHJlcXVlc3QgYXMgUmVxdWVzdDIgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBSZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2Vycm9yLmpzXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxuYCArIGRhdGEuZXJyb3JzLm1hcCgoZSkgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG52YXIgR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVxdWVzdDIsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDI7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnM7XG4gICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgfVxuICBuYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiO1xuICBlcnJvcnM7XG4gIGRhdGE7XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIE5PTl9WQVJJQUJMRV9PUFRJT05TID0gW1xuICBcIm1ldGhvZFwiLFxuICBcImJhc2VVcmxcIixcbiAgXCJ1cmxcIixcbiAgXCJoZWFkZXJzXCIsXG4gIFwicmVxdWVzdFwiLFxuICBcInF1ZXJ5XCIsXG4gIFwibWVkaWFUeXBlXCIsXG4gIFwib3BlcmF0aW9uTmFtZVwiXG5dO1xudmFyIEZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TID0gW1wicXVlcnlcIiwgXCJtZXRob2RcIiwgXCJ1cmxcIl07XG52YXIgR0hFU19WM19TVUZGSVhfUkVHRVggPSAvXFwvYXBpXFwvdjNcXC8/JC87XG5mdW5jdGlvbiBncmFwaHFsKHJlcXVlc3QyLCBxdWVyeSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgXCJxdWVyeVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKGBbQG9jdG9raXQvZ3JhcGhxbF0gXCJxdWVyeVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCFGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBbQG9jdG9raXQvZ3JhcGhxbF0gXCIke2tleX1cIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gT2JqZWN0LmFzc2lnbih7IHF1ZXJ5IH0sIG9wdGlvbnMpIDogcXVlcnk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmtleXMoXG4gICAgcGFyc2VkT3B0aW9uc1xuICApLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICBpZiAoTk9OX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoIXJlc3VsdC52YXJpYWJsZXMpIHtcbiAgICAgIHJlc3VsdC52YXJpYWJsZXMgPSB7fTtcbiAgICB9XG4gICAgcmVzdWx0LnZhcmlhYmxlc1trZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbiAgY29uc3QgYmFzZVVybCA9IHBhcnNlZE9wdGlvbnMuYmFzZVVybCB8fCByZXF1ZXN0Mi5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsO1xuICBpZiAoR0hFU19WM19TVUZGSVhfUkVHRVgudGVzdChiYXNlVXJsKSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnVybCA9IGJhc2VVcmwucmVwbGFjZShHSEVTX1YzX1NVRkZJWF9SRUdFWCwgXCIvYXBpL2dyYXBocWxcIik7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3QyKHJlcXVlc3RPcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9ycykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEdyYXBocWxSZXNwb25zZUVycm9yKFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcmVzcG9uc2UuZGF0YVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocmVxdWVzdDIsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0Mi5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IChxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBncmFwaHFsKG5ld1JlcXVlc3QsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIG5ld1JlcXVlc3QpLFxuICAgIGVuZHBvaW50OiBuZXdSZXF1ZXN0LmVuZHBvaW50XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBncmFwaHFsMiA9IHdpdGhEZWZhdWx0cyhyZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG5leHBvcnQge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcixcbiAgZ3JhcGhxbDIgYXMgZ3JhcGhxbCxcbiAgd2l0aEN1c3RvbVJlcXVlc3Rcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2lzLWp3dC5qc1xudmFyIGI2NHVybCA9IFwiKD86W2EtekEtWjAtOV8tXSspXCI7XG52YXIgc2VwID0gXCJcXFxcLlwiO1xudmFyIGp3dFJFID0gbmV3IFJlZ0V4cChgXiR7YjY0dXJsfSR7c2VwfSR7YjY0dXJsfSR7c2VwfSR7YjY0dXJsfSRgKTtcbnZhciBpc0pXVCA9IGp3dFJFLnRlc3QuYmluZChqd3RSRSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9hdXRoLmpzXG5hc3luYyBmdW5jdGlvbiBhdXRoKHRva2VuKSB7XG4gIGNvbnN0IGlzQXBwID0gaXNKV1QodG9rZW4pO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IHRva2VuLnN0YXJ0c1dpdGgoXCJ2MS5cIikgfHwgdG9rZW4uc3RhcnRzV2l0aChcImdoc19cIik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gdG9rZW4uc3RhcnRzV2l0aChcImdodV9cIik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtYXV0aG9yaXphdGlvbi1wcmVmaXguanNcbmZ1bmN0aW9uIHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKSB7XG4gIGlmICh0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGBiZWFyZXIgJHt0b2tlbn1gO1xuICB9XG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaG9vay5qc1xuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKFxuICAgIHJvdXRlLFxuICAgIHBhcmFtZXRlcnNcbiAgKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aDIodG9rZW4pIHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBObyB0b2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBUb2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoIGlzIG5vdCBhIHN0cmluZ1wiXG4gICAgKTtcbiAgfVxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG5leHBvcnQge1xuICBjcmVhdGVUb2tlbkF1dGhcbn07XG4iLCAiY29uc3QgVkVSU0lPTiA9IFwiNy4wLjZcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5pbXBvcnQgSG9vayBmcm9tIFwiYmVmb3JlLWFmdGVyLWhvb2tcIjtcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuaW1wb3J0IHsgd2l0aEN1c3RvbVJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvZ3JhcGhxbFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9rZW5BdXRoIH0gZnJvbSBcIkBvY3Rva2l0L2F1dGgtdG9rZW5cIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcbmNvbnN0IGNvbnNvbGVXYXJuID0gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG5jb25zdCBjb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIobG9nZ2VyID0ge30pIHtcbiAgaWYgKHR5cGVvZiBsb2dnZXIuZGVidWcgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5kZWJ1ZyA9IG5vb3A7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIuaW5mbyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmluZm8gPSBub29wO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLndhcm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci53YXJuID0gY29uc29sZVdhcm47XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIuZXJyb3IgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5lcnJvciA9IGNvbnNvbGVFcnJvcjtcbiAgfVxuICByZXR1cm4gbG9nZ2VyO1xufVxuY29uc3QgdXNlckFnZW50VHJhaWwgPSBgb2N0b2tpdC1jb3JlLmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gO1xuY2xhc3MgT2N0b2tpdCB7XG4gIHN0YXRpYyBWRVJTSU9OID0gVkVSU0lPTjtcbiAgc3RhdGljIGRlZmF1bHRzKGRlZmF1bHRzKSB7XG4gICAgY29uc3QgT2N0b2tpdFdpdGhEZWZhdWx0cyA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzBdIHx8IHt9O1xuICAgICAgICBpZiAodHlwZW9mIGRlZmF1bHRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzdXBlcihkZWZhdWx0cyhvcHRpb25zKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMudXNlckFnZW50ICYmIGRlZmF1bHRzLnVzZXJBZ2VudCA/IHtcbiAgICAgICAgICAgICAgdXNlckFnZW50OiBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHtkZWZhdWx0cy51c2VyQWdlbnR9YFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT2N0b2tpdFdpdGhEZWZhdWx0cztcbiAgfVxuICBzdGF0aWMgcGx1Z2lucyA9IFtdO1xuICAvKipcbiAgICogQXR0YWNoIGEgcGx1Z2luIChvciBtYW55KSB0byB5b3VyIE9jdG9raXQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IEFQSSA9IE9jdG9raXQucGx1Z2luKHBsdWdpbjEsIHBsdWdpbjIsIHBsdWdpbjMsIC4uLilcbiAgICovXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgc3RhdGljIHBsdWdpbnMgPSBjdXJyZW50UGx1Z2lucy5jb25jYXQoXG4gICAgICAgIG5ld1BsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKVxuICAgICAgKTtcbiAgICB9O1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGhvb2sgPSBuZXcgSG9vay5Db2xsZWN0aW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdERlZmF1bHRzID0ge1xuICAgICAgYmFzZVVybDogcmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXF1ZXN0OiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QsIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCB1c2FnZSBvbmx5LCBubyBuZWVkIHRvIHR5cGVcbiAgICAgICAgaG9vazogaG9vay5iaW5kKG51bGwsIFwicmVxdWVzdFwiKVxuICAgICAgfSksXG4gICAgICBtZWRpYVR5cGU6IHtcbiAgICAgICAgcHJldmlld3M6IFtdLFxuICAgICAgICBmb3JtYXQ6IFwiXCJcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widXNlci1hZ2VudFwiXSA9IG9wdGlvbnMudXNlckFnZW50ID8gYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7dXNlckFnZW50VHJhaWx9YCA6IHVzZXJBZ2VudFRyYWlsO1xuICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wcmV2aWV3cykge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG9wdGlvbnMucHJldmlld3M7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRpbWVab25lKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInRpbWUtem9uZVwiXSA9IG9wdGlvbnMudGltZVpvbmU7XG4gICAgfVxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmdyYXBocWwgPSB3aXRoQ3VzdG9tUmVxdWVzdCh0aGlzLnJlcXVlc3QpLmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5sb2cgPSBjcmVhdGVMb2dnZXIob3B0aW9ucy5sb2cpO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGNyZWF0ZVRva2VuQXV0aChvcHRpb25zLmF1dGgpO1xuICAgICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgYXV0aFN0cmF0ZWd5LCAuLi5vdGhlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBhdXRoID0gYXV0aFN0cmF0ZWd5KFxuICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcbiAgICAgICAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICAgICAgICAvLyB3ZSBwYXNzIHRoZSBjdXJyZW50IG9jdG9raXQgaW5zdGFuY2UgYXMgd2VsbCBhcyBpdHMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgICAgICAgLy8gdG8gYWxsb3cgZm9yIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWdpZXMgdGhhdCByZXR1cm4gYSBuZXcgb2N0b2tpdCBpbnN0YW5jZVxuICAgICAgICAgICAgLy8gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaW50ZXJuYWwgc3RhdGUgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGUgb3JpZ2luYWxcbiAgICAgICAgICAgIC8vIHJlcXVpcmVtZW50IGZvciB0aGlzIHdhcyB0aGUgXCJldmVudC1vY3Rva2l0XCIgYXV0aGVudGljYXRpb24gc3RyYXRlZ3lcbiAgICAgICAgICAgIC8vIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9ib3Qvb2N0b2tpdC1hdXRoLXByb2JvdC5cbiAgICAgICAgICAgIG9jdG9raXQ6IHRoaXMsXG4gICAgICAgICAgICBvY3Rva2l0T3B0aW9uczogb3RoZXJPcHRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25zLmF1dGhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzQ29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNsYXNzQ29uc3RydWN0b3IucGx1Z2luc1tpXSh0aGlzLCBvcHRpb25zKSk7XG4gICAgfVxuICB9XG4gIC8vIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3RvclxuICByZXF1ZXN0O1xuICBncmFwaHFsO1xuICBsb2c7XG4gIGhvb2s7XG4gIC8vIFRPRE86IHR5cGUgYG9jdG9raXQuYXV0aGAgYmFzZWQgb24gcGFzc2VkIG9wdGlvbnMuYXV0aFN0cmF0ZWd5XG4gIGF1dGg7XG59XG5leHBvcnQge1xuICBPY3Rva2l0XG59O1xuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxNy4wLjBcIjtcbiIsICJpbXBvcnQgdHlwZSB7IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmNvbnN0IEVuZHBvaW50czogRW5kcG9pbnRzRGVmYXVsdHNBbmREZWNvcmF0aW9ucyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgYWRkUmVwb0FjY2Vzc1RvU2VsZkhvc3RlZFJ1bm5lckdyb3VwSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiLFxuICAgIF0sXG4gICAgY2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiLFxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPcmdWYXJpYWJsZTogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvVmFyaWFibGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVdvcmtmbG93RGlzcGF0Y2g6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFydGlmYWN0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ3VzdG9tSW1hZ2VGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVDdXN0b21JbWFnZVZlcnNpb25Gcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9L3ZlcnNpb25zL3t2ZXJzaW9ufVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW46IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJ0aWZhY3Q6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIixcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiLFxuICAgIF0sXG4gICAgZm9yY2VDYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZm9yY2UtY2FuY2VsXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIixcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRDdXN0b21JbWFnZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy9pbWFnZXMvY3VzdG9tL3tpbWFnZV9kZWZpbml0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Q3VzdG9tSW1hZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9L3ZlcnNpb25zL3t2ZXJzaW9ufVwiLFxuICAgIF0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0dpdGh1Yk93bmVkSW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9naXRodWItb3duZWRcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNMaW1pdHNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbGltaXRzXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzTWFjaGluZVNwZWNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL21hY2hpbmUtc2l6ZXNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQYXJ0bmVySW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9wYXJ0bmVyXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzUGxhdGZvcm1zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3BsYXRmb3Jtc1wiLFxuICAgIF0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1ZhcmlhYmxlOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfSxcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCIsXG4gICAgXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW5Vc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEN1c3RvbUltYWdlVmVyc2lvbnNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2N1c3RvbS97aW1hZ2VfZGVmaW5pdGlvbl9pZH0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RDdXN0b21JbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2N1c3RvbVwiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RHaXRodWJIb3N0ZWRSdW5uZXJzSW5Hcm91cEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0SG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0T3JnVmFyaWFibGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25TZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5BcnRpZmFjdHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIixcbiAgICBdLFxuICAgIHJlUnVuV29ya2Zsb3c6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93RmFpbGVkSm9iczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCIsXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc0RvbmU6IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIlBVVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcXVlc3RzRm9yQXV0aGVudGljYXRlZEFwcDogW1xuICAgICAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl0sXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQmlsbGluZ1ByZW1pdW1SZXF1ZXN0VXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcHJlbWl1bV9yZXF1ZXN0L3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nUHJlbWl1bVJlcXVlc3RVc2FnZVJlcG9ydFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcHJlbWl1bV9yZXF1ZXN0L3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nVXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkJpbGxpbmdVc2FnZVJlcG9ydFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiLFxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiLFxuICAgIF0sXG4gIH0sXG4gIGNhbXBhaWduczoge1xuICAgIGNyZWF0ZUNhbXBhaWduOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiXSxcbiAgICBkZWxldGVDYW1wYWlnbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NhbXBhaWducy97Y2FtcGFpZ25fbnVtYmVyfVwiXSxcbiAgICBnZXRDYW1wYWlnblN1bW1hcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9jYW1wYWlnbnMve2NhbXBhaWduX251bWJlcn1cIl0sXG4gICAgbGlzdE9yZ0NhbXBhaWduczogW1wiR0VUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiXSxcbiAgICB1cGRhdGVDYW1wYWlnbjogW1wiUEFUQ0ggL29yZ3Mve29yZ30vY2FtcGFpZ25zL3tjYW1wYWlnbl9udW1iZXJ9XCJdLFxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiLFxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3ByZWZlcmVuY2VzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBjb21taXRBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXgvY29tbWl0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2ZpeDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBjcmVhdGVWYXJpYW50QW5hbHlzaXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5hbHlzaXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfSxcbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRBdXRvZml4OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeFwiLFxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGdldFZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzUmVwb1Rhc2s6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzL3tjb2RlcWxfdmFyaWFudF9hbmFseXNpc19pZH0vcmVwb3Mve3JlcG9fb3duZXJ9L3tyZXBvX25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCIsXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl0sXG4gIH0sXG4gIGNvZGVTZWN1cml0eToge1xuICAgIGF0dGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGF0dGFjaEVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiXSxcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQT1NUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZXRhY2hDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RldGFjaFwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25Gb3JSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zZWN1cml0eS1jb25maWd1cmF0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0ZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGdldERlZmF1bHRDb25maWd1cmF0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvc2l0b3JpZXNGb3JDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0U2luZ2xlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBzZXRDb25maWd1cmF0aW9uQXNEZWZhdWx0Rm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGNvZGVzT2ZDb25kdWN0OiB7XG4gICAgZ2V0QWxsQ29kZXNPZkNvbmR1Y3Q6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdFwiXSxcbiAgICBnZXRDb25kdWN0Q29kZTogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0L3trZXl9XCJdLFxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvckRldmNvbnRhaW5lcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvcGVybWlzc2lvbnNfY2hlY2tcIixcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCIsXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZ2V0RXhwb3J0RGV0YWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGxpc3RJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IG9yZ19pZDogXCJvcmdcIiB9IH0sXG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiLFxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIixcbiAgICBdLFxuICAgIHVwZGF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclRlYW1zOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCIsXG4gICAgXSxcbiAgICBsaXN0Q29waWxvdFNlYXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCJdLFxuICB9LFxuICBjcmVkZW50aWFsczogeyByZXZva2U6IFtcIlBPU1QgL2NyZWRlbnRpYWxzL3Jldm9rZVwiXSB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXBvc2l0b3J5QWNjZXNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnfS9kZXBlbmRhYm90L3JlcG9zaXRvcnktYWNjZXNzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3J5QWNjZXNzRGVmYXVsdExldmVsOiBbXG4gICAgICBcIlBVVCAvb3JnYW5pemF0aW9ucy97b3JnfS9kZXBlbmRhYm90L3JlcG9zaXRvcnktYWNjZXNzL2RlZmF1bHQtbGV2ZWxcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXBvc2l0b3J5QWNjZXNzRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdhbml6YXRpb25zL3tvcmd9L2RlcGVuZGFib3QvcmVwb3NpdG9yeS1hY2Nlc3NcIixcbiAgICBdLFxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIixcbiAgICBdLFxuICAgIGRpZmZSYW5nZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXSxcbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZW50ZXJwcmlzZVRlYW1NZW1iZXJzaGlwczoge1xuICAgIGFkZDogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBidWxrQWRkOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy9hZGRcIixcbiAgICBdLFxuICAgIGJ1bGtSZW1vdmU6IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzL3JlbW92ZVwiLFxuICAgIF0sXG4gICAgZ2V0OiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzXCJdLFxuICAgIHJlbW92ZTogW1xuICAgICAgXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgZW50ZXJwcmlzZVRlYW1Pcmdhbml6YXRpb25zOiB7XG4gICAgYWRkOiBbXG4gICAgICBcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMve29yZ31cIixcbiAgICBdLFxuICAgIGJ1bGtBZGQ6IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMvYWRkXCIsXG4gICAgXSxcbiAgICBidWxrUmVtb3ZlOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9vcmdhbml6YXRpb25zL3JlbW92ZVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMve29yZ31cIixcbiAgICBdLFxuICAgIGdldEFzc2lnbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve2VudGVycHJpc2UtdGVhbX0vb3JnYW5pemF0aW9ucy97b3JnfVwiLFxuICAgIF0sXG4gICAgZ2V0QXNzaWdubWVudHM6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve2VudGVycHJpc2UtdGVhbX0vb3JnYW5pemF0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIGVudGVycHJpc2VUZWFtczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtc1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIGdpc3RzOiB7XG4gICAgY2hlY2tJc1N0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9naXN0c1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZm9yazogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGdldDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldFJldmlzaW9uOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS97c2hhfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2dpc3RzXCJdLFxuICAgIGxpc3RDb21tZW50czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvZ2lzdHMvcHVibGljXCJdLFxuICAgIGxpc3RTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3N0YXJyZWRcIl0sXG4gICAgc3RhcjogW1wiUFVUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1bnN0YXI6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICB9LFxuICBnaXQ6IHtcbiAgICBjcmVhdGVCbG9iOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnNcIl0sXG4gICAgY3JlYXRlQ29tbWl0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0c1wiXSxcbiAgICBjcmVhdGVSZWY6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzXCJdLFxuICAgIGNyZWF0ZVRhZzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3NcIl0sXG4gICAgY3JlYXRlVHJlZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzXCJdLFxuICAgIGRlbGV0ZVJlZjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgICBnZXRCbG9iOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9icy97ZmlsZV9zaGF9XCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0cy97Y29tbWl0X3NoYX1cIl0sXG4gICAgZ2V0UmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWYve3JlZn1cIl0sXG4gICAgZ2V0VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzL3t0YWdfc2hhfVwiXSxcbiAgICBnZXRUcmVlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlcy97dHJlZV9zaGF9XCJdLFxuICAgIGxpc3RNYXRjaGluZ1JlZnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L21hdGNoaW5nLXJlZnMve3JlZn1cIl0sXG4gICAgdXBkYXRlUmVmOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdLFxuICB9LFxuICBob3N0ZWRDb21wdXRlOiB7XG4gICAgY3JlYXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVOZXR3b3JrQ29uZmlndXJhdGlvbkZyb21Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldE5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXROZXR3b3JrU2V0dGluZ3NGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstc2V0dGluZ3Mve25ldHdvcmtfc2V0dGluZ3NfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0TmV0d29ya0NvbmZpZ3VyYXRpb25zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICB1cGRhdGVOZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgaW50ZXJhY3Rpb25zOiB7XG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwiZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gIH0sXG4gIGlzc3Vlczoge1xuICAgIGFkZEFzc2lnbmVlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCIsXG4gICAgXSxcbiAgICBhZGRCbG9ja2VkQnlEZXBlbmRlbmN5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tlZF9ieVwiLFxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGFkZFN1Yklzc3VlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlcy97YXNzaWduZWV9XCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWRUb0lzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlcy97YXNzaWduZWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBnZXRQYXJlbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3BhcmVudFwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3REZXBlbmRlbmNpZXNCbG9ja2VkQnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnlcIixcbiAgICBdLFxuICAgIGxpc3REZXBlbmRlbmNpZXNCbG9ja2luZzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tpbmdcIixcbiAgICBdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbGlzdFN1Yklzc3VlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBsb2NrOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHJlbW92ZUFsbExhYmVsczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIHJlbW92ZURlcGVuZGVuY3lCbG9ja2VkQnk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnkve2lzc3VlX2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3ViSXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3VlXCIsXG4gICAgXSxcbiAgICByZXByaW9yaXRpemVTdWJJc3N1ZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZXMvcHJpb3JpdHlcIixcbiAgICBdLFxuICAgIHNldExhYmVsczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIHVubG9jazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlTGFiZWw6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHVwZGF0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXSxcbiAgfSxcbiAgbWFya2Rvd246IHtcbiAgICByZW5kZXI6IFtcIlBPU1QgL21hcmtkb3duXCJdLFxuICAgIHJlbmRlclJhdzogW1xuICAgICAgXCJQT1NUIC9tYXJrZG93bi9yYXdcIixcbiAgICAgIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIiB9IH0sXG4gICAgXSxcbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdLFxuICB9LFxuICBtaWdyYXRpb25zOiB7XG4gICAgZGVsZXRlQXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGdldEFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJtaWdyYXRpb25zXCIsIFwibGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCIsXG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIixcbiAgICBdLFxuICB9LFxuICBvaWRjOiB7XG4gICAgZ2V0T2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICAgIHVwZGF0ZU9pZGNDdXN0b21TdWJUZW1wbGF0ZUZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgfSxcbiAgb3Jnczoge1xuICAgIGFkZFNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5vcmdzLmFkZFNlY3VyaXR5TWFuYWdlclRlYW0oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL3NlY3VyaXR5LW1hbmFnZXJzI2FkZC1hLXNlY3VyaXR5LW1hbmFnZXItdGVhbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFzc2lnblRlYW1Ub09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfS97cm9sZV9pZH1cIixcbiAgICBdLFxuICAgIGFzc2lnblVzZXJUb09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlQXJ0aWZhY3RTdG9yYWdlUmVjb3JkOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYXJ0aWZhY3RzL21ldGFkYXRhL3N0b3JhZ2UtcmVjb3JkXCIsXG4gICAgXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZUlzc3VlVHlwZTogW1wiUE9TVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JPcmdzQ3JlYXRlT3JVcGRhdGVPcmdhbml6YXRpb25WYWx1ZXM6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ2FuaXphdGlvbnMve29yZ30vb3JnLXByb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yT3Jnc0dldE9yZ2FuaXphdGlvblZhbHVlczogW1xuICAgICAgXCJHRVQgL29yZ2FuaXphdGlvbnMve29yZ30vb3JnLXByb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NDcmVhdGVPclVwZGF0ZU9yZ2FuaXphdGlvbkRlZmluaXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlT3JnYW5pemF0aW9uRGVmaW5pdGlvbnM6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlT3JnYW5pemF0aW9uVmFsdWVzOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NEZWxldGVPcmdhbml6YXRpb25EZWZpbml0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NHZXRPcmdhbml6YXRpb25EZWZpbml0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NHZXRPcmdhbml6YXRpb25EZWZpbml0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0dldE9yZ2FuaXphdGlvblZhbHVlczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J1bGs6IFtcIlBPU1QgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL2RlbGV0ZS1yZXF1ZXN0XCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy97YXR0ZXN0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBdHRlc3RhdGlvbnNCeVN1YmplY3REaWdlc3Q6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy9kaWdlc3Qve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSXNzdWVUeXBlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUltbXV0YWJsZVJlbGVhc2VzT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlU2VsZWN0ZWRSZXBvc2l0b3J5SW1tdXRhYmxlUmVsZWFzZXNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRJbW11dGFibGVSZWxlYXNlc1NldHRpbmdzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIGdldEltbXV0YWJsZVJlbGVhc2VzU2V0dGluZ3NSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRIaXN0b3J5OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIl0sXG4gICAgZ2V0T3JnUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5L3t2ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEFydGlmYWN0U3RvcmFnZVJlY29yZHM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FydGlmYWN0cy97c3ViamVjdF9kaWdlc3R9L21ldGFkYXRhL3N0b3JhZ2UtcmVjb3Jkc1wiLFxuICAgIF0sXG4gICAgbGlzdEF0dGVzdGF0aW9uUmVwb3NpdG9yaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uc0J1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hdHRlc3RhdGlvbnMvYnVsay1saXN0ez9wZXJfcGFnZSxiZWZvcmUsYWZ0ZXJ9XCIsXG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RGYWlsZWRJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9vcmdzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvblRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCJdLFxuICAgIGxpc3RJc3N1ZVR5cGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGF0R3JhbnRSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MubGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNsaXN0LXNlY3VyaXR5LW1hbmFnZXItdGVhbXNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5yZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNyZW1vdmUtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZXZpZXdQYXRHcmFudFJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRJbW11dGFibGVSZWxlYXNlc1NldHRpbmdzOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIHNldEltbXV0YWJsZVJlbGVhc2VzU2V0dGluZ3NSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHVuYmxvY2tVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvb3Jncy97b3JnfVwiXSxcbiAgICB1cGRhdGVJc3N1ZVR5cGU6IFtcIlBVVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlcy97aXNzdWVfdHlwZV9pZH1cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIixcbiAgICBdLFxuICAgIHVwZGF0ZVBhdEFjY2VzczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9XCJdLFxuICAgIHVwZGF0ZVBhdEFjY2Vzc2VzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JPcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gIH0sXG4gIHBhY2thZ2VzOiB7XG4gICAgZGVsZXRlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5QW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicGFja2FnZXNcIiwgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZ1wiXSB9LFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5VGhlQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmVuYW1lZDogW1xuICAgICAgICAgIFwicGFja2FnZXNcIixcbiAgICAgICAgICBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIixcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeVVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgfSxcbiAgcHJpdmF0ZVJlZ2lzdHJpZXM6IHtcbiAgICBjcmVhdGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzXCJdLFxuICAgIGRlbGV0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldE9yZ1ByaXZhdGVSZWdpc3RyeTogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy9wdWJsaWMta2V5XCJdLFxuICAgIGxpc3RPcmdQcml2YXRlUmVnaXN0cmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiXSxcbiAgICB1cGRhdGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZEl0ZW1Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCJdLFxuICAgIGFkZEl0ZW1Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gICAgXSxcbiAgICBkZWxldGVJdGVtRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVJdGVtRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RmllbGRGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHMve2ZpZWxkX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RmllbGRGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vZmllbGRzL3tmaWVsZF9pZH1cIixcbiAgICBdLFxuICAgIGdldEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfVwiXSxcbiAgICBnZXRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9XCJdLFxuICAgIGdldE9yZ0l0ZW06IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCJdLFxuICAgIGdldFVzZXJJdGVtOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0RmllbGRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2ZpZWxkc1wiXSxcbiAgICBsaXN0RmllbGRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2ZpZWxkc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjJcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyXCJdLFxuICAgIGxpc3RJdGVtc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9pdGVtc1wiXSxcbiAgICBsaXN0SXRlbXNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUl0ZW1Gb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSXRlbUZvclVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIixcbiAgICBdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCIsXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGNoZWNrQ29sbGFib3JhdG9yOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ltbXV0YWJsZVJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltbXV0YWJsZS1yZWxlYXNlc1wiXSxcbiAgICBjaGVja1ByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUF0dGVzdGF0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnNcIl0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlT3JnUnVsZXNldDogW1wiUE9TVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVQYWdlc0RlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlUmVwb1J1bGVzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlUmVwb3NpdG9yeVZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0dldFJlcG9zaXRvcnlWYWx1ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbkVudmlyb25tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZURlcGxveW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnUnVsZXNldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlSW1tdXRhYmxlUmVsZWFzZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIGRpc2FibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIixcbiAgICBdLFxuICAgIGRpc2FibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRvd25sb2FkWmlwYmFsbEFyY2hpdmVcIl0gfSxcbiAgICBdLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZW5hYmxlSW1tdXRhYmxlUmVsZWFzZXM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1tdXRhYmxlLXJlbGVhc2VzXCJdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiLFxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgIF0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0Q3VzdG9tRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIixcbiAgICBdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlcy97c3RhdHVzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhZ2VzSGVhbHRoQ2hlY2s6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvaGVhbHRoXCJdLFxuICAgIGdldFBhcnRpY2lwYXRpb25TdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wYXJ0aWNpcGF0aW9uXCJdLFxuICAgIGdldFB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldEhpc3Rvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVzZXRWZXJzaW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgICBdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vYnJhbmNoZXMtd2hlcmUtaGVhZFwiLFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3RDdXN0b21EZXBsb3ltZW50UnVsZUludGVncmF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgcmVuYW1lQnJhbmNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9yZW5hbWVcIl0sXG4gICAgcmVwbGFjZUFsbFRvcGljczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgcmVxdWVzdFBhZ2VzQnVpbGQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBzZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJlbGVhc2U6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgdXBkYXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9LFxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIl0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl0sXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgY3JlYXRlUHVzaFByb3RlY3Rpb25CeXBhc3M6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3B1c2gtcHJvdGVjdGlvbi1ieXBhc3Nlc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRTY2FuSGlzdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvc2Nhbi1oaXN0b3J5XCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdQYXR0ZXJuQ29uZmlnczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL3BhdHRlcm4tY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdQYXR0ZXJuQ29uZmlnczogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvcGF0dGVybi1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHNlY3VyaXR5QWR2aXNvcmllczoge1xuICAgIGNyZWF0ZUZvcms6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vZm9ya3NcIixcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9zaXRvcnlBZHZpc29yeUN2ZVJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vY3ZlXCIsXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIixcbiAgICBdLFxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldERpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0RGlzY3Vzc2lvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3RlYW1zXCJdLFxuICAgIGxpc3RNZW1iZXJzSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vaW52aXRhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J1bGs6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMvZGVsZXRlLXJlcXVlc3RcIixcbiAgICBdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97YXR0ZXN0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBdHRlc3RhdGlvbnNCeVN1YmplY3REaWdlc3Q6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy9kaWdlc3Qve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgZGVsZXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlJZDogW1wiR0VUIC91c2VyL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnNCdWxrOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vYXR0ZXN0YXRpb25zL2J1bGstbGlzdHs/cGVyX3BhZ2UsYmVmb3JlLGFmdGVyfVwiLFxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCJdLFxuICAgIGxpc3RQdWJsaWNLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5c1wiXSxcbiAgICBsaXN0U29jaWFsQWNjb3VudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U29jaWFsQWNjb3VudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsXG4gICAgXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVuZHBvaW50cztcbiIsICJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludE9wdGlvbnMsIFJlcXVlc3RQYXJhbWV0ZXJzLCBSb3V0ZSB9IGZyb20gXCJAb2N0b2tpdC90eXBlc1wiO1xuaW1wb3J0IEVORFBPSU5UUyBmcm9tIFwiLi9nZW5lcmF0ZWQvZW5kcG9pbnRzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludE1ldGhvZHMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQvbWV0aG9kLXR5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50RGVjb3JhdGlvbnMgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vLyBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIHJlZmFjdG9yZWQgaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMuanMvcHVsbC82MjJcbi8vIHRvIG9wdGltaXNlIHRoZSBydW50aW1lIHBlcmZvcm1hbmNlIG9mIE9jdG9raXQgaW5pdGlhbGl6YXRpb24uXG4vL1xuLy8gVGhpcyBvcHRpbWl6YXRpb24gaW52b2x2ZXMgdHdvIGtleSBjaGFuZ2VzOlxuLy8gMS4gUHJlLUNvbXB1dGF0aW9uOiBUaGUgZW5kcG9pbnQgbWV0aG9kcyBhcmUgcHJlLWNvbXB1dGVkIG9uY2UgYXQgbW9kdWxlIGxvYWRcbi8vICAgIHRpbWUgaW5zdGVhZCBvZiBlYWNoIGludm9jYXRpb24gb2YgYGVuZHBvaW50c1RvTWV0aG9kcygpYC5cbi8vIDIuIExhenkgaW5pdGlhbGl6YXRpb24gYW5kIGNhY2hpbmc6IFdlIHVzZSBhIFByb3h5IGZvciBlYWNoIHNjb3BlIHRvIG9ubHlcbi8vICAgIGluaXRpYWxpemUgbWV0aG9kcyB0aGF0IGFyZSBhY3R1YWxseSBjYWxsZWQuIFRoaXMgcmVkdWNlcyBydW50aW1lIG92ZXJoZWFkXG4vLyAgICBhcyB0aGUgaW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgZGVlcCBtZXJnaW5nIG9mIG9iamVjdHMuIFRoZSBpbml0aWFsaXplZFxuLy8gICAgbWV0aG9kcyBhcmUgdGhlbiBjYWNoZWQgZm9yIGZ1dHVyZSB1c2UuXG5cbmNvbnN0IGVuZHBvaW50TWV0aG9kc01hcCA9IG5ldyBNYXAoKTtcbmZvciAoY29uc3QgW3Njb3BlLCBlbmRwb2ludHNdIG9mIE9iamVjdC5lbnRyaWVzKEVORFBPSU5UUykpIHtcbiAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgZW5kcG9pbnRdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50cykpIHtcbiAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICBjb25zdCBlbmRwb2ludERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHMsXG4gICAgKTtcblxuICAgIGlmICghZW5kcG9pbnRNZXRob2RzTWFwLmhhcyhzY29wZSkpIHtcbiAgICAgIGVuZHBvaW50TWV0aG9kc01hcC5zZXQoc2NvcGUsIG5ldyBNYXAoKSk7XG4gICAgfVxuXG4gICAgZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuc2V0KG1ldGhvZE5hbWUsIHtcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICBkZWNvcmF0aW9ucyxcbiAgICB9KTtcbiAgfVxufVxuXG50eXBlIFByb3h5VGFyZ2V0ID0ge1xuICBvY3Rva2l0OiBPY3Rva2l0O1xuICBzY29wZTogc3RyaW5nO1xuICBjYWNoZTogUmVjb3JkPHN0cmluZywgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+O1xufTtcblxuY29uc3QgaGFuZGxlciA9IHtcbiAgaGFzKHsgc2NvcGUgfTogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5oYXMobWV0aG9kTmFtZSk7XG4gIH0sXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHRoaXMuZ2V0KHRhcmdldCwgbWV0aG9kTmFtZSksIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0sXG4gIGRlZmluZVByb3BlcnR5KFxuICAgIHRhcmdldDogUHJveHlUYXJnZXQsXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcixcbiAgKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9OiBQcm94eVRhcmdldCkge1xuICAgIHJldHVybiBbLi4uZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkua2V5cygpXTtcbiAgfSxcbiAgc2V0KHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiAodGFyZ2V0LmNhY2hlW21ldGhvZE5hbWVdID0gdmFsdWUpO1xuICB9LFxuICBnZXQoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGUgfTogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIGlmIChjYWNoZVttZXRob2ROYW1lXSkge1xuICAgICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZCA9IGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmdldChtZXRob2ROYW1lKTtcbiAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gZGVjb3JhdGUoXG4gICAgICAgIG9jdG9raXQsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgICBkZWNvcmF0aW9ucyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgfSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IFJlc3RFbmRwb2ludE1ldGhvZHMge1xuICBjb25zdCBuZXdNZXRob2RzID0ge30gYXMgeyBba2V5OiBzdHJpbmddOiBvYmplY3QgfTtcblxuICBmb3IgKGNvbnN0IHNjb3BlIG9mIGVuZHBvaW50TWV0aG9kc01hcC5rZXlzKCkpIHtcbiAgICBuZXdNZXRob2RzW3Njb3BlXSA9IG5ldyBQcm94eSh7IG9jdG9raXQsIHNjb3BlLCBjYWNoZToge30gfSwgaGFuZGxlcik7XG4gIH1cblxuICByZXR1cm4gbmV3TWV0aG9kcyBhcyBSZXN0RW5kcG9pbnRNZXRob2RzO1xufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZShcbiAgb2N0b2tpdDogT2N0b2tpdCxcbiAgc2NvcGU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBkZWZhdWx0czogRW5kcG9pbnRPcHRpb25zLFxuICBkZWNvcmF0aW9uczogRW5kcG9pbnREZWNvcmF0aW9ucyxcbikge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiB3aXRoRGVjb3JhdGlvbnMoXG4gICAgLi4uYXJnczogW1JvdXRlLCBSZXF1ZXN0UGFyYW1ldGVycz9dIHwgW0VuZHBvaW50T3B0aW9uc11cbiAgKSB7XG4gICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgLy8gVGhlcmUgYXJlIGN1cnJlbnRseSBubyBvdGhlciBkZWNvcmF0aW9ucyB0aGFuIGAubWFwVG9EYXRhYFxuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzLFxuICAgICAgKSkge1xuICAgICAgICBpZiAobmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCEoYWxpYXMgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbYWxpYXNdID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKC4uLmFyZ3MpO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHdpdGhEZWNvcmF0aW9ucywgcmVxdWVzdFdpdGhEZWZhdWx0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBPY3Rva2l0IH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgeyBSZXN0RW5kcG9pbnRNZXRob2RUeXBlcyB9IGZyb20gXCIuL2dlbmVyYXRlZC9wYXJhbWV0ZXJzLWFuZC1yZXNwb25zZS10eXBlcy5qc1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGVuZHBvaW50c1RvTWV0aG9kcyB9IGZyb20gXCIuL2VuZHBvaW50cy10by1tZXRob2RzLmpzXCI7XG5cbi8vIEV4cG9ydCB0aGUgdHlwZSBmb3IgZG93bnN0cmVhbSB1c2VycyBpbiBvcmRlciB0byBmaXggYSBUeXBlU2NyaXB0IGVycm9yXG4vLyBUaGUgaW5mZXJyZWQgdHlwZSBvZiAnT2N0b2tpdCcgY2Fubm90IGJlIG5hbWVkIHdpdGhvdXQgYSByZWZlcmVuY2UgdG8gJy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3QtdHlwZXMvdHlwZXMuanMnLiBUaGlzIGlzIGxpa2VseSBub3QgcG9ydGFibGUuIEEgdHlwZSBhbm5vdGF0aW9uIGlzIG5lY2Vzc2FyeS5cbmV4cG9ydCB0eXBlIHsgQXBpIH07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBBcGkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpLFxuICB9O1xufVxucmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IEFwaVtcInJlc3RcIl0gJiBBcGkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgLi4uYXBpLFxuICAgIHJlc3Q6IGFwaSxcbiAgfTtcbn1cbmxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gKFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhIHx8IFwidG90YWxfY29tbWl0c1wiIGluIHJlc3BvbnNlLmRhdGEpICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IHRvdGFsQ29tbWl0cyA9IHJlc3BvbnNlLmRhdGEudG90YWxfY29tbWl0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvbW1pdHM7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY29tbWl0cyA9IHRvdGFsQ29tbWl0cztcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaXRlcmF0b3IuanNcbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKSByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0TWV0aG9kKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB1cmwgPSAoKG5vcm1hbGl6ZWRSZXNwb25zZS5oZWFkZXJzLmxpbmsgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAvPChbXjw+XSspPjtcXHMqcmVsPVwibmV4dFwiL1xuICAgICAgICAgICkgfHwgW10pWzFdO1xuICAgICAgICAgIGlmICghdXJsICYmIFwidG90YWxfY29tbWl0c1wiIGluIG5vcm1hbGl6ZWRSZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKG5vcm1hbGl6ZWRSZXNwb25zZS51cmwpO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gcGFyc2VkVXJsLnNlYXJjaFBhcmFtcztcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChwYXJhbXMuZ2V0KFwicGFnZVwiKSB8fCBcIjFcIiwgMTApO1xuICAgICAgICAgICAgY29uc3QgcGVyX3BhZ2UgPSBwYXJzZUludChwYXJhbXMuZ2V0KFwicGVyX3BhZ2VcIikgfHwgXCIyNTBcIiwgMTApO1xuICAgICAgICAgICAgaWYgKHBhZ2UgKiBwZXJfcGFnZSA8IG5vcm1hbGl6ZWRSZXNwb25zZS5kYXRhLnRvdGFsX2NvbW1pdHMpIHtcbiAgICAgICAgICAgICAgcGFyYW1zLnNldChcInBhZ2VcIiwgU3RyaW5nKHBhZ2UgKyAxKSk7XG4gICAgICAgICAgICAgIHVybCA9IHBhcnNlZFVybC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0ZS5qc1xuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGdhdGhlcihcbiAgICBvY3Rva2l0LFxuICAgIFtdLFxuICAgIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbiAgICBtYXBGblxuICApO1xufVxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yMi5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGVhcmx5RXhpdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoXG4gICAgICBtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YVxuICAgICk7XG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHJldHVybiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbik7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvY29tcG9zZS1wYWdpbmF0ZS5qc1xudmFyIGNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBPYmplY3QuYXNzaWduKHBhZ2luYXRlLCB7XG4gIGl0ZXJhdG9yXG59KTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dlbmVyYXRlZC9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xudmFyIHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXG4gIFwiR0VUIC9hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvYXNzaWdubWVudHMve2Fzc2lnbm1lbnRfaWR9L2FjY2VwdGVkX2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zL3tjbGFzc3Jvb21faWR9L2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnMve29yZ30vZGVwZW5kYWJvdC9yZXBvc2l0b3J5LWFjY2Vzc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGYtaG9zdGVkLXJ1bm5lcnMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vaG9zdGVkLXJ1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvbWV0cmljc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zaWdodHMvYXBpL3JvdXRlLXN0YXRzL3thY3Rvcl90eXBlfS97YWN0b3JfaWR9XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9zdWJqZWN0LXN0YXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS91c2VyLXN0YXRzL3t1c2VyX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1YyXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXNlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvZGV2Y29udGFpbmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tpbmdcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXG5dO1xuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuZnVuY3Rpb24gcGFnaW5hdGVSZXN0KG9jdG9raXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdpbmF0ZTogT2JqZWN0LmFzc2lnbihwYWdpbmF0ZS5iaW5kKG51bGwsIG9jdG9raXQpLCB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IuYmluZChudWxsLCBvY3Rva2l0KVxuICAgIH0pXG4gIH07XG59XG5wYWdpbmF0ZVJlc3QuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sCiAgIm1hcHBpbmdzIjogInNrQkFBQSxJQUFBQSxHQUFBQyxFQUFBQyxJQUFBLGNBRUEsSUFBSUMsR0FBTSxRQUFRLEtBQUssRUFDbkJDLEdBQU0sUUFBUSxLQUFLLEVBQ25CQyxHQUFPLFFBQVEsTUFBTSxFQUNyQkMsR0FBUSxRQUFRLE9BQU8sRUFDdkJDLEdBQVMsUUFBUSxRQUFRLEVBQ3pCQyxHQUFTLFFBQVEsUUFBUSxFQUN6QkMsR0FBTyxRQUFRLE1BQU0sRUFHekJQLEdBQVEsYUFBZVEsR0FDdkJSLEdBQVEsY0FBZ0JTLEdBQ3hCVCxHQUFRLGNBQWdCVSxHQUN4QlYsR0FBUSxlQUFpQlcsR0FHekIsU0FBU0gsR0FBYUksRUFBUyxDQUM3QixJQUFJQyxFQUFRLElBQUlDLEdBQWVGLENBQU8sRUFDdEMsT0FBQUMsRUFBTSxRQUFVVixHQUFLLFFBQ2RVLENBQ1QsQ0FFQSxTQUFTSixHQUFjRyxFQUFTLENBQzlCLElBQUlDLEVBQVEsSUFBSUMsR0FBZUYsQ0FBTyxFQUN0QyxPQUFBQyxFQUFNLFFBQVVWLEdBQUssUUFDckJVLEVBQU0sYUFBZUUsR0FDckJGLEVBQU0sWUFBYyxJQUNiQSxDQUNULENBRUEsU0FBU0gsR0FBY0UsRUFBUyxDQUM5QixJQUFJQyxFQUFRLElBQUlDLEdBQWVGLENBQU8sRUFDdEMsT0FBQUMsRUFBTSxRQUFVVCxHQUFNLFFBQ2ZTLENBQ1QsQ0FFQSxTQUFTRixHQUFlQyxFQUFTLENBQy9CLElBQUlDLEVBQVEsSUFBSUMsR0FBZUYsQ0FBTyxFQUN0QyxPQUFBQyxFQUFNLFFBQVVULEdBQU0sUUFDdEJTLEVBQU0sYUFBZUUsR0FDckJGLEVBQU0sWUFBYyxJQUNiQSxDQUNULENBR0EsU0FBU0MsR0FBZUYsRUFBUyxDQUMvQixJQUFJSSxFQUFPLEtBQ1hBLEVBQUssUUFBVUosR0FBVyxDQUFDLEVBQzNCSSxFQUFLLGFBQWVBLEVB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LEVBQUksVUFDbENBLEVBQVFBLEVBQVEsUUFBYSxDQUFDLEVBQUksVUFDbENBLEVBQVFBLEVBQVEsTUFBVyxDQUFDLEVBQUksUUFFaENBLEVBQVFBLEVBQVEsS0FBVSxDQUFDLEVBQUksT0FDL0JBLEVBQVFBLEVBQVEsS0FBVSxDQUFDLEVBQUksT0FDL0JBLEVBQVFBLEVBQVEsTUFBVyxFQUFFLEVBQUksUUFDakNBLEVBQVFBLEVBQVEsS0FBVSxFQUFFLEVBQUksT0FDaENBLEVBQVFBLEVBQVEsU0FBYyxFQUFFLEVBQUksV0FDcENBLEVBQVFBLEVBQVEsVUFBZSxFQUFFLEVBQUksWUFDckNBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsS0FBVSxFQUFFLEVBQUksT0FDaENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsSUFBUyxFQUFFLEVBQUksTUFFL0JBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsV0FBZ0IsRUFBRSxFQUFJLGFBQ3RDQSxFQUFRQSxFQUFRLFNBQWMsRUFBRSxFQUFJLFdBQ3BDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBRWpDQSxFQUFRQSxFQUFRLFVBQVUsRUFBSSxFQUFFLEVBQUksV0FDcENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsVUFBZSxFQUFFLEVBQUksWUFDckNBLEVBQVFBLEVBQVEsWUFBaUIsRUFBRSxFQUFJLGNBRXZDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBQ2pDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBRWpDQSxFQUFRQSxFQUFRLFdBQWdCLEVBQUUsRUFBSSxhQUV0Q0EsRUFBUUEsRUFBUSxLQUFVLEVBQUUsRUFBSSxPQUNoQ0EsRUFBUUEsRUFBUSxPQUFZLEVBQUUs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SyxhQUNMLElBQUssWUFDTCxJQUFLLFdBQ0wsSUFBSyxhQUNMLElBQUssa0JBQ0wsSUFBSyxTQUNILE1BQU8sYUFDVCxJQUFLLGNBQ0wsSUFBSyxlQUNMLElBQUssVUFDSCxNQUFPLGVBQ1QsSUFBSyxjQUNMLElBQUssY0FDTCxJQUFLLGFBQ0wsSUFBSyxhQUNMLElBQUssWUFDTCxJQUFLLEtBQ0wsSUFBSyxTQUNILE1BQU8sY0FDVCxJQUFLLGNBQ0wsSUFBSyxhQUNMLElBQUssWUFDSCxNQUFPLGNBQ1QsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLFlBQ0gsTUFBTyxjQUNULElBQUssY0FDTCxJQUFLLGNBQ0wsSUFBSyxhQUNMLElBQUssWUFDTCxJQUFLLGNBQ0wsSUFBSyxLQUNILE1BQU8sY0FDVCxJQUFLLGNBQ0gsTUFBTyxjQUNULElBQUssVUFDTCxJQUFLLE1BQ0wsSUFBSyxPQUNMLElBQUssU0FDTCxJQUFLLFNBQ0gsTUFBTyxTQUNULElBQUssVUFDTCxJQUFLLFNBQ0gsTUFBTyxTQUNULElBQUssY0FDTCxJQUFLLE1BQ0wsSUFBSyxZQUNMLElBQUssY0FDSCxNQUFPLFlBQ1QsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLFlBQ0wsSUFBSyxVQUNMLElBQUssY0FDSCxNQUFPLGNBQ1QsSUFBSyxTQUNMLElBQUssZUFDTCxJQUFLLFdBQ0gsTUFBTyxlQUNULElBQUssU0FDTCxJQUFLLGVBQ0wsSUFBSyxXQUNILE1BQU8sZUFDVCxJQUFLLGlCQUNMLElBQUssUUFDTCxJQUFLLFNBQ0wsSUFBSyxRQUNMLElBQUssY0FDTCxJQUFLLFNBQ0wsSUFBSyxhQUNMLElBQUssYUFDTCxJQUFLLFlBQ0wsSUFBSyxXQUNMLElBQUssYUFDTCxJQUFLLGtCQUNMLElBQUssS0FDTCxJQUFLLFNBQ0wsSUFBSyxXQUNMLElBQUssZUFDTCxJQUFLLFdBQ0gsTUFBTyxlQUNULElBQUssU0FDTCxJQUFLLGVBQ0wsSUFBSyxXQUNILE1BQU8sZUFDVCxJQUFLLFNBQ0wsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLGFBQ0ws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LGNBQWEsVUFBb0IsVUFBUyxRQUNwREEsRUFBUUQsRUFBYyxLQUFLLENBQUMsQ0FBRSxLQUFBRSxDQUFLLElBQU1BLEVBQUssU0FBUyxxQkFBcUIsQ0FBQyxFQUM1RCxjQUFhLFNBQW1CLFVBQVMsUUFDMURELEVBQVFELEVBQWMsS0FBSyxDQUFDLENBQUUsS0FBQUUsQ0FBSyxJQUFNQSxFQUFLLFNBQVMsc0JBQXNCLENBQUMsR0FFNUUsQ0FBQ0QsRUFBTyxDQUNMRSxHQUFVLHlCQUFpQyxPQUFJLElBQVksV0FBUSxZQUFZSixHQUFTLFNBQVdILENBQU8sRUFBRSxFQUNqSCxNQUNGLENBRUEsSUFBTVEsRUFBZ0IsTUFBTUMsR0FBYUosRUFBTSxXQUFXLEVBQ3BESyxFQUF3QkwsRUFBTSxZQUFZLFNBQVMsTUFBTSxFQUM3RCxNQUFNTSxHQUFXSCxDQUFhLEVBQzlCLE1BQU1JLEdBQVdKLENBQWEsRUFDaEMsTUFBTUssR0FBSyxHQUFBQyxRQUFLLEtBQUtKLEVBQXVCLFNBQVMsRUFBRyxDQUFDLGdCQUFpQixlQUFnQixjQUFjLENBQUMsQ0FDM0csR0FBRyIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX3R1bm5lbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibmV0IiwgInRscyIsICJodHRwIiwgImh0dHBzIiwgImV2ZW50cyIsICJhc3NlcnQiLCAidXRpbCIsICJodHRwT3Zlckh0dHAiLCAiaHR0cHNPdmVySHR0cCIsICJodHRwT3Zlckh0dHBzIiwgImh0dHBzT3Zlckh0dHBzIiwgIm9wdGlvbnMiLCAiYWdlbnQiLCAiVHVubmVsaW5nQWdlbnQiLCAiY3JlYXRlU2VjdXJlU29ja2V0IiwgInNlbGYiLCAic29ja2V0IiwgImhvc3QiLCAicG9ydCIsICJsb2NhbEFkZHJlc3MiLCAidG9PcHRpb25zIiwgImkiLCAibGVuIiwgInBlbmRpbmciLCAicmVxIiwgIm1lcmdlT3B0aW9ucyIsICJvbkZyZWUiLCAib25DbG9zZU9yUmVtb3ZlIiwgImVyciIsICJjYiIsICJwbGFjZWhvbGRlciIsICJjb25uZWN0T3B0aW9ucyIsICJkZWJ1ZyIsICJjb25uZWN0UmVxIiwgIm9uUmVzcG9uc2UiLCAib25VcGdyYWRlIiwgIm9uQ29ubmVjdCIsICJvbkVycm9yIiwgInJlcyIsICJoZWFkIiwgImVycm9yIiwgImNhdXNlIiwgInBvcyIsICJob3N0SGVhZGVyIiwgInRsc09wdGlvbnMiLCAic2VjdXJlU29ja2V0IiwgInRhcmdldCIsICJvdmVycmlkZXMiLCAia2V5cyIsICJqIiwgImtleUxlbiIsICJrIiwgImFyZ3MiLCAicmVxdWlyZV90dW5uZWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2Vycm9ycyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtVbmRpY2lFcnJvciIsICJVbmRpY2lFcnJvciIsICJtZXNzYWdlIiwgImluc3RhbmNlIiwgImtDb25uZWN0VGltZW91dEVycm9yIiwgIkNvbm5lY3RUaW1lb3V0RXJyb3IiLCAia0hlYWRlcnNUaW1lb3V0RXJyb3IiLCAiSGVhZGVyc1RpbWVvdXRFcnJvciIsICJrSGVhZGVyc092ZXJmbG93RXJyb3IiLCAiSGVhZGVyc092ZXJmbG93RXJyb3IiLCAia0JvZHlUaW1lb3V0RXJyb3IiLCAiQm9keVRpbWVvdXRFcnJvciIsICJrUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAiUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAic3RhdHVzQ29kZSIsICJoZWFkZXJzIiwgImJvZHkiLCAia0ludmFsaWRBcmd1bWVudEVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJrQWJvcnRFcnJvciIsICJBYm9ydEVycm9yIiwgImtSZXF1ZXN0QWJvcnRlZEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAia0luZm9ybWF0aW9uYWxFcnJvciIsICJJbmZvcm1hdGlvbmFsRXJyb3IiLCAia1JlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciIsICJSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAia1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAiUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciIsICJrQ2xpZW50RGVzdHJveWVkRXJyb3IiLCAiQ2xpZW50RGVzdHJveWVkRXJyb3IiLCAia0NsaWVudENsb3NlZEVycm9yIiwgIkNsaWVudENsb3NlZEVycm9yIiwgImtTb2NrZXRFcnJvciIsICJTb2NrZXRFcnJvciIsICJzb2NrZXQiLCAia05vdFN1cHBvcnRlZEVycm9yIiwgIk5vdFN1cHBvcnRlZEVycm9yIiwgImtCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciIsICJCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciIsICJrSFRUUFBhcnNlckVycm9yIiwgIkhUVFBQYXJzZXJFcnJvciIsICJjb2RlIiwgImRhdGEiLCAia1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IiLCAiUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciIsICJrUmVxdWVzdFJldHJ5RXJyb3IiLCAiUmVxdWVzdFJldHJ5RXJyb3IiLCAia1Jlc3BvbnNlRXJyb3IiLCAiUmVzcG9uc2VFcnJvciIsICJrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IiLCAiU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IiLCAiY2F1c2UiLCAib3B0aW9ucyIsICJrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIiwgIk1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIiwgIndlbGxrbm93bkhlYWRlck5hbWVzIiwgImkiLCAia2V5IiwgImxvd2VyQ2FzZWRLZXkiLCAicmVxdWlyZV90cmVlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAid2VsbGtub3duSGVhZGVyTmFtZXMiLCAiaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQiLCAiVHN0Tm9kZSIsICJfVHN0Tm9kZSIsICJrZXkiLCAidmFsdWUiLCAiaW5kZXgiLCAibGVuZ3RoIiwgIm5vZGUiLCAiY29kZSIsICJrZXlsZW5ndGgiLCAiVGVybmFyeVNlYXJjaFRyZWUiLCAidHJlZSIsICJpIiwgInJlcXVpcmVfdXRpbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJrRGVzdHJveWVkIiwgImtCb2R5VXNlZCIsICJrTGlzdGVuZXJzIiwgImtCb2R5IiwgIkluY29taW5nTWVzc2FnZSIsICJzdHJlYW0iLCAibmV0IiwgIkJsb2IiLCAibm9kZVV0aWwiLCAic3RyaW5naWZ5IiwgIkVFIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIiwgInRyZWUiLCAibm9kZU1ham9yIiwgIm5vZGVNaW5vciIsICJ2IiwgIkJvZHlBc3luY0l0ZXJhYmxlIiwgImJvZHkiLCAid3JhcFJlcXVlc3RCb2R5IiwgImlzU3RyZWFtIiwgImJvZHlMZW5ndGgiLCAiaXNJdGVyYWJsZSIsICJub3AiLCAib2JqIiwgImlzQmxvYkxpa2UiLCAib2JqZWN0IiwgInNUYWciLCAiYnVpbGRVUkwiLCAidXJsIiwgInF1ZXJ5UGFyYW1zIiwgInN0cmluZ2lmaWVkIiwgImlzVmFsaWRQb3J0IiwgInBvcnQiLCAidmFsdWUiLCAiaXNIdHRwT3JIdHRwc1ByZWZpeGVkIiwgInBhcnNlVVJMIiwgIm9yaWdpbiIsICJwYXRoIiwgInBhcnNlT3JpZ2luIiwgImdldEhvc3RuYW1lIiwgImhvc3QiLCAiaWR4IiwgImdldFNlcnZlck5hbWUiLCAic2VydmVybmFtZSIsICJkZWVwQ2xvbmUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgInN0YXRlIiwgImlzQnVmZmVyIiwgImlzRGVzdHJveWVkIiwgImRlc3Ryb3kiLCAiZXJyIiwgIktFRVBBTElWRV9USU1FT1VUX0VYUFIiLCAicGFyc2VLZWVwQWxpdmVUaW1lb3V0IiwgInZhbCIsICJtIiwgImhlYWRlck5hbWVUb1N0cmluZyIsICJidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIiwgInBhcnNlSGVhZGVycyIsICJoZWFkZXJzIiwgImkiLCAia2V5IiwgImhlYWRlcnNWYWx1ZSIsICJ4IiwgInBhcnNlUmF3SGVhZGVycyIsICJsZW4iLCAicmV0IiwgImhhc0NvbnRlbnRMZW5ndGgiLCAiY29udGVudERpc3Bvc2l0aW9uSWR4IiwgImtMZW4iLCAibiIsICJidWZmZXIiLCAidmFsaWRhdGVIYW5kbGVyIiwgImhhbmRsZXIiLCAibWV0aG9kIiwgInVwZ3JhZGUiLCAiaXNEaXN0dXJiZWQiLCAiaXNFcnJvcmVkIiwgImlzUmVhZGFibGUiLCAiZ2V0U29ja2V0SW5mbyIsICJzb2NrZXQiLCAiUmVhZGFibGVTdHJlYW1Gcm9tIiwgIml0ZXJhYmxlIiwgIml0ZXJhdG9yIiwgImNvbnRyb2xsZXIiLCAiZG9uZSIsICJidWYiLCAicmVhc29uIiwgImlzRm9ybURhdGFMaWtlIiwgImFkZEFib3J0TGlzdGVuZXIiLCAic2lnbmFsIiwgImxpc3RlbmVyIiwgImhhc1RvV2VsbEZvcm1lZCIsICJoYXNJc1dlbGxGb3JtZWQiLCAidG9VU1ZTdHJpbmciLCAiaXNVU1ZTdHJpbmciLCAiaXNUb2tlbkNoYXJDb2RlIiwgImMiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJjaGFyYWN0ZXJzIiwgImhlYWRlckNoYXJSZWdleCIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAicGFyc2VSYW5nZUhlYWRlciIsICJyYW5nZSIsICJhZGRMaXN0ZW5lciIsICJuYW1lIiwgInJlbW92ZUFsbExpc3RlbmVycyIsICJlcnJvclJlcXVlc3QiLCAiY2xpZW50IiwgInJlcXVlc3QiLCAia0VudW1lcmFibGVQcm9wZXJ0eSIsICJub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UiLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHMiLCAicmVxdWlyZV9kaWFnbm9zdGljcyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImRpYWdub3N0aWNzQ2hhbm5lbCIsICJ1dGlsIiwgInVuZGljaURlYnVnTG9nIiwgImZldGNoRGVidWdsb2ciLCAid2Vic29ja2V0RGVidWdsb2ciLCAiaXNDbGllbnRTZXQiLCAiY2hhbm5lbHMiLCAiZGVidWdsb2ciLCAiZXZ0IiwgInZlcnNpb24iLCAicHJvdG9jb2wiLCAicG9ydCIsICJob3N0IiwgImVycm9yIiwgIm1ldGhvZCIsICJwYXRoIiwgIm9yaWdpbiIsICJzdGF0dXNDb2RlIiwgImFkZHJlc3MiLCAid2Vic29ja2V0IiwgImNvZGUiLCAicmVhc29uIiwgImVyciIsICJyZXF1aXJlX3JlcXVlc3QiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJOb3RTdXBwb3J0ZWRFcnJvciIsICJhc3NlcnQiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAiaXNTdHJlYW0iLCAiZGVzdHJveSIsICJpc0J1ZmZlciIsICJpc0Zvcm1EYXRhTGlrZSIsICJpc0l0ZXJhYmxlIiwgImlzQmxvYkxpa2UiLCAiYnVpbGRVUkwiLCAidmFsaWRhdGVIYW5kbGVyIiwgImdldFNlcnZlck5hbWUiLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHMiLCAiY2hhbm5lbHMiLCAiaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQiLCAiaW52YWxpZFBhdGhSZWdleCIsICJrSGFuZGxlciIsICJSZXF1ZXN0IiwgIm9yaWdpbiIsICJwYXRoIiwgIm1ldGhvZCIsICJib2R5IiwgImhlYWRlcnMiLCAicXVlcnkiLCAiaWRlbXBvdGVudCIsICJibG9ja2luZyIsICJ1cGdyYWRlIiwgImhlYWRlcnNUaW1lb3V0IiwgImJvZHlUaW1lb3V0IiwgInJlc2V0IiwgInRocm93T25FcnJvciIsICJleHBlY3RDb250aW51ZSIsICJzZXJ2ZXJuYW1lIiwgImhhbmRsZXIiLCAiclN0YXRlIiwgImVyciIsICJpIiwgInByb2Nlc3NIZWFkZXIiLCAiaGVhZGVyIiwgImtleXMiLCAiY2h1bmsiLCAiYWJvcnQiLCAic3RhdHVzQ29kZSIsICJyZXN1bWUiLCAic3RhdHVzVGV4dCIsICJzb2NrZXQiLCAidHJhaWxlcnMiLCAiZXJyb3IiLCAia2V5IiwgInZhbHVlIiwgInJlcXVlc3QiLCAidmFsIiwgImhlYWRlck5hbWUiLCAiYXJyIiwgInN0ciIsICJyZXF1aXJlX2Rpc3BhdGNoZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJFdmVudEVtaXR0ZXIiLCAiRGlzcGF0Y2hlciIsICJhcmdzIiwgImludGVyY2VwdG9ycyIsICJkaXNwYXRjaCIsICJpbnRlcmNlcHRvciIsICJDb21wb3NlZERpc3BhdGNoZXIiLCAiI2Rpc3BhdGNoZXIiLCAiI2Rpc3BhdGNoIiwgImRpc3BhdGNoZXIiLCAicmVxdWlyZV9kaXNwYXRjaGVyX2Jhc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJEaXNwYXRjaGVyIiwgIkNsaWVudERlc3Ryb3llZEVycm9yIiwgIkNsaWVudENsb3NlZEVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtEZXN0cm95IiwgImtDbG9zZSIsICJrQ2xvc2VkIiwgImtEZXN0cm95ZWQiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAia09uRGVzdHJveWVkIiwgImtPbkNsb3NlZCIsICJrSW50ZXJjZXB0ZWREaXNwYXRjaCIsICJrV2ViU29ja2V0T3B0aW9ucyIsICJEaXNwYXRjaGVyQmFzZSIsICJvcHRzIiwgIm5ld0ludGVyY2VwdG9ycyIsICJpIiwgImNhbGxiYWNrIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVyciIsICJkYXRhIiwgIm9uQ2xvc2VkIiwgImNhbGxiYWNrcyIsICJvbkRlc3Ryb3llZCIsICJoYW5kbGVyIiwgImRpc3BhdGNoIiwgInJlcXVpcmVfdGltZXJzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZmFzdE5vdyIsICJSRVNPTFVUSU9OX01TIiwgIlRJQ0tfTVMiLCAiZmFzdE5vd1RpbWVvdXQiLCAia0Zhc3RUaW1lciIsICJmYXN0VGltZXJzIiwgIk5PVF9JTl9MSVNUIiwgIlRPX0JFX0NMRUFSRUQiLCAiUEVORElORyIsICJBQ1RJVkUiLCAib25UaWNrIiwgImlkeCIsICJsZW4iLCAidGltZXIiLCAicmVmcmVzaFRpbWVvdXQiLCAiRmFzdFRpbWVyIiwgImNhbGxiYWNrIiwgImRlbGF5IiwgImFyZyIsICJ0aW1lb3V0IiwgInJlcXVpcmVfY29ubmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm5ldCIsICJhc3NlcnQiLCAidXRpbCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJDb25uZWN0VGltZW91dEVycm9yIiwgInRpbWVycyIsICJub29wIiwgInRscyIsICJTZXNzaW9uQ2FjaGUiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAia2V5IiwgInJlZiIsICJzZXNzaW9uS2V5IiwgInNlc3Npb24iLCAib2xkZXN0S2V5IiwgImJ1aWxkQ29ubmVjdG9yIiwgImFsbG93SDIiLCAic29ja2V0UGF0aCIsICJ0aW1lb3V0IiwgImN1c3RvbVNlc3Npb24iLCAib3B0cyIsICJvcHRpb25zIiwgInNlc3Npb25DYWNoZSIsICJob3N0bmFtZSIsICJob3N0IiwgInByb3RvY29sIiwgInBvcnQiLCAic2VydmVybmFtZSIsICJsb2NhbEFkZHJlc3MiLCAiaHR0cFNvY2tldCIsICJjYWxsYmFjayIsICJzb2NrZXQiLCAia2VlcEFsaXZlSW5pdGlhbERlbGF5IiwgImNsZWFyQ29ubmVjdFRpbWVvdXQiLCAic2V0dXBDb25uZWN0VGltZW91dCIsICJjYiIsICJlcnIiLCAic29ja2V0V2Vha1JlZiIsICJzMSIsICJzMiIsICJmYXN0VGltZXIiLCAib25Db25uZWN0VGltZW91dCIsICJtZXNzYWdlIiwgInJlcXVpcmVfdXRpbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgImVudW1Ub01hcCIsICJvYmoiLCAicmVzIiwgImtleSIsICJ2YWx1ZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAidXRpbHNfMSIsICJFUlJPUiIsICJUWVBFIiwgIkZMQUdTIiwgIkxFTklFTlRfRkxBR1MiLCAiTUVUSE9EUyIsICJrZXkiLCAiRklOSVNIIiwgImkiLCAiYyIsICJIRUFERVJfU1RBVEUiLCAicmVxdWlyZV9sbGh0dHBfd2FzbSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJ1ZmZlciIsICJyZXF1aXJlX2xsaHR0cF9zaW1kX3dhc20iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCdWZmZXIiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb3JzU2FmZUxpc3RlZE1ldGhvZHMiLCAiY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0IiwgIm51bGxCb2R5U3RhdHVzIiwgInJlZGlyZWN0U3RhdHVzIiwgInJlZGlyZWN0U3RhdHVzU2V0IiwgImJhZFBvcnRzIiwgImJhZFBvcnRzU2V0IiwgInJlZmVycmVyUG9saWN5IiwgInJlZmVycmVyUG9saWN5U2V0IiwgInJlcXVlc3RSZWRpcmVjdCIsICJzYWZlTWV0aG9kcyIsICJzYWZlTWV0aG9kc1NldCIsICJyZXF1ZXN0TW9kZSIsICJyZXF1ZXN0Q3JlZGVudGlhbHMiLCAicmVxdWVzdENhY2hlIiwgInJlcXVlc3RCb2R5SGVhZGVyIiwgInJlcXVlc3REdXBsZXgiLCAiZm9yYmlkZGVuTWV0aG9kcyIsICJmb3JiaWRkZW5NZXRob2RzU2V0IiwgInN1YnJlc291cmNlIiwgInN1YnJlc291cmNlU2V0IiwgInJlcXVpcmVfZ2xvYmFsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsT3JpZ2luIiwgImdldEdsb2JhbE9yaWdpbiIsICJzZXRHbG9iYWxPcmlnaW4iLCAibmV3T3JpZ2luIiwgInBhcnNlZFVSTCIsICJyZXF1aXJlX2RhdGFfdXJsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImVuY29kZXIiLCAiSFRUUF9UT0tFTl9DT0RFUE9JTlRTIiwgIkhUVFBfV0hJVEVTUEFDRV9SRUdFWCIsICJBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVgiLCAiSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyIsICJkYXRhVVJMUHJvY2Vzc29yIiwgImRhdGFVUkwiLCAiaW5wdXQiLCAiVVJMU2VyaWFsaXplciIsICJwb3NpdGlvbiIsICJtaW1lVHlwZSIsICJjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCIsICJtaW1lVHlwZUxlbmd0aCIsICJyZW1vdmVBU0NJSVdoaXRlc3BhY2UiLCAiZW5jb2RlZEJvZHkiLCAiYm9keSIsICJzdHJpbmdQZXJjZW50RGVjb2RlIiwgInN0cmluZ0JvZHkiLCAiaXNvbW9ycGhpY0RlY29kZSIsICJmb3JnaXZpbmdCYXNlNjQiLCAibWltZVR5cGVSZWNvcmQiLCAicGFyc2VNSU1FVHlwZSIsICJ1cmwiLCAiZXhjbHVkZUZyYWdtZW50IiwgImhyZWYiLCAiaGFzaExlbmd0aCIsICJzZXJpYWxpemVkIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMiLCAiY29uZGl0aW9uIiwgInJlc3VsdCIsICJjaGFyIiwgImlkeCIsICJzdGFydCIsICJieXRlcyIsICJwZXJjZW50RGVjb2RlIiwgImlzSGV4Q2hhckJ5dGUiLCAiYnl0ZSIsICJoZXhCeXRlVG9OdW1iZXIiLCAibGVuZ3RoIiwgIm91dHB1dCIsICJqIiwgImkiLCAicmVtb3ZlSFRUUFdoaXRlc3BhY2UiLCAidHlwZSIsICJzdWJ0eXBlIiwgInR5cGVMb3dlcmNhc2UiLCAic3VidHlwZUxvd2VyY2FzZSIsICJwYXJhbWV0ZXJOYW1lIiwgInBhcmFtZXRlclZhbHVlIiwgImNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmciLCAiZGF0YSIsICJkYXRhTGVuZ3RoIiwgImJ1ZmZlciIsICJleHRyYWN0VmFsdWUiLCAicG9zaXRpb25TdGFydCIsICJ2YWx1ZSIsICJxdW90ZU9yQmFja3NsYXNoIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJwYXJhbWV0ZXJzIiwgImVzc2VuY2UiLCAic2VyaWFsaXphdGlvbiIsICJuYW1lIiwgImlzSFRUUFdoaXRlU3BhY2UiLCAic3RyIiwgImxlYWRpbmciLCAidHJhaWxpbmciLCAicmVtb3ZlQ2hhcnMiLCAiaXNBU0NJSVdoaXRlc3BhY2UiLCAicHJlZGljYXRlIiwgImxlYWQiLCAidHJhaWwiLCAiYWRkaXRpb24iLCAibWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZSIsICJyZXF1aXJlX3dlYmlkbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInR5cGVzIiwgImluc3BlY3QiLCAibWFya0FzVW5jbG9uZWFibGUiLCAidG9VU1ZTdHJpbmciLCAid2ViaWRsIiwgIm1lc3NhZ2UiLCAiY29udGV4dCIsICJwbHVyYWwiLCAiViIsICJJIiwgIm9wdHMiLCAiZXJyIiwgImxlbmd0aCIsICJtaW4iLCAiY3R4IiwgImJpdExlbmd0aCIsICJzaWduZWRuZXNzIiwgInVwcGVyQm91bmQiLCAibG93ZXJCb3VuZCIsICJ4IiwgIm4iLCAiciIsICJjb252ZXJ0ZXIiLCAicHJlZml4IiwgImFyZ3VtZW50IiwgIkl0ZXJhYmxlIiwgIm1ldGhvZCIsICJzZXEiLCAiaW5kZXgiLCAiZG9uZSIsICJ2YWx1ZSIsICJrZXlDb252ZXJ0ZXIiLCAidmFsdWVDb252ZXJ0ZXIiLCAiTyIsICJyZXN1bHQiLCAia2V5cyIsICJrZXkiLCAidHlwZWRLZXkiLCAidHlwZWRWYWx1ZSIsICJpIiwgImNvbnZlcnRlcnMiLCAiZGljdGlvbmFyeSIsICJ0eXBlIiwgImRpY3QiLCAib3B0aW9ucyIsICJkZWZhdWx0VmFsdWUiLCAicmVxdWlyZWQiLCAiaGFzRGVmYXVsdCIsICJUIiwgIm5hbWUiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVHJhbnNmb3JtIiwgInpsaWIiLCAicmVkaXJlY3RTdGF0dXNTZXQiLCAicmVmZXJyZXJQb2xpY3lUb2tlbnMiLCAiYmFkUG9ydHNTZXQiLCAiZ2V0R2xvYmFsT3JpZ2luIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMiLCAiY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyIsICJyZW1vdmVDaGFycyIsICJwYXJzZU1JTUVUeXBlIiwgInBlcmZvcm1hbmNlIiwgImlzQmxvYkxpa2UiLCAiUmVhZGFibGVTdHJlYW1Gcm9tIiwgImlzVmFsaWRIVFRQVG9rZW4iLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlIiwgImFzc2VydCIsICJpc1VpbnQ4QXJyYXkiLCAid2ViaWRsIiwgInN1cHBvcnRlZEhhc2hlcyIsICJjcnlwdG8iLCAicG9zc2libGVSZWxldmFudEhhc2hlcyIsICJoYXNoIiwgInJlc3BvbnNlVVJMIiwgInJlc3BvbnNlIiwgInVybExpc3QiLCAibGVuZ3RoIiwgInJlc3BvbnNlTG9jYXRpb25VUkwiLCAicmVxdWVzdEZyYWdtZW50IiwgImxvY2F0aW9uIiwgImlzVmFsaWRIZWFkZXJWYWx1ZSIsICJpc1ZhbGlkRW5jb2RlZFVSTCIsICJub3JtYWxpemVCaW5hcnlTdHJpbmdUb1V0ZjgiLCAidXJsIiwgImkiLCAiY29kZSIsICJ2YWx1ZSIsICJyZXF1ZXN0Q3VycmVudFVSTCIsICJyZXF1ZXN0IiwgInJlcXVlc3RCYWRQb3J0IiwgInVybElzSHR0cEh0dHBzU2NoZW1lIiwgImlzRXJyb3JMaWtlIiwgIm9iamVjdCIsICJpc1ZhbGlkUmVhc29uUGhyYXNlIiwgInN0YXR1c1RleHQiLCAiYyIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJwb3RlbnRpYWxWYWx1ZSIsICJzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IiwgImFjdHVhbFJlc3BvbnNlIiwgImhlYWRlcnNMaXN0IiwgInBvbGljeUhlYWRlciIsICJwb2xpY3kiLCAidG9rZW4iLCAiY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrIiwgImNvcnNDaGVjayIsICJUQU9DaGVjayIsICJhcHBlbmRGZXRjaE1ldGFkYXRhIiwgImh0dHBSZXF1ZXN0IiwgImhlYWRlciIsICJhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIiwgInNlcmlhbGl6ZWRPcmlnaW4iLCAidXJsSGFzSHR0cHNTY2hlbWUiLCAic2FtZU9yaWdpbiIsICJjb2Fyc2VuVGltZSIsICJ0aW1lc3RhbXAiLCAiY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkiLCAiY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8iLCAiY29ubmVjdGlvblRpbWluZ0luZm8iLCAiZGVmYXVsdFN0YXJ0VGltZSIsICJjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSIsICJjcmVhdGVPcGFxdWVUaW1pbmdJbmZvIiwgInRpbWluZ0luZm8iLCAibWFrZVBvbGljeUNvbnRhaW5lciIsICJjbG9uZVBvbGljeUNvbnRhaW5lciIsICJwb2xpY3lDb250YWluZXIiLCAiZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciIsICJyZWZlcnJlclNvdXJjZSIsICJnbG9iYWxPcmlnaW4iLCAicmVmZXJyZXJVUkwiLCAic3RyaXBVUkxGb3JSZWZlcnJlciIsICJyZWZlcnJlck9yaWdpbiIsICJhcmVTYW1lT3JpZ2luIiwgImlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSIsICJpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkiLCAiY3VycmVudFVSTCIsICJvcmlnaW5Pbmx5IiwgImlzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeSIsICJvcmlnaW4iLCAib3JpZ2luQXNVUkwiLCAiYnl0ZXNNYXRjaCIsICJieXRlcyIsICJtZXRhZGF0YUxpc3QiLCAicGFyc2VkTWV0YWRhdGEiLCAicGFyc2VNZXRhZGF0YSIsICJzdHJvbmdlc3QiLCAiZ2V0U3Ryb25nZXN0TWV0YWRhdGEiLCAibWV0YWRhdGEiLCAiZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0iLCAiaXRlbSIsICJhbGdvcml0aG0iLCAiZXhwZWN0ZWRWYWx1ZSIsICJhY3R1YWxWYWx1ZSIsICJjb21wYXJlQmFzZTY0TWl4ZWQiLCAicGFyc2VIYXNoV2l0aE9wdGlvbnMiLCAicmVzdWx0IiwgImVtcHR5IiwgInBhcnNlZFRva2VuIiwgInBvcyIsICJ0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwiLCAiQSIsICJCIiwgImNyZWF0ZURlZmVycmVkUHJvbWlzZSIsICJyZXMiLCAicmVqIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImlzQWJvcnRlZCIsICJmZXRjaFBhcmFtcyIsICJpc0NhbmNlbGxlZCIsICJub3JtYWxpemVNZXRob2QiLCAibWV0aG9kIiwgInNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyIsICJlc0l0ZXJhdG9yUHJvdG90eXBlIiwgImNyZWF0ZUl0ZXJhdG9yIiwgIm5hbWUiLCAia0ludGVybmFsSXRlcmF0b3IiLCAia2V5SW5kZXgiLCAidmFsdWVJbmRleCIsICJGYXN0SXRlcmFibGVJdGVyYXRvciIsICIjdGFyZ2V0IiwgIiNraW5kIiwgIiNpbmRleCIsICJ0YXJnZXQiLCAia2luZCIsICJpbmRleCIsICJ2YWx1ZXMiLCAibGVuIiwgImtleSIsICJpdGVyYXRvck1peGluIiwgIm1ha2VJdGVyYXRvciIsICJwcm9wZXJ0aWVzIiwgImNhbGxiYWNrZm4iLCAidGhpc0FyZyIsICJmdWxseVJlYWRCb2R5IiwgImJvZHkiLCAicHJvY2Vzc0JvZHkiLCAicHJvY2Vzc0JvZHlFcnJvciIsICJzdWNjZXNzU3RlcHMiLCAiZXJyb3JTdGVwcyIsICJyZWFkZXIiLCAiZSIsICJyZWFkQWxsQnl0ZXMiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAic3RyZWFtIiwgInJlYWRhYmxlU3RyZWFtQ2xvc2UiLCAiY29udHJvbGxlciIsICJlcnIiLCAiaW52YWxpZElzb21vcnBoaWNFbmNvZGVWYWx1ZVJlZ2V4IiwgImlzb21vcnBoaWNFbmNvZGUiLCAiaW5wdXQiLCAiYnl0ZUxlbmd0aCIsICJkb25lIiwgImNodW5rIiwgInVybElzTG9jYWwiLCAicHJvdG9jb2wiLCAic2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZSIsICJhbGxvd1doaXRlc3BhY2UiLCAiZGF0YSIsICJwb3NpdGlvbiIsICJjaGFyIiwgInJhbmdlU3RhcnQiLCAicmFuZ2VTdGFydFZhbHVlIiwgInJhbmdlRW5kIiwgInJhbmdlRW5kVmFsdWUiLCAiYnVpbGRDb250ZW50UmFuZ2UiLCAiZnVsbExlbmd0aCIsICJjb250ZW50UmFuZ2UiLCAiSW5mbGF0ZVN0cmVhbSIsICIjemxpYk9wdGlvbnMiLCAiemxpYk9wdGlvbnMiLCAiZW5jb2RpbmciLCAiY2FsbGJhY2siLCAiY3JlYXRlSW5mbGF0ZSIsICJleHRyYWN0TWltZVR5cGUiLCAiaGVhZGVycyIsICJjaGFyc2V0IiwgImVzc2VuY2UiLCAibWltZVR5cGUiLCAiZ2V0RGVjb2RlU3BsaXQiLCAidGVtcG9yYXJ5TWltZVR5cGUiLCAiZ2V0dGluZ0RlY29kaW5nU3BsaXR0aW5nIiwgInRlbXBvcmFyeVZhbHVlIiwgImxpc3QiLCAidGV4dERlY29kZXIiLCAidXRmOERlY29kZUJ5dGVzIiwgImJ1ZmZlciIsICJFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0QmFzZSIsICJFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAicmVxdWlyZV9zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9maWxlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQmxvYiIsICJGaWxlIiwgImtTdGF0ZSIsICJ3ZWJpZGwiLCAiRmlsZUxpa2UiLCAiX0ZpbGVMaWtlIiwgImJsb2JMaWtlIiwgImZpbGVOYW1lIiwgIm9wdGlvbnMiLCAibiIsICJ0IiwgImQiLCAiYXJncyIsICJpc0ZpbGVMaWtlIiwgIm9iamVjdCIsICJyZXF1aXJlX2Zvcm1kYXRhIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNCbG9iTGlrZSIsICJpdGVyYXRvck1peGluIiwgImtTdGF0ZSIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIkZpbGVMaWtlIiwgImlzRmlsZUxpa2UiLCAid2ViaWRsIiwgIk5hdGl2ZUZpbGUiLCAibm9kZVV0aWwiLCAiRmlsZSIsICJGb3JtRGF0YSIsICJfRm9ybURhdGEiLCAiZm9ybSIsICJuYW1lIiwgInZhbHVlIiwgImZpbGVuYW1lIiwgInByZWZpeCIsICJlbnRyeSIsICJtYWtlRW50cnkiLCAiaWR4IiwgImRlcHRoIiwgIm9wdGlvbnMiLCAic3RhdGUiLCAiYSIsICJiIiwgIm91dHB1dCIsICJyZXF1aXJlX2Zvcm1kYXRhX3BhcnNlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzVVNWU3RyaW5nIiwgImJ1ZmZlclRvTG93ZXJDYXNlZEhlYWRlck5hbWUiLCAidXRmOERlY29kZUJ5dGVzIiwgIkhUVFBfVE9LRU5fQ09ERVBPSU5UUyIsICJpc29tb3JwaGljRGVjb2RlIiwgImlzRmlsZUxpa2UiLCAibWFrZUVudHJ5IiwgImFzc2VydCIsICJOb2RlRmlsZSIsICJGaWxlIiwgImZvcm1EYXRhTmFtZUJ1ZmZlciIsICJmaWxlbmFtZUJ1ZmZlciIsICJkZCIsICJkZGNybGYiLCAiaXNBc2NpaVN0cmluZyIsICJjaGFycyIsICJpIiwgInZhbGlkYXRlQm91bmRhcnkiLCAiYm91bmRhcnkiLCAibGVuZ3RoIiwgImNwIiwgIm11bHRpcGFydEZvcm1EYXRhUGFyc2VyIiwgImlucHV0IiwgIm1pbWVUeXBlIiwgImJvdW5kYXJ5U3RyaW5nIiwgImVudHJ5TGlzdCIsICJwb3NpdGlvbiIsICJ0cmFpbGluZyIsICJidWZmZXJTdGFydHNXaXRoIiwgInJlc3VsdCIsICJwYXJzZU11bHRpcGFydEZvcm1EYXRhSGVhZGVycyIsICJuYW1lIiwgImZpbGVuYW1lIiwgImNvbnRlbnRUeXBlIiwgImVuY29kaW5nIiwgImJvZHkiLCAiYm91bmRhcnlJbmRleCIsICJ2YWx1ZSIsICJoZWFkZXJOYW1lIiwgImNvbGxlY3RBU2VxdWVuY2VPZkJ5dGVzIiwgImNoYXIiLCAicmVtb3ZlQ2hhcnMiLCAicGFyc2VNdWx0aXBhcnRGb3JtRGF0YU5hbWUiLCAiY2hlY2siLCAiaGVhZGVyVmFsdWUiLCAiY29uZGl0aW9uIiwgInN0YXJ0IiwgImJ1ZiIsICJsZWFkaW5nIiwgInByZWRpY2F0ZSIsICJsZWFkIiwgInRyYWlsIiwgImJ1ZmZlciIsICJyZXF1aXJlX2JvZHkiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgIlJlYWRhYmxlU3RyZWFtRnJvbSIsICJpc0Jsb2JMaWtlIiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgInJlYWRhYmxlU3RyZWFtQ2xvc2UiLCAiY3JlYXRlRGVmZXJyZWRQcm9taXNlIiwgImZ1bGx5UmVhZEJvZHkiLCAiZXh0cmFjdE1pbWVUeXBlIiwgInV0ZjhEZWNvZGVCeXRlcyIsICJGb3JtRGF0YSIsICJrU3RhdGUiLCAid2ViaWRsIiwgIkJsb2IiLCAiYXNzZXJ0IiwgImlzRXJyb3JlZCIsICJpc0Rpc3R1cmJlZCIsICJpc0FycmF5QnVmZmVyIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJtdWx0aXBhcnRGb3JtRGF0YVBhcnNlciIsICJyYW5kb20iLCAiY3J5cHRvIiwgIm1heCIsICJ0ZXh0RW5jb2RlciIsICJub29wIiwgImhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgInN0cmVhbVJlZ2lzdHJ5IiwgIndlYWtSZWYiLCAic3RyZWFtIiwgImV4dHJhY3RCb2R5IiwgIm9iamVjdCIsICJrZWVwYWxpdmUiLCAiY29udHJvbGxlciIsICJidWZmZXIiLCAic291cmNlIiwgImFjdGlvbiIsICJsZW5ndGgiLCAidHlwZSIsICJib3VuZGFyeSIsICJwcmVmaXgiLCAiZXNjYXBlIiwgInN0ciIsICJub3JtYWxpemVMaW5lZmVlZHMiLCAidmFsdWUiLCAiYmxvYlBhcnRzIiwgInJuIiwgImhhc1Vua25vd25TaXplVmFsdWUiLCAibmFtZSIsICJjaHVuayIsICJwYXJ0IiwgIml0ZXJhdG9yIiwgImRvbmUiLCAicmVhc29uIiwgInNhZmVseUV4dHJhY3RCb2R5IiwgImNsb25lQm9keSIsICJpbnN0YW5jZSIsICJib2R5IiwgIm91dDEiLCAib3V0MiIsICJ0aHJvd0lmQWJvcnRlZCIsICJzdGF0ZSIsICJib2R5TWl4aW5NZXRob2RzIiwgImNvbnN1bWVCb2R5IiwgImJ5dGVzIiwgIm1pbWVUeXBlIiwgImJvZHlNaW1lVHlwZSIsICJwYXJzZUpTT05Gcm9tQnl0ZXMiLCAicGFyc2VkIiwgImZkIiwgImVudHJpZXMiLCAibWl4aW5Cb2R5IiwgInByb3RvdHlwZSIsICJjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUiLCAiYm9keVVudXNhYmxlIiwgInByb21pc2UiLCAiZXJyb3JTdGVwcyIsICJlcnJvciIsICJzdWNjZXNzU3RlcHMiLCAiZGF0YSIsICJlIiwgInJlcXVlc3RPclJlc3BvbnNlIiwgImhlYWRlcnMiLCAicmVxdWlyZV9jbGllbnRfaDEiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAidXRpbCIsICJjaGFubmVscyIsICJ0aW1lcnMiLCAiUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIiwgIlJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJIZWFkZXJzVGltZW91dEVycm9yIiwgIkhlYWRlcnNPdmVyZmxvd0Vycm9yIiwgIlNvY2tldEVycm9yIiwgIkluZm9ybWF0aW9uYWxFcnJvciIsICJCb2R5VGltZW91dEVycm9yIiwgIkhUVFBQYXJzZXJFcnJvciIsICJSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIiwgImtVcmwiLCAia1Jlc2V0IiwgImtDbGllbnQiLCAia1BhcnNlciIsICJrQmxvY2tpbmciLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1NpemUiLCAia1dyaXRpbmciLCAia1F1ZXVlIiwgImtOb1JlZiIsICJrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQiLCAia0hvc3RIZWFkZXIiLCAia1BlbmRpbmdJZHgiLCAia1J1bm5pbmdJZHgiLCAia0Vycm9yIiwgImtQaXBlbGluaW5nIiwgImtTb2NrZXQiLCAia0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSIsICJrTWF4SGVhZGVyc1NpemUiLCAia0tlZXBBbGl2ZU1heFRpbWVvdXQiLCAia0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQiLCAia0hlYWRlcnNUaW1lb3V0IiwgImtCb2R5VGltZW91dCIsICJrU3RyaWN0Q29udGVudExlbmd0aCIsICJrTWF4UmVxdWVzdHMiLCAia0NvdW50ZXIiLCAia01heFJlc3BvbnNlU2l6ZSIsICJrT25FcnJvciIsICJrUmVzdW1lIiwgImtIVFRQQ29udGV4dCIsICJjb25zdGFudHMiLCAiRU1QVFlfQlVGIiwgIkZhc3RCdWZmZXIiLCAiYWRkTGlzdGVuZXIiLCAicmVtb3ZlQWxsTGlzdGVuZXJzIiwgImtJZGxlU29ja2V0VmFsaWRhdGlvbiIsICJrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0IiwgImtTb2NrZXRVc2VkIiwgImV4dHJhY3RCb2R5IiwgImxhenlsbGh0dHAiLCAibGxodHRwV2FzbURhdGEiLCAibW9kIiwgInAiLCAiYXQiLCAibGVuIiwgImN1cnJlbnRQYXJzZXIiLCAic3RhcnQiLCAiY3VycmVudEJ1ZmZlclB0ciIsICJjdXJyZW50QnVmZmVyUmVmIiwgInN0YXR1c0NvZGUiLCAidXBncmFkZSIsICJzaG91bGRLZWVwQWxpdmUiLCAibGxodHRwSW5zdGFuY2UiLCAibGxodHRwUHJvbWlzZSIsICJjdXJyZW50QnVmZmVyU2l6ZSIsICJVU0VfTkFUSVZFX1RJTUVSIiwgIlVTRV9GQVNUX1RJTUVSIiwgIlRJTUVPVVRfSEVBREVSUyIsICJUSU1FT1VUX0JPRFkiLCAiVElNRU9VVF9LRUVQX0FMSVZFIiwgIlBhcnNlciIsICJjbGllbnQiLCAic29ja2V0IiwgImRlbGF5IiwgInR5cGUiLCAib25QYXJzZXJUaW1lb3V0IiwgImNodW5rIiwgImRhdGEiLCAibGxodHRwIiwgInJldCIsICJlcnIiLCAib2Zmc2V0IiwgImJvZHkiLCAiY29udGVudExlbmd0aCIsICJieXRlc1JlYWQiLCAicHRyIiwgIm1lc3NhZ2UiLCAiYnVmIiwgInJlcXVlc3QiLCAia2V5IiwgImhlYWRlck5hbWUiLCAiaGVhZCIsICJoZWFkZXJzIiwgInN0YXR1c1RleHQiLCAiYm9keVRpbWVvdXQiLCAia2VlcEFsaXZlVGltZW91dCIsICJ0aW1lb3V0IiwgInBhdXNlIiwgIm1heFJlc3BvbnNlU2l6ZSIsICJwYXJzZXIiLCAidGltZW91dFR5cGUiLCAicGF1c2VkIiwgImNvbm5lY3RIMSIsICJwYXJzZXJFcnIiLCAiY2xlYXJJZGxlU29ja2V0VmFsaWRhdGlvbiIsICJyZXF1ZXN0cyIsICJjbG9zZWQiLCAiYXJncyIsICJ3cml0ZUgxIiwgInJlc3VtZUgxIiwgImNhbGxiYWNrIiwgInNjaGVkdWxlSWRsZVNvY2tldFZhbGlkYXRpb24iLCAiaGVhZGVyc1RpbWVvdXQiLCAic2hvdWxkU2VuZENvbnRlbnRMZW5ndGgiLCAibWV0aG9kIiwgInBhdGgiLCAiaG9zdCIsICJibG9ja2luZyIsICJyZXNldCIsICJleHBlY3RzUGF5bG9hZCIsICJib2R5U3RyZWFtIiwgImNvbnRlbnRUeXBlIiwgImNvbnRlbnRUeXBlVmFsdWUiLCAiYm9keUxlbmd0aCIsICJhYm9ydCIsICJoZWFkZXIiLCAibiIsICJ2YWwiLCAiaSIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZUl0ZXJhYmxlIiwgIndyaXRlQmxvYiIsICJ3cml0ZVN0cmVhbSIsICJmaW5pc2hlZCIsICJ3cml0ZXIiLCAiQXN5bmNXcml0ZXIiLCAib25EYXRhIiwgIm9uRHJhaW4iLCAib25DbG9zZSIsICJvbkZpbmlzaGVkIiwgImVyIiwgImJ1ZmZlciIsICJjYiIsICJ3YWl0Rm9yRHJhaW4iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYnl0ZXNXcml0dGVuIiwgInJlcXVpcmVfY2xpZW50X2gyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgInBpcGVsaW5lIiwgInV0aWwiLCAiUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiU29ja2V0RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgImtVcmwiLCAia1Jlc2V0IiwgImtDbGllbnQiLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1F1ZXVlIiwgImtQZW5kaW5nSWR4IiwgImtSdW5uaW5nSWR4IiwgImtFcnJvciIsICJrU29ja2V0IiwgImtTdHJpY3RDb250ZW50TGVuZ3RoIiwgImtPbkVycm9yIiwgImtNYXhDb25jdXJyZW50U3RyZWFtcyIsICJrSFRUUDJTZXNzaW9uIiwgImtSZXN1bWUiLCAia1NpemUiLCAia0hUVFBDb250ZXh0IiwgImtPcGVuU3RyZWFtcyIsICJleHRyYWN0Qm9keSIsICJoMkV4cGVyaW1lbnRhbFdhcm5lZCIsICJodHRwMiIsICJIVFRQMl9IRUFERVJfQVVUSE9SSVRZIiwgIkhUVFAyX0hFQURFUl9NRVRIT0QiLCAiSFRUUDJfSEVBREVSX1BBVEgiLCAiSFRUUDJfSEVBREVSX1NDSEVNRSIsICJIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgiLCAiSFRUUDJfSEVBREVSX0VYUEVDVCIsICJIVFRQMl9IRUFERVJfU1RBVFVTIiwgInBhcnNlSDJIZWFkZXJzIiwgImhlYWRlcnMiLCAicmVzdWx0IiwgIm5hbWUiLCAidmFsdWUiLCAic3VidmFsdWUiLCAiY29ubmVjdEgyIiwgImNsaWVudCIsICJzb2NrZXQiLCAic2Vzc2lvbiIsICJvbkh0dHAyU2Vzc2lvbkVycm9yIiwgIm9uSHR0cDJGcmFtZUVycm9yIiwgIm9uSHR0cDJTZXNzaW9uRW5kIiwgIm9uSFRUUDJHb0F3YXkiLCAiZXJyIiwgInJlcXVlc3RzIiwgImkiLCAicmVxdWVzdCIsICJjbG9zZWQiLCAiYXJncyIsICJ3cml0ZUgyIiwgInJlc3VtZUgyIiwgImNhbGxiYWNrIiwgInR5cGUiLCAiY29kZSIsICJpZCIsICJzaG91bGRTZW5kQ29udGVudExlbmd0aCIsICJtZXRob2QiLCAicGF0aCIsICJob3N0IiwgInVwZ3JhZGUiLCAiZXhwZWN0Q29udGludWUiLCAic2lnbmFsIiwgInJlcUhlYWRlcnMiLCAiYm9keSIsICJuIiwgImtleSIsICJ2YWwiLCAic3RyZWFtIiwgImhvc3RuYW1lIiwgInBvcnQiLCAiYWJvcnQiLCAiZXhwZWN0c1BheWxvYWQiLCAiY29udGVudExlbmd0aCIsICJib2R5U3RyZWFtIiwgImNvbnRlbnRUeXBlIiwgInNob3VsZEVuZFN0cmVhbSIsICJ3cml0ZUJvZHlIMiIsICJzdGF0dXNDb2RlIiwgInJlYWxIZWFkZXJzIiwgImNodW5rIiwgIndyaXRlQnVmZmVyIiwgIndyaXRlSXRlcmFibGUiLCAid3JpdGVCbG9iIiwgIndyaXRlU3RyZWFtIiwgImgyc3RyZWFtIiwgImVycm9yIiwgInBpcGUiLCAib25QaXBlRGF0YSIsICJidWZmZXIiLCAib25EcmFpbiIsICJjYiIsICJ3YWl0Rm9yRHJhaW4iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAicmVzIiwgInJlcXVpcmVfcmVkaXJlY3RfaGFuZGxlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInV0aWwiLCAia0JvZHlVc2VkIiwgImFzc2VydCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJFRSIsICJyZWRpcmVjdGFibGVTdGF0dXNDb2RlcyIsICJrQm9keSIsICJCb2R5QXN5bmNJdGVyYWJsZSIsICJib2R5IiwgIlJlZGlyZWN0SGFuZGxlciIsICJkaXNwYXRjaCIsICJtYXhSZWRpcmVjdGlvbnMiLCAib3B0cyIsICJoYW5kbGVyIiwgImFib3J0IiwgInN0YXR1c0NvZGUiLCAiaGVhZGVycyIsICJzb2NrZXQiLCAiZXJyb3IiLCAicmVzdW1lIiwgInN0YXR1c1RleHQiLCAicGFyc2VMb2NhdGlvbiIsICJvcmlnaW4iLCAicGF0aG5hbWUiLCAic2VhcmNoIiwgInBhdGgiLCAiY2xlYW5SZXF1ZXN0SGVhZGVycyIsICJjaHVuayIsICJ0cmFpbGVycyIsICJpIiwgInNob3VsZFJlbW92ZUhlYWRlciIsICJoZWFkZXIiLCAicmVtb3ZlQ29udGVudCIsICJ1bmtub3duT3JpZ2luIiwgIm5hbWUiLCAicmV0IiwgImtleSIsICJyZXF1aXJlX3JlZGlyZWN0X2ludGVyY2VwdG9yIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmVkaXJlY3RIYW5kbGVyIiwgImNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IiLCAiZGVmYXVsdE1heFJlZGlyZWN0aW9ucyIsICJkaXNwYXRjaCIsICJvcHRzIiwgImhhbmRsZXIiLCAibWF4UmVkaXJlY3Rpb25zIiwgInJlZGlyZWN0SGFuZGxlciIsICJyZXF1aXJlX2NsaWVudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJuZXQiLCAiaHR0cCIsICJ1dGlsIiwgImNoYW5uZWxzIiwgIlJlcXVlc3QiLCAiRGlzcGF0Y2hlckJhc2UiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgIkNsaWVudERlc3Ryb3llZEVycm9yIiwgImJ1aWxkQ29ubmVjdG9yIiwgImtVcmwiLCAia1NlcnZlck5hbWUiLCAia0NsaWVudCIsICJrQnVzeSIsICJrQ29ubmVjdCIsICJrUmVzdW1pbmciLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1NpemUiLCAia1F1ZXVlIiwgImtDb25uZWN0ZWQiLCAia0Nvbm5lY3RpbmciLCAia05lZWREcmFpbiIsICJrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQiLCAia0hvc3RIZWFkZXIiLCAia1BlbmRpbmdJZHgiLCAia1J1bm5pbmdJZHgiLCAia0Vycm9yIiwgImtQaXBlbGluaW5nIiwgImtLZWVwQWxpdmVUaW1lb3V0VmFsdWUiLCAia01heEhlYWRlcnNTaXplIiwgImtLZWVwQWxpdmVNYXhUaW1lb3V0IiwgImtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkIiwgImtIZWFkZXJzVGltZW91dCIsICJrQm9keVRpbWVvdXQiLCAia1N0cmljdENvbnRlbnRMZW5ndGgiLCAia0Nvbm5lY3RvciIsICJrTWF4UmVkaXJlY3Rpb25zIiwgImtNYXhSZXF1ZXN0cyIsICJrQ291bnRlciIsICJrQ2xvc2UiLCAia0Rlc3Ryb3kiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAia0xvY2FsQWRkcmVzcyIsICJrTWF4UmVzcG9uc2VTaXplIiwgImtPbkVycm9yIiwgImtIVFRQQ29udGV4dCIsICJrTWF4Q29uY3VycmVudFN0cmVhbXMiLCAia1Jlc3VtZSIsICJjb25uZWN0SDEiLCAiY29ubmVjdEgyIiwgImRlcHJlY2F0ZWRJbnRlcmNlcHRvcldhcm5lZCIsICJrQ2xvc2VkUmVzb2x2ZSIsICJub29wIiwgImdldFBpcGVsaW5pbmciLCAiY2xpZW50IiwgIkNsaWVudCIsICJ1cmwiLCAiaW50ZXJjZXB0b3JzIiwgIm1heEhlYWRlclNpemUiLCAiaGVhZGVyc1RpbWVvdXQiLCAic29ja2V0VGltZW91dCIsICJyZXF1ZXN0VGltZW91dCIsICJjb25uZWN0VGltZW91dCIsICJib2R5VGltZW91dCIsICJpZGxlVGltZW91dCIsICJrZWVwQWxpdmUiLCAia2VlcEFsaXZlVGltZW91dCIsICJtYXhLZWVwQWxpdmVUaW1lb3V0IiwgImtlZXBBbGl2ZU1heFRpbWVvdXQiLCAia2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCIsICJzb2NrZXRQYXRoIiwgInBpcGVsaW5pbmciLCAidGxzIiwgInN0cmljdENvbnRlbnRMZW5ndGgiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAibWF4UmVkaXJlY3Rpb25zIiwgImNvbm5lY3QiLCAibWF4UmVxdWVzdHNQZXJDbGllbnQiLCAibG9jYWxBZGRyZXNzIiwgIm1heFJlc3BvbnNlU2l6ZSIsICJhdXRvU2VsZWN0RmFtaWx5IiwgImF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCIsICJtYXhDb25jdXJyZW50U3RyZWFtcyIsICJhbGxvd0gyIiwgIndlYlNvY2tldCIsICJjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yIiwgInN5bmMiLCAicmVzdW1lIiwgImVyciIsICJvbkVycm9yIiwgInZhbHVlIiwgImNiIiwgIm9wdHMiLCAiaGFuZGxlciIsICJvcmlnaW4iLCAicmVxdWVzdCIsICJyZXNvbHZlIiwgInJlcXVlc3RzIiwgImkiLCAiY2FsbGJhY2siLCAiaG9zdCIsICJob3N0bmFtZSIsICJwcm90b2NvbCIsICJwb3J0IiwgImlkeCIsICJpcCIsICJzb2NrZXQiLCAicmVqZWN0IiwgImVtaXREcmFpbiIsICJfcmVzdW1lIiwgInJlcXVpcmVfZml4ZWRfcXVldWUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJGaXhlZENpcmN1bGFyQnVmZmVyIiwgImRhdGEiLCAibmV4dEl0ZW0iLCAidGFpbCIsICJuZXh0IiwgInJlcXVpcmVfcG9vbF9zdGF0cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtGcmVlIiwgImtDb25uZWN0ZWQiLCAia1BlbmRpbmciLCAia1F1ZXVlZCIsICJrUnVubmluZyIsICJrU2l6ZSIsICJrUG9vbCIsICJQb29sU3RhdHMiLCAicG9vbCIsICJyZXF1aXJlX3Bvb2xfYmFzZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRpc3BhdGNoZXJCYXNlIiwgIkZpeGVkUXVldWUiLCAia0Nvbm5lY3RlZCIsICJrU2l6ZSIsICJrUnVubmluZyIsICJrUGVuZGluZyIsICJrUXVldWVkIiwgImtCdXN5IiwgImtGcmVlIiwgImtVcmwiLCAia0Nsb3NlIiwgImtEZXN0cm95IiwgImtEaXNwYXRjaCIsICJQb29sU3RhdHMiLCAia0NsaWVudHMiLCAia05lZWREcmFpbiIsICJrUXVldWUiLCAia0Nsb3NlZFJlc29sdmUiLCAia09uRHJhaW4iLCAia09uQ29ubmVjdCIsICJrT25EaXNjb25uZWN0IiwgImtPbkNvbm5lY3Rpb25FcnJvciIsICJrR2V0RGlzcGF0Y2hlciIsICJrQWRkQ2xpZW50IiwgImtSZW1vdmVDbGllbnQiLCAia1N0YXRzIiwgIlBvb2xCYXNlIiwgIm9wdHMiLCAicG9vbCIsICJvcmlnaW4iLCAidGFyZ2V0cyIsICJxdWV1ZSIsICJuZWVkRHJhaW4iLCAiaXRlbSIsICJjIiwgImVyciIsICJjbGllbnQiLCAicmV0IiwgInBlbmRpbmciLCAicnVubmluZyIsICJzaXplIiwgInJlc29sdmUiLCAiaGFuZGxlciIsICJkaXNwYXRjaGVyIiwgImlkeCIsICJyZXF1aXJlX3Bvb2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQb29sQmFzZSIsICJrQ2xpZW50cyIsICJrTmVlZERyYWluIiwgImtBZGRDbGllbnQiLCAia0dldERpc3BhdGNoZXIiLCAiQ2xpZW50IiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInV0aWwiLCAia1VybCIsICJrSW50ZXJjZXB0b3JzIiwgImJ1aWxkQ29ubmVjdG9yIiwgImtPcHRpb25zIiwgImtDb25uZWN0aW9ucyIsICJrRmFjdG9yeSIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJQb29sIiwgImNvbm5lY3Rpb25zIiwgImZhY3RvcnkiLCAiY29ubmVjdCIsICJjb25uZWN0VGltZW91dCIsICJ0bHMiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAic29ja2V0UGF0aCIsICJhdXRvU2VsZWN0RmFtaWx5IiwgImF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCIsICJhbGxvd0gyIiwgIm9wdGlvbnMiLCAidGFyZ2V0cyIsICJlcnJvciIsICJ0YXJnZXQiLCAiaWR4IiwgImNsaWVudCIsICJkaXNwYXRjaGVyIiwgInJlcXVpcmVfYmFsYW5jZWRfcG9vbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlBvb2xCYXNlIiwgImtDbGllbnRzIiwgImtOZWVkRHJhaW4iLCAia0FkZENsaWVudCIsICJrUmVtb3ZlQ2xpZW50IiwgImtHZXREaXNwYXRjaGVyIiwgIlBvb2wiLCAia1VybCIsICJrSW50ZXJjZXB0b3JzIiwgInBhcnNlT3JpZ2luIiwgImtGYWN0b3J5IiwgImtPcHRpb25zIiwgImtHcmVhdGVzdENvbW1vbkRpdmlzb3IiLCAia0N1cnJlbnRXZWlnaHQiLCAia0luZGV4IiwgImtXZWlnaHQiLCAia01heFdlaWdodFBlclNlcnZlciIsICJrRXJyb3JQZW5hbHR5IiwgImdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciIsICJhIiwgImIiLCAidCIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJCYWxhbmNlZFBvb2wiLCAidXBzdHJlYW1zIiwgImZhY3RvcnkiLCAidXBzdHJlYW0iLCAidXBzdHJlYW1PcmlnaW4iLCAicG9vbCIsICJhcmdzIiwgImVyciIsICJjbGllbnQiLCAicmVzdWx0IiwgImkiLCAiZGlzcGF0Y2hlciIsICJwIiwgImNvdW50ZXIiLCAibWF4V2VpZ2h0SW5kZXgiLCAicmVxdWlyZV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtDbGllbnRzIiwgImtSdW5uaW5nIiwgImtDbG9zZSIsICJrRGVzdHJveSIsICJrRGlzcGF0Y2giLCAia0ludGVyY2VwdG9ycyIsICJEaXNwYXRjaGVyQmFzZSIsICJQb29sIiwgIkNsaWVudCIsICJ1dGlsIiwgImNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IiLCAia09uQ29ubmVjdCIsICJrT25EaXNjb25uZWN0IiwgImtPbkNvbm5lY3Rpb25FcnJvciIsICJrTWF4UmVkaXJlY3Rpb25zIiwgImtPbkRyYWluIiwgImtGYWN0b3J5IiwgImtPcHRpb25zIiwgImRlZmF1bHRGYWN0b3J5IiwgIm9yaWdpbiIsICJvcHRzIiwgIkFnZW50IiwgImZhY3RvcnkiLCAibWF4UmVkaXJlY3Rpb25zIiwgImNvbm5lY3QiLCAib3B0aW9ucyIsICJ0YXJnZXRzIiwgImVyciIsICJyZXQiLCAiY2xpZW50IiwgImhhbmRsZXIiLCAia2V5IiwgImRpc3BhdGNoZXIiLCAiY2xvc2VQcm9taXNlcyIsICJkZXN0cm95UHJvbWlzZXMiLCAicmVxdWlyZV9wcm94eV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtQcm94eSIsICJrQ2xvc2UiLCAia0Rlc3Ryb3kiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAiVVJMIiwgIkFnZW50IiwgIlBvb2wiLCAiRGlzcGF0Y2hlckJhc2UiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvciIsICJidWlsZENvbm5lY3RvciIsICJDbGllbnQiLCAia0FnZW50IiwgImtDbGllbnQiLCAia1Byb3h5SGVhZGVycyIsICJrUmVxdWVzdFRscyIsICJrUHJveHlUbHMiLCAia0Nvbm5lY3RFbmRwb2ludCIsICJrVHVubmVsUHJveHkiLCAiZGVmYXVsdFByb3RvY29sUG9ydCIsICJwcm90b2NvbCIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJub29wIiwgImRlZmF1bHRBZ2VudEZhY3RvcnkiLCAiSHR0cDFQcm94eVdyYXBwZXIiLCAiI2NsaWVudCIsICJwcm94eVVybCIsICJoZWFkZXJzIiwgImNvbm5lY3QiLCAiZmFjdG9yeSIsICJoYW5kbGVyIiwgIm9uSGVhZGVycyIsICJzdGF0dXNDb2RlIiwgImRhdGEiLCAicmVzdW1lIiwgInBhdGgiLCAiaG9zdCIsICJlcnIiLCAiUHJveHlBZ2VudCIsICJjbGllbnRGYWN0b3J5IiwgInByb3h5VHVubmVsIiwgInVybCIsICIjZ2V0VXJsIiwgImhyZWYiLCAicG9ydCIsICJ1c2VybmFtZSIsICJwYXNzd29yZCIsICJwcm94eUhvc3RuYW1lIiwgImFnZW50RmFjdG9yeSIsICJvcHRpb25zIiwgImNhbGxiYWNrIiwgInJlcXVlc3RlZFBhdGgiLCAic29ja2V0IiwgInNlcnZlcm5hbWUiLCAiYnVpbGRIZWFkZXJzIiwgInRocm93SWZQcm94eUF1dGhJc1NlbnQiLCAiaGVhZGVyc1BhaXIiLCAiaSIsICJrZXkiLCAicmVxdWlyZV9lbnZfaHR0cF9wcm94eV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRpc3BhdGNoZXJCYXNlIiwgImtDbG9zZSIsICJrRGVzdHJveSIsICJrQ2xvc2VkIiwgImtEZXN0cm95ZWQiLCAia0Rpc3BhdGNoIiwgImtOb1Byb3h5QWdlbnQiLCAia0h0dHBQcm94eUFnZW50IiwgImtIdHRwc1Byb3h5QWdlbnQiLCAiUHJveHlBZ2VudCIsICJBZ2VudCIsICJERUZBVUxUX1BPUlRTIiwgImV4cGVyaW1lbnRhbFdhcm5lZCIsICJFbnZIdHRwUHJveHlBZ2VudCIsICIjbm9Qcm94eVZhbHVlIiwgIiNub1Byb3h5RW50cmllcyIsICIjb3B0cyIsICJvcHRzIiwgImh0dHBQcm94eSIsICJodHRwc1Byb3h5IiwgIm5vUHJveHkiLCAiYWdlbnRPcHRzIiwgIkhUVFBfUFJPWFkiLCAiSFRUUFNfUFJPWFkiLCAiI3BhcnNlTm9Qcm94eSIsICJoYW5kbGVyIiwgInVybCIsICIjZ2V0UHJveHlBZ2VudEZvclVybCIsICJlcnIiLCAicHJvdG9jb2wiLCAiaG9zdG5hbWUiLCAicG9ydCIsICIjc2hvdWxkUHJveHkiLCAiI25vUHJveHlDaGFuZ2VkIiwgImkiLCAiZW50cnkiLCAibm9Qcm94eVZhbHVlIiwgIiNub1Byb3h5RW52IiwgIm5vUHJveHlTcGxpdCIsICJub1Byb3h5RW50cmllcyIsICJwYXJzZWQiLCAicmVxdWlyZV9yZXRyeV9oYW5kbGVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnkiLCAiUmVxdWVzdFJldHJ5RXJyb3IiLCAiaXNEaXN0dXJiZWQiLCAicGFyc2VIZWFkZXJzIiwgInBhcnNlUmFuZ2VIZWFkZXIiLCAid3JhcFJlcXVlc3RCb2R5IiwgImNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIiLCAicmV0cnlBZnRlciIsICJjdXJyZW50IiwgInZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aCIsICJoZWFkZXJzIiwgInJhbmdlIiwgInN0YXR1c0NvZGUiLCAicmV0cnlDb3VudCIsICJjb250ZW50TGVuZ3RoIiwgImxlbmd0aCIsICJleHBlY3RlZExlbmd0aCIsICJSZXRyeUhhbmRsZXIiLCAiX1JldHJ5SGFuZGxlciIsICJvcHRzIiwgImhhbmRsZXJzIiwgInJldHJ5T3B0aW9ucyIsICJkaXNwYXRjaE9wdHMiLCAicmV0cnlGbiIsICJtYXhSZXRyaWVzIiwgIm1heFRpbWVvdXQiLCAibWluVGltZW91dCIsICJ0aW1lb3V0RmFjdG9yIiwgIm1ldGhvZHMiLCAiZXJyb3JDb2RlcyIsICJzdGF0dXNDb2RlcyIsICJyZWFzb24iLCAic29ja2V0IiwgImFib3J0IiwgImNodW5rIiwgImVyciIsICJzdGF0ZSIsICJjYiIsICJjb2RlIiwgIm1ldGhvZCIsICJjb3VudGVyIiwgInJldHJ5QWZ0ZXJIZWFkZXIiLCAicmV0cnlUaW1lb3V0IiwgInJhd0hlYWRlcnMiLCAicmVzdW1lIiwgInN0YXR1c01lc3NhZ2UiLCAiY29udGVudFJhbmdlIiwgImNvbnRlbnRMZW5ndGhFcnJvciIsICJzdGFydCIsICJzaXplIiwgImVuZCIsICJyYXdUcmFpbGVycyIsICJvblJldHJ5IiwgInJlcXVpcmVfcmV0cnlfYWdlbnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJEaXNwYXRjaGVyIiwgIlJldHJ5SGFuZGxlciIsICJSZXRyeUFnZW50IiwgIiNhZ2VudCIsICIjb3B0aW9ucyIsICJhZ2VudCIsICJvcHRpb25zIiwgIm9wdHMiLCAiaGFuZGxlciIsICJyZXRyeSIsICJyZXF1aXJlX3JlYWRhYmxlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgIlJlYWRhYmxlIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiTm90U3VwcG9ydGVkRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQWJvcnRFcnJvciIsICJ1dGlsIiwgIlJlYWRhYmxlU3RyZWFtRnJvbSIsICJrQ29uc3VtZSIsICJrUmVhZGluZyIsICJrQm9keSIsICJrQWJvcnQiLCAia0NvbnRlbnRUeXBlIiwgImtDb250ZW50TGVuZ3RoIiwgIm5vb3AiLCAiQm9keVJlYWRhYmxlIiwgInJlc3VtZSIsICJhYm9ydCIsICJjb250ZW50VHlwZSIsICJjb250ZW50TGVuZ3RoIiwgImhpZ2hXYXRlck1hcmsiLCAiZXJyIiwgImNhbGxiYWNrIiwgImV2IiwgImFyZ3MiLCAicmV0IiwgImNodW5rIiwgImNvbnN1bWVQdXNoIiwgImNvbnN1bWUiLCAib3B0cyIsICJsaW1pdCIsICJzaWduYWwiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib25BYm9ydCIsICJpc0xvY2tlZCIsICJzZWxmIiwgImlzVW51c2FibGUiLCAic3RyZWFtIiwgInR5cGUiLCAiclN0YXRlIiwgImNvbnN1bWVGaW5pc2giLCAiY29uc3VtZVN0YXJ0IiwgInN0YXRlIiwgInN0YXJ0IiwgImVuZCIsICJuIiwgImNvbnN1bWVFbmQiLCAiY2h1bmtzRGVjb2RlIiwgImNodW5rcyIsICJsZW5ndGgiLCAiYnVmZmVyIiwgImJ1ZmZlckxlbmd0aCIsICJjaHVua3NDb25jYXQiLCAib2Zmc2V0IiwgImkiLCAiYm9keSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAiY2h1bmtzRGVjb2RlIiwgIkNIVU5LX0xJTUlUIiwgImdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayIsICJjYWxsYmFjayIsICJib2R5IiwgImNvbnRlbnRUeXBlIiwgInN0YXR1c0NvZGUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgImNodW5rcyIsICJsZW5ndGgiLCAiY2h1bmsiLCAibWVzc2FnZSIsICJzdGFja1RyYWNlTGltaXQiLCAicGF5bG9hZCIsICJpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uIiwgImlzQ29udGVudFR5cGVUZXh0IiwgInJlcXVpcmVfYXBpX3JlcXVlc3QiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiUmVhZGFibGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJ1dGlsIiwgImdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayIsICJBc3luY1Jlc291cmNlIiwgIlJlcXVlc3RIYW5kbGVyIiwgIm9wdHMiLCAiY2FsbGJhY2siLCAic2lnbmFsIiwgIm1ldGhvZCIsICJvcGFxdWUiLCAiYm9keSIsICJvbkluZm8iLCAicmVzcG9uc2VIZWFkZXJzIiwgInRocm93T25FcnJvciIsICJoaWdoV2F0ZXJNYXJrIiwgImVyciIsICJhYm9ydCIsICJjb250ZXh0IiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgInBhcnNlZEhlYWRlcnMiLCAiY29udGVudFR5cGUiLCAiY29udGVudExlbmd0aCIsICJyZXMiLCAiY2h1bmsiLCAidHJhaWxlcnMiLCAicmVxdWVzdCIsICJyZXNvbHZlIiwgInJlamVjdCIsICJkYXRhIiwgInJlcXVpcmVfYWJvcnRfc2lnbmFsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYWRkQWJvcnRMaXN0ZW5lciIsICJSZXF1ZXN0QWJvcnRlZEVycm9yIiwgImtMaXN0ZW5lciIsICJrU2lnbmFsIiwgImFib3J0IiwgInNlbGYiLCAicmVtb3ZlU2lnbmFsIiwgImFkZFNpZ25hbCIsICJzaWduYWwiLCAicmVxdWlyZV9hcGlfc3RyZWFtIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImZpbmlzaGVkIiwgIlBhc3NUaHJvdWdoIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkludmFsaWRSZXR1cm5WYWx1ZUVycm9yIiwgInV0aWwiLCAiZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIiwgIkFzeW5jUmVzb3VyY2UiLCAiYWRkU2lnbmFsIiwgInJlbW92ZVNpZ25hbCIsICJTdHJlYW1IYW5kbGVyIiwgIm9wdHMiLCAiZmFjdG9yeSIsICJjYWxsYmFjayIsICJzaWduYWwiLCAibWV0aG9kIiwgIm9wYXF1ZSIsICJib2R5IiwgIm9uSW5mbyIsICJyZXNwb25zZUhlYWRlcnMiLCAidGhyb3dPbkVycm9yIiwgImVyciIsICJhYm9ydCIsICJjb250ZXh0IiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgInJlcyIsICJjb250ZW50VHlwZSIsICJ0cmFpbGVycyIsICJjaHVuayIsICJzdHJlYW0iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZGF0YSIsICJyZXF1aXJlX2FwaV9waXBlbGluZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJlYWRhYmxlIiwgIkR1cGxleCIsICJQYXNzVGhyb3VnaCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJSZXF1ZXN0QWJvcnRlZEVycm9yIiwgInV0aWwiLCAiQXN5bmNSZXNvdXJjZSIsICJhZGRTaWduYWwiLCAicmVtb3ZlU2lnbmFsIiwgImFzc2VydCIsICJrUmVzdW1lIiwgIlBpcGVsaW5lUmVxdWVzdCIsICJyZXN1bWUiLCAiZXJyIiwgImNhbGxiYWNrIiwgIlBpcGVsaW5lUmVzcG9uc2UiLCAiUGlwZWxpbmVIYW5kbGVyIiwgIm9wdHMiLCAiaGFuZGxlciIsICJzaWduYWwiLCAibWV0aG9kIiwgIm9wYXF1ZSIsICJvbkluZm8iLCAicmVzcG9uc2VIZWFkZXJzIiwgImJvZHkiLCAiY2h1bmsiLCAiZW5jb2RpbmciLCAicmVxIiwgInJlcyIsICJyZXQiLCAiYWJvcnQiLCAiY29udGV4dCIsICJzdGF0dXNDb2RlIiwgInJhd0hlYWRlcnMiLCAiaGVhZGVycyIsICJ0cmFpbGVycyIsICJwaXBlbGluZSIsICJwaXBlbGluZUhhbmRsZXIiLCAicmVxdWlyZV9hcGlfdXBncmFkZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlNvY2tldEVycm9yIiwgIkFzeW5jUmVzb3VyY2UiLCAidXRpbCIsICJhZGRTaWduYWwiLCAicmVtb3ZlU2lnbmFsIiwgImFzc2VydCIsICJVcGdyYWRlSGFuZGxlciIsICJvcHRzIiwgImNhbGxiYWNrIiwgInNpZ25hbCIsICJvcGFxdWUiLCAicmVzcG9uc2VIZWFkZXJzIiwgImFib3J0IiwgImNvbnRleHQiLCAic3RhdHVzQ29kZSIsICJyYXdIZWFkZXJzIiwgInNvY2tldCIsICJoZWFkZXJzIiwgImVyciIsICJ1cGdyYWRlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImRhdGEiLCAidXBncmFkZUhhbmRsZXIiLCAicmVxdWlyZV9hcGlfY29ubmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJBc3luY1Jlc291cmNlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlNvY2tldEVycm9yIiwgInV0aWwiLCAiYWRkU2lnbmFsIiwgInJlbW92ZVNpZ25hbCIsICJDb25uZWN0SGFuZGxlciIsICJvcHRzIiwgImNhbGxiYWNrIiwgInNpZ25hbCIsICJvcGFxdWUiLCAicmVzcG9uc2VIZWFkZXJzIiwgImFib3J0IiwgImNvbnRleHQiLCAic3RhdHVzQ29kZSIsICJyYXdIZWFkZXJzIiwgInNvY2tldCIsICJoZWFkZXJzIiwgImVyciIsICJjb25uZWN0IiwgInJlc29sdmUiLCAicmVqZWN0IiwgImRhdGEiLCAiY29ubmVjdEhhbmRsZXIiLCAicmVxdWlyZV9hcGkiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX21vY2tfZXJyb3JzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVW5kaWNpRXJyb3IiLCAia01vY2tOb3RNYXRjaGVkRXJyb3IiLCAiTW9ja05vdE1hdGNoZWRFcnJvciIsICJfTW9ja05vdE1hdGNoZWRFcnJvciIsICJtZXNzYWdlIiwgImluc3RhbmNlIiwgInJlcXVpcmVfbW9ja19zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9tb2NrX3V0aWxzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiTW9ja05vdE1hdGNoZWRFcnJvciIsICJrRGlzcGF0Y2hlcyIsICJrTW9ja0FnZW50IiwgImtPcmlnaW5hbERpc3BhdGNoIiwgImtPcmlnaW4iLCAia0dldE5ldENvbm5lY3QiLCAiYnVpbGRVUkwiLCAiU1RBVFVTX0NPREVTIiwgImlzUHJvbWlzZSIsICJtYXRjaFZhbHVlIiwgIm1hdGNoIiwgInZhbHVlIiwgImxvd2VyQ2FzZUVudHJpZXMiLCAiaGVhZGVycyIsICJoZWFkZXJOYW1lIiwgImhlYWRlclZhbHVlIiwgImdldEhlYWRlckJ5TmFtZSIsICJrZXkiLCAiaSIsICJidWlsZEhlYWRlcnNGcm9tQXJyYXkiLCAiY2xvbmUiLCAiZW50cmllcyIsICJpbmRleCIsICJtYXRjaEhlYWRlcnMiLCAibW9ja0Rpc3BhdGNoIiwgIm1hdGNoSGVhZGVyTmFtZSIsICJtYXRjaEhlYWRlclZhbHVlIiwgInNhZmVVcmwiLCAicGF0aCIsICJwYXRoU2VnbWVudHMiLCAicXAiLCAibWF0Y2hLZXkiLCAibWV0aG9kIiwgImJvZHkiLCAicGF0aE1hdGNoIiwgIm1ldGhvZE1hdGNoIiwgImJvZHlNYXRjaCIsICJoZWFkZXJzTWF0Y2giLCAiZ2V0UmVzcG9uc2VEYXRhIiwgImRhdGEiLCAiZ2V0TW9ja0Rpc3BhdGNoIiwgIm1vY2tEaXNwYXRjaGVzIiwgImJhc2VQYXRoIiwgInJlc29sdmVkUGF0aCIsICJtYXRjaGVkTW9ja0Rpc3BhdGNoZXMiLCAiY29uc3VtZWQiLCAiYWRkTW9ja0Rpc3BhdGNoIiwgImJhc2VEYXRhIiwgInJlcGx5RGF0YSIsICJuZXdNb2NrRGlzcGF0Y2giLCAiZGVsZXRlTW9ja0Rpc3BhdGNoIiwgImRpc3BhdGNoIiwgImJ1aWxkS2V5IiwgIm9wdHMiLCAicXVlcnkiLCAiZ2VuZXJhdGVLZXlWYWx1ZXMiLCAia2V5cyIsICJyZXN1bHQiLCAibmFtZSIsICJqIiwgImdldFN0YXR1c1RleHQiLCAic3RhdHVzQ29kZSIsICJnZXRSZXNwb25zZSIsICJidWZmZXJzIiwgImhhbmRsZXIiLCAidHJhaWxlcnMiLCAiZXJyb3IiLCAiZGVsYXkiLCAicGVyc2lzdCIsICJ0aW1lc0ludm9rZWQiLCAidGltZXMiLCAiaGFuZGxlUmVwbHkiLCAiX2RhdGEiLCAib3B0c0hlYWRlcnMiLCAibmV3RGF0YSIsICJyZXNwb25zZURhdGEiLCAicmVzcG9uc2VIZWFkZXJzIiwgInJlc3BvbnNlVHJhaWxlcnMiLCAiZXJyIiwgInJlc3VtZSIsICJidWlsZE1vY2tEaXNwYXRjaCIsICJhZ2VudCIsICJvcmlnaW4iLCAib3JpZ2luYWxEaXNwYXRjaCIsICJuZXRDb25uZWN0IiwgImNoZWNrTmV0Q29ubmVjdCIsICJ1cmwiLCAibWF0Y2hlciIsICJidWlsZE1vY2tPcHRpb25zIiwgIm1vY2tPcHRpb25zIiwgInJlcXVpcmVfbW9ja19pbnRlcmNlcHRvciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdldFJlc3BvbnNlRGF0YSIsICJidWlsZEtleSIsICJhZGRNb2NrRGlzcGF0Y2giLCAia0Rpc3BhdGNoZXMiLCAia0Rpc3BhdGNoS2V5IiwgImtEZWZhdWx0SGVhZGVycyIsICJrRGVmYXVsdFRyYWlsZXJzIiwgImtDb250ZW50TGVuZ3RoIiwgImtNb2NrRGlzcGF0Y2giLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiYnVpbGRVUkwiLCAiTW9ja1Njb3BlIiwgIm1vY2tEaXNwYXRjaCIsICJ3YWl0SW5NcyIsICJyZXBlYXRUaW1lcyIsICJNb2NrSW50ZXJjZXB0b3IiLCAib3B0cyIsICJtb2NrRGlzcGF0Y2hlcyIsICJwYXJzZWRVUkwiLCAic3RhdHVzQ29kZSIsICJkYXRhIiwgInJlc3BvbnNlT3B0aW9ucyIsICJyZXNwb25zZURhdGEiLCAiY29udGVudExlbmd0aCIsICJoZWFkZXJzIiwgInRyYWlsZXJzIiwgInJlcGx5UGFyYW1ldGVycyIsICJyZXBseU9wdGlvbnNDYWxsYmFja09yU3RhdHVzQ29kZSIsICJ3cmFwcGVkRGVmYXVsdHNDYWxsYmFjayIsICJyZXNvbHZlZERhdGEiLCAibmV3TW9ja0Rpc3BhdGNoIiwgImRpc3BhdGNoRGF0YSIsICJlcnJvciIsICJyZXF1aXJlX21vY2tfY2xpZW50IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicHJvbWlzaWZ5IiwgIkNsaWVudCIsICJidWlsZE1vY2tEaXNwYXRjaCIsICJrRGlzcGF0Y2hlcyIsICJrTW9ja0FnZW50IiwgImtDbG9zZSIsICJrT3JpZ2luYWxDbG9zZSIsICJrT3JpZ2luIiwgImtPcmlnaW5hbERpc3BhdGNoIiwgImtDb25uZWN0ZWQiLCAiTW9ja0ludGVyY2VwdG9yIiwgIlN5bWJvbHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiTW9ja0NsaWVudCIsICJvcmlnaW4iLCAib3B0cyIsICJyZXF1aXJlX21vY2tfcG9vbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInByb21pc2lmeSIsICJQb29sIiwgImJ1aWxkTW9ja0Rpc3BhdGNoIiwgImtEaXNwYXRjaGVzIiwgImtNb2NrQWdlbnQiLCAia0Nsb3NlIiwgImtPcmlnaW5hbENsb3NlIiwgImtPcmlnaW4iLCAia09yaWdpbmFsRGlzcGF0Y2giLCAia0Nvbm5lY3RlZCIsICJNb2NrSW50ZXJjZXB0b3IiLCAiU3ltYm9scyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJNb2NrUG9vbCIsICJvcmlnaW4iLCAib3B0cyIsICJyZXF1aXJlX3BsdXJhbGl6ZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzaW5ndWxhcnMiLCAicGx1cmFscyIsICJzaW5ndWxhciIsICJwbHVyYWwiLCAiY291bnQiLCAib25lIiwgImtleXMiLCAibm91biIsICJyZXF1aXJlX3BlbmRpbmdfaW50ZXJjZXB0b3JzX2Zvcm1hdHRlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlRyYW5zZm9ybSIsICJDb25zb2xlIiwgIlBFUlNJU1RFTlQiLCAiTk9UX1BFUlNJU1RFTlQiLCAiZGlzYWJsZUNvbG9ycyIsICJjaHVuayIsICJfZW5jIiwgImNiIiwgInBlbmRpbmdJbnRlcmNlcHRvcnMiLCAid2l0aFByZXR0eUhlYWRlcnMiLCAibWV0aG9kIiwgInBhdGgiLCAic3RhdHVzQ29kZSIsICJwZXJzaXN0IiwgInRpbWVzIiwgInRpbWVzSW52b2tlZCIsICJvcmlnaW4iLCAicmVxdWlyZV9tb2NrX2FnZW50IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia0NsaWVudHMiLCAiQWdlbnQiLCAia0FnZW50IiwgImtNb2NrQWdlbnRTZXQiLCAia01vY2tBZ2VudEdldCIsICJrRGlzcGF0Y2hlcyIsICJrSXNNb2NrQWN0aXZlIiwgImtOZXRDb25uZWN0IiwgImtHZXROZXRDb25uZWN0IiwgImtPcHRpb25zIiwgImtGYWN0b3J5IiwgIk1vY2tDbGllbnQiLCAiTW9ja1Bvb2wiLCAibWF0Y2hWYWx1ZSIsICJidWlsZE1vY2tPcHRpb25zIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlVuZGljaUVycm9yIiwgIkRpc3BhdGNoZXIiLCAiUGx1cmFsaXplciIsICJQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIiwgIk1vY2tBZ2VudCIsICJvcHRzIiwgImFnZW50IiwgIm9yaWdpbiIsICJkaXNwYXRjaGVyIiwgImhhbmRsZXIiLCAibWF0Y2hlciIsICJtb2NrT3B0aW9ucyIsICJjbGllbnQiLCAia2V5TWF0Y2hlciIsICJub25FeHBsaWNpdERpc3BhdGNoZXIiLCAibW9ja0FnZW50Q2xpZW50cyIsICJzY29wZSIsICJkaXNwYXRjaCIsICJwZW5kaW5nIiwgInBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIiLCAicGx1cmFsaXplciIsICJyZXF1aXJlX2dsb2JhbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbERpc3BhdGNoZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQWdlbnQiLCAiZ2V0R2xvYmFsRGlzcGF0Y2hlciIsICJzZXRHbG9iYWxEaXNwYXRjaGVyIiwgImFnZW50IiwgInJlcXVpcmVfZGVjb3JhdG9yX2hhbmRsZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIjaGFuZGxlciIsICJoYW5kbGVyIiwgImFyZ3MiLCAicmVxdWlyZV9yZWRpcmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJlZGlyZWN0SGFuZGxlciIsICJvcHRzIiwgImdsb2JhbE1heFJlZGlyZWN0aW9ucyIsICJkaXNwYXRjaCIsICJoYW5kbGVyIiwgIm1heFJlZGlyZWN0aW9ucyIsICJiYXNlT3B0cyIsICJyZWRpcmVjdEhhbmRsZXIiLCAicmVxdWlyZV9yZXRyeSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJldHJ5SGFuZGxlciIsICJnbG9iYWxPcHRzIiwgImRpc3BhdGNoIiwgIm9wdHMiLCAiaGFuZGxlciIsICJyZXF1aXJlX2R1bXAiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiRGVjb3JhdG9ySGFuZGxlciIsICJEdW1wSGFuZGxlciIsICIjbWF4U2l6ZSIsICIjYWJvcnQiLCAiI2R1bXBlZCIsICIjYWJvcnRlZCIsICIjc2l6ZSIsICIjcmVhc29uIiwgIiNoYW5kbGVyIiwgIm1heFNpemUiLCAiaGFuZGxlciIsICJhYm9ydCIsICIjY3VzdG9tQWJvcnQiLCAicmVhc29uIiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJjb250ZW50TGVuZ3RoIiwgImVyciIsICJjaHVuayIsICJ0cmFpbGVycyIsICJjcmVhdGVEdW1wSW50ZXJjZXB0b3IiLCAiZGVmYXVsdE1heFNpemUiLCAiZGlzcGF0Y2giLCAib3B0cyIsICJkdW1wTWF4U2l6ZSIsICJkdW1wSGFuZGxlciIsICJyZXF1aXJlX2RucyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzSVAiLCAibG9va3VwIiwgIkRlY29yYXRvckhhbmRsZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgIm1heEludCIsICJETlNJbnN0YW5jZSIsICIjbWF4VFRMIiwgIiNtYXhJdGVtcyIsICIjcmVjb3JkcyIsICJvcHRzIiwgIiNkZWZhdWx0TG9va3VwIiwgIiNkZWZhdWx0UGljayIsICJvcmlnaW4iLCAiY2IiLCAiaXBzIiwgIm5ld09wdHMiLCAiZXJyIiwgImFkZHJlc3NlcyIsICJyZWNvcmRzIiwgImlwIiwgInBvcnQiLCAicmVzdWx0cyIsICJhZGRyIiwgImhvc3RuYW1lUmVjb3JkcyIsICJhZmZpbml0eSIsICJvZmZzZXQiLCAiZmFtaWx5IiwgInBvc2l0aW9uIiwgInRpbWVzdGFtcCIsICJyZWNvcmQiLCAiZmFtaWx5UmVjb3JkcyIsICJtZXRhIiwgIkROU0Rpc3BhdGNoSGFuZGxlciIsICIjc3RhdGUiLCAiI29wdHMiLCAiI2Rpc3BhdGNoIiwgIiNoYW5kbGVyIiwgIiNvcmlnaW4iLCAic3RhdGUiLCAiaGFuZGxlciIsICJkaXNwYXRjaCIsICJuZXdPcmlnaW4iLCAiZGlzcGF0Y2hPcHRzIiwgImludGVyY2VwdG9yT3B0cyIsICJkdWFsU3RhY2siLCAiaW5zdGFuY2UiLCAib3JpZ0Rpc3BhdGNoT3B0cyIsICJyZXF1aXJlX2hlYWRlcnMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrQ29uc3RydWN0IiwgImtFbnVtZXJhYmxlUHJvcGVydHkiLCAiaXRlcmF0b3JNaXhpbiIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAid2ViaWRsIiwgImFzc2VydCIsICJ1dGlsIiwgImtIZWFkZXJzTWFwIiwgImtIZWFkZXJzU29ydGVkTWFwIiwgImlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZSIsICJjb2RlIiwgImhlYWRlclZhbHVlTm9ybWFsaXplIiwgInBvdGVudGlhbFZhbHVlIiwgImkiLCAiaiIsICJmaWxsIiwgImhlYWRlcnMiLCAib2JqZWN0IiwgImhlYWRlciIsICJhcHBlbmRIZWFkZXIiLCAia2V5cyIsICJuYW1lIiwgInZhbHVlIiwgImdldEhlYWRlcnNHdWFyZCIsICJnZXRIZWFkZXJzTGlzdCIsICJjb21wYXJlSGVhZGVyTmFtZSIsICJhIiwgImIiLCAiSGVhZGVyc0xpc3QiLCAiX0hlYWRlcnNMaXN0IiwgImluaXQiLCAiaXNMb3dlckNhc2UiLCAibG93ZXJjYXNlTmFtZSIsICJleGlzdHMiLCAiZGVsaW1pdGVyIiwgImxvd2VyTmFtZSIsICJjb29raWUiLCAic2l6ZSIsICJhcnJheSIsICJpdGVyYXRvciIsICJmaXJzdFZhbHVlIiwgInJpZ2h0IiwgImxlZnQiLCAicGl2b3QiLCAieCIsICJIZWFkZXJzIiwgIl9IZWFkZXJzIiwgIiNndWFyZCIsICIjaGVhZGVyc0xpc3QiLCAicHJlZml4IiwgImxpc3QiLCAibmFtZXMiLCAiY29va2llcyIsICJkZXB0aCIsICJvcHRpb25zIiwgIm8iLCAiZ3VhcmQiLCAic2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgIlYiLCAiYXJndW1lbnQiLCAicmVxdWlyZV9yZXNwb25zZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkhlYWRlcnMiLCAiSGVhZGVyc0xpc3QiLCAiZmlsbCIsICJnZXRIZWFkZXJzR3VhcmQiLCAic2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgImV4dHJhY3RCb2R5IiwgImNsb25lQm9keSIsICJtaXhpbkJvZHkiLCAiaGFzRmluYWxpemF0aW9uUmVnaXN0cnkiLCAic3RyZWFtUmVnaXN0cnkiLCAiYm9keVVudXNhYmxlIiwgInV0aWwiLCAibm9kZVV0aWwiLCAia0VudW1lcmFibGVQcm9wZXJ0eSIsICJpc1ZhbGlkUmVhc29uUGhyYXNlIiwgImlzQ2FuY2VsbGVkIiwgImlzQWJvcnRlZCIsICJpc0Jsb2JMaWtlIiwgInNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyIsICJpc0Vycm9yTGlrZSIsICJpc29tb3JwaGljRW5jb2RlIiwgInJlbGV2YW50UmVhbG0iLCAicmVkaXJlY3RTdGF0dXNTZXQiLCAibnVsbEJvZHlTdGF0dXMiLCAia1N0YXRlIiwgImtIZWFkZXJzIiwgIndlYmlkbCIsICJGb3JtRGF0YSIsICJVUkxTZXJpYWxpemVyIiwgImtDb25zdHJ1Y3QiLCAiYXNzZXJ0IiwgInR5cGVzIiwgInRleHRFbmNvZGVyIiwgIlJlc3BvbnNlIiwgIl9SZXNwb25zZSIsICJmcm9tSW5uZXJSZXNwb25zZSIsICJtYWtlTmV0d29ya0Vycm9yIiwgImRhdGEiLCAiaW5pdCIsICJieXRlcyIsICJib2R5IiwgInJlc3BvbnNlT2JqZWN0IiwgIm1ha2VSZXNwb25zZSIsICJpbml0aWFsaXplUmVzcG9uc2UiLCAidXJsIiwgInN0YXR1cyIsICJwYXJzZWRVUkwiLCAiZXJyIiwgInZhbHVlIiwgImJvZHlXaXRoVHlwZSIsICJleHRyYWN0ZWRCb2R5IiwgInR5cGUiLCAidXJsTGlzdCIsICJjbG9uZWRSZXNwb25zZSIsICJjbG9uZVJlc3BvbnNlIiwgImRlcHRoIiwgIm9wdGlvbnMiLCAicHJvcGVydGllcyIsICJyZXNwb25zZSIsICJmaWx0ZXJSZXNwb25zZSIsICJuZXdSZXNwb25zZSIsICJyZWFzb24iLCAiaXNFcnJvciIsICJpc05ldHdvcmtFcnJvciIsICJtYWtlRmlsdGVyZWRSZXNwb25zZSIsICJzdGF0ZSIsICJ0YXJnZXQiLCAicCIsICJtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IiLCAiZmV0Y2hQYXJhbXMiLCAiaW5uZXJSZXNwb25zZSIsICJndWFyZCIsICJWIiwgInByZWZpeCIsICJuYW1lIiwgImFyZ3VtZW50IiwgInJlcXVpcmVfZGlzcGF0Y2hlcl93ZWFrcmVmIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia0Nvbm5lY3RlZCIsICJrU2l6ZSIsICJDb21wYXRXZWFrUmVmIiwgInZhbHVlIiwgIkNvbXBhdEZpbmFsaXplciIsICJmaW5hbGl6ZXIiLCAiZGlzcGF0Y2hlciIsICJrZXkiLCAicmVxdWlyZV9yZXF1ZXN0IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXh0cmFjdEJvZHkiLCAibWl4aW5Cb2R5IiwgImNsb25lQm9keSIsICJib2R5VW51c2FibGUiLCAiSGVhZGVycyIsICJmaWxsSGVhZGVycyIsICJIZWFkZXJzTGlzdCIsICJzZXRIZWFkZXJzR3VhcmQiLCAiZ2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgImdldEhlYWRlcnNMaXN0IiwgIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgInV0aWwiLCAibm9kZVV0aWwiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJzYW1lT3JpZ2luIiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAiZm9yYmlkZGVuTWV0aG9kc1NldCIsICJjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQiLCAicmVmZXJyZXJQb2xpY3kiLCAicmVxdWVzdFJlZGlyZWN0IiwgInJlcXVlc3RNb2RlIiwgInJlcXVlc3RDcmVkZW50aWFscyIsICJyZXF1ZXN0Q2FjaGUiLCAicmVxdWVzdER1cGxleCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIm5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSIsICJub3JtYWxpemVkTWV0aG9kUmVjb3JkcyIsICJrSGVhZGVycyIsICJrU2lnbmFsIiwgImtTdGF0ZSIsICJrRGlzcGF0Y2hlciIsICJ3ZWJpZGwiLCAiVVJMU2VyaWFsaXplciIsICJrQ29uc3RydWN0IiwgImFzc2VydCIsICJnZXRNYXhMaXN0ZW5lcnMiLCAic2V0TWF4TGlzdGVuZXJzIiwgImdldEV2ZW50TGlzdGVuZXJzIiwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCAia0Fib3J0Q29udHJvbGxlciIsICJyZXF1ZXN0RmluYWxpemVyIiwgInNpZ25hbCIsICJhYm9ydCIsICJkZXBlbmRlbnRDb250cm9sbGVyTWFwIiwgImJ1aWxkQWJvcnQiLCAiYWNSZWYiLCAiYWMiLCAiY29udHJvbGxlckxpc3QiLCAicmVmIiwgImN0cmwiLCAicGF0Y2hNZXRob2RXYXJuaW5nIiwgIlJlcXVlc3QiLCAiX1JlcXVlc3QiLCAiaW5wdXQiLCAiaW5pdCIsICJwcmVmaXgiLCAicmVxdWVzdCIsICJmYWxsYmFja01vZGUiLCAiYmFzZVVybCIsICJwYXJzZWRVUkwiLCAiZXJyIiwgIm1ha2VSZXF1ZXN0IiwgIm9yaWdpbiIsICJ3aW5kb3ciLCAiaW5pdEhhc0tleSIsICJyZWZlcnJlciIsICJwYXJzZWRSZWZlcnJlciIsICJtb2RlIiwgIm1ldGhvZCIsICJtYXlCZU5vcm1hbGl6ZWQiLCAidXBwZXJDYXNlIiwgImhlYWRlcnNMaXN0IiwgImhlYWRlcnMiLCAibmFtZSIsICJ2YWx1ZSIsICJpbnB1dEJvZHkiLCAiaW5pdEJvZHkiLCAiZXh0cmFjdGVkQm9keSIsICJjb250ZW50VHlwZSIsICJpbnB1dE9ySW5pdEJvZHkiLCAiZmluYWxCb2R5IiwgImlkZW50aXR5VHJhbnNmb3JtIiwgImNsb25lZFJlcXVlc3QiLCAiY2xvbmVSZXF1ZXN0IiwgImxpc3QiLCAiZnJvbUlubmVyUmVxdWVzdCIsICJkZXB0aCIsICJvcHRpb25zIiwgInByb3BlcnRpZXMiLCAibmV3UmVxdWVzdCIsICJpbm5lclJlcXVlc3QiLCAiZ3VhcmQiLCAiViIsICJhcmd1bWVudCIsICJyZXF1aXJlX2ZldGNoIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibWFrZU5ldHdvcmtFcnJvciIsICJtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IiLCAiZmlsdGVyUmVzcG9uc2UiLCAibWFrZVJlc3BvbnNlIiwgImZyb21Jbm5lclJlc3BvbnNlIiwgIkhlYWRlcnNMaXN0IiwgIlJlcXVlc3QiLCAiY2xvbmVSZXF1ZXN0IiwgInpsaWIiLCAiYnl0ZXNNYXRjaCIsICJtYWtlUG9saWN5Q29udGFpbmVyIiwgImNsb25lUG9saWN5Q29udGFpbmVyIiwgInJlcXVlc3RCYWRQb3J0IiwgIlRBT0NoZWNrIiwgImFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIiLCAicmVzcG9uc2VMb2NhdGlvblVSTCIsICJyZXF1ZXN0Q3VycmVudFVSTCIsICJzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IiwgInRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCIsICJjcmVhdGVPcGFxdWVUaW1pbmdJbmZvIiwgImFwcGVuZEZldGNoTWV0YWRhdGEiLCAiY29yc0NoZWNrIiwgImNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayIsICJkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIiwgImNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIiwgImNyZWF0ZURlZmVycmVkUHJvbWlzZSIsICJpc0Jsb2JMaWtlIiwgInNhbWVPcmlnaW4iLCAiaXNDYW5jZWxsZWQiLCAiaXNBYm9ydGVkIiwgImlzRXJyb3JMaWtlIiwgImZ1bGx5UmVhZEJvZHkiLCAicmVhZGFibGVTdHJlYW1DbG9zZSIsICJpc29tb3JwaGljRW5jb2RlIiwgInVybElzTG9jYWwiLCAidXJsSXNIdHRwSHR0cHNTY2hlbWUiLCAidXJsSGFzSHR0cHNTY2hlbWUiLCAiY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8iLCAic2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZSIsICJidWlsZENvbnRlbnRSYW5nZSIsICJjcmVhdGVJbmZsYXRlIiwgImV4dHJhY3RNaW1lVHlwZSIsICJrU3RhdGUiLCAia0Rpc3BhdGNoZXIiLCAiYXNzZXJ0IiwgInNhZmVseUV4dHJhY3RCb2R5IiwgImV4dHJhY3RCb2R5IiwgInJlZGlyZWN0U3RhdHVzU2V0IiwgIm51bGxCb2R5U3RhdHVzIiwgInNhZmVNZXRob2RzU2V0IiwgInJlcXVlc3RCb2R5SGVhZGVyIiwgInN1YnJlc291cmNlU2V0IiwgIkVFIiwgIlJlYWRhYmxlIiwgInBpcGVsaW5lIiwgImZpbmlzaGVkIiwgImFkZEFib3J0TGlzdGVuZXIiLCAiaXNFcnJvcmVkIiwgImlzUmVhZGFibGUiLCAiYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSIsICJkYXRhVVJMUHJvY2Vzc29yIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIiwgImdldEdsb2JhbERpc3BhdGNoZXIiLCAid2ViaWRsIiwgIlNUQVRVU19DT0RFUyIsICJHRVRfT1JfSEVBRCIsICJkZWZhdWx0VXNlckFnZW50IiwgInJlc29sdmVPYmplY3RVUkwiLCAiRmV0Y2giLCAiZGlzcGF0Y2hlciIsICJyZWFzb24iLCAiZXJyb3IiLCAiaGFuZGxlRmV0Y2hEb25lIiwgInJlc3BvbnNlIiwgImZpbmFsaXplQW5kUmVwb3J0VGltaW5nIiwgImZldGNoIiwgImlucHV0IiwgImluaXQiLCAicCIsICJyZXF1ZXN0T2JqZWN0IiwgImUiLCAicmVxdWVzdCIsICJhYm9ydEZldGNoIiwgInJlc3BvbnNlT2JqZWN0IiwgImxvY2FsbHlBYm9ydGVkIiwgImNvbnRyb2xsZXIiLCAicmVhbFJlc3BvbnNlIiwgImZldGNoaW5nIiwgImluaXRpYXRvclR5cGUiLCAib3JpZ2luYWxVUkwiLCAidGltaW5nSW5mbyIsICJjYWNoZVN0YXRlIiwgIm1hcmtSZXNvdXJjZVRpbWluZyIsICJlcnIiLCAicHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgiLCAicHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkiLCAicHJvY2Vzc1Jlc3BvbnNlIiwgInByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSIsICJwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSIsICJ1c2VQYXJhbGxlbFF1ZXVlIiwgInRhc2tEZXN0aW5hdGlvbiIsICJjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSIsICJjdXJyZW50VGltZSIsICJmZXRjaFBhcmFtcyIsICJtYWluRmV0Y2giLCAicmVjdXJzaXZlIiwgImN1cnJlbnRVUkwiLCAic2NoZW1lRmV0Y2giLCAiaHR0cEZldGNoIiwgImludGVybmFsUmVzcG9uc2UiLCAicHJvY2Vzc0JvZHlFcnJvciIsICJmZXRjaEZpbmFsZSIsICJwcm9jZXNzQm9keSIsICJieXRlcyIsICJzY2hlbWUiLCAiYmxvYlVSTEVudHJ5IiwgImJsb2IiLCAiZnVsbExlbmd0aCIsICJzZXJpYWxpemVkRnVsbExlbmd0aCIsICJ0eXBlIiwgInJhbmdlSGVhZGVyIiwgInJhbmdlVmFsdWUiLCAicmFuZ2VTdGFydCIsICJyYW5nZUVuZCIsICJzbGljZWRCbG9iIiwgInNsaWNlZEJvZHlXaXRoVHlwZSIsICJzZXJpYWxpemVkU2xpY2VkTGVuZ3RoIiwgImNvbnRlbnRSYW5nZSIsICJib2R5V2l0aFR5cGUiLCAiZGF0YVVSTFN0cnVjdCIsICJtaW1lVHlwZSIsICJmaW5hbGl6ZVJlc3BvbnNlIiwgInVuc2FmZUVuZFRpbWUiLCAiYm9keUluZm8iLCAicmVzcG9uc2VTdGF0dXMiLCAicHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayIsICJhY3R1YWxSZXNwb25zZSIsICJodHRwTmV0d29ya09yQ2FjaGVGZXRjaCIsICJodHRwUmVkaXJlY3RGZXRjaCIsICJsb2NhdGlvblVSTCIsICJoZWFkZXJOYW1lIiwgImlzQXV0aGVudGljYXRpb25GZXRjaCIsICJpc05ld0Nvbm5lY3Rpb25GZXRjaCIsICJodHRwRmV0Y2hQYXJhbXMiLCAiaHR0cFJlcXVlc3QiLCAiaHR0cENhY2hlIiwgInJldmFsaWRhdGluZ0ZsYWciLCAiaW5jbHVkZUNyZWRlbnRpYWxzIiwgImNvbnRlbnRMZW5ndGgiLCAiY29udGVudExlbmd0aEhlYWRlclZhbHVlIiwgImZvcndhcmRSZXNwb25zZSIsICJodHRwTmV0d29ya0ZldGNoIiwgImZvcmNlTmV3Q29ubmVjdGlvbiIsICJhYm9ydCIsICJuZXdDb25uZWN0aW9uIiwgInJlcXVlc3RCb2R5IiwgInByb2Nlc3NCb2R5Q2h1bmsiLCAicHJvY2Vzc0VuZE9mQm9keSIsICJib2R5IiwgInN0YXR1cyIsICJzdGF0dXNUZXh0IiwgImhlYWRlcnNMaXN0IiwgInNvY2tldCIsICJkaXNwYXRjaCIsICJpdGVyYXRvciIsICJwdWxsQWxnb3JpdGhtIiwgImNhbmNlbEFsZ29yaXRobSIsICJzdHJlYW0iLCAib25BYm9ydGVkIiwgImlzRmFpbHVyZSIsICJkb25lIiwgInZhbHVlIiwgImJ1ZmZlciIsICJ1cmwiLCAiYWdlbnQiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiY29ubmVjdGlvbiIsICJyYXdIZWFkZXJzIiwgInJlc3VtZSIsICJsb2NhdGlvbiIsICJpIiwgImRlY29kZXJzIiwgIndpbGxGb2xsb3ciLCAiY29udGVudEVuY29kaW5nIiwgImNvZGluZ3MiLCAibWF4Q29udGVudEVuY29kaW5ncyIsICJjb2RpbmciLCAib25FcnJvciIsICJjaHVuayIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3Byb2dyZXNzZXZlbnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3ZWJpZGwiLCAia1N0YXRlIiwgIlByb2dyZXNzRXZlbnQiLCAiX1Byb2dyZXNzRXZlbnQiLCAidHlwZSIsICJldmVudEluaXREaWN0IiwgInJlcXVpcmVfZW5jb2RpbmciLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnZXRFbmNvZGluZyIsICJsYWJlbCIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrU3RhdGUiLCAia0Vycm9yIiwgImtSZXN1bHQiLCAia0Fib3J0ZWQiLCAia0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQiLCAiUHJvZ3Jlc3NFdmVudCIsICJnZXRFbmNvZGluZyIsICJzZXJpYWxpemVBTWltZVR5cGUiLCAicGFyc2VNSU1FVHlwZSIsICJ0eXBlcyIsICJTdHJpbmdEZWNvZGVyIiwgImJ0b2EiLCAic3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyIsICJyZWFkT3BlcmF0aW9uIiwgImZyIiwgImJsb2IiLCAidHlwZSIsICJlbmNvZGluZ05hbWUiLCAicmVhZGVyIiwgImJ5dGVzIiwgImNodW5rUHJvbWlzZSIsICJpc0ZpcnN0Q2h1bmsiLCAiZG9uZSIsICJ2YWx1ZSIsICJmaXJlQVByb2dyZXNzRXZlbnQiLCAicmVzdWx0IiwgInBhY2thZ2VEYXRhIiwgImVycm9yIiwgImUiLCAiZXZlbnQiLCAibWltZVR5cGUiLCAiZGF0YVVSTCIsICJwYXJzZWQiLCAiZGVjb2RlciIsICJjaHVuayIsICJlbmNvZGluZyIsICJkZWNvZGUiLCAiY29tYmluZUJ5dGVTZXF1ZW5jZXMiLCAiYmluYXJ5U3RyaW5nIiwgImlvUXVldWUiLCAiQk9NRW5jb2RpbmciLCAiQk9NU25pZmZpbmciLCAic2xpY2UiLCAic2xpY2VkIiwgImEiLCAiYiIsICJjIiwgInNlcXVlbmNlcyIsICJzaXplIiwgIm9mZnNldCIsICJyZXF1aXJlX2ZpbGVyZWFkZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzIiwgInJlYWRPcGVyYXRpb24iLCAiZmlyZUFQcm9ncmVzc0V2ZW50IiwgImtTdGF0ZSIsICJrRXJyb3IiLCAia1Jlc3VsdCIsICJrRXZlbnRzIiwgImtBYm9ydGVkIiwgIndlYmlkbCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIkZpbGVSZWFkZXIiLCAiX0ZpbGVSZWFkZXIiLCAiYmxvYiIsICJlbmNvZGluZyIsICJmbiIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiVVJMU2VyaWFsaXplciIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJ1cmxFcXVhbHMiLCAiQSIsICJCIiwgImV4Y2x1ZGVGcmFnbWVudCIsICJzZXJpYWxpemVkQSIsICJzZXJpYWxpemVkQiIsICJnZXRGaWVsZFZhbHVlcyIsICJoZWFkZXIiLCAidmFsdWVzIiwgInZhbHVlIiwgInJlcXVpcmVfY2FjaGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrQ29uc3RydWN0IiwgInVybEVxdWFscyIsICJnZXRGaWVsZFZhbHVlcyIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImlzRGlzdHVyYmVkIiwgIndlYmlkbCIsICJSZXNwb25zZSIsICJjbG9uZVJlc3BvbnNlIiwgImZyb21Jbm5lclJlc3BvbnNlIiwgIlJlcXVlc3QiLCAiZnJvbUlubmVyUmVxdWVzdCIsICJrU3RhdGUiLCAiZmV0Y2hpbmciLCAidXJsSXNIdHRwSHR0cHNTY2hlbWUiLCAiY3JlYXRlRGVmZXJyZWRQcm9taXNlIiwgInJlYWRBbGxCeXRlcyIsICJhc3NlcnQiLCAiQ2FjaGUiLCAiX0NhY2hlIiwgIiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QiLCAicmVxdWVzdCIsICJvcHRpb25zIiwgInByZWZpeCIsICJwIiwgIiNpbnRlcm5hbE1hdGNoQWxsIiwgInJlcXVlc3RzIiwgInJlc3BvbnNlUHJvbWlzZXMiLCAicmVxdWVzdExpc3QiLCAiciIsICJmZXRjaENvbnRyb2xsZXJzIiwgInJlc3BvbnNlUHJvbWlzZSIsICJyZXNwb25zZSIsICJmaWVsZFZhbHVlcyIsICJmaWVsZFZhbHVlIiwgImNvbnRyb2xsZXIiLCAicmVzcG9uc2VzIiwgIm9wZXJhdGlvbnMiLCAiaW5kZXgiLCAib3BlcmF0aW9uIiwgImNhY2hlSm9iUHJvbWlzZSIsICJlcnJvckRhdGEiLCAiI2JhdGNoQ2FjaGVPcGVyYXRpb25zIiwgImUiLCAiaW5uZXJSZXF1ZXN0IiwgImlubmVyUmVzcG9uc2UiLCAiY2xvbmVkUmVzcG9uc2UiLCAiYm9keVJlYWRQcm9taXNlIiwgInJlYWRlciIsICJieXRlcyIsICJyZXF1ZXN0UmVzcG9uc2VzIiwgInByb21pc2UiLCAicmVxdWVzdFJlc3BvbnNlIiwgIiNxdWVyeUNhY2hlIiwgInJlcXVlc3RPYmplY3QiLCAiY2FjaGUiLCAiYmFja3VwQ2FjaGUiLCAiYWRkZWRJdGVtcyIsICJyZXN1bHRMaXN0IiwgImlkeCIsICJyZXF1ZXN0UXVlcnkiLCAidGFyZ2V0U3RvcmFnZSIsICJzdG9yYWdlIiwgImNhY2hlZFJlcXVlc3QiLCAiY2FjaGVkUmVzcG9uc2UiLCAiI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbSIsICJxdWVyeVVSTCIsICJjYWNoZWRVUkwiLCAicmVxdWVzdFZhbHVlIiwgInF1ZXJ5VmFsdWUiLCAibWF4UmVzcG9uc2VzIiwgInJlc3BvbnNlTGlzdCIsICJyZXNwb25zZU9iamVjdCIsICJjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyIsICJyZXF1aXJlX2NhY2hlc3RvcmFnZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtDb25zdHJ1Y3QiLCAiQ2FjaGUiLCAid2ViaWRsIiwgImtFbnVtZXJhYmxlUHJvcGVydHkiLCAiQ2FjaGVTdG9yYWdlIiwgIl9DYWNoZVN0b3JhZ2UiLCAiI2NhY2hlcyIsICJyZXF1ZXN0IiwgIm9wdGlvbnMiLCAiY2FjaGVMaXN0IiwgInJlc3BvbnNlIiwgImNhY2hlTmFtZSIsICJwcmVmaXgiLCAiY2FjaGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc0NUTEV4Y2x1ZGluZ0h0YWIiLCAidmFsdWUiLCAiaSIsICJjb2RlIiwgInZhbGlkYXRlQ29va2llTmFtZSIsICJuYW1lIiwgInZhbGlkYXRlQ29va2llVmFsdWUiLCAibGVuIiwgInZhbGlkYXRlQ29va2llUGF0aCIsICJwYXRoIiwgImlzTGV0dGVyT3JEaWdpdCIsICJ2YWxpZGF0ZUNvb2tpZURvbWFpbiIsICJkb21haW4iLCAibGFiZWxMZW5ndGgiLCAiSU1GRGF5cyIsICJJTUZNb250aHMiLCAiSU1GUGFkZGVkTnVtYmVycyIsICJfIiwgInRvSU1GRGF0ZSIsICJkYXRlIiwgInZhbGlkYXRlQ29va2llTWF4QWdlIiwgIm1heEFnZSIsICJzdHJpbmdpZnkiLCAiY29va2llIiwgIm91dCIsICJwYXJ0IiwgImtleSIsICJ0cmltbWVkS2V5IiwgImpvaW5lZFZhbHVlIiwgInJlcXVpcmVfcGFyc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtYXhOYW1lVmFsdWVQYWlyU2l6ZSIsICJtYXhBdHRyaWJ1dGVWYWx1ZVNpemUiLCAiaXNDVExFeGNsdWRpbmdIdGFiIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IiwgImFzc2VydCIsICJwYXJzZVNldENvb2tpZSIsICJoZWFkZXIiLCAibmFtZVZhbHVlUGFpciIsICJ1bnBhcnNlZEF0dHJpYnV0ZXMiLCAibmFtZSIsICJ2YWx1ZSIsICJwb3NpdGlvbiIsICJwYXJzZVVucGFyc2VkQXR0cmlidXRlcyIsICJjb29raWVBdHRyaWJ1dGVMaXN0IiwgImNvb2tpZUF2IiwgImF0dHJpYnV0ZU5hbWUiLCAiYXR0cmlidXRlVmFsdWUiLCAiYXR0cmlidXRlTmFtZUxvd2VyY2FzZSIsICJleHBpcnlUaW1lIiwgImNoYXJDb2RlIiwgImRlbHRhU2Vjb25kcyIsICJjb29raWVEb21haW4iLCAiY29va2llUGF0aCIsICJhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSIsICJyZXF1aXJlX2Nvb2tpZXMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXJzZVNldENvb2tpZSIsICJzdHJpbmdpZnkiLCAid2ViaWRsIiwgIkhlYWRlcnMiLCAiZ2V0Q29va2llcyIsICJoZWFkZXJzIiwgImNvb2tpZSIsICJvdXQiLCAicGllY2UiLCAibmFtZSIsICJ2YWx1ZSIsICJkZWxldGVDb29raWUiLCAiYXR0cmlidXRlcyIsICJwcmVmaXgiLCAic2V0Q29va2llIiwgImdldFNldENvb2tpZXMiLCAiY29va2llcyIsICJwYWlyIiwgInN0ciIsICJyZXF1aXJlX2V2ZW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIndlYmlkbCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImtDb25zdHJ1Y3QiLCAiTWVzc2FnZVBvcnQiLCAiTWVzc2FnZUV2ZW50IiwgIl9NZXNzYWdlRXZlbnQiLCAiI2V2ZW50SW5pdCIsICJ0eXBlIiwgImV2ZW50SW5pdERpY3QiLCAicHJlZml4IiwgImJ1YmJsZXMiLCAiY2FuY2VsYWJsZSIsICJkYXRhIiwgIm9yaWdpbiIsICJsYXN0RXZlbnRJZCIsICJzb3VyY2UiLCAicG9ydHMiLCAiaW5pdCIsICJtZXNzYWdlRXZlbnQiLCAiY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCIsICJDbG9zZUV2ZW50IiwgIl9DbG9zZUV2ZW50IiwgIkVycm9yRXZlbnQiLCAiX0Vycm9yRXZlbnQiLCAiZXZlbnRJbml0IiwgInJlcXVpcmVfY29uc3RhbnRzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidWlkIiwgInN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAib3Bjb2RlcyIsICJtYXhVbnNpZ25lZDE2Qml0IiwgInBhcnNlclN0YXRlcyIsICJlbXB0eUJ1ZmZlciIsICJzZW5kSGludHMiLCAicmVxdWlyZV9zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia1JlYWR5U3RhdGUiLCAia0NvbnRyb2xsZXIiLCAia1Jlc3BvbnNlIiwgImtCaW5hcnlUeXBlIiwgImtXZWJTb2NrZXRVUkwiLCAic3RhdGVzIiwgIm9wY29kZXMiLCAiRXJyb3JFdmVudCIsICJjcmVhdGVGYXN0TWVzc2FnZUV2ZW50IiwgImlzVXRmOCIsICJjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCIsICJyZW1vdmVIVFRQV2hpdGVzcGFjZSIsICJpc0Nvbm5lY3RpbmciLCAid3MiLCAiaXNFc3RhYmxpc2hlZCIsICJpc0Nsb3NpbmciLCAiaXNDbG9zZWQiLCAiZmlyZUV2ZW50IiwgImUiLCAidGFyZ2V0IiwgImV2ZW50RmFjdG9yeSIsICJ0eXBlIiwgImluaXQiLCAiZXZlbnRJbml0RGljdCIsICJldmVudCIsICJ3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQiLCAiZGF0YSIsICJkYXRhRm9yRXZlbnQiLCAidXRmOERlY29kZSIsICJmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiIsICJ0b0FycmF5QnVmZmVyIiwgImJ1ZmZlciIsICJpc1ZhbGlkU3VicHJvdG9jb2wiLCAicHJvdG9jb2wiLCAiaSIsICJjb2RlIiwgImlzVmFsaWRTdGF0dXNDb2RlIiwgInJlYXNvbiIsICJjb250cm9sbGVyIiwgInJlc3BvbnNlIiwgImlzQ29udHJvbEZyYW1lIiwgIm9wY29kZSIsICJpc0NvbnRpbnVhdGlvbkZyYW1lIiwgImlzVGV4dEJpbmFyeUZyYW1lIiwgImlzVmFsaWRPcGNvZGUiLCAicGFyc2VFeHRlbnNpb25zIiwgImV4dGVuc2lvbnMiLCAicG9zaXRpb24iLCAiZXh0ZW5zaW9uTGlzdCIsICJwYWlyIiwgIm5hbWUiLCAidmFsdWUiLCAiaXNWYWxpZENsaWVudFdpbmRvd0JpdHMiLCAiYnl0ZSIsICJudW0iLCAiaGFzSW50bCIsICJmYXRhbERlY29kZXIiLCAicmVxdWlyZV9mcmFtZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm1heFVuc2lnbmVkMTZCaXQiLCAiQlVGRkVSX1NJWkUiLCAiY3J5cHRvIiwgImJ1ZmZlciIsICJidWZJZHgiLCAiX29mZnNldCIsICJfc2l6ZSIsICJpIiwgImdlbmVyYXRlTWFzayIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiZGF0YSIsICJvcGNvZGUiLCAiZnJhbWVEYXRhIiwgIm1hc2tLZXkiLCAiYm9keUxlbmd0aCIsICJwYXlsb2FkTGVuZ3RoIiwgIm9mZnNldCIsICJyZXF1aXJlX2Nvbm5lY3Rpb24iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1aWQiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAiZW1wdHlCdWZmZXIiLCAib3Bjb2RlcyIsICJrUmVhZHlTdGF0ZSIsICJrU2VudENsb3NlIiwgImtCeXRlUGFyc2VyIiwgImtSZWNlaXZlZENsb3NlIiwgImtSZXNwb25zZSIsICJmaXJlRXZlbnQiLCAiZmFpbFdlYnNvY2tldENvbm5lY3Rpb24iLCAiaXNDbG9zaW5nIiwgImlzQ2xvc2VkIiwgImlzRXN0YWJsaXNoZWQiLCAicGFyc2VFeHRlbnNpb25zIiwgImNoYW5uZWxzIiwgIkNsb3NlRXZlbnQiLCAibWFrZVJlcXVlc3QiLCAiZmV0Y2hpbmciLCAiSGVhZGVycyIsICJnZXRIZWFkZXJzTGlzdCIsICJnZXREZWNvZGVTcGxpdCIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiY3J5cHRvIiwgImVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24iLCAidXJsIiwgInByb3RvY29scyIsICJjbGllbnQiLCAid3MiLCAib25Fc3RhYmxpc2giLCAib3B0aW9ucyIsICJyZXF1ZXN0VVJMIiwgInJlcXVlc3QiLCAiaGVhZGVyc0xpc3QiLCAia2V5VmFsdWUiLCAicHJvdG9jb2wiLCAicmVzcG9uc2UiLCAic2VjV1NBY2NlcHQiLCAiZGlnZXN0IiwgInNlY0V4dGVuc2lvbiIsICJleHRlbnNpb25zIiwgInNlY1Byb3RvY29sIiwgIm9uU29ja2V0RGF0YSIsICJvblNvY2tldENsb3NlIiwgIm9uU29ja2V0RXJyb3IiLCAiY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uIiwgImNvZGUiLCAicmVhc29uIiwgInJlYXNvbkJ5dGVMZW5ndGgiLCAiZnJhbWUiLCAiY2h1bmsiLCAid2FzQ2xlYW4iLCAicmVzdWx0IiwgInR5cGUiLCAiaW5pdCIsICJlcnJvciIsICJyZXF1aXJlX3Blcm1lc3NhZ2VfZGVmbGF0ZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNyZWF0ZUluZmxhdGVSYXciLCAiWl9ERUZBVUxUX1dJTkRPV0JJVFMiLCAiaXNWYWxpZENsaWVudFdpbmRvd0JpdHMiLCAiTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIiwgInRhaWwiLCAia0J1ZmZlciIsICJrTGVuZ3RoIiwgIlBlck1lc3NhZ2VEZWZsYXRlIiwgIiNpbmZsYXRlIiwgIiNvcHRpb25zIiwgIiNtYXhQYXlsb2FkU2l6ZSIsICJleHRlbnNpb25zIiwgIm9wdGlvbnMiLCAiY2h1bmsiLCAiZmluIiwgImNhbGxiYWNrIiwgIndpbmRvd0JpdHMiLCAiZXJyIiwgImRhdGEiLCAiZnVsbCIsICJyZXF1aXJlX3JlY2VpdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiV3JpdGFibGUiLCAiYXNzZXJ0IiwgInBhcnNlclN0YXRlcyIsICJvcGNvZGVzIiwgInN0YXRlcyIsICJlbXB0eUJ1ZmZlciIsICJzZW50Q2xvc2VGcmFtZVN0YXRlIiwgImtSZWFkeVN0YXRlIiwgImtTZW50Q2xvc2UiLCAia1Jlc3BvbnNlIiwgImtSZWNlaXZlZENsb3NlIiwgImNoYW5uZWxzIiwgImlzVmFsaWRTdGF0dXNDb2RlIiwgImlzVmFsaWRPcGNvZGUiLCAiZmFpbFdlYnNvY2tldENvbm5lY3Rpb24iLCAid2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkIiwgInV0ZjhEZWNvZGUiLCAiaXNDb250cm9sRnJhbWUiLCAiaXNUZXh0QmluYXJ5RnJhbWUiLCAiaXNDb250aW51YXRpb25GcmFtZSIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uIiwgIlBlck1lc3NhZ2VEZWZsYXRlIiwgIk1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciIsICJmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlIiwgIndzIiwgImNvZGUiLCAicmVhc29uIiwgIkJ5dGVQYXJzZXIiLCAiI2J1ZmZlcnMiLCAiI2ZyYWdtZW50c0J5dGVzIiwgIiNieXRlT2Zmc2V0IiwgIiNsb29wIiwgIiNzdGF0ZSIsICIjaW5mbyIsICIjZnJhZ21lbnRzIiwgIiNleHRlbnNpb25zIiwgIiNtYXhGcmFnbWVudHMiLCAiI21heFBheWxvYWRTaXplIiwgImV4dGVuc2lvbnMiLCAib3B0aW9ucyIsICJjaHVuayIsICJfIiwgImNhbGxiYWNrIiwgIiN2YWxpZGF0ZVBheWxvYWRMZW5ndGgiLCAiYnVmZmVyIiwgImZpbiIsICJvcGNvZGUiLCAibWFza2VkIiwgImZyYWdtZW50ZWQiLCAicGF5bG9hZExlbmd0aCIsICJyc3YxIiwgInJzdjIiLCAicnN2MyIsICJ1cHBlciIsICJsb3dlciIsICJib2R5IiwgImVycm9yIiwgImRhdGEiLCAibiIsICJvZmZzZXQiLCAibmV4dCIsICJsZW5ndGgiLCAiZnJhZ21lbnQiLCAiZnJhZ21lbnRzIiwgIm91dHB1dCIsICJjbG9zZUZyYW1lIiwgImVyciIsICJmcmFtZSIsICJyZXF1aXJlX3NlbmRlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIldlYnNvY2tldEZyYW1lU2VuZCIsICJvcGNvZGVzIiwgInNlbmRIaW50cyIsICJGaXhlZFF1ZXVlIiwgIkZhc3RCdWZmZXIiLCAiU2VuZFF1ZXVlIiwgIiNxdWV1ZSIsICIjcnVubmluZyIsICIjc29ja2V0IiwgInNvY2tldCIsICJpdGVtIiwgImNiIiwgImhpbnQiLCAiZnJhbWUiLCAiY3JlYXRlRnJhbWUiLCAibm9kZSIsICJhYiIsICIjcnVuIiwgInF1ZXVlIiwgImRhdGEiLCAidG9CdWZmZXIiLCAicmVxdWlyZV93ZWJzb2NrZXQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3ZWJpZGwiLCAiVVJMU2VyaWFsaXplciIsICJlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IiwgInN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAic2VuZEhpbnRzIiwgImtXZWJTb2NrZXRVUkwiLCAia1JlYWR5U3RhdGUiLCAia0NvbnRyb2xsZXIiLCAia0JpbmFyeVR5cGUiLCAia1Jlc3BvbnNlIiwgImtTZW50Q2xvc2UiLCAia0J5dGVQYXJzZXIiLCAiaXNDb25uZWN0aW5nIiwgImlzRXN0YWJsaXNoZWQiLCAiaXNDbG9zaW5nIiwgImlzVmFsaWRTdWJwcm90b2NvbCIsICJmaXJlRXZlbnQiLCAiZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiIsICJjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24iLCAiQnl0ZVBhcnNlciIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImlzQmxvYkxpa2UiLCAiZ2V0R2xvYmFsRGlzcGF0Y2hlciIsICJ0eXBlcyIsICJFcnJvckV2ZW50IiwgIkNsb3NlRXZlbnQiLCAiU2VuZFF1ZXVlIiwgIldlYlNvY2tldCIsICJfV2ViU29ja2V0IiwgIiNldmVudHMiLCAiI2J1ZmZlcmVkQW1vdW50IiwgIiNwcm90b2NvbCIsICIjZXh0ZW5zaW9ucyIsICIjc2VuZFF1ZXVlIiwgInVybCIsICJwcm90b2NvbHMiLCAicHJlZml4IiwgIm9wdGlvbnMiLCAiYmFzZVVSTCIsICJ1cmxSZWNvcmQiLCAiZSIsICJwIiwgImNsaWVudCIsICJyZXNwb25zZSIsICJleHRlbnNpb25zIiwgIiNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCIsICJjb2RlIiwgInJlYXNvbiIsICJyZWFzb25CeXRlTGVuZ3RoIiwgImRhdGEiLCAibGVuZ3RoIiwgImZuIiwgInR5cGUiLCAicGFyc2VkRXh0ZW5zaW9ucyIsICJ3ZWJTb2NrZXRPcHRpb25zIiwgIm1heEZyYWdtZW50cyIsICJtYXhQYXlsb2FkU2l6ZSIsICJwYXJzZXIiLCAib25QYXJzZXJEcmFpbiIsICJvblBhcnNlckVycm9yIiwgInByb3RvY29sIiwgIlYiLCAiYXJndW1lbnQiLCAiZXJyIiwgIm1lc3NhZ2UiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNWYWxpZExhc3RFdmVudElkIiwgInZhbHVlIiwgImlzQVNDSUlOdW1iZXIiLCAiaSIsICJkZWxheSIsICJtcyIsICJyZXNvbHZlIiwgInJlcXVpcmVfZXZlbnRzb3VyY2Vfc3RyZWFtIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVHJhbnNmb3JtIiwgImlzQVNDSUlOdW1iZXIiLCAiaXNWYWxpZExhc3RFdmVudElkIiwgIkJPTSIsICJMRiIsICJDUiIsICJDT0xPTiIsICJTUEFDRSIsICJFdmVudFNvdXJjZVN0cmVhbSIsICJvcHRpb25zIiwgImNodW5rIiwgIl9lbmNvZGluZyIsICJjYWxsYmFjayIsICJsaW5lIiwgImV2ZW50IiwgImNvbG9uUG9zaXRpb24iLCAiZmllbGQiLCAidmFsdWUiLCAidmFsdWVTdGFydCIsICJyZXF1aXJlX2V2ZW50c291cmNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGlwZWxpbmUiLCAiZmV0Y2hpbmciLCAibWFrZVJlcXVlc3QiLCAid2ViaWRsIiwgIkV2ZW50U291cmNlU3RyZWFtIiwgInBhcnNlTUlNRVR5cGUiLCAiY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCIsICJpc05ldHdvcmtFcnJvciIsICJkZWxheSIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAiZXhwZXJpbWVudGFsV2FybmVkIiwgImRlZmF1bHRSZWNvbm5lY3Rpb25UaW1lIiwgIkNPTk5FQ1RJTkciLCAiT1BFTiIsICJDTE9TRUQiLCAiQU5PTllNT1VTIiwgIlVTRV9DUkVERU5USUFMUyIsICJFdmVudFNvdXJjZSIsICJfRXZlbnRTb3VyY2UiLCAiI2V2ZW50cyIsICIjdXJsIiwgIiN3aXRoQ3JlZGVudGlhbHMiLCAiI3JlYWR5U3RhdGUiLCAiI3JlcXVlc3QiLCAiI2NvbnRyb2xsZXIiLCAiI2Rpc3BhdGNoZXIiLCAiI3N0YXRlIiwgInVybCIsICJldmVudFNvdXJjZUluaXREaWN0IiwgInByZWZpeCIsICJzZXR0aW5ncyIsICJ1cmxSZWNvcmQiLCAiZSIsICJjb3JzQXR0cmlidXRlU3RhdGUiLCAiaW5pdFJlcXVlc3QiLCAiI2Nvbm5lY3QiLCAiZmV0Y2hQYXJhbXMiLCAicHJvY2Vzc0V2ZW50U291cmNlRW5kT2ZCb2R5IiwgInJlc3BvbnNlIiwgIiNyZWNvbm5lY3QiLCAiY29udGVudFR5cGUiLCAibWltZVR5cGUiLCAiY29udGVudFR5cGVWYWxpZCIsICJldmVudFNvdXJjZVN0cmVhbSIsICJldmVudCIsICJlcnJvciIsICJmbiIsICJjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzIiwgInJlcXVpcmVfdW5kaWNpIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQ2xpZW50IiwgIkRpc3BhdGNoZXIiLCAiUG9vbCIsICJCYWxhbmNlZFBvb2wiLCAiQWdlbnQiLCAiUHJveHlBZ2VudCIsICJFbnZIdHRwUHJveHlBZ2VudCIsICJSZXRyeUFnZW50IiwgImVycm9ycyIsICJ1dGlsIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImFwaSIsICJidWlsZENvbm5lY3RvciIsICJNb2NrQ2xpZW50IiwgIk1vY2tBZ2VudCIsICJNb2NrUG9vbCIsICJtb2NrRXJyb3JzIiwgIlJldHJ5SGFuZGxlciIsICJnZXRHbG9iYWxEaXNwYXRjaGVyIiwgInNldEdsb2JhbERpc3BhdGNoZXIiLCAiRGVjb3JhdG9ySGFuZGxlciIsICJSZWRpcmVjdEhhbmRsZXIiLCAiY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciIsICJtYWtlRGlzcGF0Y2hlciIsICJmbiIsICJ1cmwiLCAib3B0cyIsICJoYW5kbGVyIiwgInBhdGgiLCAiYWdlbnQiLCAiZGlzcGF0Y2hlciIsICJmZXRjaEltcGwiLCAiaW5pdCIsICJvcHRpb25zIiwgImVyciIsICJzZXRHbG9iYWxPcmlnaW4iLCAiZ2V0R2xvYmFsT3JpZ2luIiwgIkNhY2hlU3RvcmFnZSIsICJrQ29uc3RydWN0IiwgImRlbGV0ZUNvb2tpZSIsICJnZXRDb29raWVzIiwgImdldFNldENvb2tpZXMiLCAic2V0Q29va2llIiwgInBhcnNlTUlNRVR5cGUiLCAic2VyaWFsaXplQU1pbWVUeXBlIiwgIkNsb3NlRXZlbnQiLCAiRXJyb3JFdmVudCIsICJNZXNzYWdlRXZlbnQiLCAiRXZlbnRTb3VyY2UiLCAiZXhwb3J0cyIsICJnZXRQcm94eVVybCIsICJjaGVja0J5cGFzcyIsICJyZXFVcmwiLCAidXNpbmdTc2wiLCAicHJveHlWYXIiLCAiRGVjb2RlZFVSTCIsICJyZXFIb3N0IiwgImlzTG9vcGJhY2tBZGRyZXNzIiwgIm5vUHJveHkiLCAicmVxUG9ydCIsICJ1cHBlclJlcUhvc3RzIiwgInVwcGVyTm9Qcm94eUl0ZW0iLCAieCIsICJob3N0IiwgImhvc3RMb3dlciIsICJ1cmwiLCAiYmFzZSIsICJleHBvcnRzIiwgImdldFByb3h5VXJsIiwgImlzSHR0cHMiLCAiaHR0cCIsICJfX2ltcG9ydFN0YXIiLCAiaHR0cHMiLCAicG0iLCAidHVubmVsIiwgInVuZGljaV8xIiwgIkh0dHBDb2RlcyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAic2VydmVyVXJsIiwgInByb3h5VXJsIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgIkh0dHBSZXNwb25zZVJldHJ5Q29kZXMiLCAiUmV0cnlhYmxlSHR0cFZlcmJzIiwgIkV4cG9uZW50aWFsQmFja29mZkNlaWxpbmciLCAiRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlIiwgIkh0dHBDbGllbnRFcnJvciIsICJfSHR0cENsaWVudEVycm9yIiwgIm1lc3NhZ2UiLCAic3RhdHVzQ29kZSIsICJIdHRwQ2xpZW50UmVzcG9uc2UiLCAicmVzb2x2ZSIsICJfX2F3YWl0ZXIiLCAib3V0cHV0IiwgImNodW5rIiwgImNodW5rcyIsICJyZXF1ZXN0VXJsIiwgIkh0dHBDbGllbnQiLCAidXNlckFnZW50IiwgImhhbmRsZXJzIiwgInJlcXVlc3RPcHRpb25zIiwgImFkZGl0aW9uYWxIZWFkZXJzIiwgImRhdGEiLCAidmVyYiIsICJzdHJlYW0iLCAicmVxdWVzdFVybF8xIiwgInJlcyIsICJvYmpfMSIsICJvYmoiLCAiaGVhZGVycyIsICJwYXJzZWRVcmwiLCAiaW5mbyIsICJtYXhUcmllcyIsICJudW1UcmllcyIsICJyZXNwb25zZSIsICJhdXRoZW50aWNhdGlvbkhhbmRsZXIiLCAiaGFuZGxlciIsICJyZWRpcmVjdHNSZW1haW5pbmciLCAicmVkaXJlY3RVcmwiLCAicGFyc2VkUmVkaXJlY3RVcmwiLCAiaGVhZGVyIiwgInJlamVjdCIsICJjYWxsYmFja0ZvclJlc3VsdCIsICJlcnIiLCAib25SZXN1bHQiLCAiY2FsbGJhY2tDYWxsZWQiLCAiaGFuZGxlUmVzdWx0IiwgInJlcSIsICJtc2ciLCAic29ja2V0IiwgInNvY2siLCAibWV0aG9kIiwgInVzaW5nU3NsIiwgImRlZmF1bHRQb3J0IiwgImxvd2VyY2FzZUtleXMiLCAiX2RlZmF1bHQiLCAiY2xpZW50SGVhZGVyIiwgImhlYWRlclZhbHVlIiwgImFkZGl0aW9uYWxWYWx1ZSIsICJhZ2VudCIsICJ1c2VQcm94eSIsICJtYXhTb2NrZXRzIiwgImFnZW50T3B0aW9ucyIsICJ0dW5uZWxBZ2VudCIsICJvdmVySHR0cHMiLCAib3B0aW9ucyIsICJwcm94eUFnZW50IiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgInNhbml0aXplZElkIiwgInJldHJ5TnVtYmVyIiwgIm1zIiwgImRhdGVUaW1lRGVzZXJpYWxpemVyIiwgImtleSIsICJ2YWx1ZSIsICJhIiwgImNvbnRlbnRzIiwgImMiLCAiayIsICJleHBvcnRzIiwgImZvcm1hdCIsICJwYXJzZSIsICJURVhUX1JFR0VYUCIsICJUT0tFTl9SRUdFWFAiLCAiUVVPVEVfUkVHRVhQIiwgIlRZUEVfUkVHRVhQIiwgIk51bGxPYmplY3QiLCAiQyIsICJvYmoiLCAidHlwZSIsICJwYXJhbWV0ZXJzIiwgInJlc3VsdCIsICJwYXJhbSIsICJxc3RyaW5nIiwgImhlYWRlciIsICJvcHRpb25zIiwgImxlbiIsICJpbmRleCIsICJza2lwT1dTIiwgInZhbHVlU3RhcnQiLCAic2tpcFZhbHVlIiwgInZhbHVlRW5kIiwgInRyYWlsaW5nT1dTIiwgInBhcnNlUGFyYW1ldGVycyIsICJTUCIsICJIVEFCIiwgIlNFTUkiLCAiRVEiLCAiRFFVT1RFIiwgIkJTTEFTSCIsICJwYXJhbWV0ZXIiLCAia2V5U3RhcnQiLCAiY29kZSIsICJrZXlFbmQiLCAia2V5IiwgInZhbHVlIiwgInN0ciIsICJjaGFyIiwgInN0YXJ0IiwgImVuZCIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNFTVZFUl9TUEVDX1ZFUlNJT04iLCAiTUFYX1NBRkVfSU5URUdFUiIsICJNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIIiwgIk1BWF9TQUZFX0JVSUxEX0xFTkdUSCIsICJSRUxFQVNFX1RZUEVTIiwgInJlcXVpcmVfZGVidWciLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJkZWJ1ZyIsICJhcmdzIiwgInJlcXVpcmVfcmUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIIiwgIk1BWF9TQUZFX0JVSUxEX0xFTkdUSCIsICJNQVhfTEVOR1RIIiwgImRlYnVnIiwgInJlIiwgInNhZmVSZSIsICJzcmMiLCAic2FmZVNyYyIsICJ0IiwgIlIiLCAiTEVUVEVSREFTSE5VTUJFUiIsICJzYWZlUmVnZXhSZXBsYWNlbWVudHMiLCAibWFrZVNhZmVSZWdleCIsICJ2YWx1ZSIsICJ0b2tlbiIsICJtYXgiLCAiY3JlYXRlVG9rZW4iLCAibmFtZSIsICJpc0dsb2JhbCIsICJzYWZlIiwgImluZGV4IiwgInJlcXVpcmVfcGFyc2Vfb3B0aW9ucyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImxvb3NlT3B0aW9uIiwgImVtcHR5T3B0cyIsICJwYXJzZU9wdGlvbnMiLCAib3B0aW9ucyIsICJyZXF1aXJlX2lkZW50aWZpZXJzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibnVtZXJpYyIsICJjb21wYXJlSWRlbnRpZmllcnMiLCAiYSIsICJiIiwgImFudW0iLCAiYm51bSIsICJyY29tcGFyZUlkZW50aWZpZXJzIiwgInJlcXVpcmVfc2VtdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZGVidWciLCAiTUFYX0xFTkdUSCIsICJNQVhfU0FGRV9JTlRFR0VSIiwgInJlIiwgInQiLCAicGFyc2VPcHRpb25zIiwgImNvbXBhcmVJZGVudGlmaWVycyIsICJpc1ByZXJlbGVhc2VJZGVudGlmaWVyIiwgInByZXJlbGVhc2UiLCAiaWRlbnRpZmllciIsICJpZGVudGlmaWVycyIsICJpIiwgIlNlbVZlciIsICJfU2VtVmVyIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJtIiwgImlkIiwgIm51bSIsICJvdGhlciIsICJhIiwgImIiLCAicmVsZWFzZSIsICJpZGVudGlmaWVyQmFzZSIsICJtYXRjaCIsICJiYXNlIiwgInByZXJlbGVhc2VCYXNlIiwgInJlcXVpcmVfcGFyc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAicGFyc2UiLCAidmVyc2lvbiIsICJvcHRpb25zIiwgInRocm93RXJyb3JzIiwgImVyIiwgInJlcXVpcmVfdmFsaWQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXJzZSIsICJ2YWxpZCIsICJ2ZXJzaW9uIiwgIm9wdGlvbnMiLCAidiIsICJyZXF1aXJlX2NsZWFuIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAiY2xlYW4iLCAidmVyc2lvbiIsICJvcHRpb25zIiwgInMiLCAicmVxdWlyZV9pbmMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAiaW5jIiwgInZlcnNpb24iLCAicmVsZWFzZSIsICJvcHRpb25zIiwgImlkZW50aWZpZXIiLCAiaWRlbnRpZmllckJhc2UiLCAicmVxdWlyZV9kaWZmIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAiZGlmZiIsICJ2ZXJzaW9uMSIsICJ2ZXJzaW9uMiIsICJ2MSIsICJ2MiIsICJjb21wYXJpc29uIiwgInYxSGlnaGVyIiwgImhpZ2hWZXJzaW9uIiwgImxvd1ZlcnNpb24iLCAiaGlnaEhhc1ByZSIsICJwcmVmaXgiLCAicmVxdWlyZV9tYWpvciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJtYWpvciIsICJhIiwgImxvb3NlIiwgInJlcXVpcmVfbWlub3IiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAibWlub3IiLCAiYSIsICJsb29zZSIsICJyZXF1aXJlX3BhdGNoIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgInBhdGNoIiwgImEiLCAibG9vc2UiLCAicmVxdWlyZV9wcmVyZWxlYXNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAicHJlcmVsZWFzZSIsICJ2ZXJzaW9uIiwgIm9wdGlvbnMiLCAicGFyc2VkIiwgInJlcXVpcmVfY29tcGFyZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJjb21wYXJlIiwgImEiLCAiYiIsICJsb29zZSIsICJyZXF1aXJlX3Jjb21wYXJlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJyY29tcGFyZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9jb21wYXJlX2xvb3NlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJjb21wYXJlTG9vc2UiLCAiYSIsICJiIiwgInJlcXVpcmVfY29tcGFyZV9idWlsZCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJjb21wYXJlQnVpbGQiLCAiYSIsICJiIiwgImxvb3NlIiwgInZlcnNpb25BIiwgInZlcnNpb25CIiwgInJlcXVpcmVfc29ydCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvbXBhcmVCdWlsZCIsICJzb3J0IiwgImxpc3QiLCAibG9vc2UiLCAiYSIsICJiIiwgInJlcXVpcmVfcnNvcnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlQnVpbGQiLCAicnNvcnQiLCAibGlzdCIsICJsb29zZSIsICJhIiwgImIiLCAicmVxdWlyZV9ndCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvbXBhcmUiLCAiZ3QiLCAiYSIsICJiIiwgImxvb3NlIiwgInJlcXVpcmVfbHQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImx0IiwgImEiLCAiYiIsICJsb29zZSIsICJyZXF1aXJlX2VxIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJlcSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9uZXEiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgIm5lcSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9ndGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImd0ZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9sdGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImx0ZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9jbXAiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJlcSIsICJuZXEiLCAiZ3QiLCAiZ3RlIiwgImx0IiwgImx0ZSIsICJjbXAiLCAiYSIsICJvcCIsICJiIiwgImxvb3NlIiwgInJlcXVpcmVfY29lcmNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgInBhcnNlIiwgInJlIiwgInQiLCAiY29lcmNlIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJtYXRjaCIsICJjb2VyY2VSdGxSZWdleCIsICJuZXh0IiwgIm1ham9yIiwgIm1pbm9yIiwgInBhdGNoIiwgInByZXJlbGVhc2UiLCAiYnVpbGQiLCAicmVxdWlyZV90cnVuY2F0ZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhcnNlIiwgImNvbnN0YW50cyIsICJTZW1WZXIiLCAidHJ1bmNhdGUiLCAidmVyc2lvbiIsICJ0cnVuY2F0aW9uIiwgIm9wdGlvbnMiLCAiY2xvbmVkVmVyc2lvbiIsICJjbG9uZUlucHV0VmVyc2lvbiIsICJkb1RydW5jYXRpb24iLCAidmVyc2lvblN0cmluZ1RvUGFyc2UiLCAiaXNQcmVyZWxlYXNlIiwgInR5cGUiLCAicmVxdWlyZV9scnVjYWNoZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkxSVUNhY2hlIiwgImtleSIsICJ2YWx1ZSIsICJmaXJzdEtleSIsICJyZXF1aXJlX3JhbmdlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU1BBQ0VfQ0hBUkFDVEVSUyIsICJSYW5nZSIsICJfUmFuZ2UiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJwYXJzZU9wdGlvbnMiLCAiQ29tcGFyYXRvciIsICJyIiwgImMiLCAiZmlyc3QiLCAiaXNOdWxsU2V0IiwgImlzQW55IiwgImkiLCAiY29tcHMiLCAiayIsICJCVUlMRFNUUklQUkUiLCAibWVtb0tleSIsICJGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRSIsICJGTEFHX0xPT1NFIiwgImNhY2hlZCIsICJjYWNoZSIsICJsb29zZSIsICJociIsICJyZSIsICJ0IiwgImh5cGhlblJlcGxhY2UiLCAiZGVidWciLCAiY29tcGFyYXRvclRyaW1SZXBsYWNlIiwgInRpbGRlVHJpbVJlcGxhY2UiLCAiY2FyZXRUcmltUmVwbGFjZSIsICJyYW5nZUxpc3QiLCAiY29tcCIsICJwYXJzZUNvbXBhcmF0b3IiLCAicmVwbGFjZUdURTAiLCAicmFuZ2VNYXAiLCAiY29tcGFyYXRvcnMiLCAicmVzdWx0IiwgInRoaXNDb21wYXJhdG9ycyIsICJpc1NhdGlzZmlhYmxlIiwgInJhbmdlQ29tcGFyYXRvcnMiLCAidGhpc0NvbXBhcmF0b3IiLCAicmFuZ2VDb21wYXJhdG9yIiwgInZlcnNpb24iLCAiU2VtVmVyIiwgInRlc3RTZXQiLCAiTFJVIiwgInNyYyIsICJyZW1haW5pbmdDb21wYXJhdG9ycyIsICJ0ZXN0Q29tcGFyYXRvciIsICJvdGhlckNvbXBhcmF0b3IiLCAicmVwbGFjZUNhcmV0cyIsICJyZXBsYWNlVGlsZGVzIiwgInJlcGxhY2VYUmFuZ2VzIiwgInJlcGxhY2VTdGFycyIsICJpc1giLCAiaWQiLCAiaW52YWxpZFhSYW5nZU9yZGVyIiwgIk0iLCAibSIsICJwIiwgInJlcGxhY2VUaWxkZSIsICJ6IiwgIl8iLCAicHIiLCAicmV0IiwgInJlcGxhY2VDYXJldCIsICJyZXBsYWNlWFJhbmdlIiwgImd0bHQiLCAieE0iLCAieG0iLCAieHAiLCAiYW55WCIsICJpbmNQciIsICIkMCIsICJmcm9tIiwgImZNIiwgImZtIiwgImZwIiwgImZwciIsICJmYiIsICJ0byIsICJ0TSIsICJ0bSIsICJ0cCIsICJ0cHIiLCAic2V0IiwgImFsbG93ZWQiLCAicmVxdWlyZV9jb21wYXJhdG9yIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQU5ZIiwgIkNvbXBhcmF0b3IiLCAiX0NvbXBhcmF0b3IiLCAiY29tcCIsICJvcHRpb25zIiwgInBhcnNlT3B0aW9ucyIsICJkZWJ1ZyIsICJyZSIsICJ0IiwgIm0iLCAiU2VtVmVyIiwgInZlcnNpb24iLCAiY21wIiwgIlJhbmdlIiwgInJlcXVpcmVfc2F0aXNmaWVzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAic2F0aXNmaWVzIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX3RvX2NvbXBhcmF0b3JzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAidG9Db21wYXJhdG9ycyIsICJyYW5nZSIsICJvcHRpb25zIiwgImNvbXAiLCAiYyIsICJyZXF1aXJlX21heF9zYXRpc2Z5aW5nIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgIm1heFNhdGlzZnlpbmciLCAidmVyc2lvbnMiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJtYXgiLCAibWF4U1YiLCAicmFuZ2VPYmoiLCAidiIsICJyZXF1aXJlX21pbl9zYXRpc2Z5aW5nIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgIm1pblNhdGlzZnlpbmciLCAidmVyc2lvbnMiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJtaW4iLCAibWluU1YiLCAicmFuZ2VPYmoiLCAidiIsICJyZXF1aXJlX21pbl92ZXJzaW9uIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgImd0IiwgIm1pblZlcnNpb24iLCAicmFuZ2UiLCAibG9vc2UiLCAibWludmVyIiwgImkiLCAiY29tcGFyYXRvcnMiLCAic2V0TWluIiwgImNvbXBhcmF0b3IiLCAiY29tcHZlciIsICJyZXF1aXJlX3ZhbGlkIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAidmFsaWRSYW5nZSIsICJyYW5nZSIsICJvcHRpb25zIiwgInJlcXVpcmVfb3V0c2lkZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJDb21wYXJhdG9yIiwgIkFOWSIsICJSYW5nZSIsICJzYXRpc2ZpZXMiLCAiZ3QiLCAibHQiLCAibHRlIiwgImd0ZSIsICJvdXRzaWRlIiwgInZlcnNpb24iLCAicmFuZ2UiLCAiaGlsbyIsICJvcHRpb25zIiwgImd0Zm4iLCAibHRlZm4iLCAibHRmbiIsICJjb21wIiwgImVjb21wIiwgImkiLCAiY29tcGFyYXRvcnMiLCAiaGlnaCIsICJsb3ciLCAiY29tcGFyYXRvciIsICJyZXF1aXJlX2d0ciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm91dHNpZGUiLCAiZ3RyIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX2x0ciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm91dHNpZGUiLCAibHRyIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX2ludGVyc2VjdHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSYW5nZSIsICJpbnRlcnNlY3RzIiwgInIxIiwgInIyIiwgIm9wdGlvbnMiLCAicmVxdWlyZV9zaW1wbGlmeSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNhdGlzZmllcyIsICJjb21wYXJlIiwgInZlcnNpb25zIiwgInJhbmdlIiwgIm9wdGlvbnMiLCAic2V0IiwgImZpcnN0IiwgInByZXYiLCAidiIsICJhIiwgImIiLCAidmVyc2lvbiIsICJyYW5nZXMiLCAibWluIiwgIm1heCIsICJzaW1wbGlmaWVkIiwgIm9yaWdpbmFsIiwgInJlcXVpcmVfc3Vic2V0IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAiQ29tcGFyYXRvciIsICJBTlkiLCAic2F0aXNmaWVzIiwgImNvbXBhcmUiLCAic3Vic2V0IiwgInN1YiIsICJkb20iLCAib3B0aW9ucyIsICJzYXdOb25OdWxsIiwgIk9VVEVSIiwgInNpbXBsZVN1YiIsICJzaW1wbGVEb20iLCAiaXNTdWIiLCAic2ltcGxlU3Vic2V0IiwgIm1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2UiLCAibWluaW11bVZlcnNpb24iLCAiZXFTZXQiLCAiZ3QiLCAibHQiLCAiYyIsICJoaWdoZXJHVCIsICJsb3dlckxUIiwgImd0bHRDb21wIiwgImVxIiwgImhpZ2hlciIsICJsb3dlciIsICJoYXNEb21MVCIsICJoYXNEb21HVCIsICJuZWVkRG9tTFRQcmUiLCAibmVlZERvbUdUUHJlIiwgImEiLCAiYiIsICJjb21wIiwgInJlcXVpcmVfc2VtdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaW50ZXJuYWxSZSIsICJjb25zdGFudHMiLCAiU2VtVmVyIiwgImlkZW50aWZpZXJzIiwgInBhcnNlIiwgInZhbGlkIiwgImNsZWFuIiwgImluYyIsICJkaWZmIiwgIm1ham9yIiwgIm1pbm9yIiwgInBhdGNoIiwgInByZXJlbGVhc2UiLCAiY29tcGFyZSIsICJyY29tcGFyZSIsICJjb21wYXJlTG9vc2UiLCAiY29tcGFyZUJ1aWxkIiwgInNvcnQiLCAicnNvcnQiLCAiZ3QiLCAibHQiLCAiZXEiLCAibmVxIiwgImd0ZSIsICJsdGUiLCAiY21wIiwgImNvZXJjZSIsICJ0cnVuY2F0ZSIsICJDb21wYXJhdG9yIiwgIlJhbmdlIiwgInNhdGlzZmllcyIsICJ0b0NvbXBhcmF0b3JzIiwgIm1heFNhdGlzZnlpbmciLCAibWluU2F0aXNmeWluZyIsICJtaW5WZXJzaW9uIiwgInZhbGlkUmFuZ2UiLCAib3V0c2lkZSIsICJndHIiLCAibHRyIiwgImludGVyc2VjdHMiLCAic2ltcGxpZnlSYW5nZSIsICJzdWJzZXQiLCAicHJvY2VzcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgIm9zIiwgInRvQ29tbWFuZFZhbHVlIiwgImlucHV0IiwgInRvQ29tbWFuZFByb3BlcnRpZXMiLCAiYW5ub3RhdGlvblByb3BlcnRpZXMiLCAiaXNzdWVDb21tYW5kIiwgImNvbW1hbmQiLCAicHJvcGVydGllcyIsICJtZXNzYWdlIiwgImNtZCIsICJDb21tYW5kIiwgIkNNRF9TVFJJTkciLCAiQ29tbWFuZCIsICJjb21tYW5kIiwgInByb3BlcnRpZXMiLCAibWVzc2FnZSIsICJjbWRTdHIiLCAiZmlyc3QiLCAia2V5IiwgInZhbCIsICJlc2NhcGVQcm9wZXJ0eSIsICJlc2NhcGVEYXRhIiwgInMiLCAidG9Db21tYW5kVmFsdWUiLCAib3MiLCAiaHR0cCIsICJodHRwcyIsICJnZXRQcm94eVVybCIsICJyZXFVcmwiLCAidXNpbmdTc2wiLCAiY2hlY2tCeXBhc3MiLCAicHJveHlWYXIiLCAiRGVjb2RlZFVSTCIsICJyZXFIb3N0IiwgImlzTG9vcGJhY2tBZGRyZXNzIiwgIm5vUHJveHkiLCAicmVxUG9ydCIsICJ1cHBlclJlcUhvc3RzIiwgInVwcGVyTm9Qcm94eUl0ZW0iLCAieCIsICJob3N0IiwgImhvc3RMb3dlciIsICJ1cmwiLCAiYmFzZSIsICJ0dW5uZWwiLCAiaW1wb3J0X3VuZGljaSIsICJIdHRwQ29kZXMiLCAiSGVhZGVycyIsICJNZWRpYVR5cGVzIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgIkh0dHBDb2RlcyIsICJIdHRwUmVzcG9uc2VSZXRyeUNvZGVzIiwgIlJldHJ5YWJsZUh0dHBWZXJicyIsICJFeHBvbmVudGlhbEJhY2tvZmZDZWlsaW5nIiwgIkV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSIsICJIdHRwQ2xpZW50RXJyb3IiLCAiX0h0dHBDbGllbnRFcnJvciIsICJtZXNzYWdlIiwgInN0YXR1c0NvZGUiLCAiSHR0cENsaWVudFJlc3BvbnNlIiwgInJlc29sdmUiLCAiX19hd2FpdGVyIiwgIm91dHB1dCIsICJjaHVuayIsICJjaHVua3MiLCAiSHR0cENsaWVudCIsICJ1c2VyQWdlbnQiLCAiaGFuZGxlcnMiLCAicmVxdWVzdE9wdGlvbnMiLCAicmVxdWVzdFVybCIsICJhZGRpdGlvbmFsSGVhZGVycyIsICJkYXRhIiwgInZlcmIiLCAic3RyZWFtIiwgInJlcXVlc3RVcmxfMSIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAicmVzIiwgIm9ial8xIiwgIm9iaiIsICJoZWFkZXJzIiwgInBhcnNlZFVybCIsICJpbmZvIiwgIm1heFRyaWVzIiwgIlJldHJ5YWJsZUh0dHBWZXJicyIsICJudW1UcmllcyIsICJyZXNwb25zZSIsICJIdHRwQ29kZXMiLCAiYXV0aGVudGljYXRpb25IYW5kbGVyIiwgImhhbmRsZXIiLCAicmVkaXJlY3RzUmVtYWluaW5nIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgInJlZGlyZWN0VXJsIiwgInBhcnNlZFJlZGlyZWN0VXJsIiwgImhlYWRlciIsICJIdHRwUmVzcG9uc2VSZXRyeUNvZGVzIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImNhbGxiYWNrRm9yUmVzdWx0IiwgImVyciIsICJvblJlc3VsdCIsICJjYWxsYmFja0NhbGxlZCIsICJoYW5kbGVSZXN1bHQiLCAicmVxIiwgIm1zZyIsICJIdHRwQ2xpZW50UmVzcG9uc2UiLCAic29ja2V0IiwgInNvY2siLCAic2VydmVyVXJsIiwgInByb3h5VXJsIiwgImdldFByb3h5VXJsIiwgIm1ldGhvZCIsICJ1c2luZ1NzbCIsICJodHRwcyIsICJodHRwIiwgImRlZmF1bHRQb3J0IiwgImxvd2VyY2FzZUtleXMiLCAiX2RlZmF1bHQiLCAiY2xpZW50SGVhZGVyIiwgImhlYWRlclZhbHVlIiwgImFkZGl0aW9uYWxWYWx1ZSIsICJhZ2VudCIsICJ1c2VQcm94eSIsICJtYXhTb2NrZXRzIiwgImFnZW50T3B0aW9ucyIsICJ0dW5uZWxBZ2VudCIsICJvdmVySHR0cHMiLCAib3B0aW9ucyIsICJwcm94eUFnZW50IiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgInNhbml0aXplZElkIiwgInJldHJ5TnVtYmVyIiwgIkV4cG9uZW50aWFsQmFja29mZkNlaWxpbmciLCAibXMiLCAiRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlIiwgIl9fYXdhaXRlciIsICJzdGF0dXNDb2RlIiwgImRhdGVUaW1lRGVzZXJpYWxpemVyIiwgImtleSIsICJ2YWx1ZSIsICJhIiwgImNvbnRlbnRzIiwgIkh0dHBDbGllbnRFcnJvciIsICJjIiwgImsiLCAiaW1wb3J0X29zIiwgImltcG9ydF9mcyIsICJhY2Nlc3MiLCAiYXBwZW5kRmlsZSIsICJ3cml0ZUZpbGUiLCAiU1VNTUFSWV9FTlZfVkFSIiwgIlN1bW1hcnkiLCAicGF0aEZyb21FbnYiLCAiU1VNTUFSWV9FTlZfVkFSIiwgImFjY2VzcyIsICJ0YWciLCAiY29udGVudCIsICJhdHRycyIsICJodG1sQXR0cnMiLCAia2V5IiwgInZhbHVlIiwgIm9wdGlvbnMiLCAib3ZlcndyaXRlIiwgImZpbGVQYXRoIiwgIndyaXRlRmlsZSIsICJhcHBlbmRGaWxlIiwgInRleHQiLCAiYWRkRU9MIiwgImNvZGUiLCAibGFuZyIsICJlbGVtZW50IiwgIml0ZW1zIiwgIm9yZGVyZWQiLCAibGlzdEl0ZW1zIiwgIml0ZW0iLCAicm93cyIsICJ0YWJsZUJvZHkiLCAicm93IiwgImNlbGxzIiwgImNlbGwiLCAiaGVhZGVyIiwgImRhdGEiLCAiY29sc3BhbiIsICJyb3dzcGFuIiwgImxhYmVsIiwgInNyYyIsICJhbHQiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImxldmVsIiwgImFsbG93ZWRUYWciLCAiY2l0ZSIsICJocmVmIiwgIl9zdW1tYXJ5IiwgImltcG9ydF9vcyIsICJvcyIsICJldmVudHMiLCAiY2hpbGQiLCAicGF0aCIsICJpbXBvcnRfYXNzZXJ0IiwgInBhdGgiLCAiZnMiLCAicGF0aCIsICJjaG1vZCIsICJjb3B5RmlsZSIsICJsc3RhdCIsICJta2RpciIsICJvcGVuIiwgInJlYWRkaXIiLCAicmVuYW1lIiwgInJtIiwgInJtZGlyIiwgInN0YXQiLCAic3ltbGluayIsICJ1bmxpbmsiLCAiSVNfV0lORE9XUyIsICJSRUFET05MWSIsICJleGlzdHMiLCAiZnNQYXRoIiwgInN0YXQiLCAiZXJyIiwgImlzUm9vdGVkIiwgInAiLCAibm9ybWFsaXplU2VwYXJhdG9ycyIsICJJU19XSU5ET1dTIiwgInRyeUdldEV4ZWN1dGFibGVQYXRoIiwgImZpbGVQYXRoIiwgImV4dGVuc2lvbnMiLCAic3RhdHMiLCAic3RhdCIsICJlcnIiLCAidXBwZXJFeHQiLCAidmFsaWRFeHQiLCAiaXNVbml4RXhlY3V0YWJsZSIsICJvcmlnaW5hbEZpbGVQYXRoIiwgImV4dGVuc2lvbiIsICJkaXJlY3RvcnkiLCAidXBwZXJOYW1lIiwgImFjdHVhbE5hbWUiLCAicmVhZGRpciIsICJybVJGIiwgImlucHV0UGF0aCIsICJJU19XSU5ET1dTIiwgInJtIiwgImVyciIsICJta2RpclAiLCAiZnNQYXRoIiwgIm1rZGlyIiwgIndoaWNoIiwgInRvb2wiLCAiY2hlY2siLCAicmVzdWx0IiwgIm1hdGNoZXMiLCAiZmluZEluUGF0aCIsICJleHRlbnNpb25zIiwgImV4dGVuc2lvbiIsICJpc1Jvb3RlZCIsICJmaWxlUGF0aCIsICJ0cnlHZXRFeGVjdXRhYmxlUGF0aCIsICJkaXJlY3RvcmllcyIsICJwIiwgImRpcmVjdG9yeSIsICJpbXBvcnRfdGltZXJzIiwgIklTX1dJTkRPV1MiLCAiVG9vbFJ1bm5lciIsICJ0b29sUGF0aCIsICJhcmdzIiwgIm9wdGlvbnMiLCAibWVzc2FnZSIsICJub1ByZWZpeCIsICJjbWQiLCAiYSIsICJkYXRhIiwgInN0ckJ1ZmZlciIsICJvbkxpbmUiLCAibiIsICJsaW5lIiwgImVyciIsICJhcmdsaW5lIiwgInN0ciIsICJlbmQiLCAidXBwZXJUb29sUGF0aCIsICJhcmciLCAiY21kU3BlY2lhbENoYXJzIiwgIm5lZWRzUXVvdGVzIiwgImNoYXIiLCAieCIsICJyZXZlcnNlIiwgInF1b3RlSGl0IiwgImkiLCAicmVzdWx0IiwgImlzUm9vdGVkIiwgIndoaWNoIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIl9fYXdhaXRlciIsICJvcHRpb25zTm9uTnVsbCIsICJzdGF0ZSIsICJFeGVjU3RhdGUiLCAiZXhpc3RzIiwgImZpbGVOYW1lIiwgImNwIiwgInN0ZGJ1ZmZlciIsICJlcnJidWZmZXIiLCAiY29kZSIsICJlcnJvciIsICJleGl0Q29kZSIsICJhcmdTdHJpbmdUb0FycmF5IiwgImFyZ1N0cmluZyIsICJpblF1b3RlcyIsICJlc2NhcGVkIiwgImFwcGVuZCIsICJjIiwgIl9FeGVjU3RhdGUiLCAiZXhlYyIsICJjb21tYW5kTGluZSIsICJhcmdzIiwgIm9wdGlvbnMiLCAiY29tbWFuZEFyZ3MiLCAiYXJnU3RyaW5nVG9BcnJheSIsICJ0b29sUGF0aCIsICJUb29sUnVubmVyIiwgInBsYXRmb3JtIiwgIm9zIiwgImFyY2giLCAiRXhpdENvZGUiLCAiZ2V0SW5wdXQiLCAibmFtZSIsICJvcHRpb25zIiwgInZhbCIsICJzZXRGYWlsZWQiLCAibWVzc2FnZSIsICJFeGl0Q29kZSIsICJlcnJvciIsICJpc0RlYnVnIiwgImRlYnVnIiwgImlzc3VlQ29tbWFuZCIsICJwcm9wZXJ0aWVzIiwgInRvQ29tbWFuZFByb3BlcnRpZXMiLCAiaW5mbyIsICJtZXNzYWdlIiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiQ29udGV4dCIsICJwYXRoIiwgIl9hIiwgIl9iIiwgIl9jIiwgInBheWxvYWQiLCAib3duZXIiLCAicmVwbyIsICJodHRwQ2xpZW50IiwgImltcG9ydF91bmRpY2kiLCAiZ2V0QXV0aFN0cmluZyIsICJ0b2tlbiIsICJvcHRpb25zIiwgImdldFByb3h5QWdlbnQiLCAiZGVzdGluYXRpb25VcmwiLCAiZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIiLCAiZ2V0UHJveHlGZXRjaCIsICJodHRwRGlzcGF0Y2hlciIsICJ1cmwiLCAib3B0cyIsICJfX2F3YWl0ZXIiLCAiZ2V0QXBpQmFzZVVybCIsICJnZXRVc2VyQWdlbnRXaXRoT3JjaGVzdHJhdGlvbklkIiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgIl9hIiwgInRhZyIsICJnZXRVc2VyQWdlbnQiLCAicmVnaXN0ZXIiLCAic3RhdGUiLCAibmFtZSIsICJtZXRob2QiLCAib3B0aW9ucyIsICJjYWxsYmFjayIsICJyZWdpc3RlcmVkIiwgImFkZEhvb2siLCAic3RhdGUiLCAia2luZCIsICJuYW1lIiwgImhvb2siLCAib3JpZyIsICJtZXRob2QiLCAib3B0aW9ucyIsICJyZXN1bHQiLCAicmVzdWx0XyIsICJlcnJvciIsICJyZW1vdmVIb29rIiwgInN0YXRlIiwgIm5hbWUiLCAibWV0aG9kIiwgImluZGV4IiwgInJlZ2lzdGVyZWQiLCAiYmluZCIsICJiaW5kYWJsZSIsICJiaW5kQXBpIiwgImhvb2siLCAic3RhdGUiLCAibmFtZSIsICJyZW1vdmVIb29rUmVmIiwgInJlbW92ZUhvb2siLCAia2luZCIsICJhcmdzIiwgImFkZEhvb2siLCAiU2luZ3VsYXIiLCAic2luZ3VsYXJIb29rTmFtZSIsICJzaW5ndWxhckhvb2tTdGF0ZSIsICJzaW5ndWxhckhvb2siLCAicmVnaXN0ZXIiLCAiQ29sbGVjdGlvbiIsICJiZWZvcmVfYWZ0ZXJfaG9va19kZWZhdWx0IiwgIlZFUlNJT04iLCAidXNlckFnZW50IiwgImdldFVzZXJBZ2VudCIsICJERUZBVUxUUyIsICJsb3dlcmNhc2VLZXlzIiwgIm9iamVjdCIsICJuZXdPYmoiLCAia2V5IiwgImlzUGxhaW5PYmplY3QiLCAidmFsdWUiLCAicHJvdG8iLCAiQ3RvciIsICJtZXJnZURlZXAiLCAiZGVmYXVsdHMiLCAib3B0aW9ucyIsICJyZXN1bHQiLCAicmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyIsICJvYmoiLCAibWVyZ2UiLCAicm91dGUiLCAibWV0aG9kIiwgInVybCIsICJtZXJnZWRPcHRpb25zIiwgInByZXZpZXciLCAiYWRkUXVlcnlQYXJhbWV0ZXJzIiwgInBhcmFtZXRlcnMiLCAic2VwYXJhdG9yIiwgIm5hbWVzIiwgIm5hbWUiLCAidXJsVmFyaWFibGVSZWdleCIsICJyZW1vdmVOb25DaGFycyIsICJ2YXJpYWJsZU5hbWUiLCAiZXh0cmFjdFVybFZhcmlhYmxlTmFtZXMiLCAibWF0Y2hlcyIsICJhIiwgImIiLCAib21pdCIsICJrZXlzVG9PbWl0IiwgImVuY29kZVJlc2VydmVkIiwgInN0ciIsICJwYXJ0IiwgImVuY29kZVVucmVzZXJ2ZWQiLCAiYyIsICJlbmNvZGVWYWx1ZSIsICJvcGVyYXRvciIsICJpc0RlZmluZWQiLCAiaXNLZXlPcGVyYXRvciIsICJnZXRWYWx1ZXMiLCAiY29udGV4dCIsICJtb2RpZmllciIsICJ2YWx1ZTIiLCAiayIsICJ0bXAiLCAicGFyc2VVcmwiLCAidGVtcGxhdGUiLCAiZXhwYW5kIiwgIm9wZXJhdG9ycyIsICJfIiwgImV4cHJlc3Npb24iLCAibGl0ZXJhbCIsICJ2YWx1ZXMiLCAidmFyaWFibGUiLCAicGFyc2UiLCAiaGVhZGVycyIsICJib2R5IiwgInVybFZhcmlhYmxlTmFtZXMiLCAib21pdHRlZFBhcmFtZXRlcnMiLCAib3B0aW9uIiwgInJlbWFpbmluZ1BhcmFtZXRlcnMiLCAiZm9ybWF0IiwgInByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciIsICJlbmRwb2ludFdpdGhEZWZhdWx0cyIsICJ3aXRoRGVmYXVsdHMiLCAib2xkRGVmYXVsdHMiLCAibmV3RGVmYXVsdHMiLCAiREVGQVVMVFMyIiwgImVuZHBvaW50MiIsICJlbmRwb2ludCIsICJpbXBvcnRfY29udGVudF90eXBlIiwgImludFJlZ2V4IiwgIm5vaXNlVmFsdWUiLCAib3JpZ2luYWxTdHJpbmdpZnkiLCAib3JpZ2luYWxQYXJzZSIsICJjdXN0b21Gb3JtYXQiLCAiYmlnSW50c1N0cmluZ2lmeSIsICJub2lzZVN0cmluZ2lmeSIsICJpc1Vuc3RyaW5naWZpYWJsZSIsICJ2YWwiLCAiaXNSYXdKU09OIiwgInN0cmluZ2lmeUl0ZXJhdGl2ZWx5IiwgInJvb3RWYWx1ZSIsICJyZXBsYWNlciIsICJzcGFjZVBhcmFtIiwgInNwYWNlIiwgImlzRnVuY3Rpb25SZXBsYWNlciIsICJwcm9wZXJ0eUxpc3QiLCAicHJlcGFyZVZhbCIsICJwYXJlbnQiLCAia2V5IiwgInJvb3RQcm9jZXNzZWQiLCAiaXNSb290UHJpbWl0aXZlIiwgImlzUm9vdE5hdGl2ZVJhd0pTT04iLCAiY2h1bmtzIiwgImxldmVsIiwgInN0YWNrIiwgInZpc2l0ZWQiLCAibm9kZSIsICJpc0RvbmUiLCAiY2hpbGRSYXciLCAiY2hpbGRWYWwiLCAiaXNDb21wbGV4T2JqZWN0IiwgImlzTmF0aXZlUmF3IiwgImsiLCAiSlNPTlN0cmluZ2lmeSIsICJ2YWx1ZSIsICJlcnJvciIsICJjb252ZXJ0ZWRKU09OIiwgImZlYXR1cmVDYWNoZSIsICJpc0NvbnRleHRTb3VyY2VTdXBwb3J0ZWQiLCAicGFyc2VGaW5nZXJwcmludCIsICJyZXN1bHQiLCAiXyIsICJfXyIsICJjb250ZXh0IiwgImNvbnZlcnRNYXJrZWRCaWdJbnRzUmV2aXZlciIsICJ1c2VyUmV2aXZlciIsICJKU09OUGFyc2VWMiIsICJ0ZXh0IiwgInJldml2ZXIiLCAiaXNOdW1iZXIiLCAiaXNPdXRPZkJvdW5kcyIsICJpc0JpZ051bWJlciIsICJpc0ludCIsICJNQVhfSU5UIiwgIk1BWF9ESUdJVFMiLCAic3RyaW5nc09yTGFyZ2VOdW1iZXJzIiwgIm5vaXNlVmFsdWVXaXRoUXVvdGVzIiwgImFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5IiwgInBhcnNlZCIsICJyb290SG9sZGVyIiwgImtleXMiLCAiaSIsICJzZXJpYWxpemVCaWdJbnRzIiwgIm1hdGNoIiwgImRpZ2l0cyIsICJmcmFjdGlvbmFsIiwgImV4cG9uZW50aWFsIiwgImlzU3RyaW5nIiwgImhhc0ZyYWN0aW9uYWxPckV4cG9uZW50aWFsIiwgImlzTGVzc1RoYW5NYXhTYWZlSW50IiwgIkpTT05QYXJzZSIsICJzZXJpYWxpemVkRGF0YSIsICJSZXF1ZXN0RXJyb3IiLCAibWVzc2FnZSIsICJzdGF0dXNDb2RlIiwgIm9wdGlvbnMiLCAicmVxdWVzdENvcHkiLCAiVkVSU0lPTiIsICJkZWZhdWx0c19kZWZhdWx0IiwgImdldFVzZXJBZ2VudCIsICJpc1BsYWluT2JqZWN0IiwgInZhbHVlIiwgInByb3RvIiwgIkN0b3IiLCAibm9vcCIsICJmZXRjaFdyYXBwZXIiLCAicmVxdWVzdE9wdGlvbnMiLCAiZmV0Y2giLCAibG9nIiwgInBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSIsICJib2R5IiwgIkpTT05TdHJpbmdpZnkiLCAicmVxdWVzdEhlYWRlcnMiLCAibmFtZSIsICJmZXRjaFJlc3BvbnNlIiwgImVycm9yIiwgIm1lc3NhZ2UiLCAicmVxdWVzdEVycm9yIiwgIlJlcXVlc3RFcnJvciIsICJzdGF0dXMiLCAidXJsIiwgInJlc3BvbnNlSGVhZGVycyIsICJrZXkiLCAib2N0b2tpdFJlc3BvbnNlIiwgIm1hdGNoZXMiLCAiZGVwcmVjYXRpb25MaW5rIiwgImdldFJlc3BvbnNlRGF0YSIsICJ0b0Vycm9yTWVzc2FnZSIsICJyZXNwb25zZSIsICJjb250ZW50VHlwZSIsICJtaW1ldHlwZSIsICJpc0pTT05SZXNwb25zZSIsICJ0ZXh0IiwgIkpTT05QYXJzZSIsICJkYXRhIiwgIm9iamVjdERhdGEiLCAic3VmZml4IiwgInYiLCAid2l0aERlZmF1bHRzIiwgIm9sZEVuZHBvaW50IiwgIm5ld0RlZmF1bHRzIiwgImVuZHBvaW50MiIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgImVuZHBvaW50T3B0aW9ucyIsICJyZXF1ZXN0MiIsICJyb3V0ZTIiLCAicGFyYW1ldGVyczIiLCAicmVxdWVzdCIsICJlbmRwb2ludCIsICJWRVJTSU9OIiwgIl9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyIsICJkYXRhIiwgIkdyYXBocWxSZXNwb25zZUVycm9yIiwgInJlcXVlc3QyIiwgImhlYWRlcnMiLCAicmVzcG9uc2UiLCAiTk9OX1ZBUklBQkxFX09QVElPTlMiLCAiRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMiLCAiR0hFU19WM19TVUZGSVhfUkVHRVgiLCAiZ3JhcGhxbCIsICJxdWVyeSIsICJvcHRpb25zIiwgImtleSIsICJwYXJzZWRPcHRpb25zIiwgInJlcXVlc3RPcHRpb25zIiwgInJlc3VsdCIsICJiYXNlVXJsIiwgIndpdGhEZWZhdWx0cyIsICJuZXdEZWZhdWx0cyIsICJuZXdSZXF1ZXN0IiwgImdyYXBocWwyIiwgInJlcXVlc3QiLCAiZ2V0VXNlckFnZW50IiwgIndpdGhDdXN0b21SZXF1ZXN0IiwgImN1c3RvbVJlcXVlc3QiLCAiYjY0dXJsIiwgInNlcCIsICJqd3RSRSIsICJpc0pXVCIsICJhdXRoIiwgInRva2VuIiwgImlzQXBwIiwgImlzSW5zdGFsbGF0aW9uIiwgImlzVXNlclRvU2VydmVyIiwgIndpdGhBdXRob3JpemF0aW9uUHJlZml4IiwgImhvb2siLCAicmVxdWVzdCIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgImVuZHBvaW50IiwgImNyZWF0ZVRva2VuQXV0aCIsICJWRVJTSU9OIiwgIm5vb3AiLCAiY29uc29sZVdhcm4iLCAiY29uc29sZUVycm9yIiwgImNyZWF0ZUxvZ2dlciIsICJsb2dnZXIiLCAidXNlckFnZW50VHJhaWwiLCAiVkVSU0lPTiIsICJnZXRVc2VyQWdlbnQiLCAiT2N0b2tpdCIsICJkZWZhdWx0cyIsICJhcmdzIiwgIm9wdGlvbnMiLCAibmV3UGx1Z2lucyIsICJjdXJyZW50UGx1Z2lucyIsICJwbHVnaW4iLCAiaG9vayIsICJiZWZvcmVfYWZ0ZXJfaG9va19kZWZhdWx0IiwgInJlcXVlc3REZWZhdWx0cyIsICJyZXF1ZXN0IiwgIndpdGhDdXN0b21SZXF1ZXN0IiwgImF1dGhTdHJhdGVneSIsICJvdGhlck9wdGlvbnMiLCAiYXV0aCIsICJjcmVhdGVUb2tlbkF1dGgiLCAiY2xhc3NDb25zdHJ1Y3RvciIsICJpIiwgIlZFUlNJT04iLCAiRW5kcG9pbnRzIiwgImVuZHBvaW50c19kZWZhdWx0IiwgImVuZHBvaW50TWV0aG9kc01hcCIsICJzY29wZSIsICJlbmRwb2ludHMiLCAiZW5kcG9pbnRzX2RlZmF1bHQiLCAibWV0aG9kTmFtZSIsICJlbmRwb2ludCIsICJyb3V0ZSIsICJkZWZhdWx0cyIsICJkZWNvcmF0aW9ucyIsICJtZXRob2QiLCAidXJsIiwgImVuZHBvaW50RGVmYXVsdHMiLCAiaGFuZGxlciIsICJ0YXJnZXQiLCAiZGVzY3JpcHRvciIsICJ2YWx1ZSIsICJvY3Rva2l0IiwgImNhY2hlIiwgImRlY29yYXRlIiwgImVuZHBvaW50c1RvTWV0aG9kcyIsICJuZXdNZXRob2RzIiwgInJlcXVlc3RXaXRoRGVmYXVsdHMiLCAid2l0aERlY29yYXRpb25zIiwgImFyZ3MiLCAib3B0aW9ucyIsICJuZXdTY29wZSIsICJuZXdNZXRob2ROYW1lIiwgIm5hbWUiLCAiYWxpYXMiLCAicmVzdEVuZHBvaW50TWV0aG9kcyIsICJvY3Rva2l0IiwgImVuZHBvaW50c1RvTWV0aG9kcyIsICJWRVJTSU9OIiwgImxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMiLCAiYXBpIiwgIlZFUlNJT04iLCAibm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlIiwgInJlc3BvbnNlIiwgImluY29tcGxldGVSZXN1bHRzIiwgInJlcG9zaXRvcnlTZWxlY3Rpb24iLCAidG90YWxDb3VudCIsICJ0b3RhbENvbW1pdHMiLCAibmFtZXNwYWNlS2V5IiwgImRhdGEiLCAiaXRlcmF0b3IiLCAib2N0b2tpdCIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgIm9wdGlvbnMiLCAicmVxdWVzdE1ldGhvZCIsICJtZXRob2QiLCAiaGVhZGVycyIsICJ1cmwiLCAibm9ybWFsaXplZFJlc3BvbnNlIiwgInBhcnNlZFVybCIsICJwYXJhbXMiLCAicGFnZSIsICJwZXJfcGFnZSIsICJlcnJvciIsICJwYWdpbmF0ZSIsICJtYXBGbiIsICJnYXRoZXIiLCAicmVzdWx0cyIsICJpdGVyYXRvcjIiLCAicmVzdWx0IiwgImVhcmx5RXhpdCIsICJkb25lIiwgImNvbXBvc2VQYWdpbmF0ZVJlc3QiLCAicGFnaW5hdGVSZXN0IiwgIm9jdG9raXQiLCAicGFnaW5hdGUiLCAiaXRlcmF0b3IiLCAiVkVSU0lPTiIsICJjb250ZXh0IiwgIkNvbnRleHQiLCAiYmFzZVVybCIsICJnZXRBcGlCYXNlVXJsIiwgImRlZmF1bHRzIiwgImdldFByb3h5QWdlbnQiLCAiZ2V0UHJveHlGZXRjaCIsICJHaXRIdWIiLCAiT2N0b2tpdCIsICJyZXN0RW5kcG9pbnRNZXRob2RzIiwgInBhZ2luYXRlUmVzdCIsICJnZXRPY3Rva2l0T3B0aW9ucyIsICJ0b2tlbiIsICJvcHRpb25zIiwgIm9wdHMiLCAiYXV0aCIsICJnZXRBdXRoU3RyaW5nIiwgInVzZXJBZ2VudCIsICJnZXRVc2VyQWdlbnRXaXRoT3JjaGVzdHJhdGlvbklkIiwgImNvbnRleHQiLCAiQ29udGV4dCIsICJnZXRPY3Rva2l0IiwgInRva2VuIiwgIm9wdGlvbnMiLCAiYWRkaXRpb25hbFBsdWdpbnMiLCAiR2l0SHViV2l0aFBsdWdpbnMiLCAiR2l0SHViIiwgImdldE9jdG9raXRPcHRpb25zIiwgImNyeXB0byIsICJmcyIsICJzZW12ZXIiLCAicGF0aCIsICJzZW12ZXIiLCAic3RyZWFtIiwgInV0aWwiLCAiaW1wb3J0X2Fzc2VydCIsICJSZXRyeUhlbHBlciIsICJtYXhBdHRlbXB0cyIsICJtaW5TZWNvbmRzIiwgIm1heFNlY29uZHMiLCAiYWN0aW9uIiwgImlzUmV0cnlhYmxlIiwgImF0dGVtcHQiLCAiZXJyIiwgImluZm8iLCAic2Vjb25kcyIsICJyZXNvbHZlIiwgIkhUVFBFcnJvciIsICJodHRwU3RhdHVzQ29kZSIsICJJU19XSU5ET1dTIiwgIklTX01BQyIsICJ1c2VyQWdlbnQiLCAiZG93bmxvYWRUb29sIiwgInVybCIsICJkZXN0IiwgImF1dGgiLCAiaGVhZGVycyIsICJfZ2V0VGVtcERpcmVjdG9yeSIsICJta2RpclAiLCAiZGVidWciLCAibWF4QXR0ZW1wdHMiLCAibWluU2Vjb25kcyIsICJfZ2V0R2xvYmFsIiwgIm1heFNlY29uZHMiLCAiUmV0cnlIZWxwZXIiLCAiX19hd2FpdGVyIiwgImRvd25sb2FkVG9vbEF0dGVtcHQiLCAiZXJyIiwgImh0dHAiLCAiSHR0cENsaWVudCIsICJyZXNwb25zZSIsICJwaXBlbGluZSIsICJyZWFkU3RyZWFtIiwgInN1Y2NlZWRlZCIsICJybVJGIiwgImV4dHJhY3RUYXIiLCAiZmlsZV8xIiwgImRlc3RfMSIsICJmaWxlIiwgImRlc3QiLCAiZmxhZ3MiLCAiX2NyZWF0ZUV4dHJhY3RGb2xkZXIiLCAiZGVidWciLCAidmVyc2lvbk91dHB1dCIsICJleGVjIiwgImRhdGEiLCAiaXNHbnVUYXIiLCAiYXJncyIsICJpc0RlYnVnIiwgImRlc3RBcmciLCAiZmlsZUFyZyIsICJJU19XSU5ET1dTIiwgImV4dHJhY3RaaXAiLCAiZmlsZSIsICJkZXN0IiwgIl9jcmVhdGVFeHRyYWN0Rm9sZGVyIiwgIklTX1dJTkRPV1MiLCAiZXh0cmFjdFppcFdpbiIsICJleHRyYWN0WmlwTml4IiwgImVzY2FwZWRGaWxlIiwgImVzY2FwZWREZXN0IiwgInB3c2hQYXRoIiwgIndoaWNoIiwgImFyZ3MiLCAiZGVidWciLCAiZXhlYyIsICJwb3dlcnNoZWxsUGF0aCIsICJ1bnppcFBhdGgiLCAiaXNEZWJ1ZyIsICJfY3JlYXRlRXh0cmFjdEZvbGRlciIsICJkZXN0IiwgIl9nZXRUZW1wRGlyZWN0b3J5IiwgIm1rZGlyUCIsICJfZ2V0VGVtcERpcmVjdG9yeSIsICJ0ZW1wRGlyZWN0b3J5IiwgIl9nZXRHbG9iYWwiLCAia2V5IiwgImRlZmF1bHRWYWx1ZSIsICJ2YWx1ZSIsICJyZWxlYXNlRnJhZ21lbnQiLCAib2N0b2tpdCIsICJnZXRPY3Rva2l0IiwgInZlcnNpb24iLCAiZ2V0SW5wdXQiLCAiZ3JhcGhxbFJlcXVlc3QiLCAicmVsZWFzZSIsICJyZWxlYXNlQXNzZXRzIiwgImFzc2V0IiwgIm5hbWUiLCAic2V0RmFpbGVkIiwgInpiQXJjaGl2ZVBhdGgiLCAiZG93bmxvYWRUb29sIiwgInpiRXh0cmFjdGVkRm9sZGVyUGF0aCIsICJleHRyYWN0WmlwIiwgImV4dHJhY3RUYXIiLCAiZXhlYyIsICJwYXRoIl0KfQo= diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index 247b3a3..3fbbefd 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -4,4 +4,98 @@ * SPDX-License-Identifier: MIT */ -console.log('Hello, World!'); +import * as process from 'node:process'; +import path from 'node:path'; + +import * as core from '@actions/core'; +import { exec } from '@actions/exec'; +import { getOctokit } from '@actions/github'; +import { downloadTool, extractTar, extractZip } from '@actions/tool-cache'; + +interface Release { + tagName: string; + releaseAssets: ReleaseAssetConnection; +} + +interface ReleaseAssetConnection { + nodes: ReleaseAsset[]; +} + +interface ReleaseAsset { + name: string; + downloadUrl: string; +} + +const releaseFragment = + ` + fragment releaseFields on Release { + tagName + releaseAssets(first: 50) { + nodes { + name + downloadUrl + } + } + } + `; + +(async () => { + const octokit = getOctokit(''); + + const version = core.getInput('zb-version'); + const graphqlRequest = + version ? + { + query: + ` + query releaseAssetsForVersion($tagName: String!) { + repository(owner: "256lights", repo: "zb") { + release(tagName: $tagName) { + ...releaseFields + } + } + } + + ${releaseFragment} + `, + tagName: 'v' + version, + } : + { + query: + ` + query releaseAssetsForLatest { + repository(owner: "256lights", repo: "zb") { + release: latestRelease { + ...releaseFields + } + } + } + + ${releaseFragment} + `, + }; + const graphqlResponse = await octokit.graphql<{ + repository: { + release: Release | null; + } + }>(graphqlRequest); + const release = graphqlResponse.repository.release; + const releaseAssets = release?.releaseAssets?.nodes || []; + + let asset: ReleaseAsset | undefined; + if (process.platform === 'darwin' && process.arch === 'arm64') { + asset = releaseAssets.find(({ name }) => name.includes('aarch64-apple-macos')) + } else if (process.platform === 'linux' && process.arch === 'x64') { + asset = releaseAssets.find(({ name }) => name.includes('x86_64-unknown-linux')) + } + if (!asset) { + core.setFailed(`No download found for ${process.arch}-${process.platform} version ${release?.tagName || version}`); + return; + } + + const zbArchivePath = await downloadTool(asset.downloadUrl); + const zbExtractedFolderPath = asset.downloadUrl.endsWith('.zip') ? + await extractZip(zbArchivePath) : + await extractTar(zbArchivePath); + await exec(path.join(zbExtractedFolderPath, 'install'), ['--single-user', '--no-systemd', '--no-launchd']); +})(); diff --git a/.github/actions/setup-zb/tsconfig.json b/.github/actions/setup-zb/tsconfig.json index 4ca9a3c..1faa024 100644 --- a/.github/actions/setup-zb/tsconfig.json +++ b/.github/actions/setup-zb/tsconfig.json @@ -4,8 +4,8 @@ ], "compilerOptions": { "noEmit": true, - "module": "commonjs", - "moduleResolution": "node", + "module": "nodenext", + "moduleResolution": "nodenext", "strict": true, "noImplicitAny": true } diff --git a/zb-stdlib.code-workspace b/zb-stdlib.code-workspace index d17fac7..d7aaa56 100644 --- a/zb-stdlib.code-workspace +++ b/zb-stdlib.code-workspace @@ -25,5 +25,9 @@ "Lua.workspace.ignoreDir": [ ".vscode", ], + "js/ts.tsdk.path": "${workspaceFolder}/.github/actions/setup-zb/node_modules/typescript", + "[typescript]": { + "editor.defaultFormatter": "vscode.typescript-language-features", + }, } } From 7c5d96c6d3e5cba236f92686b7e40c509fddbff9 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:10:13 -0700 Subject: [PATCH 13/23] Stop minifying while debugging --- .github/actions/setup-zb/build.mjs | 3 +- .github/actions/setup-zb/dist/main.js | 27950 +++++++++++++++++++++++- 2 files changed, 27901 insertions(+), 52 deletions(-) diff --git a/.github/actions/setup-zb/build.mjs b/.github/actions/setup-zb/build.mjs index 1c36cd7..12daf55 100644 --- a/.github/actions/setup-zb/build.mjs +++ b/.github/actions/setup-zb/build.mjs @@ -10,8 +10,7 @@ import * as esbuild from 'esbuild'; await esbuild.build({ entryPoints: ['src/main.ts'], bundle: true, - minify: true, - sourcemap: 'inline', + minify: false, platform: 'node', target: ['node24.0'], format: 'cjs', diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index 85dbe02..0b46119 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -1,54 +1,27879 @@ -"use strict";var Uy=Object.create;var bu=Object.defineProperty;var Gy=Object.getOwnPropertyDescriptor;var Ly=Object.getOwnPropertyNames;var My=Object.getPrototypeOf,vy=Object.prototype.hasOwnProperty;var B=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var xy=(t,e,r,A)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ly(e))!vy.call(t,s)&&s!==r&&bu(t,s,{get:()=>e[s],enumerable:!(A=Gy(e,s))||A.enumerable});return t};var W=(t,e,r)=>(r=t!=null?Uy(My(t)):{},xy(e||!t||!t.__esModule?bu(r,"default",{value:t,enumerable:!0}):r,t));var Lu=B(zr=>{"use strict";var aJ=require("net"),Hy=require("tls"),Wi=require("http"),Nu=require("https"),Vy=require("events"),cJ=require("assert"),qy=require("util");zr.httpOverHttp=Wy;zr.httpsOverHttp=zy;zr.httpOverHttps=Zy;zr.httpsOverHttps=jy;function Wy(t){var e=new yt(t);return e.request=Wi.request,e}function zy(t){var e=new yt(t);return e.request=Wi.request,e.createSocket=Uu,e.defaultPort=443,e}function Zy(t){var e=new yt(t);return e.request=Nu.request,e}function jy(t){var e=new yt(t);return e.request=Nu.request,e.createSocket=Uu,e.defaultPort=443,e}function yt(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||Wi.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(A,s,o,n){for(var i=Gu(s,o,n),a=0,c=e.requests.length;a=this.maxSockets){o.requests.push(n);return}o.createSocket(n,function(i){i.on("free",a),i.on("close",c),i.on("agentRemove",c),e.onSocket(i);function a(){o.emit("free",i,n)}function c(g){o.removeSocket(i),i.removeListener("free",a),i.removeListener("close",c),i.removeListener("agentRemove",c)}})};yt.prototype.createSocket=function(e,r){var A=this,s={};A.sockets.push(s);var o=zi({},A.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(o.localAddress=e.localAddress),o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")),Jt("making CONNECT request");var n=A.request(o);n.useChunkedEncodingByDefault=!1,n.once("response",i),n.once("upgrade",a),n.once("connect",c),n.once("error",g),n.end();function i(l){l.upgrade=!0}function a(l,u,E){process.nextTick(function(){c(l,u,E)})}function c(l,u,E){if(n.removeAllListeners(),u.removeAllListeners(),l.statusCode!==200){Jt("tunneling socket could not be established, statusCode=%d",l.statusCode),u.destroy();var h=new Error("tunneling socket could not be established, statusCode="+l.statusCode);h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}if(E.length>0){Jt("got illegal response body from proxy"),u.destroy();var h=new Error("got illegal response body from proxy");h.code="ECONNRESET",e.request.emit("error",h),A.removeSocket(s);return}return Jt("tunneling connection has established"),A.sockets[A.sockets.indexOf(s)]=u,r(u)}function g(l){n.removeAllListeners(),Jt(`tunneling socket could not be established, cause=%s -`,l.message,l.stack);var u=new Error("tunneling socket could not be established, cause="+l.message);u.code="ECONNRESET",e.request.emit("error",u),A.removeSocket(s)}};yt.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var A=this.requests.shift();A&&this.createSocket(A,function(s){A.request.onSocket(s)})}};function Uu(t,e){var r=this;yt.prototype.createSocket.call(r,t,function(A){var s=t.request.getHeader("host"),o=zi({},r.options,{socket:A,servername:s?s.replace(/:.*$/,""):t.host}),n=Hy.connect(0,o);r.sockets[r.sockets.indexOf(A)]=n,e(n)})}function Gu(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function zi(t){for(var e=1,r=arguments.length;e{Mu.exports=Lu()});var $=B((uJ,vu)=>{vu.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}});var Y=B((EJ,aE)=>{"use strict";var xu=Symbol.for("undici.error.UND_ERR"),ee=class extends Error{constructor(e){super(e),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&e[xu]===!0}[xu]=!0},Ou=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),ji=class extends ee{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ou]===!0}[Ou]=!0},Yu=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),Ki=class extends ee{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Yu]===!0}[Yu]=!0},_u=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Xi=class extends ee{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&e[_u]===!0}[_u]=!0},Ju=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),$i=class extends ee{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&e[Ju]===!0}[Ju]=!0},Pu=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),ea=class extends ee{constructor(e,r,A,s){super(e),this.name="ResponseStatusCodeError",this.message=e||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=s,this.status=r,this.statusCode=r,this.headers=A}static[Symbol.hasInstance](e){return e&&e[Pu]===!0}[Pu]=!0},Hu=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),ta=class extends ee{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&e[Hu]===!0}[Hu]=!0},Vu=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),ra=class extends ee{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&e[Vu]===!0}[Vu]=!0},qu=Symbol.for("undici.error.UND_ERR_ABORT"),Eo=class extends ee{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&e[qu]===!0}[qu]=!0},Wu=Symbol.for("undici.error.UND_ERR_ABORTED"),Aa=class extends Eo{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&e[Wu]===!0}[Wu]=!0},zu=Symbol.for("undici.error.UND_ERR_INFO"),sa=class extends ee{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&e[zu]===!0}[zu]=!0},Zu=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),oa=class extends ee{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[Zu]===!0}[Zu]=!0},ju=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),na=class extends ee{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&e[ju]===!0}[ju]=!0},Ku=Symbol.for("undici.error.UND_ERR_DESTROYED"),ia=class extends ee{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&e[Ku]===!0}[Ku]=!0},Xu=Symbol.for("undici.error.UND_ERR_CLOSED"),aa=class extends ee{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&e[Xu]===!0}[Xu]=!0},$u=Symbol.for("undici.error.UND_ERR_SOCKET"),ca=class extends ee{constructor(e,r){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=r}static[Symbol.hasInstance](e){return e&&e[$u]===!0}[$u]=!0},eE=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),ga=class extends ee{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&e[eE]===!0}[eE]=!0},tE=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),la=class extends ee{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&e[tE]===!0}[tE]=!0},rE=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),ua=class extends Error{constructor(e,r,A){super(e),this.name="HTTPParserError",this.code=r?`HPE_${r}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&e[rE]===!0}[rE]=!0},AE=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),Ea=class extends ee{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&e[AE]===!0}[AE]=!0},sE=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),ha=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[sE]===!0}[sE]=!0},oE=Symbol.for("undici.error.UND_ERR_RESPONSE"),Qa=class extends ee{constructor(e,r,{headers:A,data:s}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=r,this.data=s,this.headers=A}static[Symbol.hasInstance](e){return e&&e[oE]===!0}[oE]=!0},nE=Symbol.for("undici.error.UND_ERR_PRX_TLS"),Ba=class extends ee{constructor(e,r,A){super(r,{cause:e,...A??{}}),this.name="SecureProxyConnectionError",this.message=r||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&e[nE]===!0}[nE]=!0},iE=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),Ia=class extends ee{constructor(e){super(e),this.name="MessageSizeExceededError",this.message=e||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](e){return e&&e[iE]===!0}get[iE](){return!0}};aE.exports={AbortError:Eo,HTTPParserError:ua,UndiciError:ee,HeadersTimeoutError:Ki,HeadersOverflowError:Xi,BodyTimeoutError:$i,RequestContentLengthMismatchError:oa,ConnectTimeoutError:ji,ResponseStatusCodeError:ea,InvalidArgumentError:ta,InvalidReturnValueError:ra,RequestAbortedError:Aa,ClientDestroyedError:ia,ClientClosedError:aa,InformationalError:sa,SocketError:ca,NotSupportedError:ga,ResponseContentLengthMismatchError:na,BalancedPoolMissingUpstreamError:la,ResponseExceededMaxSizeError:Ea,RequestRetryError:ha,ResponseError:Qa,SecureProxyConnectionError:Ba,MessageSizeExceededError:Ia}});var Qo=B((hJ,cE)=>{"use strict";var ho={},Ca=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let t=0;t{"use strict";var{wellknownHeaderNames:gE,headerNameLowerCasedRecord:Ky}=Qo(),da=class t{value=null;left=null;middle=null;right=null;code;constructor(e,r,A){if(A===void 0||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new t(e,r,A):this.value=r}add(e,r){let A=e.length;if(A===0)throw new TypeError("Unreachable");let s=0,o=this;for(;;){let n=e.charCodeAt(s);if(n>127)throw new TypeError("key must be ascii string");if(o.code===n)if(A===++s){o.value=r;break}else if(o.middle!==null)o=o.middle;else{o.middle=new t(e,r,s);break}else if(o.code=65&&(o|=32);s!==null;){if(o===s.code){if(r===++A)return s;s=s.middle;break}s=s.code{"use strict";var KA=require("node:assert"),{kDestroyed:QE,kBodyUsed:Zr,kListeners:fa,kBody:hE}=$(),{IncomingMessage:Xy}=require("node:http"),fo=require("node:stream"),$y=require("node:net"),{Blob:eR}=require("node:buffer"),tR=require("node:util"),{stringify:rR}=require("node:querystring"),{EventEmitter:AR}=require("node:events"),{InvalidArgumentError:Ee}=Y(),{headerNameLowerCasedRecord:sR}=Qo(),{tree:BE}=EE(),[oR,nR]=process.versions.node.split(".").map(t=>Number(t)),Co=class{constructor(e){this[hE]=e,this[Zr]=!1}async*[Symbol.asyncIterator](){KA(!this[Zr],"disturbed"),this[Zr]=!0,yield*this[hE]}};function iR(t){return po(t)?(pE(t)===0&&t.on("data",function(){KA(!1)}),typeof t.readableDidRead!="boolean"&&(t[Zr]=!1,AR.prototype.on.call(t,"data",function(){this[Zr]=!0})),t):t&&typeof t.pipeTo=="function"?new Co(t):t&&typeof t!="string"&&!ArrayBuffer.isView(t)&&fE(t)?new Co(t):t}function aR(){}function po(t){return t&&typeof t=="object"&&typeof t.pipe=="function"&&typeof t.on=="function"}function IE(t){if(t===null)return!1;if(t instanceof eR)return!0;if(typeof t!="object")return!1;{let e=t[Symbol.toStringTag];return(e==="Blob"||e==="File")&&("stream"in t&&typeof t.stream=="function"||"arrayBuffer"in t&&typeof t.arrayBuffer=="function")}}function cR(t,e){if(t.includes("?")||t.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=rR(e);return r&&(t+="?"+r),t}function CE(t){let e=parseInt(t,10);return e===Number(t)&&e>=0&&e<=65535}function Io(t){return t!=null&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&(t[4]===":"||t[4]==="s"&&t[5]===":")}function dE(t){if(typeof t=="string"){if(t=new URL(t),!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}if(!t||typeof t!="object")throw new Ee("Invalid URL: The URL argument must be a non-null object.");if(!(t instanceof URL)){if(t.port!=null&&t.port!==""&&CE(t.port)===!1)throw new Ee("Invalid URL: port must be a valid integer or a string representation of an integer.");if(t.path!=null&&typeof t.path!="string")throw new Ee("Invalid URL path: the path must be a string or null/undefined.");if(t.pathname!=null&&typeof t.pathname!="string")throw new Ee("Invalid URL pathname: the pathname must be a string or null/undefined.");if(t.hostname!=null&&typeof t.hostname!="string")throw new Ee("Invalid URL hostname: the hostname must be a string or null/undefined.");if(t.origin!=null&&typeof t.origin!="string")throw new Ee("Invalid URL origin: the origin must be a string or null/undefined.");if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");let e=t.port!=null?t.port:t.protocol==="https:"?443:80,r=t.origin!=null?t.origin:`${t.protocol||""}//${t.hostname||""}:${e}`,A=t.path!=null?t.path:`${t.pathname||""}${t.search||""}`;return r[r.length-1]==="/"&&(r=r.slice(0,r.length-1)),A&&A[0]!=="/"&&(A=`/${A}`),new URL(`${r}${A}`)}if(!Io(t.origin||t.protocol))throw new Ee("Invalid URL protocol: the URL must start with `http:` or `https:`.");return t}function gR(t){if(t=dE(t),t.pathname!=="/"||t.search||t.hash)throw new Ee("invalid url");return t}function lR(t){if(t[0]==="["){let r=t.indexOf("]");return KA(r!==-1),t.substring(1,r)}let e=t.indexOf(":");return e===-1?t:t.substring(0,e)}function uR(t){if(!t)return null;KA(typeof t=="string");let e=lR(t);return $y.isIP(e)?"":e}function ER(t){return JSON.parse(JSON.stringify(t))}function hR(t){return t!=null&&typeof t[Symbol.asyncIterator]=="function"}function fE(t){return t!=null&&(typeof t[Symbol.iterator]=="function"||typeof t[Symbol.asyncIterator]=="function")}function pE(t){if(t==null)return 0;if(po(t)){let e=t._readableState;return e&&e.objectMode===!1&&e.ended===!0&&Number.isFinite(e.length)?e.length:null}else{if(IE(t))return t.size!=null?t.size:null;if(yE(t))return t.byteLength}return null}function mE(t){return t&&!!(t.destroyed||t[QE]||fo.isDestroyed?.(t))}function QR(t,e){t==null||!po(t)||mE(t)||(typeof t.destroy=="function"?(Object.getPrototypeOf(t).constructor===Xy&&(t.socket=null),t.destroy(e)):e&&queueMicrotask(()=>{t.emit("error",e)}),t.destroyed!==!0&&(t[QE]=!0))}var BR=/timeout=(\d+)/;function IR(t){let e=t.toString().match(BR);return e?parseInt(e[1],10)*1e3:null}function wE(t){return typeof t=="string"?sR[t]??t.toLowerCase():BE.lookup(t)??t.toString("latin1").toLowerCase()}function CR(t){return BE.lookup(t)??t.toString("latin1").toLowerCase()}function dR(t,e){e===void 0&&(e={});for(let r=0;rn.toString("utf8")):o.toString("utf8")}}return"content-length"in e&&"content-disposition"in e&&(e["content-disposition"]=Buffer.from(e["content-disposition"]).toString("latin1")),e}function fR(t){let e=t.length,r=new Array(e),A=!1,s=-1,o,n,i=0;for(let a=0;a{r.close(),r.byobRequest?.respond(0)});else{let o=Buffer.isBuffer(s)?s:Buffer.from(s);o.byteLength&&r.enqueue(new Uint8Array(o))}return r.desiredSize>0},async cancel(r){await e.return()},type:"bytes"})}function TR(t){return t&&typeof t=="object"&&typeof t.append=="function"&&typeof t.delete=="function"&&typeof t.get=="function"&&typeof t.getAll=="function"&&typeof t.has=="function"&&typeof t.set=="function"&&t[Symbol.toStringTag]==="FormData"}function bR(t,e){return"addEventListener"in t?(t.addEventListener("abort",e,{once:!0}),()=>t.removeEventListener("abort",e)):(t.addListener("abort",e),()=>t.removeListener("abort",e))}var kR=typeof String.prototype.toWellFormed=="function",FR=typeof String.prototype.isWellFormed=="function";function RE(t){return kR?`${t}`.toWellFormed():tR.toUSVString(t)}function SR(t){return FR?`${t}`.isWellFormed():RE(t)===`${t}`}function DE(t){switch(t){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return t>=33&&t<=126}}function NR(t){if(t.length===0)return!1;for(let e=0;e{"use strict";var J=require("node:diagnostics_channel"),wa=require("node:util"),mo=wa.debuglog("undici"),ma=wa.debuglog("fetch"),Qr=wa.debuglog("websocket"),FE=!1,OR={beforeConnect:J.channel("undici:client:beforeConnect"),connected:J.channel("undici:client:connected"),connectError:J.channel("undici:client:connectError"),sendHeaders:J.channel("undici:client:sendHeaders"),create:J.channel("undici:request:create"),bodySent:J.channel("undici:request:bodySent"),headers:J.channel("undici:request:headers"),trailers:J.channel("undici:request:trailers"),error:J.channel("undici:request:error"),open:J.channel("undici:websocket:open"),close:J.channel("undici:websocket:close"),socketError:J.channel("undici:websocket:socket_error"),ping:J.channel("undici:websocket:ping"),pong:J.channel("undici:websocket:pong")};if(mo.enabled||ma.enabled){let t=ma.enabled?ma:mo;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s using %s%s",`${o}${s?`:${s}`:""}`,A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s using %s%s errored - %s",`${o}${s?`:${s}`:""}`,A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)}),J.channel("undici:request:headers").subscribe(e=>{let{request:{method:r,path:A,origin:s},response:{statusCode:o}}=e;t("received response to %s %s/%s - HTTP %d",r,s,A,o)}),J.channel("undici:request:trailers").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("trailers received from %s %s/%s",r,s,A)}),J.channel("undici:request:error").subscribe(e=>{let{request:{method:r,path:A,origin:s},error:o}=e;t("request to %s %s/%s errored - %s",r,s,A,o.message)}),FE=!0}if(Qr.enabled){if(!FE){let t=mo.enabled?mo:Qr;J.channel("undici:client:beforeConnect").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connecting to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connected").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o}}=e;t("connected to %s%s using %s%s",o,s?`:${s}`:"",A,r)}),J.channel("undici:client:connectError").subscribe(e=>{let{connectParams:{version:r,protocol:A,port:s,host:o},error:n}=e;t("connection to %s%s using %s%s errored - %s",o,s?`:${s}`:"",A,r,n.message)}),J.channel("undici:client:sendHeaders").subscribe(e=>{let{request:{method:r,path:A,origin:s}}=e;t("sending request to %s %s/%s",r,s,A)})}J.channel("undici:websocket:open").subscribe(t=>{let{address:{address:e,port:r}}=t;Qr("connection opened %s%s",e,r?`:${r}`:"")}),J.channel("undici:websocket:close").subscribe(t=>{let{websocket:e,code:r,reason:A}=t;Qr("closed connection to %s - %s %s",e.url,r,A)}),J.channel("undici:websocket:socket_error").subscribe(t=>{Qr("connection errored - %s",t.message)}),J.channel("undici:websocket:ping").subscribe(t=>{Qr("ping received")}),J.channel("undici:websocket:pong").subscribe(t=>{Qr("pong received")})}SE.exports={channels:OR}});var LE=B((CJ,GE)=>{"use strict";var{InvalidArgumentError:V,NotSupportedError:YR}=Y(),Rt=require("node:assert"),{isValidHTTPToken:UE,isValidHeaderValue:XA,isStream:_R,destroy:JR,isBuffer:PR,isFormDataLike:HR,isIterable:VR,isBlobLike:qR,buildURL:WR,validateHandler:zR,getServerName:ZR,normalizedMethodRecords:jR}=M(),{channels:lt}=jr(),{headerNameLowerCasedRecord:NE}=Qo(),KR=/[^\u0021-\u00ff]/,He=Symbol("handler"),ya=class{constructor(e,{path:r,method:A,body:s,headers:o,query:n,idempotent:i,blocking:a,upgrade:c,headersTimeout:g,bodyTimeout:l,reset:u,throwOnError:E,expectContinue:h,servername:C},I){if(typeof r!="string")throw new V("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&A!=="CONNECT")throw new V("path must be an absolute URL or start with a slash");if(KR.test(r))throw new V("invalid request path");if(typeof A!="string")throw new V("method must be a string");if(jR[A]===void 0&&!UE(A))throw new V("invalid request method");if(c&&typeof c!="string")throw new V("upgrade must be a string");if(c&&!XA(c))throw new V("invalid upgrade header");if(g!=null&&(!Number.isFinite(g)||g<0))throw new V("invalid headersTimeout");if(l!=null&&(!Number.isFinite(l)||l<0))throw new V("invalid bodyTimeout");if(u!=null&&typeof u!="boolean")throw new V("invalid reset");if(h!=null&&typeof h!="boolean")throw new V("invalid expectContinue");if(this.headersTimeout=g,this.bodyTimeout=l,this.throwOnError=E===!0,this.method=A,this.abort=null,s==null)this.body=null;else if(_R(s)){this.body=s;let Q=this.body._readableState;(!Q||!Q.autoDestroy)&&(this.endHandler=function(){JR(this)},this.body.on("end",this.endHandler)),this.errorHandler=f=>{this.abort?this.abort(f):this.error=f},this.body.on("error",this.errorHandler)}else if(PR(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if(typeof s=="string")this.body=s.length?Buffer.from(s):null;else if(HR(s)||VR(s)||qR(s))this.body=s;else throw new V("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=c||null,this.path=n?WR(r,n):r,this.origin=e,this.idempotent=i??(A==="HEAD"||A==="GET"),this.blocking=a??!1,this.reset=u??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=h??!1,Array.isArray(o)){if(o.length%2!==0)throw new V("headers array must be even");for(let Q=0;Q{"use strict";var XR=require("node:events"),yo=class extends XR{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){let r=Array.isArray(e[0])?e[0]:e,A=this.dispatch.bind(this);for(let s of r)if(s!=null){if(typeof s!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof s}`);if(A=s(A),A==null||typeof A!="function"||A.length!==2)throw new TypeError("invalid interceptor")}return new Ra(this,A)}},Ra=class extends yo{#e=null;#t=null;constructor(e,r){super(),this.#e=e,this.#t=r}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};ME.exports=yo});var eA=B((fJ,vE)=>{"use strict";var $R=$A(),{ClientDestroyedError:Da,ClientClosedError:eD,InvalidArgumentError:Kr}=Y(),{kDestroy:tD,kClose:rD,kClosed:es,kDestroyed:Xr,kDispatch:Ta,kInterceptors:Br}=$(),Dt=Symbol("onDestroyed"),$r=Symbol("onClosed"),Ro=Symbol("Intercepted Dispatch"),ba=Symbol("webSocketOptions"),ka=class extends $R{constructor(e){super(),this[Xr]=!1,this[Dt]=null,this[es]=!1,this[$r]=[],this[ba]=e?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[ba].maxFragments??131072,maxPayloadSize:this[ba].maxPayloadSize??128*1024*1024}}get destroyed(){return this[Xr]}get closed(){return this[es]}get interceptors(){return this[Br]}set interceptors(e){if(e){for(let r=e.length-1;r>=0;r--)if(typeof this[Br][r]!="function")throw new Kr("interceptor must be an function")}this[Br]=e}close(e){if(e===void 0)return new Promise((A,s)=>{this.close((o,n)=>o?s(o):A(n))});if(typeof e!="function")throw new Kr("invalid callback");if(this[Xr]){queueMicrotask(()=>e(new Da,null));return}if(this[es]){this[$r]?this[$r].push(e):queueMicrotask(()=>e(null,null));return}this[es]=!0,this[$r].push(e);let r=()=>{let A=this[$r];this[$r]=null;for(let s=0;sthis.destroy()).then(()=>{queueMicrotask(r)})}destroy(e,r){if(typeof e=="function"&&(r=e,e=null),r===void 0)return new Promise((s,o)=>{this.destroy(e,(n,i)=>n?o(n):s(i))});if(typeof r!="function")throw new Kr("invalid callback");if(this[Xr]){this[Dt]?this[Dt].push(r):queueMicrotask(()=>r(null,null));return}e||(e=new Da),this[Xr]=!0,this[Dt]=this[Dt]||[],this[Dt].push(r);let A=()=>{let s=this[Dt];this[Dt]=null;for(let o=0;o{queueMicrotask(A)})}[Ro](e,r){if(!this[Br]||this[Br].length===0)return this[Ro]=this[Ta],this[Ta](e,r);let A=this[Ta].bind(this);for(let s=this[Br].length-1;s>=0;s--)A=this[Br][s](A);return this[Ro]=A,A(e,r)}dispatch(e,r){if(!r||typeof r!="object")throw new Kr("handler must be an object");try{if(!e||typeof e!="object")throw new Kr("opts must be an object.");if(this[Xr]||this[Dt])throw new Da;if(this[es])throw new eD;return this[Ro](e,r)}catch(A){if(typeof r.onError!="function")throw new Kr("invalid onError method");return r.onError(A),!1}}};vE.exports=ka});var Ma=B((pJ,_E)=>{"use strict";var tA=0,Fa=1e3,Sa=(Fa>>1)-1,Tt,Na=Symbol("kFastTimer"),bt=[],Ua=-2,Ga=-1,OE=0,xE=1;function La(){tA+=Sa;let t=0,e=bt.length;for(;t=r._idleStart+r._idleTimeout&&(r._state=Ga,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===Ga?(r._state=Ua,--e!==0&&(bt[t]=bt[e])):++t}bt.length=e,bt.length!==0&&YE()}function YE(){Tt?Tt.refresh():(clearTimeout(Tt),Tt=setTimeout(La,Sa),Tt.unref&&Tt.unref())}var Do=class{[Na]=!0;_state=Ua;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,r,A){this._onTimeout=e,this._idleTimeout=r,this._timerArg=A,this.refresh()}refresh(){this._state===Ua&&bt.push(this),(!Tt||bt.length===1)&&YE(),this._state=OE}clear(){this._state=Ga,this._idleStart=-1}};_E.exports={setTimeout(t,e,r){return e<=Fa?setTimeout(t,e,r):new Do(t,e,r)},clearTimeout(t){t[Na]?t.clear():clearTimeout(t)},setFastTimeout(t,e,r){return new Do(t,e,r)},clearFastTimeout(t){t.clear()},now(){return tA},tick(t=0){tA+=t-Fa+1,La(),La()},reset(){tA=0,bt.length=0,clearTimeout(Tt),Tt=null},kFastTimer:Na}});var ts=B((yJ,qE)=>{"use strict";var AD=require("node:net"),JE=require("node:assert"),VE=M(),{InvalidArgumentError:sD,ConnectTimeoutError:oD}=Y(),To=Ma();function PE(){}var va,xa;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?xa=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry(r=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:A}=this._sessionCache.keys().next();this._sessionCache.delete(A)}this._sessionCache.set(e,r)}}};function nD({allowH2:t,maxCachedSessions:e,socketPath:r,timeout:A,session:s,...o}){if(e!=null&&(!Number.isInteger(e)||e<0))throw new sD("maxCachedSessions must be a positive integer or zero");let n={path:r,...o},i=new xa(e??100);return A=A??1e4,t=t??!1,function({hostname:c,host:g,protocol:l,port:u,servername:E,localAddress:h,httpSocket:C},I){let Q;if(l==="https:"){va||(va=require("node:tls")),E=E||n.servername||VE.getServerName(g)||null;let R=E||c;JE(R);let y=s||i.get(R)||null;u=u||443,Q=va.connect({highWaterMark:16384,...n,servername:E,session:y,localAddress:h,ALPNProtocols:t?["http/1.1","h2"]:["http/1.1"],socket:C,port:u,host:c}),Q.on("session",function(P){i.set(R,P)})}else JE(!C,"httpSocket can only be sent on TLS update"),u=u||80,Q=AD.connect({highWaterMark:64*1024,...n,localAddress:h,port:u,host:c});if(n.keepAlive==null||n.keepAlive){let R=n.keepAliveInitialDelay===void 0?6e4:n.keepAliveInitialDelay;Q.setKeepAlive(!0,R)}let f=iD(new WeakRef(Q),{timeout:A,hostname:c,port:u});return Q.setNoDelay(!0).once(l==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(f),I){let R=I;I=null,R(null,this)}}).on("error",function(R){if(queueMicrotask(f),I){let y=I;I=null,y(R)}}),Q}}var iD=process.platform==="win32"?(t,e)=>{if(!e.timeout)return PE;let r=null,A=null,s=To.setFastTimeout(()=>{r=setImmediate(()=>{A=setImmediate(()=>HE(t.deref(),e))})},e.timeout);return()=>{To.clearFastTimeout(s),clearImmediate(r),clearImmediate(A)}}:(t,e)=>{if(!e.timeout)return PE;let r=null,A=To.setFastTimeout(()=>{r=setImmediate(()=>{HE(t.deref(),e)})},e.timeout);return()=>{To.clearFastTimeout(A),clearImmediate(r)}};function HE(t,e){if(t==null)return;let r="Connect Timeout Error";Array.isArray(t.autoSelectFamilyAttemptedAddresses)?r+=` (attempted addresses: ${t.autoSelectFamilyAttemptedAddresses.join(", ")},`:r+=` (attempted address: ${e.hostname}:${e.port},`,r+=` timeout: ${e.timeout}ms)`,VE.destroy(t,new oD(r))}qE.exports=nD});var WE=B(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.enumToMap=void 0;function aD(t){let e={};return Object.keys(t).forEach(r=>{let A=t[r];typeof A=="number"&&(e[r]=A)}),e}bo.enumToMap=aD});var zE=B(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.SPECIAL_HEADERS=p.HEADER_STATE=p.MINOR=p.MAJOR=p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS=p.TOKEN=p.STRICT_TOKEN=p.HEX=p.URL_CHAR=p.STRICT_URL_CHAR=p.USERINFO_CHARS=p.MARK=p.ALPHANUM=p.NUM=p.HEX_MAP=p.NUM_MAP=p.ALPHA=p.FINISH=p.H_METHOD_MAP=p.METHOD_MAP=p.METHODS_RTSP=p.METHODS_ICE=p.METHODS_HTTP=p.METHODS=p.LENIENT_FLAGS=p.FLAGS=p.TYPE=p.ERROR=void 0;var cD=WE(),gD;(function(t){t[t.OK=0]="OK",t[t.INTERNAL=1]="INTERNAL",t[t.STRICT=2]="STRICT",t[t.LF_EXPECTED=3]="LF_EXPECTED",t[t.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",t[t.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",t[t.INVALID_METHOD=6]="INVALID_METHOD",t[t.INVALID_URL=7]="INVALID_URL",t[t.INVALID_CONSTANT=8]="INVALID_CONSTANT",t[t.INVALID_VERSION=9]="INVALID_VERSION",t[t.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",t[t.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",t[t.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",t[t.INVALID_STATUS=13]="INVALID_STATUS",t[t.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",t[t.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",t[t.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",t[t.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",t[t.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",t[t.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",t[t.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",t[t.PAUSED=21]="PAUSED",t[t.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",t[t.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",t[t.USER=24]="USER"})(gD=p.ERROR||(p.ERROR={}));var lD;(function(t){t[t.BOTH=0]="BOTH",t[t.REQUEST=1]="REQUEST",t[t.RESPONSE=2]="RESPONSE"})(lD=p.TYPE||(p.TYPE={}));var uD;(function(t){t[t.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",t[t.CHUNKED=8]="CHUNKED",t[t.UPGRADE=16]="UPGRADE",t[t.CONTENT_LENGTH=32]="CONTENT_LENGTH",t[t.SKIPBODY=64]="SKIPBODY",t[t.TRAILING=128]="TRAILING",t[t.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(uD=p.FLAGS||(p.FLAGS={}));var ED;(function(t){t[t.HEADERS=1]="HEADERS",t[t.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",t[t.KEEP_ALIVE=4]="KEEP_ALIVE"})(ED=p.LENIENT_FLAGS||(p.LENIENT_FLAGS={}));var k;(function(t){t[t.DELETE=0]="DELETE",t[t.GET=1]="GET",t[t.HEAD=2]="HEAD",t[t.POST=3]="POST",t[t.PUT=4]="PUT",t[t.CONNECT=5]="CONNECT",t[t.OPTIONS=6]="OPTIONS",t[t.TRACE=7]="TRACE",t[t.COPY=8]="COPY",t[t.LOCK=9]="LOCK",t[t.MKCOL=10]="MKCOL",t[t.MOVE=11]="MOVE",t[t.PROPFIND=12]="PROPFIND",t[t.PROPPATCH=13]="PROPPATCH",t[t.SEARCH=14]="SEARCH",t[t.UNLOCK=15]="UNLOCK",t[t.BIND=16]="BIND",t[t.REBIND=17]="REBIND",t[t.UNBIND=18]="UNBIND",t[t.ACL=19]="ACL",t[t.REPORT=20]="REPORT",t[t.MKACTIVITY=21]="MKACTIVITY",t[t.CHECKOUT=22]="CHECKOUT",t[t.MERGE=23]="MERGE",t[t["M-SEARCH"]=24]="M-SEARCH",t[t.NOTIFY=25]="NOTIFY",t[t.SUBSCRIBE=26]="SUBSCRIBE",t[t.UNSUBSCRIBE=27]="UNSUBSCRIBE",t[t.PATCH=28]="PATCH",t[t.PURGE=29]="PURGE",t[t.MKCALENDAR=30]="MKCALENDAR",t[t.LINK=31]="LINK",t[t.UNLINK=32]="UNLINK",t[t.SOURCE=33]="SOURCE",t[t.PRI=34]="PRI",t[t.DESCRIBE=35]="DESCRIBE",t[t.ANNOUNCE=36]="ANNOUNCE",t[t.SETUP=37]="SETUP",t[t.PLAY=38]="PLAY",t[t.PAUSE=39]="PAUSE",t[t.TEARDOWN=40]="TEARDOWN",t[t.GET_PARAMETER=41]="GET_PARAMETER",t[t.SET_PARAMETER=42]="SET_PARAMETER",t[t.REDIRECT=43]="REDIRECT",t[t.RECORD=44]="RECORD",t[t.FLUSH=45]="FLUSH"})(k=p.METHODS||(p.METHODS={}));p.METHODS_HTTP=[k.DELETE,k.GET,k.HEAD,k.POST,k.PUT,k.CONNECT,k.OPTIONS,k.TRACE,k.COPY,k.LOCK,k.MKCOL,k.MOVE,k.PROPFIND,k.PROPPATCH,k.SEARCH,k.UNLOCK,k.BIND,k.REBIND,k.UNBIND,k.ACL,k.REPORT,k.MKACTIVITY,k.CHECKOUT,k.MERGE,k["M-SEARCH"],k.NOTIFY,k.SUBSCRIBE,k.UNSUBSCRIBE,k.PATCH,k.PURGE,k.MKCALENDAR,k.LINK,k.UNLINK,k.PRI,k.SOURCE];p.METHODS_ICE=[k.SOURCE];p.METHODS_RTSP=[k.OPTIONS,k.DESCRIBE,k.ANNOUNCE,k.SETUP,k.PLAY,k.PAUSE,k.TEARDOWN,k.GET_PARAMETER,k.SET_PARAMETER,k.REDIRECT,k.RECORD,k.FLUSH,k.GET,k.POST];p.METHOD_MAP=cD.enumToMap(k);p.H_METHOD_MAP={};Object.keys(p.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(p.H_METHOD_MAP[t]=p.METHOD_MAP[t])});var hD;(function(t){t[t.SAFE=0]="SAFE",t[t.SAFE_WITH_CB=1]="SAFE_WITH_CB",t[t.UNSAFE=2]="UNSAFE"})(hD=p.FINISH||(p.FINISH={}));p.ALPHA=[];for(let t=65;t<=90;t++)p.ALPHA.push(String.fromCharCode(t)),p.ALPHA.push(String.fromCharCode(t+32));p.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};p.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};p.NUM=["0","1","2","3","4","5","6","7","8","9"];p.ALPHANUM=p.ALPHA.concat(p.NUM);p.MARK=["-","_",".","!","~","*","'","(",")"];p.USERINFO_CHARS=p.ALPHANUM.concat(p.MARK).concat(["%",";",":","&","=","+","$",","]);p.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(p.ALPHANUM);p.URL_CHAR=p.STRICT_URL_CHAR.concat([" ","\f"]);for(let t=128;t<=255;t++)p.URL_CHAR.push(t);p.HEX=p.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);p.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(p.ALPHANUM);p.TOKEN=p.STRICT_TOKEN.concat([" "]);p.HEADER_CHARS=[" "];for(let t=32;t<=255;t++)t!==127&&p.HEADER_CHARS.push(t);p.CONNECTION_TOKEN_CHARS=p.HEADER_CHARS.filter(t=>t!==44);p.MAJOR=p.NUM_MAP;p.MINOR=p.MAJOR;var rA;(function(t){t[t.GENERAL=0]="GENERAL",t[t.CONNECTION=1]="CONNECTION",t[t.CONTENT_LENGTH=2]="CONTENT_LENGTH",t[t.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",t[t.UPGRADE=4]="UPGRADE",t[t.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",t[t.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",t[t.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",t[t.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})(rA=p.HEADER_STATE||(p.HEADER_STATE={}));p.SPECIAL_HEADERS={connection:rA.CONNECTION,"content-length":rA.CONTENT_LENGTH,"proxy-connection":rA.CONNECTION,"transfer-encoding":rA.TRANSFER_ENCODING,upgrade:rA.UPGRADE}});var Oa=B((TJ,ZE)=>{"use strict";var{Buffer:QD}=require("node:buffer");ZE.exports=QD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var KE=B((bJ,jE)=>{"use strict";var{Buffer:BD}=require("node:buffer");jE.exports=BD.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK77MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var rs=B((kJ,oh)=>{"use strict";var XE=["GET","HEAD","POST"],ID=new Set(XE),CD=[101,204,205,304],$E=[301,302,303,307,308],dD=new Set($E),eh=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],fD=new Set(eh),th=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],pD=new Set(th),mD=["follow","manual","error"],rh=["GET","HEAD","OPTIONS","TRACE"],wD=new Set(rh),yD=["navigate","same-origin","no-cors","cors"],RD=["omit","same-origin","include"],DD=["default","no-store","reload","no-cache","force-cache","only-if-cached"],TD=["content-encoding","content-language","content-location","content-type","content-length"],bD=["half"],Ah=["CONNECT","TRACE","TRACK"],kD=new Set(Ah),sh=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],FD=new Set(sh);oh.exports={subresource:sh,forbiddenMethods:Ah,requestBodyHeader:TD,referrerPolicy:th,requestRedirect:mD,requestMode:yD,requestCredentials:RD,requestCache:DD,redirectStatus:$E,corsSafeListedMethods:XE,nullBodyStatus:CD,safeMethods:rh,badPorts:eh,requestDuplex:bD,subresourceSet:FD,badPortsSet:fD,redirectStatusSet:dD,corsSafeListedMethodsSet:ID,safeMethodsSet:wD,forbiddenMethodsSet:kD,referrerPolicySet:pD}});var _a=B((FJ,nh)=>{"use strict";var Ya=Symbol.for("undici.globalOrigin.1");function SD(){return globalThis[Ya]}function ND(t){if(t===void 0){Object.defineProperty(globalThis,Ya,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let e=new URL(t);if(e.protocol!=="http:"&&e.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${e.protocol}`);Object.defineProperty(globalThis,Ya,{value:e,writable:!0,enumerable:!1,configurable:!1})}nh.exports={getGlobalOrigin:SD,setGlobalOrigin:ND}});var Te=B((SJ,Eh)=>{"use strict";var Fo=require("node:assert"),UD=new TextEncoder,As=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,GD=/[\u000A\u000D\u0009\u0020]/,LD=/[\u0009\u000A\u000C\u000D\u0020]/g,MD=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function vD(t){Fo(t.protocol==="data:");let e=ch(t,!0);e=e.slice(5);let r={position:0},A=AA(",",e,r),s=A.length;if(A=PD(A,!0,!0),r.position>=e.length)return"failure";r.position++;let o=e.slice(s+1),n=gh(o);if(/;(\u0020){0,}base64$/i.test(A)){let a=uh(n);if(n=OD(a),n==="failure")return"failure";A=A.slice(0,-6),A=A.replace(/(\u0020)+$/,""),A=A.slice(0,-1)}A.startsWith(";")&&(A="text/plain"+A);let i=Ja(A);return i==="failure"&&(i=Ja("text/plain;charset=US-ASCII")),{mimeType:i,body:n}}function ch(t,e=!1){if(!e)return t.href;let r=t.href,A=t.hash.length,s=A===0?r:r.substring(0,r.length-A);return!A&&r.endsWith("#")?s.slice(0,-1):s}function So(t,e,r){let A="";for(;r.position=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function ah(t){return t>=48&&t<=57?t-48:(t&223)-55}function xD(t){let e=t.length,r=new Uint8Array(e),A=0;for(let s=0;st.length)return"failure";e.position++;let A=AA(";",t,e);if(A=ko(A,!1,!0),A.length===0||!As.test(A))return"failure";let s=r.toLowerCase(),o=A.toLowerCase(),n={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;e.positionGD.test(c),t,e);let i=So(c=>c!==";"&&c!=="=",t,e);if(i=i.toLowerCase(),e.positiont.length)break;let a=null;if(t[e.position]==='"')a=lh(t,e,!0),AA(";",t,e);else if(a=AA(";",t,e),a=ko(a,!1,!0),a.length===0)continue;i.length!==0&&As.test(i)&&(a.length===0||MD.test(a))&&!n.parameters.has(i)&&n.parameters.set(i,a)}return n}function OD(t){t=t.replace(LD,"");let e=t.length;if(e%4===0&&t.charCodeAt(e-1)===61&&(--e,t.charCodeAt(e-1)===61&&--e),e%4===1||/[^+/0-9A-Za-z]/.test(t.length===e?t:t.substring(0,e)))return"failure";let r=Buffer.from(t,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function lh(t,e,r){let A=e.position,s="";for(Fo(t[e.position]==='"'),e.position++;s+=So(n=>n!=='"'&&n!=="\\",t,e),!(e.position>=t.length);){let o=t[e.position];if(e.position++,o==="\\"){if(e.position>=t.length){s+="\\";break}s+=t[e.position],e.position++}else{Fo(o==='"');break}}return r?s:t.slice(A,e.position)}function YD(t){Fo(t!=="failure");let{parameters:e,essence:r}=t,A=r;for(let[s,o]of e.entries())A+=";",A+=s,A+="=",As.test(o)||(o=o.replace(/(\\|")/g,"\\$1"),o='"'+o,o+='"'),A+=o;return A}function _D(t){return t===13||t===10||t===9||t===32}function ko(t,e=!0,r=!0){return Pa(t,e,r,_D)}function JD(t){return t===13||t===10||t===9||t===12||t===32}function PD(t,e=!0,r=!0){return Pa(t,e,r,JD)}function Pa(t,e,r,A){let s=0,o=t.length-1;if(e)for(;s0&&A(t.charCodeAt(o));)o--;return s===0&&o===t.length-1?t:t.slice(s,o+1)}function uh(t){let e=t.length;if(65535>e)return String.fromCharCode.apply(null,t);let r="",A=0,s=65535;for(;Ae&&(s=e-A),r+=String.fromCharCode.apply(null,t.subarray(A,A+=s));return r}function HD(t){switch(t.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return t.subtype.endsWith("+json")?"application/json":t.subtype.endsWith("+xml")?"application/xml":""}Eh.exports={dataURLProcessor:vD,URLSerializer:ch,collectASequenceOfCodePoints:So,collectASequenceOfCodePointsFast:AA,stringPercentDecode:gh,parseMIMEType:Ja,collectAnHTTPQuotedString:lh,serializeAMimeType:YD,removeChars:Pa,removeHTTPWhitespace:ko,minimizeSupportedMimeType:HD,HTTP_TOKEN_CODEPOINTS:As,isomorphicDecode:uh}});var Qe=B((NJ,hh)=>{"use strict";var{types:ut,inspect:VD}=require("node:util"),{markAsUncloneable:qD}=require("node:worker_threads"),{toUSVString:WD}=M(),d={};d.converters={};d.util={};d.errors={};d.errors.exception=function(t){return new TypeError(`${t.header}: ${t.message}`)};d.errors.conversionFailed=function(t){let e=t.types.length===1?"":" one of",r=`${t.argument} could not be converted to${e}: ${t.types.join(", ")}.`;return d.errors.exception({header:t.prefix,message:r})};d.errors.invalidArgument=function(t){return d.errors.exception({header:t.prefix,message:`"${t.value}" is an invalid ${t.type}.`})};d.brandCheck=function(t,e,r){if(r?.strict!==!1){if(!(t instanceof e)){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}}else if(t?.[Symbol.toStringTag]!==e.prototype[Symbol.toStringTag]){let A=new TypeError("Illegal invocation");throw A.code="ERR_INVALID_THIS",A}};d.argumentLengthCheck=function({length:t},e,r){if(t{});d.util.ConvertToInt=function(t,e,r,A){let s,o;e===64?(s=Math.pow(2,53)-1,r==="unsigned"?o=0:o=Math.pow(-2,53)+1):r==="unsigned"?(o=0,s=Math.pow(2,e)-1):(o=Math.pow(-2,e)-1,s=Math.pow(2,e-1)-1);let n=Number(t);if(n===0&&(n=0),A?.enforceRange===!0){if(Number.isNaN(n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY)throw d.errors.exception({header:"Integer conversion",message:`Could not convert ${d.util.Stringify(t)} to an integer.`});if(n=d.util.IntegerPart(n),ns)throw d.errors.exception({header:"Integer conversion",message:`Value must be between ${o}-${s}, got ${n}.`});return n}return!Number.isNaN(n)&&A?.clamp===!0?(n=Math.min(Math.max(n,o),s),Math.floor(n)%2===0?n=Math.floor(n):n=Math.ceil(n),n):Number.isNaN(n)||n===0&&Object.is(0,n)||n===Number.POSITIVE_INFINITY||n===Number.NEGATIVE_INFINITY?0:(n=d.util.IntegerPart(n),n=n%Math.pow(2,e),r==="signed"&&n>=Math.pow(2,e)-1?n-Math.pow(2,e):n)};d.util.IntegerPart=function(t){let e=Math.floor(Math.abs(t));return t<0?-1*e:e};d.util.Stringify=function(t){switch(d.util.Type(t)){case"Symbol":return`Symbol(${t.description})`;case"Object":return VD(t);case"String":return`"${t}"`;default:return`${t}`}};d.sequenceConverter=function(t){return(e,r,A,s)=>{if(d.util.Type(e)!=="Object")throw d.errors.exception({header:r,message:`${A} (${d.util.Stringify(e)}) is not iterable.`});let o=typeof s=="function"?s():e?.[Symbol.iterator]?.(),n=[],i=0;if(o===void 0||typeof o.next!="function")throw d.errors.exception({header:r,message:`${A} is not iterable.`});for(;;){let{done:a,value:c}=o.next();if(a)break;n.push(t(c,r,`${A}[${i++}]`))}return n}};d.recordConverter=function(t,e){return(r,A,s)=>{if(d.util.Type(r)!=="Object")throw d.errors.exception({header:A,message:`${s} ("${d.util.Type(r)}") is not an Object.`});let o={};if(!ut.isProxy(r)){let i=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let a of i){let c=t(a,A,s),g=e(r[a],A,s);o[c]=g}return o}let n=Reflect.ownKeys(r);for(let i of n)if(Reflect.getOwnPropertyDescriptor(r,i)?.enumerable){let c=t(i,A,s),g=e(r[i],A,s);o[c]=g}return o}};d.interfaceConverter=function(t){return(e,r,A,s)=>{if(s?.strict!==!1&&!(e instanceof t))throw d.errors.exception({header:r,message:`Expected ${A} ("${d.util.Stringify(e)}") to be an instance of ${t.name}.`});return e}};d.dictionaryConverter=function(t){return(e,r,A)=>{let s=d.util.Type(e),o={};if(s==="Null"||s==="Undefined")return o;if(s!=="Object")throw d.errors.exception({header:r,message:`Expected ${e} to be one of: Null, Undefined, Object.`});for(let n of t){let{key:i,defaultValue:a,required:c,converter:g}=n;if(c===!0&&!Object.hasOwn(e,i))throw d.errors.exception({header:r,message:`Missing required key "${i}".`});let l=e[i],u=Object.hasOwn(n,"defaultValue");if(u&&l!==null&&(l??=a()),c||u||l!==void 0){if(l=g(l,r,`${A}.${i}`),n.allowedValues&&!n.allowedValues.includes(l))throw d.errors.exception({header:r,message:`${l} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});o[i]=l}}return o}};d.nullableConverter=function(t){return(e,r,A)=>e===null?e:t(e,r,A)};d.converters.DOMString=function(t,e,r,A){if(t===null&&A?.legacyNullToEmptyString)return"";if(typeof t=="symbol")throw d.errors.exception({header:e,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(t)};d.converters.ByteString=function(t,e,r){let A=d.converters.DOMString(t,e,r);for(let s=0;s255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${s} has a value of ${A.charCodeAt(s)} which is greater than 255.`);return A};d.converters.USVString=WD;d.converters.boolean=function(t){return!!t};d.converters.any=function(t){return t};d.converters["long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"signed",void 0,e,r)};d.converters["unsigned long long"]=function(t,e,r){return d.util.ConvertToInt(t,64,"unsigned",void 0,e,r)};d.converters["unsigned long"]=function(t,e,r){return d.util.ConvertToInt(t,32,"unsigned",void 0,e,r)};d.converters["unsigned short"]=function(t,e,r,A){return d.util.ConvertToInt(t,16,"unsigned",A,e,r)};d.converters.ArrayBuffer=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isAnyArrayBuffer(t))throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["ArrayBuffer"]});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.resizable||t.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.TypedArray=function(t,e,r,A,s){if(d.util.Type(t)!=="Object"||!ut.isTypedArray(t)||t.constructor.name!==e.name)throw d.errors.conversionFailed({prefix:r,argument:`${A} ("${d.util.Stringify(t)}")`,types:[e.name]});if(s?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.DataView=function(t,e,r,A){if(d.util.Type(t)!=="Object"||!ut.isDataView(t))throw d.errors.exception({header:e,message:`${r} is not a DataView.`});if(A?.allowShared===!1&&ut.isSharedArrayBuffer(t.buffer))throw d.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(t.buffer.resizable||t.buffer.growable)throw d.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return t};d.converters.BufferSource=function(t,e,r,A){if(ut.isAnyArrayBuffer(t))return d.converters.ArrayBuffer(t,e,r,{...A,allowShared:!1});if(ut.isTypedArray(t))return d.converters.TypedArray(t,t.constructor,e,r,{...A,allowShared:!1});if(ut.isDataView(t))return d.converters.DataView(t,e,r,{...A,allowShared:!1});throw d.errors.conversionFailed({prefix:e,argument:`${r} ("${d.util.Stringify(t)}")`,types:["BufferSource"]})};d.converters["sequence"]=d.sequenceConverter(d.converters.ByteString);d.converters["sequence>"]=d.sequenceConverter(d.converters["sequence"]);d.converters["record"]=d.recordConverter(d.converters.ByteString,d.converters.ByteString);hh.exports={webidl:d}});var Ge=B((UJ,bh)=>{"use strict";var{Transform:zD}=require("node:stream"),Qh=require("node:zlib"),{redirectStatusSet:ZD,referrerPolicySet:jD,badPortsSet:KD}=rs(),{getGlobalOrigin:Bh}=_a(),{collectASequenceOfCodePoints:Ir,collectAnHTTPQuotedString:XD,removeChars:$D,parseMIMEType:e0}=Te(),{performance:t0}=require("node:perf_hooks"),{isBlobLike:r0,ReadableStreamFrom:A0,isValidHTTPToken:Ih,normalizedMethodRecordsBase:s0}=M(),Cr=require("node:assert"),{isUint8Array:o0}=require("node:util/types"),{webidl:ss}=Qe(),Ch=[],Uo;try{Uo=require("node:crypto");let t=["sha256","sha384","sha512"];Ch=Uo.getHashes().filter(e=>t.includes(e))}catch{}function dh(t){let e=t.urlList,r=e.length;return r===0?null:e[r-1].toString()}function n0(t,e){if(!ZD.has(t.status))return null;let r=t.headersList.get("location",!0);return r!==null&&ph(r)&&(fh(r)||(r=i0(r)),r=new URL(r,dh(t))),r&&!r.hash&&(r.hash=e),r}function fh(t){for(let e=0;e126||r<32)return!1}return!0}function i0(t){return Buffer.from(t,"binary").toString("utf8")}function ns(t){return t.urlList[t.urlList.length-1]}function a0(t){let e=ns(t);return Dh(e)&&KD.has(e.port)?"blocked":"allowed"}function c0(t){return t instanceof Error||t?.constructor?.name==="Error"||t?.constructor?.name==="DOMException"}function g0(t){for(let e=0;e=32&&r<=126||r>=128&&r<=255))return!1}return!0}var l0=Ih;function ph(t){return(t[0]===" "||t[0]===" "||t[t.length-1]===" "||t[t.length-1]===" "||t.includes(` -`)||t.includes("\r")||t.includes("\0"))===!1}function u0(t,e){let{headersList:r}=e,A=(r.get("referrer-policy",!0)??"").split(","),s="";if(A.length>0)for(let o=A.length;o!==0;o--){let n=A[o-1].trim();if(jD.has(n)){s=n;break}}s!==""&&(t.referrerPolicy=s)}function E0(){return"allowed"}function h0(){return"success"}function Q0(){return"success"}function B0(t){let e=null;e=t.mode,t.headersList.set("sec-fetch-mode",e,!0)}function I0(t){let e=t.origin;if(!(e==="client"||e===void 0)){if(t.responseTainting==="cors"||t.mode==="websocket")t.headersList.append("origin",e,!0);else if(t.method!=="GET"&&t.method!=="HEAD"){switch(t.referrerPolicy){case"no-referrer":e=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":t.origin&&Va(t.origin)&&!Va(ns(t))&&(e=null);break;case"same-origin":Go(t,ns(t))||(e=null);break;default:}t.headersList.append("origin",e,!0)}}}function sA(t,e){return t}function C0(t,e,r){return!t?.startTime||t.startTime4096&&(A=s);let o=Go(t,A),n=os(A)&&!os(t.url);switch(e){case"origin":return s??Ha(r,!0);case"unsafe-url":return A;case"same-origin":return o?s:"no-referrer";case"origin-when-cross-origin":return o?A:s;case"strict-origin-when-cross-origin":{let i=ns(t);return Go(A,i)?A:os(A)&&!os(i)?"no-referrer":s}default:return n?"no-referrer":s}}function Ha(t,e){return Cr(t instanceof URL),t=new URL(t),t.protocol==="file:"||t.protocol==="about:"||t.protocol==="blank:"?"no-referrer":(t.username="",t.password="",t.hash="",e&&(t.pathname="",t.search=""),t)}function os(t){if(!(t instanceof URL))return!1;if(t.href==="about:blank"||t.href==="about:srcdoc"||t.protocol==="data:"||t.protocol==="file:")return!0;return e(t.origin);function e(r){if(r==null||r==="null")return!1;let A=new URL(r);return!!(A.protocol==="https:"||A.protocol==="wss:"||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(A.hostname)||A.hostname==="localhost"||A.hostname.includes("localhost.")||A.hostname.endsWith(".localhost"))}}function w0(t,e){if(Uo===void 0)return!0;let r=wh(e);if(r==="no metadata"||r.length===0)return!0;let A=R0(r),s=D0(r,A);for(let o of s){let n=o.algo,i=o.hash,a=Uo.createHash(n).update(t).digest("base64");if(a[a.length-1]==="="&&(a[a.length-2]==="="?a=a.slice(0,-2):a=a.slice(0,-1)),T0(a,i))return!0}return!1}var y0=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function wh(t){let e=[],r=!0;for(let A of t.split(" ")){r=!1;let s=y0.exec(A);if(s===null||s.groups===void 0||s.groups.algo===void 0)continue;let o=s.groups.algo.toLowerCase();Ch.includes(o)&&e.push(s.groups)}return r===!0?"no metadata":e}function R0(t){let e=t[0].algo;if(e[3]==="5")return e;for(let r=1;r{t=A,e=s}),resolve:t,reject:e}}function F0(t){return t.controller.state==="aborted"}function S0(t){return t.controller.state==="aborted"||t.controller.state==="terminated"}function N0(t){return s0[t.toLowerCase()]??t}function U0(t){let e=JSON.stringify(t);if(e===void 0)throw new TypeError("Value is not JSON serializable");return Cr(typeof e=="string"),e}var G0=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function yh(t,e,r=0,A=1){class s{#e;#t;#r;constructor(n,i){this.#e=n,this.#t=i,this.#r=0}next(){if(typeof this!="object"||this===null||!(#e in this))throw new TypeError(`'next' called on an object that does not implement interface ${t} Iterator.`);let n=this.#r,i=this.#e[e],a=i.length;if(n>=a)return{value:void 0,done:!0};let{[r]:c,[A]:g}=i[n];this.#r=n+1;let l;switch(this.#t){case"key":l=c;break;case"value":l=g;break;case"key+value":l=[c,g];break}return{value:l,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,G0),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${t} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(o,n){return new s(o,n)}}function L0(t,e,r,A=0,s=1){let o=yh(t,r,A,s),n={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return ss.brandCheck(this,e),o(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(a,c=globalThis){if(ss.brandCheck(this,e),ss.argumentLengthCheck(arguments,1,`${t}.forEach`),typeof a!="function")throw new TypeError(`Failed to execute 'forEach' on '${t}': parameter 1 is not of type 'Function'.`);for(let{0:g,1:l}of o(this,"key+value"))a.call(c,l,g,this)}}};return Object.defineProperties(e.prototype,{...n,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:n.entries.value}})}async function M0(t,e,r){let A=e,s=r,o;try{o=t.stream.getReader()}catch(n){s(n);return}try{A(await Rh(o))}catch(n){s(n)}}function v0(t){return t instanceof ReadableStream||t[Symbol.toStringTag]==="ReadableStream"&&typeof t.tee=="function"}function x0(t){try{t.close(),t.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}}var O0=/[^\x00-\xFF]/;function No(t){return Cr(!O0.test(t)),t}async function Rh(t){let e=[],r=0;for(;;){let{done:A,value:s}=await t.read();if(A)return Buffer.concat(e,r);if(!o0(s))throw new TypeError("Received non-Uint8Array chunk");e.push(s),r+=s.length}}function Y0(t){Cr("protocol"in t);let e=t.protocol;return e==="about:"||e==="blob:"||e==="data:"}function Va(t){return typeof t=="string"&&t[5]===":"&&t[0]==="h"&&t[1]==="t"&&t[2]==="t"&&t[3]==="p"&&t[4]==="s"||t.protocol==="https:"}function Dh(t){Cr("protocol"in t);let e=t.protocol;return e==="http:"||e==="https:"}function _0(t,e){let r=t;if(!r.startsWith("bytes"))return"failure";let A={position:5};if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==61)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let s=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),o=s.length?Number(s):null;if(e&&Ir(a=>a===" "||a===" ",r,A),r.charCodeAt(A.position)!==45)return"failure";A.position++,e&&Ir(a=>a===" "||a===" ",r,A);let n=Ir(a=>{let c=a.charCodeAt(0);return c>=48&&c<=57},r,A),i=n.length?Number(n):null;return A.positioni?"failure":{rangeStartValue:o,rangeEndValue:i}}function J0(t,e,r){let A="bytes ";return A+=No(`${t}`),A+="-",A+=No(`${e}`),A+="/",A+=No(`${r}`),A}var qa=class extends zD{#e;constructor(e){super(),this.#e=e}_transform(e,r,A){if(!this._inflateStream){if(e.length===0){A();return}this._inflateStream=(e[0]&15)===8?Qh.createInflate(this.#e):Qh.createInflateRaw(this.#e),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",s=>this.destroy(s))}this._inflateStream.write(e,r,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}};function P0(t){return new qa(t)}function H0(t){let e=null,r=null,A=null,s=Th("content-type",t);if(s===null)return"failure";for(let o of s){let n=e0(o);n==="failure"||n.essence==="*/*"||(A=n,A.essence!==r?(e=null,A.parameters.has("charset")&&(e=A.parameters.get("charset")),r=A.essence):!A.parameters.has("charset")&&e!==null&&A.parameters.set("charset",e))}return A??"failure"}function V0(t){let e=t,r={position:0},A=[],s="";for(;r.positiono!=='"'&&o!==",",e,r),r.positiono===9||o===32),A.push(s),s=""}return A}function Th(t,e){let r=e.get(t,!0);return r===null?null:V0(r)}var q0=new TextDecoder;function W0(t){return t.length===0?"":(t[0]===239&&t[1]===187&&t[2]===191&&(t=t.subarray(3)),q0.decode(t))}var Wa=class{get baseUrl(){return Bh()}get origin(){return this.baseUrl?.origin}policyContainer=mh()},za=class{settingsObject=new Wa},z0=new za;bh.exports={isAborted:F0,isCancelled:S0,isValidEncodedURL:fh,createDeferredPromise:k0,ReadableStreamFrom:A0,tryUpgradeRequestToAPotentiallyTrustworthyURL:b0,clampAndCoarsenConnectionTimingInfo:C0,coarsenedSharedCurrentTime:d0,determineRequestsReferrer:m0,makePolicyContainer:mh,clonePolicyContainer:p0,appendFetchMetadata:B0,appendRequestOriginHeader:I0,TAOCheck:Q0,corsCheck:h0,crossOriginResourcePolicyCheck:E0,createOpaqueTimingInfo:f0,setRequestReferrerPolicyOnRedirect:u0,isValidHTTPToken:Ih,requestBadPort:a0,requestCurrentURL:ns,responseURL:dh,responseLocationURL:n0,isBlobLike:r0,isURLPotentiallyTrustworthy:os,isValidReasonPhrase:g0,sameOrigin:Go,normalizeMethod:N0,serializeJavascriptValueToJSONString:U0,iteratorMixin:L0,createIterator:yh,isValidHeaderName:l0,isValidHeaderValue:ph,isErrorLike:c0,fullyReadBody:M0,bytesMatch:w0,isReadableStreamLike:v0,readableStreamClose:x0,isomorphicEncode:No,urlIsLocal:Y0,urlHasHttpsScheme:Va,urlIsHttpHttpsScheme:Dh,readAllBytes:Rh,simpleRangeHeaderValue:_0,buildContentRange:J0,parseMetadata:wh,createInflate:P0,extractMimeType:H0,getDecodeSplit:Th,utf8DecodeBytes:W0,environmentSettingsObject:z0}});var Pt=B((GJ,kh)=>{"use strict";kh.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var ja=B((LJ,Fh)=>{"use strict";var{Blob:Z0,File:j0}=require("node:buffer"),{kState:kt}=Pt(),{webidl:Et}=Qe(),Za=class t{constructor(e,r,A={}){let s=r,o=A.type,n=A.lastModified??Date.now();this[kt]={blobLike:e,name:s,type:o,lastModified:n}}stream(...e){return Et.brandCheck(this,t),this[kt].blobLike.stream(...e)}arrayBuffer(...e){return Et.brandCheck(this,t),this[kt].blobLike.arrayBuffer(...e)}slice(...e){return Et.brandCheck(this,t),this[kt].blobLike.slice(...e)}text(...e){return Et.brandCheck(this,t),this[kt].blobLike.text(...e)}get size(){return Et.brandCheck(this,t),this[kt].blobLike.size}get type(){return Et.brandCheck(this,t),this[kt].blobLike.type}get name(){return Et.brandCheck(this,t),this[kt].name}get lastModified(){return Et.brandCheck(this,t),this[kt].lastModified}get[Symbol.toStringTag](){return"File"}};Et.converters.Blob=Et.interfaceConverter(Z0);function K0(t){return t instanceof j0||t&&(typeof t.stream=="function"||typeof t.arrayBuffer=="function")&&t[Symbol.toStringTag]==="File"}Fh.exports={FileLike:Za,isFileLike:K0}});var as=B((MJ,Lh)=>{"use strict";var{isBlobLike:Lo,iteratorMixin:X0}=Ge(),{kState:fe}=Pt(),{kEnumerableProperty:oA}=M(),{FileLike:Sh,isFileLike:$0}=ja(),{webidl:z}=Qe(),{File:Gh}=require("node:buffer"),Nh=require("node:util"),Uh=globalThis.File??Gh,is=class t{constructor(e){if(z.util.markAsUncloneable(this),e!==void 0)throw z.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[fe]=[]}append(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.append";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"value",{strict:!1}):z.converters.USVString(r,s,"value"),A=arguments.length===3?z.converters.USVString(A,s,"filename"):void 0;let o=Ka(e,r,A);this[fe].push(o)}delete(e){z.brandCheck(this,t);let r="FormData.delete";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe]=this[fe].filter(A=>A.name!==e)}get(e){z.brandCheck(this,t);let r="FormData.get";z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name");let A=this[fe].findIndex(s=>s.name===e);return A===-1?null:this[fe][A].value}getAll(e){z.brandCheck(this,t);let r="FormData.getAll";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].filter(A=>A.name===e).map(A=>A.value)}has(e){z.brandCheck(this,t);let r="FormData.has";return z.argumentLengthCheck(arguments,1,r),e=z.converters.USVString(e,r,"name"),this[fe].findIndex(A=>A.name===e)!==-1}set(e,r,A=void 0){z.brandCheck(this,t);let s="FormData.set";if(z.argumentLengthCheck(arguments,2,s),arguments.length===3&&!Lo(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");e=z.converters.USVString(e,s,"name"),r=Lo(r)?z.converters.Blob(r,s,"name",{strict:!1}):z.converters.USVString(r,s,"name"),A=arguments.length===3?z.converters.USVString(A,s,"name"):void 0;let o=Ka(e,r,A),n=this[fe].findIndex(i=>i.name===e);n!==-1?this[fe]=[...this[fe].slice(0,n),o,...this[fe].slice(n+1).filter(i=>i.name!==e)]:this[fe].push(o)}[Nh.inspect.custom](e,r){let A=this[fe].reduce((o,n)=>(o[n.name]?Array.isArray(o[n.name])?o[n.name].push(n.value):o[n.name]=[o[n.name],n.value]:o[n.name]=n.value,o),{__proto__:null});r.depth??=e,r.colors??=!0;let s=Nh.formatWithOptions(r,A);return`FormData ${s.slice(s.indexOf("]")+2)}`}};X0("FormData",is,fe,"name","value");Object.defineProperties(is.prototype,{append:oA,delete:oA,get:oA,getAll:oA,has:oA,set:oA,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function Ka(t,e,r){if(typeof e!="string"){if($0(e)||(e=e instanceof Blob?new Uh([e],"blob",{type:e.type}):new Sh(e,"blob",{type:e.type})),r!==void 0){let A={type:e.type,lastModified:e.lastModified};e=e instanceof Gh?new Uh([e],r,A):new Sh(e,r,A)}}return{name:t,value:e}}Lh.exports={FormData:is,makeEntry:Ka}});var _h=B((vJ,Yh)=>{"use strict";var{isUSVString:Mh,bufferToLowerCasedHeaderName:eT}=M(),{utf8DecodeBytes:tT}=Ge(),{HTTP_TOKEN_CODEPOINTS:rT,isomorphicDecode:vh}=Te(),{isFileLike:AT}=ja(),{makeEntry:sT}=as(),Mo=require("node:assert"),{File:oT}=require("node:buffer"),nT=globalThis.File??oT,iT=Buffer.from('form-data; name="'),xh=Buffer.from("; filename"),aT=Buffer.from("--"),cT=Buffer.from(`--\r -`);function gT(t){for(let e=0;e70)return!1;for(let r=0;r=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===39||A===45||A===95))return!1}return!0}function uT(t,e){Mo(e!=="failure"&&e.essence==="multipart/form-data");let r=e.parameters.get("boundary");if(r===void 0)return"failure";let A=Buffer.from(`--${r}`,"utf8"),s=[],o={position:0};for(;t[o.position]===13&&t[o.position+1]===10;)o.position+=2;let n=t.length;for(;t[n-1]===10&&t[n-2]===13;)n-=2;for(n!==t.length&&(t=t.subarray(0,n));;){if(t.subarray(o.position,o.position+A.length).equals(A))o.position+=A.length;else return"failure";if(o.position===t.length-2&&vo(t,aT,o)||o.position===t.length-4&&vo(t,cT,o))return s;if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let i=ET(t,o);if(i==="failure")return"failure";let{name:a,filename:c,contentType:g,encoding:l}=i;o.position+=2;let u;{let h=t.indexOf(A.subarray(2),o.position);if(h===-1)return"failure";u=t.subarray(o.position,h-4),o.position+=u.length,l==="base64"&&(u=Buffer.from(u.toString(),"base64"))}if(t[o.position]!==13||t[o.position+1]!==10)return"failure";o.position+=2;let E;c!==null?(g??="text/plain",gT(g)||(g=""),E=new nT([u],c,{type:g})):E=tT(Buffer.from(u)),Mo(Mh(a)),Mo(typeof E=="string"&&Mh(E)||AT(E)),s.push(sT(a,E,c))}}function ET(t,e){let r=null,A=null,s=null,o=null;for(;;){if(t[e.position]===13&&t[e.position+1]===10)return r===null?"failure":{name:r,filename:A,contentType:s,encoding:o};let n=nA(i=>i!==10&&i!==13&&i!==58,t,e);if(n=Xa(n,!0,!0,i=>i===9||i===32),!rT.test(n.toString())||t[e.position]!==58)return"failure";switch(e.position++,nA(i=>i===32||i===9,t,e),eT(n)){case"content-disposition":{if(r=A=null,!vo(t,iT,e)||(e.position+=17,r=Oh(t,e),r===null))return"failure";if(vo(t,xh,e)){let i=e.position+xh.length;if(t[i]===42&&(e.position+=1,i+=1),t[i]!==61||t[i+1]!==34||(e.position+=12,A=Oh(t,e),A===null))return"failure"}break}case"content-type":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),s=vh(i);break}case"content-transfer-encoding":{let i=nA(a=>a!==10&&a!==13,t,e);i=Xa(i,!1,!0,a=>a===9||a===32),o=vh(i);break}default:nA(i=>i!==10&&i!==13,t,e)}if(t[e.position]!==13&&t[e.position+1]!==10)return"failure";e.position+=2}}function Oh(t,e){Mo(t[e.position-1]===34);let r=nA(A=>A!==10&&A!==13&&A!==34,t,e);return t[e.position]!==34?null:(e.position++,r=new TextDecoder().decode(r).replace(/%0A/ig,` -`).replace(/%0D/ig,"\r").replace(/%22/g,'"'),r)}function nA(t,e,r){let A=r.position;for(;A0&&A(t[o]);)o--;return s===0&&o===t.length-1?t:t.subarray(s,o+1)}function vo(t,e,r){if(t.length{"use strict";var cs=M(),{ReadableStreamFrom:hT,isBlobLike:Jh,isReadableStreamLike:QT,readableStreamClose:BT,createDeferredPromise:IT,fullyReadBody:CT,extractMimeType:dT,utf8DecodeBytes:Vh}=Ge(),{FormData:Ph}=as(),{kState:aA}=Pt(),{webidl:fT}=Qe(),{Blob:pT}=require("node:buffer"),$a=require("node:assert"),{isErrored:qh,isDisturbed:mT}=require("node:stream"),{isArrayBuffer:wT}=require("node:util/types"),{serializeAMimeType:yT}=Te(),{multipartFormDataParser:RT}=_h(),ec;try{let t=require("node:crypto");ec=e=>t.randomInt(0,e)}catch{ec=t=>Math.floor(Math.random(t))}var xo=new TextEncoder;function DT(){}var Wh=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,zh;Wh&&(zh=new FinalizationRegistry(t=>{let e=t.deref();e&&!e.locked&&!mT(e)&&!qh(e)&&e.cancel("Response object has been garbage collected").catch(DT)}));function Zh(t,e=!1){let r=null;t instanceof ReadableStream?r=t:Jh(t)?r=t.stream():r=new ReadableStream({async pull(a){let c=typeof s=="string"?xo.encode(s):s;c.byteLength&&a.enqueue(c),queueMicrotask(()=>BT(a))},start(){},type:"bytes"}),$a(QT(r));let A=null,s=null,o=null,n=null;if(typeof t=="string")s=t,n="text/plain;charset=UTF-8";else if(t instanceof URLSearchParams)s=t.toString(),n="application/x-www-form-urlencoded;charset=UTF-8";else if(wT(t))s=new Uint8Array(t.slice());else if(ArrayBuffer.isView(t))s=new Uint8Array(t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength));else if(cs.isFormDataLike(t)){let a=`----formdata-undici-0${`${ec(1e11)}`.padStart(11,"0")}`,c=`--${a}\r -Content-Disposition: form-data`;let g=I=>I.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),l=I=>I.replace(/\r?\n|\r/g,`\r -`),u=[],E=new Uint8Array([13,10]);o=0;let h=!1;for(let[I,Q]of t)if(typeof Q=="string"){let f=xo.encode(c+`; name="${g(l(I))}"\r -\r -${l(Q)}\r -`);u.push(f),o+=f.byteLength}else{let f=xo.encode(`${c}; name="${g(l(I))}"`+(Q.name?`; filename="${g(Q.name)}"`:"")+`\r -Content-Type: ${Q.type||"application/octet-stream"}\r +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + try { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + } catch (e) { + throw mod = 0, e; + } +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// node_modules/tunnel/lib/tunnel.js +var require_tunnel = __commonJS({ + "node_modules/tunnel/lib/tunnel.js"(exports2) { + "use strict"; + var net = require("net"); + var tls = require("tls"); + var http2 = require("http"); + var https2 = require("https"); + var events2 = require("events"); + var assert = require("assert"); + var util2 = require("util"); + exports2.httpOverHttp = httpOverHttp2; + exports2.httpsOverHttp = httpsOverHttp2; + exports2.httpOverHttps = httpOverHttps2; + exports2.httpsOverHttps = httpsOverHttps2; + function httpOverHttp2(options) { + var agent = new TunnelingAgent(options); + agent.request = http2.request; + return agent; + } + function httpsOverHttp2(options) { + var agent = new TunnelingAgent(options); + agent.request = http2.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; + } + function httpOverHttps2(options) { + var agent = new TunnelingAgent(options); + agent.request = https2.request; + return agent; + } + function httpsOverHttps2(options) { + var agent = new TunnelingAgent(options); + agent.request = https2.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; + } + function TunnelingAgent(options) { + var self = this; + self.options = options || {}; + self.proxyOptions = self.options.proxy || {}; + self.maxSockets = self.options.maxSockets || http2.Agent.defaultMaxSockets; + self.requests = []; + self.sockets = []; + self.on("free", function onFree(socket, host, port, localAddress) { + var options2 = toOptions(host, port, localAddress); + for (var i = 0, len = self.requests.length; i < len; ++i) { + var pending = self.requests[i]; + if (pending.host === options2.host && pending.port === options2.port) { + self.requests.splice(i, 1); + pending.request.onSocket(socket); + return; + } + } + socket.destroy(); + self.removeSocket(socket); + }); + } + util2.inherits(TunnelingAgent, events2.EventEmitter); + TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { + var self = this; + var options = mergeOptions({ request: req }, self.options, toOptions(host, port, localAddress)); + if (self.sockets.length >= this.maxSockets) { + self.requests.push(options); + return; + } + self.createSocket(options, function(socket) { + socket.on("free", onFree); + socket.on("close", onCloseOrRemove); + socket.on("agentRemove", onCloseOrRemove); + req.onSocket(socket); + function onFree() { + self.emit("free", socket, options); + } + function onCloseOrRemove(err) { + self.removeSocket(socket); + socket.removeListener("free", onFree); + socket.removeListener("close", onCloseOrRemove); + socket.removeListener("agentRemove", onCloseOrRemove); + } + }); + }; + TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { + var self = this; + var placeholder = {}; + self.sockets.push(placeholder); + var connectOptions = mergeOptions({}, self.proxyOptions, { + method: "CONNECT", + path: options.host + ":" + options.port, + agent: false, + headers: { + host: options.host + ":" + options.port + } + }); + if (options.localAddress) { + connectOptions.localAddress = options.localAddress; + } + if (connectOptions.proxyAuth) { + connectOptions.headers = connectOptions.headers || {}; + connectOptions.headers["Proxy-Authorization"] = "Basic " + new Buffer(connectOptions.proxyAuth).toString("base64"); + } + debug2("making CONNECT request"); + var connectReq = self.request(connectOptions); + connectReq.useChunkedEncodingByDefault = false; + connectReq.once("response", onResponse); + connectReq.once("upgrade", onUpgrade); + connectReq.once("connect", onConnect); + connectReq.once("error", onError); + connectReq.end(); + function onResponse(res) { + res.upgrade = true; + } + function onUpgrade(res, socket, head) { + process.nextTick(function() { + onConnect(res, socket, head); + }); + } + function onConnect(res, socket, head) { + connectReq.removeAllListeners(); + socket.removeAllListeners(); + if (res.statusCode !== 200) { + debug2( + "tunneling socket could not be established, statusCode=%d", + res.statusCode + ); + socket.destroy(); + var error2 = new Error("tunneling socket could not be established, statusCode=" + res.statusCode); + error2.code = "ECONNRESET"; + options.request.emit("error", error2); + self.removeSocket(placeholder); + return; + } + if (head.length > 0) { + debug2("got illegal response body from proxy"); + socket.destroy(); + var error2 = new Error("got illegal response body from proxy"); + error2.code = "ECONNRESET"; + options.request.emit("error", error2); + self.removeSocket(placeholder); + return; + } + debug2("tunneling connection has established"); + self.sockets[self.sockets.indexOf(placeholder)] = socket; + return cb(socket); + } + function onError(cause) { + connectReq.removeAllListeners(); + debug2( + "tunneling socket could not be established, cause=%s\n", + cause.message, + cause.stack + ); + var error2 = new Error("tunneling socket could not be established, cause=" + cause.message); + error2.code = "ECONNRESET"; + options.request.emit("error", error2); + self.removeSocket(placeholder); + } + }; + TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket); + if (pos === -1) { + return; + } + this.sockets.splice(pos, 1); + var pending = this.requests.shift(); + if (pending) { + this.createSocket(pending, function(socket2) { + pending.request.onSocket(socket2); + }); + } + }; + function createSecureSocket(options, cb) { + var self = this; + TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { + var hostHeader = options.request.getHeader("host"); + var tlsOptions = mergeOptions({}, self.options, { + socket, + servername: hostHeader ? hostHeader.replace(/:.*$/, "") : options.host + }); + var secureSocket = tls.connect(0, tlsOptions); + self.sockets[self.sockets.indexOf(socket)] = secureSocket; + cb(secureSocket); + }); + } + function toOptions(host, port, localAddress) { + if (typeof host === "string") { + return { + host, + port, + localAddress + }; + } + return host; + } + function mergeOptions(target) { + for (var i = 1, len = arguments.length; i < len; ++i) { + var overrides = arguments[i]; + if (typeof overrides === "object") { + var keys = Object.keys(overrides); + for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { + var k = keys[j]; + if (overrides[k] !== void 0) { + target[k] = overrides[k]; + } + } + } + } + return target; + } + var debug2; + if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { + debug2 = function() { + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === "string") { + args[0] = "TUNNEL: " + args[0]; + } else { + args.unshift("TUNNEL:"); + } + console.error.apply(console, args); + }; + } else { + debug2 = function() { + }; + } + exports2.debug = debug2; + } +}); + +// node_modules/tunnel/index.js +var require_tunnel2 = __commonJS({ + "node_modules/tunnel/index.js"(exports2, module2) { + module2.exports = require_tunnel(); + } +}); + +// node_modules/undici/lib/core/symbols.js +var require_symbols = __commonJS({ + "node_modules/undici/lib/core/symbols.js"(exports2, module2) { + module2.exports = { + kClose: /* @__PURE__ */ Symbol("close"), + kDestroy: /* @__PURE__ */ Symbol("destroy"), + kDispatch: /* @__PURE__ */ Symbol("dispatch"), + kUrl: /* @__PURE__ */ Symbol("url"), + kWriting: /* @__PURE__ */ Symbol("writing"), + kResuming: /* @__PURE__ */ Symbol("resuming"), + kQueue: /* @__PURE__ */ Symbol("queue"), + kConnect: /* @__PURE__ */ Symbol("connect"), + kConnecting: /* @__PURE__ */ Symbol("connecting"), + kKeepAliveDefaultTimeout: /* @__PURE__ */ Symbol("default keep alive timeout"), + kKeepAliveMaxTimeout: /* @__PURE__ */ Symbol("max keep alive timeout"), + kKeepAliveTimeoutThreshold: /* @__PURE__ */ Symbol("keep alive timeout threshold"), + kKeepAliveTimeoutValue: /* @__PURE__ */ Symbol("keep alive timeout"), + kKeepAlive: /* @__PURE__ */ Symbol("keep alive"), + kHeadersTimeout: /* @__PURE__ */ Symbol("headers timeout"), + kBodyTimeout: /* @__PURE__ */ Symbol("body timeout"), + kServerName: /* @__PURE__ */ Symbol("server name"), + kLocalAddress: /* @__PURE__ */ Symbol("local address"), + kHost: /* @__PURE__ */ Symbol("host"), + kNoRef: /* @__PURE__ */ Symbol("no ref"), + kBodyUsed: /* @__PURE__ */ Symbol("used"), + kBody: /* @__PURE__ */ Symbol("abstracted request body"), + kRunning: /* @__PURE__ */ Symbol("running"), + kBlocking: /* @__PURE__ */ Symbol("blocking"), + kPending: /* @__PURE__ */ Symbol("pending"), + kSize: /* @__PURE__ */ Symbol("size"), + kBusy: /* @__PURE__ */ Symbol("busy"), + kQueued: /* @__PURE__ */ Symbol("queued"), + kFree: /* @__PURE__ */ Symbol("free"), + kConnected: /* @__PURE__ */ Symbol("connected"), + kClosed: /* @__PURE__ */ Symbol("closed"), + kNeedDrain: /* @__PURE__ */ Symbol("need drain"), + kReset: /* @__PURE__ */ Symbol("reset"), + kDestroyed: /* @__PURE__ */ Symbol.for("nodejs.stream.destroyed"), + kResume: /* @__PURE__ */ Symbol("resume"), + kOnError: /* @__PURE__ */ Symbol("on error"), + kMaxHeadersSize: /* @__PURE__ */ Symbol("max headers size"), + kRunningIdx: /* @__PURE__ */ Symbol("running index"), + kPendingIdx: /* @__PURE__ */ Symbol("pending index"), + kError: /* @__PURE__ */ Symbol("error"), + kClients: /* @__PURE__ */ Symbol("clients"), + kClient: /* @__PURE__ */ Symbol("client"), + kParser: /* @__PURE__ */ Symbol("parser"), + kOnDestroyed: /* @__PURE__ */ Symbol("destroy callbacks"), + kPipelining: /* @__PURE__ */ Symbol("pipelining"), + kSocket: /* @__PURE__ */ Symbol("socket"), + kHostHeader: /* @__PURE__ */ Symbol("host header"), + kConnector: /* @__PURE__ */ Symbol("connector"), + kStrictContentLength: /* @__PURE__ */ Symbol("strict content length"), + kMaxRedirections: /* @__PURE__ */ Symbol("maxRedirections"), + kMaxRequests: /* @__PURE__ */ Symbol("maxRequestsPerClient"), + kProxy: /* @__PURE__ */ Symbol("proxy agent options"), + kCounter: /* @__PURE__ */ Symbol("socket request counter"), + kInterceptors: /* @__PURE__ */ Symbol("dispatch interceptors"), + kMaxResponseSize: /* @__PURE__ */ Symbol("max response size"), + kHTTP2Session: /* @__PURE__ */ Symbol("http2Session"), + kHTTP2SessionState: /* @__PURE__ */ Symbol("http2Session state"), + kRetryHandlerDefaultRetry: /* @__PURE__ */ Symbol("retry agent default retry"), + kConstruct: /* @__PURE__ */ Symbol("constructable"), + kListeners: /* @__PURE__ */ Symbol("listeners"), + kHTTPContext: /* @__PURE__ */ Symbol("http context"), + kMaxConcurrentStreams: /* @__PURE__ */ Symbol("max concurrent streams"), + kNoProxyAgent: /* @__PURE__ */ Symbol("no proxy agent"), + kHttpProxyAgent: /* @__PURE__ */ Symbol("http proxy agent"), + kHttpsProxyAgent: /* @__PURE__ */ Symbol("https proxy agent") + }; + } +}); + +// node_modules/undici/lib/core/errors.js +var require_errors = __commonJS({ + "node_modules/undici/lib/core/errors.js"(exports2, module2) { + "use strict"; + var kUndiciError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR"); + var UndiciError = class extends Error { + constructor(message) { + super(message); + this.name = "UndiciError"; + this.code = "UND_ERR"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kUndiciError] === true; + } + [kUndiciError] = true; + }; + var kConnectTimeoutError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"); + var ConnectTimeoutError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ConnectTimeoutError"; + this.message = message || "Connect Timeout Error"; + this.code = "UND_ERR_CONNECT_TIMEOUT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kConnectTimeoutError] === true; + } + [kConnectTimeoutError] = true; + }; + var kHeadersTimeoutError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"); + var HeadersTimeoutError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "HeadersTimeoutError"; + this.message = message || "Headers Timeout Error"; + this.code = "UND_ERR_HEADERS_TIMEOUT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kHeadersTimeoutError] === true; + } + [kHeadersTimeoutError] = true; + }; + var kHeadersOverflowError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"); + var HeadersOverflowError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "HeadersOverflowError"; + this.message = message || "Headers Overflow Error"; + this.code = "UND_ERR_HEADERS_OVERFLOW"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kHeadersOverflowError] === true; + } + [kHeadersOverflowError] = true; + }; + var kBodyTimeoutError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"); + var BodyTimeoutError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "BodyTimeoutError"; + this.message = message || "Body Timeout Error"; + this.code = "UND_ERR_BODY_TIMEOUT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kBodyTimeoutError] === true; + } + [kBodyTimeoutError] = true; + }; + var kResponseStatusCodeError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"); + var ResponseStatusCodeError = class extends UndiciError { + constructor(message, statusCode, headers, body) { + super(message); + this.name = "ResponseStatusCodeError"; + this.message = message || "Response Status Code Error"; + this.code = "UND_ERR_RESPONSE_STATUS_CODE"; + this.body = body; + this.status = statusCode; + this.statusCode = statusCode; + this.headers = headers; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseStatusCodeError] === true; + } + [kResponseStatusCodeError] = true; + }; + var kInvalidArgumentError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_INVALID_ARG"); + var InvalidArgumentError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "InvalidArgumentError"; + this.message = message || "Invalid Argument Error"; + this.code = "UND_ERR_INVALID_ARG"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kInvalidArgumentError] === true; + } + [kInvalidArgumentError] = true; + }; + var kInvalidReturnValueError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"); + var InvalidReturnValueError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "InvalidReturnValueError"; + this.message = message || "Invalid Return Value Error"; + this.code = "UND_ERR_INVALID_RETURN_VALUE"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kInvalidReturnValueError] === true; + } + [kInvalidReturnValueError] = true; + }; + var kAbortError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_ABORT"); + var AbortError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "AbortError"; + this.message = message || "The operation was aborted"; + this.code = "UND_ERR_ABORT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kAbortError] === true; + } + [kAbortError] = true; + }; + var kRequestAbortedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_ABORTED"); + var RequestAbortedError = class extends AbortError { + constructor(message) { + super(message); + this.name = "AbortError"; + this.message = message || "Request aborted"; + this.code = "UND_ERR_ABORTED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kRequestAbortedError] === true; + } + [kRequestAbortedError] = true; + }; + var kInformationalError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_INFO"); + var InformationalError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "InformationalError"; + this.message = message || "Request information"; + this.code = "UND_ERR_INFO"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kInformationalError] === true; + } + [kInformationalError] = true; + }; + var kRequestContentLengthMismatchError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"); + var RequestContentLengthMismatchError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "RequestContentLengthMismatchError"; + this.message = message || "Request body length does not match content-length header"; + this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kRequestContentLengthMismatchError] === true; + } + [kRequestContentLengthMismatchError] = true; + }; + var kResponseContentLengthMismatchError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"); + var ResponseContentLengthMismatchError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ResponseContentLengthMismatchError"; + this.message = message || "Response body length does not match content-length header"; + this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseContentLengthMismatchError] === true; + } + [kResponseContentLengthMismatchError] = true; + }; + var kClientDestroyedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_DESTROYED"); + var ClientDestroyedError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ClientDestroyedError"; + this.message = message || "The client is destroyed"; + this.code = "UND_ERR_DESTROYED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kClientDestroyedError] === true; + } + [kClientDestroyedError] = true; + }; + var kClientClosedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_CLOSED"); + var ClientClosedError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ClientClosedError"; + this.message = message || "The client is closed"; + this.code = "UND_ERR_CLOSED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kClientClosedError] === true; + } + [kClientClosedError] = true; + }; + var kSocketError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_SOCKET"); + var SocketError = class extends UndiciError { + constructor(message, socket) { + super(message); + this.name = "SocketError"; + this.message = message || "Socket error"; + this.code = "UND_ERR_SOCKET"; + this.socket = socket; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kSocketError] === true; + } + [kSocketError] = true; + }; + var kNotSupportedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"); + var NotSupportedError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "NotSupportedError"; + this.message = message || "Not supported error"; + this.code = "UND_ERR_NOT_SUPPORTED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kNotSupportedError] === true; + } + [kNotSupportedError] = true; + }; + var kBalancedPoolMissingUpstreamError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"); + var BalancedPoolMissingUpstreamError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "MissingUpstreamError"; + this.message = message || "No upstream has been added to the BalancedPool"; + this.code = "UND_ERR_BPL_MISSING_UPSTREAM"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kBalancedPoolMissingUpstreamError] === true; + } + [kBalancedPoolMissingUpstreamError] = true; + }; + var kHTTPParserError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_HTTP_PARSER"); + var HTTPParserError = class extends Error { + constructor(message, code, data) { + super(message); + this.name = "HTTPParserError"; + this.code = code ? `HPE_${code}` : void 0; + this.data = data ? data.toString() : void 0; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kHTTPParserError] === true; + } + [kHTTPParserError] = true; + }; + var kResponseExceededMaxSizeError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"); + var ResponseExceededMaxSizeError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ResponseExceededMaxSizeError"; + this.message = message || "Response content exceeded max size"; + this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseExceededMaxSizeError] === true; + } + [kResponseExceededMaxSizeError] = true; + }; + var kRequestRetryError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_REQ_RETRY"); + var RequestRetryError = class extends UndiciError { + constructor(message, code, { headers, data }) { + super(message); + this.name = "RequestRetryError"; + this.message = message || "Request retry error"; + this.code = "UND_ERR_REQ_RETRY"; + this.statusCode = code; + this.data = data; + this.headers = headers; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kRequestRetryError] === true; + } + [kRequestRetryError] = true; + }; + var kResponseError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RESPONSE"); + var ResponseError = class extends UndiciError { + constructor(message, code, { headers, data }) { + super(message); + this.name = "ResponseError"; + this.message = message || "Response error"; + this.code = "UND_ERR_RESPONSE"; + this.statusCode = code; + this.data = data; + this.headers = headers; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseError] === true; + } + [kResponseError] = true; + }; + var kSecureProxyConnectionError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_PRX_TLS"); + var SecureProxyConnectionError = class extends UndiciError { + constructor(cause, message, options) { + super(message, { cause, ...options ?? {} }); + this.name = "SecureProxyConnectionError"; + this.message = message || "Secure Proxy Connection failed"; + this.code = "UND_ERR_PRX_TLS"; + this.cause = cause; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kSecureProxyConnectionError] === true; + } + [kSecureProxyConnectionError] = true; + }; + var kMessageSizeExceededError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"); + var MessageSizeExceededError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "MessageSizeExceededError"; + this.message = message || "Max decompressed message size exceeded"; + this.code = "UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kMessageSizeExceededError] === true; + } + get [kMessageSizeExceededError]() { + return true; + } + }; + module2.exports = { + AbortError, + HTTPParserError, + UndiciError, + HeadersTimeoutError, + HeadersOverflowError, + BodyTimeoutError, + RequestContentLengthMismatchError, + ConnectTimeoutError, + ResponseStatusCodeError, + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError, + ClientDestroyedError, + ClientClosedError, + InformationalError, + SocketError, + NotSupportedError, + ResponseContentLengthMismatchError, + BalancedPoolMissingUpstreamError, + ResponseExceededMaxSizeError, + RequestRetryError, + ResponseError, + SecureProxyConnectionError, + MessageSizeExceededError + }; + } +}); + +// node_modules/undici/lib/core/constants.js +var require_constants = __commonJS({ + "node_modules/undici/lib/core/constants.js"(exports2, module2) { + "use strict"; + var headerNameLowerCasedRecord = {}; + var wellknownHeaderNames = [ + "Accept", + "Accept-Encoding", + "Accept-Language", + "Accept-Ranges", + "Access-Control-Allow-Credentials", + "Access-Control-Allow-Headers", + "Access-Control-Allow-Methods", + "Access-Control-Allow-Origin", + "Access-Control-Expose-Headers", + "Access-Control-Max-Age", + "Access-Control-Request-Headers", + "Access-Control-Request-Method", + "Age", + "Allow", + "Alt-Svc", + "Alt-Used", + "Authorization", + "Cache-Control", + "Clear-Site-Data", + "Connection", + "Content-Disposition", + "Content-Encoding", + "Content-Language", + "Content-Length", + "Content-Location", + "Content-Range", + "Content-Security-Policy", + "Content-Security-Policy-Report-Only", + "Content-Type", + "Cookie", + "Cross-Origin-Embedder-Policy", + "Cross-Origin-Opener-Policy", + "Cross-Origin-Resource-Policy", + "Date", + "Device-Memory", + "Downlink", + "ECT", + "ETag", + "Expect", + "Expect-CT", + "Expires", + "Forwarded", + "From", + "Host", + "If-Match", + "If-Modified-Since", + "If-None-Match", + "If-Range", + "If-Unmodified-Since", + "Keep-Alive", + "Last-Modified", + "Link", + "Location", + "Max-Forwards", + "Origin", + "Permissions-Policy", + "Pragma", + "Proxy-Authenticate", + "Proxy-Authorization", + "RTT", + "Range", + "Referer", + "Referrer-Policy", + "Refresh", + "Retry-After", + "Sec-WebSocket-Accept", + "Sec-WebSocket-Extensions", + "Sec-WebSocket-Key", + "Sec-WebSocket-Protocol", + "Sec-WebSocket-Version", + "Server", + "Server-Timing", + "Service-Worker-Allowed", + "Service-Worker-Navigation-Preload", + "Set-Cookie", + "SourceMap", + "Strict-Transport-Security", + "Supports-Loading-Mode", + "TE", + "Timing-Allow-Origin", + "Trailer", + "Transfer-Encoding", + "Upgrade", + "Upgrade-Insecure-Requests", + "User-Agent", + "Vary", + "Via", + "WWW-Authenticate", + "X-Content-Type-Options", + "X-DNS-Prefetch-Control", + "X-Frame-Options", + "X-Permitted-Cross-Domain-Policies", + "X-Powered-By", + "X-Requested-With", + "X-XSS-Protection" + ]; + for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = wellknownHeaderNames[i]; + const lowerCasedKey = key.toLowerCase(); + headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = lowerCasedKey; + } + Object.setPrototypeOf(headerNameLowerCasedRecord, null); + module2.exports = { + wellknownHeaderNames, + headerNameLowerCasedRecord + }; + } +}); + +// node_modules/undici/lib/core/tree.js +var require_tree = __commonJS({ + "node_modules/undici/lib/core/tree.js"(exports2, module2) { + "use strict"; + var { + wellknownHeaderNames, + headerNameLowerCasedRecord + } = require_constants(); + var TstNode = class _TstNode { + /** @type {any} */ + value = null; + /** @type {null | TstNode} */ + left = null; + /** @type {null | TstNode} */ + middle = null; + /** @type {null | TstNode} */ + right = null; + /** @type {number} */ + code; + /** + * @param {string} key + * @param {any} value + * @param {number} index + */ + constructor(key, value, index) { + if (index === void 0 || index >= key.length) { + throw new TypeError("Unreachable"); + } + const code = this.code = key.charCodeAt(index); + if (code > 127) { + throw new TypeError("key must be ascii string"); + } + if (key.length !== ++index) { + this.middle = new _TstNode(key, value, index); + } else { + this.value = value; + } + } + /** + * @param {string} key + * @param {any} value + */ + add(key, value) { + const length = key.length; + if (length === 0) { + throw new TypeError("Unreachable"); + } + let index = 0; + let node = this; + while (true) { + const code = key.charCodeAt(index); + if (code > 127) { + throw new TypeError("key must be ascii string"); + } + if (node.code === code) { + if (length === ++index) { + node.value = value; + break; + } else if (node.middle !== null) { + node = node.middle; + } else { + node.middle = new _TstNode(key, value, index); + break; + } + } else if (node.code < code) { + if (node.left !== null) { + node = node.left; + } else { + node.left = new _TstNode(key, value, index); + break; + } + } else if (node.right !== null) { + node = node.right; + } else { + node.right = new _TstNode(key, value, index); + break; + } + } + } + /** + * @param {Uint8Array} key + * @return {TstNode | null} + */ + search(key) { + const keylength = key.length; + let index = 0; + let node = this; + while (node !== null && index < keylength) { + let code = key[index]; + if (code <= 90 && code >= 65) { + code |= 32; + } + while (node !== null) { + if (code === node.code) { + if (keylength === ++index) { + return node; + } + node = node.middle; + break; + } + node = node.code < code ? node.left : node.right; + } + } + return null; + } + }; + var TernarySearchTree = class { + /** @type {TstNode | null} */ + node = null; + /** + * @param {string} key + * @param {any} value + * */ + insert(key, value) { + if (this.node === null) { + this.node = new TstNode(key, value, 0); + } else { + this.node.add(key, value); + } + } + /** + * @param {Uint8Array} key + * @return {any} + */ + lookup(key) { + return this.node?.search(key)?.value ?? null; + } + }; + var tree = new TernarySearchTree(); + for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]; + tree.insert(key, key); + } + module2.exports = { + TernarySearchTree, + tree + }; + } +}); + +// node_modules/undici/lib/core/util.js +var require_util = __commonJS({ + "node_modules/undici/lib/core/util.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols(); + var { IncomingMessage } = require("node:http"); + var stream2 = require("node:stream"); + var net = require("node:net"); + var { Blob: Blob2 } = require("node:buffer"); + var nodeUtil = require("node:util"); + var { stringify } = require("node:querystring"); + var { EventEmitter: EE } = require("node:events"); + var { InvalidArgumentError } = require_errors(); + var { headerNameLowerCasedRecord } = require_constants(); + var { tree } = require_tree(); + var [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v)); + var BodyAsyncIterable = class { + constructor(body) { + this[kBody] = body; + this[kBodyUsed] = false; + } + async *[Symbol.asyncIterator]() { + assert(!this[kBodyUsed], "disturbed"); + this[kBodyUsed] = true; + yield* this[kBody]; + } + }; + function wrapRequestBody(body) { + if (isStream(body)) { + if (bodyLength(body) === 0) { + body.on("data", function() { + assert(false); + }); + } + if (typeof body.readableDidRead !== "boolean") { + body[kBodyUsed] = false; + EE.prototype.on.call(body, "data", function() { + this[kBodyUsed] = true; + }); + } + return body; + } else if (body && typeof body.pipeTo === "function") { + return new BodyAsyncIterable(body); + } else if (body && typeof body !== "string" && !ArrayBuffer.isView(body) && isIterable(body)) { + return new BodyAsyncIterable(body); + } else { + return body; + } + } + function nop() { + } + function isStream(obj) { + return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function"; + } + function isBlobLike(object) { + if (object === null) { + return false; + } else if (object instanceof Blob2) { + return true; + } else if (typeof object !== "object") { + return false; + } else { + const sTag = object[Symbol.toStringTag]; + return (sTag === "Blob" || sTag === "File") && ("stream" in object && typeof object.stream === "function" || "arrayBuffer" in object && typeof object.arrayBuffer === "function"); + } + } + function buildURL(url, queryParams) { + if (url.includes("?") || url.includes("#")) { + throw new Error('Query params cannot be passed when url already contains "?" or "#".'); + } + const stringified = stringify(queryParams); + if (stringified) { + url += "?" + stringified; + } + return url; + } + function isValidPort(port) { + const value = parseInt(port, 10); + return value === Number(port) && value >= 0 && value <= 65535; + } + function isHttpOrHttpsPrefixed(value) { + return value != null && value[0] === "h" && value[1] === "t" && value[2] === "t" && value[3] === "p" && (value[4] === ":" || value[4] === "s" && value[5] === ":"); + } + function parseURL(url) { + if (typeof url === "string") { + url = new URL(url); + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + return url; + } + if (!url || typeof url !== "object") { + throw new InvalidArgumentError("Invalid URL: The URL argument must be a non-null object."); + } + if (!(url instanceof URL)) { + if (url.port != null && url.port !== "" && isValidPort(url.port) === false) { + throw new InvalidArgumentError("Invalid URL: port must be a valid integer or a string representation of an integer."); + } + if (url.path != null && typeof url.path !== "string") { + throw new InvalidArgumentError("Invalid URL path: the path must be a string or null/undefined."); + } + if (url.pathname != null && typeof url.pathname !== "string") { + throw new InvalidArgumentError("Invalid URL pathname: the pathname must be a string or null/undefined."); + } + if (url.hostname != null && typeof url.hostname !== "string") { + throw new InvalidArgumentError("Invalid URL hostname: the hostname must be a string or null/undefined."); + } + if (url.origin != null && typeof url.origin !== "string") { + throw new InvalidArgumentError("Invalid URL origin: the origin must be a string or null/undefined."); + } + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + const port = url.port != null ? url.port : url.protocol === "https:" ? 443 : 80; + let origin = url.origin != null ? url.origin : `${url.protocol || ""}//${url.hostname || ""}:${port}`; + let path6 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; + if (origin[origin.length - 1] === "/") { + origin = origin.slice(0, origin.length - 1); + } + if (path6 && path6[0] !== "/") { + path6 = `/${path6}`; + } + return new URL(`${origin}${path6}`); + } + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + return url; + } + function parseOrigin(url) { + url = parseURL(url); + if (url.pathname !== "/" || url.search || url.hash) { + throw new InvalidArgumentError("invalid url"); + } + return url; + } + function getHostname(host) { + if (host[0] === "[") { + const idx2 = host.indexOf("]"); + assert(idx2 !== -1); + return host.substring(1, idx2); + } + const idx = host.indexOf(":"); + if (idx === -1) return host; + return host.substring(0, idx); + } + function getServerName(host) { + if (!host) { + return null; + } + assert(typeof host === "string"); + const servername = getHostname(host); + if (net.isIP(servername)) { + return ""; + } + return servername; + } + function deepClone(obj) { + return JSON.parse(JSON.stringify(obj)); + } + function isAsyncIterable(obj) { + return !!(obj != null && typeof obj[Symbol.asyncIterator] === "function"); + } + function isIterable(obj) { + return !!(obj != null && (typeof obj[Symbol.iterator] === "function" || typeof obj[Symbol.asyncIterator] === "function")); + } + function bodyLength(body) { + if (body == null) { + return 0; + } else if (isStream(body)) { + const state = body._readableState; + return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) ? state.length : null; + } else if (isBlobLike(body)) { + return body.size != null ? body.size : null; + } else if (isBuffer(body)) { + return body.byteLength; + } + return null; + } + function isDestroyed(body) { + return body && !!(body.destroyed || body[kDestroyed] || stream2.isDestroyed?.(body)); + } + function destroy(stream3, err) { + if (stream3 == null || !isStream(stream3) || isDestroyed(stream3)) { + return; + } + if (typeof stream3.destroy === "function") { + if (Object.getPrototypeOf(stream3).constructor === IncomingMessage) { + stream3.socket = null; + } + stream3.destroy(err); + } else if (err) { + queueMicrotask(() => { + stream3.emit("error", err); + }); + } + if (stream3.destroyed !== true) { + stream3[kDestroyed] = true; + } + } + var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/; + function parseKeepAliveTimeout(val) { + const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR); + return m ? parseInt(m[1], 10) * 1e3 : null; + } + function headerNameToString(value) { + return typeof value === "string" ? headerNameLowerCasedRecord[value] ?? value.toLowerCase() : tree.lookup(value) ?? value.toString("latin1").toLowerCase(); + } + function bufferToLowerCasedHeaderName(value) { + return tree.lookup(value) ?? value.toString("latin1").toLowerCase(); + } + function parseHeaders(headers, obj) { + if (obj === void 0) obj = {}; + for (let i = 0; i < headers.length; i += 2) { + const key = headerNameToString(headers[i]); + let val = obj[key]; + if (val) { + if (typeof val === "string") { + val = [val]; + obj[key] = val; + } + val.push(headers[i + 1].toString("utf8")); + } else { + const headersValue = headers[i + 1]; + if (typeof headersValue === "string") { + obj[key] = headersValue; + } else { + obj[key] = Array.isArray(headersValue) ? headersValue.map((x) => x.toString("utf8")) : headersValue.toString("utf8"); + } + } + } + if ("content-length" in obj && "content-disposition" in obj) { + obj["content-disposition"] = Buffer.from(obj["content-disposition"]).toString("latin1"); + } + return obj; + } + function parseRawHeaders(headers) { + const len = headers.length; + const ret = new Array(len); + let hasContentLength = false; + let contentDispositionIdx = -1; + let key; + let val; + let kLen = 0; + for (let n = 0; n < headers.length; n += 2) { + key = headers[n]; + val = headers[n + 1]; + typeof key !== "string" && (key = key.toString()); + typeof val !== "string" && (val = val.toString("utf8")); + kLen = key.length; + if (kLen === 14 && key[7] === "-" && (key === "content-length" || key.toLowerCase() === "content-length")) { + hasContentLength = true; + } else if (kLen === 19 && key[7] === "-" && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) { + contentDispositionIdx = n + 1; + } + ret[n] = key; + ret[n + 1] = val; + } + if (hasContentLength && contentDispositionIdx !== -1) { + ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1"); + } + return ret; + } + function isBuffer(buffer) { + return buffer instanceof Uint8Array || Buffer.isBuffer(buffer); + } + function validateHandler(handler2, method, upgrade) { + if (!handler2 || typeof handler2 !== "object") { + throw new InvalidArgumentError("handler must be an object"); + } + if (typeof handler2.onConnect !== "function") { + throw new InvalidArgumentError("invalid onConnect method"); + } + if (typeof handler2.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + if (typeof handler2.onBodySent !== "function" && handler2.onBodySent !== void 0) { + throw new InvalidArgumentError("invalid onBodySent method"); + } + if (upgrade || method === "CONNECT") { + if (typeof handler2.onUpgrade !== "function") { + throw new InvalidArgumentError("invalid onUpgrade method"); + } + } else { + if (typeof handler2.onHeaders !== "function") { + throw new InvalidArgumentError("invalid onHeaders method"); + } + if (typeof handler2.onData !== "function") { + throw new InvalidArgumentError("invalid onData method"); + } + if (typeof handler2.onComplete !== "function") { + throw new InvalidArgumentError("invalid onComplete method"); + } + } + } + function isDisturbed(body) { + return !!(body && (stream2.isDisturbed(body) || body[kBodyUsed])); + } + function isErrored(body) { + return !!(body && stream2.isErrored(body)); + } + function isReadable(body) { + return !!(body && stream2.isReadable(body)); + } + function getSocketInfo(socket) { + return { + localAddress: socket.localAddress, + localPort: socket.localPort, + remoteAddress: socket.remoteAddress, + remotePort: socket.remotePort, + remoteFamily: socket.remoteFamily, + timeout: socket.timeout, + bytesWritten: socket.bytesWritten, + bytesRead: socket.bytesRead + }; + } + function ReadableStreamFrom(iterable) { + let iterator2; + return new ReadableStream( + { + async start() { + iterator2 = iterable[Symbol.asyncIterator](); + }, + async pull(controller) { + const { done, value } = await iterator2.next(); + if (done) { + queueMicrotask(() => { + controller.close(); + controller.byobRequest?.respond(0); + }); + } else { + const buf = Buffer.isBuffer(value) ? value : Buffer.from(value); + if (buf.byteLength) { + controller.enqueue(new Uint8Array(buf)); + } + } + return controller.desiredSize > 0; + }, + async cancel(reason) { + await iterator2.return(); + }, + type: "bytes" + } + ); + } + function isFormDataLike(object) { + return object && typeof object === "object" && typeof object.append === "function" && typeof object.delete === "function" && typeof object.get === "function" && typeof object.getAll === "function" && typeof object.has === "function" && typeof object.set === "function" && object[Symbol.toStringTag] === "FormData"; + } + function addAbortListener(signal, listener) { + if ("addEventListener" in signal) { + signal.addEventListener("abort", listener, { once: true }); + return () => signal.removeEventListener("abort", listener); + } + signal.addListener("abort", listener); + return () => signal.removeListener("abort", listener); + } + var hasToWellFormed = typeof String.prototype.toWellFormed === "function"; + var hasIsWellFormed = typeof String.prototype.isWellFormed === "function"; + function toUSVString(val) { + return hasToWellFormed ? `${val}`.toWellFormed() : nodeUtil.toUSVString(val); + } + function isUSVString(val) { + return hasIsWellFormed ? `${val}`.isWellFormed() : toUSVString(val) === `${val}`; + } + function isTokenCharCode(c) { + switch (c) { + case 34: + case 40: + case 41: + case 44: + case 47: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 91: + case 92: + case 93: + case 123: + case 125: + return false; + default: + return c >= 33 && c <= 126; + } + } + function isValidHTTPToken(characters) { + if (characters.length === 0) { + return false; + } + for (let i = 0; i < characters.length; ++i) { + if (!isTokenCharCode(characters.charCodeAt(i))) { + return false; + } + } + return true; + } + var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; + function isValidHeaderValue(characters) { + return !headerCharRegex.test(characters); + } + function parseRangeHeader(range) { + if (range == null || range === "") return { start: 0, end: null, size: null }; + const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null; + return m ? { + start: parseInt(m[1]), + end: m[2] ? parseInt(m[2]) : null, + size: m[3] ? parseInt(m[3]) : null + } : null; + } + function addListener(obj, name, listener) { + const listeners = obj[kListeners] ??= []; + listeners.push([name, listener]); + obj.on(name, listener); + return obj; + } + function removeAllListeners(obj) { + for (const [name, listener] of obj[kListeners] ?? []) { + obj.removeListener(name, listener); + } + obj[kListeners] = null; + } + function errorRequest(client, request2, err) { + try { + request2.onError(err); + assert(request2.aborted); + } catch (err2) { + client.emit("error", err2); + } + } + var kEnumerableProperty = /* @__PURE__ */ Object.create(null); + kEnumerableProperty.enumerable = true; + var normalizedMethodRecordsBase = { + delete: "DELETE", + DELETE: "DELETE", + get: "GET", + GET: "GET", + head: "HEAD", + HEAD: "HEAD", + options: "OPTIONS", + OPTIONS: "OPTIONS", + post: "POST", + POST: "POST", + put: "PUT", + PUT: "PUT" + }; + var normalizedMethodRecords = { + ...normalizedMethodRecordsBase, + patch: "patch", + PATCH: "PATCH" + }; + Object.setPrototypeOf(normalizedMethodRecordsBase, null); + Object.setPrototypeOf(normalizedMethodRecords, null); + module2.exports = { + kEnumerableProperty, + nop, + isDisturbed, + isErrored, + isReadable, + toUSVString, + isUSVString, + isBlobLike, + parseOrigin, + parseURL, + getServerName, + isStream, + isIterable, + isAsyncIterable, + isDestroyed, + headerNameToString, + bufferToLowerCasedHeaderName, + addListener, + removeAllListeners, + errorRequest, + parseRawHeaders, + parseHeaders, + parseKeepAliveTimeout, + destroy, + bodyLength, + deepClone, + ReadableStreamFrom, + isBuffer, + validateHandler, + getSocketInfo, + isFormDataLike, + buildURL, + addAbortListener, + isValidHTTPToken, + isValidHeaderValue, + isTokenCharCode, + parseRangeHeader, + normalizedMethodRecordsBase, + normalizedMethodRecords, + isValidPort, + isHttpOrHttpsPrefixed, + nodeMajor, + nodeMinor, + safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"], + wrapRequestBody + }; + } +}); + +// node_modules/undici/lib/core/diagnostics.js +var require_diagnostics = __commonJS({ + "node_modules/undici/lib/core/diagnostics.js"(exports2, module2) { + "use strict"; + var diagnosticsChannel = require("node:diagnostics_channel"); + var util2 = require("node:util"); + var undiciDebugLog = util2.debuglog("undici"); + var fetchDebuglog = util2.debuglog("fetch"); + var websocketDebuglog = util2.debuglog("websocket"); + var isClientSet = false; + var channels = { + // Client + beforeConnect: diagnosticsChannel.channel("undici:client:beforeConnect"), + connected: diagnosticsChannel.channel("undici:client:connected"), + connectError: diagnosticsChannel.channel("undici:client:connectError"), + sendHeaders: diagnosticsChannel.channel("undici:client:sendHeaders"), + // Request + create: diagnosticsChannel.channel("undici:request:create"), + bodySent: diagnosticsChannel.channel("undici:request:bodySent"), + headers: diagnosticsChannel.channel("undici:request:headers"), + trailers: diagnosticsChannel.channel("undici:request:trailers"), + error: diagnosticsChannel.channel("undici:request:error"), + // WebSocket + open: diagnosticsChannel.channel("undici:websocket:open"), + close: diagnosticsChannel.channel("undici:websocket:close"), + socketError: diagnosticsChannel.channel("undici:websocket:socket_error"), + ping: diagnosticsChannel.channel("undici:websocket:ping"), + pong: diagnosticsChannel.channel("undici:websocket:pong") + }; + if (undiciDebugLog.enabled || fetchDebuglog.enabled) { + const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog; + diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connecting to %s using %s%s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connected to %s using %s%s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host }, + error: error2 + } = evt; + debuglog( + "connection to %s using %s%s errored - %s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version, + error2.message + ); + }); + diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { + const { + request: { method, path: path6, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path6); + }); + diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => { + const { + request: { method, path: path6, origin }, + response: { statusCode } + } = evt; + debuglog( + "received response to %s %s/%s - HTTP %d", + method, + origin, + path6, + statusCode + ); + }); + diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => { + const { + request: { method, path: path6, origin } + } = evt; + debuglog("trailers received from %s %s/%s", method, origin, path6); + }); + diagnosticsChannel.channel("undici:request:error").subscribe((evt) => { + const { + request: { method, path: path6, origin }, + error: error2 + } = evt; + debuglog( + "request to %s %s/%s errored - %s", + method, + origin, + path6, + error2.message + ); + }); + isClientSet = true; + } + if (websocketDebuglog.enabled) { + if (!isClientSet) { + const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog; + diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connecting to %s%s using %s%s", + host, + port ? `:${port}` : "", + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connected to %s%s using %s%s", + host, + port ? `:${port}` : "", + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host }, + error: error2 + } = evt; + debuglog( + "connection to %s%s using %s%s errored - %s", + host, + port ? `:${port}` : "", + protocol, + version, + error2.message + ); + }); + diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { + const { + request: { method, path: path6, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path6); + }); + } + diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => { + const { + address: { address, port } + } = evt; + websocketDebuglog("connection opened %s%s", address, port ? `:${port}` : ""); + }); + diagnosticsChannel.channel("undici:websocket:close").subscribe((evt) => { + const { websocket, code, reason } = evt; + websocketDebuglog( + "closed connection to %s - %s %s", + websocket.url, + code, + reason + ); + }); + diagnosticsChannel.channel("undici:websocket:socket_error").subscribe((err) => { + websocketDebuglog("connection errored - %s", err.message); + }); + diagnosticsChannel.channel("undici:websocket:ping").subscribe((evt) => { + websocketDebuglog("ping received"); + }); + diagnosticsChannel.channel("undici:websocket:pong").subscribe((evt) => { + websocketDebuglog("pong received"); + }); + } + module2.exports = { + channels + }; + } +}); + +// node_modules/undici/lib/core/request.js +var require_request = __commonJS({ + "node_modules/undici/lib/core/request.js"(exports2, module2) { + "use strict"; + var { + InvalidArgumentError, + NotSupportedError + } = require_errors(); + var assert = require("node:assert"); + var { + isValidHTTPToken, + isValidHeaderValue, + isStream, + destroy, + isBuffer, + isFormDataLike, + isIterable, + isBlobLike, + buildURL, + validateHandler, + getServerName, + normalizedMethodRecords + } = require_util(); + var { channels } = require_diagnostics(); + var { headerNameLowerCasedRecord } = require_constants(); + var invalidPathRegex = /[^\u0021-\u00ff]/; + var kHandler = /* @__PURE__ */ Symbol("handler"); + var Request = class { + constructor(origin, { + path: path6, + method, + body, + headers, + query, + idempotent, + blocking, + upgrade, + headersTimeout, + bodyTimeout, + reset, + throwOnError, + expectContinue, + servername + }, handler2) { + if (typeof path6 !== "string") { + throw new InvalidArgumentError("path must be a string"); + } else if (path6[0] !== "/" && !(path6.startsWith("http://") || path6.startsWith("https://")) && method !== "CONNECT") { + throw new InvalidArgumentError("path must be an absolute URL or start with a slash"); + } else if (invalidPathRegex.test(path6)) { + throw new InvalidArgumentError("invalid request path"); + } + if (typeof method !== "string") { + throw new InvalidArgumentError("method must be a string"); + } else if (normalizedMethodRecords[method] === void 0 && !isValidHTTPToken(method)) { + throw new InvalidArgumentError("invalid request method"); + } + if (upgrade && typeof upgrade !== "string") { + throw new InvalidArgumentError("upgrade must be a string"); + } + if (upgrade && !isValidHeaderValue(upgrade)) { + throw new InvalidArgumentError("invalid upgrade header"); + } + if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError("invalid headersTimeout"); + } + if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError("invalid bodyTimeout"); + } + if (reset != null && typeof reset !== "boolean") { + throw new InvalidArgumentError("invalid reset"); + } + if (expectContinue != null && typeof expectContinue !== "boolean") { + throw new InvalidArgumentError("invalid expectContinue"); + } + this.headersTimeout = headersTimeout; + this.bodyTimeout = bodyTimeout; + this.throwOnError = throwOnError === true; + this.method = method; + this.abort = null; + if (body == null) { + this.body = null; + } else if (isStream(body)) { + this.body = body; + const rState = this.body._readableState; + if (!rState || !rState.autoDestroy) { + this.endHandler = function autoDestroy() { + destroy(this); + }; + this.body.on("end", this.endHandler); + } + this.errorHandler = (err) => { + if (this.abort) { + this.abort(err); + } else { + this.error = err; + } + }; + this.body.on("error", this.errorHandler); + } else if (isBuffer(body)) { + this.body = body.byteLength ? body : null; + } else if (ArrayBuffer.isView(body)) { + this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null; + } else if (body instanceof ArrayBuffer) { + this.body = body.byteLength ? Buffer.from(body) : null; + } else if (typeof body === "string") { + this.body = body.length ? Buffer.from(body) : null; + } else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) { + this.body = body; + } else { + throw new InvalidArgumentError("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable"); + } + this.completed = false; + this.aborted = false; + this.upgrade = upgrade || null; + this.path = query ? buildURL(path6, query) : path6; + this.origin = origin; + this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent; + this.blocking = blocking == null ? false : blocking; + this.reset = reset == null ? null : reset; + this.host = null; + this.contentLength = null; + this.contentType = null; + this.headers = []; + this.expectContinue = expectContinue != null ? expectContinue : false; + if (Array.isArray(headers)) { + if (headers.length % 2 !== 0) { + throw new InvalidArgumentError("headers array must be even"); + } + for (let i = 0; i < headers.length; i += 2) { + processHeader(this, headers[i], headers[i + 1]); + } + } else if (headers && typeof headers === "object") { + if (headers[Symbol.iterator]) { + for (const header of headers) { + if (!Array.isArray(header) || header.length !== 2) { + throw new InvalidArgumentError("headers must be in key-value pair format"); + } + processHeader(this, header[0], header[1]); + } + } else { + const keys = Object.keys(headers); + for (let i = 0; i < keys.length; ++i) { + processHeader(this, keys[i], headers[keys[i]]); + } + } + } else if (headers != null) { + throw new InvalidArgumentError("headers must be an object or an array"); + } + validateHandler(handler2, method, upgrade); + this.servername = servername || getServerName(this.host); + this[kHandler] = handler2; + if (channels.create.hasSubscribers) { + channels.create.publish({ request: this }); + } + } + onBodySent(chunk) { + if (this[kHandler].onBodySent) { + try { + return this[kHandler].onBodySent(chunk); + } catch (err) { + this.abort(err); + } + } + } + onRequestSent() { + if (channels.bodySent.hasSubscribers) { + channels.bodySent.publish({ request: this }); + } + if (this[kHandler].onRequestSent) { + try { + return this[kHandler].onRequestSent(); + } catch (err) { + this.abort(err); + } + } + } + onConnect(abort) { + assert(!this.aborted); + assert(!this.completed); + if (this.error) { + abort(this.error); + } else { + this.abort = abort; + return this[kHandler].onConnect(abort); + } + } + onResponseStarted() { + return this[kHandler].onResponseStarted?.(); + } + onHeaders(statusCode, headers, resume, statusText) { + assert(!this.aborted); + assert(!this.completed); + if (channels.headers.hasSubscribers) { + channels.headers.publish({ request: this, response: { statusCode, headers, statusText } }); + } + try { + return this[kHandler].onHeaders(statusCode, headers, resume, statusText); + } catch (err) { + this.abort(err); + } + } + onData(chunk) { + assert(!this.aborted); + assert(!this.completed); + try { + return this[kHandler].onData(chunk); + } catch (err) { + this.abort(err); + return false; + } + } + onUpgrade(statusCode, headers, socket) { + assert(!this.aborted); + assert(!this.completed); + return this[kHandler].onUpgrade(statusCode, headers, socket); + } + onComplete(trailers) { + this.onFinally(); + assert(!this.aborted); + this.completed = true; + if (channels.trailers.hasSubscribers) { + channels.trailers.publish({ request: this, trailers }); + } + try { + return this[kHandler].onComplete(trailers); + } catch (err) { + this.onError(err); + } + } + onError(error2) { + this.onFinally(); + if (channels.error.hasSubscribers) { + channels.error.publish({ request: this, error: error2 }); + } + if (this.aborted) { + return; + } + this.aborted = true; + return this[kHandler].onError(error2); + } + onFinally() { + if (this.errorHandler) { + this.body.off("error", this.errorHandler); + this.errorHandler = null; + } + if (this.endHandler) { + this.body.off("end", this.endHandler); + this.endHandler = null; + } + } + addHeader(key, value) { + processHeader(this, key, value); + return this; + } + }; + function processHeader(request2, key, val) { + if (val && (typeof val === "object" && !Array.isArray(val))) { + throw new InvalidArgumentError(`invalid ${key} header`); + } else if (val === void 0) { + return; + } + let headerName = headerNameLowerCasedRecord[key]; + if (headerName === void 0) { + headerName = key.toLowerCase(); + if (headerNameLowerCasedRecord[headerName] === void 0 && !isValidHTTPToken(headerName)) { + throw new InvalidArgumentError("invalid header key"); + } + } + if (Array.isArray(val)) { + const arr = []; + for (let i = 0; i < val.length; i++) { + if (typeof val[i] === "string") { + if (!isValidHeaderValue(val[i])) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + arr.push(val[i]); + } else if (val[i] === null) { + arr.push(""); + } else if (typeof val[i] === "object") { + throw new InvalidArgumentError(`invalid ${key} header`); + } else { + const str = `${val[i]}`; + if (!isValidHeaderValue(str)) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + arr.push(str); + } + } + val = arr; + } else if (typeof val === "string") { + if (!isValidHeaderValue(val)) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + } else if (val === null) { + val = ""; + } else { + val = `${val}`; + if (!isValidHeaderValue(val)) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + } + if (headerName === "host") { + if (request2.host !== null) { + throw new InvalidArgumentError("duplicate host header"); + } + if (typeof val !== "string") { + throw new InvalidArgumentError("invalid host header"); + } + request2.host = val; + } else if (headerName === "content-length") { + if (request2.contentLength !== null) { + throw new InvalidArgumentError("duplicate content-length header"); + } + request2.contentLength = parseInt(val, 10); + if (!Number.isFinite(request2.contentLength)) { + throw new InvalidArgumentError("invalid content-length header"); + } + } else if (request2.contentType === null && headerName === "content-type") { + request2.contentType = val; + request2.headers.push(key, val); + } else if (headerName === "transfer-encoding" || headerName === "keep-alive" || headerName === "upgrade") { + throw new InvalidArgumentError(`invalid ${headerName} header`); + } else if (headerName === "connection") { + const value = typeof val === "string" ? val.toLowerCase() : null; + if (value !== "close" && value !== "keep-alive") { + throw new InvalidArgumentError("invalid connection header"); + } + if (value === "close") { + request2.reset = true; + } + } else if (headerName === "expect") { + throw new NotSupportedError("expect header not supported"); + } else { + request2.headers.push(key, val); + } + } + module2.exports = Request; + } +}); + +// node_modules/undici/lib/dispatcher/dispatcher.js +var require_dispatcher = __commonJS({ + "node_modules/undici/lib/dispatcher/dispatcher.js"(exports2, module2) { + "use strict"; + var EventEmitter2 = require("node:events"); + var Dispatcher = class extends EventEmitter2 { + dispatch() { + throw new Error("not implemented"); + } + close() { + throw new Error("not implemented"); + } + destroy() { + throw new Error("not implemented"); + } + compose(...args) { + const interceptors = Array.isArray(args[0]) ? args[0] : args; + let dispatch = this.dispatch.bind(this); + for (const interceptor of interceptors) { + if (interceptor == null) { + continue; + } + if (typeof interceptor !== "function") { + throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`); + } + dispatch = interceptor(dispatch); + if (dispatch == null || typeof dispatch !== "function" || dispatch.length !== 2) { + throw new TypeError("invalid interceptor"); + } + } + return new ComposedDispatcher(this, dispatch); + } + }; + var ComposedDispatcher = class extends Dispatcher { + #dispatcher = null; + #dispatch = null; + constructor(dispatcher, dispatch) { + super(); + this.#dispatcher = dispatcher; + this.#dispatch = dispatch; + } + dispatch(...args) { + this.#dispatch(...args); + } + close(...args) { + return this.#dispatcher.close(...args); + } + destroy(...args) { + return this.#dispatcher.destroy(...args); + } + }; + module2.exports = Dispatcher; + } +}); + +// node_modules/undici/lib/dispatcher/dispatcher-base.js +var require_dispatcher_base = __commonJS({ + "node_modules/undici/lib/dispatcher/dispatcher-base.js"(exports2, module2) { + "use strict"; + var Dispatcher = require_dispatcher(); + var { + ClientDestroyedError, + ClientClosedError, + InvalidArgumentError + } = require_errors(); + var { kDestroy, kClose, kClosed, kDestroyed, kDispatch, kInterceptors } = require_symbols(); + var kOnDestroyed = /* @__PURE__ */ Symbol("onDestroyed"); + var kOnClosed = /* @__PURE__ */ Symbol("onClosed"); + var kInterceptedDispatch = /* @__PURE__ */ Symbol("Intercepted Dispatch"); + var kWebSocketOptions = /* @__PURE__ */ Symbol("webSocketOptions"); + var DispatcherBase = class extends Dispatcher { + constructor(opts) { + super(); + this[kDestroyed] = false; + this[kOnDestroyed] = null; + this[kClosed] = false; + this[kOnClosed] = []; + this[kWebSocketOptions] = opts?.webSocket ?? {}; + } + get webSocketOptions() { + return { + maxFragments: this[kWebSocketOptions].maxFragments ?? 131072, + maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024 + }; + } + get destroyed() { + return this[kDestroyed]; + } + get closed() { + return this[kClosed]; + } + get interceptors() { + return this[kInterceptors]; + } + set interceptors(newInterceptors) { + if (newInterceptors) { + for (let i = newInterceptors.length - 1; i >= 0; i--) { + const interceptor = this[kInterceptors][i]; + if (typeof interceptor !== "function") { + throw new InvalidArgumentError("interceptor must be an function"); + } + } + } + this[kInterceptors] = newInterceptors; + } + close(callback) { + if (callback === void 0) { + return new Promise((resolve2, reject) => { + this.close((err, data) => { + return err ? reject(err) : resolve2(data); + }); + }); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (this[kDestroyed]) { + queueMicrotask(() => callback(new ClientDestroyedError(), null)); + return; + } + if (this[kClosed]) { + if (this[kOnClosed]) { + this[kOnClosed].push(callback); + } else { + queueMicrotask(() => callback(null, null)); + } + return; + } + this[kClosed] = true; + this[kOnClosed].push(callback); + const onClosed = () => { + const callbacks = this[kOnClosed]; + this[kOnClosed] = null; + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null); + } + }; + this[kClose]().then(() => this.destroy()).then(() => { + queueMicrotask(onClosed); + }); + } + destroy(err, callback) { + if (typeof err === "function") { + callback = err; + err = null; + } + if (callback === void 0) { + return new Promise((resolve2, reject) => { + this.destroy(err, (err2, data) => { + return err2 ? ( + /* istanbul ignore next: should never error */ + reject(err2) + ) : resolve2(data); + }); + }); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (this[kDestroyed]) { + if (this[kOnDestroyed]) { + this[kOnDestroyed].push(callback); + } else { + queueMicrotask(() => callback(null, null)); + } + return; + } + if (!err) { + err = new ClientDestroyedError(); + } + this[kDestroyed] = true; + this[kOnDestroyed] = this[kOnDestroyed] || []; + this[kOnDestroyed].push(callback); + const onDestroyed = () => { + const callbacks = this[kOnDestroyed]; + this[kOnDestroyed] = null; + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null); + } + }; + this[kDestroy](err).then(() => { + queueMicrotask(onDestroyed); + }); + } + [kInterceptedDispatch](opts, handler2) { + if (!this[kInterceptors] || this[kInterceptors].length === 0) { + this[kInterceptedDispatch] = this[kDispatch]; + return this[kDispatch](opts, handler2); + } + let dispatch = this[kDispatch].bind(this); + for (let i = this[kInterceptors].length - 1; i >= 0; i--) { + dispatch = this[kInterceptors][i](dispatch); + } + this[kInterceptedDispatch] = dispatch; + return dispatch(opts, handler2); + } + dispatch(opts, handler2) { + if (!handler2 || typeof handler2 !== "object") { + throw new InvalidArgumentError("handler must be an object"); + } + try { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("opts must be an object."); + } + if (this[kDestroyed] || this[kOnDestroyed]) { + throw new ClientDestroyedError(); + } + if (this[kClosed]) { + throw new ClientClosedError(); + } + return this[kInterceptedDispatch](opts, handler2); + } catch (err) { + if (typeof handler2.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + handler2.onError(err); + return false; + } + } + }; + module2.exports = DispatcherBase; + } +}); + +// node_modules/undici/lib/util/timers.js +var require_timers = __commonJS({ + "node_modules/undici/lib/util/timers.js"(exports2, module2) { + "use strict"; + var fastNow = 0; + var RESOLUTION_MS = 1e3; + var TICK_MS = (RESOLUTION_MS >> 1) - 1; + var fastNowTimeout; + var kFastTimer = /* @__PURE__ */ Symbol("kFastTimer"); + var fastTimers = []; + var NOT_IN_LIST = -2; + var TO_BE_CLEARED = -1; + var PENDING = 0; + var ACTIVE = 1; + function onTick() { + fastNow += TICK_MS; + let idx = 0; + let len = fastTimers.length; + while (idx < len) { + const timer = fastTimers[idx]; + if (timer._state === PENDING) { + timer._idleStart = fastNow - TICK_MS; + timer._state = ACTIVE; + } else if (timer._state === ACTIVE && fastNow >= timer._idleStart + timer._idleTimeout) { + timer._state = TO_BE_CLEARED; + timer._idleStart = -1; + timer._onTimeout(timer._timerArg); + } + if (timer._state === TO_BE_CLEARED) { + timer._state = NOT_IN_LIST; + if (--len !== 0) { + fastTimers[idx] = fastTimers[len]; + } + } else { + ++idx; + } + } + fastTimers.length = len; + if (fastTimers.length !== 0) { + refreshTimeout(); + } + } + function refreshTimeout() { + if (fastNowTimeout) { + fastNowTimeout.refresh(); + } else { + clearTimeout(fastNowTimeout); + fastNowTimeout = setTimeout(onTick, TICK_MS); + if (fastNowTimeout.unref) { + fastNowTimeout.unref(); + } + } + } + var FastTimer = class { + [kFastTimer] = true; + /** + * The state of the timer, which can be one of the following: + * - NOT_IN_LIST (-2) + * - TO_BE_CLEARED (-1) + * - PENDING (0) + * - ACTIVE (1) + * + * @type {-2|-1|0|1} + * @private + */ + _state = NOT_IN_LIST; + /** + * The number of milliseconds to wait before calling the callback. + * + * @type {number} + * @private + */ + _idleTimeout = -1; + /** + * The time in milliseconds when the timer was started. This value is used to + * calculate when the timer should expire. + * + * @type {number} + * @default -1 + * @private + */ + _idleStart = -1; + /** + * The function to be executed when the timer expires. + * @type {Function} + * @private + */ + _onTimeout; + /** + * The argument to be passed to the callback when the timer expires. + * + * @type {*} + * @private + */ + _timerArg; + /** + * @constructor + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should wait + * before the specified function or code is executed. + * @param {*} arg + */ + constructor(callback, delay, arg) { + this._onTimeout = callback; + this._idleTimeout = delay; + this._timerArg = arg; + this.refresh(); + } + /** + * Sets the timer's start time to the current time, and reschedules the timer + * to call its callback at the previously specified duration adjusted to the + * current time. + * Using this on a timer that has already called its callback will reactivate + * the timer. + * + * @returns {void} + */ + refresh() { + if (this._state === NOT_IN_LIST) { + fastTimers.push(this); + } + if (!fastNowTimeout || fastTimers.length === 1) { + refreshTimeout(); + } + this._state = PENDING; + } + /** + * The `clear` method cancels the timer, preventing it from executing. + * + * @returns {void} + * @private + */ + clear() { + this._state = TO_BE_CLEARED; + this._idleStart = -1; + } + }; + module2.exports = { + /** + * The setTimeout() method sets a timer which executes a function once the + * timer expires. + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should + * wait before the specified function or code is executed. + * @param {*} [arg] An optional argument to be passed to the callback function + * when the timer expires. + * @returns {NodeJS.Timeout|FastTimer} + */ + setTimeout(callback, delay, arg) { + return delay <= RESOLUTION_MS ? setTimeout(callback, delay, arg) : new FastTimer(callback, delay, arg); + }, + /** + * The clearTimeout method cancels an instantiated Timer previously created + * by calling setTimeout. + * + * @param {NodeJS.Timeout|FastTimer} timeout + */ + clearTimeout(timeout) { + if (timeout[kFastTimer]) { + timeout.clear(); + } else { + clearTimeout(timeout); + } + }, + /** + * The setFastTimeout() method sets a fastTimer which executes a function once + * the timer expires. + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should + * wait before the specified function or code is executed. + * @param {*} [arg] An optional argument to be passed to the callback function + * when the timer expires. + * @returns {FastTimer} + */ + setFastTimeout(callback, delay, arg) { + return new FastTimer(callback, delay, arg); + }, + /** + * The clearTimeout method cancels an instantiated FastTimer previously + * created by calling setFastTimeout. + * + * @param {FastTimer} timeout + */ + clearFastTimeout(timeout) { + timeout.clear(); + }, + /** + * The now method returns the value of the internal fast timer clock. + * + * @returns {number} + */ + now() { + return fastNow; + }, + /** + * Trigger the onTick function to process the fastTimers array. + * Exported for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + * @param {number} [delay=0] The delay in milliseconds to add to the now value. + */ + tick(delay = 0) { + fastNow += delay - RESOLUTION_MS + 1; + onTick(); + onTick(); + }, + /** + * Reset FastTimers. + * Exported for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + */ + reset() { + fastNow = 0; + fastTimers.length = 0; + clearTimeout(fastNowTimeout); + fastNowTimeout = null; + }, + /** + * Exporting for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + */ + kFastTimer + }; + } +}); + +// node_modules/undici/lib/core/connect.js +var require_connect = __commonJS({ + "node_modules/undici/lib/core/connect.js"(exports2, module2) { + "use strict"; + var net = require("node:net"); + var assert = require("node:assert"); + var util2 = require_util(); + var { InvalidArgumentError, ConnectTimeoutError } = require_errors(); + var timers = require_timers(); + function noop3() { + } + var tls; + var SessionCache; + if (global.FinalizationRegistry && !(process.env.NODE_V8_COVERAGE || process.env.UNDICI_NO_FG)) { + SessionCache = class WeakSessionCache { + constructor(maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions; + this._sessionCache = /* @__PURE__ */ new Map(); + this._sessionRegistry = new global.FinalizationRegistry((key) => { + if (this._sessionCache.size < this._maxCachedSessions) { + return; + } + const ref = this._sessionCache.get(key); + if (ref !== void 0 && ref.deref() === void 0) { + this._sessionCache.delete(key); + } + }); + } + get(sessionKey) { + const ref = this._sessionCache.get(sessionKey); + return ref ? ref.deref() : null; + } + set(sessionKey, session) { + if (this._maxCachedSessions === 0) { + return; + } + this._sessionCache.set(sessionKey, new WeakRef(session)); + this._sessionRegistry.register(session, sessionKey); + } + }; + } else { + SessionCache = class SimpleSessionCache { + constructor(maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions; + this._sessionCache = /* @__PURE__ */ new Map(); + } + get(sessionKey) { + return this._sessionCache.get(sessionKey); + } + set(sessionKey, session) { + if (this._maxCachedSessions === 0) { + return; + } + if (this._sessionCache.size >= this._maxCachedSessions) { + const { value: oldestKey } = this._sessionCache.keys().next(); + this._sessionCache.delete(oldestKey); + } + this._sessionCache.set(sessionKey, session); + } + }; + } + function buildConnector({ allowH2, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) { + if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { + throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero"); + } + const options = { path: socketPath, ...opts }; + const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions); + timeout = timeout == null ? 1e4 : timeout; + allowH2 = allowH2 != null ? allowH2 : false; + return function connect({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) { + let socket; + if (protocol === "https:") { + if (!tls) { + tls = require("node:tls"); + } + servername = servername || options.servername || util2.getServerName(host) || null; + const sessionKey = servername || hostname; + assert(sessionKey); + const session = customSession || sessionCache.get(sessionKey) || null; + port = port || 443; + socket = tls.connect({ + highWaterMark: 16384, + // TLS in node can't have bigger HWM anyway... + ...options, + servername, + session, + localAddress, + // TODO(HTTP/2): Add support for h2c + ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"], + socket: httpSocket, + // upgrade socket connection + port, + host: hostname + }); + socket.on("session", function(session2) { + sessionCache.set(sessionKey, session2); + }); + } else { + assert(!httpSocket, "httpSocket can only be sent on TLS update"); + port = port || 80; + socket = net.connect({ + highWaterMark: 64 * 1024, + // Same as nodejs fs streams. + ...options, + localAddress, + port, + host: hostname + }); + } + if (options.keepAlive == null || options.keepAlive) { + const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay; + socket.setKeepAlive(true, keepAliveInitialDelay); + } + const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port }); + socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() { + queueMicrotask(clearConnectTimeout); + if (callback) { + const cb = callback; + callback = null; + cb(null, this); + } + }).on("error", function(err) { + queueMicrotask(clearConnectTimeout); + if (callback) { + const cb = callback; + callback = null; + cb(err); + } + }); + return socket; + }; + } + var setupConnectTimeout = process.platform === "win32" ? (socketWeakRef, opts) => { + if (!opts.timeout) { + return noop3; + } + let s1 = null; + let s2 = null; + const fastTimer = timers.setFastTimeout(() => { + s1 = setImmediate(() => { + s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts)); + }); + }, opts.timeout); + return () => { + timers.clearFastTimeout(fastTimer); + clearImmediate(s1); + clearImmediate(s2); + }; + } : (socketWeakRef, opts) => { + if (!opts.timeout) { + return noop3; + } + let s1 = null; + const fastTimer = timers.setFastTimeout(() => { + s1 = setImmediate(() => { + onConnectTimeout(socketWeakRef.deref(), opts); + }); + }, opts.timeout); + return () => { + timers.clearFastTimeout(fastTimer); + clearImmediate(s1); + }; + }; + function onConnectTimeout(socket, opts) { + if (socket == null) { + return; + } + let message = "Connect Timeout Error"; + if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) { + message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`; + } else { + message += ` (attempted address: ${opts.hostname}:${opts.port},`; + } + message += ` timeout: ${opts.timeout}ms)`; + util2.destroy(socket, new ConnectTimeoutError(message)); + } + module2.exports = buildConnector; + } +}); + +// node_modules/undici/lib/llhttp/utils.js +var require_utils = __commonJS({ + "node_modules/undici/lib/llhttp/utils.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.enumToMap = void 0; + function enumToMap(obj) { + const res = {}; + Object.keys(obj).forEach((key) => { + const value = obj[key]; + if (typeof value === "number") { + res[key] = value; + } + }); + return res; + } + exports2.enumToMap = enumToMap; + } +}); + +// node_modules/undici/lib/llhttp/constants.js +var require_constants2 = __commonJS({ + "node_modules/undici/lib/llhttp/constants.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.SPECIAL_HEADERS = exports2.HEADER_STATE = exports2.MINOR = exports2.MAJOR = exports2.CONNECTION_TOKEN_CHARS = exports2.HEADER_CHARS = exports2.TOKEN = exports2.STRICT_TOKEN = exports2.HEX = exports2.URL_CHAR = exports2.STRICT_URL_CHAR = exports2.USERINFO_CHARS = exports2.MARK = exports2.ALPHANUM = exports2.NUM = exports2.HEX_MAP = exports2.NUM_MAP = exports2.ALPHA = exports2.FINISH = exports2.H_METHOD_MAP = exports2.METHOD_MAP = exports2.METHODS_RTSP = exports2.METHODS_ICE = exports2.METHODS_HTTP = exports2.METHODS = exports2.LENIENT_FLAGS = exports2.FLAGS = exports2.TYPE = exports2.ERROR = void 0; + var utils_1 = require_utils(); + var ERROR; + (function(ERROR2) { + ERROR2[ERROR2["OK"] = 0] = "OK"; + ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL"; + ERROR2[ERROR2["STRICT"] = 2] = "STRICT"; + ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED"; + ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; + ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; + ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD"; + ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL"; + ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; + ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION"; + ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; + ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; + ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; + ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS"; + ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; + ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; + ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; + ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; + ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; + ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; + ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; + ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED"; + ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; + ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; + ERROR2[ERROR2["USER"] = 24] = "USER"; + })(ERROR = exports2.ERROR || (exports2.ERROR = {})); + var TYPE; + (function(TYPE2) { + TYPE2[TYPE2["BOTH"] = 0] = "BOTH"; + TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST"; + TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE"; + })(TYPE = exports2.TYPE || (exports2.TYPE = {})); + var FLAGS; + (function(FLAGS2) { + FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; + FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; + FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; + FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED"; + FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE"; + FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; + FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY"; + FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING"; + FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; + })(FLAGS = exports2.FLAGS || (exports2.FLAGS = {})); + var LENIENT_FLAGS; + (function(LENIENT_FLAGS2) { + LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS"; + LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; + LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; + })(LENIENT_FLAGS = exports2.LENIENT_FLAGS || (exports2.LENIENT_FLAGS = {})); + var METHODS; + (function(METHODS2) { + METHODS2[METHODS2["DELETE"] = 0] = "DELETE"; + METHODS2[METHODS2["GET"] = 1] = "GET"; + METHODS2[METHODS2["HEAD"] = 2] = "HEAD"; + METHODS2[METHODS2["POST"] = 3] = "POST"; + METHODS2[METHODS2["PUT"] = 4] = "PUT"; + METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT"; + METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS"; + METHODS2[METHODS2["TRACE"] = 7] = "TRACE"; + METHODS2[METHODS2["COPY"] = 8] = "COPY"; + METHODS2[METHODS2["LOCK"] = 9] = "LOCK"; + METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL"; + METHODS2[METHODS2["MOVE"] = 11] = "MOVE"; + METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND"; + METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH"; + METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH"; + METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK"; + METHODS2[METHODS2["BIND"] = 16] = "BIND"; + METHODS2[METHODS2["REBIND"] = 17] = "REBIND"; + METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND"; + METHODS2[METHODS2["ACL"] = 19] = "ACL"; + METHODS2[METHODS2["REPORT"] = 20] = "REPORT"; + METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY"; + METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT"; + METHODS2[METHODS2["MERGE"] = 23] = "MERGE"; + METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH"; + METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY"; + METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE"; + METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; + METHODS2[METHODS2["PATCH"] = 28] = "PATCH"; + METHODS2[METHODS2["PURGE"] = 29] = "PURGE"; + METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR"; + METHODS2[METHODS2["LINK"] = 31] = "LINK"; + METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK"; + METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE"; + METHODS2[METHODS2["PRI"] = 34] = "PRI"; + METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE"; + METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE"; + METHODS2[METHODS2["SETUP"] = 37] = "SETUP"; + METHODS2[METHODS2["PLAY"] = 38] = "PLAY"; + METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE"; + METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN"; + METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER"; + METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER"; + METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT"; + METHODS2[METHODS2["RECORD"] = 44] = "RECORD"; + METHODS2[METHODS2["FLUSH"] = 45] = "FLUSH"; + })(METHODS = exports2.METHODS || (exports2.METHODS = {})); + exports2.METHODS_HTTP = [ + METHODS.DELETE, + METHODS.GET, + METHODS.HEAD, + METHODS.POST, + METHODS.PUT, + METHODS.CONNECT, + METHODS.OPTIONS, + METHODS.TRACE, + METHODS.COPY, + METHODS.LOCK, + METHODS.MKCOL, + METHODS.MOVE, + METHODS.PROPFIND, + METHODS.PROPPATCH, + METHODS.SEARCH, + METHODS.UNLOCK, + METHODS.BIND, + METHODS.REBIND, + METHODS.UNBIND, + METHODS.ACL, + METHODS.REPORT, + METHODS.MKACTIVITY, + METHODS.CHECKOUT, + METHODS.MERGE, + METHODS["M-SEARCH"], + METHODS.NOTIFY, + METHODS.SUBSCRIBE, + METHODS.UNSUBSCRIBE, + METHODS.PATCH, + METHODS.PURGE, + METHODS.MKCALENDAR, + METHODS.LINK, + METHODS.UNLINK, + METHODS.PRI, + // TODO(indutny): should we allow it with HTTP? + METHODS.SOURCE + ]; + exports2.METHODS_ICE = [ + METHODS.SOURCE + ]; + exports2.METHODS_RTSP = [ + METHODS.OPTIONS, + METHODS.DESCRIBE, + METHODS.ANNOUNCE, + METHODS.SETUP, + METHODS.PLAY, + METHODS.PAUSE, + METHODS.TEARDOWN, + METHODS.GET_PARAMETER, + METHODS.SET_PARAMETER, + METHODS.REDIRECT, + METHODS.RECORD, + METHODS.FLUSH, + // For AirPlay + METHODS.GET, + METHODS.POST + ]; + exports2.METHOD_MAP = utils_1.enumToMap(METHODS); + exports2.H_METHOD_MAP = {}; + Object.keys(exports2.METHOD_MAP).forEach((key) => { + if (/^H/.test(key)) { + exports2.H_METHOD_MAP[key] = exports2.METHOD_MAP[key]; + } + }); + var FINISH; + (function(FINISH2) { + FINISH2[FINISH2["SAFE"] = 0] = "SAFE"; + FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; + FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE"; + })(FINISH = exports2.FINISH || (exports2.FINISH = {})); + exports2.ALPHA = []; + for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) { + exports2.ALPHA.push(String.fromCharCode(i)); + exports2.ALPHA.push(String.fromCharCode(i + 32)); + } + exports2.NUM_MAP = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9 + }; + exports2.HEX_MAP = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9, + A: 10, + B: 11, + C: 12, + D: 13, + E: 14, + F: 15, + a: 10, + b: 11, + c: 12, + d: 13, + e: 14, + f: 15 + }; + exports2.NUM = [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ]; + exports2.ALPHANUM = exports2.ALPHA.concat(exports2.NUM); + exports2.MARK = ["-", "_", ".", "!", "~", "*", "'", "(", ")"]; + exports2.USERINFO_CHARS = exports2.ALPHANUM.concat(exports2.MARK).concat(["%", ";", ":", "&", "=", "+", "$", ","]); + exports2.STRICT_URL_CHAR = [ + "!", + '"', + "$", + "%", + "&", + "'", + "(", + ")", + "*", + "+", + ",", + "-", + ".", + "/", + ":", + ";", + "<", + "=", + ">", + "@", + "[", + "\\", + "]", + "^", + "_", + "`", + "{", + "|", + "}", + "~" + ].concat(exports2.ALPHANUM); + exports2.URL_CHAR = exports2.STRICT_URL_CHAR.concat([" ", "\f"]); + for (let i = 128; i <= 255; i++) { + exports2.URL_CHAR.push(i); + } + exports2.HEX = exports2.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]); + exports2.STRICT_TOKEN = [ + "!", + "#", + "$", + "%", + "&", + "'", + "*", + "+", + "-", + ".", + "^", + "_", + "`", + "|", + "~" + ].concat(exports2.ALPHANUM); + exports2.TOKEN = exports2.STRICT_TOKEN.concat([" "]); + exports2.HEADER_CHARS = [" "]; + for (let i = 32; i <= 255; i++) { + if (i !== 127) { + exports2.HEADER_CHARS.push(i); + } + } + exports2.CONNECTION_TOKEN_CHARS = exports2.HEADER_CHARS.filter((c) => c !== 44); + exports2.MAJOR = exports2.NUM_MAP; + exports2.MINOR = exports2.MAJOR; + var HEADER_STATE; + (function(HEADER_STATE2) { + HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL"; + HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION"; + HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; + HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; + HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; + HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED"; + })(HEADER_STATE = exports2.HEADER_STATE || (exports2.HEADER_STATE = {})); + exports2.SPECIAL_HEADERS = { + "connection": HEADER_STATE.CONNECTION, + "content-length": HEADER_STATE.CONTENT_LENGTH, + "proxy-connection": HEADER_STATE.CONNECTION, + "transfer-encoding": HEADER_STATE.TRANSFER_ENCODING, + "upgrade": HEADER_STATE.UPGRADE + }; + } +}); + +// node_modules/undici/lib/llhttp/llhttp-wasm.js +var require_llhttp_wasm = __commonJS({ + "node_modules/undici/lib/llhttp/llhttp-wasm.js"(exports2, module2) { + "use strict"; + var { Buffer: Buffer2 } = require("node:buffer"); + module2.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64"); + } +}); + +// node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +var require_llhttp_simd_wasm = __commonJS({ + "node_modules/undici/lib/llhttp/llhttp_simd-wasm.js"(exports2, module2) { + "use strict"; + var { Buffer: Buffer2 } = require("node:buffer"); + module2.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64"); + } +}); + +// node_modules/undici/lib/web/fetch/constants.js +var require_constants3 = __commonJS({ + "node_modules/undici/lib/web/fetch/constants.js"(exports2, module2) { + "use strict"; + var corsSafeListedMethods = ( + /** @type {const} */ + ["GET", "HEAD", "POST"] + ); + var corsSafeListedMethodsSet = new Set(corsSafeListedMethods); + var nullBodyStatus = ( + /** @type {const} */ + [101, 204, 205, 304] + ); + var redirectStatus = ( + /** @type {const} */ + [301, 302, 303, 307, 308] + ); + var redirectStatusSet = new Set(redirectStatus); + var badPorts = ( + /** @type {const} */ + [ + "1", + "7", + "9", + "11", + "13", + "15", + "17", + "19", + "20", + "21", + "22", + "23", + "25", + "37", + "42", + "43", + "53", + "69", + "77", + "79", + "87", + "95", + "101", + "102", + "103", + "104", + "109", + "110", + "111", + "113", + "115", + "117", + "119", + "123", + "135", + "137", + "139", + "143", + "161", + "179", + "389", + "427", + "465", + "512", + "513", + "514", + "515", + "526", + "530", + "531", + "532", + "540", + "548", + "554", + "556", + "563", + "587", + "601", + "636", + "989", + "990", + "993", + "995", + "1719", + "1720", + "1723", + "2049", + "3659", + "4045", + "4190", + "5060", + "5061", + "6000", + "6566", + "6665", + "6666", + "6667", + "6668", + "6669", + "6679", + "6697", + "10080" + ] + ); + var badPortsSet = new Set(badPorts); + var referrerPolicy = ( + /** @type {const} */ + [ + "", + "no-referrer", + "no-referrer-when-downgrade", + "same-origin", + "origin", + "strict-origin", + "origin-when-cross-origin", + "strict-origin-when-cross-origin", + "unsafe-url" + ] + ); + var referrerPolicySet = new Set(referrerPolicy); + var requestRedirect = ( + /** @type {const} */ + ["follow", "manual", "error"] + ); + var safeMethods = ( + /** @type {const} */ + ["GET", "HEAD", "OPTIONS", "TRACE"] + ); + var safeMethodsSet = new Set(safeMethods); + var requestMode = ( + /** @type {const} */ + ["navigate", "same-origin", "no-cors", "cors"] + ); + var requestCredentials = ( + /** @type {const} */ + ["omit", "same-origin", "include"] + ); + var requestCache = ( + /** @type {const} */ + [ + "default", + "no-store", + "reload", + "no-cache", + "force-cache", + "only-if-cached" + ] + ); + var requestBodyHeader = ( + /** @type {const} */ + [ + "content-encoding", + "content-language", + "content-location", + "content-type", + // See https://github.com/nodejs/undici/issues/2021 + // 'Content-Length' is a forbidden header name, which is typically + // removed in the Headers implementation. However, undici doesn't + // filter out headers, so we add it here. + "content-length" + ] + ); + var requestDuplex = ( + /** @type {const} */ + [ + "half" + ] + ); + var forbiddenMethods = ( + /** @type {const} */ + ["CONNECT", "TRACE", "TRACK"] + ); + var forbiddenMethodsSet = new Set(forbiddenMethods); + var subresource = ( + /** @type {const} */ + [ + "audio", + "audioworklet", + "font", + "image", + "manifest", + "paintworklet", + "script", + "style", + "track", + "video", + "xslt", + "" + ] + ); + var subresourceSet = new Set(subresource); + module2.exports = { + subresource, + forbiddenMethods, + requestBodyHeader, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + redirectStatus, + corsSafeListedMethods, + nullBodyStatus, + safeMethods, + badPorts, + requestDuplex, + subresourceSet, + badPortsSet, + redirectStatusSet, + corsSafeListedMethodsSet, + safeMethodsSet, + forbiddenMethodsSet, + referrerPolicySet + }; + } +}); + +// node_modules/undici/lib/web/fetch/global.js +var require_global = __commonJS({ + "node_modules/undici/lib/web/fetch/global.js"(exports2, module2) { + "use strict"; + var globalOrigin = /* @__PURE__ */ Symbol.for("undici.globalOrigin.1"); + function getGlobalOrigin() { + return globalThis[globalOrigin]; + } + function setGlobalOrigin(newOrigin) { + if (newOrigin === void 0) { + Object.defineProperty(globalThis, globalOrigin, { + value: void 0, + writable: true, + enumerable: false, + configurable: false + }); + return; + } + const parsedURL = new URL(newOrigin); + if (parsedURL.protocol !== "http:" && parsedURL.protocol !== "https:") { + throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`); + } + Object.defineProperty(globalThis, globalOrigin, { + value: parsedURL, + writable: true, + enumerable: false, + configurable: false + }); + } + module2.exports = { + getGlobalOrigin, + setGlobalOrigin + }; + } +}); + +// node_modules/undici/lib/web/fetch/data-url.js +var require_data_url = __commonJS({ + "node_modules/undici/lib/web/fetch/data-url.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var encoder = new TextEncoder(); + var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/; + var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/; + var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g; + var HTTP_QUOTED_STRING_TOKENS = /^[\u0009\u0020-\u007E\u0080-\u00FF]+$/; + function dataURLProcessor(dataURL) { + assert(dataURL.protocol === "data:"); + let input = URLSerializer(dataURL, true); + input = input.slice(5); + const position = { position: 0 }; + let mimeType = collectASequenceOfCodePointsFast( + ",", + input, + position + ); + const mimeTypeLength = mimeType.length; + mimeType = removeASCIIWhitespace(mimeType, true, true); + if (position.position >= input.length) { + return "failure"; + } + position.position++; + const encodedBody = input.slice(mimeTypeLength + 1); + let body = stringPercentDecode(encodedBody); + if (/;(\u0020){0,}base64$/i.test(mimeType)) { + const stringBody = isomorphicDecode(body); + body = forgivingBase64(stringBody); + if (body === "failure") { + return "failure"; + } + mimeType = mimeType.slice(0, -6); + mimeType = mimeType.replace(/(\u0020)+$/, ""); + mimeType = mimeType.slice(0, -1); + } + if (mimeType.startsWith(";")) { + mimeType = "text/plain" + mimeType; + } + let mimeTypeRecord = parseMIMEType(mimeType); + if (mimeTypeRecord === "failure") { + mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII"); + } + return { mimeType: mimeTypeRecord, body }; + } + function URLSerializer(url, excludeFragment = false) { + if (!excludeFragment) { + return url.href; + } + const href = url.href; + const hashLength = url.hash.length; + const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength); + if (!hashLength && href.endsWith("#")) { + return serialized.slice(0, -1); + } + return serialized; + } + function collectASequenceOfCodePoints(condition, input, position) { + let result = ""; + while (position.position < input.length && condition(input[position.position])) { + result += input[position.position]; + position.position++; + } + return result; + } + function collectASequenceOfCodePointsFast(char, input, position) { + const idx = input.indexOf(char, position.position); + const start = position.position; + if (idx === -1) { + position.position = input.length; + return input.slice(start); + } + position.position = idx; + return input.slice(start, position.position); + } + function stringPercentDecode(input) { + const bytes = encoder.encode(input); + return percentDecode(bytes); + } + function isHexCharByte(byte) { + return byte >= 48 && byte <= 57 || byte >= 65 && byte <= 70 || byte >= 97 && byte <= 102; + } + function hexByteToNumber(byte) { + return ( + // 0-9 + byte >= 48 && byte <= 57 ? byte - 48 : (byte & 223) - 55 + ); + } + function percentDecode(input) { + const length = input.length; + const output = new Uint8Array(length); + let j = 0; + for (let i = 0; i < length; ++i) { + const byte = input[i]; + if (byte !== 37) { + output[j++] = byte; + } else if (byte === 37 && !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))) { + output[j++] = 37; + } else { + output[j++] = hexByteToNumber(input[i + 1]) << 4 | hexByteToNumber(input[i + 2]); + i += 2; + } + } + return length === j ? output : output.subarray(0, j); + } + function parseMIMEType(input) { + input = removeHTTPWhitespace(input, true, true); + const position = { position: 0 }; + const type = collectASequenceOfCodePointsFast( + "/", + input, + position + ); + if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { + return "failure"; + } + if (position.position > input.length) { + return "failure"; + } + position.position++; + let subtype = collectASequenceOfCodePointsFast( + ";", + input, + position + ); + subtype = removeHTTPWhitespace(subtype, false, true); + if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { + return "failure"; + } + const typeLowercase = type.toLowerCase(); + const subtypeLowercase = subtype.toLowerCase(); + const mimeType = { + type: typeLowercase, + subtype: subtypeLowercase, + /** @type {Map} */ + parameters: /* @__PURE__ */ new Map(), + // https://mimesniff.spec.whatwg.org/#mime-type-essence + essence: `${typeLowercase}/${subtypeLowercase}` + }; + while (position.position < input.length) { + position.position++; + collectASequenceOfCodePoints( + // https://fetch.spec.whatwg.org/#http-whitespace + (char) => HTTP_WHITESPACE_REGEX.test(char), + input, + position + ); + let parameterName = collectASequenceOfCodePoints( + (char) => char !== ";" && char !== "=", + input, + position + ); + parameterName = parameterName.toLowerCase(); + if (position.position < input.length) { + if (input[position.position] === ";") { + continue; + } + position.position++; + } + if (position.position > input.length) { + break; + } + let parameterValue = null; + if (input[position.position] === '"') { + parameterValue = collectAnHTTPQuotedString(input, position, true); + collectASequenceOfCodePointsFast( + ";", + input, + position + ); + } else { + parameterValue = collectASequenceOfCodePointsFast( + ";", + input, + position + ); + parameterValue = removeHTTPWhitespace(parameterValue, false, true); + if (parameterValue.length === 0) { + continue; + } + } + if (parameterName.length !== 0 && HTTP_TOKEN_CODEPOINTS.test(parameterName) && (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && !mimeType.parameters.has(parameterName)) { + mimeType.parameters.set(parameterName, parameterValue); + } + } + return mimeType; + } + function forgivingBase64(data) { + data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, ""); + let dataLength = data.length; + if (dataLength % 4 === 0) { + if (data.charCodeAt(dataLength - 1) === 61) { + --dataLength; + if (data.charCodeAt(dataLength - 1) === 61) { + --dataLength; + } + } + } + if (dataLength % 4 === 1) { + return "failure"; + } + if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) { + return "failure"; + } + const buffer = Buffer.from(data, "base64"); + return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); + } + function collectAnHTTPQuotedString(input, position, extractValue) { + const positionStart = position.position; + let value = ""; + assert(input[position.position] === '"'); + position.position++; + while (true) { + value += collectASequenceOfCodePoints( + (char) => char !== '"' && char !== "\\", + input, + position + ); + if (position.position >= input.length) { + break; + } + const quoteOrBackslash = input[position.position]; + position.position++; + if (quoteOrBackslash === "\\") { + if (position.position >= input.length) { + value += "\\"; + break; + } + value += input[position.position]; + position.position++; + } else { + assert(quoteOrBackslash === '"'); + break; + } + } + if (extractValue) { + return value; + } + return input.slice(positionStart, position.position); + } + function serializeAMimeType(mimeType) { + assert(mimeType !== "failure"); + const { parameters, essence } = mimeType; + let serialization = essence; + for (let [name, value] of parameters.entries()) { + serialization += ";"; + serialization += name; + serialization += "="; + if (!HTTP_TOKEN_CODEPOINTS.test(value)) { + value = value.replace(/(\\|")/g, "\\$1"); + value = '"' + value; + value += '"'; + } + serialization += value; + } + return serialization; + } + function isHTTPWhiteSpace(char) { + return char === 13 || char === 10 || char === 9 || char === 32; + } + function removeHTTPWhitespace(str, leading = true, trailing = true) { + return removeChars(str, leading, trailing, isHTTPWhiteSpace); + } + function isASCIIWhitespace(char) { + return char === 13 || char === 10 || char === 9 || char === 12 || char === 32; + } + function removeASCIIWhitespace(str, leading = true, trailing = true) { + return removeChars(str, leading, trailing, isASCIIWhitespace); + } + function removeChars(str, leading, trailing, predicate) { + let lead = 0; + let trail = str.length - 1; + if (leading) { + while (lead < str.length && predicate(str.charCodeAt(lead))) lead++; + } + if (trailing) { + while (trail > 0 && predicate(str.charCodeAt(trail))) trail--; + } + return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1); + } + function isomorphicDecode(input) { + const length = input.length; + if ((2 << 15) - 1 > length) { + return String.fromCharCode.apply(null, input); + } + let result = ""; + let i = 0; + let addition = (2 << 15) - 1; + while (i < length) { + if (i + addition > length) { + addition = length - i; + } + result += String.fromCharCode.apply(null, input.subarray(i, i += addition)); + } + return result; + } + function minimizeSupportedMimeType(mimeType) { + switch (mimeType.essence) { + case "application/ecmascript": + case "application/javascript": + case "application/x-ecmascript": + case "application/x-javascript": + case "text/ecmascript": + case "text/javascript": + case "text/javascript1.0": + case "text/javascript1.1": + case "text/javascript1.2": + case "text/javascript1.3": + case "text/javascript1.4": + case "text/javascript1.5": + case "text/jscript": + case "text/livescript": + case "text/x-ecmascript": + case "text/x-javascript": + return "text/javascript"; + case "application/json": + case "text/json": + return "application/json"; + case "image/svg+xml": + return "image/svg+xml"; + case "text/xml": + case "application/xml": + return "application/xml"; + } + if (mimeType.subtype.endsWith("+json")) { + return "application/json"; + } + if (mimeType.subtype.endsWith("+xml")) { + return "application/xml"; + } + return ""; + } + module2.exports = { + dataURLProcessor, + URLSerializer, + collectASequenceOfCodePoints, + collectASequenceOfCodePointsFast, + stringPercentDecode, + parseMIMEType, + collectAnHTTPQuotedString, + serializeAMimeType, + removeChars, + removeHTTPWhitespace, + minimizeSupportedMimeType, + HTTP_TOKEN_CODEPOINTS, + isomorphicDecode + }; + } +}); + +// node_modules/undici/lib/web/fetch/webidl.js +var require_webidl = __commonJS({ + "node_modules/undici/lib/web/fetch/webidl.js"(exports2, module2) { + "use strict"; + var { types, inspect } = require("node:util"); + var { markAsUncloneable } = require("node:worker_threads"); + var { toUSVString } = require_util(); + var webidl = {}; + webidl.converters = {}; + webidl.util = {}; + webidl.errors = {}; + webidl.errors.exception = function(message) { + return new TypeError(`${message.header}: ${message.message}`); + }; + webidl.errors.conversionFailed = function(context3) { + const plural = context3.types.length === 1 ? "" : " one of"; + const message = `${context3.argument} could not be converted to${plural}: ${context3.types.join(", ")}.`; + return webidl.errors.exception({ + header: context3.prefix, + message + }); + }; + webidl.errors.invalidArgument = function(context3) { + return webidl.errors.exception({ + header: context3.prefix, + message: `"${context3.value}" is an invalid ${context3.type}.` + }); + }; + webidl.brandCheck = function(V, I, opts) { + if (opts?.strict !== false) { + if (!(V instanceof I)) { + const err = new TypeError("Illegal invocation"); + err.code = "ERR_INVALID_THIS"; + throw err; + } + } else { + if (V?.[Symbol.toStringTag] !== I.prototype[Symbol.toStringTag]) { + const err = new TypeError("Illegal invocation"); + err.code = "ERR_INVALID_THIS"; + throw err; + } + } + }; + webidl.argumentLengthCheck = function({ length }, min, ctx) { + if (length < min) { + throw webidl.errors.exception({ + message: `${min} argument${min !== 1 ? "s" : ""} required, but${length ? " only" : ""} ${length} found.`, + header: ctx + }); + } + }; + webidl.illegalConstructor = function() { + throw webidl.errors.exception({ + header: "TypeError", + message: "Illegal constructor" + }); + }; + webidl.util.Type = function(V) { + switch (typeof V) { + case "undefined": + return "Undefined"; + case "boolean": + return "Boolean"; + case "string": + return "String"; + case "symbol": + return "Symbol"; + case "number": + return "Number"; + case "bigint": + return "BigInt"; + case "function": + case "object": { + if (V === null) { + return "Null"; + } + return "Object"; + } + } + }; + webidl.util.markAsUncloneable = markAsUncloneable || (() => { + }); + webidl.util.ConvertToInt = function(V, bitLength, signedness, opts) { + let upperBound; + let lowerBound; + if (bitLength === 64) { + upperBound = Math.pow(2, 53) - 1; + if (signedness === "unsigned") { + lowerBound = 0; + } else { + lowerBound = Math.pow(-2, 53) + 1; + } + } else if (signedness === "unsigned") { + lowerBound = 0; + upperBound = Math.pow(2, bitLength) - 1; + } else { + lowerBound = Math.pow(-2, bitLength) - 1; + upperBound = Math.pow(2, bitLength - 1) - 1; + } + let x = Number(V); + if (x === 0) { + x = 0; + } + if (opts?.enforceRange === true) { + if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { + throw webidl.errors.exception({ + header: "Integer conversion", + message: `Could not convert ${webidl.util.Stringify(V)} to an integer.` + }); + } + x = webidl.util.IntegerPart(x); + if (x < lowerBound || x > upperBound) { + throw webidl.errors.exception({ + header: "Integer conversion", + message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` + }); + } + return x; + } + if (!Number.isNaN(x) && opts?.clamp === true) { + x = Math.min(Math.max(x, lowerBound), upperBound); + if (Math.floor(x) % 2 === 0) { + x = Math.floor(x); + } else { + x = Math.ceil(x); + } + return x; + } + if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { + return 0; + } + x = webidl.util.IntegerPart(x); + x = x % Math.pow(2, bitLength); + if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) { + return x - Math.pow(2, bitLength); + } + return x; + }; + webidl.util.IntegerPart = function(n) { + const r = Math.floor(Math.abs(n)); + if (n < 0) { + return -1 * r; + } + return r; + }; + webidl.util.Stringify = function(V) { + const type = webidl.util.Type(V); + switch (type) { + case "Symbol": + return `Symbol(${V.description})`; + case "Object": + return inspect(V); + case "String": + return `"${V}"`; + default: + return `${V}`; + } + }; + webidl.sequenceConverter = function(converter) { + return (V, prefix, argument, Iterable) => { + if (webidl.util.Type(V) !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.` + }); + } + const method = typeof Iterable === "function" ? Iterable() : V?.[Symbol.iterator]?.(); + const seq = []; + let index = 0; + if (method === void 0 || typeof method.next !== "function") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} is not iterable.` + }); + } + while (true) { + const { done, value } = method.next(); + if (done) { + break; + } + seq.push(converter(value, prefix, `${argument}[${index++}]`)); + } + return seq; + }; + }; + webidl.recordConverter = function(keyConverter, valueConverter) { + return (O, prefix, argument) => { + if (webidl.util.Type(O) !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} ("${webidl.util.Type(O)}") is not an Object.` + }); + } + const result = {}; + if (!types.isProxy(O)) { + const keys2 = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]; + for (const key of keys2) { + const typedKey = keyConverter(key, prefix, argument); + const typedValue = valueConverter(O[key], prefix, argument); + result[typedKey] = typedValue; + } + return result; + } + const keys = Reflect.ownKeys(O); + for (const key of keys) { + const desc = Reflect.getOwnPropertyDescriptor(O, key); + if (desc?.enumerable) { + const typedKey = keyConverter(key, prefix, argument); + const typedValue = valueConverter(O[key], prefix, argument); + result[typedKey] = typedValue; + } + } + return result; + }; + }; + webidl.interfaceConverter = function(i) { + return (V, prefix, argument, opts) => { + if (opts?.strict !== false && !(V instanceof i)) { + throw webidl.errors.exception({ + header: prefix, + message: `Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${i.name}.` + }); + } + return V; + }; + }; + webidl.dictionaryConverter = function(converters) { + return (dictionary, prefix, argument) => { + const type = webidl.util.Type(dictionary); + const dict = {}; + if (type === "Null" || type === "Undefined") { + return dict; + } else if (type !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `Expected ${dictionary} to be one of: Null, Undefined, Object.` + }); + } + for (const options of converters) { + const { key, defaultValue, required, converter } = options; + if (required === true) { + if (!Object.hasOwn(dictionary, key)) { + throw webidl.errors.exception({ + header: prefix, + message: `Missing required key "${key}".` + }); + } + } + let value = dictionary[key]; + const hasDefault = Object.hasOwn(options, "defaultValue"); + if (hasDefault && value !== null) { + value ??= defaultValue(); + } + if (required || hasDefault || value !== void 0) { + value = converter(value, prefix, `${argument}.${key}`); + if (options.allowedValues && !options.allowedValues.includes(value)) { + throw webidl.errors.exception({ + header: prefix, + message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.` + }); + } + dict[key] = value; + } + } + return dict; + }; + }; + webidl.nullableConverter = function(converter) { + return (V, prefix, argument) => { + if (V === null) { + return V; + } + return converter(V, prefix, argument); + }; + }; + webidl.converters.DOMString = function(V, prefix, argument, opts) { + if (V === null && opts?.legacyNullToEmptyString) { + return ""; + } + if (typeof V === "symbol") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} is a symbol, which cannot be converted to a DOMString.` + }); + } + return String(V); + }; + webidl.converters.ByteString = function(V, prefix, argument) { + const x = webidl.converters.DOMString(V, prefix, argument); + for (let index = 0; index < x.length; index++) { + if (x.charCodeAt(index) > 255) { + throw new TypeError( + `Cannot convert argument to a ByteString because the character at index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.` + ); + } + } + return x; + }; + webidl.converters.USVString = toUSVString; + webidl.converters.boolean = function(V) { + const x = Boolean(V); + return x; + }; + webidl.converters.any = function(V) { + return V; + }; + webidl.converters["long long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 64, "signed", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned long long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 64, "unsigned", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 32, "unsigned", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned short"] = function(V, prefix, argument, opts) { + const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts, prefix, argument); + return x; + }; + webidl.converters.ArrayBuffer = function(V, prefix, argument, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) { + throw webidl.errors.conversionFailed({ + prefix, + argument: `${argument} ("${webidl.util.Stringify(V)}")`, + types: ["ArrayBuffer"] + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.resizable || V.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.TypedArray = function(V, T, prefix, name, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) { + throw webidl.errors.conversionFailed({ + prefix, + argument: `${name} ("${webidl.util.Stringify(V)}")`, + types: [T.name] + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.buffer.resizable || V.buffer.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.DataView = function(V, prefix, name, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) { + throw webidl.errors.exception({ + header: prefix, + message: `${name} is not a DataView.` + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.buffer.resizable || V.buffer.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.BufferSource = function(V, prefix, name, opts) { + if (types.isAnyArrayBuffer(V)) { + return webidl.converters.ArrayBuffer(V, prefix, name, { ...opts, allowShared: false }); + } + if (types.isTypedArray(V)) { + return webidl.converters.TypedArray(V, V.constructor, prefix, name, { ...opts, allowShared: false }); + } + if (types.isDataView(V)) { + return webidl.converters.DataView(V, prefix, name, { ...opts, allowShared: false }); + } + throw webidl.errors.conversionFailed({ + prefix, + argument: `${name} ("${webidl.util.Stringify(V)}")`, + types: ["BufferSource"] + }); + }; + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.ByteString + ); + webidl.converters["sequence>"] = webidl.sequenceConverter( + webidl.converters["sequence"] + ); + webidl.converters["record"] = webidl.recordConverter( + webidl.converters.ByteString, + webidl.converters.ByteString + ); + module2.exports = { + webidl + }; + } +}); + +// node_modules/undici/lib/web/fetch/util.js +var require_util2 = __commonJS({ + "node_modules/undici/lib/web/fetch/util.js"(exports2, module2) { + "use strict"; + var { Transform } = require("node:stream"); + var zlib = require("node:zlib"); + var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants3(); + var { getGlobalOrigin } = require_global(); + var { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require_data_url(); + var { performance: performance2 } = require("node:perf_hooks"); + var { isBlobLike, ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require_util(); + var assert = require("node:assert"); + var { isUint8Array } = require("node:util/types"); + var { webidl } = require_webidl(); + var supportedHashes = []; + var crypto2; + try { + crypto2 = require("node:crypto"); + const possibleRelevantHashes = ["sha256", "sha384", "sha512"]; + supportedHashes = crypto2.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)); + } catch { + } + function responseURL(response) { + const urlList = response.urlList; + const length = urlList.length; + return length === 0 ? null : urlList[length - 1].toString(); + } + function responseLocationURL(response, requestFragment) { + if (!redirectStatusSet.has(response.status)) { + return null; + } + let location = response.headersList.get("location", true); + if (location !== null && isValidHeaderValue(location)) { + if (!isValidEncodedURL(location)) { + location = normalizeBinaryStringToUtf8(location); + } + location = new URL(location, responseURL(response)); + } + if (location && !location.hash) { + location.hash = requestFragment; + } + return location; + } + function isValidEncodedURL(url) { + for (let i = 0; i < url.length; ++i) { + const code = url.charCodeAt(i); + if (code > 126 || // Non-US-ASCII + DEL + code < 32) { + return false; + } + } + return true; + } + function normalizeBinaryStringToUtf8(value) { + return Buffer.from(value, "binary").toString("utf8"); + } + function requestCurrentURL(request2) { + return request2.urlList[request2.urlList.length - 1]; + } + function requestBadPort(request2) { + const url = requestCurrentURL(request2); + if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { + return "blocked"; + } + return "allowed"; + } + function isErrorLike(object) { + return object instanceof Error || (object?.constructor?.name === "Error" || object?.constructor?.name === "DOMException"); + } + function isValidReasonPhrase(statusText) { + for (let i = 0; i < statusText.length; ++i) { + const c = statusText.charCodeAt(i); + if (!(c === 9 || // HTAB + c >= 32 && c <= 126 || // SP / VCHAR + c >= 128 && c <= 255)) { + return false; + } + } + return true; + } + var isValidHeaderName = isValidHTTPToken; + function isValidHeaderValue(potentialValue) { + return (potentialValue[0] === " " || potentialValue[0] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue.includes("\n") || potentialValue.includes("\r") || potentialValue.includes("\0")) === false; + } + function setRequestReferrerPolicyOnRedirect(request2, actualResponse) { + const { headersList } = actualResponse; + const policyHeader = (headersList.get("referrer-policy", true) ?? "").split(","); + let policy = ""; + if (policyHeader.length > 0) { + for (let i = policyHeader.length; i !== 0; i--) { + const token = policyHeader[i - 1].trim(); + if (referrerPolicyTokens.has(token)) { + policy = token; + break; + } + } + } + if (policy !== "") { + request2.referrerPolicy = policy; + } + } + function crossOriginResourcePolicyCheck() { + return "allowed"; + } + function corsCheck() { + return "success"; + } + function TAOCheck() { + return "success"; + } + function appendFetchMetadata(httpRequest) { + let header = null; + header = httpRequest.mode; + httpRequest.headersList.set("sec-fetch-mode", header, true); + } + function appendRequestOriginHeader(request2) { + let serializedOrigin = request2.origin; + if (serializedOrigin === "client" || serializedOrigin === void 0) { + return; + } + if (request2.responseTainting === "cors" || request2.mode === "websocket") { + request2.headersList.append("origin", serializedOrigin, true); + } else if (request2.method !== "GET" && request2.method !== "HEAD") { + switch (request2.referrerPolicy) { + case "no-referrer": + serializedOrigin = null; + break; + case "no-referrer-when-downgrade": + case "strict-origin": + case "strict-origin-when-cross-origin": + if (request2.origin && urlHasHttpsScheme(request2.origin) && !urlHasHttpsScheme(requestCurrentURL(request2))) { + serializedOrigin = null; + } + break; + case "same-origin": + if (!sameOrigin(request2, requestCurrentURL(request2))) { + serializedOrigin = null; + } + break; + default: + } + request2.headersList.append("origin", serializedOrigin, true); + } + } + function coarsenTime(timestamp, crossOriginIsolatedCapability) { + return timestamp; + } + function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) { + if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) { + return { + domainLookupStartTime: defaultStartTime, + domainLookupEndTime: defaultStartTime, + connectionStartTime: defaultStartTime, + connectionEndTime: defaultStartTime, + secureConnectionStartTime: defaultStartTime, + ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol + }; + } + return { + domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability), + domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability), + connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability), + connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability), + secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability), + ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol + }; + } + function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) { + return coarsenTime(performance2.now(), crossOriginIsolatedCapability); + } + function createOpaqueTimingInfo(timingInfo) { + return { + startTime: timingInfo.startTime ?? 0, + redirectStartTime: 0, + redirectEndTime: 0, + postRedirectStartTime: timingInfo.startTime ?? 0, + finalServiceWorkerStartTime: 0, + finalNetworkResponseStartTime: 0, + finalNetworkRequestStartTime: 0, + endTime: 0, + encodedBodySize: 0, + decodedBodySize: 0, + finalConnectionTimingInfo: null + }; + } + function makePolicyContainer() { + return { + referrerPolicy: "strict-origin-when-cross-origin" + }; + } + function clonePolicyContainer(policyContainer) { + return { + referrerPolicy: policyContainer.referrerPolicy + }; + } + function determineRequestsReferrer(request2) { + const policy = request2.referrerPolicy; + assert(policy); + let referrerSource = null; + if (request2.referrer === "client") { + const globalOrigin = getGlobalOrigin(); + if (!globalOrigin || globalOrigin.origin === "null") { + return "no-referrer"; + } + referrerSource = new URL(globalOrigin); + } else if (request2.referrer instanceof URL) { + referrerSource = request2.referrer; + } + let referrerURL = stripURLForReferrer(referrerSource); + const referrerOrigin = stripURLForReferrer(referrerSource, true); + if (referrerURL.toString().length > 4096) { + referrerURL = referrerOrigin; + } + const areSameOrigin = sameOrigin(request2, referrerURL); + const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request2.url); + switch (policy) { + case "origin": + return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true); + case "unsafe-url": + return referrerURL; + case "same-origin": + return areSameOrigin ? referrerOrigin : "no-referrer"; + case "origin-when-cross-origin": + return areSameOrigin ? referrerURL : referrerOrigin; + case "strict-origin-when-cross-origin": { + const currentURL = requestCurrentURL(request2); + if (sameOrigin(referrerURL, currentURL)) { + return referrerURL; + } + if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { + return "no-referrer"; + } + return referrerOrigin; + } + case "strict-origin": + // eslint-disable-line + /** + * 1. If referrerURL is a potentially trustworthy URL and + * request’s current URL is not a potentially trustworthy URL, + * then return no referrer. + * 2. Return referrerOrigin + */ + case "no-referrer-when-downgrade": + // eslint-disable-line + /** + * 1. If referrerURL is a potentially trustworthy URL and + * request’s current URL is not a potentially trustworthy URL, + * then return no referrer. + * 2. Return referrerOrigin + */ + default: + return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin; + } + } + function stripURLForReferrer(url, originOnly) { + assert(url instanceof URL); + url = new URL(url); + if (url.protocol === "file:" || url.protocol === "about:" || url.protocol === "blank:") { + return "no-referrer"; + } + url.username = ""; + url.password = ""; + url.hash = ""; + if (originOnly) { + url.pathname = ""; + url.search = ""; + } + return url; + } + function isURLPotentiallyTrustworthy(url) { + if (!(url instanceof URL)) { + return false; + } + if (url.href === "about:blank" || url.href === "about:srcdoc") { + return true; + } + if (url.protocol === "data:") return true; + if (url.protocol === "file:") return true; + return isOriginPotentiallyTrustworthy(url.origin); + function isOriginPotentiallyTrustworthy(origin) { + if (origin == null || origin === "null") return false; + const originAsURL = new URL(origin); + if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") { + return true; + } + if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || (originAsURL.hostname === "localhost" || originAsURL.hostname.includes("localhost.")) || originAsURL.hostname.endsWith(".localhost")) { + return true; + } + return false; + } + } + function bytesMatch(bytes, metadataList) { + if (crypto2 === void 0) { + return true; + } + const parsedMetadata = parseMetadata(metadataList); + if (parsedMetadata === "no metadata") { + return true; + } + if (parsedMetadata.length === 0) { + return true; + } + const strongest = getStrongestMetadata(parsedMetadata); + const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest); + for (const item of metadata) { + const algorithm = item.algo; + const expectedValue = item.hash; + let actualValue = crypto2.createHash(algorithm).update(bytes).digest("base64"); + if (actualValue[actualValue.length - 1] === "=") { + if (actualValue[actualValue.length - 2] === "=") { + actualValue = actualValue.slice(0, -2); + } else { + actualValue = actualValue.slice(0, -1); + } + } + if (compareBase64Mixed(actualValue, expectedValue)) { + return true; + } + } + return false; + } + var parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i; + function parseMetadata(metadata) { + const result = []; + let empty = true; + for (const token of metadata.split(" ")) { + empty = false; + const parsedToken = parseHashWithOptions.exec(token); + if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) { + continue; + } + const algorithm = parsedToken.groups.algo.toLowerCase(); + if (supportedHashes.includes(algorithm)) { + result.push(parsedToken.groups); + } + } + if (empty === true) { + return "no metadata"; + } + return result; + } + function getStrongestMetadata(metadataList) { + let algorithm = metadataList[0].algo; + if (algorithm[3] === "5") { + return algorithm; + } + for (let i = 1; i < metadataList.length; ++i) { + const metadata = metadataList[i]; + if (metadata.algo[3] === "5") { + algorithm = "sha512"; + break; + } else if (algorithm[3] === "3") { + continue; + } else if (metadata.algo[3] === "3") { + algorithm = "sha384"; + } + } + return algorithm; + } + function filterMetadataListByAlgorithm(metadataList, algorithm) { + if (metadataList.length === 1) { + return metadataList; + } + let pos = 0; + for (let i = 0; i < metadataList.length; ++i) { + if (metadataList[i].algo === algorithm) { + metadataList[pos++] = metadataList[i]; + } + } + metadataList.length = pos; + return metadataList; + } + function compareBase64Mixed(actualValue, expectedValue) { + if (actualValue.length !== expectedValue.length) { + return false; + } + for (let i = 0; i < actualValue.length; ++i) { + if (actualValue[i] !== expectedValue[i]) { + if (actualValue[i] === "+" && expectedValue[i] === "-" || actualValue[i] === "/" && expectedValue[i] === "_") { + continue; + } + return false; + } + } + return true; + } + function tryUpgradeRequestToAPotentiallyTrustworthyURL(request2) { + } + function sameOrigin(A, B) { + if (A.origin === B.origin && A.origin === "null") { + return true; + } + if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { + return true; + } + return false; + } + function createDeferredPromise() { + let res; + let rej; + const promise = new Promise((resolve2, reject) => { + res = resolve2; + rej = reject; + }); + return { promise, resolve: res, reject: rej }; + } + function isAborted(fetchParams) { + return fetchParams.controller.state === "aborted"; + } + function isCancelled(fetchParams) { + return fetchParams.controller.state === "aborted" || fetchParams.controller.state === "terminated"; + } + function normalizeMethod(method) { + return normalizedMethodRecordsBase[method.toLowerCase()] ?? method; + } + function serializeJavascriptValueToJSONString(value) { + const result = JSON.stringify(value); + if (result === void 0) { + throw new TypeError("Value is not JSON serializable"); + } + assert(typeof result === "string"); + return result; + } + var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); + function createIterator(name, kInternalIterator, keyIndex = 0, valueIndex = 1) { + class FastIterableIterator { + /** @type {any} */ + #target; + /** @type {'key' | 'value' | 'key+value'} */ + #kind; + /** @type {number} */ + #index; + /** + * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object + * @param {unknown} target + * @param {'key' | 'value' | 'key+value'} kind + */ + constructor(target, kind) { + this.#target = target; + this.#kind = kind; + this.#index = 0; + } + next() { + if (typeof this !== "object" || this === null || !(#target in this)) { + throw new TypeError( + `'next' called on an object that does not implement interface ${name} Iterator.` + ); + } + const index = this.#index; + const values = this.#target[kInternalIterator]; + const len = values.length; + if (index >= len) { + return { + value: void 0, + done: true + }; + } + const { [keyIndex]: key, [valueIndex]: value } = values[index]; + this.#index = index + 1; + let result; + switch (this.#kind) { + case "key": + result = key; + break; + case "value": + result = value; + break; + case "key+value": + result = [key, value]; + break; + } + return { + value: result, + done: false + }; + } + } + delete FastIterableIterator.prototype.constructor; + Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype); + Object.defineProperties(FastIterableIterator.prototype, { + [Symbol.toStringTag]: { + writable: false, + enumerable: false, + configurable: true, + value: `${name} Iterator` + }, + next: { writable: true, enumerable: true, configurable: true } + }); + return function(target, kind) { + return new FastIterableIterator(target, kind); + }; + } + function iteratorMixin(name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) { + const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex); + const properties = { + keys: { + writable: true, + enumerable: true, + configurable: true, + value: function keys() { + webidl.brandCheck(this, object); + return makeIterator(this, "key"); + } + }, + values: { + writable: true, + enumerable: true, + configurable: true, + value: function values() { + webidl.brandCheck(this, object); + return makeIterator(this, "value"); + } + }, + entries: { + writable: true, + enumerable: true, + configurable: true, + value: function entries() { + webidl.brandCheck(this, object); + return makeIterator(this, "key+value"); + } + }, + forEach: { + writable: true, + enumerable: true, + configurable: true, + value: function forEach(callbackfn, thisArg = globalThis) { + webidl.brandCheck(this, object); + webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`); + if (typeof callbackfn !== "function") { + throw new TypeError( + `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.` + ); + } + for (const { 0: key, 1: value } of makeIterator(this, "key+value")) { + callbackfn.call(thisArg, value, key, this); + } + } + } + }; + return Object.defineProperties(object.prototype, { + ...properties, + [Symbol.iterator]: { + writable: true, + enumerable: false, + configurable: true, + value: properties.entries.value + } + }); + } + async function fullyReadBody(body, processBody, processBodyError) { + const successSteps = processBody; + const errorSteps = processBodyError; + let reader; + try { + reader = body.stream.getReader(); + } catch (e) { + errorSteps(e); + return; + } + try { + successSteps(await readAllBytes(reader)); + } catch (e) { + errorSteps(e); + } + } + function isReadableStreamLike(stream2) { + return stream2 instanceof ReadableStream || stream2[Symbol.toStringTag] === "ReadableStream" && typeof stream2.tee === "function"; + } + function readableStreamClose(controller) { + try { + controller.close(); + controller.byobRequest?.respond(0); + } catch (err) { + if (!err.message.includes("Controller is already closed") && !err.message.includes("ReadableStream is already closed")) { + throw err; + } + } + } + var invalidIsomorphicEncodeValueRegex = /[^\x00-\xFF]/; + function isomorphicEncode(input) { + assert(!invalidIsomorphicEncodeValueRegex.test(input)); + return input; + } + async function readAllBytes(reader) { + const bytes = []; + let byteLength = 0; + while (true) { + const { done, value: chunk } = await reader.read(); + if (done) { + return Buffer.concat(bytes, byteLength); + } + if (!isUint8Array(chunk)) { + throw new TypeError("Received non-Uint8Array chunk"); + } + bytes.push(chunk); + byteLength += chunk.length; + } + } + function urlIsLocal(url) { + assert("protocol" in url); + const protocol = url.protocol; + return protocol === "about:" || protocol === "blob:" || protocol === "data:"; + } + function urlHasHttpsScheme(url) { + return typeof url === "string" && url[5] === ":" && url[0] === "h" && url[1] === "t" && url[2] === "t" && url[3] === "p" && url[4] === "s" || url.protocol === "https:"; + } + function urlIsHttpHttpsScheme(url) { + assert("protocol" in url); + const protocol = url.protocol; + return protocol === "http:" || protocol === "https:"; + } + function simpleRangeHeaderValue(value, allowWhitespace) { + const data = value; + if (!data.startsWith("bytes")) { + return "failure"; + } + const position = { position: 5 }; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + if (data.charCodeAt(position.position) !== 61) { + return "failure"; + } + position.position++; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + const rangeStart = collectASequenceOfCodePoints( + (char) => { + const code = char.charCodeAt(0); + return code >= 48 && code <= 57; + }, + data, + position + ); + const rangeStartValue = rangeStart.length ? Number(rangeStart) : null; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + if (data.charCodeAt(position.position) !== 45) { + return "failure"; + } + position.position++; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + const rangeEnd = collectASequenceOfCodePoints( + (char) => { + const code = char.charCodeAt(0); + return code >= 48 && code <= 57; + }, + data, + position + ); + const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null; + if (position.position < data.length) { + return "failure"; + } + if (rangeEndValue === null && rangeStartValue === null) { + return "failure"; + } + if (rangeStartValue > rangeEndValue) { + return "failure"; + } + return { rangeStartValue, rangeEndValue }; + } + function buildContentRange(rangeStart, rangeEnd, fullLength) { + let contentRange = "bytes "; + contentRange += isomorphicEncode(`${rangeStart}`); + contentRange += "-"; + contentRange += isomorphicEncode(`${rangeEnd}`); + contentRange += "/"; + contentRange += isomorphicEncode(`${fullLength}`); + return contentRange; + } + var InflateStream = class extends Transform { + #zlibOptions; + /** @param {zlib.ZlibOptions} [zlibOptions] */ + constructor(zlibOptions) { + super(); + this.#zlibOptions = zlibOptions; + } + _transform(chunk, encoding, callback) { + if (!this._inflateStream) { + if (chunk.length === 0) { + callback(); + return; + } + this._inflateStream = (chunk[0] & 15) === 8 ? zlib.createInflate(this.#zlibOptions) : zlib.createInflateRaw(this.#zlibOptions); + this._inflateStream.on("data", this.push.bind(this)); + this._inflateStream.on("end", () => this.push(null)); + this._inflateStream.on("error", (err) => this.destroy(err)); + } + this._inflateStream.write(chunk, encoding, callback); + } + _final(callback) { + if (this._inflateStream) { + this._inflateStream.end(); + this._inflateStream = null; + } + callback(); + } + }; + function createInflate(zlibOptions) { + return new InflateStream(zlibOptions); + } + function extractMimeType(headers) { + let charset = null; + let essence = null; + let mimeType = null; + const values = getDecodeSplit("content-type", headers); + if (values === null) { + return "failure"; + } + for (const value of values) { + const temporaryMimeType = parseMIMEType(value); + if (temporaryMimeType === "failure" || temporaryMimeType.essence === "*/*") { + continue; + } + mimeType = temporaryMimeType; + if (mimeType.essence !== essence) { + charset = null; + if (mimeType.parameters.has("charset")) { + charset = mimeType.parameters.get("charset"); + } + essence = mimeType.essence; + } else if (!mimeType.parameters.has("charset") && charset !== null) { + mimeType.parameters.set("charset", charset); + } + } + if (mimeType == null) { + return "failure"; + } + return mimeType; + } + function gettingDecodingSplitting(value) { + const input = value; + const position = { position: 0 }; + const values = []; + let temporaryValue = ""; + while (position.position < input.length) { + temporaryValue += collectASequenceOfCodePoints( + (char) => char !== '"' && char !== ",", + input, + position + ); + if (position.position < input.length) { + if (input.charCodeAt(position.position) === 34) { + temporaryValue += collectAnHTTPQuotedString( + input, + position + ); + if (position.position < input.length) { + continue; + } + } else { + assert(input.charCodeAt(position.position) === 44); + position.position++; + } + } + temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 9 || char === 32); + values.push(temporaryValue); + temporaryValue = ""; + } + return values; + } + function getDecodeSplit(name, list) { + const value = list.get(name, true); + if (value === null) { + return null; + } + return gettingDecodingSplitting(value); + } + var textDecoder = new TextDecoder(); + function utf8DecodeBytes(buffer) { + if (buffer.length === 0) { + return ""; + } + if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) { + buffer = buffer.subarray(3); + } + const output = textDecoder.decode(buffer); + return output; + } + var EnvironmentSettingsObjectBase = class { + get baseUrl() { + return getGlobalOrigin(); + } + get origin() { + return this.baseUrl?.origin; + } + policyContainer = makePolicyContainer(); + }; + var EnvironmentSettingsObject = class { + settingsObject = new EnvironmentSettingsObjectBase(); + }; + var environmentSettingsObject = new EnvironmentSettingsObject(); + module2.exports = { + isAborted, + isCancelled, + isValidEncodedURL, + createDeferredPromise, + ReadableStreamFrom, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + clampAndCoarsenConnectionTimingInfo, + coarsenedSharedCurrentTime, + determineRequestsReferrer, + makePolicyContainer, + clonePolicyContainer, + appendFetchMetadata, + appendRequestOriginHeader, + TAOCheck, + corsCheck, + crossOriginResourcePolicyCheck, + createOpaqueTimingInfo, + setRequestReferrerPolicyOnRedirect, + isValidHTTPToken, + requestBadPort, + requestCurrentURL, + responseURL, + responseLocationURL, + isBlobLike, + isURLPotentiallyTrustworthy, + isValidReasonPhrase, + sameOrigin, + normalizeMethod, + serializeJavascriptValueToJSONString, + iteratorMixin, + createIterator, + isValidHeaderName, + isValidHeaderValue, + isErrorLike, + fullyReadBody, + bytesMatch, + isReadableStreamLike, + readableStreamClose, + isomorphicEncode, + urlIsLocal, + urlHasHttpsScheme, + urlIsHttpHttpsScheme, + readAllBytes, + simpleRangeHeaderValue, + buildContentRange, + parseMetadata, + createInflate, + extractMimeType, + getDecodeSplit, + utf8DecodeBytes, + environmentSettingsObject + }; + } +}); + +// node_modules/undici/lib/web/fetch/symbols.js +var require_symbols2 = __commonJS({ + "node_modules/undici/lib/web/fetch/symbols.js"(exports2, module2) { + "use strict"; + module2.exports = { + kUrl: /* @__PURE__ */ Symbol("url"), + kHeaders: /* @__PURE__ */ Symbol("headers"), + kSignal: /* @__PURE__ */ Symbol("signal"), + kState: /* @__PURE__ */ Symbol("state"), + kDispatcher: /* @__PURE__ */ Symbol("dispatcher") + }; + } +}); + +// node_modules/undici/lib/web/fetch/file.js +var require_file = __commonJS({ + "node_modules/undici/lib/web/fetch/file.js"(exports2, module2) { + "use strict"; + var { Blob: Blob2, File } = require("node:buffer"); + var { kState } = require_symbols2(); + var { webidl } = require_webidl(); + var FileLike = class _FileLike { + constructor(blobLike, fileName, options = {}) { + const n = fileName; + const t = options.type; + const d = options.lastModified ?? Date.now(); + this[kState] = { + blobLike, + name: n, + type: t, + lastModified: d + }; + } + stream(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.stream(...args); + } + arrayBuffer(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.arrayBuffer(...args); + } + slice(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.slice(...args); + } + text(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.text(...args); + } + get size() { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.size; + } + get type() { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.type; + } + get name() { + webidl.brandCheck(this, _FileLike); + return this[kState].name; + } + get lastModified() { + webidl.brandCheck(this, _FileLike); + return this[kState].lastModified; + } + get [Symbol.toStringTag]() { + return "File"; + } + }; + webidl.converters.Blob = webidl.interfaceConverter(Blob2); + function isFileLike(object) { + return object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File"; + } + module2.exports = { FileLike, isFileLike }; + } +}); + +// node_modules/undici/lib/web/fetch/formdata.js +var require_formdata = __commonJS({ + "node_modules/undici/lib/web/fetch/formdata.js"(exports2, module2) { + "use strict"; + var { isBlobLike, iteratorMixin } = require_util2(); + var { kState } = require_symbols2(); + var { kEnumerableProperty } = require_util(); + var { FileLike, isFileLike } = require_file(); + var { webidl } = require_webidl(); + var { File: NativeFile } = require("node:buffer"); + var nodeUtil = require("node:util"); + var File = globalThis.File ?? NativeFile; + var FormData = class _FormData { + constructor(form) { + webidl.util.markAsUncloneable(this); + if (form !== void 0) { + throw webidl.errors.conversionFailed({ + prefix: "FormData constructor", + argument: "Argument 1", + types: ["undefined"] + }); + } + this[kState] = []; + } + append(name, value, filename = void 0) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.append"; + webidl.argumentLengthCheck(arguments, 2, prefix); + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" + ); + } + name = webidl.converters.USVString(name, prefix, "name"); + value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "value", { strict: false }) : webidl.converters.USVString(value, prefix, "value"); + filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "filename") : void 0; + const entry = makeEntry(name, value, filename); + this[kState].push(entry); + } + delete(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + this[kState] = this[kState].filter((entry) => entry.name !== name); + } + get(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.get"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + const idx = this[kState].findIndex((entry) => entry.name === name); + if (idx === -1) { + return null; + } + return this[kState][idx].value; + } + getAll(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.getAll"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value); + } + has(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.has"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + return this[kState].findIndex((entry) => entry.name === name) !== -1; + } + set(name, value, filename = void 0) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.set"; + webidl.argumentLengthCheck(arguments, 2, prefix); + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" + ); + } + name = webidl.converters.USVString(name, prefix, "name"); + value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "name", { strict: false }) : webidl.converters.USVString(value, prefix, "name"); + filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "name") : void 0; + const entry = makeEntry(name, value, filename); + const idx = this[kState].findIndex((entry2) => entry2.name === name); + if (idx !== -1) { + this[kState] = [ + ...this[kState].slice(0, idx), + entry, + ...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name) + ]; + } else { + this[kState].push(entry); + } + } + [nodeUtil.inspect.custom](depth, options) { + const state = this[kState].reduce((a, b) => { + if (a[b.name]) { + if (Array.isArray(a[b.name])) { + a[b.name].push(b.value); + } else { + a[b.name] = [a[b.name], b.value]; + } + } else { + a[b.name] = b.value; + } + return a; + }, { __proto__: null }); + options.depth ??= depth; + options.colors ??= true; + const output = nodeUtil.formatWithOptions(options, state); + return `FormData ${output.slice(output.indexOf("]") + 2)}`; + } + }; + iteratorMixin("FormData", FormData, kState, "name", "value"); + Object.defineProperties(FormData.prototype, { + append: kEnumerableProperty, + delete: kEnumerableProperty, + get: kEnumerableProperty, + getAll: kEnumerableProperty, + has: kEnumerableProperty, + set: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "FormData", + configurable: true + } + }); + function makeEntry(name, value, filename) { + if (typeof value === "string") { + } else { + if (!isFileLike(value)) { + value = value instanceof Blob ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type }); + } + if (filename !== void 0) { + const options = { + type: value.type, + lastModified: value.lastModified + }; + value = value instanceof NativeFile ? new File([value], filename, options) : new FileLike(value, filename, options); + } + } + return { name, value }; + } + module2.exports = { FormData, makeEntry }; + } +}); + +// node_modules/undici/lib/web/fetch/formdata-parser.js +var require_formdata_parser = __commonJS({ + "node_modules/undici/lib/web/fetch/formdata-parser.js"(exports2, module2) { + "use strict"; + var { isUSVString, bufferToLowerCasedHeaderName } = require_util(); + var { utf8DecodeBytes } = require_util2(); + var { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require_data_url(); + var { isFileLike } = require_file(); + var { makeEntry } = require_formdata(); + var assert = require("node:assert"); + var { File: NodeFile } = require("node:buffer"); + var File = globalThis.File ?? NodeFile; + var formDataNameBuffer = Buffer.from('form-data; name="'); + var filenameBuffer = Buffer.from("; filename"); + var dd = Buffer.from("--"); + var ddcrlf = Buffer.from("--\r\n"); + function isAsciiString(chars) { + for (let i = 0; i < chars.length; ++i) { + if ((chars.charCodeAt(i) & ~127) !== 0) { + return false; + } + } + return true; + } + function validateBoundary(boundary) { + const length = boundary.length; + if (length < 27 || length > 70) { + return false; + } + for (let i = 0; i < length; ++i) { + const cp2 = boundary.charCodeAt(i); + if (!(cp2 >= 48 && cp2 <= 57 || cp2 >= 65 && cp2 <= 90 || cp2 >= 97 && cp2 <= 122 || cp2 === 39 || cp2 === 45 || cp2 === 95)) { + return false; + } + } + return true; + } + function multipartFormDataParser(input, mimeType) { + assert(mimeType !== "failure" && mimeType.essence === "multipart/form-data"); + const boundaryString = mimeType.parameters.get("boundary"); + if (boundaryString === void 0) { + return "failure"; + } + const boundary = Buffer.from(`--${boundaryString}`, "utf8"); + const entryList = []; + const position = { position: 0 }; + while (input[position.position] === 13 && input[position.position + 1] === 10) { + position.position += 2; + } + let trailing = input.length; + while (input[trailing - 1] === 10 && input[trailing - 2] === 13) { + trailing -= 2; + } + if (trailing !== input.length) { + input = input.subarray(0, trailing); + } + while (true) { + if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) { + position.position += boundary.length; + } else { + return "failure"; + } + if (position.position === input.length - 2 && bufferStartsWith(input, dd, position) || position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position)) { + return entryList; + } + if (input[position.position] !== 13 || input[position.position + 1] !== 10) { + return "failure"; + } + position.position += 2; + const result = parseMultipartFormDataHeaders(input, position); + if (result === "failure") { + return "failure"; + } + let { name, filename, contentType, encoding } = result; + position.position += 2; + let body; + { + const boundaryIndex = input.indexOf(boundary.subarray(2), position.position); + if (boundaryIndex === -1) { + return "failure"; + } + body = input.subarray(position.position, boundaryIndex - 4); + position.position += body.length; + if (encoding === "base64") { + body = Buffer.from(body.toString(), "base64"); + } + } + if (input[position.position] !== 13 || input[position.position + 1] !== 10) { + return "failure"; + } else { + position.position += 2; + } + let value; + if (filename !== null) { + contentType ??= "text/plain"; + if (!isAsciiString(contentType)) { + contentType = ""; + } + value = new File([body], filename, { type: contentType }); + } else { + value = utf8DecodeBytes(Buffer.from(body)); + } + assert(isUSVString(name)); + assert(typeof value === "string" && isUSVString(value) || isFileLike(value)); + entryList.push(makeEntry(name, value, filename)); + } + } + function parseMultipartFormDataHeaders(input, position) { + let name = null; + let filename = null; + let contentType = null; + let encoding = null; + while (true) { + if (input[position.position] === 13 && input[position.position + 1] === 10) { + if (name === null) { + return "failure"; + } + return { name, filename, contentType, encoding }; + } + let headerName = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13 && char !== 58, + input, + position + ); + headerName = removeChars(headerName, true, true, (char) => char === 9 || char === 32); + if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) { + return "failure"; + } + if (input[position.position] !== 58) { + return "failure"; + } + position.position++; + collectASequenceOfBytes( + (char) => char === 32 || char === 9, + input, + position + ); + switch (bufferToLowerCasedHeaderName(headerName)) { + case "content-disposition": { + name = filename = null; + if (!bufferStartsWith(input, formDataNameBuffer, position)) { + return "failure"; + } + position.position += 17; + name = parseMultipartFormDataName(input, position); + if (name === null) { + return "failure"; + } + if (bufferStartsWith(input, filenameBuffer, position)) { + let check = position.position + filenameBuffer.length; + if (input[check] === 42) { + position.position += 1; + check += 1; + } + if (input[check] !== 61 || input[check + 1] !== 34) { + return "failure"; + } + position.position += 12; + filename = parseMultipartFormDataName(input, position); + if (filename === null) { + return "failure"; + } + } + break; + } + case "content-type": { + let headerValue = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); + contentType = isomorphicDecode(headerValue); + break; + } + case "content-transfer-encoding": { + let headerValue = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); + encoding = isomorphicDecode(headerValue); + break; + } + default: { + collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + } + } + if (input[position.position] !== 13 && input[position.position + 1] !== 10) { + return "failure"; + } else { + position.position += 2; + } + } + } + function parseMultipartFormDataName(input, position) { + assert(input[position.position - 1] === 34); + let name = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13 && char !== 34, + input, + position + ); + if (input[position.position] !== 34) { + return null; + } else { + position.position++; + } + name = new TextDecoder().decode(name).replace(/%0A/ig, "\n").replace(/%0D/ig, "\r").replace(/%22/g, '"'); + return name; + } + function collectASequenceOfBytes(condition, input, position) { + let start = position.position; + while (start < input.length && condition(input[start])) { + ++start; + } + return input.subarray(position.position, position.position = start); + } + function removeChars(buf, leading, trailing, predicate) { + let lead = 0; + let trail = buf.length - 1; + if (leading) { + while (lead < buf.length && predicate(buf[lead])) lead++; + } + if (trailing) { + while (trail > 0 && predicate(buf[trail])) trail--; + } + return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1); + } + function bufferStartsWith(buffer, start, position) { + if (buffer.length < start.length) { + return false; + } + for (let i = 0; i < start.length; i++) { + if (start[i] !== buffer[position.position + i]) { + return false; + } + } + return true; + } + module2.exports = { + multipartFormDataParser, + validateBoundary + }; + } +}); + +// node_modules/undici/lib/web/fetch/body.js +var require_body = __commonJS({ + "node_modules/undici/lib/web/fetch/body.js"(exports2, module2) { + "use strict"; + var util2 = require_util(); + var { + ReadableStreamFrom, + isBlobLike, + isReadableStreamLike, + readableStreamClose, + createDeferredPromise, + fullyReadBody, + extractMimeType, + utf8DecodeBytes + } = require_util2(); + var { FormData } = require_formdata(); + var { kState } = require_symbols2(); + var { webidl } = require_webidl(); + var { Blob: Blob2 } = require("node:buffer"); + var assert = require("node:assert"); + var { isErrored, isDisturbed } = require("node:stream"); + var { isArrayBuffer } = require("node:util/types"); + var { serializeAMimeType } = require_data_url(); + var { multipartFormDataParser } = require_formdata_parser(); + var random; + try { + const crypto2 = require("node:crypto"); + random = (max) => crypto2.randomInt(0, max); + } catch { + random = (max) => Math.floor(Math.random(max)); + } + var textEncoder = new TextEncoder(); + function noop3() { + } + var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0; + var streamRegistry; + if (hasFinalizationRegistry) { + streamRegistry = new FinalizationRegistry((weakRef) => { + const stream2 = weakRef.deref(); + if (stream2 && !stream2.locked && !isDisturbed(stream2) && !isErrored(stream2)) { + stream2.cancel("Response object has been garbage collected").catch(noop3); + } + }); + } + function extractBody(object, keepalive = false) { + let stream2 = null; + if (object instanceof ReadableStream) { + stream2 = object; + } else if (isBlobLike(object)) { + stream2 = object.stream(); + } else { + stream2 = new ReadableStream({ + async pull(controller) { + const buffer = typeof source === "string" ? textEncoder.encode(source) : source; + if (buffer.byteLength) { + controller.enqueue(buffer); + } + queueMicrotask(() => readableStreamClose(controller)); + }, + start() { + }, + type: "bytes" + }); + } + assert(isReadableStreamLike(stream2)); + let action = null; + let source = null; + let length = null; + let type = null; + if (typeof object === "string") { + source = object; + type = "text/plain;charset=UTF-8"; + } else if (object instanceof URLSearchParams) { + source = object.toString(); + type = "application/x-www-form-urlencoded;charset=UTF-8"; + } else if (isArrayBuffer(object)) { + source = new Uint8Array(object.slice()); + } else if (ArrayBuffer.isView(object)) { + source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)); + } else if (util2.isFormDataLike(object)) { + const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, "0")}`; + const prefix = `--${boundary}\r +Content-Disposition: form-data`; + const escape = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22"); + const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, "\r\n"); + const blobParts = []; + const rn = new Uint8Array([13, 10]); + length = 0; + let hasUnknownSizeValue = false; + for (const [name, value] of object) { + if (typeof value === "string") { + const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r \r -`);u.push(f,Q,E),typeof Q.size=="number"?o+=f.byteLength+Q.size+E.byteLength:h=!0}let C=xo.encode(`--${a}--\r -`);u.push(C),o+=C.byteLength,h&&(o=null),s=t,A=async function*(){for(let I of u)I.stream?yield*I.stream():yield I},n=`multipart/form-data; boundary=${a}`}else if(Jh(t))s=t,o=t.size,t.type&&(n=t.type);else if(typeof t[Symbol.asyncIterator]=="function"){if(e)throw new TypeError("keepalive");if(cs.isDisturbed(t)||t.locked)throw new TypeError("Response body object should not be disturbed or locked");r=t instanceof ReadableStream?t:hT(t)}if((typeof s=="string"||cs.isBuffer(s))&&(o=Buffer.byteLength(s)),A!=null){let a;r=new ReadableStream({async start(){a=A(t)[Symbol.asyncIterator]()},async pull(c){let{value:g,done:l}=await a.next();if(l)queueMicrotask(()=>{c.close(),c.byobRequest?.respond(0)});else if(!qh(r)){let u=new Uint8Array(g);u.byteLength&&c.enqueue(u)}return c.desiredSize>0},async cancel(c){await a.return()},type:"bytes"})}return[{stream:r,source:s,length:o},n]}function TT(t,e=!1){return t instanceof ReadableStream&&($a(!cs.isDisturbed(t),"The body has already been consumed."),$a(!t.locked,"The stream is locked.")),Zh(t,e)}function bT(t,e){let[r,A]=e.stream.tee();return e.stream=r,{stream:A,length:e.length,source:e.source}}function kT(t){if(t.aborted)throw new DOMException("The operation was aborted.","AbortError")}function FT(t){return{blob(){return iA(this,r=>{let A=Hh(this);return A===null?A="":A&&(A=yT(A)),new pT([r],{type:A})},t)},arrayBuffer(){return iA(this,r=>new Uint8Array(r).buffer,t)},text(){return iA(this,Vh,t)},json(){return iA(this,NT,t)},formData(){return iA(this,r=>{let A=Hh(this);if(A!==null)switch(A.essence){case"multipart/form-data":{let s=RT(r,A);if(s==="failure")throw new TypeError("Failed to parse body as FormData.");let o=new Ph;return o[aA]=s,o}case"application/x-www-form-urlencoded":{let s=new URLSearchParams(r.toString()),o=new Ph;for(let[n,i]of s)o.append(n,i);return o}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')},t)},bytes(){return iA(this,r=>new Uint8Array(r),t)}}}function ST(t){Object.assign(t.prototype,FT(t))}async function iA(t,e,r){if(fT.brandCheck(t,r),jh(t))throw new TypeError("Body is unusable: Body has already been read");kT(t[aA]);let A=IT(),s=n=>A.reject(n),o=n=>{try{A.resolve(e(n))}catch(i){s(i)}};return t[aA].body==null?(o(Buffer.allocUnsafe(0)),A.promise):(await CT(t[aA].body,o,s),A.promise)}function jh(t){let e=t[aA].body;return e!=null&&(e.stream.locked||cs.isDisturbed(e.stream))}function NT(t){return JSON.parse(Vh(t))}function Hh(t){let e=t[aA].headersList,r=dT(e);return r==="failure"?null:r}Kh.exports={extractBody:Zh,safelyExtractBody:TT,cloneBody:bT,mixinBody:ST,streamRegistry:zh,hasFinalizationRegistry:Wh,bodyUnusable:jh}});var EQ=B((OJ,uQ)=>{"use strict";var b=require("node:assert"),F=M(),{channels:Xh}=jr(),tc=Ma(),{RequestContentLengthMismatchError:dr,ResponseContentLengthMismatchError:$h,RequestAbortedError:iQ,InvalidArgumentError:UT,HeadersTimeoutError:GT,HeadersOverflowError:LT,SocketError:gA,InformationalError:lA,BodyTimeoutError:MT,HTTPParserError:vT,ResponseExceededMaxSizeError:xT}=Y(),{kUrl:aQ,kReset:be,kClient:Jo,kParser:j,kBlocking:us,kRunning:ce,kPending:cQ,kSize:eQ,kWriting:Ht,kQueue:et,kNoRef:gs,kKeepAliveDefaultTimeout:OT,kHostHeader:YT,kPendingIdx:_T,kRunningIdx:Ve,kError:pe,kPipelining:Po,kSocket:pr,kKeepAliveTimeoutValue:Vo,kMaxHeadersSize:rc,kKeepAliveMaxTimeout:JT,kKeepAliveTimeoutThreshold:PT,kHeadersTimeout:HT,kBodyTimeout:VT,kStrictContentLength:oc,kMaxRequests:tQ,kCounter:qT,kMaxResponseSize:WT,kOnError:rQ,kResume:Ft,kHTTPContext:gQ}=$(),Le=zE(),AQ=Buffer.alloc(0),Oo=Buffer[Symbol.species],Yo=F.addListener,zT=F.removeAllListeners,mr=Symbol("kIdleSocketValidation"),fr=Symbol("kIdleSocketValidationTimeout"),cc=Symbol("kSocketUsed"),Ac;async function ZT(){let t=process.env.JEST_WORKER_ID?Oa():void 0,e;try{e=await WebAssembly.compile(KE())}catch{e=await WebAssembly.compile(t||Oa())}return await WebAssembly.instantiate(e,{env:{wasm_on_url:(r,A,s)=>0,wasm_on_status:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onStatus(new Oo(ht.buffer,o,s))||0},wasm_on_message_begin:r=>(b(se.ptr===r),se.onMessageBegin()||0),wasm_on_header_field:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderField(new Oo(ht.buffer,o,s))||0},wasm_on_header_value:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onHeaderValue(new Oo(ht.buffer,o,s))||0},wasm_on_headers_complete:(r,A,s,o)=>(b(se.ptr===r),se.onHeadersComplete(A,!!s,!!o)||0),wasm_on_body:(r,A,s)=>{b(se.ptr===r);let o=A-Qt+ht.byteOffset;return se.onBody(new Oo(ht.buffer,o,s))||0},wasm_on_message_complete:r=>(b(se.ptr===r),se.onMessageComplete()||0)}})}var sc=null,nc=ZT();nc.catch();var se=null,ht=null,_o=0,Qt=null,jT=0,ls=1,uA=2|ls,Ho=4|ls,ic=8|jT,ac=class{constructor(e,r,{exports:A}){b(Number.isFinite(e[rc])&&e[rc]>0),this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Le.TYPE.RESPONSE),this.client=e,this.socket=r,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[rc],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[WT]}setTimeout(e,r){e!==this.timeoutValue||r&ls^this.timeoutType&ls?(this.timeout&&(tc.clearTimeout(this.timeout),this.timeout=null),e&&(r&ls?this.timeout=tc.setFastTimeout(sQ,e,new WeakRef(this)):(this.timeout=setTimeout(sQ,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=r}resume(){this.socket.destroyed||!this.paused||(b(this.ptr!=null),b(se==null),this.llhttp.llhttp_resume(this.ptr),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||AQ),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){b(this.ptr!=null),b(se==null),b(!this.paused);let{socket:r,llhttp:A}=this;e.length>_o&&(Qt&&A.free(Qt),_o=Math.ceil(e.length/4096)*4096,Qt=A.malloc(_o)),new Uint8Array(A.memory.buffer,Qt,_o).set(e);try{let s;try{ht=e,se=this,s=A.llhttp_execute(this.ptr,Qt,e.length)}catch(n){throw n}finally{se=null,ht=null}let o=A.llhttp_get_error_pos(this.ptr)-Qt;if(s!==Le.ERROR.OK){let n=e.subarray(o);if(s===Le.ERROR.PAUSED_UPGRADE)this.onUpgrade(n);else if(s===Le.ERROR.PAUSED)this.paused=!0,r.unshift(n);else throw this.createError(s,n)}}catch(s){F.destroy(r,s)}}finish(){b(se===null),b(this.ptr!=null),b(!this.paused);let{llhttp:e}=this,r;try{se=this,r=e.llhttp_finish(this.ptr)}finally{se=null}return r===Le.ERROR.OK?null:r===Le.ERROR.PAUSED||r===Le.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,AQ)}createError(e,r){let{llhttp:A,contentLength:s,bytesRead:o}=this;if(s&&o!==parseInt(s,10))return new $h;let n=A.llhttp_get_error_reason(this.ptr),i="";if(n){let a=new Uint8Array(A.memory.buffer,n).indexOf(0);i="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,n,a).toString()+")"}return new vT(i,Le.ERROR[e],r)}destroy(){b(this.ptr!=null),b(se==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&tc.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:r}=this;if(e.destroyed)return-1;if(r[ce]===0)return F.destroy(e,new gA("bad response",F.getSocketInfo(e))),-1;let A=r[et][r[Ve]];if(!A)return-1;A.onResponseStarted()}onHeaderField(e){let r=this.headers.length;(r&1)===0?this.headers.push(e):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]),this.trackHeader(e.length)}onHeaderValue(e){let r=this.headers.length;(r&1)===1?(this.headers.push(e),r+=1):this.headers[r-1]=Buffer.concat([this.headers[r-1],e]);let A=this.headers[r-2];if(A.length===10){let s=F.bufferToLowerCasedHeaderName(A);s==="keep-alive"?this.keepAlive+=e.toString():s==="connection"&&(this.connection+=e.toString())}else A.length===14&&F.bufferToLowerCasedHeaderName(A)==="content-length"&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&F.destroy(this.socket,new LT)}onUpgrade(e){let{upgrade:r,client:A,socket:s,headers:o,statusCode:n}=this;b(r),b(A[pr]===s),b(!s.destroyed),b(!this.paused),b((o.length&1)===0);let i=A[et][A[Ve]];b(i),b(i.upgrade||i.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,s.unshift(e),s[j].destroy(),s[j]=null,s[Jo]=null,s[pe]=null,zT(s),A[pr]=null,A[gQ]=null,A[et][A[Ve]++]=null,A.emit("disconnect",A[aQ],[A],new lA("upgrade"));try{i.onUpgrade(n,o,s)}catch(a){F.destroy(s,a)}A[Ft]()}onHeadersComplete(e,r,A){let{client:s,socket:o,headers:n,statusText:i}=this;if(o.destroyed)return-1;if(s[ce]===0)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;let a=s[et][s[Ve]];if(!a)return-1;if(b(!this.upgrade),b(this.statusCode<200),e===100)return F.destroy(o,new gA("bad response",F.getSocketInfo(o))),-1;if(r&&!a.upgrade)return F.destroy(o,new gA("bad upgrade",F.getSocketInfo(o))),-1;if(b(this.timeoutType===uA),this.statusCode=e,this.shouldKeepAlive=A||a.method==="HEAD"&&!o[be]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let g=a.bodyTimeout!=null?a.bodyTimeout:s[VT];this.setTimeout(g,Ho)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(a.method==="CONNECT")return b(s[ce]===1),this.upgrade=!0,2;if(r)return b(s[ce]===1),this.upgrade=!0,2;if(b((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&s[Po]){let g=this.keepAlive?F.parseKeepAliveTimeout(this.keepAlive):null;if(g!=null){let l=Math.min(g-s[PT],s[JT]);l<=0?o[be]=!0:s[Vo]=l}else s[Vo]=s[OT]}else o[be]=!0;let c=a.onHeaders(e,n,this.resume,i)===!1;return a.aborted?-1:a.method==="HEAD"||e<200?1:(o[us]&&(o[us]=!1,s[Ft]()),c?Le.ERROR.PAUSED:0)}onBody(e){let{client:r,socket:A,statusCode:s,maxResponseSize:o}=this;if(A.destroyed)return-1;let n=r[et][r[Ve]];if(b(n),b(this.timeoutType===Ho),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),b(s>=200),o>-1&&this.bytesRead+e.length>o)return F.destroy(A,new xT),-1;if(this.bytesRead+=e.length,n.onData(e)===!1)return Le.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:r,statusCode:A,upgrade:s,headers:o,contentLength:n,bytesRead:i,shouldKeepAlive:a}=this;if(r.destroyed&&(!A||a))return-1;if(s)return;b(A>=100),b((this.headers.length&1)===0);let c=e[et][e[Ve]];if(b(c),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,!(A<200)){if(c.method!=="HEAD"&&n&&i!==parseInt(n,10))return F.destroy(r,new $h),-1;if(c.onComplete(o),e[et][e[Ve]++]=null,r[cc]=!0,r[Ht])return b(e[ce]===0),F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;if(a){if(r[be]&&e[ce]===0)return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED;e[Po]==null||e[Po]===1?setImmediate(()=>e[Ft]()):e[Ft]()}else return F.destroy(r,new lA("reset")),Le.ERROR.PAUSED}}};function sQ(t){let{socket:e,timeoutType:r,client:A,paused:s}=t.deref();r===uA?(!e[Ht]||e.writableNeedDrain||A[ce]>1)&&(b(!s,"cannot be paused while waiting for headers"),F.destroy(e,new GT)):r===Ho?s||F.destroy(e,new MT):r===ic&&(b(A[ce]===0&&A[Vo]),F.destroy(e,new lA("socket idle timeout")))}async function KT(t,e){t[pr]=e,sc||(sc=await nc,nc=null),e[gs]=!1,e[Ht]=!1,e[be]=!1,e[us]=!1,e[mr]=0,e[fr]=null,e[cc]=!1,e[j]=new ac(t,e,sc),Yo(e,"error",function(A){b(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let s=this[j];if(A.code==="ECONNRESET"&&s.statusCode&&!s.shouldKeepAlive){let o=s.finish();o&&(this[pe]=o,this[Jo][rQ](o));return}this[pe]=A,this[Jo][rQ](A)}),Yo(e,"readable",function(){let A=this[j];A&&A.readMore()}),Yo(e,"end",function(){let A=this[j];if(A.statusCode&&!A.shouldKeepAlive){let s=A.finish();s&&F.destroy(this,s);return}F.destroy(this,new gA("other side closed",F.getSocketInfo(this)))}),Yo(e,"close",function(){let A=this[Jo],s=this[j];lQ(this),s&&(!this[pe]&&s.statusCode&&!s.shouldKeepAlive&&(this[pe]=s.finish()||this[pe]),this[j].destroy(),this[j]=null);let o=this[pe]||new gA("closed",F.getSocketInfo(this));if(A[pr]=null,A[gQ]=null,A.destroyed){b(A[cQ]===0);let n=A[et].splice(A[Ve]);for(let i=0;i0&&o.code!=="UND_ERR_INFO"){let n=A[et][A[Ve]];A[et][A[Ve]++]=null,F.errorRequest(A,n,o)}A[_T]=A[Ve],b(A[ce]===0),A.emit("disconnect",A[aQ],[A],o),A[Ft]()});let r=!1;return e.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...A){return tb(t,...A)},resume(){$T(t)},destroy(A,s){r?queueMicrotask(s):e.destroy(A).on("close",s)},get destroyed(){return e.destroyed},busy(A){return!!(e[Ht]||e[be]||e[us]||e[mr]===1||A&&(t[ce]>0&&!A.idempotent||t[ce]>0&&(A.upgrade||A.method==="CONNECT")||t[ce]>0&&F.bodyLength(A.body)!==0&&(F.isStream(A.body)||F.isAsyncIterable(A.body)||F.isFormDataLike(A.body))))}}}function lQ(t){t[fr]&&(clearTimeout(t[fr]),t[fr]=null),t[mr]=0}function XT(t,e){e[mr]=1,e[fr]=setTimeout(()=>{e[fr]=null,e[mr]=2,t[pr]===e&&!e.destroyed&&t[Ft]()},0),e[fr].unref?.()}function $T(t){let e=t[pr];if(e&&!e.destroyed){if(t[eQ]===0?!e[gs]&&e.unref&&(e.unref(),e[gs]=!0):e[gs]&&e.ref&&(e.ref(),e[gs]=!1),t[ce]===0&&t[cQ]>0&&e[cc]){if(e[mr]===0)return XT(t,e),e[j].readMore(),e.destroyed,void 0;if(e[mr]===1)return e[j].readMore(),e.destroyed,void 0}if(t[ce]===0&&(e[j].readMore(),e.destroyed))return;if(t[eQ]===0)e[j].timeoutType!==ic&&e[j].setTimeout(t[Vo],ic);else if(t[ce]>0&&e[j].statusCode<200&&e[j].timeoutType!==uA){let r=t[et][t[Ve]],A=r.headersTimeout!=null?r.headersTimeout:t[HT];e[j].setTimeout(A,uA)}}}function eb(t){return t!=="GET"&&t!=="HEAD"&&t!=="OPTIONS"&&t!=="TRACE"&&t!=="CONNECT"}function tb(t,e){let{method:r,path:A,host:s,upgrade:o,blocking:n,reset:i}=e,{body:a,headers:c,contentLength:g}=e,l=r==="PUT"||r==="POST"||r==="PATCH"||r==="QUERY"||r==="PROPFIND"||r==="PROPPATCH";if(F.isFormDataLike(a)){Ac||(Ac=cA().extractBody);let[I,Q]=Ac(a);e.contentType==null&&c.push("content-type",Q),a=I.stream,g=I.length}else if(F.isBlobLike(a)&&e.contentType==null){let I=a.type;if(I){let Q=`${I}`;if(!F.isValidHeaderValue(Q))return F.errorRequest(t,e,new UT("invalid content-type header")),!1;c.push("content-type",Q)}}a&&typeof a.read=="function"&&a.read(0);let u=F.bodyLength(a);if(g=u??g,g===null&&(g=e.contentLength),g===0&&!l&&(g=null),eb(r)&&g>0&&e.contentLength!==null&&e.contentLength!==g){if(t[oc])return F.errorRequest(t,e,new dr),!1;process.emitWarning(new dr)}let E=t[pr];lQ(E);let h=I=>{e.aborted||e.completed||(F.errorRequest(t,e,I||new iQ),F.destroy(a),F.destroy(E,new lA("aborted")))};try{e.onConnect(h)}catch(I){F.errorRequest(t,e,I)}if(e.aborted)return!1;r==="HEAD"&&(E[be]=!0),(o||r==="CONNECT")&&(E[be]=!0),i!=null&&(E[be]=i),t[tQ]&&E[qT]++>=t[tQ]&&(E[be]=!0),n&&(E[us]=!0);let C=`${r} ${A} HTTP/1.1\r -`;if(typeof s=="string"?C+=`host: ${s}\r -`:C+=t[YT],o?C+=`connection: upgrade\r -upgrade: ${o}\r -`:t[Po]&&!E[be]?C+=`connection: keep-alive\r -`:C+=`connection: close\r -`,Array.isArray(c))for(let I=0;I{e.removeListener("error",E)}),!a){let h=new iQ;queueMicrotask(()=>E(h))}},E=function(h){if(!a){if(a=!0,b(s.destroyed||s[Ht]&&r[ce]<=1),s.off("drain",l).off("error",E),e.removeListener("data",g).removeListener("end",E).removeListener("close",u),!h)try{c.end()}catch(C){h=C}c.destroy(h),h&&(h.code!=="UND_ERR_INFO"||h.message!=="reset")?F.destroy(e,h):F.destroy(e)}};e.on("data",g).on("end",E).on("error",E).on("close",u),e.resume&&e.resume(),s.on("drain",l).on("error",E),e.errorEmitted??e.errored?setImmediate(()=>E(e.errored)):(e.endEmitted??e.readableEnded)&&setImmediate(()=>E(null)),(e.closeEmitted??e.closed)&&setImmediate(u)}function oQ(t,e,r,A,s,o,n,i){try{e?F.isBuffer(e)&&(b(o===e.byteLength,"buffer body must have content length"),s.cork(),s.write(`${n}content-length: ${o}\r +${normalizeLinefeeds(value)}\r +`); + blobParts.push(chunk2); + length += chunk2.byteLength; + } else { + const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r +Content-Type: ${value.type || "application/octet-stream"}\r \r -`,"latin1"),s.write(e),s.uncork(),A.onBodySent(e),!i&&A.reset!==!1&&(s[be]=!0)):o===0?s.write(`${n}content-length: 0\r +`); + blobParts.push(chunk2, value, rn); + if (typeof value.size === "number") { + length += chunk2.byteLength + value.size + rn.byteLength; + } else { + hasUnknownSizeValue = true; + } + } + } + const chunk = textEncoder.encode(`--${boundary}--\r +`); + blobParts.push(chunk); + length += chunk.byteLength; + if (hasUnknownSizeValue) { + length = null; + } + source = object; + action = async function* () { + for (const part of blobParts) { + if (part.stream) { + yield* part.stream(); + } else { + yield part; + } + } + }; + type = `multipart/form-data; boundary=${boundary}`; + } else if (isBlobLike(object)) { + source = object; + length = object.size; + if (object.type) { + type = object.type; + } + } else if (typeof object[Symbol.asyncIterator] === "function") { + if (keepalive) { + throw new TypeError("keepalive"); + } + if (util2.isDisturbed(object) || object.locked) { + throw new TypeError( + "Response body object should not be disturbed or locked" + ); + } + stream2 = object instanceof ReadableStream ? object : ReadableStreamFrom(object); + } + if (typeof source === "string" || util2.isBuffer(source)) { + length = Buffer.byteLength(source); + } + if (action != null) { + let iterator2; + stream2 = new ReadableStream({ + async start() { + iterator2 = action(object)[Symbol.asyncIterator](); + }, + async pull(controller) { + const { value, done } = await iterator2.next(); + if (done) { + queueMicrotask(() => { + controller.close(); + controller.byobRequest?.respond(0); + }); + } else { + if (!isErrored(stream2)) { + const buffer = new Uint8Array(value); + if (buffer.byteLength) { + controller.enqueue(buffer); + } + } + } + return controller.desiredSize > 0; + }, + async cancel(reason) { + await iterator2.return(); + }, + type: "bytes" + }); + } + const body = { stream: stream2, source, length }; + return [body, type]; + } + function safelyExtractBody(object, keepalive = false) { + if (object instanceof ReadableStream) { + assert(!util2.isDisturbed(object), "The body has already been consumed."); + assert(!object.locked, "The stream is locked."); + } + return extractBody(object, keepalive); + } + function cloneBody(instance, body) { + const [out1, out2] = body.stream.tee(); + body.stream = out1; + return { + stream: out2, + length: body.length, + source: body.source + }; + } + function throwIfAborted(state) { + if (state.aborted) { + throw new DOMException("The operation was aborted.", "AbortError"); + } + } + function bodyMixinMethods(instance) { + const methods = { + blob() { + return consumeBody(this, (bytes) => { + let mimeType = bodyMimeType(this); + if (mimeType === null) { + mimeType = ""; + } else if (mimeType) { + mimeType = serializeAMimeType(mimeType); + } + return new Blob2([bytes], { type: mimeType }); + }, instance); + }, + arrayBuffer() { + return consumeBody(this, (bytes) => { + return new Uint8Array(bytes).buffer; + }, instance); + }, + text() { + return consumeBody(this, utf8DecodeBytes, instance); + }, + json() { + return consumeBody(this, parseJSONFromBytes, instance); + }, + formData() { + return consumeBody(this, (value) => { + const mimeType = bodyMimeType(this); + if (mimeType !== null) { + switch (mimeType.essence) { + case "multipart/form-data": { + const parsed = multipartFormDataParser(value, mimeType); + if (parsed === "failure") { + throw new TypeError("Failed to parse body as FormData."); + } + const fd = new FormData(); + fd[kState] = parsed; + return fd; + } + case "application/x-www-form-urlencoded": { + const entries = new URLSearchParams(value.toString()); + const fd = new FormData(); + for (const [name, value2] of entries) { + fd.append(name, value2); + } + return fd; + } + } + } + throw new TypeError( + 'Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".' + ); + }, instance); + }, + bytes() { + return consumeBody(this, (bytes) => { + return new Uint8Array(bytes); + }, instance); + } + }; + return methods; + } + function mixinBody(prototype) { + Object.assign(prototype.prototype, bodyMixinMethods(prototype)); + } + async function consumeBody(object, convertBytesToJSValue, instance) { + webidl.brandCheck(object, instance); + if (bodyUnusable(object)) { + throw new TypeError("Body is unusable: Body has already been read"); + } + throwIfAborted(object[kState]); + const promise = createDeferredPromise(); + const errorSteps = (error2) => promise.reject(error2); + const successSteps = (data) => { + try { + promise.resolve(convertBytesToJSValue(data)); + } catch (e) { + errorSteps(e); + } + }; + if (object[kState].body == null) { + successSteps(Buffer.allocUnsafe(0)); + return promise.promise; + } + await fullyReadBody(object[kState].body, successSteps, errorSteps); + return promise.promise; + } + function bodyUnusable(object) { + const body = object[kState].body; + return body != null && (body.stream.locked || util2.isDisturbed(body.stream)); + } + function parseJSONFromBytes(bytes) { + return JSON.parse(utf8DecodeBytes(bytes)); + } + function bodyMimeType(requestOrResponse) { + const headers = requestOrResponse[kState].headersList; + const mimeType = extractMimeType(headers); + if (mimeType === "failure") { + return null; + } + return mimeType; + } + module2.exports = { + extractBody, + safelyExtractBody, + cloneBody, + mixinBody, + streamRegistry, + hasFinalizationRegistry, + bodyUnusable + }; + } +}); + +// node_modules/undici/lib/dispatcher/client-h1.js +var require_client_h1 = __commonJS({ + "node_modules/undici/lib/dispatcher/client-h1.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var util2 = require_util(); + var { channels } = require_diagnostics(); + var timers = require_timers(); + var { + RequestContentLengthMismatchError, + ResponseContentLengthMismatchError, + RequestAbortedError, + InvalidArgumentError, + HeadersTimeoutError, + HeadersOverflowError, + SocketError, + InformationalError, + BodyTimeoutError, + HTTPParserError, + ResponseExceededMaxSizeError + } = require_errors(); + var { + kUrl, + kReset, + kClient, + kParser, + kBlocking, + kRunning, + kPending, + kSize, + kWriting, + kQueue, + kNoRef, + kKeepAliveDefaultTimeout, + kHostHeader, + kPendingIdx, + kRunningIdx, + kError, + kPipelining, + kSocket, + kKeepAliveTimeoutValue, + kMaxHeadersSize, + kKeepAliveMaxTimeout, + kKeepAliveTimeoutThreshold, + kHeadersTimeout, + kBodyTimeout, + kStrictContentLength, + kMaxRequests, + kCounter, + kMaxResponseSize, + kOnError, + kResume, + kHTTPContext + } = require_symbols(); + var constants3 = require_constants2(); + var EMPTY_BUF = Buffer.alloc(0); + var FastBuffer = Buffer[Symbol.species]; + var addListener = util2.addListener; + var removeAllListeners = util2.removeAllListeners; + var kIdleSocketValidation = /* @__PURE__ */ Symbol("kIdleSocketValidation"); + var kIdleSocketValidationTimeout = /* @__PURE__ */ Symbol("kIdleSocketValidationTimeout"); + var kSocketUsed = /* @__PURE__ */ Symbol("kSocketUsed"); + var extractBody; + async function lazyllhttp() { + const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0; + let mod; + try { + mod = await WebAssembly.compile(require_llhttp_simd_wasm()); + } catch (e) { + mod = await WebAssembly.compile(llhttpWasmData || require_llhttp_wasm()); + } + return await WebAssembly.instantiate(mod, { + env: { + /* eslint-disable camelcase */ + wasm_on_url: (p, at, len) => { + return 0; + }, + wasm_on_status: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_message_begin: (p) => { + assert(currentParser.ptr === p); + return currentParser.onMessageBegin() || 0; + }, + wasm_on_header_field: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_header_value: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { + assert(currentParser.ptr === p); + return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0; + }, + wasm_on_body: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_message_complete: (p) => { + assert(currentParser.ptr === p); + return currentParser.onMessageComplete() || 0; + } + /* eslint-enable camelcase */ + } + }); + } + var llhttpInstance = null; + var llhttpPromise = lazyllhttp(); + llhttpPromise.catch(); + var currentParser = null; + var currentBufferRef = null; + var currentBufferSize = 0; + var currentBufferPtr = null; + var USE_NATIVE_TIMER = 0; + var USE_FAST_TIMER = 1; + var TIMEOUT_HEADERS = 2 | USE_FAST_TIMER; + var TIMEOUT_BODY = 4 | USE_FAST_TIMER; + var TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER; + var Parser = class { + constructor(client, socket, { exports: exports3 }) { + assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0); + this.llhttp = exports3; + this.ptr = this.llhttp.llhttp_alloc(constants3.TYPE.RESPONSE); + this.client = client; + this.socket = socket; + this.timeout = null; + this.timeoutValue = null; + this.timeoutType = null; + this.statusCode = null; + this.statusText = ""; + this.upgrade = false; + this.headers = []; + this.headersSize = 0; + this.headersMaxSize = client[kMaxHeadersSize]; + this.shouldKeepAlive = false; + this.paused = false; + this.resume = this.resume.bind(this); + this.bytesRead = 0; + this.keepAlive = ""; + this.contentLength = ""; + this.connection = ""; + this.maxResponseSize = client[kMaxResponseSize]; + } + setTimeout(delay, type) { + if (delay !== this.timeoutValue || type & USE_FAST_TIMER ^ this.timeoutType & USE_FAST_TIMER) { + if (this.timeout) { + timers.clearTimeout(this.timeout); + this.timeout = null; + } + if (delay) { + if (type & USE_FAST_TIMER) { + this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this)); + } else { + this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this)); + this.timeout.unref(); + } + } + this.timeoutValue = delay; + } else if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + this.timeoutType = type; + } + resume() { + if (this.socket.destroyed || !this.paused) { + return; + } + assert(this.ptr != null); + assert(currentParser == null); + this.llhttp.llhttp_resume(this.ptr); + assert(this.timeoutType === TIMEOUT_BODY); + if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + this.paused = false; + this.execute(this.socket.read() || EMPTY_BUF); + this.readMore(); + } + readMore() { + while (!this.paused && this.ptr) { + const chunk = this.socket.read(); + if (chunk === null) { + break; + } + this.execute(chunk); + } + } + execute(data) { + assert(this.ptr != null); + assert(currentParser == null); + assert(!this.paused); + const { socket, llhttp } = this; + if (data.length > currentBufferSize) { + if (currentBufferPtr) { + llhttp.free(currentBufferPtr); + } + currentBufferSize = Math.ceil(data.length / 4096) * 4096; + currentBufferPtr = llhttp.malloc(currentBufferSize); + } + new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data); + try { + let ret; + try { + currentBufferRef = data; + currentParser = this; + ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length); + } catch (err) { + throw err; + } finally { + currentParser = null; + currentBufferRef = null; + } + const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr; + if (ret !== constants3.ERROR.OK) { + const body = data.subarray(offset); + if (ret === constants3.ERROR.PAUSED_UPGRADE) { + this.onUpgrade(body); + } else if (ret === constants3.ERROR.PAUSED) { + this.paused = true; + socket.unshift(body); + } else { + throw this.createError(ret, body); + } + } + } catch (err) { + util2.destroy(socket, err); + } + } + finish() { + assert(currentParser === null); + assert(this.ptr != null); + assert(!this.paused); + const { llhttp } = this; + let ret; + try { + currentParser = this; + ret = llhttp.llhttp_finish(this.ptr); + } finally { + currentParser = null; + } + if (ret === constants3.ERROR.OK) { + return null; + } + if (ret === constants3.ERROR.PAUSED || ret === constants3.ERROR.PAUSED_UPGRADE) { + this.paused = true; + return null; + } + return this.createError(ret, EMPTY_BUF); + } + createError(ret, data) { + const { llhttp, contentLength, bytesRead } = this; + if (contentLength && bytesRead !== parseInt(contentLength, 10)) { + return new ResponseContentLengthMismatchError(); + } + const ptr = llhttp.llhttp_get_error_reason(this.ptr); + let message = ""; + if (ptr) { + const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0); + message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")"; + } + return new HTTPParserError(message, constants3.ERROR[ret], data); + } + destroy() { + assert(this.ptr != null); + assert(currentParser == null); + this.llhttp.llhttp_free(this.ptr); + this.ptr = null; + this.timeout && timers.clearTimeout(this.timeout); + this.timeout = null; + this.timeoutValue = null; + this.timeoutType = null; + this.paused = false; + } + onStatus(buf) { + this.statusText = buf.toString(); + } + onMessageBegin() { + const { socket, client } = this; + if (socket.destroyed) { + return -1; + } + if (client[kRunning] === 0) { + util2.destroy(socket, new SocketError("bad response", util2.getSocketInfo(socket))); + return -1; + } + const request2 = client[kQueue][client[kRunningIdx]]; + if (!request2) { + return -1; + } + request2.onResponseStarted(); + } + onHeaderField(buf) { + const len = this.headers.length; + if ((len & 1) === 0) { + this.headers.push(buf); + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]); + } + this.trackHeader(buf.length); + } + onHeaderValue(buf) { + let len = this.headers.length; + if ((len & 1) === 1) { + this.headers.push(buf); + len += 1; + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]); + } + const key = this.headers[len - 2]; + if (key.length === 10) { + const headerName = util2.bufferToLowerCasedHeaderName(key); + if (headerName === "keep-alive") { + this.keepAlive += buf.toString(); + } else if (headerName === "connection") { + this.connection += buf.toString(); + } + } else if (key.length === 14 && util2.bufferToLowerCasedHeaderName(key) === "content-length") { + this.contentLength += buf.toString(); + } + this.trackHeader(buf.length); + } + trackHeader(len) { + this.headersSize += len; + if (this.headersSize >= this.headersMaxSize) { + util2.destroy(this.socket, new HeadersOverflowError()); + } + } + onUpgrade(head) { + const { upgrade, client, socket, headers, statusCode } = this; + assert(upgrade); + assert(client[kSocket] === socket); + assert(!socket.destroyed); + assert(!this.paused); + assert((headers.length & 1) === 0); + const request2 = client[kQueue][client[kRunningIdx]]; + assert(request2); + assert(request2.upgrade || request2.method === "CONNECT"); + this.statusCode = null; + this.statusText = ""; + this.shouldKeepAlive = null; + this.headers = []; + this.headersSize = 0; + socket.unshift(head); + socket[kParser].destroy(); + socket[kParser] = null; + socket[kClient] = null; + socket[kError] = null; + removeAllListeners(socket); + client[kSocket] = null; + client[kHTTPContext] = null; + client[kQueue][client[kRunningIdx]++] = null; + client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade")); + try { + request2.onUpgrade(statusCode, headers, socket); + } catch (err) { + util2.destroy(socket, err); + } + client[kResume](); + } + onHeadersComplete(statusCode, upgrade, shouldKeepAlive) { + const { client, socket, headers, statusText } = this; + if (socket.destroyed) { + return -1; + } + if (client[kRunning] === 0) { + util2.destroy(socket, new SocketError("bad response", util2.getSocketInfo(socket))); + return -1; + } + const request2 = client[kQueue][client[kRunningIdx]]; + if (!request2) { + return -1; + } + assert(!this.upgrade); + assert(this.statusCode < 200); + if (statusCode === 100) { + util2.destroy(socket, new SocketError("bad response", util2.getSocketInfo(socket))); + return -1; + } + if (upgrade && !request2.upgrade) { + util2.destroy(socket, new SocketError("bad upgrade", util2.getSocketInfo(socket))); + return -1; + } + assert(this.timeoutType === TIMEOUT_HEADERS); + this.statusCode = statusCode; + this.shouldKeepAlive = shouldKeepAlive || // Override llhttp value which does not allow keepAlive for HEAD. + request2.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive"; + if (this.statusCode >= 200) { + const bodyTimeout = request2.bodyTimeout != null ? request2.bodyTimeout : client[kBodyTimeout]; + this.setTimeout(bodyTimeout, TIMEOUT_BODY); + } else if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + if (request2.method === "CONNECT") { + assert(client[kRunning] === 1); + this.upgrade = true; + return 2; + } + if (upgrade) { + assert(client[kRunning] === 1); + this.upgrade = true; + return 2; + } + assert((this.headers.length & 1) === 0); + this.headers = []; + this.headersSize = 0; + if (this.shouldKeepAlive && client[kPipelining]) { + const keepAliveTimeout = this.keepAlive ? util2.parseKeepAliveTimeout(this.keepAlive) : null; + if (keepAliveTimeout != null) { + const timeout = Math.min( + keepAliveTimeout - client[kKeepAliveTimeoutThreshold], + client[kKeepAliveMaxTimeout] + ); + if (timeout <= 0) { + socket[kReset] = true; + } else { + client[kKeepAliveTimeoutValue] = timeout; + } + } else { + client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]; + } + } else { + socket[kReset] = true; + } + const pause = request2.onHeaders(statusCode, headers, this.resume, statusText) === false; + if (request2.aborted) { + return -1; + } + if (request2.method === "HEAD") { + return 1; + } + if (statusCode < 200) { + return 1; + } + if (socket[kBlocking]) { + socket[kBlocking] = false; + client[kResume](); + } + return pause ? constants3.ERROR.PAUSED : 0; + } + onBody(buf) { + const { client, socket, statusCode, maxResponseSize } = this; + if (socket.destroyed) { + return -1; + } + const request2 = client[kQueue][client[kRunningIdx]]; + assert(request2); + assert(this.timeoutType === TIMEOUT_BODY); + if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + assert(statusCode >= 200); + if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) { + util2.destroy(socket, new ResponseExceededMaxSizeError()); + return -1; + } + this.bytesRead += buf.length; + if (request2.onData(buf) === false) { + return constants3.ERROR.PAUSED; + } + } + onMessageComplete() { + const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this; + if (socket.destroyed && (!statusCode || shouldKeepAlive)) { + return -1; + } + if (upgrade) { + return; + } + assert(statusCode >= 100); + assert((this.headers.length & 1) === 0); + const request2 = client[kQueue][client[kRunningIdx]]; + assert(request2); + this.statusCode = null; + this.statusText = ""; + this.bytesRead = 0; + this.contentLength = ""; + this.keepAlive = ""; + this.connection = ""; + this.headers = []; + this.headersSize = 0; + if (statusCode < 200) { + return; + } + if (request2.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) { + util2.destroy(socket, new ResponseContentLengthMismatchError()); + return -1; + } + request2.onComplete(headers); + client[kQueue][client[kRunningIdx]++] = null; + socket[kSocketUsed] = true; + if (socket[kWriting]) { + assert(client[kRunning] === 0); + util2.destroy(socket, new InformationalError("reset")); + return constants3.ERROR.PAUSED; + } else if (!shouldKeepAlive) { + util2.destroy(socket, new InformationalError("reset")); + return constants3.ERROR.PAUSED; + } else if (socket[kReset] && client[kRunning] === 0) { + util2.destroy(socket, new InformationalError("reset")); + return constants3.ERROR.PAUSED; + } else if (client[kPipelining] == null || client[kPipelining] === 1) { + setImmediate(() => client[kResume]()); + } else { + client[kResume](); + } + } + }; + function onParserTimeout(parser) { + const { socket, timeoutType, client, paused } = parser.deref(); + if (timeoutType === TIMEOUT_HEADERS) { + if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { + assert(!paused, "cannot be paused while waiting for headers"); + util2.destroy(socket, new HeadersTimeoutError()); + } + } else if (timeoutType === TIMEOUT_BODY) { + if (!paused) { + util2.destroy(socket, new BodyTimeoutError()); + } + } else if (timeoutType === TIMEOUT_KEEP_ALIVE) { + assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]); + util2.destroy(socket, new InformationalError("socket idle timeout")); + } + } + async function connectH1(client, socket) { + client[kSocket] = socket; + if (!llhttpInstance) { + llhttpInstance = await llhttpPromise; + llhttpPromise = null; + } + socket[kNoRef] = false; + socket[kWriting] = false; + socket[kReset] = false; + socket[kBlocking] = false; + socket[kIdleSocketValidation] = 0; + socket[kIdleSocketValidationTimeout] = null; + socket[kSocketUsed] = false; + socket[kParser] = new Parser(client, socket, llhttpInstance); + addListener(socket, "error", function(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + const parser = this[kParser]; + if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) { + const parserErr = parser.finish(); + if (parserErr) { + this[kError] = parserErr; + this[kClient][kOnError](parserErr); + } + return; + } + this[kError] = err; + this[kClient][kOnError](err); + }); + addListener(socket, "readable", function() { + const parser = this[kParser]; + if (parser) { + parser.readMore(); + } + }); + addListener(socket, "end", function() { + const parser = this[kParser]; + if (parser.statusCode && !parser.shouldKeepAlive) { + const parserErr = parser.finish(); + if (parserErr) { + util2.destroy(this, parserErr); + } + return; + } + util2.destroy(this, new SocketError("other side closed", util2.getSocketInfo(this))); + }); + addListener(socket, "close", function() { + const client2 = this[kClient]; + const parser = this[kParser]; + clearIdleSocketValidation(this); + if (parser) { + if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { + this[kError] = parser.finish() || this[kError]; + } + this[kParser].destroy(); + this[kParser] = null; + } + const err = this[kError] || new SocketError("closed", util2.getSocketInfo(this)); + client2[kSocket] = null; + client2[kHTTPContext] = null; + if (client2.destroyed) { + assert(client2[kPending] === 0); + const requests = client2[kQueue].splice(client2[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request2 = requests[i]; + util2.errorRequest(client2, request2, err); + } + } else if (client2[kRunning] > 0 && err.code !== "UND_ERR_INFO") { + const request2 = client2[kQueue][client2[kRunningIdx]]; + client2[kQueue][client2[kRunningIdx]++] = null; + util2.errorRequest(client2, request2, err); + } + client2[kPendingIdx] = client2[kRunningIdx]; + assert(client2[kRunning] === 0); + client2.emit("disconnect", client2[kUrl], [client2], err); + client2[kResume](); + }); + let closed = false; + socket.on("close", () => { + closed = true; + }); + return { + version: "h1", + defaultPipelining: 1, + write(...args) { + return writeH1(client, ...args); + }, + resume() { + resumeH1(client); + }, + destroy(err, callback) { + if (closed) { + queueMicrotask(callback); + } else { + socket.destroy(err).on("close", callback); + } + }, + get destroyed() { + return socket.destroyed; + }, + busy(request2) { + if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) { + return true; + } + if (request2) { + if (client[kRunning] > 0 && !request2.idempotent) { + return true; + } + if (client[kRunning] > 0 && (request2.upgrade || request2.method === "CONNECT")) { + return true; + } + if (client[kRunning] > 0 && util2.bodyLength(request2.body) !== 0 && (util2.isStream(request2.body) || util2.isAsyncIterable(request2.body) || util2.isFormDataLike(request2.body))) { + return true; + } + } + return false; + } + }; + } + function clearIdleSocketValidation(socket) { + if (socket[kIdleSocketValidationTimeout]) { + clearTimeout(socket[kIdleSocketValidationTimeout]); + socket[kIdleSocketValidationTimeout] = null; + } + socket[kIdleSocketValidation] = 0; + } + function scheduleIdleSocketValidation(client, socket) { + socket[kIdleSocketValidation] = 1; + socket[kIdleSocketValidationTimeout] = setTimeout(() => { + socket[kIdleSocketValidationTimeout] = null; + socket[kIdleSocketValidation] = 2; + if (client[kSocket] === socket && !socket.destroyed) { + client[kResume](); + } + }, 0); + socket[kIdleSocketValidationTimeout].unref?.(); + } + function resumeH1(client) { + const socket = client[kSocket]; + if (socket && !socket.destroyed) { + if (client[kSize] === 0) { + if (!socket[kNoRef] && socket.unref) { + socket.unref(); + socket[kNoRef] = true; + } + } else if (socket[kNoRef] && socket.ref) { + socket.ref(); + socket[kNoRef] = false; + } + if (client[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) { + if (socket[kIdleSocketValidation] === 0) { + scheduleIdleSocketValidation(client, socket); + socket[kParser].readMore(); + if (socket.destroyed) { + return; + } + return; + } + if (socket[kIdleSocketValidation] === 1) { + socket[kParser].readMore(); + if (socket.destroyed) { + return; + } + return; + } + } + if (client[kRunning] === 0) { + socket[kParser].readMore(); + if (socket.destroyed) { + return; + } + } + if (client[kSize] === 0) { + if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) { + socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE); + } + } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) { + if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) { + const request2 = client[kQueue][client[kRunningIdx]]; + const headersTimeout = request2.headersTimeout != null ? request2.headersTimeout : client[kHeadersTimeout]; + socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS); + } + } + } + } + function shouldSendContentLength(method) { + return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; + } + function writeH1(client, request2) { + const { method, path: path6, host, upgrade, blocking, reset } = request2; + let { body, headers, contentLength } = request2; + const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH"; + if (util2.isFormDataLike(body)) { + if (!extractBody) { + extractBody = require_body().extractBody; + } + const [bodyStream, contentType] = extractBody(body); + if (request2.contentType == null) { + headers.push("content-type", contentType); + } + body = bodyStream.stream; + contentLength = bodyStream.length; + } else if (util2.isBlobLike(body) && request2.contentType == null) { + const contentType = body.type; + if (contentType) { + const contentTypeValue = `${contentType}`; + if (!util2.isValidHeaderValue(contentTypeValue)) { + util2.errorRequest(client, request2, new InvalidArgumentError("invalid content-type header")); + return false; + } + headers.push("content-type", contentTypeValue); + } + } + if (body && typeof body.read === "function") { + body.read(0); + } + const bodyLength = util2.bodyLength(body); + contentLength = bodyLength ?? contentLength; + if (contentLength === null) { + contentLength = request2.contentLength; + } + if (contentLength === 0 && !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request2.contentLength !== null && request2.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util2.errorRequest(client, request2, new RequestContentLengthMismatchError()); + return false; + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + const socket = client[kSocket]; + clearIdleSocketValidation(socket); + const abort = (err) => { + if (request2.aborted || request2.completed) { + return; + } + util2.errorRequest(client, request2, err || new RequestAbortedError()); + util2.destroy(body); + util2.destroy(socket, new InformationalError("aborted")); + }; + try { + request2.onConnect(abort); + } catch (err) { + util2.errorRequest(client, request2, err); + } + if (request2.aborted) { + return false; + } + if (method === "HEAD") { + socket[kReset] = true; + } + if (upgrade || method === "CONNECT") { + socket[kReset] = true; + } + if (reset != null) { + socket[kReset] = reset; + } + if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) { + socket[kReset] = true; + } + if (blocking) { + socket[kBlocking] = true; + } + let header = `${method} ${path6} HTTP/1.1\r +`; + if (typeof host === "string") { + header += `host: ${host}\r +`; + } else { + header += client[kHostHeader]; + } + if (upgrade) { + header += `connection: upgrade\r +upgrade: ${upgrade}\r +`; + } else if (client[kPipelining] && !socket[kReset]) { + header += "connection: keep-alive\r\n"; + } else { + header += "connection: close\r\n"; + } + if (Array.isArray(headers)) { + for (let n = 0; n < headers.length; n += 2) { + const key = headers[n + 0]; + const val = headers[n + 1]; + if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + header += `${key}: ${val[i]}\r +`; + } + } else { + header += `${key}: ${val}\r +`; + } + } + } + if (channels.sendHeaders.hasSubscribers) { + channels.sendHeaders.publish({ request: request2, headers: header, socket }); + } + if (!body || bodyLength === 0) { + writeBuffer(abort, null, client, request2, socket, contentLength, header, expectsPayload); + } else if (util2.isBuffer(body)) { + writeBuffer(abort, body, client, request2, socket, contentLength, header, expectsPayload); + } else if (util2.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable(abort, body.stream(), client, request2, socket, contentLength, header, expectsPayload); + } else { + writeBlob(abort, body, client, request2, socket, contentLength, header, expectsPayload); + } + } else if (util2.isStream(body)) { + writeStream(abort, body, client, request2, socket, contentLength, header, expectsPayload); + } else if (util2.isIterable(body)) { + writeIterable(abort, body, client, request2, socket, contentLength, header, expectsPayload); + } else { + assert(false); + } + return true; + } + function writeStream(abort, body, client, request2, socket, contentLength, header, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); + let finished = false; + const writer = new AsyncWriter({ abort, socket, request: request2, contentLength, client, expectsPayload, header }); + const onData = function(chunk) { + if (finished) { + return; + } + try { + if (!writer.write(chunk) && this.pause) { + this.pause(); + } + } catch (err) { + util2.destroy(this, err); + } + }; + const onDrain = function() { + if (finished) { + return; + } + if (body.resume) { + body.resume(); + } + }; + const onClose = function() { + queueMicrotask(() => { + body.removeListener("error", onFinished); + }); + if (!finished) { + const err = new RequestAbortedError(); + queueMicrotask(() => onFinished(err)); + } + }; + const onFinished = function(err) { + if (finished) { + return; + } + finished = true; + assert(socket.destroyed || socket[kWriting] && client[kRunning] <= 1); + socket.off("drain", onDrain).off("error", onFinished); + body.removeListener("data", onData).removeListener("end", onFinished).removeListener("close", onClose); + if (!err) { + try { + writer.end(); + } catch (er) { + err = er; + } + } + writer.destroy(err); + if (err && (err.code !== "UND_ERR_INFO" || err.message !== "reset")) { + util2.destroy(body, err); + } else { + util2.destroy(body); + } + }; + body.on("data", onData).on("end", onFinished).on("error", onFinished).on("close", onClose); + if (body.resume) { + body.resume(); + } + socket.on("drain", onDrain).on("error", onFinished); + if (body.errorEmitted ?? body.errored) { + setImmediate(() => onFinished(body.errored)); + } else if (body.endEmitted ?? body.readableEnded) { + setImmediate(() => onFinished(null)); + } + if (body.closeEmitted ?? body.closed) { + setImmediate(onClose); + } + } + function writeBuffer(abort, body, client, request2, socket, contentLength, header, expectsPayload) { + try { + if (!body) { + if (contentLength === 0) { + socket.write(`${header}content-length: 0\r \r -`,"latin1"):(b(o===null,"no body must not have content length"),s.write(`${n}\r -`,"latin1")),A.onRequestSent(),r[Ft]()}catch(a){t(a)}}async function Ab(t,e,r,A,s,o,n,i){b(o===e.size,"blob body must have content length");try{if(o!=null&&o!==e.size)throw new dr;let a=Buffer.from(await e.arrayBuffer());s.cork(),s.write(`${n}content-length: ${o}\r +`, "latin1"); + } else { + assert(contentLength === null, "no body must not have content length"); + socket.write(`${header}\r +`, "latin1"); + } + } else if (util2.isBuffer(body)) { + assert(contentLength === body.byteLength, "buffer body must have content length"); + socket.cork(); + socket.write(`${header}content-length: ${contentLength}\r \r -`,"latin1"),s.write(a),s.uncork(),A.onBodySent(a),A.onRequestSent(),!i&&A.reset!==!1&&(s[be]=!0),r[Ft]()}catch(a){t(a)}}async function nQ(t,e,r,A,s,o,n,i){b(o!==0||r[ce]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let u=a;a=null,u()}}let g=()=>new Promise((u,E)=>{b(a===null),s[pe]?E(s[pe]):a=u});s.on("close",c).on("drain",c);let l=new qo({abort:t,socket:s,request:A,contentLength:o,client:r,expectsPayload:i,header:n});try{for await(let u of e){if(s[pe])throw s[pe];l.write(u)||await g()}l.end()}catch(u){l.destroy(u)}finally{s.off("close",c).off("drain",c)}}var qo=class{constructor({abort:e,socket:r,request:A,contentLength:s,client:o,expectsPayload:n,header:i}){this.socket=r,this.request=A,this.contentLength=s,this.client=o,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,r[Ht]=!0}write(e){let{socket:r,request:A,contentLength:s,client:o,bytesWritten:n,expectsPayload:i,header:a}=this;if(r[pe])throw r[pe];if(r.destroyed)return!1;let c=Buffer.byteLength(e);if(!c)return!0;if(s!==null&&n+c>s){if(o[oc])throw new dr;process.emitWarning(new dr)}r.cork(),n===0&&(!i&&A.reset!==!1&&(r[be]=!0),s===null?r.write(`${a}transfer-encoding: chunked\r -`,"latin1"):r.write(`${a}content-length: ${s}\r +`, "latin1"); + socket.write(body); + socket.uncork(); + request2.onBodySent(body); + if (!expectsPayload && request2.reset !== false) { + socket[kReset] = true; + } + } + request2.onRequestSent(); + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeBlob(abort, body, client, request2, socket, contentLength, header, expectsPayload) { + assert(contentLength === body.size, "blob body must have content length"); + try { + if (contentLength != null && contentLength !== body.size) { + throw new RequestContentLengthMismatchError(); + } + const buffer = Buffer.from(await body.arrayBuffer()); + socket.cork(); + socket.write(`${header}content-length: ${contentLength}\r \r -`,"latin1")),s===null&&r.write(`\r -${c.toString(16)}\r -`,"latin1"),this.bytesWritten+=c;let g=r.write(e);return r.uncork(),A.onBodySent(e),g||r[j].timeout&&r[j].timeoutType===uA&&r[j].timeout.refresh&&r[j].timeout.refresh(),g}end(){let{socket:e,contentLength:r,client:A,bytesWritten:s,expectsPayload:o,header:n,request:i}=this;if(i.onRequestSent(),e[Ht]=!1,e[pe])throw e[pe];if(!e.destroyed){if(s===0?o?e.write(`${n}content-length: 0\r +`, "latin1"); + socket.write(buffer); + socket.uncork(); + request2.onBodySent(buffer); + request2.onRequestSent(); + if (!expectsPayload && request2.reset !== false) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeIterable(abort, body, client, request2, socket, contentLength, header, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined"); + let callback = null; + function onDrain() { + if (callback) { + const cb = callback; + callback = null; + cb(); + } + } + const waitForDrain = () => new Promise((resolve2, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve2; + } + }); + socket.on("close", onDrain).on("drain", onDrain); + const writer = new AsyncWriter({ abort, socket, request: request2, contentLength, client, expectsPayload, header }); + try { + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError]; + } + if (!writer.write(chunk)) { + await waitForDrain(); + } + } + writer.end(); + } catch (err) { + writer.destroy(err); + } finally { + socket.off("close", onDrain).off("drain", onDrain); + } + } + var AsyncWriter = class { + constructor({ abort, socket, request: request2, contentLength, client, expectsPayload, header }) { + this.socket = socket; + this.request = request2; + this.contentLength = contentLength; + this.client = client; + this.bytesWritten = 0; + this.expectsPayload = expectsPayload; + this.header = header; + this.abort = abort; + socket[kWriting] = true; + } + write(chunk) { + const { socket, request: request2, contentLength, client, bytesWritten, expectsPayload, header } = this; + if (socket[kError]) { + throw socket[kError]; + } + if (socket.destroyed) { + return false; + } + const len = Buffer.byteLength(chunk); + if (!len) { + return true; + } + if (contentLength !== null && bytesWritten + len > contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError(); + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + socket.cork(); + if (bytesWritten === 0) { + if (!expectsPayload && request2.reset !== false) { + socket[kReset] = true; + } + if (contentLength === null) { + socket.write(`${header}transfer-encoding: chunked\r +`, "latin1"); + } else { + socket.write(`${header}content-length: ${contentLength}\r \r -`,"latin1"):e.write(`${n}\r -`,"latin1"):r===null&&e.write(`\r -0\r +`, "latin1"); + } + } + if (contentLength === null) { + socket.write(`\r +${len.toString(16)}\r +`, "latin1"); + } + this.bytesWritten += len; + const ret = socket.write(chunk); + socket.uncork(); + request2.onBodySent(chunk); + if (!ret) { + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh(); + } + } + } + return ret; + } + end() { + const { socket, contentLength, client, bytesWritten, expectsPayload, header, request: request2 } = this; + request2.onRequestSent(); + socket[kWriting] = false; + if (socket[kError]) { + throw socket[kError]; + } + if (socket.destroyed) { + return; + } + if (bytesWritten === 0) { + if (expectsPayload) { + socket.write(`${header}content-length: 0\r \r -`,"latin1"),r!==null&&s!==r){if(A[oc])throw new dr;process.emitWarning(new dr)}e[j].timeout&&e[j].timeoutType===uA&&e[j].timeout.refresh&&e[j].timeout.refresh(),A[Ft]()}}destroy(e){let{socket:r,client:A,abort:s}=this;r[Ht]=!1,e&&(b(A[ce]<=1,"pipeline should only contain this request"),s(e))}};uQ.exports=KT});var pQ=B((YJ,fQ)=>{"use strict";var qe=require("node:assert"),{pipeline:sb}=require("node:stream"),v=M(),{RequestContentLengthMismatchError:gc,RequestAbortedError:hQ,SocketError:Es,InformationalError:lc}=Y(),{kUrl:Wo,kReset:Zo,kClient:EA,kRunning:jo,kPending:ob,kQueue:Vt,kPendingIdx:uc,kRunningIdx:tt,kError:At,kSocket:he,kStrictContentLength:nb,kOnError:Ec,kMaxConcurrentStreams:dQ,kHTTP2Session:rt,kResume:qt,kSize:ib,kHTTPContext:ab}=$(),St=Symbol("open streams"),QQ,BQ=!1,zo;try{zo=require("node:http2")}catch{zo={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:cb,HTTP2_HEADER_METHOD:gb,HTTP2_HEADER_PATH:lb,HTTP2_HEADER_SCHEME:ub,HTTP2_HEADER_CONTENT_LENGTH:Eb,HTTP2_HEADER_EXPECT:hb,HTTP2_HEADER_STATUS:Qb}}=zo;function Bb(t){let e=[];for(let[r,A]of Object.entries(t))if(Array.isArray(A))for(let s of A)e.push(Buffer.from(r),Buffer.from(s));else e.push(Buffer.from(r),Buffer.from(A));return e}async function Ib(t,e){t[he]=e,BQ||(BQ=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=zo.connect(t[Wo],{createConnection:()=>e,peerMaxConcurrentStreams:t[dQ]});r[St]=0,r[EA]=t,r[he]=e,v.addListener(r,"error",db),v.addListener(r,"frameError",fb),v.addListener(r,"end",pb),v.addListener(r,"goaway",mb),v.addListener(r,"close",function(){let{[EA]:s}=this,{[he]:o}=s,n=this[he][At]||this[At]||new Es("closed",v.getSocketInfo(o));if(s[rt]=null,s.destroyed){qe(s[ob]===0);let i=s[Vt].splice(s[tt]);for(let a=0;a{A=!0}),{version:"h2",defaultPipelining:1/0,write(...s){return yb(t,...s)},resume(){Cb(t)},destroy(s,o){A?queueMicrotask(o):e.destroy(s).on("close",o)},get destroyed(){return e.destroyed},busy(){return!1}}}function Cb(t){let e=t[he];e?.destroyed===!1&&(t[ib]===0&&t[dQ]===0?(e.unref(),t[rt].unref()):(e.ref(),t[rt].ref()))}function db(t){qe(t.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[he][At]=t,this[EA][Ec](t)}function fb(t,e,r){if(r===0){let A=new lc(`HTTP/2: "frameError" received - type ${t}, code ${e}`);this[he][At]=A,this[EA][Ec](A)}}function pb(){let t=new Es("other side closed",v.getSocketInfo(this[he]));this.destroy(t),v.destroy(this[he],t)}function mb(t){let e=this[At]||new Es(`HTTP/2: "GOAWAY" frame received with code ${t}`,v.getSocketInfo(this)),r=this[EA];if(r[he]=null,r[ab]=null,this[rt]!=null&&(this[rt].destroy(e),this[rt]=null),v.destroy(this[he],e),r[tt]{e.aborted||e.completed||(y=y||new hQ,v.errorRequest(t,e,y),u!=null&&v.destroy(u,y),v.destroy(g,y),t[Vt][t[tt]++]=null,t[qt]())};try{e.onConnect(C)}catch(y){v.errorRequest(t,e,y)}if(e.aborted)return!1;if(A==="CONNECT")return r.ref(),u=r.request(l,{endStream:!1,signal:a}),u.id&&!u.pending?(e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null):u.once("ready",()=>{e.onUpgrade(null,null,u),++r[St],t[Vt][t[tt]++]=null}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),!0;l[lb]=s,l[ub]="https";let I=A==="PUT"||A==="POST"||A==="PATCH";g&&typeof g.read=="function"&&g.read(0);let Q=v.bodyLength(g);if(v.isFormDataLike(g)){QQ??=cA().extractBody;let[y,P]=QQ(g);l["content-type"]=P,g=y.stream,Q=y.length}if(Q==null&&(Q=e.contentLength),(Q===0||!I)&&(Q=null),wb(A)&&Q>0&&e.contentLength!=null&&e.contentLength!==Q){if(t[nb])return v.errorRequest(t,e,new gc),!1;process.emitWarning(new gc)}Q!=null&&(qe(g,"no body must not have content length"),l[Eb]=`${Q}`),r.ref();let f=A==="GET"||A==="HEAD"||g===null;return i?(l[hb]="100-continue",u=r.request(l,{endStream:f,signal:a}),u.once("continue",R)):(u=r.request(l,{endStream:f,signal:a}),R()),++r[St],u.once("response",y=>{let{[Qb]:P,...Z}=y;if(e.onResponseStarted(),e.aborted){let Ae=new hQ;v.errorRequest(t,e,Ae),v.destroy(u,Ae);return}e.onHeaders(Number(P),Bb(Z),u.resume.bind(u),"")===!1&&u.pause(),u.on("data",Ae=>{e.onData(Ae)===!1&&u.pause()})}),u.once("end",()=>{(u.state?.state==null||u.state.state<6)&&e.onComplete([]),r[St]===0&&r.unref(),C(new lc("HTTP/2: stream half-closed (remote)")),t[Vt][t[tt]++]=null,t[uc]=t[tt],t[qt]()}),u.once("close",()=>{r[St]-=1,r[St]===0&&r.unref()}),u.once("error",function(y){C(y)}),u.once("frameError",(y,P)=>{C(new lc(`HTTP/2: "frameError" received - type ${y}, code ${P}`))}),!0;function R(){!g||Q===0?IQ(C,u,null,t,e,t[he],Q,I):v.isBuffer(g)?IQ(C,u,g,t,e,t[he],Q,I):v.isBlobLike(g)?typeof g.stream=="function"?CQ(C,u,g.stream(),t,e,t[he],Q,I):Db(C,u,g,t,e,t[he],Q,I):v.isStream(g)?Rb(C,t[he],I,u,g,t,e,Q):v.isIterable(g)?CQ(C,u,g,t,e,t[he],Q,I):qe(!1)}}function IQ(t,e,r,A,s,o,n,i){try{r!=null&&v.isBuffer(r)&&(qe(n===r.byteLength,"buffer body must have content length"),e.cork(),e.write(r),e.uncork(),e.end(),s.onBodySent(r)),i||(o[Zo]=!0),s.onRequestSent(),A[qt]()}catch(a){t(a)}}function Rb(t,e,r,A,s,o,n,i){qe(i!==0||o[jo]===0,"stream body cannot be pipelined");let a=sb(s,A,g=>{g?(v.destroy(a,g),t(g)):(v.removeAllListeners(a),n.onRequestSent(),r||(e[Zo]=!0),o[qt]())});v.addListener(a,"data",c);function c(g){n.onBodySent(g)}}async function Db(t,e,r,A,s,o,n,i){qe(n===r.size,"blob body must have content length");try{if(n!=null&&n!==r.size)throw new gc;let a=Buffer.from(await r.arrayBuffer());e.cork(),e.write(a),e.uncork(),e.end(),s.onBodySent(a),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(a){t(a)}}async function CQ(t,e,r,A,s,o,n,i){qe(n!==0||A[jo]===0,"iterator body cannot be pipelined");let a=null;function c(){if(a){let l=a;a=null,l()}}let g=()=>new Promise((l,u)=>{qe(a===null),o[At]?u(o[At]):a=l});e.on("close",c).on("drain",c);try{for await(let l of r){if(o[At])throw o[At];let u=e.write(l);s.onBodySent(l),u||await g()}e.end(),s.onRequestSent(),i||(o[Zo]=!0),A[qt]()}catch(l){t(l)}finally{e.off("close",c).off("drain",c)}}fQ.exports=Ib});var Xo=B((_J,yQ)=>{"use strict";var Bt=M(),{kBodyUsed:hs}=$(),Qc=require("node:assert"),{InvalidArgumentError:Tb}=Y(),bb=require("node:events"),kb=[300,301,302,303,307,308],mQ=Symbol("body"),Ko=class{constructor(e){this[mQ]=e,this[hs]=!1}async*[Symbol.asyncIterator](){Qc(!this[hs],"disturbed"),this[hs]=!0,yield*this[mQ]}},hc=class{constructor(e,r,A,s){if(r!=null&&(!Number.isInteger(r)||r<0))throw new Tb("maxRedirections must be a positive number");Bt.validateHandler(s,A.method,A.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...A,maxRedirections:0},this.maxRedirections=r,this.handler=s,this.history=[],this.redirectionLimitReached=!1,Bt.isStream(this.opts.body)?(Bt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){Qc(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[hs]=!1,bb.prototype.on.call(this.opts.body,"data",function(){this[hs]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Ko(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Bt.isIterable(this.opts.body)&&(this.opts.body=new Ko(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,r,A){this.handler.onUpgrade(e,r,A)}onError(e){this.handler.onError(e)}onHeaders(e,r,A,s){if(this.location=this.history.length>=this.maxRedirections||Bt.isDisturbed(this.opts.body)?null:Fb(e,r),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(new Error("max redirects")),this.redirectionLimitReached=!0,this.abort(new Error("max redirects"));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,r,A,s);let{origin:o,pathname:n,search:i}=Bt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),a=i?`${n}${i}`:n;this.opts.headers=Sb(this.opts.headers,e===303,this.opts.origin!==o),this.opts.path=a,this.opts.origin=o,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!=="HEAD"&&(this.opts.method="GET",this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function Fb(t,e){if(kb.indexOf(t)===-1)return null;for(let r=0;r{"use strict";var Nb=Xo();function Ub({maxRedirections:t}){return e=>function(A,s){let{maxRedirections:o=t}=A;if(!o)return e(A,s);let n=new Nb(e,o,A,s);return A={...A,maxRedirections:0},e(A,n)}}RQ.exports=Ub});var BA=B((PJ,LQ)=>{"use strict";var Nt=require("node:assert"),SQ=require("node:net"),Gb=require("node:http"),wr=M(),{channels:hA}=jr(),Lb=LE(),Mb=eA(),{InvalidArgumentError:oe,InformationalError:vb,ClientDestroyedError:xb}=Y(),Ob=ts(),{kUrl:It,kServerName:Wt,kClient:Yb,kBusy:Bc,kConnect:_b,kResuming:yr,kRunning:ds,kPending:fs,kSize:Cs,kQueue:st,kConnected:Jb,kConnecting:QA,kNeedDrain:Zt,kKeepAliveDefaultTimeout:DQ,kHostHeader:Pb,kPendingIdx:ot,kRunningIdx:Ut,kError:Hb,kPipelining:en,kKeepAliveTimeoutValue:Vb,kMaxHeadersSize:qb,kKeepAliveMaxTimeout:Wb,kKeepAliveTimeoutThreshold:zb,kHeadersTimeout:Zb,kBodyTimeout:jb,kStrictContentLength:Kb,kConnector:Qs,kMaxRedirections:Xb,kMaxRequests:Ic,kCounter:$b,kClose:ek,kDestroy:tk,kDispatch:rk,kInterceptors:TQ,kLocalAddress:Bs,kMaxResponseSize:Ak,kOnError:sk,kHTTPContext:ne,kMaxConcurrentStreams:ok,kResume:Is}=$(),nk=EQ(),ik=pQ(),bQ=!1,zt=Symbol("kClosedResolve"),kQ=()=>{};function NQ(t){return t[en]??t[ne]?.defaultPipelining??1}var Cc=class extends Mb{constructor(e,{interceptors:r,maxHeaderSize:A,headersTimeout:s,socketTimeout:o,requestTimeout:n,connectTimeout:i,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:l,maxKeepAliveTimeout:u,keepAliveMaxTimeout:E,keepAliveTimeoutThreshold:h,socketPath:C,pipelining:I,tls:Q,strictContentLength:f,maxCachedSessions:R,maxRedirections:y,connect:P,maxRequestsPerClient:Z,localAddress:Ae,maxResponseSize:gt,autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr,maxConcurrentStreams:_t,allowH2:De,webSocket:qr}={}){if(super({webSocket:qr}),g!==void 0)throw new oe("unsupported keepAlive, use pipelining=0 instead");if(o!==void 0)throw new oe("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(n!==void 0)throw new oe("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new oe("unsupported idleTimeout, use keepAliveTimeout instead");if(u!==void 0)throw new oe("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(A!=null&&!Number.isFinite(A))throw new oe("invalid maxHeaderSize");if(C!=null&&typeof C!="string")throw new oe("invalid socketPath");if(i!=null&&(!Number.isFinite(i)||i<0))throw new oe("invalid connectTimeout");if(l!=null&&(!Number.isFinite(l)||l<=0))throw new oe("invalid keepAliveTimeout");if(E!=null&&(!Number.isFinite(E)||E<=0))throw new oe("invalid keepAliveMaxTimeout");if(h!=null&&!Number.isFinite(h))throw new oe("invalid keepAliveTimeoutThreshold");if(s!=null&&(!Number.isInteger(s)||s<0))throw new oe("headersTimeout must be a positive integer or zero");if(a!=null&&(!Number.isInteger(a)||a<0))throw new oe("bodyTimeout must be a positive integer or zero");if(P!=null&&typeof P!="function"&&typeof P!="object")throw new oe("connect must be a function or an object");if(y!=null&&(!Number.isInteger(y)||y<0))throw new oe("maxRedirections must be a positive number");if(Z!=null&&(!Number.isInteger(Z)||Z<0))throw new oe("maxRequestsPerClient must be a positive number");if(Ae!=null&&(typeof Ae!="string"||SQ.isIP(Ae)===0))throw new oe("localAddress must be valid string IP address");if(gt!=null&&(!Number.isInteger(gt)||gt<-1))throw new oe("maxResponseSize must be a positive number");if(Vr!=null&&(!Number.isInteger(Vr)||Vr<-1))throw new oe("autoSelectFamilyAttemptTimeout must be a positive number");if(De!=null&&typeof De!="boolean")throw new oe("allowH2 must be a valid boolean value");if(_t!=null&&(typeof _t!="number"||_t<1))throw new oe("maxConcurrentStreams must be a positive integer, greater than 0");typeof P!="function"&&(P=Ob({...Q,maxCachedSessions:R,allowH2:De,socketPath:C,timeout:i,...wt?{autoSelectFamily:wt,autoSelectFamilyAttemptTimeout:Vr}:void 0,...P})),r?.Client&&Array.isArray(r.Client)?(this[TQ]=r.Client,bQ||(bQ=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[TQ]=[ak({maxRedirections:y})],this[It]=wr.parseOrigin(e),this[Qs]=P,this[en]=I??1,this[qb]=A||Gb.maxHeaderSize,this[DQ]=l??4e3,this[Wb]=E??6e5,this[zb]=h??2e3,this[Vb]=this[DQ],this[Wt]=null,this[Bs]=Ae??null,this[yr]=0,this[Zt]=0,this[Pb]=`host: ${this[It].hostname}${this[It].port?`:${this[It].port}`:""}\r -`,this[jb]=a??3e5,this[Zb]=s??3e5,this[Kb]=f??!0,this[Xb]=y,this[Ic]=Z,this[zt]=null,this[Ak]=gt>-1?gt:-1,this[ok]=_t??100,this[ne]=null,this[st]=[],this[Ut]=0,this[ot]=0,this[Is]=Wr=>dc(this,Wr),this[sk]=Wr=>UQ(this,Wr)}get pipelining(){return this[en]}set pipelining(e){this[en]=e,this[Is](!0)}get[fs](){return this[st].length-this[ot]}get[ds](){return this[ot]-this[Ut]}get[Cs](){return this[st].length-this[Ut]}get[Jb](){return!!this[ne]&&!this[QA]&&!this[ne].destroyed}get[Bc](){return!!(this[ne]?.busy(null)||this[Cs]>=(NQ(this)||1)||this[fs]>0)}[_b](e){GQ(this),this.once("connect",e)}[rk](e,r){let A=e.origin||this[It].origin,s=new Lb(A,e,r);return this[st].push(s),this[yr]||(wr.bodyLength(s.body)==null&&wr.isIterable(s.body)?(this[yr]=1,queueMicrotask(()=>dc(this))):this[Is](!0)),this[yr]&&this[Zt]!==2&&this[Bc]&&(this[Zt]=2),this[Zt]<2}async[ek](){return new Promise(e=>{this[Cs]?this[zt]=e:e(null)})}async[tk](e){return new Promise(r=>{let A=this[st].splice(this[ot]);for(let o=0;o{this[zt]&&(this[zt](),this[zt]=null),r(null)};this[ne]?(this[ne].destroy(e,s),this[ne]=null):queueMicrotask(s),this[Is]()})}},ak=$o();function UQ(t,e){if(t[ds]===0&&e.code!=="UND_ERR_INFO"&&e.code!=="UND_ERR_SOCKET"){Nt(t[ot]===t[Ut]);let r=t[st].splice(t[Ut]);for(let A=0;A{t[Qs]({host:e,hostname:r,protocol:A,port:s,servername:t[Wt],localAddress:t[Bs]},(a,c)=>{a?i(a):n(c)})});if(t.destroyed){wr.destroy(o.on("error",kQ),new xb);return}Nt(o);try{t[ne]=o.alpnProtocol==="h2"?await ik(t,o):await nk(t,o)}catch(n){throw o.destroy().on("error",kQ),n}t[QA]=!1,o[$b]=0,o[Ic]=t[Ic],o[Yb]=t,o[Hb]=null,hA.connected.hasSubscribers&&hA.connected.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],socket:o}),t.emit("connect",t[It],[t])}catch(o){if(t.destroyed)return;if(t[QA]=!1,hA.connectError.hasSubscribers&&hA.connectError.publish({connectParams:{host:e,hostname:r,protocol:A,port:s,version:t[ne]?.version,servername:t[Wt],localAddress:t[Bs]},connector:t[Qs],error:o}),o.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(Nt(t[ds]===0);t[fs]>0&&t[st][t[ot]].servername===t[Wt];){let n=t[st][t[ot]++];wr.errorRequest(t,n,o)}else UQ(t,o);t.emit("connectionError",t[It],[t],o)}t[Is]()}function FQ(t){t[Zt]=0,t.emit("drain",t[It],[t])}function dc(t,e){t[yr]!==2&&(t[yr]=2,ck(t,e),t[yr]=0,t[Ut]>256&&(t[st].splice(0,t[Ut]),t[ot]-=t[Ut],t[Ut]=0))}function ck(t,e){for(;;){if(t.destroyed){Nt(t[fs]===0);return}if(t[zt]&&!t[Cs]){t[zt](),t[zt]=null;return}if(t[ne]&&t[ne].resume(),t[Bc])t[Zt]=2;else if(t[Zt]===2){e?(t[Zt]=1,queueMicrotask(()=>FQ(t))):FQ(t);continue}if(t[fs]===0||t[ds]>=(NQ(t)||1))return;let r=t[st][t[ot]];if(t[It].protocol==="https:"&&t[Wt]!==r.servername){if(t[ds]>0)return;t[Wt]=r.servername,t[ne]?.destroy(new vb("servername changed"),()=>{t[ne]=null,dc(t)})}if(t[QA])return;if(!t[ne]){GQ(t);return}if(t[ne].destroyed||t[ne].busy(r))return;!r.aborted&&t[ne].write(r)?t[ot]++:t[st].splice(t[ot],1)}}LQ.exports=Cc});var fc=B((VJ,MQ)=>{"use strict";var tn=class{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&2047}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,e)}};MQ.exports=class{constructor(){this.head=this.tail=new tn}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new tn),this.head.push(e)}shift(){let e=this.tail,r=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),r}}});var xQ=B((qJ,vQ)=>{var{kFree:gk,kConnected:lk,kPending:uk,kQueued:Ek,kRunning:hk,kSize:Qk}=$(),Rr=Symbol("pool"),pc=class{constructor(e){this[Rr]=e}get connected(){return this[Rr][lk]}get free(){return this[Rr][gk]}get pending(){return this[Rr][uk]}get queued(){return this[Rr][Ek]}get running(){return this[Rr][hk]}get size(){return this[Rr][Qk]}};vQ.exports=pc});var Tc=B((WJ,zQ)=>{"use strict";var Bk=eA(),Ik=fc(),{kConnected:mc,kSize:OQ,kRunning:YQ,kPending:_Q,kQueued:ps,kBusy:Ck,kFree:dk,kUrl:fk,kClose:pk,kDestroy:mk,kDispatch:wk}=$(),yk=xQ(),ke=Symbol("clients"),me=Symbol("needDrain"),ms=Symbol("queue"),wc=Symbol("closed resolve"),yc=Symbol("onDrain"),JQ=Symbol("onConnect"),PQ=Symbol("onDisconnect"),HQ=Symbol("onConnectionError"),Rc=Symbol("get dispatcher"),qQ=Symbol("add client"),WQ=Symbol("remove client"),VQ=Symbol("stats"),Dc=class extends Bk{constructor(e){super(e),this[ms]=new Ik,this[ke]=[],this[ps]=0;let r=this;this[yc]=function(s,o){let n=r[ms],i=!1;for(;!i;){let a=n.shift();if(!a)break;r[ps]--,i=!this.dispatch(a.opts,a.handler)}this[me]=i,!this[me]&&r[me]&&(r[me]=!1,r.emit("drain",s,[r,...o])),r[wc]&&n.isEmpty()&&Promise.all(r[ke].map(a=>a.close())).then(r[wc])},this[JQ]=(A,s)=>{r.emit("connect",A,[r,...s])},this[PQ]=(A,s,o)=>{r.emit("disconnect",A,[r,...s],o)},this[HQ]=(A,s,o)=>{r.emit("connectionError",A,[r,...s],o)},this[VQ]=new yk(this)}get[Ck](){return this[me]}get[mc](){return this[ke].filter(e=>e[mc]).length}get[dk](){return this[ke].filter(e=>e[mc]&&!e[me]).length}get[_Q](){let e=this[ps];for(let{[_Q]:r}of this[ke])e+=r;return e}get[YQ](){let e=0;for(let{[YQ]:r}of this[ke])e+=r;return e}get[OQ](){let e=this[ps];for(let{[OQ]:r}of this[ke])e+=r;return e}get stats(){return this[VQ]}async[pk](){this[ms].isEmpty()?await Promise.all(this[ke].map(e=>e.close())):await new Promise(e=>{this[wc]=e})}async[mk](e){for(;;){let r=this[ms].shift();if(!r)break;r.handler.onError(e)}await Promise.all(this[ke].map(r=>r.destroy(e)))}[wk](e,r){let A=this[Rc]();return A?A.dispatch(e,r)||(A[me]=!0,this[me]=!this[Rc]()):(this[me]=!0,this[ms].push({opts:e,handler:r}),this[ps]++),!this[me]}[qQ](e){return e.on("drain",this[yc]).on("connect",this[JQ]).on("disconnect",this[PQ]).on("connectionError",this[HQ]),this[ke].push(e),this[me]&&queueMicrotask(()=>{this[me]&&this[yc](e[fk],[this,e])}),this}[WQ](e){e.close(()=>{let r=this[ke].indexOf(e);r!==-1&&this[ke].splice(r,1)}),this[me]=this[ke].some(r=>!r[me]&&r.closed!==!0&&r.destroyed!==!0)}};zQ.exports={PoolBase:Dc,kClients:ke,kNeedDrain:me,kAddClient:qQ,kRemoveClient:WQ,kGetDispatcher:Rc}});var IA=B((zJ,XQ)=>{"use strict";var{PoolBase:Rk,kClients:rn,kNeedDrain:Dk,kAddClient:Tk,kGetDispatcher:bk}=Tc(),kk=BA(),{InvalidArgumentError:bc}=Y(),ZQ=M(),{kUrl:jQ,kInterceptors:Fk}=$(),Sk=ts(),kc=Symbol("options"),Fc=Symbol("connections"),KQ=Symbol("factory");function Nk(t,e){return new kk(t,e)}var Sc=class extends Rk{constructor(e,{connections:r,factory:A=Nk,connect:s,connectTimeout:o,tls:n,maxCachedSessions:i,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g,allowH2:l,...u}={}){if(r!=null&&(!Number.isFinite(r)||r<0))throw new bc("invalid connections");if(typeof A!="function")throw new bc("factory must be a function.");if(s!=null&&typeof s!="function"&&typeof s!="object")throw new bc("connect must be a function or an object");typeof s!="function"&&(s=Sk({...n,maxCachedSessions:i,allowH2:l,socketPath:a,timeout:o,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:g}:void 0,...s})),super(u),this[Fk]=u.interceptors?.Pool&&Array.isArray(u.interceptors.Pool)?u.interceptors.Pool:[],this[Fc]=r||null,this[jQ]=ZQ.parseOrigin(e),this[kc]={...ZQ.deepClone(u),connect:s,allowH2:l},this[kc].interceptors=u.interceptors?{...u.interceptors}:void 0,this[KQ]=A,this.on("connectionError",(E,h,C)=>{for(let I of h){let Q=this[rn].indexOf(I);Q!==-1&&this[rn].splice(Q,1)}})}[bk](){for(let e of this[rn])if(!e[Dk])return e;if(!this[Fc]||this[rn].length{"use strict";var{BalancedPoolMissingUpstreamError:Uk,InvalidArgumentError:Gk}=Y(),{PoolBase:Lk,kClients:Ce,kNeedDrain:ws,kAddClient:Mk,kRemoveClient:vk,kGetDispatcher:xk}=Tc(),Ok=IA(),{kUrl:Nc,kInterceptors:Yk}=$(),{parseOrigin:$Q}=M(),eB=Symbol("factory"),An=Symbol("options"),tB=Symbol("kGreatestCommonDivisor"),Dr=Symbol("kCurrentWeight"),Tr=Symbol("kIndex"),We=Symbol("kWeight"),sn=Symbol("kMaxWeightPerServer"),on=Symbol("kErrorPenalty");function _k(t,e){if(t===0)return e;for(;e!==0;){let r=e;e=t%e,t=r}return t}function Jk(t,e){return new Ok(t,e)}var Uc=class extends Lk{constructor(e=[],{factory:r=Jk,...A}={}){if(super(),this[An]=A,this[Tr]=-1,this[Dr]=0,this[sn]=this[An].maxWeightPerServer||100,this[on]=this[An].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof r!="function")throw new Gk("factory must be a function.");this[Yk]=A.interceptors?.BalancedPool&&Array.isArray(A.interceptors.BalancedPool)?A.interceptors.BalancedPool:[],this[eB]=r;for(let s of e)this.addUpstream(s);this._updateBalancedPoolStats()}addUpstream(e){let r=$Q(e).origin;if(this[Ce].find(s=>s[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0))return this;let A=this[eB](r,Object.assign({},this[An]));this[Mk](A),A.on("connect",()=>{A[We]=Math.min(this[sn],A[We]+this[on])}),A.on("connectionError",()=>{A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats()}),A.on("disconnect",(...s)=>{let o=s[2];o&&o.code==="UND_ERR_SOCKET"&&(A[We]=Math.max(1,A[We]-this[on]),this._updateBalancedPoolStats())});for(let s of this[Ce])s[We]=this[sn];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let r=0;rs[Nc].origin===r&&s.closed!==!0&&s.destroyed!==!0);return A&&this[vk](A),this}get upstreams(){return this[Ce].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[Nc].origin)}[xk](){if(this[Ce].length===0)throw new Uk;if(!this[Ce].find(o=>!o[ws]&&o.closed!==!0&&o.destroyed!==!0)||this[Ce].map(o=>o[ws]).reduce((o,n)=>o&&n,!0))return;let A=0,s=this[Ce].findIndex(o=>!o[ws]);for(;A++this[Ce][s][We]&&!o[ws]&&(s=this[Tr]),this[Tr]===0&&(this[Dr]=this[Dr]-this[tB],this[Dr]<=0&&(this[Dr]=this[sn])),o[We]>=this[Dr]&&!o[ws])return o}return this[Dr]=this[Ce][s][We],this[Tr]=s,this[Ce][s]}};rB.exports=Uc});var CA=B((jJ,gB)=>{"use strict";var{InvalidArgumentError:nn}=Y(),{kClients:jt,kRunning:sB,kClose:Pk,kDestroy:Hk,kDispatch:Vk,kInterceptors:qk}=$(),Wk=eA(),zk=IA(),Zk=BA(),jk=M(),Kk=$o(),oB=Symbol("onConnect"),nB=Symbol("onDisconnect"),iB=Symbol("onConnectionError"),Xk=Symbol("maxRedirections"),aB=Symbol("onDrain"),cB=Symbol("factory"),Gc=Symbol("options");function $k(t,e){return e&&e.connections===1?new Zk(t,e):new zk(t,e)}var Lc=class extends Wk{constructor({factory:e=$k,maxRedirections:r=0,connect:A,...s}={}){if(typeof e!="function")throw new nn("factory must be a function.");if(A!=null&&typeof A!="function"&&typeof A!="object")throw new nn("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new nn("maxRedirections must be a positive number");super(s),A&&typeof A!="function"&&(A={...A}),this[qk]=s.interceptors?.Agent&&Array.isArray(s.interceptors.Agent)?s.interceptors.Agent:[Kk({maxRedirections:r})],this[Gc]={...jk.deepClone(s),connect:A},this[Gc].interceptors=s.interceptors?{...s.interceptors}:void 0,this[Xk]=r,this[cB]=e,this[jt]=new Map,this[aB]=(o,n)=>{this.emit("drain",o,[this,...n])},this[oB]=(o,n)=>{this.emit("connect",o,[this,...n])},this[nB]=(o,n,i)=>{this.emit("disconnect",o,[this,...n],i)},this[iB]=(o,n,i)=>{this.emit("connectionError",o,[this,...n],i)}}get[sB](){let e=0;for(let r of this[jt].values())e+=r[sB];return e}[Vk](e,r){let A;if(e.origin&&(typeof e.origin=="string"||e.origin instanceof URL))A=String(e.origin);else throw new nn("opts.origin must be a non-empty string or URL.");let s=this[jt].get(A);return s||(s=this[cB](e.origin,this[Gc]).on("drain",this[aB]).on("connect",this[oB]).on("disconnect",this[nB]).on("connectionError",this[iB]),this[jt].set(A,s)),s.dispatch(e,r)}async[Pk](){let e=[];for(let r of this[jt].values())e.push(r.close());this[jt].clear(),await Promise.all(e)}async[Hk](e){let r=[];for(let A of this[jt].values())r.push(A.destroy(e));this[jt].clear(),await Promise.all(r)}};gB.exports=Lc});var Yc=B((KJ,pB)=>{"use strict";var{kProxy:Mc,kClose:BB,kDestroy:IB,kDispatch:lB,kInterceptors:eF}=$(),{URL:br}=require("node:url"),tF=CA(),CB=IA(),dB=eA(),{InvalidArgumentError:dA,RequestAbortedError:rF,SecureProxyConnectionError:AF}=Y(),uB=ts(),fB=BA(),an=Symbol("proxy agent"),cn=Symbol("proxy client"),Kt=Symbol("proxy headers"),vc=Symbol("request tls settings"),EB=Symbol("proxy tls settings"),hB=Symbol("connect endpoint function"),QB=Symbol("tunnel proxy");function sF(t){return t==="https:"?443:80}function oF(t,e){return new CB(t,e)}var nF=()=>{};function iF(t,e){return e.connections===1?new fB(t,e):new CB(t,e)}var xc=class extends dB{#e;constructor(e,{headers:r={},connect:A,factory:s}){if(super(),!e)throw new dA("Proxy URL is mandatory");this[Kt]=r,s?this.#e=s(e,{connect:A}):this.#e=new fB(e,{connect:A})}[lB](e,r){let A=r.onHeaders;r.onHeaders=function(i,a,c){if(i===407){typeof r.onError=="function"&&r.onError(new dA("Proxy Authentication Required (407)"));return}A&&A.call(this,i,a,c)};let{origin:s,path:o="/",headers:n={}}=e;if(e.path=s+o,!("host"in n)&&!("Host"in n)){let{host:i}=new br(s);n.host=i}return e.headers={...this[Kt],...n},this.#e[lB](e,r)}async[BB](){return this.#e.close()}async[IB](e){return this.#e.destroy(e)}},Oc=class extends dB{constructor(e){if(super(),!e||typeof e=="object"&&!(e instanceof br)&&!e.uri)throw new dA("Proxy uri is mandatory");let{clientFactory:r=oF}=e;if(typeof r!="function")throw new dA("Proxy opts.clientFactory must be a function.");let{proxyTunnel:A=!0}=e,s=this.#e(e),{href:o,origin:n,port:i,protocol:a,username:c,password:g,hostname:l}=s;if(this[Mc]={uri:o,protocol:a},this[eF]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[vc]=e.requestTls,this[EB]=e.proxyTls,this[Kt]=e.headers||{},this[QB]=A,e.auth&&e.token)throw new dA("opts.auth cannot be used in combination with opts.token");e.auth?this[Kt]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Kt]["proxy-authorization"]=e.token:c&&g&&(this[Kt]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(g)}`).toString("base64")}`);let u=uB({...e.proxyTls});this[hB]=uB({...e.requestTls});let E=e.factory||iF,h=(C,I)=>{let{protocol:Q}=new br(C);return!this[QB]&&Q==="http:"&&this[Mc].protocol==="http:"?new xc(this[Mc].uri,{headers:this[Kt],connect:u,factory:E}):E(C,I)};this[cn]=r(s,{connect:u}),this[an]=new tF({...e,factory:h,connect:async(C,I)=>{let Q=C.host;C.port||(Q+=`:${sF(C.protocol)}`);try{let{socket:f,statusCode:R}=await this[cn].connect({origin:n,port:i,path:Q,signal:C.signal,headers:{...this[Kt],host:C.host},servername:this[EB]?.servername||l});if(R!==200&&(f.on("error",nF).destroy(),I(new rF(`Proxy response (${R}) !== 200 when HTTP Tunneling`))),C.protocol!=="https:"){I(null,f);return}let y;this[vc]?y=this[vc].servername:y=C.servername,this[hB]({...C,servername:y,httpSocket:f},I)}catch(f){f.code==="ERR_TLS_CERT_ALTNAME_INVALID"?I(new AF(f)):I(f)}}})}dispatch(e,r){let A=aF(e.headers);if(cF(A),A&&!("host"in A)&&!("Host"in A)){let{host:s}=new br(e.origin);A.host=s}return this[an].dispatch({...e,headers:A},r)}#e(e){return typeof e=="string"?new br(e):e instanceof br?e:new br(e.uri)}async[BB](){await this[an].close(),await this[cn].close()}async[IB](){await this[an].destroy(),await this[cn].destroy()}};function aF(t){if(Array.isArray(t)){let e={};for(let r=0;rr.toLowerCase()==="proxy-authorization"))throw new dA("Proxy-Authorization should be sent in ProxyAgent constructor")}pB.exports=Oc});var TB=B((XJ,DB)=>{"use strict";var gF=eA(),{kClose:lF,kDestroy:uF,kClosed:mB,kDestroyed:wB,kDispatch:EF,kNoProxyAgent:ys,kHttpProxyAgent:Xt,kHttpsProxyAgent:kr}=$(),yB=Yc(),hF=CA(),QF={"http:":80,"https:":443},RB=!1,_c=class extends gF{#e=null;#t=null;#r=null;constructor(e={}){super(),this.#r=e,RB||(RB=!0,process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"}));let{httpProxy:r,httpsProxy:A,noProxy:s,...o}=e;this[ys]=new hF(o);let n=r??process.env.http_proxy??process.env.HTTP_PROXY;n?this[Xt]=new yB({...o,uri:n}):this[Xt]=this[ys];let i=A??process.env.https_proxy??process.env.HTTPS_PROXY;i?this[kr]=new yB({...o,uri:i}):this[kr]=this[Xt],this.#A()}[EF](e,r){let A=new URL(e.origin);return this.#o(A).dispatch(e,r)}async[lF](){await this[ys].close(),this[Xt][mB]||await this[Xt].close(),this[kr][mB]||await this[kr].close()}async[uF](e){await this[ys].destroy(e),this[Xt][wB]||await this[Xt].destroy(e),this[kr][wB]||await this[kr].destroy(e)}#o(e){let{protocol:r,host:A,port:s}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),s=Number.parseInt(s,10)||QF[r]||0,this.#s(A,s)?r==="https:"?this[kr]:this[Xt]:this[ys]}#s(e,r){if(this.#n&&this.#A(),this.#t.length===0)return!0;if(this.#e==="*")return!1;for(let A=0;A{"use strict";var fA=require("node:assert"),{kRetryHandlerDefaultRetry:bB}=$(),{RequestRetryError:pA}=Y(),{isDisturbed:kB,parseHeaders:BF,parseRangeHeader:FB,wrapRequestBody:IF}=M();function CF(t){let e=Date.now();return new Date(t).getTime()-e}function SB(t,e,r,A){let s=t["content-length"];if(s==null||!Number.isFinite(e.start)||!Number.isFinite(e.end))return null;let o=Number(s),n=e.end-e.start+1;return!Number.isFinite(o)||o!==n?new pA("Content-Length mismatch",r,{headers:t,data:{count:A}}):null}var Jc=class t{constructor(e,r){let{retryOptions:A,...s}=e,{retry:o,maxRetries:n,maxTimeout:i,minTimeout:a,timeoutFactor:c,methods:g,errorCodes:l,retryAfter:u,statusCodes:E}=A??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...s,body:IF(e.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??t[bB],retryAfter:u??!0,maxTimeout:i??30*1e3,minTimeout:a??500,timeoutFactor:c??2,maxRetries:n??5,methods:g??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:E??[500,502,503,504,429],errorCodes:l??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect(h=>{this.aborted=!0,this.abort?this.abort(h):this.reason=h})}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,r,A){this.handler.onUpgrade&&this.handler.onUpgrade(e,r,A)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[bB](e,{state:r,opts:A},s){let{statusCode:o,code:n,headers:i}=e,{method:a,retryOptions:c}=A,{maxRetries:g,minTimeout:l,maxTimeout:u,timeoutFactor:E,statusCodes:h,errorCodes:C,methods:I}=c,{counter:Q}=r;if(n&&n!=="UND_ERR_REQ_RETRY"&&!C.includes(n)){s(e);return}if(Array.isArray(I)&&!I.includes(a)){s(e);return}if(o!=null&&Array.isArray(h)&&!h.includes(o)){s(e);return}if(Q>g){s(e);return}let f=i?.["retry-after"];f&&(f=Number(f),f=Number.isNaN(f)?CF(f):f*1e3);let R=f>0?Math.min(f,u):Math.min(l*E**(Q-1),u);setTimeout(()=>s(null),R)}onHeaders(e,r,A,s){let o=BF(r);if(this.retryCount+=1,e>=300)return this.retryOpts.statusCodes.includes(e)===!1?this.handler.onHeaders(e,r,A,s):(this.abort(new pA("Request failed",e,{headers:o,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new pA("server does not support the range header and the payload was partially consumed",e,{headers:o,data:{count:this.retryCount}})),!1;let i=FB(o["content-range"]);if(!i)return this.abort(new pA("Content-Range mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==o.etag)return this.abort(new pA("ETag mismatch",e,{headers:o,data:{count:this.retryCount}})),!1;let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;return fA(this.start===c,"content-range mismatch"),fA(this.end==null||this.end===l,"content-range mismatch"),this.resume=A,!0}if(this.end==null){if(e===206){let i=FB(o["content-range"]);if(i==null)return this.handler.onHeaders(e,r,A,s);let a=SB(o,i,e,this.retryCount);if(a!=null)return this.abort(a),!1;let{start:c,size:g,end:l=g-1}=i;fA(c!=null&&Number.isFinite(c),"content-range mismatch"),fA(l!=null&&Number.isFinite(l),"invalid content-length"),this.start=c,this.end=l}if(this.end==null){let i=o["content-length"];this.end=i!=null?Number(i)-1:null}return fA(Number.isFinite(this.start)),fA(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=A,this.etag=o.etag!=null?o.etag:null,this.etag!=null&&this.etag.startsWith("W/")&&(this.etag=null),this.handler.onHeaders(e,r,A,s)}let n=new pA("Request failed",e,{headers:o,data:{count:this.retryCount}});return this.abort(n),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||kB(this.opts.body))return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},r.bind(this));function r(A){if(A!=null||this.aborted||kB(this.opts.body))return this.handler.onError(A);if(this.start!==0){let s={range:`bytes=${this.start}-${this.end??""}`};this.etag!=null&&(s["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...s}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(s){this.handler.onError(s)}}}};NB.exports=Jc});var GB=B((eP,UB)=>{"use strict";var dF=$A(),fF=gn(),Pc=class extends dF{#e=null;#t=null;constructor(e,r={}){super(r),this.#e=e,this.#t=r}dispatch(e,r){let A=new fF({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:r});return this.#e.dispatch(e,A)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}};UB.exports=Pc});var Zc=B((tP,PB)=>{"use strict";var OB=require("node:assert"),{Readable:pF}=require("node:stream"),{RequestAbortedError:YB,NotSupportedError:mF,InvalidArgumentError:wF,AbortError:Hc}=Y(),_B=M(),{ReadableStreamFrom:yF}=M(),Me=Symbol("kConsume"),Rs=Symbol("kReading"),$t=Symbol("kBody"),LB=Symbol("kAbort"),JB=Symbol("kContentType"),MB=Symbol("kContentLength"),RF=()=>{},Vc=class extends pF{constructor({resume:e,abort:r,contentType:A="",contentLength:s,highWaterMark:o=64*1024}){super({autoDestroy:!0,read:e,highWaterMark:o}),this._readableState.dataEmitted=!1,this[LB]=r,this[Me]=null,this[$t]=null,this[JB]=A,this[MB]=s,this[Rs]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new YB),e&&this[LB](),super.destroy(e)}_destroy(e,r){this[Rs]?r(e):setImmediate(()=>{r(e)})}on(e,...r){return(e==="data"||e==="readable")&&(this[Rs]=!0),super.on(e,...r)}addListener(e,...r){return this.on(e,...r)}off(e,...r){let A=super.off(e,...r);return(e==="data"||e==="readable")&&(this[Rs]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,...r){return this.off(e,...r)}push(e){return this[Me]&&e!==null?(Wc(this[Me],e),this[Rs]?super.push(e):!0):super.push(e)}async text(){return Ds(this,"text")}async json(){return Ds(this,"json")}async blob(){return Ds(this,"blob")}async bytes(){return Ds(this,"bytes")}async arrayBuffer(){return Ds(this,"arrayBuffer")}async formData(){throw new mF}get bodyUsed(){return _B.isDisturbed(this)}get body(){return this[$t]||(this[$t]=yF(this),this[Me]&&(this[$t].getReader(),OB(this[$t].locked))),this[$t]}async dump(e){let r=Number.isFinite(e?.limit)?e.limit:131072,A=e?.signal;if(A!=null&&(typeof A!="object"||!("aborted"in A)))throw new wF("signal must be an AbortSignal");return A?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((s,o)=>{this[MB]>r&&this.destroy(new Hc);let n=()=>{this.destroy(A.reason??new Hc)};A?.addEventListener("abort",n),this.on("close",function(){A?.removeEventListener("abort",n),A?.aborted?o(A.reason??new Hc):s(null)}).on("error",RF).on("data",function(i){r-=i.length,r<=0&&this.destroy()}).resume()})}};function DF(t){return t[$t]&&t[$t].locked===!0||t[Me]}function TF(t){return _B.isDisturbed(t)||DF(t)}async function Ds(t,e){return OB(!t[Me]),new Promise((r,A)=>{if(TF(t)){let s=t._readableState;s.destroyed&&s.closeEmitted===!1?t.on("error",o=>{A(o)}).on("close",()=>{A(new TypeError("unusable"))}):A(s.errored??new TypeError("unusable"))}else queueMicrotask(()=>{t[Me]={type:e,stream:t,resolve:r,reject:A,length:0,body:[]},t.on("error",function(s){zc(this[Me],s)}).on("close",function(){this[Me].body!==null&&zc(this[Me],new YB)}),bF(t[Me])})})}function bF(t){if(t.body===null)return;let{_readableState:e}=t.stream;if(e.bufferIndex){let r=e.bufferIndex,A=e.buffer.length;for(let s=r;s2&&r[0]===239&&r[1]===187&&r[2]===191?3:0;return r.utf8Slice(s,A)}function vB(t,e){if(t.length===0||e===0)return new Uint8Array(0);if(t.length===1)return new Uint8Array(t[0]);let r=new Uint8Array(Buffer.allocUnsafeSlow(e).buffer),A=0;for(let s=0;s{var kF=require("node:assert"),{ResponseStatusCodeError:HB}=Y(),{chunksDecode:VB}=Zc(),FF=128*1024;async function SF({callback:t,body:e,contentType:r,statusCode:A,statusMessage:s,headers:o}){kF(e);let n=[],i=0;try{for await(let l of e)if(n.push(l),i+=l.length,i>FF){n=[],i=0;break}}catch{n=[],i=0}let a=`Response status code ${A}${s?`: ${s}`:""}`;if(A===204||!r||!i){queueMicrotask(()=>t(new HB(a,A,o)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let g;try{qB(r)?g=JSON.parse(VB(n,i)):WB(r)&&(g=VB(n,i))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>t(new HB(a,A,o,g)))}var qB=t=>t.length>15&&t[11]==="/"&&t[0]==="a"&&t[1]==="p"&&t[2]==="p"&&t[3]==="l"&&t[4]==="i"&&t[5]==="c"&&t[6]==="a"&&t[7]==="t"&&t[8]==="i"&&t[9]==="o"&&t[10]==="n"&&t[12]==="j"&&t[13]==="s"&&t[14]==="o"&&t[15]==="n",WB=t=>t.length>4&&t[4]==="/"&&t[0]==="t"&&t[1]==="e"&&t[2]==="x"&&t[3]==="t";zB.exports={getResolveErrorBodyCallback:SF,isContentTypeApplicationJson:qB,isContentTypeText:WB}});var KB=B((AP,Kc)=>{"use strict";var NF=require("node:assert"),{Readable:UF}=Zc(),{InvalidArgumentError:mA,RequestAbortedError:ZB}=Y(),ve=M(),{getResolveErrorBodyCallback:GF}=jc(),{AsyncResource:LF}=require("node:async_hooks"),ln=class extends LF{constructor(e,r){if(!e||typeof e!="object")throw new mA("invalid opts");let{signal:A,method:s,opaque:o,body:n,onInfo:i,responseHeaders:a,throwOnError:c,highWaterMark:g}=e;try{if(typeof r!="function")throw new mA("invalid callback");if(g&&(typeof g!="number"||g<0))throw new mA("invalid highWaterMark");if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new mA("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new mA("invalid method");if(i&&typeof i!="function")throw new mA("invalid onInfo callback");super("UNDICI_REQUEST")}catch(l){throw ve.isStream(n)&&ve.destroy(n.on("error",ve.nop),l),l}this.method=s,this.responseHeaders=a||null,this.opaque=o||null,this.callback=r,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=i||null,this.throwOnError=c,this.highWaterMark=g,this.signal=A,this.reason=null,this.removeAbortListener=null,ve.isStream(n)&&n.on("error",l=>{this.onError(l)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new ZB:this.removeAbortListener=ve.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new ZB,this.res?ve.destroy(this.res.on("error",ve.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&(this.res?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}))}onConnect(e,r){if(this.reason){e(this.reason);return}NF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{callback:o,opaque:n,abort:i,context:a,responseHeaders:c,highWaterMark:g}=this,l=c==="raw"?ve.parseRawHeaders(r):ve.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:l});return}let u=c==="raw"?ve.parseHeaders(r):l,E=u["content-type"],h=u["content-length"],C=new UF({resume:A,abort:i,contentType:E,contentLength:this.method!=="HEAD"&&h?Number(h):null,highWaterMark:g});this.removeAbortListener&&C.on("close",this.removeAbortListener),this.callback=null,this.res=C,o!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(GF,null,{callback:o,body:C,contentType:E,statusCode:e,statusMessage:s,headers:l}):this.runInAsyncScope(o,null,null,{statusCode:e,headers:l,trailers:this.trailers,opaque:n,body:C,context:a}))}onData(e){return this.res.push(e)}onComplete(e){ve.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:r,callback:A,body:s,opaque:o}=this;A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:o})})),r&&(this.res=null,queueMicrotask(()=>{ve.destroy(r,e)})),s&&(this.body=null,ve.destroy(s,e)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function jB(t,e){if(e===void 0)return new Promise((r,A)=>{jB.call(this,t,(s,o)=>s?A(s):r(o))});try{this.dispatch(t,new ln(t,e))}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}Kc.exports=jB;Kc.exports.RequestHandler=ln});var Ts=B((sP,eI)=>{var{addAbortListener:MF}=M(),{RequestAbortedError:vF}=Y(),wA=Symbol("kListener"),Ct=Symbol("kSignal");function XB(t){t.abort?t.abort(t[Ct]?.reason):t.reason=t[Ct]?.reason??new vF,$B(t)}function xF(t,e){if(t.reason=null,t[Ct]=null,t[wA]=null,!!e){if(e.aborted){XB(t);return}t[Ct]=e,t[wA]=()=>{XB(t)},MF(t[Ct],t[wA])}}function $B(t){t[Ct]&&("removeEventListener"in t[Ct]?t[Ct].removeEventListener("abort",t[wA]):t[Ct].removeListener("abort",t[wA]),t[Ct]=null,t[wA]=null)}eI.exports={addSignal:xF,removeSignal:$B}});var sI=B((oP,AI)=>{"use strict";var OF=require("node:assert"),{finished:YF,PassThrough:_F}=require("node:stream"),{InvalidArgumentError:yA,InvalidReturnValueError:JF}=Y(),nt=M(),{getResolveErrorBodyCallback:PF}=jc(),{AsyncResource:HF}=require("node:async_hooks"),{addSignal:VF,removeSignal:tI}=Ts(),Xc=class extends HF{constructor(e,r,A){if(!e||typeof e!="object")throw new yA("invalid opts");let{signal:s,method:o,opaque:n,body:i,onInfo:a,responseHeaders:c,throwOnError:g}=e;try{if(typeof A!="function")throw new yA("invalid callback");if(typeof r!="function")throw new yA("invalid factory");if(s&&typeof s.on!="function"&&typeof s.addEventListener!="function")throw new yA("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new yA("invalid method");if(a&&typeof a!="function")throw new yA("invalid onInfo callback");super("UNDICI_STREAM")}catch(l){throw nt.isStream(i)&&nt.destroy(i.on("error",nt.nop),l),l}this.responseHeaders=c||null,this.opaque=n||null,this.factory=r,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=i,this.onInfo=a||null,this.throwOnError=g||!1,nt.isStream(i)&&i.on("error",l=>{this.onError(l)}),VF(this,s)}onConnect(e,r){if(this.reason){e(this.reason);return}OF(this.callback),this.abort=e,this.context=r}onHeaders(e,r,A,s){let{factory:o,opaque:n,context:i,callback:a,responseHeaders:c}=this,g=c==="raw"?nt.parseRawHeaders(r):nt.parseHeaders(r);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:g});return}this.factory=null;let l;if(this.throwOnError&&e>=400){let h=(c==="raw"?nt.parseHeaders(r):g)["content-type"];l=new _F,this.callback=null,this.runInAsyncScope(PF,null,{callback:a,body:l,contentType:h,statusCode:e,statusMessage:s,headers:g})}else{if(o===null)return;if(l=this.runInAsyncScope(o,null,{statusCode:e,headers:g,opaque:n,context:i}),!l||typeof l.write!="function"||typeof l.end!="function"||typeof l.on!="function")throw new JF("expected Writable");YF(l,{readable:!1},E=>{let{callback:h,res:C,opaque:I,trailers:Q,abort:f}=this;this.res=null,(E||!C.readable)&&nt.destroy(C,E),this.callback=null,this.runInAsyncScope(h,null,E||null,{opaque:I,trailers:Q}),E&&f()})}return l.on("drain",A),this.res=l,(l.writableNeedDrain!==void 0?l.writableNeedDrain:l._writableState?.needDrain)!==!0}onData(e){let{res:r}=this;return r?r.write(e):!0}onComplete(e){let{res:r}=this;tI(this),r&&(this.trailers=nt.parseHeaders(e),r.end())}onError(e){let{res:r,callback:A,opaque:s,body:o}=this;tI(this),this.factory=null,r?(this.res=null,nt.destroy(r,e)):A&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(A,null,e,{opaque:s})})),o&&(this.body=null,nt.destroy(o,e))}};function rI(t,e,r){if(r===void 0)return new Promise((A,s)=>{rI.call(this,t,e,(o,n)=>o?s(o):A(n))});try{this.dispatch(t,new Xc(t,e,r))}catch(A){if(typeof r!="function")throw A;let s=t?.opaque;queueMicrotask(()=>r(A,{opaque:s}))}}AI.exports=rI});var aI=B((nP,iI)=>{"use strict";var{Readable:nI,Duplex:qF,PassThrough:WF}=require("node:stream"),{InvalidArgumentError:bs,InvalidReturnValueError:zF,RequestAbortedError:$c}=Y(),ze=M(),{AsyncResource:ZF}=require("node:async_hooks"),{addSignal:jF,removeSignal:KF}=Ts(),oI=require("node:assert"),RA=Symbol("resume"),eg=class extends nI{constructor(){super({autoDestroy:!0}),this[RA]=null}_read(){let{[RA]:e}=this;e&&(this[RA]=null,e())}_destroy(e,r){this._read(),r(e)}},tg=class extends nI{constructor(e){super({autoDestroy:!0}),this[RA]=e}_read(){this[RA]()}_destroy(e,r){!e&&!this._readableState.endEmitted&&(e=new $c),r(e)}},rg=class extends ZF{constructor(e,r){if(!e||typeof e!="object")throw new bs("invalid opts");if(typeof r!="function")throw new bs("invalid handler");let{signal:A,method:s,opaque:o,onInfo:n,responseHeaders:i}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new bs("signal must be an EventEmitter or EventTarget");if(s==="CONNECT")throw new bs("invalid method");if(n&&typeof n!="function")throw new bs("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=o||null,this.responseHeaders=i||null,this.handler=r,this.abort=null,this.context=null,this.onInfo=n||null,this.req=new eg().on("error",ze.nop),this.ret=new qF({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:a}=this;a?.resume&&a.resume()},write:(a,c,g)=>{let{req:l}=this;l.push(a,c)||l._readableState.destroyed?g():l[RA]=g},destroy:(a,c)=>{let{body:g,req:l,res:u,ret:E,abort:h}=this;!a&&!E._readableState.endEmitted&&(a=new $c),h&&a&&h(),ze.destroy(g,a),ze.destroy(l,a),ze.destroy(u,a),KF(this),c(a)}}).on("prefinish",()=>{let{req:a}=this;a.push(null)}),this.res=null,jF(this,A)}onConnect(e,r){let{ret:A,res:s}=this;if(this.reason){e(this.reason);return}oI(!s,"pipeline cannot be retried"),oI(!A.destroyed),this.abort=e,this.context=r}onHeaders(e,r,A){let{opaque:s,handler:o,context:n}=this;if(e<200){if(this.onInfo){let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);this.onInfo({statusCode:e,headers:a})}return}this.res=new tg(A);let i;try{this.handler=null;let a=this.responseHeaders==="raw"?ze.parseRawHeaders(r):ze.parseHeaders(r);i=this.runInAsyncScope(o,null,{statusCode:e,headers:a,opaque:s,body:this.res,context:n})}catch(a){throw this.res.on("error",ze.nop),a}if(!i||typeof i.on!="function")throw new zF("expected Readable");i.on("data",a=>{let{ret:c,body:g}=this;!c.push(a)&&g.pause&&g.pause()}).on("error",a=>{let{ret:c}=this;ze.destroy(c,a)}).on("end",()=>{let{ret:a}=this;a.push(null)}).on("close",()=>{let{ret:a}=this;a._readableState.ended||ze.destroy(a,new $c)}),this.body=i}onData(e){let{res:r}=this;return r.push(e)}onComplete(e){let{res:r}=this;r.push(null)}onError(e){let{ret:r}=this;this.handler=null,ze.destroy(r,e)}};function XF(t,e){try{let r=new rg(t,e);return this.dispatch({...t,body:r.req},r),r.ret}catch(r){return new WF().destroy(r)}}iI.exports=XF});var hI=B((iP,EI)=>{"use strict";var{InvalidArgumentError:Ag,SocketError:$F}=Y(),{AsyncResource:eS}=require("node:async_hooks"),cI=M(),{addSignal:tS,removeSignal:gI}=Ts(),lI=require("node:assert"),sg=class extends eS{constructor(e,r){if(!e||typeof e!="object")throw new Ag("invalid opts");if(typeof r!="function")throw new Ag("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new Ag("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=o||null,this.opaque=s||null,this.callback=r,this.abort=null,this.context=null,tS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}lI(this.callback),this.abort=e,this.context=null}onHeaders(){throw new $F("bad upgrade",null)}onUpgrade(e,r,A){lI(e===101);let{callback:s,opaque:o,context:n}=this;gI(this),this.callback=null;let i=this.responseHeaders==="raw"?cI.parseRawHeaders(r):cI.parseHeaders(r);this.runInAsyncScope(s,null,null,{headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;gI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function uI(t,e){if(e===void 0)return new Promise((r,A)=>{uI.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new sg(t,e);this.dispatch({...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}EI.exports=uI});var dI=B((aP,CI)=>{"use strict";var rS=require("node:assert"),{AsyncResource:AS}=require("node:async_hooks"),{InvalidArgumentError:og,SocketError:sS}=Y(),QI=M(),{addSignal:oS,removeSignal:BI}=Ts(),ng=class extends AS{constructor(e,r){if(!e||typeof e!="object")throw new og("invalid opts");if(typeof r!="function")throw new og("invalid callback");let{signal:A,opaque:s,responseHeaders:o}=e;if(A&&typeof A.on!="function"&&typeof A.addEventListener!="function")throw new og("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=s||null,this.responseHeaders=o||null,this.callback=r,this.abort=null,oS(this,A)}onConnect(e,r){if(this.reason){e(this.reason);return}rS(this.callback),this.abort=e,this.context=r}onHeaders(){throw new sS("bad connect",null)}onUpgrade(e,r,A){let{callback:s,opaque:o,context:n}=this;BI(this),this.callback=null;let i=r;i!=null&&(i=this.responseHeaders==="raw"?QI.parseRawHeaders(r):QI.parseHeaders(r)),this.runInAsyncScope(s,null,null,{statusCode:e,headers:i,socket:A,opaque:o,context:n})}onError(e){let{callback:r,opaque:A}=this;BI(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,e,{opaque:A})}))}};function II(t,e){if(e===void 0)return new Promise((r,A)=>{II.call(this,t,(s,o)=>s?A(s):r(o))});try{let r=new ng(t,e);this.dispatch({...t,method:"CONNECT"},r)}catch(r){if(typeof e!="function")throw r;let A=t?.opaque;queueMicrotask(()=>e(r,{opaque:A}))}}CI.exports=II});var fI=B((cP,DA)=>{"use strict";DA.exports.request=KB();DA.exports.stream=sI();DA.exports.pipeline=aI();DA.exports.upgrade=hI();DA.exports.connect=dI()});var ag=B((gP,mI)=>{"use strict";var{UndiciError:nS}=Y(),pI=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),ig=class t extends nS{constructor(e){super(e),Error.captureStackTrace(this,t),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&e[pI]===!0}[pI]=!0};mI.exports={MockNotMatchedError:ig}});var TA=B((lP,wI)=>{"use strict";wI.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var ks=B((uP,GI)=>{"use strict";var{MockNotMatchedError:Fr}=ag(),{kDispatches:un,kMockAgent:iS,kOriginalDispatch:aS,kOrigin:cS,kGetNetConnect:gS}=TA(),{buildURL:lS}=M(),{STATUS_CODES:uS}=require("node:http"),{types:{isPromise:ES}}=require("node:util");function Gt(t,e){return typeof t=="string"?t===e:t instanceof RegExp?t.test(e):typeof t=="function"?t(e)===!0:!1}function RI(t){return Object.fromEntries(Object.entries(t).map(([e,r])=>[e.toLocaleLowerCase(),r]))}function DI(t,e){if(Array.isArray(t)){for(let r=0;r"u")return!0;if(typeof e!="object"||typeof t.headers!="object")return!1;for(let[r,A]of Object.entries(t.headers)){let s=DI(e,r);if(!Gt(A,s))return!1}return!0}function yI(t){if(typeof t!="string")return t;let e=t.split("?");if(e.length!==2)return t;let r=new URLSearchParams(e.pop());return r.sort(),[...e,r.toString()].join("?")}function hS(t,{path:e,method:r,body:A,headers:s}){let o=Gt(t.path,e),n=Gt(t.method,r),i=typeof t.body<"u"?Gt(t.body,A):!0,a=TI(t,s);return o&&n&&i&&a}function bI(t){return Buffer.isBuffer(t)||t instanceof Uint8Array||t instanceof ArrayBuffer?t:typeof t=="object"?JSON.stringify(t):t.toString()}function kI(t,e){let r=e.query?lS(e.path,e.query):e.path,A=typeof r=="string"?yI(r):r,s=t.filter(({consumed:o})=>!o).filter(({path:o})=>Gt(yI(o),A));if(s.length===0)throw new Fr(`Mock dispatch not matched for path '${A}'`);if(s=s.filter(({method:o})=>Gt(o,e.method)),s.length===0)throw new Fr(`Mock dispatch not matched for method '${e.method}' on path '${A}'`);if(s=s.filter(({body:o})=>typeof o<"u"?Gt(o,e.body):!0),s.length===0)throw new Fr(`Mock dispatch not matched for body '${e.body}' on path '${A}'`);if(s=s.filter(o=>TI(o,e.headers)),s.length===0){let o=typeof e.headers=="object"?JSON.stringify(e.headers):e.headers;throw new Fr(`Mock dispatch not matched for headers '${o}' on path '${A}'`)}return s[0]}function QS(t,e,r){let A={timesInvoked:0,times:1,persist:!1,consumed:!1},s=typeof r=="function"?{callback:r}:{...r},o={...A,...e,pending:!0,data:{error:null,...s}};return t.push(o),o}function cg(t,e){let r=t.findIndex(A=>A.consumed?hS(A,e):!1);r!==-1&&t.splice(r,1)}function FI(t){let{path:e,method:r,body:A,headers:s,query:o}=t;return{path:e,method:r,body:A,headers:s,query:o}}function gg(t){let e=Object.keys(t),r=[];for(let A=0;A=u,A.pending=l0?setTimeout(()=>{E(this[un])},c):E(this[un]);function E(C,I=o){let Q=Array.isArray(t.headers)?lg(t.headers):t.headers,f=typeof I=="function"?I({...t,headers:Q}):I;if(ES(f)){f.then(Z=>E(C,Z));return}let R=bI(f),y=gg(n),P=gg(i);e.onConnect?.(Z=>e.onError(Z),null),e.onHeaders?.(s,y,h,SI(s)),e.onData?.(Buffer.from(R)),e.onComplete?.(P),cg(C,r)}function h(){}return!0}function IS(){let t=this[iS],e=this[cS],r=this[aS];return function(s,o){if(t.isMockActive)try{NI.call(this,s,o)}catch(n){if(n instanceof Fr){let i=t[gS]();if(i===!1)throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect disabled)`);if(UI(i,e))r.call(this,s,o);else throw new Fr(`${n.message}: subsequent request to origin ${e} was not allowed (net.connect is not enabled for this origin)`)}else throw n}else r.call(this,s,o)}}function UI(t,e){let r=new URL(e);return t===!0?!0:!!(Array.isArray(t)&&t.some(A=>Gt(A,r.host)))}function CS(t){if(t){let{agent:e,...r}=t;return r}}GI.exports={getResponseData:bI,getMockDispatch:kI,addMockDispatch:QS,deleteMockDispatch:cg,buildKey:FI,generateKeyValues:gg,matchValue:Gt,getResponse:BS,getStatusText:SI,mockDispatch:NI,buildMockDispatch:IS,checkNetConnect:UI,buildMockOptions:CS,getHeaderByName:DI,buildHeadersFromArray:lg}});var Cg=B((EP,Ig)=>{"use strict";var{getResponseData:dS,buildKey:fS,addMockDispatch:ug}=ks(),{kDispatches:En,kDispatchKey:hn,kDefaultHeaders:Eg,kDefaultTrailers:hg,kContentLength:Qg,kMockDispatch:Qn}=TA(),{InvalidArgumentError:dt}=Y(),{buildURL:pS}=M(),bA=class{constructor(e){this[Qn]=e}delay(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("waitInMs must be a valid integer > 0");return this[Qn].delay=e,this}persist(){return this[Qn].persist=!0,this}times(e){if(typeof e!="number"||!Number.isInteger(e)||e<=0)throw new dt("repeatTimes must be a valid integer > 0");return this[Qn].times=e,this}},Bg=class{constructor(e,r){if(typeof e!="object")throw new dt("opts must be an object");if(typeof e.path>"u")throw new dt("opts.path must be defined");if(typeof e.method>"u"&&(e.method="GET"),typeof e.path=="string")if(e.query)e.path=pS(e.path,e.query);else{let A=new URL(e.path,"data://");e.path=A.pathname+A.search}typeof e.method=="string"&&(e.method=e.method.toUpperCase()),this[hn]=fS(e),this[En]=r,this[Eg]={},this[hg]={},this[Qg]=!1}createMockScopeDispatchData({statusCode:e,data:r,responseOptions:A}){let s=dS(r),o=this[Qg]?{"content-length":s.length}:{},n={...this[Eg],...o,...A.headers},i={...this[hg],...A.trailers};return{statusCode:e,data:r,headers:n,trailers:i}}validateReplyParameters(e){if(typeof e.statusCode>"u")throw new dt("statusCode must be defined");if(typeof e.responseOptions!="object"||e.responseOptions===null)throw new dt("responseOptions must be an object")}reply(e){if(typeof e=="function"){let o=i=>{let a=e(i);if(typeof a!="object"||a===null)throw new dt("reply options callback must return an object");let c={data:"",responseOptions:{},...a};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},n=ug(this[En],this[hn],o);return new bA(n)}let r={statusCode:e,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(r);let A=this.createMockScopeDispatchData(r),s=ug(this[En],this[hn],A);return new bA(s)}replyWithError(e){if(typeof e>"u")throw new dt("error must be defined");let r=ug(this[En],this[hn],{error:e});return new bA(r)}defaultReplyHeaders(e){if(typeof e>"u")throw new dt("headers must be defined");return this[Eg]=e,this}defaultReplyTrailers(e){if(typeof e>"u")throw new dt("trailers must be defined");return this[hg]=e,this}replyContentLength(){return this[Qg]=!0,this}};Ig.exports.MockInterceptor=Bg;Ig.exports.MockScope=bA});var pg=B((hP,_I)=>{"use strict";var{promisify:mS}=require("node:util"),wS=BA(),{buildMockDispatch:yS}=ks(),{kDispatches:LI,kMockAgent:MI,kClose:vI,kOriginalClose:xI,kOrigin:OI,kOriginalDispatch:RS,kConnected:dg}=TA(),{MockInterceptor:DS}=Cg(),YI=$(),{InvalidArgumentError:TS}=Y(),fg=class extends wS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new TS("Argument opts.agent must implement Agent");this[MI]=r.agent,this[OI]=e,this[LI]=[],this[dg]=1,this[RS]=this.dispatch,this[xI]=this.close.bind(this),this.dispatch=yS.call(this),this.close=this[vI]}get[YI.kConnected](){return this[dg]}intercept(e){return new DS(e,this[LI])}async[vI](){await mS(this[xI])(),this[dg]=0,this[MI][YI.kClients].delete(this[OI])}};_I.exports=fg});var yg=B((QP,zI)=>{"use strict";var{promisify:bS}=require("node:util"),kS=IA(),{buildMockDispatch:FS}=ks(),{kDispatches:JI,kMockAgent:PI,kClose:HI,kOriginalClose:VI,kOrigin:qI,kOriginalDispatch:SS,kConnected:mg}=TA(),{MockInterceptor:NS}=Cg(),WI=$(),{InvalidArgumentError:US}=Y(),wg=class extends kS{constructor(e,r){if(super(e,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new US("Argument opts.agent must implement Agent");this[PI]=r.agent,this[qI]=e,this[JI]=[],this[mg]=1,this[SS]=this.dispatch,this[VI]=this.close.bind(this),this.dispatch=FS.call(this),this.close=this[HI]}get[WI.kConnected](){return this[mg]}intercept(e){return new NS(e,this[JI])}async[HI](){await bS(this[VI])(),this[mg]=0,this[PI][WI.kClients].delete(this[qI])}};zI.exports=wg});var jI=B((IP,ZI)=>{"use strict";var GS={pronoun:"it",is:"is",was:"was",this:"this"},LS={pronoun:"they",is:"are",was:"were",this:"these"};ZI.exports=class{constructor(e,r){this.singular=e,this.plural=r}pluralize(e){let r=e===1,A=r?GS:LS,s=r?this.singular:this.plural;return{...A,count:e,noun:s}}}});var XI=B((dP,KI)=>{"use strict";var{Transform:MS}=require("node:stream"),{Console:vS}=require("node:console"),xS=process.versions.icu?"\u2705":"Y ",OS=process.versions.icu?"\u274C":"N ";KI.exports=class{constructor({disableColors:e}={}){this.transform=new MS({transform(r,A,s){s(null,r)}}),this.logger=new vS({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let r=e.map(({method:A,path:s,data:{statusCode:o},persist:n,times:i,timesInvoked:a,origin:c})=>({Method:A,Origin:c,Path:s,"Status code":o,Persistent:n?xS:OS,Invocations:a,Remaining:n?1/0:i-a}));return this.logger.table(r),this.transform.read().toString()}}});var rC=B((fP,tC)=>{"use strict";var{kClients:Sr}=$(),YS=CA(),{kAgent:Rg,kMockAgentSet:Bn,kMockAgentGet:$I,kDispatches:Dg,kIsMockActive:In,kNetConnect:Nr,kGetNetConnect:_S,kOptions:Cn,kFactory:dn}=TA(),JS=pg(),PS=yg(),{matchValue:HS,buildMockOptions:VS}=ks(),{InvalidArgumentError:eC,UndiciError:qS}=Y(),WS=$A(),zS=jI(),ZS=XI(),Tg=class extends WS{constructor(e){if(super(e),this[Nr]=!0,this[In]=!0,e?.agent&&typeof e.agent.dispatch!="function")throw new eC("Argument opts.agent must implement Agent");let r=e?.agent?e.agent:new YS(e);this[Rg]=r,this[Sr]=r[Sr],this[Cn]=VS(e)}get(e){let r=this[$I](e);return r||(r=this[dn](e),this[Bn](e,r)),r}dispatch(e,r){return this.get(e.origin),this[Rg].dispatch(e,r)}async close(){await this[Rg].close(),this[Sr].clear()}deactivate(){this[In]=!1}activate(){this[In]=!0}enableNetConnect(e){if(typeof e=="string"||typeof e=="function"||e instanceof RegExp)Array.isArray(this[Nr])?this[Nr].push(e):this[Nr]=[e];else if(typeof e>"u")this[Nr]=!0;else throw new eC("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[Nr]=!1}get isMockActive(){return this[In]}[Bn](e,r){this[Sr].set(e,r)}[dn](e){let r=Object.assign({agent:this},this[Cn]);return this[Cn]&&this[Cn].connections===1?new JS(e,r):new PS(e,r)}[$I](e){let r=this[Sr].get(e);if(r)return r;if(typeof e!="string"){let A=this[dn]("http://localhost:9999");return this[Bn](e,A),A}for(let[A,s]of Array.from(this[Sr]))if(s&&typeof A!="string"&&HS(A,e)){let o=this[dn](e);return this[Bn](e,o),o[Dg]=s[Dg],o}}[_S](){return this[Nr]}pendingInterceptors(){let e=this[Sr];return Array.from(e.entries()).flatMap(([r,A])=>A[Dg].map(s=>({...s,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new ZS}={}){let r=this.pendingInterceptors();if(r.length===0)return;let A=new zS("interceptor","interceptors").pluralize(r.length);throw new qS(` -${A.count} ${A.noun} ${A.is} pending: - -${e.format(r)} -`.trim())}};tC.exports=Tg});var fn=B((pP,nC)=>{"use strict";var AC=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:jS}=Y(),KS=CA();oC()===void 0&&sC(new KS);function sC(t){if(!t||typeof t.dispatch!="function")throw new jS("Argument agent must implement Agent");Object.defineProperty(globalThis,AC,{value:t,writable:!0,enumerable:!1,configurable:!1})}function oC(){return globalThis[AC]}nC.exports={setGlobalDispatcher:sC,getGlobalDispatcher:oC}});var pn=B((wP,iC)=>{"use strict";iC.exports=class{#e;constructor(e){if(typeof e!="object"||e===null)throw new TypeError("handler must be an object");this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}});var cC=B((yP,aC)=>{"use strict";var XS=Xo();aC.exports=t=>{let e=t?.maxRedirections;return r=>function(s,o){let{maxRedirections:n=e,...i}=s;if(!n)return r(s,o);let a=new XS(r,n,s,o);return r(i,a)}}});var lC=B((RP,gC)=>{"use strict";var $S=gn();gC.exports=t=>e=>function(A,s){return e(A,new $S({...A,retryOptions:{...t,...A.retryOptions}},{handler:s,dispatch:e}))}});var EC=B((DP,uC)=>{"use strict";var eN=M(),{InvalidArgumentError:tN,RequestAbortedError:rN}=Y(),AN=pn(),bg=class extends AN{#e=1024*1024;#t=null;#r=!1;#o=!1;#s=0;#A=null;#n=null;constructor({maxSize:e},r){if(super(r),e!=null&&(!Number.isFinite(e)||e<1))throw new tN("maxSize must be a number greater than 0");this.#e=e??this.#e,this.#n=r}onConnect(e){this.#t=e,this.#n.onConnect(this.#i.bind(this))}#i(e){this.#o=!0,this.#A=e}onHeaders(e,r,A,s){let n=eN.parseHeaders(r)["content-length"];if(n!=null&&n>this.#e)throw new rN(`Response size (${n}) larger than maxSize (${this.#e})`);return this.#o?!0:this.#n.onHeaders(e,r,A,s)}onError(e){this.#r||(e=this.#A??e,this.#n.onError(e))}onData(e){return this.#s=this.#s+e.length,this.#s>=this.#e&&(this.#r=!0,this.#o?this.#n.onError(this.#A):this.#n.onComplete([])),!0}onComplete(e){if(!this.#r){if(this.#o){this.#n.onError(this.reason);return}this.#n.onComplete(e)}}};function sN({maxSize:t}={maxSize:1024*1024}){return e=>function(A,s){let{dumpMaxSize:o=t}=A,n=new bg({maxSize:o},s);return e(A,n)}}uC.exports=sN});var BC=B((TP,QC)=>{"use strict";var{isIP:oN}=require("node:net"),{lookup:nN}=require("node:dns"),iN=pn(),{InvalidArgumentError:kA,InformationalError:aN}=Y(),hC=Math.pow(2,31)-1,kg=class{#e=0;#t=0;#r=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#o,this.pick=e.pick??this.#s}get full(){return this.#r.size===this.#t}runLookup(e,r,A){let s=this.#r.get(e.hostname);if(s==null&&this.full){A(null,e.origin);return}let o={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...r.dns,maxTTL:this.#e,maxItems:this.#t};if(s==null)this.lookup(e,o,(n,i)=>{if(n||i==null||i.length===0){A(n??new aN("No DNS entries found"));return}this.setRecords(e,i);let a=this.#r.get(e.hostname),c=this.pick(e,a,o.affinity),g;typeof c.port=="number"?g=`:${c.port}`:e.port!==""?g=`:${e.port}`:g="",A(null,`${e.protocol}//${c.family===6?`[${c.address}]`:c.address}${g}`)});else{let n=this.pick(e,s,o.affinity);if(n==null){this.#r.delete(e.hostname),this.runLookup(e,r,A);return}let i;typeof n.port=="number"?i=`:${n.port}`:e.port!==""?i=`:${e.port}`:i="",A(null,`${e.protocol}//${n.family===6?`[${n.address}]`:n.address}${i}`)}}#o(e,r,A){nN(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(s,o)=>{if(s)return A(s);let n=new Map;for(let i of o)n.set(`${i.address}:${i.family}`,i);A(null,n.values())})}#s(e,r,A){let s=null,{records:o,offset:n}=r,i;if(this.dualStack?(A==null&&(n==null||n===hC?(r.offset=0,A=4):(r.offset++,A=(r.offset&1)===1?6:4)),o[A]!=null&&o[A].ips.length>0?i=o[A]:i=o[A===4?6:4]):i=o[A],i==null||i.ips.length===0)return s;i.offset==null||i.offset===hC?i.offset=0:i.offset++;let a=i.offset%i.ips.length;return s=i.ips[a]??null,s==null?s:Date.now()-s.timestamp>s.ttl?(i.ips.splice(a,1),this.pick(e,r,A)):s}setRecords(e,r){let A=Date.now(),s={records:{4:null,6:null}};for(let o of r){o.timestamp=A,typeof o.ttl=="number"?o.ttl=Math.min(o.ttl,this.#e):o.ttl=this.#e;let n=s.records[o.family]??{ips:[]};n.ips.push(o),s.records[o.family]=n}this.#r.set(e.hostname,s)}getHandler(e,r){return new Fg(this,e,r)}},Fg=class extends iN{#e=null;#t=null;#r=null;#o=null;#s=null;constructor(e,{origin:r,handler:A,dispatch:s},o){super(A),this.#s=r,this.#o=A,this.#t={...o},this.#e=e,this.#r=s}onError(e){switch(e.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#s,this.#t,(r,A)=>{if(r)return this.#o.onError(r);let s={...this.#t,origin:A};this.#r(s,this)});return}this.#o.onError(e);return}case"ENOTFOUND":this.#e.deleteRecord(this.#s);default:this.#o.onError(e);break}}};QC.exports=t=>{if(t?.maxTTL!=null&&(typeof t?.maxTTL!="number"||t?.maxTTL<0))throw new kA("Invalid maxTTL. Must be a positive number");if(t?.maxItems!=null&&(typeof t?.maxItems!="number"||t?.maxItems<1))throw new kA("Invalid maxItems. Must be a positive number and greater than zero");if(t?.affinity!=null&&t?.affinity!==4&&t?.affinity!==6)throw new kA("Invalid affinity. Must be either 4 or 6");if(t?.dualStack!=null&&typeof t?.dualStack!="boolean")throw new kA("Invalid dualStack. Must be a boolean");if(t?.lookup!=null&&typeof t?.lookup!="function")throw new kA("Invalid lookup. Must be a function");if(t?.pick!=null&&typeof t?.pick!="function")throw new kA("Invalid pick. Must be a function");let e=t?.dualStack??!0,r;e?r=t?.affinity??null:r=t?.affinity??4;let A={maxTTL:t?.maxTTL??1e4,lookup:t?.lookup??null,pick:t?.pick??null,dualStack:e,affinity:r,maxItems:t?.maxItems??1/0},s=new kg(A);return o=>function(i,a){let c=i.origin.constructor===URL?i.origin:new URL(i.origin);return oN(c.hostname)!==0?o(i,a):(s.runLookup(c,i,(g,l)=>{if(g)return a.onError(g);let u=null;u={...i,servername:c.hostname,origin:l,headers:{host:c.hostname,...i.headers}},o(u,s.getHandler({origin:c,dispatch:o,handler:a},i))}),!0)}}});var Ur=B((bP,wC)=>{"use strict";var{kConstruct:cN}=$(),{kEnumerableProperty:FA}=M(),{iteratorMixin:gN,isValidHeaderName:Fs,isValidHeaderValue:CC}=Ge(),{webidl:O}=Qe(),Sg=require("node:assert"),mn=require("node:util"),ge=Symbol("headers map"),xe=Symbol("headers map sorted");function IC(t){return t===10||t===13||t===9||t===32}function dC(t){let e=0,r=t.length;for(;r>e&&IC(t.charCodeAt(r-1));)--r;for(;r>e&&IC(t.charCodeAt(e));)++e;return e===0&&r===t.length?t:t.substring(e,r)}function fC(t,e){if(Array.isArray(e))for(let r=0;r>","record"]})}function Ng(t,e,r){if(r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"});if(mC(t)==="immutable")throw new TypeError("immutable");return Ug(t).append(e,r,!1)}function pC(t,e){return t[0]>1),r[c][0]<=g[0]?a=c+1:i=c;if(o!==c){for(n=o;n>a;)r[n]=r[--n];r[a]=g}}if(!A.next().done)throw new TypeError("Unreachable");return r}else{let A=0;for(let{0:s,1:{value:o}}of this[ge])r[A++]=[s,o],Sg(o!==null);return r.sort(pC)}}},it=class t{#e;#t;constructor(e=void 0){O.util.markAsUncloneable(this),e!==cN&&(this.#t=new wn,this.#e="none",e!==void 0&&(e=O.converters.HeadersInit(e,"Headers contructor","init"),fC(this,e)))}append(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.append");let A="Headers.append";return e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),Ng(this,e,r)}delete(e){if(O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.delete"),e=O.converters.ByteString(e,"Headers.delete","name"),!Fs(e))throw O.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(e,!1)&&this.#t.delete(e,!1)}get(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.get(e,!1)}has(e){O.brandCheck(this,t),O.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(e=O.converters.ByteString(e,r,"name"),!Fs(e))throw O.errors.invalidArgument({prefix:r,value:e,type:"header name"});return this.#t.contains(e,!1)}set(e,r){O.brandCheck(this,t),O.argumentLengthCheck(arguments,2,"Headers.set");let A="Headers.set";if(e=O.converters.ByteString(e,A,"name"),r=O.converters.ByteString(r,A,"value"),r=dC(r),Fs(e)){if(!CC(r))throw O.errors.invalidArgument({prefix:A,value:r,type:"header value"})}else throw O.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(e,r,!1)}getSetCookie(){O.brandCheck(this,t);let e=this.#t.cookies;return e?[...e]:[]}get[xe](){if(this.#t[xe])return this.#t[xe];let e=[],r=this.#t.toSortedArray(),A=this.#t.cookies;if(A===null||A.length===1)return this.#t[xe]=r;for(let s=0;s>"](t,e,r,A.bind(t)):O.converters["record"](t,e,r)}throw O.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};wC.exports={fill:fC,compareHeaderName:pC,Headers:it,HeadersList:wn,getHeadersGuard:mC,setHeadersGuard:lN,setHeadersList:uN,getHeadersList:Ug}});var Ns=B((kP,LC)=>{"use strict";var{Headers:kC,HeadersList:yC,fill:EN,getHeadersGuard:hN,setHeadersGuard:FC,setHeadersList:SC}=Ur(),{extractBody:RC,cloneBody:QN,mixinBody:BN,hasFinalizationRegistry:NC,streamRegistry:UC,bodyUnusable:IN}=cA(),Gg=M(),DC=require("node:util"),{kEnumerableProperty:Oe}=Gg,{isValidReasonPhrase:CN,isCancelled:dN,isAborted:fN,isBlobLike:pN,serializeJavascriptValueToJSONString:mN,isErrorLike:wN,isomorphicEncode:yN,environmentSettingsObject:RN}=Ge(),{redirectStatusSet:DN,nullBodyStatus:TN}=rs(),{kState:te,kHeaders:Lt}=Pt(),{webidl:L}=Qe(),{FormData:bN}=as(),{URLSerializer:TC}=Te(),{kConstruct:Rn}=$(),Lg=require("node:assert"),{types:kN}=require("node:util"),FN=new TextEncoder("utf-8"),Gr=class t{static error(){return Ss(Dn(),"immutable")}static json(e,r={}){L.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=L.converters.ResponseInit(r));let A=FN.encode(mN(e)),s=RC(A),o=Ss(SA({}),"response");return bC(o,r,{body:s[0],type:"application/json"}),o}static redirect(e,r=302){L.argumentLengthCheck(arguments,1,"Response.redirect"),e=L.converters.USVString(e),r=L.converters["unsigned short"](r);let A;try{A=new URL(e,RN.settingsObject.baseUrl)}catch(n){throw new TypeError(`Failed to parse URL from ${e}`,{cause:n})}if(!DN.has(r))throw new RangeError(`Invalid status code ${r}`);let s=Ss(SA({}),"immutable");s[te].status=r;let o=yN(TC(A));return s[te].headersList.append("location",o,!0),s}constructor(e=null,r={}){if(L.util.markAsUncloneable(this),e===Rn)return;e!==null&&(e=L.converters.BodyInit(e)),r=L.converters.ResponseInit(r),this[te]=SA({}),this[Lt]=new kC(Rn),FC(this[Lt],"response"),SC(this[Lt],this[te].headersList);let A=null;if(e!=null){let[s,o]=RC(e);A={body:s,type:o}}bC(this,r,A)}get type(){return L.brandCheck(this,t),this[te].type}get url(){L.brandCheck(this,t);let e=this[te].urlList,r=e[e.length-1]??null;return r===null?"":TC(r,!0)}get redirected(){return L.brandCheck(this,t),this[te].urlList.length>1}get status(){return L.brandCheck(this,t),this[te].status}get ok(){return L.brandCheck(this,t),this[te].status>=200&&this[te].status<=299}get statusText(){return L.brandCheck(this,t),this[te].statusText}get headers(){return L.brandCheck(this,t),this[Lt]}get body(){return L.brandCheck(this,t),this[te].body?this[te].body.stream:null}get bodyUsed(){return L.brandCheck(this,t),!!this[te].body&&Gg.isDisturbed(this[te].body.stream)}clone(){if(L.brandCheck(this,t),IN(this))throw L.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let e=Mg(this[te]);return NC&&this[te].body?.stream&&UC.register(this,new WeakRef(this[te].body.stream)),Ss(e,hN(this[Lt]))}[DC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${DC.formatWithOptions(r,A)}`}};BN(Gr);Object.defineProperties(Gr.prototype,{type:Oe,url:Oe,status:Oe,ok:Oe,redirected:Oe,statusText:Oe,headers:Oe,clone:Oe,body:Oe,bodyUsed:Oe,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Gr,{json:Oe,redirect:Oe,error:Oe});function Mg(t){if(t.internalResponse)return GC(Mg(t.internalResponse),t.type);let e=SA({...t,body:null});return t.body!=null&&(e.body=QN(e,t.body)),e}function SA(t){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...t,headersList:t?.headersList?new yC(t?.headersList):new yC,urlList:t?.urlList?[...t.urlList]:[]}}function Dn(t){let e=wN(t);return SA({type:"error",status:0,error:e?t:new Error(t&&String(t)),aborted:t&&t.name==="AbortError"})}function SN(t){return t.type==="error"&&t.status===0}function yn(t,e){return e={internalResponse:t,...e},new Proxy(t,{get(r,A){return A in e?e[A]:r[A]},set(r,A,s){return Lg(!(A in e)),r[A]=s,!0}})}function GC(t,e){if(e==="basic")return yn(t,{type:"basic",headersList:t.headersList});if(e==="cors")return yn(t,{type:"cors",headersList:t.headersList});if(e==="opaque")return yn(t,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(e==="opaqueredirect")return yn(t,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});Lg(!1)}function NN(t,e=null){return Lg(dN(t)),fN(t)?Dn(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:e})):Dn(Object.assign(new DOMException("Request was cancelled."),{cause:e}))}function bC(t,e,r){if(e.status!==null&&(e.status<200||e.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in e&&e.statusText!=null&&!CN(String(e.statusText)))throw new TypeError("Invalid statusText");if("status"in e&&e.status!=null&&(t[te].status=e.status),"statusText"in e&&e.statusText!=null&&(t[te].statusText=e.statusText),"headers"in e&&e.headers!=null&&EN(t[Lt],e.headers),r){if(TN.includes(t.status))throw L.errors.exception({header:"Response constructor",message:`Invalid response status code ${t.status}`});t[te].body=r.body,r.type!=null&&!t[te].headersList.contains("content-type",!0)&&t[te].headersList.append("content-type",r.type,!0)}}function Ss(t,e){let r=new Gr(Rn);return r[te]=t,r[Lt]=new kC(Rn),SC(r[Lt],t.headersList),FC(r[Lt],e),NC&&t.body?.stream&&UC.register(r,new WeakRef(t.body.stream)),r}L.converters.ReadableStream=L.interfaceConverter(ReadableStream);L.converters.FormData=L.interfaceConverter(bN);L.converters.URLSearchParams=L.interfaceConverter(URLSearchParams);L.converters.XMLHttpRequestBodyInit=function(t,e,r){return typeof t=="string"?L.converters.USVString(t,e,r):pN(t)?L.converters.Blob(t,e,r,{strict:!1}):ArrayBuffer.isView(t)||kN.isArrayBuffer(t)?L.converters.BufferSource(t,e,r):Gg.isFormDataLike(t)?L.converters.FormData(t,e,r,{strict:!1}):t instanceof URLSearchParams?L.converters.URLSearchParams(t,e,r):L.converters.DOMString(t,e,r)};L.converters.BodyInit=function(t,e,r){return t instanceof ReadableStream?L.converters.ReadableStream(t,e,r):t?.[Symbol.asyncIterator]?t:L.converters.XMLHttpRequestBodyInit(t,e,r)};L.converters.ResponseInit=L.dictionaryConverter([{key:"status",converter:L.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:L.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:L.converters.HeadersInit}]);LC.exports={isNetworkError:SN,makeNetworkError:Dn,makeResponse:SA,makeAppropriateNetworkError:NN,filterResponse:GC,Response:Gr,cloneResponse:Mg,fromInnerResponse:Ss}});var OC=B((FP,xC)=>{"use strict";var{kConnected:MC,kSize:vC}=$(),vg=class{constructor(e){this.value=e}deref(){return this.value[MC]===0&&this.value[vC]===0?void 0:this.value}},xg=class{constructor(e){this.finalizer=e}register(e,r){e.on&&e.on("disconnect",()=>{e[MC]===0&&e[vC]===0&&this.finalizer(r)})}unregister(e){}};xC.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:vg,FinalizationRegistry:xg}):{WeakRef,FinalizationRegistry}}});var NA=B((SP,ed)=>{"use strict";var{extractBody:UN,mixinBody:GN,cloneBody:LN,bodyUnusable:YC}=cA(),{Headers:ZC,fill:MN,HeadersList:Fn,setHeadersGuard:Yg,getHeadersGuard:vN,setHeadersList:jC,getHeadersList:_C}=Ur(),{FinalizationRegistry:xN}=OC()(),bn=M(),JC=require("node:util"),{isValidHTTPToken:ON,sameOrigin:PC,environmentSettingsObject:Tn}=Ge(),{forbiddenMethodsSet:YN,corsSafeListedMethodsSet:_N,referrerPolicy:JN,requestRedirect:PN,requestMode:HN,requestCredentials:VN,requestCache:qN,requestDuplex:WN}=rs(),{kEnumerableProperty:le,normalizedMethodRecordsBase:zN,normalizedMethodRecords:ZN}=bn,{kHeaders:Ye,kSignal:kn,kState:K,kDispatcher:Og}=Pt(),{webidl:S}=Qe(),{URLSerializer:jN}=Te(),{kConstruct:Sn}=$(),KN=require("node:assert"),{getMaxListeners:HC,setMaxListeners:VC,getEventListeners:XN,defaultMaxListeners:qC}=require("node:events"),$N=Symbol("abortController"),KC=new xN(({signal:t,abort:e})=>{t.removeEventListener("abort",e)}),Nn=new WeakMap;function WC(t){return e;function e(){let r=t.deref();if(r!==void 0){KC.unregister(e),this.removeEventListener("abort",e),r.abort(this.reason);let A=Nn.get(r.signal);if(A!==void 0){if(A.size!==0){for(let s of A){let o=s.deref();o!==void 0&&o.abort(this.reason)}A.clear()}Nn.delete(r.signal)}}}}var zC=!1,er=class t{constructor(e,r={}){if(S.util.markAsUncloneable(this),e===Sn)return;let A="Request constructor";S.argumentLengthCheck(arguments,1,A),e=S.converters.RequestInfo(e,A,"input"),r=S.converters.RequestInit(r,A,"init");let s=null,o=null,n=Tn.settingsObject.baseUrl,i=null;if(typeof e=="string"){this[Og]=r.dispatcher;let Q;try{Q=new URL(e,n)}catch(f){throw new TypeError("Failed to parse URL from "+e,{cause:f})}if(Q.username||Q.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);s=Un({urlList:[Q]}),o="cors"}else this[Og]=r.dispatcher||e[Og],KN(e instanceof t),s=e[K],i=e[kn];let a=Tn.settingsObject.origin,c="client";if(s.window?.constructor?.name==="EnvironmentSettingsObject"&&PC(s.window,a)&&(c=s.window),r.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in r&&(c="no-window"),s=Un({method:s.method,headersList:s.headersList,unsafeRequest:s.unsafeRequest,client:Tn.settingsObject,window:c,priority:s.priority,origin:s.origin,referrer:s.referrer,referrerPolicy:s.referrerPolicy,mode:s.mode,credentials:s.credentials,cache:s.cache,redirect:s.redirect,integrity:s.integrity,keepalive:s.keepalive,reloadNavigation:s.reloadNavigation,historyNavigation:s.historyNavigation,urlList:[...s.urlList]});let g=Object.keys(r).length!==0;if(g&&(s.mode==="navigate"&&(s.mode="same-origin"),s.reloadNavigation=!1,s.historyNavigation=!1,s.origin="client",s.referrer="client",s.referrerPolicy="",s.url=s.urlList[s.urlList.length-1],s.urlList=[s.url]),r.referrer!==void 0){let Q=r.referrer;if(Q==="")s.referrer="no-referrer";else{let f;try{f=new URL(Q,n)}catch(R){throw new TypeError(`Referrer "${Q}" is not a valid URL.`,{cause:R})}f.protocol==="about:"&&f.hostname==="client"||a&&!PC(f,Tn.settingsObject.baseUrl)?s.referrer="client":s.referrer=f}}r.referrerPolicy!==void 0&&(s.referrerPolicy=r.referrerPolicy);let l;if(r.mode!==void 0?l=r.mode:l=o,l==="navigate")throw S.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(l!=null&&(s.mode=l),r.credentials!==void 0&&(s.credentials=r.credentials),r.cache!==void 0&&(s.cache=r.cache),s.cache==="only-if-cached"&&s.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(r.redirect!==void 0&&(s.redirect=r.redirect),r.integrity!=null&&(s.integrity=String(r.integrity)),r.keepalive!==void 0&&(s.keepalive=!!r.keepalive),r.method!==void 0){let Q=r.method,f=ZN[Q];if(f!==void 0)s.method=f;else{if(!ON(Q))throw new TypeError(`'${Q}' is not a valid HTTP method.`);let R=Q.toUpperCase();if(YN.has(R))throw new TypeError(`'${Q}' HTTP method is unsupported.`);Q=zN[R]??Q,s.method=Q}!zC&&s.method==="patch"&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),zC=!0)}r.signal!==void 0&&(i=r.signal),this[K]=s;let u=new AbortController;if(this[kn]=u.signal,i!=null){if(!i||typeof i.aborted!="boolean"||typeof i.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(i.aborted)u.abort(i.reason);else{this[$N]=u;let Q=new WeakRef(u),f=WC(Q);try{(typeof HC=="function"&&HC(i)===qC||XN(i,"abort").length>=qC)&&VC(1500,i)}catch{}bn.addAbortListener(i,f),KC.register(u,{signal:i,abort:f},f)}}if(this[Ye]=new ZC(Sn),jC(this[Ye],s.headersList),Yg(this[Ye],"request"),l==="no-cors"){if(!_N.has(s.method))throw new TypeError(`'${s.method} is unsupported in no-cors mode.`);Yg(this[Ye],"request-no-cors")}if(g){let Q=_C(this[Ye]),f=r.headers!==void 0?r.headers:new Fn(Q);if(Q.clear(),f instanceof Fn){for(let{name:R,value:y}of f.rawValues())Q.append(R,y,!1);Q.cookies=f.cookies}else MN(this[Ye],f)}let E=e instanceof t?e[K].body:null;if((r.body!=null||E!=null)&&(s.method==="GET"||s.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let h=null;if(r.body!=null){let[Q,f]=UN(r.body,s.keepalive);h=Q,f&&!_C(this[Ye]).contains("content-type",!0)&&this[Ye].append("content-type",f)}let C=h??E;if(C!=null&&C.source==null){if(h!=null&&r.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(s.mode!=="same-origin"&&s.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');s.useCORSPreflightFlag=!0}let I=C;if(h==null&&E!=null){if(YC(e))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let Q=new TransformStream;E.stream.pipeThrough(Q),I={source:E.source,length:E.length,stream:Q.readable}}this[K].body=I}get method(){return S.brandCheck(this,t),this[K].method}get url(){return S.brandCheck(this,t),jN(this[K].url)}get headers(){return S.brandCheck(this,t),this[Ye]}get destination(){return S.brandCheck(this,t),this[K].destination}get referrer(){return S.brandCheck(this,t),this[K].referrer==="no-referrer"?"":this[K].referrer==="client"?"about:client":this[K].referrer.toString()}get referrerPolicy(){return S.brandCheck(this,t),this[K].referrerPolicy}get mode(){return S.brandCheck(this,t),this[K].mode}get credentials(){return this[K].credentials}get cache(){return S.brandCheck(this,t),this[K].cache}get redirect(){return S.brandCheck(this,t),this[K].redirect}get integrity(){return S.brandCheck(this,t),this[K].integrity}get keepalive(){return S.brandCheck(this,t),this[K].keepalive}get isReloadNavigation(){return S.brandCheck(this,t),this[K].reloadNavigation}get isHistoryNavigation(){return S.brandCheck(this,t),this[K].historyNavigation}get signal(){return S.brandCheck(this,t),this[kn]}get body(){return S.brandCheck(this,t),this[K].body?this[K].body.stream:null}get bodyUsed(){return S.brandCheck(this,t),!!this[K].body&&bn.isDisturbed(this[K].body.stream)}get duplex(){return S.brandCheck(this,t),"half"}clone(){if(S.brandCheck(this,t),YC(this))throw new TypeError("unusable");let e=XC(this[K]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let A=Nn.get(this.signal);A===void 0&&(A=new Set,Nn.set(this.signal,A));let s=new WeakRef(r);A.add(s),bn.addAbortListener(r.signal,WC(s))}return $C(e,r.signal,vN(this[Ye]))}[JC.inspect.custom](e,r){r.depth===null&&(r.depth=2),r.colors??=!0;let A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${JC.formatWithOptions(r,A)}`}};GN(er);function Un(t){return{method:t.method??"GET",localURLsOnly:t.localURLsOnly??!1,unsafeRequest:t.unsafeRequest??!1,body:t.body??null,client:t.client??null,reservedClient:t.reservedClient??null,replacesClientId:t.replacesClientId??"",window:t.window??"client",keepalive:t.keepalive??!1,serviceWorkers:t.serviceWorkers??"all",initiator:t.initiator??"",destination:t.destination??"",priority:t.priority??null,origin:t.origin??"client",policyContainer:t.policyContainer??"client",referrer:t.referrer??"client",referrerPolicy:t.referrerPolicy??"",mode:t.mode??"no-cors",useCORSPreflightFlag:t.useCORSPreflightFlag??!1,credentials:t.credentials??"same-origin",useCredentials:t.useCredentials??!1,cache:t.cache??"default",redirect:t.redirect??"follow",integrity:t.integrity??"",cryptoGraphicsNonceMetadata:t.cryptoGraphicsNonceMetadata??"",parserMetadata:t.parserMetadata??"",reloadNavigation:t.reloadNavigation??!1,historyNavigation:t.historyNavigation??!1,userActivation:t.userActivation??!1,taintedOrigin:t.taintedOrigin??!1,redirectCount:t.redirectCount??0,responseTainting:t.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:t.preventNoCacheCacheControlHeaderModification??!1,done:t.done??!1,timingAllowFailed:t.timingAllowFailed??!1,urlList:t.urlList,url:t.urlList[0],headersList:t.headersList?new Fn(t.headersList):new Fn}}function XC(t){let e=Un({...t,body:null});return t.body!=null&&(e.body=LN(e,t.body)),e}function $C(t,e,r){let A=new er(Sn);return A[K]=t,A[kn]=e,A[Ye]=new ZC(Sn),jC(A[Ye],t.headersList),Yg(A[Ye],r),A}Object.defineProperties(er.prototype,{method:le,url:le,headers:le,redirect:le,clone:le,signal:le,duplex:le,destination:le,body:le,bodyUsed:le,isHistoryNavigation:le,isReloadNavigation:le,keepalive:le,integrity:le,cache:le,credentials:le,attribute:le,referrerPolicy:le,referrer:le,mode:le,[Symbol.toStringTag]:{value:"Request",configurable:!0}});S.converters.Request=S.interfaceConverter(er);S.converters.RequestInfo=function(t,e,r){return typeof t=="string"?S.converters.USVString(t,e,r):t instanceof er?S.converters.Request(t,e,r):S.converters.USVString(t,e,r)};S.converters.AbortSignal=S.interfaceConverter(AbortSignal);S.converters.RequestInit=S.dictionaryConverter([{key:"method",converter:S.converters.ByteString},{key:"headers",converter:S.converters.HeadersInit},{key:"body",converter:S.nullableConverter(S.converters.BodyInit)},{key:"referrer",converter:S.converters.USVString},{key:"referrerPolicy",converter:S.converters.DOMString,allowedValues:JN},{key:"mode",converter:S.converters.DOMString,allowedValues:HN},{key:"credentials",converter:S.converters.DOMString,allowedValues:VN},{key:"cache",converter:S.converters.DOMString,allowedValues:qN},{key:"redirect",converter:S.converters.DOMString,allowedValues:PN},{key:"integrity",converter:S.converters.DOMString},{key:"keepalive",converter:S.converters.boolean},{key:"signal",converter:S.nullableConverter(t=>S.converters.AbortSignal(t,"RequestInit","signal",{strict:!1}))},{key:"window",converter:S.converters.any},{key:"duplex",converter:S.converters.DOMString,allowedValues:WN},{key:"dispatcher",converter:S.converters.any}]);ed.exports={Request:er,makeRequest:Un,fromInnerRequest:$C,cloneRequest:XC}});var Gs=B((NP,Qd)=>{"use strict";var{makeNetworkError:H,makeAppropriateNetworkError:Gn,filterResponse:_g,makeResponse:Ln,fromInnerResponse:eU}=Ns(),{HeadersList:td}=Ur(),{Request:tU,cloneRequest:rU}=NA(),tr=require("node:zlib"),{bytesMatch:AU,makePolicyContainer:sU,clonePolicyContainer:oU,requestBadPort:nU,TAOCheck:iU,appendRequestOriginHeader:aU,responseLocationURL:cU,requestCurrentURL:ft,setRequestReferrerPolicyOnRedirect:gU,tryUpgradeRequestToAPotentiallyTrustworthyURL:lU,createOpaqueTimingInfo:qg,appendFetchMetadata:uU,corsCheck:EU,crossOriginResourcePolicyCheck:hU,determineRequestsReferrer:QU,coarsenedSharedCurrentTime:Us,createDeferredPromise:BU,isBlobLike:IU,sameOrigin:Vg,isCancelled:Lr,isAborted:rd,isErrorLike:CU,fullyReadBody:dU,readableStreamClose:fU,isomorphicEncode:Mn,urlIsLocal:pU,urlIsHttpHttpsScheme:Wg,urlHasHttpsScheme:mU,clampAndCoarsenConnectionTimingInfo:wU,simpleRangeHeaderValue:yU,buildContentRange:RU,createInflate:DU,extractMimeType:TU}=Ge(),{kState:nd,kDispatcher:bU}=Pt(),Mr=require("node:assert"),{safelyExtractBody:zg,extractBody:Ad}=cA(),{redirectStatusSet:id,nullBodyStatus:ad,safeMethodsSet:kU,requestBodyHeader:FU,subresourceSet:SU}=rs(),NU=require("node:events"),{Readable:UU,pipeline:GU,finished:LU}=require("node:stream"),{addAbortListener:MU,isErrored:vU,isReadable:vn,bufferToLowerCasedHeaderName:sd}=M(),{dataURLProcessor:xU,serializeAMimeType:OU,minimizeSupportedMimeType:YU}=Te(),{getGlobalDispatcher:_U}=fn(),{webidl:JU}=Qe(),{STATUS_CODES:PU}=require("node:http"),HU=["GET","HEAD"],VU=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",Jg,xn=class extends NU{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){this.state==="ongoing"&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}};function qU(t){cd(t,"fetch")}function WU(t,e=void 0){JU.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=BU(),A;try{A=new tU(t,e)}catch(g){return r.reject(g),r.promise}let s=A[nd];if(A.signal.aborted)return Pg(r,s,null,A.signal.reason),r.promise;s.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(s.serviceWorkers="none");let n=null,i=!1,a=null;return MU(A.signal,()=>{i=!0,Mr(a!=null),a.abort(A.signal.reason);let g=n?.deref();Pg(r,s,g,A.signal.reason)}),a=ld({request:s,processResponseEndOfBody:qU,processResponse:g=>{if(!i){if(g.aborted){Pg(r,s,n,a.serializedAbortReason);return}if(g.type==="error"){r.reject(new TypeError("fetch failed",{cause:g.error}));return}n=new WeakRef(eU(g,"immutable")),r.resolve(n.deref()),r=null}},dispatcher:A[bU]}),r.promise}function cd(t,e="other"){if(t.type==="error"&&t.aborted||!t.urlList?.length)return;let r=t.urlList[0],A=t.timingInfo,s=t.cacheState;Wg(r)&&A!==null&&(t.timingAllowPassed||(A=qg({startTime:A.startTime}),s=""),A.endTime=Us(),t.timingInfo=A,gd(A,r.href,e,globalThis,s))}var gd=performance.markResourceTiming;function Pg(t,e,r,A){if(t&&t.reject(A),e.body!=null&&vn(e.body?.stream)&&e.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o}),r==null)return;let s=r[nd];s.body!=null&&vn(s.body?.stream)&&s.body.stream.cancel(A).catch(o=>{if(o.code!=="ERR_INVALID_STATE")throw o})}function ld({request:t,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseEndOfBody:s,processResponseConsumeBody:o,useParallelQueue:n=!1,dispatcher:i=_U()}){Mr(i);let a=null,c=!1;t.client!=null&&(a=t.client.globalObject,c=t.client.crossOriginIsolatedCapability);let g=Us(c),l=qg({startTime:g}),u={controller:new xn(i),request:t,timingInfo:l,processRequestBodyChunkLength:e,processRequestEndOfBody:r,processResponse:A,processResponseConsumeBody:o,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};return Mr(!t.body||t.body.stream),t.window==="client"&&(t.window=t.client?.globalObject?.constructor?.name==="Window"?t.client:"no-window"),t.origin==="client"&&(t.origin=t.client.origin),t.policyContainer==="client"&&(t.client!=null?t.policyContainer=oU(t.client.policyContainer):t.policyContainer=sU()),t.headersList.contains("accept",!0)||t.headersList.append("accept","*/*",!0),t.headersList.contains("accept-language",!0)||t.headersList.append("accept-language","*",!0),t.priority,SU.has(t.destination),ud(u).catch(E=>{u.controller.terminate(E)}),u.controller}async function ud(t,e=!1){let r=t.request,A=null;if(r.localURLsOnly&&!pU(ft(r))&&(A=H("local URLs only")),lU(r),nU(r)==="blocked"&&(A=H("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=QU(r)),A===null&&(A=await(async()=>{let o=ft(r);return Vg(o,r.url)&&r.responseTainting==="basic"||o.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await od(t)):r.mode==="same-origin"?H('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?H('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await od(t)):Wg(ft(r))?(r.responseTainting="cors",await Ed(t)):H("URL scheme must be a HTTP(S) scheme")})()),e)return A;A.status!==0&&!A.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?A=_g(A,"basic"):r.responseTainting==="cors"?A=_g(A,"cors"):r.responseTainting==="opaque"?A=_g(A,"opaque"):Mr(!1));let s=A.status===0?A:A.internalResponse;if(s.urlList.length===0&&s.urlList.push(...r.urlList),r.timingAllowFailed||(A.timingAllowPassed=!0),A.type==="opaque"&&s.status===206&&s.rangeRequested&&!r.headers.contains("range",!0)&&(A=s=H()),A.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||ad.includes(s.status))&&(s.body=null,t.controller.dump=!0),r.integrity){let o=i=>Hg(t,H(i));if(r.responseTainting==="opaque"||A.body==null){o(A.error);return}let n=i=>{if(!AU(i,r.integrity)){o("integrity mismatch");return}A.body=zg(i)[0],Hg(t,A)};await dU(A.body,n,o)}else Hg(t,A)}function od(t){if(Lr(t)&&t.request.redirectCount===0)return Promise.resolve(Gn(t));let{request:e}=t,{protocol:r}=ft(e);switch(r){case"about:":return Promise.resolve(H("about scheme is not supported"));case"blob:":{Jg||(Jg=require("node:buffer").resolveObjectURL);let A=ft(e);if(A.search.length!==0)return Promise.resolve(H("NetworkError when attempting to fetch resource."));let s=Jg(A.toString());if(e.method!=="GET"||!IU(s))return Promise.resolve(H("invalid method"));let o=Ln(),n=s.size,i=Mn(`${n}`),a=s.type;if(e.headersList.contains("range",!0)){o.rangeRequested=!0;let c=e.headersList.get("range",!0),g=yU(c,!0);if(g==="failure")return Promise.resolve(H("failed to fetch the data URL"));let{rangeStartValue:l,rangeEndValue:u}=g;if(l===null)l=n-u,u=l+u-1;else{if(l>=n)return Promise.resolve(H("Range start is greater than the blob's size."));(u===null||u>=n)&&(u=n-1)}let E=s.slice(l,u,a),h=Ad(E);o.body=h[0];let C=Mn(`${E.size}`),I=RU(l,u,n);o.status=206,o.statusText="Partial Content",o.headersList.set("content-length",C,!0),o.headersList.set("content-type",a,!0),o.headersList.set("content-range",I,!0)}else{let c=Ad(s);o.statusText="OK",o.body=c[0],o.headersList.set("content-length",i,!0),o.headersList.set("content-type",a,!0)}return Promise.resolve(o)}case"data:":{let A=ft(e),s=xU(A);if(s==="failure")return Promise.resolve(H("failed to fetch the data URL"));let o=OU(s.mimeType);return Promise.resolve(Ln({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:o}]],body:zg(s.body)[0]}))}case"file:":return Promise.resolve(H("not implemented... yet..."));case"http:":case"https:":return Ed(t).catch(A=>H(A));default:return Promise.resolve(H("unknown scheme"))}}function zU(t,e){t.request.done=!0,t.processResponseDone!=null&&queueMicrotask(()=>t.processResponseDone(e))}function Hg(t,e){let r=t.timingInfo,A=()=>{let o=Date.now();t.request.destination==="document"&&(t.controller.fullTimingInfo=r),t.controller.reportTimingSteps=()=>{if(t.request.url.protocol!=="https:")return;r.endTime=o;let i=e.cacheState,a=e.bodyInfo;e.timingAllowPassed||(r=qg(r),i="");let c=0;if(t.request.mode!=="navigator"||!e.hasCrossOriginRedirects){c=e.status;let g=TU(e.headersList);g!=="failure"&&(a.contentType=YU(g))}t.request.initiatorType!=null&&gd(r,t.request.url.href,t.request.initiatorType,globalThis,i,a,c)};let n=()=>{t.request.done=!0,t.processResponseEndOfBody!=null&&queueMicrotask(()=>t.processResponseEndOfBody(e)),t.request.initiatorType!=null&&t.controller.reportTimingSteps()};queueMicrotask(()=>n())};t.processResponse!=null&&queueMicrotask(()=>{t.processResponse(e),t.processResponse=null});let s=e.type==="error"?e:e.internalResponse??e;s.body==null?A():LU(s.body.stream,()=>{A()})}async function Ed(t){let e=t.request,r=null,A=null,s=t.timingInfo;if(e.serviceWorkers,r===null){if(e.redirect==="follow"&&(e.serviceWorkers="none"),A=r=await hd(t),e.responseTainting==="cors"&&EU(e,r)==="failure")return H("cors failure");iU(e,r)==="failure"&&(e.timingAllowFailed=!0)}return(e.responseTainting==="opaque"||r.type==="opaque")&&hU(e.origin,e.client,e.destination,A)==="blocked"?H("blocked"):(id.has(A.status)&&(e.redirect!=="manual"&&t.controller.connection.destroy(void 0,!1),e.redirect==="error"?r=H("unexpected redirect"):e.redirect==="manual"?r=A:e.redirect==="follow"?r=await ZU(t,r):Mr(!1)),r.timingInfo=s,r)}function ZU(t,e){let r=t.request,A=e.internalResponse?e.internalResponse:e,s;try{if(s=cU(A,ft(r).hash),s==null)return e}catch(n){return Promise.resolve(H(n))}if(!Wg(s))return Promise.resolve(H("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(H("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(s.username||s.password)&&!Vg(r,s))return Promise.resolve(H('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(s.username||s.password))return Promise.resolve(H('URL cannot contain credentials for request mode "cors"'));if(A.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(H());if([301,302].includes(A.status)&&r.method==="POST"||A.status===303&&!HU.includes(r.method)){r.method="GET",r.body=null;for(let n of FU)r.headersList.delete(n)}Vg(ft(r),s)||(r.headersList.delete("authorization",!0),r.headersList.delete("proxy-authorization",!0),r.headersList.delete("cookie",!0),r.headersList.delete("host",!0)),r.body!=null&&(Mr(r.body.source!=null),r.body=zg(r.body.source)[0]);let o=t.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=Us(t.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(s),gU(r,A),ud(t,!0)}async function hd(t,e=!1,r=!1){let A=t.request,s=null,o=null,n=null,i=null,a=!1;A.window==="no-window"&&A.redirect==="error"?(s=t,o=A):(o=rU(A),s={...t},s.request=o);let c=A.credentials==="include"||A.credentials==="same-origin"&&A.responseTainting==="basic",g=o.body?o.body.length:null,l=null;if(o.body==null&&["POST","PUT"].includes(o.method)&&(l="0"),g!=null&&(l=Mn(`${g}`)),l!=null&&o.headersList.append("content-length",l,!0),g!=null&&o.keepalive,o.referrer instanceof URL&&o.headersList.append("referer",Mn(o.referrer.href),!0),aU(o),uU(o),o.headersList.contains("user-agent",!0)||o.headersList.append("user-agent",VU),o.cache==="default"&&(o.headersList.contains("if-modified-since",!0)||o.headersList.contains("if-none-match",!0)||o.headersList.contains("if-unmodified-since",!0)||o.headersList.contains("if-match",!0)||o.headersList.contains("if-range",!0))&&(o.cache="no-store"),o.cache==="no-cache"&&!o.preventNoCacheCacheControlHeaderModification&&!o.headersList.contains("cache-control",!0)&&o.headersList.append("cache-control","max-age=0",!0),(o.cache==="no-store"||o.cache==="reload")&&(o.headersList.contains("pragma",!0)||o.headersList.append("pragma","no-cache",!0),o.headersList.contains("cache-control",!0)||o.headersList.append("cache-control","no-cache",!0)),o.headersList.contains("range",!0)&&o.headersList.append("accept-encoding","identity",!0),o.headersList.contains("accept-encoding",!0)||(mU(ft(o))?o.headersList.append("accept-encoding","br, gzip, deflate",!0):o.headersList.append("accept-encoding","gzip, deflate",!0)),o.headersList.delete("host",!0),i==null&&(o.cache="no-store"),o.cache!=="no-store"&&o.cache,n==null){if(o.cache==="only-if-cached")return H("only if cached");let u=await jU(s,c,r);!kU.has(o.method)&&u.status>=200&&u.status<=399,a&&u.status,n==null&&(n=u)}if(n.urlList=[...o.urlList],o.headersList.contains("range",!0)&&(n.rangeRequested=!0),n.requestIncludesCredentials=c,n.status===407)return A.window==="no-window"?H():Lr(t)?Gn(t):H("proxy authentication required");if(n.status===421&&!r&&(A.body==null||A.body.source!=null)){if(Lr(t))return Gn(t);t.controller.connection.destroy(),n=await hd(t,e,!0)}return n}async function jU(t,e=!1,r=!1){Mr(!t.controller.connection||t.controller.connection.destroyed),t.controller.connection={abort:null,destroyed:!1,destroy(h,C=!0){this.destroyed||(this.destroyed=!0,C&&this.abort?.(h??new DOMException("The operation was aborted.","AbortError")))}};let A=t.request,s=null,o=t.timingInfo;null==null&&(A.cache="no-store");let i=r?"yes":"no";A.mode;let a=null;if(A.body==null&&t.processRequestEndOfBody)queueMicrotask(()=>t.processRequestEndOfBody());else if(A.body!=null){let h=async function*(Q){Lr(t)||(yield Q,t.processRequestBodyChunkLength?.(Q.byteLength))},C=()=>{Lr(t)||t.processRequestEndOfBody&&t.processRequestEndOfBody()},I=Q=>{Lr(t)||(Q.name==="AbortError"?t.controller.abort():t.controller.terminate(Q))};a=(async function*(){try{for await(let Q of A.body.stream)yield*h(Q);C()}catch(Q){I(Q)}})()}try{let{body:h,status:C,statusText:I,headersList:Q,socket:f}=await E({body:a});if(f)s=Ln({status:C,statusText:I,headersList:Q,socket:f});else{let R=h[Symbol.asyncIterator]();t.controller.next=()=>R.next(),s=Ln({status:C,statusText:I,headersList:Q})}}catch(h){return h.name==="AbortError"?(t.controller.connection.destroy(),Gn(t,h)):H(h)}let c=async()=>{await t.controller.resume()},g=h=>{Lr(t)||t.controller.abort(h)},l=new ReadableStream({async start(h){t.controller.controller=h},async pull(h){await c(h)},async cancel(h){await g(h)},type:"bytes"});s.body={stream:l,source:null,length:null},t.controller.onAborted=u,t.controller.on("terminated",u),t.controller.resume=async()=>{for(;;){let h,C;try{let{done:Q,value:f}=await t.controller.next();if(rd(t))break;h=Q?void 0:f}catch(Q){t.controller.ended&&!o.encodedBodySize?h=void 0:(h=Q,C=!0)}if(h===void 0){fU(t.controller.controller),zU(t,s);return}if(o.decodedBodySize+=h?.byteLength??0,C){t.controller.terminate(h);return}let I=new Uint8Array(h);if(I.byteLength&&t.controller.controller.enqueue(I),vU(l)){t.controller.terminate();return}if(t.controller.controller.desiredSize<=0)return}};function u(h){rd(t)?(s.aborted=!0,vn(l)&&t.controller.controller.error(t.controller.serializedAbortReason)):vn(l)&&t.controller.controller.error(new TypeError("terminated",{cause:CU(h)?h:void 0})),t.controller.connection.destroy()}return s;function E({body:h}){let C=ft(A),I=t.controller.dispatcher;return new Promise((Q,f)=>I.dispatch({path:C.pathname+C.search,origin:C.origin,method:A.method,body:I.isMockActive?A.body&&(A.body.source||A.body.stream):h,headers:A.headersList.entries,maxRedirections:0,upgrade:A.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(R){let{connection:y}=t.controller;o.finalConnectionTimingInfo=wU(void 0,o.postRedirectStartTime,t.crossOriginIsolatedCapability),y.destroyed?R(new DOMException("The operation was aborted.","AbortError")):(t.controller.on("terminated",R),this.abort=y.abort=R),o.finalNetworkRequestStartTime=Us(t.crossOriginIsolatedCapability)},onResponseStarted(){o.finalNetworkResponseStartTime=Us(t.crossOriginIsolatedCapability)},onHeaders(R,y,P,Z){if(R<200)return;let Ae="",gt=new td;for(let De=0;DeWr)return f(new Error(`too many content-encodings in response: ${qr.length}, maximum allowed is ${Wr}`)),!0;for(let Pi=qr.length-1;Pi>=0;--Pi){let lo=qr[Pi].trim();if(lo==="x-gzip"||lo==="gzip")wt.push(tr.createGunzip({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="deflate")wt.push(DU({flush:tr.constants.Z_SYNC_FLUSH,finishFlush:tr.constants.Z_SYNC_FLUSH}));else if(lo==="br")wt.push(tr.createBrotliDecompress({flush:tr.constants.BROTLI_OPERATION_FLUSH,finishFlush:tr.constants.BROTLI_OPERATION_FLUSH}));else{wt.length=0;break}}}let _t=this.onError.bind(this);return Q({status:R,statusText:Z,headersList:gt,body:wt.length?GU(this.body,...wt,De=>{De&&this.onError(De)}).on("error",_t):this.body.on("error",_t)}),!0},onData(R){if(t.controller.dump)return;let y=R;return o.encodedBodySize+=y.byteLength,this.body.push(y)},onComplete(){this.abort&&t.controller.off("terminated",this.abort),t.controller.onAborted&&t.controller.off("terminated",t.controller.onAborted),t.controller.ended=!0,this.body.push(null)},onError(R){this.abort&&t.controller.off("terminated",this.abort),this.body?.destroy(R),t.controller.terminate(R),f(R)},onUpgrade(R,y,P){if(R!==101)return;let Z=new td;for(let Ae=0;Ae{"use strict";Bd.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var Cd=B((GP,Id)=>{"use strict";var{webidl:_e}=Qe(),On=Symbol("ProgressEvent state"),jg=class t extends Event{constructor(e,r={}){e=_e.converters.DOMString(e,"ProgressEvent constructor","type"),r=_e.converters.ProgressEventInit(r??{}),super(e,r),this[On]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return _e.brandCheck(this,t),this[On].lengthComputable}get loaded(){return _e.brandCheck(this,t),this[On].loaded}get total(){return _e.brandCheck(this,t),this[On].total}};_e.converters.ProgressEventInit=_e.dictionaryConverter([{key:"lengthComputable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:_e.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:_e.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:_e.converters.boolean,defaultValue:()=>!1}]);Id.exports={ProgressEvent:jg}});var fd=B((LP,dd)=>{"use strict";function KU(t){if(!t)return"failure";switch(t.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}dd.exports={getEncoding:KU}});var bd=B((MP,Td)=>{"use strict";var{kState:UA,kError:Kg,kResult:pd,kAborted:Ls,kLastProgressEventFired:Xg}=Zg(),{ProgressEvent:XU}=Cd(),{getEncoding:md}=fd(),{serializeAMimeType:$U,parseMIMEType:wd}=Te(),{types:eG}=require("node:util"),{StringDecoder:yd}=require("string_decoder"),{btoa:Rd}=require("node:buffer"),tG={enumerable:!0,writable:!1,configurable:!1};function rG(t,e,r,A){if(t[UA]==="loading")throw new DOMException("Invalid state","InvalidStateError");t[UA]="loading",t[pd]=null,t[Kg]=null;let o=e.stream().getReader(),n=[],i=o.read(),a=!0;(async()=>{for(;!t[Ls];)try{let{done:c,value:g}=await i;if(a&&!t[Ls]&&queueMicrotask(()=>{rr("loadstart",t)}),a=!1,!c&&eG.isUint8Array(g))n.push(g),(t[Xg]===void 0||Date.now()-t[Xg]>=50)&&!t[Ls]&&(t[Xg]=Date.now(),queueMicrotask(()=>{rr("progress",t)})),i=o.read();else if(c){queueMicrotask(()=>{t[UA]="done";try{let l=AG(n,r,e.type,A);if(t[Ls])return;t[pd]=l,rr("load",t)}catch(l){t[Kg]=l,rr("error",t)}t[UA]!=="loading"&&rr("loadend",t)});break}}catch(c){if(t[Ls])return;queueMicrotask(()=>{t[UA]="done",t[Kg]=c,rr("error",t),t[UA]!=="loading"&&rr("loadend",t)});break}})()}function rr(t,e){let r=new XU(t,{bubbles:!1,cancelable:!1});e.dispatchEvent(r)}function AG(t,e,r,A){switch(e){case"DataURL":{let s="data:",o=wd(r||"application/octet-stream");o!=="failure"&&(s+=$U(o)),s+=";base64,";let n=new yd("latin1");for(let i of t)s+=Rd(n.write(i));return s+=Rd(n.end()),s}case"Text":{let s="failure";if(A&&(s=md(A)),s==="failure"&&r){let o=wd(r);o!=="failure"&&(s=md(o.parameters.get("charset")))}return s==="failure"&&(s="UTF-8"),sG(t,s)}case"ArrayBuffer":return Dd(t).buffer;case"BinaryString":{let s="",o=new yd("latin1");for(let n of t)s+=o.write(n);return s+=o.end(),s}}}function sG(t,e){let r=Dd(t),A=oG(r),s=0;A!==null&&(e=A,s=A==="UTF-8"?3:2);let o=r.slice(s);return new TextDecoder(e).decode(o)}function oG(t){let[e,r,A]=t;return e===239&&r===187&&A===191?"UTF-8":e===254&&r===255?"UTF-16BE":e===255&&r===254?"UTF-16LE":null}function Dd(t){let e=t.reduce((A,s)=>A+s.byteLength,0),r=0;return t.reduce((A,s)=>(A.set(s,r),r+=s.byteLength,A),new Uint8Array(e))}Td.exports={staticPropertyDescriptors:tG,readOperation:rG,fireAProgressEvent:rr}});var Nd=B((vP,Sd)=>{"use strict";var{staticPropertyDescriptors:GA,readOperation:Yn,fireAProgressEvent:kd}=bd(),{kState:vr,kError:Fd,kResult:_n,kEvents:_,kAborted:nG}=Zg(),{webidl:q}=Qe(),{kEnumerableProperty:Fe}=M(),at=class t extends EventTarget{constructor(){super(),this[vr]="empty",this[_n]=null,this[Fd]=null,this[_]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"ArrayBuffer")}readAsBinaryString(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"BinaryString")}readAsText(e,r=void 0){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsText"),e=q.converters.Blob(e,{strict:!1}),r!==void 0&&(r=q.converters.DOMString(r,"FileReader.readAsText","encoding")),Yn(this,e,"Text",r)}readAsDataURL(e){q.brandCheck(this,t),q.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),e=q.converters.Blob(e,{strict:!1}),Yn(this,e,"DataURL")}abort(){if(this[vr]==="empty"||this[vr]==="done"){this[_n]=null;return}this[vr]==="loading"&&(this[vr]="done",this[_n]=null),this[nG]=!0,kd("abort",this),this[vr]!=="loading"&&kd("loadend",this)}get readyState(){switch(q.brandCheck(this,t),this[vr]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return q.brandCheck(this,t),this[_n]}get error(){return q.brandCheck(this,t),this[Fd]}get onloadend(){return q.brandCheck(this,t),this[_].loadend}set onloadend(e){q.brandCheck(this,t),this[_].loadend&&this.removeEventListener("loadend",this[_].loadend),typeof e=="function"?(this[_].loadend=e,this.addEventListener("loadend",e)):this[_].loadend=null}get onerror(){return q.brandCheck(this,t),this[_].error}set onerror(e){q.brandCheck(this,t),this[_].error&&this.removeEventListener("error",this[_].error),typeof e=="function"?(this[_].error=e,this.addEventListener("error",e)):this[_].error=null}get onloadstart(){return q.brandCheck(this,t),this[_].loadstart}set onloadstart(e){q.brandCheck(this,t),this[_].loadstart&&this.removeEventListener("loadstart",this[_].loadstart),typeof e=="function"?(this[_].loadstart=e,this.addEventListener("loadstart",e)):this[_].loadstart=null}get onprogress(){return q.brandCheck(this,t),this[_].progress}set onprogress(e){q.brandCheck(this,t),this[_].progress&&this.removeEventListener("progress",this[_].progress),typeof e=="function"?(this[_].progress=e,this.addEventListener("progress",e)):this[_].progress=null}get onload(){return q.brandCheck(this,t),this[_].load}set onload(e){q.brandCheck(this,t),this[_].load&&this.removeEventListener("load",this[_].load),typeof e=="function"?(this[_].load=e,this.addEventListener("load",e)):this[_].load=null}get onabort(){return q.brandCheck(this,t),this[_].abort}set onabort(e){q.brandCheck(this,t),this[_].abort&&this.removeEventListener("abort",this[_].abort),typeof e=="function"?(this[_].abort=e,this.addEventListener("abort",e)):this[_].abort=null}};at.EMPTY=at.prototype.EMPTY=0;at.LOADING=at.prototype.LOADING=1;at.DONE=at.prototype.DONE=2;Object.defineProperties(at.prototype,{EMPTY:GA,LOADING:GA,DONE:GA,readAsArrayBuffer:Fe,readAsBinaryString:Fe,readAsText:Fe,readAsDataURL:Fe,abort:Fe,readyState:Fe,result:Fe,error:Fe,onloadstart:Fe,onprogress:Fe,onload:Fe,onabort:Fe,onerror:Fe,onloadend:Fe,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(at,{EMPTY:GA,LOADING:GA,DONE:GA});Sd.exports={FileReader:at}});var Jn=B((xP,Ud)=>{"use strict";Ud.exports={kConstruct:$().kConstruct}});var Md=B((OP,Ld)=>{"use strict";var iG=require("node:assert"),{URLSerializer:Gd}=Te(),{isValidHeaderName:aG}=Ge();function cG(t,e,r=!1){let A=Gd(t,r),s=Gd(e,r);return A===s}function gG(t){iG(t!==null);let e=[];for(let r of t.split(","))r=r.trim(),aG(r)&&e.push(r);return e}Ld.exports={urlEquals:cG,getFieldValues:gG}});var Od=B((YP,xd)=>{"use strict";var{kConstruct:lG}=Jn(),{urlEquals:uG,getFieldValues:$g}=Md(),{kEnumerableProperty:xr,isDisturbed:EG}=M(),{webidl:T}=Qe(),{Response:hG,cloneResponse:QG,fromInnerResponse:BG}=Ns(),{Request:Mt,fromInnerRequest:IG}=NA(),{kState:ct}=Pt(),{fetching:CG}=Gs(),{urlIsHttpHttpsScheme:Pn,createDeferredPromise:LA,readAllBytes:dG}=Ge(),el=require("node:assert"),Hn=class t{#e;constructor(){arguments[0]!==lG&&T.illegalConstructor(),T.util.markAsUncloneable(this),this.#e=arguments[1]}async match(e,r={}){T.brandCheck(this,t);let A="Cache.match";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=this.#s(e,r,1);if(s.length!==0)return s[0]}async matchAll(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.matchAll";return e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options"),this.#s(e,r)}async add(e){T.brandCheck(this,t);let r="Cache.add";T.argumentLengthCheck(arguments,1,r),e=T.converters.RequestInfo(e,r,"request");let A=[e];return await this.addAll(A)}async addAll(e){T.brandCheck(this,t);let r="Cache.addAll";T.argumentLengthCheck(arguments,1,r);let A=[],s=[];for(let u of e){if(u===void 0)throw T.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(u=T.converters.RequestInfo(u),typeof u=="string")continue;let E=u[ct];if(!Pn(E.url)||E.method!=="GET")throw T.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let o=[];for(let u of e){let E=new Mt(u)[ct];if(!Pn(E.url))throw T.errors.exception({header:r,message:"Expected http/s scheme."});E.initiator="fetch",E.destination="subresource",s.push(E);let h=LA();o.push(CG({request:E,processResponse(C){if(C.type==="error"||C.status===206||C.status<200||C.status>299)h.reject(T.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(C.headersList.contains("vary")){let I=$g(C.headersList.get("vary"));for(let Q of I)if(Q==="*"){h.reject(T.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let f of o)f.abort();return}}},processResponseEndOfBody(C){if(C.aborted){h.reject(new DOMException("aborted","AbortError"));return}h.resolve(C)}})),A.push(h.promise)}let i=await Promise.all(A),a=[],c=0;for(let u of i){let E={type:"put",request:s[c],response:u};a.push(E),c++}let g=LA(),l=null;try{this.#t(a)}catch(u){l=u}return queueMicrotask(()=>{l===null?g.resolve(void 0):g.reject(l)}),g.promise}async put(e,r){T.brandCheck(this,t);let A="Cache.put";T.argumentLengthCheck(arguments,2,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.Response(r,A,"response");let s=null;if(e instanceof Mt?s=e[ct]:s=new Mt(e)[ct],!Pn(s.url)||s.method!=="GET")throw T.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});let o=r[ct];if(o.status===206)throw T.errors.exception({header:A,message:"Got 206 status"});if(o.headersList.contains("vary")){let E=$g(o.headersList.get("vary"));for(let h of E)if(h==="*")throw T.errors.exception({header:A,message:"Got * vary field value"})}if(o.body&&(EG(o.body.stream)||o.body.stream.locked))throw T.errors.exception({header:A,message:"Response body is locked or disturbed"});let n=QG(o),i=LA();if(o.body!=null){let h=o.body.stream.getReader();dG(h).then(i.resolve,i.reject)}else i.resolve(void 0);let a=[],c={type:"put",request:s,response:n};a.push(c);let g=await i.promise;n.body!=null&&(n.body.source=g);let l=LA(),u=null;try{this.#t(a)}catch(E){u=E}return queueMicrotask(()=>{u===null?l.resolve():l.reject(u)}),l.promise}async delete(e,r={}){T.brandCheck(this,t);let A="Cache.delete";T.argumentLengthCheck(arguments,1,A),e=T.converters.RequestInfo(e,A,"request"),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return!1}else el(typeof e=="string"),s=new Mt(e)[ct];let o=[],n={type:"delete",request:s,options:r};o.push(n);let i=LA(),a=null,c;try{c=this.#t(o)}catch(g){a=g}return queueMicrotask(()=>{a===null?i.resolve(!!c?.length):i.reject(a)}),i.promise}async keys(e=void 0,r={}){T.brandCheck(this,t);let A="Cache.keys";e!==void 0&&(e=T.converters.RequestInfo(e,A,"request")),r=T.converters.CacheQueryOptions(r,A,"options");let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=LA(),n=[];if(e===void 0)for(let i of this.#e)n.push(i[0]);else{let i=this.#r(s,r);for(let a of i)n.push(a[0])}return queueMicrotask(()=>{let i=[];for(let a of n){let c=IG(a,new AbortController().signal,"immutable");i.push(c)}o.resolve(Object.freeze(i))}),o.promise}#t(e){let r=this.#e,A=[...r],s=[],o=[];try{for(let n of e){if(n.type!=="delete"&&n.type!=="put")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(n.type==="delete"&&n.response!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#r(n.request,n.options,s).length)throw new DOMException("???","InvalidStateError");let i;if(n.type==="delete"){if(i=this.#r(n.request,n.options),i.length===0)return[];for(let a of i){let c=r.indexOf(a);el(c!==-1),r.splice(c,1)}}else if(n.type==="put"){if(n.response==null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=n.request;if(!Pn(a.url))throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(n.options!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});i=this.#r(n.request);for(let c of i){let g=r.indexOf(c);el(g!==-1),r.splice(g,1)}r.push([n.request,n.response]),s.push([n.request,n.response])}o.push([n.request,n.response])}return o}catch(n){throw this.#e.length=0,this.#e=A,n}}#r(e,r,A){let s=[],o=A??this.#e;for(let n of o){let[i,a]=n;this.#o(e,i,a,r)&&s.push(n)}return s}#o(e,r,A=null,s){let o=new URL(e.url),n=new URL(r.url);if(s?.ignoreSearch&&(n.search="",o.search=""),!uG(o,n,!0))return!1;if(A==null||s?.ignoreVary||!A.headersList.contains("vary"))return!0;let i=$g(A.headersList.get("vary"));for(let a of i){if(a==="*")return!1;let c=r.headersList.get(a),g=e.headersList.get(a);if(c!==g)return!1}return!0}#s(e,r,A=1/0){let s=null;if(e!==void 0)if(e instanceof Mt){if(s=e[ct],s.method!=="GET"&&!r.ignoreMethod)return[]}else typeof e=="string"&&(s=new Mt(e)[ct]);let o=[];if(e===void 0)for(let i of this.#e)o.push(i[1]);else{let i=this.#r(s,r);for(let a of i)o.push(a[1])}let n=[];for(let i of o){let a=BG(i,"immutable");if(n.push(a.clone()),n.length>=A)break}return Object.freeze(n)}};Object.defineProperties(Hn.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:xr,matchAll:xr,add:xr,addAll:xr,put:xr,delete:xr,keys:xr});var vd=[{key:"ignoreSearch",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:T.converters.boolean,defaultValue:()=>!1}];T.converters.CacheQueryOptions=T.dictionaryConverter(vd);T.converters.MultiCacheQueryOptions=T.dictionaryConverter([...vd,{key:"cacheName",converter:T.converters.DOMString}]);T.converters.Response=T.interfaceConverter(hG);T.converters["sequence"]=T.sequenceConverter(T.converters.RequestInfo);xd.exports={Cache:Hn}});var _d=B((_P,Yd)=>{"use strict";var{kConstruct:Ms}=Jn(),{Cache:Vn}=Od(),{webidl:de}=Qe(),{kEnumerableProperty:vs}=M(),qn=class t{#e=new Map;constructor(){arguments[0]!==Ms&&de.illegalConstructor(),de.util.markAsUncloneable(this)}async match(e,r={}){if(de.brandCheck(this,t),de.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=de.converters.RequestInfo(e),r=de.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let A=this.#e.get(r.cacheName);return await new Vn(Ms,A).match(e,r)}}else for(let A of this.#e.values()){let o=await new Vn(Ms,A).match(e,r);if(o!==void 0)return o}}async has(e){de.brandCheck(this,t);let r="CacheStorage.has";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)}async open(e){de.brandCheck(this,t);let r="CacheStorage.open";if(de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.has(e)){let s=this.#e.get(e);return new Vn(Ms,s)}let A=[];return this.#e.set(e,A),new Vn(Ms,A)}async delete(e){de.brandCheck(this,t);let r="CacheStorage.delete";return de.argumentLengthCheck(arguments,1,r),e=de.converters.DOMString(e,r,"cacheName"),this.#e.delete(e)}async keys(){return de.brandCheck(this,t),[...this.#e.keys()]}};Object.defineProperties(qn.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:vs,has:vs,open:vs,delete:vs,keys:vs});Yd.exports={CacheStorage:qn}});var Pd=B((JP,Jd)=>{"use strict";Jd.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var Al=B((PP,Wd)=>{"use strict";function fG(t){for(let e=0;e=0&&r<=8||r>=10&&r<=31||r===127)return!0}return!1}function tl(t){for(let e=0;e126||r===34||r===40||r===41||r===60||r===62||r===64||r===44||r===59||r===58||r===92||r===47||r===91||r===93||r===63||r===61||r===123||r===125)throw new Error("Invalid cookie name")}}function rl(t){let e=t.length,r=0;if(t[0]==='"'){if(e===1||t[e-1]!=='"')throw new Error("Invalid cookie value");--e,++r}for(;r126||A===34||A===44||A===59||A===92)throw new Error("Invalid cookie value")}}function Vd(t){for(let e=0;e126||r===59)throw new Error("Invalid cookie path")}}function Hd(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function pG(t){if(t===" ")return;if(t.length>255)throw new Error("Invalid cookie domain");let e=0;for(let r=0;r63)throw new Error("Invalid cookie domain")}if(e===0||t.charCodeAt(t.length-1)===45)throw new Error("Invalid cookie domain")}var mG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wn=Array(61).fill(0).map((t,e)=>e.toString().padStart(2,"0"));function qd(t){return typeof t=="number"&&(t=new Date(t)),`${mG[t.getUTCDay()]}, ${Wn[t.getUTCDate()]} ${wG[t.getUTCMonth()]} ${t.getUTCFullYear()} ${Wn[t.getUTCHours()]}:${Wn[t.getUTCMinutes()]}:${Wn[t.getUTCSeconds()]} GMT`}function yG(t){if(t<0)throw new Error("Invalid cookie max-age")}function RG(t){if(t.name.length===0)return null;tl(t.name),rl(t.value);let e=[`${t.name}=${t.value}`];t.name.startsWith("__Secure-")&&(t.secure=!0),t.name.startsWith("__Host-")&&(t.secure=!0,t.domain=null,t.path="/"),t.secure&&e.push("Secure"),t.httpOnly&&e.push("HttpOnly"),typeof t.maxAge=="number"&&(yG(t.maxAge),e.push(`Max-Age=${t.maxAge}`)),t.domain&&(pG(t.domain),e.push(`Domain=${t.domain}`)),t.path&&(Vd(t.path),e.push(`Path=${t.path}`)),t.expires&&t.expires.toString()!=="Invalid Date"&&e.push(`Expires=${qd(t.expires)}`),t.sameSite&&e.push(`SameSite=${t.sameSite}`);for(let r of t.unparsed){if(!r.includes("="))throw new Error("Invalid unparsed");let[A,...s]=r.split("="),o=A.trim(),n=s.join("=");tl(o),rl(n),e.push(`${o}=${n}`)}return e.join("; ")}Wd.exports={isCTLExcludingHtab:fG,validateCookieName:tl,validateCookiePath:Vd,validateCookieValue:rl,toIMFDate:qd,stringify:RG}});var Zd=B((HP,zd)=>{"use strict";var{maxNameValuePairSize:DG,maxAttributeValueSize:TG}=Pd(),{isCTLExcludingHtab:bG}=Al(),{collectASequenceOfCodePointsFast:zn}=Te(),kG=require("node:assert");function FG(t){if(bG(t))return null;let e="",r="",A="",s="";if(t.includes(";")){let o={position:0};e=zn(";",t,o),r=t.slice(o.position)}else e=t;if(!e.includes("="))s=e;else{let o={position:0};A=zn("=",e,o),s=e.slice(o.position+1)}return A=A.trim(),s=s.trim(),A.length+s.length>DG?null:{name:A,value:s,...MA(r)}}function MA(t,e={}){if(t.length===0)return e;kG(t[0]===";"),t=t.slice(1);let r="";t.includes(";")?(r=zn(";",t,{position:0}),t=t.slice(r.length)):(r=t,t="");let A="",s="";if(r.includes("=")){let n={position:0};A=zn("=",r,n),s=r.slice(n.position+1)}else A=r;if(A=A.trim(),s=s.trim(),s.length>TG)return MA(t,e);let o=A.toLowerCase();if(o==="expires"){let n=new Date(s);e.expires=n}else if(o==="max-age"){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!=="-"||!/^\d+$/.test(s))return MA(t,e);let i=Number(s);e.maxAge=i}else if(o==="domain"){let n=s;n[0]==="."&&(n=n.slice(1)),n=n.toLowerCase(),e.domain=n}else if(o==="path"){let n="";s.length===0||s[0]!=="/"?n="/":n=s,e.path=n}else if(o==="secure")e.secure=!0;else if(o==="httponly")e.httpOnly=!0;else if(o==="samesite"){let n=s.toLowerCase();n==="none"?e.sameSite="None":n==="strict"?e.sameSite="Strict":n==="lax"&&(e.sameSite="Lax")}else e.unparsed??=[],e.unparsed.push(`${A}=${s}`);return MA(t,e)}zd.exports={parseSetCookie:FG,parseUnparsedAttributes:MA}});var Xd=B((VP,Kd)=>{"use strict";var{parseSetCookie:SG}=Zd(),{stringify:NG}=Al(),{webidl:x}=Qe(),{Headers:Zn}=Ur();function UG(t){x.argumentLengthCheck(arguments,1,"getCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.get("cookie"),r={};if(!e)return r;for(let A of e.split(";")){let[s,...o]=A.split("=");r[s.trim()]=o.join("=")}return r}function GG(t,e,r){x.brandCheck(t,Zn,{strict:!1});let A="deleteCookie";x.argumentLengthCheck(arguments,2,A),e=x.converters.DOMString(e,A,"name"),r=x.converters.DeleteCookieAttributes(r),jd(t,{name:e,value:"",expires:new Date(0),...r})}function LG(t){x.argumentLengthCheck(arguments,1,"getSetCookies"),x.brandCheck(t,Zn,{strict:!1});let e=t.getSetCookie();return e?e.map(r=>SG(r)):[]}function jd(t,e){x.argumentLengthCheck(arguments,2,"setCookie"),x.brandCheck(t,Zn,{strict:!1}),e=x.converters.Cookie(e);let r=NG(e);r&&t.append("Set-Cookie",r)}x.converters.DeleteCookieAttributes=x.dictionaryConverter([{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null}]);x.converters.Cookie=x.dictionaryConverter([{converter:x.converters.DOMString,key:"name"},{converter:x.converters.DOMString,key:"value"},{converter:x.nullableConverter(t=>typeof t=="number"?x.converters["unsigned long long"](t):new Date(t)),key:"expires",defaultValue:()=>null},{converter:x.nullableConverter(x.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.DOMString),key:"path",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"secure",defaultValue:()=>null},{converter:x.nullableConverter(x.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:x.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:x.sequenceConverter(x.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);Kd.exports={getCookies:UG,deleteCookie:GG,getSetCookies:LG,setCookie:jd}});var xA=B((qP,ef)=>{"use strict";var{webidl:D}=Qe(),{kEnumerableProperty:Se}=M(),{kConstruct:$d}=$(),{MessagePort:MG}=require("node:worker_threads"),vA=class t extends Event{#e;constructor(e,r={}){if(e===$d){super(arguments[1],arguments[2]),D.util.markAsUncloneable(this);return}let A="MessageEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.MessageEventInit(r,A,"eventInitDict"),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get data(){return D.brandCheck(this,t),this.#e.data}get origin(){return D.brandCheck(this,t),this.#e.origin}get lastEventId(){return D.brandCheck(this,t),this.#e.lastEventId}get source(){return D.brandCheck(this,t),this.#e.source}get ports(){return D.brandCheck(this,t),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(e,r=!1,A=!1,s=null,o="",n="",i=null,a=[]){return D.brandCheck(this,t),D.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new t(e,{bubbles:r,cancelable:A,data:s,origin:o,lastEventId:n,source:i,ports:a})}static createFastMessageEvent(e,r){let A=new t($d,e,r);return A.#e=r,A.#e.data??=null,A.#e.origin??="",A.#e.lastEventId??="",A.#e.source??=null,A.#e.ports??=[],A}},{createFastMessageEvent:vG}=vA;delete vA.createFastMessageEvent;var jn=class t extends Event{#e;constructor(e,r={}){let A="CloseEvent constructor";D.argumentLengthCheck(arguments,1,A),e=D.converters.DOMString(e,A,"type"),r=D.converters.CloseEventInit(r),super(e,r),this.#e=r,D.util.markAsUncloneable(this)}get wasClean(){return D.brandCheck(this,t),this.#e.wasClean}get code(){return D.brandCheck(this,t),this.#e.code}get reason(){return D.brandCheck(this,t),this.#e.reason}},Kn=class t extends Event{#e;constructor(e,r){let A="ErrorEvent constructor";D.argumentLengthCheck(arguments,1,A),super(e,r),D.util.markAsUncloneable(this),e=D.converters.DOMString(e,A,"type"),r=D.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return D.brandCheck(this,t),this.#e.message}get filename(){return D.brandCheck(this,t),this.#e.filename}get lineno(){return D.brandCheck(this,t),this.#e.lineno}get colno(){return D.brandCheck(this,t),this.#e.colno}get error(){return D.brandCheck(this,t),this.#e.error}};Object.defineProperties(vA.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:Se,origin:Se,lastEventId:Se,source:Se,ports:Se,initMessageEvent:Se});Object.defineProperties(jn.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:Se,code:Se,wasClean:Se});Object.defineProperties(Kn.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:Se,filename:Se,lineno:Se,colno:Se,error:Se});D.converters.MessagePort=D.interfaceConverter(MG);D.converters["sequence"]=D.sequenceConverter(D.converters.MessagePort);var sl=[{key:"bubbles",converter:D.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:D.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:D.converters.boolean,defaultValue:()=>!1}];D.converters.MessageEventInit=D.dictionaryConverter([...sl,{key:"data",converter:D.converters.any,defaultValue:()=>null},{key:"origin",converter:D.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:D.converters.DOMString,defaultValue:()=>""},{key:"source",converter:D.nullableConverter(D.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:D.converters["sequence"],defaultValue:()=>new Array(0)}]);D.converters.CloseEventInit=D.dictionaryConverter([...sl,{key:"wasClean",converter:D.converters.boolean,defaultValue:()=>!1},{key:"code",converter:D.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:D.converters.USVString,defaultValue:()=>""}]);D.converters.ErrorEventInit=D.dictionaryConverter([...sl,{key:"message",converter:D.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:D.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:D.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:D.converters.any}]);ef.exports={MessageEvent:vA,CloseEvent:jn,ErrorEvent:Kn,createFastMessageEvent:vG}});var Or=B((WP,tf)=>{"use strict";var xG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",OG={enumerable:!0,writable:!1,configurable:!1},YG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},_G={NOT_SENT:0,PROCESSING:1,SENT:2},JG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},PG=2**16-1,HG={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},VG=Buffer.allocUnsafe(0),qG={string:1,typedArray:2,arrayBuffer:3,blob:4};tf.exports={uid:xG,sentCloseFrameState:_G,staticPropertyDescriptors:OG,states:YG,opcodes:JG,maxUnsigned16Bit:PG,parserStates:HG,emptyBuffer:VG,sendHints:qG}});var xs=B((zP,rf)=>{"use strict";rf.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var _s=B((ZP,uf)=>{"use strict";var{kReadyState:Os,kController:WG,kResponse:zG,kBinaryType:ZG,kWebSocketURL:jG}=xs(),{states:Ys,opcodes:Ar}=Or(),{ErrorEvent:KG,createFastMessageEvent:XG}=xA(),{isUtf8:$G}=require("node:buffer"),{collectASequenceOfCodePointsFast:eL,removeHTTPWhitespace:Af}=Te();function tL(t){return t[Os]===Ys.CONNECTING}function rL(t){return t[Os]===Ys.OPEN}function AL(t){return t[Os]===Ys.CLOSING}function sL(t){return t[Os]===Ys.CLOSED}function ol(t,e,r=(s,o)=>new Event(s,o),A={}){let s=r(t,A);e.dispatchEvent(s)}function oL(t,e,r){if(t[Os]!==Ys.OPEN)return;let A;if(e===Ar.TEXT)try{A=lf(r)}catch{of(t,"Received invalid UTF-8 in text frame.");return}else e===Ar.BINARY&&(t[ZG]==="blob"?A=new Blob([r]):A=nL(r));ol("message",t,XG,{origin:t[jG].origin,data:A})}function nL(t){return t.byteLength===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function iL(t){if(t.length===0)return!1;for(let e=0;e126||r===34||r===40||r===41||r===44||r===47||r===58||r===59||r===60||r===61||r===62||r===63||r===64||r===91||r===92||r===93||r===123||r===125)return!1}return!0}function aL(t){return t>=1e3&&t<1015?t!==1004&&t!==1005&&t!==1006:t>=3e3&&t<=4999}function of(t,e){let{[WG]:r,[zG]:A}=t;r.abort(),A?.socket&&!A.socket.destroyed&&A.socket.destroy(),e&&ol("error",t,(s,o)=>new KG(s,o),{error:new Error(e),message:e})}function nf(t){return t===Ar.CLOSE||t===Ar.PING||t===Ar.PONG}function af(t){return t===Ar.CONTINUATION}function cf(t){return t===Ar.TEXT||t===Ar.BINARY}function cL(t){return cf(t)||af(t)||nf(t)}function gL(t){let e={position:0},r=new Map;for(;e.position57)return!1}let e=Number.parseInt(t,10);return e>=8&&e<=15}var gf=typeof process.versions.icu=="string",sf=gf?new TextDecoder("utf-8",{fatal:!0}):void 0,lf=gf?sf.decode.bind(sf):function(t){if($G(t))return t.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};uf.exports={isConnecting:tL,isEstablished:rL,isClosing:AL,isClosed:sL,fireEvent:ol,isValidSubprotocol:iL,isValidStatusCode:aL,failWebsocketConnection:of,websocketMessageReceived:oL,utf8Decode:lf,isControlFrame:nf,isContinuationFrame:af,isTextBinaryFrame:cf,isValidOpcode:cL,parseExtensions:gL,isValidClientWindowBits:lL}});var $n=B((jP,Ef)=>{"use strict";var{maxUnsigned16Bit:uL}=Or(),Xn=16386,nl,Js=null,OA=Xn;try{nl=require("node:crypto")}catch{nl={randomFillSync:function(e,r,A){for(let s=0;suL?(n+=8,o=127):s>125&&(n+=2,o=126);let i=Buffer.allocUnsafe(s+n);i[0]=i[1]=0,i[0]|=128,i[0]=(i[0]&240)+e;i[n-4]=A[0],i[n-3]=A[1],i[n-2]=A[2],i[n-1]=A[3],i[1]=o,o===126?i.writeUInt16BE(s,2):o===127&&(i[2]=i[3]=0,i.writeUIntBE(s,4,6)),i[1]|=128;for(let a=0;a{"use strict";var{uid:hL,states:Ps,sentCloseFrameState:ei,emptyBuffer:QL,opcodes:BL}=Or(),{kReadyState:Hs,kSentClose:ti,kByteParser:Qf,kReceivedClose:hf,kResponse:Bf}=xs(),{fireEvent:IL,failWebsocketConnection:sr,isClosing:CL,isClosed:dL,isEstablished:fL,parseExtensions:pL}=_s(),{channels:YA}=jr(),{CloseEvent:mL}=xA(),{makeRequest:wL}=NA(),{fetching:yL}=Gs(),{Headers:RL,getHeadersList:DL}=Ur(),{getDecodeSplit:TL}=Ge(),{WebsocketFrameSend:bL}=$n(),al;try{al=require("node:crypto")}catch{}function kL(t,e,r,A,s,o){let n=t;n.protocol=t.protocol==="ws:"?"http:":"https:";let i=wL({urlList:[n],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(o.headers){let l=DL(new RL(o.headers));i.headersList=l}let a=al.randomBytes(16).toString("base64");i.headersList.append("sec-websocket-key",a),i.headersList.append("sec-websocket-version","13");for(let l of e)i.headersList.append("sec-websocket-protocol",l);return i.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),yL({request:i,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(l){if(l.type==="error"||l.status!==101){sr(A,"Received network error or non-101 status code.");return}if(e.length!==0&&!l.headersList.get("Sec-WebSocket-Protocol")){sr(A,"Server did not respond with sent protocols.");return}if(l.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){sr(A,'Server did not set Upgrade header to "websocket".');return}if(l.headersList.get("Connection")?.toLowerCase()!=="upgrade"){sr(A,'Server did not set Connection header to "upgrade".');return}let u=l.headersList.get("Sec-WebSocket-Accept"),E=al.createHash("sha1").update(a+hL).digest("base64");if(u!==E){sr(A,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let h=l.headersList.get("Sec-WebSocket-Extensions"),C;if(h!==null&&(C=pL(h),!C.has("permessage-deflate"))){sr(A,"Sec-WebSocket-Extensions header does not match.");return}let I=l.headersList.get("Sec-WebSocket-Protocol");if(I!==null&&!TL("sec-websocket-protocol",i.headersList).includes(I)){sr(A,"Protocol was not set in the opening handshake.");return}l.socket.on("data",If),l.socket.on("close",Cf),l.socket.on("error",df),YA.open.hasSubscribers&&YA.open.publish({address:l.socket.address(),protocol:I,extensions:h}),s(l,C)}})}function FL(t,e,r,A){if(!(CL(t)||dL(t)))if(!fL(t))sr(t,"Connection was closed before it was established."),t[Hs]=Ps.CLOSING;else if(t[ti]===ei.NOT_SENT){t[ti]=ei.PROCESSING;let s=new bL;e!==void 0&&r===void 0?(s.frameData=Buffer.allocUnsafe(2),s.frameData.writeUInt16BE(e,0)):e!==void 0&&r!==void 0?(s.frameData=Buffer.allocUnsafe(2+A),s.frameData.writeUInt16BE(e,0),s.frameData.write(r,2,"utf-8")):s.frameData=QL,t[Bf].socket.write(s.createFrame(BL.CLOSE)),t[ti]=ei.SENT,t[Hs]=Ps.CLOSING}else t[Hs]=Ps.CLOSING}function If(t){this.ws[Qf].write(t)||this.pause()}function Cf(){let{ws:t}=this,{[Bf]:e}=t;e.socket.off("data",If),e.socket.off("close",Cf),e.socket.off("error",df);let r=t[ti]===ei.SENT&&t[hf],A=1005,s="",o=t[Qf].closingInfo;o&&!o.error?(A=o.code??1005,s=o.reason):t[hf]||(A=1006),t[Hs]=Ps.CLOSED,IL("close",t,(n,i)=>new mL(n,i),{wasClean:r,code:A,reason:s}),YA.close.hasSubscribers&&YA.close.publish({websocket:t,code:A,reason:s})}function df(t){let{ws:e}=this;e[Hs]=Ps.CLOSING,YA.socketError.hasSubscribers&&YA.socketError.publish(t),this.destroy()}ff.exports={establishWebSocketConnection:kL,closeWebSocketConnection:FL}});var mf=B((XP,pf)=>{"use strict";var{createInflateRaw:SL,Z_DEFAULT_WINDOWBITS:NL}=require("node:zlib"),{isValidClientWindowBits:UL}=_s(),{MessageSizeExceededError:GL}=Y(),LL=Buffer.from([0,0,255,255]),ri=Symbol("kBuffer"),Vs=Symbol("kLength"),gl=class{#e;#t={};#r=0;constructor(e,r){this.#t.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=e.get("server_max_window_bits"),this.#r=r.maxPayloadSize}decompress(e,r,A){if(!this.#e){let s=NL;if(this.#t.serverMaxWindowBits){if(!UL(this.#t.serverMaxWindowBits)){A(new Error("Invalid server_max_window_bits"));return}s=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=SL({windowBits:s})}catch(o){A(o);return}this.#e[ri]=[],this.#e[Vs]=0,this.#e.on("data",o=>{if(this.#e[Vs]+=o.length,this.#r>0&&this.#e[Vs]>this.#r){A(new GL),this.#e.removeAllListeners(),this.#e=null;return}this.#e[ri].push(o)}),this.#e.on("error",o=>{this.#e=null,A(o)})}this.#e.write(e),r&&this.#e.write(LL),this.#e.flush(()=>{if(!this.#e)return;let s=Buffer.concat(this.#e[ri],this.#e[Vs]);this.#e[ri].length=0,this.#e[Vs]=0,A(null,s)})}};pf.exports={PerMessageDeflate:gl}});var Nf=B(($P,Sf)=>{"use strict";var{Writable:ML}=require("node:stream"),vL=require("node:assert"),{parserStates:Ne,opcodes:_A,states:xL,emptyBuffer:wf,sentCloseFrameState:yf}=Or(),{kReadyState:OL,kSentClose:Rf,kResponse:Df,kReceivedClose:Tf}=xs(),{channels:Ai}=jr(),{isValidStatusCode:YL,isValidOpcode:_L,failWebsocketConnection:Je,websocketMessageReceived:bf,utf8Decode:JL,isControlFrame:ll,isTextBinaryFrame:ul,isContinuationFrame:PL}=_s(),{WebsocketFrameSend:kf}=$n(),{closeWebSocketConnection:Ff}=cl(),{PerMessageDeflate:HL}=mf(),{MessageSizeExceededError:El}=Y();function qs(t,e,r){Ff(t,e,r,Buffer.byteLength(r)),Je(t,r)}var hl=class extends ML{#e=[];#t=0;#r=0;#o=!1;#s=Ne.INFO;#A={};#n=[];#i;#c;#a;constructor(e,r,A={}){super(),this.ws=e,this.#i=r??new Map,this.#c=A.maxFragments??0,this.#a=A.maxPayloadSize??0,this.#i.has("permessage-deflate")&&this.#i.set("permessage-deflate",new HL(r,A))}_write(e,r,A){this.#e.push(e),this.#r+=e.length,this.#o=!0,this.run(A)}#g(){return this.#a>0&&!ll(this.#A.opcode)&&this.#A.payloadLength+this.#t>this.#a?(qs(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(e){for(;this.#o;)if(this.#s===Ne.INFO){if(this.#r<2)return e();let r=this.consume(2),A=(r[0]&128)!==0,s=r[0]&15,o=(r[1]&128)===128,n=!A&&s!==_A.CONTINUATION,i=r[1]&127,a=r[0]&64,c=r[0]&32,g=r[0]&16;if(!_L(s))return Je(this.ws,"Invalid opcode received"),e();if(o)return Je(this.ws,"Frame cannot be masked"),e();if(a!==0&&!this.#i.has("permessage-deflate")){Je(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||g!==0){Je(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(n&&!ul(s)){Je(this.ws,"Invalid frame type was fragmented.");return}if(ul(s)&&this.#n.length>0){Je(this.ws,"Expected continuation frame");return}if(this.#A.fragmented&&n){Je(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((i>125||n)&&ll(s)){Je(this.ws,"Control frame either too large or fragmented");return}if(PL(s)&&this.#n.length===0&&!this.#A.compressed){Je(this.ws,"Unexpected continuation frame");return}if(i<=125){if(this.#A.payloadLength=i,this.#s=Ne.READ_DATA,!this.#g())return}else i===126?this.#s=Ne.PAYLOADLENGTH_16:i===127&&(this.#s=Ne.PAYLOADLENGTH_64);ul(s)&&(this.#A.binaryType=s,this.#A.compressed=a!==0),this.#A.opcode=s,this.#A.masked=o,this.#A.fin=A,this.#A.fragmented=n}else if(this.#s===Ne.PAYLOADLENGTH_16){if(this.#r<2)return e();let r=this.consume(2);if(this.#A.payloadLength=r.readUInt16BE(0),this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.PAYLOADLENGTH_64){if(this.#r<8)return e();let r=this.consume(8),A=r.readUInt32BE(0),s=r.readUInt32BE(4);if(A!==0||s>2**31-1){Je(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#A.payloadLength=s,this.#s=Ne.READ_DATA,!this.#g())return}else if(this.#s===Ne.READ_DATA){if(this.#r{if(A){let o=A instanceof El?1009:1007;qs(this.ws,o,A.message);return}if(this.writeFragments(s)){if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}if(!this.#A.fin){this.#s=Ne.INFO,this.#o=!0,this.run(e);return}bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#o=!0,this.#s=Ne.INFO,this.run(e)}}),this.#o=!1;break}else{if(!this.writeFragments(r))return;if(this.#a>0&&this.#t>this.#a){qs(this.ws,1009,new El().message);return}!this.#A.fragmented&&this.#A.fin&&bf(this.ws,this.#A.binaryType,this.consumeFragments()),this.#s=Ne.INFO}}}consume(e){if(e>this.#r)throw new Error("Called consume() before buffers satiated.");if(e===0)return wf;if(this.#e[0].length===e)return this.#r-=this.#e[0].length,this.#e.shift();let r=Buffer.allocUnsafe(e),A=0;for(;A!==e;){let s=this.#e[0],{length:o}=s;if(o+A===e){r.set(this.#e.shift(),A);break}else if(o+A>e){r.set(s.subarray(0,e-A),A),this.#e[0]=s.subarray(e-A);break}else r.set(this.#e.shift(),A),A+=s.length}return this.#r-=e,r}writeFragments(e){return this.#c>0&&this.#n.length===this.#c?(qs(this.ws,1008,"Too many message fragments"),!1):(this.#t+=e.length,this.#n.push(e),!0)}consumeFragments(){let e=this.#n;if(e.length===1)return this.#t=0,e.shift();let r=Buffer.concat(e,this.#t);return this.#n=[],this.#t=0,r}parseCloseBody(e){vL(e.length!==1);let r;if(e.length>=2&&(r=e.readUInt16BE(0)),r!==void 0&&!YL(r))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);A[0]===239&&A[1]===187&&A[2]===191&&(A=A.subarray(3));try{A=JL(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:r,reason:A,error:!1}}parseControlFrame(e){let{opcode:r,payloadLength:A}=this.#A;if(r===_A.CLOSE){if(A===1)return Je(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#A.closeInfo=this.parseCloseBody(e),this.#A.closeInfo.error){let{code:s,reason:o}=this.#A.closeInfo;return Ff(this.ws,s,o,o.length),Je(this.ws,o),!1}if(this.ws[Rf]!==yf.SENT){let s=wf;this.#A.closeInfo.code&&(s=Buffer.allocUnsafe(2),s.writeUInt16BE(this.#A.closeInfo.code,0));let o=new kf(s);this.ws[Df].socket.write(o.createFrame(_A.CLOSE),n=>{n||(this.ws[Rf]=yf.SENT)})}return this.ws[OL]=xL.CLOSING,this.ws[Tf]=!0,!1}else if(r===_A.PING){if(!this.ws[Tf]){let s=new kf(e);this.ws[Df].socket.write(s.createFrame(_A.PONG)),Ai.ping.hasSubscribers&&Ai.ping.publish({payload:e})}}else r===_A.PONG&&Ai.pong.hasSubscribers&&Ai.pong.publish({payload:e});return!0}get closingInfo(){return this.#A.closeInfo}};Sf.exports={ByteParser:hl}});var vf=B((eH,Mf)=>{"use strict";var{WebsocketFrameSend:VL}=$n(),{opcodes:Uf,sendHints:JA}=Or(),qL=fc(),Gf=Buffer[Symbol.species],Ql=class{#e=new qL;#t=!1;#r;constructor(e){this.#r=e}add(e,r,A){if(A!==JA.blob){let o=Lf(e,A);if(!this.#t)this.#r.write(o,r);else{let n={promise:null,callback:r,frame:o};this.#e.push(n)}return}let s={promise:e.arrayBuffer().then(o=>{s.promise=null,s.frame=Lf(o,A)}),callback:r,frame:null};this.#e.push(s),this.#t||this.#o()}async#o(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let r=e.shift();r.promise!==null&&await r.promise,this.#r.write(r.frame,r.callback),r.callback=r.frame=null}this.#t=!1}};function Lf(t,e){return new VL(WL(t,e)).createFrame(e===JA.string?Uf.TEXT:Uf.BINARY)}function WL(t,e){switch(e){case JA.string:return Buffer.from(t);case JA.arrayBuffer:case JA.blob:return new Gf(t);case JA.typedArray:return new Gf(t.buffer,t.byteOffset,t.byteLength)}}Mf.exports={SendQueue:Ql}});var Wf=B((tH,qf)=>{"use strict";var{webidl:U}=Qe(),{URLSerializer:zL}=Te(),{environmentSettingsObject:xf}=Ge(),{staticPropertyDescriptors:or,states:Ws,sentCloseFrameState:ZL,sendHints:si}=Or(),{kWebSocketURL:Of,kReadyState:Bl,kController:Yf,kBinaryType:oi,kResponse:_f,kSentClose:jL,kByteParser:KL}=xs(),{isConnecting:XL,isEstablished:$L,isClosing:eM,isValidSubprotocol:tM,fireEvent:Jf}=_s(),{establishWebSocketConnection:rM,closeWebSocketConnection:Pf}=cl(),{ByteParser:AM}=Nf(),{kEnumerableProperty:Ze,isBlobLike:Hf}=M(),{getGlobalDispatcher:sM}=fn(),{types:Vf}=require("node:util"),{ErrorEvent:oM,CloseEvent:nM}=xA(),{SendQueue:iM}=vf(),Pe=class t extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#o="";#s;constructor(e,r=[]){super(),U.util.markAsUncloneable(this);let A="WebSocket constructor";U.argumentLengthCheck(arguments,1,A);let s=U.converters["DOMString or sequence or WebSocketInit"](r,A,"options");e=U.converters.USVString(e,A,"url"),r=s.protocols;let o=xf.settingsObject.baseUrl,n;try{n=new URL(e,o)}catch(a){throw new DOMException(a,"SyntaxError")}if(n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),n.protocol!=="ws:"&&n.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${n.protocol}`,"SyntaxError");if(n.hash||n.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof r=="string"&&(r=[r]),r.length!==new Set(r.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(r.length>0&&!r.every(a=>tM(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[Of]=new URL(n.href);let i=xf.settingsObject;this[Yf]=rM(n,r,i,this,(a,c)=>this.#A(a,c),s),this[Bl]=t.CONNECTING,this[jL]=ZL.NOT_SENT,this[oi]="blob"}close(e=void 0,r=void 0){U.brandCheck(this,t);let A="WebSocket.close";if(e!==void 0&&(e=U.converters["unsigned short"](e,A,"code",{clamp:!0})),r!==void 0&&(r=U.converters.USVString(r,A,"reason")),e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");let s=0;if(r!==void 0&&(s=Buffer.byteLength(r),s>123))throw new DOMException(`Reason must be less than 123 bytes; received ${s}`,"SyntaxError");Pf(this,e,r,s)}send(e){U.brandCheck(this,t);let r="WebSocket.send";if(U.argumentLengthCheck(arguments,1,r),e=U.converters.WebSocketSendData(e,r,"data"),XL(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!$L(this)||eM(this)))if(typeof e=="string"){let A=Buffer.byteLength(e);this.#t+=A,this.#s.add(e,()=>{this.#t-=A},si.string)}else Vf.isArrayBuffer(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.arrayBuffer)):ArrayBuffer.isView(e)?(this.#t+=e.byteLength,this.#s.add(e,()=>{this.#t-=e.byteLength},si.typedArray)):Hf(e)&&(this.#t+=e.size,this.#s.add(e,()=>{this.#t-=e.size},si.blob))}get readyState(){return U.brandCheck(this,t),this[Bl]}get bufferedAmount(){return U.brandCheck(this,t),this.#t}get url(){return U.brandCheck(this,t),zL(this[Of])}get extensions(){return U.brandCheck(this,t),this.#o}get protocol(){return U.brandCheck(this,t),this.#r}get onopen(){return U.brandCheck(this,t),this.#e.open}set onopen(e){U.brandCheck(this,t),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onerror(){return U.brandCheck(this,t),this.#e.error}set onerror(e){U.brandCheck(this,t),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}get onclose(){return U.brandCheck(this,t),this.#e.close}set onclose(e){U.brandCheck(this,t),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof e=="function"?(this.#e.close=e,this.addEventListener("close",e)):this.#e.close=null}get onmessage(){return U.brandCheck(this,t),this.#e.message}set onmessage(e){U.brandCheck(this,t),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get binaryType(){return U.brandCheck(this,t),this[oi]}set binaryType(e){U.brandCheck(this,t),e!=="blob"&&e!=="arraybuffer"?this[oi]="blob":this[oi]=e}#A(e,r){this[_f]=e;let A=this[Yf]?.dispatcher?.webSocketOptions,s=A?.maxFragments,o=A?.maxPayloadSize,n=new AM(this,r,{maxFragments:s,maxPayloadSize:o});n.on("drain",aM),n.on("error",cM.bind(this)),e.socket.ws=this,this[KL]=n,this.#s=new iM(e.socket),this[Bl]=Ws.OPEN;let i=e.headersList.get("sec-websocket-extensions");i!==null&&(this.#o=i);let a=e.headersList.get("sec-websocket-protocol");a!==null&&(this.#r=a),Jf("open",this)}};Pe.CONNECTING=Pe.prototype.CONNECTING=Ws.CONNECTING;Pe.OPEN=Pe.prototype.OPEN=Ws.OPEN;Pe.CLOSING=Pe.prototype.CLOSING=Ws.CLOSING;Pe.CLOSED=Pe.prototype.CLOSED=Ws.CLOSED;Object.defineProperties(Pe.prototype,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or,url:Ze,readyState:Ze,bufferedAmount:Ze,onopen:Ze,onerror:Ze,onclose:Ze,close:Ze,onmessage:Ze,binaryType:Ze,send:Ze,extensions:Ze,protocol:Ze,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Pe,{CONNECTING:or,OPEN:or,CLOSING:or,CLOSED:or});U.converters["sequence"]=U.sequenceConverter(U.converters.DOMString);U.converters["DOMString or sequence"]=function(t,e,r){return U.util.Type(t)==="Object"&&Symbol.iterator in t?U.converters["sequence"](t):U.converters.DOMString(t,e,r)};U.converters.WebSocketInit=U.dictionaryConverter([{key:"protocols",converter:U.converters["DOMString or sequence"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:U.converters.any,defaultValue:()=>sM()},{key:"headers",converter:U.nullableConverter(U.converters.HeadersInit)}]);U.converters["DOMString or sequence or WebSocketInit"]=function(t){return U.util.Type(t)==="Object"&&!(Symbol.iterator in t)?U.converters.WebSocketInit(t):{protocols:U.converters["DOMString or sequence"](t)}};U.converters.WebSocketSendData=function(t){if(U.util.Type(t)==="Object"){if(Hf(t))return U.converters.Blob(t,{strict:!1});if(ArrayBuffer.isView(t)||Vf.isArrayBuffer(t))return U.converters.BufferSource(t)}return U.converters.USVString(t)};function aM(){this.ws[_f].socket.resume()}function cM(t){let e,r;t instanceof nM?(e=t.reason,r=t.code):e=t.message,Jf("error",this,()=>new oM("error",{error:t,message:e})),Pf(this,r)}qf.exports={WebSocket:Pe}});var Il=B((rH,zf)=>{"use strict";function gM(t){return t.indexOf("\0")===-1}function lM(t){if(t.length===0)return!1;for(let e=0;e57)return!1;return!0}function uM(t){return new Promise(e=>{setTimeout(e,t).unref()})}zf.exports={isValidLastEventId:gM,isASCIINumber:lM,delay:uM}});var Xf=B((AH,Kf)=>{"use strict";var{Transform:EM}=require("node:stream"),{isASCIINumber:Zf,isValidLastEventId:jf}=Il(),vt=[239,187,191],Cl=10,ni=13,hM=58,QM=32,dl=class extends EM{state=null;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,r,A){if(e.length===0){A();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===vt[0]){A();return}this.checkBOM=!1,A();return;case 2:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]){A();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,A();return}this.checkBOM=!1;break;default:this.buffer[0]===vt[0]&&this.buffer[1]===vt[1]&&this.buffer[2]===vt[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1;break}for(;this.pos0&&(r[s]=o);break}}processEvent(e){e.retry&&Zf(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&jf(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};Kf.exports={EventSourceStream:dl}});var np=B((sH,op)=>{"use strict";var{pipeline:BM}=require("node:stream"),{fetching:IM}=Gs(),{makeRequest:CM}=NA(),{webidl:xt}=Qe(),{EventSourceStream:dM}=Xf(),{parseMIMEType:fM}=Te(),{createFastMessageEvent:pM}=xA(),{isNetworkError:$f}=Ns(),{delay:mM}=Il(),{kEnumerableProperty:Yr}=M(),{environmentSettingsObject:ep}=Ge(),tp=!1,rp=3e3,zs=0,Ap=1,Zs=2,wM="anonymous",yM="use-credentials",PA=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#o=zs;#s=null;#A=null;#n;#i;constructor(e,r={}){super(),xt.util.markAsUncloneable(this);let A="EventSource constructor";xt.argumentLengthCheck(arguments,1,A),tp||(tp=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=xt.converters.USVString(e,A,"url"),r=xt.converters.EventSourceInitDict(r,A,"eventSourceInitDict"),this.#n=r.dispatcher,this.#i={lastEventId:"",reconnectionTime:rp};let s=ep,o;try{o=new URL(e,s.settingsObject.baseUrl),this.#i.origin=o.origin}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=o.href;let n=wM;r.withCredentials&&(n=yM,this.#r=!0);let i={redirect:"follow",keepalive:!0,mode:"cors",credentials:n==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};i.client=ep.settingsObject,i.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],i.cache="no-store",i.initiator="other",i.urlList=[new URL(this.#t)],this.#s=CM(i),this.#c()}get readyState(){return this.#o}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#o===Zs)return;this.#o=zs;let e={request:this.#s,dispatcher:this.#n},r=A=>{$f(A)&&(this.dispatchEvent(new Event("error")),this.close()),this.#a()};e.processResponseEndOfBody=r,e.processResponse=A=>{if($f(A))if(A.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#a();return}let s=A.headersList.get("content-type",!0),o=s!==null?fM(s):"failure",n=o!=="failure"&&o.essence==="text/event-stream";if(A.status!==200||n===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#o=Ap,this.dispatchEvent(new Event("open")),this.#i.origin=A.urlList[A.urlList.length-1].origin;let i=new dM({eventSourceSettings:this.#i,push:a=>{this.dispatchEvent(pM(a.type,a.options))}});BM(A.body.stream,i,a=>{a?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#A=IM(e)}async#a(){this.#o!==Zs&&(this.#o=zs,this.dispatchEvent(new Event("error")),await mM(this.#i.reconnectionTime),this.#o===zs&&(this.#i.lastEventId.length&&this.#s.headersList.set("last-event-id",this.#i.lastEventId,!0),this.#c()))}close(){xt.brandCheck(this,t),this.#o!==Zs&&(this.#o=Zs,this.#A.abort(),this.#s=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null}},sp={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:zs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:Ap,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:Zs,writable:!1}};Object.defineProperties(PA,sp);Object.defineProperties(PA.prototype,sp);Object.defineProperties(PA.prototype,{close:Yr,onerror:Yr,onmessage:Yr,onopen:Yr,readyState:Yr,url:Yr,withCredentials:Yr});xt.converters.EventSourceInitDict=xt.dictionaryConverter([{key:"withCredentials",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:xt.converters.any}]);op.exports={EventSource:PA,defaultReconnectionTime:rp}});var ci=B((oH,N)=>{"use strict";var RM=BA(),ip=$A(),DM=IA(),TM=AB(),bM=CA(),kM=Yc(),FM=TB(),SM=GB(),ap=Y(),ai=M(),{InvalidArgumentError:ii}=ap,HA=fI(),NM=ts(),UM=pg(),GM=rC(),LM=yg(),MM=ag(),vM=gn(),{getGlobalDispatcher:cp,setGlobalDispatcher:xM}=fn(),OM=pn(),YM=Xo(),_M=$o();Object.assign(ip.prototype,HA);N.exports.Dispatcher=ip;N.exports.Client=RM;N.exports.Pool=DM;N.exports.BalancedPool=TM;N.exports.Agent=bM;N.exports.ProxyAgent=kM;N.exports.EnvHttpProxyAgent=FM;N.exports.RetryAgent=SM;N.exports.RetryHandler=vM;N.exports.DecoratorHandler=OM;N.exports.RedirectHandler=YM;N.exports.createRedirectInterceptor=_M;N.exports.interceptors={redirect:cC(),retry:lC(),dump:EC(),dns:BC()};N.exports.buildConnector=NM;N.exports.errors=ap;N.exports.util={parseHeaders:ai.parseHeaders,headerNameToString:ai.headerNameToString};function js(t){return(e,r,A)=>{if(typeof r=="function"&&(A=r,r=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new ii("invalid url");if(r!=null&&typeof r!="object")throw new ii("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new ii("invalid opts.path");let n=r.path;r.path.startsWith("/")||(n=`/${n}`),e=new URL(ai.parseOrigin(e).origin+n)}else r||(r=typeof e=="object"?e:{}),e=ai.parseURL(e);let{agent:s,dispatcher:o=cp()}=r;if(s)throw new ii("unsupported opts.agent. Did you mean opts.client?");return t.call(o,{...r,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:r.method||(r.body?"PUT":"GET")},A)}}N.exports.setGlobalDispatcher=xM;N.exports.getGlobalDispatcher=cp;var JM=Gs().fetch;N.exports.fetch=async function(e,r=void 0){try{return await JM(e,r)}catch(A){throw A&&typeof A=="object"&&Error.captureStackTrace(A),A}};N.exports.Headers=Ur().Headers;N.exports.Response=Ns().Response;N.exports.Request=NA().Request;N.exports.FormData=as().FormData;N.exports.File=globalThis.File??require("node:buffer").File;N.exports.FileReader=Nd().FileReader;var{setGlobalOrigin:PM,getGlobalOrigin:HM}=_a();N.exports.setGlobalOrigin=PM;N.exports.getGlobalOrigin=HM;var{CacheStorage:VM}=_d(),{kConstruct:qM}=Jn();N.exports.caches=new VM(qM);var{deleteCookie:WM,getCookies:zM,getSetCookies:ZM,setCookie:jM}=Xd();N.exports.deleteCookie=WM;N.exports.getCookies=zM;N.exports.getSetCookies=ZM;N.exports.setCookie=jM;var{parseMIMEType:KM,serializeAMimeType:XM}=Te();N.exports.parseMIMEType=KM;N.exports.serializeAMimeType=XM;var{CloseEvent:$M,ErrorEvent:ev,MessageEvent:tv}=xA();N.exports.WebSocket=Wf().WebSocket;N.exports.CloseEvent=$M;N.exports.ErrorEvent=ev;N.exports.MessageEvent=tv;N.exports.request=js(HA.request);N.exports.stream=js(HA.stream);N.exports.pipeline=js(HA.pipeline);N.exports.connect=js(HA.connect);N.exports.upgrade=js(HA.upgrade);N.exports.MockClient=UM;N.exports.MockPool=LM;N.exports.MockAgent=GM;N.exports.mockErrors=MM;var{EventSource:rv}=np();N.exports.EventSource=rv});var Up=B(Ci=>{"use strict";Object.defineProperty(Ci,"__esModule",{value:!0});Ci.getProxyUrl=Rv;Ci.checkBypass=Np;function Rv(t){let e=t.protocol==="https:";if(Np(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new Ii(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new Ii(`http://${r}`)}else return}function Np(t){if(!t.hostname)return!1;let e=t.hostname;if(Dv(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Dv(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var Ii=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}}});var Lp=B(re=>{"use strict";var Tv=re&&re.__createBinding||(Object.create?(function(t,e,r,A){A===void 0&&(A=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,A,s)}):(function(t,e,r,A){A===void 0&&(A=r),t[A]=e[r]})),bv=re&&re.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),mi=re&&re.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var A=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(A[A.length]=s);return A},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var A=t(e),s=0;sae(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ae(this,void 0,void 0,function*(){return new Promise(e=>ae(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};re.HttpClientResponse=pi;function Mv(t){return new URL(t).protocol==="https:"}var vl=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ae(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ae(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ae(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ae(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ae(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ae(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ae(this,arguments,void 0,function*(r,A={}){A[ye.Accept]=this._getExistingOrDefaultHeader(A,ye.Accept,Yt.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ae(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[ye.Accept]=this._getExistingOrDefaultHeader(o,ye.Accept,Yt.ApplicationJson),o[ye.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Yt.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ae(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&Uv.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===Ke.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Sv.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!Nv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pi(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=Ml.getProxyUrl(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?Gp:Ll;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},ro(this.requestOptions.headers),ro(e||{})):ro(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=ro(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=ro(this.requestOptions.headers)[ye.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[ye.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=Ml.getProxyUrl(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||Ll.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?di.httpsOverHttps:di.httpsOverHttp:a=c?di.httpOverHttps:di.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new Gp.Agent(i):new Ll.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new kv.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ae(this,void 0,void 0,function*(){e=Math.min(Gv,e);let r=Lv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ae(this,void 0,void 0,function*(){return new Promise((A,s)=>ae(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===Ke.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fi(g,o);l.result=n.result,s(l)}else A(n)}))})}};re.HttpClient=vl;var ro=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{})});var nm=B(yi=>{"use strict";Object.defineProperty(yi,"__esModule",{value:!0});yi.format=sx;yi.parse=ox;var tx=/^[\u0009\u0020-\u007e\u0080-\u00ff]*$/,tm=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rx=/[\\"]/g,Ax=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,rm=(()=>{let t=function(){};return t.prototype=Object.create(null),t})();function sx(t){let{type:e,parameters:r}=t;if(!e||!Ax.test(e))throw new TypeError(`Invalid type: ${e}`);let A=e;if(r)for(let s of Object.keys(r)){if(!tm.test(s))throw new TypeError(`Invalid parameter name: ${s}`);A+=`; ${s}=${cx(r[s])}`}return A}function ox(t,e){let r=t.length,A=Pl(t,0,r),s=A;A=Jl(t,A,r);let o=Hl(t,s,A),n=t.slice(s,o).toLowerCase(),i=e?.parameters===!1?new rm:ax(t,A,r);return{type:n,parameters:i}}var Am=32,sm=9,om=59,nx=61,em=34,ix=92;function ax(t,e,r){let A=new rm;e:for(;ee;){let A=t.charCodeAt(r-1);if(A!==Am&&A!==sm)break;r--}return r}function cx(t){if(tm.test(t))return t;if(tx.test(t))return`"${t.replace(rx,"\\$&")}"`;throw new TypeError(`Invalid parameter value: ${t}`)}});var zA=B((Y2,Sm)=>{"use strict";var Px="2.0.0",Hx=Number.MAX_SAFE_INTEGER||9007199254740991,Vx=16,qx=250,Wx=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Sm.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Vx,MAX_SAFE_BUILD_LENGTH:qx,MAX_SAFE_INTEGER:Hx,RELEASE_TYPES:Wx,SEMVER_SPEC_VERSION:Px,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var oo=B((_2,Nm)=>{"use strict";var zx=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};Nm.exports=zx});var ZA=B((mt,Um)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:ou,MAX_SAFE_BUILD_LENGTH:Zx,MAX_LENGTH:jx}=zA(),Kx=oo();mt=Um.exports={};var Xx=mt.re=[],$x=mt.safeRe=[],m=mt.src=[],eO=mt.safeSrc=[],w=mt.t={},tO=0,nu="[a-zA-Z0-9-]",rO=[["\\s",1],["\\d",jx],[nu,Zx]],AO=t=>{for(let[e,r]of rO)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},G=(t,e,r)=>{let A=AO(e),s=tO++;Kx(t,s,e),w[t]=s,m[s]=e,eO[s]=A,Xx[s]=new RegExp(e,r?"g":void 0),$x[s]=new RegExp(A,r?"g":void 0)};G("NUMERICIDENTIFIER","0|[1-9]\\d*");G("NUMERICIDENTIFIERLOOSE","\\d+");G("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${nu}*`);G("MAINVERSION",`(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})\\.(${m[w.NUMERICIDENTIFIER]})`);G("MAINVERSIONLOOSE",`(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})\\.(${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASEIDENTIFIER",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIER]})`);G("PRERELEASEIDENTIFIERLOOSE",`(?:${m[w.NONNUMERICIDENTIFIER]}|${m[w.NUMERICIDENTIFIERLOOSE]})`);G("PRERELEASE",`(?:-(${m[w.PRERELEASEIDENTIFIER]}(?:\\.${m[w.PRERELEASEIDENTIFIER]})*))`);G("PRERELEASELOOSE",`(?:-?(${m[w.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${m[w.PRERELEASEIDENTIFIERLOOSE]})*))`);G("BUILDIDENTIFIER",`${nu}+`);G("BUILD",`(?:\\+(${m[w.BUILDIDENTIFIER]}(?:\\.${m[w.BUILDIDENTIFIER]})*))`);G("FULLPLAIN",`v?${m[w.MAINVERSION]}${m[w.PRERELEASE]}?${m[w.BUILD]}?`);G("FULL",`^${m[w.FULLPLAIN]}$`);G("LOOSEPLAIN",`[v=\\s]*${m[w.MAINVERSIONLOOSE]}${m[w.PRERELEASELOOSE]}?${m[w.BUILD]}?`);G("LOOSE",`^${m[w.LOOSEPLAIN]}$`);G("GTLT","((?:<|>)?=?)");G("XRANGEIDENTIFIERLOOSE",`${m[w.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);G("XRANGEIDENTIFIER",`${m[w.NUMERICIDENTIFIER]}|x|X|\\*`);G("XRANGEPLAIN",`[v=\\s]*(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:\\.(${m[w.XRANGEIDENTIFIER]})(?:${m[w.PRERELEASE]})?${m[w.BUILD]}?)?)?`);G("XRANGEPLAINLOOSE",`[v=\\s]*(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:\\.(${m[w.XRANGEIDENTIFIERLOOSE]})(?:${m[w.PRERELEASELOOSE]})?${m[w.BUILD]}?)?)?`);G("XRANGE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAIN]}$`);G("XRANGELOOSE",`^${m[w.GTLT]}\\s*${m[w.XRANGEPLAINLOOSE]}$`);G("COERCEPLAIN",`(^|[^\\d])(\\d{1,${ou}})(?:\\.(\\d{1,${ou}}))?(?:\\.(\\d{1,${ou}}))?`);G("COERCE",`${m[w.COERCEPLAIN]}(?:$|[^\\d])`);G("COERCEFULL",m[w.COERCEPLAIN]+`(?:${m[w.PRERELEASE]})?(?:${m[w.BUILD]})?(?:$|[^\\d])`);G("COERCERTL",m[w.COERCE],!0);G("COERCERTLFULL",m[w.COERCEFULL],!0);G("LONETILDE","(?:~>?)");G("TILDETRIM",`(\\s*)${m[w.LONETILDE]}\\s+`,!0);mt.tildeTrimReplace="$1~";G("TILDE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAIN]}$`);G("TILDELOOSE",`^${m[w.LONETILDE]}${m[w.XRANGEPLAINLOOSE]}$`);G("LONECARET","(?:\\^)");G("CARETTRIM",`(\\s*)${m[w.LONECARET]}\\s+`,!0);mt.caretTrimReplace="$1^";G("CARET",`^${m[w.LONECARET]}${m[w.XRANGEPLAIN]}$`);G("CARETLOOSE",`^${m[w.LONECARET]}${m[w.XRANGEPLAINLOOSE]}$`);G("COMPARATORLOOSE",`^${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]})$|^$`);G("COMPARATOR",`^${m[w.GTLT]}\\s*(${m[w.FULLPLAIN]})$|^$`);G("COMPARATORTRIM",`(\\s*)${m[w.GTLT]}\\s*(${m[w.LOOSEPLAIN]}|${m[w.XRANGEPLAIN]})`,!0);mt.comparatorTrimReplace="$1$2$3";G("HYPHENRANGE",`^\\s*(${m[w.XRANGEPLAIN]})\\s+-\\s+(${m[w.XRANGEPLAIN]})\\s*$`);G("HYPHENRANGELOOSE",`^\\s*(${m[w.XRANGEPLAINLOOSE]})\\s+-\\s+(${m[w.XRANGEPLAINLOOSE]})\\s*$`);G("STAR","(<|>)?=?\\s*\\*");G("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");G("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var bi=B((J2,Gm)=>{"use strict";var sO=Object.freeze({loose:!0}),oO=Object.freeze({}),nO=t=>t?typeof t!="object"?sO:t:oO;Gm.exports=nO});var iu=B((P2,vm)=>{"use strict";var Lm=/^[0-9]+$/,Mm=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:tMm(e,t);vm.exports={compareIdentifiers:Mm,rcompareIdentifiers:iO}});var Be=B((H2,Om)=>{"use strict";var ki=oo(),{MAX_LENGTH:xm,MAX_SAFE_INTEGER:Fi}=zA(),{safeRe:Si,t:Ni}=ZA(),aO=bi(),{compareIdentifiers:au}=iu(),cO=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let A=0;Axm)throw new TypeError(`version is longer than ${xm} characters`);ki("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let A=e.trim().match(r.loose?Si[Ni.LOOSE]:Si[Ni.FULL]);if(!A)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+A[1],this.minor=+A[2],this.patch=+A[3],this.major>Fi||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Fi||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Fi||this.patch<0)throw new TypeError("Invalid patch version");A[4]?this.prerelease=A[4].split(".").map(s=>{if(/^[0-9]+$/.test(s)){let o=+s;if(o>=0&&oe.major?1:this.minore.minor?1:this.patche.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let A=this.prerelease[r],s=e.prerelease[r];if(ki("prerelease compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let A=this.build[r],s=e.build[r];if(ki("build compare",r,A,s),A===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(A===void 0)return-1;if(A===s)continue;return au(A,s)}while(++r)}inc(e,r,A){if(e.startsWith("pre")){if(!r&&A===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let s=`-${r}`.match(this.options.loose?Si[Ni.PRERELEASELOOSE]:Si[Ni.PRERELEASE]);if(!s||s[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,A);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,A);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,A),this.inc("pre",r,A);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,A),this.inc("pre",r,A);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let s=Number(A)?1:0;if(this.prerelease.length===0)this.prerelease=[s];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&A===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(s)}}if(r){let o=[r,s];if(A===!1&&(o=[r]),cO(this.prerelease,r)){let n=this.prerelease[r.split(".").length];isNaN(n)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};Om.exports=cu});var ur=B((V2,_m)=>{"use strict";var Ym=Be(),gO=(t,e,r=!1)=>{if(t instanceof Ym)return t;try{return new Ym(t,e)}catch(A){if(!r)return null;throw A}};_m.exports=gO});var Pm=B((q2,Jm)=>{"use strict";var lO=ur(),uO=(t,e)=>{let r=lO(t,e);return r?r.version:null};Jm.exports=uO});var Vm=B((W2,Hm)=>{"use strict";var EO=ur(),hO=(t,e)=>{let r=EO(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};Hm.exports=hO});var zm=B((z2,Wm)=>{"use strict";var qm=Be(),QO=(t,e,r,A,s)=>{typeof r=="string"&&(s=A,A=r,r=void 0);try{return new qm(t instanceof qm?t.version:t,r).inc(e,A,s).version}catch{return null}};Wm.exports=QO});var Km=B((Z2,jm)=>{"use strict";var Zm=ur(),BO=(t,e)=>{let r=Zm(t,null,!0),A=Zm(e,null,!0),s=r.compare(A);if(s===0)return null;let o=s>0,n=o?r:A,i=o?A:r,a=!!n.prerelease.length;if(!!i.prerelease.length&&!a){if(!i.patch&&!i.minor)return"major";if(i.compareMain(n)===0)return i.minor&&!i.patch?"minor":"patch"}let g=a?"pre":"";return r.major!==A.major?g+"major":r.minor!==A.minor?g+"minor":r.patch!==A.patch?g+"patch":"prerelease"};jm.exports=BO});var $m=B((j2,Xm)=>{"use strict";var IO=Be(),CO=(t,e)=>new IO(t,e).major;Xm.exports=CO});var tw=B((K2,ew)=>{"use strict";var dO=Be(),fO=(t,e)=>new dO(t,e).minor;ew.exports=fO});var Aw=B((X2,rw)=>{"use strict";var pO=Be(),mO=(t,e)=>new pO(t,e).patch;rw.exports=mO});var ow=B(($2,sw)=>{"use strict";var wO=ur(),yO=(t,e)=>{let r=wO(t,e);return r&&r.prerelease.length?r.prerelease:null};sw.exports=yO});var Xe=B((eV,iw)=>{"use strict";var nw=Be(),RO=(t,e,r)=>new nw(t,r).compare(new nw(e,r));iw.exports=RO});var cw=B((tV,aw)=>{"use strict";var DO=Xe(),TO=(t,e,r)=>DO(e,t,r);aw.exports=TO});var lw=B((rV,gw)=>{"use strict";var bO=Xe(),kO=(t,e)=>bO(t,e,!0);gw.exports=kO});var Ui=B((AV,Ew)=>{"use strict";var uw=Be(),FO=(t,e,r)=>{let A=new uw(t,r),s=new uw(e,r);return A.compare(s)||A.compareBuild(s)};Ew.exports=FO});var Qw=B((sV,hw)=>{"use strict";var SO=Ui(),NO=(t,e)=>t.sort((r,A)=>SO(r,A,e));hw.exports=NO});var Iw=B((oV,Bw)=>{"use strict";var UO=Ui(),GO=(t,e)=>t.sort((r,A)=>UO(A,r,e));Bw.exports=GO});var no=B((nV,Cw)=>{"use strict";var LO=Xe(),MO=(t,e,r)=>LO(t,e,r)>0;Cw.exports=MO});var Gi=B((iV,dw)=>{"use strict";var vO=Xe(),xO=(t,e,r)=>vO(t,e,r)<0;dw.exports=xO});var gu=B((aV,fw)=>{"use strict";var OO=Xe(),YO=(t,e,r)=>OO(t,e,r)===0;fw.exports=YO});var lu=B((cV,pw)=>{"use strict";var _O=Xe(),JO=(t,e,r)=>_O(t,e,r)!==0;pw.exports=JO});var Li=B((gV,mw)=>{"use strict";var PO=Xe(),HO=(t,e,r)=>PO(t,e,r)>=0;mw.exports=HO});var Mi=B((lV,ww)=>{"use strict";var VO=Xe(),qO=(t,e,r)=>VO(t,e,r)<=0;ww.exports=qO});var uu=B((uV,yw)=>{"use strict";var WO=gu(),zO=lu(),ZO=no(),jO=Li(),KO=Gi(),XO=Mi(),$O=(t,e,r,A)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return WO(t,r,A);case"!=":return zO(t,r,A);case">":return ZO(t,r,A);case">=":return jO(t,r,A);case"<":return KO(t,r,A);case"<=":return XO(t,r,A);default:throw new TypeError(`Invalid operator: ${e}`)}};yw.exports=$O});var Dw=B((EV,Rw)=>{"use strict";var eY=Be(),tY=ur(),{safeRe:vi,t:xi}=ZA(),rY=(t,e)=>{if(t instanceof eY)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?vi[xi.COERCEFULL]:vi[xi.COERCE]);else{let a=e.includePrerelease?vi[xi.COERCERTLFULL]:vi[xi.COERCERTL],c;for(;(c=a.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||c.index+c[0].length!==r.index+r[0].length)&&(r=c),a.lastIndex=c.index+c[1].length+c[2].length;a.lastIndex=-1}if(r===null)return null;let A=r[2],s=r[3]||"0",o=r[4]||"0",n=e.includePrerelease&&r[5]?`-${r[5]}`:"",i=e.includePrerelease&&r[6]?`+${r[6]}`:"";return tY(`${A}.${s}.${o}${n}${i}`,e)};Rw.exports=rY});var bw=B((hV,Tw)=>{"use strict";var AY=ur(),sY=zA(),oY=Be(),nY=(t,e,r)=>{if(!sY.RELEASE_TYPES.includes(e))return null;let A=iY(t,r);return A&&aY(A,e)},iY=(t,e)=>{let r=t instanceof oY?t.version:t;return AY(r,e)},aY=(t,e)=>{if(cY(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},cY=t=>t.startsWith("pre");Tw.exports=nY});var Fw=B((QV,kw)=>{"use strict";var Eu=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let s=this.map.keys().next().value;this.delete(s)}this.map.set(e,r)}return this}};kw.exports=Eu});var $e=B((BV,Gw)=>{"use strict";var gY=/\s+/g,hu=class t{constructor(e,r){if(r=uY(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof Qu)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(gY," "),this.set=this.raw.split("||").map(A=>this.parseRange(A.trim())).filter(A=>A.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let A=this.set[0];if(this.set=this.set.filter(s=>!Nw(s[0])),this.set.length===0)this.set=[A];else if(this.set.length>1){for(let s of this.set)if(s.length===1&&pY(s[0])){this.set=[s];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e0&&(this.formatted+="||");let r=this.set[e];for(let A=0;A0&&(this.formatted+=" "),this.formatted+=r[A].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(fY,"");let A=((this.options.includePrerelease&&CY)|(this.options.loose&&dY))+":"+e,s=Sw.get(A);if(s)return s;let o=this.options.loose,n=o?Re[Ie.HYPHENRANGELOOSE]:Re[Ie.HYPHENRANGE];e=e.replace(n,NY(this.options.includePrerelease)),X("hyphen replace",e),e=e.replace(Re[Ie.COMPARATORTRIM],QY),X("comparator trim",e),e=e.replace(Re[Ie.TILDETRIM],BY),X("tilde trim",e),e=e.replace(Re[Ie.CARETTRIM],IY),X("caret trim",e);let i=e.split(" ").map(l=>mY(l,this.options)).join(" ").split(/\s+/).map(l=>SY(l,this.options));o&&(i=i.filter(l=>(X("loose invalid filter",l,this.options),!!l.match(Re[Ie.COMPARATORLOOSE])))),X("range list",i);let a=new Map,c=i.map(l=>new Qu(l,this.options));for(let l of c){if(Nw(l))return[l];a.set(l.value,l)}a.size>1&&a.has("")&&a.delete("");let g=[...a.values()];return Sw.set(A,g),g}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(A=>Uw(A,r)&&e.set.some(s=>Uw(s,r)&&A.every(o=>s.every(n=>o.intersects(n,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new EY(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",pY=t=>t.value==="",Uw=(t,e)=>{let r=!0,A=t.slice(),s=A.pop();for(;r&&A.length;)r=A.every(o=>s.intersects(o,e)),s=A.pop();return r},mY=(t,e)=>(t=t.replace(Re[Ie.BUILD],""),X("comp",t,e),t=DY(t,e),X("caret",t),t=yY(t,e),X("tildes",t),t=bY(t,e),X("xrange",t),t=FY(t,e),X("stars",t),t),ue=t=>!t||t.toLowerCase()==="x"||t==="*",wY=(t,e,r)=>ue(t)&&!ue(e)||ue(e)&&r&&!ue(r),yY=(t,e)=>t.trim().split(/\s+/).map(r=>RY(r,e)).join(" "),RY=(t,e)=>{let r=e.loose?Re[Ie.TILDELOOSE]:Re[Ie.TILDE],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("tilde",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:a?(X("replaceTilde pr",a),c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`):c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`,X("tilde return",c),c})},DY=(t,e)=>t.trim().split(/\s+/).map(r=>TY(r,e)).join(" "),TY=(t,e)=>{X("caret",t,e);let r=e.loose?Re[Ie.CARETLOOSE]:Re[Ie.CARET],A=e.includePrerelease?"-0":"";return t.replace(r,(s,o,n,i,a)=>{X("caret",t,s,o,n,i,a);let c;return ue(o)?c="":ue(n)?c=`>=${o}.0.0${A} <${+o+1}.0.0-0`:ue(i)?o==="0"?c=`>=${o}.${n}.0${A} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.0${A} <${+o+1}.0.0-0`:a?(X("replaceCaret pr",a),o==="0"?n==="0"?c=`>=${o}.${n}.${i}-${a} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i}-${a} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i}-${a} <${+o+1}.0.0-0`):(X("no pr"),o==="0"?n==="0"?c=`>=${o}.${n}.${i} <${o}.${n}.${+i+1}-0`:c=`>=${o}.${n}.${i} <${o}.${+n+1}.0-0`:c=`>=${o}.${n}.${i} <${+o+1}.0.0-0`),X("caret return",c),c})},bY=(t,e)=>(X("replaceXRanges",t,e),t.split(/\s+/).map(r=>kY(r,e)).join(" ")),kY=(t,e)=>{t=t.trim();let r=e.loose?Re[Ie.XRANGELOOSE]:Re[Ie.XRANGE];return t.replace(r,(A,s,o,n,i,a)=>{if(X("xRange",t,A,s,o,n,i,a),wY(o,n,i))return t;let c=ue(o),g=c||ue(n),l=g||ue(i),u=l;return s==="="&&u&&(s=""),a=e.includePrerelease?"-0":"",c?s===">"||s==="<"?A="<0.0.0-0":A="*":s&&u?(g&&(n=0),i=0,s===">"?(s=">=",g?(o=+o+1,n=0,i=0):(n=+n+1,i=0)):s==="<="&&(s="<",g?o=+o+1:n=+n+1),s==="<"&&(a="-0"),A=`${s+o}.${n}.${i}${a}`):g?A=`>=${o}.0.0${a} <${+o+1}.0.0-0`:l&&(A=`>=${o}.${n}.0${a} <${o}.${+n+1}.0-0`),X("xRange return",A),A})},FY=(t,e)=>(X("replaceStars",t,e),t.trim().replace(Re[Ie.STAR],"")),SY=(t,e)=>(X("replaceGTE0",t,e),t.trim().replace(Re[e.includePrerelease?Ie.GTE0PRE:Ie.GTE0],"")),NY=t=>(e,r,A,s,o,n,i,a,c,g,l,u)=>(ue(A)?r="":ue(s)?r=`>=${A}.0.0${t?"-0":""}`:ue(o)?r=`>=${A}.${s}.0${t?"-0":""}`:n?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,ue(c)?a="":ue(g)?a=`<${+c+1}.0.0-0`:ue(l)?a=`<${c}.${+g+1}.0-0`:u?a=`<=${c}.${g}.${l}-${u}`:t?a=`<${c}.${g}.${+l+1}-0`:a=`<=${a}`,`${r} ${a}`.trim()),UY=(t,e,r)=>{for(let A=0;A0){let s=t[A].semver;if(s.major===e.major&&s.minor===e.minor&&s.patch===e.patch)return!0}return!1}return!0}});var io=B((IV,Yw)=>{"use strict";var ao=Symbol("SemVer ANY"),Cu=class t{static get ANY(){return ao}constructor(e,r){if(r=Lw(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),Iu("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ao?this.value="":this.value=this.operator+this.semver.version,Iu("comp",this)}parse(e){let r=this.options.loose?Mw[vw.COMPARATORLOOSE]:Mw[vw.COMPARATOR],A=e.match(r);if(!A)throw new TypeError(`Invalid comparator: ${e}`);this.operator=A[1]!==void 0?A[1]:"",this.operator==="="&&(this.operator=""),A[2]?this.semver=new xw(A[2],this.options.loose):this.semver=ao}toString(){return this.value}test(e){if(Iu("Comparator.test",e,this.options.loose),this.semver===ao||e===ao)return!0;if(typeof e=="string")try{e=new xw(e,this.options)}catch{return!1}return Bu(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Ow(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new Ow(this.value,r).test(e.semver):(r=Lw(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||Bu(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||Bu(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Yw.exports=Cu;var Lw=bi(),{safeRe:Mw,t:vw}=ZA(),Bu=uu(),Iu=oo(),xw=Be(),Ow=$e()});var co=B((CV,_w)=>{"use strict";var GY=$e(),LY=(t,e,r)=>{try{e=new GY(e,r)}catch{return!1}return e.test(t)};_w.exports=LY});var Pw=B((dV,Jw)=>{"use strict";var MY=$e(),vY=(t,e)=>new MY(t,e).set.map(r=>r.map(A=>A.value).join(" ").trim().split(" "));Jw.exports=vY});var Vw=B((fV,Hw)=>{"use strict";var xY=Be(),OY=$e(),YY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new OY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===-1)&&(A=n,s=new xY(A,r))}),A};Hw.exports=YY});var Ww=B((pV,qw)=>{"use strict";var _Y=Be(),JY=$e(),PY=(t,e,r)=>{let A=null,s=null,o=null;try{o=new JY(e,r)}catch{return null}return t.forEach(n=>{o.test(n)&&(!A||s.compare(n)===1)&&(A=n,s=new _Y(A,r))}),A};qw.exports=PY});var jw=B((mV,Zw)=>{"use strict";var du=Be(),HY=$e(),zw=no(),VY=(t,e)=>{t=new HY(t,e);let r=new du("0.0.0");if(t.test(r)||(r=new du("0.0.0-0"),t.test(r)))return r;r=null;for(let A=0;A{let i=new du(n.semver.version);switch(n.operator){case">":i.prerelease.length===0?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!o||zw(i,o))&&(o=i);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${n.operator}`)}}),o&&(!r||zw(r,o))&&(r=o)}return r&&t.test(r)?r:null};Zw.exports=VY});var Xw=B((wV,Kw)=>{"use strict";var qY=$e(),WY=(t,e)=>{try{return new qY(t,e).range||"*"}catch{return null}};Kw.exports=WY});var Oi=B((yV,ry)=>{"use strict";var zY=Be(),ty=io(),{ANY:ZY}=ty,jY=$e(),KY=co(),$w=no(),ey=Gi(),XY=Mi(),$Y=Li(),e_=(t,e,r,A)=>{t=new zY(t,A),e=new jY(e,A);let s,o,n,i,a;switch(r){case">":s=$w,o=XY,n=ey,i=">",a=">=";break;case"<":s=ey,o=$Y,n=$w,i="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(KY(t,e,A))return!1;for(let c=0;c{E.semver===ZY&&(E=new ty(">=0.0.0")),l=l||E,u=u||E,s(E.semver,l.semver,A)?l=E:n(E.semver,u.semver,A)&&(u=E)}),l.operator===i||l.operator===a||(!u.operator||u.operator===i)&&o(t,u.semver))return!1;if(u.operator===a&&n(t,u.semver))return!1}return!0};ry.exports=e_});var sy=B((RV,Ay)=>{"use strict";var t_=Oi(),r_=(t,e,r)=>t_(t,e,">",r);Ay.exports=r_});var ny=B((DV,oy)=>{"use strict";var A_=Oi(),s_=(t,e,r)=>A_(t,e,"<",r);oy.exports=s_});var cy=B((TV,ay)=>{"use strict";var iy=$e(),o_=(t,e,r)=>(t=new iy(t,r),e=new iy(e,r),t.intersects(e,r));ay.exports=o_});var ly=B((bV,gy)=>{"use strict";var n_=co(),i_=Xe();gy.exports=(t,e,r)=>{let A=[],s=null,o=null,n=t.sort((g,l)=>i_(g,l,r));for(let g of n)n_(g,e,r)?(o=g,s||(s=g)):(o&&A.push([s,o]),o=null,s=null);s&&A.push([s,null]);let i=[];for(let[g,l]of A)g===l?i.push(g):!l&&g===n[0]?i.push("*"):l?g===n[0]?i.push(`<=${l}`):i.push(`${g} - ${l}`):i.push(`>=${g}`);let a=i.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return a.length{"use strict";var uy=$e(),mu=io(),{ANY:fu}=mu,pu=co(),wu=Xe(),a_=(t,e,r={})=>{if(t===e)return!0;t=new uy(t,r),e=new uy(e,r);let A=!1;e:for(let s of t.set){for(let o of e.set){let n=g_(s,o,r);if(A=A||n!==null,n)continue e}if(A)return!1}return!0},c_=[new mu(">=0.0.0-0")],Ey=[new mu(">=0.0.0")],g_=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===fu){if(e.length===1&&e[0].semver===fu)return!0;r.includePrerelease?t=c_:t=Ey}if(e.length===1&&e[0].semver===fu){if(r.includePrerelease)return!0;e=Ey}let A=new Set,s,o;for(let E of t)E.operator===">"||E.operator===">="?s=hy(s,E,r):E.operator==="<"||E.operator==="<="?o=Qy(o,E,r):A.add(E.semver);if(A.size>1)return null;let n;if(s&&o){if(n=wu(s.semver,o.semver,r),n>0)return null;if(n===0&&(s.operator!==">="||o.operator!=="<="))return null}for(let E of A){if(s&&!pu(E,String(s),r)||o&&!pu(E,String(o),r))return null;for(let h of e)if(!pu(E,String(h),r))return!1;return!0}let i,a,c,g,l=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,u=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1;l&&l.prerelease.length===1&&o.operator==="<"&&l.prerelease[0]===0&&(l=!1);for(let E of e){if(g=g||E.operator===">"||E.operator===">=",c=c||E.operator==="<"||E.operator==="<=",s){if(u&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===u.major&&E.semver.minor===u.minor&&E.semver.patch===u.patch&&(u=!1),E.operator===">"||E.operator===">="){if(i=hy(s,E,r),i===E&&i!==s)return!1}else if(s.operator===">="&&!E.test(s.semver))return!1}if(o){if(l&&E.semver.prerelease&&E.semver.prerelease.length&&E.semver.major===l.major&&E.semver.minor===l.minor&&E.semver.patch===l.patch&&(l=!1),E.operator==="<"||E.operator==="<="){if(a=Qy(o,E,r),a===E&&a!==o)return!1}else if(o.operator==="<="&&!E.test(o.semver))return!1}if(!E.operator&&(o||s)&&n!==0)return!1}return!(s&&c&&!o&&n!==0||o&&g&&!s&&n!==0||u||l)},hy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A>0?t:A<0||e.operator===">"&&t.operator===">="?e:t},Qy=(t,e,r)=>{if(!t)return e;let A=wu(t.semver,e.semver,r);return A<0?t:A>0||e.operator==="<"&&t.operator==="<="?e:t};By.exports=a_});var Ru=B((FV,fy)=>{"use strict";var yu=ZA(),Cy=zA(),l_=Be(),dy=iu(),u_=ur(),E_=Pm(),h_=Vm(),Q_=zm(),B_=Km(),I_=$m(),C_=tw(),d_=Aw(),f_=ow(),p_=Xe(),m_=cw(),w_=lw(),y_=Ui(),R_=Qw(),D_=Iw(),T_=no(),b_=Gi(),k_=gu(),F_=lu(),S_=Li(),N_=Mi(),U_=uu(),G_=Dw(),L_=bw(),M_=io(),v_=$e(),x_=co(),O_=Pw(),Y_=Vw(),__=Ww(),J_=jw(),P_=Xw(),H_=Oi(),V_=sy(),q_=ny(),W_=cy(),z_=ly(),Z_=Iy();fy.exports={parse:u_,valid:E_,clean:h_,inc:Q_,diff:B_,major:I_,minor:C_,patch:d_,prerelease:f_,compare:p_,rcompare:m_,compareLoose:w_,compareBuild:y_,sort:R_,rsort:D_,gt:T_,lt:b_,eq:k_,neq:F_,gte:S_,lte:N_,cmp:U_,coerce:G_,truncate:L_,Comparator:M_,Range:v_,satisfies:x_,toComparators:O_,maxSatisfying:Y_,minSatisfying:__,minVersion:J_,validRange:P_,outside:H_,gtr:V_,ltr:q_,intersects:W_,simplifyRange:z_,subset:Z_,SemVer:l_,re:yu.re,src:yu.src,tokens:yu.t,SEMVER_SPEC_VERSION:Cy.SEMVER_SPEC_VERSION,RELEASE_TYPES:Cy.RELEASE_TYPES,compareIdentifiers:dy.compareIdentifiers,rcompareIdentifiers:dy.rcompareIdentifiers}});var hr=W(require("node:process")),Ny=W(require("node:path"));var Su=W(require("os"),1);function jA(t){return t==null?"":typeof t=="string"||t instanceof String?t:JSON.stringify(t)}function ku(t){return Object.keys(t).length?{title:t.title,file:t.file,line:t.startLine,endLine:t.endLine,col:t.startColumn,endColumn:t.endColumn}:{}}function Vi(t,e,r){let A=new Hi(t,e,r);process.stdout.write(A.toString()+Su.EOL)}var Fu="::",Hi=class{constructor(e,r,A){e||(e="missing.command"),this.command=e,this.properties=r,this.message=A}toString(){let e=Fu+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let r=!0;for(let A in this.properties)if(this.properties.hasOwnProperty(A)){let s=this.properties[A];s&&(r?r=!1:e+=",",e+=`${A}=${Yy(s)}`)}}return e+=`${Fu}${Oy(this.message)}`,e}};function Oy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function Yy(t){return jA(t).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}var Tp=W(require("os"),1);var $s=W(require("http"),1),ml=W(require("https"),1);function qi(t){let e=t.protocol==="https:";if(_y(t))return;let r=e?process.env.https_proxy||process.env.HTTPS_PROXY:process.env.http_proxy||process.env.HTTP_PROXY;if(r)try{return new uo(r)}catch{if(!r.startsWith("http://")&&!r.startsWith("https://"))return new uo(`http://${r}`)}else return}function _y(t){if(!t.hostname)return!1;let e=t.hostname;if(Jy(e))return!0;let r=process.env.no_proxy||process.env.NO_PROXY||"";if(!r)return!1;let A;t.port?A=Number(t.port):t.protocol==="http:"?A=80:t.protocol==="https:"&&(A=443);let s=[t.hostname.toUpperCase()];typeof A=="number"&&s.push(`${s[0]}:${A}`);for(let o of r.split(",").map(n=>n.trim().toUpperCase()).filter(n=>n))if(o==="*"||s.some(n=>n===o||n.endsWith(`.${o}`)||o.startsWith(".")&&n.endsWith(`${o}`)))return!0;return!1}function Jy(t){let e=t.toLowerCase();return e==="localhost"||e.startsWith("127.")||e.startsWith("[::1]")||e.startsWith("[0:0:0:0:0:0:0:1]")}var uo=class extends URL{constructor(e,r){super(e,r),this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}};var nr=W(Zi(),1),gp=W(ci(),1),ie=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},je;(function(t){t[t.OK=200]="OK",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.ResourceMoved=302]="ResourceMoved",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.SwitchProxy=306]="SwitchProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.TooManyRequests=429]="TooManyRequests",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout"})(je||(je={}));var we;(function(t){t.Accept="accept",t.ContentType="content-type"})(we||(we={}));var Ot;(function(t){t.ApplicationJson="application/json"})(Ot||(Ot={}));var Av=[je.MovedPermanently,je.ResourceMoved,je.SeeOther,je.TemporaryRedirect,je.PermanentRedirect],sv=[je.BadGateway,je.ServiceUnavailable,je.GatewayTimeout],ov=["OPTIONS","GET","DELETE","HEAD"],nv=10,iv=5,fl=class t extends Error{constructor(e,r){super(e),this.name="HttpClientError",this.statusCode=r,Object.setPrototypeOf(this,t.prototype)}},pl=class{constructor(e){this.message=e}readBody(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=Buffer.alloc(0);this.message.on("data",A=>{r=Buffer.concat([r,A])}),this.message.on("end",()=>{e(r.toString())})}))})}readBodyBuffer(){return ie(this,void 0,void 0,function*(){return new Promise(e=>ie(this,void 0,void 0,function*(){let r=[];this.message.on("data",A=>{r.push(A)}),this.message.on("end",()=>{e(Buffer.concat(r))})}))})}};var Xs=class{constructor(e,r,A){this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=this._getUserAgentWithOrchestrationId(e),this.handlers=r||[],this.requestOptions=A,A&&(A.ignoreSslError!=null&&(this._ignoreSslError=A.ignoreSslError),this._socketTimeout=A.socketTimeout,A.allowRedirects!=null&&(this._allowRedirects=A.allowRedirects),A.allowRedirectDowngrade!=null&&(this._allowRedirectDowngrade=A.allowRedirectDowngrade),A.maxRedirects!=null&&(this._maxRedirects=Math.max(A.maxRedirects,0)),A.keepAlive!=null&&(this._keepAlive=A.keepAlive),A.allowRetries!=null&&(this._allowRetries=A.allowRetries),A.maxRetries!=null&&(this._maxRetries=A.maxRetries))}options(e,r){return ie(this,void 0,void 0,function*(){return this.request("OPTIONS",e,null,r||{})})}get(e,r){return ie(this,void 0,void 0,function*(){return this.request("GET",e,null,r||{})})}del(e,r){return ie(this,void 0,void 0,function*(){return this.request("DELETE",e,null,r||{})})}post(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("POST",e,r,A||{})})}patch(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PATCH",e,r,A||{})})}put(e,r,A){return ie(this,void 0,void 0,function*(){return this.request("PUT",e,r,A||{})})}head(e,r){return ie(this,void 0,void 0,function*(){return this.request("HEAD",e,null,r||{})})}sendStream(e,r,A,s){return ie(this,void 0,void 0,function*(){return this.request(e,r,A,s)})}getJson(e){return ie(this,arguments,void 0,function*(r,A={}){A[we.Accept]=this._getExistingOrDefaultHeader(A,we.Accept,Ot.ApplicationJson);let s=yield this.get(r,A);return this._processResponse(s,this.requestOptions)})}postJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.post(A,n,o);return this._processResponse(i,this.requestOptions)})}putJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.put(A,n,o);return this._processResponse(i,this.requestOptions)})}patchJson(e,r){return ie(this,arguments,void 0,function*(A,s,o={}){let n=JSON.stringify(s,null,2);o[we.Accept]=this._getExistingOrDefaultHeader(o,we.Accept,Ot.ApplicationJson),o[we.ContentType]=this._getExistingOrDefaultContentTypeHeader(o,Ot.ApplicationJson);let i=yield this.patch(A,n,o);return this._processResponse(i,this.requestOptions)})}request(e,r,A,s){return ie(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let o=new URL(r),n=this._prepareRequest(e,o,s),i=this._allowRetries&&ov.includes(e)?this._maxRetries+1:1,a=0,c;do{if(c=yield this.requestRaw(n,A),c&&c.message&&c.message.statusCode===je.Unauthorized){let l;for(let u of this.handlers)if(u.canHandleAuthentication(c)){l=u;break}return l?l.handleAuthentication(this,n,A):c}let g=this._maxRedirects;for(;c.message.statusCode&&Av.includes(c.message.statusCode)&&this._allowRedirects&&g>0;){let l=c.message.headers.location;if(!l)break;let u=new URL(l);if(o.protocol==="https:"&&o.protocol!==u.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield c.readBody(),u.hostname!==o.hostname)for(let E in s)E.toLowerCase()==="authorization"&&delete s[E];n=this._prepareRequest(e,u,s),c=yield this.requestRaw(n,A),g--}if(!c.message.statusCode||!sv.includes(c.message.statusCode))return c;a+=1,a{function o(n,i){n?s(n):i?A(i):s(new Error("Unknown error"))}this.requestRawWithCallback(e,r,o)})})}requestRawWithCallback(e,r,A){typeof r=="string"&&(e.options.headers||(e.options.headers={}),e.options.headers["Content-Length"]=Buffer.byteLength(r,"utf8"));let s=!1;function o(a,c){s||(s=!0,A(a,c))}let n=e.httpModule.request(e.options,a=>{let c=new pl(a);o(void 0,c)}),i;n.on("socket",a=>{i=a}),n.setTimeout(this._socketTimeout||3*6e4,()=>{i&&i.end(),o(new Error(`Request timeout: ${e.options.path}`))}),n.on("error",function(a){o(a)}),r&&typeof r=="string"&&n.write(r,"utf8"),r&&typeof r!="string"?(r.on("close",function(){n.end()}),r.pipe(n)):n.end()}getAgent(e){let r=new URL(e);return this._getAgent(r)}getAgentDispatcher(e){let r=new URL(e),A=qi(r);if(A&&A.hostname)return this._getProxyAgentDispatcher(r,A)}_prepareRequest(e,r,A){let s={};s.parsedUrl=r;let o=s.parsedUrl.protocol==="https:";s.httpModule=o?ml:$s;let n=o?443:80;if(s.options={},s.options.host=s.parsedUrl.hostname,s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):n,s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||""),s.options.method=e,s.options.headers=this._mergeHeaders(A),this.userAgent!=null&&(s.options.headers["user-agent"]=this.userAgent),s.options.agent=this._getAgent(s.parsedUrl),this.handlers)for(let i of this.handlers)i.prepareRequest(s.options);return s}_mergeHeaders(e){return this.requestOptions&&this.requestOptions.headers?Object.assign({},Ks(this.requestOptions.headers),Ks(e||{})):Ks(e||{})}_getExistingOrDefaultHeader(e,r,A){let s;if(this.requestOptions&&this.requestOptions.headers){let n=Ks(this.requestOptions.headers)[r];n&&(s=typeof n=="number"?n.toString():n)}let o=e[r];return o!==void 0?typeof o=="number"?o.toString():o:s!==void 0?s:A}_getExistingOrDefaultContentTypeHeader(e,r){let A;if(this.requestOptions&&this.requestOptions.headers){let o=Ks(this.requestOptions.headers)[we.ContentType];o&&(typeof o=="number"?A=String(o):Array.isArray(o)?A=o.join(", "):A=o)}let s=e[we.ContentType];return s!==void 0?typeof s=="number"?String(s):Array.isArray(s)?s.join(", "):s:A!==void 0?A:r}_getAgent(e){let r,A=qi(e),s=A&&A.hostname;if(this._keepAlive&&s&&(r=this._proxyAgent),s||(r=this._agent),r)return r;let o=e.protocol==="https:",n=100;if(this.requestOptions&&(n=this.requestOptions.maxSockets||$s.globalAgent.maxSockets),A&&A.hostname){let i={maxSockets:n,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(A.username||A.password)&&{proxyAuth:`${A.username}:${A.password}`}),{host:A.hostname,port:A.port})},a,c=A.protocol==="https:";o?a=c?nr.httpsOverHttps:nr.httpsOverHttp:a=c?nr.httpOverHttps:nr.httpOverHttp,r=a(i),this._proxyAgent=r}if(!r){let i={keepAlive:this._keepAlive,maxSockets:n};r=o?new ml.Agent(i):new $s.Agent(i),this._agent=r}return o&&this._ignoreSslError&&(r.options=Object.assign(r.options||{},{rejectUnauthorized:!1})),r}_getProxyAgentDispatcher(e,r){let A;if(this._keepAlive&&(A=this._proxyAgentDispatcher),A)return A;let s=e.protocol==="https:";return A=new gp.ProxyAgent(Object.assign({uri:r.href,pipelining:this._keepAlive?1:0},(r.username||r.password)&&{token:`Basic ${Buffer.from(`${r.username}:${r.password}`).toString("base64")}`})),this._proxyAgentDispatcher=A,s&&this._ignoreSslError&&(A.options=Object.assign(A.options.requestTls||{},{rejectUnauthorized:!1})),A}_getUserAgentWithOrchestrationId(e){let r=e||"actions/http-client",A=process.env.ACTIONS_ORCHESTRATION_ID;if(A){let s=A.replace(/[^a-z0-9_.-]/gi,"_");return`${r} actions_orchestration_id/${s}`}return r}_performExponentialBackoff(e){return ie(this,void 0,void 0,function*(){e=Math.min(nv,e);let r=iv*Math.pow(2,e);return new Promise(A=>setTimeout(()=>A(),r))})}_processResponse(e,r){return ie(this,void 0,void 0,function*(){return new Promise((A,s)=>ie(this,void 0,void 0,function*(){let o=e.message.statusCode||0,n={statusCode:o,result:null,headers:{}};o===je.NotFound&&A(n);function i(g,l){if(typeof l=="string"){let u=new Date(l);if(!isNaN(u.valueOf()))return u}return l}let a,c;try{c=yield e.readBody(),c&&c.length>0&&(r&&r.deserializeDates?a=JSON.parse(c,i):a=JSON.parse(c),n.result=a),n.headers=e.message.headers}catch{}if(o>299){let g;a&&a.message?g=a.message:c&&c.length>0?g=c:g=`Failed request: (${o})`;let l=new fl(g,o);l.result=n.result,s(l)}else A(n)}))})}},Ks=t=>Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{});var up=require("os"),eo=require("fs"),wl=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{access:cv,appendFile:gv,writeFile:lv}=eo.promises,lp="GITHUB_STEP_SUMMARY";var yl=class{constructor(){this._buffer=""}filePath(){return wl(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[lp];if(!e)throw new Error(`Unable to find environment variable for $${lp}. Check if your runtime environment supports job summaries.`);try{yield cv(e,eo.constants.R_OK|eo.constants.W_OK)}catch{throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,r,A={}){let s=Object.entries(A).map(([o,n])=>` ${o}="${n}"`).join("");return r?`<${e}${s}>${r}`:`<${e}${s}>`}write(e){return wl(this,void 0,void 0,function*(){let r=!!e?.overwrite,A=yield this.filePath();return yield(r?lv:gv)(A,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return wl(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(e,r=!1){return this._buffer+=e,r?this.addEOL():this}addEOL(){return this.addRaw(up.EOL)}addCodeBlock(e,r){let A=Object.assign({},r&&{lang:r}),s=this.wrap("pre",this.wrap("code",e),A);return this.addRaw(s).addEOL()}addList(e,r=!1){let A=r?"ol":"ul",s=e.map(n=>this.wrap("li",n)).join(""),o=this.wrap(A,s);return this.addRaw(o).addEOL()}addTable(e){let r=e.map(s=>{let o=s.map(n=>{if(typeof n=="string")return this.wrap("td",n);let{header:i,data:a,colspan:c,rowspan:g}=n,l=i?"th":"td",u=Object.assign(Object.assign({},c&&{colspan:c}),g&&{rowspan:g});return this.wrap(l,a,u)}).join("");return this.wrap("tr",o)}).join(""),A=this.wrap("table",r);return this.addRaw(A).addEOL()}addDetails(e,r){let A=this.wrap("details",this.wrap("summary",e)+r);return this.addRaw(A).addEOL()}addImage(e,r,A){let{width:s,height:o}=A||{},n=Object.assign(Object.assign({},s&&{width:s}),o&&{height:o}),i=this.wrap("img",null,Object.assign({src:e,alt:r},n));return this.addRaw(i).addEOL()}addHeading(e,r){let A=`h${r}`,s=["h1","h2","h3","h4","h5","h6"].includes(A)?A:"h1",o=this.wrap(s,e);return this.addRaw(o).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,r){let A=Object.assign({},r&&{cite:r}),s=this.wrap("blockquote",e,A);return this.addRaw(s).addEOL()}addLink(e,r){let A=this.wrap("a",e,{href:r});return this.addRaw(A).addEOL()}},EH=new yl;var Fl=W(require("os"),1);var to=W(require("os"),1),kl=W(require("events"),1),wp=W(require("child_process"),1),yp=W(require("path"),1);var dp=require("assert"),pt=W(require("path"),1);var li=W(require("fs"),1),ar=W(require("path"),1),hp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},{chmod:uv,copyFile:Ev,lstat:hv,mkdir:Qp,open:BH,readdir:Bp,rename:Qv,rm:Ip,rmdir:IH,stat:gi,symlink:Bv,unlink:Iv}=li.promises,ir=process.platform==="win32";var CH=li.constants.O_RDONLY;function Rl(t){return hp(this,void 0,void 0,function*(){try{yield gi(t)}catch(e){if(e.code==="ENOENT")return!1;throw e}return!0})}function ui(t){if(t=Cv(t),!t)throw new Error('isRooted() parameter "p" cannot be empty');return ir?t.startsWith("\\")||/^[A-Z]:/i.test(t):t.startsWith("/")}function Dl(t,e){return hp(this,void 0,void 0,function*(){let r;try{r=yield gi(t)}catch(s){s.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${s}`)}if(r&&r.isFile()){if(ir){let s=ar.extname(t).toUpperCase();if(e.some(o=>o.toUpperCase()===s))return t}else if(Ep(r))return t}let A=t;for(let s of e){t=A+s,r=void 0;try{r=yield gi(t)}catch(o){o.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${t}': ${o}`)}if(r&&r.isFile()){if(ir){try{let o=ar.dirname(t),n=ar.basename(t).toUpperCase();for(let i of yield Bp(o))if(n===i.toUpperCase()){t=ar.join(o,i);break}}catch(o){console.log(`Unexpected error attempting to determine the actual case of the file '${t}': ${o}`)}return t}else if(Ep(r))return t}}return""})}function Cv(t){return t=t||"",ir?(t=t.replace(/\//g,"\\"),t.replace(/\\\\+/g,"\\")):t.replace(/\/\/+/g,"/")}function Ep(t){return(t.mode&1)>0||(t.mode&8)>0&&process.getgid!==void 0&&t.gid===process.getgid()||(t.mode&64)>0&&process.getuid!==void 0&&t.uid===process.getuid()}var Ei=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function fp(t){return Ei(this,void 0,void 0,function*(){if(ir&&/[*"<>|]/.test(t))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');try{yield Ip(t,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(e){throw new Error(`File was unable to be removed ${e}`)}})}function Tl(t){return Ei(this,void 0,void 0,function*(){(0,dp.ok)(t,"a path argument must be provided"),yield Qp(t,{recursive:!0})})}function _r(t,e){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");if(e){let A=yield _r(t,!1);if(!A)throw ir?new Error(`Unable to locate executable file: ${t}. 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.`):new Error(`Unable to locate executable file: ${t}. 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 A}let r=yield dv(t);return r&&r.length>0?r[0]:""})}function dv(t){return Ei(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'tool' is required");let e=[];if(ir&&process.env.PATHEXT)for(let s of process.env.PATHEXT.split(pt.delimiter))s&&e.push(s);if(ui(t)){let s=yield Dl(t,e);return s?[s]:[]}if(t.includes(pt.sep))return[];let r=[];if(process.env.PATH)for(let s of process.env.PATH.split(pt.delimiter))s&&r.push(s);let A=[];for(let s of r){let o=yield Dl(pt.join(s,t),e);o&&A.push(o)}return A})}var Rp=require("timers"),mp=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},hi=process.platform==="win32",Qi=class extends kl.EventEmitter{constructor(e,r,A){if(super(),!e)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=e,this.args=r||[],this.options=A||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,r){let A=this._getSpawnFileName(),s=this._getSpawnArgs(e),o=r?"":"[command]";if(hi)if(this._isCmdFile()){o+=A;for(let n of s)o+=` ${n}`}else if(e.windowsVerbatimArguments){o+=`"${A}"`;for(let n of s)o+=` ${n}`}else{o+=this._windowsQuoteCmdArg(A);for(let n of s)o+=` ${this._windowsQuoteCmdArg(n)}`}else{o+=A;for(let n of s)o+=` ${n}`}return o}_processLineBuffer(e,r,A){try{let s=r+e.toString(),o=s.indexOf(to.EOL);for(;o>-1;){let n=s.substring(0,o);A(n),s=s.substring(o+to.EOL.length),o=s.indexOf(to.EOL)}return s}catch(s){return this._debug(`error processing line. Failed with error ${s}`),""}}_getSpawnFileName(){return hi&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(e){if(hi&&this._isCmdFile()){let r=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let A of this.args)r+=" ",r+=e.windowsVerbatimArguments?A:this._windowsQuoteCmdArg(A);return r+='"',[r]}return this.args}_endsWith(e,r){return e.endsWith(r)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return'""';let r=[" "," ","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],A=!1;for(let n of e)if(r.some(i=>i===n)){A=!0;break}if(!A)return e;let s='"',o=!0;for(let n=e.length;n>0;n--)s+=e[n-1],o&&e[n-1]==="\\"?s+="\\":e[n-1]==='"'?(o=!0,s+='"'):o=!1;return s+='"',s.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e)return'""';if(!e.includes(" ")&&!e.includes(" ")&&!e.includes('"'))return e;if(!e.includes('"')&&!e.includes("\\"))return`"${e}"`;let r='"',A=!0;for(let s=e.length;s>0;s--)r+=e[s-1],A&&e[s-1]==="\\"?r+="\\":e[s-1]==='"'?(A=!0,r+="\\"):A=!1;return r+='"',r.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};let r={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return r.outStream=e.outStream||process.stdout,r.errStream=e.errStream||process.stderr,r}_getSpawnOptions(e,r){e=e||{};let A={};return A.cwd=e.cwd,A.env=e.env,A.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(A.argv0=`"${r}"`),A}exec(){return mp(this,void 0,void 0,function*(){return!ui(this.toolPath)&&(this.toolPath.includes("/")||hi&&this.toolPath.includes("\\"))&&(this.toolPath=yp.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield _r(this.toolPath,!0),new Promise((e,r)=>mp(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let c of this.args)this._debug(` ${c}`);let A=this._cloneExecOptions(this.options);!A.silent&&A.outStream&&A.outStream.write(this._getCommandString(A)+to.EOL);let s=new bl(A,this.toolPath);if(s.on("debug",c=>{this._debug(c)}),this.options.cwd&&!(yield Rl(this.options.cwd)))return r(new Error(`The cwd: ${this.options.cwd} does not exist!`));let o=this._getSpawnFileName(),n=wp.spawn(o,this._getSpawnArgs(A),this._getSpawnOptions(this.options,o)),i="";n.stdout&&n.stdout.on("data",c=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(c),!A.silent&&A.outStream&&A.outStream.write(c),i=this._processLineBuffer(c,i,g=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(g)})});let a="";if(n.stderr&&n.stderr.on("data",c=>{s.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(c),!A.silent&&A.errStream&&A.outStream&&(A.failOnStdErr?A.errStream:A.outStream).write(c),a=this._processLineBuffer(c,a,g=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(g)})}),n.on("error",c=>{s.processError=c.message,s.processExited=!0,s.processClosed=!0,s.CheckComplete()}),n.on("exit",c=>{s.processExitCode=c,s.processExited=!0,this._debug(`Exit code ${c} received from tool '${this.toolPath}'`),s.CheckComplete()}),n.on("close",c=>{s.processExitCode=c,s.processExited=!0,s.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),s.CheckComplete()}),s.on("done",(c,g)=>{i.length>0&&this.emit("stdline",i),a.length>0&&this.emit("errline",a),n.removeAllListeners(),c?r(c):e(g)}),this.options.input){if(!n.stdin)throw new Error("child process missing stdin");n.stdin.end(this.options.input)}}))})}};function Dp(t){let e=[],r=!1,A=!1,s="";function o(n){A&&n!=='"'&&(s+="\\"),s+=n,A=!1}for(let n=0;n0&&(e.push(s),s="");continue}o(i)}return s.length>0&&e.push(s.trim()),e}var bl=class t extends kl.EventEmitter{constructor(e,r){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!r)throw new Error("toolPath must not be empty");this.options=e,this.toolPath=r,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=(0,Rp.setTimeout)(t.HandleTimeout,this.delay,this)))}_debug(e){this.emit("debug",e)}_setResult(){let e;this.processExited&&(this.processError?e=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}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let r=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(r)}e._setResult()}}};var pv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function cr(t,e,r){return pv(this,void 0,void 0,function*(){let A=Dp(t);if(A.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let s=A[0];return e=A.slice(1).concat(e||[]),new Qi(s,e,r).exec()})}var mH=Fl.default.platform(),wH=Fl.default.arch();var Sl;(function(t){t[t.Success=0]="Success",t[t.Failure=1]="Failure"})(Sl||(Sl={}));function bp(t,e){let r=process.env[`INPUT_${t.replace(/ /g,"_").toUpperCase()}`]||"";if(e&&e.required&&!r)throw new Error(`Input required and not supplied: ${t}`);return e&&e.trimWhitespace===!1?r:r.trim()}function kp(t){process.exitCode=Sl.Failure,yv(t)}function Nl(){return process.env.RUNNER_DEBUG==="1"}function Ue(t){Vi("debug",{},t)}function yv(t,e={}){Vi("error",ku(e),t instanceof Error?t.toString():t)}function Ul(t){process.stdout.write(t+Tp.EOL)}var Bi=require("fs"),Fp=require("os"),VA=class{constructor(){var e,r,A;if(this.payload={},process.env.GITHUB_EVENT_PATH)if((0,Bi.existsSync)(process.env.GITHUB_EVENT_PATH))this.payload=JSON.parse((0,Bi.readFileSync)(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}));else{let s=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${s} does not exist${Fp.EOL}`)}this.eventName=process.env.GITHUB_EVENT_NAME,this.sha=process.env.GITHUB_SHA,this.ref=process.env.GITHUB_REF,this.workflow=process.env.GITHUB_WORKFLOW,this.action=process.env.GITHUB_ACTION,this.actor=process.env.GITHUB_ACTOR,this.job=process.env.GITHUB_JOB,this.runAttempt=parseInt(process.env.GITHUB_RUN_ATTEMPT,10),this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10),this.runId=parseInt(process.env.GITHUB_RUN_ID,10),this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:"https://api.github.com",this.serverUrl=(r=process.env.GITHUB_SERVER_URL)!==null&&r!==void 0?r:"https://github.com",this.graphqlUrl=(A=process.env.GITHUB_GRAPHQL_URL)!==null&&A!==void 0?A:"https://api.github.com/graphql"}get issue(){let e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){let[e,r]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:r}}if(this.payload.repository)return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name};throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}};var xl=W(Lp(),1),Mp=W(ci(),1),vv=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})};function vp(t,e){if(!t&&!e.auth)throw new Error("Parameter token or opts.auth is required");if(t&&e.auth)throw new Error("Parameters token and opts.auth may not both be specified");return typeof e.auth=="string"?e.auth:`token ${t}`}function xp(t){return new xl.HttpClient().getAgent(t)}function xv(t){return new xl.HttpClient().getAgentDispatcher(t)}function Op(t){let e=xv(t);return(A,s)=>vv(this,void 0,void 0,function*(){return(0,Mp.fetch)(A,Object.assign(Object.assign({},s),{dispatcher:e}))})}function Yp(){return process.env.GITHUB_API_URL||"https://api.github.com"}function Ol(t){var e;let r=(e=process.env.ACTIONS_ORCHESTRATION_ID)===null||e===void 0?void 0:e.trim();if(r){let s=`actions_orchestration_id/${r.replace(/[^a-z0-9_.-]/gi,"_")}`;return t?.includes(s)?t:`${t?`${t} `:""}${s}`}return t}function gr(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}function wi(t,e,r,A){if(typeof r!="function")throw new Error("method for before hook must be a function");return A||(A={}),Array.isArray(e)?e.reverse().reduce((s,o)=>wi.bind(null,t,o,s,A),r)():Promise.resolve().then(()=>t.registry[e]?t.registry[e].reduce((s,o)=>o.hook.bind(null,s,A),r)():r(A))}function _p(t,e,r,A){let s=A;t.registry[r]||(t.registry[r]=[]),e==="before"&&(A=(o,n)=>Promise.resolve().then(s.bind(null,n)).then(o.bind(null,n))),e==="after"&&(A=(o,n)=>{let i;return Promise.resolve().then(o.bind(null,n)).then(a=>(i=a,s(i,n))).then(()=>i)}),e==="error"&&(A=(o,n)=>Promise.resolve().then(o.bind(null,n)).catch(i=>s(i,n))),t.registry[r].push({hook:A,orig:s})}function Jp(t,e,r){if(!t.registry[e])return;let A=t.registry[e].map(s=>s.orig).indexOf(r);A!==-1&&t.registry[e].splice(A,1)}var Pp=Function.bind,Hp=Pp.bind(Pp);function Vp(t,e,r){let A=Hp(Jp,null).apply(null,r?[e,r]:[e]);t.api={remove:A},t.remove=A,["before","error","after","wrap"].forEach(s=>{let o=r?[e,s,r]:[e,s];t[s]=t.api[s]=Hp(_p,null).apply(null,o)})}function Yv(){let t=Symbol("Singular"),e={registry:{}},r=wi.bind(null,e,t);return Vp(r,e,t),r}function _v(){let t={registry:{}},e=wi.bind(null,t);return Vp(e,t),e}var qp={Singular:Yv,Collection:_v};var Jv="0.0.0-development",Pv=`octokit-endpoint.js/${Jv} ${gr()}`,Hv={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Pv},mediaType:{format:""}};function Vv(t){return t?Object.keys(t).reduce((e,r)=>(e[r.toLowerCase()]=t[r],e),{}):{}}function qv(t){if(typeof t!="object"||t===null||Object.prototype.toString.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);if(e===null)return!0;let r=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Function.prototype.call(r)===Function.prototype.call(t)}function Zp(t,e){let r=Object.assign({},t);return Object.keys(e).forEach(A=>{qv(e[A])?A in t?r[A]=Zp(t[A],e[A]):Object.assign(r,{[A]:e[A]}):Object.assign(r,{[A]:e[A]})}),r}function Wp(t){for(let e in t)t[e]===void 0&&delete t[e];return t}function _l(t,e,r){if(typeof e=="string"){let[s,o]=e.split(" ");r=Object.assign(o?{method:s,url:o}:{url:s},r)}else r=Object.assign({},e);r.headers=Vv(r.headers),Wp(r),Wp(r.headers);let A=Zp(t||{},r);return r.url==="/graphql"&&(t&&t.mediaType.previews?.length&&(A.mediaType.previews=t.mediaType.previews.filter(s=>!A.mediaType.previews.includes(s)).concat(A.mediaType.previews)),A.mediaType.previews=(A.mediaType.previews||[]).map(s=>s.replace(/-preview/,""))),A}function Wv(t,e){let r=/\?/.test(t)?"&":"?",A=Object.keys(e);return A.length===0?t:t+r+A.map(s=>s==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${s}=${encodeURIComponent(e[s])}`).join("&")}var zv=/\{[^{}}]+\}/g;function Zv(t){return t.replace(/(?:^\W+)|(?:(?r.concat(A),[]):[]}function zp(t,e){let r={__proto__:null};for(let A of Object.keys(t))e.indexOf(A)===-1&&(r[A]=t[A]);return r}function jp(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function WA(t){return encodeURIComponent(t).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Ao(t,e,r){return e=t==="+"||t==="#"?jp(e):WA(e),r?WA(r)+"="+e:e}function qA(t){return t!=null}function Yl(t){return t===";"||t==="&"||t==="?"}function Kv(t,e,r,A){var s=t[r],o=[];if(qA(s)&&s!=="")if(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||typeof s=="boolean")s=s.toString(),A&&A!=="*"&&(s=s.substring(0,parseInt(A,10))),o.push(Ao(e,s,Yl(e)?r:""));else if(A==="*")Array.isArray(s)?s.filter(qA).forEach(function(n){o.push(Ao(e,n,Yl(e)?r:""))}):Object.keys(s).forEach(function(n){qA(s[n])&&o.push(Ao(e,s[n],n))});else{let n=[];Array.isArray(s)?s.filter(qA).forEach(function(i){n.push(Ao(e,i))}):Object.keys(s).forEach(function(i){qA(s[i])&&(n.push(WA(i)),n.push(Ao(e,s[i].toString())))}),Yl(e)?o.push(WA(r)+"="+n.join(",")):n.length!==0&&o.push(n.join(","))}else e===";"?qA(s)&&o.push(WA(r)):s===""&&(e==="&"||e==="?")?o.push(WA(r)+"="):s===""&&o.push("");return o}function Xv(t){return{expand:$v.bind(null,t)}}function $v(t,e){var r=["+","#",".","/",";","?","&"];return t=t.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(A,s,o){if(s){let i="",a=[];if(r.indexOf(s.charAt(0))!==-1&&(i=s.charAt(0),s=s.substr(1)),s.split(/,/g).forEach(function(c){var g=/([^:\*]*)(?::(\d+)|(\*))?/.exec(c);a.push(Kv(e,i,g[1],g[2]||g[3]))}),i&&i!=="+"){var n=",";return i==="?"?n="&":i!=="#"&&(n=i),(a.length!==0?i:"")+a.join(n)}else return a.join(",")}else return jp(o)}),t==="/"?t:t.replace(/\/$/,"")}function Kp(t){let e=t.method.toUpperCase(),r=(t.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),A=Object.assign({},t.headers),s,o=zp(t,["method","baseUrl","url","headers","request","mediaType"]),n=jv(r);r=Xv(r).expand(o),/^http/.test(r)||(r=t.baseUrl+r);let i=Object.keys(t).filter(g=>n.includes(g)).concat("baseUrl"),a=zp(o,i);if(!/application\/octet-stream/i.test(A.accept)&&(t.mediaType.format&&(A.accept=A.accept.split(/,/).map(g=>g.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${t.mediaType.format}`)).join(",")),r.endsWith("/graphql")&&t.mediaType.previews?.length)){let g=A.accept.match(/(?{let u=t.mediaType.format?`.${t.mediaType.format}`:"+json";return`application/vnd.github.${l}-preview${u}`}).join(",")}return["GET","HEAD"].includes(e)?r=Wv(r,a):"data"in a?s=a.data:Object.keys(a).length&&(s=a),!A["content-type"]&&typeof s<"u"&&(A["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof s>"u"&&(s=""),Object.assign({method:e,url:r,headers:A},typeof s<"u"?{body:s}:null,t.request?{request:t.request}:null)}function ex(t,e,r){return Kp(_l(t,e,r))}function Xp(t,e){let r=_l(t,e),A=ex.bind(null,r);return Object.assign(A,{DEFAULTS:r,defaults:Xp.bind(null,r),merge:_l.bind(null,r),parse:Kp})}var $p=Xp(null,Hv);var Im=W(nm(),1);var gx=/^-?\d+$/,Di=/^-?\d+n+$/,lr=JSON.stringify,Vl=JSON.parse,lm=/^-?\d+n$/,im=/([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g,am=/([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g,ql=t=>t===void 0||typeof t=="function"||typeof t=="symbol",Wl=t=>t!==null&&typeof t=="object"&&t.constructor&&t.constructor.name==="RawJSON",lx=(t,e,r)=>{let A="";typeof r=="number"?A=" ".repeat(Math.min(10,Math.max(0,Math.floor(r)))):typeof r=="string"&&(A=r.slice(0,10));let s=typeof e=="function",o=Array.isArray(e)?new Set(e.map(String)):null,n=(h,C,I)=>(I!==null&&typeof I=="object"&&typeof I.toJSON=="function"&&(I=I.toJSON(C)),typeof I=="string"&&Di.test(I)?I+"n":typeof I=="bigint"?"rawJSON"in JSON?JSON.rawJSON(I.toString()):I.toString()+"n":(s&&(I=e.call(h,C,I)),I!==null&&typeof I=="object"&&(I instanceof Number||I instanceof String||I instanceof Boolean)&&(I=I.valueOf()),I)),i=n({"":t},"",t);if(ql(i))return;let a=i===null||typeof i!="object",c=Wl(i);if(a||c)return lr(i);let g=[],l=0,u=[{parent:{"":i},key:"",val:i,isArray:Array.isArray(i),keys:Array.isArray(i)?null:Object.keys(i),index:0,first:!0}],E=new WeakSet([i]);for(;u.length>0;){let h=u[u.length-1];h.index===0&&(g.push(h.isArray?"[":"{"),l++);let C=!1;if(h.isArray)if(h.index=h.keys.length&&u[u.length-1]===h&&(C=!0)}C&&(l--,!h.first&&A&&g.push(` -`+A.repeat(l)),g.push(h.isArray?"]":"}"),E.delete(h.val),u.pop())}return g.join("")},um=(t,e,r)=>{try{return"rawJSON"in JSON?lr(t,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r):t?lr(t,(i,a)=>typeof a=="string"&&Di.test(a)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),r).replace(im,"$1$2$3").replace(am,"$1$2$3"):lr(t,e,r)}catch(A){if(A instanceof RangeError){let s=lx(t,e,r);return s===void 0?void 0:"rawJSON"in JSON?s:s.replace(im,"$1$2$3").replace(am,"$1$2$3")}throw A}},Ri=new Map,ux=()=>{let t=JSON.parse.toString();if(Ri.has(t))return Ri.get(t);try{let e=JSON.parse("1",(r,A,s)=>!!s?.source&&s.source==="1");return Ri.set(t,e),e}catch{return Ri.set(t,!1),!1}},Ex=(t,e,r,A)=>typeof e=="string"&&lm.test(e)?BigInt(e.slice(0,-1)):typeof e=="string"&&Di.test(e)?e.slice(0,-1):typeof A=="function"?A(t,e,r):e,hx=(t,e)=>JSON.parse(t,(r,A,s)=>{let o=typeof A=="number",n=A>Number.MAX_SAFE_INTEGER||A{let r={"":t},A=[{parent:r,key:"",visited:!1}];for(;A.length>0;){let s=A[A.length-1];if(s.visited){let{parent:o,key:n}=s,i=o[n];typeof i=="string"&&(lm.test(i)?i=BigInt(i.slice(0,-1)):Di.test(i)&&(i=i.slice(0,-1))),typeof e=="function"&&(i=e.call(o,n,i)),i===void 0?delete o[n]:o[n]=i,A.pop()}else{s.visited=!0;let o=s.parent[s.key];if(o!==null&&typeof o=="object"){let i=Object.keys(o);for(let a=i.length-1;a>=0;a--)A.push({parent:o,key:i[a],visited:!1})}}}return r[""]},gm=t=>t.replace(Qx,(e,r,A,s)=>{let o=e[0]==='"';if(o&&Bx.test(e))return e.substring(0,e.length-1)+'n"';let i=A||s,a=r&&(r.length{if(!t)return Vl(t,e);try{if(ux())return hx(t,e);let r=gm(t);return Vl(r,(A,s,o)=>Ex(A,s,o,e))}catch(r){if(r instanceof RangeError){let A=gm(t),s=Vl(A);return Ix(s,e)}throw r}};var Jr=class extends Error{name;status;request;response;constructor(e,r,A){super(e,{cause:A.cause}),this.name="HttpError",this.status=Number.parseInt(r),Number.isNaN(this.status)&&(this.status=0);"response"in A&&(this.response=A.response);let s=Object.assign({},A.request);A.request.headers.authorization&&(s.headers=Object.assign({},A.request.headers,{authorization:A.request.headers.authorization.replace(/(?"";async function Bm(t){let e=t.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let r=t.request?.log||console,A=t.request?.parseSuccessResponseBody!==!1,s=fx(t.body)||Array.isArray(t.body)?um(t.body):t.body,o=Object.fromEntries(Object.entries(t.headers).map(([l,u])=>[l,String(u)])),n;try{n=await e(t.url,{method:t.method,body:s,redirect:t.request?.redirect,headers:o,signal:t.request?.signal,...t.body&&{duplex:"half"}})}catch(l){let u="Unknown Error";if(l instanceof Error){if(l.name==="AbortError")throw l.status=500,l;u=l.message,l.name==="TypeError"&&"cause"in l&&(l.cause instanceof Error?u=l.cause.message:typeof l.cause=="string"&&(u=l.cause))}let E=new Jr(u,500,{request:t});throw E.cause=l,E}let i=n.status,a=n.url,c={};for(let[l,u]of n.headers)c[l]=u;let g={url:a,status:i,headers:c,data:""};if("deprecation"in c){let l=c.link&&c.link.match(/<([^<>]+)>; rel="deprecation"/),u=l&&l.pop();r.warn(`[@octokit/request] "${t.method} ${t.url}" is deprecated. It is scheduled to be removed on ${c.sunset}${u?`. See ${u}`:""}`)}if(i===204||i===205)return g;if(t.method==="HEAD"){if(i<400)return g;throw new Jr(n.statusText,i,{response:g,request:t})}if(i===304)throw g.data=await zl(n),new Jr("Not modified",i,{response:g,request:t});if(i>=400)throw g.data=await zl(n),new Jr(mx(g.data),i,{response:g,request:t});return g.data=A?await zl(n):n.body,g}async function zl(t){let e=t.headers.get("content-type");if(!e)return t.text().catch(Qm);let r=(0,Im.parse)(e);if(px(r)){let A="";try{return A=await t.text(),hm(A)}catch{return A}}else return r.type.startsWith("text/")||r.parameters.charset?.toLowerCase()==="utf-8"?t.text().catch(Qm):t.arrayBuffer().catch(()=>new ArrayBuffer(0))}function px(t){return t.type==="application/json"||t.type==="application/scim+json"}function mx(t){if(typeof t=="string")return t;if(t instanceof ArrayBuffer)return"Unknown error";if(typeof t=="object"&&t!==null&&"message"in t){let e=t,r="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(A=>JSON.stringify(A)).join(", ")}${r}`:`${e.message}${r}`}return`Unknown error: ${JSON.stringify(t)}`}function Zl(t,e){let r=t.defaults(e);return Object.assign(function(s,o){let n=r.merge(s,o);if(!n.request||!n.request.hook)return Bm(r.parse(n));let i=(a,c)=>Bm(r.parse(r.merge(a,c)));return Object.assign(i,{endpoint:r,defaults:Zl.bind(null,r)}),n.request.hook(i,n)},{endpoint:r,defaults:Zl.bind(null,r)})}var so=Zl($p,dx);var wx="0.0.0-development";function yx(t){return`Request failed due to following response errors: -`+t.errors.map(e=>` - ${e.message}`).join(` -`)}var Rx=class extends Error{constructor(t,e,r){super(yx(r)),this.request=t,this.headers=e,this.response=r,this.errors=r.errors,this.data=r.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},Dx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],Tx=["query","method","url"],Cm=/\/api\/v3\/?$/;function bx(t,e,r){if(r){if(typeof e=="string"&&"query"in r)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let n in r)if(Tx.includes(n))return Promise.reject(new Error(`[@octokit/graphql] "${n}" cannot be used as variable name`))}let A=typeof e=="string"?Object.assign({query:e},r):e,s=Object.keys(A).reduce((n,i)=>Dx.includes(i)?(n[i]=A[i],n):(n.variables||(n.variables={}),n.variables[i]=A[i],n),{}),o=A.baseUrl||t.endpoint.DEFAULTS.baseUrl;return Cm.test(o)&&(s.url=o.replace(Cm,"/api/graphql")),t(s).then(n=>{if(n.data.errors){let i={};for(let a of Object.keys(n.headers))i[a]=n.headers[a];throw new Rx(s,i,n.data)}return n.data.data})}function jl(t,e){let r=t.defaults(e);return Object.assign((s,o)=>bx(r,s,o),{defaults:jl.bind(null,r),endpoint:r.endpoint})}var a2=jl(so,{headers:{"user-agent":`octokit-graphql.js/${wx} ${gr()}`},method:"POST",url:"/graphql"});function dm(t){return jl(t,{method:"POST",url:"/graphql"})}var Kl="(?:[a-zA-Z0-9_-]+)",fm="\\.",pm=new RegExp(`^${Kl}${fm}${Kl}${fm}${Kl}$`),kx=pm.test.bind(pm);async function Fx(t){let e=kx(t),r=t.startsWith("v1.")||t.startsWith("ghs_"),A=t.startsWith("ghu_");return{type:"token",token:t,tokenType:e?"app":r?"installation":A?"user-to-server":"oauth"}}function Sx(t){return t.split(/\./).length===3?`bearer ${t}`:`token ${t}`}async function Nx(t,e,r,A){let s=e.endpoint.merge(r,A);return s.headers.authorization=Sx(t),e(s)}var mm=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(Fx.bind(null,e),{hook:Nx.bind(null,e)})};var Xl="7.0.6";var wm=()=>{},Ux=console.warn.bind(console),Gx=console.error.bind(console);function Lx(t={}){return typeof t.debug!="function"&&(t.debug=wm),typeof t.info!="function"&&(t.info=wm),typeof t.warn!="function"&&(t.warn=Ux),typeof t.error!="function"&&(t.error=Gx),t}var ym=`octokit-core.js/${Xl} ${gr()}`,Ti=class{static VERSION=Xl;static defaults(e){return class extends this{constructor(...A){let s=A[0]||{};if(typeof e=="function"){super(e(s));return}super(Object.assign({},e,s,s.userAgent&&e.userAgent?{userAgent:`${s.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let r=this.plugins;return class extends this{static plugins=r.concat(e.filter(s=>!r.includes(s)))}}constructor(e={}){let r=new qp.Collection,A={baseUrl:so.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:r.bind(null,"request")}),mediaType:{previews:[],format:""}};if(A.headers["user-agent"]=e.userAgent?`${e.userAgent} ${ym}`:ym,e.baseUrl&&(A.baseUrl=e.baseUrl),e.previews&&(A.mediaType.previews=e.previews),e.timeZone&&(A.headers["time-zone"]=e.timeZone),this.request=so.defaults(A),this.graphql=dm(this.request).defaults(A),this.log=Lx(e.log),this.hook=r,e.authStrategy){let{authStrategy:o,...n}=e,i=o(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:n},e.auth));r.wrap("request",i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let o=mm(e.auth);r.wrap("request",o.hook),this.auth=o}let s=this.constructor;for(let o=0;o({async next(){if(!i)return{done:!0};try{let a=await s({method:o,url:i,headers:n}),c=_x(a);if(i=((c.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!i&&"total_commits"in c.data){let g=new URL(c.url),l=g.searchParams,u=parseInt(l.get("page")||"1",10),E=parseInt(l.get("per_page")||"250",10);u*E{if(s.done)return e;let o=!1;function n(){o=!0}return e=e.concat(A?A(s.value,n):s.value.data),o?e:Tm(t,e,r,A)})}var k2=Object.assign(Dm,{iterator:ru});function Au(t){return{paginate:Object.assign(Dm.bind(null,t),{iterator:ru.bind(null,t)})}}Au.VERSION=Yx;var G2=new VA,su=Yp(),Jx={baseUrl:su,request:{agent:xp(su),fetch:Op(su)}},bm=Ti.plugin(tu,Au).defaults(Jx);function km(t,e){let r=Object.assign({},e||{}),A=vp(t,r);A&&(r.auth=A);let s=Ol(r.userAgent);return s&&(r.userAgent=s),r}var x2=new VA;function Fm(t,e,...r){let A=bm.plugin(...r);return new A(km(t,e))}var Tu=W(require("crypto"),1),Hr=W(require("fs"),1);var j_=W(Ru(),1);var go=W(require("path"),1);var Ji=W(Ru(),1),my=W(require("stream"),1),wy=W(require("util"),1),yy=require("assert");var py=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},Yi=class{constructor(e,r,A){if(e<1)throw new Error("max attempts should be greater than or equal to 1");if(this.maxAttempts=e,this.minSeconds=Math.floor(r),this.maxSeconds=Math.floor(A),this.minSeconds>this.maxSeconds)throw new Error("min seconds should be less than or equal to max seconds")}execute(e,r){return py(this,void 0,void 0,function*(){let A=1;for(;AsetTimeout(r,e*1e3))})}};var Er=function(t,e,r,A){function s(o){return o instanceof r?o:new r(function(n){n(o)})}return new(r||(r=Promise))(function(o,n){function i(g){try{c(A.next(g))}catch(l){n(l)}}function a(g){try{c(A.throw(g))}catch(l){n(l)}}function c(g){g.done?o(g.value):s(g.value).then(i,a)}c((A=A.apply(t,e||[])).next())})},_i=class extends Error{constructor(e){super(`Unexpected HTTP response: ${e}`),this.httpStatusCode=e,Object.setPrototypeOf(this,new.target.prototype)}},Ry=process.platform==="win32",vV=process.platform==="darwin",X_="actions/tool-cache";function Dy(t,e,r,A){return Er(this,void 0,void 0,function*(){e=e||go.join(Fy(),Tu.randomUUID()),yield Tl(go.dirname(e)),Ue(`Downloading ${t}`),Ue(`Destination ${e}`);let s=3,o=Du("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS",10),n=Du("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS",20);return yield new Yi(s,o,n).execute(()=>Er(this,void 0,void 0,function*(){return yield $_(t,e||"",r,A)}),a=>!(a instanceof _i&&a.httpStatusCode&&a.httpStatusCode<500&&a.httpStatusCode!==408&&a.httpStatusCode!==429))})}function $_(t,e,r,A){return Er(this,void 0,void 0,function*(){if(Hr.existsSync(e))throw new Error(`Destination file path ${e} already exists`);let s=new Xs(X_,[],{allowRetries:!1});r&&(Ue("set auth"),A===void 0&&(A={}),A.authorization=r);let o=yield s.get(t,A);if(o.message.statusCode!==200){let g=new _i(o.message.statusCode);throw Ue(`Failed to download from "${t}". Code(${o.message.statusCode}) Message(${o.message.statusMessage})`),g}let n=wy.promisify(my.pipeline),a=Du("TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY",()=>o.message)(),c=!1;try{return yield n(a,Hr.createWriteStream(e)),Ue("download complete"),c=!0,e}finally{if(!c){Ue("download failed");try{yield fp(e)}catch(g){Ue(`Failed to delete '${e}'. ${g.message}`)}}}})}function Ty(t,e){return Er(this,arguments,void 0,function*(r,A,s="xz"){if(!r)throw new Error("parameter 'file' is required");A=yield ky(A),Ue("Checking tar --version");let o="";yield cr("tar --version",[],{ignoreReturnCode:!0,silent:!0,listeners:{stdout:g=>o+=g.toString(),stderr:g=>o+=g.toString()}}),Ue(o.trim());let n=o.toUpperCase().includes("GNU TAR"),i;s instanceof Array?i=s:i=[s],Nl()&&!s.includes("v")&&i.push("-v");let a=A,c=r;return Ry&&n&&(i.push("--force-local"),a=A.replace(/\\/g,"/"),c=r.replace(/\\/g,"/")),n&&(i.push("--warning=no-unknown-keyword"),i.push("--overwrite")),i.push("-C",a,"-f",c),yield cr("tar",i),A})}function by(t,e){return Er(this,void 0,void 0,function*(){if(!t)throw new Error("parameter 'file' is required");return e=yield ky(e),Ry?yield eJ(t,e):yield tJ(t,e),e})}function eJ(t,e){return Er(this,void 0,void 0,function*(){let r=t.replace(/'/g,"''").replace(/"|\n|\r/g,""),A=e.replace(/'/g,"''").replace(/"|\n|\r/g,""),s=yield _r("pwsh",!1);if(s){let n=["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;",`try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`,`catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force } else { throw $_ } } ;`].join(" ")];Ue(`Using pwsh at path: ${s}`),yield cr(`"${s}"`,n)}else{let n=["-NoLogo","-Sta","-NoProfile","-NonInteractive","-ExecutionPolicy","Unrestricted","-Command",["$ErrorActionPreference = 'Stop' ;","try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;",`if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${r}' -DestinationPath '${A}' -Force }`,`else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${r}', '${A}', $true) }`].join(" ")],i=yield _r("powershell",!0);Ue(`Using powershell at path: ${i}`),yield cr(`"${i}"`,n)}})}function tJ(t,e){return Er(this,void 0,void 0,function*(){let r=yield _r("unzip",!0),A=[t];Nl()||A.unshift("-q"),A.unshift("-o"),yield cr(`"${r}"`,A,{cwd:e})})}function ky(t){return Er(this,void 0,void 0,function*(){return t||(t=go.join(Fy(),Tu.randomUUID())),yield Tl(t),t})}function Fy(){let t=process.env.RUNNER_TEMP||"";return(0,yy.ok)(t,"Expected RUNNER_TEMP to be defined"),t}function Du(t,e){let r=global[t];return r!==void 0?r:e}var Sy=` +`, "latin1"); + } else { + socket.write(`${header}\r +`, "latin1"); + } + } else if (contentLength === null) { + socket.write("\r\n0\r\n\r\n", "latin1"); + } + if (contentLength !== null && bytesWritten !== contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError(); + } else { + process.emitWarning(new RequestContentLengthMismatchError()); + } + } + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh(); + } + } + client[kResume](); + } + destroy(err) { + const { socket, client, abort } = this; + socket[kWriting] = false; + if (err) { + assert(client[kRunning] <= 1, "pipeline should only contain this request"); + abort(err); + } + } + }; + module2.exports = connectH1; + } +}); + +// node_modules/undici/lib/dispatcher/client-h2.js +var require_client_h2 = __commonJS({ + "node_modules/undici/lib/dispatcher/client-h2.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var { pipeline: pipeline2 } = require("node:stream"); + var util2 = require_util(); + var { + RequestContentLengthMismatchError, + RequestAbortedError, + SocketError, + InformationalError + } = require_errors(); + var { + kUrl, + kReset, + kClient, + kRunning, + kPending, + kQueue, + kPendingIdx, + kRunningIdx, + kError, + kSocket, + kStrictContentLength, + kOnError, + kMaxConcurrentStreams, + kHTTP2Session, + kResume, + kSize, + kHTTPContext + } = require_symbols(); + var kOpenStreams = /* @__PURE__ */ Symbol("open streams"); + var extractBody; + var h2ExperimentalWarned = false; + var http2; + try { + http2 = require("node:http2"); + } catch { + http2 = { constants: {} }; + } + var { + constants: { + HTTP2_HEADER_AUTHORITY, + HTTP2_HEADER_METHOD, + HTTP2_HEADER_PATH, + HTTP2_HEADER_SCHEME, + HTTP2_HEADER_CONTENT_LENGTH, + HTTP2_HEADER_EXPECT, + HTTP2_HEADER_STATUS + } + } = http2; + function parseH2Headers(headers) { + const result = []; + for (const [name, value] of Object.entries(headers)) { + if (Array.isArray(value)) { + for (const subvalue of value) { + result.push(Buffer.from(name), Buffer.from(subvalue)); + } + } else { + result.push(Buffer.from(name), Buffer.from(value)); + } + } + return result; + } + async function connectH2(client, socket) { + client[kSocket] = socket; + if (!h2ExperimentalWarned) { + h2ExperimentalWarned = true; + process.emitWarning("H2 support is experimental, expect them to change at any time.", { + code: "UNDICI-H2" + }); + } + const session = http2.connect(client[kUrl], { + createConnection: () => socket, + peerMaxConcurrentStreams: client[kMaxConcurrentStreams] + }); + session[kOpenStreams] = 0; + session[kClient] = client; + session[kSocket] = socket; + util2.addListener(session, "error", onHttp2SessionError); + util2.addListener(session, "frameError", onHttp2FrameError); + util2.addListener(session, "end", onHttp2SessionEnd); + util2.addListener(session, "goaway", onHTTP2GoAway); + util2.addListener(session, "close", function() { + const { [kClient]: client2 } = this; + const { [kSocket]: socket2 } = client2; + const err = this[kSocket][kError] || this[kError] || new SocketError("closed", util2.getSocketInfo(socket2)); + client2[kHTTP2Session] = null; + if (client2.destroyed) { + assert(client2[kPending] === 0); + const requests = client2[kQueue].splice(client2[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request2 = requests[i]; + util2.errorRequest(client2, request2, err); + } + } + }); + session.unref(); + client[kHTTP2Session] = session; + socket[kHTTP2Session] = session; + util2.addListener(socket, "error", function(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + this[kError] = err; + this[kClient][kOnError](err); + }); + util2.addListener(socket, "end", function() { + util2.destroy(this, new SocketError("other side closed", util2.getSocketInfo(this))); + }); + util2.addListener(socket, "close", function() { + const err = this[kError] || new SocketError("closed", util2.getSocketInfo(this)); + client[kSocket] = null; + if (this[kHTTP2Session] != null) { + this[kHTTP2Session].destroy(err); + } + client[kPendingIdx] = client[kRunningIdx]; + assert(client[kRunning] === 0); + client.emit("disconnect", client[kUrl], [client], err); + client[kResume](); + }); + let closed = false; + socket.on("close", () => { + closed = true; + }); + return { + version: "h2", + defaultPipelining: Infinity, + write(...args) { + return writeH2(client, ...args); + }, + resume() { + resumeH2(client); + }, + destroy(err, callback) { + if (closed) { + queueMicrotask(callback); + } else { + socket.destroy(err).on("close", callback); + } + }, + get destroyed() { + return socket.destroyed; + }, + busy() { + return false; + } + }; + } + function resumeH2(client) { + const socket = client[kSocket]; + if (socket?.destroyed === false) { + if (client[kSize] === 0 && client[kMaxConcurrentStreams] === 0) { + socket.unref(); + client[kHTTP2Session].unref(); + } else { + socket.ref(); + client[kHTTP2Session].ref(); + } + } + } + function onHttp2SessionError(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + this[kSocket][kError] = err; + this[kClient][kOnError](err); + } + function onHttp2FrameError(type, code, id) { + if (id === 0) { + const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`); + this[kSocket][kError] = err; + this[kClient][kOnError](err); + } + } + function onHttp2SessionEnd() { + const err = new SocketError("other side closed", util2.getSocketInfo(this[kSocket])); + this.destroy(err); + util2.destroy(this[kSocket], err); + } + function onHTTP2GoAway(code) { + const err = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${code}`, util2.getSocketInfo(this)); + const client = this[kClient]; + client[kSocket] = null; + client[kHTTPContext] = null; + if (this[kHTTP2Session] != null) { + this[kHTTP2Session].destroy(err); + this[kHTTP2Session] = null; + } + util2.destroy(this[kSocket], err); + if (client[kRunningIdx] < client[kQueue].length) { + const request2 = client[kQueue][client[kRunningIdx]]; + client[kQueue][client[kRunningIdx]++] = null; + util2.errorRequest(client, request2, err); + client[kPendingIdx] = client[kRunningIdx]; + } + assert(client[kRunning] === 0); + client.emit("disconnect", client[kUrl], [client], err); + client[kResume](); + } + function shouldSendContentLength(method) { + return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; + } + function writeH2(client, request2) { + const session = client[kHTTP2Session]; + const { method, path: path6, host, upgrade, expectContinue, signal, headers: reqHeaders } = request2; + let { body } = request2; + if (upgrade) { + util2.errorRequest(client, request2, new Error("Upgrade not supported for H2")); + return false; + } + const headers = {}; + for (let n = 0; n < reqHeaders.length; n += 2) { + const key = reqHeaders[n + 0]; + const val = reqHeaders[n + 1]; + if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + if (headers[key]) { + headers[key] += `,${val[i]}`; + } else { + headers[key] = val[i]; + } + } + } else { + headers[key] = val; + } + } + let stream2; + const { hostname, port } = client[kUrl]; + headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ""}`; + headers[HTTP2_HEADER_METHOD] = method; + const abort = (err) => { + if (request2.aborted || request2.completed) { + return; + } + err = err || new RequestAbortedError(); + util2.errorRequest(client, request2, err); + if (stream2 != null) { + util2.destroy(stream2, err); + } + util2.destroy(body, err); + client[kQueue][client[kRunningIdx]++] = null; + client[kResume](); + }; + try { + request2.onConnect(abort); + } catch (err) { + util2.errorRequest(client, request2, err); + } + if (request2.aborted) { + return false; + } + if (method === "CONNECT") { + session.ref(); + stream2 = session.request(headers, { endStream: false, signal }); + if (stream2.id && !stream2.pending) { + request2.onUpgrade(null, null, stream2); + ++session[kOpenStreams]; + client[kQueue][client[kRunningIdx]++] = null; + } else { + stream2.once("ready", () => { + request2.onUpgrade(null, null, stream2); + ++session[kOpenStreams]; + client[kQueue][client[kRunningIdx]++] = null; + }); + } + stream2.once("close", () => { + session[kOpenStreams] -= 1; + if (session[kOpenStreams] === 0) session.unref(); + }); + return true; + } + headers[HTTP2_HEADER_PATH] = path6; + headers[HTTP2_HEADER_SCHEME] = "https"; + const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; + if (body && typeof body.read === "function") { + body.read(0); + } + let contentLength = util2.bodyLength(body); + if (util2.isFormDataLike(body)) { + extractBody ??= require_body().extractBody; + const [bodyStream, contentType] = extractBody(body); + headers["content-type"] = contentType; + body = bodyStream.stream; + contentLength = bodyStream.length; + } + if (contentLength == null) { + contentLength = request2.contentLength; + } + if (contentLength === 0 || !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request2.contentLength != null && request2.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util2.errorRequest(client, request2, new RequestContentLengthMismatchError()); + return false; + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + if (contentLength != null) { + assert(body, "no body must not have content length"); + headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`; + } + session.ref(); + const shouldEndStream = method === "GET" || method === "HEAD" || body === null; + if (expectContinue) { + headers[HTTP2_HEADER_EXPECT] = "100-continue"; + stream2 = session.request(headers, { endStream: shouldEndStream, signal }); + stream2.once("continue", writeBodyH2); + } else { + stream2 = session.request(headers, { + endStream: shouldEndStream, + signal + }); + writeBodyH2(); + } + ++session[kOpenStreams]; + stream2.once("response", (headers2) => { + const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2; + request2.onResponseStarted(); + if (request2.aborted) { + const err = new RequestAbortedError(); + util2.errorRequest(client, request2, err); + util2.destroy(stream2, err); + return; + } + if (request2.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream2.resume.bind(stream2), "") === false) { + stream2.pause(); + } + stream2.on("data", (chunk) => { + if (request2.onData(chunk) === false) { + stream2.pause(); + } + }); + }); + stream2.once("end", () => { + if (stream2.state?.state == null || stream2.state.state < 6) { + request2.onComplete([]); + } + if (session[kOpenStreams] === 0) { + session.unref(); + } + abort(new InformationalError("HTTP/2: stream half-closed (remote)")); + client[kQueue][client[kRunningIdx]++] = null; + client[kPendingIdx] = client[kRunningIdx]; + client[kResume](); + }); + stream2.once("close", () => { + session[kOpenStreams] -= 1; + if (session[kOpenStreams] === 0) { + session.unref(); + } + }); + stream2.once("error", function(err) { + abort(err); + }); + stream2.once("frameError", (type, code) => { + abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)); + }); + return true; + function writeBodyH2() { + if (!body || contentLength === 0) { + writeBuffer( + abort, + stream2, + null, + client, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util2.isBuffer(body)) { + writeBuffer( + abort, + stream2, + body, + client, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util2.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable( + abort, + stream2, + body.stream(), + client, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + writeBlob( + abort, + stream2, + body, + client, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } + } else if (util2.isStream(body)) { + writeStream( + abort, + client[kSocket], + expectsPayload, + stream2, + body, + client, + request2, + contentLength + ); + } else if (util2.isIterable(body)) { + writeIterable( + abort, + stream2, + body, + client, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + assert(false); + } + } + } + function writeBuffer(abort, h2stream, body, client, request2, socket, contentLength, expectsPayload) { + try { + if (body != null && util2.isBuffer(body)) { + assert(contentLength === body.byteLength, "buffer body must have content length"); + h2stream.cork(); + h2stream.write(body); + h2stream.uncork(); + h2stream.end(); + request2.onBodySent(body); + } + if (!expectsPayload) { + socket[kReset] = true; + } + request2.onRequestSent(); + client[kResume](); + } catch (error2) { + abort(error2); + } + } + function writeStream(abort, socket, expectsPayload, h2stream, body, client, request2, contentLength) { + assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); + const pipe = pipeline2( + body, + h2stream, + (err) => { + if (err) { + util2.destroy(pipe, err); + abort(err); + } else { + util2.removeAllListeners(pipe); + request2.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } + } + ); + util2.addListener(pipe, "data", onPipeData); + function onPipeData(chunk) { + request2.onBodySent(chunk); + } + } + async function writeBlob(abort, h2stream, body, client, request2, socket, contentLength, expectsPayload) { + assert(contentLength === body.size, "blob body must have content length"); + try { + if (contentLength != null && contentLength !== body.size) { + throw new RequestContentLengthMismatchError(); + } + const buffer = Buffer.from(await body.arrayBuffer()); + h2stream.cork(); + h2stream.write(buffer); + h2stream.uncork(); + h2stream.end(); + request2.onBodySent(buffer); + request2.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeIterable(abort, h2stream, body, client, request2, socket, contentLength, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined"); + let callback = null; + function onDrain() { + if (callback) { + const cb = callback; + callback = null; + cb(); + } + } + const waitForDrain = () => new Promise((resolve2, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve2; + } + }); + h2stream.on("close", onDrain).on("drain", onDrain); + try { + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError]; + } + const res = h2stream.write(chunk); + request2.onBodySent(chunk); + if (!res) { + await waitForDrain(); + } + } + h2stream.end(); + request2.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } finally { + h2stream.off("close", onDrain).off("drain", onDrain); + } + } + module2.exports = connectH2; + } +}); + +// node_modules/undici/lib/handler/redirect-handler.js +var require_redirect_handler = __commonJS({ + "node_modules/undici/lib/handler/redirect-handler.js"(exports2, module2) { + "use strict"; + var util2 = require_util(); + var { kBodyUsed } = require_symbols(); + var assert = require("node:assert"); + var { InvalidArgumentError } = require_errors(); + var EE = require("node:events"); + var redirectableStatusCodes = [300, 301, 302, 303, 307, 308]; + var kBody = /* @__PURE__ */ Symbol("body"); + var BodyAsyncIterable = class { + constructor(body) { + this[kBody] = body; + this[kBodyUsed] = false; + } + async *[Symbol.asyncIterator]() { + assert(!this[kBodyUsed], "disturbed"); + this[kBodyUsed] = true; + yield* this[kBody]; + } + }; + var RedirectHandler = class { + constructor(dispatch, maxRedirections, opts, handler2) { + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + util2.validateHandler(handler2, opts.method, opts.upgrade); + this.dispatch = dispatch; + this.location = null; + this.abort = null; + this.opts = { ...opts, maxRedirections: 0 }; + this.maxRedirections = maxRedirections; + this.handler = handler2; + this.history = []; + this.redirectionLimitReached = false; + if (util2.isStream(this.opts.body)) { + if (util2.bodyLength(this.opts.body) === 0) { + this.opts.body.on("data", function() { + assert(false); + }); + } + if (typeof this.opts.body.readableDidRead !== "boolean") { + this.opts.body[kBodyUsed] = false; + EE.prototype.on.call(this.opts.body, "data", function() { + this[kBodyUsed] = true; + }); + } + } else if (this.opts.body && typeof this.opts.body.pipeTo === "function") { + this.opts.body = new BodyAsyncIterable(this.opts.body); + } else if (this.opts.body && typeof this.opts.body !== "string" && !ArrayBuffer.isView(this.opts.body) && util2.isIterable(this.opts.body)) { + this.opts.body = new BodyAsyncIterable(this.opts.body); + } + } + onConnect(abort) { + this.abort = abort; + this.handler.onConnect(abort, { history: this.history }); + } + onUpgrade(statusCode, headers, socket) { + this.handler.onUpgrade(statusCode, headers, socket); + } + onError(error2) { + this.handler.onError(error2); + } + onHeaders(statusCode, headers, resume, statusText) { + this.location = this.history.length >= this.maxRedirections || util2.isDisturbed(this.opts.body) ? null : parseLocation(statusCode, headers); + if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) { + if (this.request) { + this.request.abort(new Error("max redirects")); + } + this.redirectionLimitReached = true; + this.abort(new Error("max redirects")); + return; + } + if (this.opts.origin) { + this.history.push(new URL(this.opts.path, this.opts.origin)); + } + if (!this.location) { + return this.handler.onHeaders(statusCode, headers, resume, statusText); + } + const { origin, pathname, search } = util2.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin))); + const path6 = search ? `${pathname}${search}` : pathname; + this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); + this.opts.path = path6; + this.opts.origin = origin; + this.opts.maxRedirections = 0; + this.opts.query = null; + if (statusCode === 303 && this.opts.method !== "HEAD") { + this.opts.method = "GET"; + this.opts.body = null; + } + } + onData(chunk) { + if (this.location) { + } else { + return this.handler.onData(chunk); + } + } + onComplete(trailers) { + if (this.location) { + this.location = null; + this.abort = null; + this.dispatch(this.opts, this); + } else { + this.handler.onComplete(trailers); + } + } + onBodySent(chunk) { + if (this.handler.onBodySent) { + this.handler.onBodySent(chunk); + } + } + }; + function parseLocation(statusCode, headers) { + if (redirectableStatusCodes.indexOf(statusCode) === -1) { + return null; + } + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].length === 8 && util2.headerNameToString(headers[i]) === "location") { + return headers[i + 1]; + } + } + } + function shouldRemoveHeader(header, removeContent, unknownOrigin) { + if (header.length === 4) { + return util2.headerNameToString(header) === "host"; + } + if (removeContent && util2.headerNameToString(header).startsWith("content-")) { + return true; + } + if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { + const name = util2.headerNameToString(header); + return name === "authorization" || name === "cookie" || name === "proxy-authorization"; + } + return false; + } + function cleanRequestHeaders(headers, removeContent, unknownOrigin) { + const ret = []; + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) { + ret.push(headers[i], headers[i + 1]); + } + } + } else if (headers && typeof headers === "object") { + for (const key of Object.keys(headers)) { + if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) { + ret.push(key, headers[key]); + } + } + } else { + assert(headers == null, "headers must be an object or an array"); + } + return ret; + } + module2.exports = RedirectHandler; + } +}); + +// node_modules/undici/lib/interceptor/redirect-interceptor.js +var require_redirect_interceptor = __commonJS({ + "node_modules/undici/lib/interceptor/redirect-interceptor.js"(exports2, module2) { + "use strict"; + var RedirectHandler = require_redirect_handler(); + function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) { + return (dispatch) => { + return function Intercept(opts, handler2) { + const { maxRedirections = defaultMaxRedirections } = opts; + if (!maxRedirections) { + return dispatch(opts, handler2); + } + const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler2); + opts = { ...opts, maxRedirections: 0 }; + return dispatch(opts, redirectHandler); + }; + }; + } + module2.exports = createRedirectInterceptor; + } +}); + +// node_modules/undici/lib/dispatcher/client.js +var require_client = __commonJS({ + "node_modules/undici/lib/dispatcher/client.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var net = require("node:net"); + var http2 = require("node:http"); + var util2 = require_util(); + var { channels } = require_diagnostics(); + var Request = require_request(); + var DispatcherBase = require_dispatcher_base(); + var { + InvalidArgumentError, + InformationalError, + ClientDestroyedError + } = require_errors(); + var buildConnector = require_connect(); + var { + kUrl, + kServerName, + kClient, + kBusy, + kConnect, + kResuming, + kRunning, + kPending, + kSize, + kQueue, + kConnected, + kConnecting, + kNeedDrain, + kKeepAliveDefaultTimeout, + kHostHeader, + kPendingIdx, + kRunningIdx, + kError, + kPipelining, + kKeepAliveTimeoutValue, + kMaxHeadersSize, + kKeepAliveMaxTimeout, + kKeepAliveTimeoutThreshold, + kHeadersTimeout, + kBodyTimeout, + kStrictContentLength, + kConnector, + kMaxRedirections, + kMaxRequests, + kCounter, + kClose, + kDestroy, + kDispatch, + kInterceptors, + kLocalAddress, + kMaxResponseSize, + kOnError, + kHTTPContext, + kMaxConcurrentStreams, + kResume + } = require_symbols(); + var connectH1 = require_client_h1(); + var connectH2 = require_client_h2(); + var deprecatedInterceptorWarned = false; + var kClosedResolve = /* @__PURE__ */ Symbol("kClosedResolve"); + var noop3 = () => { + }; + function getPipelining(client) { + return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1; + } + var Client = class extends DispatcherBase { + /** + * + * @param {string|URL} url + * @param {import('../../types/client.js').Client.Options} options + */ + constructor(url, { + interceptors, + maxHeaderSize, + headersTimeout, + socketTimeout, + requestTimeout, + connectTimeout, + bodyTimeout, + idleTimeout, + keepAlive, + keepAliveTimeout, + maxKeepAliveTimeout, + keepAliveMaxTimeout, + keepAliveTimeoutThreshold, + socketPath, + pipelining, + tls, + strictContentLength, + maxCachedSessions, + maxRedirections, + connect: connect2, + maxRequestsPerClient, + localAddress, + maxResponseSize, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + // h2 + maxConcurrentStreams, + allowH2, + webSocket + } = {}) { + super({ webSocket }); + if (keepAlive !== void 0) { + throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead"); + } + if (socketTimeout !== void 0) { + throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead"); + } + if (requestTimeout !== void 0) { + throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead"); + } + if (idleTimeout !== void 0) { + throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead"); + } + if (maxKeepAliveTimeout !== void 0) { + throw new InvalidArgumentError("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead"); + } + if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) { + throw new InvalidArgumentError("invalid maxHeaderSize"); + } + if (socketPath != null && typeof socketPath !== "string") { + throw new InvalidArgumentError("invalid socketPath"); + } + if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) { + throw new InvalidArgumentError("invalid connectTimeout"); + } + if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) { + throw new InvalidArgumentError("invalid keepAliveTimeout"); + } + if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) { + throw new InvalidArgumentError("invalid keepAliveMaxTimeout"); + } + if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) { + throw new InvalidArgumentError("invalid keepAliveTimeoutThreshold"); + } + if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError("headersTimeout must be a positive integer or zero"); + } + if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError("bodyTimeout must be a positive integer or zero"); + } + if (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) { + throw new InvalidArgumentError("maxRequestsPerClient must be a positive number"); + } + if (localAddress != null && (typeof localAddress !== "string" || net.isIP(localAddress) === 0)) { + throw new InvalidArgumentError("localAddress must be valid string IP address"); + } + if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) { + throw new InvalidArgumentError("maxResponseSize must be a positive number"); + } + if (autoSelectFamilyAttemptTimeout != null && (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)) { + throw new InvalidArgumentError("autoSelectFamilyAttemptTimeout must be a positive number"); + } + if (allowH2 != null && typeof allowH2 !== "boolean") { + throw new InvalidArgumentError("allowH2 must be a valid boolean value"); + } + if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) { + throw new InvalidArgumentError("maxConcurrentStreams must be a positive integer, greater than 0"); + } + if (typeof connect2 !== "function") { + connect2 = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0, + ...connect2 + }); + } + if (interceptors?.Client && Array.isArray(interceptors.Client)) { + this[kInterceptors] = interceptors.Client; + if (!deprecatedInterceptorWarned) { + deprecatedInterceptorWarned = true; + process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.", { + code: "UNDICI-CLIENT-INTERCEPTOR-DEPRECATED" + }); + } + } else { + this[kInterceptors] = [createRedirectInterceptor({ maxRedirections })]; + } + this[kUrl] = util2.parseOrigin(url); + this[kConnector] = connect2; + this[kPipelining] = pipelining != null ? pipelining : 1; + this[kMaxHeadersSize] = maxHeaderSize || http2.maxHeaderSize; + this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout; + this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout; + this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold; + this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]; + this[kServerName] = null; + this[kLocalAddress] = localAddress != null ? localAddress : null; + this[kResuming] = 0; + this[kNeedDrain] = 0; + this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r +`; + this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 3e5; + this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 3e5; + this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength; + this[kMaxRedirections] = maxRedirections; + this[kMaxRequests] = maxRequestsPerClient; + this[kClosedResolve] = null; + this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1; + this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100; + this[kHTTPContext] = null; + this[kQueue] = []; + this[kRunningIdx] = 0; + this[kPendingIdx] = 0; + this[kResume] = (sync) => resume(this, sync); + this[kOnError] = (err) => onError(this, err); + } + get pipelining() { + return this[kPipelining]; + } + set pipelining(value) { + this[kPipelining] = value; + this[kResume](true); + } + get [kPending]() { + return this[kQueue].length - this[kPendingIdx]; + } + get [kRunning]() { + return this[kPendingIdx] - this[kRunningIdx]; + } + get [kSize]() { + return this[kQueue].length - this[kRunningIdx]; + } + get [kConnected]() { + return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed; + } + get [kBusy]() { + return Boolean( + this[kHTTPContext]?.busy(null) || this[kSize] >= (getPipelining(this) || 1) || this[kPending] > 0 + ); + } + /* istanbul ignore: only used for test */ + [kConnect](cb) { + connect(this); + this.once("connect", cb); + } + [kDispatch](opts, handler2) { + const origin = opts.origin || this[kUrl].origin; + const request2 = new Request(origin, opts, handler2); + this[kQueue].push(request2); + if (this[kResuming]) { + } else if (util2.bodyLength(request2.body) == null && util2.isIterable(request2.body)) { + this[kResuming] = 1; + queueMicrotask(() => resume(this)); + } else { + this[kResume](true); + } + if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { + this[kNeedDrain] = 2; + } + return this[kNeedDrain] < 2; + } + async [kClose]() { + return new Promise((resolve2) => { + if (this[kSize]) { + this[kClosedResolve] = resolve2; + } else { + resolve2(null); + } + }); + } + async [kDestroy](err) { + return new Promise((resolve2) => { + const requests = this[kQueue].splice(this[kPendingIdx]); + for (let i = 0; i < requests.length; i++) { + const request2 = requests[i]; + util2.errorRequest(this, request2, err); + } + const callback = () => { + if (this[kClosedResolve]) { + this[kClosedResolve](); + this[kClosedResolve] = null; + } + resolve2(null); + }; + if (this[kHTTPContext]) { + this[kHTTPContext].destroy(err, callback); + this[kHTTPContext] = null; + } else { + queueMicrotask(callback); + } + this[kResume](); + }); + } + }; + var createRedirectInterceptor = require_redirect_interceptor(); + function onError(client, err) { + if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") { + assert(client[kPendingIdx] === client[kRunningIdx]); + const requests = client[kQueue].splice(client[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request2 = requests[i]; + util2.errorRequest(client, request2, err); + } + assert(client[kSize] === 0); + } + } + async function connect(client) { + assert(!client[kConnecting]); + assert(!client[kHTTPContext]); + let { host, hostname, protocol, port } = client[kUrl]; + if (hostname[0] === "[") { + const idx = hostname.indexOf("]"); + assert(idx !== -1); + const ip = hostname.substring(1, idx); + assert(net.isIP(ip)); + hostname = ip; + } + client[kConnecting] = true; + if (channels.beforeConnect.hasSubscribers) { + channels.beforeConnect.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector] + }); + } + try { + const socket = await new Promise((resolve2, reject) => { + client[kConnector]({ + host, + hostname, + protocol, + port, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, (err, socket2) => { + if (err) { + reject(err); + } else { + resolve2(socket2); + } + }); + }); + if (client.destroyed) { + util2.destroy(socket.on("error", noop3), new ClientDestroyedError()); + return; + } + assert(socket); + try { + client[kHTTPContext] = socket.alpnProtocol === "h2" ? await connectH2(client, socket) : await connectH1(client, socket); + } catch (err) { + socket.destroy().on("error", noop3); + throw err; + } + client[kConnecting] = false; + socket[kCounter] = 0; + socket[kMaxRequests] = client[kMaxRequests]; + socket[kClient] = client; + socket[kError] = null; + if (channels.connected.hasSubscribers) { + channels.connected.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + socket + }); + } + client.emit("connect", client[kUrl], [client]); + } catch (err) { + if (client.destroyed) { + return; + } + client[kConnecting] = false; + if (channels.connectError.hasSubscribers) { + channels.connectError.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + error: err + }); + } + if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { + assert(client[kRunning] === 0); + while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) { + const request2 = client[kQueue][client[kPendingIdx]++]; + util2.errorRequest(client, request2, err); + } + } else { + onError(client, err); + } + client.emit("connectionError", client[kUrl], [client], err); + } + client[kResume](); + } + function emitDrain(client) { + client[kNeedDrain] = 0; + client.emit("drain", client[kUrl], [client]); + } + function resume(client, sync) { + if (client[kResuming] === 2) { + return; + } + client[kResuming] = 2; + _resume(client, sync); + client[kResuming] = 0; + if (client[kRunningIdx] > 256) { + client[kQueue].splice(0, client[kRunningIdx]); + client[kPendingIdx] -= client[kRunningIdx]; + client[kRunningIdx] = 0; + } + } + function _resume(client, sync) { + while (true) { + if (client.destroyed) { + assert(client[kPending] === 0); + return; + } + if (client[kClosedResolve] && !client[kSize]) { + client[kClosedResolve](); + client[kClosedResolve] = null; + return; + } + if (client[kHTTPContext]) { + client[kHTTPContext].resume(); + } + if (client[kBusy]) { + client[kNeedDrain] = 2; + } else if (client[kNeedDrain] === 2) { + if (sync) { + client[kNeedDrain] = 1; + queueMicrotask(() => emitDrain(client)); + } else { + emitDrain(client); + } + continue; + } + if (client[kPending] === 0) { + return; + } + if (client[kRunning] >= (getPipelining(client) || 1)) { + return; + } + const request2 = client[kQueue][client[kPendingIdx]]; + if (client[kUrl].protocol === "https:" && client[kServerName] !== request2.servername) { + if (client[kRunning] > 0) { + return; + } + client[kServerName] = request2.servername; + client[kHTTPContext]?.destroy(new InformationalError("servername changed"), () => { + client[kHTTPContext] = null; + resume(client); + }); + } + if (client[kConnecting]) { + return; + } + if (!client[kHTTPContext]) { + connect(client); + return; + } + if (client[kHTTPContext].destroyed) { + return; + } + if (client[kHTTPContext].busy(request2)) { + return; + } + if (!request2.aborted && client[kHTTPContext].write(request2)) { + client[kPendingIdx]++; + } else { + client[kQueue].splice(client[kPendingIdx], 1); + } + } + } + module2.exports = Client; + } +}); + +// node_modules/undici/lib/dispatcher/fixed-queue.js +var require_fixed_queue = __commonJS({ + "node_modules/undici/lib/dispatcher/fixed-queue.js"(exports2, module2) { + "use strict"; + var kSize = 2048; + var kMask = kSize - 1; + var FixedCircularBuffer = class { + constructor() { + this.bottom = 0; + this.top = 0; + this.list = new Array(kSize); + this.next = null; + } + isEmpty() { + return this.top === this.bottom; + } + isFull() { + return (this.top + 1 & kMask) === this.bottom; + } + push(data) { + this.list[this.top] = data; + this.top = this.top + 1 & kMask; + } + shift() { + const nextItem = this.list[this.bottom]; + if (nextItem === void 0) + return null; + this.list[this.bottom] = void 0; + this.bottom = this.bottom + 1 & kMask; + return nextItem; + } + }; + module2.exports = class FixedQueue { + constructor() { + this.head = this.tail = new FixedCircularBuffer(); + } + isEmpty() { + return this.head.isEmpty(); + } + push(data) { + if (this.head.isFull()) { + this.head = this.head.next = new FixedCircularBuffer(); + } + this.head.push(data); + } + shift() { + const tail = this.tail; + const next = tail.shift(); + if (tail.isEmpty() && tail.next !== null) { + this.tail = tail.next; + } + return next; + } + }; + } +}); + +// node_modules/undici/lib/dispatcher/pool-stats.js +var require_pool_stats = __commonJS({ + "node_modules/undici/lib/dispatcher/pool-stats.js"(exports2, module2) { + var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols(); + var kPool = /* @__PURE__ */ Symbol("pool"); + var PoolStats = class { + constructor(pool) { + this[kPool] = pool; + } + get connected() { + return this[kPool][kConnected]; + } + get free() { + return this[kPool][kFree]; + } + get pending() { + return this[kPool][kPending]; + } + get queued() { + return this[kPool][kQueued]; + } + get running() { + return this[kPool][kRunning]; + } + get size() { + return this[kPool][kSize]; + } + }; + module2.exports = PoolStats; + } +}); + +// node_modules/undici/lib/dispatcher/pool-base.js +var require_pool_base = __commonJS({ + "node_modules/undici/lib/dispatcher/pool-base.js"(exports2, module2) { + "use strict"; + var DispatcherBase = require_dispatcher_base(); + var FixedQueue = require_fixed_queue(); + var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols(); + var PoolStats = require_pool_stats(); + var kClients = /* @__PURE__ */ Symbol("clients"); + var kNeedDrain = /* @__PURE__ */ Symbol("needDrain"); + var kQueue = /* @__PURE__ */ Symbol("queue"); + var kClosedResolve = /* @__PURE__ */ Symbol("closed resolve"); + var kOnDrain = /* @__PURE__ */ Symbol("onDrain"); + var kOnConnect = /* @__PURE__ */ Symbol("onConnect"); + var kOnDisconnect = /* @__PURE__ */ Symbol("onDisconnect"); + var kOnConnectionError = /* @__PURE__ */ Symbol("onConnectionError"); + var kGetDispatcher = /* @__PURE__ */ Symbol("get dispatcher"); + var kAddClient = /* @__PURE__ */ Symbol("add client"); + var kRemoveClient = /* @__PURE__ */ Symbol("remove client"); + var kStats = /* @__PURE__ */ Symbol("stats"); + var PoolBase = class extends DispatcherBase { + constructor(opts) { + super(opts); + this[kQueue] = new FixedQueue(); + this[kClients] = []; + this[kQueued] = 0; + const pool = this; + this[kOnDrain] = function onDrain(origin, targets) { + const queue = pool[kQueue]; + let needDrain = false; + while (!needDrain) { + const item = queue.shift(); + if (!item) { + break; + } + pool[kQueued]--; + needDrain = !this.dispatch(item.opts, item.handler); + } + this[kNeedDrain] = needDrain; + if (!this[kNeedDrain] && pool[kNeedDrain]) { + pool[kNeedDrain] = false; + pool.emit("drain", origin, [pool, ...targets]); + } + if (pool[kClosedResolve] && queue.isEmpty()) { + Promise.all(pool[kClients].map((c) => c.close())).then(pool[kClosedResolve]); + } + }; + this[kOnConnect] = (origin, targets) => { + pool.emit("connect", origin, [pool, ...targets]); + }; + this[kOnDisconnect] = (origin, targets, err) => { + pool.emit("disconnect", origin, [pool, ...targets], err); + }; + this[kOnConnectionError] = (origin, targets, err) => { + pool.emit("connectionError", origin, [pool, ...targets], err); + }; + this[kStats] = new PoolStats(this); + } + get [kBusy]() { + return this[kNeedDrain]; + } + get [kConnected]() { + return this[kClients].filter((client) => client[kConnected]).length; + } + get [kFree]() { + return this[kClients].filter((client) => client[kConnected] && !client[kNeedDrain]).length; + } + get [kPending]() { + let ret = this[kQueued]; + for (const { [kPending]: pending } of this[kClients]) { + ret += pending; + } + return ret; + } + get [kRunning]() { + let ret = 0; + for (const { [kRunning]: running } of this[kClients]) { + ret += running; + } + return ret; + } + get [kSize]() { + let ret = this[kQueued]; + for (const { [kSize]: size } of this[kClients]) { + ret += size; + } + return ret; + } + get stats() { + return this[kStats]; + } + async [kClose]() { + if (this[kQueue].isEmpty()) { + await Promise.all(this[kClients].map((c) => c.close())); + } else { + await new Promise((resolve2) => { + this[kClosedResolve] = resolve2; + }); + } + } + async [kDestroy](err) { + while (true) { + const item = this[kQueue].shift(); + if (!item) { + break; + } + item.handler.onError(err); + } + await Promise.all(this[kClients].map((c) => c.destroy(err))); + } + [kDispatch](opts, handler2) { + const dispatcher = this[kGetDispatcher](); + if (!dispatcher) { + this[kNeedDrain] = true; + this[kQueue].push({ opts, handler: handler2 }); + this[kQueued]++; + } else if (!dispatcher.dispatch(opts, handler2)) { + dispatcher[kNeedDrain] = true; + this[kNeedDrain] = !this[kGetDispatcher](); + } + return !this[kNeedDrain]; + } + [kAddClient](client) { + client.on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]); + this[kClients].push(client); + if (this[kNeedDrain]) { + queueMicrotask(() => { + if (this[kNeedDrain]) { + this[kOnDrain](client[kUrl], [this, client]); + } + }); + } + return this; + } + [kRemoveClient](client) { + client.close(() => { + const idx = this[kClients].indexOf(client); + if (idx !== -1) { + this[kClients].splice(idx, 1); + } + }); + this[kNeedDrain] = this[kClients].some((dispatcher) => !dispatcher[kNeedDrain] && dispatcher.closed !== true && dispatcher.destroyed !== true); + } + }; + module2.exports = { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher + }; + } +}); + +// node_modules/undici/lib/dispatcher/pool.js +var require_pool = __commonJS({ + "node_modules/undici/lib/dispatcher/pool.js"(exports2, module2) { + "use strict"; + var { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kGetDispatcher + } = require_pool_base(); + var Client = require_client(); + var { + InvalidArgumentError + } = require_errors(); + var util2 = require_util(); + var { kUrl, kInterceptors } = require_symbols(); + var buildConnector = require_connect(); + var kOptions = /* @__PURE__ */ Symbol("options"); + var kConnections = /* @__PURE__ */ Symbol("connections"); + var kFactory = /* @__PURE__ */ Symbol("factory"); + function defaultFactory(origin, opts) { + return new Client(origin, opts); + } + var Pool = class extends PoolBase { + constructor(origin, { + connections, + factory = defaultFactory, + connect, + connectTimeout, + tls, + maxCachedSessions, + socketPath, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + allowH2, + ...options + } = {}) { + if (connections != null && (!Number.isFinite(connections) || connections < 0)) { + throw new InvalidArgumentError("invalid connections"); + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + if (connect != null && typeof connect !== "function" && typeof connect !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (typeof connect !== "function") { + connect = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0, + ...connect + }); + } + super(options); + this[kInterceptors] = options.interceptors?.Pool && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : []; + this[kConnections] = connections || null; + this[kUrl] = util2.parseOrigin(origin); + this[kOptions] = { ...util2.deepClone(options), connect, allowH2 }; + this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0; + this[kFactory] = factory; + this.on("connectionError", (origin2, targets, error2) => { + for (const target of targets) { + const idx = this[kClients].indexOf(target); + if (idx !== -1) { + this[kClients].splice(idx, 1); + } + } + }); + } + [kGetDispatcher]() { + for (const client of this[kClients]) { + if (!client[kNeedDrain]) { + return client; + } + } + if (!this[kConnections] || this[kClients].length < this[kConnections]) { + const dispatcher = this[kFactory](this[kUrl], this[kOptions]); + this[kAddClient](dispatcher); + return dispatcher; + } + } + }; + module2.exports = Pool; + } +}); + +// node_modules/undici/lib/dispatcher/balanced-pool.js +var require_balanced_pool = __commonJS({ + "node_modules/undici/lib/dispatcher/balanced-pool.js"(exports2, module2) { + "use strict"; + var { + BalancedPoolMissingUpstreamError, + InvalidArgumentError + } = require_errors(); + var { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher + } = require_pool_base(); + var Pool = require_pool(); + var { kUrl, kInterceptors } = require_symbols(); + var { parseOrigin } = require_util(); + var kFactory = /* @__PURE__ */ Symbol("factory"); + var kOptions = /* @__PURE__ */ Symbol("options"); + var kGreatestCommonDivisor = /* @__PURE__ */ Symbol("kGreatestCommonDivisor"); + var kCurrentWeight = /* @__PURE__ */ Symbol("kCurrentWeight"); + var kIndex = /* @__PURE__ */ Symbol("kIndex"); + var kWeight = /* @__PURE__ */ Symbol("kWeight"); + var kMaxWeightPerServer = /* @__PURE__ */ Symbol("kMaxWeightPerServer"); + var kErrorPenalty = /* @__PURE__ */ Symbol("kErrorPenalty"); + function getGreatestCommonDivisor(a, b) { + if (a === 0) return b; + while (b !== 0) { + const t = b; + b = a % b; + a = t; + } + return a; + } + function defaultFactory(origin, opts) { + return new Pool(origin, opts); + } + var BalancedPool = class extends PoolBase { + constructor(upstreams = [], { factory = defaultFactory, ...opts } = {}) { + super(); + this[kOptions] = opts; + this[kIndex] = -1; + this[kCurrentWeight] = 0; + this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100; + this[kErrorPenalty] = this[kOptions].errorPenalty || 15; + if (!Array.isArray(upstreams)) { + upstreams = [upstreams]; + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + this[kInterceptors] = opts.interceptors?.BalancedPool && Array.isArray(opts.interceptors.BalancedPool) ? opts.interceptors.BalancedPool : []; + this[kFactory] = factory; + for (const upstream of upstreams) { + this.addUpstream(upstream); + } + this._updateBalancedPoolStats(); + } + addUpstream(upstream) { + const upstreamOrigin = parseOrigin(upstream).origin; + if (this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true)) { + return this; + } + const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions])); + this[kAddClient](pool); + pool.on("connect", () => { + pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]); + }); + pool.on("connectionError", () => { + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]); + this._updateBalancedPoolStats(); + }); + pool.on("disconnect", (...args) => { + const err = args[2]; + if (err && err.code === "UND_ERR_SOCKET") { + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]); + this._updateBalancedPoolStats(); + } + }); + for (const client of this[kClients]) { + client[kWeight] = this[kMaxWeightPerServer]; + } + this._updateBalancedPoolStats(); + return this; + } + _updateBalancedPoolStats() { + let result = 0; + for (let i = 0; i < this[kClients].length; i++) { + result = getGreatestCommonDivisor(this[kClients][i][kWeight], result); + } + this[kGreatestCommonDivisor] = result; + } + removeUpstream(upstream) { + const upstreamOrigin = parseOrigin(upstream).origin; + const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true); + if (pool) { + this[kRemoveClient](pool); + } + return this; + } + get upstreams() { + return this[kClients].filter((dispatcher) => dispatcher.closed !== true && dispatcher.destroyed !== true).map((p) => p[kUrl].origin); + } + [kGetDispatcher]() { + if (this[kClients].length === 0) { + throw new BalancedPoolMissingUpstreamError(); + } + const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.destroyed !== true); + if (!dispatcher) { + return; + } + const allClientsBusy = this[kClients].map((pool) => pool[kNeedDrain]).reduce((a, b) => a && b, true); + if (allClientsBusy) { + return; + } + let counter = 0; + let maxWeightIndex = this[kClients].findIndex((pool) => !pool[kNeedDrain]); + while (counter++ < this[kClients].length) { + this[kIndex] = (this[kIndex] + 1) % this[kClients].length; + const pool = this[kClients][this[kIndex]]; + if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { + maxWeightIndex = this[kIndex]; + } + if (this[kIndex] === 0) { + this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]; + if (this[kCurrentWeight] <= 0) { + this[kCurrentWeight] = this[kMaxWeightPerServer]; + } + } + if (pool[kWeight] >= this[kCurrentWeight] && !pool[kNeedDrain]) { + return pool; + } + } + this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]; + this[kIndex] = maxWeightIndex; + return this[kClients][maxWeightIndex]; + } + }; + module2.exports = BalancedPool; + } +}); + +// node_modules/undici/lib/dispatcher/agent.js +var require_agent = __commonJS({ + "node_modules/undici/lib/dispatcher/agent.js"(exports2, module2) { + "use strict"; + var { InvalidArgumentError } = require_errors(); + var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); + var DispatcherBase = require_dispatcher_base(); + var Pool = require_pool(); + var Client = require_client(); + var util2 = require_util(); + var createRedirectInterceptor = require_redirect_interceptor(); + var kOnConnect = /* @__PURE__ */ Symbol("onConnect"); + var kOnDisconnect = /* @__PURE__ */ Symbol("onDisconnect"); + var kOnConnectionError = /* @__PURE__ */ Symbol("onConnectionError"); + var kMaxRedirections = /* @__PURE__ */ Symbol("maxRedirections"); + var kOnDrain = /* @__PURE__ */ Symbol("onDrain"); + var kFactory = /* @__PURE__ */ Symbol("factory"); + var kOptions = /* @__PURE__ */ Symbol("options"); + function defaultFactory(origin, opts) { + return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts); + } + var Agent3 = class extends DispatcherBase { + constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) { + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + if (connect != null && typeof connect !== "function" && typeof connect !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (!Number.isInteger(maxRedirections) || maxRedirections < 0) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + super(options); + if (connect && typeof connect !== "function") { + connect = { ...connect }; + } + this[kInterceptors] = options.interceptors?.Agent && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })]; + this[kOptions] = { ...util2.deepClone(options), connect }; + this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0; + this[kMaxRedirections] = maxRedirections; + this[kFactory] = factory; + this[kClients] = /* @__PURE__ */ new Map(); + this[kOnDrain] = (origin, targets) => { + this.emit("drain", origin, [this, ...targets]); + }; + this[kOnConnect] = (origin, targets) => { + this.emit("connect", origin, [this, ...targets]); + }; + this[kOnDisconnect] = (origin, targets, err) => { + this.emit("disconnect", origin, [this, ...targets], err); + }; + this[kOnConnectionError] = (origin, targets, err) => { + this.emit("connectionError", origin, [this, ...targets], err); + }; + } + get [kRunning]() { + let ret = 0; + for (const client of this[kClients].values()) { + ret += client[kRunning]; + } + return ret; + } + [kDispatch](opts, handler2) { + let key; + if (opts.origin && (typeof opts.origin === "string" || opts.origin instanceof URL)) { + key = String(opts.origin); + } else { + throw new InvalidArgumentError("opts.origin must be a non-empty string or URL."); + } + let dispatcher = this[kClients].get(key); + if (!dispatcher) { + dispatcher = this[kFactory](opts.origin, this[kOptions]).on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]); + this[kClients].set(key, dispatcher); + } + return dispatcher.dispatch(opts, handler2); + } + async [kClose]() { + const closePromises = []; + for (const client of this[kClients].values()) { + closePromises.push(client.close()); + } + this[kClients].clear(); + await Promise.all(closePromises); + } + async [kDestroy](err) { + const destroyPromises = []; + for (const client of this[kClients].values()) { + destroyPromises.push(client.destroy(err)); + } + this[kClients].clear(); + await Promise.all(destroyPromises); + } + }; + module2.exports = Agent3; + } +}); + +// node_modules/undici/lib/dispatcher/proxy-agent.js +var require_proxy_agent = __commonJS({ + "node_modules/undici/lib/dispatcher/proxy-agent.js"(exports2, module2) { + "use strict"; + var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); + var { URL: URL2 } = require("node:url"); + var Agent3 = require_agent(); + var Pool = require_pool(); + var DispatcherBase = require_dispatcher_base(); + var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors(); + var buildConnector = require_connect(); + var Client = require_client(); + var kAgent = /* @__PURE__ */ Symbol("proxy agent"); + var kClient = /* @__PURE__ */ Symbol("proxy client"); + var kProxyHeaders = /* @__PURE__ */ Symbol("proxy headers"); + var kRequestTls = /* @__PURE__ */ Symbol("request tls settings"); + var kProxyTls = /* @__PURE__ */ Symbol("proxy tls settings"); + var kConnectEndpoint = /* @__PURE__ */ Symbol("connect endpoint function"); + var kTunnelProxy = /* @__PURE__ */ Symbol("tunnel proxy"); + function defaultProtocolPort(protocol) { + return protocol === "https:" ? 443 : 80; + } + function defaultFactory(origin, opts) { + return new Pool(origin, opts); + } + var noop3 = () => { + }; + function defaultAgentFactory(origin, opts) { + if (opts.connections === 1) { + return new Client(origin, opts); + } + return new Pool(origin, opts); + } + var Http1ProxyWrapper = class extends DispatcherBase { + #client; + constructor(proxyUrl, { headers = {}, connect, factory }) { + super(); + if (!proxyUrl) { + throw new InvalidArgumentError("Proxy URL is mandatory"); + } + this[kProxyHeaders] = headers; + if (factory) { + this.#client = factory(proxyUrl, { connect }); + } else { + this.#client = new Client(proxyUrl, { connect }); + } + } + [kDispatch](opts, handler2) { + const onHeaders = handler2.onHeaders; + handler2.onHeaders = function(statusCode, data, resume) { + if (statusCode === 407) { + if (typeof handler2.onError === "function") { + handler2.onError(new InvalidArgumentError("Proxy Authentication Required (407)")); + } + return; + } + if (onHeaders) onHeaders.call(this, statusCode, data, resume); + }; + const { + origin, + path: path6 = "/", + headers = {} + } = opts; + opts.path = origin + path6; + if (!("host" in headers) && !("Host" in headers)) { + const { host } = new URL2(origin); + headers.host = host; + } + opts.headers = { ...this[kProxyHeaders], ...headers }; + return this.#client[kDispatch](opts, handler2); + } + async [kClose]() { + return this.#client.close(); + } + async [kDestroy](err) { + return this.#client.destroy(err); + } + }; + var ProxyAgent2 = class extends DispatcherBase { + constructor(opts) { + super(); + if (!opts || typeof opts === "object" && !(opts instanceof URL2) && !opts.uri) { + throw new InvalidArgumentError("Proxy uri is mandatory"); + } + const { clientFactory = defaultFactory } = opts; + if (typeof clientFactory !== "function") { + throw new InvalidArgumentError("Proxy opts.clientFactory must be a function."); + } + const { proxyTunnel = true } = opts; + const url = this.#getUrl(opts); + const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url; + this[kProxy] = { uri: href, protocol }; + this[kInterceptors] = opts.interceptors?.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : []; + this[kRequestTls] = opts.requestTls; + this[kProxyTls] = opts.proxyTls; + this[kProxyHeaders] = opts.headers || {}; + this[kTunnelProxy] = proxyTunnel; + if (opts.auth && opts.token) { + throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token"); + } else if (opts.auth) { + this[kProxyHeaders]["proxy-authorization"] = `Basic ${opts.auth}`; + } else if (opts.token) { + this[kProxyHeaders]["proxy-authorization"] = opts.token; + } else if (username && password) { + this[kProxyHeaders]["proxy-authorization"] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString("base64")}`; + } + const connect = buildConnector({ ...opts.proxyTls }); + this[kConnectEndpoint] = buildConnector({ ...opts.requestTls }); + const agentFactory = opts.factory || defaultAgentFactory; + const factory = (origin2, options) => { + const { protocol: protocol2 } = new URL2(origin2); + if (!this[kTunnelProxy] && protocol2 === "http:" && this[kProxy].protocol === "http:") { + return new Http1ProxyWrapper(this[kProxy].uri, { + headers: this[kProxyHeaders], + connect, + factory: agentFactory + }); + } + return agentFactory(origin2, options); + }; + this[kClient] = clientFactory(url, { connect }); + this[kAgent] = new Agent3({ + ...opts, + factory, + connect: async (opts2, callback) => { + let requestedPath = opts2.host; + if (!opts2.port) { + requestedPath += `:${defaultProtocolPort(opts2.protocol)}`; + } + try { + const { socket, statusCode } = await this[kClient].connect({ + origin, + port, + path: requestedPath, + signal: opts2.signal, + headers: { + ...this[kProxyHeaders], + host: opts2.host + }, + servername: this[kProxyTls]?.servername || proxyHostname + }); + if (statusCode !== 200) { + socket.on("error", noop3).destroy(); + callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)); + } + if (opts2.protocol !== "https:") { + callback(null, socket); + return; + } + let servername; + if (this[kRequestTls]) { + servername = this[kRequestTls].servername; + } else { + servername = opts2.servername; + } + this[kConnectEndpoint]({ ...opts2, servername, httpSocket: socket }, callback); + } catch (err) { + if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { + callback(new SecureProxyConnectionError(err)); + } else { + callback(err); + } + } + } + }); + } + dispatch(opts, handler2) { + const headers = buildHeaders(opts.headers); + throwIfProxyAuthIsSent(headers); + if (headers && !("host" in headers) && !("Host" in headers)) { + const { host } = new URL2(opts.origin); + headers.host = host; + } + return this[kAgent].dispatch( + { + ...opts, + headers + }, + handler2 + ); + } + /** + * @param {import('../types/proxy-agent').ProxyAgent.Options | string | URL} opts + * @returns {URL} + */ + #getUrl(opts) { + if (typeof opts === "string") { + return new URL2(opts); + } else if (opts instanceof URL2) { + return opts; + } else { + return new URL2(opts.uri); + } + } + async [kClose]() { + await this[kAgent].close(); + await this[kClient].close(); + } + async [kDestroy]() { + await this[kAgent].destroy(); + await this[kClient].destroy(); + } + }; + function buildHeaders(headers) { + if (Array.isArray(headers)) { + const headersPair = {}; + for (let i = 0; i < headers.length; i += 2) { + headersPair[headers[i]] = headers[i + 1]; + } + return headersPair; + } + return headers; + } + function throwIfProxyAuthIsSent(headers) { + const existProxyAuth = headers && Object.keys(headers).find((key) => key.toLowerCase() === "proxy-authorization"); + if (existProxyAuth) { + throw new InvalidArgumentError("Proxy-Authorization should be sent in ProxyAgent constructor"); + } + } + module2.exports = ProxyAgent2; + } +}); + +// node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +var require_env_http_proxy_agent = __commonJS({ + "node_modules/undici/lib/dispatcher/env-http-proxy-agent.js"(exports2, module2) { + "use strict"; + var DispatcherBase = require_dispatcher_base(); + var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols(); + var ProxyAgent2 = require_proxy_agent(); + var Agent3 = require_agent(); + var DEFAULT_PORTS = { + "http:": 80, + "https:": 443 + }; + var experimentalWarned = false; + var EnvHttpProxyAgent = class extends DispatcherBase { + #noProxyValue = null; + #noProxyEntries = null; + #opts = null; + constructor(opts = {}) { + super(); + this.#opts = opts; + if (!experimentalWarned) { + experimentalWarned = true; + process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.", { + code: "UNDICI-EHPA" + }); + } + const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts; + this[kNoProxyAgent] = new Agent3(agentOpts); + const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY; + if (HTTP_PROXY) { + this[kHttpProxyAgent] = new ProxyAgent2({ ...agentOpts, uri: HTTP_PROXY }); + } else { + this[kHttpProxyAgent] = this[kNoProxyAgent]; + } + const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY; + if (HTTPS_PROXY) { + this[kHttpsProxyAgent] = new ProxyAgent2({ ...agentOpts, uri: HTTPS_PROXY }); + } else { + this[kHttpsProxyAgent] = this[kHttpProxyAgent]; + } + this.#parseNoProxy(); + } + [kDispatch](opts, handler2) { + const url = new URL(opts.origin); + const agent = this.#getProxyAgentForUrl(url); + return agent.dispatch(opts, handler2); + } + async [kClose]() { + await this[kNoProxyAgent].close(); + if (!this[kHttpProxyAgent][kClosed]) { + await this[kHttpProxyAgent].close(); + } + if (!this[kHttpsProxyAgent][kClosed]) { + await this[kHttpsProxyAgent].close(); + } + } + async [kDestroy](err) { + await this[kNoProxyAgent].destroy(err); + if (!this[kHttpProxyAgent][kDestroyed]) { + await this[kHttpProxyAgent].destroy(err); + } + if (!this[kHttpsProxyAgent][kDestroyed]) { + await this[kHttpsProxyAgent].destroy(err); + } + } + #getProxyAgentForUrl(url) { + let { protocol, host: hostname, port } = url; + hostname = hostname.replace(/:\d*$/, "").toLowerCase(); + port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0; + if (!this.#shouldProxy(hostname, port)) { + return this[kNoProxyAgent]; + } + if (protocol === "https:") { + return this[kHttpsProxyAgent]; + } + return this[kHttpProxyAgent]; + } + #shouldProxy(hostname, port) { + if (this.#noProxyChanged) { + this.#parseNoProxy(); + } + if (this.#noProxyEntries.length === 0) { + return true; + } + if (this.#noProxyValue === "*") { + return false; + } + for (let i = 0; i < this.#noProxyEntries.length; i++) { + const entry = this.#noProxyEntries[i]; + if (entry.port && entry.port !== port) { + continue; + } + if (!/^[.*]/.test(entry.hostname)) { + if (hostname === entry.hostname) { + return false; + } + } else { + if (hostname.endsWith(entry.hostname.replace(/^\*/, ""))) { + return false; + } + } + } + return true; + } + #parseNoProxy() { + const noProxyValue = this.#opts.noProxy ?? this.#noProxyEnv; + const noProxySplit = noProxyValue.split(/[,\s]/); + const noProxyEntries = []; + for (let i = 0; i < noProxySplit.length; i++) { + const entry = noProxySplit[i]; + if (!entry) { + continue; + } + const parsed = entry.match(/^(.+):(\d+)$/); + noProxyEntries.push({ + hostname: (parsed ? parsed[1] : entry).toLowerCase(), + port: parsed ? Number.parseInt(parsed[2], 10) : 0 + }); + } + this.#noProxyValue = noProxyValue; + this.#noProxyEntries = noProxyEntries; + } + get #noProxyChanged() { + if (this.#opts.noProxy !== void 0) { + return false; + } + return this.#noProxyValue !== this.#noProxyEnv; + } + get #noProxyEnv() { + return process.env.no_proxy ?? process.env.NO_PROXY ?? ""; + } + }; + module2.exports = EnvHttpProxyAgent; + } +}); + +// node_modules/undici/lib/handler/retry-handler.js +var require_retry_handler = __commonJS({ + "node_modules/undici/lib/handler/retry-handler.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var { kRetryHandlerDefaultRetry } = require_symbols(); + var { RequestRetryError } = require_errors(); + var { + isDisturbed, + parseHeaders, + parseRangeHeader, + wrapRequestBody + } = require_util(); + function calculateRetryAfterHeader(retryAfter) { + const current = Date.now(); + return new Date(retryAfter).getTime() - current; + } + function validatePartialResponseContentLength(headers, range, statusCode, retryCount) { + const contentLength = headers["content-length"]; + if (contentLength == null) { + return null; + } + if (!Number.isFinite(range.start) || !Number.isFinite(range.end)) { + return null; + } + const length = Number(contentLength); + const expectedLength = range.end - range.start + 1; + if (!Number.isFinite(length) || length !== expectedLength) { + return new RequestRetryError("Content-Length mismatch", statusCode, { + headers, + data: { count: retryCount } + }); + } + return null; + } + var RetryHandler = class _RetryHandler { + constructor(opts, handlers) { + const { retryOptions, ...dispatchOpts } = opts; + const { + // Retry scoped + retry: retryFn, + maxRetries, + maxTimeout, + minTimeout, + timeoutFactor, + // Response scoped + methods, + errorCodes, + retryAfter, + statusCodes + } = retryOptions ?? {}; + this.dispatch = handlers.dispatch; + this.handler = handlers.handler; + this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) }; + this.abort = null; + this.aborted = false; + this.retryOpts = { + retry: retryFn ?? _RetryHandler[kRetryHandlerDefaultRetry], + retryAfter: retryAfter ?? true, + maxTimeout: maxTimeout ?? 30 * 1e3, + // 30s, + minTimeout: minTimeout ?? 500, + // .5s + timeoutFactor: timeoutFactor ?? 2, + maxRetries: maxRetries ?? 5, + // What errors we should retry + methods: methods ?? ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"], + // Indicates which errors to retry + statusCodes: statusCodes ?? [500, 502, 503, 504, 429], + // List of errors to retry + errorCodes: errorCodes ?? [ + "ECONNRESET", + "ECONNREFUSED", + "ENOTFOUND", + "ENETDOWN", + "ENETUNREACH", + "EHOSTDOWN", + "EHOSTUNREACH", + "EPIPE", + "UND_ERR_SOCKET" + ] + }; + this.retryCount = 0; + this.retryCountCheckpoint = 0; + this.start = 0; + this.end = null; + this.etag = null; + this.resume = null; + this.handler.onConnect((reason) => { + this.aborted = true; + if (this.abort) { + this.abort(reason); + } else { + this.reason = reason; + } + }); + } + onRequestSent() { + if (this.handler.onRequestSent) { + this.handler.onRequestSent(); + } + } + onUpgrade(statusCode, headers, socket) { + if (this.handler.onUpgrade) { + this.handler.onUpgrade(statusCode, headers, socket); + } + } + onConnect(abort) { + if (this.aborted) { + abort(this.reason); + } else { + this.abort = abort; + } + } + onBodySent(chunk) { + if (this.handler.onBodySent) return this.handler.onBodySent(chunk); + } + static [kRetryHandlerDefaultRetry](err, { state, opts }, cb) { + const { statusCode, code, headers } = err; + const { method, retryOptions } = opts; + const { + maxRetries, + minTimeout, + maxTimeout, + timeoutFactor, + statusCodes, + errorCodes, + methods + } = retryOptions; + const { counter } = state; + if (code && code !== "UND_ERR_REQ_RETRY" && !errorCodes.includes(code)) { + cb(err); + return; + } + if (Array.isArray(methods) && !methods.includes(method)) { + cb(err); + return; + } + if (statusCode != null && Array.isArray(statusCodes) && !statusCodes.includes(statusCode)) { + cb(err); + return; + } + if (counter > maxRetries) { + cb(err); + return; + } + let retryAfterHeader = headers?.["retry-after"]; + if (retryAfterHeader) { + retryAfterHeader = Number(retryAfterHeader); + retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3; + } + const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout); + setTimeout(() => cb(null), retryTimeout); + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const headers = parseHeaders(rawHeaders); + this.retryCount += 1; + if (statusCode >= 300) { + if (this.retryOpts.statusCodes.includes(statusCode) === false) { + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } else { + this.abort( + new RequestRetryError("Request failed", statusCode, { + headers, + data: { + count: this.retryCount + } + }) + ); + return false; + } + } + if (this.resume != null) { + this.resume = null; + if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) { + this.abort( + new RequestRetryError("server does not support the range header and the payload was partially consumed", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + const contentRange = parseRangeHeader(headers["content-range"]); + if (!contentRange) { + this.abort( + new RequestRetryError("Content-Range mismatch", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + if (this.etag != null && this.etag !== headers.etag) { + this.abort( + new RequestRetryError("ETag mismatch", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + const contentLengthError = validatePartialResponseContentLength(headers, contentRange, statusCode, this.retryCount); + if (contentLengthError != null) { + this.abort(contentLengthError); + return false; + } + const { start, size, end = size - 1 } = contentRange; + assert(this.start === start, "content-range mismatch"); + assert(this.end == null || this.end === end, "content-range mismatch"); + this.resume = resume; + return true; + } + if (this.end == null) { + if (statusCode === 206) { + const range = parseRangeHeader(headers["content-range"]); + if (range == null) { + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + const contentLengthError = validatePartialResponseContentLength(headers, range, statusCode, this.retryCount); + if (contentLengthError != null) { + this.abort(contentLengthError); + return false; + } + const { start, size, end = size - 1 } = range; + assert( + start != null && Number.isFinite(start), + "content-range mismatch" + ); + assert(end != null && Number.isFinite(end), "invalid content-length"); + this.start = start; + this.end = end; + } + if (this.end == null) { + const contentLength = headers["content-length"]; + this.end = contentLength != null ? Number(contentLength) - 1 : null; + } + assert(Number.isFinite(this.start)); + assert( + this.end == null || Number.isFinite(this.end), + "invalid content-length" + ); + this.resume = resume; + this.etag = headers.etag != null ? headers.etag : null; + if (this.etag != null && this.etag.startsWith("W/")) { + this.etag = null; + } + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + const err = new RequestRetryError("Request failed", statusCode, { + headers, + data: { count: this.retryCount } + }); + this.abort(err); + return false; + } + onData(chunk) { + this.start += chunk.length; + return this.handler.onData(chunk); + } + onComplete(rawTrailers) { + this.retryCount = 0; + return this.handler.onComplete(rawTrailers); + } + onError(err) { + if (this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err); + } + if (this.retryCount - this.retryCountCheckpoint > 0) { + this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint); + } else { + this.retryCount += 1; + } + this.retryOpts.retry( + err, + { + state: { counter: this.retryCount }, + opts: { retryOptions: this.retryOpts, ...this.opts } + }, + onRetry.bind(this) + ); + function onRetry(err2) { + if (err2 != null || this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err2); + } + if (this.start !== 0) { + const headers = { range: `bytes=${this.start}-${this.end ?? ""}` }; + if (this.etag != null) { + headers["if-match"] = this.etag; + } + this.opts = { + ...this.opts, + headers: { + ...this.opts.headers, + ...headers + } + }; + } + try { + this.retryCountCheckpoint = this.retryCount; + this.dispatch(this.opts, this); + } catch (err3) { + this.handler.onError(err3); + } + } + } + }; + module2.exports = RetryHandler; + } +}); + +// node_modules/undici/lib/dispatcher/retry-agent.js +var require_retry_agent = __commonJS({ + "node_modules/undici/lib/dispatcher/retry-agent.js"(exports2, module2) { + "use strict"; + var Dispatcher = require_dispatcher(); + var RetryHandler = require_retry_handler(); + var RetryAgent = class extends Dispatcher { + #agent = null; + #options = null; + constructor(agent, options = {}) { + super(options); + this.#agent = agent; + this.#options = options; + } + dispatch(opts, handler2) { + const retry = new RetryHandler({ + ...opts, + retryOptions: this.#options + }, { + dispatch: this.#agent.dispatch.bind(this.#agent), + handler: handler2 + }); + return this.#agent.dispatch(opts, retry); + } + close() { + return this.#agent.close(); + } + destroy() { + return this.#agent.destroy(); + } + }; + module2.exports = RetryAgent; + } +}); + +// node_modules/undici/lib/api/readable.js +var require_readable = __commonJS({ + "node_modules/undici/lib/api/readable.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var { Readable } = require("node:stream"); + var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors(); + var util2 = require_util(); + var { ReadableStreamFrom } = require_util(); + var kConsume = /* @__PURE__ */ Symbol("kConsume"); + var kReading = /* @__PURE__ */ Symbol("kReading"); + var kBody = /* @__PURE__ */ Symbol("kBody"); + var kAbort = /* @__PURE__ */ Symbol("kAbort"); + var kContentType = /* @__PURE__ */ Symbol("kContentType"); + var kContentLength = /* @__PURE__ */ Symbol("kContentLength"); + var noop3 = () => { + }; + var BodyReadable = class extends Readable { + constructor({ + resume, + abort, + contentType = "", + contentLength, + highWaterMark = 64 * 1024 + // Same as nodejs fs streams. + }) { + super({ + autoDestroy: true, + read: resume, + highWaterMark + }); + this._readableState.dataEmitted = false; + this[kAbort] = abort; + this[kConsume] = null; + this[kBody] = null; + this[kContentType] = contentType; + this[kContentLength] = contentLength; + this[kReading] = false; + } + destroy(err) { + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError(); + } + if (err) { + this[kAbort](); + } + return super.destroy(err); + } + _destroy(err, callback) { + if (!this[kReading]) { + setImmediate(() => { + callback(err); + }); + } else { + callback(err); + } + } + on(ev, ...args) { + if (ev === "data" || ev === "readable") { + this[kReading] = true; + } + return super.on(ev, ...args); + } + addListener(ev, ...args) { + return this.on(ev, ...args); + } + off(ev, ...args) { + const ret = super.off(ev, ...args); + if (ev === "data" || ev === "readable") { + this[kReading] = this.listenerCount("data") > 0 || this.listenerCount("readable") > 0; + } + return ret; + } + removeListener(ev, ...args) { + return this.off(ev, ...args); + } + push(chunk) { + if (this[kConsume] && chunk !== null) { + consumePush(this[kConsume], chunk); + return this[kReading] ? super.push(chunk) : true; + } + return super.push(chunk); + } + // https://fetch.spec.whatwg.org/#dom-body-text + async text() { + return consume(this, "text"); + } + // https://fetch.spec.whatwg.org/#dom-body-json + async json() { + return consume(this, "json"); + } + // https://fetch.spec.whatwg.org/#dom-body-blob + async blob() { + return consume(this, "blob"); + } + // https://fetch.spec.whatwg.org/#dom-body-bytes + async bytes() { + return consume(this, "bytes"); + } + // https://fetch.spec.whatwg.org/#dom-body-arraybuffer + async arrayBuffer() { + return consume(this, "arrayBuffer"); + } + // https://fetch.spec.whatwg.org/#dom-body-formdata + async formData() { + throw new NotSupportedError(); + } + // https://fetch.spec.whatwg.org/#dom-body-bodyused + get bodyUsed() { + return util2.isDisturbed(this); + } + // https://fetch.spec.whatwg.org/#dom-body-body + get body() { + if (!this[kBody]) { + this[kBody] = ReadableStreamFrom(this); + if (this[kConsume]) { + this[kBody].getReader(); + assert(this[kBody].locked); + } + } + return this[kBody]; + } + async dump(opts) { + let limit = Number.isFinite(opts?.limit) ? opts.limit : 128 * 1024; + const signal = opts?.signal; + if (signal != null && (typeof signal !== "object" || !("aborted" in signal))) { + throw new InvalidArgumentError("signal must be an AbortSignal"); + } + signal?.throwIfAborted(); + if (this._readableState.closeEmitted) { + return null; + } + return await new Promise((resolve2, reject) => { + if (this[kContentLength] > limit) { + this.destroy(new AbortError()); + } + const onAbort = () => { + this.destroy(signal.reason ?? new AbortError()); + }; + signal?.addEventListener("abort", onAbort); + this.on("close", function() { + signal?.removeEventListener("abort", onAbort); + if (signal?.aborted) { + reject(signal.reason ?? new AbortError()); + } else { + resolve2(null); + } + }).on("error", noop3).on("data", function(chunk) { + limit -= chunk.length; + if (limit <= 0) { + this.destroy(); + } + }).resume(); + }); + } + }; + function isLocked(self) { + return self[kBody] && self[kBody].locked === true || self[kConsume]; + } + function isUnusable(self) { + return util2.isDisturbed(self) || isLocked(self); + } + async function consume(stream2, type) { + assert(!stream2[kConsume]); + return new Promise((resolve2, reject) => { + if (isUnusable(stream2)) { + const rState = stream2._readableState; + if (rState.destroyed && rState.closeEmitted === false) { + stream2.on("error", (err) => { + reject(err); + }).on("close", () => { + reject(new TypeError("unusable")); + }); + } else { + reject(rState.errored ?? new TypeError("unusable")); + } + } else { + queueMicrotask(() => { + stream2[kConsume] = { + type, + stream: stream2, + resolve: resolve2, + reject, + length: 0, + body: [] + }; + stream2.on("error", function(err) { + consumeFinish(this[kConsume], err); + }).on("close", function() { + if (this[kConsume].body !== null) { + consumeFinish(this[kConsume], new RequestAbortedError()); + } + }); + consumeStart(stream2[kConsume]); + }); + } + }); + } + function consumeStart(consume2) { + if (consume2.body === null) { + return; + } + const { _readableState: state } = consume2.stream; + if (state.bufferIndex) { + const start = state.bufferIndex; + const end = state.buffer.length; + for (let n = start; n < end; n++) { + consumePush(consume2, state.buffer[n]); + } + } else { + for (const chunk of state.buffer) { + consumePush(consume2, chunk); + } + } + if (state.endEmitted) { + consumeEnd(this[kConsume]); + } else { + consume2.stream.on("end", function() { + consumeEnd(this[kConsume]); + }); + } + consume2.stream.resume(); + while (consume2.stream.read() != null) { + } + } + function chunksDecode(chunks, length) { + if (chunks.length === 0 || length === 0) { + return ""; + } + const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length); + const bufferLength = buffer.length; + const start = bufferLength > 2 && buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191 ? 3 : 0; + return buffer.utf8Slice(start, bufferLength); + } + function chunksConcat(chunks, length) { + if (chunks.length === 0 || length === 0) { + return new Uint8Array(0); + } + if (chunks.length === 1) { + return new Uint8Array(chunks[0]); + } + const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer); + let offset = 0; + for (let i = 0; i < chunks.length; ++i) { + const chunk = chunks[i]; + buffer.set(chunk, offset); + offset += chunk.length; + } + return buffer; + } + function consumeEnd(consume2) { + const { type, body, resolve: resolve2, stream: stream2, length } = consume2; + try { + if (type === "text") { + resolve2(chunksDecode(body, length)); + } else if (type === "json") { + resolve2(JSON.parse(chunksDecode(body, length))); + } else if (type === "arrayBuffer") { + resolve2(chunksConcat(body, length).buffer); + } else if (type === "blob") { + resolve2(new Blob(body, { type: stream2[kContentType] })); + } else if (type === "bytes") { + resolve2(chunksConcat(body, length)); + } + consumeFinish(consume2); + } catch (err) { + stream2.destroy(err); + } + } + function consumePush(consume2, chunk) { + consume2.length += chunk.length; + consume2.body.push(chunk); + } + function consumeFinish(consume2, err) { + if (consume2.body === null) { + return; + } + if (err) { + consume2.reject(err); + } else { + consume2.resolve(); + } + consume2.type = null; + consume2.stream = null; + consume2.resolve = null; + consume2.reject = null; + consume2.length = 0; + consume2.body = null; + } + module2.exports = { Readable: BodyReadable, chunksDecode }; + } +}); + +// node_modules/undici/lib/api/util.js +var require_util3 = __commonJS({ + "node_modules/undici/lib/api/util.js"(exports2, module2) { + var assert = require("node:assert"); + var { + ResponseStatusCodeError + } = require_errors(); + var { chunksDecode } = require_readable(); + var CHUNK_LIMIT = 128 * 1024; + async function getResolveErrorBodyCallback({ callback, body, contentType, statusCode, statusMessage, headers }) { + assert(body); + let chunks = []; + let length = 0; + try { + for await (const chunk of body) { + chunks.push(chunk); + length += chunk.length; + if (length > CHUNK_LIMIT) { + chunks = []; + length = 0; + break; + } + } + } catch { + chunks = []; + length = 0; + } + const message = `Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`; + if (statusCode === 204 || !contentType || !length) { + queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers))); + return; + } + const stackTraceLimit = Error.stackTraceLimit; + Error.stackTraceLimit = 0; + let payload; + try { + if (isContentTypeApplicationJson(contentType)) { + payload = JSON.parse(chunksDecode(chunks, length)); + } else if (isContentTypeText(contentType)) { + payload = chunksDecode(chunks, length); + } + } catch { + } finally { + Error.stackTraceLimit = stackTraceLimit; + } + queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers, payload))); + } + var isContentTypeApplicationJson = (contentType) => { + return contentType.length > 15 && contentType[11] === "/" && contentType[0] === "a" && contentType[1] === "p" && contentType[2] === "p" && contentType[3] === "l" && contentType[4] === "i" && contentType[5] === "c" && contentType[6] === "a" && contentType[7] === "t" && contentType[8] === "i" && contentType[9] === "o" && contentType[10] === "n" && contentType[12] === "j" && contentType[13] === "s" && contentType[14] === "o" && contentType[15] === "n"; + }; + var isContentTypeText = (contentType) => { + return contentType.length > 4 && contentType[4] === "/" && contentType[0] === "t" && contentType[1] === "e" && contentType[2] === "x" && contentType[3] === "t"; + }; + module2.exports = { + getResolveErrorBodyCallback, + isContentTypeApplicationJson, + isContentTypeText + }; + } +}); + +// node_modules/undici/lib/api/api-request.js +var require_api_request = __commonJS({ + "node_modules/undici/lib/api/api-request.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var { Readable } = require_readable(); + var { InvalidArgumentError, RequestAbortedError } = require_errors(); + var util2 = require_util(); + var { getResolveErrorBodyCallback } = require_util3(); + var { AsyncResource } = require("node:async_hooks"); + var RequestHandler = class extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts; + try { + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (highWaterMark && (typeof highWaterMark !== "number" || highWaterMark < 0)) { + throw new InvalidArgumentError("invalid highWaterMark"); + } + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_REQUEST"); + } catch (err) { + if (util2.isStream(body)) { + util2.destroy(body.on("error", util2.nop), err); + } + throw err; + } + this.method = method; + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.callback = callback; + this.res = null; + this.abort = null; + this.body = body; + this.trailers = {}; + this.context = null; + this.onInfo = onInfo || null; + this.throwOnError = throwOnError; + this.highWaterMark = highWaterMark; + this.signal = signal; + this.reason = null; + this.removeAbortListener = null; + if (util2.isStream(body)) { + body.on("error", (err) => { + this.onError(err); + }); + } + if (this.signal) { + if (this.signal.aborted) { + this.reason = this.signal.reason ?? new RequestAbortedError(); + } else { + this.removeAbortListener = util2.addAbortListener(this.signal, () => { + this.reason = this.signal.reason ?? new RequestAbortedError(); + if (this.res) { + util2.destroy(this.res.on("error", util2.nop), this.reason); + } else if (this.abort) { + this.abort(this.reason); + } + if (this.removeAbortListener) { + this.res?.off("close", this.removeAbortListener); + this.removeAbortListener(); + this.removeAbortListener = null; + } + }); + } + } + } + onConnect(abort, context3) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context3; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { callback, opaque, abort, context: context3, responseHeaders, highWaterMark } = this; + const headers = responseHeaders === "raw" ? util2.parseRawHeaders(rawHeaders) : util2.parseHeaders(rawHeaders); + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }); + } + return; + } + const parsedHeaders = responseHeaders === "raw" ? util2.parseHeaders(rawHeaders) : headers; + const contentType = parsedHeaders["content-type"]; + const contentLength = parsedHeaders["content-length"]; + const res = new Readable({ + resume, + abort, + contentType, + contentLength: this.method !== "HEAD" && contentLength ? Number(contentLength) : null, + highWaterMark + }); + if (this.removeAbortListener) { + res.on("close", this.removeAbortListener); + } + this.callback = null; + this.res = res; + if (callback !== null) { + if (this.throwOnError && statusCode >= 400) { + this.runInAsyncScope( + getResolveErrorBodyCallback, + null, + { callback, body: res, contentType, statusCode, statusMessage, headers } + ); + } else { + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + trailers: this.trailers, + opaque, + body: res, + context: context3 + }); + } + } + } + onData(chunk) { + return this.res.push(chunk); + } + onComplete(trailers) { + util2.parseHeaders(trailers, this.trailers); + this.res.push(null); + } + onError(err) { + const { res, callback, body, opaque } = this; + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + if (res) { + this.res = null; + queueMicrotask(() => { + util2.destroy(res, err); + }); + } + if (body) { + this.body = null; + util2.destroy(body, err); + } + if (this.removeAbortListener) { + res?.off("close", this.removeAbortListener); + this.removeAbortListener(); + this.removeAbortListener = null; + } + } + }; + function request2(opts, callback) { + if (callback === void 0) { + return new Promise((resolve2, reject) => { + request2.call(this, opts, (err, data) => { + return err ? reject(err) : resolve2(data); + }); + }); + } + try { + this.dispatch(opts, new RequestHandler(opts, callback)); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module2.exports = request2; + module2.exports.RequestHandler = RequestHandler; + } +}); + +// node_modules/undici/lib/api/abort-signal.js +var require_abort_signal = __commonJS({ + "node_modules/undici/lib/api/abort-signal.js"(exports2, module2) { + var { addAbortListener } = require_util(); + var { RequestAbortedError } = require_errors(); + var kListener = /* @__PURE__ */ Symbol("kListener"); + var kSignal = /* @__PURE__ */ Symbol("kSignal"); + function abort(self) { + if (self.abort) { + self.abort(self[kSignal]?.reason); + } else { + self.reason = self[kSignal]?.reason ?? new RequestAbortedError(); + } + removeSignal(self); + } + function addSignal(self, signal) { + self.reason = null; + self[kSignal] = null; + self[kListener] = null; + if (!signal) { + return; + } + if (signal.aborted) { + abort(self); + return; + } + self[kSignal] = signal; + self[kListener] = () => { + abort(self); + }; + addAbortListener(self[kSignal], self[kListener]); + } + function removeSignal(self) { + if (!self[kSignal]) { + return; + } + if ("removeEventListener" in self[kSignal]) { + self[kSignal].removeEventListener("abort", self[kListener]); + } else { + self[kSignal].removeListener("abort", self[kListener]); + } + self[kSignal] = null; + self[kListener] = null; + } + module2.exports = { + addSignal, + removeSignal + }; + } +}); + +// node_modules/undici/lib/api/api-stream.js +var require_api_stream = __commonJS({ + "node_modules/undici/lib/api/api-stream.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var { finished, PassThrough } = require("node:stream"); + var { InvalidArgumentError, InvalidReturnValueError } = require_errors(); + var util2 = require_util(); + var { getResolveErrorBodyCallback } = require_util3(); + var { AsyncResource } = require("node:async_hooks"); + var { addSignal, removeSignal } = require_abort_signal(); + var StreamHandler = class extends AsyncResource { + constructor(opts, factory, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts; + try { + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("invalid factory"); + } + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_STREAM"); + } catch (err) { + if (util2.isStream(body)) { + util2.destroy(body.on("error", util2.nop), err); + } + throw err; + } + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.factory = factory; + this.callback = callback; + this.res = null; + this.abort = null; + this.context = null; + this.trailers = null; + this.body = body; + this.onInfo = onInfo || null; + this.throwOnError = throwOnError || false; + if (util2.isStream(body)) { + body.on("error", (err) => { + this.onError(err); + }); + } + addSignal(this, signal); + } + onConnect(abort, context3) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context3; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { factory, opaque, context: context3, callback, responseHeaders } = this; + const headers = responseHeaders === "raw" ? util2.parseRawHeaders(rawHeaders) : util2.parseHeaders(rawHeaders); + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }); + } + return; + } + this.factory = null; + let res; + if (this.throwOnError && statusCode >= 400) { + const parsedHeaders = responseHeaders === "raw" ? util2.parseHeaders(rawHeaders) : headers; + const contentType = parsedHeaders["content-type"]; + res = new PassThrough(); + this.callback = null; + this.runInAsyncScope( + getResolveErrorBodyCallback, + null, + { callback, body: res, contentType, statusCode, statusMessage, headers } + ); + } else { + if (factory === null) { + return; + } + res = this.runInAsyncScope(factory, null, { + statusCode, + headers, + opaque, + context: context3 + }); + if (!res || typeof res.write !== "function" || typeof res.end !== "function" || typeof res.on !== "function") { + throw new InvalidReturnValueError("expected Writable"); + } + finished(res, { readable: false }, (err) => { + const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this; + this.res = null; + if (err || !res2.readable) { + util2.destroy(res2, err); + } + this.callback = null; + this.runInAsyncScope(callback2, null, err || null, { opaque: opaque2, trailers }); + if (err) { + abort(); + } + }); + } + res.on("drain", resume); + this.res = res; + const needDrain = res.writableNeedDrain !== void 0 ? res.writableNeedDrain : res._writableState?.needDrain; + return needDrain !== true; + } + onData(chunk) { + const { res } = this; + return res ? res.write(chunk) : true; + } + onComplete(trailers) { + const { res } = this; + removeSignal(this); + if (!res) { + return; + } + this.trailers = util2.parseHeaders(trailers); + res.end(); + } + onError(err) { + const { res, callback, opaque, body } = this; + removeSignal(this); + this.factory = null; + if (res) { + this.res = null; + util2.destroy(res, err); + } else if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + if (body) { + this.body = null; + util2.destroy(body, err); + } + } + }; + function stream2(opts, factory, callback) { + if (callback === void 0) { + return new Promise((resolve2, reject) => { + stream2.call(this, opts, factory, (err, data) => { + return err ? reject(err) : resolve2(data); + }); + }); + } + try { + this.dispatch(opts, new StreamHandler(opts, factory, callback)); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module2.exports = stream2; + } +}); + +// node_modules/undici/lib/api/api-pipeline.js +var require_api_pipeline = __commonJS({ + "node_modules/undici/lib/api/api-pipeline.js"(exports2, module2) { + "use strict"; + var { + Readable, + Duplex, + PassThrough + } = require("node:stream"); + var { + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError + } = require_errors(); + var util2 = require_util(); + var { AsyncResource } = require("node:async_hooks"); + var { addSignal, removeSignal } = require_abort_signal(); + var assert = require("node:assert"); + var kResume = /* @__PURE__ */ Symbol("resume"); + var PipelineRequest = class extends Readable { + constructor() { + super({ autoDestroy: true }); + this[kResume] = null; + } + _read() { + const { [kResume]: resume } = this; + if (resume) { + this[kResume] = null; + resume(); + } + } + _destroy(err, callback) { + this._read(); + callback(err); + } + }; + var PipelineResponse = class extends Readable { + constructor(resume) { + super({ autoDestroy: true }); + this[kResume] = resume; + } + _read() { + this[kResume](); + } + _destroy(err, callback) { + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError(); + } + callback(err); + } + }; + var PipelineHandler = class extends AsyncResource { + constructor(opts, handler2) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof handler2 !== "function") { + throw new InvalidArgumentError("invalid handler"); + } + const { signal, method, opaque, onInfo, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_PIPELINE"); + this.opaque = opaque || null; + this.responseHeaders = responseHeaders || null; + this.handler = handler2; + this.abort = null; + this.context = null; + this.onInfo = onInfo || null; + this.req = new PipelineRequest().on("error", util2.nop); + this.ret = new Duplex({ + readableObjectMode: opts.objectMode, + autoDestroy: true, + read: () => { + const { body } = this; + if (body?.resume) { + body.resume(); + } + }, + write: (chunk, encoding, callback) => { + const { req } = this; + if (req.push(chunk, encoding) || req._readableState.destroyed) { + callback(); + } else { + req[kResume] = callback; + } + }, + destroy: (err, callback) => { + const { body, req, res, ret, abort } = this; + if (!err && !ret._readableState.endEmitted) { + err = new RequestAbortedError(); + } + if (abort && err) { + abort(); + } + util2.destroy(body, err); + util2.destroy(req, err); + util2.destroy(res, err); + removeSignal(this); + callback(err); + } + }).on("prefinish", () => { + const { req } = this; + req.push(null); + }); + this.res = null; + addSignal(this, signal); + } + onConnect(abort, context3) { + const { ret, res } = this; + if (this.reason) { + abort(this.reason); + return; + } + assert(!res, "pipeline cannot be retried"); + assert(!ret.destroyed); + this.abort = abort; + this.context = context3; + } + onHeaders(statusCode, rawHeaders, resume) { + const { opaque, handler: handler2, context: context3 } = this; + if (statusCode < 200) { + if (this.onInfo) { + const headers = this.responseHeaders === "raw" ? util2.parseRawHeaders(rawHeaders) : util2.parseHeaders(rawHeaders); + this.onInfo({ statusCode, headers }); + } + return; + } + this.res = new PipelineResponse(resume); + let body; + try { + this.handler = null; + const headers = this.responseHeaders === "raw" ? util2.parseRawHeaders(rawHeaders) : util2.parseHeaders(rawHeaders); + body = this.runInAsyncScope(handler2, null, { + statusCode, + headers, + opaque, + body: this.res, + context: context3 + }); + } catch (err) { + this.res.on("error", util2.nop); + throw err; + } + if (!body || typeof body.on !== "function") { + throw new InvalidReturnValueError("expected Readable"); + } + body.on("data", (chunk) => { + const { ret, body: body2 } = this; + if (!ret.push(chunk) && body2.pause) { + body2.pause(); + } + }).on("error", (err) => { + const { ret } = this; + util2.destroy(ret, err); + }).on("end", () => { + const { ret } = this; + ret.push(null); + }).on("close", () => { + const { ret } = this; + if (!ret._readableState.ended) { + util2.destroy(ret, new RequestAbortedError()); + } + }); + this.body = body; + } + onData(chunk) { + const { res } = this; + return res.push(chunk); + } + onComplete(trailers) { + const { res } = this; + res.push(null); + } + onError(err) { + const { ret } = this; + this.handler = null; + util2.destroy(ret, err); + } + }; + function pipeline2(opts, handler2) { + try { + const pipelineHandler = new PipelineHandler(opts, handler2); + this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler); + return pipelineHandler.ret; + } catch (err) { + return new PassThrough().destroy(err); + } + } + module2.exports = pipeline2; + } +}); + +// node_modules/undici/lib/api/api-upgrade.js +var require_api_upgrade = __commonJS({ + "node_modules/undici/lib/api/api-upgrade.js"(exports2, module2) { + "use strict"; + var { InvalidArgumentError, SocketError } = require_errors(); + var { AsyncResource } = require("node:async_hooks"); + var util2 = require_util(); + var { addSignal, removeSignal } = require_abort_signal(); + var assert = require("node:assert"); + var UpgradeHandler = class extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + const { signal, opaque, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + super("UNDICI_UPGRADE"); + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.callback = callback; + this.abort = null; + this.context = null; + addSignal(this, signal); + } + onConnect(abort, context3) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = null; + } + onHeaders() { + throw new SocketError("bad upgrade", null); + } + onUpgrade(statusCode, rawHeaders, socket) { + assert(statusCode === 101); + const { callback, opaque, context: context3 } = this; + removeSignal(this); + this.callback = null; + const headers = this.responseHeaders === "raw" ? util2.parseRawHeaders(rawHeaders) : util2.parseHeaders(rawHeaders); + this.runInAsyncScope(callback, null, null, { + headers, + socket, + opaque, + context: context3 + }); + } + onError(err) { + const { callback, opaque } = this; + removeSignal(this); + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + } + }; + function upgrade(opts, callback) { + if (callback === void 0) { + return new Promise((resolve2, reject) => { + upgrade.call(this, opts, (err, data) => { + return err ? reject(err) : resolve2(data); + }); + }); + } + try { + const upgradeHandler = new UpgradeHandler(opts, callback); + this.dispatch({ + ...opts, + method: opts.method || "GET", + upgrade: opts.protocol || "Websocket" + }, upgradeHandler); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module2.exports = upgrade; + } +}); + +// node_modules/undici/lib/api/api-connect.js +var require_api_connect = __commonJS({ + "node_modules/undici/lib/api/api-connect.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var { AsyncResource } = require("node:async_hooks"); + var { InvalidArgumentError, SocketError } = require_errors(); + var util2 = require_util(); + var { addSignal, removeSignal } = require_abort_signal(); + var ConnectHandler = class extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + const { signal, opaque, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + super("UNDICI_CONNECT"); + this.opaque = opaque || null; + this.responseHeaders = responseHeaders || null; + this.callback = callback; + this.abort = null; + addSignal(this, signal); + } + onConnect(abort, context3) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context3; + } + onHeaders() { + throw new SocketError("bad connect", null); + } + onUpgrade(statusCode, rawHeaders, socket) { + const { callback, opaque, context: context3 } = this; + removeSignal(this); + this.callback = null; + let headers = rawHeaders; + if (headers != null) { + headers = this.responseHeaders === "raw" ? util2.parseRawHeaders(rawHeaders) : util2.parseHeaders(rawHeaders); + } + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + socket, + opaque, + context: context3 + }); + } + onError(err) { + const { callback, opaque } = this; + removeSignal(this); + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + } + }; + function connect(opts, callback) { + if (callback === void 0) { + return new Promise((resolve2, reject) => { + connect.call(this, opts, (err, data) => { + return err ? reject(err) : resolve2(data); + }); + }); + } + try { + const connectHandler = new ConnectHandler(opts, callback); + this.dispatch({ ...opts, method: "CONNECT" }, connectHandler); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module2.exports = connect; + } +}); + +// node_modules/undici/lib/api/index.js +var require_api = __commonJS({ + "node_modules/undici/lib/api/index.js"(exports2, module2) { + "use strict"; + module2.exports.request = require_api_request(); + module2.exports.stream = require_api_stream(); + module2.exports.pipeline = require_api_pipeline(); + module2.exports.upgrade = require_api_upgrade(); + module2.exports.connect = require_api_connect(); + } +}); + +// node_modules/undici/lib/mock/mock-errors.js +var require_mock_errors = __commonJS({ + "node_modules/undici/lib/mock/mock-errors.js"(exports2, module2) { + "use strict"; + var { UndiciError } = require_errors(); + var kMockNotMatchedError = /* @__PURE__ */ Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"); + var MockNotMatchedError = class _MockNotMatchedError extends UndiciError { + constructor(message) { + super(message); + Error.captureStackTrace(this, _MockNotMatchedError); + this.name = "MockNotMatchedError"; + this.message = message || "The request does not match any registered mock dispatches"; + this.code = "UND_MOCK_ERR_MOCK_NOT_MATCHED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kMockNotMatchedError] === true; + } + [kMockNotMatchedError] = true; + }; + module2.exports = { + MockNotMatchedError + }; + } +}); + +// node_modules/undici/lib/mock/mock-symbols.js +var require_mock_symbols = __commonJS({ + "node_modules/undici/lib/mock/mock-symbols.js"(exports2, module2) { + "use strict"; + module2.exports = { + kAgent: /* @__PURE__ */ Symbol("agent"), + kOptions: /* @__PURE__ */ Symbol("options"), + kFactory: /* @__PURE__ */ Symbol("factory"), + kDispatches: /* @__PURE__ */ Symbol("dispatches"), + kDispatchKey: /* @__PURE__ */ Symbol("dispatch key"), + kDefaultHeaders: /* @__PURE__ */ Symbol("default headers"), + kDefaultTrailers: /* @__PURE__ */ Symbol("default trailers"), + kContentLength: /* @__PURE__ */ Symbol("content length"), + kMockAgent: /* @__PURE__ */ Symbol("mock agent"), + kMockAgentSet: /* @__PURE__ */ Symbol("mock agent set"), + kMockAgentGet: /* @__PURE__ */ Symbol("mock agent get"), + kMockDispatch: /* @__PURE__ */ Symbol("mock dispatch"), + kClose: /* @__PURE__ */ Symbol("close"), + kOriginalClose: /* @__PURE__ */ Symbol("original agent close"), + kOrigin: /* @__PURE__ */ Symbol("origin"), + kIsMockActive: /* @__PURE__ */ Symbol("is mock active"), + kNetConnect: /* @__PURE__ */ Symbol("net connect"), + kGetNetConnect: /* @__PURE__ */ Symbol("get net connect"), + kConnected: /* @__PURE__ */ Symbol("connected") + }; + } +}); + +// node_modules/undici/lib/mock/mock-utils.js +var require_mock_utils = __commonJS({ + "node_modules/undici/lib/mock/mock-utils.js"(exports2, module2) { + "use strict"; + var { MockNotMatchedError } = require_mock_errors(); + var { + kDispatches, + kMockAgent, + kOriginalDispatch, + kOrigin, + kGetNetConnect + } = require_mock_symbols(); + var { buildURL } = require_util(); + var { STATUS_CODES } = require("node:http"); + var { + types: { + isPromise + } + } = require("node:util"); + function matchValue(match, value) { + if (typeof match === "string") { + return match === value; + } + if (match instanceof RegExp) { + return match.test(value); + } + if (typeof match === "function") { + return match(value) === true; + } + return false; + } + function lowerCaseEntries(headers) { + return Object.fromEntries( + Object.entries(headers).map(([headerName, headerValue]) => { + return [headerName.toLocaleLowerCase(), headerValue]; + }) + ); + } + function getHeaderByName(headers, key) { + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) { + return headers[i + 1]; + } + } + return void 0; + } else if (typeof headers.get === "function") { + return headers.get(key); + } else { + return lowerCaseEntries(headers)[key.toLocaleLowerCase()]; + } + } + function buildHeadersFromArray(headers) { + const clone = headers.slice(); + const entries = []; + for (let index = 0; index < clone.length; index += 2) { + entries.push([clone[index], clone[index + 1]]); + } + return Object.fromEntries(entries); + } + function matchHeaders(mockDispatch2, headers) { + if (typeof mockDispatch2.headers === "function") { + if (Array.isArray(headers)) { + headers = buildHeadersFromArray(headers); + } + return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {}); + } + if (typeof mockDispatch2.headers === "undefined") { + return true; + } + if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") { + return false; + } + for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch2.headers)) { + const headerValue = getHeaderByName(headers, matchHeaderName); + if (!matchValue(matchHeaderValue, headerValue)) { + return false; + } + } + return true; + } + function safeUrl(path6) { + if (typeof path6 !== "string") { + return path6; + } + const pathSegments = path6.split("?"); + if (pathSegments.length !== 2) { + return path6; + } + const qp = new URLSearchParams(pathSegments.pop()); + qp.sort(); + return [...pathSegments, qp.toString()].join("?"); + } + function matchKey(mockDispatch2, { path: path6, method, body, headers }) { + const pathMatch = matchValue(mockDispatch2.path, path6); + const methodMatch = matchValue(mockDispatch2.method, method); + const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true; + const headersMatch = matchHeaders(mockDispatch2, headers); + return pathMatch && methodMatch && bodyMatch && headersMatch; + } + function getResponseData2(data) { + if (Buffer.isBuffer(data)) { + return data; + } else if (data instanceof Uint8Array) { + return data; + } else if (data instanceof ArrayBuffer) { + return data; + } else if (typeof data === "object") { + return JSON.stringify(data); + } else { + return data.toString(); + } + } + function getMockDispatch(mockDispatches, key) { + const basePath = key.query ? buildURL(key.path, key.query) : key.path; + const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath; + let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path6 }) => matchValue(safeUrl(path6), resolvedPath)); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== "undefined" ? matchValue(body, key.body) : true); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter((mockDispatch2) => matchHeaders(mockDispatch2, key.headers)); + if (matchedMockDispatches.length === 0) { + const headers = typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers; + throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`); + } + return matchedMockDispatches[0]; + } + function addMockDispatch(mockDispatches, key, data) { + const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false }; + const replyData = typeof data === "function" ? { callback: data } : { ...data }; + const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }; + mockDispatches.push(newMockDispatch); + return newMockDispatch; + } + function deleteMockDispatch(mockDispatches, key) { + const index = mockDispatches.findIndex((dispatch) => { + if (!dispatch.consumed) { + return false; + } + return matchKey(dispatch, key); + }); + if (index !== -1) { + mockDispatches.splice(index, 1); + } + } + function buildKey(opts) { + const { path: path6, method, body, headers, query } = opts; + return { + path: path6, + method, + body, + headers, + query + }; + } + function generateKeyValues(data) { + const keys = Object.keys(data); + const result = []; + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + const value = data[key]; + const name = Buffer.from(`${key}`); + if (Array.isArray(value)) { + for (let j = 0; j < value.length; ++j) { + result.push(name, Buffer.from(`${value[j]}`)); + } + } else { + result.push(name, Buffer.from(`${value}`)); + } + } + return result; + } + function getStatusText(statusCode) { + return STATUS_CODES[statusCode] || "unknown"; + } + async function getResponse(body) { + const buffers = []; + for await (const data of body) { + buffers.push(data); + } + return Buffer.concat(buffers).toString("utf8"); + } + function mockDispatch(opts, handler2) { + const key = buildKey(opts); + const mockDispatch2 = getMockDispatch(this[kDispatches], key); + mockDispatch2.timesInvoked++; + if (mockDispatch2.data.callback) { + mockDispatch2.data = { ...mockDispatch2.data, ...mockDispatch2.data.callback(opts) }; + } + const { data: { statusCode, data, headers, trailers, error: error2 }, delay, persist } = mockDispatch2; + const { timesInvoked, times } = mockDispatch2; + mockDispatch2.consumed = !persist && timesInvoked >= times; + mockDispatch2.pending = timesInvoked < times; + if (error2 !== null) { + deleteMockDispatch(this[kDispatches], key); + handler2.onError(error2); + return true; + } + if (typeof delay === "number" && delay > 0) { + setTimeout(() => { + handleReply(this[kDispatches]); + }, delay); + } else { + handleReply(this[kDispatches]); + } + function handleReply(mockDispatches, _data = data) { + const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers; + const body = typeof _data === "function" ? _data({ ...opts, headers: optsHeaders }) : _data; + if (isPromise(body)) { + body.then((newData) => handleReply(mockDispatches, newData)); + return; + } + const responseData = getResponseData2(body); + const responseHeaders = generateKeyValues(headers); + const responseTrailers = generateKeyValues(trailers); + handler2.onConnect?.((err) => handler2.onError(err), null); + handler2.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode)); + handler2.onData?.(Buffer.from(responseData)); + handler2.onComplete?.(responseTrailers); + deleteMockDispatch(mockDispatches, key); + } + function resume() { + } + return true; + } + function buildMockDispatch() { + const agent = this[kMockAgent]; + const origin = this[kOrigin]; + const originalDispatch = this[kOriginalDispatch]; + return function dispatch(opts, handler2) { + if (agent.isMockActive) { + try { + mockDispatch.call(this, opts, handler2); + } catch (error2) { + if (error2 instanceof MockNotMatchedError) { + const netConnect = agent[kGetNetConnect](); + if (netConnect === false) { + throw new MockNotMatchedError(`${error2.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`); + } + if (checkNetConnect(netConnect, origin)) { + originalDispatch.call(this, opts, handler2); + } else { + throw new MockNotMatchedError(`${error2.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`); + } + } else { + throw error2; + } + } + } else { + originalDispatch.call(this, opts, handler2); + } + }; + } + function checkNetConnect(netConnect, origin) { + const url = new URL(origin); + if (netConnect === true) { + return true; + } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) { + return true; + } + return false; + } + function buildMockOptions(opts) { + if (opts) { + const { agent, ...mockOptions } = opts; + return mockOptions; + } + } + module2.exports = { + getResponseData: getResponseData2, + getMockDispatch, + addMockDispatch, + deleteMockDispatch, + buildKey, + generateKeyValues, + matchValue, + getResponse, + getStatusText, + mockDispatch, + buildMockDispatch, + checkNetConnect, + buildMockOptions, + getHeaderByName, + buildHeadersFromArray + }; + } +}); + +// node_modules/undici/lib/mock/mock-interceptor.js +var require_mock_interceptor = __commonJS({ + "node_modules/undici/lib/mock/mock-interceptor.js"(exports2, module2) { + "use strict"; + var { getResponseData: getResponseData2, buildKey, addMockDispatch } = require_mock_utils(); + var { + kDispatches, + kDispatchKey, + kDefaultHeaders, + kDefaultTrailers, + kContentLength, + kMockDispatch + } = require_mock_symbols(); + var { InvalidArgumentError } = require_errors(); + var { buildURL } = require_util(); + var MockScope = class { + constructor(mockDispatch) { + this[kMockDispatch] = mockDispatch; + } + /** + * Delay a reply by a set amount in ms. + */ + delay(waitInMs) { + if (typeof waitInMs !== "number" || !Number.isInteger(waitInMs) || waitInMs <= 0) { + throw new InvalidArgumentError("waitInMs must be a valid integer > 0"); + } + this[kMockDispatch].delay = waitInMs; + return this; + } + /** + * For a defined reply, never mark as consumed. + */ + persist() { + this[kMockDispatch].persist = true; + return this; + } + /** + * Allow one to define a reply for a set amount of matching requests. + */ + times(repeatTimes) { + if (typeof repeatTimes !== "number" || !Number.isInteger(repeatTimes) || repeatTimes <= 0) { + throw new InvalidArgumentError("repeatTimes must be a valid integer > 0"); + } + this[kMockDispatch].times = repeatTimes; + return this; + } + }; + var MockInterceptor = class { + constructor(opts, mockDispatches) { + if (typeof opts !== "object") { + throw new InvalidArgumentError("opts must be an object"); + } + if (typeof opts.path === "undefined") { + throw new InvalidArgumentError("opts.path must be defined"); + } + if (typeof opts.method === "undefined") { + opts.method = "GET"; + } + if (typeof opts.path === "string") { + if (opts.query) { + opts.path = buildURL(opts.path, opts.query); + } else { + const parsedURL = new URL(opts.path, "data://"); + opts.path = parsedURL.pathname + parsedURL.search; + } + } + if (typeof opts.method === "string") { + opts.method = opts.method.toUpperCase(); + } + this[kDispatchKey] = buildKey(opts); + this[kDispatches] = mockDispatches; + this[kDefaultHeaders] = {}; + this[kDefaultTrailers] = {}; + this[kContentLength] = false; + } + createMockScopeDispatchData({ statusCode, data, responseOptions }) { + const responseData = getResponseData2(data); + const contentLength = this[kContentLength] ? { "content-length": responseData.length } : {}; + const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }; + const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }; + return { statusCode, data, headers, trailers }; + } + validateReplyParameters(replyParameters) { + if (typeof replyParameters.statusCode === "undefined") { + throw new InvalidArgumentError("statusCode must be defined"); + } + if (typeof replyParameters.responseOptions !== "object" || replyParameters.responseOptions === null) { + throw new InvalidArgumentError("responseOptions must be an object"); + } + } + /** + * Mock an undici request with a defined reply. + */ + reply(replyOptionsCallbackOrStatusCode) { + if (typeof replyOptionsCallbackOrStatusCode === "function") { + const wrappedDefaultsCallback = (opts) => { + const resolvedData = replyOptionsCallbackOrStatusCode(opts); + if (typeof resolvedData !== "object" || resolvedData === null) { + throw new InvalidArgumentError("reply options callback must return an object"); + } + const replyParameters2 = { data: "", responseOptions: {}, ...resolvedData }; + this.validateReplyParameters(replyParameters2); + return { + ...this.createMockScopeDispatchData(replyParameters2) + }; + }; + const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback); + return new MockScope(newMockDispatch2); + } + const replyParameters = { + statusCode: replyOptionsCallbackOrStatusCode, + data: arguments[1] === void 0 ? "" : arguments[1], + responseOptions: arguments[2] === void 0 ? {} : arguments[2] + }; + this.validateReplyParameters(replyParameters); + const dispatchData = this.createMockScopeDispatchData(replyParameters); + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData); + return new MockScope(newMockDispatch); + } + /** + * Mock an undici request with a defined error. + */ + replyWithError(error2) { + if (typeof error2 === "undefined") { + throw new InvalidArgumentError("error must be defined"); + } + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error: error2 }); + return new MockScope(newMockDispatch); + } + /** + * Set default reply headers on the interceptor for subsequent replies + */ + defaultReplyHeaders(headers) { + if (typeof headers === "undefined") { + throw new InvalidArgumentError("headers must be defined"); + } + this[kDefaultHeaders] = headers; + return this; + } + /** + * Set default reply trailers on the interceptor for subsequent replies + */ + defaultReplyTrailers(trailers) { + if (typeof trailers === "undefined") { + throw new InvalidArgumentError("trailers must be defined"); + } + this[kDefaultTrailers] = trailers; + return this; + } + /** + * Set reply content length header for replies on the interceptor + */ + replyContentLength() { + this[kContentLength] = true; + return this; + } + }; + module2.exports.MockInterceptor = MockInterceptor; + module2.exports.MockScope = MockScope; + } +}); + +// node_modules/undici/lib/mock/mock-client.js +var require_mock_client = __commonJS({ + "node_modules/undici/lib/mock/mock-client.js"(exports2, module2) { + "use strict"; + var { promisify: promisify2 } = require("node:util"); + var Client = require_client(); + var { buildMockDispatch } = require_mock_utils(); + var { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected + } = require_mock_symbols(); + var { MockInterceptor } = require_mock_interceptor(); + var Symbols = require_symbols(); + var { InvalidArgumentError } = require_errors(); + var MockClient = class extends Client { + constructor(origin, opts) { + super(origin, opts); + if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + this[kMockAgent] = opts.agent; + this[kOrigin] = origin; + this[kDispatches] = []; + this[kConnected] = 1; + this[kOriginalDispatch] = this.dispatch; + this[kOriginalClose] = this.close.bind(this); + this.dispatch = buildMockDispatch.call(this); + this.close = this[kClose]; + } + get [Symbols.kConnected]() { + return this[kConnected]; + } + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept(opts) { + return new MockInterceptor(opts, this[kDispatches]); + } + async [kClose]() { + await promisify2(this[kOriginalClose])(); + this[kConnected] = 0; + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); + } + }; + module2.exports = MockClient; + } +}); + +// node_modules/undici/lib/mock/mock-pool.js +var require_mock_pool = __commonJS({ + "node_modules/undici/lib/mock/mock-pool.js"(exports2, module2) { + "use strict"; + var { promisify: promisify2 } = require("node:util"); + var Pool = require_pool(); + var { buildMockDispatch } = require_mock_utils(); + var { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected + } = require_mock_symbols(); + var { MockInterceptor } = require_mock_interceptor(); + var Symbols = require_symbols(); + var { InvalidArgumentError } = require_errors(); + var MockPool = class extends Pool { + constructor(origin, opts) { + super(origin, opts); + if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + this[kMockAgent] = opts.agent; + this[kOrigin] = origin; + this[kDispatches] = []; + this[kConnected] = 1; + this[kOriginalDispatch] = this.dispatch; + this[kOriginalClose] = this.close.bind(this); + this.dispatch = buildMockDispatch.call(this); + this.close = this[kClose]; + } + get [Symbols.kConnected]() { + return this[kConnected]; + } + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept(opts) { + return new MockInterceptor(opts, this[kDispatches]); + } + async [kClose]() { + await promisify2(this[kOriginalClose])(); + this[kConnected] = 0; + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); + } + }; + module2.exports = MockPool; + } +}); + +// node_modules/undici/lib/mock/pluralizer.js +var require_pluralizer = __commonJS({ + "node_modules/undici/lib/mock/pluralizer.js"(exports2, module2) { + "use strict"; + var singulars = { + pronoun: "it", + is: "is", + was: "was", + this: "this" + }; + var plurals = { + pronoun: "they", + is: "are", + was: "were", + this: "these" + }; + module2.exports = class Pluralizer { + constructor(singular, plural) { + this.singular = singular; + this.plural = plural; + } + pluralize(count) { + const one = count === 1; + const keys = one ? singulars : plurals; + const noun = one ? this.singular : this.plural; + return { ...keys, count, noun }; + } + }; + } +}); + +// node_modules/undici/lib/mock/pending-interceptors-formatter.js +var require_pending_interceptors_formatter = __commonJS({ + "node_modules/undici/lib/mock/pending-interceptors-formatter.js"(exports2, module2) { + "use strict"; + var { Transform } = require("node:stream"); + var { Console } = require("node:console"); + var PERSISTENT = process.versions.icu ? "\u2705" : "Y "; + var NOT_PERSISTENT = process.versions.icu ? "\u274C" : "N "; + module2.exports = class PendingInterceptorsFormatter { + constructor({ disableColors } = {}) { + this.transform = new Transform({ + transform(chunk, _enc, cb) { + cb(null, chunk); + } + }); + this.logger = new Console({ + stdout: this.transform, + inspectOptions: { + colors: !disableColors && !process.env.CI + } + }); + } + format(pendingInterceptors) { + const withPrettyHeaders = pendingInterceptors.map( + ({ method, path: path6, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ + Method: method, + Origin: origin, + Path: path6, + "Status code": statusCode, + Persistent: persist ? PERSISTENT : NOT_PERSISTENT, + Invocations: timesInvoked, + Remaining: persist ? Infinity : times - timesInvoked + }) + ); + this.logger.table(withPrettyHeaders); + return this.transform.read().toString(); + } + }; + } +}); + +// node_modules/undici/lib/mock/mock-agent.js +var require_mock_agent = __commonJS({ + "node_modules/undici/lib/mock/mock-agent.js"(exports2, module2) { + "use strict"; + var { kClients } = require_symbols(); + var Agent3 = require_agent(); + var { + kAgent, + kMockAgentSet, + kMockAgentGet, + kDispatches, + kIsMockActive, + kNetConnect, + kGetNetConnect, + kOptions, + kFactory + } = require_mock_symbols(); + var MockClient = require_mock_client(); + var MockPool = require_mock_pool(); + var { matchValue, buildMockOptions } = require_mock_utils(); + var { InvalidArgumentError, UndiciError } = require_errors(); + var Dispatcher = require_dispatcher(); + var Pluralizer = require_pluralizer(); + var PendingInterceptorsFormatter = require_pending_interceptors_formatter(); + var MockAgent = class extends Dispatcher { + constructor(opts) { + super(opts); + this[kNetConnect] = true; + this[kIsMockActive] = true; + if (opts?.agent && typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + const agent = opts?.agent ? opts.agent : new Agent3(opts); + this[kAgent] = agent; + this[kClients] = agent[kClients]; + this[kOptions] = buildMockOptions(opts); + } + get(origin) { + let dispatcher = this[kMockAgentGet](origin); + if (!dispatcher) { + dispatcher = this[kFactory](origin); + this[kMockAgentSet](origin, dispatcher); + } + return dispatcher; + } + dispatch(opts, handler2) { + this.get(opts.origin); + return this[kAgent].dispatch(opts, handler2); + } + async close() { + await this[kAgent].close(); + this[kClients].clear(); + } + deactivate() { + this[kIsMockActive] = false; + } + activate() { + this[kIsMockActive] = true; + } + enableNetConnect(matcher) { + if (typeof matcher === "string" || typeof matcher === "function" || matcher instanceof RegExp) { + if (Array.isArray(this[kNetConnect])) { + this[kNetConnect].push(matcher); + } else { + this[kNetConnect] = [matcher]; + } + } else if (typeof matcher === "undefined") { + this[kNetConnect] = true; + } else { + throw new InvalidArgumentError("Unsupported matcher. Must be one of String|Function|RegExp."); + } + } + disableNetConnect() { + this[kNetConnect] = false; + } + // This is required to bypass issues caused by using global symbols - see: + // https://github.com/nodejs/undici/issues/1447 + get isMockActive() { + return this[kIsMockActive]; + } + [kMockAgentSet](origin, dispatcher) { + this[kClients].set(origin, dispatcher); + } + [kFactory](origin) { + const mockOptions = Object.assign({ agent: this }, this[kOptions]); + return this[kOptions] && this[kOptions].connections === 1 ? new MockClient(origin, mockOptions) : new MockPool(origin, mockOptions); + } + [kMockAgentGet](origin) { + const client = this[kClients].get(origin); + if (client) { + return client; + } + if (typeof origin !== "string") { + const dispatcher = this[kFactory]("http://localhost:9999"); + this[kMockAgentSet](origin, dispatcher); + return dispatcher; + } + for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) { + if (nonExplicitDispatcher && typeof keyMatcher !== "string" && matchValue(keyMatcher, origin)) { + const dispatcher = this[kFactory](origin); + this[kMockAgentSet](origin, dispatcher); + dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches]; + return dispatcher; + } + } + } + [kGetNetConnect]() { + return this[kNetConnect]; + } + pendingInterceptors() { + const mockAgentClients = this[kClients]; + return Array.from(mockAgentClients.entries()).flatMap(([origin, scope]) => scope[kDispatches].map((dispatch) => ({ ...dispatch, origin }))).filter(({ pending }) => pending); + } + assertNoPendingInterceptors({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) { + const pending = this.pendingInterceptors(); + if (pending.length === 0) { + return; + } + const pluralizer = new Pluralizer("interceptor", "interceptors").pluralize(pending.length); + throw new UndiciError(` +${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending: + +${pendingInterceptorsFormatter.format(pending)} +`.trim()); + } + }; + module2.exports = MockAgent; + } +}); + +// node_modules/undici/lib/global.js +var require_global2 = __commonJS({ + "node_modules/undici/lib/global.js"(exports2, module2) { + "use strict"; + var globalDispatcher = /* @__PURE__ */ Symbol.for("undici.globalDispatcher.1"); + var { InvalidArgumentError } = require_errors(); + var Agent3 = require_agent(); + if (getGlobalDispatcher() === void 0) { + setGlobalDispatcher(new Agent3()); + } + function setGlobalDispatcher(agent) { + if (!agent || typeof agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument agent must implement Agent"); + } + Object.defineProperty(globalThis, globalDispatcher, { + value: agent, + writable: true, + enumerable: false, + configurable: false + }); + } + function getGlobalDispatcher() { + return globalThis[globalDispatcher]; + } + module2.exports = { + setGlobalDispatcher, + getGlobalDispatcher + }; + } +}); + +// node_modules/undici/lib/handler/decorator-handler.js +var require_decorator_handler = __commonJS({ + "node_modules/undici/lib/handler/decorator-handler.js"(exports2, module2) { + "use strict"; + module2.exports = class DecoratorHandler { + #handler; + constructor(handler2) { + if (typeof handler2 !== "object" || handler2 === null) { + throw new TypeError("handler must be an object"); + } + this.#handler = handler2; + } + onConnect(...args) { + return this.#handler.onConnect?.(...args); + } + onError(...args) { + return this.#handler.onError?.(...args); + } + onUpgrade(...args) { + return this.#handler.onUpgrade?.(...args); + } + onResponseStarted(...args) { + return this.#handler.onResponseStarted?.(...args); + } + onHeaders(...args) { + return this.#handler.onHeaders?.(...args); + } + onData(...args) { + return this.#handler.onData?.(...args); + } + onComplete(...args) { + return this.#handler.onComplete?.(...args); + } + onBodySent(...args) { + return this.#handler.onBodySent?.(...args); + } + }; + } +}); + +// node_modules/undici/lib/interceptor/redirect.js +var require_redirect = __commonJS({ + "node_modules/undici/lib/interceptor/redirect.js"(exports2, module2) { + "use strict"; + var RedirectHandler = require_redirect_handler(); + module2.exports = (opts) => { + const globalMaxRedirections = opts?.maxRedirections; + return (dispatch) => { + return function redirectInterceptor(opts2, handler2) { + const { maxRedirections = globalMaxRedirections, ...baseOpts } = opts2; + if (!maxRedirections) { + return dispatch(opts2, handler2); + } + const redirectHandler = new RedirectHandler( + dispatch, + maxRedirections, + opts2, + handler2 + ); + return dispatch(baseOpts, redirectHandler); + }; + }; + }; + } +}); + +// node_modules/undici/lib/interceptor/retry.js +var require_retry = __commonJS({ + "node_modules/undici/lib/interceptor/retry.js"(exports2, module2) { + "use strict"; + var RetryHandler = require_retry_handler(); + module2.exports = (globalOpts) => { + return (dispatch) => { + return function retryInterceptor(opts, handler2) { + return dispatch( + opts, + new RetryHandler( + { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } }, + { + handler: handler2, + dispatch + } + ) + ); + }; + }; + }; + } +}); + +// node_modules/undici/lib/interceptor/dump.js +var require_dump = __commonJS({ + "node_modules/undici/lib/interceptor/dump.js"(exports2, module2) { + "use strict"; + var util2 = require_util(); + var { InvalidArgumentError, RequestAbortedError } = require_errors(); + var DecoratorHandler = require_decorator_handler(); + var DumpHandler = class extends DecoratorHandler { + #maxSize = 1024 * 1024; + #abort = null; + #dumped = false; + #aborted = false; + #size = 0; + #reason = null; + #handler = null; + constructor({ maxSize }, handler2) { + super(handler2); + if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) { + throw new InvalidArgumentError("maxSize must be a number greater than 0"); + } + this.#maxSize = maxSize ?? this.#maxSize; + this.#handler = handler2; + } + onConnect(abort) { + this.#abort = abort; + this.#handler.onConnect(this.#customAbort.bind(this)); + } + #customAbort(reason) { + this.#aborted = true; + this.#reason = reason; + } + // TODO: will require adjustment after new hooks are out + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const headers = util2.parseHeaders(rawHeaders); + const contentLength = headers["content-length"]; + if (contentLength != null && contentLength > this.#maxSize) { + throw new RequestAbortedError( + `Response size (${contentLength}) larger than maxSize (${this.#maxSize})` + ); + } + if (this.#aborted) { + return true; + } + return this.#handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + onError(err) { + if (this.#dumped) { + return; + } + err = this.#reason ?? err; + this.#handler.onError(err); + } + onData(chunk) { + this.#size = this.#size + chunk.length; + if (this.#size >= this.#maxSize) { + this.#dumped = true; + if (this.#aborted) { + this.#handler.onError(this.#reason); + } else { + this.#handler.onComplete([]); + } + } + return true; + } + onComplete(trailers) { + if (this.#dumped) { + return; + } + if (this.#aborted) { + this.#handler.onError(this.reason); + return; + } + this.#handler.onComplete(trailers); + } + }; + function createDumpInterceptor({ maxSize: defaultMaxSize } = { + maxSize: 1024 * 1024 + }) { + return (dispatch) => { + return function Intercept(opts, handler2) { + const { dumpMaxSize = defaultMaxSize } = opts; + const dumpHandler = new DumpHandler( + { maxSize: dumpMaxSize }, + handler2 + ); + return dispatch(opts, dumpHandler); + }; + }; + } + module2.exports = createDumpInterceptor; + } +}); + +// node_modules/undici/lib/interceptor/dns.js +var require_dns = __commonJS({ + "node_modules/undici/lib/interceptor/dns.js"(exports2, module2) { + "use strict"; + var { isIP } = require("node:net"); + var { lookup } = require("node:dns"); + var DecoratorHandler = require_decorator_handler(); + var { InvalidArgumentError, InformationalError } = require_errors(); + var maxInt = Math.pow(2, 31) - 1; + var DNSInstance = class { + #maxTTL = 0; + #maxItems = 0; + #records = /* @__PURE__ */ new Map(); + dualStack = true; + affinity = null; + lookup = null; + pick = null; + constructor(opts) { + this.#maxTTL = opts.maxTTL; + this.#maxItems = opts.maxItems; + this.dualStack = opts.dualStack; + this.affinity = opts.affinity; + this.lookup = opts.lookup ?? this.#defaultLookup; + this.pick = opts.pick ?? this.#defaultPick; + } + get full() { + return this.#records.size === this.#maxItems; + } + runLookup(origin, opts, cb) { + const ips = this.#records.get(origin.hostname); + if (ips == null && this.full) { + cb(null, origin.origin); + return; + } + const newOpts = { + affinity: this.affinity, + dualStack: this.dualStack, + lookup: this.lookup, + pick: this.pick, + ...opts.dns, + maxTTL: this.#maxTTL, + maxItems: this.#maxItems + }; + if (ips == null) { + this.lookup(origin, newOpts, (err, addresses) => { + if (err || addresses == null || addresses.length === 0) { + cb(err ?? new InformationalError("No DNS entries found")); + return; + } + this.setRecords(origin, addresses); + const records = this.#records.get(origin.hostname); + const ip = this.pick( + origin, + records, + newOpts.affinity + ); + let port; + if (typeof ip.port === "number") { + port = `:${ip.port}`; + } else if (origin.port !== "") { + port = `:${origin.port}`; + } else { + port = ""; + } + cb( + null, + `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` + ); + }); + } else { + const ip = this.pick( + origin, + ips, + newOpts.affinity + ); + if (ip == null) { + this.#records.delete(origin.hostname); + this.runLookup(origin, opts, cb); + return; + } + let port; + if (typeof ip.port === "number") { + port = `:${ip.port}`; + } else if (origin.port !== "") { + port = `:${origin.port}`; + } else { + port = ""; + } + cb( + null, + `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` + ); + } + } + #defaultLookup(origin, opts, cb) { + lookup( + origin.hostname, + { + all: true, + family: this.dualStack === false ? this.affinity : 0, + order: "ipv4first" + }, + (err, addresses) => { + if (err) { + return cb(err); + } + const results = /* @__PURE__ */ new Map(); + for (const addr of addresses) { + results.set(`${addr.address}:${addr.family}`, addr); + } + cb(null, results.values()); + } + ); + } + #defaultPick(origin, hostnameRecords, affinity) { + let ip = null; + const { records, offset } = hostnameRecords; + let family; + if (this.dualStack) { + if (affinity == null) { + if (offset == null || offset === maxInt) { + hostnameRecords.offset = 0; + affinity = 4; + } else { + hostnameRecords.offset++; + affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4; + } + } + if (records[affinity] != null && records[affinity].ips.length > 0) { + family = records[affinity]; + } else { + family = records[affinity === 4 ? 6 : 4]; + } + } else { + family = records[affinity]; + } + if (family == null || family.ips.length === 0) { + return ip; + } + if (family.offset == null || family.offset === maxInt) { + family.offset = 0; + } else { + family.offset++; + } + const position = family.offset % family.ips.length; + ip = family.ips[position] ?? null; + if (ip == null) { + return ip; + } + if (Date.now() - ip.timestamp > ip.ttl) { + family.ips.splice(position, 1); + return this.pick(origin, hostnameRecords, affinity); + } + return ip; + } + setRecords(origin, addresses) { + const timestamp = Date.now(); + const records = { records: { 4: null, 6: null } }; + for (const record of addresses) { + record.timestamp = timestamp; + if (typeof record.ttl === "number") { + record.ttl = Math.min(record.ttl, this.#maxTTL); + } else { + record.ttl = this.#maxTTL; + } + const familyRecords = records.records[record.family] ?? { ips: [] }; + familyRecords.ips.push(record); + records.records[record.family] = familyRecords; + } + this.#records.set(origin.hostname, records); + } + getHandler(meta, opts) { + return new DNSDispatchHandler(this, meta, opts); + } + }; + var DNSDispatchHandler = class extends DecoratorHandler { + #state = null; + #opts = null; + #dispatch = null; + #handler = null; + #origin = null; + constructor(state, { origin, handler: handler2, dispatch }, opts) { + super(handler2); + this.#origin = origin; + this.#handler = handler2; + this.#opts = { ...opts }; + this.#state = state; + this.#dispatch = dispatch; + } + onError(err) { + switch (err.code) { + case "ETIMEDOUT": + case "ECONNREFUSED": { + if (this.#state.dualStack) { + this.#state.runLookup(this.#origin, this.#opts, (err2, newOrigin) => { + if (err2) { + return this.#handler.onError(err2); + } + const dispatchOpts = { + ...this.#opts, + origin: newOrigin + }; + this.#dispatch(dispatchOpts, this); + }); + return; + } + this.#handler.onError(err); + return; + } + case "ENOTFOUND": + this.#state.deleteRecord(this.#origin); + // eslint-disable-next-line no-fallthrough + default: + this.#handler.onError(err); + break; + } + } + }; + module2.exports = (interceptorOpts) => { + if (interceptorOpts?.maxTTL != null && (typeof interceptorOpts?.maxTTL !== "number" || interceptorOpts?.maxTTL < 0)) { + throw new InvalidArgumentError("Invalid maxTTL. Must be a positive number"); + } + if (interceptorOpts?.maxItems != null && (typeof interceptorOpts?.maxItems !== "number" || interceptorOpts?.maxItems < 1)) { + throw new InvalidArgumentError( + "Invalid maxItems. Must be a positive number and greater than zero" + ); + } + if (interceptorOpts?.affinity != null && interceptorOpts?.affinity !== 4 && interceptorOpts?.affinity !== 6) { + throw new InvalidArgumentError("Invalid affinity. Must be either 4 or 6"); + } + if (interceptorOpts?.dualStack != null && typeof interceptorOpts?.dualStack !== "boolean") { + throw new InvalidArgumentError("Invalid dualStack. Must be a boolean"); + } + if (interceptorOpts?.lookup != null && typeof interceptorOpts?.lookup !== "function") { + throw new InvalidArgumentError("Invalid lookup. Must be a function"); + } + if (interceptorOpts?.pick != null && typeof interceptorOpts?.pick !== "function") { + throw new InvalidArgumentError("Invalid pick. Must be a function"); + } + const dualStack = interceptorOpts?.dualStack ?? true; + let affinity; + if (dualStack) { + affinity = interceptorOpts?.affinity ?? null; + } else { + affinity = interceptorOpts?.affinity ?? 4; + } + const opts = { + maxTTL: interceptorOpts?.maxTTL ?? 1e4, + // Expressed in ms + lookup: interceptorOpts?.lookup ?? null, + pick: interceptorOpts?.pick ?? null, + dualStack, + affinity, + maxItems: interceptorOpts?.maxItems ?? Infinity + }; + const instance = new DNSInstance(opts); + return (dispatch) => { + return function dnsInterceptor(origDispatchOpts, handler2) { + const origin = origDispatchOpts.origin.constructor === URL ? origDispatchOpts.origin : new URL(origDispatchOpts.origin); + if (isIP(origin.hostname) !== 0) { + return dispatch(origDispatchOpts, handler2); + } + instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => { + if (err) { + return handler2.onError(err); + } + let dispatchOpts = null; + dispatchOpts = { + ...origDispatchOpts, + servername: origin.hostname, + // For SNI on TLS + origin: newOrigin, + headers: { + host: origin.hostname, + ...origDispatchOpts.headers + } + }; + dispatch( + dispatchOpts, + instance.getHandler({ origin, dispatch, handler: handler2 }, origDispatchOpts) + ); + }); + return true; + }; + }; + }; + } +}); + +// node_modules/undici/lib/web/fetch/headers.js +var require_headers = __commonJS({ + "node_modules/undici/lib/web/fetch/headers.js"(exports2, module2) { + "use strict"; + var { kConstruct } = require_symbols(); + var { kEnumerableProperty } = require_util(); + var { + iteratorMixin, + isValidHeaderName, + isValidHeaderValue + } = require_util2(); + var { webidl } = require_webidl(); + var assert = require("node:assert"); + var util2 = require("node:util"); + var kHeadersMap = /* @__PURE__ */ Symbol("headers map"); + var kHeadersSortedMap = /* @__PURE__ */ Symbol("headers map sorted"); + function isHTTPWhiteSpaceCharCode(code) { + return code === 10 || code === 13 || code === 9 || code === 32; + } + function headerValueNormalize(potentialValue) { + let i = 0; + let j = potentialValue.length; + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j; + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i; + return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j); + } + function fill(headers, object) { + if (Array.isArray(object)) { + for (let i = 0; i < object.length; ++i) { + const header = object[i]; + if (header.length !== 2) { + throw webidl.errors.exception({ + header: "Headers constructor", + message: `expected name/value pair to be length 2, found ${header.length}.` + }); + } + appendHeader(headers, header[0], header[1]); + } + } else if (typeof object === "object" && object !== null) { + const keys = Object.keys(object); + for (let i = 0; i < keys.length; ++i) { + appendHeader(headers, keys[i], object[keys[i]]); + } + } else { + throw webidl.errors.conversionFailed({ + prefix: "Headers constructor", + argument: "Argument 1", + types: ["sequence>", "record"] + }); + } + } + function appendHeader(headers, name, value) { + value = headerValueNormalize(value); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.append", + value: name, + type: "header name" + }); + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.append", + value, + type: "header value" + }); + } + if (getHeadersGuard(headers) === "immutable") { + throw new TypeError("immutable"); + } + return getHeadersList(headers).append(name, value, false); + } + function compareHeaderName(a, b) { + return a[0] < b[0] ? -1 : 1; + } + var HeadersList = class _HeadersList { + /** @type {[string, string][]|null} */ + cookies = null; + constructor(init) { + if (init instanceof _HeadersList) { + this[kHeadersMap] = new Map(init[kHeadersMap]); + this[kHeadersSortedMap] = init[kHeadersSortedMap]; + this.cookies = init.cookies === null ? null : [...init.cookies]; + } else { + this[kHeadersMap] = new Map(init); + this[kHeadersSortedMap] = null; + } + } + /** + * @see https://fetch.spec.whatwg.org/#header-list-contains + * @param {string} name + * @param {boolean} isLowerCase + */ + contains(name, isLowerCase) { + return this[kHeadersMap].has(isLowerCase ? name : name.toLowerCase()); + } + clear() { + this[kHeadersMap].clear(); + this[kHeadersSortedMap] = null; + this.cookies = null; + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-append + * @param {string} name + * @param {string} value + * @param {boolean} isLowerCase + */ + append(name, value, isLowerCase) { + this[kHeadersSortedMap] = null; + const lowercaseName = isLowerCase ? name : name.toLowerCase(); + const exists2 = this[kHeadersMap].get(lowercaseName); + if (exists2) { + const delimiter2 = lowercaseName === "cookie" ? "; " : ", "; + this[kHeadersMap].set(lowercaseName, { + name: exists2.name, + value: `${exists2.value}${delimiter2}${value}` + }); + } else { + this[kHeadersMap].set(lowercaseName, { name, value }); + } + if (lowercaseName === "set-cookie") { + (this.cookies ??= []).push(value); + } + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-set + * @param {string} name + * @param {string} value + * @param {boolean} isLowerCase + */ + set(name, value, isLowerCase) { + this[kHeadersSortedMap] = null; + const lowercaseName = isLowerCase ? name : name.toLowerCase(); + if (lowercaseName === "set-cookie") { + this.cookies = [value]; + } + this[kHeadersMap].set(lowercaseName, { name, value }); + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-delete + * @param {string} name + * @param {boolean} isLowerCase + */ + delete(name, isLowerCase) { + this[kHeadersSortedMap] = null; + if (!isLowerCase) name = name.toLowerCase(); + if (name === "set-cookie") { + this.cookies = null; + } + this[kHeadersMap].delete(name); + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-get + * @param {string} name + * @param {boolean} isLowerCase + * @returns {string | null} + */ + get(name, isLowerCase) { + return this[kHeadersMap].get(isLowerCase ? name : name.toLowerCase())?.value ?? null; + } + *[Symbol.iterator]() { + for (const { 0: name, 1: { value } } of this[kHeadersMap]) { + yield [name, value]; + } + } + get entries() { + const headers = {}; + if (this[kHeadersMap].size !== 0) { + for (const { name, value } of this[kHeadersMap].values()) { + headers[name] = value; + } + } + return headers; + } + rawValues() { + return this[kHeadersMap].values(); + } + get entriesList() { + const headers = []; + if (this[kHeadersMap].size !== 0) { + for (const { 0: lowerName, 1: { name, value } } of this[kHeadersMap]) { + if (lowerName === "set-cookie") { + for (const cookie of this.cookies) { + headers.push([name, cookie]); + } + } else { + headers.push([name, value]); + } + } + } + return headers; + } + // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set + toSortedArray() { + const size = this[kHeadersMap].size; + const array = new Array(size); + if (size <= 32) { + if (size === 0) { + return array; + } + const iterator2 = this[kHeadersMap][Symbol.iterator](); + const firstValue = iterator2.next().value; + array[0] = [firstValue[0], firstValue[1].value]; + assert(firstValue[1].value !== null); + for (let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value; i < size; ++i) { + value = iterator2.next().value; + x = array[i] = [value[0], value[1].value]; + assert(x[1] !== null); + left = 0; + right = i; + while (left < right) { + pivot = left + (right - left >> 1); + if (array[pivot][0] <= x[0]) { + left = pivot + 1; + } else { + right = pivot; + } + } + if (i !== pivot) { + j = i; + while (j > left) { + array[j] = array[--j]; + } + array[left] = x; + } + } + if (!iterator2.next().done) { + throw new TypeError("Unreachable"); + } + return array; + } else { + let i = 0; + for (const { 0: name, 1: { value } } of this[kHeadersMap]) { + array[i++] = [name, value]; + assert(value !== null); + } + return array.sort(compareHeaderName); + } + } + }; + var Headers2 = class _Headers { + #guard; + #headersList; + constructor(init = void 0) { + webidl.util.markAsUncloneable(this); + if (init === kConstruct) { + return; + } + this.#headersList = new HeadersList(); + this.#guard = "none"; + if (init !== void 0) { + init = webidl.converters.HeadersInit(init, "Headers contructor", "init"); + fill(this, init); + } + } + // https://fetch.spec.whatwg.org/#dom-headers-append + append(name, value) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 2, "Headers.append"); + const prefix = "Headers.append"; + name = webidl.converters.ByteString(name, prefix, "name"); + value = webidl.converters.ByteString(value, prefix, "value"); + return appendHeader(this, name, value); + } + // https://fetch.spec.whatwg.org/#dom-headers-delete + delete(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.delete"); + const prefix = "Headers.delete"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.delete", + value: name, + type: "header name" + }); + } + if (this.#guard === "immutable") { + throw new TypeError("immutable"); + } + if (!this.#headersList.contains(name, false)) { + return; + } + this.#headersList.delete(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-get + get(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.get"); + const prefix = "Headers.get"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } + return this.#headersList.get(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-has + has(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.has"); + const prefix = "Headers.has"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } + return this.#headersList.contains(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-set + set(name, value) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 2, "Headers.set"); + const prefix = "Headers.set"; + name = webidl.converters.ByteString(name, prefix, "name"); + value = webidl.converters.ByteString(value, prefix, "value"); + value = headerValueNormalize(value); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix, + value, + type: "header value" + }); + } + if (this.#guard === "immutable") { + throw new TypeError("immutable"); + } + this.#headersList.set(name, value, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie + getSetCookie() { + webidl.brandCheck(this, _Headers); + const list = this.#headersList.cookies; + if (list) { + return [...list]; + } + return []; + } + // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine + get [kHeadersSortedMap]() { + if (this.#headersList[kHeadersSortedMap]) { + return this.#headersList[kHeadersSortedMap]; + } + const headers = []; + const names = this.#headersList.toSortedArray(); + const cookies = this.#headersList.cookies; + if (cookies === null || cookies.length === 1) { + return this.#headersList[kHeadersSortedMap] = names; + } + for (let i = 0; i < names.length; ++i) { + const { 0: name, 1: value } = names[i]; + if (name === "set-cookie") { + for (let j = 0; j < cookies.length; ++j) { + headers.push([name, cookies[j]]); + } + } else { + headers.push([name, value]); + } + } + return this.#headersList[kHeadersSortedMap] = headers; + } + [util2.inspect.custom](depth, options) { + options.depth ??= depth; + return `Headers ${util2.formatWithOptions(options, this.#headersList.entries)}`; + } + static getHeadersGuard(o) { + return o.#guard; + } + static setHeadersGuard(o, guard) { + o.#guard = guard; + } + static getHeadersList(o) { + return o.#headersList; + } + static setHeadersList(o, list) { + o.#headersList = list; + } + }; + var { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers2; + Reflect.deleteProperty(Headers2, "getHeadersGuard"); + Reflect.deleteProperty(Headers2, "setHeadersGuard"); + Reflect.deleteProperty(Headers2, "getHeadersList"); + Reflect.deleteProperty(Headers2, "setHeadersList"); + iteratorMixin("Headers", Headers2, kHeadersSortedMap, 0, 1); + Object.defineProperties(Headers2.prototype, { + append: kEnumerableProperty, + delete: kEnumerableProperty, + get: kEnumerableProperty, + has: kEnumerableProperty, + set: kEnumerableProperty, + getSetCookie: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Headers", + configurable: true + }, + [util2.inspect.custom]: { + enumerable: false + } + }); + webidl.converters.HeadersInit = function(V, prefix, argument) { + if (webidl.util.Type(V) === "Object") { + const iterator2 = Reflect.get(V, Symbol.iterator); + if (!util2.types.isProxy(V) && iterator2 === Headers2.prototype.entries) { + try { + return getHeadersList(V).entriesList; + } catch { + } + } + if (typeof iterator2 === "function") { + return webidl.converters["sequence>"](V, prefix, argument, iterator2.bind(V)); + } + return webidl.converters["record"](V, prefix, argument); + } + throw webidl.errors.conversionFailed({ + prefix: "Headers constructor", + argument: "Argument 1", + types: ["sequence>", "record"] + }); + }; + module2.exports = { + fill, + // for test. + compareHeaderName, + Headers: Headers2, + HeadersList, + getHeadersGuard, + setHeadersGuard, + setHeadersList, + getHeadersList + }; + } +}); + +// node_modules/undici/lib/web/fetch/response.js +var require_response = __commonJS({ + "node_modules/undici/lib/web/fetch/response.js"(exports2, module2) { + "use strict"; + var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers(); + var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body(); + var util2 = require_util(); + var nodeUtil = require("node:util"); + var { kEnumerableProperty } = util2; + var { + isValidReasonPhrase, + isCancelled, + isAborted, + isBlobLike, + serializeJavascriptValueToJSONString, + isErrorLike, + isomorphicEncode, + environmentSettingsObject: relevantRealm + } = require_util2(); + var { + redirectStatusSet, + nullBodyStatus + } = require_constants3(); + var { kState, kHeaders } = require_symbols2(); + var { webidl } = require_webidl(); + var { FormData } = require_formdata(); + var { URLSerializer } = require_data_url(); + var { kConstruct } = require_symbols(); + var assert = require("node:assert"); + var { types } = require("node:util"); + var textEncoder = new TextEncoder("utf-8"); + var Response = class _Response { + // Creates network error Response. + static error() { + const responseObject = fromInnerResponse(makeNetworkError(), "immutable"); + return responseObject; + } + // https://fetch.spec.whatwg.org/#dom-response-json + static json(data, init = {}) { + webidl.argumentLengthCheck(arguments, 1, "Response.json"); + if (init !== null) { + init = webidl.converters.ResponseInit(init); + } + const bytes = textEncoder.encode( + serializeJavascriptValueToJSONString(data) + ); + const body = extractBody(bytes); + const responseObject = fromInnerResponse(makeResponse({}), "response"); + initializeResponse(responseObject, init, { body: body[0], type: "application/json" }); + return responseObject; + } + // Creates a redirect Response that redirects to url with status status. + static redirect(url, status = 302) { + webidl.argumentLengthCheck(arguments, 1, "Response.redirect"); + url = webidl.converters.USVString(url); + status = webidl.converters["unsigned short"](status); + let parsedURL; + try { + parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl); + } catch (err) { + throw new TypeError(`Failed to parse URL from ${url}`, { cause: err }); + } + if (!redirectStatusSet.has(status)) { + throw new RangeError(`Invalid status code ${status}`); + } + const responseObject = fromInnerResponse(makeResponse({}), "immutable"); + responseObject[kState].status = status; + const value = isomorphicEncode(URLSerializer(parsedURL)); + responseObject[kState].headersList.append("location", value, true); + return responseObject; + } + // https://fetch.spec.whatwg.org/#dom-response + constructor(body = null, init = {}) { + webidl.util.markAsUncloneable(this); + if (body === kConstruct) { + return; + } + if (body !== null) { + body = webidl.converters.BodyInit(body); + } + init = webidl.converters.ResponseInit(init); + this[kState] = makeResponse({}); + this[kHeaders] = new Headers2(kConstruct); + setHeadersGuard(this[kHeaders], "response"); + setHeadersList(this[kHeaders], this[kState].headersList); + let bodyWithType = null; + if (body != null) { + const [extractedBody, type] = extractBody(body); + bodyWithType = { body: extractedBody, type }; + } + initializeResponse(this, init, bodyWithType); + } + // Returns response’s type, e.g., "cors". + get type() { + webidl.brandCheck(this, _Response); + return this[kState].type; + } + // Returns response’s URL, if it has one; otherwise the empty string. + get url() { + webidl.brandCheck(this, _Response); + const urlList = this[kState].urlList; + const url = urlList[urlList.length - 1] ?? null; + if (url === null) { + return ""; + } + return URLSerializer(url, true); + } + // Returns whether response was obtained through a redirect. + get redirected() { + webidl.brandCheck(this, _Response); + return this[kState].urlList.length > 1; + } + // Returns response’s status. + get status() { + webidl.brandCheck(this, _Response); + return this[kState].status; + } + // Returns whether response’s status is an ok status. + get ok() { + webidl.brandCheck(this, _Response); + return this[kState].status >= 200 && this[kState].status <= 299; + } + // Returns response’s status message. + get statusText() { + webidl.brandCheck(this, _Response); + return this[kState].statusText; + } + // Returns response’s headers as Headers. + get headers() { + webidl.brandCheck(this, _Response); + return this[kHeaders]; + } + get body() { + webidl.brandCheck(this, _Response); + return this[kState].body ? this[kState].body.stream : null; + } + get bodyUsed() { + webidl.brandCheck(this, _Response); + return !!this[kState].body && util2.isDisturbed(this[kState].body.stream); + } + // Returns a clone of response. + clone() { + webidl.brandCheck(this, _Response); + if (bodyUnusable(this)) { + throw webidl.errors.exception({ + header: "Response.clone", + message: "Body has already been consumed." + }); + } + const clonedResponse = cloneResponse(this[kState]); + if (hasFinalizationRegistry && this[kState].body?.stream) { + streamRegistry.register(this, new WeakRef(this[kState].body.stream)); + } + return fromInnerResponse(clonedResponse, getHeadersGuard(this[kHeaders])); + } + [nodeUtil.inspect.custom](depth, options) { + if (options.depth === null) { + options.depth = 2; + } + options.colors ??= true; + const properties = { + status: this.status, + statusText: this.statusText, + headers: this.headers, + body: this.body, + bodyUsed: this.bodyUsed, + ok: this.ok, + redirected: this.redirected, + type: this.type, + url: this.url + }; + return `Response ${nodeUtil.formatWithOptions(options, properties)}`; + } + }; + mixinBody(Response); + Object.defineProperties(Response.prototype, { + type: kEnumerableProperty, + url: kEnumerableProperty, + status: kEnumerableProperty, + ok: kEnumerableProperty, + redirected: kEnumerableProperty, + statusText: kEnumerableProperty, + headers: kEnumerableProperty, + clone: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Response", + configurable: true + } + }); + Object.defineProperties(Response, { + json: kEnumerableProperty, + redirect: kEnumerableProperty, + error: kEnumerableProperty + }); + function cloneResponse(response) { + if (response.internalResponse) { + return filterResponse( + cloneResponse(response.internalResponse), + response.type + ); + } + const newResponse = makeResponse({ ...response, body: null }); + if (response.body != null) { + newResponse.body = cloneBody(newResponse, response.body); + } + return newResponse; + } + function makeResponse(init) { + return { + aborted: false, + rangeRequested: false, + timingAllowPassed: false, + requestIncludesCredentials: false, + type: "default", + status: 200, + timingInfo: null, + cacheState: "", + statusText: "", + ...init, + headersList: init?.headersList ? new HeadersList(init?.headersList) : new HeadersList(), + urlList: init?.urlList ? [...init.urlList] : [] + }; + } + function makeNetworkError(reason) { + const isError = isErrorLike(reason); + return makeResponse({ + type: "error", + status: 0, + error: isError ? reason : new Error(reason ? String(reason) : reason), + aborted: reason && reason.name === "AbortError" + }); + } + function isNetworkError(response) { + return ( + // A network error is a response whose type is "error", + response.type === "error" && // status is 0 + response.status === 0 + ); + } + function makeFilteredResponse(response, state) { + state = { + internalResponse: response, + ...state + }; + return new Proxy(response, { + get(target, p) { + return p in state ? state[p] : target[p]; + }, + set(target, p, value) { + assert(!(p in state)); + target[p] = value; + return true; + } + }); + } + function filterResponse(response, type) { + if (type === "basic") { + return makeFilteredResponse(response, { + type: "basic", + headersList: response.headersList + }); + } else if (type === "cors") { + return makeFilteredResponse(response, { + type: "cors", + headersList: response.headersList + }); + } else if (type === "opaque") { + return makeFilteredResponse(response, { + type: "opaque", + urlList: Object.freeze([]), + status: 0, + statusText: "", + body: null + }); + } else if (type === "opaqueredirect") { + return makeFilteredResponse(response, { + type: "opaqueredirect", + status: 0, + statusText: "", + headersList: [], + body: null + }); + } else { + assert(false); + } + } + function makeAppropriateNetworkError(fetchParams, err = null) { + assert(isCancelled(fetchParams)); + return isAborted(fetchParams) ? makeNetworkError(Object.assign(new DOMException("The operation was aborted.", "AbortError"), { cause: err })) : makeNetworkError(Object.assign(new DOMException("Request was cancelled."), { cause: err })); + } + function initializeResponse(response, init, body) { + if (init.status !== null && (init.status < 200 || init.status > 599)) { + throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.'); + } + if ("statusText" in init && init.statusText != null) { + if (!isValidReasonPhrase(String(init.statusText))) { + throw new TypeError("Invalid statusText"); + } + } + if ("status" in init && init.status != null) { + response[kState].status = init.status; + } + if ("statusText" in init && init.statusText != null) { + response[kState].statusText = init.statusText; + } + if ("headers" in init && init.headers != null) { + fill(response[kHeaders], init.headers); + } + if (body) { + if (nullBodyStatus.includes(response.status)) { + throw webidl.errors.exception({ + header: "Response constructor", + message: `Invalid response status code ${response.status}` + }); + } + response[kState].body = body.body; + if (body.type != null && !response[kState].headersList.contains("content-type", true)) { + response[kState].headersList.append("content-type", body.type, true); + } + } + } + function fromInnerResponse(innerResponse, guard) { + const response = new Response(kConstruct); + response[kState] = innerResponse; + response[kHeaders] = new Headers2(kConstruct); + setHeadersList(response[kHeaders], innerResponse.headersList); + setHeadersGuard(response[kHeaders], guard); + if (hasFinalizationRegistry && innerResponse.body?.stream) { + streamRegistry.register(response, new WeakRef(innerResponse.body.stream)); + } + return response; + } + webidl.converters.ReadableStream = webidl.interfaceConverter( + ReadableStream + ); + webidl.converters.FormData = webidl.interfaceConverter( + FormData + ); + webidl.converters.URLSearchParams = webidl.interfaceConverter( + URLSearchParams + ); + webidl.converters.XMLHttpRequestBodyInit = function(V, prefix, name) { + if (typeof V === "string") { + return webidl.converters.USVString(V, prefix, name); + } + if (isBlobLike(V)) { + return webidl.converters.Blob(V, prefix, name, { strict: false }); + } + if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { + return webidl.converters.BufferSource(V, prefix, name); + } + if (util2.isFormDataLike(V)) { + return webidl.converters.FormData(V, prefix, name, { strict: false }); + } + if (V instanceof URLSearchParams) { + return webidl.converters.URLSearchParams(V, prefix, name); + } + return webidl.converters.DOMString(V, prefix, name); + }; + webidl.converters.BodyInit = function(V, prefix, argument) { + if (V instanceof ReadableStream) { + return webidl.converters.ReadableStream(V, prefix, argument); + } + if (V?.[Symbol.asyncIterator]) { + return V; + } + return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument); + }; + webidl.converters.ResponseInit = webidl.dictionaryConverter([ + { + key: "status", + converter: webidl.converters["unsigned short"], + defaultValue: () => 200 + }, + { + key: "statusText", + converter: webidl.converters.ByteString, + defaultValue: () => "" + }, + { + key: "headers", + converter: webidl.converters.HeadersInit + } + ]); + module2.exports = { + isNetworkError, + makeNetworkError, + makeResponse, + makeAppropriateNetworkError, + filterResponse, + Response, + cloneResponse, + fromInnerResponse + }; + } +}); + +// node_modules/undici/lib/web/fetch/dispatcher-weakref.js +var require_dispatcher_weakref = __commonJS({ + "node_modules/undici/lib/web/fetch/dispatcher-weakref.js"(exports2, module2) { + "use strict"; + var { kConnected, kSize } = require_symbols(); + var CompatWeakRef = class { + constructor(value) { + this.value = value; + } + deref() { + return this.value[kConnected] === 0 && this.value[kSize] === 0 ? void 0 : this.value; + } + }; + var CompatFinalizer = class { + constructor(finalizer) { + this.finalizer = finalizer; + } + register(dispatcher, key) { + if (dispatcher.on) { + dispatcher.on("disconnect", () => { + if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { + this.finalizer(key); + } + }); + } + } + unregister(key) { + } + }; + module2.exports = function() { + if (process.env.NODE_V8_COVERAGE && process.version.startsWith("v18")) { + process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"); + return { + WeakRef: CompatWeakRef, + FinalizationRegistry: CompatFinalizer + }; + } + return { WeakRef, FinalizationRegistry }; + }; + } +}); + +// node_modules/undici/lib/web/fetch/request.js +var require_request2 = __commonJS({ + "node_modules/undici/lib/web/fetch/request.js"(exports2, module2) { + "use strict"; + var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body(); + var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers(); + var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref()(); + var util2 = require_util(); + var nodeUtil = require("node:util"); + var { + isValidHTTPToken, + sameOrigin, + environmentSettingsObject + } = require_util2(); + var { + forbiddenMethodsSet, + corsSafeListedMethodsSet, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + requestDuplex + } = require_constants3(); + var { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util2; + var { kHeaders, kSignal, kState, kDispatcher } = require_symbols2(); + var { webidl } = require_webidl(); + var { URLSerializer } = require_data_url(); + var { kConstruct } = require_symbols(); + var assert = require("node:assert"); + var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = require("node:events"); + var kAbortController = /* @__PURE__ */ Symbol("abortController"); + var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => { + signal.removeEventListener("abort", abort); + }); + var dependentControllerMap = /* @__PURE__ */ new WeakMap(); + function buildAbort(acRef) { + return abort; + function abort() { + const ac = acRef.deref(); + if (ac !== void 0) { + requestFinalizer.unregister(abort); + this.removeEventListener("abort", abort); + ac.abort(this.reason); + const controllerList = dependentControllerMap.get(ac.signal); + if (controllerList !== void 0) { + if (controllerList.size !== 0) { + for (const ref of controllerList) { + const ctrl = ref.deref(); + if (ctrl !== void 0) { + ctrl.abort(this.reason); + } + } + controllerList.clear(); + } + dependentControllerMap.delete(ac.signal); + } + } + } + } + var patchMethodWarning = false; + var Request = class _Request { + // https://fetch.spec.whatwg.org/#dom-request + constructor(input, init = {}) { + webidl.util.markAsUncloneable(this); + if (input === kConstruct) { + return; + } + const prefix = "Request constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + input = webidl.converters.RequestInfo(input, prefix, "input"); + init = webidl.converters.RequestInit(init, prefix, "init"); + let request2 = null; + let fallbackMode = null; + const baseUrl2 = environmentSettingsObject.settingsObject.baseUrl; + let signal = null; + if (typeof input === "string") { + this[kDispatcher] = init.dispatcher; + let parsedURL; + try { + parsedURL = new URL(input, baseUrl2); + } catch (err) { + throw new TypeError("Failed to parse URL from " + input, { cause: err }); + } + if (parsedURL.username || parsedURL.password) { + throw new TypeError( + "Request cannot be constructed from a URL that includes credentials: " + input + ); + } + request2 = makeRequest({ urlList: [parsedURL] }); + fallbackMode = "cors"; + } else { + this[kDispatcher] = init.dispatcher || input[kDispatcher]; + assert(input instanceof _Request); + request2 = input[kState]; + signal = input[kSignal]; + } + const origin = environmentSettingsObject.settingsObject.origin; + let window = "client"; + if (request2.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request2.window, origin)) { + window = request2.window; + } + if (init.window != null) { + throw new TypeError(`'window' option '${window}' must be null`); + } + if ("window" in init) { + window = "no-window"; + } + request2 = makeRequest({ + // URL request’s URL. + // undici implementation note: this is set as the first item in request's urlList in makeRequest + // method request’s method. + method: request2.method, + // header list A copy of request’s header list. + // undici implementation note: headersList is cloned in makeRequest + headersList: request2.headersList, + // unsafe-request flag Set. + unsafeRequest: request2.unsafeRequest, + // client This’s relevant settings object. + client: environmentSettingsObject.settingsObject, + // window window. + window, + // priority request’s priority. + priority: request2.priority, + // origin request’s origin. The propagation of the origin is only significant for navigation requests + // being handled by a service worker. In this scenario a request can have an origin that is different + // from the current client. + origin: request2.origin, + // referrer request’s referrer. + referrer: request2.referrer, + // referrer policy request’s referrer policy. + referrerPolicy: request2.referrerPolicy, + // mode request’s mode. + mode: request2.mode, + // credentials mode request’s credentials mode. + credentials: request2.credentials, + // cache mode request’s cache mode. + cache: request2.cache, + // redirect mode request’s redirect mode. + redirect: request2.redirect, + // integrity metadata request’s integrity metadata. + integrity: request2.integrity, + // keepalive request’s keepalive. + keepalive: request2.keepalive, + // reload-navigation flag request’s reload-navigation flag. + reloadNavigation: request2.reloadNavigation, + // history-navigation flag request’s history-navigation flag. + historyNavigation: request2.historyNavigation, + // URL list A clone of request’s URL list. + urlList: [...request2.urlList] + }); + const initHasKey = Object.keys(init).length !== 0; + if (initHasKey) { + if (request2.mode === "navigate") { + request2.mode = "same-origin"; + } + request2.reloadNavigation = false; + request2.historyNavigation = false; + request2.origin = "client"; + request2.referrer = "client"; + request2.referrerPolicy = ""; + request2.url = request2.urlList[request2.urlList.length - 1]; + request2.urlList = [request2.url]; + } + if (init.referrer !== void 0) { + const referrer = init.referrer; + if (referrer === "") { + request2.referrer = "no-referrer"; + } else { + let parsedReferrer; + try { + parsedReferrer = new URL(referrer, baseUrl2); + } catch (err) { + throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }); + } + if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl)) { + request2.referrer = "client"; + } else { + request2.referrer = parsedReferrer; + } + } + } + if (init.referrerPolicy !== void 0) { + request2.referrerPolicy = init.referrerPolicy; + } + let mode; + if (init.mode !== void 0) { + mode = init.mode; + } else { + mode = fallbackMode; + } + if (mode === "navigate") { + throw webidl.errors.exception({ + header: "Request constructor", + message: "invalid request mode navigate." + }); + } + if (mode != null) { + request2.mode = mode; + } + if (init.credentials !== void 0) { + request2.credentials = init.credentials; + } + if (init.cache !== void 0) { + request2.cache = init.cache; + } + if (request2.cache === "only-if-cached" && request2.mode !== "same-origin") { + throw new TypeError( + "'only-if-cached' can be set only with 'same-origin' mode" + ); + } + if (init.redirect !== void 0) { + request2.redirect = init.redirect; + } + if (init.integrity != null) { + request2.integrity = String(init.integrity); + } + if (init.keepalive !== void 0) { + request2.keepalive = Boolean(init.keepalive); + } + if (init.method !== void 0) { + let method = init.method; + const mayBeNormalized = normalizedMethodRecords[method]; + if (mayBeNormalized !== void 0) { + request2.method = mayBeNormalized; + } else { + if (!isValidHTTPToken(method)) { + throw new TypeError(`'${method}' is not a valid HTTP method.`); + } + const upperCase = method.toUpperCase(); + if (forbiddenMethodsSet.has(upperCase)) { + throw new TypeError(`'${method}' HTTP method is unsupported.`); + } + method = normalizedMethodRecordsBase[upperCase] ?? method; + request2.method = method; + } + if (!patchMethodWarning && request2.method === "patch") { + process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.", { + code: "UNDICI-FETCH-patch" + }); + patchMethodWarning = true; + } + } + if (init.signal !== void 0) { + signal = init.signal; + } + this[kState] = request2; + const ac = new AbortController(); + this[kSignal] = ac.signal; + if (signal != null) { + if (!signal || typeof signal.aborted !== "boolean" || typeof signal.addEventListener !== "function") { + throw new TypeError( + "Failed to construct 'Request': member signal is not of type AbortSignal." + ); + } + if (signal.aborted) { + ac.abort(signal.reason); + } else { + this[kAbortController] = ac; + const acRef = new WeakRef(ac); + const abort = buildAbort(acRef); + try { + if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) { + setMaxListeners(1500, signal); + } else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) { + setMaxListeners(1500, signal); + } + } catch { + } + util2.addAbortListener(signal, abort); + requestFinalizer.register(ac, { signal, abort }, abort); + } + } + this[kHeaders] = new Headers2(kConstruct); + setHeadersList(this[kHeaders], request2.headersList); + setHeadersGuard(this[kHeaders], "request"); + if (mode === "no-cors") { + if (!corsSafeListedMethodsSet.has(request2.method)) { + throw new TypeError( + `'${request2.method} is unsupported in no-cors mode.` + ); + } + setHeadersGuard(this[kHeaders], "request-no-cors"); + } + if (initHasKey) { + const headersList = getHeadersList(this[kHeaders]); + const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList); + headersList.clear(); + if (headers instanceof HeadersList) { + for (const { name, value } of headers.rawValues()) { + headersList.append(name, value, false); + } + headersList.cookies = headers.cookies; + } else { + fillHeaders(this[kHeaders], headers); + } + } + const inputBody = input instanceof _Request ? input[kState].body : null; + if ((init.body != null || inputBody != null) && (request2.method === "GET" || request2.method === "HEAD")) { + throw new TypeError("Request with GET/HEAD method cannot have body."); + } + let initBody = null; + if (init.body != null) { + const [extractedBody, contentType] = extractBody( + init.body, + request2.keepalive + ); + initBody = extractedBody; + if (contentType && !getHeadersList(this[kHeaders]).contains("content-type", true)) { + this[kHeaders].append("content-type", contentType); + } + } + const inputOrInitBody = initBody ?? inputBody; + if (inputOrInitBody != null && inputOrInitBody.source == null) { + if (initBody != null && init.duplex == null) { + throw new TypeError("RequestInit: duplex option is required when sending a body."); + } + if (request2.mode !== "same-origin" && request2.mode !== "cors") { + throw new TypeError( + 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' + ); + } + request2.useCORSPreflightFlag = true; + } + let finalBody = inputOrInitBody; + if (initBody == null && inputBody != null) { + if (bodyUnusable(input)) { + throw new TypeError( + "Cannot construct a Request with a Request object that has already been used." + ); + } + const identityTransform = new TransformStream(); + inputBody.stream.pipeThrough(identityTransform); + finalBody = { + source: inputBody.source, + length: inputBody.length, + stream: identityTransform.readable + }; + } + this[kState].body = finalBody; + } + // Returns request’s HTTP method, which is "GET" by default. + get method() { + webidl.brandCheck(this, _Request); + return this[kState].method; + } + // Returns the URL of request as a string. + get url() { + webidl.brandCheck(this, _Request); + return URLSerializer(this[kState].url); + } + // Returns a Headers object consisting of the headers associated with request. + // Note that headers added in the network layer by the user agent will not + // be accounted for in this object, e.g., the "Host" header. + get headers() { + webidl.brandCheck(this, _Request); + return this[kHeaders]; + } + // Returns the kind of resource requested by request, e.g., "document" + // or "script". + get destination() { + webidl.brandCheck(this, _Request); + return this[kState].destination; + } + // Returns the referrer of request. Its value can be a same-origin URL if + // explicitly set in init, the empty string to indicate no referrer, and + // "about:client" when defaulting to the global’s default. This is used + // during fetching to determine the value of the `Referer` header of the + // request being made. + get referrer() { + webidl.brandCheck(this, _Request); + if (this[kState].referrer === "no-referrer") { + return ""; + } + if (this[kState].referrer === "client") { + return "about:client"; + } + return this[kState].referrer.toString(); + } + // Returns the referrer policy associated with request. + // This is used during fetching to compute the value of the request’s + // referrer. + get referrerPolicy() { + webidl.brandCheck(this, _Request); + return this[kState].referrerPolicy; + } + // Returns the mode associated with request, which is a string indicating + // whether the request will use CORS, or will be restricted to same-origin + // URLs. + get mode() { + webidl.brandCheck(this, _Request); + return this[kState].mode; + } + // Returns the credentials mode associated with request, + // which is a string indicating whether credentials will be sent with the + // request always, never, or only when sent to a same-origin URL. + get credentials() { + return this[kState].credentials; + } + // Returns the cache mode associated with request, + // which is a string indicating how the request will + // interact with the browser’s cache when fetching. + get cache() { + webidl.brandCheck(this, _Request); + return this[kState].cache; + } + // Returns the redirect mode associated with request, + // which is a string indicating how redirects for the + // request will be handled during fetching. A request + // will follow redirects by default. + get redirect() { + webidl.brandCheck(this, _Request); + return this[kState].redirect; + } + // Returns request’s subresource integrity metadata, which is a + // cryptographic hash of the resource being fetched. Its value + // consists of multiple hashes separated by whitespace. [SRI] + get integrity() { + webidl.brandCheck(this, _Request); + return this[kState].integrity; + } + // Returns a boolean indicating whether or not request can outlive the + // global in which it was created. + get keepalive() { + webidl.brandCheck(this, _Request); + return this[kState].keepalive; + } + // Returns a boolean indicating whether or not request is for a reload + // navigation. + get isReloadNavigation() { + webidl.brandCheck(this, _Request); + return this[kState].reloadNavigation; + } + // Returns a boolean indicating whether or not request is for a history + // navigation (a.k.a. back-forward navigation). + get isHistoryNavigation() { + webidl.brandCheck(this, _Request); + return this[kState].historyNavigation; + } + // Returns the signal associated with request, which is an AbortSignal + // object indicating whether or not request has been aborted, and its + // abort event handler. + get signal() { + webidl.brandCheck(this, _Request); + return this[kSignal]; + } + get body() { + webidl.brandCheck(this, _Request); + return this[kState].body ? this[kState].body.stream : null; + } + get bodyUsed() { + webidl.brandCheck(this, _Request); + return !!this[kState].body && util2.isDisturbed(this[kState].body.stream); + } + get duplex() { + webidl.brandCheck(this, _Request); + return "half"; + } + // Returns a clone of request. + clone() { + webidl.brandCheck(this, _Request); + if (bodyUnusable(this)) { + throw new TypeError("unusable"); + } + const clonedRequest = cloneRequest(this[kState]); + const ac = new AbortController(); + if (this.signal.aborted) { + ac.abort(this.signal.reason); + } else { + let list = dependentControllerMap.get(this.signal); + if (list === void 0) { + list = /* @__PURE__ */ new Set(); + dependentControllerMap.set(this.signal, list); + } + const acRef = new WeakRef(ac); + list.add(acRef); + util2.addAbortListener( + ac.signal, + buildAbort(acRef) + ); + } + return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders])); + } + [nodeUtil.inspect.custom](depth, options) { + if (options.depth === null) { + options.depth = 2; + } + options.colors ??= true; + const properties = { + method: this.method, + url: this.url, + headers: this.headers, + destination: this.destination, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + mode: this.mode, + credentials: this.credentials, + cache: this.cache, + redirect: this.redirect, + integrity: this.integrity, + keepalive: this.keepalive, + isReloadNavigation: this.isReloadNavigation, + isHistoryNavigation: this.isHistoryNavigation, + signal: this.signal + }; + return `Request ${nodeUtil.formatWithOptions(options, properties)}`; + } + }; + mixinBody(Request); + function makeRequest(init) { + return { + method: init.method ?? "GET", + localURLsOnly: init.localURLsOnly ?? false, + unsafeRequest: init.unsafeRequest ?? false, + body: init.body ?? null, + client: init.client ?? null, + reservedClient: init.reservedClient ?? null, + replacesClientId: init.replacesClientId ?? "", + window: init.window ?? "client", + keepalive: init.keepalive ?? false, + serviceWorkers: init.serviceWorkers ?? "all", + initiator: init.initiator ?? "", + destination: init.destination ?? "", + priority: init.priority ?? null, + origin: init.origin ?? "client", + policyContainer: init.policyContainer ?? "client", + referrer: init.referrer ?? "client", + referrerPolicy: init.referrerPolicy ?? "", + mode: init.mode ?? "no-cors", + useCORSPreflightFlag: init.useCORSPreflightFlag ?? false, + credentials: init.credentials ?? "same-origin", + useCredentials: init.useCredentials ?? false, + cache: init.cache ?? "default", + redirect: init.redirect ?? "follow", + integrity: init.integrity ?? "", + cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? "", + parserMetadata: init.parserMetadata ?? "", + reloadNavigation: init.reloadNavigation ?? false, + historyNavigation: init.historyNavigation ?? false, + userActivation: init.userActivation ?? false, + taintedOrigin: init.taintedOrigin ?? false, + redirectCount: init.redirectCount ?? 0, + responseTainting: init.responseTainting ?? "basic", + preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false, + done: init.done ?? false, + timingAllowFailed: init.timingAllowFailed ?? false, + urlList: init.urlList, + url: init.urlList[0], + headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList() + }; + } + function cloneRequest(request2) { + const newRequest = makeRequest({ ...request2, body: null }); + if (request2.body != null) { + newRequest.body = cloneBody(newRequest, request2.body); + } + return newRequest; + } + function fromInnerRequest(innerRequest, signal, guard) { + const request2 = new Request(kConstruct); + request2[kState] = innerRequest; + request2[kSignal] = signal; + request2[kHeaders] = new Headers2(kConstruct); + setHeadersList(request2[kHeaders], innerRequest.headersList); + setHeadersGuard(request2[kHeaders], guard); + return request2; + } + Object.defineProperties(Request.prototype, { + method: kEnumerableProperty, + url: kEnumerableProperty, + headers: kEnumerableProperty, + redirect: kEnumerableProperty, + clone: kEnumerableProperty, + signal: kEnumerableProperty, + duplex: kEnumerableProperty, + destination: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + isHistoryNavigation: kEnumerableProperty, + isReloadNavigation: kEnumerableProperty, + keepalive: kEnumerableProperty, + integrity: kEnumerableProperty, + cache: kEnumerableProperty, + credentials: kEnumerableProperty, + attribute: kEnumerableProperty, + referrerPolicy: kEnumerableProperty, + referrer: kEnumerableProperty, + mode: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Request", + configurable: true + } + }); + webidl.converters.Request = webidl.interfaceConverter( + Request + ); + webidl.converters.RequestInfo = function(V, prefix, argument) { + if (typeof V === "string") { + return webidl.converters.USVString(V, prefix, argument); + } + if (V instanceof Request) { + return webidl.converters.Request(V, prefix, argument); + } + return webidl.converters.USVString(V, prefix, argument); + }; + webidl.converters.AbortSignal = webidl.interfaceConverter( + AbortSignal + ); + webidl.converters.RequestInit = webidl.dictionaryConverter([ + { + key: "method", + converter: webidl.converters.ByteString + }, + { + key: "headers", + converter: webidl.converters.HeadersInit + }, + { + key: "body", + converter: webidl.nullableConverter( + webidl.converters.BodyInit + ) + }, + { + key: "referrer", + converter: webidl.converters.USVString + }, + { + key: "referrerPolicy", + converter: webidl.converters.DOMString, + // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy + allowedValues: referrerPolicy + }, + { + key: "mode", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#concept-request-mode + allowedValues: requestMode + }, + { + key: "credentials", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcredentials + allowedValues: requestCredentials + }, + { + key: "cache", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcache + allowedValues: requestCache + }, + { + key: "redirect", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestredirect + allowedValues: requestRedirect + }, + { + key: "integrity", + converter: webidl.converters.DOMString + }, + { + key: "keepalive", + converter: webidl.converters.boolean + }, + { + key: "signal", + converter: webidl.nullableConverter( + (signal) => webidl.converters.AbortSignal( + signal, + "RequestInit", + "signal", + { strict: false } + ) + ) + }, + { + key: "window", + converter: webidl.converters.any + }, + { + key: "duplex", + converter: webidl.converters.DOMString, + allowedValues: requestDuplex + }, + { + key: "dispatcher", + // undici specific option + converter: webidl.converters.any + } + ]); + module2.exports = { Request, makeRequest, fromInnerRequest, cloneRequest }; + } +}); + +// node_modules/undici/lib/web/fetch/index.js +var require_fetch = __commonJS({ + "node_modules/undici/lib/web/fetch/index.js"(exports2, module2) { + "use strict"; + var { + makeNetworkError, + makeAppropriateNetworkError, + filterResponse, + makeResponse, + fromInnerResponse + } = require_response(); + var { HeadersList } = require_headers(); + var { Request, cloneRequest } = require_request2(); + var zlib = require("node:zlib"); + var { + bytesMatch, + makePolicyContainer, + clonePolicyContainer, + requestBadPort, + TAOCheck, + appendRequestOriginHeader, + responseLocationURL, + requestCurrentURL, + setRequestReferrerPolicyOnRedirect, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + createOpaqueTimingInfo, + appendFetchMetadata, + corsCheck, + crossOriginResourcePolicyCheck, + determineRequestsReferrer, + coarsenedSharedCurrentTime, + createDeferredPromise, + isBlobLike, + sameOrigin, + isCancelled, + isAborted, + isErrorLike, + fullyReadBody, + readableStreamClose, + isomorphicEncode, + urlIsLocal, + urlIsHttpHttpsScheme, + urlHasHttpsScheme, + clampAndCoarsenConnectionTimingInfo, + simpleRangeHeaderValue, + buildContentRange, + createInflate, + extractMimeType + } = require_util2(); + var { kState, kDispatcher } = require_symbols2(); + var assert = require("node:assert"); + var { safelyExtractBody, extractBody } = require_body(); + var { + redirectStatusSet, + nullBodyStatus, + safeMethodsSet, + requestBodyHeader, + subresourceSet + } = require_constants3(); + var EE = require("node:events"); + var { Readable, pipeline: pipeline2, finished } = require("node:stream"); + var { addAbortListener, isErrored, isReadable, bufferToLowerCasedHeaderName } = require_util(); + var { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require_data_url(); + var { getGlobalDispatcher } = require_global2(); + var { webidl } = require_webidl(); + var { STATUS_CODES } = require("node:http"); + var GET_OR_HEAD = ["GET", "HEAD"]; + var defaultUserAgent = typeof __UNDICI_IS_NODE__ !== "undefined" || typeof esbuildDetection !== "undefined" ? "node" : "undici"; + var resolveObjectURL; + var Fetch = class extends EE { + constructor(dispatcher) { + super(); + this.dispatcher = dispatcher; + this.connection = null; + this.dump = false; + this.state = "ongoing"; + } + terminate(reason) { + if (this.state !== "ongoing") { + return; + } + this.state = "terminated"; + this.connection?.destroy(reason); + this.emit("terminated", reason); + } + // https://fetch.spec.whatwg.org/#fetch-controller-abort + abort(error2) { + if (this.state !== "ongoing") { + return; + } + this.state = "aborted"; + if (!error2) { + error2 = new DOMException("The operation was aborted.", "AbortError"); + } + this.serializedAbortReason = error2; + this.connection?.destroy(error2); + this.emit("terminated", error2); + } + }; + function handleFetchDone(response) { + finalizeAndReportTiming(response, "fetch"); + } + function fetch2(input, init = void 0) { + webidl.argumentLengthCheck(arguments, 1, "globalThis.fetch"); + let p = createDeferredPromise(); + let requestObject; + try { + requestObject = new Request(input, init); + } catch (e) { + p.reject(e); + return p.promise; + } + const request2 = requestObject[kState]; + if (requestObject.signal.aborted) { + abortFetch(p, request2, null, requestObject.signal.reason); + return p.promise; + } + const globalObject = request2.client.globalObject; + if (globalObject?.constructor?.name === "ServiceWorkerGlobalScope") { + request2.serviceWorkers = "none"; + } + let responseObject = null; + let locallyAborted = false; + let controller = null; + addAbortListener( + requestObject.signal, + () => { + locallyAborted = true; + assert(controller != null); + controller.abort(requestObject.signal.reason); + const realResponse = responseObject?.deref(); + abortFetch(p, request2, realResponse, requestObject.signal.reason); + } + ); + const processResponse = (response) => { + if (locallyAborted) { + return; + } + if (response.aborted) { + abortFetch(p, request2, responseObject, controller.serializedAbortReason); + return; + } + if (response.type === "error") { + p.reject(new TypeError("fetch failed", { cause: response.error })); + return; + } + responseObject = new WeakRef(fromInnerResponse(response, "immutable")); + p.resolve(responseObject.deref()); + p = null; + }; + controller = fetching({ + request: request2, + processResponseEndOfBody: handleFetchDone, + processResponse, + dispatcher: requestObject[kDispatcher] + // undici + }); + return p.promise; + } + function finalizeAndReportTiming(response, initiatorType = "other") { + if (response.type === "error" && response.aborted) { + return; + } + if (!response.urlList?.length) { + return; + } + const originalURL = response.urlList[0]; + let timingInfo = response.timingInfo; + let cacheState = response.cacheState; + if (!urlIsHttpHttpsScheme(originalURL)) { + return; + } + if (timingInfo === null) { + return; + } + if (!response.timingAllowPassed) { + timingInfo = createOpaqueTimingInfo({ + startTime: timingInfo.startTime + }); + cacheState = ""; + } + timingInfo.endTime = coarsenedSharedCurrentTime(); + response.timingInfo = timingInfo; + markResourceTiming( + timingInfo, + originalURL.href, + initiatorType, + globalThis, + cacheState + ); + } + var markResourceTiming = performance.markResourceTiming; + function abortFetch(p, request2, responseObject, error2) { + if (p) { + p.reject(error2); + } + if (request2.body != null && isReadable(request2.body?.stream)) { + request2.body.stream.cancel(error2).catch((err) => { + if (err.code === "ERR_INVALID_STATE") { + return; + } + throw err; + }); + } + if (responseObject == null) { + return; + } + const response = responseObject[kState]; + if (response.body != null && isReadable(response.body?.stream)) { + response.body.stream.cancel(error2).catch((err) => { + if (err.code === "ERR_INVALID_STATE") { + return; + } + throw err; + }); + } + } + function fetching({ + request: request2, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseEndOfBody, + processResponseConsumeBody, + useParallelQueue = false, + dispatcher = getGlobalDispatcher() + // undici + }) { + assert(dispatcher); + let taskDestination = null; + let crossOriginIsolatedCapability = false; + if (request2.client != null) { + taskDestination = request2.client.globalObject; + crossOriginIsolatedCapability = request2.client.crossOriginIsolatedCapability; + } + const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability); + const timingInfo = createOpaqueTimingInfo({ + startTime: currentTime + }); + const fetchParams = { + controller: new Fetch(dispatcher), + request: request2, + timingInfo, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseConsumeBody, + processResponseEndOfBody, + taskDestination, + crossOriginIsolatedCapability + }; + assert(!request2.body || request2.body.stream); + if (request2.window === "client") { + request2.window = request2.client?.globalObject?.constructor?.name === "Window" ? request2.client : "no-window"; + } + if (request2.origin === "client") { + request2.origin = request2.client.origin; + } + if (request2.policyContainer === "client") { + if (request2.client != null) { + request2.policyContainer = clonePolicyContainer( + request2.client.policyContainer + ); + } else { + request2.policyContainer = makePolicyContainer(); + } + } + if (!request2.headersList.contains("accept", true)) { + const value = "*/*"; + request2.headersList.append("accept", value, true); + } + if (!request2.headersList.contains("accept-language", true)) { + request2.headersList.append("accept-language", "*", true); + } + if (request2.priority === null) { + } + if (subresourceSet.has(request2.destination)) { + } + mainFetch(fetchParams).catch((err) => { + fetchParams.controller.terminate(err); + }); + return fetchParams.controller; + } + async function mainFetch(fetchParams, recursive = false) { + const request2 = fetchParams.request; + let response = null; + if (request2.localURLsOnly && !urlIsLocal(requestCurrentURL(request2))) { + response = makeNetworkError("local URLs only"); + } + tryUpgradeRequestToAPotentiallyTrustworthyURL(request2); + if (requestBadPort(request2) === "blocked") { + response = makeNetworkError("bad port"); + } + if (request2.referrerPolicy === "") { + request2.referrerPolicy = request2.policyContainer.referrerPolicy; + } + if (request2.referrer !== "no-referrer") { + request2.referrer = determineRequestsReferrer(request2); + } + if (response === null) { + response = await (async () => { + const currentURL = requestCurrentURL(request2); + if ( + // - request’s current URL’s origin is same origin with request’s origin, + // and request’s response tainting is "basic" + sameOrigin(currentURL, request2.url) && request2.responseTainting === "basic" || // request’s current URL’s scheme is "data" + currentURL.protocol === "data:" || // - request’s mode is "navigate" or "websocket" + (request2.mode === "navigate" || request2.mode === "websocket") + ) { + request2.responseTainting = "basic"; + return await schemeFetch(fetchParams); + } + if (request2.mode === "same-origin") { + return makeNetworkError('request mode cannot be "same-origin"'); + } + if (request2.mode === "no-cors") { + if (request2.redirect !== "follow") { + return makeNetworkError( + 'redirect mode cannot be "follow" for "no-cors" request' + ); + } + request2.responseTainting = "opaque"; + return await schemeFetch(fetchParams); + } + if (!urlIsHttpHttpsScheme(requestCurrentURL(request2))) { + return makeNetworkError("URL scheme must be a HTTP(S) scheme"); + } + request2.responseTainting = "cors"; + return await httpFetch(fetchParams); + })(); + } + if (recursive) { + return response; + } + if (response.status !== 0 && !response.internalResponse) { + if (request2.responseTainting === "cors") { + } + if (request2.responseTainting === "basic") { + response = filterResponse(response, "basic"); + } else if (request2.responseTainting === "cors") { + response = filterResponse(response, "cors"); + } else if (request2.responseTainting === "opaque") { + response = filterResponse(response, "opaque"); + } else { + assert(false); + } + } + let internalResponse = response.status === 0 ? response : response.internalResponse; + if (internalResponse.urlList.length === 0) { + internalResponse.urlList.push(...request2.urlList); + } + if (!request2.timingAllowFailed) { + response.timingAllowPassed = true; + } + if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request2.headers.contains("range", true)) { + response = internalResponse = makeNetworkError(); + } + if (response.status !== 0 && (request2.method === "HEAD" || request2.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) { + internalResponse.body = null; + fetchParams.controller.dump = true; + } + if (request2.integrity) { + const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason)); + if (request2.responseTainting === "opaque" || response.body == null) { + processBodyError(response.error); + return; + } + const processBody = (bytes) => { + if (!bytesMatch(bytes, request2.integrity)) { + processBodyError("integrity mismatch"); + return; + } + response.body = safelyExtractBody(bytes)[0]; + fetchFinale(fetchParams, response); + }; + await fullyReadBody(response.body, processBody, processBodyError); + } else { + fetchFinale(fetchParams, response); + } + } + function schemeFetch(fetchParams) { + if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { + return Promise.resolve(makeAppropriateNetworkError(fetchParams)); + } + const { request: request2 } = fetchParams; + const { protocol: scheme } = requestCurrentURL(request2); + switch (scheme) { + case "about:": { + return Promise.resolve(makeNetworkError("about scheme is not supported")); + } + case "blob:": { + if (!resolveObjectURL) { + resolveObjectURL = require("node:buffer").resolveObjectURL; + } + const blobURLEntry = requestCurrentURL(request2); + if (blobURLEntry.search.length !== 0) { + return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource.")); + } + const blob = resolveObjectURL(blobURLEntry.toString()); + if (request2.method !== "GET" || !isBlobLike(blob)) { + return Promise.resolve(makeNetworkError("invalid method")); + } + const response = makeResponse(); + const fullLength = blob.size; + const serializedFullLength = isomorphicEncode(`${fullLength}`); + const type = blob.type; + if (!request2.headersList.contains("range", true)) { + const bodyWithType = extractBody(blob); + response.statusText = "OK"; + response.body = bodyWithType[0]; + response.headersList.set("content-length", serializedFullLength, true); + response.headersList.set("content-type", type, true); + } else { + response.rangeRequested = true; + const rangeHeader = request2.headersList.get("range", true); + const rangeValue = simpleRangeHeaderValue(rangeHeader, true); + if (rangeValue === "failure") { + return Promise.resolve(makeNetworkError("failed to fetch the data URL")); + } + let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue; + if (rangeStart === null) { + rangeStart = fullLength - rangeEnd; + rangeEnd = rangeStart + rangeEnd - 1; + } else { + if (rangeStart >= fullLength) { + return Promise.resolve(makeNetworkError("Range start is greater than the blob's size.")); + } + if (rangeEnd === null || rangeEnd >= fullLength) { + rangeEnd = fullLength - 1; + } + } + const slicedBlob = blob.slice(rangeStart, rangeEnd, type); + const slicedBodyWithType = extractBody(slicedBlob); + response.body = slicedBodyWithType[0]; + const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`); + const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength); + response.status = 206; + response.statusText = "Partial Content"; + response.headersList.set("content-length", serializedSlicedLength, true); + response.headersList.set("content-type", type, true); + response.headersList.set("content-range", contentRange, true); + } + return Promise.resolve(response); + } + case "data:": { + const currentURL = requestCurrentURL(request2); + const dataURLStruct = dataURLProcessor(currentURL); + if (dataURLStruct === "failure") { + return Promise.resolve(makeNetworkError("failed to fetch the data URL")); + } + const mimeType = serializeAMimeType(dataURLStruct.mimeType); + return Promise.resolve(makeResponse({ + statusText: "OK", + headersList: [ + ["content-type", { name: "Content-Type", value: mimeType }] + ], + body: safelyExtractBody(dataURLStruct.body)[0] + })); + } + case "file:": { + return Promise.resolve(makeNetworkError("not implemented... yet...")); + } + case "http:": + case "https:": { + return httpFetch(fetchParams).catch((err) => makeNetworkError(err)); + } + default: { + return Promise.resolve(makeNetworkError("unknown scheme")); + } + } + } + function finalizeResponse(fetchParams, response) { + fetchParams.request.done = true; + if (fetchParams.processResponseDone != null) { + queueMicrotask(() => fetchParams.processResponseDone(response)); + } + } + function fetchFinale(fetchParams, response) { + let timingInfo = fetchParams.timingInfo; + const processResponseEndOfBody = () => { + const unsafeEndTime = Date.now(); + if (fetchParams.request.destination === "document") { + fetchParams.controller.fullTimingInfo = timingInfo; + } + fetchParams.controller.reportTimingSteps = () => { + if (fetchParams.request.url.protocol !== "https:") { + return; + } + timingInfo.endTime = unsafeEndTime; + let cacheState = response.cacheState; + const bodyInfo = response.bodyInfo; + if (!response.timingAllowPassed) { + timingInfo = createOpaqueTimingInfo(timingInfo); + cacheState = ""; + } + let responseStatus = 0; + if (fetchParams.request.mode !== "navigator" || !response.hasCrossOriginRedirects) { + responseStatus = response.status; + const mimeType = extractMimeType(response.headersList); + if (mimeType !== "failure") { + bodyInfo.contentType = minimizeSupportedMimeType(mimeType); + } + } + if (fetchParams.request.initiatorType != null) { + markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus); + } + }; + const processResponseEndOfBodyTask = () => { + fetchParams.request.done = true; + if (fetchParams.processResponseEndOfBody != null) { + queueMicrotask(() => fetchParams.processResponseEndOfBody(response)); + } + if (fetchParams.request.initiatorType != null) { + fetchParams.controller.reportTimingSteps(); + } + }; + queueMicrotask(() => processResponseEndOfBodyTask()); + }; + if (fetchParams.processResponse != null) { + queueMicrotask(() => { + fetchParams.processResponse(response); + fetchParams.processResponse = null; + }); + } + const internalResponse = response.type === "error" ? response : response.internalResponse ?? response; + if (internalResponse.body == null) { + processResponseEndOfBody(); + } else { + finished(internalResponse.body.stream, () => { + processResponseEndOfBody(); + }); + } + } + async function httpFetch(fetchParams) { + const request2 = fetchParams.request; + let response = null; + let actualResponse = null; + const timingInfo = fetchParams.timingInfo; + if (request2.serviceWorkers === "all") { + } + if (response === null) { + if (request2.redirect === "follow") { + request2.serviceWorkers = "none"; + } + actualResponse = response = await httpNetworkOrCacheFetch(fetchParams); + if (request2.responseTainting === "cors" && corsCheck(request2, response) === "failure") { + return makeNetworkError("cors failure"); + } + if (TAOCheck(request2, response) === "failure") { + request2.timingAllowFailed = true; + } + } + if ((request2.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck( + request2.origin, + request2.client, + request2.destination, + actualResponse + ) === "blocked") { + return makeNetworkError("blocked"); + } + if (redirectStatusSet.has(actualResponse.status)) { + if (request2.redirect !== "manual") { + fetchParams.controller.connection.destroy(void 0, false); + } + if (request2.redirect === "error") { + response = makeNetworkError("unexpected redirect"); + } else if (request2.redirect === "manual") { + response = actualResponse; + } else if (request2.redirect === "follow") { + response = await httpRedirectFetch(fetchParams, response); + } else { + assert(false); + } + } + response.timingInfo = timingInfo; + return response; + } + function httpRedirectFetch(fetchParams, response) { + const request2 = fetchParams.request; + const actualResponse = response.internalResponse ? response.internalResponse : response; + let locationURL; + try { + locationURL = responseLocationURL( + actualResponse, + requestCurrentURL(request2).hash + ); + if (locationURL == null) { + return response; + } + } catch (err) { + return Promise.resolve(makeNetworkError(err)); + } + if (!urlIsHttpHttpsScheme(locationURL)) { + return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme")); + } + if (request2.redirectCount === 20) { + return Promise.resolve(makeNetworkError("redirect count exceeded")); + } + request2.redirectCount += 1; + if (request2.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request2, locationURL)) { + return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')); + } + if (request2.responseTainting === "cors" && (locationURL.username || locationURL.password)) { + return Promise.resolve(makeNetworkError( + 'URL cannot contain credentials for request mode "cors"' + )); + } + if (actualResponse.status !== 303 && request2.body != null && request2.body.source == null) { + return Promise.resolve(makeNetworkError()); + } + if ([301, 302].includes(actualResponse.status) && request2.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request2.method)) { + request2.method = "GET"; + request2.body = null; + for (const headerName of requestBodyHeader) { + request2.headersList.delete(headerName); + } + } + if (!sameOrigin(requestCurrentURL(request2), locationURL)) { + request2.headersList.delete("authorization", true); + request2.headersList.delete("proxy-authorization", true); + request2.headersList.delete("cookie", true); + request2.headersList.delete("host", true); + } + if (request2.body != null) { + assert(request2.body.source != null); + request2.body = safelyExtractBody(request2.body.source)[0]; + } + const timingInfo = fetchParams.timingInfo; + timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + if (timingInfo.redirectStartTime === 0) { + timingInfo.redirectStartTime = timingInfo.startTime; + } + request2.urlList.push(locationURL); + setRequestReferrerPolicyOnRedirect(request2, actualResponse); + return mainFetch(fetchParams, true); + } + async function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) { + const request2 = fetchParams.request; + let httpFetchParams = null; + let httpRequest = null; + let response = null; + const httpCache = null; + const revalidatingFlag = false; + if (request2.window === "no-window" && request2.redirect === "error") { + httpFetchParams = fetchParams; + httpRequest = request2; + } else { + httpRequest = cloneRequest(request2); + httpFetchParams = { ...fetchParams }; + httpFetchParams.request = httpRequest; + } + const includeCredentials = request2.credentials === "include" || request2.credentials === "same-origin" && request2.responseTainting === "basic"; + const contentLength = httpRequest.body ? httpRequest.body.length : null; + let contentLengthHeaderValue = null; + if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) { + contentLengthHeaderValue = "0"; + } + if (contentLength != null) { + contentLengthHeaderValue = isomorphicEncode(`${contentLength}`); + } + if (contentLengthHeaderValue != null) { + httpRequest.headersList.append("content-length", contentLengthHeaderValue, true); + } + if (contentLength != null && httpRequest.keepalive) { + } + if (httpRequest.referrer instanceof URL) { + httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href), true); + } + appendRequestOriginHeader(httpRequest); + appendFetchMetadata(httpRequest); + if (!httpRequest.headersList.contains("user-agent", true)) { + httpRequest.headersList.append("user-agent", defaultUserAgent); + } + if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since", true) || httpRequest.headersList.contains("if-none-match", true) || httpRequest.headersList.contains("if-unmodified-since", true) || httpRequest.headersList.contains("if-match", true) || httpRequest.headersList.contains("if-range", true))) { + httpRequest.cache = "no-store"; + } + if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control", true)) { + httpRequest.headersList.append("cache-control", "max-age=0", true); + } + if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") { + if (!httpRequest.headersList.contains("pragma", true)) { + httpRequest.headersList.append("pragma", "no-cache", true); + } + if (!httpRequest.headersList.contains("cache-control", true)) { + httpRequest.headersList.append("cache-control", "no-cache", true); + } + } + if (httpRequest.headersList.contains("range", true)) { + httpRequest.headersList.append("accept-encoding", "identity", true); + } + if (!httpRequest.headersList.contains("accept-encoding", true)) { + if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { + httpRequest.headersList.append("accept-encoding", "br, gzip, deflate", true); + } else { + httpRequest.headersList.append("accept-encoding", "gzip, deflate", true); + } + } + httpRequest.headersList.delete("host", true); + if (includeCredentials) { + } + if (httpCache == null) { + httpRequest.cache = "no-store"; + } + if (httpRequest.cache !== "no-store" && httpRequest.cache !== "reload") { + } + if (response == null) { + if (httpRequest.cache === "only-if-cached") { + return makeNetworkError("only if cached"); + } + const forwardResponse = await httpNetworkFetch( + httpFetchParams, + includeCredentials, + isNewConnectionFetch + ); + if (!safeMethodsSet.has(httpRequest.method) && forwardResponse.status >= 200 && forwardResponse.status <= 399) { + } + if (revalidatingFlag && forwardResponse.status === 304) { + } + if (response == null) { + response = forwardResponse; + } + } + response.urlList = [...httpRequest.urlList]; + if (httpRequest.headersList.contains("range", true)) { + response.rangeRequested = true; + } + response.requestIncludesCredentials = includeCredentials; + if (response.status === 407) { + if (request2.window === "no-window") { + return makeNetworkError(); + } + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams); + } + return makeNetworkError("proxy authentication required"); + } + if ( + // response’s status is 421 + response.status === 421 && // isNewConnectionFetch is false + !isNewConnectionFetch && // request’s body is null, or request’s body is non-null and request’s body’s source is non-null + (request2.body == null || request2.body.source != null) + ) { + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams); + } + fetchParams.controller.connection.destroy(); + response = await httpNetworkOrCacheFetch( + fetchParams, + isAuthenticationFetch, + true + ); + } + if (isAuthenticationFetch) { + } + return response; + } + async function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) { + assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed); + fetchParams.controller.connection = { + abort: null, + destroyed: false, + destroy(err, abort = true) { + if (!this.destroyed) { + this.destroyed = true; + if (abort) { + this.abort?.(err ?? new DOMException("The operation was aborted.", "AbortError")); + } + } + } + }; + const request2 = fetchParams.request; + let response = null; + const timingInfo = fetchParams.timingInfo; + const httpCache = null; + if (httpCache == null) { + request2.cache = "no-store"; + } + const newConnection = forceNewConnection ? "yes" : "no"; + if (request2.mode === "websocket") { + } else { + } + let requestBody = null; + if (request2.body == null && fetchParams.processRequestEndOfBody) { + queueMicrotask(() => fetchParams.processRequestEndOfBody()); + } else if (request2.body != null) { + const processBodyChunk = async function* (bytes) { + if (isCancelled(fetchParams)) { + return; + } + yield bytes; + fetchParams.processRequestBodyChunkLength?.(bytes.byteLength); + }; + const processEndOfBody = () => { + if (isCancelled(fetchParams)) { + return; + } + if (fetchParams.processRequestEndOfBody) { + fetchParams.processRequestEndOfBody(); + } + }; + const processBodyError = (e) => { + if (isCancelled(fetchParams)) { + return; + } + if (e.name === "AbortError") { + fetchParams.controller.abort(); + } else { + fetchParams.controller.terminate(e); + } + }; + requestBody = (async function* () { + try { + for await (const bytes of request2.body.stream) { + yield* processBodyChunk(bytes); + } + processEndOfBody(); + } catch (err) { + processBodyError(err); + } + })(); + } + try { + const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody }); + if (socket) { + response = makeResponse({ status, statusText, headersList, socket }); + } else { + const iterator2 = body[Symbol.asyncIterator](); + fetchParams.controller.next = () => iterator2.next(); + response = makeResponse({ status, statusText, headersList }); + } + } catch (err) { + if (err.name === "AbortError") { + fetchParams.controller.connection.destroy(); + return makeAppropriateNetworkError(fetchParams, err); + } + return makeNetworkError(err); + } + const pullAlgorithm = async () => { + await fetchParams.controller.resume(); + }; + const cancelAlgorithm = (reason) => { + if (!isCancelled(fetchParams)) { + fetchParams.controller.abort(reason); + } + }; + const stream2 = new ReadableStream( + { + async start(controller) { + fetchParams.controller.controller = controller; + }, + async pull(controller) { + await pullAlgorithm(controller); + }, + async cancel(reason) { + await cancelAlgorithm(reason); + }, + type: "bytes" + } + ); + response.body = { stream: stream2, source: null, length: null }; + fetchParams.controller.onAborted = onAborted; + fetchParams.controller.on("terminated", onAborted); + fetchParams.controller.resume = async () => { + while (true) { + let bytes; + let isFailure; + try { + const { done, value } = await fetchParams.controller.next(); + if (isAborted(fetchParams)) { + break; + } + bytes = done ? void 0 : value; + } catch (err) { + if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { + bytes = void 0; + } else { + bytes = err; + isFailure = true; + } + } + if (bytes === void 0) { + readableStreamClose(fetchParams.controller.controller); + finalizeResponse(fetchParams, response); + return; + } + timingInfo.decodedBodySize += bytes?.byteLength ?? 0; + if (isFailure) { + fetchParams.controller.terminate(bytes); + return; + } + const buffer = new Uint8Array(bytes); + if (buffer.byteLength) { + fetchParams.controller.controller.enqueue(buffer); + } + if (isErrored(stream2)) { + fetchParams.controller.terminate(); + return; + } + if (fetchParams.controller.controller.desiredSize <= 0) { + return; + } + } + }; + function onAborted(reason) { + if (isAborted(fetchParams)) { + response.aborted = true; + if (isReadable(stream2)) { + fetchParams.controller.controller.error( + fetchParams.controller.serializedAbortReason + ); + } + } else { + if (isReadable(stream2)) { + fetchParams.controller.controller.error(new TypeError("terminated", { + cause: isErrorLike(reason) ? reason : void 0 + })); + } + } + fetchParams.controller.connection.destroy(); + } + return response; + function dispatch({ body }) { + const url = requestCurrentURL(request2); + const agent = fetchParams.controller.dispatcher; + return new Promise((resolve2, reject) => agent.dispatch( + { + path: url.pathname + url.search, + origin: url.origin, + method: request2.method, + body: agent.isMockActive ? request2.body && (request2.body.source || request2.body.stream) : body, + headers: request2.headersList.entries, + maxRedirections: 0, + upgrade: request2.mode === "websocket" ? "websocket" : void 0 + }, + { + body: null, + abort: null, + onConnect(abort) { + const { connection } = fetchParams.controller; + timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(void 0, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability); + if (connection.destroyed) { + abort(new DOMException("The operation was aborted.", "AbortError")); + } else { + fetchParams.controller.on("terminated", abort); + this.abort = connection.abort = abort; + } + timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + }, + onResponseStarted() { + timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + }, + onHeaders(status, rawHeaders, resume, statusText) { + if (status < 200) { + return; + } + let location = ""; + const headersList = new HeadersList(); + for (let i = 0; i < rawHeaders.length; i += 2) { + headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); + } + location = headersList.get("location", true); + this.body = new Readable({ read: resume }); + const decoders = []; + const willFollow = location && request2.redirect === "follow" && redirectStatusSet.has(status); + if (request2.method !== "HEAD" && request2.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) { + const contentEncoding = headersList.get("content-encoding", true); + const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : []; + const maxContentEncodings = 5; + if (codings.length > maxContentEncodings) { + reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`)); + return true; + } + for (let i = codings.length - 1; i >= 0; --i) { + const coding = codings[i].trim(); + if (coding === "x-gzip" || coding === "gzip") { + decoders.push(zlib.createGunzip({ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH + })); + } else if (coding === "deflate") { + decoders.push(createInflate({ + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH + })); + } else if (coding === "br") { + decoders.push(zlib.createBrotliDecompress({ + flush: zlib.constants.BROTLI_OPERATION_FLUSH, + finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH + })); + } else { + decoders.length = 0; + break; + } + } + } + const onError = this.onError.bind(this); + resolve2({ + status, + statusText, + headersList, + body: decoders.length ? pipeline2(this.body, ...decoders, (err) => { + if (err) { + this.onError(err); + } + }).on("error", onError) : this.body.on("error", onError) + }); + return true; + }, + onData(chunk) { + if (fetchParams.controller.dump) { + return; + } + const bytes = chunk; + timingInfo.encodedBodySize += bytes.byteLength; + return this.body.push(bytes); + }, + onComplete() { + if (this.abort) { + fetchParams.controller.off("terminated", this.abort); + } + if (fetchParams.controller.onAborted) { + fetchParams.controller.off("terminated", fetchParams.controller.onAborted); + } + fetchParams.controller.ended = true; + this.body.push(null); + }, + onError(error2) { + if (this.abort) { + fetchParams.controller.off("terminated", this.abort); + } + this.body?.destroy(error2); + fetchParams.controller.terminate(error2); + reject(error2); + }, + onUpgrade(status, rawHeaders, socket) { + if (status !== 101) { + return; + } + const headersList = new HeadersList(); + for (let i = 0; i < rawHeaders.length; i += 2) { + headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); + } + resolve2({ + status, + statusText: STATUS_CODES[status], + headersList, + socket + }); + return true; + } + } + )); + } + } + module2.exports = { + fetch: fetch2, + Fetch, + fetching, + finalizeAndReportTiming + }; + } +}); + +// node_modules/undici/lib/web/fileapi/symbols.js +var require_symbols3 = __commonJS({ + "node_modules/undici/lib/web/fileapi/symbols.js"(exports2, module2) { + "use strict"; + module2.exports = { + kState: /* @__PURE__ */ Symbol("FileReader state"), + kResult: /* @__PURE__ */ Symbol("FileReader result"), + kError: /* @__PURE__ */ Symbol("FileReader error"), + kLastProgressEventFired: /* @__PURE__ */ Symbol("FileReader last progress event fired timestamp"), + kEvents: /* @__PURE__ */ Symbol("FileReader events"), + kAborted: /* @__PURE__ */ Symbol("FileReader aborted") + }; + } +}); + +// node_modules/undici/lib/web/fileapi/progressevent.js +var require_progressevent = __commonJS({ + "node_modules/undici/lib/web/fileapi/progressevent.js"(exports2, module2) { + "use strict"; + var { webidl } = require_webidl(); + var kState = /* @__PURE__ */ Symbol("ProgressEvent state"); + var ProgressEvent = class _ProgressEvent extends Event { + constructor(type, eventInitDict = {}) { + type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type"); + eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {}); + super(type, eventInitDict); + this[kState] = { + lengthComputable: eventInitDict.lengthComputable, + loaded: eventInitDict.loaded, + total: eventInitDict.total + }; + } + get lengthComputable() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].lengthComputable; + } + get loaded() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].loaded; + } + get total() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].total; + } + }; + webidl.converters.ProgressEventInit = webidl.dictionaryConverter([ + { + key: "lengthComputable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "loaded", + converter: webidl.converters["unsigned long long"], + defaultValue: () => 0 + }, + { + key: "total", + converter: webidl.converters["unsigned long long"], + defaultValue: () => 0 + }, + { + key: "bubbles", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "cancelable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "composed", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]); + module2.exports = { + ProgressEvent + }; + } +}); + +// node_modules/undici/lib/web/fileapi/encoding.js +var require_encoding = __commonJS({ + "node_modules/undici/lib/web/fileapi/encoding.js"(exports2, module2) { + "use strict"; + function getEncoding(label) { + if (!label) { + return "failure"; + } + switch (label.trim().toLowerCase()) { + case "unicode-1-1-utf-8": + case "unicode11utf8": + case "unicode20utf8": + case "utf-8": + case "utf8": + case "x-unicode20utf8": + return "UTF-8"; + case "866": + case "cp866": + case "csibm866": + case "ibm866": + return "IBM866"; + case "csisolatin2": + case "iso-8859-2": + case "iso-ir-101": + case "iso8859-2": + case "iso88592": + case "iso_8859-2": + case "iso_8859-2:1987": + case "l2": + case "latin2": + return "ISO-8859-2"; + case "csisolatin3": + case "iso-8859-3": + case "iso-ir-109": + case "iso8859-3": + case "iso88593": + case "iso_8859-3": + case "iso_8859-3:1988": + case "l3": + case "latin3": + return "ISO-8859-3"; + case "csisolatin4": + case "iso-8859-4": + case "iso-ir-110": + case "iso8859-4": + case "iso88594": + case "iso_8859-4": + case "iso_8859-4:1988": + case "l4": + case "latin4": + return "ISO-8859-4"; + case "csisolatincyrillic": + case "cyrillic": + case "iso-8859-5": + case "iso-ir-144": + case "iso8859-5": + case "iso88595": + case "iso_8859-5": + case "iso_8859-5:1988": + return "ISO-8859-5"; + case "arabic": + case "asmo-708": + case "csiso88596e": + case "csiso88596i": + case "csisolatinarabic": + case "ecma-114": + case "iso-8859-6": + case "iso-8859-6-e": + case "iso-8859-6-i": + case "iso-ir-127": + case "iso8859-6": + case "iso88596": + case "iso_8859-6": + case "iso_8859-6:1987": + return "ISO-8859-6"; + case "csisolatingreek": + case "ecma-118": + case "elot_928": + case "greek": + case "greek8": + case "iso-8859-7": + case "iso-ir-126": + case "iso8859-7": + case "iso88597": + case "iso_8859-7": + case "iso_8859-7:1987": + case "sun_eu_greek": + return "ISO-8859-7"; + case "csiso88598e": + case "csisolatinhebrew": + case "hebrew": + case "iso-8859-8": + case "iso-8859-8-e": + case "iso-ir-138": + case "iso8859-8": + case "iso88598": + case "iso_8859-8": + case "iso_8859-8:1988": + case "visual": + return "ISO-8859-8"; + case "csiso88598i": + case "iso-8859-8-i": + case "logical": + return "ISO-8859-8-I"; + case "csisolatin6": + case "iso-8859-10": + case "iso-ir-157": + case "iso8859-10": + case "iso885910": + case "l6": + case "latin6": + return "ISO-8859-10"; + case "iso-8859-13": + case "iso8859-13": + case "iso885913": + return "ISO-8859-13"; + case "iso-8859-14": + case "iso8859-14": + case "iso885914": + return "ISO-8859-14"; + case "csisolatin9": + case "iso-8859-15": + case "iso8859-15": + case "iso885915": + case "iso_8859-15": + case "l9": + return "ISO-8859-15"; + case "iso-8859-16": + return "ISO-8859-16"; + case "cskoi8r": + case "koi": + case "koi8": + case "koi8-r": + case "koi8_r": + return "KOI8-R"; + case "koi8-ru": + case "koi8-u": + return "KOI8-U"; + case "csmacintosh": + case "mac": + case "macintosh": + case "x-mac-roman": + return "macintosh"; + case "iso-8859-11": + case "iso8859-11": + case "iso885911": + case "tis-620": + case "windows-874": + return "windows-874"; + case "cp1250": + case "windows-1250": + case "x-cp1250": + return "windows-1250"; + case "cp1251": + case "windows-1251": + case "x-cp1251": + return "windows-1251"; + case "ansi_x3.4-1968": + case "ascii": + case "cp1252": + case "cp819": + case "csisolatin1": + case "ibm819": + case "iso-8859-1": + case "iso-ir-100": + case "iso8859-1": + case "iso88591": + case "iso_8859-1": + case "iso_8859-1:1987": + case "l1": + case "latin1": + case "us-ascii": + case "windows-1252": + case "x-cp1252": + return "windows-1252"; + case "cp1253": + case "windows-1253": + case "x-cp1253": + return "windows-1253"; + case "cp1254": + case "csisolatin5": + case "iso-8859-9": + case "iso-ir-148": + case "iso8859-9": + case "iso88599": + case "iso_8859-9": + case "iso_8859-9:1989": + case "l5": + case "latin5": + case "windows-1254": + case "x-cp1254": + return "windows-1254"; + case "cp1255": + case "windows-1255": + case "x-cp1255": + return "windows-1255"; + case "cp1256": + case "windows-1256": + case "x-cp1256": + return "windows-1256"; + case "cp1257": + case "windows-1257": + case "x-cp1257": + return "windows-1257"; + case "cp1258": + case "windows-1258": + case "x-cp1258": + return "windows-1258"; + case "x-mac-cyrillic": + case "x-mac-ukrainian": + return "x-mac-cyrillic"; + case "chinese": + case "csgb2312": + case "csiso58gb231280": + case "gb2312": + case "gb_2312": + case "gb_2312-80": + case "gbk": + case "iso-ir-58": + case "x-gbk": + return "GBK"; + case "gb18030": + return "gb18030"; + case "big5": + case "big5-hkscs": + case "cn-big5": + case "csbig5": + case "x-x-big5": + return "Big5"; + case "cseucpkdfmtjapanese": + case "euc-jp": + case "x-euc-jp": + return "EUC-JP"; + case "csiso2022jp": + case "iso-2022-jp": + return "ISO-2022-JP"; + case "csshiftjis": + case "ms932": + case "ms_kanji": + case "shift-jis": + case "shift_jis": + case "sjis": + case "windows-31j": + case "x-sjis": + return "Shift_JIS"; + case "cseuckr": + case "csksc56011987": + case "euc-kr": + case "iso-ir-149": + case "korean": + case "ks_c_5601-1987": + case "ks_c_5601-1989": + case "ksc5601": + case "ksc_5601": + case "windows-949": + return "EUC-KR"; + case "csiso2022kr": + case "hz-gb-2312": + case "iso-2022-cn": + case "iso-2022-cn-ext": + case "iso-2022-kr": + case "replacement": + return "replacement"; + case "unicodefffe": + case "utf-16be": + return "UTF-16BE"; + case "csunicode": + case "iso-10646-ucs-2": + case "ucs-2": + case "unicode": + case "unicodefeff": + case "utf-16": + case "utf-16le": + return "UTF-16LE"; + case "x-user-defined": + return "x-user-defined"; + default: + return "failure"; + } + } + module2.exports = { + getEncoding + }; + } +}); + +// node_modules/undici/lib/web/fileapi/util.js +var require_util4 = __commonJS({ + "node_modules/undici/lib/web/fileapi/util.js"(exports2, module2) { + "use strict"; + var { + kState, + kError, + kResult, + kAborted, + kLastProgressEventFired + } = require_symbols3(); + var { ProgressEvent } = require_progressevent(); + var { getEncoding } = require_encoding(); + var { serializeAMimeType, parseMIMEType } = require_data_url(); + var { types } = require("node:util"); + var { StringDecoder } = require("string_decoder"); + var { btoa } = require("node:buffer"); + var staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false + }; + function readOperation(fr, blob, type, encodingName) { + if (fr[kState] === "loading") { + throw new DOMException("Invalid state", "InvalidStateError"); + } + fr[kState] = "loading"; + fr[kResult] = null; + fr[kError] = null; + const stream2 = blob.stream(); + const reader = stream2.getReader(); + const bytes = []; + let chunkPromise = reader.read(); + let isFirstChunk = true; + (async () => { + while (!fr[kAborted]) { + try { + const { done, value } = await chunkPromise; + if (isFirstChunk && !fr[kAborted]) { + queueMicrotask(() => { + fireAProgressEvent("loadstart", fr); + }); + } + isFirstChunk = false; + if (!done && types.isUint8Array(value)) { + bytes.push(value); + if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) { + fr[kLastProgressEventFired] = Date.now(); + queueMicrotask(() => { + fireAProgressEvent("progress", fr); + }); + } + chunkPromise = reader.read(); + } else if (done) { + queueMicrotask(() => { + fr[kState] = "done"; + try { + const result = packageData(bytes, type, blob.type, encodingName); + if (fr[kAborted]) { + return; + } + fr[kResult] = result; + fireAProgressEvent("load", fr); + } catch (error2) { + fr[kError] = error2; + fireAProgressEvent("error", fr); + } + if (fr[kState] !== "loading") { + fireAProgressEvent("loadend", fr); + } + }); + break; + } + } catch (error2) { + if (fr[kAborted]) { + return; + } + queueMicrotask(() => { + fr[kState] = "done"; + fr[kError] = error2; + fireAProgressEvent("error", fr); + if (fr[kState] !== "loading") { + fireAProgressEvent("loadend", fr); + } + }); + break; + } + } + })(); + } + function fireAProgressEvent(e, reader) { + const event = new ProgressEvent(e, { + bubbles: false, + cancelable: false + }); + reader.dispatchEvent(event); + } + function packageData(bytes, type, mimeType, encodingName) { + switch (type) { + case "DataURL": { + let dataURL = "data:"; + const parsed = parseMIMEType(mimeType || "application/octet-stream"); + if (parsed !== "failure") { + dataURL += serializeAMimeType(parsed); + } + dataURL += ";base64,"; + const decoder = new StringDecoder("latin1"); + for (const chunk of bytes) { + dataURL += btoa(decoder.write(chunk)); + } + dataURL += btoa(decoder.end()); + return dataURL; + } + case "Text": { + let encoding = "failure"; + if (encodingName) { + encoding = getEncoding(encodingName); + } + if (encoding === "failure" && mimeType) { + const type2 = parseMIMEType(mimeType); + if (type2 !== "failure") { + encoding = getEncoding(type2.parameters.get("charset")); + } + } + if (encoding === "failure") { + encoding = "UTF-8"; + } + return decode(bytes, encoding); + } + case "ArrayBuffer": { + const sequence = combineByteSequences(bytes); + return sequence.buffer; + } + case "BinaryString": { + let binaryString = ""; + const decoder = new StringDecoder("latin1"); + for (const chunk of bytes) { + binaryString += decoder.write(chunk); + } + binaryString += decoder.end(); + return binaryString; + } + } + } + function decode(ioQueue, encoding) { + const bytes = combineByteSequences(ioQueue); + const BOMEncoding = BOMSniffing(bytes); + let slice = 0; + if (BOMEncoding !== null) { + encoding = BOMEncoding; + slice = BOMEncoding === "UTF-8" ? 3 : 2; + } + const sliced = bytes.slice(slice); + return new TextDecoder(encoding).decode(sliced); + } + function BOMSniffing(ioQueue) { + const [a, b, c] = ioQueue; + if (a === 239 && b === 187 && c === 191) { + return "UTF-8"; + } else if (a === 254 && b === 255) { + return "UTF-16BE"; + } else if (a === 255 && b === 254) { + return "UTF-16LE"; + } + return null; + } + function combineByteSequences(sequences) { + const size = sequences.reduce((a, b) => { + return a + b.byteLength; + }, 0); + let offset = 0; + return sequences.reduce((a, b) => { + a.set(b, offset); + offset += b.byteLength; + return a; + }, new Uint8Array(size)); + } + module2.exports = { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent + }; + } +}); + +// node_modules/undici/lib/web/fileapi/filereader.js +var require_filereader = __commonJS({ + "node_modules/undici/lib/web/fileapi/filereader.js"(exports2, module2) { + "use strict"; + var { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent + } = require_util4(); + var { + kState, + kError, + kResult, + kEvents, + kAborted + } = require_symbols3(); + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var FileReader = class _FileReader extends EventTarget { + constructor() { + super(); + this[kState] = "empty"; + this[kResult] = null; + this[kError] = null; + this[kEvents] = { + loadend: null, + error: null, + abort: null, + load: null, + progress: null, + loadstart: null + }; + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer + * @param {import('buffer').Blob} blob + */ + readAsArrayBuffer(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsArrayBuffer"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "ArrayBuffer"); + } + /** + * @see https://w3c.github.io/FileAPI/#readAsBinaryString + * @param {import('buffer').Blob} blob + */ + readAsBinaryString(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsBinaryString"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "BinaryString"); + } + /** + * @see https://w3c.github.io/FileAPI/#readAsDataText + * @param {import('buffer').Blob} blob + * @param {string?} encoding + */ + readAsText(blob, encoding = void 0) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsText"); + blob = webidl.converters.Blob(blob, { strict: false }); + if (encoding !== void 0) { + encoding = webidl.converters.DOMString(encoding, "FileReader.readAsText", "encoding"); + } + readOperation(this, blob, "Text", encoding); + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsDataURL + * @param {import('buffer').Blob} blob + */ + readAsDataURL(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsDataURL"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "DataURL"); + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-abort + */ + abort() { + if (this[kState] === "empty" || this[kState] === "done") { + this[kResult] = null; + return; + } + if (this[kState] === "loading") { + this[kState] = "done"; + this[kResult] = null; + } + this[kAborted] = true; + fireAProgressEvent("abort", this); + if (this[kState] !== "loading") { + fireAProgressEvent("loadend", this); + } + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-readystate + */ + get readyState() { + webidl.brandCheck(this, _FileReader); + switch (this[kState]) { + case "empty": + return this.EMPTY; + case "loading": + return this.LOADING; + case "done": + return this.DONE; + } + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-result + */ + get result() { + webidl.brandCheck(this, _FileReader); + return this[kResult]; + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-error + */ + get error() { + webidl.brandCheck(this, _FileReader); + return this[kError]; + } + get onloadend() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].loadend; + } + set onloadend(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].loadend) { + this.removeEventListener("loadend", this[kEvents].loadend); + } + if (typeof fn === "function") { + this[kEvents].loadend = fn; + this.addEventListener("loadend", fn); + } else { + this[kEvents].loadend = null; + } + } + get onerror() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].error; + } + set onerror(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].error) { + this.removeEventListener("error", this[kEvents].error); + } + if (typeof fn === "function") { + this[kEvents].error = fn; + this.addEventListener("error", fn); + } else { + this[kEvents].error = null; + } + } + get onloadstart() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].loadstart; + } + set onloadstart(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].loadstart) { + this.removeEventListener("loadstart", this[kEvents].loadstart); + } + if (typeof fn === "function") { + this[kEvents].loadstart = fn; + this.addEventListener("loadstart", fn); + } else { + this[kEvents].loadstart = null; + } + } + get onprogress() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].progress; + } + set onprogress(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].progress) { + this.removeEventListener("progress", this[kEvents].progress); + } + if (typeof fn === "function") { + this[kEvents].progress = fn; + this.addEventListener("progress", fn); + } else { + this[kEvents].progress = null; + } + } + get onload() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].load; + } + set onload(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].load) { + this.removeEventListener("load", this[kEvents].load); + } + if (typeof fn === "function") { + this[kEvents].load = fn; + this.addEventListener("load", fn); + } else { + this[kEvents].load = null; + } + } + get onabort() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].abort; + } + set onabort(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].abort) { + this.removeEventListener("abort", this[kEvents].abort); + } + if (typeof fn === "function") { + this[kEvents].abort = fn; + this.addEventListener("abort", fn); + } else { + this[kEvents].abort = null; + } + } + }; + FileReader.EMPTY = FileReader.prototype.EMPTY = 0; + FileReader.LOADING = FileReader.prototype.LOADING = 1; + FileReader.DONE = FileReader.prototype.DONE = 2; + Object.defineProperties(FileReader.prototype, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors, + readAsArrayBuffer: kEnumerableProperty, + readAsBinaryString: kEnumerableProperty, + readAsText: kEnumerableProperty, + readAsDataURL: kEnumerableProperty, + abort: kEnumerableProperty, + readyState: kEnumerableProperty, + result: kEnumerableProperty, + error: kEnumerableProperty, + onloadstart: kEnumerableProperty, + onprogress: kEnumerableProperty, + onload: kEnumerableProperty, + onabort: kEnumerableProperty, + onerror: kEnumerableProperty, + onloadend: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "FileReader", + writable: false, + enumerable: false, + configurable: true + } + }); + Object.defineProperties(FileReader, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors + }); + module2.exports = { + FileReader + }; + } +}); + +// node_modules/undici/lib/web/cache/symbols.js +var require_symbols4 = __commonJS({ + "node_modules/undici/lib/web/cache/symbols.js"(exports2, module2) { + "use strict"; + module2.exports = { + kConstruct: require_symbols().kConstruct + }; + } +}); + +// node_modules/undici/lib/web/cache/util.js +var require_util5 = __commonJS({ + "node_modules/undici/lib/web/cache/util.js"(exports2, module2) { + "use strict"; + var assert = require("node:assert"); + var { URLSerializer } = require_data_url(); + var { isValidHeaderName } = require_util2(); + function urlEquals(A, B, excludeFragment = false) { + const serializedA = URLSerializer(A, excludeFragment); + const serializedB = URLSerializer(B, excludeFragment); + return serializedA === serializedB; + } + function getFieldValues(header) { + assert(header !== null); + const values = []; + for (let value of header.split(",")) { + value = value.trim(); + if (isValidHeaderName(value)) { + values.push(value); + } + } + return values; + } + module2.exports = { + urlEquals, + getFieldValues + }; + } +}); + +// node_modules/undici/lib/web/cache/cache.js +var require_cache = __commonJS({ + "node_modules/undici/lib/web/cache/cache.js"(exports2, module2) { + "use strict"; + var { kConstruct } = require_symbols4(); + var { urlEquals, getFieldValues } = require_util5(); + var { kEnumerableProperty, isDisturbed } = require_util(); + var { webidl } = require_webidl(); + var { Response, cloneResponse, fromInnerResponse } = require_response(); + var { Request, fromInnerRequest } = require_request2(); + var { kState } = require_symbols2(); + var { fetching } = require_fetch(); + var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util2(); + var assert = require("node:assert"); + var Cache = class _Cache { + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list + * @type {requestResponseList} + */ + #relevantRequestResponseList; + constructor() { + if (arguments[0] !== kConstruct) { + webidl.illegalConstructor(); + } + webidl.util.markAsUncloneable(this); + this.#relevantRequestResponseList = arguments[1]; + } + async match(request2, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.match"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + const p = this.#internalMatchAll(request2, options, 1); + if (p.length === 0) { + return; + } + return p[0]; + } + async matchAll(request2 = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.matchAll"; + if (request2 !== void 0) request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + return this.#internalMatchAll(request2, options); + } + async add(request2) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.add"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + const requests = [request2]; + const responseArrayPromise = this.addAll(requests); + return await responseArrayPromise; + } + async addAll(requests) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.addAll"; + webidl.argumentLengthCheck(arguments, 1, prefix); + const responsePromises = []; + const requestList = []; + for (let request2 of requests) { + if (request2 === void 0) { + throw webidl.errors.conversionFailed({ + prefix, + argument: "Argument 1", + types: ["undefined is not allowed"] + }); + } + request2 = webidl.converters.RequestInfo(request2); + if (typeof request2 === "string") { + continue; + } + const r = request2[kState]; + if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") { + throw webidl.errors.exception({ + header: prefix, + message: "Expected http/s scheme when method is not GET." + }); + } + } + const fetchControllers = []; + for (const request2 of requests) { + const r = new Request(request2)[kState]; + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: prefix, + message: "Expected http/s scheme." + }); + } + r.initiator = "fetch"; + r.destination = "subresource"; + requestList.push(r); + const responsePromise = createDeferredPromise(); + fetchControllers.push(fetching({ + request: r, + processResponse(response) { + if (response.type === "error" || response.status === 206 || response.status < 200 || response.status > 299) { + responsePromise.reject(webidl.errors.exception({ + header: "Cache.addAll", + message: "Received an invalid status code or the request failed." + })); + } else if (response.headersList.contains("vary")) { + const fieldValues = getFieldValues(response.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + responsePromise.reject(webidl.errors.exception({ + header: "Cache.addAll", + message: "invalid vary field value" + })); + for (const controller of fetchControllers) { + controller.abort(); + } + return; + } + } + } + }, + processResponseEndOfBody(response) { + if (response.aborted) { + responsePromise.reject(new DOMException("aborted", "AbortError")); + return; + } + responsePromise.resolve(response); + } + })); + responsePromises.push(responsePromise.promise); + } + const p = Promise.all(responsePromises); + const responses = await p; + const operations = []; + let index = 0; + for (const response of responses) { + const operation = { + type: "put", + // 7.3.2 + request: requestList[index], + // 7.3.3 + response + // 7.3.4 + }; + operations.push(operation); + index++; + } + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + try { + this.#batchCacheOperations(operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(void 0); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + async put(request2, response) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.put"; + webidl.argumentLengthCheck(arguments, 2, prefix); + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + response = webidl.converters.Response(response, prefix, "response"); + let innerRequest = null; + if (request2 instanceof Request) { + innerRequest = request2[kState]; + } else { + innerRequest = new Request(request2)[kState]; + } + if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") { + throw webidl.errors.exception({ + header: prefix, + message: "Expected an http/s scheme when method is not GET" + }); + } + const innerResponse = response[kState]; + if (innerResponse.status === 206) { + throw webidl.errors.exception({ + header: prefix, + message: "Got 206 status" + }); + } + if (innerResponse.headersList.contains("vary")) { + const fieldValues = getFieldValues(innerResponse.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + throw webidl.errors.exception({ + header: prefix, + message: "Got * vary field value" + }); + } + } + } + if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { + throw webidl.errors.exception({ + header: prefix, + message: "Response body is locked or disturbed" + }); + } + const clonedResponse = cloneResponse(innerResponse); + const bodyReadPromise = createDeferredPromise(); + if (innerResponse.body != null) { + const stream2 = innerResponse.body.stream; + const reader = stream2.getReader(); + readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject); + } else { + bodyReadPromise.resolve(void 0); + } + const operations = []; + const operation = { + type: "put", + // 14. + request: innerRequest, + // 15. + response: clonedResponse + // 16. + }; + operations.push(operation); + const bytes = await bodyReadPromise.promise; + if (clonedResponse.body != null) { + clonedResponse.body.source = bytes; + } + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + try { + this.#batchCacheOperations(operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + async delete(request2, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request2 instanceof Request) { + r = request2[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return false; + } + } else { + assert(typeof request2 === "string"); + r = new Request(request2)[kState]; + } + const operations = []; + const operation = { + type: "delete", + request: r, + options + }; + operations.push(operation); + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + let requestResponses; + try { + requestResponses = this.#batchCacheOperations(operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(!!requestResponses?.length); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys + * @param {any} request + * @param {import('../../types/cache').CacheQueryOptions} options + * @returns {Promise} + */ + async keys(request2 = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.keys"; + if (request2 !== void 0) request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request2 !== void 0) { + if (request2 instanceof Request) { + r = request2[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request2 === "string") { + r = new Request(request2)[kState]; + } + } + const promise = createDeferredPromise(); + const requests = []; + if (request2 === void 0) { + for (const requestResponse of this.#relevantRequestResponseList) { + requests.push(requestResponse[0]); + } + } else { + const requestResponses = this.#queryCache(r, options); + for (const requestResponse of requestResponses) { + requests.push(requestResponse[0]); + } + } + queueMicrotask(() => { + const requestList = []; + for (const request3 of requests) { + const requestObject = fromInnerRequest( + request3, + new AbortController().signal, + "immutable" + ); + requestList.push(requestObject); + } + promise.resolve(Object.freeze(requestList)); + }); + return promise.promise; + } + /** + * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm + * @param {CacheBatchOperation[]} operations + * @returns {requestResponseList} + */ + #batchCacheOperations(operations) { + const cache = this.#relevantRequestResponseList; + const backupCache = [...cache]; + const addedItems = []; + const resultList = []; + try { + for (const operation of operations) { + if (operation.type !== "delete" && operation.type !== "put") { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: 'operation type does not match "delete" or "put"' + }); + } + if (operation.type === "delete" && operation.response != null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "delete operation should not have an associated response" + }); + } + if (this.#queryCache(operation.request, operation.options, addedItems).length) { + throw new DOMException("???", "InvalidStateError"); + } + let requestResponses; + if (operation.type === "delete") { + requestResponses = this.#queryCache(operation.request, operation.options); + if (requestResponses.length === 0) { + return []; + } + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse); + assert(idx !== -1); + cache.splice(idx, 1); + } + } else if (operation.type === "put") { + if (operation.response == null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "put operation should have an associated response" + }); + } + const r = operation.request; + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "expected http or https scheme" + }); + } + if (r.method !== "GET") { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "not get method" + }); + } + if (operation.options != null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "options must not be defined" + }); + } + requestResponses = this.#queryCache(operation.request); + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse); + assert(idx !== -1); + cache.splice(idx, 1); + } + cache.push([operation.request, operation.response]); + addedItems.push([operation.request, operation.response]); + } + resultList.push([operation.request, operation.response]); + } + return resultList; + } catch (e) { + this.#relevantRequestResponseList.length = 0; + this.#relevantRequestResponseList = backupCache; + throw e; + } + } + /** + * @see https://w3c.github.io/ServiceWorker/#query-cache + * @param {any} requestQuery + * @param {import('../../types/cache').CacheQueryOptions} options + * @param {requestResponseList} targetStorage + * @returns {requestResponseList} + */ + #queryCache(requestQuery, options, targetStorage) { + const resultList = []; + const storage = targetStorage ?? this.#relevantRequestResponseList; + for (const requestResponse of storage) { + const [cachedRequest, cachedResponse] = requestResponse; + if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) { + resultList.push(requestResponse); + } + } + return resultList; + } + /** + * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm + * @param {any} requestQuery + * @param {any} request + * @param {any | null} response + * @param {import('../../types/cache').CacheQueryOptions | undefined} options + * @returns {boolean} + */ + #requestMatchesCachedItem(requestQuery, request2, response = null, options) { + const queryURL = new URL(requestQuery.url); + const cachedURL = new URL(request2.url); + if (options?.ignoreSearch) { + cachedURL.search = ""; + queryURL.search = ""; + } + if (!urlEquals(queryURL, cachedURL, true)) { + return false; + } + if (response == null || options?.ignoreVary || !response.headersList.contains("vary")) { + return true; + } + const fieldValues = getFieldValues(response.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + return false; + } + const requestValue = request2.headersList.get(fieldValue); + const queryValue = requestQuery.headersList.get(fieldValue); + if (requestValue !== queryValue) { + return false; + } + } + return true; + } + #internalMatchAll(request2, options, maxResponses = Infinity) { + let r = null; + if (request2 !== void 0) { + if (request2 instanceof Request) { + r = request2[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request2 === "string") { + r = new Request(request2)[kState]; + } + } + const responses = []; + if (request2 === void 0) { + for (const requestResponse of this.#relevantRequestResponseList) { + responses.push(requestResponse[1]); + } + } else { + const requestResponses = this.#queryCache(r, options); + for (const requestResponse of requestResponses) { + responses.push(requestResponse[1]); + } + } + const responseList = []; + for (const response of responses) { + const responseObject = fromInnerResponse(response, "immutable"); + responseList.push(responseObject.clone()); + if (responseList.length >= maxResponses) { + break; + } + } + return Object.freeze(responseList); + } + }; + Object.defineProperties(Cache.prototype, { + [Symbol.toStringTag]: { + value: "Cache", + configurable: true + }, + match: kEnumerableProperty, + matchAll: kEnumerableProperty, + add: kEnumerableProperty, + addAll: kEnumerableProperty, + put: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty + }); + var cacheQueryOptionConverters = [ + { + key: "ignoreSearch", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "ignoreMethod", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "ignoreVary", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]; + webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters); + webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([ + ...cacheQueryOptionConverters, + { + key: "cacheName", + converter: webidl.converters.DOMString + } + ]); + webidl.converters.Response = webidl.interfaceConverter(Response); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.RequestInfo + ); + module2.exports = { + Cache + }; + } +}); + +// node_modules/undici/lib/web/cache/cachestorage.js +var require_cachestorage = __commonJS({ + "node_modules/undici/lib/web/cache/cachestorage.js"(exports2, module2) { + "use strict"; + var { kConstruct } = require_symbols4(); + var { Cache } = require_cache(); + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var CacheStorage = class _CacheStorage { + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map + * @type {Map} + */ + async has(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.has"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + return this.#caches.has(cacheName); + } + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open + * @param {string} cacheName + * @returns {Promise} + */ + async open(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.open"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + if (this.#caches.has(cacheName)) { + const cache2 = this.#caches.get(cacheName); + return new Cache(kConstruct, cache2); + } + const cache = []; + this.#caches.set(cacheName, cache); + return new Cache(kConstruct, cache); + } + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete + * @param {string} cacheName + * @returns {Promise} + */ + async delete(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + return this.#caches.delete(cacheName); + } + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys + * @returns {Promise} + */ + async keys() { + webidl.brandCheck(this, _CacheStorage); + const keys = this.#caches.keys(); + return [...keys]; + } + }; + Object.defineProperties(CacheStorage.prototype, { + [Symbol.toStringTag]: { + value: "CacheStorage", + configurable: true + }, + match: kEnumerableProperty, + has: kEnumerableProperty, + open: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty + }); + module2.exports = { + CacheStorage + }; + } +}); + +// node_modules/undici/lib/web/cookies/constants.js +var require_constants4 = __commonJS({ + "node_modules/undici/lib/web/cookies/constants.js"(exports2, module2) { + "use strict"; + var maxAttributeValueSize = 1024; + var maxNameValuePairSize = 4096; + module2.exports = { + maxAttributeValueSize, + maxNameValuePairSize + }; + } +}); + +// node_modules/undici/lib/web/cookies/util.js +var require_util6 = __commonJS({ + "node_modules/undici/lib/web/cookies/util.js"(exports2, module2) { + "use strict"; + function isCTLExcludingHtab(value) { + for (let i = 0; i < value.length; ++i) { + const code = value.charCodeAt(i); + if (code >= 0 && code <= 8 || code >= 10 && code <= 31 || code === 127) { + return true; + } + } + return false; + } + function validateCookieName(name) { + for (let i = 0; i < name.length; ++i) { + const code = name.charCodeAt(i); + if (code < 33 || // exclude CTLs (0-31), SP and HT + code > 126 || // exclude non-ascii and DEL + code === 34 || // " + code === 40 || // ( + code === 41 || // ) + code === 60 || // < + code === 62 || // > + code === 64 || // @ + code === 44 || // , + code === 59 || // ; + code === 58 || // : + code === 92 || // \ + code === 47 || // / + code === 91 || // [ + code === 93 || // ] + code === 63 || // ? + code === 61 || // = + code === 123 || // { + code === 125) { + throw new Error("Invalid cookie name"); + } + } + } + function validateCookieValue(value) { + let len = value.length; + let i = 0; + if (value[0] === '"') { + if (len === 1 || value[len - 1] !== '"') { + throw new Error("Invalid cookie value"); + } + --len; + ++i; + } + while (i < len) { + const code = value.charCodeAt(i++); + if (code < 33 || // exclude CTLs (0-31) + code > 126 || // non-ascii and DEL (127) + code === 34 || // " + code === 44 || // , + code === 59 || // ; + code === 92) { + throw new Error("Invalid cookie value"); + } + } + } + function validateCookiePath(path6) { + for (let i = 0; i < path6.length; ++i) { + const code = path6.charCodeAt(i); + if (code < 32 || // exclude CTLs (0-31) + code > 126 || // exclude DEL and non-ascii + code === 59) { + throw new Error("Invalid cookie path"); + } + } + } + function isLetterOrDigit(code) { + return code >= 48 && code <= 57 || // 0-9 + code >= 65 && code <= 90 || // A-Z + code >= 97 && code <= 122; + } + function validateCookieDomain(domain) { + if (domain === " ") { + return; + } + if (domain.length > 255) { + throw new Error("Invalid cookie domain"); + } + let labelLength = 0; + for (let i = 0; i < domain.length; ++i) { + const code = domain.charCodeAt(i); + if (code === 46) { + if (labelLength === 0) { + throw new Error("Invalid cookie domain"); + } + if (domain.charCodeAt(i - 1) === 45) { + throw new Error("Invalid cookie domain"); + } + labelLength = 0; + continue; + } + if (labelLength === 0 && !isLetterOrDigit(code)) { + throw new Error("Invalid cookie domain"); + } + if (!isLetterOrDigit(code) && code !== 45) { + throw new Error("Invalid cookie domain"); + } + if (++labelLength > 63) { + throw new Error("Invalid cookie domain"); + } + } + if (labelLength === 0 || domain.charCodeAt(domain.length - 1) === 45) { + throw new Error("Invalid cookie domain"); + } + } + var IMFDays = [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ]; + var IMFMonths = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ]; + var IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, "0")); + function toIMFDate(date) { + if (typeof date === "number") { + date = new Date(date); + } + return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`; + } + function validateCookieMaxAge(maxAge) { + if (maxAge < 0) { + throw new Error("Invalid cookie max-age"); + } + } + function stringify(cookie) { + if (cookie.name.length === 0) { + return null; + } + validateCookieName(cookie.name); + validateCookieValue(cookie.value); + const out = [`${cookie.name}=${cookie.value}`]; + if (cookie.name.startsWith("__Secure-")) { + cookie.secure = true; + } + if (cookie.name.startsWith("__Host-")) { + cookie.secure = true; + cookie.domain = null; + cookie.path = "/"; + } + if (cookie.secure) { + out.push("Secure"); + } + if (cookie.httpOnly) { + out.push("HttpOnly"); + } + if (typeof cookie.maxAge === "number") { + validateCookieMaxAge(cookie.maxAge); + out.push(`Max-Age=${cookie.maxAge}`); + } + if (cookie.domain) { + validateCookieDomain(cookie.domain); + out.push(`Domain=${cookie.domain}`); + } + if (cookie.path) { + validateCookiePath(cookie.path); + out.push(`Path=${cookie.path}`); + } + if (cookie.expires && cookie.expires.toString() !== "Invalid Date") { + out.push(`Expires=${toIMFDate(cookie.expires)}`); + } + if (cookie.sameSite) { + out.push(`SameSite=${cookie.sameSite}`); + } + for (const part of cookie.unparsed) { + if (!part.includes("=")) { + throw new Error("Invalid unparsed"); + } + const [key, ...value] = part.split("="); + const trimmedKey = key.trim(); + const joinedValue = value.join("="); + validateCookieName(trimmedKey); + validateCookieValue(joinedValue); + out.push(`${trimmedKey}=${joinedValue}`); + } + return out.join("; "); + } + module2.exports = { + isCTLExcludingHtab, + validateCookieName, + validateCookiePath, + validateCookieValue, + toIMFDate, + stringify + }; + } +}); + +// node_modules/undici/lib/web/cookies/parse.js +var require_parse = __commonJS({ + "node_modules/undici/lib/web/cookies/parse.js"(exports2, module2) { + "use strict"; + var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4(); + var { isCTLExcludingHtab } = require_util6(); + var { collectASequenceOfCodePointsFast } = require_data_url(); + var assert = require("node:assert"); + function parseSetCookie(header) { + if (isCTLExcludingHtab(header)) { + return null; + } + let nameValuePair = ""; + let unparsedAttributes = ""; + let name = ""; + let value = ""; + if (header.includes(";")) { + const position = { position: 0 }; + nameValuePair = collectASequenceOfCodePointsFast(";", header, position); + unparsedAttributes = header.slice(position.position); + } else { + nameValuePair = header; + } + if (!nameValuePair.includes("=")) { + value = nameValuePair; + } else { + const position = { position: 0 }; + name = collectASequenceOfCodePointsFast( + "=", + nameValuePair, + position + ); + value = nameValuePair.slice(position.position + 1); + } + name = name.trim(); + value = value.trim(); + if (name.length + value.length > maxNameValuePairSize) { + return null; + } + return { + name, + value, + ...parseUnparsedAttributes(unparsedAttributes) + }; + } + function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) { + if (unparsedAttributes.length === 0) { + return cookieAttributeList; + } + assert(unparsedAttributes[0] === ";"); + unparsedAttributes = unparsedAttributes.slice(1); + let cookieAv = ""; + if (unparsedAttributes.includes(";")) { + cookieAv = collectASequenceOfCodePointsFast( + ";", + unparsedAttributes, + { position: 0 } + ); + unparsedAttributes = unparsedAttributes.slice(cookieAv.length); + } else { + cookieAv = unparsedAttributes; + unparsedAttributes = ""; + } + let attributeName = ""; + let attributeValue = ""; + if (cookieAv.includes("=")) { + const position = { position: 0 }; + attributeName = collectASequenceOfCodePointsFast( + "=", + cookieAv, + position + ); + attributeValue = cookieAv.slice(position.position + 1); + } else { + attributeName = cookieAv; + } + attributeName = attributeName.trim(); + attributeValue = attributeValue.trim(); + if (attributeValue.length > maxAttributeValueSize) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + const attributeNameLowercase = attributeName.toLowerCase(); + if (attributeNameLowercase === "expires") { + const expiryTime = new Date(attributeValue); + cookieAttributeList.expires = expiryTime; + } else if (attributeNameLowercase === "max-age") { + const charCode = attributeValue.charCodeAt(0); + if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + if (!/^\d+$/.test(attributeValue)) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + const deltaSeconds = Number(attributeValue); + cookieAttributeList.maxAge = deltaSeconds; + } else if (attributeNameLowercase === "domain") { + let cookieDomain = attributeValue; + if (cookieDomain[0] === ".") { + cookieDomain = cookieDomain.slice(1); + } + cookieDomain = cookieDomain.toLowerCase(); + cookieAttributeList.domain = cookieDomain; + } else if (attributeNameLowercase === "path") { + let cookiePath = ""; + if (attributeValue.length === 0 || attributeValue[0] !== "/") { + cookiePath = "/"; + } else { + cookiePath = attributeValue; + } + cookieAttributeList.path = cookiePath; + } else if (attributeNameLowercase === "secure") { + cookieAttributeList.secure = true; + } else if (attributeNameLowercase === "httponly") { + cookieAttributeList.httpOnly = true; + } else if (attributeNameLowercase === "samesite") { + const attributeValueLowercase = attributeValue.toLowerCase(); + if (attributeValueLowercase === "none") { + cookieAttributeList.sameSite = "None"; + } else if (attributeValueLowercase === "strict") { + cookieAttributeList.sameSite = "Strict"; + } else if (attributeValueLowercase === "lax") { + cookieAttributeList.sameSite = "Lax"; + } + } else { + cookieAttributeList.unparsed ??= []; + cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`); + } + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + module2.exports = { + parseSetCookie, + parseUnparsedAttributes + }; + } +}); + +// node_modules/undici/lib/web/cookies/index.js +var require_cookies = __commonJS({ + "node_modules/undici/lib/web/cookies/index.js"(exports2, module2) { + "use strict"; + var { parseSetCookie } = require_parse(); + var { stringify } = require_util6(); + var { webidl } = require_webidl(); + var { Headers: Headers2 } = require_headers(); + function getCookies(headers) { + webidl.argumentLengthCheck(arguments, 1, "getCookies"); + webidl.brandCheck(headers, Headers2, { strict: false }); + const cookie = headers.get("cookie"); + const out = {}; + if (!cookie) { + return out; + } + for (const piece of cookie.split(";")) { + const [name, ...value] = piece.split("="); + out[name.trim()] = value.join("="); + } + return out; + } + function deleteCookie(headers, name, attributes) { + webidl.brandCheck(headers, Headers2, { strict: false }); + const prefix = "deleteCookie"; + webidl.argumentLengthCheck(arguments, 2, prefix); + name = webidl.converters.DOMString(name, prefix, "name"); + attributes = webidl.converters.DeleteCookieAttributes(attributes); + setCookie(headers, { + name, + value: "", + expires: /* @__PURE__ */ new Date(0), + ...attributes + }); + } + function getSetCookies(headers) { + webidl.argumentLengthCheck(arguments, 1, "getSetCookies"); + webidl.brandCheck(headers, Headers2, { strict: false }); + const cookies = headers.getSetCookie(); + if (!cookies) { + return []; + } + return cookies.map((pair) => parseSetCookie(pair)); + } + function setCookie(headers, cookie) { + webidl.argumentLengthCheck(arguments, 2, "setCookie"); + webidl.brandCheck(headers, Headers2, { strict: false }); + cookie = webidl.converters.Cookie(cookie); + const str = stringify(cookie); + if (str) { + headers.append("Set-Cookie", str); + } + } + webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([ + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "path", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "domain", + defaultValue: () => null + } + ]); + webidl.converters.Cookie = webidl.dictionaryConverter([ + { + converter: webidl.converters.DOMString, + key: "name" + }, + { + converter: webidl.converters.DOMString, + key: "value" + }, + { + converter: webidl.nullableConverter((value) => { + if (typeof value === "number") { + return webidl.converters["unsigned long long"](value); + } + return new Date(value); + }), + key: "expires", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters["long long"]), + key: "maxAge", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "domain", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "path", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: "secure", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: "httpOnly", + defaultValue: () => null + }, + { + converter: webidl.converters.USVString, + key: "sameSite", + allowedValues: ["Strict", "Lax", "None"] + }, + { + converter: webidl.sequenceConverter(webidl.converters.DOMString), + key: "unparsed", + defaultValue: () => new Array(0) + } + ]); + module2.exports = { + getCookies, + deleteCookie, + getSetCookies, + setCookie + }; + } +}); + +// node_modules/undici/lib/web/websocket/events.js +var require_events = __commonJS({ + "node_modules/undici/lib/web/websocket/events.js"(exports2, module2) { + "use strict"; + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var { kConstruct } = require_symbols(); + var { MessagePort } = require("node:worker_threads"); + var MessageEvent = class _MessageEvent extends Event { + #eventInit; + constructor(type, eventInitDict = {}) { + if (type === kConstruct) { + super(arguments[1], arguments[2]); + webidl.util.markAsUncloneable(this); + return; + } + const prefix = "MessageEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, "eventInitDict"); + super(type, eventInitDict); + this.#eventInit = eventInitDict; + webidl.util.markAsUncloneable(this); + } + get data() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.data; + } + get origin() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.origin; + } + get lastEventId() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.lastEventId; + } + get source() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.source; + } + get ports() { + webidl.brandCheck(this, _MessageEvent); + if (!Object.isFrozen(this.#eventInit.ports)) { + Object.freeze(this.#eventInit.ports); + } + return this.#eventInit.ports; + } + initMessageEvent(type, bubbles = false, cancelable = false, data = null, origin = "", lastEventId = "", source = null, ports = []) { + webidl.brandCheck(this, _MessageEvent); + webidl.argumentLengthCheck(arguments, 1, "MessageEvent.initMessageEvent"); + return new _MessageEvent(type, { + bubbles, + cancelable, + data, + origin, + lastEventId, + source, + ports + }); + } + static createFastMessageEvent(type, init) { + const messageEvent = new _MessageEvent(kConstruct, type, init); + messageEvent.#eventInit = init; + messageEvent.#eventInit.data ??= null; + messageEvent.#eventInit.origin ??= ""; + messageEvent.#eventInit.lastEventId ??= ""; + messageEvent.#eventInit.source ??= null; + messageEvent.#eventInit.ports ??= []; + return messageEvent; + } + }; + var { createFastMessageEvent } = MessageEvent; + delete MessageEvent.createFastMessageEvent; + var CloseEvent = class _CloseEvent extends Event { + #eventInit; + constructor(type, eventInitDict = {}) { + const prefix = "CloseEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.CloseEventInit(eventInitDict); + super(type, eventInitDict); + this.#eventInit = eventInitDict; + webidl.util.markAsUncloneable(this); + } + get wasClean() { + webidl.brandCheck(this, _CloseEvent); + return this.#eventInit.wasClean; + } + get code() { + webidl.brandCheck(this, _CloseEvent); + return this.#eventInit.code; + } + get reason() { + webidl.brandCheck(this, _CloseEvent); + return this.#eventInit.reason; + } + }; + var ErrorEvent = class _ErrorEvent extends Event { + #eventInit; + constructor(type, eventInitDict) { + const prefix = "ErrorEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + super(type, eventInitDict); + webidl.util.markAsUncloneable(this); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {}); + this.#eventInit = eventInitDict; + } + get message() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.message; + } + get filename() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.filename; + } + get lineno() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.lineno; + } + get colno() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.colno; + } + get error() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.error; + } + }; + Object.defineProperties(MessageEvent.prototype, { + [Symbol.toStringTag]: { + value: "MessageEvent", + configurable: true + }, + data: kEnumerableProperty, + origin: kEnumerableProperty, + lastEventId: kEnumerableProperty, + source: kEnumerableProperty, + ports: kEnumerableProperty, + initMessageEvent: kEnumerableProperty + }); + Object.defineProperties(CloseEvent.prototype, { + [Symbol.toStringTag]: { + value: "CloseEvent", + configurable: true + }, + reason: kEnumerableProperty, + code: kEnumerableProperty, + wasClean: kEnumerableProperty + }); + Object.defineProperties(ErrorEvent.prototype, { + [Symbol.toStringTag]: { + value: "ErrorEvent", + configurable: true + }, + message: kEnumerableProperty, + filename: kEnumerableProperty, + lineno: kEnumerableProperty, + colno: kEnumerableProperty, + error: kEnumerableProperty + }); + webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.MessagePort + ); + var eventInit = [ + { + key: "bubbles", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "cancelable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "composed", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]; + webidl.converters.MessageEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "data", + converter: webidl.converters.any, + defaultValue: () => null + }, + { + key: "origin", + converter: webidl.converters.USVString, + defaultValue: () => "" + }, + { + key: "lastEventId", + converter: webidl.converters.DOMString, + defaultValue: () => "" + }, + { + key: "source", + // Node doesn't implement WindowProxy or ServiceWorker, so the only + // valid value for source is a MessagePort. + converter: webidl.nullableConverter(webidl.converters.MessagePort), + defaultValue: () => null + }, + { + key: "ports", + converter: webidl.converters["sequence"], + defaultValue: () => new Array(0) + } + ]); + webidl.converters.CloseEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "wasClean", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "code", + converter: webidl.converters["unsigned short"], + defaultValue: () => 0 + }, + { + key: "reason", + converter: webidl.converters.USVString, + defaultValue: () => "" + } + ]); + webidl.converters.ErrorEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "message", + converter: webidl.converters.DOMString, + defaultValue: () => "" + }, + { + key: "filename", + converter: webidl.converters.USVString, + defaultValue: () => "" + }, + { + key: "lineno", + converter: webidl.converters["unsigned long"], + defaultValue: () => 0 + }, + { + key: "colno", + converter: webidl.converters["unsigned long"], + defaultValue: () => 0 + }, + { + key: "error", + converter: webidl.converters.any + } + ]); + module2.exports = { + MessageEvent, + CloseEvent, + ErrorEvent, + createFastMessageEvent + }; + } +}); + +// node_modules/undici/lib/web/websocket/constants.js +var require_constants5 = __commonJS({ + "node_modules/undici/lib/web/websocket/constants.js"(exports2, module2) { + "use strict"; + var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; + var staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false + }; + var states = { + CONNECTING: 0, + OPEN: 1, + CLOSING: 2, + CLOSED: 3 + }; + var sentCloseFrameState = { + NOT_SENT: 0, + PROCESSING: 1, + SENT: 2 + }; + var opcodes = { + CONTINUATION: 0, + TEXT: 1, + BINARY: 2, + CLOSE: 8, + PING: 9, + PONG: 10 + }; + var maxUnsigned16Bit = 2 ** 16 - 1; + var parserStates = { + INFO: 0, + PAYLOADLENGTH_16: 2, + PAYLOADLENGTH_64: 3, + READ_DATA: 4 + }; + var emptyBuffer = Buffer.allocUnsafe(0); + var sendHints = { + string: 1, + typedArray: 2, + arrayBuffer: 3, + blob: 4 + }; + module2.exports = { + uid, + sentCloseFrameState, + staticPropertyDescriptors, + states, + opcodes, + maxUnsigned16Bit, + parserStates, + emptyBuffer, + sendHints + }; + } +}); + +// node_modules/undici/lib/web/websocket/symbols.js +var require_symbols5 = __commonJS({ + "node_modules/undici/lib/web/websocket/symbols.js"(exports2, module2) { + "use strict"; + module2.exports = { + kWebSocketURL: /* @__PURE__ */ Symbol("url"), + kReadyState: /* @__PURE__ */ Symbol("ready state"), + kController: /* @__PURE__ */ Symbol("controller"), + kResponse: /* @__PURE__ */ Symbol("response"), + kBinaryType: /* @__PURE__ */ Symbol("binary type"), + kSentClose: /* @__PURE__ */ Symbol("sent close"), + kReceivedClose: /* @__PURE__ */ Symbol("received close"), + kByteParser: /* @__PURE__ */ Symbol("byte parser") + }; + } +}); + +// node_modules/undici/lib/web/websocket/util.js +var require_util7 = __commonJS({ + "node_modules/undici/lib/web/websocket/util.js"(exports2, module2) { + "use strict"; + var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5(); + var { states, opcodes } = require_constants5(); + var { ErrorEvent, createFastMessageEvent } = require_events(); + var { isUtf8 } = require("node:buffer"); + var { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require_data_url(); + function isConnecting(ws) { + return ws[kReadyState] === states.CONNECTING; + } + function isEstablished(ws) { + return ws[kReadyState] === states.OPEN; + } + function isClosing(ws) { + return ws[kReadyState] === states.CLOSING; + } + function isClosed(ws) { + return ws[kReadyState] === states.CLOSED; + } + function fireEvent(e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) { + const event = eventFactory(e, eventInitDict); + target.dispatchEvent(event); + } + function websocketMessageReceived(ws, type, data) { + if (ws[kReadyState] !== states.OPEN) { + return; + } + let dataForEvent; + if (type === opcodes.TEXT) { + try { + dataForEvent = utf8Decode(data); + } catch { + failWebsocketConnection(ws, "Received invalid UTF-8 in text frame."); + return; + } + } else if (type === opcodes.BINARY) { + if (ws[kBinaryType] === "blob") { + dataForEvent = new Blob([data]); + } else { + dataForEvent = toArrayBuffer(data); + } + } + fireEvent("message", ws, createFastMessageEvent, { + origin: ws[kWebSocketURL].origin, + data: dataForEvent + }); + } + function toArrayBuffer(buffer) { + if (buffer.byteLength === buffer.buffer.byteLength) { + return buffer.buffer; + } + return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); + } + function isValidSubprotocol(protocol) { + if (protocol.length === 0) { + return false; + } + for (let i = 0; i < protocol.length; ++i) { + const code = protocol.charCodeAt(i); + if (code < 33 || // CTL, contains SP (0x20) and HT (0x09) + code > 126 || code === 34 || // " + code === 40 || // ( + code === 41 || // ) + code === 44 || // , + code === 47 || // / + code === 58 || // : + code === 59 || // ; + code === 60 || // < + code === 61 || // = + code === 62 || // > + code === 63 || // ? + code === 64 || // @ + code === 91 || // [ + code === 92 || // \ + code === 93 || // ] + code === 123 || // { + code === 125) { + return false; + } + } + return true; + } + function isValidStatusCode(code) { + if (code >= 1e3 && code < 1015) { + return code !== 1004 && // reserved + code !== 1005 && // "MUST NOT be set as a status code" + code !== 1006; + } + return code >= 3e3 && code <= 4999; + } + function failWebsocketConnection(ws, reason) { + const { [kController]: controller, [kResponse]: response } = ws; + controller.abort(); + if (response?.socket && !response.socket.destroyed) { + response.socket.destroy(); + } + if (reason) { + fireEvent("error", ws, (type, init) => new ErrorEvent(type, init), { + error: new Error(reason), + message: reason + }); + } + } + function isControlFrame(opcode) { + return opcode === opcodes.CLOSE || opcode === opcodes.PING || opcode === opcodes.PONG; + } + function isContinuationFrame(opcode) { + return opcode === opcodes.CONTINUATION; + } + function isTextBinaryFrame(opcode) { + return opcode === opcodes.TEXT || opcode === opcodes.BINARY; + } + function isValidOpcode(opcode) { + return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode); + } + function parseExtensions(extensions) { + const position = { position: 0 }; + const extensionList = /* @__PURE__ */ new Map(); + while (position.position < extensions.length) { + const pair = collectASequenceOfCodePointsFast(";", extensions, position); + const [name, value = ""] = pair.split("="); + extensionList.set( + removeHTTPWhitespace(name, true, false), + removeHTTPWhitespace(value, false, true) + ); + position.position++; + } + return extensionList; + } + function isValidClientWindowBits(value) { + if (value.length === 0) { + return false; + } + for (let i = 0; i < value.length; i++) { + const byte = value.charCodeAt(i); + if (byte < 48 || byte > 57) { + return false; + } + } + const num = Number.parseInt(value, 10); + return num >= 8 && num <= 15; + } + var hasIntl = typeof process.versions.icu === "string"; + var fatalDecoder = hasIntl ? new TextDecoder("utf-8", { fatal: true }) : void 0; + var utf8Decode = hasIntl ? fatalDecoder.decode.bind(fatalDecoder) : function(buffer) { + if (isUtf8(buffer)) { + return buffer.toString("utf-8"); + } + throw new TypeError("Invalid utf-8 received."); + }; + module2.exports = { + isConnecting, + isEstablished, + isClosing, + isClosed, + fireEvent, + isValidSubprotocol, + isValidStatusCode, + failWebsocketConnection, + websocketMessageReceived, + utf8Decode, + isControlFrame, + isContinuationFrame, + isTextBinaryFrame, + isValidOpcode, + parseExtensions, + isValidClientWindowBits + }; + } +}); + +// node_modules/undici/lib/web/websocket/frame.js +var require_frame = __commonJS({ + "node_modules/undici/lib/web/websocket/frame.js"(exports2, module2) { + "use strict"; + var { maxUnsigned16Bit } = require_constants5(); + var BUFFER_SIZE = 16386; + var crypto2; + var buffer = null; + var bufIdx = BUFFER_SIZE; + try { + crypto2 = require("node:crypto"); + } catch { + crypto2 = { + // not full compatibility, but minimum. + randomFillSync: function randomFillSync(buffer2, _offset, _size) { + for (let i = 0; i < buffer2.length; ++i) { + buffer2[i] = Math.random() * 255 | 0; + } + return buffer2; + } + }; + } + function generateMask() { + if (bufIdx === BUFFER_SIZE) { + bufIdx = 0; + crypto2.randomFillSync(buffer ??= Buffer.allocUnsafe(BUFFER_SIZE), 0, BUFFER_SIZE); + } + return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]; + } + var WebsocketFrameSend = class { + /** + * @param {Buffer|undefined} data + */ + constructor(data) { + this.frameData = data; + } + createFrame(opcode) { + const frameData = this.frameData; + const maskKey = generateMask(); + const bodyLength = frameData?.byteLength ?? 0; + let payloadLength = bodyLength; + let offset = 6; + if (bodyLength > maxUnsigned16Bit) { + offset += 8; + payloadLength = 127; + } else if (bodyLength > 125) { + offset += 2; + payloadLength = 126; + } + const buffer2 = Buffer.allocUnsafe(bodyLength + offset); + buffer2[0] = buffer2[1] = 0; + buffer2[0] |= 128; + buffer2[0] = (buffer2[0] & 240) + opcode; + buffer2[offset - 4] = maskKey[0]; + buffer2[offset - 3] = maskKey[1]; + buffer2[offset - 2] = maskKey[2]; + buffer2[offset - 1] = maskKey[3]; + buffer2[1] = payloadLength; + if (payloadLength === 126) { + buffer2.writeUInt16BE(bodyLength, 2); + } else if (payloadLength === 127) { + buffer2[2] = buffer2[3] = 0; + buffer2.writeUIntBE(bodyLength, 4, 6); + } + buffer2[1] |= 128; + for (let i = 0; i < bodyLength; ++i) { + buffer2[offset + i] = frameData[i] ^ maskKey[i & 3]; + } + return buffer2; + } + }; + module2.exports = { + WebsocketFrameSend + }; + } +}); + +// node_modules/undici/lib/web/websocket/connection.js +var require_connection = __commonJS({ + "node_modules/undici/lib/web/websocket/connection.js"(exports2, module2) { + "use strict"; + var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5(); + var { + kReadyState, + kSentClose, + kByteParser, + kReceivedClose, + kResponse + } = require_symbols5(); + var { fireEvent, failWebsocketConnection, isClosing, isClosed, isEstablished, parseExtensions } = require_util7(); + var { channels } = require_diagnostics(); + var { CloseEvent } = require_events(); + var { makeRequest } = require_request2(); + var { fetching } = require_fetch(); + var { Headers: Headers2, getHeadersList } = require_headers(); + var { getDecodeSplit } = require_util2(); + var { WebsocketFrameSend } = require_frame(); + var crypto2; + try { + crypto2 = require("node:crypto"); + } catch { + } + function establishWebSocketConnection(url, protocols, client, ws, onEstablish, options) { + const requestURL = url; + requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:"; + const request2 = makeRequest({ + urlList: [requestURL], + client, + serviceWorkers: "none", + referrer: "no-referrer", + mode: "websocket", + credentials: "include", + cache: "no-store", + redirect: "error" + }); + if (options.headers) { + const headersList = getHeadersList(new Headers2(options.headers)); + request2.headersList = headersList; + } + const keyValue = crypto2.randomBytes(16).toString("base64"); + request2.headersList.append("sec-websocket-key", keyValue); + request2.headersList.append("sec-websocket-version", "13"); + for (const protocol of protocols) { + request2.headersList.append("sec-websocket-protocol", protocol); + } + const permessageDeflate = "permessage-deflate; client_max_window_bits"; + request2.headersList.append("sec-websocket-extensions", permessageDeflate); + const controller = fetching({ + request: request2, + useParallelQueue: true, + dispatcher: options.dispatcher, + processResponse(response) { + if (response.type === "error" || response.status !== 101) { + failWebsocketConnection(ws, "Received network error or non-101 status code."); + return; + } + if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) { + failWebsocketConnection(ws, "Server did not respond with sent protocols."); + return; + } + if (response.headersList.get("Upgrade")?.toLowerCase() !== "websocket") { + failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".'); + return; + } + if (response.headersList.get("Connection")?.toLowerCase() !== "upgrade") { + failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".'); + return; + } + const secWSAccept = response.headersList.get("Sec-WebSocket-Accept"); + const digest = crypto2.createHash("sha1").update(keyValue + uid).digest("base64"); + if (secWSAccept !== digest) { + failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header."); + return; + } + const secExtension = response.headersList.get("Sec-WebSocket-Extensions"); + let extensions; + if (secExtension !== null) { + extensions = parseExtensions(secExtension); + if (!extensions.has("permessage-deflate")) { + failWebsocketConnection(ws, "Sec-WebSocket-Extensions header does not match."); + return; + } + } + const secProtocol = response.headersList.get("Sec-WebSocket-Protocol"); + if (secProtocol !== null) { + const requestProtocols = getDecodeSplit("sec-websocket-protocol", request2.headersList); + if (!requestProtocols.includes(secProtocol)) { + failWebsocketConnection(ws, "Protocol was not set in the opening handshake."); + return; + } + } + response.socket.on("data", onSocketData); + response.socket.on("close", onSocketClose); + response.socket.on("error", onSocketError); + if (channels.open.hasSubscribers) { + channels.open.publish({ + address: response.socket.address(), + protocol: secProtocol, + extensions: secExtension + }); + } + onEstablish(response, extensions); + } + }); + return controller; + } + function closeWebSocketConnection(ws, code, reason, reasonByteLength) { + if (isClosing(ws) || isClosed(ws)) { + } else if (!isEstablished(ws)) { + failWebsocketConnection(ws, "Connection was closed before it was established."); + ws[kReadyState] = states.CLOSING; + } else if (ws[kSentClose] === sentCloseFrameState.NOT_SENT) { + ws[kSentClose] = sentCloseFrameState.PROCESSING; + const frame = new WebsocketFrameSend(); + if (code !== void 0 && reason === void 0) { + frame.frameData = Buffer.allocUnsafe(2); + frame.frameData.writeUInt16BE(code, 0); + } else if (code !== void 0 && reason !== void 0) { + frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength); + frame.frameData.writeUInt16BE(code, 0); + frame.frameData.write(reason, 2, "utf-8"); + } else { + frame.frameData = emptyBuffer; + } + const socket = ws[kResponse].socket; + socket.write(frame.createFrame(opcodes.CLOSE)); + ws[kSentClose] = sentCloseFrameState.SENT; + ws[kReadyState] = states.CLOSING; + } else { + ws[kReadyState] = states.CLOSING; + } + } + function onSocketData(chunk) { + if (!this.ws[kByteParser].write(chunk)) { + this.pause(); + } + } + function onSocketClose() { + const { ws } = this; + const { [kResponse]: response } = ws; + response.socket.off("data", onSocketData); + response.socket.off("close", onSocketClose); + response.socket.off("error", onSocketError); + const wasClean = ws[kSentClose] === sentCloseFrameState.SENT && ws[kReceivedClose]; + let code = 1005; + let reason = ""; + const result = ws[kByteParser].closingInfo; + if (result && !result.error) { + code = result.code ?? 1005; + reason = result.reason; + } else if (!ws[kReceivedClose]) { + code = 1006; + } + ws[kReadyState] = states.CLOSED; + fireEvent("close", ws, (type, init) => new CloseEvent(type, init), { + wasClean, + code, + reason + }); + if (channels.close.hasSubscribers) { + channels.close.publish({ + websocket: ws, + code, + reason + }); + } + } + function onSocketError(error2) { + const { ws } = this; + ws[kReadyState] = states.CLOSING; + if (channels.socketError.hasSubscribers) { + channels.socketError.publish(error2); + } + this.destroy(); + } + module2.exports = { + establishWebSocketConnection, + closeWebSocketConnection + }; + } +}); + +// node_modules/undici/lib/web/websocket/permessage-deflate.js +var require_permessage_deflate = __commonJS({ + "node_modules/undici/lib/web/websocket/permessage-deflate.js"(exports2, module2) { + "use strict"; + var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require("node:zlib"); + var { isValidClientWindowBits } = require_util7(); + var { MessageSizeExceededError } = require_errors(); + var tail = Buffer.from([0, 0, 255, 255]); + var kBuffer = /* @__PURE__ */ Symbol("kBuffer"); + var kLength = /* @__PURE__ */ Symbol("kLength"); + var PerMessageDeflate = class { + /** @type {import('node:zlib').InflateRaw} */ + #inflate; + #options = {}; + #maxPayloadSize = 0; + /** + * @param {Map} extensions + */ + constructor(extensions, options) { + this.#options.serverNoContextTakeover = extensions.has("server_no_context_takeover"); + this.#options.serverMaxWindowBits = extensions.get("server_max_window_bits"); + this.#maxPayloadSize = options.maxPayloadSize; + } + /** + * Decompress a compressed payload. + * @param {Buffer} chunk Compressed data + * @param {boolean} fin Final fragment flag + * @param {Function} callback Callback function + */ + decompress(chunk, fin, callback) { + if (!this.#inflate) { + let windowBits = Z_DEFAULT_WINDOWBITS; + if (this.#options.serverMaxWindowBits) { + if (!isValidClientWindowBits(this.#options.serverMaxWindowBits)) { + callback(new Error("Invalid server_max_window_bits")); + return; + } + windowBits = Number.parseInt(this.#options.serverMaxWindowBits); + } + try { + this.#inflate = createInflateRaw({ windowBits }); + } catch (err) { + callback(err); + return; + } + this.#inflate[kBuffer] = []; + this.#inflate[kLength] = 0; + this.#inflate.on("data", (data) => { + this.#inflate[kLength] += data.length; + if (this.#maxPayloadSize > 0 && this.#inflate[kLength] > this.#maxPayloadSize) { + callback(new MessageSizeExceededError()); + this.#inflate.removeAllListeners(); + this.#inflate = null; + return; + } + this.#inflate[kBuffer].push(data); + }); + this.#inflate.on("error", (err) => { + this.#inflate = null; + callback(err); + }); + } + this.#inflate.write(chunk); + if (fin) { + this.#inflate.write(tail); + } + this.#inflate.flush(() => { + if (!this.#inflate) { + return; + } + const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength]); + this.#inflate[kBuffer].length = 0; + this.#inflate[kLength] = 0; + callback(null, full); + }); + } + }; + module2.exports = { PerMessageDeflate }; + } +}); + +// node_modules/undici/lib/web/websocket/receiver.js +var require_receiver = __commonJS({ + "node_modules/undici/lib/web/websocket/receiver.js"(exports2, module2) { + "use strict"; + var { Writable } = require("node:stream"); + var assert = require("node:assert"); + var { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require_constants5(); + var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5(); + var { channels } = require_diagnostics(); + var { + isValidStatusCode, + isValidOpcode, + failWebsocketConnection, + websocketMessageReceived, + utf8Decode, + isControlFrame, + isTextBinaryFrame, + isContinuationFrame + } = require_util7(); + var { WebsocketFrameSend } = require_frame(); + var { closeWebSocketConnection } = require_connection(); + var { PerMessageDeflate } = require_permessage_deflate(); + var { MessageSizeExceededError } = require_errors(); + function failWebsocketConnectionWithCode(ws, code, reason) { + closeWebSocketConnection(ws, code, reason, Buffer.byteLength(reason)); + failWebsocketConnection(ws, reason); + } + var ByteParser = class extends Writable { + #buffers = []; + #fragmentsBytes = 0; + #byteOffset = 0; + #loop = false; + #state = parserStates.INFO; + #info = {}; + #fragments = []; + /** @type {Map} */ + #extensions; + /** @type {number} */ + #maxFragments; + /** @type {number} */ + #maxPayloadSize; + /** + * @param {import('./websocket').WebSocket} ws + * @param {Map|null} extensions + * @param {{ maxFragments?: number, maxPayloadSize?: number }} [options] + */ + constructor(ws, extensions, options = {}) { + super(); + this.ws = ws; + this.#extensions = extensions == null ? /* @__PURE__ */ new Map() : extensions; + this.#maxFragments = options.maxFragments ?? 0; + this.#maxPayloadSize = options.maxPayloadSize ?? 0; + if (this.#extensions.has("permessage-deflate")) { + this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions, options)); + } + } + /** + * @param {Buffer} chunk + * @param {() => void} callback + */ + _write(chunk, _, callback) { + this.#buffers.push(chunk); + this.#byteOffset += chunk.length; + this.#loop = true; + this.run(callback); + } + #validatePayloadLength() { + if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength + this.#fragmentsBytes > this.#maxPayloadSize) { + failWebsocketConnectionWithCode(this.ws, 1009, "Payload size exceeds maximum allowed size"); + return false; + } + return true; + } + /** + * Runs whenever a new chunk is received. + * Callback is called whenever there are no more chunks buffering, + * or not enough bytes are buffered to parse. + */ + run(callback) { + while (this.#loop) { + if (this.#state === parserStates.INFO) { + if (this.#byteOffset < 2) { + return callback(); + } + const buffer = this.consume(2); + const fin = (buffer[0] & 128) !== 0; + const opcode = buffer[0] & 15; + const masked = (buffer[1] & 128) === 128; + const fragmented = !fin && opcode !== opcodes.CONTINUATION; + const payloadLength = buffer[1] & 127; + const rsv1 = buffer[0] & 64; + const rsv2 = buffer[0] & 32; + const rsv3 = buffer[0] & 16; + if (!isValidOpcode(opcode)) { + failWebsocketConnection(this.ws, "Invalid opcode received"); + return callback(); + } + if (masked) { + failWebsocketConnection(this.ws, "Frame cannot be masked"); + return callback(); + } + if (rsv1 !== 0 && !this.#extensions.has("permessage-deflate")) { + failWebsocketConnection(this.ws, "Expected RSV1 to be clear."); + return; + } + if (rsv2 !== 0 || rsv3 !== 0) { + failWebsocketConnection(this.ws, "RSV1, RSV2, RSV3 must be clear"); + return; + } + if (fragmented && !isTextBinaryFrame(opcode)) { + failWebsocketConnection(this.ws, "Invalid frame type was fragmented."); + return; + } + if (isTextBinaryFrame(opcode) && this.#fragments.length > 0) { + failWebsocketConnection(this.ws, "Expected continuation frame"); + return; + } + if (this.#info.fragmented && fragmented) { + failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes."); + return; + } + if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) { + failWebsocketConnection(this.ws, "Control frame either too large or fragmented"); + return; + } + if (isContinuationFrame(opcode) && this.#fragments.length === 0 && !this.#info.compressed) { + failWebsocketConnection(this.ws, "Unexpected continuation frame"); + return; + } + if (payloadLength <= 125) { + this.#info.payloadLength = payloadLength; + this.#state = parserStates.READ_DATA; + if (!this.#validatePayloadLength()) { + return; + } + } else if (payloadLength === 126) { + this.#state = parserStates.PAYLOADLENGTH_16; + } else if (payloadLength === 127) { + this.#state = parserStates.PAYLOADLENGTH_64; + } + if (isTextBinaryFrame(opcode)) { + this.#info.binaryType = opcode; + this.#info.compressed = rsv1 !== 0; + } + this.#info.opcode = opcode; + this.#info.masked = masked; + this.#info.fin = fin; + this.#info.fragmented = fragmented; + } else if (this.#state === parserStates.PAYLOADLENGTH_16) { + if (this.#byteOffset < 2) { + return callback(); + } + const buffer = this.consume(2); + this.#info.payloadLength = buffer.readUInt16BE(0); + this.#state = parserStates.READ_DATA; + if (!this.#validatePayloadLength()) { + return; + } + } else if (this.#state === parserStates.PAYLOADLENGTH_64) { + if (this.#byteOffset < 8) { + return callback(); + } + const buffer = this.consume(8); + const upper = buffer.readUInt32BE(0); + const lower = buffer.readUInt32BE(4); + if (upper !== 0 || lower > 2 ** 31 - 1) { + failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes."); + return; + } + this.#info.payloadLength = lower; + this.#state = parserStates.READ_DATA; + if (!this.#validatePayloadLength()) { + return; + } + } else if (this.#state === parserStates.READ_DATA) { + if (this.#byteOffset < this.#info.payloadLength) { + return callback(); + } + const body = this.consume(this.#info.payloadLength); + if (isControlFrame(this.#info.opcode)) { + this.#loop = this.parseControlFrame(body); + this.#state = parserStates.INFO; + } else { + if (!this.#info.compressed) { + if (!this.writeFragments(body)) { + return; + } + if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) { + failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message); + return; + } + if (!this.#info.fragmented && this.#info.fin) { + websocketMessageReceived(this.ws, this.#info.binaryType, this.consumeFragments()); + } + this.#state = parserStates.INFO; + } else { + this.#extensions.get("permessage-deflate").decompress( + body, + this.#info.fin, + (error2, data) => { + if (error2) { + const code = error2 instanceof MessageSizeExceededError ? 1009 : 1007; + failWebsocketConnectionWithCode(this.ws, code, error2.message); + return; + } + if (!this.writeFragments(data)) { + return; + } + if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) { + failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message); + return; + } + if (!this.#info.fin) { + this.#state = parserStates.INFO; + this.#loop = true; + this.run(callback); + return; + } + websocketMessageReceived(this.ws, this.#info.binaryType, this.consumeFragments()); + this.#loop = true; + this.#state = parserStates.INFO; + this.run(callback); + } + ); + this.#loop = false; + break; + } + } + } + } + } + /** + * Take n bytes from the buffered Buffers + * @param {number} n + * @returns {Buffer} + */ + consume(n) { + if (n > this.#byteOffset) { + throw new Error("Called consume() before buffers satiated."); + } else if (n === 0) { + return emptyBuffer; + } + if (this.#buffers[0].length === n) { + this.#byteOffset -= this.#buffers[0].length; + return this.#buffers.shift(); + } + const buffer = Buffer.allocUnsafe(n); + let offset = 0; + while (offset !== n) { + const next = this.#buffers[0]; + const { length } = next; + if (length + offset === n) { + buffer.set(this.#buffers.shift(), offset); + break; + } else if (length + offset > n) { + buffer.set(next.subarray(0, n - offset), offset); + this.#buffers[0] = next.subarray(n - offset); + break; + } else { + buffer.set(this.#buffers.shift(), offset); + offset += next.length; + } + } + this.#byteOffset -= n; + return buffer; + } + writeFragments(fragment) { + if (this.#maxFragments > 0 && this.#fragments.length === this.#maxFragments) { + failWebsocketConnectionWithCode(this.ws, 1008, "Too many message fragments"); + return false; + } + this.#fragmentsBytes += fragment.length; + this.#fragments.push(fragment); + return true; + } + consumeFragments() { + const fragments = this.#fragments; + if (fragments.length === 1) { + this.#fragmentsBytes = 0; + return fragments.shift(); + } + const output = Buffer.concat(fragments, this.#fragmentsBytes); + this.#fragments = []; + this.#fragmentsBytes = 0; + return output; + } + parseCloseBody(data) { + assert(data.length !== 1); + let code; + if (data.length >= 2) { + code = data.readUInt16BE(0); + } + if (code !== void 0 && !isValidStatusCode(code)) { + return { code: 1002, reason: "Invalid status code", error: true }; + } + let reason = data.subarray(2); + if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) { + reason = reason.subarray(3); + } + try { + reason = utf8Decode(reason); + } catch { + return { code: 1007, reason: "Invalid UTF-8", error: true }; + } + return { code, reason, error: false }; + } + /** + * Parses control frames. + * @param {Buffer} body + */ + parseControlFrame(body) { + const { opcode, payloadLength } = this.#info; + if (opcode === opcodes.CLOSE) { + if (payloadLength === 1) { + failWebsocketConnection(this.ws, "Received close frame with a 1-byte body."); + return false; + } + this.#info.closeInfo = this.parseCloseBody(body); + if (this.#info.closeInfo.error) { + const { code, reason } = this.#info.closeInfo; + closeWebSocketConnection(this.ws, code, reason, reason.length); + failWebsocketConnection(this.ws, reason); + return false; + } + if (this.ws[kSentClose] !== sentCloseFrameState.SENT) { + let body2 = emptyBuffer; + if (this.#info.closeInfo.code) { + body2 = Buffer.allocUnsafe(2); + body2.writeUInt16BE(this.#info.closeInfo.code, 0); + } + const closeFrame = new WebsocketFrameSend(body2); + this.ws[kResponse].socket.write( + closeFrame.createFrame(opcodes.CLOSE), + (err) => { + if (!err) { + this.ws[kSentClose] = sentCloseFrameState.SENT; + } + } + ); + } + this.ws[kReadyState] = states.CLOSING; + this.ws[kReceivedClose] = true; + return false; + } else if (opcode === opcodes.PING) { + if (!this.ws[kReceivedClose]) { + const frame = new WebsocketFrameSend(body); + this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG)); + if (channels.ping.hasSubscribers) { + channels.ping.publish({ + payload: body + }); + } + } + } else if (opcode === opcodes.PONG) { + if (channels.pong.hasSubscribers) { + channels.pong.publish({ + payload: body + }); + } + } + return true; + } + get closingInfo() { + return this.#info.closeInfo; + } + }; + module2.exports = { + ByteParser + }; + } +}); + +// node_modules/undici/lib/web/websocket/sender.js +var require_sender = __commonJS({ + "node_modules/undici/lib/web/websocket/sender.js"(exports2, module2) { + "use strict"; + var { WebsocketFrameSend } = require_frame(); + var { opcodes, sendHints } = require_constants5(); + var FixedQueue = require_fixed_queue(); + var FastBuffer = Buffer[Symbol.species]; + var SendQueue = class { + /** + * @type {FixedQueue} + */ + #queue = new FixedQueue(); + /** + * @type {boolean} + */ + #running = false; + /** @type {import('node:net').Socket} */ + #socket; + constructor(socket) { + this.#socket = socket; + } + add(item, cb, hint) { + if (hint !== sendHints.blob) { + const frame = createFrame(item, hint); + if (!this.#running) { + this.#socket.write(frame, cb); + } else { + const node2 = { + promise: null, + callback: cb, + frame + }; + this.#queue.push(node2); + } + return; + } + const node = { + promise: item.arrayBuffer().then((ab) => { + node.promise = null; + node.frame = createFrame(ab, hint); + }), + callback: cb, + frame: null + }; + this.#queue.push(node); + if (!this.#running) { + this.#run(); + } + } + async #run() { + this.#running = true; + const queue = this.#queue; + while (!queue.isEmpty()) { + const node = queue.shift(); + if (node.promise !== null) { + await node.promise; + } + this.#socket.write(node.frame, node.callback); + node.callback = node.frame = null; + } + this.#running = false; + } + }; + function createFrame(data, hint) { + return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.string ? opcodes.TEXT : opcodes.BINARY); + } + function toBuffer(data, hint) { + switch (hint) { + case sendHints.string: + return Buffer.from(data); + case sendHints.arrayBuffer: + case sendHints.blob: + return new FastBuffer(data); + case sendHints.typedArray: + return new FastBuffer(data.buffer, data.byteOffset, data.byteLength); + } + } + module2.exports = { SendQueue }; + } +}); + +// node_modules/undici/lib/web/websocket/websocket.js +var require_websocket = __commonJS({ + "node_modules/undici/lib/web/websocket/websocket.js"(exports2, module2) { + "use strict"; + var { webidl } = require_webidl(); + var { URLSerializer } = require_data_url(); + var { environmentSettingsObject } = require_util2(); + var { staticPropertyDescriptors, states, sentCloseFrameState, sendHints } = require_constants5(); + var { + kWebSocketURL, + kReadyState, + kController, + kBinaryType, + kResponse, + kSentClose, + kByteParser + } = require_symbols5(); + var { + isConnecting, + isEstablished, + isClosing, + isValidSubprotocol, + fireEvent + } = require_util7(); + var { establishWebSocketConnection, closeWebSocketConnection } = require_connection(); + var { ByteParser } = require_receiver(); + var { kEnumerableProperty, isBlobLike } = require_util(); + var { getGlobalDispatcher } = require_global2(); + var { types } = require("node:util"); + var { ErrorEvent, CloseEvent } = require_events(); + var { SendQueue } = require_sender(); + var WebSocket = class _WebSocket extends EventTarget { + #events = { + open: null, + error: null, + close: null, + message: null + }; + #bufferedAmount = 0; + #protocol = ""; + #extensions = ""; + /** @type {SendQueue} */ + #sendQueue; + /** + * @param {string} url + * @param {string|string[]} protocols + */ + constructor(url, protocols = []) { + super(); + webidl.util.markAsUncloneable(this); + const prefix = "WebSocket constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + const options = webidl.converters["DOMString or sequence or WebSocketInit"](protocols, prefix, "options"); + url = webidl.converters.USVString(url, prefix, "url"); + protocols = options.protocols; + const baseURL = environmentSettingsObject.settingsObject.baseUrl; + let urlRecord; + try { + urlRecord = new URL(url, baseURL); + } catch (e) { + throw new DOMException(e, "SyntaxError"); + } + if (urlRecord.protocol === "http:") { + urlRecord.protocol = "ws:"; + } else if (urlRecord.protocol === "https:") { + urlRecord.protocol = "wss:"; + } + if (urlRecord.protocol !== "ws:" && urlRecord.protocol !== "wss:") { + throw new DOMException( + `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, + "SyntaxError" + ); + } + if (urlRecord.hash || urlRecord.href.endsWith("#")) { + throw new DOMException("Got fragment", "SyntaxError"); + } + if (typeof protocols === "string") { + protocols = [protocols]; + } + if (protocols.length !== new Set(protocols.map((p) => p.toLowerCase())).size) { + throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError"); + } + if (protocols.length > 0 && !protocols.every((p) => isValidSubprotocol(p))) { + throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError"); + } + this[kWebSocketURL] = new URL(urlRecord.href); + const client = environmentSettingsObject.settingsObject; + this[kController] = establishWebSocketConnection( + urlRecord, + protocols, + client, + this, + (response, extensions) => this.#onConnectionEstablished(response, extensions), + options + ); + this[kReadyState] = _WebSocket.CONNECTING; + this[kSentClose] = sentCloseFrameState.NOT_SENT; + this[kBinaryType] = "blob"; + } + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-close + * @param {number|undefined} code + * @param {string|undefined} reason + */ + close(code = void 0, reason = void 0) { + webidl.brandCheck(this, _WebSocket); + const prefix = "WebSocket.close"; + if (code !== void 0) { + code = webidl.converters["unsigned short"](code, prefix, "code", { clamp: true }); + } + if (reason !== void 0) { + reason = webidl.converters.USVString(reason, prefix, "reason"); + } + if (code !== void 0) { + if (code !== 1e3 && (code < 3e3 || code > 4999)) { + throw new DOMException("invalid code", "InvalidAccessError"); + } + } + let reasonByteLength = 0; + if (reason !== void 0) { + reasonByteLength = Buffer.byteLength(reason); + if (reasonByteLength > 123) { + throw new DOMException( + `Reason must be less than 123 bytes; received ${reasonByteLength}`, + "SyntaxError" + ); + } + } + closeWebSocketConnection(this, code, reason, reasonByteLength); + } + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-send + * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data + */ + send(data) { + webidl.brandCheck(this, _WebSocket); + const prefix = "WebSocket.send"; + webidl.argumentLengthCheck(arguments, 1, prefix); + data = webidl.converters.WebSocketSendData(data, prefix, "data"); + if (isConnecting(this)) { + throw new DOMException("Sent before connected.", "InvalidStateError"); + } + if (!isEstablished(this) || isClosing(this)) { + return; + } + if (typeof data === "string") { + const length = Buffer.byteLength(data); + this.#bufferedAmount += length; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= length; + }, sendHints.string); + } else if (types.isArrayBuffer(data)) { + this.#bufferedAmount += data.byteLength; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= data.byteLength; + }, sendHints.arrayBuffer); + } else if (ArrayBuffer.isView(data)) { + this.#bufferedAmount += data.byteLength; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= data.byteLength; + }, sendHints.typedArray); + } else if (isBlobLike(data)) { + this.#bufferedAmount += data.size; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= data.size; + }, sendHints.blob); + } + } + get readyState() { + webidl.brandCheck(this, _WebSocket); + return this[kReadyState]; + } + get bufferedAmount() { + webidl.brandCheck(this, _WebSocket); + return this.#bufferedAmount; + } + get url() { + webidl.brandCheck(this, _WebSocket); + return URLSerializer(this[kWebSocketURL]); + } + get extensions() { + webidl.brandCheck(this, _WebSocket); + return this.#extensions; + } + get protocol() { + webidl.brandCheck(this, _WebSocket); + return this.#protocol; + } + get onopen() { + webidl.brandCheck(this, _WebSocket); + return this.#events.open; + } + set onopen(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.open) { + this.removeEventListener("open", this.#events.open); + } + if (typeof fn === "function") { + this.#events.open = fn; + this.addEventListener("open", fn); + } else { + this.#events.open = null; + } + } + get onerror() { + webidl.brandCheck(this, _WebSocket); + return this.#events.error; + } + set onerror(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.error) { + this.removeEventListener("error", this.#events.error); + } + if (typeof fn === "function") { + this.#events.error = fn; + this.addEventListener("error", fn); + } else { + this.#events.error = null; + } + } + get onclose() { + webidl.brandCheck(this, _WebSocket); + return this.#events.close; + } + set onclose(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.close) { + this.removeEventListener("close", this.#events.close); + } + if (typeof fn === "function") { + this.#events.close = fn; + this.addEventListener("close", fn); + } else { + this.#events.close = null; + } + } + get onmessage() { + webidl.brandCheck(this, _WebSocket); + return this.#events.message; + } + set onmessage(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.message) { + this.removeEventListener("message", this.#events.message); + } + if (typeof fn === "function") { + this.#events.message = fn; + this.addEventListener("message", fn); + } else { + this.#events.message = null; + } + } + get binaryType() { + webidl.brandCheck(this, _WebSocket); + return this[kBinaryType]; + } + set binaryType(type) { + webidl.brandCheck(this, _WebSocket); + if (type !== "blob" && type !== "arraybuffer") { + this[kBinaryType] = "blob"; + } else { + this[kBinaryType] = type; + } + } + /** + * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol + */ + #onConnectionEstablished(response, parsedExtensions) { + this[kResponse] = response; + const webSocketOptions = this[kController]?.dispatcher?.webSocketOptions; + const maxFragments = webSocketOptions?.maxFragments; + const maxPayloadSize = webSocketOptions?.maxPayloadSize; + const parser = new ByteParser(this, parsedExtensions, { + maxFragments, + maxPayloadSize + }); + parser.on("drain", onParserDrain); + parser.on("error", onParserError.bind(this)); + response.socket.ws = this; + this[kByteParser] = parser; + this.#sendQueue = new SendQueue(response.socket); + this[kReadyState] = states.OPEN; + const extensions = response.headersList.get("sec-websocket-extensions"); + if (extensions !== null) { + this.#extensions = extensions; + } + const protocol = response.headersList.get("sec-websocket-protocol"); + if (protocol !== null) { + this.#protocol = protocol; + } + fireEvent("open", this); + } + }; + WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING; + WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN; + WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING; + WebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED; + Object.defineProperties(WebSocket.prototype, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors, + url: kEnumerableProperty, + readyState: kEnumerableProperty, + bufferedAmount: kEnumerableProperty, + onopen: kEnumerableProperty, + onerror: kEnumerableProperty, + onclose: kEnumerableProperty, + close: kEnumerableProperty, + onmessage: kEnumerableProperty, + binaryType: kEnumerableProperty, + send: kEnumerableProperty, + extensions: kEnumerableProperty, + protocol: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "WebSocket", + writable: false, + enumerable: false, + configurable: true + } + }); + Object.defineProperties(WebSocket, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors + }); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.DOMString + ); + webidl.converters["DOMString or sequence"] = function(V, prefix, argument) { + if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) { + return webidl.converters["sequence"](V); + } + return webidl.converters.DOMString(V, prefix, argument); + }; + webidl.converters.WebSocketInit = webidl.dictionaryConverter([ + { + key: "protocols", + converter: webidl.converters["DOMString or sequence"], + defaultValue: () => new Array(0) + }, + { + key: "dispatcher", + converter: webidl.converters.any, + defaultValue: () => getGlobalDispatcher() + }, + { + key: "headers", + converter: webidl.nullableConverter(webidl.converters.HeadersInit) + } + ]); + webidl.converters["DOMString or sequence or WebSocketInit"] = function(V) { + if (webidl.util.Type(V) === "Object" && !(Symbol.iterator in V)) { + return webidl.converters.WebSocketInit(V); + } + return { protocols: webidl.converters["DOMString or sequence"](V) }; + }; + webidl.converters.WebSocketSendData = function(V) { + if (webidl.util.Type(V) === "Object") { + if (isBlobLike(V)) { + return webidl.converters.Blob(V, { strict: false }); + } + if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { + return webidl.converters.BufferSource(V); + } + } + return webidl.converters.USVString(V); + }; + function onParserDrain() { + this.ws[kResponse].socket.resume(); + } + function onParserError(err) { + let message; + let code; + if (err instanceof CloseEvent) { + message = err.reason; + code = err.code; + } else { + message = err.message; + } + fireEvent("error", this, () => new ErrorEvent("error", { error: err, message })); + closeWebSocketConnection(this, code); + } + module2.exports = { + WebSocket + }; + } +}); + +// node_modules/undici/lib/web/eventsource/util.js +var require_util8 = __commonJS({ + "node_modules/undici/lib/web/eventsource/util.js"(exports2, module2) { + "use strict"; + function isValidLastEventId(value) { + return value.indexOf("\0") === -1; + } + function isASCIINumber(value) { + if (value.length === 0) return false; + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57) return false; + } + return true; + } + function delay(ms) { + return new Promise((resolve2) => { + setTimeout(resolve2, ms).unref(); + }); + } + module2.exports = { + isValidLastEventId, + isASCIINumber, + delay + }; + } +}); + +// node_modules/undici/lib/web/eventsource/eventsource-stream.js +var require_eventsource_stream = __commonJS({ + "node_modules/undici/lib/web/eventsource/eventsource-stream.js"(exports2, module2) { + "use strict"; + var { Transform } = require("node:stream"); + var { isASCIINumber, isValidLastEventId } = require_util8(); + var BOM = [239, 187, 191]; + var LF = 10; + var CR = 13; + var COLON = 58; + var SPACE = 32; + var EventSourceStream = class extends Transform { + /** + * @type {eventSourceSettings} + */ + state = null; + /** + * Leading byte-order-mark check. + * @type {boolean} + */ + checkBOM = true; + /** + * @type {boolean} + */ + crlfCheck = false; + /** + * @type {boolean} + */ + eventEndCheck = false; + /** + * @type {Buffer} + */ + buffer = null; + pos = 0; + event = { + data: void 0, + event: void 0, + id: void 0, + retry: void 0 + }; + /** + * @param {object} options + * @param {eventSourceSettings} options.eventSourceSettings + * @param {Function} [options.push] + */ + constructor(options = {}) { + options.readableObjectMode = true; + super(options); + this.state = options.eventSourceSettings || {}; + if (options.push) { + this.push = options.push; + } + } + /** + * @param {Buffer} chunk + * @param {string} _encoding + * @param {Function} callback + * @returns {void} + */ + _transform(chunk, _encoding, callback) { + if (chunk.length === 0) { + callback(); + return; + } + if (this.buffer) { + this.buffer = Buffer.concat([this.buffer, chunk]); + } else { + this.buffer = chunk; + } + if (this.checkBOM) { + switch (this.buffer.length) { + case 1: + if (this.buffer[0] === BOM[0]) { + callback(); + return; + } + this.checkBOM = false; + callback(); + return; + case 2: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1]) { + callback(); + return; + } + this.checkBOM = false; + break; + case 3: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { + this.buffer = Buffer.alloc(0); + this.checkBOM = false; + callback(); + return; + } + this.checkBOM = false; + break; + default: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { + this.buffer = this.buffer.subarray(3); + } + this.checkBOM = false; + break; + } + } + while (this.pos < this.buffer.length) { + if (this.eventEndCheck) { + if (this.crlfCheck) { + if (this.buffer[this.pos] === LF) { + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + this.crlfCheck = false; + continue; + } + this.crlfCheck = false; + } + if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { + if (this.buffer[this.pos] === CR) { + this.crlfCheck = true; + } + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + if (this.event.data !== void 0 || this.event.event || this.event.id || this.event.retry) { + this.processEvent(this.event); + } + this.clearEvent(); + continue; + } + this.eventEndCheck = false; + continue; + } + if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { + if (this.buffer[this.pos] === CR) { + this.crlfCheck = true; + } + this.parseLine(this.buffer.subarray(0, this.pos), this.event); + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + this.eventEndCheck = true; + continue; + } + this.pos++; + } + callback(); + } + /** + * @param {Buffer} line + * @param {EventStreamEvent} event + */ + parseLine(line, event) { + if (line.length === 0) { + return; + } + const colonPosition = line.indexOf(COLON); + if (colonPosition === 0) { + return; + } + let field = ""; + let value = ""; + if (colonPosition !== -1) { + field = line.subarray(0, colonPosition).toString("utf8"); + let valueStart = colonPosition + 1; + if (line[valueStart] === SPACE) { + ++valueStart; + } + value = line.subarray(valueStart).toString("utf8"); + } else { + field = line.toString("utf8"); + value = ""; + } + switch (field) { + case "data": + if (event[field] === void 0) { + event[field] = value; + } else { + event[field] += ` +${value}`; + } + break; + case "retry": + if (isASCIINumber(value)) { + event[field] = value; + } + break; + case "id": + if (isValidLastEventId(value)) { + event[field] = value; + } + break; + case "event": + if (value.length > 0) { + event[field] = value; + } + break; + } + } + /** + * @param {EventSourceStreamEvent} event + */ + processEvent(event) { + if (event.retry && isASCIINumber(event.retry)) { + this.state.reconnectionTime = parseInt(event.retry, 10); + } + if (event.id && isValidLastEventId(event.id)) { + this.state.lastEventId = event.id; + } + if (event.data !== void 0) { + this.push({ + type: event.event || "message", + options: { + data: event.data, + lastEventId: this.state.lastEventId, + origin: this.state.origin + } + }); + } + } + clearEvent() { + this.event = { + data: void 0, + event: void 0, + id: void 0, + retry: void 0 + }; + } + }; + module2.exports = { + EventSourceStream + }; + } +}); + +// node_modules/undici/lib/web/eventsource/eventsource.js +var require_eventsource = __commonJS({ + "node_modules/undici/lib/web/eventsource/eventsource.js"(exports2, module2) { + "use strict"; + var { pipeline: pipeline2 } = require("node:stream"); + var { fetching } = require_fetch(); + var { makeRequest } = require_request2(); + var { webidl } = require_webidl(); + var { EventSourceStream } = require_eventsource_stream(); + var { parseMIMEType } = require_data_url(); + var { createFastMessageEvent } = require_events(); + var { isNetworkError } = require_response(); + var { delay } = require_util8(); + var { kEnumerableProperty } = require_util(); + var { environmentSettingsObject } = require_util2(); + var experimentalWarned = false; + var defaultReconnectionTime = 3e3; + var CONNECTING = 0; + var OPEN = 1; + var CLOSED = 2; + var ANONYMOUS = "anonymous"; + var USE_CREDENTIALS = "use-credentials"; + var EventSource = class _EventSource extends EventTarget { + #events = { + open: null, + error: null, + message: null + }; + #url = null; + #withCredentials = false; + #readyState = CONNECTING; + #request = null; + #controller = null; + #dispatcher; + /** + * @type {import('./eventsource-stream').eventSourceSettings} + */ + #state; + /** + * Creates a new EventSource object. + * @param {string} url + * @param {EventSourceInit} [eventSourceInitDict] + * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface + */ + constructor(url, eventSourceInitDict = {}) { + super(); + webidl.util.markAsUncloneable(this); + const prefix = "EventSource constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + if (!experimentalWarned) { + experimentalWarned = true; + process.emitWarning("EventSource is experimental, expect them to change at any time.", { + code: "UNDICI-ES" + }); + } + url = webidl.converters.USVString(url, prefix, "url"); + eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, "eventSourceInitDict"); + this.#dispatcher = eventSourceInitDict.dispatcher; + this.#state = { + lastEventId: "", + reconnectionTime: defaultReconnectionTime + }; + const settings = environmentSettingsObject; + let urlRecord; + try { + urlRecord = new URL(url, settings.settingsObject.baseUrl); + this.#state.origin = urlRecord.origin; + } catch (e) { + throw new DOMException(e, "SyntaxError"); + } + this.#url = urlRecord.href; + let corsAttributeState = ANONYMOUS; + if (eventSourceInitDict.withCredentials) { + corsAttributeState = USE_CREDENTIALS; + this.#withCredentials = true; + } + const initRequest = { + redirect: "follow", + keepalive: true, + // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes + mode: "cors", + credentials: corsAttributeState === "anonymous" ? "same-origin" : "omit", + referrer: "no-referrer" + }; + initRequest.client = environmentSettingsObject.settingsObject; + initRequest.headersList = [["accept", { name: "accept", value: "text/event-stream" }]]; + initRequest.cache = "no-store"; + initRequest.initiator = "other"; + initRequest.urlList = [new URL(this.#url)]; + this.#request = makeRequest(initRequest); + this.#connect(); + } + /** + * Returns the state of this EventSource object's connection. It can have the + * values described below. + * @returns {0|1|2} + * @readonly + */ + get readyState() { + return this.#readyState; + } + /** + * Returns the URL providing the event stream. + * @readonly + * @returns {string} + */ + get url() { + return this.#url; + } + /** + * Returns a boolean indicating whether the EventSource object was + * instantiated with CORS credentials set (true), or not (false, the default). + */ + get withCredentials() { + return this.#withCredentials; + } + #connect() { + if (this.#readyState === CLOSED) return; + this.#readyState = CONNECTING; + const fetchParams = { + request: this.#request, + dispatcher: this.#dispatcher + }; + const processEventSourceEndOfBody = (response) => { + if (isNetworkError(response)) { + this.dispatchEvent(new Event("error")); + this.close(); + } + this.#reconnect(); + }; + fetchParams.processResponseEndOfBody = processEventSourceEndOfBody; + fetchParams.processResponse = (response) => { + if (isNetworkError(response)) { + if (response.aborted) { + this.close(); + this.dispatchEvent(new Event("error")); + return; + } else { + this.#reconnect(); + return; + } + } + const contentType = response.headersList.get("content-type", true); + const mimeType = contentType !== null ? parseMIMEType(contentType) : "failure"; + const contentTypeValid = mimeType !== "failure" && mimeType.essence === "text/event-stream"; + if (response.status !== 200 || contentTypeValid === false) { + this.close(); + this.dispatchEvent(new Event("error")); + return; + } + this.#readyState = OPEN; + this.dispatchEvent(new Event("open")); + this.#state.origin = response.urlList[response.urlList.length - 1].origin; + const eventSourceStream = new EventSourceStream({ + eventSourceSettings: this.#state, + push: (event) => { + this.dispatchEvent(createFastMessageEvent( + event.type, + event.options + )); + } + }); + pipeline2( + response.body.stream, + eventSourceStream, + (error2) => { + if (error2?.aborted === false) { + this.close(); + this.dispatchEvent(new Event("error")); + } + } + ); + }; + this.#controller = fetching(fetchParams); + } + /** + * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model + * @returns {Promise} + */ + async #reconnect() { + if (this.#readyState === CLOSED) return; + this.#readyState = CONNECTING; + this.dispatchEvent(new Event("error")); + await delay(this.#state.reconnectionTime); + if (this.#readyState !== CONNECTING) return; + if (this.#state.lastEventId.length) { + this.#request.headersList.set("last-event-id", this.#state.lastEventId, true); + } + this.#connect(); + } + /** + * Closes the connection, if any, and sets the readyState attribute to + * CLOSED. + */ + close() { + webidl.brandCheck(this, _EventSource); + if (this.#readyState === CLOSED) return; + this.#readyState = CLOSED; + this.#controller.abort(); + this.#request = null; + } + get onopen() { + return this.#events.open; + } + set onopen(fn) { + if (this.#events.open) { + this.removeEventListener("open", this.#events.open); + } + if (typeof fn === "function") { + this.#events.open = fn; + this.addEventListener("open", fn); + } else { + this.#events.open = null; + } + } + get onmessage() { + return this.#events.message; + } + set onmessage(fn) { + if (this.#events.message) { + this.removeEventListener("message", this.#events.message); + } + if (typeof fn === "function") { + this.#events.message = fn; + this.addEventListener("message", fn); + } else { + this.#events.message = null; + } + } + get onerror() { + return this.#events.error; + } + set onerror(fn) { + if (this.#events.error) { + this.removeEventListener("error", this.#events.error); + } + if (typeof fn === "function") { + this.#events.error = fn; + this.addEventListener("error", fn); + } else { + this.#events.error = null; + } + } + }; + var constantsPropertyDescriptors = { + CONNECTING: { + __proto__: null, + configurable: false, + enumerable: true, + value: CONNECTING, + writable: false + }, + OPEN: { + __proto__: null, + configurable: false, + enumerable: true, + value: OPEN, + writable: false + }, + CLOSED: { + __proto__: null, + configurable: false, + enumerable: true, + value: CLOSED, + writable: false + } + }; + Object.defineProperties(EventSource, constantsPropertyDescriptors); + Object.defineProperties(EventSource.prototype, constantsPropertyDescriptors); + Object.defineProperties(EventSource.prototype, { + close: kEnumerableProperty, + onerror: kEnumerableProperty, + onmessage: kEnumerableProperty, + onopen: kEnumerableProperty, + readyState: kEnumerableProperty, + url: kEnumerableProperty, + withCredentials: kEnumerableProperty + }); + webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([ + { + key: "withCredentials", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "dispatcher", + // undici only + converter: webidl.converters.any + } + ]); + module2.exports = { + EventSource, + defaultReconnectionTime + }; + } +}); + +// node_modules/undici/index.js +var require_undici = __commonJS({ + "node_modules/undici/index.js"(exports2, module2) { + "use strict"; + var Client = require_client(); + var Dispatcher = require_dispatcher(); + var Pool = require_pool(); + var BalancedPool = require_balanced_pool(); + var Agent3 = require_agent(); + var ProxyAgent2 = require_proxy_agent(); + var EnvHttpProxyAgent = require_env_http_proxy_agent(); + var RetryAgent = require_retry_agent(); + var errors = require_errors(); + var util2 = require_util(); + var { InvalidArgumentError } = errors; + var api = require_api(); + var buildConnector = require_connect(); + var MockClient = require_mock_client(); + var MockAgent = require_mock_agent(); + var MockPool = require_mock_pool(); + var mockErrors = require_mock_errors(); + var RetryHandler = require_retry_handler(); + var { getGlobalDispatcher, setGlobalDispatcher } = require_global2(); + var DecoratorHandler = require_decorator_handler(); + var RedirectHandler = require_redirect_handler(); + var createRedirectInterceptor = require_redirect_interceptor(); + Object.assign(Dispatcher.prototype, api); + module2.exports.Dispatcher = Dispatcher; + module2.exports.Client = Client; + module2.exports.Pool = Pool; + module2.exports.BalancedPool = BalancedPool; + module2.exports.Agent = Agent3; + module2.exports.ProxyAgent = ProxyAgent2; + module2.exports.EnvHttpProxyAgent = EnvHttpProxyAgent; + module2.exports.RetryAgent = RetryAgent; + module2.exports.RetryHandler = RetryHandler; + module2.exports.DecoratorHandler = DecoratorHandler; + module2.exports.RedirectHandler = RedirectHandler; + module2.exports.createRedirectInterceptor = createRedirectInterceptor; + module2.exports.interceptors = { + redirect: require_redirect(), + retry: require_retry(), + dump: require_dump(), + dns: require_dns() + }; + module2.exports.buildConnector = buildConnector; + module2.exports.errors = errors; + module2.exports.util = { + parseHeaders: util2.parseHeaders, + headerNameToString: util2.headerNameToString + }; + function makeDispatcher(fn) { + return (url, opts, handler2) => { + if (typeof opts === "function") { + handler2 = opts; + opts = null; + } + if (!url || typeof url !== "string" && typeof url !== "object" && !(url instanceof URL)) { + throw new InvalidArgumentError("invalid url"); + } + if (opts != null && typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (opts && opts.path != null) { + if (typeof opts.path !== "string") { + throw new InvalidArgumentError("invalid opts.path"); + } + let path6 = opts.path; + if (!opts.path.startsWith("/")) { + path6 = `/${path6}`; + } + url = new URL(util2.parseOrigin(url).origin + path6); + } else { + if (!opts) { + opts = typeof url === "object" ? url : {}; + } + url = util2.parseURL(url); + } + const { agent, dispatcher = getGlobalDispatcher() } = opts; + if (agent) { + throw new InvalidArgumentError("unsupported opts.agent. Did you mean opts.client?"); + } + return fn.call(dispatcher, { + ...opts, + origin: url.origin, + path: url.search ? `${url.pathname}${url.search}` : url.pathname, + method: opts.method || (opts.body ? "PUT" : "GET") + }, handler2); + }; + } + module2.exports.setGlobalDispatcher = setGlobalDispatcher; + module2.exports.getGlobalDispatcher = getGlobalDispatcher; + var fetchImpl = require_fetch().fetch; + module2.exports.fetch = async function fetch2(init, options = void 0) { + try { + return await fetchImpl(init, options); + } catch (err) { + if (err && typeof err === "object") { + Error.captureStackTrace(err); + } + throw err; + } + }; + module2.exports.Headers = require_headers().Headers; + module2.exports.Response = require_response().Response; + module2.exports.Request = require_request2().Request; + module2.exports.FormData = require_formdata().FormData; + module2.exports.File = globalThis.File ?? require("node:buffer").File; + module2.exports.FileReader = require_filereader().FileReader; + var { setGlobalOrigin, getGlobalOrigin } = require_global(); + module2.exports.setGlobalOrigin = setGlobalOrigin; + module2.exports.getGlobalOrigin = getGlobalOrigin; + var { CacheStorage } = require_cachestorage(); + var { kConstruct } = require_symbols4(); + module2.exports.caches = new CacheStorage(kConstruct); + var { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies(); + module2.exports.deleteCookie = deleteCookie; + module2.exports.getCookies = getCookies; + module2.exports.getSetCookies = getSetCookies; + module2.exports.setCookie = setCookie; + var { parseMIMEType, serializeAMimeType } = require_data_url(); + module2.exports.parseMIMEType = parseMIMEType; + module2.exports.serializeAMimeType = serializeAMimeType; + var { CloseEvent, ErrorEvent, MessageEvent } = require_events(); + module2.exports.WebSocket = require_websocket().WebSocket; + module2.exports.CloseEvent = CloseEvent; + module2.exports.ErrorEvent = ErrorEvent; + module2.exports.MessageEvent = MessageEvent; + module2.exports.request = makeDispatcher(api.request); + module2.exports.stream = makeDispatcher(api.stream); + module2.exports.pipeline = makeDispatcher(api.pipeline); + module2.exports.connect = makeDispatcher(api.connect); + module2.exports.upgrade = makeDispatcher(api.upgrade); + module2.exports.MockClient = MockClient; + module2.exports.MockPool = MockPool; + module2.exports.MockAgent = MockAgent; + module2.exports.mockErrors = mockErrors; + var { EventSource } = require_eventsource(); + module2.exports.EventSource = EventSource; + } +}); + +// node_modules/@actions/github/node_modules/@actions/http-client/lib/proxy.js +var require_proxy = __commonJS({ + "node_modules/@actions/github/node_modules/@actions/http-client/lib/proxy.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.getProxyUrl = getProxyUrl2; + exports2.checkBypass = checkBypass2; + function getProxyUrl2(reqUrl) { + const usingSsl = reqUrl.protocol === "https:"; + if (checkBypass2(reqUrl)) { + return void 0; + } + const proxyVar = (() => { + if (usingSsl) { + return process.env["https_proxy"] || process.env["HTTPS_PROXY"]; + } else { + return process.env["http_proxy"] || process.env["HTTP_PROXY"]; + } + })(); + if (proxyVar) { + try { + return new DecodedURL2(proxyVar); + } catch (_a) { + if (!proxyVar.startsWith("http://") && !proxyVar.startsWith("https://")) + return new DecodedURL2(`http://${proxyVar}`); + } + } else { + return void 0; + } + } + function checkBypass2(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + const reqHost = reqUrl.hostname; + if (isLoopbackAddress2(reqHost)) { + return true; + } + const noProxy = process.env["no_proxy"] || process.env["NO_PROXY"] || ""; + if (!noProxy) { + return false; + } + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } else if (reqUrl.protocol === "http:") { + reqPort = 80; + } else if (reqUrl.protocol === "https:") { + reqPort = 443; + } + const upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === "number") { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + for (const upperNoProxyItem of noProxy.split(",").map((x) => x.trim().toUpperCase()).filter((x) => x)) { + if (upperNoProxyItem === "*" || upperReqHosts.some((x) => x === upperNoProxyItem || x.endsWith(`.${upperNoProxyItem}`) || upperNoProxyItem.startsWith(".") && x.endsWith(`${upperNoProxyItem}`))) { + return true; + } + } + return false; + } + function isLoopbackAddress2(host) { + const hostLower = host.toLowerCase(); + return hostLower === "localhost" || hostLower.startsWith("127.") || hostLower.startsWith("[::1]") || hostLower.startsWith("[0:0:0:0:0:0:0:1]"); + } + var DecodedURL2 = class extends URL { + constructor(url, base) { + super(url, base); + this._decodedUsername = decodeURIComponent(super.username); + this._decodedPassword = decodeURIComponent(super.password); + } + get username() { + return this._decodedUsername; + } + get password() { + return this._decodedPassword; + } + }; + } +}); + +// node_modules/@actions/github/node_modules/@actions/http-client/lib/index.js +var require_lib = __commonJS({ + "node_modules/@actions/github/node_modules/@actions/http-client/lib/index.js"(exports2) { + "use strict"; + var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m[k]; + } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + o[k2] = m[k]; + })); + var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); + }) : function(o, v) { + o["default"] = v; + }); + var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function(o2) { + var ar = []; + for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function(mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) { + for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + } + __setModuleDefault(result, mod); + return result; + }; + })(); + var __awaiter10 = exports2 && exports2.__awaiter || function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.HttpClient = exports2.HttpClientResponse = exports2.HttpClientError = exports2.MediaTypes = exports2.Headers = exports2.HttpCodes = void 0; + exports2.getProxyUrl = getProxyUrl2; + exports2.isHttps = isHttps; + var http2 = __importStar(require("http")); + var https2 = __importStar(require("https")); + var pm = __importStar(require_proxy()); + var tunnel2 = __importStar(require_tunnel2()); + var undici_1 = require_undici(); + var HttpCodes2; + (function(HttpCodes3) { + HttpCodes3[HttpCodes3["OK"] = 200] = "OK"; + HttpCodes3[HttpCodes3["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes3[HttpCodes3["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes3[HttpCodes3["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes3[HttpCodes3["SeeOther"] = 303] = "SeeOther"; + HttpCodes3[HttpCodes3["NotModified"] = 304] = "NotModified"; + HttpCodes3[HttpCodes3["UseProxy"] = 305] = "UseProxy"; + HttpCodes3[HttpCodes3["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes3[HttpCodes3["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes3[HttpCodes3["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes3[HttpCodes3["BadRequest"] = 400] = "BadRequest"; + HttpCodes3[HttpCodes3["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes3[HttpCodes3["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes3[HttpCodes3["Forbidden"] = 403] = "Forbidden"; + HttpCodes3[HttpCodes3["NotFound"] = 404] = "NotFound"; + HttpCodes3[HttpCodes3["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes3[HttpCodes3["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes3[HttpCodes3["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes3[HttpCodes3["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes3[HttpCodes3["Conflict"] = 409] = "Conflict"; + HttpCodes3[HttpCodes3["Gone"] = 410] = "Gone"; + HttpCodes3[HttpCodes3["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes3[HttpCodes3["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes3[HttpCodes3["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes3[HttpCodes3["BadGateway"] = 502] = "BadGateway"; + HttpCodes3[HttpCodes3["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes3[HttpCodes3["GatewayTimeout"] = 504] = "GatewayTimeout"; + })(HttpCodes2 || (exports2.HttpCodes = HttpCodes2 = {})); + var Headers2; + (function(Headers3) { + Headers3["Accept"] = "accept"; + Headers3["ContentType"] = "content-type"; + })(Headers2 || (exports2.Headers = Headers2 = {})); + var MediaTypes2; + (function(MediaTypes3) { + MediaTypes3["ApplicationJson"] = "application/json"; + })(MediaTypes2 || (exports2.MediaTypes = MediaTypes2 = {})); + function getProxyUrl2(serverUrl) { + const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); + return proxyUrl ? proxyUrl.href : ""; + } + var HttpRedirectCodes2 = [ + HttpCodes2.MovedPermanently, + HttpCodes2.ResourceMoved, + HttpCodes2.SeeOther, + HttpCodes2.TemporaryRedirect, + HttpCodes2.PermanentRedirect + ]; + var HttpResponseRetryCodes2 = [ + HttpCodes2.BadGateway, + HttpCodes2.ServiceUnavailable, + HttpCodes2.GatewayTimeout + ]; + var RetryableHttpVerbs2 = ["OPTIONS", "GET", "DELETE", "HEAD"]; + var ExponentialBackoffCeiling2 = 10; + var ExponentialBackoffTimeSlice2 = 5; + var HttpClientError2 = class _HttpClientError extends Error { + constructor(message, statusCode) { + super(message); + this.name = "HttpClientError"; + this.statusCode = statusCode; + Object.setPrototypeOf(this, _HttpClientError.prototype); + } + }; + exports2.HttpClientError = HttpClientError2; + var HttpClientResponse2 = class { + constructor(message) { + this.message = message; + } + readBody() { + return __awaiter10(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter10(this, void 0, void 0, function* () { + let output = Buffer.alloc(0); + this.message.on("data", (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on("end", () => { + resolve2(output.toString()); + }); + })); + }); + } + readBodyBuffer() { + return __awaiter10(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter10(this, void 0, void 0, function* () { + const chunks = []; + this.message.on("data", (chunk) => { + chunks.push(chunk); + }); + this.message.on("end", () => { + resolve2(Buffer.concat(chunks)); + }); + })); + }); + } + }; + exports2.HttpClientResponse = HttpClientResponse2; + function isHttps(requestUrl) { + const parsedUrl = new URL(requestUrl); + return parsedUrl.protocol === "https:"; + } + var HttpClient3 = class { + constructor(userAgent3, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = this._getUserAgentWithOrchestrationId(userAgent3); + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } + } + options(requestUrl, additionalHeaders) { + return __awaiter10(this, void 0, void 0, function* () { + return this.request("OPTIONS", requestUrl, null, additionalHeaders || {}); + }); + } + get(requestUrl, additionalHeaders) { + return __awaiter10(this, void 0, void 0, function* () { + return this.request("GET", requestUrl, null, additionalHeaders || {}); + }); + } + del(requestUrl, additionalHeaders) { + return __awaiter10(this, void 0, void 0, function* () { + return this.request("DELETE", requestUrl, null, additionalHeaders || {}); + }); + } + post(requestUrl, data, additionalHeaders) { + return __awaiter10(this, void 0, void 0, function* () { + return this.request("POST", requestUrl, data, additionalHeaders || {}); + }); + } + patch(requestUrl, data, additionalHeaders) { + return __awaiter10(this, void 0, void 0, function* () { + return this.request("PATCH", requestUrl, data, additionalHeaders || {}); + }); + } + put(requestUrl, data, additionalHeaders) { + return __awaiter10(this, void 0, void 0, function* () { + return this.request("PUT", requestUrl, data, additionalHeaders || {}); + }); + } + head(requestUrl, additionalHeaders) { + return __awaiter10(this, void 0, void 0, function* () { + return this.request("HEAD", requestUrl, null, additionalHeaders || {}); + }); + } + sendStream(verb, requestUrl, stream2, additionalHeaders) { + return __awaiter10(this, void 0, void 0, function* () { + return this.request(verb, requestUrl, stream2, additionalHeaders); + }); + } + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + getJson(requestUrl_1) { + return __awaiter10(this, arguments, void 0, function* (requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); + const res = yield this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + postJson(requestUrl_1, obj_1) { + return __awaiter10(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); + additionalHeaders[Headers2.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes2.ApplicationJson); + const res = yield this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + putJson(requestUrl_1, obj_1) { + return __awaiter10(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); + additionalHeaders[Headers2.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes2.ApplicationJson); + const res = yield this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + patchJson(requestUrl_1, obj_1) { + return __awaiter10(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); + additionalHeaders[Headers2.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes2.ApplicationJson); + const res = yield this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb, requestUrl, data, headers) { + return __awaiter10(this, void 0, void 0, function* () { + if (this._disposed) { + throw new Error("Client has already been disposed."); + } + const parsedUrl = new URL(requestUrl); + let info2 = this._prepareRequest(verb, parsedUrl, headers); + const maxTries = this._allowRetries && RetryableHttpVerbs2.includes(verb) ? this._maxRetries + 1 : 1; + let numTries = 0; + let response; + do { + response = yield this.requestRaw(info2, data); + if (response && response.message && response.message.statusCode === HttpCodes2.Unauthorized) { + let authenticationHandler; + for (const handler2 of this.handlers) { + if (handler2.canHandleAuthentication(response)) { + authenticationHandler = handler2; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info2, data); + } else { + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (response.message.statusCode && HttpRedirectCodes2.includes(response.message.statusCode) && this._allowRedirects && redirectsRemaining > 0) { + const redirectUrl = response.message.headers["location"]; + if (!redirectUrl) { + break; + } + const parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol === "https:" && parsedUrl.protocol !== parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) { + throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true."); + } + yield response.readBody(); + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (const header in headers) { + if (header.toLowerCase() === "authorization") { + delete headers[header]; + } + } + } + info2 = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = yield this.requestRaw(info2, data); + redirectsRemaining--; + } + if (!response.message.statusCode || !HttpResponseRetryCodes2.includes(response.message.statusCode)) { + return response; + } + numTries += 1; + if (numTries < maxTries) { + yield response.readBody(); + yield this._performExponentialBackoff(numTries); + } + } while (numTries < maxTries); + return response; + }); + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; + } + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info2, data) { + return __awaiter10(this, void 0, void 0, function* () { + return new Promise((resolve2, reject) => { + function callbackForResult(err, res) { + if (err) { + reject(err); + } else if (!res) { + reject(new Error("Unknown error")); + } else { + resolve2(res); + } + } + this.requestRawWithCallback(info2, data, callbackForResult); + }); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info2, data, onResult) { + if (typeof data === "string") { + if (!info2.options.headers) { + info2.options.headers = {}; + } + info2.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8"); + } + let callbackCalled = false; + function handleResult(err, res) { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + } + const req = info2.httpModule.request(info2.options, (msg) => { + const res = new HttpClientResponse2(msg); + handleResult(void 0, res); + }); + let socket; + req.on("socket", (sock) => { + socket = sock; + }); + req.setTimeout(this._socketTimeout || 3 * 6e4, () => { + if (socket) { + socket.end(); + } + handleResult(new Error(`Request timeout: ${info2.options.path}`)); + }); + req.on("error", function(err) { + handleResult(err); + }); + if (data && typeof data === "string") { + req.write(data, "utf8"); + } + if (data && typeof data !== "string") { + data.on("close", function() { + req.end(); + }); + data.pipe(req); + } else { + req.end(); + } + } + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + const parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); + } + getAgentDispatcher(serverUrl) { + const parsedUrl = new URL(serverUrl); + const proxyUrl = pm.getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (!useProxy) { + return; + } + return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); + } + _prepareRequest(method, requestUrl, headers) { + const info2 = {}; + info2.parsedUrl = requestUrl; + const usingSsl = info2.parsedUrl.protocol === "https:"; + info2.httpModule = usingSsl ? https2 : http2; + const defaultPort = usingSsl ? 443 : 80; + info2.options = {}; + info2.options.host = info2.parsedUrl.hostname; + info2.options.port = info2.parsedUrl.port ? parseInt(info2.parsedUrl.port) : defaultPort; + info2.options.path = (info2.parsedUrl.pathname || "") + (info2.parsedUrl.search || ""); + info2.options.method = method; + info2.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info2.options.headers["user-agent"] = this.userAgent; + } + info2.options.agent = this._getAgent(info2.parsedUrl); + if (this.handlers) { + for (const handler2 of this.handlers) { + handler2.prepareRequest(info2.options); + } + } + return info2; + } + _mergeHeaders(headers) { + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys3(this.requestOptions.headers), lowercaseKeys3(headers || {})); + } + return lowercaseKeys3(headers || {}); + } + /** + * Gets an existing header value or returns a default. + * Handles converting number header values to strings since HTTP headers must be strings. + * Note: This returns string | string[] since some headers can have multiple values. + * For headers that must always be a single string (like Content-Type), use the + * specialized _getExistingOrDefaultContentTypeHeader method instead. + */ + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + const headerValue = lowercaseKeys3(this.requestOptions.headers)[header]; + if (headerValue) { + clientHeader = typeof headerValue === "number" ? headerValue.toString() : headerValue; + } + } + const additionalValue = additionalHeaders[header]; + if (additionalValue !== void 0) { + return typeof additionalValue === "number" ? additionalValue.toString() : additionalValue; + } + if (clientHeader !== void 0) { + return clientHeader; + } + return _default; + } + /** + * Specialized version of _getExistingOrDefaultHeader for Content-Type header. + * Always returns a single string (not an array) since Content-Type should be a single value. + * Converts arrays to comma-separated strings and numbers to strings to ensure type safety. + * This was split from _getExistingOrDefaultHeader to provide stricter typing for callers + * that assign the result to places expecting a string (e.g., additionalHeaders[Headers.ContentType]). + */ + _getExistingOrDefaultContentTypeHeader(additionalHeaders, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + const headerValue = lowercaseKeys3(this.requestOptions.headers)[Headers2.ContentType]; + if (headerValue) { + if (typeof headerValue === "number") { + clientHeader = String(headerValue); + } else if (Array.isArray(headerValue)) { + clientHeader = headerValue.join(", "); + } else { + clientHeader = headerValue; + } + } + } + const additionalValue = additionalHeaders[Headers2.ContentType]; + if (additionalValue !== void 0) { + if (typeof additionalValue === "number") { + return String(additionalValue); + } else if (Array.isArray(additionalValue)) { + return additionalValue.join(", "); + } else { + return additionalValue; + } + } + if (clientHeader !== void 0) { + return clientHeader; + } + return _default; + } + _getAgent(parsedUrl) { + let agent; + const proxyUrl = pm.getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (!useProxy) { + agent = this._agent; + } + if (agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === "https:"; + let maxSockets = 100; + if (this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http2.globalAgent.maxSockets; + } + if (proxyUrl && proxyUrl.hostname) { + const agentOptions = { + maxSockets, + keepAlive: this._keepAlive, + proxy: Object.assign(Object.assign({}, (proxyUrl.username || proxyUrl.password) && { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` + }), { host: proxyUrl.hostname, port: proxyUrl.port }) + }; + let tunnelAgent; + const overHttps = proxyUrl.protocol === "https:"; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel2.httpsOverHttps : tunnel2.httpsOverHttp; + } else { + tunnelAgent = overHttps ? tunnel2.httpOverHttps : tunnel2.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; + } + if (!agent) { + const options = { keepAlive: this._keepAlive, maxSockets }; + agent = usingSsl ? new https2.Agent(options) : new http2.Agent(options); + this._agent = agent; + } + if (usingSsl && this._ignoreSslError) { + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); + } + return agent; + } + _getProxyAgentDispatcher(parsedUrl, proxyUrl) { + let proxyAgent; + if (this._keepAlive) { + proxyAgent = this._proxyAgentDispatcher; + } + if (proxyAgent) { + return proxyAgent; + } + const usingSsl = parsedUrl.protocol === "https:"; + proxyAgent = new undici_1.ProxyAgent(Object.assign({ uri: proxyUrl.href, pipelining: !this._keepAlive ? 0 : 1 }, (proxyUrl.username || proxyUrl.password) && { + token: `Basic ${Buffer.from(`${proxyUrl.username}:${proxyUrl.password}`).toString("base64")}` + })); + this._proxyAgentDispatcher = proxyAgent; + if (usingSsl && this._ignoreSslError) { + proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, { + rejectUnauthorized: false + }); + } + return proxyAgent; + } + _getUserAgentWithOrchestrationId(userAgent3) { + const baseUserAgent = userAgent3 || "actions/http-client"; + const orchId = process.env["ACTIONS_ORCHESTRATION_ID"]; + if (orchId) { + const sanitizedId = orchId.replace(/[^a-z0-9_.-]/gi, "_"); + return `${baseUserAgent} actions_orchestration_id/${sanitizedId}`; + } + return baseUserAgent; + } + _performExponentialBackoff(retryNumber) { + return __awaiter10(this, void 0, void 0, function* () { + retryNumber = Math.min(ExponentialBackoffCeiling2, retryNumber); + const ms = ExponentialBackoffTimeSlice2 * Math.pow(2, retryNumber); + return new Promise((resolve2) => setTimeout(() => resolve2(), ms)); + }); + } + _processResponse(res, options) { + return __awaiter10(this, void 0, void 0, function* () { + return new Promise((resolve2, reject) => __awaiter10(this, void 0, void 0, function* () { + const statusCode = res.message.statusCode || 0; + const response = { + statusCode, + result: null, + headers: {} + }; + if (statusCode === HttpCodes2.NotFound) { + resolve2(response); + } + function dateTimeDeserializer(key, value) { + if (typeof value === "string") { + const a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + let obj; + let contents; + try { + contents = yield res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, dateTimeDeserializer); + } else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } catch (err) { + } + if (statusCode > 299) { + let msg; + if (obj && obj.message) { + msg = obj.message; + } else if (contents && contents.length > 0) { + msg = contents; + } else { + msg = `Failed request: (${statusCode})`; + } + const err = new HttpClientError2(msg, statusCode); + err.result = response.result; + reject(err); + } else { + resolve2(response); + } + })); + }); + } + }; + exports2.HttpClient = HttpClient3; + var lowercaseKeys3 = (obj) => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); + } +}); + +// node_modules/content-type/dist/index.js +var require_dist = __commonJS({ + "node_modules/content-type/dist/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.format = format; + exports2.parse = parse3; + var TEXT_REGEXP = /^[\u0009\u0020-\u007e\u0080-\u00ff]*$/; + var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; + var QUOTE_REGEXP = /[\\"]/g; + var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; + var NullObject = /* @__PURE__ */ (() => { + const C = function() { + }; + C.prototype = /* @__PURE__ */ Object.create(null); + return C; + })(); + function format(obj) { + const { type, parameters } = obj; + if (!type || !TYPE_REGEXP.test(type)) { + throw new TypeError(`Invalid type: ${type}`); + } + let result = type; + if (parameters) { + for (const param of Object.keys(parameters)) { + if (!TOKEN_REGEXP.test(param)) { + throw new TypeError(`Invalid parameter name: ${param}`); + } + result += `; ${param}=${qstring(parameters[param])}`; + } + } + return result; + } + function parse3(header, options) { + const len = header.length; + let index = skipOWS(header, 0, len); + const valueStart = index; + index = skipValue(header, index, len); + const valueEnd = trailingOWS(header, valueStart, index); + const type = header.slice(valueStart, valueEnd).toLowerCase(); + const parameters = options?.parameters === false ? new NullObject() : parseParameters(header, index, len); + return { type, parameters }; + } + var SP = 32; + var HTAB = 9; + var SEMI = 59; + var EQ = 61; + var DQUOTE = 34; + var BSLASH = 92; + function parseParameters(header, index, len) { + const parameters = new NullObject(); + parameter: while (index < len) { + index = skipOWS(header, index + 1, len); + const keyStart = index; + while (index < len) { + const code = header.charCodeAt(index); + if (code === SEMI) + continue parameter; + if (code === EQ) { + const keyEnd = trailingOWS(header, keyStart, index); + const key = header.slice(keyStart, keyEnd).toLowerCase(); + index = skipOWS(header, index + 1, len); + if (index < len && header.charCodeAt(index) === DQUOTE) { + index++; + let value = ""; + while (index < len) { + const code2 = header.charCodeAt(index++); + if (code2 === DQUOTE) { + index = skipValue(header, index, len); + if (parameters[key] === void 0) + parameters[key] = value; + break; + } + if (code2 === BSLASH && index < len) { + value += header[index++]; + continue; + } + value += String.fromCharCode(code2); + } + continue parameter; + } + const valueStart = index; + index = skipValue(header, index, len); + if (parameters[key] === void 0) { + const valueEnd = trailingOWS(header, valueStart, index); + parameters[key] = header.slice(valueStart, valueEnd); + } + continue parameter; + } + index++; + } + } + return parameters; + } + function skipValue(str, index, len) { + while (index < len) { + const char = str.charCodeAt(index); + if (char === SEMI) + break; + index++; + } + return index; + } + function skipOWS(header, index, len) { + while (index < len) { + const char = header.charCodeAt(index); + if (char !== SP && char !== HTAB) + break; + index++; + } + return index; + } + function trailingOWS(header, start, end) { + while (end > start) { + const char = header.charCodeAt(end - 1); + if (char !== SP && char !== HTAB) + break; + end--; + } + return end; + } + function qstring(str) { + if (TOKEN_REGEXP.test(str)) + return str; + if (TEXT_REGEXP.test(str)) + return `"${str.replace(QUOTE_REGEXP, "\\$&")}"`; + throw new TypeError(`Invalid parameter value: ${str}`); + } + } +}); + +// node_modules/semver/internal/constants.js +var require_constants6 = __commonJS({ + "node_modules/semver/internal/constants.js"(exports2, module2) { + "use strict"; + var SEMVER_SPEC_VERSION = "2.0.0"; + var MAX_LENGTH = 256; + var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */ + 9007199254740991; + var MAX_SAFE_COMPONENT_LENGTH = 16; + var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6; + var RELEASE_TYPES = [ + "major", + "premajor", + "minor", + "preminor", + "patch", + "prepatch", + "prerelease" + ]; + module2.exports = { + MAX_LENGTH, + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_SAFE_INTEGER, + RELEASE_TYPES, + SEMVER_SPEC_VERSION, + FLAG_INCLUDE_PRERELEASE: 1, + FLAG_LOOSE: 2 + }; + } +}); + +// node_modules/semver/internal/debug.js +var require_debug = __commonJS({ + "node_modules/semver/internal/debug.js"(exports2, module2) { + "use strict"; + var debug2 = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => { + }; + module2.exports = debug2; + } +}); + +// node_modules/semver/internal/re.js +var require_re = __commonJS({ + "node_modules/semver/internal/re.js"(exports2, module2) { + "use strict"; + var { + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_LENGTH + } = require_constants6(); + var debug2 = require_debug(); + exports2 = module2.exports = {}; + var re = exports2.re = []; + var safeRe = exports2.safeRe = []; + var src = exports2.src = []; + var safeSrc = exports2.safeSrc = []; + var t = exports2.t = {}; + var R = 0; + var LETTERDASHNUMBER = "[a-zA-Z0-9-]"; + var safeRegexReplacements = [ + ["\\s", 1], + ["\\d", MAX_LENGTH], + [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH] + ]; + var makeSafeRegex = (value) => { + for (const [token, max] of safeRegexReplacements) { + value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`); + } + return value; + }; + var createToken = (name, value, isGlobal) => { + const safe = makeSafeRegex(value); + const index = R++; + debug2(name, index, value); + t[name] = index; + src[index] = value; + safeSrc[index] = safe; + re[index] = new RegExp(value, isGlobal ? "g" : void 0); + safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0); + }; + createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*"); + createToken("NUMERICIDENTIFIERLOOSE", "\\d+"); + createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`); + createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`); + createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`); + createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`); + createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`); + createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`); + createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`); + createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`); + createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`); + createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`); + createToken("FULL", `^${src[t.FULLPLAIN]}$`); + createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`); + createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`); + createToken("GTLT", "((?:<|>)?=?)"); + createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); + createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); + createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`); + createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`); + createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`); + createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`); + createToken("COERCEPLAIN", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`); + createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`); + createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`); + createToken("COERCERTL", src[t.COERCE], true); + createToken("COERCERTLFULL", src[t.COERCEFULL], true); + createToken("LONETILDE", "(?:~>?)"); + createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true); + exports2.tildeTrimReplace = "$1~"; + createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); + createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); + createToken("LONECARET", "(?:\\^)"); + createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true); + exports2.caretTrimReplace = "$1^"; + createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); + createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); + createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`); + createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`); + createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); + exports2.comparatorTrimReplace = "$1$2$3"; + createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`); + createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`); + createToken("STAR", "(<|>)?=?\\s*\\*"); + createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$"); + createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$"); + } +}); + +// node_modules/semver/internal/parse-options.js +var require_parse_options = __commonJS({ + "node_modules/semver/internal/parse-options.js"(exports2, module2) { + "use strict"; + var looseOption = Object.freeze({ loose: true }); + var emptyOpts = Object.freeze({}); + var parseOptions = (options) => { + if (!options) { + return emptyOpts; + } + if (typeof options !== "object") { + return looseOption; + } + return options; + }; + module2.exports = parseOptions; + } +}); + +// node_modules/semver/internal/identifiers.js +var require_identifiers = __commonJS({ + "node_modules/semver/internal/identifiers.js"(exports2, module2) { + "use strict"; + var numeric = /^[0-9]+$/; + var compareIdentifiers = (a, b) => { + if (typeof a === "number" && typeof b === "number") { + return a === b ? 0 : a < b ? -1 : 1; + } + const anum = numeric.test(a); + const bnum = numeric.test(b); + if (anum && bnum) { + a = +a; + b = +b; + } + return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1; + }; + var rcompareIdentifiers = (a, b) => compareIdentifiers(b, a); + module2.exports = { + compareIdentifiers, + rcompareIdentifiers + }; + } +}); + +// node_modules/semver/classes/semver.js +var require_semver = __commonJS({ + "node_modules/semver/classes/semver.js"(exports2, module2) { + "use strict"; + var debug2 = require_debug(); + var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants6(); + var { safeRe: re, t } = require_re(); + var parseOptions = require_parse_options(); + var { compareIdentifiers } = require_identifiers(); + var isPrereleaseIdentifier = (prerelease, identifier) => { + const identifiers = identifier.split("."); + if (identifiers.length > prerelease.length) { + return false; + } + for (let i = 0; i < identifiers.length; i++) { + if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) { + return false; + } + } + return true; + }; + var SemVer = class _SemVer { + constructor(version, options) { + options = parseOptions(options); + if (version instanceof _SemVer) { + if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) { + return version; + } else { + version = version.version; + } + } else if (typeof version !== "string") { + throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`); + } + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ); + } + debug2("SemVer", version, options); + this.options = options; + this.loose = !!options.loose; + this.includePrerelease = !!options.includePrerelease; + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]); + if (!m) { + throw new TypeError(`Invalid Version: ${version}`); + } + this.raw = version; + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError("Invalid major version"); + } + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError("Invalid minor version"); + } + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError("Invalid patch version"); + } + if (!m[4]) { + this.prerelease = []; + } else { + this.prerelease = m[4].split(".").map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id; + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num; + } + } + return id; + }); + } + this.build = m[5] ? m[5].split(".") : []; + this.format(); + } + format() { + this.version = `${this.major}.${this.minor}.${this.patch}`; + if (this.prerelease.length) { + this.version += `-${this.prerelease.join(".")}`; + } + return this.version; + } + toString() { + return this.version; + } + compare(other) { + debug2("SemVer.compare", this.version, this.options, other); + if (!(other instanceof _SemVer)) { + if (typeof other === "string" && other === this.version) { + return 0; + } + other = new _SemVer(other, this.options); + } + if (other.version === this.version) { + return 0; + } + return this.compareMain(other) || this.comparePre(other); + } + compareMain(other) { + if (!(other instanceof _SemVer)) { + other = new _SemVer(other, this.options); + } + if (this.major < other.major) { + return -1; + } + if (this.major > other.major) { + return 1; + } + if (this.minor < other.minor) { + return -1; + } + if (this.minor > other.minor) { + return 1; + } + if (this.patch < other.patch) { + return -1; + } + if (this.patch > other.patch) { + return 1; + } + return 0; + } + comparePre(other) { + if (!(other instanceof _SemVer)) { + other = new _SemVer(other, this.options); + } + if (this.prerelease.length && !other.prerelease.length) { + return -1; + } else if (!this.prerelease.length && other.prerelease.length) { + return 1; + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0; + } + let i = 0; + do { + const a = this.prerelease[i]; + const b = other.prerelease[i]; + debug2("prerelease compare", i, a, b); + if (a === void 0 && b === void 0) { + return 0; + } else if (b === void 0) { + return 1; + } else if (a === void 0) { + return -1; + } else if (a === b) { + continue; + } else { + return compareIdentifiers(a, b); + } + } while (++i); + } + compareBuild(other) { + if (!(other instanceof _SemVer)) { + other = new _SemVer(other, this.options); + } + let i = 0; + do { + const a = this.build[i]; + const b = other.build[i]; + debug2("build compare", i, a, b); + if (a === void 0 && b === void 0) { + return 0; + } else if (b === void 0) { + return 1; + } else if (a === void 0) { + return -1; + } else if (a === b) { + continue; + } else { + return compareIdentifiers(a, b); + } + } while (++i); + } + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc(release, identifier, identifierBase) { + if (release.startsWith("pre")) { + if (!identifier && identifierBase === false) { + throw new Error("invalid increment argument: identifier is empty"); + } + if (identifier) { + const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]); + if (!match || match[1] !== identifier) { + throw new Error(`invalid identifier: ${identifier}`); + } + } + } + switch (release) { + case "premajor": + this.prerelease.length = 0; + this.patch = 0; + this.minor = 0; + this.major++; + this.inc("pre", identifier, identifierBase); + break; + case "preminor": + this.prerelease.length = 0; + this.patch = 0; + this.minor++; + this.inc("pre", identifier, identifierBase); + break; + case "prepatch": + this.prerelease.length = 0; + this.inc("patch", identifier, identifierBase); + this.inc("pre", identifier, identifierBase); + break; + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case "prerelease": + if (this.prerelease.length === 0) { + this.inc("patch", identifier, identifierBase); + } + this.inc("pre", identifier, identifierBase); + break; + case "release": + if (this.prerelease.length === 0) { + throw new Error(`version ${this.raw} is not a prerelease`); + } + this.prerelease.length = 0; + break; + case "major": + if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) { + this.major++; + } + this.minor = 0; + this.patch = 0; + this.prerelease = []; + break; + case "minor": + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++; + } + this.patch = 0; + this.prerelease = []; + break; + case "patch": + if (this.prerelease.length === 0) { + this.patch++; + } + this.prerelease = []; + break; + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case "pre": { + const base = Number(identifierBase) ? 1 : 0; + if (this.prerelease.length === 0) { + this.prerelease = [base]; + } else { + let i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === "number") { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) { + if (identifier === this.prerelease.join(".") && identifierBase === false) { + throw new Error("invalid increment argument: identifier already exists"); + } + this.prerelease.push(base); + } + } + if (identifier) { + let prerelease = [identifier, base]; + if (identifierBase === false) { + prerelease = [identifier]; + } + if (isPrereleaseIdentifier(this.prerelease, identifier)) { + const prereleaseBase = this.prerelease[identifier.split(".").length]; + if (isNaN(prereleaseBase)) { + this.prerelease = prerelease; + } + } else { + this.prerelease = prerelease; + } + } + break; + } + default: + throw new Error(`invalid increment argument: ${release}`); + } + this.raw = this.format(); + if (this.build.length) { + this.raw += `+${this.build.join(".")}`; + } + return this; + } + }; + module2.exports = SemVer; + } +}); + +// node_modules/semver/functions/parse.js +var require_parse2 = __commonJS({ + "node_modules/semver/functions/parse.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var parse3 = (version, options, throwErrors = false) => { + if (version instanceof SemVer) { + return version; + } + try { + return new SemVer(version, options); + } catch (er) { + if (!throwErrors) { + return null; + } + throw er; + } + }; + module2.exports = parse3; + } +}); + +// node_modules/semver/functions/valid.js +var require_valid = __commonJS({ + "node_modules/semver/functions/valid.js"(exports2, module2) { + "use strict"; + var parse3 = require_parse2(); + var valid2 = (version, options) => { + const v = parse3(version, options); + return v ? v.version : null; + }; + module2.exports = valid2; + } +}); + +// node_modules/semver/functions/clean.js +var require_clean = __commonJS({ + "node_modules/semver/functions/clean.js"(exports2, module2) { + "use strict"; + var parse3 = require_parse2(); + var clean2 = (version, options) => { + const s = parse3(version.trim().replace(/^[=v]+/, ""), options); + return s ? s.version : null; + }; + module2.exports = clean2; + } +}); + +// node_modules/semver/functions/inc.js +var require_inc = __commonJS({ + "node_modules/semver/functions/inc.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var inc = (version, release, options, identifier, identifierBase) => { + if (typeof options === "string") { + identifierBase = identifier; + identifier = options; + options = void 0; + } + try { + return new SemVer( + version instanceof SemVer ? version.version : version, + options + ).inc(release, identifier, identifierBase).version; + } catch (er) { + return null; + } + }; + module2.exports = inc; + } +}); + +// node_modules/semver/functions/diff.js +var require_diff = __commonJS({ + "node_modules/semver/functions/diff.js"(exports2, module2) { + "use strict"; + var parse3 = require_parse2(); + var diff = (version1, version2) => { + const v1 = parse3(version1, null, true); + const v2 = parse3(version2, null, true); + const comparison = v1.compare(v2); + if (comparison === 0) { + return null; + } + const v1Higher = comparison > 0; + const highVersion = v1Higher ? v1 : v2; + const lowVersion = v1Higher ? v2 : v1; + const highHasPre = !!highVersion.prerelease.length; + const lowHasPre = !!lowVersion.prerelease.length; + if (lowHasPre && !highHasPre) { + if (!lowVersion.patch && !lowVersion.minor) { + return "major"; + } + if (lowVersion.compareMain(highVersion) === 0) { + if (lowVersion.minor && !lowVersion.patch) { + return "minor"; + } + return "patch"; + } + } + const prefix = highHasPre ? "pre" : ""; + if (v1.major !== v2.major) { + return prefix + "major"; + } + if (v1.minor !== v2.minor) { + return prefix + "minor"; + } + if (v1.patch !== v2.patch) { + return prefix + "patch"; + } + return "prerelease"; + }; + module2.exports = diff; + } +}); + +// node_modules/semver/functions/major.js +var require_major = __commonJS({ + "node_modules/semver/functions/major.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var major = (a, loose) => new SemVer(a, loose).major; + module2.exports = major; + } +}); + +// node_modules/semver/functions/minor.js +var require_minor = __commonJS({ + "node_modules/semver/functions/minor.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var minor = (a, loose) => new SemVer(a, loose).minor; + module2.exports = minor; + } +}); + +// node_modules/semver/functions/patch.js +var require_patch = __commonJS({ + "node_modules/semver/functions/patch.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var patch = (a, loose) => new SemVer(a, loose).patch; + module2.exports = patch; + } +}); + +// node_modules/semver/functions/prerelease.js +var require_prerelease = __commonJS({ + "node_modules/semver/functions/prerelease.js"(exports2, module2) { + "use strict"; + var parse3 = require_parse2(); + var prerelease = (version, options) => { + const parsed = parse3(version, options); + return parsed && parsed.prerelease.length ? parsed.prerelease : null; + }; + module2.exports = prerelease; + } +}); + +// node_modules/semver/functions/compare.js +var require_compare = __commonJS({ + "node_modules/semver/functions/compare.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose)); + module2.exports = compare; + } +}); + +// node_modules/semver/functions/rcompare.js +var require_rcompare = __commonJS({ + "node_modules/semver/functions/rcompare.js"(exports2, module2) { + "use strict"; + var compare = require_compare(); + var rcompare = (a, b, loose) => compare(b, a, loose); + module2.exports = rcompare; + } +}); + +// node_modules/semver/functions/compare-loose.js +var require_compare_loose = __commonJS({ + "node_modules/semver/functions/compare-loose.js"(exports2, module2) { + "use strict"; + var compare = require_compare(); + var compareLoose = (a, b) => compare(a, b, true); + module2.exports = compareLoose; + } +}); + +// node_modules/semver/functions/compare-build.js +var require_compare_build = __commonJS({ + "node_modules/semver/functions/compare-build.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var compareBuild = (a, b, loose) => { + const versionA = new SemVer(a, loose); + const versionB = new SemVer(b, loose); + return versionA.compare(versionB) || versionA.compareBuild(versionB); + }; + module2.exports = compareBuild; + } +}); + +// node_modules/semver/functions/sort.js +var require_sort = __commonJS({ + "node_modules/semver/functions/sort.js"(exports2, module2) { + "use strict"; + var compareBuild = require_compare_build(); + var sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)); + module2.exports = sort; + } +}); + +// node_modules/semver/functions/rsort.js +var require_rsort = __commonJS({ + "node_modules/semver/functions/rsort.js"(exports2, module2) { + "use strict"; + var compareBuild = require_compare_build(); + var rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)); + module2.exports = rsort; + } +}); + +// node_modules/semver/functions/gt.js +var require_gt = __commonJS({ + "node_modules/semver/functions/gt.js"(exports2, module2) { + "use strict"; + var compare = require_compare(); + var gt2 = (a, b, loose) => compare(a, b, loose) > 0; + module2.exports = gt2; + } +}); + +// node_modules/semver/functions/lt.js +var require_lt = __commonJS({ + "node_modules/semver/functions/lt.js"(exports2, module2) { + "use strict"; + var compare = require_compare(); + var lt = (a, b, loose) => compare(a, b, loose) < 0; + module2.exports = lt; + } +}); + +// node_modules/semver/functions/eq.js +var require_eq = __commonJS({ + "node_modules/semver/functions/eq.js"(exports2, module2) { + "use strict"; + var compare = require_compare(); + var eq = (a, b, loose) => compare(a, b, loose) === 0; + module2.exports = eq; + } +}); + +// node_modules/semver/functions/neq.js +var require_neq = __commonJS({ + "node_modules/semver/functions/neq.js"(exports2, module2) { + "use strict"; + var compare = require_compare(); + var neq = (a, b, loose) => compare(a, b, loose) !== 0; + module2.exports = neq; + } +}); + +// node_modules/semver/functions/gte.js +var require_gte = __commonJS({ + "node_modules/semver/functions/gte.js"(exports2, module2) { + "use strict"; + var compare = require_compare(); + var gte = (a, b, loose) => compare(a, b, loose) >= 0; + module2.exports = gte; + } +}); + +// node_modules/semver/functions/lte.js +var require_lte = __commonJS({ + "node_modules/semver/functions/lte.js"(exports2, module2) { + "use strict"; + var compare = require_compare(); + var lte = (a, b, loose) => compare(a, b, loose) <= 0; + module2.exports = lte; + } +}); + +// node_modules/semver/functions/cmp.js +var require_cmp = __commonJS({ + "node_modules/semver/functions/cmp.js"(exports2, module2) { + "use strict"; + var eq = require_eq(); + var neq = require_neq(); + var gt2 = require_gt(); + var gte = require_gte(); + var lt = require_lt(); + var lte = require_lte(); + var cmp = (a, op, b, loose) => { + switch (op) { + case "===": + if (typeof a === "object") { + a = a.version; + } + if (typeof b === "object") { + b = b.version; + } + return a === b; + case "!==": + if (typeof a === "object") { + a = a.version; + } + if (typeof b === "object") { + b = b.version; + } + return a !== b; + case "": + case "=": + case "==": + return eq(a, b, loose); + case "!=": + return neq(a, b, loose); + case ">": + return gt2(a, b, loose); + case ">=": + return gte(a, b, loose); + case "<": + return lt(a, b, loose); + case "<=": + return lte(a, b, loose); + default: + throw new TypeError(`Invalid operator: ${op}`); + } + }; + module2.exports = cmp; + } +}); + +// node_modules/semver/functions/coerce.js +var require_coerce = __commonJS({ + "node_modules/semver/functions/coerce.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var parse3 = require_parse2(); + var { safeRe: re, t } = require_re(); + var coerce = (version, options) => { + if (version instanceof SemVer) { + return version; + } + if (typeof version === "number") { + version = String(version); + } + if (typeof version !== "string") { + return null; + } + options = options || {}; + let match = null; + if (!options.rtl) { + match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]); + } else { + const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]; + let next; + while ((next = coerceRtlRegex.exec(version)) && (!match || match.index + match[0].length !== version.length)) { + if (!match || next.index + next[0].length !== match.index + match[0].length) { + match = next; + } + coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length; + } + coerceRtlRegex.lastIndex = -1; + } + if (match === null) { + return null; + } + const major = match[2]; + const minor = match[3] || "0"; + const patch = match[4] || "0"; + const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ""; + const build = options.includePrerelease && match[6] ? `+${match[6]}` : ""; + return parse3(`${major}.${minor}.${patch}${prerelease}${build}`, options); + }; + module2.exports = coerce; + } +}); + +// node_modules/semver/functions/truncate.js +var require_truncate = __commonJS({ + "node_modules/semver/functions/truncate.js"(exports2, module2) { + "use strict"; + var parse3 = require_parse2(); + var constants3 = require_constants6(); + var SemVer = require_semver(); + var truncate = (version, truncation, options) => { + if (!constants3.RELEASE_TYPES.includes(truncation)) { + return null; + } + const clonedVersion = cloneInputVersion(version, options); + return clonedVersion && doTruncation(clonedVersion, truncation); + }; + var cloneInputVersion = (version, options) => { + const versionStringToParse = version instanceof SemVer ? version.version : version; + return parse3(versionStringToParse, options); + }; + var doTruncation = (version, truncation) => { + if (isPrerelease(truncation)) { + return version.version; + } + version.prerelease = []; + switch (truncation) { + case "major": + version.minor = 0; + version.patch = 0; + break; + case "minor": + version.patch = 0; + break; + } + return version.format(); + }; + var isPrerelease = (type) => { + return type.startsWith("pre"); + }; + module2.exports = truncate; + } +}); + +// node_modules/semver/internal/lrucache.js +var require_lrucache = __commonJS({ + "node_modules/semver/internal/lrucache.js"(exports2, module2) { + "use strict"; + var LRUCache = class { + constructor() { + this.max = 1e3; + this.map = /* @__PURE__ */ new Map(); + } + get(key) { + const value = this.map.get(key); + if (value === void 0) { + return void 0; + } else { + this.map.delete(key); + this.map.set(key, value); + return value; + } + } + delete(key) { + return this.map.delete(key); + } + set(key, value) { + const deleted = this.delete(key); + if (!deleted && value !== void 0) { + if (this.map.size >= this.max) { + const firstKey = this.map.keys().next().value; + this.delete(firstKey); + } + this.map.set(key, value); + } + return this; + } + }; + module2.exports = LRUCache; + } +}); + +// node_modules/semver/classes/range.js +var require_range = __commonJS({ + "node_modules/semver/classes/range.js"(exports2, module2) { + "use strict"; + var SPACE_CHARACTERS = /\s+/g; + var Range = class _Range { + constructor(range, options) { + options = parseOptions(options); + if (range instanceof _Range) { + if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) { + return range; + } else { + return new _Range(range.raw, options); + } + } + if (range instanceof Comparator) { + this.raw = range.value; + this.set = [[range]]; + this.formatted = void 0; + return this; + } + this.options = options; + this.loose = !!options.loose; + this.includePrerelease = !!options.includePrerelease; + this.raw = range.trim().replace(SPACE_CHARACTERS, " "); + this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length); + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${this.raw}`); + } + if (this.set.length > 1) { + const first = this.set[0]; + this.set = this.set.filter((c) => !isNullSet(c[0])); + if (this.set.length === 0) { + this.set = [first]; + } else if (this.set.length > 1) { + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c]; + break; + } + } + } + } + this.formatted = void 0; + } + get range() { + if (this.formatted === void 0) { + this.formatted = ""; + for (let i = 0; i < this.set.length; i++) { + if (i > 0) { + this.formatted += "||"; + } + const comps = this.set[i]; + for (let k = 0; k < comps.length; k++) { + if (k > 0) { + this.formatted += " "; + } + this.formatted += comps[k].toString().trim(); + } + } + } + return this.formatted; + } + format() { + return this.range; + } + toString() { + return this.range; + } + parseRange(range) { + range = range.replace(BUILDSTRIPRE, ""); + const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE); + const memoKey = memoOpts + ":" + range; + const cached = cache.get(memoKey); + if (cached) { + return cached; + } + const loose = this.options.loose; + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]; + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)); + debug2("hyphen replace", range); + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace); + debug2("comparator trim", range); + range = range.replace(re[t.TILDETRIM], tildeTrimReplace); + debug2("tilde trim", range); + range = range.replace(re[t.CARETTRIM], caretTrimReplace); + debug2("caret trim", range); + let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options)); + if (loose) { + rangeList = rangeList.filter((comp) => { + debug2("loose invalid filter", comp, this.options); + return !!comp.match(re[t.COMPARATORLOOSE]); + }); + } + debug2("range list", rangeList); + const rangeMap = /* @__PURE__ */ new Map(); + const comparators = rangeList.map((comp) => new Comparator(comp, this.options)); + for (const comp of comparators) { + if (isNullSet(comp)) { + return [comp]; + } + rangeMap.set(comp.value, comp); + } + if (rangeMap.size > 1 && rangeMap.has("")) { + rangeMap.delete(""); + } + const result = [...rangeMap.values()]; + cache.set(memoKey, result); + return result; + } + intersects(range, options) { + if (!(range instanceof _Range)) { + throw new TypeError("a Range is required"); + } + return this.set.some((thisComparators) => { + return isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => { + return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options); + }); + }); + }); + }); + } + // if ANY of the sets match ALL of its comparators, then pass + test(version) { + if (!version) { + return false; + } + if (typeof version === "string") { + try { + version = new SemVer(version, this.options); + } catch (er) { + return false; + } + } + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true; + } + } + return false; + } + }; + module2.exports = Range; + var LRU = require_lrucache(); + var cache = new LRU(); + var parseOptions = require_parse_options(); + var Comparator = require_comparator(); + var debug2 = require_debug(); + var SemVer = require_semver(); + var { + safeRe: re, + src, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace + } = require_re(); + var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants6(); + var BUILDSTRIPRE = new RegExp(src[t.BUILD], "g"); + var isNullSet = (c) => c.value === "<0.0.0-0"; + var isAny = (c) => c.value === ""; + var isSatisfiable = (comparators, options) => { + let result = true; + const remainingComparators = comparators.slice(); + let testComparator = remainingComparators.pop(); + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options); + }); + testComparator = remainingComparators.pop(); + } + return result; + }; + var parseComparator = (comp, options) => { + comp = comp.replace(re[t.BUILD], ""); + debug2("comp", comp, options); + comp = replaceCarets(comp, options); + debug2("caret", comp); + comp = replaceTildes(comp, options); + debug2("tildes", comp); + comp = replaceXRanges(comp, options); + debug2("xrange", comp); + comp = replaceStars(comp, options); + debug2("stars", comp); + return comp; + }; + var isX = (id) => !id || id.toLowerCase() === "x" || id === "*"; + var invalidXRangeOrder = (M, m, p) => isX(M) && !isX(m) || isX(m) && p && !isX(p); + var replaceTildes = (comp, options) => { + return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" "); + }; + var replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]; + const z = options.includePrerelease ? "-0" : ""; + return comp.replace(r, (_, M, m, p, pr) => { + debug2("tilde", comp, _, M, m, p, pr); + let ret; + if (isX(M)) { + ret = ""; + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`; + } else if (isX(p)) { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`; + } else if (pr) { + debug2("replaceTilde pr", pr); + ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; + } else { + ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; + } + debug2("tilde return", ret); + return ret; + }); + }; + var replaceCarets = (comp, options) => { + return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" "); + }; + var replaceCaret = (comp, options) => { + debug2("caret", comp, options); + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]; + const z = options.includePrerelease ? "-0" : ""; + return comp.replace(r, (_, M, m, p, pr) => { + debug2("caret", comp, _, M, m, p, pr); + let ret; + if (isX(M)) { + ret = ""; + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`; + } else if (isX(p)) { + if (M === "0") { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`; + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`; + } + } else if (pr) { + debug2("replaceCaret pr", pr); + if (M === "0") { + if (m === "0") { + ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`; + } else { + ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; + } + } else { + ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`; + } + } else { + debug2("no pr"); + if (M === "0") { + if (m === "0") { + ret = `>=${M}.${m}.${p} <${M}.${m}.${+p + 1}-0`; + } else { + ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; + } + } else { + ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`; + } + } + debug2("caret return", ret); + return ret; + }); + }; + var replaceXRanges = (comp, options) => { + debug2("replaceXRanges", comp, options); + return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" "); + }; + var replaceXRange = (comp, options) => { + comp = comp.trim(); + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]; + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug2("xRange", comp, ret, gtlt, M, m, p, pr); + if (invalidXRangeOrder(M, m, p)) { + return comp; + } + const xM = isX(M); + const xm = xM || isX(m); + const xp = xm || isX(p); + const anyX = xp; + if (gtlt === "=" && anyX) { + gtlt = ""; + } + pr = options.includePrerelease ? "-0" : ""; + if (xM) { + if (gtlt === ">" || gtlt === "<") { + ret = "<0.0.0-0"; + } else { + ret = "*"; + } + } else if (gtlt && anyX) { + if (xm) { + m = 0; + } + p = 0; + if (gtlt === ">") { + gtlt = ">="; + if (xm) { + M = +M + 1; + m = 0; + p = 0; + } else { + m = +m + 1; + p = 0; + } + } else if (gtlt === "<=") { + gtlt = "<"; + if (xm) { + M = +M + 1; + } else { + m = +m + 1; + } + } + if (gtlt === "<") { + pr = "-0"; + } + ret = `${gtlt + M}.${m}.${p}${pr}`; + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`; + } else if (xp) { + ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`; + } + debug2("xRange return", ret); + return ret; + }); + }; + var replaceStars = (comp, options) => { + debug2("replaceStars", comp, options); + return comp.trim().replace(re[t.STAR], ""); + }; + var replaceGTE0 = (comp, options) => { + debug2("replaceGTE0", comp, options); + return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], ""); + }; + var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => { + if (isX(fM)) { + from = ""; + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? "-0" : ""}`; + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`; + } else if (fpr) { + from = `>=${from}`; + } else { + from = `>=${from}${incPr ? "-0" : ""}`; + } + if (isX(tM)) { + to = ""; + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0`; + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0`; + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}`; + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0`; + } else { + to = `<=${to}`; + } + return `${from} ${to}`.trim(); + }; + var testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false; + } + } + if (version.prerelease.length && !options.includePrerelease) { + for (let i = 0; i < set.length; i++) { + debug2(set[i].semver); + if (set[i].semver === Comparator.ANY) { + continue; + } + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver; + if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) { + return true; + } + } + } + return false; + } + return true; + }; + } +}); + +// node_modules/semver/classes/comparator.js +var require_comparator = __commonJS({ + "node_modules/semver/classes/comparator.js"(exports2, module2) { + "use strict"; + var ANY = /* @__PURE__ */ Symbol("SemVer ANY"); + var Comparator = class _Comparator { + static get ANY() { + return ANY; + } + constructor(comp, options) { + options = parseOptions(options); + if (comp instanceof _Comparator) { + if (comp.loose === !!options.loose) { + return comp; + } else { + comp = comp.value; + } + } + comp = comp.trim().split(/\s+/).join(" "); + debug2("comparator", comp, options); + this.options = options; + this.loose = !!options.loose; + this.parse(comp); + if (this.semver === ANY) { + this.value = ""; + } else { + this.value = this.operator + this.semver.version; + } + debug2("comp", this); + } + parse(comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]; + const m = comp.match(r); + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`); + } + this.operator = m[1] !== void 0 ? m[1] : ""; + if (this.operator === "=") { + this.operator = ""; + } + if (!m[2]) { + this.semver = ANY; + } else { + this.semver = new SemVer(m[2], this.options.loose); + } + } + toString() { + return this.value; + } + test(version) { + debug2("Comparator.test", version, this.options.loose); + if (this.semver === ANY || version === ANY) { + return true; + } + if (typeof version === "string") { + try { + version = new SemVer(version, this.options); + } catch (er) { + return false; + } + } + return cmp(version, this.operator, this.semver, this.options); + } + intersects(comp, options) { + if (!(comp instanceof _Comparator)) { + throw new TypeError("a Comparator is required"); + } + if (this.operator === "") { + if (this.value === "") { + return true; + } + return new Range(comp.value, options).test(this.value); + } else if (comp.operator === "") { + if (comp.value === "") { + return true; + } + return new Range(this.value, options).test(comp.semver); + } + options = parseOptions(options); + if (options.includePrerelease && (this.value === "<0.0.0-0" || comp.value === "<0.0.0-0")) { + return false; + } + if (!options.includePrerelease && (this.value.startsWith("<0.0.0") || comp.value.startsWith("<0.0.0"))) { + return false; + } + if (this.operator.startsWith(">") && comp.operator.startsWith(">")) { + return true; + } + if (this.operator.startsWith("<") && comp.operator.startsWith("<")) { + return true; + } + if (this.semver.version === comp.semver.version && this.operator.includes("=") && comp.operator.includes("=")) { + return true; + } + if (cmp(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) { + return true; + } + if (cmp(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) { + return true; + } + return false; + } + }; + module2.exports = Comparator; + var parseOptions = require_parse_options(); + var { safeRe: re, t } = require_re(); + var cmp = require_cmp(); + var debug2 = require_debug(); + var SemVer = require_semver(); + var Range = require_range(); + } +}); + +// node_modules/semver/functions/satisfies.js +var require_satisfies = __commonJS({ + "node_modules/semver/functions/satisfies.js"(exports2, module2) { + "use strict"; + var Range = require_range(); + var satisfies3 = (version, range, options) => { + try { + range = new Range(range, options); + } catch (er) { + return false; + } + return range.test(version); + }; + module2.exports = satisfies3; + } +}); + +// node_modules/semver/ranges/to-comparators.js +var require_to_comparators = __commonJS({ + "node_modules/semver/ranges/to-comparators.js"(exports2, module2) { + "use strict"; + var Range = require_range(); + var toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" ")); + module2.exports = toComparators; + } +}); + +// node_modules/semver/ranges/max-satisfying.js +var require_max_satisfying = __commonJS({ + "node_modules/semver/ranges/max-satisfying.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var Range = require_range(); + var maxSatisfying = (versions, range, options) => { + let max = null; + let maxSV = null; + let rangeObj = null; + try { + rangeObj = new Range(range, options); + } catch (er) { + return null; + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + if (!max || maxSV.compare(v) === -1) { + max = v; + maxSV = new SemVer(max, options); + } + } + }); + return max; + }; + module2.exports = maxSatisfying; + } +}); + +// node_modules/semver/ranges/min-satisfying.js +var require_min_satisfying = __commonJS({ + "node_modules/semver/ranges/min-satisfying.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var Range = require_range(); + var minSatisfying = (versions, range, options) => { + let min = null; + let minSV = null; + let rangeObj = null; + try { + rangeObj = new Range(range, options); + } catch (er) { + return null; + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + if (!min || minSV.compare(v) === 1) { + min = v; + minSV = new SemVer(min, options); + } + } + }); + return min; + }; + module2.exports = minSatisfying; + } +}); + +// node_modules/semver/ranges/min-version.js +var require_min_version = __commonJS({ + "node_modules/semver/ranges/min-version.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var Range = require_range(); + var gt2 = require_gt(); + var minVersion = (range, loose) => { + range = new Range(range, loose); + let minver = new SemVer("0.0.0"); + if (range.test(minver)) { + return minver; + } + minver = new SemVer("0.0.0-0"); + if (range.test(minver)) { + return minver; + } + minver = null; + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i]; + let setMin = null; + comparators.forEach((comparator) => { + const compver = new SemVer(comparator.semver.version); + switch (comparator.operator) { + case ">": + if (compver.prerelease.length === 0) { + compver.patch++; + } else { + compver.prerelease.push(0); + } + compver.raw = compver.format(); + /* fallthrough */ + case "": + case ">=": + if (!setMin || gt2(compver, setMin)) { + setMin = compver; + } + break; + case "<": + case "<=": + break; + /* istanbul ignore next */ + default: + throw new Error(`Unexpected operation: ${comparator.operator}`); + } + }); + if (setMin && (!minver || gt2(minver, setMin))) { + minver = setMin; + } + } + if (minver && range.test(minver)) { + return minver; + } + return null; + }; + module2.exports = minVersion; + } +}); + +// node_modules/semver/ranges/valid.js +var require_valid2 = __commonJS({ + "node_modules/semver/ranges/valid.js"(exports2, module2) { + "use strict"; + var Range = require_range(); + var validRange = (range, options) => { + try { + return new Range(range, options).range || "*"; + } catch (er) { + return null; + } + }; + module2.exports = validRange; + } +}); + +// node_modules/semver/ranges/outside.js +var require_outside = __commonJS({ + "node_modules/semver/ranges/outside.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var Comparator = require_comparator(); + var { ANY } = Comparator; + var Range = require_range(); + var satisfies3 = require_satisfies(); + var gt2 = require_gt(); + var lt = require_lt(); + var lte = require_lte(); + var gte = require_gte(); + var outside = (version, range, hilo, options) => { + version = new SemVer(version, options); + range = new Range(range, options); + let gtfn, ltefn, ltfn, comp, ecomp; + switch (hilo) { + case ">": + gtfn = gt2; + ltefn = lte; + ltfn = lt; + comp = ">"; + ecomp = ">="; + break; + case "<": + gtfn = lt; + ltefn = gte; + ltfn = gt2; + comp = "<"; + ecomp = "<="; + break; + default: + throw new TypeError('Must provide a hilo val of "<" or ">"'); + } + if (satisfies3(version, range, options)) { + return false; + } + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i]; + let high = null; + let low = null; + comparators.forEach((comparator) => { + if (comparator.semver === ANY) { + comparator = new Comparator(">=0.0.0"); + } + high = high || comparator; + low = low || comparator; + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator; + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator; + } + }); + if (high.operator === comp || high.operator === ecomp) { + return false; + } + if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) { + return false; + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false; + } + } + return true; + }; + module2.exports = outside; + } +}); + +// node_modules/semver/ranges/gtr.js +var require_gtr = __commonJS({ + "node_modules/semver/ranges/gtr.js"(exports2, module2) { + "use strict"; + var outside = require_outside(); + var gtr = (version, range, options) => outside(version, range, ">", options); + module2.exports = gtr; + } +}); + +// node_modules/semver/ranges/ltr.js +var require_ltr = __commonJS({ + "node_modules/semver/ranges/ltr.js"(exports2, module2) { + "use strict"; + var outside = require_outside(); + var ltr = (version, range, options) => outside(version, range, "<", options); + module2.exports = ltr; + } +}); + +// node_modules/semver/ranges/intersects.js +var require_intersects = __commonJS({ + "node_modules/semver/ranges/intersects.js"(exports2, module2) { + "use strict"; + var Range = require_range(); + var intersects = (r1, r2, options) => { + r1 = new Range(r1, options); + r2 = new Range(r2, options); + return r1.intersects(r2, options); + }; + module2.exports = intersects; + } +}); + +// node_modules/semver/ranges/simplify.js +var require_simplify = __commonJS({ + "node_modules/semver/ranges/simplify.js"(exports2, module2) { + "use strict"; + var satisfies3 = require_satisfies(); + var compare = require_compare(); + module2.exports = (versions, range, options) => { + const set = []; + let first = null; + let prev = null; + const v = versions.sort((a, b) => compare(a, b, options)); + for (const version of v) { + const included = satisfies3(version, range, options); + if (included) { + prev = version; + if (!first) { + first = version; + } + } else { + if (prev) { + set.push([first, prev]); + } + prev = null; + first = null; + } + } + if (first) { + set.push([first, null]); + } + const ranges = []; + for (const [min, max] of set) { + if (min === max) { + ranges.push(min); + } else if (!max && min === v[0]) { + ranges.push("*"); + } else if (!max) { + ranges.push(`>=${min}`); + } else if (min === v[0]) { + ranges.push(`<=${max}`); + } else { + ranges.push(`${min} - ${max}`); + } + } + const simplified = ranges.join(" || "); + const original = typeof range.raw === "string" ? range.raw : String(range); + return simplified.length < original.length ? simplified : range; + }; + } +}); + +// node_modules/semver/ranges/subset.js +var require_subset = __commonJS({ + "node_modules/semver/ranges/subset.js"(exports2, module2) { + "use strict"; + var Range = require_range(); + var Comparator = require_comparator(); + var { ANY } = Comparator; + var satisfies3 = require_satisfies(); + var compare = require_compare(); + var subset = (sub, dom, options = {}) => { + if (sub === dom) { + return true; + } + sub = new Range(sub, options); + dom = new Range(dom, options); + let sawNonNull = false; + OUTER: for (const simpleSub of sub.set) { + for (const simpleDom of dom.set) { + const isSub = simpleSubset(simpleSub, simpleDom, options); + sawNonNull = sawNonNull || isSub !== null; + if (isSub) { + continue OUTER; + } + } + if (sawNonNull) { + return false; + } + } + return true; + }; + var minimumVersionWithPreRelease = [new Comparator(">=0.0.0-0")]; + var minimumVersion = [new Comparator(">=0.0.0")]; + var simpleSubset = (sub, dom, options) => { + if (sub === dom) { + return true; + } + if (sub.length === 1 && sub[0].semver === ANY) { + if (dom.length === 1 && dom[0].semver === ANY) { + return true; + } else if (options.includePrerelease) { + sub = minimumVersionWithPreRelease; + } else { + sub = minimumVersion; + } + } + if (dom.length === 1 && dom[0].semver === ANY) { + if (options.includePrerelease) { + return true; + } else { + dom = minimumVersion; + } + } + const eqSet = /* @__PURE__ */ new Set(); + let gt2, lt; + for (const c of sub) { + if (c.operator === ">" || c.operator === ">=") { + gt2 = higherGT(gt2, c, options); + } else if (c.operator === "<" || c.operator === "<=") { + lt = lowerLT(lt, c, options); + } else { + eqSet.add(c.semver); + } + } + if (eqSet.size > 1) { + return null; + } + let gtltComp; + if (gt2 && lt) { + gtltComp = compare(gt2.semver, lt.semver, options); + if (gtltComp > 0) { + return null; + } else if (gtltComp === 0 && (gt2.operator !== ">=" || lt.operator !== "<=")) { + return null; + } + } + for (const eq of eqSet) { + if (gt2 && !satisfies3(eq, String(gt2), options)) { + return null; + } + if (lt && !satisfies3(eq, String(lt), options)) { + return null; + } + for (const c of dom) { + if (!satisfies3(eq, String(c), options)) { + return false; + } + } + return true; + } + let higher, lower; + let hasDomLT, hasDomGT; + let needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false; + let needDomGTPre = gt2 && !options.includePrerelease && gt2.semver.prerelease.length ? gt2.semver : false; + if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === "<" && needDomLTPre.prerelease[0] === 0) { + needDomLTPre = false; + } + for (const c of dom) { + hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">="; + hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<="; + if (gt2) { + if (needDomGTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) { + needDomGTPre = false; + } + } + if (c.operator === ">" || c.operator === ">=") { + higher = higherGT(gt2, c, options); + if (higher === c && higher !== gt2) { + return false; + } + } else if (gt2.operator === ">=" && !c.test(gt2.semver)) { + return false; + } + } + if (lt) { + if (needDomLTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) { + needDomLTPre = false; + } + } + if (c.operator === "<" || c.operator === "<=") { + lower = lowerLT(lt, c, options); + if (lower === c && lower !== lt) { + return false; + } + } else if (lt.operator === "<=" && !c.test(lt.semver)) { + return false; + } + } + if (!c.operator && (lt || gt2) && gtltComp !== 0) { + return false; + } + } + if (gt2 && hasDomLT && !lt && gtltComp !== 0) { + return false; + } + if (lt && hasDomGT && !gt2 && gtltComp !== 0) { + return false; + } + if (needDomGTPre || needDomLTPre) { + return false; + } + return true; + }; + var higherGT = (a, b, options) => { + if (!a) { + return b; + } + const comp = compare(a.semver, b.semver, options); + return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a; + }; + var lowerLT = (a, b, options) => { + if (!a) { + return b; + } + const comp = compare(a.semver, b.semver, options); + return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a; + }; + module2.exports = subset; + } +}); + +// node_modules/semver/index.js +var require_semver2 = __commonJS({ + "node_modules/semver/index.js"(exports2, module2) { + "use strict"; + var internalRe = require_re(); + var constants3 = require_constants6(); + var SemVer = require_semver(); + var identifiers = require_identifiers(); + var parse3 = require_parse2(); + var valid2 = require_valid(); + var clean2 = require_clean(); + var inc = require_inc(); + var diff = require_diff(); + var major = require_major(); + var minor = require_minor(); + var patch = require_patch(); + var prerelease = require_prerelease(); + var compare = require_compare(); + var rcompare = require_rcompare(); + var compareLoose = require_compare_loose(); + var compareBuild = require_compare_build(); + var sort = require_sort(); + var rsort = require_rsort(); + var gt2 = require_gt(); + var lt = require_lt(); + var eq = require_eq(); + var neq = require_neq(); + var gte = require_gte(); + var lte = require_lte(); + var cmp = require_cmp(); + var coerce = require_coerce(); + var truncate = require_truncate(); + var Comparator = require_comparator(); + var Range = require_range(); + var satisfies3 = require_satisfies(); + var toComparators = require_to_comparators(); + var maxSatisfying = require_max_satisfying(); + var minSatisfying = require_min_satisfying(); + var minVersion = require_min_version(); + var validRange = require_valid2(); + var outside = require_outside(); + var gtr = require_gtr(); + var ltr = require_ltr(); + var intersects = require_intersects(); + var simplifyRange = require_simplify(); + var subset = require_subset(); + module2.exports = { + parse: parse3, + valid: valid2, + clean: clean2, + inc, + diff, + major, + minor, + patch, + prerelease, + compare, + rcompare, + compareLoose, + compareBuild, + sort, + rsort, + gt: gt2, + lt, + eq, + neq, + gte, + lte, + cmp, + coerce, + truncate, + Comparator, + Range, + satisfies: satisfies3, + toComparators, + maxSatisfying, + minSatisfying, + minVersion, + validRange, + outside, + gtr, + ltr, + intersects, + simplifyRange, + subset, + SemVer, + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, + SEMVER_SPEC_VERSION: constants3.SEMVER_SPEC_VERSION, + RELEASE_TYPES: constants3.RELEASE_TYPES, + compareIdentifiers: identifiers.compareIdentifiers, + rcompareIdentifiers: identifiers.rcompareIdentifiers + }; + } +}); + +// src/main.ts +var process2 = __toESM(require("node:process")); +var import_node_path = __toESM(require("node:path")); + +// node_modules/@actions/core/lib/command.js +var os = __toESM(require("os"), 1); + +// node_modules/@actions/core/lib/utils.js +function toCommandValue(input) { + if (input === null || input === void 0) { + return ""; + } else if (typeof input === "string" || input instanceof String) { + return input; + } + return JSON.stringify(input); +} +function toCommandProperties(annotationProperties) { + if (!Object.keys(annotationProperties).length) { + return {}; + } + return { + title: annotationProperties.title, + file: annotationProperties.file, + line: annotationProperties.startLine, + endLine: annotationProperties.endLine, + col: annotationProperties.startColumn, + endColumn: annotationProperties.endColumn + }; +} + +// node_modules/@actions/core/lib/command.js +function issueCommand(command, properties, message) { + const cmd = new Command(command, properties, message); + process.stdout.write(cmd.toString() + os.EOL); +} +var CMD_STRING = "::"; +var Command = class { + 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 toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A"); +} +function escapeProperty(s) { + return toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/:/g, "%3A").replace(/,/g, "%2C"); +} + +// node_modules/@actions/core/lib/core.js +var os4 = __toESM(require("os"), 1); + +// node_modules/@actions/http-client/lib/index.js +var http = __toESM(require("http"), 1); +var https = __toESM(require("https"), 1); + +// node_modules/@actions/http-client/lib/proxy.js +function getProxyUrl(reqUrl) { + const usingSsl = reqUrl.protocol === "https:"; + if (checkBypass(reqUrl)) { + return void 0; + } + const proxyVar = (() => { + if (usingSsl) { + return process.env["https_proxy"] || process.env["HTTPS_PROXY"]; + } else { + return process.env["http_proxy"] || process.env["HTTP_PROXY"]; + } + })(); + if (proxyVar) { + try { + return new DecodedURL(proxyVar); + } catch (_a) { + if (!proxyVar.startsWith("http://") && !proxyVar.startsWith("https://")) + return new DecodedURL(`http://${proxyVar}`); + } + } else { + return void 0; + } +} +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + const reqHost = reqUrl.hostname; + if (isLoopbackAddress(reqHost)) { + return true; + } + const noProxy = process.env["no_proxy"] || process.env["NO_PROXY"] || ""; + if (!noProxy) { + return false; + } + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } else if (reqUrl.protocol === "http:") { + reqPort = 80; + } else if (reqUrl.protocol === "https:") { + reqPort = 443; + } + const upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === "number") { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + for (const upperNoProxyItem of noProxy.split(",").map((x) => x.trim().toUpperCase()).filter((x) => x)) { + if (upperNoProxyItem === "*" || upperReqHosts.some((x) => x === upperNoProxyItem || x.endsWith(`.${upperNoProxyItem}`) || upperNoProxyItem.startsWith(".") && x.endsWith(`${upperNoProxyItem}`))) { + return true; + } + } + return false; +} +function isLoopbackAddress(host) { + const hostLower = host.toLowerCase(); + return hostLower === "localhost" || hostLower.startsWith("127.") || hostLower.startsWith("[::1]") || hostLower.startsWith("[0:0:0:0:0:0:0:1]"); +} +var DecodedURL = class extends URL { + constructor(url, base) { + super(url, base); + this._decodedUsername = decodeURIComponent(super.username); + this._decodedPassword = decodeURIComponent(super.password); + } + get username() { + return this._decodedUsername; + } + get password() { + return this._decodedPassword; + } +}; + +// node_modules/@actions/http-client/lib/index.js +var tunnel = __toESM(require_tunnel2(), 1); +var import_undici = __toESM(require_undici(), 1); +var __awaiter = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var HttpCodes; +(function(HttpCodes2) { + HttpCodes2[HttpCodes2["OK"] = 200] = "OK"; + HttpCodes2[HttpCodes2["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes2[HttpCodes2["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes2[HttpCodes2["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes2[HttpCodes2["SeeOther"] = 303] = "SeeOther"; + HttpCodes2[HttpCodes2["NotModified"] = 304] = "NotModified"; + HttpCodes2[HttpCodes2["UseProxy"] = 305] = "UseProxy"; + HttpCodes2[HttpCodes2["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes2[HttpCodes2["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes2[HttpCodes2["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes2[HttpCodes2["BadRequest"] = 400] = "BadRequest"; + HttpCodes2[HttpCodes2["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes2[HttpCodes2["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes2[HttpCodes2["Forbidden"] = 403] = "Forbidden"; + HttpCodes2[HttpCodes2["NotFound"] = 404] = "NotFound"; + HttpCodes2[HttpCodes2["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes2[HttpCodes2["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes2[HttpCodes2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes2[HttpCodes2["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes2[HttpCodes2["Conflict"] = 409] = "Conflict"; + HttpCodes2[HttpCodes2["Gone"] = 410] = "Gone"; + HttpCodes2[HttpCodes2["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes2[HttpCodes2["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes2[HttpCodes2["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes2[HttpCodes2["BadGateway"] = 502] = "BadGateway"; + HttpCodes2[HttpCodes2["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes2[HttpCodes2["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes || (HttpCodes = {})); +var Headers; +(function(Headers2) { + Headers2["Accept"] = "accept"; + Headers2["ContentType"] = "content-type"; +})(Headers || (Headers = {})); +var MediaTypes; +(function(MediaTypes2) { + MediaTypes2["ApplicationJson"] = "application/json"; +})(MediaTypes || (MediaTypes = {})); +var HttpRedirectCodes = [ + HttpCodes.MovedPermanently, + HttpCodes.ResourceMoved, + HttpCodes.SeeOther, + HttpCodes.TemporaryRedirect, + HttpCodes.PermanentRedirect +]; +var HttpResponseRetryCodes = [ + HttpCodes.BadGateway, + HttpCodes.ServiceUnavailable, + HttpCodes.GatewayTimeout +]; +var RetryableHttpVerbs = ["OPTIONS", "GET", "DELETE", "HEAD"]; +var ExponentialBackoffCeiling = 10; +var ExponentialBackoffTimeSlice = 5; +var HttpClientError = class _HttpClientError extends Error { + constructor(message, statusCode) { + super(message); + this.name = "HttpClientError"; + this.statusCode = statusCode; + Object.setPrototypeOf(this, _HttpClientError.prototype); + } +}; +var HttpClientResponse = class { + constructor(message) { + this.message = message; + } + readBody() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter(this, void 0, void 0, function* () { + let output = Buffer.alloc(0); + this.message.on("data", (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on("end", () => { + resolve2(output.toString()); + }); + })); + }); + } + readBodyBuffer() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter(this, void 0, void 0, function* () { + const chunks = []; + this.message.on("data", (chunk) => { + chunks.push(chunk); + }); + this.message.on("end", () => { + resolve2(Buffer.concat(chunks)); + }); + })); + }); + } +}; +var HttpClient = class { + constructor(userAgent3, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = this._getUserAgentWithOrchestrationId(userAgent3); + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } + } + options(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("OPTIONS", requestUrl, null, additionalHeaders || {}); + }); + } + get(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("GET", requestUrl, null, additionalHeaders || {}); + }); + } + del(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("DELETE", requestUrl, null, additionalHeaders || {}); + }); + } + post(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("POST", requestUrl, data, additionalHeaders || {}); + }); + } + patch(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("PATCH", requestUrl, data, additionalHeaders || {}); + }); + } + put(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("PUT", requestUrl, data, additionalHeaders || {}); + }); + } + head(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("HEAD", requestUrl, null, additionalHeaders || {}); + }); + } + sendStream(verb, requestUrl, stream2, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request(verb, requestUrl, stream2, additionalHeaders); + }); + } + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + getJson(requestUrl_1) { + return __awaiter(this, arguments, void 0, function* (requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + const res = yield this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + postJson(requestUrl_1, obj_1) { + return __awaiter(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes.ApplicationJson); + const res = yield this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + putJson(requestUrl_1, obj_1) { + return __awaiter(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes.ApplicationJson); + const res = yield this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + patchJson(requestUrl_1, obj_1) { + return __awaiter(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes.ApplicationJson); + const res = yield this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb, requestUrl, data, headers) { + return __awaiter(this, void 0, void 0, function* () { + if (this._disposed) { + throw new Error("Client has already been disposed."); + } + const parsedUrl = new URL(requestUrl); + let info2 = this._prepareRequest(verb, parsedUrl, headers); + const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1; + let numTries = 0; + let response; + do { + response = yield this.requestRaw(info2, data); + if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (const handler2 of this.handlers) { + if (handler2.canHandleAuthentication(response)) { + authenticationHandler = handler2; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info2, data); + } else { + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (response.message.statusCode && HttpRedirectCodes.includes(response.message.statusCode) && this._allowRedirects && redirectsRemaining > 0) { + const redirectUrl = response.message.headers["location"]; + if (!redirectUrl) { + break; + } + const parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol === "https:" && parsedUrl.protocol !== parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) { + throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true."); + } + yield response.readBody(); + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (const header in headers) { + if (header.toLowerCase() === "authorization") { + delete headers[header]; + } + } + } + info2 = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = yield this.requestRaw(info2, data); + redirectsRemaining--; + } + if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) { + return response; + } + numTries += 1; + if (numTries < maxTries) { + yield response.readBody(); + yield this._performExponentialBackoff(numTries); + } + } while (numTries < maxTries); + return response; + }); + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; + } + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info2, data) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve2, reject) => { + function callbackForResult(err, res) { + if (err) { + reject(err); + } else if (!res) { + reject(new Error("Unknown error")); + } else { + resolve2(res); + } + } + this.requestRawWithCallback(info2, data, callbackForResult); + }); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info2, data, onResult) { + if (typeof data === "string") { + if (!info2.options.headers) { + info2.options.headers = {}; + } + info2.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8"); + } + let callbackCalled = false; + function handleResult(err, res) { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + } + const req = info2.httpModule.request(info2.options, (msg) => { + const res = new HttpClientResponse(msg); + handleResult(void 0, res); + }); + let socket; + req.on("socket", (sock) => { + socket = sock; + }); + req.setTimeout(this._socketTimeout || 3 * 6e4, () => { + if (socket) { + socket.end(); + } + handleResult(new Error(`Request timeout: ${info2.options.path}`)); + }); + req.on("error", function(err) { + handleResult(err); + }); + if (data && typeof data === "string") { + req.write(data, "utf8"); + } + if (data && typeof data !== "string") { + data.on("close", function() { + req.end(); + }); + data.pipe(req); + } else { + req.end(); + } + } + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + const parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); + } + getAgentDispatcher(serverUrl) { + const parsedUrl = new URL(serverUrl); + const proxyUrl = getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (!useProxy) { + return; + } + return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); + } + _prepareRequest(method, requestUrl, headers) { + const info2 = {}; + info2.parsedUrl = requestUrl; + const usingSsl = info2.parsedUrl.protocol === "https:"; + info2.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info2.options = {}; + info2.options.host = info2.parsedUrl.hostname; + info2.options.port = info2.parsedUrl.port ? parseInt(info2.parsedUrl.port) : defaultPort; + info2.options.path = (info2.parsedUrl.pathname || "") + (info2.parsedUrl.search || ""); + info2.options.method = method; + info2.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info2.options.headers["user-agent"] = this.userAgent; + } + info2.options.agent = this._getAgent(info2.parsedUrl); + if (this.handlers) { + for (const handler2 of this.handlers) { + handler2.prepareRequest(info2.options); + } + } + return info2; + } + _mergeHeaders(headers) { + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); + } + return lowercaseKeys(headers || {}); + } + /** + * Gets an existing header value or returns a default. + * Handles converting number header values to strings since HTTP headers must be strings. + * Note: This returns string | string[] since some headers can have multiple values. + * For headers that must always be a single string (like Content-Type), use the + * specialized _getExistingOrDefaultContentTypeHeader method instead. + */ + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + const headerValue = lowercaseKeys(this.requestOptions.headers)[header]; + if (headerValue) { + clientHeader = typeof headerValue === "number" ? headerValue.toString() : headerValue; + } + } + const additionalValue = additionalHeaders[header]; + if (additionalValue !== void 0) { + return typeof additionalValue === "number" ? additionalValue.toString() : additionalValue; + } + if (clientHeader !== void 0) { + return clientHeader; + } + return _default; + } + /** + * Specialized version of _getExistingOrDefaultHeader for Content-Type header. + * Always returns a single string (not an array) since Content-Type should be a single value. + * Converts arrays to comma-separated strings and numbers to strings to ensure type safety. + * This was split from _getExistingOrDefaultHeader to provide stricter typing for callers + * that assign the result to places expecting a string (e.g., additionalHeaders[Headers.ContentType]). + */ + _getExistingOrDefaultContentTypeHeader(additionalHeaders, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + const headerValue = lowercaseKeys(this.requestOptions.headers)[Headers.ContentType]; + if (headerValue) { + if (typeof headerValue === "number") { + clientHeader = String(headerValue); + } else if (Array.isArray(headerValue)) { + clientHeader = headerValue.join(", "); + } else { + clientHeader = headerValue; + } + } + } + const additionalValue = additionalHeaders[Headers.ContentType]; + if (additionalValue !== void 0) { + if (typeof additionalValue === "number") { + return String(additionalValue); + } else if (Array.isArray(additionalValue)) { + return additionalValue.join(", "); + } else { + return additionalValue; + } + } + if (clientHeader !== void 0) { + return clientHeader; + } + return _default; + } + _getAgent(parsedUrl) { + let agent; + const proxyUrl = getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (!useProxy) { + agent = this._agent; + } + if (agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === "https:"; + let maxSockets = 100; + if (this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + if (proxyUrl && proxyUrl.hostname) { + const agentOptions = { + maxSockets, + keepAlive: this._keepAlive, + proxy: Object.assign(Object.assign({}, (proxyUrl.username || proxyUrl.password) && { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` + }), { host: proxyUrl.hostname, port: proxyUrl.port }) + }; + let tunnelAgent; + const overHttps = proxyUrl.protocol === "https:"; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; + } else { + tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; + } + if (!agent) { + const options = { keepAlive: this._keepAlive, maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; + } + if (usingSsl && this._ignoreSslError) { + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); + } + return agent; + } + _getProxyAgentDispatcher(parsedUrl, proxyUrl) { + let proxyAgent; + if (this._keepAlive) { + proxyAgent = this._proxyAgentDispatcher; + } + if (proxyAgent) { + return proxyAgent; + } + const usingSsl = parsedUrl.protocol === "https:"; + proxyAgent = new import_undici.ProxyAgent(Object.assign({ uri: proxyUrl.href, pipelining: !this._keepAlive ? 0 : 1 }, (proxyUrl.username || proxyUrl.password) && { + token: `Basic ${Buffer.from(`${proxyUrl.username}:${proxyUrl.password}`).toString("base64")}` + })); + this._proxyAgentDispatcher = proxyAgent; + if (usingSsl && this._ignoreSslError) { + proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, { + rejectUnauthorized: false + }); + } + return proxyAgent; + } + _getUserAgentWithOrchestrationId(userAgent3) { + const baseUserAgent = userAgent3 || "actions/http-client"; + const orchId = process.env["ACTIONS_ORCHESTRATION_ID"]; + if (orchId) { + const sanitizedId = orchId.replace(/[^a-z0-9_.-]/gi, "_"); + return `${baseUserAgent} actions_orchestration_id/${sanitizedId}`; + } + return baseUserAgent; + } + _performExponentialBackoff(retryNumber) { + return __awaiter(this, void 0, void 0, function* () { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise((resolve2) => setTimeout(() => resolve2(), ms)); + }); + } + _processResponse(res, options) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve2, reject) => __awaiter(this, void 0, void 0, function* () { + const statusCode = res.message.statusCode || 0; + const response = { + statusCode, + result: null, + headers: {} + }; + if (statusCode === HttpCodes.NotFound) { + resolve2(response); + } + function dateTimeDeserializer(key, value) { + if (typeof value === "string") { + const a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + let obj; + let contents; + try { + contents = yield res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, dateTimeDeserializer); + } else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } catch (err) { + } + if (statusCode > 299) { + let msg; + if (obj && obj.message) { + msg = obj.message; + } else if (contents && contents.length > 0) { + msg = contents; + } else { + msg = `Failed request: (${statusCode})`; + } + const err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); + } else { + resolve2(response); + } + })); + }); + } +}; +var lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); + +// node_modules/@actions/core/lib/summary.js +var import_os = require("os"); +var import_fs = require("fs"); +var __awaiter2 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var { access, appendFile, writeFile } = import_fs.promises; +var SUMMARY_ENV_VAR = "GITHUB_STEP_SUMMARY"; +var Summary = class { + constructor() { + this._buffer = ""; + } + /** + * Finds the summary file path from the environment, rejects if env var is not found or file does not exist + * Also checks r/w permissions. + * + * @returns step summary file path + */ + filePath() { + return __awaiter2(this, void 0, void 0, function* () { + if (this._filePath) { + return this._filePath; + } + const pathFromEnv = process.env[SUMMARY_ENV_VAR]; + if (!pathFromEnv) { + throw new Error(`Unable to find environment variable for $${SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); + } + try { + yield access(pathFromEnv, import_fs.constants.R_OK | import_fs.constants.W_OK); + } catch (_a) { + throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); + } + this._filePath = pathFromEnv; + return this._filePath; + }); + } + /** + * Wraps content in an HTML tag, adding any HTML attributes + * + * @param {string} tag HTML tag to wrap + * @param {string | null} content content within the tag + * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add + * + * @returns {string} content wrapped in HTML element + */ + wrap(tag, content, attrs = {}) { + const htmlAttrs = Object.entries(attrs).map(([key, value]) => ` ${key}="${value}"`).join(""); + if (!content) { + return `<${tag}${htmlAttrs}>`; + } + return `<${tag}${htmlAttrs}>${content}`; + } + /** + * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. + * + * @param {SummaryWriteOptions} [options] (optional) options for write operation + * + * @returns {Promise} summary instance + */ + write(options) { + return __awaiter2(this, void 0, void 0, function* () { + const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); + const filePath = yield this.filePath(); + const writeFunc = overwrite ? writeFile : appendFile; + yield writeFunc(filePath, this._buffer, { encoding: "utf8" }); + return this.emptyBuffer(); + }); + } + /** + * Clears the summary buffer and wipes the summary file + * + * @returns {Summary} summary instance + */ + clear() { + return __awaiter2(this, void 0, void 0, function* () { + return this.emptyBuffer().write({ overwrite: true }); + }); + } + /** + * Returns the current summary buffer as a string + * + * @returns {string} string of summary buffer + */ + stringify() { + return this._buffer; + } + /** + * If the summary buffer is empty + * + * @returns {boolen} true if the buffer is empty + */ + isEmptyBuffer() { + return this._buffer.length === 0; + } + /** + * Resets the summary buffer without writing to summary file + * + * @returns {Summary} summary instance + */ + emptyBuffer() { + this._buffer = ""; + return this; + } + /** + * Adds raw text to the summary buffer + * + * @param {string} text content to add + * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) + * + * @returns {Summary} summary instance + */ + addRaw(text, addEOL = false) { + this._buffer += text; + return addEOL ? this.addEOL() : this; + } + /** + * Adds the operating system-specific end-of-line marker to the buffer + * + * @returns {Summary} summary instance + */ + addEOL() { + return this.addRaw(import_os.EOL); + } + /** + * Adds an HTML codeblock to the summary buffer + * + * @param {string} code content to render within fenced code block + * @param {string} lang (optional) language to syntax highlight code + * + * @returns {Summary} summary instance + */ + addCodeBlock(code, lang) { + const attrs = Object.assign({}, lang && { lang }); + const element = this.wrap("pre", this.wrap("code", code), attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML list to the summary buffer + * + * @param {string[]} items list of items to render + * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) + * + * @returns {Summary} summary instance + */ + addList(items, ordered = false) { + const tag = ordered ? "ol" : "ul"; + const listItems = items.map((item) => this.wrap("li", item)).join(""); + const element = this.wrap(tag, listItems); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML table to the summary buffer + * + * @param {SummaryTableCell[]} rows table rows + * + * @returns {Summary} summary instance + */ + addTable(rows) { + const tableBody = rows.map((row) => { + const cells = row.map((cell) => { + if (typeof cell === "string") { + return this.wrap("td", cell); + } + const { header, data, colspan, rowspan } = cell; + const tag = header ? "th" : "td"; + const attrs = Object.assign(Object.assign({}, colspan && { colspan }), rowspan && { rowspan }); + return this.wrap(tag, data, attrs); + }).join(""); + return this.wrap("tr", cells); + }).join(""); + const element = this.wrap("table", tableBody); + return this.addRaw(element).addEOL(); + } + /** + * Adds a collapsable HTML details element to the summary buffer + * + * @param {string} label text for the closed state + * @param {string} content collapsable content + * + * @returns {Summary} summary instance + */ + addDetails(label, content) { + const element = this.wrap("details", this.wrap("summary", label) + content); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML image tag to the summary buffer + * + * @param {string} src path to the image you to embed + * @param {string} alt text description of the image + * @param {SummaryImageOptions} options (optional) addition image attributes + * + * @returns {Summary} summary instance + */ + addImage(src, alt, options) { + const { width, height } = options || {}; + const attrs = Object.assign(Object.assign({}, width && { width }), height && { height }); + const element = this.wrap("img", null, Object.assign({ src, alt }, attrs)); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML section heading element + * + * @param {string} text heading text + * @param {number | string} [level=1] (optional) the heading level, default: 1 + * + * @returns {Summary} summary instance + */ + addHeading(text, level) { + const tag = `h${level}`; + const allowedTag = ["h1", "h2", "h3", "h4", "h5", "h6"].includes(tag) ? tag : "h1"; + const element = this.wrap(allowedTag, text); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML thematic break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addSeparator() { + const element = this.wrap("hr", null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML line break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addBreak() { + const element = this.wrap("br", null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML blockquote to the summary buffer + * + * @param {string} text quote text + * @param {string} cite (optional) citation url + * + * @returns {Summary} summary instance + */ + addQuote(text, cite) { + const attrs = Object.assign({}, cite && { cite }); + const element = this.wrap("blockquote", text, attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML anchor tag to the summary buffer + * + * @param {string} text link text/content + * @param {string} href hyperlink + * + * @returns {Summary} summary instance + */ + addLink(text, href) { + const element = this.wrap("a", text, { href }); + return this.addRaw(element).addEOL(); + } +}; +var _summary = new Summary(); + +// node_modules/@actions/core/lib/platform.js +var import_os2 = __toESM(require("os"), 1); + +// node_modules/@actions/exec/lib/toolrunner.js +var os2 = __toESM(require("os"), 1); +var events = __toESM(require("events"), 1); +var child = __toESM(require("child_process"), 1); +var path3 = __toESM(require("path"), 1); + +// node_modules/@actions/io/lib/io.js +var import_assert = require("assert"); +var path2 = __toESM(require("path"), 1); + +// node_modules/@actions/io/lib/io-util.js +var fs = __toESM(require("fs"), 1); +var path = __toESM(require("path"), 1); +var __awaiter3 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var { chmod, copyFile, lstat, mkdir, open, readdir, rename, rm, rmdir, stat, symlink, unlink } = fs.promises; +var IS_WINDOWS = process.platform === "win32"; +var READONLY = fs.constants.O_RDONLY; +function exists(fsPath) { + return __awaiter3(this, void 0, void 0, function* () { + try { + yield stat(fsPath); + } catch (err) { + if (err.code === "ENOENT") { + return false; + } + throw err; + } + return true; + }); +} +function isRooted(p) { + p = normalizeSeparators(p); + if (!p) { + throw new Error('isRooted() parameter "p" cannot be empty'); + } + if (IS_WINDOWS) { + return p.startsWith("\\") || /^[A-Z]:/i.test(p); + } + return p.startsWith("/"); +} +function tryGetExecutablePath(filePath, extensions) { + return __awaiter3(this, void 0, void 0, function* () { + let stats = void 0; + try { + stats = yield stat(filePath); + } catch (err) { + if (err.code !== "ENOENT") { + console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); + } + } + if (stats && stats.isFile()) { + if (IS_WINDOWS) { + const upperExt = path.extname(filePath).toUpperCase(); + if (extensions.some((validExt) => validExt.toUpperCase() === upperExt)) { + return filePath; + } + } else { + if (isUnixExecutable(stats)) { + return filePath; + } + } + } + const originalFilePath = filePath; + for (const extension of extensions) { + filePath = originalFilePath + extension; + stats = void 0; + try { + stats = yield stat(filePath); + } catch (err) { + if (err.code !== "ENOENT") { + console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); + } + } + if (stats && stats.isFile()) { + if (IS_WINDOWS) { + try { + const directory = path.dirname(filePath); + const upperName = path.basename(filePath).toUpperCase(); + for (const actualName of yield readdir(directory)) { + if (upperName === actualName.toUpperCase()) { + filePath = path.join(directory, actualName); + break; + } + } + } catch (err) { + console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); + } + return filePath; + } else { + if (isUnixExecutable(stats)) { + return filePath; + } + } + } + } + return ""; + }); +} +function normalizeSeparators(p) { + p = p || ""; + if (IS_WINDOWS) { + p = p.replace(/\//g, "\\"); + return p.replace(/\\\\+/g, "\\"); + } + return p.replace(/\/\/+/g, "/"); +} +function isUnixExecutable(stats) { + return (stats.mode & 1) > 0 || (stats.mode & 8) > 0 && process.getgid !== void 0 && stats.gid === process.getgid() || (stats.mode & 64) > 0 && process.getuid !== void 0 && stats.uid === process.getuid(); +} + +// node_modules/@actions/io/lib/io.js +var __awaiter4 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +function rmRF(inputPath) { + return __awaiter4(this, void 0, void 0, function* () { + if (IS_WINDOWS) { + if (/[*"<>|]/.test(inputPath)) { + throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows'); + } + } + try { + yield rm(inputPath, { + force: true, + maxRetries: 3, + recursive: true, + retryDelay: 300 + }); + } catch (err) { + throw new Error(`File was unable to be removed ${err}`); + } + }); +} +function mkdirP(fsPath) { + return __awaiter4(this, void 0, void 0, function* () { + (0, import_assert.ok)(fsPath, "a path argument must be provided"); + yield mkdir(fsPath, { recursive: true }); + }); +} +function which(tool, check) { + return __awaiter4(this, void 0, void 0, function* () { + if (!tool) { + throw new Error("parameter 'tool' is required"); + } + if (check) { + const result = yield which(tool, false); + if (!result) { + if (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 ""; + }); +} +function findInPath(tool) { + return __awaiter4(this, void 0, void 0, function* () { + if (!tool) { + throw new Error("parameter 'tool' is required"); + } + const extensions = []; + if (IS_WINDOWS && process.env["PATHEXT"]) { + for (const extension of process.env["PATHEXT"].split(path2.delimiter)) { + if (extension) { + extensions.push(extension); + } + } + } + if (isRooted(tool)) { + const filePath = yield tryGetExecutablePath(tool, extensions); + if (filePath) { + return [filePath]; + } + return []; + } + if (tool.includes(path2.sep)) { + return []; + } + const directories = []; + if (process.env.PATH) { + for (const p of process.env.PATH.split(path2.delimiter)) { + if (p) { + directories.push(p); + } + } + } + const matches = []; + for (const directory of directories) { + const filePath = yield tryGetExecutablePath(path2.join(directory, tool), extensions); + if (filePath) { + matches.push(filePath); + } + } + return matches; + }); +} + +// node_modules/@actions/exec/lib/toolrunner.js +var import_timers = require("timers"); +var __awaiter5 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var IS_WINDOWS2 = process.platform === "win32"; +var ToolRunner = class 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]"; + if (IS_WINDOWS2) { + if (this._isCmdFile()) { + cmd += toolPath; + for (const a of args) { + cmd += ` ${a}`; + } + } else if (options.windowsVerbatimArguments) { + cmd += `"${toolPath}"`; + for (const a of args) { + cmd += ` ${a}`; + } + } else { + cmd += this._windowsQuoteCmdArg(toolPath); + for (const a of args) { + cmd += ` ${this._windowsQuoteCmdArg(a)}`; + } + } + } else { + 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(os2.EOL); + while (n > -1) { + const line = s.substring(0, n); + onLine(line); + s = s.substring(n + os2.EOL.length); + n = s.indexOf(os2.EOL); + } + return s; + } catch (err) { + this._debug(`error processing line. Failed with error ${err}`); + return ""; + } + } + _getSpawnFileName() { + if (IS_WINDOWS2) { + if (this._isCmdFile()) { + return process.env["COMSPEC"] || "cmd.exe"; + } + } + return this.toolPath; + } + _getSpawnArgs(options) { + if (IS_WINDOWS2) { + 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) { + if (!this._isCmdFile()) { + return this._uvQuoteCmdArg(arg); + } + if (!arg) { + return '""'; + } + const cmdSpecialChars = [ + " ", + " ", + "&", + "(", + ")", + "[", + "]", + "{", + "}", + "^", + "=", + ";", + "!", + "'", + "+", + ",", + "`", + "~", + "|", + "<", + ">", + '"' + ]; + let needsQuotes = false; + for (const char of arg) { + if (cmdSpecialChars.some((x) => x === char)) { + needsQuotes = true; + break; + } + } + if (!needsQuotes) { + return arg; + } + let reverse = '"'; + let quoteHit = true; + for (let i = arg.length; i > 0; i--) { + 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(""); + } + _uvQuoteCmdArg(arg) { + if (!arg) { + return '""'; + } + if (!arg.includes(" ") && !arg.includes(" ") && !arg.includes('"')) { + return arg; + } + if (!arg.includes('"') && !arg.includes("\\")) { + return `"${arg}"`; + } + let reverse = '"'; + let quoteHit = true; + for (let i = arg.length; i > 0; i--) { + 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 || 1e4 + }; + 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 __awaiter5(this, void 0, void 0, function* () { + if (!isRooted(this.toolPath) && (this.toolPath.includes("/") || IS_WINDOWS2 && this.toolPath.includes("\\"))) { + this.toolPath = path3.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); + } + this.toolPath = yield which(this.toolPath, true); + return new Promise((resolve2, reject) => __awaiter5(this, void 0, void 0, function* () { + 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) + os2.EOL); + } + const state = new ExecState(optionsNonNull, this.toolPath); + state.on("debug", (message) => { + this._debug(message); + }); + if (this.options.cwd && !(yield exists(this.options.cwd))) { + return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`)); + } + const fileName = this._getSpawnFileName(); + const cp2 = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); + let stdbuffer = ""; + if (cp2.stdout) { + cp2.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); + } + stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => { + if (this.options.listeners && this.options.listeners.stdline) { + this.options.listeners.stdline(line); + } + }); + }); + } + let errbuffer = ""; + if (cp2.stderr) { + cp2.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); + } + errbuffer = this._processLineBuffer(data, errbuffer, (line) => { + if (this.options.listeners && this.options.listeners.errline) { + this.options.listeners.errline(line); + } + }); + }); + } + cp2.on("error", (err) => { + state.processError = err.message; + state.processExited = true; + state.processClosed = true; + state.CheckComplete(); + }); + cp2.on("exit", (code) => { + state.processExitCode = code; + state.processExited = true; + this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); + state.CheckComplete(); + }); + cp2.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", (error2, exitCode) => { + if (stdbuffer.length > 0) { + this.emit("stdline", stdbuffer); + } + if (errbuffer.length > 0) { + this.emit("errline", errbuffer); + } + cp2.removeAllListeners(); + if (error2) { + reject(error2); + } else { + resolve2(exitCode); + } + }); + if (this.options.input) { + if (!cp2.stdin) { + throw new Error("child process missing stdin"); + } + cp2.stdin.end(this.options.input); + } + })); + }); + } +}; +function argStringToArray(argString) { + const args = []; + let inQuotes = false; + let escaped = false; + let arg = ""; + function append(c) { + 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; +} +var ExecState = class _ExecState extends events.EventEmitter { + constructor(options, toolPath) { + super(); + this.processClosed = false; + this.processError = ""; + this.processExitCode = 0; + this.processExited = false; + this.processStderr = false; + this.delay = 1e4; + 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 = (0, import_timers.setTimeout)(_ExecState.HandleTimeout, this.delay, this); + } + } + _debug(message) { + this.emit("debug", message); + } + _setResult() { + let error2; + if (this.processExited) { + if (this.processError) { + error2 = 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) { + error2 = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); + } else if (this.processStderr && this.options.failOnStdErr) { + error2 = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); + } + } + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + this.done = true; + this.emit("done", error2, 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 / 1e3} 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(); + } +}; + +// node_modules/@actions/exec/lib/exec.js +var __awaiter6 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +function exec(commandLine, args, options) { + return __awaiter6(this, void 0, void 0, function* () { + const commandArgs = argStringToArray(commandLine); + if (commandArgs.length === 0) { + throw new Error(`Parameter 'commandLine' cannot be null or empty.`); + } + const toolPath = commandArgs[0]; + args = commandArgs.slice(1).concat(args || []); + const runner = new ToolRunner(toolPath, args, options); + return runner.exec(); + }); +} + +// node_modules/@actions/core/lib/platform.js +var platform = import_os2.default.platform(); +var arch = import_os2.default.arch(); + +// node_modules/@actions/core/lib/core.js +var ExitCode; +(function(ExitCode2) { + ExitCode2[ExitCode2["Success"] = 0] = "Success"; + ExitCode2[ExitCode2["Failure"] = 1] = "Failure"; +})(ExitCode || (ExitCode = {})); +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}`); + } + if (options && options.trimWhitespace === false) { + return val; + } + return val.trim(); +} +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); +} +function isDebug() { + return process.env["RUNNER_DEBUG"] === "1"; +} +function debug(message) { + issueCommand("debug", {}, message); +} +function error(message, properties = {}) { + issueCommand("error", toCommandProperties(properties), message instanceof Error ? message.toString() : message); +} +function info(message) { + process.stdout.write(message + os4.EOL); +} + +// node_modules/@actions/github/lib/context.js +var import_fs2 = require("fs"); +var import_os3 = require("os"); +var Context = class { + /** + * Hydrate the context from the environment + */ + constructor() { + var _a, _b, _c; + this.payload = {}; + if (process.env.GITHUB_EVENT_PATH) { + if ((0, import_fs2.existsSync)(process.env.GITHUB_EVENT_PATH)) { + this.payload = JSON.parse((0, import_fs2.readFileSync)(process.env.GITHUB_EVENT_PATH, { encoding: "utf8" })); + } else { + const path6 = process.env.GITHUB_EVENT_PATH; + process.stdout.write(`GITHUB_EVENT_PATH ${path6} does not exist${import_os3.EOL}`); + } + } + this.eventName = process.env.GITHUB_EVENT_NAME; + this.sha = process.env.GITHUB_SHA; + this.ref = process.env.GITHUB_REF; + this.workflow = process.env.GITHUB_WORKFLOW; + this.action = process.env.GITHUB_ACTION; + this.actor = process.env.GITHUB_ACTOR; + this.job = process.env.GITHUB_JOB; + this.runAttempt = parseInt(process.env.GITHUB_RUN_ATTEMPT, 10); + this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); + this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); + this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; + this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`; + this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`; + } + get issue() { + const payload = this.payload; + return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); + } + get repo() { + if (process.env.GITHUB_REPOSITORY) { + const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/"); + return { owner, repo }; + } + if (this.payload.repository) { + return { + owner: this.payload.repository.owner.login, + repo: this.payload.repository.name + }; + } + throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); + } +}; + +// node_modules/@actions/github/lib/internal/utils.js +var httpClient = __toESM(require_lib(), 1); +var import_undici2 = __toESM(require_undici(), 1); +var __awaiter7 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +function getAuthString(token, options) { + if (!token && !options.auth) { + throw new Error("Parameter token or opts.auth is required"); + } else if (token && options.auth) { + throw new Error("Parameters token and opts.auth may not both be specified"); + } + return typeof options.auth === "string" ? options.auth : `token ${token}`; +} +function getProxyAgent(destinationUrl) { + const hc = new httpClient.HttpClient(); + return hc.getAgent(destinationUrl); +} +function getProxyAgentDispatcher(destinationUrl) { + const hc = new httpClient.HttpClient(); + return hc.getAgentDispatcher(destinationUrl); +} +function getProxyFetch(destinationUrl) { + const httpDispatcher = getProxyAgentDispatcher(destinationUrl); + const proxyFetch = (url, opts) => __awaiter7(this, void 0, void 0, function* () { + return (0, import_undici2.fetch)(url, Object.assign(Object.assign({}, opts), { dispatcher: httpDispatcher })); + }); + return proxyFetch; +} +function getApiBaseUrl() { + return process.env["GITHUB_API_URL"] || "https://api.github.com"; +} +function getUserAgentWithOrchestrationId(baseUserAgent) { + var _a; + const orchId = (_a = process.env["ACTIONS_ORCHESTRATION_ID"]) === null || _a === void 0 ? void 0 : _a.trim(); + if (orchId) { + const sanitizedId = orchId.replace(/[^a-z0-9_.-]/gi, "_"); + const tag = `actions_orchestration_id/${sanitizedId}`; + if (baseUserAgent === null || baseUserAgent === void 0 ? void 0 : baseUserAgent.includes(tag)) + return baseUserAgent; + const ua = baseUserAgent ? `${baseUserAgent} ` : ""; + return `${ua}${tag}`; + } + return baseUserAgent; +} + +// node_modules/universal-user-agent/index.js +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + if (typeof process === "object" && process.version !== void 0) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + return ""; +} + +// node_modules/before-after-hook/lib/register.js +function register(state, name, method, options) { + if (typeof method !== "function") { + throw new Error("method for before hook must be a function"); + } + if (!options) { + options = {}; + } + if (Array.isArray(name)) { + return name.reverse().reduce((callback, name2) => { + return register.bind(null, state, name2, callback, options); + }, method)(); + } + return Promise.resolve().then(() => { + if (!state.registry[name]) { + return method(options); + } + return state.registry[name].reduce((method2, registered) => { + return registered.hook.bind(null, method2, options); + }, method)(); + }); +} + +// node_modules/before-after-hook/lib/add.js +function addHook(state, kind, name, hook2) { + const orig = hook2; + if (!state.registry[name]) { + state.registry[name] = []; + } + if (kind === "before") { + hook2 = (method, options) => { + return Promise.resolve().then(orig.bind(null, options)).then(method.bind(null, options)); + }; + } + if (kind === "after") { + hook2 = (method, options) => { + let result; + return Promise.resolve().then(method.bind(null, options)).then((result_) => { + result = result_; + return orig(result, options); + }).then(() => { + return result; + }); + }; + } + if (kind === "error") { + hook2 = (method, options) => { + return Promise.resolve().then(method.bind(null, options)).catch((error2) => { + return orig(error2, options); + }); + }; + } + state.registry[name].push({ + hook: hook2, + orig + }); +} + +// node_modules/before-after-hook/lib/remove.js +function removeHook(state, name, method) { + if (!state.registry[name]) { + return; + } + const index = state.registry[name].map((registered) => { + return registered.orig; + }).indexOf(method); + if (index === -1) { + return; + } + state.registry[name].splice(index, 1); +} + +// node_modules/before-after-hook/index.js +var bind = Function.bind; +var bindable = bind.bind(bind); +function bindApi(hook2, state, name) { + const removeHookRef = bindable(removeHook, null).apply( + null, + name ? [state, name] : [state] + ); + hook2.api = { remove: removeHookRef }; + hook2.remove = removeHookRef; + ["before", "error", "after", "wrap"].forEach((kind) => { + const args = name ? [state, kind, name] : [state, kind]; + hook2[kind] = hook2.api[kind] = bindable(addHook, null).apply(null, args); + }); +} +function Singular() { + const singularHookName = /* @__PURE__ */ Symbol("Singular"); + const singularHookState = { + registry: {} + }; + const singularHook = register.bind(null, singularHookState, singularHookName); + bindApi(singularHook, singularHookState, singularHookName); + return singularHook; +} +function Collection() { + const state = { + registry: {} + }; + const hook2 = register.bind(null, state); + bindApi(hook2, state); + return hook2; +} +var before_after_hook_default = { Singular, Collection }; + +// node_modules/@octokit/endpoint/dist-bundle/index.js +var VERSION = "0.0.0-development"; +var userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`; +var DEFAULTS = { + method: "GET", + baseUrl: "https://api.github.com", + headers: { + accept: "application/vnd.github.v3+json", + "user-agent": userAgent + }, + mediaType: { + format: "" + } +}; +function lowercaseKeys2(object) { + if (!object) { + return {}; + } + return Object.keys(object).reduce((newObj, key) => { + newObj[key.toLowerCase()] = object[key]; + return newObj; + }, {}); +} +function isPlainObject(value) { + if (typeof value !== "object" || value === null) return false; + if (Object.prototype.toString.call(value) !== "[object Object]") return false; + const proto = Object.getPrototypeOf(value); + if (proto === null) return true; + const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; + return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); +} +function mergeDeep(defaults2, options) { + const result = Object.assign({}, defaults2); + Object.keys(options).forEach((key) => { + if (isPlainObject(options[key])) { + if (!(key in defaults2)) Object.assign(result, { [key]: options[key] }); + else result[key] = mergeDeep(defaults2[key], options[key]); + } else { + Object.assign(result, { [key]: options[key] }); + } + }); + return result; +} +function removeUndefinedProperties(obj) { + for (const key in obj) { + if (obj[key] === void 0) { + delete obj[key]; + } + } + return obj; +} +function merge(defaults2, route, options) { + if (typeof route === "string") { + let [method, url] = route.split(" "); + options = Object.assign(url ? { method, url } : { url: method }, options); + } else { + options = Object.assign({}, route); + } + options.headers = lowercaseKeys2(options.headers); + removeUndefinedProperties(options); + removeUndefinedProperties(options.headers); + const mergedOptions = mergeDeep(defaults2 || {}, options); + if (options.url === "/graphql") { + if (defaults2 && defaults2.mediaType.previews?.length) { + mergedOptions.mediaType.previews = defaults2.mediaType.previews.filter( + (preview) => !mergedOptions.mediaType.previews.includes(preview) + ).concat(mergedOptions.mediaType.previews); + } + mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, "")); + } + return mergedOptions; +} +function addQueryParameters(url, parameters) { + const separator = /\?/.test(url) ? "&" : "?"; + const names = Object.keys(parameters); + if (names.length === 0) { + return url; + } + return url + separator + names.map((name) => { + if (name === "q") { + return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); + } + return `${name}=${encodeURIComponent(parameters[name])}`; + }).join("&"); +} +var urlVariableRegex = /\{[^{}}]+\}/g; +function removeNonChars(variableName) { + return variableName.replace(/(?:^\W+)|(?:(? a.concat(b), []); +} +function omit(object, keysToOmit) { + const result = { __proto__: null }; + for (const key of Object.keys(object)) { + if (keysToOmit.indexOf(key) === -1) { + result[key] = object[key]; + } + } + return result; +} +function encodeReserved(str) { + return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) { + if (!/%[0-9A-Fa-f]/.test(part)) { + part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); + } + return part; + }).join(""); +} +function encodeUnreserved(str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { + return "%" + c.charCodeAt(0).toString(16).toUpperCase(); + }); +} +function encodeValue(operator, value, key) { + value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); + if (key) { + return encodeUnreserved(key) + "=" + value; + } else { + return value; + } +} +function isDefined(value) { + return value !== void 0 && value !== null; +} +function isKeyOperator(operator) { + return operator === ";" || operator === "&" || operator === "?"; +} +function getValues(context3, operator, key, modifier) { + var value = context3[key], result = []; + if (isDefined(value) && value !== "") { + if (typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean") { + value = value.toString(); + if (modifier && modifier !== "*") { + value = value.substring(0, parseInt(modifier, 10)); + } + result.push( + encodeValue(operator, value, isKeyOperator(operator) ? key : "") + ); + } else { + if (modifier === "*") { + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function(value2) { + result.push( + encodeValue(operator, value2, isKeyOperator(operator) ? key : "") + ); + }); + } else { + Object.keys(value).forEach(function(k) { + if (isDefined(value[k])) { + result.push(encodeValue(operator, value[k], k)); + } + }); + } + } else { + const tmp = []; + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function(value2) { + tmp.push(encodeValue(operator, value2)); + }); + } else { + Object.keys(value).forEach(function(k) { + if (isDefined(value[k])) { + tmp.push(encodeUnreserved(k)); + tmp.push(encodeValue(operator, value[k].toString())); + } + }); + } + if (isKeyOperator(operator)) { + result.push(encodeUnreserved(key) + "=" + tmp.join(",")); + } else if (tmp.length !== 0) { + result.push(tmp.join(",")); + } + } + } + } else { + if (operator === ";") { + if (isDefined(value)) { + result.push(encodeUnreserved(key)); + } + } else if (value === "" && (operator === "&" || operator === "?")) { + result.push(encodeUnreserved(key) + "="); + } else if (value === "") { + result.push(""); + } + } + return result; +} +function parseUrl(template) { + return { + expand: expand.bind(null, template) + }; +} +function expand(template, context3) { + var operators = ["+", "#", ".", "/", ";", "?", "&"]; + template = template.replace( + /\{([^\{\}]+)\}|([^\{\}]+)/g, + function(_, expression, literal) { + if (expression) { + let operator = ""; + const values = []; + if (operators.indexOf(expression.charAt(0)) !== -1) { + operator = expression.charAt(0); + expression = expression.substr(1); + } + expression.split(/,/g).forEach(function(variable) { + var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); + values.push(getValues(context3, operator, tmp[1], tmp[2] || tmp[3])); + }); + if (operator && operator !== "+") { + var separator = ","; + if (operator === "?") { + separator = "&"; + } else if (operator !== "#") { + separator = operator; + } + return (values.length !== 0 ? operator : "") + values.join(separator); + } else { + return values.join(","); + } + } else { + return encodeReserved(literal); + } + } + ); + if (template === "/") { + return template; + } else { + return template.replace(/\/$/, ""); + } +} +function parse(options) { + let method = options.method.toUpperCase(); + let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); + let headers = Object.assign({}, options.headers); + let body; + let parameters = omit(options, [ + "method", + "baseUrl", + "url", + "headers", + "request", + "mediaType" + ]); + const urlVariableNames = extractUrlVariableNames(url); + url = parseUrl(url).expand(parameters); + if (!/^http/.test(url)) { + url = options.baseUrl + url; + } + const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl"); + const remainingParameters = omit(parameters, omittedParameters); + const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); + if (!isBinaryRequest) { + if (options.mediaType.format) { + headers.accept = headers.accept.split(/,/).map( + (format) => format.replace( + /application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, + `application/vnd$1$2.${options.mediaType.format}` + ) + ).join(","); + } + if (url.endsWith("/graphql")) { + if (options.mediaType.previews?.length) { + const previewsFromAcceptHeader = headers.accept.match(/(? { + const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; + return `application/vnd.github.${preview}-preview${format}`; + }).join(","); + } + } + } + if (["GET", "HEAD"].includes(method)) { + url = addQueryParameters(url, remainingParameters); + } else { + if ("data" in remainingParameters) { + body = remainingParameters.data; + } else { + if (Object.keys(remainingParameters).length) { + body = remainingParameters; + } + } + } + if (!headers["content-type"] && typeof body !== "undefined") { + headers["content-type"] = "application/json; charset=utf-8"; + } + if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { + body = ""; + } + return Object.assign( + { method, url, headers }, + typeof body !== "undefined" ? { body } : null, + options.request ? { request: options.request } : null + ); +} +function endpointWithDefaults(defaults2, route, options) { + return parse(merge(defaults2, route, options)); +} +function withDefaults(oldDefaults, newDefaults) { + const DEFAULTS2 = merge(oldDefaults, newDefaults); + const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2); + return Object.assign(endpoint2, { + DEFAULTS: DEFAULTS2, + defaults: withDefaults.bind(null, DEFAULTS2), + merge: merge.bind(null, DEFAULTS2), + parse + }); +} +var endpoint = withDefaults(null, DEFAULTS); + +// node_modules/@octokit/request/dist-bundle/index.js +var import_content_type = __toESM(require_dist(), 1); + +// node_modules/json-with-bigint/json-with-bigint.js +var intRegex = /^-?\d+$/; +var noiseValue = /^-?\d+n+$/; +var originalStringify = JSON.stringify; +var originalParse = JSON.parse; +var customFormat = /^-?\d+n$/; +var bigIntsStringify = /([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g; +var noiseStringify = /([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g; +var isUnstringifiable = (val) => val === void 0 || typeof val === "function" || typeof val === "symbol"; +var isRawJSON = (val) => val !== null && typeof val === "object" && val.constructor && val.constructor.name === "RawJSON"; +var stringifyIteratively = (rootValue, replacer, spaceParam) => { + let space = ""; + if (typeof spaceParam === "number") { + space = " ".repeat(Math.min(10, Math.max(0, Math.floor(spaceParam)))); + } else if (typeof spaceParam === "string") { + space = spaceParam.slice(0, 10); + } + const isFunctionReplacer = typeof replacer === "function"; + const propertyList = Array.isArray(replacer) ? new Set(replacer.map(String)) : null; + const prepareVal = (parent, key, val) => { + const isObject = val !== null && typeof val === "object"; + const hasToJSON = isObject && typeof val.toJSON === "function"; + if (hasToJSON) { + val = val.toJSON(key); + } + const isNoise = typeof val === "string" && noiseValue.test(val); + if (isNoise) return val + "n"; + const isBigInt = typeof val === "bigint"; + if (isBigInt) { + const supportsRawJSON = "rawJSON" in JSON; + if (supportsRawJSON) return JSON.rawJSON(val.toString()); + return val.toString() + "n"; + } + if (isFunctionReplacer) { + val = replacer.call(parent, key, val); + } + const isPostReplacerObject = val !== null && typeof val === "object"; + if (isPostReplacerObject) { + const isPrimitiveWrapper = val instanceof Number || val instanceof String || val instanceof Boolean; + if (isPrimitiveWrapper) { + val = val.valueOf(); + } + } + return val; + }; + const rootProcessed = prepareVal({ "": rootValue }, "", rootValue); + if (isUnstringifiable(rootProcessed)) { + return void 0; + } + const isRootPrimitive = rootProcessed === null || typeof rootProcessed !== "object"; + const isRootNativeRawJSON = isRawJSON(rootProcessed); + if (isRootPrimitive || isRootNativeRawJSON) { + return originalStringify(rootProcessed); + } + const chunks = []; + let level = 0; + const stack = [ + { + parent: { "": rootProcessed }, + key: "", + val: rootProcessed, + isArray: Array.isArray(rootProcessed), + keys: Array.isArray(rootProcessed) ? null : Object.keys(rootProcessed), + index: 0, + first: true + } + ]; + const visited = new WeakSet([rootProcessed]); + while (stack.length > 0) { + const node = stack[stack.length - 1]; + if (node.index === 0) { + chunks.push(node.isArray ? "[" : "{"); + level++; + } + let isDone = false; + if (node.isArray) { + if (node.index < node.val.length) { + if (!node.first) chunks.push(","); + if (space) chunks.push("\n" + space.repeat(level)); + const childRaw = node.val[node.index]; + const childVal = prepareVal(node.val, String(node.index), childRaw); + if (isUnstringifiable(childVal)) { + chunks.push("null"); + node.first = false; + node.index++; + } else { + const isComplexObject = childVal !== null && typeof childVal === "object"; + const isNativeRaw = isRawJSON(childVal); + if (isComplexObject && !isNativeRaw) { + if (visited.has(childVal)) { + throw new TypeError("Converting circular structure to JSON"); + } + visited.add(childVal); + stack.push({ + parent: node.val, + key: String(node.index), + val: childVal, + isArray: Array.isArray(childVal), + keys: Array.isArray(childVal) ? null : Object.keys(childVal), + index: 0, + first: true + }); + node.first = false; + node.index++; + } else { + chunks.push(originalStringify(childVal)); + node.first = false; + node.index++; + } + } + } else { + isDone = true; + } + } else { + while (node.index < node.keys.length) { + const k = node.keys[node.index++]; + const isFilteredOutByArray = propertyList && !propertyList.has(k); + if (isFilteredOutByArray) continue; + const childRaw = node.val[k]; + const childVal = prepareVal(node.val, k, childRaw); + if (isUnstringifiable(childVal)) continue; + if (!node.first) chunks.push(","); + if (space) { + chunks.push("\n" + space.repeat(level) + originalStringify(k) + ": "); + } else { + chunks.push(originalStringify(k) + ":"); + } + const isComplexObject = childVal !== null && typeof childVal === "object"; + const isNativeRaw = isRawJSON(childVal); + if (isComplexObject && !isNativeRaw) { + if (visited.has(childVal)) { + throw new TypeError("Converting circular structure to JSON"); + } + visited.add(childVal); + stack.push({ + parent: node.val, + key: k, + val: childVal, + isArray: Array.isArray(childVal), + keys: Array.isArray(childVal) ? null : Object.keys(childVal), + index: 0, + first: true + }); + node.first = false; + break; + } else { + chunks.push(originalStringify(childVal)); + node.first = false; + } + } + const isNodeFullyProcessed = node.index >= node.keys.length && stack[stack.length - 1] === node; + if (isNodeFullyProcessed) { + isDone = true; + } + } + if (isDone) { + level--; + if (!node.first && space) chunks.push("\n" + space.repeat(level)); + chunks.push(node.isArray ? "]" : "}"); + visited.delete(node.val); + stack.pop(); + } + } + return chunks.join(""); +}; +var JSONStringify = (value, replacer, space) => { + try { + const supportsRawJSON = "rawJSON" in JSON; + if (supportsRawJSON) { + return originalStringify( + value, + (key, val) => { + if (typeof val === "bigint") return JSON.rawJSON(val.toString()); + const hasFunctionReplacer = typeof replacer === "function"; + if (hasFunctionReplacer) return replacer(key, val); + const isKeyInArrayReplacer = Array.isArray(replacer) && replacer.includes(key); + if (isKeyInArrayReplacer) return val; + return val; + }, + space + ); + } + if (!value) return originalStringify(value, replacer, space); + const convertedToCustomJSON = originalStringify( + value, + (key, val) => { + const isNoise = typeof val === "string" && noiseValue.test(val); + if (isNoise) return val.toString() + "n"; + if (typeof val === "bigint") return val.toString() + "n"; + const hasFunctionReplacer = typeof replacer === "function"; + if (hasFunctionReplacer) return replacer(key, val); + const isKeyInArrayReplacer = Array.isArray(replacer) && replacer.includes(key); + if (isKeyInArrayReplacer) return val; + return val; + }, + space + ); + const processedJSON = convertedToCustomJSON.replace( + bigIntsStringify, + "$1$2$3" + ); + const denoisedJSON = processedJSON.replace(noiseStringify, "$1$2$3"); + return denoisedJSON; + } catch (error2) { + if (error2 instanceof RangeError) { + const convertedJSON = stringifyIteratively(value, replacer, space); + if (convertedJSON === void 0) return void 0; + const supportsRawJSON = "rawJSON" in JSON; + if (supportsRawJSON) return convertedJSON; + const processedJSON = convertedJSON.replace(bigIntsStringify, "$1$2$3"); + return processedJSON.replace(noiseStringify, "$1$2$3"); + } + throw error2; + } +}; +var featureCache = /* @__PURE__ */ new Map(); +var isContextSourceSupported = () => { + const parseFingerprint = JSON.parse.toString(); + if (featureCache.has(parseFingerprint)) { + return featureCache.get(parseFingerprint); + } + try { + const result = JSON.parse( + "1", + (_, __, context3) => !!context3?.source && context3.source === "1" + ); + featureCache.set(parseFingerprint, result); + return result; + } catch { + featureCache.set(parseFingerprint, false); + return false; + } +}; +var convertMarkedBigIntsReviver = (key, value, context3, userReviver) => { + const isCustomFormatBigInt = typeof value === "string" && customFormat.test(value); + if (isCustomFormatBigInt) return BigInt(value.slice(0, -1)); + const isNoiseValue = typeof value === "string" && noiseValue.test(value); + if (isNoiseValue) return value.slice(0, -1); + const hasUserReviver = typeof userReviver === "function"; + if (!hasUserReviver) return value; + return userReviver(key, value, context3); +}; +var JSONParseV2 = (text, reviver) => { + return JSON.parse(text, (key, value, context3) => { + const isNumber = typeof value === "number"; + const isOutOfBounds = value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER; + const isBigNumber = isNumber && isOutOfBounds; + const isInt = context3 && intRegex.test(context3.source); + const isBigInt = isBigNumber && isInt; + if (isBigInt) return BigInt(context3.source); + const hasCustomReviver = typeof reviver === "function"; + if (!hasCustomReviver) return value; + return reviver(key, value, context3); + }); +}; +var MAX_INT = Number.MAX_SAFE_INTEGER.toString(); +var MAX_DIGITS = MAX_INT.length; +var stringsOrLargeNumbers = /"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g; +var noiseValueWithQuotes = /^"-?\d+n+"$/; +var applyReviverIteratively = (parsed, userReviver) => { + const rootHolder = { "": parsed }; + const stack = [{ parent: rootHolder, key: "", visited: false }]; + while (stack.length > 0) { + const node = stack[stack.length - 1]; + if (!node.visited) { + node.visited = true; + const value = node.parent[node.key]; + const isComplexObject = value !== null && typeof value === "object"; + if (isComplexObject) { + const keys = Object.keys(value); + for (let i = keys.length - 1; i >= 0; i--) { + stack.push({ parent: value, key: keys[i], visited: false }); + } + } + } else { + const { parent, key } = node; + let value = parent[key]; + if (typeof value === "string") { + const isCustomFormatBigInt = customFormat.test(value); + if (isCustomFormatBigInt) { + value = BigInt(value.slice(0, -1)); + } else { + const isNoise = noiseValue.test(value); + if (isNoise) value = value.slice(0, -1); + } + } + const hasUserReviver = typeof userReviver === "function"; + if (hasUserReviver) { + value = userReviver.call(parent, key, value); + } + const isDeleted = value === void 0; + if (isDeleted) { + delete parent[key]; + } else { + parent[key] = value; + } + stack.pop(); + } + } + return rootHolder[""]; +}; +var serializeBigInts = (text) => { + return text.replace( + stringsOrLargeNumbers, + (match, digits, fractional, exponential) => { + const isString = match[0] === '"'; + const isNoise = isString && noiseValueWithQuotes.test(match); + if (isNoise) return match.substring(0, match.length - 1) + 'n"'; + const hasFractionalOrExponential = fractional || exponential; + const isLessThanMaxSafeInt = digits && (digits.length < MAX_DIGITS || digits.length === MAX_DIGITS && digits <= MAX_INT); + const isStandardValue = isString || hasFractionalOrExponential || isLessThanMaxSafeInt; + if (isStandardValue) return match; + return '"' + match + 'n"'; + } + ); +}; +var JSONParse = (text, reviver) => { + if (!text) return originalParse(text, reviver); + try { + if (isContextSourceSupported()) return JSONParseV2(text, reviver); + const serializedData = serializeBigInts(text); + return originalParse( + serializedData, + (key, value, context3) => convertMarkedBigIntsReviver(key, value, context3, reviver) + ); + } catch (error2) { + if (error2 instanceof RangeError) { + const serializedData = serializeBigInts(text); + const parsed = originalParse(serializedData); + return applyReviverIteratively(parsed, reviver); + } + throw error2; + } +}; + +// node_modules/@octokit/request-error/dist-src/index.js +var RequestError = class extends Error { + name; + /** + * http status code + */ + status; + /** + * Request options that lead to the error. + */ + request; + /** + * Response object if a response was received + */ + response; + constructor(message, statusCode, options) { + super(message, { cause: options.cause }); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + /(? ""; +async function fetchWrapper(requestOptions) { + const fetch2 = requestOptions.request?.fetch || globalThis.fetch; + if (!fetch2) { + throw new Error( + "fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing" + ); + } + const log = requestOptions.request?.log || console; + const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false; + const body = isPlainObject2(requestOptions.body) || Array.isArray(requestOptions.body) ? JSONStringify(requestOptions.body) : requestOptions.body; + const requestHeaders = Object.fromEntries( + Object.entries(requestOptions.headers).map(([name, value]) => [ + name, + String(value) + ]) + ); + let fetchResponse; + try { + fetchResponse = await fetch2(requestOptions.url, { + method: requestOptions.method, + body, + redirect: requestOptions.request?.redirect, + headers: requestHeaders, + signal: requestOptions.request?.signal, + // duplex must be set if request.body is ReadableStream or Async Iterables. + // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex. + ...requestOptions.body && { duplex: "half" } + }); + } catch (error2) { + let message = "Unknown Error"; + if (error2 instanceof Error) { + if (error2.name === "AbortError") { + error2.status = 500; + throw error2; + } + message = error2.message; + if (error2.name === "TypeError" && "cause" in error2) { + if (error2.cause instanceof Error) { + message = error2.cause.message; + } else if (typeof error2.cause === "string") { + message = error2.cause; + } + } + } + const requestError = new RequestError(message, 500, { + request: requestOptions + }); + requestError.cause = error2; + throw requestError; + } + const status = fetchResponse.status; + const url = fetchResponse.url; + const responseHeaders = {}; + for (const [key, value] of fetchResponse.headers) { + responseHeaders[key] = value; + } + const octokitResponse = { + url, + status, + headers: responseHeaders, + data: "" + }; + if ("deprecation" in responseHeaders) { + const matches = responseHeaders.link && responseHeaders.link.match(/<([^<>]+)>; rel="deprecation"/); + const deprecationLink = matches && matches.pop(); + log.warn( + `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` + ); + } + if (status === 204 || status === 205) { + return octokitResponse; + } + if (requestOptions.method === "HEAD") { + if (status < 400) { + return octokitResponse; + } + throw new RequestError(fetchResponse.statusText, status, { + response: octokitResponse, + request: requestOptions + }); + } + if (status === 304) { + octokitResponse.data = await getResponseData(fetchResponse); + throw new RequestError("Not modified", status, { + response: octokitResponse, + request: requestOptions + }); + } + if (status >= 400) { + octokitResponse.data = await getResponseData(fetchResponse); + throw new RequestError(toErrorMessage(octokitResponse.data), status, { + response: octokitResponse, + request: requestOptions + }); + } + octokitResponse.data = parseSuccessResponseBody ? await getResponseData(fetchResponse) : fetchResponse.body; + return octokitResponse; +} +async function getResponseData(response) { + const contentType = response.headers.get("content-type"); + if (!contentType) { + return response.text().catch(noop); + } + const mimetype = (0, import_content_type.parse)(contentType); + if (isJSONResponse(mimetype)) { + let text = ""; + try { + text = await response.text(); + return JSONParse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || mimetype.parameters.charset?.toLowerCase() === "utf-8") { + return response.text().catch(noop); + } else { + return response.arrayBuffer().catch( + /* v8 ignore next -- @preserve */ + () => new ArrayBuffer(0) + ); + } +} +function isJSONResponse(mimetype) { + return mimetype.type === "application/json" || mimetype.type === "application/scim+json"; +} +function toErrorMessage(data) { + if (typeof data === "string") { + return data; + } + if (data instanceof ArrayBuffer) { + return "Unknown error"; + } + if (typeof data === "object" && data !== null && "message" in data) { + const objectData = data; + const suffix = "documentation_url" in objectData ? ` - ${objectData.documentation_url}` : ""; + return Array.isArray(objectData.errors) ? `${objectData.message}: ${objectData.errors.map((v) => JSON.stringify(v)).join(", ")}${suffix}` : `${objectData.message}${suffix}`; + } + return `Unknown error: ${JSON.stringify(data)}`; +} +function withDefaults2(oldEndpoint, newDefaults) { + const endpoint2 = oldEndpoint.defaults(newDefaults); + const newApi = function(route, parameters) { + const endpointOptions = endpoint2.merge(route, parameters); + if (!endpointOptions.request || !endpointOptions.request.hook) { + return fetchWrapper(endpoint2.parse(endpointOptions)); + } + const request2 = (route2, parameters2) => { + return fetchWrapper( + endpoint2.parse(endpoint2.merge(route2, parameters2)) + ); + }; + Object.assign(request2, { + endpoint: endpoint2, + defaults: withDefaults2.bind(null, endpoint2) + }); + return endpointOptions.request.hook(request2, endpointOptions); + }; + return Object.assign(newApi, { + endpoint: endpoint2, + defaults: withDefaults2.bind(null, endpoint2) + }); +} +var request = withDefaults2(endpoint, defaults_default); + +// node_modules/@octokit/graphql/dist-bundle/index.js +var VERSION3 = "0.0.0-development"; +function _buildMessageForResponseErrors(data) { + return `Request failed due to following response errors: +` + data.errors.map((e) => ` - ${e.message}`).join("\n"); +} +var GraphqlResponseError = class extends Error { + constructor(request2, headers, response) { + super(_buildMessageForResponseErrors(response)); + this.request = request2; + this.headers = headers; + this.response = response; + this.errors = response.errors; + this.data = response.data; + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + } + name = "GraphqlResponseError"; + errors; + data; +}; +var NON_VARIABLE_OPTIONS = [ + "method", + "baseUrl", + "url", + "headers", + "request", + "query", + "mediaType", + "operationName" +]; +var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; +var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; +function graphql(request2, query, options) { + if (options) { + if (typeof query === "string" && "query" in options) { + return Promise.reject( + new Error(`[@octokit/graphql] "query" cannot be used as variable name`) + ); + } + for (const key in options) { + if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; + return Promise.reject( + new Error( + `[@octokit/graphql] "${key}" cannot be used as variable name` + ) + ); + } + } + const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query; + const requestOptions = Object.keys( + parsedOptions + ).reduce((result, key) => { + if (NON_VARIABLE_OPTIONS.includes(key)) { + result[key] = parsedOptions[key]; + return result; + } + if (!result.variables) { + result.variables = {}; + } + result.variables[key] = parsedOptions[key]; + return result; + }, {}); + const baseUrl2 = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl; + if (GHES_V3_SUFFIX_REGEX.test(baseUrl2)) { + requestOptions.url = baseUrl2.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); + } + return request2(requestOptions).then((response) => { + if (response.data.errors) { + const headers = {}; + for (const key of Object.keys(response.headers)) { + headers[key] = response.headers[key]; + } + throw new GraphqlResponseError( + requestOptions, + headers, + response.data + ); + } + return response.data.data; + }); +} +function withDefaults3(request2, newDefaults) { + const newRequest = request2.defaults(newDefaults); + const newApi = (query, options) => { + return graphql(newRequest, query, options); + }; + return Object.assign(newApi, { + defaults: withDefaults3.bind(null, newRequest), + endpoint: newRequest.endpoint + }); +} +var graphql2 = withDefaults3(request, { + headers: { + "user-agent": `octokit-graphql.js/${VERSION3} ${getUserAgent()}` + }, + method: "POST", + url: "/graphql" +}); +function withCustomRequest(customRequest) { + return withDefaults3(customRequest, { + method: "POST", + url: "/graphql" + }); +} + +// node_modules/@octokit/auth-token/dist-bundle/index.js +var b64url = "(?:[a-zA-Z0-9_-]+)"; +var sep2 = "\\."; +var jwtRE = new RegExp(`^${b64url}${sep2}${b64url}${sep2}${b64url}$`); +var isJWT = jwtRE.test.bind(jwtRE); +async function auth(token) { + const isApp = isJWT(token); + const isInstallation = token.startsWith("v1.") || token.startsWith("ghs_"); + const isUserToServer = token.startsWith("ghu_"); + const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; + return { + type: "token", + token, + tokenType + }; +} +function withAuthorizationPrefix(token) { + if (token.split(/\./).length === 3) { + return `bearer ${token}`; + } + return `token ${token}`; +} +async function hook(token, request2, route, parameters) { + const endpoint2 = request2.endpoint.merge( + route, + parameters + ); + endpoint2.headers.authorization = withAuthorizationPrefix(token); + return request2(endpoint2); +} +var createTokenAuth = function createTokenAuth2(token) { + if (!token) { + throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); + } + if (typeof token !== "string") { + throw new Error( + "[@octokit/auth-token] Token passed to createTokenAuth is not a string" + ); + } + token = token.replace(/^(token|bearer) +/i, ""); + return Object.assign(auth.bind(null, token), { + hook: hook.bind(null, token) + }); +}; + +// node_modules/@octokit/core/dist-src/version.js +var VERSION4 = "7.0.6"; + +// node_modules/@octokit/core/dist-src/index.js +var noop2 = () => { +}; +var consoleWarn = console.warn.bind(console); +var consoleError = console.error.bind(console); +function createLogger(logger = {}) { + if (typeof logger.debug !== "function") { + logger.debug = noop2; + } + if (typeof logger.info !== "function") { + logger.info = noop2; + } + if (typeof logger.warn !== "function") { + logger.warn = consoleWarn; + } + if (typeof logger.error !== "function") { + logger.error = consoleError; + } + return logger; +} +var userAgentTrail = `octokit-core.js/${VERSION4} ${getUserAgent()}`; +var Octokit = class { + static VERSION = VERSION4; + static defaults(defaults2) { + const OctokitWithDefaults = class extends this { + constructor(...args) { + const options = args[0] || {}; + if (typeof defaults2 === "function") { + super(defaults2(options)); + return; + } + super( + Object.assign( + {}, + defaults2, + options, + options.userAgent && defaults2.userAgent ? { + userAgent: `${options.userAgent} ${defaults2.userAgent}` + } : null + ) + ); + } + }; + return OctokitWithDefaults; + } + static plugins = []; + /** + * Attach a plugin (or many) to your Octokit instance. + * + * @example + * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) + */ + static plugin(...newPlugins) { + const currentPlugins = this.plugins; + const NewOctokit = class extends this { + static plugins = currentPlugins.concat( + newPlugins.filter((plugin) => !currentPlugins.includes(plugin)) + ); + }; + return NewOctokit; + } + constructor(options = {}) { + const hook2 = new before_after_hook_default.Collection(); + const requestDefaults = { + baseUrl: request.endpoint.DEFAULTS.baseUrl, + headers: {}, + request: Object.assign({}, options.request, { + // @ts-ignore internal usage only, no need to type + hook: hook2.bind(null, "request") + }), + mediaType: { + previews: [], + format: "" + } + }; + requestDefaults.headers["user-agent"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail; + if (options.baseUrl) { + requestDefaults.baseUrl = options.baseUrl; + } + if (options.previews) { + requestDefaults.mediaType.previews = options.previews; + } + if (options.timeZone) { + requestDefaults.headers["time-zone"] = options.timeZone; + } + this.request = request.defaults(requestDefaults); + this.graphql = withCustomRequest(this.request).defaults(requestDefaults); + this.log = createLogger(options.log); + this.hook = hook2; + if (!options.authStrategy) { + if (!options.auth) { + this.auth = async () => ({ + type: "unauthenticated" + }); + } else { + const auth2 = createTokenAuth(options.auth); + hook2.wrap("request", auth2.hook); + this.auth = auth2; + } + } else { + const { authStrategy, ...otherOptions } = options; + const auth2 = authStrategy( + Object.assign( + { + request: this.request, + log: this.log, + // we pass the current octokit instance as well as its constructor options + // to allow for authentication strategies that return a new octokit instance + // that shares the same internal state as the current one. The original + // requirement for this was the "event-octokit" authentication strategy + // of https://github.com/probot/octokit-auth-probot. + octokit: this, + octokitOptions: otherOptions + }, + options.auth + ) + ); + hook2.wrap("request", auth2.hook); + this.auth = auth2; + } + const classConstructor = this.constructor; + for (let i = 0; i < classConstructor.plugins.length; ++i) { + Object.assign(this, classConstructor.plugins[i](this, options)); + } + } + // assigned during constructor + request; + graphql; + log; + hook; + // TODO: type `octokit.auth` based on passed options.authStrategy + auth; +}; + +// node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/version.js +var VERSION5 = "17.0.0"; + +// node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/generated/endpoints.js +var Endpoints = { + actions: { + addCustomLabelsToSelfHostedRunnerForOrg: [ + "POST /orgs/{org}/actions/runners/{runner_id}/labels" + ], + addCustomLabelsToSelfHostedRunnerForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + addRepoAccessToSelfHostedRunnerGroupInOrg: [ + "PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}" + ], + addSelectedRepoToOrgSecret: [ + "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" + ], + addSelectedRepoToOrgVariable: [ + "PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" + ], + approveWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve" + ], + cancelWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel" + ], + createEnvironmentVariable: [ + "POST /repos/{owner}/{repo}/environments/{environment_name}/variables" + ], + createHostedRunnerForOrg: ["POST /orgs/{org}/actions/hosted-runners"], + createOrUpdateEnvironmentSecret: [ + "PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" + ], + createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], + createOrUpdateRepoSecret: [ + "PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}" + ], + createOrgVariable: ["POST /orgs/{org}/actions/variables"], + createRegistrationTokenForOrg: [ + "POST /orgs/{org}/actions/runners/registration-token" + ], + createRegistrationTokenForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/registration-token" + ], + createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], + createRemoveTokenForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/remove-token" + ], + createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"], + createWorkflowDispatch: [ + "POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches" + ], + deleteActionsCacheById: [ + "DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}" + ], + deleteActionsCacheByKey: [ + "DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}" + ], + deleteArtifact: [ + "DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}" + ], + deleteCustomImageFromOrg: [ + "DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}" + ], + deleteCustomImageVersionFromOrg: [ + "DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}" + ], + deleteEnvironmentSecret: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" + ], + deleteEnvironmentVariable: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" + ], + deleteHostedRunnerForOrg: [ + "DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}" + ], + deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], + deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"], + deleteRepoSecret: [ + "DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}" + ], + deleteRepoVariable: [ + "DELETE /repos/{owner}/{repo}/actions/variables/{name}" + ], + deleteSelfHostedRunnerFromOrg: [ + "DELETE /orgs/{org}/actions/runners/{runner_id}" + ], + deleteSelfHostedRunnerFromRepo: [ + "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}" + ], + deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], + deleteWorkflowRunLogs: [ + "DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs" + ], + disableSelectedRepositoryGithubActionsOrganization: [ + "DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}" + ], + disableWorkflow: [ + "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable" + ], + downloadArtifact: [ + "GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}" + ], + downloadJobLogsForWorkflowRun: [ + "GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs" + ], + downloadWorkflowRunAttemptLogs: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs" + ], + downloadWorkflowRunLogs: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs" + ], + enableSelectedRepositoryGithubActionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/repositories/{repository_id}" + ], + enableWorkflow: [ + "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable" + ], + forceCancelWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel" + ], + generateRunnerJitconfigForOrg: [ + "POST /orgs/{org}/actions/runners/generate-jitconfig" + ], + generateRunnerJitconfigForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig" + ], + getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"], + getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"], + getActionsCacheUsageByRepoForOrg: [ + "GET /orgs/{org}/actions/cache/usage-by-repository" + ], + getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"], + getAllowedActionsOrganization: [ + "GET /orgs/{org}/actions/permissions/selected-actions" + ], + getAllowedActionsRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" + ], + getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], + getCustomImageForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}" + ], + getCustomImageVersionForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}" + ], + getCustomOidcSubClaimForRepo: [ + "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], + getEnvironmentPublicKey: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key" + ], + getEnvironmentSecret: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" + ], + getEnvironmentVariable: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" + ], + getGithubActionsDefaultWorkflowPermissionsOrganization: [ + "GET /orgs/{org}/actions/permissions/workflow" + ], + getGithubActionsDefaultWorkflowPermissionsRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions/workflow" + ], + getGithubActionsPermissionsOrganization: [ + "GET /orgs/{org}/actions/permissions" + ], + getGithubActionsPermissionsRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions" + ], + getHostedRunnerForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}" + ], + getHostedRunnersGithubOwnedImagesForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/github-owned" + ], + getHostedRunnersLimitsForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/limits" + ], + getHostedRunnersMachineSpecsForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/machine-sizes" + ], + getHostedRunnersPartnerImagesForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/partner" + ], + getHostedRunnersPlatformsForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/platforms" + ], + getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], + getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], + getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"], + getPendingDeploymentsForRun: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" + ], + getRepoPermissions: [ + "GET /repos/{owner}/{repo}/actions/permissions", + {}, + { renamed: ["actions", "getGithubActionsPermissionsRepository"] } + ], + getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], + getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], + getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"], + getReviewsForRun: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals" + ], + getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], + getSelfHostedRunnerForRepo: [ + "GET /repos/{owner}/{repo}/actions/runners/{runner_id}" + ], + getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], + getWorkflowAccessToRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions/access" + ], + getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], + getWorkflowRunAttempt: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}" + ], + getWorkflowRunUsage: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing" + ], + getWorkflowUsage: [ + "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing" + ], + listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], + listCustomImageVersionsForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions" + ], + listCustomImagesForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/custom" + ], + listEnvironmentSecrets: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets" + ], + listEnvironmentVariables: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/variables" + ], + listGithubHostedRunnersInGroupForOrg: [ + "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners" + ], + listHostedRunnersForOrg: ["GET /orgs/{org}/actions/hosted-runners"], + listJobsForWorkflowRun: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs" + ], + listJobsForWorkflowRunAttempt: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs" + ], + listLabelsForSelfHostedRunnerForOrg: [ + "GET /orgs/{org}/actions/runners/{runner_id}/labels" + ], + listLabelsForSelfHostedRunnerForRepo: [ + "GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], + listOrgVariables: ["GET /orgs/{org}/actions/variables"], + listRepoOrganizationSecrets: [ + "GET /repos/{owner}/{repo}/actions/organization-secrets" + ], + listRepoOrganizationVariables: [ + "GET /repos/{owner}/{repo}/actions/organization-variables" + ], + listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], + listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"], + listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], + listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], + listRunnerApplicationsForRepo: [ + "GET /repos/{owner}/{repo}/actions/runners/downloads" + ], + listSelectedReposForOrgSecret: [ + "GET /orgs/{org}/actions/secrets/{secret_name}/repositories" + ], + listSelectedReposForOrgVariable: [ + "GET /orgs/{org}/actions/variables/{name}/repositories" + ], + listSelectedRepositoriesEnabledGithubActionsOrganization: [ + "GET /orgs/{org}/actions/permissions/repositories" + ], + listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], + listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], + listWorkflowRunArtifacts: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts" + ], + listWorkflowRuns: [ + "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs" + ], + listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], + reRunJobForWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun" + ], + reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], + reRunWorkflowFailedJobs: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs" + ], + removeAllCustomLabelsFromSelfHostedRunnerForOrg: [ + "DELETE /orgs/{org}/actions/runners/{runner_id}/labels" + ], + removeAllCustomLabelsFromSelfHostedRunnerForRepo: [ + "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + removeCustomLabelFromSelfHostedRunnerForOrg: [ + "DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}" + ], + removeCustomLabelFromSelfHostedRunnerForRepo: [ + "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}" + ], + removeSelectedRepoFromOrgSecret: [ + "DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" + ], + removeSelectedRepoFromOrgVariable: [ + "DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" + ], + reviewCustomGatesForRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule" + ], + reviewPendingDeploymentsForRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" + ], + setAllowedActionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/selected-actions" + ], + setAllowedActionsRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions/selected-actions" + ], + setCustomLabelsForSelfHostedRunnerForOrg: [ + "PUT /orgs/{org}/actions/runners/{runner_id}/labels" + ], + setCustomLabelsForSelfHostedRunnerForRepo: [ + "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + setCustomOidcSubClaimForRepo: [ + "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], + setGithubActionsDefaultWorkflowPermissionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/workflow" + ], + setGithubActionsDefaultWorkflowPermissionsRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions/workflow" + ], + setGithubActionsPermissionsOrganization: [ + "PUT /orgs/{org}/actions/permissions" + ], + setGithubActionsPermissionsRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions" + ], + setSelectedReposForOrgSecret: [ + "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories" + ], + setSelectedReposForOrgVariable: [ + "PUT /orgs/{org}/actions/variables/{name}/repositories" + ], + setSelectedRepositoriesEnabledGithubActionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/repositories" + ], + setWorkflowAccessToRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions/access" + ], + updateEnvironmentVariable: [ + "PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" + ], + updateHostedRunnerForOrg: [ + "PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}" + ], + updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"], + updateRepoVariable: [ + "PATCH /repos/{owner}/{repo}/actions/variables/{name}" + ] + }, + activity: { + checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], + deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], + deleteThreadSubscription: [ + "DELETE /notifications/threads/{thread_id}/subscription" + ], + getFeeds: ["GET /feeds"], + getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], + getThread: ["GET /notifications/threads/{thread_id}"], + getThreadSubscriptionForAuthenticatedUser: [ + "GET /notifications/threads/{thread_id}/subscription" + ], + listEventsForAuthenticatedUser: ["GET /users/{username}/events"], + listNotificationsForAuthenticatedUser: ["GET /notifications"], + listOrgEventsForAuthenticatedUser: [ + "GET /users/{username}/events/orgs/{org}" + ], + listPublicEvents: ["GET /events"], + listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], + listPublicEventsForUser: ["GET /users/{username}/events/public"], + listPublicOrgEvents: ["GET /orgs/{org}/events"], + listReceivedEventsForUser: ["GET /users/{username}/received_events"], + listReceivedPublicEventsForUser: [ + "GET /users/{username}/received_events/public" + ], + listRepoEvents: ["GET /repos/{owner}/{repo}/events"], + listRepoNotificationsForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/notifications" + ], + listReposStarredByAuthenticatedUser: ["GET /user/starred"], + listReposStarredByUser: ["GET /users/{username}/starred"], + listReposWatchedByUser: ["GET /users/{username}/subscriptions"], + listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], + listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], + listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], + markNotificationsAsRead: ["PUT /notifications"], + markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], + markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], + markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], + setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], + setThreadSubscription: [ + "PUT /notifications/threads/{thread_id}/subscription" + ], + starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], + unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] + }, + apps: { + addRepoToInstallation: [ + "PUT /user/installations/{installation_id}/repositories/{repository_id}", + {}, + { renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] } + ], + addRepoToInstallationForAuthenticatedUser: [ + "PUT /user/installations/{installation_id}/repositories/{repository_id}" + ], + checkToken: ["POST /applications/{client_id}/token"], + createFromManifest: ["POST /app-manifests/{code}/conversions"], + createInstallationAccessToken: [ + "POST /app/installations/{installation_id}/access_tokens" + ], + deleteAuthorization: ["DELETE /applications/{client_id}/grant"], + deleteInstallation: ["DELETE /app/installations/{installation_id}"], + deleteToken: ["DELETE /applications/{client_id}/token"], + getAuthenticated: ["GET /app"], + getBySlug: ["GET /apps/{app_slug}"], + getInstallation: ["GET /app/installations/{installation_id}"], + getOrgInstallation: ["GET /orgs/{org}/installation"], + getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], + getSubscriptionPlanForAccount: [ + "GET /marketplace_listing/accounts/{account_id}" + ], + getSubscriptionPlanForAccountStubbed: [ + "GET /marketplace_listing/stubbed/accounts/{account_id}" + ], + getUserInstallation: ["GET /users/{username}/installation"], + getWebhookConfigForApp: ["GET /app/hook/config"], + getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"], + listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], + listAccountsForPlanStubbed: [ + "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts" + ], + listInstallationReposForAuthenticatedUser: [ + "GET /user/installations/{installation_id}/repositories" + ], + listInstallationRequestsForAuthenticatedApp: [ + "GET /app/installation-requests" + ], + listInstallations: ["GET /app/installations"], + listInstallationsForAuthenticatedUser: ["GET /user/installations"], + listPlans: ["GET /marketplace_listing/plans"], + listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], + listReposAccessibleToInstallation: ["GET /installation/repositories"], + listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], + listSubscriptionsForAuthenticatedUserStubbed: [ + "GET /user/marketplace_purchases/stubbed" + ], + listWebhookDeliveries: ["GET /app/hook/deliveries"], + redeliverWebhookDelivery: [ + "POST /app/hook/deliveries/{delivery_id}/attempts" + ], + removeRepoFromInstallation: [ + "DELETE /user/installations/{installation_id}/repositories/{repository_id}", + {}, + { renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] } + ], + removeRepoFromInstallationForAuthenticatedUser: [ + "DELETE /user/installations/{installation_id}/repositories/{repository_id}" + ], + resetToken: ["PATCH /applications/{client_id}/token"], + revokeInstallationAccessToken: ["DELETE /installation/token"], + scopeToken: ["POST /applications/{client_id}/token/scoped"], + suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], + unsuspendInstallation: [ + "DELETE /app/installations/{installation_id}/suspended" + ], + updateWebhookConfigForApp: ["PATCH /app/hook/config"] + }, + billing: { + getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], + getGithubActionsBillingUser: [ + "GET /users/{username}/settings/billing/actions" + ], + getGithubBillingPremiumRequestUsageReportOrg: [ + "GET /organizations/{org}/settings/billing/premium_request/usage" + ], + getGithubBillingPremiumRequestUsageReportUser: [ + "GET /users/{username}/settings/billing/premium_request/usage" + ], + getGithubBillingUsageReportOrg: [ + "GET /organizations/{org}/settings/billing/usage" + ], + getGithubBillingUsageReportUser: [ + "GET /users/{username}/settings/billing/usage" + ], + getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], + getGithubPackagesBillingUser: [ + "GET /users/{username}/settings/billing/packages" + ], + getSharedStorageBillingOrg: [ + "GET /orgs/{org}/settings/billing/shared-storage" + ], + getSharedStorageBillingUser: [ + "GET /users/{username}/settings/billing/shared-storage" + ] + }, + campaigns: { + createCampaign: ["POST /orgs/{org}/campaigns"], + deleteCampaign: ["DELETE /orgs/{org}/campaigns/{campaign_number}"], + getCampaignSummary: ["GET /orgs/{org}/campaigns/{campaign_number}"], + listOrgCampaigns: ["GET /orgs/{org}/campaigns"], + updateCampaign: ["PATCH /orgs/{org}/campaigns/{campaign_number}"] + }, + checks: { + create: ["POST /repos/{owner}/{repo}/check-runs"], + createSuite: ["POST /repos/{owner}/{repo}/check-suites"], + get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], + getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], + listAnnotations: [ + "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations" + ], + listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], + listForSuite: [ + "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs" + ], + listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], + rerequestRun: [ + "POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest" + ], + rerequestSuite: [ + "POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest" + ], + setSuitesPreferences: [ + "PATCH /repos/{owner}/{repo}/check-suites/preferences" + ], + update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] + }, + codeScanning: { + commitAutofix: [ + "POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits" + ], + createAutofix: [ + "POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix" + ], + createVariantAnalysis: [ + "POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses" + ], + deleteAnalysis: [ + "DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}" + ], + deleteCodeqlDatabase: [ + "DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}" + ], + getAlert: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", + {}, + { renamedParameters: { alert_id: "alert_number" } } + ], + getAnalysis: [ + "GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}" + ], + getAutofix: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix" + ], + getCodeqlDatabase: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}" + ], + getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"], + getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"], + getVariantAnalysis: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}" + ], + getVariantAnalysisRepoTask: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}" + ], + listAlertInstances: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances" + ], + listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"], + listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], + listAlertsInstances: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", + {}, + { renamed: ["codeScanning", "listAlertInstances"] } + ], + listCodeqlDatabases: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/databases" + ], + listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], + updateAlert: [ + "PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}" + ], + updateDefaultSetup: [ + "PATCH /repos/{owner}/{repo}/code-scanning/default-setup" + ], + uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] + }, + codeSecurity: { + attachConfiguration: [ + "POST /orgs/{org}/code-security/configurations/{configuration_id}/attach" + ], + attachEnterpriseConfiguration: [ + "POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach" + ], + createConfiguration: ["POST /orgs/{org}/code-security/configurations"], + createConfigurationForEnterprise: [ + "POST /enterprises/{enterprise}/code-security/configurations" + ], + deleteConfiguration: [ + "DELETE /orgs/{org}/code-security/configurations/{configuration_id}" + ], + deleteConfigurationForEnterprise: [ + "DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}" + ], + detachConfiguration: [ + "DELETE /orgs/{org}/code-security/configurations/detach" + ], + getConfiguration: [ + "GET /orgs/{org}/code-security/configurations/{configuration_id}" + ], + getConfigurationForRepository: [ + "GET /repos/{owner}/{repo}/code-security-configuration" + ], + getConfigurationsForEnterprise: [ + "GET /enterprises/{enterprise}/code-security/configurations" + ], + getConfigurationsForOrg: ["GET /orgs/{org}/code-security/configurations"], + getDefaultConfigurations: [ + "GET /orgs/{org}/code-security/configurations/defaults" + ], + getDefaultConfigurationsForEnterprise: [ + "GET /enterprises/{enterprise}/code-security/configurations/defaults" + ], + getRepositoriesForConfiguration: [ + "GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories" + ], + getRepositoriesForEnterpriseConfiguration: [ + "GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories" + ], + getSingleConfigurationForEnterprise: [ + "GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}" + ], + setConfigurationAsDefault: [ + "PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults" + ], + setConfigurationAsDefaultForEnterprise: [ + "PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults" + ], + updateConfiguration: [ + "PATCH /orgs/{org}/code-security/configurations/{configuration_id}" + ], + updateEnterpriseConfiguration: [ + "PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}" + ] + }, + codesOfConduct: { + getAllCodesOfConduct: ["GET /codes_of_conduct"], + getConductCode: ["GET /codes_of_conduct/{key}"] + }, + codespaces: { + addRepositoryForSecretForAuthenticatedUser: [ + "PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + addSelectedRepoToOrgSecret: [ + "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + checkPermissionsForDevcontainer: [ + "GET /repos/{owner}/{repo}/codespaces/permissions_check" + ], + codespaceMachinesForAuthenticatedUser: [ + "GET /user/codespaces/{codespace_name}/machines" + ], + createForAuthenticatedUser: ["POST /user/codespaces"], + createOrUpdateOrgSecret: [ + "PUT /orgs/{org}/codespaces/secrets/{secret_name}" + ], + createOrUpdateRepoSecret: [ + "PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" + ], + createOrUpdateSecretForAuthenticatedUser: [ + "PUT /user/codespaces/secrets/{secret_name}" + ], + createWithPrForAuthenticatedUser: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces" + ], + createWithRepoForAuthenticatedUser: [ + "POST /repos/{owner}/{repo}/codespaces" + ], + deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"], + deleteFromOrganization: [ + "DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}" + ], + deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"], + deleteRepoSecret: [ + "DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" + ], + deleteSecretForAuthenticatedUser: [ + "DELETE /user/codespaces/secrets/{secret_name}" + ], + exportForAuthenticatedUser: [ + "POST /user/codespaces/{codespace_name}/exports" + ], + getCodespacesForUserInOrg: [ + "GET /orgs/{org}/members/{username}/codespaces" + ], + getExportDetailsForAuthenticatedUser: [ + "GET /user/codespaces/{codespace_name}/exports/{export_id}" + ], + getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"], + getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"], + getPublicKeyForAuthenticatedUser: [ + "GET /user/codespaces/secrets/public-key" + ], + getRepoPublicKey: [ + "GET /repos/{owner}/{repo}/codespaces/secrets/public-key" + ], + getRepoSecret: [ + "GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" + ], + getSecretForAuthenticatedUser: [ + "GET /user/codespaces/secrets/{secret_name}" + ], + listDevcontainersInRepositoryForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces/devcontainers" + ], + listForAuthenticatedUser: ["GET /user/codespaces"], + listInOrganization: [ + "GET /orgs/{org}/codespaces", + {}, + { renamedParameters: { org_id: "org" } } + ], + listInRepositoryForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces" + ], + listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"], + listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"], + listRepositoriesForSecretForAuthenticatedUser: [ + "GET /user/codespaces/secrets/{secret_name}/repositories" + ], + listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"], + listSelectedReposForOrgSecret: [ + "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories" + ], + preFlightWithRepoForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces/new" + ], + publishForAuthenticatedUser: [ + "POST /user/codespaces/{codespace_name}/publish" + ], + removeRepositoryForSecretForAuthenticatedUser: [ + "DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + removeSelectedRepoFromOrgSecret: [ + "DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + repoMachinesForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces/machines" + ], + setRepositoriesForSecretForAuthenticatedUser: [ + "PUT /user/codespaces/secrets/{secret_name}/repositories" + ], + setSelectedReposForOrgSecret: [ + "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories" + ], + startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"], + stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"], + stopInOrganization: [ + "POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop" + ], + updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] + }, + copilot: { + addCopilotSeatsForTeams: [ + "POST /orgs/{org}/copilot/billing/selected_teams" + ], + addCopilotSeatsForUsers: [ + "POST /orgs/{org}/copilot/billing/selected_users" + ], + cancelCopilotSeatAssignmentForTeams: [ + "DELETE /orgs/{org}/copilot/billing/selected_teams" + ], + cancelCopilotSeatAssignmentForUsers: [ + "DELETE /orgs/{org}/copilot/billing/selected_users" + ], + copilotMetricsForOrganization: ["GET /orgs/{org}/copilot/metrics"], + copilotMetricsForTeam: ["GET /orgs/{org}/team/{team_slug}/copilot/metrics"], + getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"], + getCopilotSeatDetailsForUser: [ + "GET /orgs/{org}/members/{username}/copilot" + ], + listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"] + }, + credentials: { revoke: ["POST /credentials/revoke"] }, + dependabot: { + addSelectedRepoToOrgSecret: [ + "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" + ], + createOrUpdateOrgSecret: [ + "PUT /orgs/{org}/dependabot/secrets/{secret_name}" + ], + createOrUpdateRepoSecret: [ + "PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" + ], + deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"], + deleteRepoSecret: [ + "DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" + ], + getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"], + getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"], + getRepoPublicKey: [ + "GET /repos/{owner}/{repo}/dependabot/secrets/public-key" + ], + getRepoSecret: [ + "GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" + ], + listAlertsForEnterprise: [ + "GET /enterprises/{enterprise}/dependabot/alerts" + ], + listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"], + listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"], + listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"], + listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"], + listSelectedReposForOrgSecret: [ + "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories" + ], + removeSelectedRepoFromOrgSecret: [ + "DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" + ], + repositoryAccessForOrg: [ + "GET /organizations/{org}/dependabot/repository-access" + ], + setRepositoryAccessDefaultLevel: [ + "PUT /organizations/{org}/dependabot/repository-access/default-level" + ], + setSelectedReposForOrgSecret: [ + "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories" + ], + updateAlert: [ + "PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}" + ], + updateRepositoryAccessForOrg: [ + "PATCH /organizations/{org}/dependabot/repository-access" + ] + }, + dependencyGraph: { + createRepositorySnapshot: [ + "POST /repos/{owner}/{repo}/dependency-graph/snapshots" + ], + diffRange: [ + "GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}" + ], + exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"] + }, + emojis: { get: ["GET /emojis"] }, + enterpriseTeamMemberships: { + add: [ + "PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}" + ], + bulkAdd: [ + "POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add" + ], + bulkRemove: [ + "POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove" + ], + get: [ + "GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}" + ], + list: ["GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships"], + remove: [ + "DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}" + ] + }, + enterpriseTeamOrganizations: { + add: [ + "PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}" + ], + bulkAdd: [ + "POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add" + ], + bulkRemove: [ + "POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove" + ], + delete: [ + "DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}" + ], + getAssignment: [ + "GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}" + ], + getAssignments: [ + "GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations" + ] + }, + enterpriseTeams: { + create: ["POST /enterprises/{enterprise}/teams"], + delete: ["DELETE /enterprises/{enterprise}/teams/{team_slug}"], + get: ["GET /enterprises/{enterprise}/teams/{team_slug}"], + list: ["GET /enterprises/{enterprise}/teams"], + update: ["PATCH /enterprises/{enterprise}/teams/{team_slug}"] + }, + gists: { + checkIsStarred: ["GET /gists/{gist_id}/star"], + create: ["POST /gists"], + createComment: ["POST /gists/{gist_id}/comments"], + delete: ["DELETE /gists/{gist_id}"], + deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], + fork: ["POST /gists/{gist_id}/forks"], + get: ["GET /gists/{gist_id}"], + getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], + getRevision: ["GET /gists/{gist_id}/{sha}"], + list: ["GET /gists"], + listComments: ["GET /gists/{gist_id}/comments"], + listCommits: ["GET /gists/{gist_id}/commits"], + listForUser: ["GET /users/{username}/gists"], + listForks: ["GET /gists/{gist_id}/forks"], + listPublic: ["GET /gists/public"], + listStarred: ["GET /gists/starred"], + star: ["PUT /gists/{gist_id}/star"], + unstar: ["DELETE /gists/{gist_id}/star"], + update: ["PATCH /gists/{gist_id}"], + updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] + }, + git: { + createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], + createCommit: ["POST /repos/{owner}/{repo}/git/commits"], + createRef: ["POST /repos/{owner}/{repo}/git/refs"], + createTag: ["POST /repos/{owner}/{repo}/git/tags"], + createTree: ["POST /repos/{owner}/{repo}/git/trees"], + deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], + getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], + getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], + getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], + getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], + getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], + listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], + updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] + }, + gitignore: { + getAllTemplates: ["GET /gitignore/templates"], + getTemplate: ["GET /gitignore/templates/{name}"] + }, + hostedCompute: { + createNetworkConfigurationForOrg: [ + "POST /orgs/{org}/settings/network-configurations" + ], + deleteNetworkConfigurationFromOrg: [ + "DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}" + ], + getNetworkConfigurationForOrg: [ + "GET /orgs/{org}/settings/network-configurations/{network_configuration_id}" + ], + getNetworkSettingsForOrg: [ + "GET /orgs/{org}/settings/network-settings/{network_settings_id}" + ], + listNetworkConfigurationsForOrg: [ + "GET /orgs/{org}/settings/network-configurations" + ], + updateNetworkConfigurationForOrg: [ + "PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}" + ] + }, + interactions: { + getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], + getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], + getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], + getRestrictionsForYourPublicRepos: [ + "GET /user/interaction-limits", + {}, + { renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] } + ], + removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], + removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], + removeRestrictionsForRepo: [ + "DELETE /repos/{owner}/{repo}/interaction-limits" + ], + removeRestrictionsForYourPublicRepos: [ + "DELETE /user/interaction-limits", + {}, + { renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] } + ], + setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], + setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], + setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], + setRestrictionsForYourPublicRepos: [ + "PUT /user/interaction-limits", + {}, + { renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] } + ] + }, + issues: { + addAssignees: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/assignees" + ], + addBlockedByDependency: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by" + ], + addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], + addSubIssue: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues" + ], + checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], + checkUserCanBeAssignedToIssue: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}" + ], + create: ["POST /repos/{owner}/{repo}/issues"], + createComment: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/comments" + ], + createLabel: ["POST /repos/{owner}/{repo}/labels"], + createMilestone: ["POST /repos/{owner}/{repo}/milestones"], + deleteComment: [ + "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}" + ], + deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], + deleteMilestone: [ + "DELETE /repos/{owner}/{repo}/milestones/{milestone_number}" + ], + get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], + getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], + getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], + getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], + getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], + getParent: ["GET /repos/{owner}/{repo}/issues/{issue_number}/parent"], + list: ["GET /issues"], + listAssignees: ["GET /repos/{owner}/{repo}/assignees"], + listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], + listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], + listDependenciesBlockedBy: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by" + ], + listDependenciesBlocking: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking" + ], + listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], + listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], + listEventsForTimeline: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline" + ], + listForAuthenticatedUser: ["GET /user/issues"], + listForOrg: ["GET /orgs/{org}/issues"], + listForRepo: ["GET /repos/{owner}/{repo}/issues"], + listLabelsForMilestone: [ + "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels" + ], + listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], + listLabelsOnIssue: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/labels" + ], + listMilestones: ["GET /repos/{owner}/{repo}/milestones"], + listSubIssues: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues" + ], + lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], + removeAllLabels: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels" + ], + removeAssignees: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees" + ], + removeDependencyBlockedBy: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}" + ], + removeLabel: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}" + ], + removeSubIssue: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue" + ], + reprioritizeSubIssue: [ + "PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority" + ], + setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], + unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], + update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], + updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], + updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], + updateMilestone: [ + "PATCH /repos/{owner}/{repo}/milestones/{milestone_number}" + ] + }, + licenses: { + get: ["GET /licenses/{license}"], + getAllCommonlyUsed: ["GET /licenses"], + getForRepo: ["GET /repos/{owner}/{repo}/license"] + }, + markdown: { + render: ["POST /markdown"], + renderRaw: [ + "POST /markdown/raw", + { headers: { "content-type": "text/plain; charset=utf-8" } } + ] + }, + meta: { + get: ["GET /meta"], + getAllVersions: ["GET /versions"], + getOctocat: ["GET /octocat"], + getZen: ["GET /zen"], + root: ["GET /"] + }, + migrations: { + deleteArchiveForAuthenticatedUser: [ + "DELETE /user/migrations/{migration_id}/archive" + ], + deleteArchiveForOrg: [ + "DELETE /orgs/{org}/migrations/{migration_id}/archive" + ], + downloadArchiveForOrg: [ + "GET /orgs/{org}/migrations/{migration_id}/archive" + ], + getArchiveForAuthenticatedUser: [ + "GET /user/migrations/{migration_id}/archive" + ], + getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"], + getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"], + listForAuthenticatedUser: ["GET /user/migrations"], + listForOrg: ["GET /orgs/{org}/migrations"], + listReposForAuthenticatedUser: [ + "GET /user/migrations/{migration_id}/repositories" + ], + listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"], + listReposForUser: [ + "GET /user/migrations/{migration_id}/repositories", + {}, + { renamed: ["migrations", "listReposForAuthenticatedUser"] } + ], + startForAuthenticatedUser: ["POST /user/migrations"], + startForOrg: ["POST /orgs/{org}/migrations"], + unlockRepoForAuthenticatedUser: [ + "DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock" + ], + unlockRepoForOrg: [ + "DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock" + ] + }, + oidc: { + getOidcCustomSubTemplateForOrg: [ + "GET /orgs/{org}/actions/oidc/customization/sub" + ], + updateOidcCustomSubTemplateForOrg: [ + "PUT /orgs/{org}/actions/oidc/customization/sub" + ] + }, + orgs: { + addSecurityManagerTeam: [ + "PUT /orgs/{org}/security-managers/teams/{team_slug}", + {}, + { + deprecated: "octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team" + } + ], + assignTeamToOrgRole: [ + "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + assignUserToOrgRole: [ + "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], + blockUser: ["PUT /orgs/{org}/blocks/{username}"], + cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], + checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], + checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], + checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], + convertMemberToOutsideCollaborator: [ + "PUT /orgs/{org}/outside_collaborators/{username}" + ], + createArtifactStorageRecord: [ + "POST /orgs/{org}/artifacts/metadata/storage-record" + ], + createInvitation: ["POST /orgs/{org}/invitations"], + createIssueType: ["POST /orgs/{org}/issue-types"], + createWebhook: ["POST /orgs/{org}/hooks"], + customPropertiesForOrgsCreateOrUpdateOrganizationValues: [ + "PATCH /organizations/{org}/org-properties/values" + ], + customPropertiesForOrgsGetOrganizationValues: [ + "GET /organizations/{org}/org-properties/values" + ], + customPropertiesForReposCreateOrUpdateOrganizationDefinition: [ + "PUT /orgs/{org}/properties/schema/{custom_property_name}" + ], + customPropertiesForReposCreateOrUpdateOrganizationDefinitions: [ + "PATCH /orgs/{org}/properties/schema" + ], + customPropertiesForReposCreateOrUpdateOrganizationValues: [ + "PATCH /orgs/{org}/properties/values" + ], + customPropertiesForReposDeleteOrganizationDefinition: [ + "DELETE /orgs/{org}/properties/schema/{custom_property_name}" + ], + customPropertiesForReposGetOrganizationDefinition: [ + "GET /orgs/{org}/properties/schema/{custom_property_name}" + ], + customPropertiesForReposGetOrganizationDefinitions: [ + "GET /orgs/{org}/properties/schema" + ], + customPropertiesForReposGetOrganizationValues: [ + "GET /orgs/{org}/properties/values" + ], + delete: ["DELETE /orgs/{org}"], + deleteAttestationsBulk: ["POST /orgs/{org}/attestations/delete-request"], + deleteAttestationsById: [ + "DELETE /orgs/{org}/attestations/{attestation_id}" + ], + deleteAttestationsBySubjectDigest: [ + "DELETE /orgs/{org}/attestations/digest/{subject_digest}" + ], + deleteIssueType: ["DELETE /orgs/{org}/issue-types/{issue_type_id}"], + deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], + disableSelectedRepositoryImmutableReleasesOrganization: [ + "DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}" + ], + enableSelectedRepositoryImmutableReleasesOrganization: [ + "PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}" + ], + get: ["GET /orgs/{org}"], + getImmutableReleasesSettings: [ + "GET /orgs/{org}/settings/immutable-releases" + ], + getImmutableReleasesSettingsRepositories: [ + "GET /orgs/{org}/settings/immutable-releases/repositories" + ], + getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], + getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], + getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], + getOrgRulesetHistory: ["GET /orgs/{org}/rulesets/{ruleset_id}/history"], + getOrgRulesetVersion: [ + "GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}" + ], + getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], + getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], + getWebhookDelivery: [ + "GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}" + ], + list: ["GET /organizations"], + listAppInstallations: ["GET /orgs/{org}/installations"], + listArtifactStorageRecords: [ + "GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records" + ], + listAttestationRepositories: ["GET /orgs/{org}/attestations/repositories"], + listAttestations: ["GET /orgs/{org}/attestations/{subject_digest}"], + listAttestationsBulk: [ + "POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}" + ], + listBlockedUsers: ["GET /orgs/{org}/blocks"], + listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], + listForAuthenticatedUser: ["GET /user/orgs"], + listForUser: ["GET /users/{username}/orgs"], + listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], + listIssueTypes: ["GET /orgs/{org}/issue-types"], + listMembers: ["GET /orgs/{org}/members"], + listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], + listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], + listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], + listOrgRoles: ["GET /orgs/{org}/organization-roles"], + listOrganizationFineGrainedPermissions: [ + "GET /orgs/{org}/organization-fine-grained-permissions" + ], + listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], + listPatGrantRepositories: [ + "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" + ], + listPatGrantRequestRepositories: [ + "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories" + ], + listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"], + listPatGrants: ["GET /orgs/{org}/personal-access-tokens"], + listPendingInvitations: ["GET /orgs/{org}/invitations"], + listPublicMembers: ["GET /orgs/{org}/public_members"], + listSecurityManagerTeams: [ + "GET /orgs/{org}/security-managers", + {}, + { + deprecated: "octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams" + } + ], + listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], + listWebhooks: ["GET /orgs/{org}/hooks"], + pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], + redeliverWebhookDelivery: [ + "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" + ], + removeMember: ["DELETE /orgs/{org}/members/{username}"], + removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], + removeOutsideCollaborator: [ + "DELETE /orgs/{org}/outside_collaborators/{username}" + ], + removePublicMembershipForAuthenticatedUser: [ + "DELETE /orgs/{org}/public_members/{username}" + ], + removeSecurityManagerTeam: [ + "DELETE /orgs/{org}/security-managers/teams/{team_slug}", + {}, + { + deprecated: "octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team" + } + ], + reviewPatGrantRequest: [ + "POST /orgs/{org}/personal-access-token-requests/{pat_request_id}" + ], + reviewPatGrantRequestsInBulk: [ + "POST /orgs/{org}/personal-access-token-requests" + ], + revokeAllOrgRolesTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" + ], + revokeAllOrgRolesUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}" + ], + revokeOrgRoleTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + revokeOrgRoleUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], + setImmutableReleasesSettings: [ + "PUT /orgs/{org}/settings/immutable-releases" + ], + setImmutableReleasesSettingsRepositories: [ + "PUT /orgs/{org}/settings/immutable-releases/repositories" + ], + setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], + setPublicMembershipForAuthenticatedUser: [ + "PUT /orgs/{org}/public_members/{username}" + ], + unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], + update: ["PATCH /orgs/{org}"], + updateIssueType: ["PUT /orgs/{org}/issue-types/{issue_type_id}"], + updateMembershipForAuthenticatedUser: [ + "PATCH /user/memberships/orgs/{org}" + ], + updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"], + updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"], + updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], + updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] + }, + packages: { + deletePackageForAuthenticatedUser: [ + "DELETE /user/packages/{package_type}/{package_name}" + ], + deletePackageForOrg: [ + "DELETE /orgs/{org}/packages/{package_type}/{package_name}" + ], + deletePackageForUser: [ + "DELETE /users/{username}/packages/{package_type}/{package_name}" + ], + deletePackageVersionForAuthenticatedUser: [ + "DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + deletePackageVersionForOrg: [ + "DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + deletePackageVersionForUser: [ + "DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + getAllPackageVersionsForAPackageOwnedByAnOrg: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", + {}, + { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] } + ], + getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}/versions", + {}, + { + renamed: [ + "packages", + "getAllPackageVersionsForPackageOwnedByAuthenticatedUser" + ] + } + ], + getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}/versions" + ], + getAllPackageVersionsForPackageOwnedByOrg: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}/versions" + ], + getAllPackageVersionsForPackageOwnedByUser: [ + "GET /users/{username}/packages/{package_type}/{package_name}/versions" + ], + getPackageForAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}" + ], + getPackageForOrganization: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}" + ], + getPackageForUser: [ + "GET /users/{username}/packages/{package_type}/{package_name}" + ], + getPackageVersionForAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + getPackageVersionForOrganization: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + getPackageVersionForUser: [ + "GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + listDockerMigrationConflictingPackagesForAuthenticatedUser: [ + "GET /user/docker/conflicts" + ], + listDockerMigrationConflictingPackagesForOrganization: [ + "GET /orgs/{org}/docker/conflicts" + ], + listDockerMigrationConflictingPackagesForUser: [ + "GET /users/{username}/docker/conflicts" + ], + listPackagesForAuthenticatedUser: ["GET /user/packages"], + listPackagesForOrganization: ["GET /orgs/{org}/packages"], + listPackagesForUser: ["GET /users/{username}/packages"], + restorePackageForAuthenticatedUser: [ + "POST /user/packages/{package_type}/{package_name}/restore{?token}" + ], + restorePackageForOrg: [ + "POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}" + ], + restorePackageForUser: [ + "POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}" + ], + restorePackageVersionForAuthenticatedUser: [ + "POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" + ], + restorePackageVersionForOrg: [ + "POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" + ], + restorePackageVersionForUser: [ + "POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" + ] + }, + privateRegistries: { + createOrgPrivateRegistry: ["POST /orgs/{org}/private-registries"], + deleteOrgPrivateRegistry: [ + "DELETE /orgs/{org}/private-registries/{secret_name}" + ], + getOrgPrivateRegistry: ["GET /orgs/{org}/private-registries/{secret_name}"], + getOrgPublicKey: ["GET /orgs/{org}/private-registries/public-key"], + listOrgPrivateRegistries: ["GET /orgs/{org}/private-registries"], + updateOrgPrivateRegistry: [ + "PATCH /orgs/{org}/private-registries/{secret_name}" + ] + }, + projects: { + addItemForOrg: ["POST /orgs/{org}/projectsV2/{project_number}/items"], + addItemForUser: [ + "POST /users/{username}/projectsV2/{project_number}/items" + ], + deleteItemForOrg: [ + "DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}" + ], + deleteItemForUser: [ + "DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}" + ], + getFieldForOrg: [ + "GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}" + ], + getFieldForUser: [ + "GET /users/{username}/projectsV2/{project_number}/fields/{field_id}" + ], + getForOrg: ["GET /orgs/{org}/projectsV2/{project_number}"], + getForUser: ["GET /users/{username}/projectsV2/{project_number}"], + getOrgItem: ["GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}"], + getUserItem: [ + "GET /users/{username}/projectsV2/{project_number}/items/{item_id}" + ], + listFieldsForOrg: ["GET /orgs/{org}/projectsV2/{project_number}/fields"], + listFieldsForUser: [ + "GET /users/{username}/projectsV2/{project_number}/fields" + ], + listForOrg: ["GET /orgs/{org}/projectsV2"], + listForUser: ["GET /users/{username}/projectsV2"], + listItemsForOrg: ["GET /orgs/{org}/projectsV2/{project_number}/items"], + listItemsForUser: [ + "GET /users/{username}/projectsV2/{project_number}/items" + ], + updateItemForOrg: [ + "PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}" + ], + updateItemForUser: [ + "PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}" + ] + }, + pulls: { + checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"], + create: ["POST /repos/{owner}/{repo}/pulls"], + createReplyForReviewComment: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies" + ], + createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], + createReviewComment: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments" + ], + deletePendingReview: [ + "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" + ], + deleteReviewComment: [ + "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}" + ], + dismissReview: [ + "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals" + ], + get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"], + getReview: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" + ], + getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"], + list: ["GET /repos/{owner}/{repo}/pulls"], + listCommentsForReview: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments" + ], + listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"], + listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"], + listRequestedReviewers: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" + ], + listReviewComments: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments" + ], + listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"], + listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], + merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"], + removeRequestedReviewers: [ + "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" + ], + requestReviewers: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" + ], + submitReview: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events" + ], + update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"], + updateBranch: [ + "PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch" + ], + updateReview: [ + "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" + ], + updateReviewComment: [ + "PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}" + ] + }, + rateLimit: { get: ["GET /rate_limit"] }, + reactions: { + createForCommitComment: [ + "POST /repos/{owner}/{repo}/comments/{comment_id}/reactions" + ], + createForIssue: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/reactions" + ], + createForIssueComment: [ + "POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" + ], + createForPullRequestReviewComment: [ + "POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" + ], + createForRelease: [ + "POST /repos/{owner}/{repo}/releases/{release_id}/reactions" + ], + createForTeamDiscussionCommentInOrg: [ + "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" + ], + createForTeamDiscussionInOrg: [ + "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" + ], + deleteForCommitComment: [ + "DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}" + ], + deleteForIssue: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}" + ], + deleteForIssueComment: [ + "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}" + ], + deleteForPullRequestComment: [ + "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}" + ], + deleteForRelease: [ + "DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}" + ], + deleteForTeamDiscussion: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}" + ], + deleteForTeamDiscussionComment: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}" + ], + listForCommitComment: [ + "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions" + ], + listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"], + listForIssueComment: [ + "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" + ], + listForPullRequestReviewComment: [ + "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" + ], + listForRelease: [ + "GET /repos/{owner}/{repo}/releases/{release_id}/reactions" + ], + listForTeamDiscussionCommentInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" + ], + listForTeamDiscussionInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" + ] + }, + repos: { + acceptInvitation: [ + "PATCH /user/repository_invitations/{invitation_id}", + {}, + { renamed: ["repos", "acceptInvitationForAuthenticatedUser"] } + ], + acceptInvitationForAuthenticatedUser: [ + "PATCH /user/repository_invitations/{invitation_id}" + ], + addAppAccessRestrictions: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", + {}, + { mapToData: "apps" } + ], + addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"], + addStatusCheckContexts: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", + {}, + { mapToData: "contexts" } + ], + addTeamAccessRestrictions: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", + {}, + { mapToData: "teams" } + ], + addUserAccessRestrictions: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", + {}, + { mapToData: "users" } + ], + cancelPagesDeployment: [ + "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" + ], + checkAutomatedSecurityFixes: [ + "GET /repos/{owner}/{repo}/automated-security-fixes" + ], + checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"], + checkImmutableReleases: ["GET /repos/{owner}/{repo}/immutable-releases"], + checkPrivateVulnerabilityReporting: [ + "GET /repos/{owner}/{repo}/private-vulnerability-reporting" + ], + checkVulnerabilityAlerts: [ + "GET /repos/{owner}/{repo}/vulnerability-alerts" + ], + codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"], + compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"], + compareCommitsWithBasehead: [ + "GET /repos/{owner}/{repo}/compare/{basehead}" + ], + createAttestation: ["POST /repos/{owner}/{repo}/attestations"], + createAutolink: ["POST /repos/{owner}/{repo}/autolinks"], + createCommitComment: [ + "POST /repos/{owner}/{repo}/commits/{commit_sha}/comments" + ], + createCommitSignatureProtection: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" + ], + createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"], + createDeployKey: ["POST /repos/{owner}/{repo}/keys"], + createDeployment: ["POST /repos/{owner}/{repo}/deployments"], + createDeploymentBranchPolicy: [ + "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" + ], + createDeploymentProtectionRule: [ + "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" + ], + createDeploymentStatus: [ + "POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" + ], + createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"], + createForAuthenticatedUser: ["POST /user/repos"], + createFork: ["POST /repos/{owner}/{repo}/forks"], + createInOrg: ["POST /orgs/{org}/repos"], + createOrUpdateEnvironment: [ + "PUT /repos/{owner}/{repo}/environments/{environment_name}" + ], + createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], + createOrgRuleset: ["POST /orgs/{org}/rulesets"], + createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], + createPagesSite: ["POST /repos/{owner}/{repo}/pages"], + createRelease: ["POST /repos/{owner}/{repo}/releases"], + createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], + createUsingTemplate: [ + "POST /repos/{template_owner}/{template_repo}/generate" + ], + createWebhook: ["POST /repos/{owner}/{repo}/hooks"], + customPropertiesForReposCreateOrUpdateRepositoryValues: [ + "PATCH /repos/{owner}/{repo}/properties/values" + ], + customPropertiesForReposGetRepositoryValues: [ + "GET /repos/{owner}/{repo}/properties/values" + ], + declineInvitation: [ + "DELETE /user/repository_invitations/{invitation_id}", + {}, + { renamed: ["repos", "declineInvitationForAuthenticatedUser"] } + ], + declineInvitationForAuthenticatedUser: [ + "DELETE /user/repository_invitations/{invitation_id}" + ], + delete: ["DELETE /repos/{owner}/{repo}"], + deleteAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" + ], + deleteAdminBranchProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" + ], + deleteAnEnvironment: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}" + ], + deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"], + deleteBranchProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection" + ], + deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"], + deleteCommitSignatureProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" + ], + deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"], + deleteDeployment: [ + "DELETE /repos/{owner}/{repo}/deployments/{deployment_id}" + ], + deleteDeploymentBranchPolicy: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" + ], + deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"], + deleteInvitation: [ + "DELETE /repos/{owner}/{repo}/invitations/{invitation_id}" + ], + deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"], + deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"], + deletePullRequestReviewProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" + ], + deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"], + deleteReleaseAsset: [ + "DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}" + ], + deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"], + deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"], + disableAutomatedSecurityFixes: [ + "DELETE /repos/{owner}/{repo}/automated-security-fixes" + ], + disableDeploymentProtectionRule: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" + ], + disableImmutableReleases: [ + "DELETE /repos/{owner}/{repo}/immutable-releases" + ], + disablePrivateVulnerabilityReporting: [ + "DELETE /repos/{owner}/{repo}/private-vulnerability-reporting" + ], + disableVulnerabilityAlerts: [ + "DELETE /repos/{owner}/{repo}/vulnerability-alerts" + ], + downloadArchive: [ + "GET /repos/{owner}/{repo}/zipball/{ref}", + {}, + { renamed: ["repos", "downloadZipballArchive"] } + ], + downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"], + downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"], + enableAutomatedSecurityFixes: [ + "PUT /repos/{owner}/{repo}/automated-security-fixes" + ], + enableImmutableReleases: ["PUT /repos/{owner}/{repo}/immutable-releases"], + enablePrivateVulnerabilityReporting: [ + "PUT /repos/{owner}/{repo}/private-vulnerability-reporting" + ], + enableVulnerabilityAlerts: [ + "PUT /repos/{owner}/{repo}/vulnerability-alerts" + ], + generateReleaseNotes: [ + "POST /repos/{owner}/{repo}/releases/generate-notes" + ], + get: ["GET /repos/{owner}/{repo}"], + getAccessRestrictions: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" + ], + getAdminBranchProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" + ], + getAllDeploymentProtectionRules: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" + ], + getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"], + getAllStatusCheckContexts: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts" + ], + getAllTopics: ["GET /repos/{owner}/{repo}/topics"], + getAppsWithAccessToProtectedBranch: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps" + ], + getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"], + getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"], + getBranchProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection" + ], + getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"], + getClones: ["GET /repos/{owner}/{repo}/traffic/clones"], + getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"], + getCollaboratorPermissionLevel: [ + "GET /repos/{owner}/{repo}/collaborators/{username}/permission" + ], + getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"], + getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"], + getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"], + getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"], + getCommitSignatureProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" + ], + getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"], + getContent: ["GET /repos/{owner}/{repo}/contents/{path}"], + getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"], + getCustomDeploymentProtectionRule: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" + ], + getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"], + getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"], + getDeploymentBranchPolicy: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" + ], + getDeploymentStatus: [ + "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}" + ], + getEnvironment: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}" + ], + getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"], + getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"], + getOrgRuleSuite: ["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"], + getOrgRuleSuites: ["GET /orgs/{org}/rulesets/rule-suites"], + getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"], + getOrgRulesets: ["GET /orgs/{org}/rulesets"], + getPages: ["GET /repos/{owner}/{repo}/pages"], + getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], + getPagesDeployment: [ + "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" + ], + getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], + getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], + getPullRequestReviewProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" + ], + getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"], + getReadme: ["GET /repos/{owner}/{repo}/readme"], + getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"], + getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"], + getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"], + getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"], + getRepoRuleSuite: [ + "GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}" + ], + getRepoRuleSuites: ["GET /repos/{owner}/{repo}/rulesets/rule-suites"], + getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"], + getRepoRulesetHistory: [ + "GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history" + ], + getRepoRulesetVersion: [ + "GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}" + ], + getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"], + getStatusChecksProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" + ], + getTeamsWithAccessToProtectedBranch: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams" + ], + getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"], + getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"], + getUsersWithAccessToProtectedBranch: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users" + ], + getViews: ["GET /repos/{owner}/{repo}/traffic/views"], + getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"], + getWebhookConfigForRepo: [ + "GET /repos/{owner}/{repo}/hooks/{hook_id}/config" + ], + getWebhookDelivery: [ + "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}" + ], + listActivities: ["GET /repos/{owner}/{repo}/activity"], + listAttestations: [ + "GET /repos/{owner}/{repo}/attestations/{subject_digest}" + ], + listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"], + listBranches: ["GET /repos/{owner}/{repo}/branches"], + listBranchesForHeadCommit: [ + "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head" + ], + listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"], + listCommentsForCommit: [ + "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments" + ], + listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"], + listCommitStatusesForRef: [ + "GET /repos/{owner}/{repo}/commits/{ref}/statuses" + ], + listCommits: ["GET /repos/{owner}/{repo}/commits"], + listContributors: ["GET /repos/{owner}/{repo}/contributors"], + listCustomDeploymentRuleIntegrations: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps" + ], + listDeployKeys: ["GET /repos/{owner}/{repo}/keys"], + listDeploymentBranchPolicies: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" + ], + listDeploymentStatuses: [ + "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" + ], + listDeployments: ["GET /repos/{owner}/{repo}/deployments"], + listForAuthenticatedUser: ["GET /user/repos"], + listForOrg: ["GET /orgs/{org}/repos"], + listForUser: ["GET /users/{username}/repos"], + listForks: ["GET /repos/{owner}/{repo}/forks"], + listInvitations: ["GET /repos/{owner}/{repo}/invitations"], + listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"], + listLanguages: ["GET /repos/{owner}/{repo}/languages"], + listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"], + listPublic: ["GET /repositories"], + listPullRequestsAssociatedWithCommit: [ + "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls" + ], + listReleaseAssets: [ + "GET /repos/{owner}/{repo}/releases/{release_id}/assets" + ], + listReleases: ["GET /repos/{owner}/{repo}/releases"], + listTags: ["GET /repos/{owner}/{repo}/tags"], + listTeams: ["GET /repos/{owner}/{repo}/teams"], + listWebhookDeliveries: [ + "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries" + ], + listWebhooks: ["GET /repos/{owner}/{repo}/hooks"], + merge: ["POST /repos/{owner}/{repo}/merges"], + mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"], + pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"], + redeliverWebhookDelivery: [ + "POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" + ], + removeAppAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", + {}, + { mapToData: "apps" } + ], + removeCollaborator: [ + "DELETE /repos/{owner}/{repo}/collaborators/{username}" + ], + removeStatusCheckContexts: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", + {}, + { mapToData: "contexts" } + ], + removeStatusCheckProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" + ], + removeTeamAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", + {}, + { mapToData: "teams" } + ], + removeUserAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", + {}, + { mapToData: "users" } + ], + renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"], + replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"], + requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"], + setAdminBranchProtection: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" + ], + setAppAccessRestrictions: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", + {}, + { mapToData: "apps" } + ], + setStatusCheckContexts: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", + {}, + { mapToData: "contexts" } + ], + setTeamAccessRestrictions: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", + {}, + { mapToData: "teams" } + ], + setUserAccessRestrictions: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", + {}, + { mapToData: "users" } + ], + testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"], + transfer: ["POST /repos/{owner}/{repo}/transfer"], + update: ["PATCH /repos/{owner}/{repo}"], + updateBranchProtection: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection" + ], + updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"], + updateDeploymentBranchPolicy: [ + "PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" + ], + updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"], + updateInvitation: [ + "PATCH /repos/{owner}/{repo}/invitations/{invitation_id}" + ], + updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"], + updatePullRequestReviewProtection: [ + "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" + ], + updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"], + updateReleaseAsset: [ + "PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}" + ], + updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"], + updateStatusCheckPotection: [ + "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", + {}, + { renamed: ["repos", "updateStatusCheckProtection"] } + ], + updateStatusCheckProtection: [ + "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" + ], + updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"], + updateWebhookConfigForRepo: [ + "PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config" + ], + uploadReleaseAsset: [ + "POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", + { baseUrl: "https://uploads.github.com" } + ] + }, + search: { + code: ["GET /search/code"], + commits: ["GET /search/commits"], + issuesAndPullRequests: ["GET /search/issues"], + labels: ["GET /search/labels"], + repos: ["GET /search/repositories"], + topics: ["GET /search/topics"], + users: ["GET /search/users"] + }, + secretScanning: { + createPushProtectionBypass: [ + "POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses" + ], + getAlert: [ + "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" + ], + getScanHistory: ["GET /repos/{owner}/{repo}/secret-scanning/scan-history"], + listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"], + listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"], + listLocationsForAlert: [ + "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations" + ], + listOrgPatternConfigs: [ + "GET /orgs/{org}/secret-scanning/pattern-configurations" + ], + updateAlert: [ + "PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" + ], + updateOrgPatternConfigs: [ + "PATCH /orgs/{org}/secret-scanning/pattern-configurations" + ] + }, + securityAdvisories: { + createFork: [ + "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" + ], + createPrivateVulnerabilityReport: [ + "POST /repos/{owner}/{repo}/security-advisories/reports" + ], + createRepositoryAdvisory: [ + "POST /repos/{owner}/{repo}/security-advisories" + ], + createRepositoryAdvisoryCveRequest: [ + "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve" + ], + getGlobalAdvisory: ["GET /advisories/{ghsa_id}"], + getRepositoryAdvisory: [ + "GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}" + ], + listGlobalAdvisories: ["GET /advisories"], + listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"], + listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"], + updateRepositoryAdvisory: [ + "PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}" + ] + }, + teams: { + addOrUpdateMembershipForUserInOrg: [ + "PUT /orgs/{org}/teams/{team_slug}/memberships/{username}" + ], + addOrUpdateRepoPermissionsInOrg: [ + "PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" + ], + checkPermissionsForRepoInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" + ], + create: ["POST /orgs/{org}/teams"], + createDiscussionCommentInOrg: [ + "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" + ], + createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"], + deleteDiscussionCommentInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" + ], + deleteDiscussionInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" + ], + deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"], + getByName: ["GET /orgs/{org}/teams/{team_slug}"], + getDiscussionCommentInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" + ], + getDiscussionInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" + ], + getMembershipForUserInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/memberships/{username}" + ], + list: ["GET /orgs/{org}/teams"], + listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"], + listDiscussionCommentsInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" + ], + listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"], + listForAuthenticatedUser: ["GET /user/teams"], + listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"], + listPendingInvitationsInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/invitations" + ], + listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"], + removeMembershipForUserInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}" + ], + removeRepoInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" + ], + updateDiscussionCommentInOrg: [ + "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" + ], + updateDiscussionInOrg: [ + "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" + ], + updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"] + }, + users: { + addEmailForAuthenticated: [ + "POST /user/emails", + {}, + { renamed: ["users", "addEmailForAuthenticatedUser"] } + ], + addEmailForAuthenticatedUser: ["POST /user/emails"], + addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"], + block: ["PUT /user/blocks/{username}"], + checkBlocked: ["GET /user/blocks/{username}"], + checkFollowingForUser: ["GET /users/{username}/following/{target_user}"], + checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"], + createGpgKeyForAuthenticated: [ + "POST /user/gpg_keys", + {}, + { renamed: ["users", "createGpgKeyForAuthenticatedUser"] } + ], + createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"], + createPublicSshKeyForAuthenticated: [ + "POST /user/keys", + {}, + { renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] } + ], + createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"], + createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"], + deleteAttestationsBulk: [ + "POST /users/{username}/attestations/delete-request" + ], + deleteAttestationsById: [ + "DELETE /users/{username}/attestations/{attestation_id}" + ], + deleteAttestationsBySubjectDigest: [ + "DELETE /users/{username}/attestations/digest/{subject_digest}" + ], + deleteEmailForAuthenticated: [ + "DELETE /user/emails", + {}, + { renamed: ["users", "deleteEmailForAuthenticatedUser"] } + ], + deleteEmailForAuthenticatedUser: ["DELETE /user/emails"], + deleteGpgKeyForAuthenticated: [ + "DELETE /user/gpg_keys/{gpg_key_id}", + {}, + { renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] } + ], + deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"], + deletePublicSshKeyForAuthenticated: [ + "DELETE /user/keys/{key_id}", + {}, + { renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] } + ], + deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"], + deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"], + deleteSshSigningKeyForAuthenticatedUser: [ + "DELETE /user/ssh_signing_keys/{ssh_signing_key_id}" + ], + follow: ["PUT /user/following/{username}"], + getAuthenticated: ["GET /user"], + getById: ["GET /user/{account_id}"], + getByUsername: ["GET /users/{username}"], + getContextForUser: ["GET /users/{username}/hovercard"], + getGpgKeyForAuthenticated: [ + "GET /user/gpg_keys/{gpg_key_id}", + {}, + { renamed: ["users", "getGpgKeyForAuthenticatedUser"] } + ], + getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"], + getPublicSshKeyForAuthenticated: [ + "GET /user/keys/{key_id}", + {}, + { renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] } + ], + getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"], + getSshSigningKeyForAuthenticatedUser: [ + "GET /user/ssh_signing_keys/{ssh_signing_key_id}" + ], + list: ["GET /users"], + listAttestations: ["GET /users/{username}/attestations/{subject_digest}"], + listAttestationsBulk: [ + "POST /users/{username}/attestations/bulk-list{?per_page,before,after}" + ], + listBlockedByAuthenticated: [ + "GET /user/blocks", + {}, + { renamed: ["users", "listBlockedByAuthenticatedUser"] } + ], + listBlockedByAuthenticatedUser: ["GET /user/blocks"], + listEmailsForAuthenticated: [ + "GET /user/emails", + {}, + { renamed: ["users", "listEmailsForAuthenticatedUser"] } + ], + listEmailsForAuthenticatedUser: ["GET /user/emails"], + listFollowedByAuthenticated: [ + "GET /user/following", + {}, + { renamed: ["users", "listFollowedByAuthenticatedUser"] } + ], + listFollowedByAuthenticatedUser: ["GET /user/following"], + listFollowersForAuthenticatedUser: ["GET /user/followers"], + listFollowersForUser: ["GET /users/{username}/followers"], + listFollowingForUser: ["GET /users/{username}/following"], + listGpgKeysForAuthenticated: [ + "GET /user/gpg_keys", + {}, + { renamed: ["users", "listGpgKeysForAuthenticatedUser"] } + ], + listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"], + listGpgKeysForUser: ["GET /users/{username}/gpg_keys"], + listPublicEmailsForAuthenticated: [ + "GET /user/public_emails", + {}, + { renamed: ["users", "listPublicEmailsForAuthenticatedUser"] } + ], + listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"], + listPublicKeysForUser: ["GET /users/{username}/keys"], + listPublicSshKeysForAuthenticated: [ + "GET /user/keys", + {}, + { renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] } + ], + listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"], + listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"], + listSocialAccountsForUser: ["GET /users/{username}/social_accounts"], + listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"], + listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"], + setPrimaryEmailVisibilityForAuthenticated: [ + "PATCH /user/email/visibility", + {}, + { renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] } + ], + setPrimaryEmailVisibilityForAuthenticatedUser: [ + "PATCH /user/email/visibility" + ], + unblock: ["DELETE /user/blocks/{username}"], + unfollow: ["DELETE /user/following/{username}"], + updateAuthenticated: ["PATCH /user"] + } +}; +var endpoints_default = Endpoints; + +// node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/endpoints-to-methods.js +var endpointMethodsMap = /* @__PURE__ */ new Map(); +for (const [scope, endpoints] of Object.entries(endpoints_default)) { + for (const [methodName, endpoint2] of Object.entries(endpoints)) { + const [route, defaults2, decorations] = endpoint2; + const [method, url] = route.split(/ /); + const endpointDefaults = Object.assign( + { + method, + url + }, + defaults2 + ); + if (!endpointMethodsMap.has(scope)) { + endpointMethodsMap.set(scope, /* @__PURE__ */ new Map()); + } + endpointMethodsMap.get(scope).set(methodName, { + scope, + methodName, + endpointDefaults, + decorations + }); + } +} +var handler = { + has({ scope }, methodName) { + return endpointMethodsMap.get(scope).has(methodName); + }, + getOwnPropertyDescriptor(target, methodName) { + return { + value: this.get(target, methodName), + // ensures method is in the cache + configurable: true, + writable: true, + enumerable: true + }; + }, + defineProperty(target, methodName, descriptor) { + Object.defineProperty(target.cache, methodName, descriptor); + return true; + }, + deleteProperty(target, methodName) { + delete target.cache[methodName]; + return true; + }, + ownKeys({ scope }) { + return [...endpointMethodsMap.get(scope).keys()]; + }, + set(target, methodName, value) { + return target.cache[methodName] = value; + }, + get({ octokit, scope, cache }, methodName) { + if (cache[methodName]) { + return cache[methodName]; + } + const method = endpointMethodsMap.get(scope).get(methodName); + if (!method) { + return void 0; + } + const { endpointDefaults, decorations } = method; + if (decorations) { + cache[methodName] = decorate( + octokit, + scope, + methodName, + endpointDefaults, + decorations + ); + } else { + cache[methodName] = octokit.request.defaults(endpointDefaults); + } + return cache[methodName]; + } +}; +function endpointsToMethods(octokit) { + const newMethods = {}; + for (const scope of endpointMethodsMap.keys()) { + newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler); + } + return newMethods; +} +function decorate(octokit, scope, methodName, defaults2, decorations) { + const requestWithDefaults = octokit.request.defaults(defaults2); + function withDecorations(...args) { + let options = requestWithDefaults.endpoint.merge(...args); + if (decorations.mapToData) { + options = Object.assign({}, options, { + data: options[decorations.mapToData], + [decorations.mapToData]: void 0 + }); + return requestWithDefaults(options); + } + if (decorations.renamed) { + const [newScope, newMethodName] = decorations.renamed; + octokit.log.warn( + `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()` + ); + } + if (decorations.deprecated) { + octokit.log.warn(decorations.deprecated); + } + if (decorations.renamedParameters) { + const options2 = requestWithDefaults.endpoint.merge(...args); + for (const [name, alias] of Object.entries( + decorations.renamedParameters + )) { + if (name in options2) { + octokit.log.warn( + `"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead` + ); + if (!(alias in options2)) { + options2[alias] = options2[name]; + } + delete options2[name]; + } + } + return requestWithDefaults(options2); + } + return requestWithDefaults(...args); + } + return Object.assign(withDecorations, requestWithDefaults); +} + +// node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/index.js +function restEndpointMethods(octokit) { + const api = endpointsToMethods(octokit); + return { + rest: api + }; +} +restEndpointMethods.VERSION = VERSION5; +function legacyRestEndpointMethods(octokit) { + const api = endpointsToMethods(octokit); + return { + ...api, + rest: api + }; +} +legacyRestEndpointMethods.VERSION = VERSION5; + +// node_modules/@octokit/plugin-paginate-rest/dist-bundle/index.js +var VERSION6 = "0.0.0-development"; +function normalizePaginatedListResponse(response) { + if (!response.data) { + return { + ...response, + data: [] + }; + } + const responseNeedsNormalization = ("total_count" in response.data || "total_commits" in response.data) && !("url" in response.data); + if (!responseNeedsNormalization) return response; + const incompleteResults = response.data.incomplete_results; + const repositorySelection = response.data.repository_selection; + const totalCount = response.data.total_count; + const totalCommits = response.data.total_commits; + delete response.data.incomplete_results; + delete response.data.repository_selection; + delete response.data.total_count; + delete response.data.total_commits; + const namespaceKey = Object.keys(response.data)[0]; + const data = response.data[namespaceKey]; + response.data = data; + if (typeof incompleteResults !== "undefined") { + response.data.incomplete_results = incompleteResults; + } + if (typeof repositorySelection !== "undefined") { + response.data.repository_selection = repositorySelection; + } + response.data.total_count = totalCount; + response.data.total_commits = totalCommits; + return response; +} +function iterator(octokit, route, parameters) { + const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); + const requestMethod = typeof route === "function" ? route : octokit.request; + const method = options.method; + const headers = options.headers; + let url = options.url; + return { + [Symbol.asyncIterator]: () => ({ + async next() { + if (!url) return { done: true }; + try { + const response = await requestMethod({ method, url, headers }); + const normalizedResponse = normalizePaginatedListResponse(response); + url = ((normalizedResponse.headers.link || "").match( + /<([^<>]+)>;\s*rel="next"/ + ) || [])[1]; + if (!url && "total_commits" in normalizedResponse.data) { + const parsedUrl = new URL(normalizedResponse.url); + const params = parsedUrl.searchParams; + const page = parseInt(params.get("page") || "1", 10); + const per_page = parseInt(params.get("per_page") || "250", 10); + if (page * per_page < normalizedResponse.data.total_commits) { + params.set("page", String(page + 1)); + url = parsedUrl.toString(); + } + } + return { value: normalizedResponse }; + } catch (error2) { + if (error2.status !== 409) throw error2; + url = ""; + return { + value: { + status: 200, + headers: {}, + data: [] + } + }; + } + } + }) + }; +} +function paginate(octokit, route, parameters, mapFn) { + if (typeof parameters === "function") { + mapFn = parameters; + parameters = void 0; + } + return gather( + octokit, + [], + iterator(octokit, route, parameters)[Symbol.asyncIterator](), + mapFn + ); +} +function gather(octokit, results, iterator2, mapFn) { + return iterator2.next().then((result) => { + if (result.done) { + return results; + } + let earlyExit = false; + function done() { + earlyExit = true; + } + results = results.concat( + mapFn ? mapFn(result.value, done) : result.value.data + ); + if (earlyExit) { + return results; + } + return gather(octokit, results, iterator2, mapFn); + }); +} +var composePaginateRest = Object.assign(paginate, { + iterator +}); +function paginateRest(octokit) { + return { + paginate: Object.assign(paginate.bind(null, octokit), { + iterator: iterator.bind(null, octokit) + }) + }; +} +paginateRest.VERSION = VERSION6; + +// node_modules/@actions/github/lib/utils.js +var context = new Context(); +var baseUrl = getApiBaseUrl(); +var defaults = { + baseUrl, + request: { + agent: getProxyAgent(baseUrl), + fetch: getProxyFetch(baseUrl) + } +}; +var GitHub = Octokit.plugin(restEndpointMethods, paginateRest).defaults(defaults); +function getOctokitOptions(token, options) { + const opts = Object.assign({}, options || {}); + const auth2 = getAuthString(token, opts); + if (auth2) { + opts.auth = auth2; + } + const userAgent3 = getUserAgentWithOrchestrationId(opts.userAgent); + if (userAgent3) { + opts.userAgent = userAgent3; + } + return opts; +} + +// node_modules/@actions/github/lib/github.js +var context2 = new Context(); +function getOctokit(token, options, ...additionalPlugins) { + const GitHubWithPlugins = GitHub.plugin(...additionalPlugins); + return new GitHubWithPlugins(getOctokitOptions(token, options)); +} + +// node_modules/@actions/tool-cache/lib/tool-cache.js +var crypto = __toESM(require("crypto"), 1); +var fs2 = __toESM(require("fs"), 1); + +// node_modules/@actions/tool-cache/lib/manifest.js +var semver = __toESM(require_semver2(), 1); + +// node_modules/@actions/tool-cache/lib/tool-cache.js +var path4 = __toESM(require("path"), 1); +var semver2 = __toESM(require_semver2(), 1); +var stream = __toESM(require("stream"), 1); +var util = __toESM(require("util"), 1); +var import_assert2 = require("assert"); + +// node_modules/@actions/tool-cache/lib/retry-helper.js +var __awaiter8 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var RetryHelper = class { + constructor(maxAttempts, minSeconds, maxSeconds) { + if (maxAttempts < 1) { + throw new Error("max attempts should be greater than or equal to 1"); + } + this.maxAttempts = maxAttempts; + this.minSeconds = Math.floor(minSeconds); + this.maxSeconds = Math.floor(maxSeconds); + if (this.minSeconds > this.maxSeconds) { + throw new Error("min seconds should be less than or equal to max seconds"); + } + } + execute(action, isRetryable) { + return __awaiter8(this, void 0, void 0, function* () { + let attempt = 1; + while (attempt < this.maxAttempts) { + try { + return yield action(); + } catch (err) { + if (isRetryable && !isRetryable(err)) { + throw err; + } + info(err.message); + } + const seconds = this.getSleepAmount(); + info(`Waiting ${seconds} seconds before trying again`); + yield this.sleep(seconds); + attempt++; + } + return yield action(); + }); + } + getSleepAmount() { + return Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + this.minSeconds; + } + sleep(seconds) { + return __awaiter8(this, void 0, void 0, function* () { + return new Promise((resolve2) => setTimeout(resolve2, seconds * 1e3)); + }); + } +}; + +// node_modules/@actions/tool-cache/lib/tool-cache.js +var __awaiter9 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var HTTPError = class extends Error { + constructor(httpStatusCode) { + super(`Unexpected HTTP response: ${httpStatusCode}`); + this.httpStatusCode = httpStatusCode; + Object.setPrototypeOf(this, new.target.prototype); + } +}; +var IS_WINDOWS3 = process.platform === "win32"; +var IS_MAC = process.platform === "darwin"; +var userAgent2 = "actions/tool-cache"; +function downloadTool(url, dest, auth2, headers) { + return __awaiter9(this, void 0, void 0, function* () { + dest = dest || path4.join(_getTempDirectory(), crypto.randomUUID()); + yield mkdirP(path4.dirname(dest)); + debug(`Downloading ${url}`); + debug(`Destination ${dest}`); + const maxAttempts = 3; + const minSeconds = _getGlobal("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS", 10); + const maxSeconds = _getGlobal("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS", 20); + const retryHelper = new RetryHelper(maxAttempts, minSeconds, maxSeconds); + return yield retryHelper.execute(() => __awaiter9(this, void 0, void 0, function* () { + return yield downloadToolAttempt(url, dest || "", auth2, headers); + }), (err) => { + if (err instanceof HTTPError && err.httpStatusCode) { + if (err.httpStatusCode < 500 && err.httpStatusCode !== 408 && err.httpStatusCode !== 429) { + return false; + } + } + return true; + }); + }); +} +function downloadToolAttempt(url, dest, auth2, headers) { + return __awaiter9(this, void 0, void 0, function* () { + if (fs2.existsSync(dest)) { + throw new Error(`Destination file path ${dest} already exists`); + } + const http2 = new HttpClient(userAgent2, [], { + allowRetries: false + }); + if (auth2) { + debug("set auth"); + if (headers === void 0) { + headers = {}; + } + headers.authorization = auth2; + } + const response = yield http2.get(url, headers); + if (response.message.statusCode !== 200) { + const err = new HTTPError(response.message.statusCode); + debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); + throw err; + } + const pipeline2 = util.promisify(stream.pipeline); + const responseMessageFactory = _getGlobal("TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY", () => response.message); + const readStream = responseMessageFactory(); + let succeeded = false; + try { + yield pipeline2(readStream, fs2.createWriteStream(dest)); + debug("download complete"); + succeeded = true; + return dest; + } finally { + if (!succeeded) { + debug("download failed"); + try { + yield rmRF(dest); + } catch (err) { + debug(`Failed to delete '${dest}'. ${err.message}`); + } + } + } + }); +} +function extractTar(file_1, dest_1) { + return __awaiter9(this, arguments, void 0, function* (file, dest, flags = "xz") { + if (!file) { + throw new Error("parameter 'file' is required"); + } + dest = yield _createExtractFolder(dest); + debug("Checking tar --version"); + let versionOutput = ""; + yield exec("tar --version", [], { + ignoreReturnCode: true, + silent: true, + listeners: { + stdout: (data) => versionOutput += data.toString(), + stderr: (data) => versionOutput += data.toString() + } + }); + debug(versionOutput.trim()); + const isGnuTar = versionOutput.toUpperCase().includes("GNU TAR"); + let args; + if (flags instanceof Array) { + args = flags; + } else { + args = [flags]; + } + if (isDebug() && !flags.includes("v")) { + args.push("-v"); + } + let destArg = dest; + let fileArg = file; + if (IS_WINDOWS3 && isGnuTar) { + args.push("--force-local"); + destArg = dest.replace(/\\/g, "/"); + fileArg = file.replace(/\\/g, "/"); + } + if (isGnuTar) { + args.push("--warning=no-unknown-keyword"); + args.push("--overwrite"); + } + args.push("-C", destArg, "-f", fileArg); + yield exec(`tar`, args); + return dest; + }); +} +function extractZip(file, dest) { + return __awaiter9(this, void 0, void 0, function* () { + if (!file) { + throw new Error("parameter 'file' is required"); + } + dest = yield _createExtractFolder(dest); + if (IS_WINDOWS3) { + yield extractZipWin(file, dest); + } else { + yield extractZipNix(file, dest); + } + return dest; + }); +} +function extractZipWin(file, dest) { + return __awaiter9(this, void 0, void 0, function* () { + const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ""); + const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ""); + const pwshPath = yield which("pwsh", false); + if (pwshPath) { + const pwshCommand = [ + `$ErrorActionPreference = 'Stop' ;`, + `try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;`, + `try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }`, + `catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force } else { throw $_ } } ;` + ].join(" "); + const args = [ + "-NoLogo", + "-NoProfile", + "-NonInteractive", + "-ExecutionPolicy", + "Unrestricted", + "-Command", + pwshCommand + ]; + debug(`Using pwsh at path: ${pwshPath}`); + yield exec(`"${pwshPath}"`, args); + } else { + const powershellCommand = [ + `$ErrorActionPreference = 'Stop' ;`, + `try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;`, + `if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force }`, + `else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }` + ].join(" "); + const args = [ + "-NoLogo", + "-Sta", + "-NoProfile", + "-NonInteractive", + "-ExecutionPolicy", + "Unrestricted", + "-Command", + powershellCommand + ]; + const powershellPath = yield which("powershell", true); + debug(`Using powershell at path: ${powershellPath}`); + yield exec(`"${powershellPath}"`, args); + } + }); +} +function extractZipNix(file, dest) { + return __awaiter9(this, void 0, void 0, function* () { + const unzipPath = yield which("unzip", true); + const args = [file]; + if (!isDebug()) { + args.unshift("-q"); + } + args.unshift("-o"); + yield exec(`"${unzipPath}"`, args, { cwd: dest }); + }); +} +function _createExtractFolder(dest) { + return __awaiter9(this, void 0, void 0, function* () { + if (!dest) { + dest = path4.join(_getTempDirectory(), crypto.randomUUID()); + } + yield mkdirP(dest); + return dest; + }); +} +function _getTempDirectory() { + const tempDirectory = process.env["RUNNER_TEMP"] || ""; + (0, import_assert2.ok)(tempDirectory, "Expected RUNNER_TEMP to be defined"); + return tempDirectory; +} +function _getGlobal(key, defaultValue) { + const value = global[key]; + return value !== void 0 ? value : defaultValue; +} + +// src/main.ts +var releaseFragment = ` fragment releaseFields on Release { tagName releaseAssets(first: 50) { @@ -58,7 +27883,12 @@ ${o}`;break;case"retry":Zf(o)&&(r[s]=o);break;case"id":jf(o)&&(r[s]=o);break;cas } } } - `;(async()=>{let t=Fm(""),e=bp("zb-version"),r=e?{query:` + `; +(async () => { + const octokit = getOctokit(""); + const version = getInput("zb-version"); + const graphqlRequest = version ? { + query: ` query releaseAssetsForVersion($tagName: String!) { repository(owner: "256lights", repo: "zb") { release(tagName: $tagName) { @@ -67,8 +27897,11 @@ ${o}`;break;case"retry":Zf(o)&&(r[s]=o);break;case"id":jf(o)&&(r[s]=o);break;cas } } - ${Sy} - `,tagName:"v"+e}:{query:` + ${releaseFragment} + `, + tagName: "v" + version + } : { + query: ` query releaseAssetsForLatest { repository(owner: "256lights", repo: "zb") { release: latestRelease { @@ -77,8 +27910,26 @@ ${o}`;break;case"retry":Zf(o)&&(r[s]=o);break;case"id":jf(o)&&(r[s]=o);break;cas } } - ${Sy} - `},s=(await t.graphql(r)).repository.release,o=s?.releaseAssets?.nodes||[],n;if(hr.platform==="darwin"&&hr.arch==="arm64"?n=o.find(({name:c})=>c.includes("aarch64-apple-macos")):hr.platform==="linux"&&hr.arch==="x64"&&(n=o.find(({name:c})=>c.includes("x86_64-unknown-linux"))),!n){kp(`No download found for ${hr.arch}-${hr.platform} version ${s?.tagName||e}`);return}let i=await Dy(n.downloadUrl),a=n.downloadUrl.endsWith(".zip")?await by(i):await Ty(i);await cr(Ny.default.join(a,"install"),["--single-user","--no-systemd","--no-launchd"])})(); + ${releaseFragment} + ` + }; + const graphqlResponse = await octokit.graphql(graphqlRequest); + const release = graphqlResponse.repository.release; + const releaseAssets = release?.releaseAssets?.nodes || []; + let asset; + if (process2.platform === "darwin" && process2.arch === "arm64") { + asset = releaseAssets.find(({ name }) => name.includes("aarch64-apple-macos")); + } else if (process2.platform === "linux" && process2.arch === "x64") { + asset = releaseAssets.find(({ name }) => name.includes("x86_64-unknown-linux")); + } + if (!asset) { + setFailed(`No download found for ${process2.arch}-${process2.platform} version ${release?.tagName || version}`); + return; + } + const zbArchivePath = await downloadTool(asset.downloadUrl); + const zbExtractedFolderPath = asset.downloadUrl.endsWith(".zip") ? await extractZip(zbArchivePath) : await extractTar(zbArchivePath); + await exec(import_node_path.default.join(zbExtractedFolderPath, "install"), ["--single-user", "--no-systemd", "--no-launchd"]); +})(); /** * @license * Copyright 2026 The zb Authors @@ -106,4 +27957,3 @@ content-type/dist/index.js: (* v8 ignore next -- @preserve *) (* v8 ignore else -- @preserve *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90dW5uZWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdHJlZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9kaWFnbm9zdGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlci1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3V0aWwvdGltZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kYXRhLXVybC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZm9ybWRhdGEtcGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmVkaXJlY3QtaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wtYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmV0cnktaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3JldHJ5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZHVtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9lbmNvZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS9jYWNoZXN0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvcGFyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2ZyYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc2VuZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvY29udGVudC10eXBlL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9wYXJzZS1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvaWRlbnRpZmllcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9jbGFzc2VzL3NlbXZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy92YWxpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9pbmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZGlmZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9tYWpvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9taW5vci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wcmVyZWxlYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvbXBhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcmNvbXBhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29tcGFyZS1sb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLWJ1aWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcnNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZ3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbmVxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9sdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY21wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvZXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy90cnVuY2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2xydWNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9yYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvY29tcGFyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdG8tY29tcGFyYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWF4LXNhdGlzZnlpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXNhdGlzZnlpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdmFsaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvb3V0c2lkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9ndHIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbHRyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL2ludGVyc2VjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc2ltcGxpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc3Vic2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvaW5kZXguanMiLCAiLi4vc3JjL21haW4udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL2NvbW1hbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9wcm94eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvcGxhdGZvcm0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL3Rvb2xydW5uZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vc3JjL2lvLXV0aWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL2V4ZWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvY29udGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL3NyYy9pbnRlcm5hbC91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLXVzZXItYWdlbnQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9qc29uLXdpdGgtYmlnaW50L2pzb24td2l0aC1iaWdpbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QtZXJyb3IvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2F1dGgtdG9rZW4vZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL3ZlcnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvZ2l0aHViLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy90b29sLWNhY2hlL3NyYy90b29sLWNhY2hlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy90b29sLWNhY2hlL3NyYy9tYW5pZmVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvdG9vbC1jYWNoZS9zcmMvcmV0cnktaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3R1bm5lbCcpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga0Rlc3Ryb3k6IFN5bWJvbCgnZGVzdHJveScpLFxuICBrRGlzcGF0Y2g6IFN5bWJvbCgnZGlzcGF0Y2gnKSxcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga1dyaXRpbmc6IFN5bWJvbCgnd3JpdGluZycpLFxuICBrUmVzdW1pbmc6IFN5bWJvbCgncmVzdW1pbmcnKSxcbiAga1F1ZXVlOiBTeW1ib2woJ3F1ZXVlJyksXG4gIGtDb25uZWN0OiBTeW1ib2woJ2Nvbm5lY3QnKSxcbiAga0Nvbm5lY3Rpbmc6IFN5bWJvbCgnY29ubmVjdGluZycpLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQ6IFN5bWJvbCgnZGVmYXVsdCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQ6IFN5bWJvbCgnbWF4IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZDogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQgdGhyZXNob2xkJyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWU6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmU6IFN5bWJvbCgna2VlcCBhbGl2ZScpLFxuICBrSGVhZGVyc1RpbWVvdXQ6IFN5bWJvbCgnaGVhZGVycyB0aW1lb3V0JyksXG4gIGtCb2R5VGltZW91dDogU3ltYm9sKCdib2R5IHRpbWVvdXQnKSxcbiAga1NlcnZlck5hbWU6IFN5bWJvbCgnc2VydmVyIG5hbWUnKSxcbiAga0xvY2FsQWRkcmVzczogU3ltYm9sKCdsb2NhbCBhZGRyZXNzJyksXG4gIGtIb3N0OiBTeW1ib2woJ2hvc3QnKSxcbiAga05vUmVmOiBTeW1ib2woJ25vIHJlZicpLFxuICBrQm9keVVzZWQ6IFN5bWJvbCgndXNlZCcpLFxuICBrQm9keTogU3ltYm9sKCdhYnN0cmFjdGVkIHJlcXVlc3QgYm9keScpLFxuICBrUnVubmluZzogU3ltYm9sKCdydW5uaW5nJyksXG4gIGtCbG9ja2luZzogU3ltYm9sKCdibG9ja2luZycpLFxuICBrUGVuZGluZzogU3ltYm9sKCdwZW5kaW5nJyksXG4gIGtTaXplOiBTeW1ib2woJ3NpemUnKSxcbiAga0J1c3k6IFN5bWJvbCgnYnVzeScpLFxuICBrUXVldWVkOiBTeW1ib2woJ3F1ZXVlZCcpLFxuICBrRnJlZTogU3ltYm9sKCdmcmVlJyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJyksXG4gIGtDbG9zZWQ6IFN5bWJvbCgnY2xvc2VkJyksXG4gIGtOZWVkRHJhaW46IFN5bWJvbCgnbmVlZCBkcmFpbicpLFxuICBrUmVzZXQ6IFN5bWJvbCgncmVzZXQnKSxcbiAga0Rlc3Ryb3llZDogU3ltYm9sLmZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKSxcbiAga1Jlc3VtZTogU3ltYm9sKCdyZXN1bWUnKSxcbiAga09uRXJyb3I6IFN5bWJvbCgnb24gZXJyb3InKSxcbiAga01heEhlYWRlcnNTaXplOiBTeW1ib2woJ21heCBoZWFkZXJzIHNpemUnKSxcbiAga1J1bm5pbmdJZHg6IFN5bWJvbCgncnVubmluZyBpbmRleCcpLFxuICBrUGVuZGluZ0lkeDogU3ltYm9sKCdwZW5kaW5nIGluZGV4JyksXG4gIGtFcnJvcjogU3ltYm9sKCdlcnJvcicpLFxuICBrQ2xpZW50czogU3ltYm9sKCdjbGllbnRzJyksXG4gIGtDbGllbnQ6IFN5bWJvbCgnY2xpZW50JyksXG4gIGtQYXJzZXI6IFN5bWJvbCgncGFyc2VyJyksXG4gIGtPbkRlc3Ryb3llZDogU3ltYm9sKCdkZXN0cm95IGNhbGxiYWNrcycpLFxuICBrUGlwZWxpbmluZzogU3ltYm9sKCdwaXBlbGluaW5nJyksXG4gIGtTb2NrZXQ6IFN5bWJvbCgnc29ja2V0JyksXG4gIGtIb3N0SGVhZGVyOiBTeW1ib2woJ2hvc3QgaGVhZGVyJyksXG4gIGtDb25uZWN0b3I6IFN5bWJvbCgnY29ubmVjdG9yJyksXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoOiBTeW1ib2woJ3N0cmljdCBjb250ZW50IGxlbmd0aCcpLFxuICBrTWF4UmVkaXJlY3Rpb25zOiBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpLFxuICBrTWF4UmVxdWVzdHM6IFN5bWJvbCgnbWF4UmVxdWVzdHNQZXJDbGllbnQnKSxcbiAga1Byb3h5OiBTeW1ib2woJ3Byb3h5IGFnZW50IG9wdGlvbnMnKSxcbiAga0NvdW50ZXI6IFN5bWJvbCgnc29ja2V0IHJlcXVlc3QgY291bnRlcicpLFxuICBrSW50ZXJjZXB0b3JzOiBTeW1ib2woJ2Rpc3BhdGNoIGludGVyY2VwdG9ycycpLFxuICBrTWF4UmVzcG9uc2VTaXplOiBTeW1ib2woJ21heCByZXNwb25zZSBzaXplJyksXG4gIGtIVFRQMlNlc3Npb246IFN5bWJvbCgnaHR0cDJTZXNzaW9uJyksXG4gIGtIVFRQMlNlc3Npb25TdGF0ZTogU3ltYm9sKCdodHRwMlNlc3Npb24gc3RhdGUnKSxcbiAga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeTogU3ltYm9sKCdyZXRyeSBhZ2VudCBkZWZhdWx0IHJldHJ5JyksXG4gIGtDb25zdHJ1Y3Q6IFN5bWJvbCgnY29uc3RydWN0YWJsZScpLFxuICBrTGlzdGVuZXJzOiBTeW1ib2woJ2xpc3RlbmVycycpLFxuICBrSFRUUENvbnRleHQ6IFN5bWJvbCgnaHR0cCBjb250ZXh0JyksXG4gIGtNYXhDb25jdXJyZW50U3RyZWFtczogU3ltYm9sKCdtYXggY29uY3VycmVudCBzdHJlYW1zJyksXG4gIGtOb1Byb3h5QWdlbnQ6IFN5bWJvbCgnbm8gcHJveHkgYWdlbnQnKSxcbiAga0h0dHBQcm94eUFnZW50OiBTeW1ib2woJ2h0dHAgcHJveHkgYWdlbnQnKSxcbiAga0h0dHBzUHJveHlBZ2VudDogU3ltYm9sKCdodHRwcyBwcm94eSBhZ2VudCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGtVbmRpY2lFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSJylcbmNsYXNzIFVuZGljaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1VuZGljaUVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrVW5kaWNpRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1VuZGljaUVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0Nvbm5lY3RUaW1lb3V0RXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnKVxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdDb25uZWN0VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0Nvbm5lY3QgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tDb25uZWN0VGltZW91dEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tDb25uZWN0VGltZW91dEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0hlYWRlcnNUaW1lb3V0RXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnKVxuY2xhc3MgSGVhZGVyc1RpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzVGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tIZWFkZXJzVGltZW91dEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tIZWFkZXJzVGltZW91dEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0hlYWRlcnNPdmVyZmxvd0Vycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfSEVBREVSU19PVkVSRkxPVycpXG5jbGFzcyBIZWFkZXJzT3ZlcmZsb3dFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzT3ZlcmZsb3dFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIE92ZXJmbG93IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfT1ZFUkZMT1cnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tIZWFkZXJzT3ZlcmZsb3dFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrSGVhZGVyc092ZXJmbG93RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrQm9keVRpbWVvdXRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX0JPRFlfVElNRU9VVCcpXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0JvZHlUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQm9keSBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0JPRFlfVElNRU9VVCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0JvZHlUaW1lb3V0RXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba0JvZHlUaW1lb3V0RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERScpXG5jbGFzcyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIGJvZHkpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZVN0YXR1c0NvZGVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBTdGF0dXMgQ29kZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERSdcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXNwb25zZVN0YXR1c0NvZGVFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtJbnZhbGlkQXJndW1lbnRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX0lOVkFMSURfQVJHJylcbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tJbnZhbGlkQXJndW1lbnRFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrSW52YWxpZEFyZ3VtZW50RXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrSW52YWxpZFJldHVyblZhbHVlRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRScpXG5jbGFzcyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIFJldHVybiBWYWx1ZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0ludmFsaWRSZXR1cm5WYWx1ZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtBYm9ydEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQUJPUlQnKVxuY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQUJPUlQnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tBYm9ydEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tBYm9ydEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga1JlcXVlc3RBYm9ydGVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9BQk9SVEVEJylcbmNsYXNzIFJlcXVlc3RBYm9ydGVkRXJyb3IgZXh0ZW5kcyBBYm9ydEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYWJvcnRlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9BQk9SVEVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrUmVxdWVzdEFib3J0ZWRFcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrUmVxdWVzdEFib3J0ZWRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtJbmZvcm1hdGlvbmFsRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9JTkZPJylcbmNsYXNzIEluZm9ybWF0aW9uYWxFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrSW5mb3JtYXRpb25hbEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tJbmZvcm1hdGlvbmFsRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJylcbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCcpXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrQ2xpZW50RGVzdHJveWVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9ERVNUUk9ZRUQnKVxuY2xhc3MgQ2xpZW50RGVzdHJveWVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50RGVzdHJveWVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBkZXN0cm95ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfREVTVFJPWUVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrQ2xpZW50RGVzdHJveWVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba0NsaWVudERlc3Ryb3llZEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0NsaWVudENsb3NlZEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQ0xPU0VEJylcbmNsYXNzIENsaWVudENsb3NlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudENsb3NlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgY2xvc2VkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NMT1NFRCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0NsaWVudENsb3NlZEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tDbGllbnRDbG9zZWRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtTb2NrZXRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1NPQ0tFVCcpXG5jbGFzcyBTb2NrZXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHNvY2tldCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1NvY2tldEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1NvY2tldCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9TT0NLRVQnXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1NvY2tldEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tTb2NrZXRFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtOb3RTdXBwb3J0ZWRFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX05PVF9TVVBQT1JURUQnKVxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrTm90U3VwcG9ydGVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba05vdFN1cHBvcnRlZEVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga0JhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nKVxuY2xhc3MgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1Vwc3RyZWFtRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm8gdXBzdHJlYW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIEJhbGFuY2VkUG9vbCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CUExfTUlTU0lOR19VUFNUUkVBTSdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba0JhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtIVFRQUGFyc2VyRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9IVFRQX1BBUlNFUicpXG5jbGFzcyBIVFRQUGFyc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnSFRUUFBhcnNlckVycm9yJ1xuICAgIHRoaXMuY29kZSA9IGNvZGUgPyBgSFBFXyR7Y29kZX1gIDogdW5kZWZpbmVkXG4gICAgdGhpcy5kYXRhID0gZGF0YSA/IGRhdGEudG9TdHJpbmcoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrSFRUUFBhcnNlckVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tIVFRQUGFyc2VyRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5lcnJvci5VTkRfRVJSX1JFU19FWENFRURFRF9NQVhfU0laRScpXG5jbGFzcyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yXSA9IHRydWVcbn1cblxuY29uc3Qga1JlcXVlc3RSZXRyeUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVRX1JFVFJZJylcbmNsYXNzIFJlcXVlc3RSZXRyeUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgeyBoZWFkZXJzLCBkYXRhIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0UmV0cnlFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IHJldHJ5IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9SRVRSWSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1JlcXVlc3RSZXRyeUVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgW2tSZXF1ZXN0UmV0cnlFcnJvcl0gPSB0cnVlXG59XG5cbmNvbnN0IGtSZXNwb25zZUVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfUkVTUE9OU0UnKVxuY2xhc3MgUmVzcG9uc2VFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIHsgaGVhZGVycywgZGF0YSB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba1Jlc3BvbnNlRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba1Jlc3BvbnNlRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX0VSUl9QUlhfVExTJylcbmNsYXNzIFNlY3VyZVByb3h5Q29ubmVjdGlvbkVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoY2F1c2UsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlLCAuLi4ob3B0aW9ucyA/PyB7fSkgfSlcbiAgICB0aGlzLm5hbWUgPSAnU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnU2VjdXJlIFByb3h5IENvbm5lY3Rpb24gZmFpbGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1BSWF9UTFMnXG4gICAgdGhpcy5jYXVzZSA9IGNhdXNlXG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW2tTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcl0gPT09IHRydWVcbiAgfVxuXG4gIFtrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3JdID0gdHJ1ZVxufVxuXG5jb25zdCBrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yID0gU3ltYm9sLmZvcigndW5kaWNpLmVycm9yLlVORF9FUlJfV1NfTUVTU0FHRV9TSVpFX0VYQ0VFREVEJylcbmNsYXNzIE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTWF4IGRlY29tcHJlc3NlZCBtZXNzYWdlIHNpemUgZXhjZWVkZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfV1NfTUVTU0FHRV9TSVpFX0VYQ0VFREVEJ1xuICB9XG5cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVtrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXSA9PT0gdHJ1ZVxuICB9XG5cbiAgZ2V0IFtrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXSAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQWJvcnRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBVbmRpY2lFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQ29ubmVjdFRpbWVvdXRFcnJvcixcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvcixcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIFJlcXVlc3RSZXRyeUVycm9yLFxuICBSZXNwb25zZUVycm9yLFxuICBTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcixcbiAgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNsYXNzIFRzdE5vZGUge1xuICAvKiogQHR5cGUge2FueX0gKi9cbiAgdmFsdWUgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVsbCB8IFRzdE5vZGV9ICovXG4gIGxlZnQgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVsbCB8IFRzdE5vZGV9ICovXG4gIG1pZGRsZSA9IG51bGxcbiAgLyoqIEB0eXBlIHtudWxsIHwgVHN0Tm9kZX0gKi9cbiAgcmlnaHQgPSBudWxsXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBjb2RlXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICovXG4gIGNvbnN0cnVjdG9yIChrZXksIHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkIHx8IGluZGV4ID49IGtleS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VucmVhY2hhYmxlJylcbiAgICB9XG4gICAgY29uc3QgY29kZSA9IHRoaXMuY29kZSA9IGtleS5jaGFyQ29kZUF0KGluZGV4KVxuICAgIC8vIGNoZWNrIGNvZGUgaXMgYXNjaWkgc3RyaW5nXG4gICAgaWYgKGNvZGUgPiAweDdGKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZXkgbXVzdCBiZSBhc2NpaSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gKytpbmRleCkge1xuICAgICAgdGhpcy5taWRkbGUgPSBuZXcgVHN0Tm9kZShrZXksIHZhbHVlLCBpbmRleClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBhZGQgKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBsZW5ndGggPSBrZXkubGVuZ3RoXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5yZWFjaGFibGUnKVxuICAgIH1cbiAgICBsZXQgaW5kZXggPSAwXG4gICAgbGV0IG5vZGUgPSB0aGlzXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBrZXkuY2hhckNvZGVBdChpbmRleClcbiAgICAgIC8vIGNoZWNrIGNvZGUgaXMgYXNjaWkgc3RyaW5nXG4gICAgICBpZiAoY29kZSA+IDB4N0YpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2V5IG11c3QgYmUgYXNjaWkgc3RyaW5nJylcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNvZGUgPT09IGNvZGUpIHtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gKytpbmRleCkge1xuICAgICAgICAgIG5vZGUudmFsdWUgPSB2YWx1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5taWRkbGUgIT09IG51bGwpIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5taWRkbGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLm1pZGRsZSA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jb2RlIDwgY29kZSkge1xuICAgICAgICBpZiAobm9kZS5sZWZ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUubGVmdFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUubGVmdCA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlID0gbm9kZS5yaWdodFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yaWdodCA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleVxuICAgKiBAcmV0dXJuIHtUc3ROb2RlIHwgbnVsbH1cbiAgICovXG4gIHNlYXJjaCAoa2V5KSB7XG4gICAgY29uc3Qga2V5bGVuZ3RoID0ga2V5Lmxlbmd0aFxuICAgIGxldCBpbmRleCA9IDBcbiAgICBsZXQgbm9kZSA9IHRoaXNcbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCAmJiBpbmRleCA8IGtleWxlbmd0aCkge1xuICAgICAgbGV0IGNvZGUgPSBrZXlbaW5kZXhdXG4gICAgICAvLyBBLVpcbiAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIGl0IGlzIGJpZ2dlciB0aGFuIDB4NWEuXG4gICAgICAvLyBMb3dlcmNhc2UgbGV0dGVycyBoYXZlIGhpZ2hlciBjaGFyIGNvZGVzIHRoYW4gdXBwZXJjYXNlIG9uZXMuXG4gICAgICAvLyBBbHNvIHdlIGFzc3VtZSB0aGF0IGhlYWRlcnMgd2lsbCBtb3N0bHkgY29udGFpbiBsb3dlcmNhc2UgY2hhcmFjdGVycy5cbiAgICAgIGlmIChjb2RlIDw9IDB4NWEgJiYgY29kZSA+PSAweDQxKSB7XG4gICAgICAgIC8vIExvd2VyY2FzZSBmb3IgdXBwZXJjYXNlLlxuICAgICAgICBjb2RlIHw9IDMyXG4gICAgICB9XG4gICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoY29kZSA9PT0gbm9kZS5jb2RlKSB7XG4gICAgICAgICAgaWYgKGtleWxlbmd0aCA9PT0gKytpbmRleCkge1xuICAgICAgICAgICAgLy8gUmV0dXJucyBOb2RlIHNpbmNlIGl0IGlzIHRoZSBsYXN0IGtleS5cbiAgICAgICAgICAgIHJldHVybiBub2RlXG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUgPSBub2RlLm1pZGRsZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUuY29kZSA8IGNvZGUgPyBub2RlLmxlZnQgOiBub2RlLnJpZ2h0XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY2xhc3MgVGVybmFyeVNlYXJjaFRyZWUge1xuICAvKiogQHR5cGUge1RzdE5vZGUgfCBudWxsfSAqL1xuICBub2RlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiAqL1xuICBpbnNlcnQgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5ub2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLm5vZGUgPSBuZXcgVHN0Tm9kZShrZXksIHZhbHVlLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vZGUuYWRkKGtleSwgdmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEByZXR1cm4ge2FueX1cbiAgICovXG4gIGxvb2t1cCAoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZT8uc2VhcmNoKGtleSk/LnZhbHVlID8/IG51bGxcbiAgfVxufVxuXG5jb25zdCB0cmVlID0gbmV3IFRlcm5hcnlTZWFyY2hUcmVlKClcblxuZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWxsa25vd25IZWFkZXJOYW1lcy5sZW5ndGg7ICsraSkge1xuICBjb25zdCBrZXkgPSBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt3ZWxsa25vd25IZWFkZXJOYW1lc1tpXV1cbiAgdHJlZS5pbnNlcnQoa2V5LCBrZXkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBUZXJuYXJ5U2VhcmNoVHJlZSxcbiAgdHJlZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCwga0xpc3RlbmVycywga0JvZHkgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEluY29taW5nTWVzc2FnZSB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25vZGU6bmV0JylcbmNvbnN0IHsgQmxvYiB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ25vZGU6cXVlcnlzdHJpbmcnKVxuY29uc3QgeyBFdmVudEVtaXR0ZXI6IEVFIH0gPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IHRyZWUgfSA9IHJlcXVpcmUoJy4vdHJlZScpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmNsYXNzIEJvZHlBc3luY0l0ZXJhYmxlIHtcbiAgY29uc3RydWN0b3IgKGJvZHkpIHtcbiAgICB0aGlzW2tCb2R5XSA9IGJvZHlcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSBmYWxzZVxuICB9XG5cbiAgYXN5bmMgKiBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdICgpIHtcbiAgICBhc3NlcnQoIXRoaXNba0JvZHlVc2VkXSwgJ2Rpc3R1cmJlZCcpXG4gICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgIHlpZWxkICogdGhpc1trQm9keV1cbiAgfVxufVxuXG5mdW5jdGlvbiB3cmFwUmVxdWVzdEJvZHkgKGJvZHkpIHtcbiAgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgLy8gVE9ETyAoZml4KTogUHJvdmlkZSBzb21lIHdheSBmb3IgdGhlIHVzZXIgdG8gY2FjaGUgdGhlIGZpbGUgdG8gZS5nLiAvdG1wXG4gICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIDEwMC1leHBlY3Qgc3VwcG9ydCB0byBwcm92aWRlIGEgd2F5IHRvIGRvIHRoaXMgcHJvcGVybHk/XG4gICAgaWYgKGJvZHlMZW5ndGgoYm9keSkgPT09IDApIHtcbiAgICAgIGJvZHlcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFzc2VydChmYWxzZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIGJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICBFRS5wcm90b3R5cGUub24uY2FsbChib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keVxuICB9IGVsc2UgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVE9ETyAoZml4KTogV2UgY2FuJ3QgYWNjZXNzIFJlYWRhYmxlU3RyZWFtIGludGVybmFsIHN0YXRlXG4gICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGRpc3R1cmJlZC4gVGhpcyBpcyBqdXN0XG4gICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgIHJldHVybiBuZXcgQm9keUFzeW5jSXRlcmFibGUoYm9keSlcbiAgfSBlbHNlIGlmIChcbiAgICBib2R5ICYmXG4gICAgdHlwZW9mIGJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgIUFycmF5QnVmZmVyLmlzVmlldyhib2R5KSAmJlxuICAgIGlzSXRlcmFibGUoYm9keSlcbiAgKSB7XG4gICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgIC8vIG9yIHRocm91Z2ggc29tZSBvdGhlciBmbGFnP1xuICAgIHJldHVybiBuZXcgQm9keUFzeW5jSXRlcmFibGUoYm9keSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYm9keVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzVGFnID0gb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ11cblxuICAgIHJldHVybiAoc1RhZyA9PT0gJ0Jsb2InIHx8IHNUYWcgPT09ICdGaWxlJykgJiYgKFxuICAgICAgKCdzdHJlYW0nIGluIG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykgfHxcbiAgICAgICgnYXJyYXlCdWZmZXInIGluIG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKVxuICAgIClcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFVSTCAodXJsLCBxdWVyeVBhcmFtcykge1xuICBpZiAodXJsLmluY2x1ZGVzKCc/JykgfHwgdXJsLmluY2x1ZGVzKCcjJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IHBhcmFtcyBjYW5ub3QgYmUgcGFzc2VkIHdoZW4gdXJsIGFscmVhZHkgY29udGFpbnMgXCI/XCIgb3IgXCIjXCIuJylcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zKVxuXG4gIGlmIChzdHJpbmdpZmllZCkge1xuICAgIHVybCArPSAnPycgKyBzdHJpbmdpZmllZFxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkUG9ydCAocG9ydCkge1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHBvcnQsIDEwKVxuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSBOdW1iZXIocG9ydCkgJiZcbiAgICB2YWx1ZSA+PSAwICYmXG4gICAgdmFsdWUgPD0gNjU1MzVcbiAgKVxufVxuXG5mdW5jdGlvbiBpc0h0dHBPckh0dHBzUHJlZml4ZWQgKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT0gbnVsbCAmJlxuICAgIHZhbHVlWzBdID09PSAnaCcgJiZcbiAgICB2YWx1ZVsxXSA9PT0gJ3QnICYmXG4gICAgdmFsdWVbMl0gPT09ICd0JyAmJlxuICAgIHZhbHVlWzNdID09PSAncCcgJiZcbiAgICAoXG4gICAgICB2YWx1ZVs0XSA9PT0gJzonIHx8XG4gICAgICAoXG4gICAgICAgIHZhbHVlWzRdID09PSAncycgJiZcbiAgICAgICAgdmFsdWVbNV0gPT09ICc6J1xuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVVSTCAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHVybCA9IG5ldyBVUkwodXJsKVxuXG4gICAgaWYgKCFpc0h0dHBPckh0dHBzUHJlZml4ZWQodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgaWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBUaGUgVVJMIGFyZ3VtZW50IG11c3QgYmUgYSBub24tbnVsbCBvYmplY3QuJylcbiAgfVxuXG4gIGlmICghKHVybCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICBpZiAodXJsLnBvcnQgIT0gbnVsbCAmJiB1cmwucG9ydCAhPT0gJycgJiYgaXNWYWxpZFBvcnQodXJsLnBvcnQpID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogcG9ydCBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciBvciBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRoICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRoOiB0aGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRobmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGhuYW1lOiB0aGUgcGF0aG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwuaG9zdG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLmhvc3RuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBob3N0bmFtZTogdGhlIGhvc3RuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLm9yaWdpbiAhPSBudWxsICYmIHR5cGVvZiB1cmwub3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBvcmlnaW46IHRoZSBvcmlnaW4gbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICghaXNIdHRwT3JIdHRwc1ByZWZpeGVkKHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSB1cmwucG9ydCAhPSBudWxsXG4gICAgICA/IHVybC5wb3J0XG4gICAgICA6ICh1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApXG4gICAgbGV0IG9yaWdpbiA9IHVybC5vcmlnaW4gIT0gbnVsbFxuICAgICAgPyB1cmwub3JpZ2luXG4gICAgICA6IGAke3VybC5wcm90b2NvbCB8fCAnJ30vLyR7dXJsLmhvc3RuYW1lIHx8ICcnfToke3BvcnR9YFxuICAgIGxldCBwYXRoID0gdXJsLnBhdGggIT0gbnVsbFxuICAgICAgPyB1cmwucGF0aFxuICAgICAgOiBgJHt1cmwucGF0aG5hbWUgfHwgJyd9JHt1cmwuc2VhcmNoIHx8ICcnfWBcblxuICAgIGlmIChvcmlnaW5bb3JpZ2luLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zbGljZSgwLCBvcmlnaW4ubGVuZ3RoIC0gMSlcbiAgICB9XG5cbiAgICBpZiAocGF0aCAmJiBwYXRoWzBdICE9PSAnLycpIHtcbiAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgfVxuICAgIC8vIG5ldyBVUkwocGF0aCwgb3JpZ2luKSBpcyB1bnNhZmUgd2hlbiBgcGF0aGAgY29udGFpbnMgYW4gYWJzb2x1dGUgVVJMXG4gICAgLy8gRnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML1VSTDpcbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYSByZWxhdGl2ZSBVUkwsIHNlY29uZCBwYXJhbSBpcyByZXF1aXJlZCwgYW5kIHdpbGwgYmUgdXNlZCBhcyB0aGUgYmFzZSBVUkwuXG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGFuIGFic29sdXRlIFVSTCwgYSBnaXZlbiBzZWNvbmQgcGFyYW0gd2lsbCBiZSBpZ25vcmVkLlxuICAgIHJldHVybiBuZXcgVVJMKGAke29yaWdpbn0ke3BhdGh9YClcbiAgfVxuXG4gIGlmICghaXNIdHRwT3JIdHRwc1ByZWZpeGVkKHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VPcmlnaW4gKHVybCkge1xuICB1cmwgPSBwYXJzZVVSTCh1cmwpXG5cbiAgaWYgKHVybC5wYXRobmFtZSAhPT0gJy8nIHx8IHVybC5zZWFyY2ggfHwgdXJsLmhhc2gpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdG5hbWUgKGhvc3QpIHtcbiAgaWYgKGhvc3RbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMSwgaWR4KVxuICB9XG5cbiAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCc6JylcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBob3N0XG5cbiAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDAsIGlkeClcbn1cblxuLy8gSVAgYWRkcmVzc2VzIGFyZSBub3QgdmFsaWQgc2VydmVyIG5hbWVzIHBlciBSRkM2MDY2XG4vLyA+IEN1cnJlbnRseSwgdGhlIG9ubHkgc2VydmVyIG5hbWVzIHN1cHBvcnRlZCBhcmUgRE5TIGhvc3RuYW1lc1xuZnVuY3Rpb24gZ2V0U2VydmVyTmFtZSAoaG9zdCkge1xuICBpZiAoIWhvc3QpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYXNzZXJ0KHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJylcblxuICBjb25zdCBzZXJ2ZXJuYW1lID0gZ2V0SG9zdG5hbWUoaG9zdClcbiAgaWYgKG5ldC5pc0lQKHNlcnZlcm5hbWUpKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gc2VydmVybmFtZVxufVxuXG5mdW5jdGlvbiBkZWVwQ2xvbmUgKG9iaikge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKVxufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpXG59XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgKHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykpXG59XG5cbmZ1bmN0aW9uIGJvZHlMZW5ndGggKGJvZHkpIHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oYm9keSkpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUub2JqZWN0TW9kZSA9PT0gZmFsc2UgJiYgc3RhdGUuZW5kZWQgPT09IHRydWUgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXRlLmxlbmd0aClcbiAgICAgID8gc3RhdGUubGVuZ3RoXG4gICAgICA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZSAhPSBudWxsID8gYm9keS5zaXplIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZXN0cm95ZWQgKGJvZHkpIHtcbiAgcmV0dXJuIGJvZHkgJiYgISEoYm9keS5kZXN0cm95ZWQgfHwgYm9keVtrRGVzdHJveWVkXSB8fCAoc3RyZWFtLmlzRGVzdHJveWVkPy4oYm9keSkpKVxufVxuXG5mdW5jdGlvbiBkZXN0cm95IChzdHJlYW0sIGVycikge1xuICBpZiAoc3RyZWFtID09IG51bGwgfHwgIWlzU3RyZWFtKHN0cmVhbSkgfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3RyZWFtKS5jb25zdHJ1Y3RvciA9PT0gSW5jb21pbmdNZXNzYWdlKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM4NTA1L2ZpbGVzXG4gICAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIH1cblxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChzdHJlYW0uZGVzdHJveWVkICE9PSB0cnVlKSB7XG4gICAgc3RyZWFtW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5cbmNvbnN0IEtFRVBBTElWRV9USU1FT1VUX0VYUFIgPSAvdGltZW91dD0oXFxkKykvXG5mdW5jdGlvbiBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQgKHZhbCkge1xuICBjb25zdCBtID0gdmFsLnRvU3RyaW5nKCkubWF0Y2goS0VFUEFMSVZFX1RJTUVPVVRfRVhQUilcbiAgcmV0dXJuIG0gPyBwYXJzZUludChtWzFdLCAxMCkgKiAxMDAwIDogbnVsbFxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGhlYWRlciBuYW1lIGFuZCByZXR1cm5zIGl0cyBsb3dlcmNhc2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gdmFsdWUgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGhlYWRlck5hbWVUb1N0cmluZyAodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICA/IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW3ZhbHVlXSA/PyB2YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgOiB0cmVlLmxvb2t1cCh2YWx1ZSkgPz8gdmFsdWUudG9TdHJpbmcoJ2xhdGluMScpLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBSZWNlaXZlIHRoZSBidWZmZXIgYXMgYSBzdHJpbmcgYW5kIHJldHVybiBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lICh2YWx1ZSkge1xuICByZXR1cm4gdHJlZS5sb29rdXAodmFsdWUpID8/IHZhbHVlLnRvU3RyaW5nKCdsYXRpbjEnKS50b0xvd2VyQ2FzZSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4gfCAoQnVmZmVyIHwgc3RyaW5nIHwgKEJ1ZmZlciB8IHN0cmluZylbXSlbXX0gaGVhZGVyc1xuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT59IFtvYmpdXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fVxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaikge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIG9iaiA9IHt9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXJzW2ldKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKHZhbCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbCA9IFt2YWxdXG4gICAgICAgIG9ialtrZXldID0gdmFsXG4gICAgICB9XG4gICAgICB2YWwucHVzaChoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoZWFkZXJzVmFsdWUgPSBoZWFkZXJzW2kgKyAxXVxuICAgICAgaWYgKHR5cGVvZiBoZWFkZXJzVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1ZhbHVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IEFycmF5LmlzQXJyYXkoaGVhZGVyc1ZhbHVlKSA/IGhlYWRlcnNWYWx1ZS5tYXAoeCA9PiB4LnRvU3RyaW5nKCd1dGY4JykpIDogaGVhZGVyc1ZhbHVlLnRvU3RyaW5nKCd1dGY4JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IGxlbiA9IGhlYWRlcnMubGVuZ3RoXG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheShsZW4pXG5cbiAgbGV0IGhhc0NvbnRlbnRMZW5ndGggPSBmYWxzZVxuICBsZXQgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gLTFcbiAgbGV0IGtleVxuICBsZXQgdmFsXG4gIGxldCBrTGVuID0gMFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGtleSA9IGhlYWRlcnNbbl1cbiAgICB2YWwgPSBoZWFkZXJzW24gKyAxXVxuXG4gICAgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycgJiYgKGtleSA9IGtleS50b1N0cmluZygpKVxuICAgIHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnICYmICh2YWwgPSB2YWwudG9TdHJpbmcoJ3V0ZjgnKSlcblxuICAgIGtMZW4gPSBrZXkubGVuZ3RoXG4gICAgaWYgKGtMZW4gPT09IDE0ICYmIGtleVs3XSA9PT0gJy0nICYmIChrZXkgPT09ICdjb250ZW50LWxlbmd0aCcgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa0xlbiA9PT0gMTkgJiYga2V5WzddID09PSAnLScgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSBuICsgMVxuICAgIH1cbiAgICByZXRbbl0gPSBrZXlcbiAgICByZXRbbiArIDFdID0gdmFsXG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKGhhc0NvbnRlbnRMZW5ndGggJiYgY29udGVudERpc3Bvc2l0aW9uSWR4ICE9PSAtMSkge1xuICAgIHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdID0gQnVmZmVyLmZyb20ocmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoYnVmZmVyKSB7XG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9wdWxsLzMxOVxuICByZXR1cm4gYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUhhbmRsZXIgKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSkge1xuICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db25uZWN0IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gJ2Z1bmN0aW9uJyAmJiBoYW5kbGVyLm9uQm9keVNlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkJvZHlTZW50IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vblVwZ3JhZGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvblVwZ3JhZGUgbWV0aG9kJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uSGVhZGVycyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSGVhZGVycyBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkRhdGEgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25Db21wbGV0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29tcGxldGUgbWV0aG9kJylcbiAgICB9XG4gIH1cbn1cblxuLy8gQSBib2R5IGlzIGRpc3R1cmJlZCBpZiBpdCBoYXMgYmVlbiByZWFkIGZyb20gYW5kIGl0IGNhbm5vdFxuLy8gYmUgcmUtdXNlZCB3aXRob3V0IGxvc2luZyBzdGF0ZSBvciBkYXRhLlxuZnVuY3Rpb24gaXNEaXN0dXJiZWQgKGJvZHkpIHtcbiAgLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gIHJldHVybiAhIShib2R5ICYmIChzdHJlYW0uaXNEaXN0dXJiZWQoYm9keSkgfHwgYm9keVtrQm9keVVzZWRdKSlcbn1cblxuZnVuY3Rpb24gaXNFcnJvcmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIHN0cmVhbS5pc0Vycm9yZWQoYm9keSkpXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGUgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgc3RyZWFtLmlzUmVhZGFibGUoYm9keSkpXG59XG5cbmZ1bmN0aW9uIGdldFNvY2tldEluZm8gKHNvY2tldCkge1xuICByZXR1cm4ge1xuICAgIGxvY2FsQWRkcmVzczogc29ja2V0LmxvY2FsQWRkcmVzcyxcbiAgICBsb2NhbFBvcnQ6IHNvY2tldC5sb2NhbFBvcnQsXG4gICAgcmVtb3RlQWRkcmVzczogc29ja2V0LnJlbW90ZUFkZHJlc3MsXG4gICAgcmVtb3RlUG9ydDogc29ja2V0LnJlbW90ZVBvcnQsXG4gICAgcmVtb3RlRmFtaWx5OiBzb2NrZXQucmVtb3RlRmFtaWx5LFxuICAgIHRpbWVvdXQ6IHNvY2tldC50aW1lb3V0LFxuICAgIGJ5dGVzV3JpdHRlbjogc29ja2V0LmJ5dGVzV3JpdHRlbixcbiAgICBieXRlc1JlYWQ6IHNvY2tldC5ieXRlc1JlYWRcbiAgfVxufVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ1JlYWRhYmxlU3RyZWFtJ119ICovXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZyb20gKGl0ZXJhYmxlKSB7XG4gIC8vIFdlIGNhbm5vdCB1c2UgUmVhZGFibGVTdHJlYW0uZnJvbSBoZXJlIGJlY2F1c2UgaXQgZG9lcyBub3QgcmV0dXJuIGEgYnl0ZSBzdHJlYW0uXG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuYnlvYlJlcXVlc3Q/LnJlc3BvbmQoMClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogJ2J5dGVzJ1xuICAgIH1cbiAgKVxufVxuXG4vLyBUaGUgY2h1bmsgc2hvdWxkIGJlIGEgRm9ybURhdGEgaW5zdGFuY2UgYW5kIGNvbnRhaW5zXG4vLyBhbGwgdGhlIHJlcXVpcmVkIG1ldGhvZHMuXG5mdW5jdGlvbiBpc0Zvcm1EYXRhTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZGVsZXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuaGFzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5zZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJ1xuICApXG59XG5cbmZ1bmN0aW9uIGFkZEFib3J0TGlzdGVuZXIgKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgaWYgKCdhZGRFdmVudExpc3RlbmVyJyBpbiBzaWduYWwpIHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pXG4gICAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICB9XG4gIHNpZ25hbC5hZGRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbn1cblxuY29uc3QgaGFzVG9XZWxsRm9ybWVkID0gdHlwZW9mIFN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkID09PSAnZnVuY3Rpb24nXG5jb25zdCBoYXNJc1dlbGxGb3JtZWQgPSB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQgPT09ICdmdW5jdGlvbidcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKi9cbmZ1bmN0aW9uIHRvVVNWU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIGhhc1RvV2VsbEZvcm1lZCA/IGAke3ZhbH1gLnRvV2VsbEZvcm1lZCgpIDogbm9kZVV0aWwudG9VU1ZTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqL1xuLy8gVE9ETzogbW92ZSB0aGlzIHRvIHdlYmlkbFxuZnVuY3Rpb24gaXNVU1ZTdHJpbmcgKHZhbCkge1xuICByZXR1cm4gaGFzSXNXZWxsRm9ybWVkID8gYCR7dmFsfWAuaXNXZWxsRm9ybWVkKCkgOiB0b1VTVlN0cmluZyh2YWwpID09PSBgJHt2YWx9YFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNoYXJDb2RlIChjKSB7XG4gIHN3aXRjaCAoYykge1xuICAgIGNhc2UgMHgyMjpcbiAgICBjYXNlIDB4Mjg6XG4gICAgY2FzZSAweDI5OlxuICAgIGNhc2UgMHgyYzpcbiAgICBjYXNlIDB4MmY6XG4gICAgY2FzZSAweDNhOlxuICAgIGNhc2UgMHgzYjpcbiAgICBjYXNlIDB4M2M6XG4gICAgY2FzZSAweDNkOlxuICAgIGNhc2UgMHgzZTpcbiAgICBjYXNlIDB4M2Y6XG4gICAgY2FzZSAweDQwOlxuICAgIGNhc2UgMHg1YjpcbiAgICBjYXNlIDB4NWM6XG4gICAgY2FzZSAweDVkOlxuICAgIGNhc2UgMHg3YjpcbiAgICBjYXNlIDB4N2Q6XG4gICAgICAvLyBEUVVPVEUgYW5kIFwiKCksLzo7PD0+P0BbXFxde31cIlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZDSEFSICV4MjEtN0VcbiAgICAgIHJldHVybiBjID49IDB4MjEgJiYgYyA8PSAweDdlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSFRUUFRva2VuIChjaGFyYWN0ZXJzKSB7XG4gIGlmIChjaGFyYWN0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghaXNUb2tlbkNoYXJDb2RlKGNoYXJhY3RlcnMuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBoZWFkZXJDaGFyUmVnZXggaGF2ZSBiZWVuIGxpZnRlZCBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYWluL2xpYi9faHR0cF9jb21tb24uanNcblxuLyoqXG4gKiBNYXRjaGVzIGlmIHZhbCBjb250YWlucyBhbiBpbnZhbGlkIGZpZWxkLXZjaGFyXG4gKiAgZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKVxuICogIGZpZWxkLWNvbnRlbnQgID0gZmllbGQtdmNoYXIgWyAxKiggU1AgLyBIVEFCICkgZmllbGQtdmNoYXIgXVxuICogIGZpZWxkLXZjaGFyICAgID0gVkNIQVIgLyBvYnMtdGV4dFxuICovXG5jb25zdCBoZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKGNoYXJhY3RlcnMpIHtcbiAgcmV0dXJuICFoZWFkZXJDaGFyUmVnZXgudGVzdChjaGFyYWN0ZXJzKVxufVxuXG4vLyBQYXJzZWQgYWNjb3JkaW5nbHkgdG8gUkZDIDkxMTBcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwI2ZpZWxkLmNvbnRlbnQtcmFuZ2VcbmZ1bmN0aW9uIHBhcnNlUmFuZ2VIZWFkZXIgKHJhbmdlKSB7XG4gIGlmIChyYW5nZSA9PSBudWxsIHx8IHJhbmdlID09PSAnJykgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogbnVsbCwgc2l6ZTogbnVsbCB9XG5cbiAgY29uc3QgbSA9IHJhbmdlID8gcmFuZ2UubWF0Y2goL15ieXRlcyAoXFxkKyktKFxcZCspXFwvKFxcZCspPyQvKSA6IG51bGxcbiAgcmV0dXJuIG1cbiAgICA/IHtcbiAgICAgICAgc3RhcnQ6IHBhcnNlSW50KG1bMV0pLFxuICAgICAgICBlbmQ6IG1bMl0gPyBwYXJzZUludChtWzJdKSA6IG51bGwsXG4gICAgICAgIHNpemU6IG1bM10gPyBwYXJzZUludChtWzNdKSA6IG51bGxcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZnVuY3Rpb24gYWRkTGlzdGVuZXIgKG9iaiwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgY29uc3QgbGlzdGVuZXJzID0gKG9ialtrTGlzdGVuZXJzXSA/Pz0gW10pXG4gIGxpc3RlbmVycy5wdXNoKFtuYW1lLCBsaXN0ZW5lcl0pXG4gIG9iai5vbihuYW1lLCBsaXN0ZW5lcilcbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMgKG9iaikge1xuICBmb3IgKGNvbnN0IFtuYW1lLCBsaXN0ZW5lcl0gb2Ygb2JqW2tMaXN0ZW5lcnNdID8/IFtdKSB7XG4gICAgb2JqLnJlbW92ZUxpc3RlbmVyKG5hbWUsIGxpc3RlbmVyKVxuICB9XG4gIG9ialtrTGlzdGVuZXJzXSA9IG51bGxcbn1cblxuZnVuY3Rpb24gZXJyb3JSZXF1ZXN0IChjbGllbnQsIHJlcXVlc3QsIGVycikge1xuICB0cnkge1xuICAgIHJlcXVlc3Qub25FcnJvcihlcnIpXG4gICAgYXNzZXJ0KHJlcXVlc3QuYWJvcnRlZClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2xpZW50LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9XG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbmNvbnN0IG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSA9IHtcbiAgZGVsZXRlOiAnREVMRVRFJyxcbiAgREVMRVRFOiAnREVMRVRFJyxcbiAgZ2V0OiAnR0VUJyxcbiAgR0VUOiAnR0VUJyxcbiAgaGVhZDogJ0hFQUQnLFxuICBIRUFEOiAnSEVBRCcsXG4gIG9wdGlvbnM6ICdPUFRJT05TJyxcbiAgT1BUSU9OUzogJ09QVElPTlMnLFxuICBwb3N0OiAnUE9TVCcsXG4gIFBPU1Q6ICdQT1NUJyxcbiAgcHV0OiAnUFVUJyxcbiAgUFVUOiAnUFVUJ1xufVxuXG5jb25zdCBub3JtYWxpemVkTWV0aG9kUmVjb3JkcyA9IHtcbiAgLi4ubm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLFxuICBwYXRjaDogJ3BhdGNoJyxcbiAgUEFUQ0g6ICdQQVRDSCdcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2Yobm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLCBudWxsKVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzLCBudWxsKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbm9wLFxuICBpc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICB0b1VTVlN0cmluZyxcbiAgaXNVU1ZTdHJpbmcsXG4gIGlzQmxvYkxpa2UsXG4gIHBhcnNlT3JpZ2luLFxuICBwYXJzZVVSTCxcbiAgZ2V0U2VydmVyTmFtZSxcbiAgaXNTdHJlYW0sXG4gIGlzSXRlcmFibGUsXG4gIGlzQXN5bmNJdGVyYWJsZSxcbiAgaXNEZXN0cm95ZWQsXG4gIGhlYWRlck5hbWVUb1N0cmluZyxcbiAgYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSxcbiAgYWRkTGlzdGVuZXIsXG4gIHJlbW92ZUFsbExpc3RlbmVycyxcbiAgZXJyb3JSZXF1ZXN0LFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICBhZGRBYm9ydExpc3RlbmVyLFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGlzVG9rZW5DaGFyQ29kZSxcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlLFxuICBub3JtYWxpemVkTWV0aG9kUmVjb3JkcyxcbiAgaXNWYWxpZFBvcnQsXG4gIGlzSHR0cE9ySHR0cHNQcmVmaXhlZCxcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIHNhZmVIVFRQTWV0aG9kczogWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10sXG4gIHdyYXBSZXF1ZXN0Qm9keVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnbm9kZTpkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCB1bmRpY2lEZWJ1Z0xvZyA9IHV0aWwuZGVidWdsb2coJ3VuZGljaScpXG5jb25zdCBmZXRjaERlYnVnbG9nID0gdXRpbC5kZWJ1Z2xvZygnZmV0Y2gnKVxuY29uc3Qgd2Vic29ja2V0RGVidWdsb2cgPSB1dGlsLmRlYnVnbG9nKCd3ZWJzb2NrZXQnKVxubGV0IGlzQ2xpZW50U2V0ID0gZmFsc2VcbmNvbnN0IGNoYW5uZWxzID0ge1xuICAvLyBDbGllbnRcbiAgYmVmb3JlQ29ubmVjdDogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLFxuICBjb25uZWN0ZWQ6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpLFxuICBjb25uZWN0RXJyb3I6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpLFxuICBzZW5kSGVhZGVyczogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKSxcbiAgLy8gUmVxdWVzdFxuICBjcmVhdGU6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpjcmVhdGUnKSxcbiAgYm9keVNlbnQ6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpib2R5U2VudCcpLFxuICBoZWFkZXJzOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpLFxuICB0cmFpbGVyczogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJyksXG4gIGVycm9yOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6ZXJyb3InKSxcbiAgLy8gV2ViU29ja2V0XG4gIG9wZW46IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0Om9wZW4nKSxcbiAgY2xvc2U6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OmNsb3NlJyksXG4gIHNvY2tldEVycm9yOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKSxcbiAgcGluZzogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpLFxuICBwb25nOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcbn1cblxuaWYgKHVuZGljaURlYnVnTG9nLmVuYWJsZWQgfHwgZmV0Y2hEZWJ1Z2xvZy5lbmFibGVkKSB7XG4gIGNvbnN0IGRlYnVnbG9nID0gZmV0Y2hEZWJ1Z2xvZy5lbmFibGVkID8gZmV0Y2hEZWJ1Z2xvZyA6IHVuZGljaURlYnVnTG9nXG5cbiAgLy8gVHJhY2sgYWxsIENsaWVudCBldmVudHNcbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHsgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQsIGhvc3QgfVxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdjb25uZWN0aW5nIHRvICVzIHVzaW5nICVzJXMnLFxuICAgICAgYCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9YCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmVyc2lvblxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH1cbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coXG4gICAgICAnY29ubmVjdGVkIHRvICVzIHVzaW5nICVzJXMnLFxuICAgICAgYCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9YCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmVyc2lvblxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH0sXG4gICAgICBlcnJvclxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdjb25uZWN0aW9uIHRvICVzIHVzaW5nICVzJXMgZXJyb3JlZCAtICVzJyxcbiAgICAgIGAke2hvc3R9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfWAsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIHZlcnNpb24sXG4gICAgICBlcnJvci5tZXNzYWdlXG4gICAgKVxuICB9KVxuXG4gIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OnNlbmRIZWFkZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKCdzZW5kaW5nIHJlcXVlc3QgdG8gJXMgJXMvJXMnLCBtZXRob2QsIG9yaWdpbiwgcGF0aClcbiAgfSlcblxuICAvLyBUcmFjayBSZXF1ZXN0IGV2ZW50c1xuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kLCBwYXRoLCBvcmlnaW4gfSxcbiAgICAgIHJlc3BvbnNlOiB7IHN0YXR1c0NvZGUgfVxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdyZWNlaXZlZCByZXNwb25zZSB0byAlcyAlcy8lcyAtIEhUVFAgJWQnLFxuICAgICAgbWV0aG9kLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aCxcbiAgICAgIHN0YXR1c0NvZGVcbiAgICApXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKCd0cmFpbGVycyByZWNlaXZlZCBmcm9tICVzICVzLyVzJywgbWV0aG9kLCBvcmlnaW4sIHBhdGgpXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9LFxuICAgICAgZXJyb3JcbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coXG4gICAgICAncmVxdWVzdCB0byAlcyAlcy8lcyBlcnJvcmVkIC0gJXMnLFxuICAgICAgbWV0aG9kLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aCxcbiAgICAgIGVycm9yLm1lc3NhZ2VcbiAgICApXG4gIH0pXG5cbiAgaXNDbGllbnRTZXQgPSB0cnVlXG59XG5cbmlmICh3ZWJzb2NrZXREZWJ1Z2xvZy5lbmFibGVkKSB7XG4gIGlmICghaXNDbGllbnRTZXQpIHtcbiAgICBjb25zdCBkZWJ1Z2xvZyA9IHVuZGljaURlYnVnTG9nLmVuYWJsZWQgPyB1bmRpY2lEZWJ1Z0xvZyA6IHdlYnNvY2tldERlYnVnbG9nXG4gICAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH1cbiAgICAgIH0gPSBldnRcbiAgICAgIGRlYnVnbG9nKFxuICAgICAgICAnY29ubmVjdGluZyB0byAlcyVzIHVzaW5nICVzJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdFBhcmFtczogeyB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCwgaG9zdCB9XG4gICAgICB9ID0gZXZ0XG4gICAgICBkZWJ1Z2xvZyhcbiAgICAgICAgJ2Nvbm5lY3RlZCB0byAlcyVzIHVzaW5nICVzJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29ubmVjdFBhcmFtczogeyB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCwgaG9zdCB9LFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IGV2dFxuICAgICAgZGVidWdsb2coXG4gICAgICAgICdjb25uZWN0aW9uIHRvICVzJXMgdXNpbmcgJXMlcyBlcnJvcmVkIC0gJXMnLFxuICAgICAgICBob3N0LFxuICAgICAgICBwb3J0ID8gYDoke3BvcnR9YCA6ICcnLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgZXJyb3IubWVzc2FnZVxuICAgICAgKVxuICAgIH0pXG5cbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZXF1ZXN0OiB7IG1ldGhvZCwgcGF0aCwgb3JpZ2luIH1cbiAgICAgIH0gPSBldnRcbiAgICAgIGRlYnVnbG9nKCdzZW5kaW5nIHJlcXVlc3QgdG8gJXMgJXMvJXMnLCBtZXRob2QsIG9yaWdpbiwgcGF0aClcbiAgICB9KVxuICB9XG5cbiAgLy8gVHJhY2sgYWxsIFdlYlNvY2tldCBldmVudHNcbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6b3BlbicpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFkZHJlc3M6IHsgYWRkcmVzcywgcG9ydCB9XG4gICAgfSA9IGV2dFxuICAgIHdlYnNvY2tldERlYnVnbG9nKCdjb25uZWN0aW9uIG9wZW5lZCAlcyVzJywgYWRkcmVzcywgcG9ydCA/IGA6JHtwb3J0fWAgOiAnJylcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpjbG9zZScpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHsgd2Vic29ja2V0LCBjb2RlLCByZWFzb24gfSA9IGV2dFxuICAgIHdlYnNvY2tldERlYnVnbG9nKFxuICAgICAgJ2Nsb3NlZCBjb25uZWN0aW9uIHRvICVzIC0gJXMgJXMnLFxuICAgICAgd2Vic29ja2V0LnVybCxcbiAgICAgIGNvZGUsXG4gICAgICByZWFzb25cbiAgICApXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6c29ja2V0X2Vycm9yJykuc3Vic2NyaWJlKGVyciA9PiB7XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ2Nvbm5lY3Rpb24gZXJyb3JlZCAtICVzJywgZXJyLm1lc3NhZ2UpXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIHdlYnNvY2tldERlYnVnbG9nKCdwaW5nIHJlY2VpdmVkJylcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ3BvbmcgcmVjZWl2ZWQnKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2hhbm5lbHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZSxcbiAgaXNTdHJlYW0sXG4gIGRlc3Ryb3ksXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhTGlrZSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNCbG9iTGlrZSxcbiAgYnVpbGRVUkwsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U2VydmVyTmFtZSxcbiAgbm9ybWFsaXplZE1ldGhvZFJlY29yZHNcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi9kaWFnbm9zdGljcy5qcycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbi8vIFZlcmlmaWVzIHRoYXQgYSBnaXZlbiBwYXRoIGlzIHZhbGlkIGRvZXMgbm90IGNvbnRhaW4gY29udHJvbCBjaGFycyBcXHgwMCB0byBcXHgyMFxuY29uc3QgaW52YWxpZFBhdGhSZWdleCA9IC9bXlxcdTAwMjEtXFx1MDBmZl0vXG5cbmNvbnN0IGtIYW5kbGVyID0gU3ltYm9sKCdoYW5kbGVyJylcblxuY2xhc3MgUmVxdWVzdCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnksXG4gICAgaWRlbXBvdGVudCxcbiAgICBibG9ja2luZyxcbiAgICB1cGdyYWRlLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIGJvZHlUaW1lb3V0LFxuICAgIHJlc2V0LFxuICAgIHRocm93T25FcnJvcixcbiAgICBleHBlY3RDb250aW51ZSxcbiAgICBzZXJ2ZXJuYW1lXG4gIH0sIGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHBhdGhbMF0gIT09ICcvJyAmJlxuICAgICAgIShwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpICYmXG4gICAgICBtZXRob2QgIT09ICdDT05ORUNUJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJMIG9yIHN0YXJ0IHdpdGggYSBzbGFzaCcpXG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUGF0aFJlZ2V4LnRlc3QocGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IHBhdGgnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWV0aG9kICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtZXRob2QgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChub3JtYWxpemVkTWV0aG9kUmVjb3Jkc1ttZXRob2RdID09PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiAhaXNWYWxpZEhlYWRlclZhbHVlKHVwZ3JhZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXBncmFkZSBoZWFkZXInKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyc1RpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgYm9keVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChyZXNldCAhPSBudWxsICYmIHR5cGVvZiByZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVzZXQnKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RDb250aW51ZSAhPSBudWxsICYmIHR5cGVvZiBleHBlY3RDb250aW51ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZXhwZWN0Q29udGludWUnKVxuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyc1RpbWVvdXQgPSBoZWFkZXJzVGltZW91dFxuXG4gICAgdGhpcy5ib2R5VGltZW91dCA9IGJvZHlUaW1lb3V0XG5cbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciA9PT0gdHJ1ZVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcblxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgfSBlbHNlIGlmIChpc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIGRlc3Ryb3kodGhpcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkub24oJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnIgPT4ge1xuICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5Lm9uKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IGJvZHkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnVmZmVyLmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5sZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IGlzSXRlcmFibGUoYm9keSkgfHwgaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgUmVhZGFibGUgc3RyZWFtLCBhbiBpdGVyYWJsZSwgb3IgYW4gYXN5bmMgaXRlcmFibGUnKVxuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGVkID0gZmFsc2VcblxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLnVwZ3JhZGUgPSB1cGdyYWRlIHx8IG51bGxcblxuICAgIHRoaXMucGF0aCA9IHF1ZXJ5ID8gYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGhlYWRlcnNbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJzKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikgfHwgaGVhZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgaW4ga2V5LXZhbHVlIHBhaXIgZm9ybWF0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5c1tpXSwgaGVhZGVyc1trZXlzW2ldXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIHZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpXG5cbiAgICB0aGlzLnNlcnZlcm5hbWUgPSBzZXJ2ZXJuYW1lIHx8IGdldFNlcnZlck5hbWUodGhpcy5ob3N0KVxuXG4gICAgdGhpc1trSGFuZGxlcl0gPSBoYW5kbGVyXG5cbiAgICBpZiAoY2hhbm5lbHMuY3JlYXRlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jcmVhdGUucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudChjaHVuaylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAoY2hhbm5lbHMuYm9keVNlbnQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmJvZHlTZW50LnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICBhYm9ydCh0aGlzLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbm5lY3QoYWJvcnQpXG4gICAgfVxuICB9XG5cbiAgb25SZXNwb25zZVN0YXJ0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlc3BvbnNlU3RhcnRlZD8uKClcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmIChjaGFubmVscy5oZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5oZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCByZXNwb25zZTogeyBzdGF0dXNDb2RlLCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25EYXRhKGNodW5rKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWVcbiAgICBpZiAoY2hhbm5lbHMudHJhaWxlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLnRyYWlsZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCB0cmFpbGVycyB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFRoaXMgbWlnaHQgYmUgYSBiYWQgaWRlYT9cbiAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBpZiAoY2hhbm5lbHMuZXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmVycm9yLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCBlcnJvciB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uRmluYWxseSAoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgdGhpcy5lbmRIYW5kbGVyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFkZEhlYWRlciAoa2V5LCB2YWx1ZSkge1xuICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIgKHJlcXVlc3QsIGtleSwgdmFsKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgaGVhZGVyTmFtZSA9IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV1cblxuICBpZiAoaGVhZGVyTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaGVhZGVyTmFtZSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2hlYWRlck5hbWVdID09PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRIVFRQVG9rZW4oaGVhZGVyTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXIga2V5JylcbiAgICB9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgY29uc3QgYXJyID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbFtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gICAgICAgIH1cbiAgICAgICAgYXJyLnB1c2godmFsW2ldKVxuICAgICAgfSBlbHNlIGlmICh2YWxbaV0gPT09IG51bGwpIHtcbiAgICAgICAgYXJyLnB1c2goJycpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENvZXJjZSBwcmltaXRpdmVzIChhbmQgcmVqZWN0IHVuc2FmZSBjb2VyY2lvbnMgc3VjaCBhcyBmdW5jdGlvbnNcbiAgICAgICAgLy8gd2l0aCBhIGNyYWZ0ZWQgdG9TdHJpbmcvU3ltYm9sLnRvUHJpbWl0aXZlKS5cbiAgICAgICAgY29uc3Qgc3RyID0gYCR7dmFsW2ldfWBcbiAgICAgICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUoc3RyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICAgICAgfVxuICAgICAgICBhcnIucHVzaChzdHIpXG4gICAgICB9XG4gICAgfVxuICAgIHZhbCA9IGFyclxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgfSBlbHNlIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICB2YWwgPSAnJ1xuICB9IGVsc2Uge1xuICAgIC8vIENvZXJjZSBwcmltaXRpdmVzIChhbmQgcmVqZWN0IHVuc2FmZSBjb2VyY2lvbnMgc3VjaCBhcyBmdW5jdGlvbnNcbiAgICAvLyB3aXRoIGEgY3JhZnRlZCB0b1N0cmluZy9TeW1ib2wudG9QcmltaXRpdmUpLlxuICAgIHZhbCA9IGAke3ZhbH1gXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgfVxuXG4gIGlmIChoZWFkZXJOYW1lID09PSAnaG9zdCcpIHtcbiAgICBpZiAocmVxdWVzdC5ob3N0ICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2R1cGxpY2F0ZSBob3N0IGhlYWRlcicpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhvc3QgaGVhZGVyJylcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykge1xuICAgIGlmIChyZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZHVwbGljYXRlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9IHBhcnNlSW50KHZhbCwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmVxdWVzdC5jb250ZW50TGVuZ3RoKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuY29udGVudFR5cGUgPT09IG51bGwgJiYgaGVhZGVyTmFtZSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID0gdmFsXG4gICAgcmVxdWVzdC5oZWFkZXJzLnB1c2goa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJyB8fCBoZWFkZXJOYW1lID09PSAna2VlcC1hbGl2ZScgfHwgaGVhZGVyTmFtZSA9PT0gJ3VwZ3JhZGUnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7aGVhZGVyTmFtZX0gaGVhZGVyYClcbiAgfSBlbHNlIGlmIChoZWFkZXJOYW1lID09PSAnY29ubmVjdGlvbicpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnRvTG93ZXJDYXNlKCkgOiBudWxsXG4gICAgaWYgKHZhbHVlICE9PSAnY2xvc2UnICYmIHZhbHVlICE9PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9uIGhlYWRlcicpXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnY2xvc2UnKSB7XG4gICAgICByZXF1ZXN0LnJlc2V0ID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJOYW1lID09PSAnZXhwZWN0Jykge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcignZXhwZWN0IGhlYWRlciBub3Qgc3VwcG9ydGVkJylcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0LmhlYWRlcnMucHVzaChrZXksIHZhbClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RcbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJylcblxuY2xhc3MgRGlzcGF0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGRpc3BhdGNoICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBjbG9zZSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgY29tcG9zZSAoLi4uYXJncykge1xuICAgIC8vIFNvIHdlIGhhbmRsZSBbaW50ZXJjZXB0b3IxLCBpbnRlcmNlcHRvcjJdIG9yIGludGVyY2VwdG9yMSwgaW50ZXJjZXB0b3IyLCAuLi5cbiAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pID8gYXJnc1swXSA6IGFyZ3NcbiAgICBsZXQgZGlzcGF0Y2ggPSB0aGlzLmRpc3BhdGNoLmJpbmQodGhpcylcblxuICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICBpZiAoaW50ZXJjZXB0b3IgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZXJjZXB0b3IsIGV4cGVjdGVkIGZ1bmN0aW9uIHJlY2VpdmVkICR7dHlwZW9mIGludGVyY2VwdG9yfWApXG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoID0gaW50ZXJjZXB0b3IoZGlzcGF0Y2gpXG5cbiAgICAgIGlmIChkaXNwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBkaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJyB8fCBkaXNwYXRjaC5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpbnRlcmNlcHRvcicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb21wb3NlZERpc3BhdGNoZXIodGhpcywgZGlzcGF0Y2gpXG4gIH1cbn1cblxuY2xhc3MgQ29tcG9zZWREaXNwYXRjaGVyIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gICNkaXNwYXRjaGVyID0gbnVsbFxuICAjZGlzcGF0Y2ggPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIsIGRpc3BhdGNoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuI2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy4jZGlzcGF0Y2ggPSBkaXNwYXRjaFxuICB9XG5cbiAgZGlzcGF0Y2ggKC4uLmFyZ3MpIHtcbiAgICB0aGlzLiNkaXNwYXRjaCguLi5hcmdzKVxuICB9XG5cbiAgY2xvc2UgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzcGF0Y2hlci5jbG9zZSguLi5hcmdzKVxuICB9XG5cbiAgZGVzdHJveSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNkaXNwYXRjaGVyLmRlc3Ryb3koLi4uYXJncylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpXG5jb25zdCB7XG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtEZXN0cm95LCBrQ2xvc2UsIGtDbG9zZWQsIGtEZXN0cm95ZWQsIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga09uRGVzdHJveWVkID0gU3ltYm9sKCdvbkRlc3Ryb3llZCcpXG5jb25zdCBrT25DbG9zZWQgPSBTeW1ib2woJ29uQ2xvc2VkJylcbmNvbnN0IGtJbnRlcmNlcHRlZERpc3BhdGNoID0gU3ltYm9sKCdJbnRlcmNlcHRlZCBEaXNwYXRjaCcpXG5jb25zdCBrV2ViU29ja2V0T3B0aW9ucyA9IFN5bWJvbCgnd2ViU29ja2V0T3B0aW9ucycpXG5cbmNsYXNzIERpc3BhdGNoZXJCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IGZhbHNlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgIHRoaXNba0Nsb3NlZF0gPSBmYWxzZVxuICAgIHRoaXNba09uQ2xvc2VkXSA9IFtdXG4gICAgdGhpc1trV2ViU29ja2V0T3B0aW9uc10gPSBvcHRzPy53ZWJTb2NrZXQgPz8ge31cbiAgfVxuXG4gIGdldCB3ZWJTb2NrZXRPcHRpb25zICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF4RnJhZ21lbnRzOiB0aGlzW2tXZWJTb2NrZXRPcHRpb25zXS5tYXhGcmFnbWVudHMgPz8gMTMxMDcyLFxuICAgICAgbWF4UGF5bG9hZFNpemU6IHRoaXNba1dlYlNvY2tldE9wdGlvbnNdLm1heFBheWxvYWRTaXplID8/IDEyOCAqIDEwMjQgKiAxMDI0XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgb2ZmZXJzIGFuIG9wdGltaXplZCB0aW1lciBpbXBsZW1lbnRhdGlvbiBkZXNpZ25lZCBmb3Igc2NlbmFyaW9zXG4gKiB3aGVyZSBoaWdoIHByZWNpc2lvbiBpcyBub3QgY3JpdGljYWwuXG4gKlxuICogVGhlIHRpbWVyIGFjaGlldmVzIGZhc3RlciBwZXJmb3JtYW5jZSBieSB1c2luZyBhIGxvdy1yZXNvbHV0aW9uIGFwcHJvYWNoLFxuICogd2l0aCBhbiBhY2N1cmFjeSB0YXJnZXQgb2Ygd2l0aGluIDUwMG1zLiBUaGlzIG1ha2VzIGl0IHBhcnRpY3VsYXJseSB1c2VmdWxcbiAqIGZvciB0aW1lcnMgd2l0aCBkZWxheXMgb2YgMSBzZWNvbmQgb3IgbW9yZSwgd2hlcmUgZXhhY3QgdGltaW5nIGlzIGxlc3NcbiAqIGNydWNpYWwuXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IE5vZGUuanMgdGltZXJzIGFyZSBpbmhlcmVudGx5IGltcHJlY2lzZSwgYXNcbiAqIGRlbGF5cyBjYW4gb2NjdXIgZHVlIHRvIHRoZSBldmVudCBsb29wIGJlaW5nIGJsb2NrZWQgYnkgb3RoZXIgb3BlcmF0aW9ucy5cbiAqIENvbnNlcXVlbnRseSwgdGltZXJzIG1heSB0cmlnZ2VyIGxhdGVyIHRoYW4gdGhlaXIgc2NoZWR1bGVkIHRpbWUuXG4gKi9cblxuLyoqXG4gKiBUaGUgZmFzdE5vdyB2YXJpYWJsZSBjb250YWlucyB0aGUgaW50ZXJuYWwgZmFzdCB0aW1lciBjbG9jayB2YWx1ZS5cbiAqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgZmFzdE5vdyA9IDBcblxuLyoqXG4gKiBSRVNPTFVUSU9OX01TIHJlcHJlc2VudHMgdGhlIHRhcmdldCByZXNvbHV0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdCAxMDAwXG4gKi9cbmNvbnN0IFJFU09MVVRJT05fTVMgPSAxZTNcblxuLyoqXG4gKiBUSUNLX01TIGRlZmluZXMgdGhlIGRlc2lyZWQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gZWFjaCB0aWNrLlxuICogVGhlIHRhcmdldCB2YWx1ZSBpcyBzZXQgdG8gaGFsZiB0aGUgcmVzb2x1dGlvbiB0aW1lLCBtaW51cyAxIG1zLCB0byBhY2NvdW50XG4gKiBmb3IgcG90ZW50aWFsIGV2ZW50IGxvb3Agb3ZlcmhlYWQuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0IDQ5OVxuICovXG5jb25zdCBUSUNLX01TID0gKFJFU09MVVRJT05fTVMgPj4gMSkgLSAxXG5cbi8qKlxuICogZmFzdE5vd1RpbWVvdXQgaXMgYSBOb2RlLmpzIHRpbWVyIHVzZWQgdG8gbWFuYWdlIGFuZCBwcm9jZXNzXG4gKiB0aGUgRmFzdFRpbWVycyBzdG9yZWQgaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS5cbiAqXG4gKiBAdHlwZSB7Tm9kZUpTLlRpbWVvdXR9XG4gKi9cbmxldCBmYXN0Tm93VGltZW91dFxuXG4vKipcbiAqIFRoZSBrRmFzdFRpbWVyIHN5bWJvbCBpcyB1c2VkIHRvIGlkZW50aWZ5IEZhc3RUaW1lciBpbnN0YW5jZXMuXG4gKlxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qga0Zhc3RUaW1lciA9IFN5bWJvbCgna0Zhc3RUaW1lcicpXG5cbi8qKlxuICogVGhlIGZhc3RUaW1lcnMgYXJyYXkgY29udGFpbnMgYWxsIGFjdGl2ZSBGYXN0VGltZXJzLlxuICpcbiAqIEB0eXBlIHtGYXN0VGltZXJbXX1cbiAqL1xuY29uc3QgZmFzdFRpbWVycyA9IFtdXG5cbi8qKlxuICogVGhlc2UgY29uc3RhbnRzIHJlcHJlc2VudCB0aGUgdmFyaW91cyBzdGF0ZXMgb2YgYSBGYXN0VGltZXIuXG4gKi9cblxuLyoqXG4gKiBUaGUgYE5PVF9JTl9MSVNUYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIG5vdCBpbmNsdWRlZFxuICogaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS4gVGltZXJzIHdpdGggdGhpcyBzdGF0dXMgd2lsbCBub3QgYmUgcHJvY2Vzc2VkXG4gKiBkdXJpbmcgdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uXG4gKlxuICogQSBGYXN0VGltZXIgY2FuIGJlIHJlLWFkZGVkIHRvIHRoZSBgZmFzdFRpbWVyc2AgYXJyYXkgYnkgaW52b2tpbmcgdGhlXG4gKiBgcmVmcmVzaGAgbWV0aG9kIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0yfVxuICovXG5jb25zdCBOT1RfSU5fTElTVCA9IC0yXG5cbi8qKlxuICogVGhlIGBUT19CRV9DTEVBUkVEYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIHNjaGVkdWxlZFxuICogZm9yIHJlbW92YWwgZnJvbSB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LiBBIEZhc3RUaW1lciBpbiB0aGlzIHN0YXRlIHdpbGxcbiAqIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24gYW5kIHdpbGwgbm8gbG9uZ2VyXG4gKiBiZSBwcm9jZXNzZWQuXG4gKlxuICogVGhpcyBzdGF0dXMgaXMgYWxzbyBzZXQgd2hlbiB0aGUgYGNsZWFyYCBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0xfVxuICovXG5jb25zdCBUT19CRV9DTEVBUkVEID0gLTFcblxuLyoqXG4gKiBUaGUgYFBFTkRJTkdgIGNvbnN0YW50IHNpZ25pZmllcyB0aGF0IHRoZSBGYXN0VGltZXIgaXMgYXdhaXRpbmcgcHJvY2Vzc2luZ1xuICogaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uIFRpbWVycyB3aXRoIHRoaXMgc3RhdHVzIHdpbGwgaGF2ZVxuICogdGhlaXIgYF9pZGxlU3RhcnRgIHZhbHVlIHNldCBhbmQgdGhlaXIgc3RhdHVzIHVwZGF0ZWQgdG8gYEFDVElWRWAgaW4gdGhlIG5leHQgdGljay5cbiAqXG4gKiBAdHlwZSB7MH1cbiAqL1xuY29uc3QgUEVORElORyA9IDBcblxuLyoqXG4gKiBUaGUgYEFDVElWRWAgY29uc3RhbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEZhc3RUaW1lciBpcyBhY3RpdmUgYW5kIHdhaXRpbmdcbiAqIGZvciBpdHMgdGltZXIgdG8gZXhwaXJlLiBEdXJpbmcgdGhlIG5leHQgdGljaywgdGhlIGBvblRpY2tgIGZ1bmN0aW9uIHdpbGxcbiAqIGNoZWNrIGlmIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgYW5kIGlmIHNvLCBpdCB3aWxsIGV4ZWN1dGUgdGhlIGFzc29jaWF0ZWQgY2FsbGJhY2suXG4gKlxuICogQHR5cGUgezF9XG4gKi9cbmNvbnN0IEFDVElWRSA9IDFcblxuLyoqXG4gKiBUaGUgb25UaWNrIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZmFzdFRpbWVycyBhcnJheS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gb25UaWNrICgpIHtcbiAgLyoqXG4gICAqIEluY3JlbWVudCB0aGUgZmFzdE5vdyB2YWx1ZSBieSB0aGUgVElDS19NUyB2YWx1ZSwgZGVzcGl0ZSB0aGUgYWN0dWFsIHRpbWVcbiAgICogdGhhdCBoYXMgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IHRpY2suIFRoaXMgYXBwcm9hY2ggZW5zdXJlcyBpbmRlcGVuZGVuY2VcbiAgICogZnJvbSB0aGUgc3lzdGVtIGNsb2NrIGFuZCBkZWxheXMgY2F1c2VkIGJ5IGEgYmxvY2tlZCBldmVudCBsb29wLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZmFzdE5vdyArPSBUSUNLX01TXG5cbiAgLyoqXG4gICAqIFRoZSBgaWR4YCB2YXJpYWJsZSBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LlxuICAgKiBFeHBpcmVkIHRpbWVycyBhcmUgcmVtb3ZlZCBieSByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGFycmF5LlxuICAgKiBDb25zZXF1ZW50bHksIGBpZHhgIGlzIG9ubHkgaW5jcmVtZW50ZWQgd2hlbiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5vdCByZW1vdmVkLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgbGV0IGlkeCA9IDBcblxuICAvKipcbiAgICogVGhlIGxlbiB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgZmFzdFRpbWVycyBhcnJheVxuICAgKiBhbmQgd2lsbCBiZSBkZWNyZW1lbnRlZCB3aGVuIGEgRmFzdFRpbWVyIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlXG4gICAqIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcblxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgKi9cbiAgICBjb25zdCB0aW1lciA9IGZhc3RUaW1lcnNbaWR4XVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIGluIHRoZSBBQ1RJVkUgc3RhdGUgYW5kIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgaXQgd2lsbFxuICAgIC8vIGJlIHByb2Nlc3NlZCBpbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmICh0aW1lci5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICAgIC8vIFNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byB0aGUgZmFzdE5vdyB2YWx1ZSBtaW51cyB0aGUgVElDS19NUyB2YWx1ZVxuICAgICAgLy8gdG8gYWNjb3VudCBmb3IgdGhlIHRpbWUgdGhlIHRpbWVyIHdhcyBpbiB0aGUgUEVORElORyBzdGF0ZS5cbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSBmYXN0Tm93IC0gVElDS19NU1xuICAgICAgdGltZXIuX3N0YXRlID0gQUNUSVZFXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRpbWVyLl9zdGF0ZSA9PT0gQUNUSVZFICYmXG4gICAgICBmYXN0Tm93ID49IHRpbWVyLl9pZGxlU3RhcnQgKyB0aW1lci5faWRsZVRpbWVvdXRcbiAgICApIHtcbiAgICAgIHRpbWVyLl9zdGF0ZSA9IFRPX0JFX0NMRUFSRURcbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSAtMVxuICAgICAgdGltZXIuX29uVGltZW91dCh0aW1lci5fdGltZXJBcmcpXG4gICAgfVxuXG4gICAgaWYgKHRpbWVyLl9zdGF0ZSA9PT0gVE9fQkVfQ0xFQVJFRCkge1xuICAgICAgdGltZXIuX3N0YXRlID0gTk9UX0lOX0xJU1RcblxuICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50IHRvIHRoZSBjdXJyZW50IGluZGV4IGFuZCBkZWNyZW1lbnQgbGVuIGlmIGl0IGlzXG4gICAgICAvLyBub3QgdGhlIG9ubHkgZWxlbWVudCBpbiB0aGUgYXJyYXkuXG4gICAgICBpZiAoLS1sZW4gIT09IDApIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVyc1tsZW5dXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICsraWR4XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHRoZSBsZW5ndGggb2YgdGhlIGZhc3RUaW1lcnMgYXJyYXkgdG8gdGhlIG5ldyBsZW5ndGggYW5kIHRodXNcbiAgLy8gcmVtb3ZpbmcgdGhlIGV4Y2VzcyBGYXN0VGltZXJzIGVsZW1lbnRzIGZyb20gdGhlIGFycmF5LlxuICBmYXN0VGltZXJzLmxlbmd0aCA9IGxlblxuXG4gIC8vIElmIHRoZXJlIGFyZSBzdGlsbCBhY3RpdmUgRmFzdFRpbWVycyBpbiB0aGUgYXJyYXksIHJlZnJlc2ggdGhlIFRpbWVyLlxuICAvLyBJZiB0aGVyZSBhcmUgbm8gYWN0aXZlIEZhc3RUaW1lcnMsIHRoZSB0aW1lciB3aWxsIGJlIHJlZnJlc2hlZCBhZ2FpblxuICAvLyB3aGVuIGEgbmV3IEZhc3RUaW1lciBpcyBpbnN0YW50aWF0ZWQuXG4gIGlmIChmYXN0VGltZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZyZXNoVGltZW91dCAoKSB7XG4gIC8vIElmIHRoZSBmYXN0Tm93VGltZW91dCBpcyBhbHJlYWR5IHNldCwgcmVmcmVzaCBpdC5cbiAgaWYgKGZhc3ROb3dUaW1lb3V0KSB7XG4gICAgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCgpXG4gIC8vIGZhc3ROb3dUaW1lb3V0IGlzIG5vdCBpbnN0YW50aWF0ZWQgeWV0LCBjcmVhdGUgYSBuZXcgVGltZXIuXG4gIH0gZWxzZSB7XG4gICAgY2xlYXJUaW1lb3V0KGZhc3ROb3dUaW1lb3V0KVxuICAgIGZhc3ROb3dUaW1lb3V0ID0gc2V0VGltZW91dChvblRpY2ssIFRJQ0tfTVMpXG5cbiAgICAvLyBJZiB0aGUgVGltZXIgaGFzIGFuIHVucmVmIG1ldGhvZCwgY2FsbCBpdCB0byBhbGxvdyB0aGUgcHJvY2VzcyB0byBleGl0IGlmXG4gICAgLy8gdGhlcmUgYXJlIG5vIG90aGVyIGFjdGl2ZSBoYW5kbGVzLlxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBgRmFzdFRpbWVyYCBjbGFzcyBpcyBhIGRhdGEgc3RydWN0dXJlIGRlc2lnbmVkIHRvIHN0b3JlIGFuZCBtYW5hZ2VcbiAqIHRpbWVyIGluZm9ybWF0aW9uLlxuICovXG5jbGFzcyBGYXN0VGltZXIge1xuICBba0Zhc3RUaW1lcl0gPSB0cnVlXG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBvZiB0aGUgdGltZXIsIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICogLSBOT1RfSU5fTElTVCAoLTIpXG4gICAqIC0gVE9fQkVfQ0xFQVJFRCAoLTEpXG4gICAqIC0gUEVORElORyAoMClcbiAgICogLSBBQ1RJVkUgKDEpXG4gICAqXG4gICAqIEB0eXBlIHstMnwtMXwwfDF9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhdGUgPSBOT1RfSU5fTElTVFxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBjYWxsaW5nIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pZGxlVGltZW91dCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB3aGVuIHRoZSB0aW1lciB3YXMgc3RhcnRlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvXG4gICAqIGNhbGN1bGF0ZSB3aGVuIHRoZSB0aW1lciBzaG91bGQgZXhwaXJlLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAtMVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lkbGVTdGFydCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSB0aW1lciBleHBpcmVzLlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25UaW1lb3V0XG5cbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqXG4gICAqIEB0eXBlIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RpbWVyQXJnXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGQgd2FpdFxuICAgKiBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IGFyZ1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgdGhpcy5fb25UaW1lb3V0ID0gY2FsbGJhY2tcbiAgICB0aGlzLl9pZGxlVGltZW91dCA9IGRlbGF5XG4gICAgdGhpcy5fdGltZXJBcmcgPSBhcmdcblxuICAgIHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGltZXIncyBzdGFydCB0aW1lIHRvIHRoZSBjdXJyZW50IHRpbWUsIGFuZCByZXNjaGVkdWxlcyB0aGUgdGltZXJcbiAgICogdG8gY2FsbCBpdHMgY2FsbGJhY2sgYXQgdGhlIHByZXZpb3VzbHkgc3BlY2lmaWVkIGR1cmF0aW9uIGFkanVzdGVkIHRvIHRoZVxuICAgKiBjdXJyZW50IHRpbWUuXG4gICAqIFVzaW5nIHRoaXMgb24gYSB0aW1lciB0aGF0IGhhcyBhbHJlYWR5IGNhbGxlZCBpdHMgY2FsbGJhY2sgd2lsbCByZWFjdGl2YXRlXG4gICAqIHRoZSB0aW1lci5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWZyZXNoICgpIHtcbiAgICAvLyBJbiB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgdGhlIHRpbWVyIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhY3RpdmUgdGltZXJzLFxuICAgIC8vIGFkZCBpdCBiYWNrIHRvIHRoZSBhcnJheSB0byBiZSBwcm9jZXNzZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgb25UaWNrXG4gICAgLy8gZnVuY3Rpb24uXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBOT1RfSU5fTElTVCkge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIHRoZSBvbmx5IGFjdGl2ZSB0aW1lciwgcmVmcmVzaCB0aGUgZmFzdE5vd1RpbWVvdXQgZm9yXG4gICAgLy8gYmV0dGVyIHJlc29sdXRpb24uXG4gICAgaWYgKCFmYXN0Tm93VGltZW91dCB8fCBmYXN0VGltZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmVmcmVzaFRpbWVvdXQoKVxuICAgIH1cblxuICAgIC8vIFNldHRpbmcgdGhlIHN0YXRlIHRvIFBFTkRJTkcgd2lsbCBjYXVzZSB0aGUgdGltZXIgdG8gYmUgcmVzZXQgaW4gdGhlXG4gICAgLy8gbmV4dCB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBQRU5ESU5HXG4gIH1cblxuICAvKipcbiAgICogVGhlIGBjbGVhcmAgbWV0aG9kIGNhbmNlbHMgdGhlIHRpbWVyLCBwcmV2ZW50aW5nIGl0IGZyb20gZXhlY3V0aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFyICgpIHtcbiAgICAvLyBTZXQgdGhlIHN0YXRlIHRvIFRPX0JFX0NMRUFSRUQgdG8gbWFyayB0aGUgdGltZXIgZm9yIHJlbW92YWwgaW4gdGhlIG5leHRcbiAgICAvLyB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBUT19CRV9DTEVBUkVEXG5cbiAgICAvLyBSZXNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0aW1lciBpcyBubyBsb25nZXJcbiAgICAvLyBhY3RpdmUuXG4gICAgdGhpcy5faWRsZVN0YXJ0ID0gLTFcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXRUaW1lb3V0IGFuZCBjbGVhclRpbWVvdXQgZnVuY3Rpb24gdGhhdCBjYW4gYmVcbiAqIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIGZ1bmN0aW9ucy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgc2V0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgdGltZXIgd2hpY2ggZXhlY3V0ZXMgYSBmdW5jdGlvbiBvbmNlIHRoZVxuICAgKiB0aW1lciBleHBpcmVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGRcbiAgICogd2FpdCBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IFthcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogd2hlbiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHJldHVybnMge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn1cbiAgICovXG4gIHNldFRpbWVvdXQgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgLy8gSWYgdGhlIGRlbGF5IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgUkVTT0xVVElPTl9NUyB2YWx1ZSByZXR1cm4gYVxuICAgIC8vIG5hdGl2ZSBOb2RlLmpzIFRpbWVyIGluc3RhbmNlLlxuICAgIHJldHVybiBkZWxheSA8PSBSRVNPTFVUSU9OX01TXG4gICAgICA/IHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gICAgICA6IG5ldyBGYXN0VGltZXIoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgY2xlYXJUaW1lb3V0IG1ldGhvZCBjYW5jZWxzIGFuIGluc3RhbnRpYXRlZCBUaW1lciBwcmV2aW91c2x5IGNyZWF0ZWRcbiAgICogYnkgY2FsbGluZyBzZXRUaW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn0gdGltZW91dFxuICAgKi9cbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgLy8gSWYgdGhlIHRpbWVvdXQgaXMgYSBGYXN0VGltZXIsIGNhbGwgaXRzIG93biBjbGVhciBtZXRob2QuXG4gICAgaWYgKHRpbWVvdXRba0Zhc3RUaW1lcl0pIHtcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgICAqL1xuICAgICAgdGltZW91dC5jbGVhcigpXG4gICAgICAvLyBPdGhlcndpc2UgaXQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBuYXRpdmUgTm9kZUpTLlRpbWVvdXQsIHNvIGNhbGwgdGhlXG4gICAgICAvLyBOb2RlLmpzIG5hdGl2ZSBjbGVhclRpbWVvdXQgZnVuY3Rpb24uXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgIH1cbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBzZXRGYXN0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgZmFzdFRpbWVyIHdoaWNoIGV4ZWN1dGVzIGEgZnVuY3Rpb24gb25jZVxuICAgKiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGltZXJcbiAgICogZXhwaXJlcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IFRoZSB0aW1lLCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgdGltZXIgc2hvdWxkXG4gICAqIHdhaXQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gb3IgY29kZSBpcyBleGVjdXRlZC5cbiAgICogQHBhcmFtIHsqfSBbYXJnXSBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqIEByZXR1cm5zIHtGYXN0VGltZXJ9XG4gICAqL1xuICBzZXRGYXN0VGltZW91dCAoY2FsbGJhY2ssIGRlbGF5LCBhcmcpIHtcbiAgICByZXR1cm4gbmV3IEZhc3RUaW1lcihjYWxsYmFjaywgZGVsYXksIGFyZylcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBjbGVhclRpbWVvdXQgbWV0aG9kIGNhbmNlbHMgYW4gaW5zdGFudGlhdGVkIEZhc3RUaW1lciBwcmV2aW91c2x5XG4gICAqIGNyZWF0ZWQgYnkgY2FsbGluZyBzZXRGYXN0VGltZW91dC5cbiAgICpcbiAgICogQHBhcmFtIHtGYXN0VGltZXJ9IHRpbWVvdXRcbiAgICovXG4gIGNsZWFyRmFzdFRpbWVvdXQgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsZWFyKClcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBub3cgbWV0aG9kIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcm5hbCBmYXN0IHRpbWVyIGNsb2NrLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgbm93ICgpIHtcbiAgICByZXR1cm4gZmFzdE5vd1xuICB9LFxuICAvKipcbiAgICogVHJpZ2dlciB0aGUgb25UaWNrIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqIEV4cG9ydGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG4gICAqIE1hcmtpbmcgYXMgZGVwcmVjYXRlZCB0byBkaXNjb3VyYWdlIGFueSB1c2Ugb3V0c2lkZSBvZiB0ZXN0aW5nLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlbGF5PTBdIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gYWRkIHRvIHRoZSBub3cgdmFsdWUuXG4gICAqL1xuICB0aWNrIChkZWxheSA9IDApIHtcbiAgICBmYXN0Tm93ICs9IGRlbGF5IC0gUkVTT0xVVElPTl9NUyArIDFcbiAgICBvblRpY2soKVxuICAgIG9uVGljaygpXG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCBGYXN0VGltZXJzLlxuICAgKiBFeHBvcnRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHJlc2V0ICgpIHtcbiAgICBmYXN0Tm93ID0gMFxuICAgIGZhc3RUaW1lcnMubGVuZ3RoID0gMFxuICAgIGNsZWFyVGltZW91dChmYXN0Tm93VGltZW91dClcbiAgICBmYXN0Tm93VGltZW91dCA9IG51bGxcbiAgfSxcbiAgLyoqXG4gICAqIEV4cG9ydGluZyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGtGYXN0VGltZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbm9kZTpuZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBDb25uZWN0VGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB0aW1lcnMgPSByZXF1aXJlKCcuLi91dGlsL3RpbWVycycpXG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxubGV0IHRscyAvLyBpbmNsdWRlIHRscyBjb25kaXRpb25hbGx5IHNpbmNlIGl0IGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlXG5cbi8vIFRPRE86IHNlc3Npb24gcmUtdXNlIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBmaXJzdFxuLy8gY29ubmVjdGlvbiB0byByZXNvbHZlIHRoZSBzZXNzaW9uIGFuZCBtaWdodCB0aGVyZWZvcmVcbi8vIHJlc29sdmUgdGhlIHNhbWUgc2VydmVybmFtZSBtdWx0aXBsZSB0aW1lcyBldmVuIHdoZW5cbi8vIHJlLXVzZSBpcyBlbmFibGVkLlxuXG5sZXQgU2Vzc2lvbkNhY2hlXG4vLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbmlmIChnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgIShwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFIHx8IHByb2Nlc3MuZW52LlVORElDSV9OT19GRykpIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgV2Vha1Nlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeSA9IG5ldyBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkoKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPCB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChrZXkpXG4gICAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgICByZXR1cm4gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgbmV3IFdlYWtSZWYoc2Vzc2lvbikpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkucmVnaXN0ZXIoc2Vzc2lvbiwgc2Vzc2lvbktleSlcbiAgICB9XG4gIH1cbn0gZWxzZSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFNpbXBsZVNlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA+PSB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAvLyByZW1vdmUgdGhlIG9sZGVzdCBzZXNzaW9uXG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IG9sZGVzdEtleSB9ID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmtleXMoKS5uZXh0KClcbiAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDb25uZWN0b3IgKHsgYWxsb3dIMiwgbWF4Q2FjaGVkU2Vzc2lvbnMsIHNvY2tldFBhdGgsIHRpbWVvdXQsIHNlc3Npb246IGN1c3RvbVNlc3Npb24sIC4uLm9wdHMgfSkge1xuICBpZiAobWF4Q2FjaGVkU2Vzc2lvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4Q2FjaGVkU2Vzc2lvbnMpIHx8IG1heENhY2hlZFNlc3Npb25zIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENhY2hlZFNlc3Npb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogc29ja2V0UGF0aCwgLi4ub3B0cyB9XG4gIGNvbnN0IHNlc3Npb25DYWNoZSA9IG5ldyBTZXNzaW9uQ2FjaGUobWF4Q2FjaGVkU2Vzc2lvbnMgPT0gbnVsbCA/IDEwMCA6IG1heENhY2hlZFNlc3Npb25zKVxuICB0aW1lb3V0ID0gdGltZW91dCA9PSBudWxsID8gMTBlMyA6IHRpbWVvdXRcbiAgYWxsb3dIMiA9IGFsbG93SDIgIT0gbnVsbCA/IGFsbG93SDIgOiBmYWxzZVxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdCAoeyBob3N0bmFtZSwgaG9zdCwgcHJvdG9jb2wsIHBvcnQsIHNlcnZlcm5hbWUsIGxvY2FsQWRkcmVzcywgaHR0cFNvY2tldCB9LCBjYWxsYmFjaykge1xuICAgIGxldCBzb2NrZXRcbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICBpZiAoIXRscykge1xuICAgICAgICB0bHMgPSByZXF1aXJlKCdub2RlOnRscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGFzc2VydChzZXNzaW9uS2V5KVxuXG4gICAgICBjb25zdCBzZXNzaW9uID0gY3VzdG9tU2Vzc2lvbiB8fCBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgcG9ydCA9IHBvcnQgfHwgNDQzXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuXG4gICAgICBzb2NrZXRcbiAgICAgICAgLm9uKCdzZXNzaW9uJywgZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBDYW4gYSBzZXNzaW9uIGJlY29tZSBpbnZhbGlkIG9uY2UgZXN0YWJsaXNoZWQ/IERvbid0IHRoaW5rIHNvP1xuICAgICAgICAgIHNlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KCFodHRwU29ja2V0LCAnaHR0cFNvY2tldCBjYW4gb25seSBiZSBzZW50IG9uIFRMUyB1cGRhdGUnKVxuXG4gICAgICBwb3J0ID0gcG9ydCB8fCA4MFxuXG4gICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDY0ICogMTAyNCwgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICBwb3J0LFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTZXQgVENQIGtlZXAgYWxpdmUgb3B0aW9ucyBvbiB0aGUgc29ja2V0IGhlcmUgaW5zdGVhZCBvZiBpbiBjb25uZWN0KCkgZm9yIHRoZSBjYXNlIG9mIGFzc2lnbmluZyB0aGUgc29ja2V0XG4gICAgaWYgKG9wdGlvbnMua2VlcEFsaXZlID09IG51bGwgfHwgb3B0aW9ucy5rZWVwQWxpdmUpIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZUluaXRpYWxEZWxheSA9IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5ID09PSB1bmRlZmluZWQgPyA2MGUzIDogb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXlcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwga2VlcEFsaXZlSW5pdGlhbERlbGF5KVxuICAgIH1cblxuICAgIGNvbnN0IGNsZWFyQ29ubmVjdFRpbWVvdXQgPSBzZXR1cENvbm5lY3RUaW1lb3V0KG5ldyBXZWFrUmVmKHNvY2tldCksIHsgdGltZW91dCwgaG9zdG5hbWUsIHBvcnQgfSlcblxuICAgIHNvY2tldFxuICAgICAgLnNldE5vRGVsYXkodHJ1ZSlcbiAgICAgIC5vbmNlKHByb3RvY29sID09PSAnaHR0cHM6JyA/ICdzZWN1cmVDb25uZWN0JyA6ICdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhjbGVhckNvbm5lY3RUaW1lb3V0KVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihudWxsLCB0aGlzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2xlYXJDb25uZWN0VGltZW91dClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtXZWFrUmVmPG5ldC5Tb2NrZXQ+fSBzb2NrZXRXZWFrUmVmXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMudGltZW91dFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuaG9zdG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLnBvcnRcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICovXG5jb25zdCBzZXR1cENvbm5lY3RUaW1lb3V0ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICA/IChzb2NrZXRXZWFrUmVmLCBvcHRzKSA9PiB7XG4gICAgICBpZiAoIW9wdHMudGltZW91dCkge1xuICAgICAgICByZXR1cm4gbm9vcFxuICAgICAgfVxuXG4gICAgICBsZXQgczEgPSBudWxsXG4gICAgICBsZXQgczIgPSBudWxsXG4gICAgICBjb25zdCBmYXN0VGltZXIgPSB0aW1lcnMuc2V0RmFzdFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc2V0SW1tZWRpYXRlIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHByaW9yaXRpemUgc29ja2V0IGVycm9yIGV2ZW50cyBvdmVyIHRpbWVvdXRzXG4gICAgICAgIHMxID0gc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgLy8gV2luZG93cyBuZWVkcyBhbiBleHRyYSBzZXRJbW1lZGlhdGUgcHJvYmFibHkgZHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIGluIHRoZSBzb2NrZXQgbG9naWNcbiAgICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldFdlYWtSZWYuZGVyZWYoKSwgb3B0cykpXG4gICAgICAgIH0pXG4gICAgICB9LCBvcHRzLnRpbWVvdXQpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aW1lcnMuY2xlYXJGYXN0VGltZW91dChmYXN0VGltZXIpXG4gICAgICAgIGNsZWFySW1tZWRpYXRlKHMxKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMilcbiAgICAgIH1cbiAgICB9XG4gIDogKHNvY2tldFdlYWtSZWYsIG9wdHMpID0+IHtcbiAgICAgIGlmICghb3B0cy50aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiBub29wXG4gICAgICB9XG5cbiAgICAgIGxldCBzMSA9IG51bGxcbiAgICAgIGNvbnN0IGZhc3RUaW1lciA9IHRpbWVycy5zZXRGYXN0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3JpdGl6ZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICAgICAgczEgPSBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgIG9uQ29ubmVjdFRpbWVvdXQoc29ja2V0V2Vha1JlZi5kZXJlZigpLCBvcHRzKVxuICAgICAgICB9KVxuICAgICAgfSwgb3B0cy50aW1lb3V0KVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGltZXJzLmNsZWFyRmFzdFRpbWVvdXQoZmFzdFRpbWVyKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMSlcbiAgICAgIH1cbiAgICB9XG5cbi8qKlxuICogQHBhcmFtIHtuZXQuU29ja2V0fSBzb2NrZXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0cy50aW1lb3V0XG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5ob3N0bmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMucG9ydFxuICovXG5mdW5jdGlvbiBvbkNvbm5lY3RUaW1lb3V0IChzb2NrZXQsIG9wdHMpIHtcbiAgLy8gVGhlIHNvY2tldCBjb3VsZCBiZSBhbHJlYWR5IGdhcmJhZ2UgY29sbGVjdGVkXG4gIGlmIChzb2NrZXQgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IG1lc3NhZ2UgPSAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICBpZiAoQXJyYXkuaXNBcnJheShzb2NrZXQuYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRlZEFkZHJlc3NlcykpIHtcbiAgICBtZXNzYWdlICs9IGAgKGF0dGVtcHRlZCBhZGRyZXNzZXM6ICR7c29ja2V0LmF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0ZWRBZGRyZXNzZXMuam9pbignLCAnKX0sYFxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgKz0gYCAoYXR0ZW1wdGVkIGFkZHJlc3M6ICR7b3B0cy5ob3N0bmFtZX06JHtvcHRzLnBvcnR9LGBcbiAgfVxuXG4gIG1lc3NhZ2UgKz0gYCB0aW1lb3V0OiAke29wdHMudGltZW91dH1tcylgXG5cbiAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IENvbm5lY3RUaW1lb3V0RXJyb3IobWVzc2FnZSkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW51bVRvTWFwID0gdm9pZCAwO1xuZnVuY3Rpb24gZW51bVRvTWFwKG9iaikge1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZW51bVRvTWFwID0gZW51bVRvTWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSBleHBvcnRzLkhFQURFUl9TVEFURSA9IGV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SID0gZXhwb3J0cy5DT05ORUNUSU9OX1RPS0VOX0NIQVJTID0gZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBleHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBleHBvcnRzLkhFWCA9IGV4cG9ydHMuVVJMX0NIQVIgPSBleHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IGV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLk1BUksgPSBleHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5OVU0gPSBleHBvcnRzLkhFWF9NQVAgPSBleHBvcnRzLk5VTV9NQVAgPSBleHBvcnRzLkFMUEhBID0gZXhwb3J0cy5GSU5JU0ggPSBleHBvcnRzLkhfTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EU19SVFNQID0gZXhwb3J0cy5NRVRIT0RTX0lDRSA9IGV4cG9ydHMuTUVUSE9EU19IVFRQID0gZXhwb3J0cy5NRVRIT0RTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5GTEFHUyA9IGV4cG9ydHMuVFlQRSA9IGV4cG9ydHMuRVJST1IgPSB2b2lkIDA7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vLyBDIGhlYWRlcnNcbnZhciBFUlJPUjtcbihmdW5jdGlvbiAoRVJST1IpIHtcbiAgICBFUlJPUltFUlJPUltcIk9LXCJdID0gMF0gPSBcIk9LXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlRFUk5BTFwiXSA9IDFdID0gXCJJTlRFUk5BTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiU1RSSUNUXCJdID0gMl0gPSBcIlNUUklDVFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiTEZfRVhQRUNURURcIl0gPSAzXSA9IFwiTEZfRVhQRUNURURcIjtcbiAgICBFUlJPUltFUlJPUltcIlVORVhQRUNURURfQ09OVEVOVF9MRU5HVEhcIl0gPSA0XSA9IFwiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0xPU0VEX0NPTk5FQ1RJT05cIl0gPSA1XSA9IFwiQ0xPU0VEX0NPTk5FQ1RJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfTUVUSE9EXCJdID0gNl0gPSBcIklOVkFMSURfTUVUSE9EXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1VSTFwiXSA9IDddID0gXCJJTlZBTElEX1VSTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05TVEFOVFwiXSA9IDhdID0gXCJJTlZBTElEX0NPTlNUQU5UXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1ZFUlNJT05cIl0gPSA5XSA9IFwiSU5WQUxJRF9WRVJTSU9OXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiXSA9IDEwXSA9IFwiSU5WQUxJRF9IRUFERVJfVE9LRU5cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIl0gPSAxMV0gPSBcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ0hVTktfU0laRVwiXSA9IDEyXSA9IFwiSU5WQUxJRF9DSFVOS19TSVpFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1NUQVRVU1wiXSA9IDEzXSA9IFwiSU5WQUxJRF9TVEFUVVNcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfRU9GX1NUQVRFXCJdID0gMTRdID0gXCJJTlZBTElEX0VPRl9TVEFURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiXSA9IDE1XSA9IFwiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9CRUdJTlwiXSA9IDE2XSA9IFwiQ0JfTUVTU0FHRV9CRUdJTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfSEVBREVSU19DT01QTEVURVwiXSA9IDE3XSA9IFwiQ0JfSEVBREVSU19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9DT01QTEVURVwiXSA9IDE4XSA9IFwiQ0JfTUVTU0FHRV9DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfSEVBREVSXCJdID0gMTldID0gXCJDQl9DSFVOS19IRUFERVJcIjtcbiAgICBFUlJPUltFUlJPUltcIkNCX0NIVU5LX0NPTVBMRVRFXCJdID0gMjBdID0gXCJDQl9DSFVOS19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEXCJdID0gMjFdID0gXCJQQVVTRURcIjtcbiAgICBFUlJPUltFUlJPUltcIlBBVVNFRF9VUEdSQURFXCJdID0gMjJdID0gXCJQQVVTRURfVVBHUkFERVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX0gyX1VQR1JBREVcIl0gPSAyM10gPSBcIlBBVVNFRF9IMl9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJVU0VSXCJdID0gMjRdID0gXCJVU0VSXCI7XG59KShFUlJPUiA9IGV4cG9ydHMuRVJST1IgfHwgKGV4cG9ydHMuRVJST1IgPSB7fSkpO1xudmFyIFRZUEU7XG4oZnVuY3Rpb24gKFRZUEUpIHtcbiAgICBUWVBFW1RZUEVbXCJCT1RIXCJdID0gMF0gPSBcIkJPVEhcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVFVRVNUXCJdID0gMV0gPSBcIlJFUVVFU1RcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVNQT05TRVwiXSA9IDJdID0gXCJSRVNQT05TRVwiO1xufSkoVFlQRSA9IGV4cG9ydHMuVFlQRSB8fCAoZXhwb3J0cy5UWVBFID0ge30pKTtcbnZhciBGTEFHUztcbihmdW5jdGlvbiAoRkxBR1MpIHtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDFdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSAyXSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9VUEdSQURFXCJdID0gNF0gPSBcIkNPTk5FQ1RJT05fVVBHUkFERVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ0hVTktFRFwiXSA9IDhdID0gXCJDSFVOS0VEXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJVUEdSQURFXCJdID0gMTZdID0gXCJVUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05URU5UX0xFTkdUSFwiXSA9IDMyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlNLSVBCT0RZXCJdID0gNjRdID0gXCJTS0lQQk9EWVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiVFJBSUxJTkdcIl0gPSAxMjhdID0gXCJUUkFJTElOR1wiO1xuICAgIC8vIDEgPDwgOCBpcyB1bnVzZWRcbiAgICBGTEFHU1tGTEFHU1tcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gNTEyXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbn0pKEZMQUdTID0gZXhwb3J0cy5GTEFHUyB8fCAoZXhwb3J0cy5GTEFHUyA9IHt9KSk7XG52YXIgTEVOSUVOVF9GTEFHUztcbihmdW5jdGlvbiAoTEVOSUVOVF9GTEFHUykge1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkhFQURFUlNcIl0gPSAxXSA9IFwiSEVBREVSU1wiO1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkNIVU5LRURfTEVOR1RIXCJdID0gMl0gPSBcIkNIVU5LRURfTEVOR1RIXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiS0VFUF9BTElWRVwiXSA9IDRdID0gXCJLRUVQX0FMSVZFXCI7XG59KShMRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTIHx8IChleHBvcnRzLkxFTklFTlRfRkxBR1MgPSB7fSkpO1xudmFyIE1FVEhPRFM7XG4oZnVuY3Rpb24gKE1FVEhPRFMpIHtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERUxFVEVcIl0gPSAwXSA9IFwiREVMRVRFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUXCJdID0gMV0gPSBcIkdFVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkhFQURcIl0gPSAyXSA9IFwiSEVBRFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBPU1RcIl0gPSAzXSA9IFwiUE9TVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVVFwiXSA9IDRdID0gXCJQVVRcIjtcbiAgICAvKiBwYXRob2xvZ2ljYWwgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJDT05ORUNUXCJdID0gNV0gPSBcIkNPTk5FQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJPUFRJT05TXCJdID0gNl0gPSBcIk9QVElPTlNcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJUUkFDRVwiXSA9IDddID0gXCJUUkFDRVwiO1xuICAgIC8qIFdlYkRBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPUFlcIl0gPSA4XSA9IFwiQ09QWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxPQ0tcIl0gPSA5XSA9IFwiTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ09MXCJdID0gMTBdID0gXCJNS0NPTFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1PVkVcIl0gPSAxMV0gPSBcIk1PVkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QRklORFwiXSA9IDEyXSA9IFwiUFJPUEZJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QUEFUQ0hcIl0gPSAxM10gPSBcIlBST1BQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFQVJDSFwiXSA9IDE0XSA9IFwiU0VBUkNIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MT0NLXCJdID0gMTVdID0gXCJVTkxPQ0tcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJCSU5EXCJdID0gMTZdID0gXCJCSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVCSU5EXCJdID0gMTddID0gXCJSRUJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkJJTkRcIl0gPSAxOF0gPSBcIlVOQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkFDTFwiXSA9IDE5XSA9IFwiQUNMXCI7XG4gICAgLyogc3VidmVyc2lvbiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlJFUE9SVFwiXSA9IDIwXSA9IFwiUkVQT1JUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtBQ1RJVklUWVwiXSA9IDIxXSA9IFwiTUtBQ1RJVklUWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNIRUNLT1VUXCJdID0gMjJdID0gXCJDSEVDS09VVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1FUkdFXCJdID0gMjNdID0gXCJNRVJHRVwiO1xuICAgIC8qIHVwbnAgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNLVNFQVJDSFwiXSA9IDI0XSA9IFwiTS1TRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJOT1RJRllcIl0gPSAyNV0gPSBcIk5PVElGWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNVQlNDUklCRVwiXSA9IDI2XSA9IFwiU1VCU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5TVUJTQ1JJQkVcIl0gPSAyN10gPSBcIlVOU1VCU0NSSUJFXCI7XG4gICAgLyogUkZDLTU3ODkgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQQVRDSFwiXSA9IDI4XSA9IFwiUEFUQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQVVJHRVwiXSA9IDI5XSA9IFwiUFVSR0VcIjtcbiAgICAvKiBDYWxEQVYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0NBTEVOREFSXCJdID0gMzBdID0gXCJNS0NBTEVOREFSXCI7XG4gICAgLyogUkZDLTIwNjgsIHNlY3Rpb24gMTkuNi4xLjIgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJMSU5LXCJdID0gMzFdID0gXCJMSU5LXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MSU5LXCJdID0gMzJdID0gXCJVTkxJTktcIjtcbiAgICAvKiBpY2VjYXN0ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU09VUkNFXCJdID0gMzNdID0gXCJTT1VSQ0VcIjtcbiAgICAvKiBSRkMtNzU0MCwgc2VjdGlvbiAxMS42ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFJJXCJdID0gMzRdID0gXCJQUklcIjtcbiAgICAvKiBSRkMtMjMyNiBSVFNQICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiREVTQ1JJQkVcIl0gPSAzNV0gPSBcIkRFU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQU5OT1VOQ0VcIl0gPSAzNl0gPSBcIkFOTk9VTkNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VUVVBcIl0gPSAzN10gPSBcIlNFVFVQXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUExBWVwiXSA9IDM4XSA9IFwiUExBWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVVNFXCJdID0gMzldID0gXCJQQVVTRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRFQVJET1dOXCJdID0gNDBdID0gXCJURUFSRE9XTlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkdFVF9QQVJBTUVURVJcIl0gPSA0MV0gPSBcIkdFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRfUEFSQU1FVEVSXCJdID0gNDJdID0gXCJTRVRfUEFSQU1FVEVSXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVESVJFQ1RcIl0gPSA0M10gPSBcIlJFRElSRUNUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVDT1JEXCJdID0gNDRdID0gXCJSRUNPUkRcIjtcbiAgICAvKiBSQU9QICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiRkxVU0hcIl0gPSA0NV0gPSBcIkZMVVNIXCI7XG59KShNRVRIT0RTID0gZXhwb3J0cy5NRVRIT0RTIHx8IChleHBvcnRzLk1FVEhPRFMgPSB7fSkpO1xuZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBbXG4gICAgTUVUSE9EUy5ERUxFVEUsXG4gICAgTUVUSE9EUy5HRVQsXG4gICAgTUVUSE9EUy5IRUFELFxuICAgIE1FVEhPRFMuUE9TVCxcbiAgICBNRVRIT0RTLlBVVCxcbiAgICBNRVRIT0RTLkNPTk5FQ1QsXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuVFJBQ0UsXG4gICAgTUVUSE9EUy5DT1BZLFxuICAgIE1FVEhPRFMuTE9DSyxcbiAgICBNRVRIT0RTLk1LQ09MLFxuICAgIE1FVEhPRFMuTU9WRSxcbiAgICBNRVRIT0RTLlBST1BGSU5ELFxuICAgIE1FVEhPRFMuUFJPUFBBVENILFxuICAgIE1FVEhPRFMuU0VBUkNILFxuICAgIE1FVEhPRFMuVU5MT0NLLFxuICAgIE1FVEhPRFMuQklORCxcbiAgICBNRVRIT0RTLlJFQklORCxcbiAgICBNRVRIT0RTLlVOQklORCxcbiAgICBNRVRIT0RTLkFDTCxcbiAgICBNRVRIT0RTLlJFUE9SVCxcbiAgICBNRVRIT0RTLk1LQUNUSVZJVFksXG4gICAgTUVUSE9EUy5DSEVDS09VVCxcbiAgICBNRVRIT0RTLk1FUkdFLFxuICAgIE1FVEhPRFNbJ00tU0VBUkNIJ10sXG4gICAgTUVUSE9EUy5OT1RJRlksXG4gICAgTUVUSE9EUy5TVUJTQ1JJQkUsXG4gICAgTUVUSE9EUy5VTlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlBBVENILFxuICAgIE1FVEhPRFMuUFVSR0UsXG4gICAgTUVUSE9EUy5NS0NBTEVOREFSLFxuICAgIE1FVEhPRFMuTElOSyxcbiAgICBNRVRIT0RTLlVOTElOSyxcbiAgICBNRVRIT0RTLlBSSSxcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBzaG91bGQgd2UgYWxsb3cgaXQgd2l0aCBIVFRQP1xuICAgIE1FVEhPRFMuU09VUkNFLFxuXTtcbmV4cG9ydHMuTUVUSE9EU19JQ0UgPSBbXG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBbXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuREVTQ1JJQkUsXG4gICAgTUVUSE9EUy5BTk5PVU5DRSxcbiAgICBNRVRIT0RTLlNFVFVQLFxuICAgIE1FVEhPRFMuUExBWSxcbiAgICBNRVRIT0RTLlBBVVNFLFxuICAgIE1FVEhPRFMuVEVBUkRPV04sXG4gICAgTUVUSE9EUy5HRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuU0VUX1BBUkFNRVRFUixcbiAgICBNRVRIT0RTLlJFRElSRUNULFxuICAgIE1FVEhPRFMuUkVDT1JELFxuICAgIE1FVEhPRFMuRkxVU0gsXG4gICAgLy8gRm9yIEFpclBsYXlcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLlBPU1QsXG5dO1xuZXhwb3J0cy5NRVRIT0RfTUFQID0gdXRpbHNfMS5lbnVtVG9NYXAoTUVUSE9EUyk7XG5leHBvcnRzLkhfTUVUSE9EX01BUCA9IHt9O1xuT2JqZWN0LmtleXMoZXhwb3J0cy5NRVRIT0RfTUFQKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoL15ILy50ZXN0KGtleSkpIHtcbiAgICAgICAgZXhwb3J0cy5IX01FVEhPRF9NQVBba2V5XSA9IGV4cG9ydHMuTUVUSE9EX01BUFtrZXldO1xuICAgIH1cbn0pO1xudmFyIEZJTklTSDtcbihmdW5jdGlvbiAoRklOSVNIKSB7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVcIl0gPSAwXSA9IFwiU0FGRVwiO1xuICAgIEZJTklTSFtGSU5JU0hbXCJTQUZFX1dJVEhfQ0JcIl0gPSAxXSA9IFwiU0FGRV9XSVRIX0NCXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlVOU0FGRVwiXSA9IDJdID0gXCJVTlNBRkVcIjtcbn0pKEZJTklTSCA9IGV4cG9ydHMuRklOSVNIIHx8IChleHBvcnRzLkZJTklTSCA9IHt9KSk7XG5leHBvcnRzLkFMUEhBID0gW107XG5mb3IgKGxldCBpID0gJ0EnLmNoYXJDb2RlQXQoMCk7IGkgPD0gJ1onLmNoYXJDb2RlQXQoMCk7IGkrKykge1xuICAgIC8vIFVwcGVyIGNhc2VcbiAgICBleHBvcnRzLkFMUEhBLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XG4gICAgLy8gTG93ZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkgKyAweDIwKSk7XG59XG5leHBvcnRzLk5VTV9NQVAgPSB7XG4gICAgMDogMCwgMTogMSwgMjogMiwgMzogMywgNDogNCxcbiAgICA1OiA1LCA2OiA2LCA3OiA3LCA4OiA4LCA5OiA5LFxufTtcbmV4cG9ydHMuSEVYX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG4gICAgQTogMFhBLCBCOiAwWEIsIEM6IDBYQywgRDogMFhELCBFOiAwWEUsIEY6IDBYRixcbiAgICBhOiAweGEsIGI6IDB4YiwgYzogMHhjLCBkOiAweGQsIGU6IDB4ZSwgZjogMHhmLFxufTtcbmV4cG9ydHMuTlVNID0gW1xuICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5Jyxcbl07XG5leHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5BTFBIQS5jb25jYXQoZXhwb3J0cy5OVU0pO1xuZXhwb3J0cy5NQVJLID0gWyctJywgJ18nLCAnLicsICchJywgJ34nLCAnKicsICdcXCcnLCAnKCcsICcpJ107XG5leHBvcnRzLlVTRVJJTkZPX0NIQVJTID0gZXhwb3J0cy5BTFBIQU5VTVxuICAgIC5jb25jYXQoZXhwb3J0cy5NQVJLKVxuICAgIC5jb25jYXQoWyclJywgJzsnLCAnOicsICcmJywgJz0nLCAnKycsICckJywgJywnXSk7XG4vLyBUT0RPKGluZHV0bnkpOiB1c2UgUkZDXG5leHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IFtcbiAgICAnIScsICdcIicsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcoJywgJyknLCAnKicsICcrJywgJywnLCAnLScsICcuJywgJy8nLFxuICAgICc6JywgJzsnLCAnPCcsICc9JywgJz4nLFxuICAgICdAJywgJ1snLCAnXFxcXCcsICddJywgJ14nLCAnXycsXG4gICAgJ2AnLFxuICAgICd7JywgJ3wnLCAnfScsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSXG4gICAgLmNvbmNhdChbJ1xcdCcsICdcXGYnXSk7XG4vLyBBbGwgY2hhcmFjdGVycyB3aXRoIDB4ODAgYml0IHNldCB0byAxXG5mb3IgKGxldCBpID0gMHg4MDsgaSA8PSAweGZmOyBpKyspIHtcbiAgICBleHBvcnRzLlVSTF9DSEFSLnB1c2goaSk7XG59XG5leHBvcnRzLkhFWCA9IGV4cG9ydHMuTlVNLmNvbmNhdChbJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJ10pO1xuLyogVG9rZW5zIGFzIGRlZmluZWQgYnkgcmZjIDI2MTYuIEFsc28gbG93ZXJjYXNlcyB0aGVtLlxuICogICAgICAgIHRva2VuICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiAqICAgICBzZXBhcmF0b3JzICAgICA9IFwiKFwiIHwgXCIpXCIgfCBcIjxcIiB8IFwiPlwiIHwgXCJAXCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAqICAgICAgICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwie1wiIHwgXCJ9XCIgfCBTUCB8IEhUXG4gKi9cbmV4cG9ydHMuU1RSSUNUX1RPS0VOID0gW1xuICAgICchJywgJyMnLCAnJCcsICclJywgJyYnLCAnXFwnJyxcbiAgICAnKicsICcrJywgJy0nLCAnLicsXG4gICAgJ14nLCAnXycsICdgJyxcbiAgICAnfCcsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5UT0tFTiA9IGV4cG9ydHMuU1RSSUNUX1RPS0VOLmNvbmNhdChbJyAnXSk7XG4vKlxuICogVmVyaWZ5IHRoYXQgYSBjaGFyIGlzIGEgdmFsaWQgdmlzaWJsZSAocHJpbnRhYmxlKSBVUy1BU0NJSVxuICogY2hhcmFjdGVyIG9yICV4ODAtRkZcbiAqL1xuZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBbJ1xcdCddO1xuZm9yIChsZXQgaSA9IDMyOyBpIDw9IDI1NTsgaSsrKSB7XG4gICAgaWYgKGkgIT09IDEyNykge1xuICAgICAgICBleHBvcnRzLkhFQURFUl9DSEFSUy5wdXNoKGkpO1xuICAgIH1cbn1cbi8vICcsJyA9IFxceDQ0XG5leHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUy5maWx0ZXIoKGMpID0+IGMgIT09IDQ0KTtcbmV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLk5VTV9NQVA7XG5leHBvcnRzLk1JTk9SID0gZXhwb3J0cy5NQUpPUjtcbnZhciBIRUFERVJfU1RBVEU7XG4oZnVuY3Rpb24gKEhFQURFUl9TVEFURSkge1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJHRU5FUkFMXCJdID0gMF0gPSBcIkdFTkVSQUxcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTlwiXSA9IDFdID0gXCJDT05ORUNUSU9OXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTlRFTlRfTEVOR1RIXCJdID0gMl0gPSBcIkNPTlRFTlRfTEVOR1RIXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gM10gPSBcIlRSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlVQR1JBREVcIl0gPSA0XSA9IFwiVVBHUkFERVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIl0gPSA1XSA9IFwiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSA2XSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA3XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HX0NIVU5LRURcIl0gPSA4XSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiO1xufSkoSEVBREVSX1NUQVRFID0gZXhwb3J0cy5IRUFERVJfU1RBVEUgfHwgKGV4cG9ydHMuSEVBREVSX1NUQVRFID0ge30pKTtcbmV4cG9ydHMuU1BFQ0lBTF9IRUFERVJTID0ge1xuICAgICdjb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ2NvbnRlbnQtbGVuZ3RoJzogSEVBREVSX1NUQVRFLkNPTlRFTlRfTEVOR1RILFxuICAgICdwcm94eS1jb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ3RyYW5zZmVyLWVuY29kaW5nJzogSEVBREVSX1NUQVRFLlRSQU5TRkVSX0VOQ09ESU5HLFxuICAgICd1cGdyYWRlJzogSEVBREVSX1NUQVRFLlVQR1JBREUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzA3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3RYQUNBQVFSaHFRZ0EzQXdBZ0FFSUFOd01BSUFCQk9HcENBRGNEQUNBQVFUQnFRZ0EzQXdBZ0FFRW9ha0lBTndNQUlBQkJJR3BDQURjREFDQUFRUkJxUWdBM0F3QWdBRUVJYWtJQU53TUFJQUJCM1FFMkFod0xCZ0FnQUJBeUM1b3RBUXQvSXdCQkVHc2lDaVFBUWFUUUFDZ0NBQ0lKUlFSQVFlVFRBQ2dDQUNJRlJRUkFRZkRUQUVKL053SUFRZWpUQUVLQWdJU0FnSURBQURjQ0FFSGswd0FnQ2tFSWFrRndjVUhZcXRXcUJYTWlCVFlDQUVINDB3QkJBRFlDQUVISTB3QkJBRFlDQUF0QnpOTUFRWURVQkRZQ0FFR2MwQUJCZ05RRU5nSUFRYkRRQUNBRk5nSUFRYXpRQUVGL05nSUFRZERUQUVHQXJBTTJBZ0FEUUNBQlFjalFBR29nQVVHODBBQnFJZ0kyQWdBZ0FpQUJRYlRRQUdvaUF6WUNBQ0FCUWNEUUFHb2dBellDQUNBQlFkRFFBR29nQVVIRTBBQnFJZ00yQWdBZ0F5QUNOZ0lBSUFGQjJOQUFhaUFCUWN6UUFHb2lBallDQUNBQ0lBTTJBZ0FnQVVIVTBBQnFJQUkyQWdBZ0FVRWdhaUlCUVlBQ1J3MEFDMEdNMUFSQndhc0ROZ0lBUWFqUUFFSDAwd0FvQWdBMkFnQkJtTkFBUWNDckF6WUNBRUdrMEFCQmlOUUVOZ0lBUWN6L0IwRTROZ0lBUVlqVUJDRUpDd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI3QUZOQkVCQmpOQUFLQUlBSWdaQkVDQUFRUk5xUVhCeElBQkJDMGtiSWdSQkEzWWlBSFlpQVVFRGNRUkFBa0FnQVVFQmNTQUFja0VCY3lJQ1FRTjBJZ0JCdE5BQWFpSUJJQUJCdk5BQWFpZ0NBQ0lBS0FJSUlnTkdCRUJCak5BQUlBWkJmaUFDZDNFMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBRUVJYWlFQklBQWdBa0VEZENJQ1FRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREJFTFFaVFFBQ2dDQUNJSUlBUlBEUUVnQVFSQUFrQkJBaUFBZENJQ1FRQWdBbXR5SUFFZ0FIUnhhQ0lBUVFOMElnSkJ0TkFBYWlJQklBSkJ2TkFBYWlnQ0FDSUNLQUlJSWdOR0JFQkJqTkFBSUFaQmZpQUFkM0VpQmpZQ0FBd0JDeUFCSUFNMkFnZ2dBeUFCTmdJTUN5QUNJQVJCQTNJMkFnUWdBRUVEZENJQUlBUnJJUVVnQUNBQ2FpQUZOZ0lBSUFJZ0JHb2lCQ0FGUVFGeU5nSUVJQWdFUUNBSVFYaHhRYlRRQUdvaEFFR2cwQUFvQWdBaEF3Si9RUUVnQ0VFRGRuUWlBU0FHY1VVRVFFR00wQUFnQVNBR2NqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0F6WUNEQ0FBSUFNMkFnZ2dBeUFBTmdJTUlBTWdBVFlDQ0FzZ0FrRUlhaUVCUWFEUUFDQUVOZ0lBUVpUUUFDQUZOZ0lBREJFTFFaRFFBQ2dDQUNJTFJRMEJJQXRvUVFKMFFielNBR29vQWdBaUFDZ0NCRUY0Y1NBRWF5RUZJQUFoQWdOQUFrQWdBaWdDRUNJQlJRUkFJQUpCRkdvb0FnQWlBVVVOQVFzZ0FTZ0NCRUY0Y1NBRWF5SURJQVZKSVFJZ0F5QUZJQUliSVFVZ0FTQUFJQUliSVFBZ0FTRUNEQUVMQ3lBQUtBSVlJUWtnQUNnQ0RDSURJQUJIQkVCQm5OQUFLQUlBR2lBRElBQW9BZ2dpQVRZQ0NDQUJJQU0yQWd3TUVBc2dBRUVVYWlJQ0tBSUFJZ0ZGQkVBZ0FDZ0NFQ0lCUlEwRElBQkJFR29oQWdzRFFDQUNJUWNnQVNJRFFSUnFJZ0lvQWdBaUFRMEFJQU5CRUdvaEFpQURLQUlRSWdFTkFBc2dCMEVBTmdJQURBOExRWDhoQkNBQVFiOS9TdzBBSUFCQkUyb2lBVUZ3Y1NFRVFaRFFBQ2dDQUNJSVJRMEFRUUFnQkdzaEJRSkFBa0FDUUFKL1FRQWdCRUdBQWtrTkFCcEJIeUFFUWYvLy93ZExEUUFhSUFSQkppQUJRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9MSWdaQkFuUkJ2TklBYWlnQ0FDSUNSUVJBUVFBaEFVRUFJUU1NQVF0QkFDRUJJQVJCR1NBR1FRRjJhMEVBSUFaQkgwY2JkQ0VBUVFBaEF3TkFBa0FnQWlnQ0JFRjRjU0FFYXlJSElBVlBEUUFnQWlFRElBY2lCUTBBUVFBaEJTQUNJUUVNQXdzZ0FTQUNRUlJxS0FJQUlnY2dCeUFDSUFCQkhYWkJCSEZxUVJCcUtBSUFJZ0pHR3lBQklBY2JJUUVnQUVFQmRDRUFJQUlOQUFzTElBRWdBM0pGQkVCQkFDRURRUUlnQm5RaUFFRUFJQUJyY2lBSWNTSUFSUTBESUFCb1FRSjBRYnpTQUdvb0FnQWhBUXNnQVVVTkFRc0RRQ0FCS0FJRVFYaHhJQVJySWdJZ0JVa2hBQ0FDSUFVZ0FCc2hCU0FCSUFNZ0FCc2hBeUFCS0FJUUlnQUVmeUFBQlNBQlFSUnFLQUlBQ3lJQkRRQUxDeUFEUlEwQUlBVkJsTkFBS0FJQUlBUnJUdzBBSUFNb0FoZ2hCeUFESUFNb0Fnd2lBRWNFUUVHYzBBQW9BZ0FhSUFBZ0F5Z0NDQ0lCTmdJSUlBRWdBRFlDREF3T0N5QURRUlJxSWdJb0FnQWlBVVVFUUNBREtBSVFJZ0ZGRFFNZ0EwRVFhaUVDQ3dOQUlBSWhCaUFCSWdCQkZHb2lBaWdDQUNJQkRRQWdBRUVRYWlFQ0lBQW9BaEFpQVEwQUN5QUdRUUEyQWdBTURRdEJsTkFBS0FJQUlnTWdCRThFUUVHZzBBQW9BZ0FoQVFKQUlBTWdCR3NpQWtFUVR3UkFJQUVnQkdvaUFDQUNRUUZ5TmdJRUlBRWdBMm9nQWpZQ0FDQUJJQVJCQTNJMkFnUU1BUXNnQVNBRFFRTnlOZ0lFSUFFZ0Eyb2lBQ0FBS0FJRVFRRnlOZ0lFUVFBaEFFRUFJUUlMUVpUUUFDQUNOZ0lBUWFEUUFDQUFOZ0lBSUFGQkNHb2hBUXdQQzBHWTBBQW9BZ0FpQXlBRVN3UkFJQVFnQ1dvaUFDQURJQVJySWdGQkFYSTJBZ1JCcE5BQUlBQTJBZ0JCbU5BQUlBRTJBZ0FnQ1NBRVFRTnlOZ0lFSUFsQkNHb2hBUXdQQzBFQUlRRWdCQUovUWVUVEFDZ0NBQVJBUWV6VEFDZ0NBQXdCQzBIdzB3QkNmemNDQUVIbzB3QkNnSUNFZ0lDQXdBQTNBZ0JCNU5NQUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmalRBRUVBTmdJQVFjalRBRUVBTmdJQVFZQ0FCQXNpQUNBRVFjY0FhaUlGYWlJR1FRQWdBR3NpQjNFaUFrOEVRRUg4MHdCQk1EWUNBQXdQQ3dKQVFjVFRBQ2dDQUNJQlJRMEFRYnpUQUNnQ0FDSUlJQUpxSVFBZ0FDQUJUU0FBSUFoTGNRMEFRUUFoQVVIODB3QkJNRFlDQUF3UEMwSEkwd0F0QUFCQkJIRU5CQUpBQWtBZ0NRUkFRY3pUQUNFQkEwQWdBU2dDQUNJQUlBbE5CRUFnQUNBQktBSUVhaUFKU3cwREN5QUJLQUlJSWdFTkFBc0xRUUFRTXlJQVFYOUdEUVVnQWlFR1FlalRBQ2dDQUNJQlFRRnJJZ01nQUhFRVFDQUNJQUJySUFBZ0EycEJBQ0FCYTNGcUlRWUxJQVFnQms4TkJTQUdRZjcvLy84SFN3MEZRY1RUQUNnQ0FDSURCRUJCdk5NQUtBSUFJZ2NnQm1vaEFTQUJJQWRORFFZZ0FTQURTdzBHQ3lBR0VETWlBU0FBUncwQkRBY0xJQVlnQTJzZ0IzRWlCa0grLy8vL0Iwc05CQ0FHRURNaEFDQUFJQUVvQWdBZ0FTZ0NCR3BHRFFNZ0FDRUJDd0pBSUFZZ0JFSElBR3BQRFFBZ0FVRi9SZzBBUWV6VEFDZ0NBQ0lBSUFVZ0JtdHFRUUFnQUd0eElnQkIvdi8vL3dkTEJFQWdBU0VBREFjTElBQVFNMEYvUndSQUlBQWdCbW9oQmlBQklRQU1Cd3RCQUNBR2F4QXpHZ3dFQ3lBQklnQkJmMGNOQlF3REMwRUFJUU1NREF0QkFDRUFEQW9MSUFCQmYwY05BZ3RCeU5NQVFjalRBQ2dDQUVFRWNqWUNBQXNnQWtIKy8vLy9CMHNOQVNBQ0VETWhBRUVBRURNaEFTQUFRWDlHRFFFZ0FVRi9SZzBCSUFBZ0FVOE5BU0FCSUFCcklnWWdCRUU0YWswTkFRdEJ2Tk1BUWJ6VEFDZ0NBQ0FHYWlJQk5nSUFRY0RUQUNnQ0FDQUJTUVJBUWNEVEFDQUJOZ0lBQ3dKQUFrQUNRRUdrMEFBb0FnQWlBZ1JBUWN6VEFDRUJBMEFnQUNBQktBSUFJZ01nQVNnQ0JDSUZha1lOQWlBQktBSUlJZ0VOQUFzTUFndEJuTkFBS0FJQUlnRkJBRWNnQUNBQlQzRkZCRUJCbk5BQUlBQTJBZ0FMUVFBaEFVSFEwd0FnQmpZQ0FFSE0wd0FnQURZQ0FFR3MwQUJCZnpZQ0FFR3cwQUJCNU5NQUtBSUFOZ0lBUWRqVEFFRUFOZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCZUNBQWEwRVBjU0lCSUFCcUlnSWdCa0U0YXlJRElBRnJJZ0ZCQVhJMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBVFlDQUVHazBBQWdBallDQUNBQUlBTnFRVGcyQWdRTUFnc2dBQ0FDVFEwQUlBSWdBMGtOQUNBQktBSU1RUWh4RFFCQmVDQUNhMEVQY1NJQUlBSnFJZ05CbU5BQUtBSUFJQVpxSWdjZ0FHc2lBRUVCY2pZQ0JDQUJJQVVnQm1vMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBRFlDQUVHazBBQWdBellDQUNBQ0lBZHFRVGcyQWdRTUFRc2dBRUdjMEFBb0FnQkpCRUJCbk5BQUlBQTJBZ0FMSUFBZ0Jtb2hBMEhNMHdBaEFRSkFBa0FDUUFOQUlBTWdBU2dDQUVjRVFDQUJLQUlJSWdFTkFRd0NDd3NnQVMwQURFRUljVVVOQVF0QnpOTUFJUUVEUUNBQktBSUFJZ01nQWswRVFDQURJQUVvQWdScUlnVWdBa3NOQXdzZ0FTZ0NDQ0VCREFBTEFBc2dBU0FBTmdJQUlBRWdBU2dDQkNBR2FqWUNCQ0FBUVhnZ0FHdEJEM0ZxSWdrZ0JFRURjallDQkNBRFFYZ2dBMnRCRDNGcUlnWWdCQ0FKYWlJRWF5RUJJQUlnQmtZRVFFR2swQUFnQkRZQ0FFR1kwQUJCbU5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVEQWdMUWFEUUFDZ0NBQ0FHUmdSQVFhRFFBQ0FFTmdJQVFaVFFBRUdVMEFBb0FnQWdBV29pQURZQ0FDQUVJQUJCQVhJMkFnUWdBQ0FFYWlBQU5nSUFEQWdMSUFZb0FnUWlCVUVEY1VFQlJ3MEdJQVZCZUhFaENDQUZRZjhCVFFSQUlBVkJBM1loQXlBR0tBSUlJZ0FnQmlnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJ3c2dBaUFBTmdJSUlBQWdBallDREF3R0N5QUdLQUlZSVFjZ0JpQUdLQUlNSWdCSEJFQWdBQ0FHS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQVVMSUFaQkZHb2lBaWdDQUNJRlJRUkFJQVlvQWhBaUJVVU5CQ0FHUVJCcUlRSUxBMEFnQWlFRElBVWlBRUVVYWlJQ0tBSUFJZ1VOQUNBQVFSQnFJUUlnQUNnQ0VDSUZEUUFMSUFOQkFEWUNBQXdFQzBGNElBQnJRUTl4SWdFZ0FHb2lCeUFHUVRocklnTWdBV3NpQVVFQmNqWUNCQ0FBSUFOcVFUZzJBZ1FnQWlBRlFUY2dCV3RCRDNGcVFUOXJJZ01nQXlBQ1FSQnFTUnNpQTBFak5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQWMyQWdBZ0EwRVFha0hVMHdBcEFnQTNBZ0FnQTBITTB3QXBBZ0EzQWdoQjFOTUFJQU5CQ0dvMkFnQkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkIyTk1BUVFBMkFnQWdBMEVrYWlFQkEwQWdBVUVITmdJQUlBVWdBVUVFYWlJQlN3MEFDeUFDSUFOR0RRQWdBeUFES0FJRVFYNXhOZ0lFSUFNZ0F5QUNheUlGTmdJQUlBSWdCVUVCY2pZQ0JDQUZRZjhCVFFSQUlBVkJlSEZCdE5BQWFpRUFBbjlCak5BQUtBSUFJZ0ZCQVNBRlFRTjJkQ0lEY1VVRVFFR00wQUFnQVNBRGNqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUVnQlVILy8vOEhUUVJBSUFWQkppQUZRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQVFzZ0FpQUJOZ0ljSUFKQ0FEY0NFQ0FCUVFKMFFielNBR29oQUVHUTBBQW9BZ0FpQTBFQklBRjBJZ1p4UlFSQUlBQWdBallDQUVHUTBBQWdBeUFHY2pZQ0FDQUNJQUEyQWhnZ0FpQUNOZ0lJSUFJZ0FqWUNEQXdCQ3lBRlFSa2dBVUVCZG10QkFDQUJRUjlIRzNRaEFTQUFLQUlBSVFNQ1FBTkFJQU1pQUNnQ0JFRjRjU0FGUmcwQklBRkJIWFloQXlBQlFRRjBJUUVnQUNBRFFRUnhha0VRYWlJR0tBSUFJZ01OQUFzZ0JpQUNOZ0lBSUFJZ0FEWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUFvQWdnaUFTQUNOZ0lNSUFBZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFBTmdJTUlBSWdBVFlDQ0F0Qm1OQUFLQUlBSWdFZ0JFME5BRUdrMEFBb0FnQWlBQ0FFYWlJQ0lBRWdCR3NpQVVFQmNqWUNCRUdZMEFBZ0FUWUNBRUdrMEFBZ0FqWUNBQ0FBSUFSQkEzSTJBZ1FnQUVFSWFpRUJEQWdMUVFBaEFVSDgwd0JCTURZQ0FBd0hDMEVBSVFBTElBZEZEUUFDUUNBR0tBSWNJZ0pCQW5SQnZOSUFhaUlES0FJQUlBWkdCRUFnQXlBQU5nSUFJQUFOQVVHUTBBQkJrTkFBS0FJQVFYNGdBbmR4TmdJQURBSUxJQWRCRUVFVUlBY29BaEFnQmtZYmFpQUFOZ0lBSUFCRkRRRUxJQUFnQnpZQ0dDQUdLQUlRSWdJRVFDQUFJQUkyQWhBZ0FpQUFOZ0lZQ3lBR1FSUnFLQUlBSWdKRkRRQWdBRUVVYWlBQ05nSUFJQUlnQURZQ0dBc2dBU0FJYWlFQklBWWdDR29pQmlnQ0JDRUZDeUFHSUFWQmZuRTJBZ1FnQVNBRWFpQUJOZ0lBSUFRZ0FVRUJjallDQkNBQlFmOEJUUVJBSUFGQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FCUVFOMmRDSUJjVVVFUUVHTTBBQWdBU0FDY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQkRZQ0RDQUFJQVEyQWdnZ0JDQUFOZ0lNSUFRZ0FUWUNDQXdCQzBFZklRVWdBVUgvLy84SFRRUkFJQUZCSmlBQlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hCUXNnQkNBRk5nSWNJQVJDQURjQ0VDQUZRUUowUWJ6U0FHb2hBRUdRMEFBb0FnQWlBa0VCSUFWMElnTnhSUVJBSUFBZ0JEWUNBRUdRMEFBZ0FpQURjallDQUNBRUlBQTJBaGdnQkNBRU5nSUlJQVFnQkRZQ0RBd0JDeUFCUVJrZ0JVRUJkbXRCQUNBRlFSOUhHM1FoQlNBQUtBSUFJUUFDUUFOQUlBQWlBaWdDQkVGNGNTQUJSZzBCSUFWQkhYWWhBQ0FGUVFGMElRVWdBaUFBUVFSeGFrRVFhaUlES0FJQUlnQU5BQXNnQXlBRU5nSUFJQVFnQWpZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFFTElBSW9BZ2dpQUNBRU5nSU1JQUlnQkRZQ0NDQUVRUUEyQWhnZ0JDQUNOZ0lNSUFRZ0FEWUNDQXNnQ1VFSWFpRUJEQUlMQWtBZ0IwVU5BQUpBSUFNb0Fod2lBVUVDZEVHODBnQnFJZ0lvQWdBZ0EwWUVRQ0FDSUFBMkFnQWdBQTBCUVpEUUFDQUlRWDRnQVhkeElnZzJBZ0FNQWdzZ0IwRVFRUlFnQnlnQ0VDQURSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUhOZ0lZSUFNb0FoQWlBUVJBSUFBZ0FUWUNFQ0FCSUFBMkFoZ0xJQU5CRkdvb0FnQWlBVVVOQUNBQVFSUnFJQUUyQWdBZ0FTQUFOZ0lZQ3dKQUlBVkJEMDBFUUNBRElBUWdCV29pQUVFRGNqWUNCQ0FBSUFOcUlnQWdBQ2dDQkVFQmNqWUNCQXdCQ3lBRElBUnFJZ0lnQlVFQmNqWUNCQ0FESUFSQkEzSTJBZ1FnQWlBRmFpQUZOZ0lBSUFWQi93Rk5CRUFnQlVGNGNVRzAwQUJxSVFBQ2YwR00wQUFvQWdBaUFVRUJJQVZCQTNaMElnVnhSUVJBUVl6UUFDQUJJQVZ5TmdJQUlBQU1BUXNnQUNnQ0NBc2lBU0FDTmdJTUlBQWdBallDQ0NBQ0lBQTJBZ3dnQWlBQk5nSUlEQUVMUVI4aEFTQUZRZi8vL3dkTkJFQWdCVUVtSUFWQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2FpRUJDeUFDSUFFMkFod2dBa0lBTndJUUlBRkJBblJCdk5JQWFpRUFRUUVnQVhRaUJDQUljVVVFUUNBQUlBSTJBZ0JCa05BQUlBUWdDSEkyQWdBZ0FpQUFOZ0lZSUFJZ0FqWUNDQ0FDSUFJMkFnd01BUXNnQlVFWklBRkJBWFpyUVFBZ0FVRWZSeHQwSVFFZ0FDZ0NBQ0VFQWtBRFFDQUVJZ0FvQWdSQmVIRWdCVVlOQVNBQlFSMTJJUVFnQVVFQmRDRUJJQUFnQkVFRWNXcEJFR29pQmlnQ0FDSUVEUUFMSUFZZ0FqWUNBQ0FDSUFBMkFoZ2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUFLQUlJSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBa0VBTmdJWUlBSWdBRFlDRENBQ0lBRTJBZ2dMSUFOQkNHb2hBUXdCQ3dKQUlBbEZEUUFDUUNBQUtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBQkdCRUFnQWlBRE5nSUFJQU1OQVVHUTBBQWdDMEYrSUFGM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBQkdHMm9nQXpZQ0FDQURSUTBCQ3lBRElBazJBaGdnQUNnQ0VDSUJCRUFnQXlBQk5nSVFJQUVnQXpZQ0dBc2dBRUVVYWlnQ0FDSUJSUTBBSUFOQkZHb2dBVFlDQUNBQklBTTJBaGdMQWtBZ0JVRVBUUVJBSUFBZ0JDQUZhaUlCUVFOeU5nSUVJQUFnQVdvaUFTQUJLQUlFUVFGeU5nSUVEQUVMSUFBZ0JHb2lCeUFGUVFGeU5nSUVJQUFnQkVFRGNqWUNCQ0FGSUFkcUlBVTJBZ0FnQ0FSQUlBaEJlSEZCdE5BQWFpRUJRYURRQUNnQ0FDRURBbjlCQVNBSVFRTjJkQ0lDSUFaeFJRUkFRWXpRQUNBQ0lBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaUFpQUROZ0lNSUFFZ0F6WUNDQ0FESUFFMkFnd2dBeUFDTmdJSUMwR2cwQUFnQnpZQ0FFR1UwQUFnQlRZQ0FBc2dBRUVJYWlFQkN5QUtRUkJxSkFBZ0FRdERBQ0FBUlFSQVB3QkJFSFFQQ3dKQUlBQkIvLzhEY1EwQUlBQkJBRWdOQUNBQVFSQjJRQUFpQUVGL1JnUkFRZnpUQUVFd05nSUFRWDhQQ3lBQVFSQjBEd3NBQ3d2Y1B5SUFRWUFJQ3drQkFBQUFBZ0FBQUFNQVFaUUlDd1VFQUFBQUJRQkJwQWdMQ1FZQUFBQUhBQUFBQ0FCQjNBZ0xpaTFKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhGMVpYSjVBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZbTlrZVFCRGIyNTBaVzUwTFV4bGJtZDBhQ0J2ZG1WeVpteHZkd0JEYUhWdWF5QnphWHBsSUc5MlpYSm1iRzkzQUZKbGMzQnZibk5sSUc5MlpYSm1iRzkzQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCSVZGUlFMM2d1ZUNCeVpYRjFaWE4wQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCU1ZGTlFMM2d1ZUNCeVpYRjFaWE4wQUVWNGNHVmpkR1ZrSUZOUFZWSkRSU0J0WlhSb2IyUWdabTl5SUVsRFJTOTRMbmdnY21WeGRXVnpkQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUdaeVlXZHRaVzUwSUhOMFlYSjBBRVY0Y0dWamRHVmtJR1J2ZEFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNOMFlYUjFjd0JKYm5aaGJHbGtJSEpsYzNCdmJuTmxJSE4wWVhSMWN3QkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpBRlZ6WlhJZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzSmxjMlYwWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmYUdWaFpHVnlZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWemMyRm5aVjlpWldkcGJtQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzTjBZWFIxYzE5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTFjbXhmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJobFlXUmxjbDkyWVd4MVpWOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsYzNOaFoyVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlvWldGa1pYSmZabWxsYkdSZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFWVzVsZUhCbFkzUmxaQ0JqYUdGeUlHbHVJSFZ5YkNCelpYSjJaWElBU1c1MllXeHBaQ0JvWldGa1pYSWdkbUZzZFdVZ1kyaGhjZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQm1hV1ZzWkNCamFHRnlBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMXBibTl5SUhabGNuTnBiMjRBU1c1MllXeHBaQ0J0WVdwdmNpQjJaWEp6YVc5dUFFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJSFpsY25OcGIyNEFSWGh3WldOMFpXUWdRMUpNUmlCaFpuUmxjaUIyWlhKemFXOXVBRWx1ZG1Gc2FXUWdTRlJVVUNCMlpYSnphVzl1QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFJ2YTJWdUFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmRYSnNBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnljeUJwYmlCMWNtd0FWVzVsZUhCbFkzUmxaQ0J6ZEdGeWRDQmphR0Z5SUdsdUlIVnliQUJFYjNWaWJHVWdRQ0JwYmlCMWNtd0FSVzF3ZEhrZ1EyOXVkR1Z1ZEMxTVpXNW5kR2dBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1EyOXVkR1Z1ZEMxTVpXNW5kR2dBUkhWd2JHbGpZWFJsSUVOdmJuUmxiblF0VEdWdVozUm9BRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnY0dGMGFBQkRiMjUwWlc1MExVeGxibWQwYUNCallXNG5kQ0JpWlNCd2NtVnpaVzUwSUhkcGRHZ2dWSEpoYm5ObVpYSXRSVzVqYjJScGJtY0FTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2djMmw2WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJobFlXUmxjbDkyWVd4MVpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5MllXeDFaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUhaaGJIVmxBRTFwYzNOcGJtY2daWGh3WldOMFpXUWdURVlnWVdaMFpYSWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUNCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpTQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsWkNCMllXeDFaUUJRWVhWelpXUWdZbmtnYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFCSmJuWmhiR2xrSUVWUFJpQnpkR0YwWlFCdmJsOXlaWE5sZENCd1lYVnpaUUJ2Ymw5amFIVnVhMTlvWldGa1pYSWdjR0YxYzJVQWIyNWZiV1Z6YzJGblpWOWlaV2RwYmlCd1lYVnpaUUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVWdjR0YxYzJVQWIyNWZjM1JoZEhWelgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmRYSnNYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMk5vZFc1clgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyaGxZV1JsY2w5MllXeDFaVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMjFsZEdodlpGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZlptbGxiR1JmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldVZ2NHRjFjMlVBVlc1bGVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQnpkR0Z5ZENCc2FXNWxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCdVlXMWxBRkJoZFhObElHOXVJRU5QVGs1RlExUXZWWEJuY21Ga1pRQlFZWFZ6WlNCdmJpQlFVa2t2VlhCbmNtRmtaUUJGZUhCbFkzUmxaQ0JJVkZSUUx6SWdRMjl1Ym1WamRHbHZiaUJRY21WbVlXTmxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZiV1YwYUc5a0FFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJRzFsZEdodlpBQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyaGxZV1JsY2w5bWFXVnNaQUJRWVhWelpXUUFTVzUyWVd4cFpDQjNiM0prSUdWdVkyOTFiblJsY21Wa0FFbHVkbUZzYVdRZ2JXVjBhRzlrSUdWdVkyOTFiblJsY21Wa0FGVnVaWGh3WldOMFpXUWdZMmhoY2lCcGJpQjFjbXdnYzJOb1pXMWhBRkpsY1hWbGMzUWdhR0Z6SUdsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUFCVFYwbFVRMGhmVUZKUFdGa0FWVk5GWDFCU1QxaFpBRTFMUVVOVVNWWkpWRmtBVlU1UVVrOURSVk5UUVVKTVJWOUZUbFJKVkZrQVEwOVFXUUJOVDFaRlJGOVFSVkpOUVU1RlRsUk1XUUJVVDA5ZlJVRlNURmtBVGs5VVNVWlpBRVpCU1V4RlJGOUVSVkJGVGtSRlRrTlpBRUpCUkY5SFFWUkZWMEZaQUZCTVFWa0FVRlZVQUVOSVJVTkxUMVZVQUVkQlZFVlhRVmxmVkVsTlJVOVZWQUJTUlZGVlJWTlVYMVJKVFVWUFZWUUFUa1ZVVjA5U1MxOURUMDVPUlVOVVgxUkpUVVZQVlZRQVEwOU9Ua1ZEVkVsUFRsOVVTVTFGVDFWVUFFeFBSMGxPWDFSSlRVVlBWVlFBVGtWVVYwOVNTMTlTUlVGRVgxUkpUVVZQVlZRQVVFOVRWQUJOU1ZORVNWSkZRMVJGUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDB4UFFVUmZRa0ZNUVU1RFJVUmZVa1ZSVlVWVFZBQkNRVVJmVWtWUlZVVlRWQUJJVkZSUVgxSkZVVlZGVTFSZlUwVk9WRjlVVDE5SVZGUlFVMTlRVDFKVUFGSkZVRTlTVkFCSlRWOUJYMVJGUVZCUFZBQlNSVk5GVkY5RFQwNVVSVTVVQUU1UFgwTlBUbFJGVGxRQVVFRlNWRWxCVEY5RFQwNVVSVTVVQUVoUVJWOUpUbFpCVEVsRVgwTlBUbE5VUVU1VUFFaFFSVjlEUWw5U1JWTkZWQUJIUlZRQVNGQkZYMU5VVWtsRFZBQkRUMDVHVEVsRFZBQlVSVTFRVDFKQlVsbGZVa1ZFU1ZKRlExUUFVRVZTVFVGT1JVNVVYMUpGUkVsU1JVTlVBRU5QVGs1RlExUUFUVlZNVkVsZlUxUkJWRlZUQUVoUVJWOUpUbFpCVEVsRVgxTlVRVlJWVXdCVVQwOWZUVUZPV1Y5U1JWRlZSVk5VVXdCRlFWSk1XVjlJU1U1VVV3QlZUa0ZXUVVsTVFVSk1SVjlHVDFKZlRFVkhRVXhmVWtWQlUwOU9Vd0JQVUZSSlQwNVRBRk5YU1ZSRFNFbE9SMTlRVWs5VVQwTlBURk1BVmtGU1NVRk9WRjlCVEZOUFgwNUZSMDlVU1VGVVJWTUFUVlZNVkVsUVRFVmZRMGhQU1VORlV3QkpUbFJGVWs1QlRGOVRSVkpXUlZKZlJWSlNUMUlBVjBWQ1gxTkZVbFpGVWw5VlRrdE9UMWRPWDBWU1VrOVNBRkpCU1V4SFZVNWZSVkpTVDFJQVNVUkZUbFJKVkZsZlVGSlBWa2xFUlZKZlFWVlVTRVZPVkVsRFFWUkpUMDVmUlZKU1QxSUFVMU5NWDBORlVsUkpSa2xEUVZSRlgwVlNVazlTQUVsT1ZrRk1TVVJmV0Y5R1QxSlhRVkpFUlVSZlJrOVNBRk5GVkY5UVFWSkJUVVZVUlZJQVIwVlVYMUJCVWtGTlJWUkZVZ0JJVUVWZlZWTkZVZ0JUUlVWZlQxUklSVklBU0ZCRlgwTkNYME5JVlU1TFgwaEZRVVJGVWdCTlMwTkJURVZPUkVGU0FGTkZWRlZRQUZkRlFsOVRSVkpXUlZKZlNWTmZSRTlYVGdCVVJVRlNSRTlYVGdCSVVFVmZRMHhQVTBWRVgwTlBUazVGUTFSSlQwNEFTRVZWVWtsVFZFbERYMFZZVUVsU1FWUkpUMDRBUkVsVFEwOU9Ua1ZEVkVWRVgwOVFSVkpCVkVsUFRnQk9UMDVmUVZWVVNFOVNTVlJCVkVsV1JWOUpUa1pQVWsxQlZFbFBUZ0JJVUVWZlNVNVdRVXhKUkY5V1JWSlRTVTlPQUVoUVJWOURRbDlOUlZOVFFVZEZYMEpGUjBsT0FGTkpWRVZmU1ZOZlJsSlBXa1ZPQUVoUVJWOUpUbFpCVEVsRVgwaEZRVVJGVWw5VVQwdEZUZ0JKVGxaQlRFbEVYMVJQUzBWT0FFWlBVa0pKUkVSRlRnQkZUa2hCVGtORlgxbFBWVkpmUTBGTVRRQklVRVZmU1U1V1FVeEpSRjlWVWt3QVFreFBRMHRGUkY5Q1dWOVFRVkpGVGxSQlRGOURUMDVVVWs5TUFFMUxRMDlNQUVGRFRBQklVRVZmU1U1VVJWSk9RVXdBVWtWUlZVVlRWRjlJUlVGRVJWSmZSa2xGVEVSVFgxUlBUMTlNUVZKSFJWOVZUazlHUmtsRFNVRk1BRWhRUlY5UFN3QlZUa3hKVGtzQVZVNU1UME5MQUZCU1NRQlNSVlJTV1Y5WFNWUklBRWhRUlY5SlRsWkJURWxFWDBOUFRsUkZUbFJmVEVWT1IxUklBRWhRUlY5VlRrVllVRVZEVkVWRVgwTlBUbFJGVGxSZlRFVk9SMVJJQUVaTVZWTklBRkJTVDFCUVFWUkRTQUJOTFZORlFWSkRTQUJWVWtsZlZFOVBYMHhQVGtjQVVGSlBRMFZUVTBsT1J3Qk5TVk5EUlV4TVFVNUZUMVZUWDFCRlVsTkpVMVJGVGxSZlYwRlNUa2xPUndCTlNWTkRSVXhNUVU1RlQxVlRYMWRCVWs1SlRrY0FTRkJGWDBsT1ZrRk1TVVJmVkZKQlRsTkdSVkpmUlU1RFQwUkpUa2NBUlhod1pXTjBaV1FnUTFKTVJnQklVRVZmU1U1V1FVeEpSRjlEU0ZWT1MxOVRTVnBGQUUxUFZrVUFRMDlPVkVsT1ZVVUFTRkJGWDBOQ1gxTlVRVlJWVTE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNVMTlEVDAxUVRFVlVSUUJJVUVWZlEwSmZWa1ZTVTBsUFRsOURUMDFRVEVWVVJRQklVRVZmUTBKZlZWSk1YME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNYMVpCVEZWRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5RFNGVk9TMTlGV0ZSRlRsTkpUMDVmVmtGTVZVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBWWVZFVk9VMGxQVGw5T1FVMUZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOU5SVk5UUVVkRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5TlJWUklUMFJmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsOUdTVVZNUkY5RFQwMVFURVZVUlFCRVJVeEZWRVVBU0ZCRlgwbE9Wa0ZNU1VSZlJVOUdYMU5VUVZSRkFFbE9Wa0ZNU1VSZlUxTk1YME5GVWxSSlJrbERRVlJGQUZCQlZWTkZBRTVQWDFKRlUxQlBUbE5GQUZWT1UxVlFVRTlTVkVWRVgwMUZSRWxCWDFSWlVFVUFSMDlPUlFCT1QxUmZRVU5EUlZCVVFVSk1SUUJUUlZKV1NVTkZYMVZPUVZaQlNVeEJRa3hGQUZKQlRrZEZYMDVQVkY5VFFWUkpVMFpKUVVKTVJRQlBVa2xIU1U1ZlNWTmZWVTVTUlVGRFNFRkNURVVBVWtWVFVFOU9VMFZmU1ZOZlUxUkJURVVBVUZWU1IwVUFUVVZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmUmtsRlRFUlRYMVJQVDE5TVFWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOVVUMDlmVEVGU1IwVUFVRUZaVEU5QlJGOVVUMDlmVEVGU1IwVUFTVTVUVlVaR1NVTkpSVTVVWDFOVVQxSkJSMFVBU0ZCRlgxQkJWVk5GUkY5VlVFZFNRVVJGQUVoUVJWOVFRVlZUUlVSZlNESmZWVkJIVWtGRVJRQlRUMVZTUTBVQVFVNU9UMVZPUTBVQVZGSkJRMFVBU0ZCRlgxVk9SVmhRUlVOVVJVUmZVMUJCUTBVQVJFVlRRMUpKUWtVQVZVNVRWVUpUUTFKSlFrVUFVa1ZEVDFKRUFFaFFSVjlKVGxaQlRFbEVYMDFGVkVoUFJBQk9UMVJmUms5VlRrUUFVRkpQVUVaSlRrUUFWVTVDU1U1RUFGSkZRa2xPUkFCVlRrRlZWRWhQVWtsYVJVUUFUVVZVU0U5RVgwNVBWRjlCVEV4UFYwVkVBRWhVVkZCZlZrVlNVMGxQVGw5T1QxUmZVMVZRVUU5U1ZFVkVBRUZNVWtWQlJGbGZVa1ZRVDFKVVJVUUFRVU5EUlZCVVJVUUFUazlVWDBsTlVFeEZUVVZPVkVWRUFFeFBUMUJmUkVWVVJVTlVSVVFBU0ZCRlgwTlNYMFZZVUVWRFZFVkVBRWhRUlY5TVJsOUZXRkJGUTFSRlJBQkRVa1ZCVkVWRUFFbE5YMVZUUlVRQVNGQkZYMUJCVlZORlJBQlVTVTFGVDFWVVgwOURRMVZTUlVRQVVFRlpUVVZPVkY5U1JWRlZTVkpGUkFCUVVrVkRUMDVFU1ZSSlQwNWZVa1ZSVlVsU1JVUUFVRkpQV0ZsZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVGtWVVYwOVNTMTlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk1SVTVIVkVoZlVrVlJWVWxTUlVRQVUxTk1YME5GVWxSSlJrbERRVlJGWDFKRlVWVkpVa1ZFQUZWUVIxSkJSRVZmVWtWUlZVbFNSVVFBVUVGSFJWOUZXRkJKVWtWRUFGQlNSVU5QVGtSSlZFbFBUbDlHUVVsTVJVUUFSVmhRUlVOVVFWUkpUMDVmUmtGSlRFVkVBRkpGVmtGTVNVUkJWRWxQVGw5R1FVbE1SVVFBVTFOTVgwaEJUa1JUU0VGTFJWOUdRVWxNUlVRQVRFOURTMFZFQUZSU1FVNVRSazlTVFVGVVNVOU9YMEZRVUV4SlJVUUFUazlVWDAxUFJFbEdTVVZFQUU1UFZGOUZXRlJGVGtSRlJBQkNRVTVFVjBsRVZFaGZURWxOU1ZSZlJWaERSVVZFUlVRQVUwbFVSVjlKVTE5UFZrVlNURTlCUkVWRUFFaEZRVVFBUlhod1pXTjBaV1FnU0ZSVVVDOEFBRjRUQUFBbUV3QUFNQkFBQVBBWEFBQ2RFd0FBRlJJQUFEa1hBQUR3RWdBQUNoQUFBSFVTQUFDdEVnQUFnaE1BQUU4VUFBQi9FQUFBb0JVQUFDTVVBQUNKRWdBQWl4UUFBRTBWQUFEVUVRQUF6eFFBQUJBWUFBREpGZ0FBM0JZQUFNRVJBQURnRndBQXV4UUFBSFFVQUFCOEZRQUE1UlFBQUFnWEFBQWZFQUFBWlJVQUFLTVVBQUFvRlFBQUFoVUFBSmtWQUFBc0VBQUFpeGtBQUU4UEFBRFVEZ0FBYWhBQUFNNFFBQUFDRndBQWlRNEFBRzRUQUFBY0V3QUFaaFFBQUZZWEFBREJFd0FBelJNQUFHd1RBQUJvRndBQVpoY0FBRjhYQUFBaUV3QUF6ZzhBQUdrT0FBRFlEZ0FBWXhZQUFNc1RBQUNxRGdBQUtCY0FBQ1lYQUFERkV3QUFYUllBQU9nUkFBQm5Fd0FBWlJNQUFQSVdBQUJ6RXdBQUhSY0FBUGtXQUFEekVRQUF6dzRBQU00VkFBQU1FZ0FBc3hFQUFLVVJBQUJoRUFBQU1oY0FBTHNUQUVINU5Rc0JBUUJCa0RZTDRBRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQkIvVGNMQVFFQVFaRTRDMTRDQXdJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQVFBQUFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSDlPUXNCQVFCQmtUb0xYZ0lBQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFBd0FFQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQVFmQTdDdzFzYjNObFpXVndMV0ZzYVhabEFFR0pQQXNCQVFCQm9Ed0w0QUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCaVQ0TEFRRUFRYUErQytjQkFRRUJBUUVCQVFFQkFRRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGamFIVnVhMlZrQUVHd3dBQUxYd0VCQUFFQkFRRUJBQUFCQVFBQkFRQUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFBQkFFR1F3Z0FMSVdWamRHbHZibVZ1ZEMxc1pXNW5kR2h2Ym5KdmVIa3RZMjl1Ym1WamRHbHZiZ0JCd01JQUN5MXlZVzV6Wm1WeUxXVnVZMjlrYVc1bmNHZHlZV1JsRFFvTkNnMEtVMDBOQ2cwS1ZGUlFMME5GTDFSVFVDOEFRZm5DQUFzRkFRSUFBUU1BUVpEREFBdmdBUVFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg1eEFBTEJRRUNBQUVEQUVHUXhRQUw0QUVFQVFFRkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NZQUN3UUJBQUFCQUVHUnh3QUwzd0VCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg2eUFBTEJBRUFBQUlBUVpESkFBdGZBd1FBQUFRRUJBUUVCQVFFQkFRRUJRUUVCQVFFQkFRRUJBUUVCQUFFQUFZSEJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUFCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFRQVFmcktBQXNFQVFBQUFRQkJrTXNBQ3dFQkFFR3F5d0FMUVFJQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSDZ6QUFMQkFFQUFBRUFRWkROQUFzQkFRQkJtczBBQ3dZQ0FBQUFBQUlBUWJITkFBczZBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdCQjhNNEFDNVlCVGs5VlRrTkZSVU5MVDFWVVRrVkRWRVZVUlVOU1NVSkZURlZUU0VWVVJVRkVVMFZCVWtOSVVrZEZRMVJKVmtsVVdVeEZUa1JCVWxaRlQxUkpSbGxRVkVsUFRsTkRTRk5GUVZsVFZFRlVRMGhIUlU5U1JFbFNSVU5VVDFKVVVrTklVRUZTUVUxRlZFVlNWVkpEUlVKVFExSkpRa1ZCVWtSUFYwNUJRMFZKVGtST1MwTkxWVUpUUTFKSlFrVklWRlJRTDBGRVZGQXYnLCAnYmFzZTY0JylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzc3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3R6QUNBQVFSQnEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNEQUNBQS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVRCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVNCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUWQwQk5nSWNDd1lBSUFBUU1ndWFMUUVMZnlNQVFSQnJJZ29rQUVHazBBQW9BZ0FpQ1VVRVFFSGswd0FvQWdBaUJVVUVRRUh3MHdCQ2Z6Y0NBRUhvMHdCQ2dJQ0VnSUNBd0FBM0FnQkI1Tk1BSUFwQkNHcEJjSEZCMktyVnFnVnpJZ1UyQWdCQitOTUFRUUEyQWdCQnlOTUFRUUEyQWdBTFFjelRBRUdBMUFRMkFnQkJuTkFBUVlEVUJEWUNBRUd3MEFBZ0JUWUNBRUdzMEFCQmZ6WUNBRUhRMHdCQmdLd0ROZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCak5RRVFjR3JBellDQUVHbzBBQkI5Tk1BS0FJQU5nSUFRWmpRQUVIQXF3TTJBZ0JCcE5BQVFZalVCRFlDQUVITS93ZEJPRFlDQUVHSTFBUWhDUXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUFRZXdCVFFSQVFZelFBQ2dDQUNJR1FSQWdBRUVUYWtGd2NTQUFRUXRKR3lJRVFRTjJJZ0IySWdGQkEzRUVRQUpBSUFGQkFYRWdBSEpCQVhNaUFrRURkQ0lBUWJUUUFHb2lBU0FBUWJ6UUFHb29BZ0FpQUNnQ0NDSURSZ1JBUVl6UUFDQUdRWDRnQW5keE5nSUFEQUVMSUFFZ0F6WUNDQ0FESUFFMkFnd0xJQUJCQ0dvaEFTQUFJQUpCQTNRaUFrRURjallDQkNBQUlBSnFJZ0FnQUNnQ0JFRUJjallDQkF3UkMwR1UwQUFvQWdBaUNDQUVUdzBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQUVFRGRDSUNRYlRRQUdvaUFTQUNRYnpRQUdvb0FnQWlBaWdDQ0NJRFJnUkFRWXpRQUNBR1FYNGdBSGR4SWdZMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBaUFFUVFOeU5nSUVJQUJCQTNRaUFDQUVheUVGSUFBZ0Ftb2dCVFlDQUNBQ0lBUnFJZ1FnQlVFQmNqWUNCQ0FJQkVBZ0NFRjRjVUcwMEFCcUlRQkJvTkFBS0FJQUlRTUNmMEVCSUFoQkEzWjBJZ0VnQm5GRkJFQkJqTkFBSUFFZ0JuSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBTTJBZ3dnQUNBRE5nSUlJQU1nQURZQ0RDQURJQUUyQWdnTElBSkJDR29oQVVHZzBBQWdCRFlDQUVHVTBBQWdCVFlDQUF3UkMwR1EwQUFvQWdBaUMwVU5BU0FMYUVFQ2RFRzgwZ0JxS0FJQUlnQW9BZ1JCZUhFZ0JHc2hCU0FBSVFJRFFBSkFJQUlvQWhBaUFVVUVRQ0FDUVJScUtBSUFJZ0ZGRFFFTElBRW9BZ1JCZUhFZ0JHc2lBeUFGU1NFQ0lBTWdCU0FDR3lFRklBRWdBQ0FDR3lFQUlBRWhBZ3dCQ3dzZ0FDZ0NHQ0VKSUFBb0Fnd2lBeUFBUndSQVFaelFBQ2dDQUJvZ0F5QUFLQUlJSWdFMkFnZ2dBU0FETmdJTURCQUxJQUJCRkdvaUFpZ0NBQ0lCUlFSQUlBQW9BaEFpQVVVTkF5QUFRUkJxSVFJTEEwQWdBaUVISUFFaUEwRVVhaUlDS0FJQUlnRU5BQ0FEUVJCcUlRSWdBeWdDRUNJQkRRQUxJQWRCQURZQ0FBd1BDMEYvSVFRZ0FFRy9mMHNOQUNBQVFSTnFJZ0ZCY0hFaEJFR1EwQUFvQWdBaUNFVU5BRUVBSUFScklRVUNRQUpBQWtBQ2YwRUFJQVJCZ0FKSkRRQWFRUjhnQkVILy8vOEhTdzBBR2lBRVFTWWdBVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxQ3lJR1FRSjBRYnpTQUdvb0FnQWlBa1VFUUVFQUlRRkJBQ0VEREFFTFFRQWhBU0FFUVJrZ0JrRUJkbXRCQUNBR1FSOUhHM1FoQUVFQUlRTURRQUpBSUFJb0FnUkJlSEVnQkdzaUJ5QUZUdzBBSUFJaEF5QUhJZ1VOQUVFQUlRVWdBaUVCREFNTElBRWdBa0VVYWlnQ0FDSUhJQWNnQWlBQVFSMTJRUVJ4YWtFUWFpZ0NBQ0lDUmhzZ0FTQUhHeUVCSUFCQkFYUWhBQ0FDRFFBTEN5QUJJQU55UlFSQVFRQWhBMEVDSUFaMElnQkJBQ0FBYTNJZ0NIRWlBRVVOQXlBQWFFRUNkRUc4MGdCcUtBSUFJUUVMSUFGRkRRRUxBMEFnQVNnQ0JFRjRjU0FFYXlJQ0lBVkpJUUFnQWlBRklBQWJJUVVnQVNBRElBQWJJUU1nQVNnQ0VDSUFCSDhnQUFVZ0FVRVVhaWdDQUFzaUFRMEFDd3NnQTBVTkFDQUZRWlRRQUNnQ0FDQUVhMDhOQUNBREtBSVlJUWNnQXlBREtBSU1JZ0JIQkVCQm5OQUFLQUlBR2lBQUlBTW9BZ2dpQVRZQ0NDQUJJQUEyQWd3TURnc2dBMEVVYWlJQ0tBSUFJZ0ZGQkVBZ0F5Z0NFQ0lCUlEwRElBTkJFR29oQWdzRFFDQUNJUVlnQVNJQVFSUnFJZ0lvQWdBaUFRMEFJQUJCRUdvaEFpQUFLQUlRSWdFTkFBc2dCa0VBTmdJQURBMExRWlRRQUNnQ0FDSURJQVJQQkVCQm9OQUFLQUlBSVFFQ1FDQURJQVJySWdKQkVFOEVRQ0FCSUFScUlnQWdBa0VCY2pZQ0JDQUJJQU5xSUFJMkFnQWdBU0FFUVFOeU5nSUVEQUVMSUFFZ0EwRURjallDQkNBQklBTnFJZ0FnQUNnQ0JFRUJjallDQkVFQUlRQkJBQ0VDQzBHVTBBQWdBallDQUVHZzBBQWdBRFlDQUNBQlFRaHFJUUVNRHd0Qm1OQUFLQUlBSWdNZ0JFc0VRQ0FFSUFscUlnQWdBeUFFYXlJQlFRRnlOZ0lFUWFUUUFDQUFOZ0lBUVpqUUFDQUJOZ0lBSUFrZ0JFRURjallDQkNBSlFRaHFJUUVNRHd0QkFDRUJJQVFDZjBIazB3QW9BZ0FFUUVIczB3QW9BZ0FNQVF0QjhOTUFRbjgzQWdCQjZOTUFRb0NBaElDQWdNQUFOd0lBUWVUVEFDQUtRUXhxUVhCeFFkaXExYW9GY3pZQ0FFSDQwd0JCQURZQ0FFSEkwd0JCQURZQ0FFR0FnQVFMSWdBZ0JFSEhBR29pQldvaUJrRUFJQUJySWdkeElnSlBCRUJCL05NQVFUQTJBZ0FNRHdzQ1FFSEUwd0FvQWdBaUFVVU5BRUc4MHdBb0FnQWlDQ0FDYWlFQUlBQWdBVTBnQUNBSVMzRU5BRUVBSVFGQi9OTUFRVEEyQWdBTUR3dEJ5Tk1BTFFBQVFRUnhEUVFDUUFKQUlBa0VRRUhNMHdBaEFRTkFJQUVvQWdBaUFDQUpUUVJBSUFBZ0FTZ0NCR29nQ1VzTkF3c2dBU2dDQ0NJQkRRQUxDMEVBRURNaUFFRi9SZzBGSUFJaEJrSG8wd0FvQWdBaUFVRUJheUlESUFCeEJFQWdBaUFBYXlBQUlBTnFRUUFnQVd0eGFpRUdDeUFFSUFaUERRVWdCa0grLy8vL0Iwc05CVUhFMHdBb0FnQWlBd1JBUWJ6VEFDZ0NBQ0lISUFacUlRRWdBU0FIVFEwR0lBRWdBMHNOQmdzZ0JoQXpJZ0VnQUVjTkFRd0hDeUFHSUFOcklBZHhJZ1pCL3YvLy93ZExEUVFnQmhBeklRQWdBQ0FCS0FJQUlBRW9BZ1JxUmcwRElBQWhBUXNDUUNBR0lBUkJ5QUJxVHcwQUlBRkJmMFlOQUVIczB3QW9BZ0FpQUNBRklBWnJha0VBSUFCcmNTSUFRZjcvLy84SFN3UkFJQUVoQUF3SEN5QUFFRE5CZjBjRVFDQUFJQVpxSVFZZ0FTRUFEQWNMUVFBZ0Jtc1FNeG9NQkFzZ0FTSUFRWDlIRFFVTUF3dEJBQ0VEREF3TFFRQWhBQXdLQ3lBQVFYOUhEUUlMUWNqVEFFSEkwd0FvQWdCQkJISTJBZ0FMSUFKQi92Ly8vd2RMRFFFZ0FoQXpJUUJCQUJBeklRRWdBRUYvUmcwQklBRkJmMFlOQVNBQUlBRlBEUUVnQVNBQWF5SUdJQVJCT0dwTkRRRUxRYnpUQUVHODB3QW9BZ0FnQm1vaUFUWUNBRUhBMHdBb0FnQWdBVWtFUUVIQTB3QWdBVFlDQUFzQ1FBSkFBa0JCcE5BQUtBSUFJZ0lFUUVITTB3QWhBUU5BSUFBZ0FTZ0NBQ0lESUFFb0FnUWlCV3BHRFFJZ0FTZ0NDQ0lCRFFBTERBSUxRWnpRQUNnQ0FDSUJRUUJISUFBZ0FVOXhSUVJBUVp6UUFDQUFOZ0lBQzBFQUlRRkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkJyTkFBUVg4MkFnQkJzTkFBUWVUVEFDZ0NBRFlDQUVIWTB3QkJBRFlDQUFOQUlBRkJ5TkFBYWlBQlFielFBR29pQWpZQ0FDQUNJQUZCdE5BQWFpSUROZ0lBSUFGQndOQUFhaUFETmdJQUlBRkIwTkFBYWlBQlFjVFFBR29pQXpZQ0FDQURJQUkyQWdBZ0FVSFkwQUJxSUFGQnpOQUFhaUlDTmdJQUlBSWdBellDQUNBQlFkVFFBR29nQWpZQ0FDQUJRU0JxSWdGQmdBSkhEUUFMUVhnZ0FHdEJEM0VpQVNBQWFpSUNJQVpCT0dzaUF5QUJheUlCUVFGeU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQUkyQWdBZ0FDQURha0U0TmdJRURBSUxJQUFnQWswTkFDQUNJQU5KRFFBZ0FTZ0NERUVJY1EwQVFYZ2dBbXRCRDNFaUFDQUNhaUlEUVpqUUFDZ0NBQ0FHYWlJSElBQnJJZ0JCQVhJMkFnUWdBU0FGSUFacU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUEyQWdCQnBOQUFJQU0yQWdBZ0FpQUhha0U0TmdJRURBRUxJQUJCbk5BQUtBSUFTUVJBUVp6UUFDQUFOZ0lBQ3lBQUlBWnFJUU5Cek5NQUlRRUNRQUpBQWtBRFFDQURJQUVvQWdCSEJFQWdBU2dDQ0NJQkRRRU1BZ3NMSUFFdEFBeEJDSEZGRFFFTFFjelRBQ0VCQTBBZ0FTZ0NBQ0lESUFKTkJFQWdBeUFCS0FJRWFpSUZJQUpMRFFNTElBRW9BZ2doQVF3QUN3QUxJQUVnQURZQ0FDQUJJQUVvQWdRZ0JtbzJBZ1FnQUVGNElBQnJRUTl4YWlJSklBUkJBM0kyQWdRZ0EwRjRJQU5yUVE5eGFpSUdJQVFnQ1dvaUJHc2hBU0FDSUFaR0JFQkJwTkFBSUFRMkFnQkJtTkFBUVpqUUFDZ0NBQ0FCYWlJQU5nSUFJQVFnQUVFQmNqWUNCQXdJQzBHZzBBQW9BZ0FnQmtZRVFFR2cwQUFnQkRZQ0FFR1UwQUJCbE5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVJQUFnQkdvZ0FEWUNBQXdJQ3lBR0tBSUVJZ1ZCQTNGQkFVY05CaUFGUVhoeElRZ2dCVUgvQVUwRVFDQUZRUU4ySVFNZ0JpZ0NDQ0lBSUFZb0Fnd2lBa1lFUUVHTTBBQkJqTkFBS0FJQVFYNGdBM2R4TmdJQURBY0xJQUlnQURZQ0NDQUFJQUkyQWd3TUJnc2dCaWdDR0NFSElBWWdCaWdDRENJQVJ3UkFJQUFnQmlnQ0NDSUNOZ0lJSUFJZ0FEWUNEQXdGQ3lBR1FSUnFJZ0lvQWdBaUJVVUVRQ0FHS0FJUUlnVkZEUVFnQmtFUWFpRUNDd05BSUFJaEF5QUZJZ0JCRkdvaUFpZ0NBQ0lGRFFBZ0FFRVFhaUVDSUFBb0FoQWlCUTBBQ3lBRFFRQTJBZ0FNQkF0QmVDQUFhMEVQY1NJQklBQnFJZ2NnQmtFNGF5SURJQUZySWdGQkFYSTJBZ1FnQUNBRGFrRTROZ0lFSUFJZ0JVRTNJQVZyUVE5eGFrRS9heUlESUFNZ0FrRVFha2tiSWdOQkl6WUNCRUdvMEFCQjlOTUFLQUlBTmdJQVFaalFBQ0FCTmdJQVFhVFFBQ0FITmdJQUlBTkJFR3BCMU5NQUtRSUFOd0lBSUFOQnpOTUFLUUlBTndJSVFkVFRBQ0FEUVFocU5nSUFRZERUQUNBR05nSUFRY3pUQUNBQU5nSUFRZGpUQUVFQU5nSUFJQU5CSkdvaEFRTkFJQUZCQnpZQ0FDQUZJQUZCQkdvaUFVc05BQXNnQWlBRFJnMEFJQU1nQXlnQ0JFRitjVFlDQkNBRElBTWdBbXNpQlRZQ0FDQUNJQVZCQVhJMkFnUWdCVUgvQVUwRVFDQUZRWGh4UWJUUUFHb2hBQUovUVl6UUFDZ0NBQ0lCUVFFZ0JVRURkblFpQTNGRkJFQkJqTkFBSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBSTJBZ3dnQUNBQ05nSUlJQUlnQURZQ0RDQUNJQUUyQWdnTUFRdEJIeUVCSUFWQi8vLy9CMDBFUUNBRlFTWWdCVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFFTElBSWdBVFlDSENBQ1FnQTNBaEFnQVVFQ2RFRzgwZ0JxSVFCQmtOQUFLQUlBSWdOQkFTQUJkQ0lHY1VVRVFDQUFJQUkyQWdCQmtOQUFJQU1nQm5JMkFnQWdBaUFBTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQVFzZ0JVRVpJQUZCQVhaclFRQWdBVUVmUnh0MElRRWdBQ2dDQUNFREFrQURRQ0FESWdBb0FnUkJlSEVnQlVZTkFTQUJRUjEySVFNZ0FVRUJkQ0VCSUFBZ0EwRUVjV3BCRUdvaUJpZ0NBQ0lERFFBTElBWWdBallDQUNBQ0lBQTJBaGdnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFBS0FJSUlnRWdBallDRENBQUlBSTJBZ2dnQWtFQU5nSVlJQUlnQURZQ0RDQUNJQUUyQWdnTFFaalFBQ2dDQUNJQklBUk5EUUJCcE5BQUtBSUFJZ0FnQkdvaUFpQUJJQVJySWdGQkFYSTJBZ1JCbU5BQUlBRTJBZ0JCcE5BQUlBSTJBZ0FnQUNBRVFRTnlOZ0lFSUFCQkNHb2hBUXdJQzBFQUlRRkIvTk1BUVRBMkFnQU1Cd3RCQUNFQUN5QUhSUTBBQWtBZ0JpZ0NIQ0lDUVFKMFFielNBR29pQXlnQ0FDQUdSZ1JBSUFNZ0FEWUNBQ0FBRFFGQmtOQUFRWkRRQUNnQ0FFRitJQUozY1RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFaR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFjMkFoZ2dCaWdDRUNJQ0JFQWdBQ0FDTmdJUUlBSWdBRFlDR0FzZ0JrRVVhaWdDQUNJQ1JRMEFJQUJCRkdvZ0FqWUNBQ0FDSUFBMkFoZ0xJQUVnQ0dvaEFTQUdJQWhxSWdZb0FnUWhCUXNnQmlBRlFYNXhOZ0lFSUFFZ0JHb2dBVFlDQUNBRUlBRkJBWEkyQWdRZ0FVSC9BVTBFUUNBQlFYaHhRYlRRQUdvaEFBSi9RWXpRQUNnQ0FDSUNRUUVnQVVFRGRuUWlBWEZGQkVCQmpOQUFJQUVnQW5JMkFnQWdBQXdCQ3lBQUtBSUlDeUlCSUFRMkFnd2dBQ0FFTmdJSUlBUWdBRFlDRENBRUlBRTJBZ2dNQVF0Qkh5RUZJQUZCLy8vL0IwMEVRQ0FCUVNZZ0FVRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUVVMSUFRZ0JUWUNIQ0FFUWdBM0FoQWdCVUVDZEVHODBnQnFJUUJCa05BQUtBSUFJZ0pCQVNBRmRDSURjVVVFUUNBQUlBUTJBZ0JCa05BQUlBSWdBM0kyQWdBZ0JDQUFOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01BUXNnQVVFWklBVkJBWFpyUVFBZ0JVRWZSeHQwSVFVZ0FDZ0NBQ0VBQWtBRFFDQUFJZ0lvQWdSQmVIRWdBVVlOQVNBRlFSMTJJUUFnQlVFQmRDRUZJQUlnQUVFRWNXcEJFR29pQXlnQ0FDSUFEUUFMSUFNZ0JEWUNBQ0FFSUFJMkFoZ2dCQ0FFTmdJTUlBUWdCRFlDQ0F3QkN5QUNLQUlJSWdBZ0JEWUNEQ0FDSUFRMkFnZ2dCRUVBTmdJWUlBUWdBallDRENBRUlBQTJBZ2dMSUFsQkNHb2hBUXdDQ3dKQUlBZEZEUUFDUUNBREtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBTkdCRUFnQWlBQU5nSUFJQUFOQVVHUTBBQWdDRUYrSUFGM2NTSUlOZ0lBREFJTElBZEJFRUVVSUFjb0FoQWdBMFliYWlBQU5nSUFJQUJGRFFFTElBQWdCellDR0NBREtBSVFJZ0VFUUNBQUlBRTJBaEFnQVNBQU5nSVlDeUFEUVJScUtBSUFJZ0ZGRFFBZ0FFRVVhaUFCTmdJQUlBRWdBRFlDR0FzQ1FDQUZRUTlOQkVBZ0F5QUVJQVZxSWdCQkEzSTJBZ1FnQUNBRGFpSUFJQUFvQWdSQkFYSTJBZ1FNQVFzZ0F5QUVhaUlDSUFWQkFYSTJBZ1FnQXlBRVFRTnlOZ0lFSUFJZ0JXb2dCVFlDQUNBRlFmOEJUUVJBSUFWQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnRkJBU0FGUVFOMmRDSUZjVVVFUUVHTTBBQWdBU0FGY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQWpZQ0RDQUFJQUkyQWdnZ0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRRWdCVUgvLy84SFRRUkFJQVZCSmlBRlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBUXNnQWlBQk5nSWNJQUpDQURjQ0VDQUJRUUowUWJ6U0FHb2hBRUVCSUFGMElnUWdDSEZGQkVBZ0FDQUNOZ0lBUVpEUUFDQUVJQWh5TmdJQUlBSWdBRFlDR0NBQ0lBSTJBZ2dnQWlBQ05nSU1EQUVMSUFWQkdTQUJRUUYyYTBFQUlBRkJIMGNiZENFQklBQW9BZ0FoQkFKQUEwQWdCQ0lBS0FJRVFYaHhJQVZHRFFFZ0FVRWRkaUVFSUFGQkFYUWhBU0FBSUFSQkJIRnFRUkJxSWdZb0FnQWlCQTBBQ3lBR0lBSTJBZ0FnQWlBQU5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFRc2dBQ2dDQ0NJQklBSTJBZ3dnQUNBQ05nSUlJQUpCQURZQ0dDQUNJQUEyQWd3Z0FpQUJOZ0lJQ3lBRFFRaHFJUUVNQVFzQ1FDQUpSUTBBQWtBZ0FDZ0NIQ0lCUVFKMFFielNBR29pQWlnQ0FDQUFSZ1JBSUFJZ0F6WUNBQ0FERFFGQmtOQUFJQXRCZmlBQmQzRTJBZ0FNQWdzZ0NVRVFRUlFnQ1NnQ0VDQUFSaHRxSUFNMkFnQWdBMFVOQVFzZ0F5QUpOZ0lZSUFBb0FoQWlBUVJBSUFNZ0FUWUNFQ0FCSUFNMkFoZ0xJQUJCRkdvb0FnQWlBVVVOQUNBRFFSUnFJQUUyQWdBZ0FTQUROZ0lZQ3dKQUlBVkJEMDBFUUNBQUlBUWdCV29pQVVFRGNqWUNCQ0FBSUFGcUlnRWdBU2dDQkVFQmNqWUNCQXdCQ3lBQUlBUnFJZ2NnQlVFQmNqWUNCQ0FBSUFSQkEzSTJBZ1FnQlNBSGFpQUZOZ0lBSUFnRVFDQUlRWGh4UWJUUUFHb2hBVUdnMEFBb0FnQWhBd0ovUVFFZ0NFRURkblFpQWlBR2NVVUVRRUdNMEFBZ0FpQUdjallDQUNBQkRBRUxJQUVvQWdnTElnSWdBellDRENBQklBTTJBZ2dnQXlBQk5nSU1JQU1nQWpZQ0NBdEJvTkFBSUFjMkFnQkJsTkFBSUFVMkFnQUxJQUJCQ0dvaEFRc2dDa0VRYWlRQUlBRUxRd0FnQUVVRVFEOEFRUkIwRHdzQ1FDQUFRZi8vQTNFTkFDQUFRUUJJRFFBZ0FFRVFka0FBSWdCQmYwWUVRRUg4MHdCQk1EWUNBRUYvRHdzZ0FFRVFkQThMQUFzTDNEOGlBRUdBQ0FzSkFRQUFBQUlBQUFBREFFR1VDQXNGQkFBQUFBVUFRYVFJQ3drR0FBQUFCd0FBQUFnQVFkd0lDNG90U1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCeGRXVnllUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMkp2WkhrQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnYjNabGNtWnNiM2NBUTJoMWJtc2djMmw2WlNCdmRtVnlabXh2ZHdCU1pYTndiMjV6WlNCdmRtVnlabXh2ZHdCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1NGUlVVQzk0TG5nZ2NtVnhkV1Z6ZEFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1VsUlRVQzk0TG5nZ2NtVnhkV1Z6ZEFCRmVIQmxZM1JsWkNCVFQxVlNRMFVnYldWMGFHOWtJR1p2Y2lCSlEwVXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCbWNtRm5iV1Z1ZENCemRHRnlkQUJGZUhCbFkzUmxaQ0JrYjNRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5emRHRjBkWE1BU1c1MllXeHBaQ0J5WlhOd2IyNXpaU0J6ZEdGMGRYTUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjd0JWYzJWeUlHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXlaWE5sZEdBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJobFlXUmxjbUFnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGMzTmhaMlZmWW1WbmFXNWdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkWEpzWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBRlZ1Wlhod1pXTjBaV1FnWTJoaGNpQnBiaUIxY213Z2MyVnlkbVZ5QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFpoYkhWbElHTm9ZWElBU1c1MllXeHBaQ0JvWldGa1pYSWdabWxsYkdRZ1kyaGhjZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1psY25OcGIyNEFTVzUyWVd4cFpDQnRhVzV2Y2lCMlpYSnphVzl1QUVsdWRtRnNhV1FnYldGcWIzSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUIyWlhKemFXOXVBRVY0Y0dWamRHVmtJRU5TVEVZZ1lXWjBaWElnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRWhVVkZBZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUdobFlXUmxjaUIwYjJ0bGJnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzVnliQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjbk1nYVc0Z2RYSnNBRlZ1Wlhod1pXTjBaV1FnYzNSaGNuUWdZMmhoY2lCcGJpQjFjbXdBUkc5MVlteGxJRUFnYVc0Z2RYSnNBRVZ0Y0hSNUlFTnZiblJsYm5RdFRHVnVaM1JvQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlFTnZiblJsYm5RdFRHVnVaM1JvQUVSMWNHeHBZMkYwWlNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhCaGRHZ0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ1kyRnVKM1FnWW1VZ2NISmxjMlZ1ZENCM2FYUm9JRlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJSE5wZW1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCMllXeDFaUUJOYVhOemFXNW5JR1Y0Y0dWamRHVmtJRXhHSUdGbWRHVnlJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBZ2FHVmhaR1Z5SUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVWdkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QnhkVzkwWldRZ2RtRnNkV1VBVUdGMWMyVmtJR0o1SUc5dVgyaGxZV1JsY25OZlkyOXRjR3hsZEdVQVNXNTJZV3hwWkNCRlQwWWdjM1JoZEdVQWIyNWZjbVZ6WlhRZ2NHRjFjMlVBYjI1ZlkyaDFibXRmYUdWaFpHVnlJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZbVZuYVc0Z2NHRjFjMlVBYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxJSEJoZFhObEFHOXVYM04wWVhSMWMxOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzVnliRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbElIQmhkWE5sQUZWdVpYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdjM1JoY25RZ2JHbHVaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2JtRnRaUUJRWVhWelpTQnZiaUJEVDA1T1JVTlVMMVZ3WjNKaFpHVUFVR0YxYzJVZ2IyNGdVRkpKTDFWd1ozSmhaR1VBUlhod1pXTjBaV1FnU0ZSVVVDOHlJRU52Ym01bFkzUnBiMjRnVUhKbFptRmpaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMjFsZEdodlpBQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUJ0WlhSb2IyUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZlptbGxiR1FBVUdGMWMyVmtBRWx1ZG1Gc2FXUWdkMjl5WkNCbGJtTnZkVzUwWlhKbFpBQkpiblpoYkdsa0lHMWxkR2h2WkNCbGJtTnZkVzUwWlhKbFpBQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhOamFHVnRZUUJTWlhGMVpYTjBJR2hoY3lCcGJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBQVUxZEpWRU5JWDFCU1QxaFpBRlZUUlY5UVVrOVlXUUJOUzBGRFZFbFdTVlJaQUZWT1VGSlBRMFZUVTBGQ1RFVmZSVTVVU1ZSWkFFTlBVRmtBVFU5V1JVUmZVRVZTVFVGT1JVNVVURmtBVkU5UFgwVkJVa3haQUU1UFZFbEdXUUJHUVVsTVJVUmZSRVZRUlU1RVJVNURXUUJDUVVSZlIwRlVSVmRCV1FCUVRFRlpBRkJWVkFCRFNFVkRTMDlWVkFCSFFWUkZWMEZaWDFSSlRVVlBWVlFBVWtWUlZVVlRWRjlVU1UxRlQxVlVBRTVGVkZkUFVrdGZRMDlPVGtWRFZGOVVTVTFGVDFWVUFFTlBUazVGUTFSSlQwNWZWRWxOUlU5VlZBQk1UMGRKVGw5VVNVMUZUMVZVQUU1RlZGZFBVa3RmVWtWQlJGOVVTVTFGVDFWVUFGQlBVMVFBVFVsVFJFbFNSVU5VUlVSZlVrVlJWVVZUVkFCRFRFbEZUbFJmUTB4UFUwVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5TVQwRkVYMEpCVEVGT1EwVkVYMUpGVVZWRlUxUUFRa0ZFWDFKRlVWVkZVMVFBU0ZSVVVGOVNSVkZWUlZOVVgxTkZUbFJmVkU5ZlNGUlVVRk5mVUU5U1ZBQlNSVkJQVWxRQVNVMWZRVjlVUlVGUVQxUUFVa1ZUUlZSZlEwOU9WRVZPVkFCT1QxOURUMDVVUlU1VUFGQkJVbFJKUVV4ZlEwOU9WRVZPVkFCSVVFVmZTVTVXUVV4SlJGOURUMDVUVkVGT1ZBQklVRVZmUTBKZlVrVlRSVlFBUjBWVUFFaFFSVjlUVkZKSlExUUFRMDlPUmt4SlExUUFWRVZOVUU5U1FWSlpYMUpGUkVsU1JVTlVBRkJGVWsxQlRrVk9WRjlTUlVSSlVrVkRWQUJEVDA1T1JVTlVBRTFWVEZSSlgxTlVRVlJWVXdCSVVFVmZTVTVXUVV4SlJGOVRWRUZVVlZNQVZFOVBYMDFCVGxsZlVrVlJWVVZUVkZNQVJVRlNURmxmU0VsT1ZGTUFWVTVCVmtGSlRFRkNURVZmUms5U1gweEZSMEZNWDFKRlFWTlBUbE1BVDFCVVNVOU9Vd0JUVjBsVVEwaEpUa2RmVUZKUFZFOURUMHhUQUZaQlVrbEJUbFJmUVV4VFQxOU9SVWRQVkVsQlZFVlRBRTFWVEZSSlVFeEZYME5JVDBsRFJWTUFTVTVVUlZKT1FVeGZVMFZTVmtWU1gwVlNVazlTQUZkRlFsOVRSVkpXUlZKZlZVNUxUazlYVGw5RlVsSlBVZ0JTUVVsTVIxVk9YMFZTVWs5U0FFbEVSVTVVU1ZSWlgxQlNUMVpKUkVWU1gwRlZWRWhGVGxSSlEwRlVTVTlPWDBWU1VrOVNBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOUZVbEpQVWdCSlRsWkJURWxFWDFoZlJrOVNWMEZTUkVWRVgwWlBVZ0JUUlZSZlVFRlNRVTFGVkVWU0FFZEZWRjlRUVZKQlRVVlVSVklBU0ZCRlgxVlRSVklBVTBWRlgwOVVTRVZTQUVoUVJWOURRbDlEU0ZWT1MxOUlSVUZFUlZJQVRVdERRVXhGVGtSQlVnQlRSVlJWVUFCWFJVSmZVMFZTVmtWU1gwbFRYMFJQVjA0QVZFVkJVa1JQVjA0QVNGQkZYME5NVDFORlJGOURUMDVPUlVOVVNVOU9BRWhGVlZKSlUxUkpRMTlGV0ZCSlVrRlVTVTlPQUVSSlUwTlBUazVGUTFSRlJGOVBVRVZTUVZSSlQwNEFUazlPWDBGVlZFaFBVa2xVUVZSSlZrVmZTVTVHVDFKTlFWUkpUMDRBU0ZCRlgwbE9Wa0ZNU1VSZlZrVlNVMGxQVGdCSVVFVmZRMEpmVFVWVFUwRkhSVjlDUlVkSlRnQlRTVlJGWDBsVFgwWlNUMXBGVGdCSVVFVmZTVTVXUVV4SlJGOUlSVUZFUlZKZlZFOUxSVTRBU1U1V1FVeEpSRjlVVDB0RlRnQkdUMUpDU1VSRVJVNEFSVTVJUVU1RFJWOVpUMVZTWDBOQlRFMEFTRkJGWDBsT1ZrRk1TVVJmVlZKTUFFSk1UME5MUlVSZlFsbGZVRUZTUlU1VVFVeGZRMDlPVkZKUFRBQk5TME5QVEFCQlEwd0FTRkJGWDBsT1ZFVlNUa0ZNQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVmZWVTVQUmtaSlEwbEJUQUJJVUVWZlQwc0FWVTVNU1U1TEFGVk9URTlEU3dCUVVra0FVa1ZVVWxsZlYwbFVTQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJJVUVWZlZVNUZXRkJGUTFSRlJGOURUMDVVUlU1VVgweEZUa2RVU0FCR1RGVlRTQUJRVWs5UVVFRlVRMGdBVFMxVFJVRlNRMGdBVlZKSlgxUlBUMTlNVDA1SEFGQlNUME5GVTFOSlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5UVJWSlRTVk5VUlU1VVgxZEJVazVKVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlYUVZKT1NVNUhBRWhRUlY5SlRsWkJURWxFWDFSU1FVNVRSa1ZTWDBWT1EwOUVTVTVIQUVWNGNHVmpkR1ZrSUVOU1RFWUFTRkJGWDBsT1ZrRk1TVVJmUTBoVlRrdGZVMGxhUlFCTlQxWkZBRU5QVGxSSlRsVkZBRWhRUlY5RFFsOVRWRUZVVlZOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbE5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVpGVWxOSlQwNWZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxVlNURjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDFaQlRGVkZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RldGUkZUbE5KVDA1ZlRrRk5SVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZUVTBGSFJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlVTRTlFWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZSa2xGVEVSZlEwOU5VRXhGVkVVQVJFVk1SVlJGQUVoUVJWOUpUbFpCVEVsRVgwVlBSbDlUVkVGVVJRQkpUbFpCVEVsRVgxTlRURjlEUlZKVVNVWkpRMEZVUlFCUVFWVlRSUUJPVDE5U1JWTlFUMDVUUlFCVlRsTlZVRkJQVWxSRlJGOU5SVVJKUVY5VVdWQkZBRWRQVGtVQVRrOVVYMEZEUTBWUVZFRkNURVVBVTBWU1ZrbERSVjlWVGtGV1FVbE1RVUpNUlFCU1FVNUhSVjlPVDFSZlUwRlVTVk5HU1VGQ1RFVUFUMUpKUjBsT1gwbFRYMVZPVWtWQlEwaEJRa3hGQUZKRlUxQlBUbE5GWDBsVFgxTlVRVXhGQUZCVlVrZEZBRTFGVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFVBVWtWUlZVVlRWRjlJUlVGRVJWSmZWRTlQWDB4QlVrZEZBRkJCV1V4UFFVUmZWRTlQWDB4QlVrZEZBRWxPVTFWR1JrbERTVVZPVkY5VFZFOVNRVWRGQUVoUVJWOVFRVlZUUlVSZlZWQkhVa0ZFUlFCSVVFVmZVRUZWVTBWRVgwZ3lYMVZRUjFKQlJFVUFVMDlWVWtORkFFRk9UazlWVGtORkFGUlNRVU5GQUVoUVJWOVZUa1ZZVUVWRFZFVkVYMU5RUVVORkFFUkZVME5TU1VKRkFGVk9VMVZDVTBOU1NVSkZBRkpGUTA5U1JBQklVRVZmU1U1V1FVeEpSRjlOUlZSSVQwUUFUazlVWDBaUFZVNUVBRkJTVDFCR1NVNUVBRlZPUWtsT1JBQlNSVUpKVGtRQVZVNUJWVlJJVDFKSldrVkVBRTFGVkVoUFJGOU9UMVJmUVV4TVQxZEZSQUJJVkZSUVgxWkZVbE5KVDA1ZlRrOVVYMU5WVUZCUFVsUkZSQUJCVEZKRlFVUlpYMUpGVUU5U1ZFVkVBRUZEUTBWUVZFVkVBRTVQVkY5SlRWQk1SVTFGVGxSRlJBQk1UMDlRWDBSRlZFVkRWRVZFQUVoUVJWOURVbDlGV0ZCRlExUkZSQUJJVUVWZlRFWmZSVmhRUlVOVVJVUUFRMUpGUVZSRlJBQkpUVjlWVTBWRUFFaFFSVjlRUVZWVFJVUUFWRWxOUlU5VlZGOVBRME5WVWtWRUFGQkJXVTFGVGxSZlVrVlJWVWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMUpGVVZWSlVrVkVBRkJTVDFoWlgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUU1RlZGZFBVa3RmUVZWVVNFVk9WRWxEUVZSSlQwNWZVa1ZSVlVsU1JVUUFURVZPUjFSSVgxSkZVVlZKVWtWRUFGTlRURjlEUlZKVVNVWkpRMEZVUlY5U1JWRlZTVkpGUkFCVlVFZFNRVVJGWDFKRlVWVkpVa1ZFQUZCQlIwVmZSVmhRU1ZKRlJBQlFVa1ZEVDA1RVNWUkpUMDVmUmtGSlRFVkVBRVZZVUVWRFZFRlVTVTlPWDBaQlNVeEZSQUJTUlZaQlRFbEVRVlJKVDA1ZlJrRkpURVZFQUZOVFRGOUlRVTVFVTBoQlMwVmZSa0ZKVEVWRUFFeFBRMHRGUkFCVVVrRk9VMFpQVWsxQlZFbFBUbDlCVUZCTVNVVkVBRTVQVkY5TlQwUkpSa2xGUkFCT1QxUmZSVmhVUlU1RVJVUUFRa0ZPUkZkSlJGUklYMHhKVFVsVVgwVllRMFZGUkVWRUFGTkpWRVZmU1ZOZlQxWkZVa3hQUVVSRlJBQklSVUZFQUVWNGNHVmpkR1ZrSUVoVVZGQXZBQUJlRXdBQUpoTUFBREFRQUFEd0Z3QUFuUk1BQUJVU0FBQTVGd0FBOEJJQUFBb1FBQUIxRWdBQXJSSUFBSUlUQUFCUEZBQUFmeEFBQUtBVkFBQWpGQUFBaVJJQUFJc1VBQUJORlFBQTFCRUFBTThVQUFBUUdBQUF5UllBQU53V0FBREJFUUFBNEJjQUFMc1VBQUIwRkFBQWZCVUFBT1VVQUFBSUZ3QUFIeEFBQUdVVkFBQ2pGQUFBS0JVQUFBSVZBQUNaRlFBQUxCQUFBSXNaQUFCUER3QUExQTRBQUdvUUFBRE9FQUFBQWhjQUFJa09BQUJ1RXdBQUhCTUFBR1lVQUFCV0Z3QUF3Uk1BQU0wVEFBQnNFd0FBYUJjQUFHWVhBQUJmRndBQUloTUFBTTRQQUFCcERnQUEyQTRBQUdNV0FBRExFd0FBcWc0QUFDZ1hBQUFtRndBQXhSTUFBRjBXQUFEb0VRQUFaeE1BQUdVVEFBRHlGZ0FBY3hNQUFCMFhBQUQ1RmdBQTh4RUFBTThPQUFET0ZRQUFEQklBQUxNUkFBQ2xFUUFBWVJBQUFESVhBQUM3RXdCQitUVUxBUUVBUVpBMkMrQUJBUUVDQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFRZjAzQ3dFQkFFR1JPQXRlQWdNQ0FnSUNBZ0FBQWdJQUFnSUFBZ0lDQWdJQ0FnSUNBZ0FFQUFBQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFJQUFnQkIvVGtMQVFFQVFaRTZDMTRDQUFJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQU1BQkFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSHdPd3NOYkc5elpXVmxjQzFoYkdsMlpRQkJpVHdMQVFFQVFhQThDK0FCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUVlrK0N3RUJBRUdnUGd2bkFRRUJBUUVCQVFFQkFRRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQlkyaDFibXRsWkFCQnNNQUFDMThCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQkJrTUlBQ3lGbFkzUnBiMjVsYm5RdGJHVnVaM1JvYjI1eWIzaDVMV052Ym01bFkzUnBiMjRBUWNEQ0FBc3RjbUZ1YzJabGNpMWxibU52WkdsdVozQm5jbUZrWlEwS0RRb05DbE5ORFFvTkNsUlVVQzlEUlM5VVUxQXZBRUg1d2dBTEJRRUNBQUVEQUVHUXd3QUw0QUVFQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NRQUN3VUJBZ0FCQXdCQmtNVUFDK0FCQkFFQkJRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUWZuR0FBc0VBUUFBQVFCQmtjY0FDOThCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK3NnQUN3UUJBQUFDQUVHUXlRQUxYd01FQUFBRUJBUUVCQVFFQkFRRUJBVUVCQVFFQkFRRUJBUUVCQVFBQkFBR0J3UUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUFFSDZ5Z0FMQkFFQUFBRUFRWkRMQUFzQkFRQkJxc3NBQzBFQ0FBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QkIrc3dBQ3dRQkFBQUJBRUdRelFBTEFRRUFRWnJOQUFzR0FnQUFBQUFDQUVHeHpRQUxPZ01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQVFmRE9BQXVXQVU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09JywgJ2Jhc2U2NCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ0dFVCcsICdIRUFEJywgJ1BPU1QnXSlcbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCA9IG5ldyBTZXQoY29yc1NhZmVMaXN0ZWRNZXRob2RzKVxuXG5jb25zdCBudWxsQm9keVN0YXR1cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbMTAxLCAyMDQsIDIwNSwgMzA0XSlcblxuY29uc3QgcmVkaXJlY3RTdGF0dXMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XSlcbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNibG9jay1iYWQtcG9ydFxuICovXG5jb25zdCBiYWRQb3J0cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcxJywgJzcnLCAnOScsICcxMScsICcxMycsICcxNScsICcxNycsICcxOScsICcyMCcsICcyMScsICcyMicsICcyMycsICcyNScsICczNycsICc0MicsICc0MycsICc1MycsICc2OScsICc3NycsICc3OScsXG4gICc4NycsICc5NScsICcxMDEnLCAnMTAyJywgJzEwMycsICcxMDQnLCAnMTA5JywgJzExMCcsICcxMTEnLCAnMTEzJywgJzExNScsICcxMTcnLCAnMTE5JywgJzEyMycsICcxMzUnLCAnMTM3JyxcbiAgJzEzOScsICcxNDMnLCAnMTYxJywgJzE3OScsICczODknLCAnNDI3JywgJzQ2NScsICc1MTInLCAnNTEzJywgJzUxNCcsICc1MTUnLCAnNTI2JywgJzUzMCcsICc1MzEnLCAnNTMyJyxcbiAgJzU0MCcsICc1NDgnLCAnNTU0JywgJzU1NicsICc1NjMnLCAnNTg3JywgJzYwMScsICc2MzYnLCAnOTg5JywgJzk5MCcsICc5OTMnLCAnOTk1JywgJzE3MTknLCAnMTcyMCcsICcxNzIzJyxcbiAgJzIwNDknLCAnMzY1OScsICc0MDQ1JywgJzQxOTAnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY3OScsXG4gICc2Njk3JywgJzEwMDgwJ1xuXSlcbmNvbnN0IGJhZFBvcnRzU2V0ID0gbmV3IFNldChiYWRQb3J0cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY2llc1xuICovXG5jb25zdCByZWZlcnJlclBvbGljeSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcnLFxuICAnbm8tcmVmZXJyZXInLFxuICAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnLFxuICAnc2FtZS1vcmlnaW4nLFxuICAnb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4nLFxuICAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAndW5zYWZlLXVybCdcbl0pXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ2ZvbGxvdycsICdtYW51YWwnLCAnZXJyb3InXSlcblxuY29uc3Qgc2FmZU1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10pXG5jb25zdCBzYWZlTWV0aG9kc1NldCA9IG5ldyBTZXQoc2FmZU1ldGhvZHMpXG5cbmNvbnN0IHJlcXVlc3RNb2RlID0gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFsnbmF2aWdhdGUnLCAnc2FtZS1vcmlnaW4nLCAnbm8tY29ycycsICdjb3JzJ10pXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ29taXQnLCAnc2FtZS1vcmlnaW4nLCAnaW5jbHVkZSddKVxuXG5jb25zdCByZXF1ZXN0Q2FjaGUgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtYm9keS1oZWFkZXItbmFtZVxuICovXG5jb25zdCByZXF1ZXN0Qm9keUhlYWRlciA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LXR5cGUnLFxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMjFcbiAgLy8gJ0NvbnRlbnQtTGVuZ3RoJyBpcyBhIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgd2hpY2ggaXMgdHlwaWNhbGx5XG4gIC8vIHJlbW92ZWQgaW4gdGhlIEhlYWRlcnMgaW1wbGVtZW50YXRpb24uIEhvd2V2ZXIsIHVuZGljaSBkb2Vzbid0XG4gIC8vIGZpbHRlciBvdXQgaGVhZGVycywgc28gd2UgYWRkIGl0IGhlcmUuXG4gICdjb250ZW50LWxlbmd0aCdcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZW51bWRlZi1yZXF1ZXN0ZHVwbGV4XG4gKi9cbmNvbnN0IHJlcXVlc3REdXBsZXggPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnaGFsZidcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG4gKi9cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ10pXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzU2V0ID0gbmV3IFNldChmb3JiaWRkZW5NZXRob2RzKVxuXG5jb25zdCBzdWJyZXNvdXJjZSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdhdWRpbycsXG4gICdhdWRpb3dvcmtsZXQnLFxuICAnZm9udCcsXG4gICdpbWFnZScsXG4gICdtYW5pZmVzdCcsXG4gICdwYWludHdvcmtsZXQnLFxuICAnc2NyaXB0JyxcbiAgJ3N0eWxlJyxcbiAgJ3RyYWNrJyxcbiAgJ3ZpZGVvJyxcbiAgJ3hzbHQnLFxuICAnJ1xuXSlcbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN1YnJlc291cmNlLFxuICBmb3JiaWRkZW5NZXRob2RzLFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZWRpcmVjdFN0YXR1cyxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzLFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHMsXG4gIGJhZFBvcnRzLFxuICByZXF1ZXN0RHVwbGV4LFxuICBzdWJyZXNvdXJjZVNldCxcbiAgYmFkUG9ydHNTZXQsXG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHNhZmVNZXRob2RzU2V0LFxuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeVNldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsIGluY3JlYXNlIHRoZSB2ZXJzaW9uXG4vLyBudW1iZXIgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsT3JpZ2luID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbE9yaWdpbi4xJylcblxuZnVuY3Rpb24gZ2V0R2xvYmFsT3JpZ2luICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsT3JpZ2luXVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxPcmlnaW4gKG5ld09yaWdpbikge1xuICBpZiAobmV3T3JpZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG5ld09yaWdpbilcblxuICBpZiAocGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cDonICYmIHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IGh0dHAgJiBodHRwcyB1cmxzIGFyZSBhbGxvd2VkLCByZWNlaXZlZCAke3BhcnNlZFVSTC5wcm90b2NvbH1gKVxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgIHZhbHVlOiBwYXJzZWRVUkwsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0R2xvYmFsT3JpZ2luLFxuICBzZXRHbG9iYWxPcmlnaW5cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorXFwtLl5ffH5BLVphLXowLTldKyQvXG5jb25zdCBIVFRQX1dISVRFU1BBQ0VfUkVHRVggPSAvW1xcdTAwMEFcXHUwMDBEXFx1MDAwOVxcdTAwMjBdLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5jb25zdCBBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVggPSAvW1xcdTAwMDlcXHUwMDBBXFx1MDAwQ1xcdTAwMERcXHUwMDIwXS9nIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcXVvdGVkLXN0cmluZy10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdFXFx1MDA4MC1cXHUwMEZGXSskLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1wcm9jZXNzb3Jcbi8qKiBAcGFyYW0ge1VSTH0gZGF0YVVSTCAqL1xuZnVuY3Rpb24gZGF0YVVSTFByb2Nlc3NvciAoZGF0YVVSTCkge1xuICAvLyAxLiBBc3NlcnQ6IGRhdGFVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIi5cbiAgYXNzZXJ0KGRhdGFVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpXG5cbiAgLy8gMi4gTGV0IGlucHV0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgVVJMXG4gIC8vIHNlcmlhbGl6ZXIgb24gZGF0YVVSTCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnRcbiAgLy8gc2V0IHRvIHRydWUuXG4gIGxldCBpbnB1dCA9IFVSTFNlcmlhbGl6ZXIoZGF0YVVSTCwgdHJ1ZSlcblxuICAvLyAzLiBSZW1vdmUgdGhlIGxlYWRpbmcgXCJkYXRhOlwiIHN0cmluZyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IGlucHV0LnNsaWNlKDUpXG5cbiAgLy8gNC4gTGV0IHBvc2l0aW9uIHBvaW50IGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyA1LiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IGVxdWFsXG4gIC8vIHRvIFUrMDAyQyAoLCksIGdpdmVuIHBvc2l0aW9uLlxuICBsZXQgbWltZVR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLCcsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDYuIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBtaW1lVHlwZS5cbiAgLy8gVW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHdlIG5lZWQgdG8gc3RvcmUgdGhlXG4gIC8vIGxlbmd0aCBiZWNhdXNlIGlmIHRoZSBtaW1ldHlwZSBoYXMgc3BhY2VzIHJlbW92ZWQsXG4gIC8vIHRoZSB3cm9uZyBhbW91bnQgd2lsbCBiZSBzbGljZWQgZnJvbSB0aGUgaW5wdXQgaW5cbiAgLy8gc3RlcCAjOVxuICBjb25zdCBtaW1lVHlwZUxlbmd0aCA9IG1pbWVUeXBlLmxlbmd0aFxuICBtaW1lVHlwZSA9IHJlbW92ZUFTQ0lJV2hpdGVzcGFjZShtaW1lVHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyA3LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW5cbiAgLy8gcmV0dXJuIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDkuIExldCBlbmNvZGVkQm9keSBiZSB0aGUgcmVtYWluZGVyIG9mIGlucHV0LlxuICBjb25zdCBlbmNvZGVkQm9keSA9IGlucHV0LnNsaWNlKG1pbWVUeXBlTGVuZ3RoICsgMSlcblxuICAvLyAxMC4gTGV0IGJvZHkgYmUgdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgZW5jb2RlZEJvZHkuXG4gIGxldCBib2R5ID0gc3RyaW5nUGVyY2VudERlY29kZShlbmNvZGVkQm9keSlcblxuICAvLyAxMS4gSWYgbWltZVR5cGUgZW5kcyB3aXRoIFUrMDAzQiAoOyksIGZvbGxvd2VkIGJ5XG4gIC8vIHplcm8gb3IgbW9yZSBVKzAwMjAgU1BBQ0UsIGZvbGxvd2VkIGJ5IGFuIEFTQ0lJXG4gIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIFwiYmFzZTY0XCIsIHRoZW46XG4gIGlmICgvOyhcXHUwMDIwKXswLH1iYXNlNjQkL2kudGVzdChtaW1lVHlwZSkpIHtcbiAgICAvLyAxLiBMZXQgc3RyaW5nQm9keSBiZSB0aGUgaXNvbW9ycGhpYyBkZWNvZGUgb2YgYm9keS5cbiAgICBjb25zdCBzdHJpbmdCb2R5ID0gaXNvbW9ycGhpY0RlY29kZShib2R5KVxuXG4gICAgLy8gMi4gU2V0IGJvZHkgdG8gdGhlIGZvcmdpdmluZy1iYXNlNjQgZGVjb2RlIG9mXG4gICAgLy8gc3RyaW5nQm9keS5cbiAgICBib2R5ID0gZm9yZ2l2aW5nQmFzZTY0KHN0cmluZ0JvZHkpXG5cbiAgICAvLyAzLiBJZiBib2R5IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGJvZHkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDQuIFJlbW92ZSB0aGUgbGFzdCA2IGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtNilcblxuICAgIC8vIDUuIFJlbW92ZSB0cmFpbGluZyBVKzAwMjAgU1BBQ0UgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZSxcbiAgICAvLyBpZiBhbnkuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5yZXBsYWNlKC8oXFx1MDAyMCkrJC8sICcnKVxuXG4gICAgLy8gNi4gUmVtb3ZlIHRoZSBsYXN0IFUrMDAzQiAoOykgY29kZSBwb2ludCBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTEpXG4gIH1cblxuICAvLyAxMi4gSWYgbWltZVR5cGUgc3RhcnRzIHdpdGggVSswMDNCICg7KSwgdGhlbiBwcmVwZW5kXG4gIC8vIFwidGV4dC9wbGFpblwiIHRvIG1pbWVUeXBlLlxuICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgnOycpKSB7XG4gICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbicgKyBtaW1lVHlwZVxuICB9XG5cbiAgLy8gMTMuIExldCBtaW1lVHlwZVJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgLy8gbWltZVR5cGUuXG4gIGxldCBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgLy8gMTQuIElmIG1pbWVUeXBlUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gc2V0XG4gIC8vIG1pbWVUeXBlUmVjb3JkIHRvIHRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSS5cbiAgaWYgKG1pbWVUeXBlUmVjb3JkID09PSAnZmFpbHVyZScpIHtcbiAgICBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUoJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScpXG4gIH1cblxuICAvLyAxNS4gUmV0dXJuIGEgbmV3IGRhdGE6IFVSTCBzdHJ1Y3Qgd2hvc2UgTUlNRVxuICAvLyB0eXBlIGlzIG1pbWVUeXBlUmVjb3JkIGFuZCBib2R5IGlzIGJvZHkuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1zdHJ1Y3RcbiAgcmV0dXJuIHsgbWltZVR5cGU6IG1pbWVUeXBlUmVjb3JkLCBib2R5IH1cbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4vKipcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIFVSTFNlcmlhbGl6ZXIgKHVybCwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgaWYgKCFleGNsdWRlRnJhZ21lbnQpIHtcbiAgICByZXR1cm4gdXJsLmhyZWZcbiAgfVxuXG4gIGNvbnN0IGhyZWYgPSB1cmwuaHJlZlxuICBjb25zdCBoYXNoTGVuZ3RoID0gdXJsLmhhc2gubGVuZ3RoXG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IGhhc2hMZW5ndGggPT09IDAgPyBocmVmIDogaHJlZi5zdWJzdHJpbmcoMCwgaHJlZi5sZW5ndGggLSBoYXNoTGVuZ3RoKVxuXG4gIGlmICghaGFzaExlbmd0aCAmJiBocmVmLmVuZHNXaXRoKCcjJykpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplZC5zbGljZSgwLCAtMSlcbiAgfVxuXG4gIHJldHVybiBzZXJpYWxpemVkXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWEtc2VxdWVuY2Utb2YtY29kZS1wb2ludHNcbi8qKlxuICogQHBhcmFtIHsoY2hhcjogc3RyaW5nKSA9PiBib29sZWFufSBjb25kaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgcmVzdWx0ID0gJydcblxuICAvLyAyLiBXaGlsZSBwb3NpdGlvbiBkb2Vzblx1MjAxOXQgcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGlucHV0IGFuZCB0aGVcbiAgLy8gY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgbWVldHMgdGhlIGNvbmRpdGlvbiBjb25kaXRpb246XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCAmJiBjb25kaXRpb24oaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dKSkge1xuICAgIC8vIDEuIEFwcGVuZCB0aGF0IGNvZGUgcG9pbnQgdG8gdGhlIGVuZCBvZiByZXN1bHQuXG4gICAgcmVzdWx0ICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDMuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBBIGZhc3RlciBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIHRoYXQgb25seSB3b3JrcyB3aGVuIGNvbXBhcmluZyBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCAoY2hhciwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGNvbnN0IGlkeCA9IGlucHV0LmluZGV4T2YoY2hhciwgcG9zaXRpb24ucG9zaXRpb24pXG4gIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uID0gaW5wdXQubGVuZ3RoXG4gICAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0KVxuICB9XG5cbiAgcG9zaXRpb24ucG9zaXRpb24gPSBpZHhcbiAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdHJpbmctcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHN0cmluZ1BlcmNlbnREZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgaW5wdXQuXG4gIGNvbnN0IGJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGJ5dGVzLlxuICByZXR1cm4gcGVyY2VudERlY29kZShieXRlcylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYnl0ZVxuICovXG5mdW5jdGlvbiBpc0hleENoYXJCeXRlIChieXRlKSB7XG4gIC8vIDAtOSBBLUYgYS1mXG4gIHJldHVybiAoYnl0ZSA+PSAweDMwICYmIGJ5dGUgPD0gMHgzOSkgfHwgKGJ5dGUgPj0gMHg0MSAmJiBieXRlIDw9IDB4NDYpIHx8IChieXRlID49IDB4NjEgJiYgYnl0ZSA8PSAweDY2KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBieXRlXG4gKi9cbmZ1bmN0aW9uIGhleEJ5dGVUb051bWJlciAoYnl0ZSkge1xuICByZXR1cm4gKFxuICAgIC8vIDAtOVxuICAgIGJ5dGUgPj0gMHgzMCAmJiBieXRlIDw9IDB4MzlcbiAgICAgID8gKGJ5dGUgLSA0OClcbiAgICAvLyBDb252ZXJ0IHRvIHVwcGVyY2FzZVxuICAgIC8vICgoYnl0ZSAmIDB4REYpIC0gNjUpICsgMTBcbiAgICAgIDogKChieXRlICYgMHhERikgLSA1NSlcbiAgKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIC8vIDEuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqL1xuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGxldCBqID0gMFxuICAvLyAyLiBGb3IgZWFjaCBieXRlIGJ5dGUgaW4gaW5wdXQ6XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBieXRlID0gaW5wdXRbaV1cblxuICAgIC8vIDEuIElmIGJ5dGUgaXMgbm90IDB4MjUgKCUpLCB0aGVuIGFwcGVuZCBieXRlIHRvIG91dHB1dC5cbiAgICBpZiAoYnl0ZSAhPT0gMHgyNSkge1xuICAgICAgb3V0cHV0W2orK10gPSBieXRlXG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJ5dGUgaXMgMHgyNSAoJSkgYW5kIHRoZSBuZXh0IHR3byBieXRlc1xuICAgIC8vIGFmdGVyIGJ5dGUgaW4gaW5wdXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2VzXG4gICAgLy8gMHgzMCAoMCkgdG8gMHgzOSAoOSksIDB4NDEgKEEpIHRvIDB4NDYgKEYpLFxuICAgIC8vIGFuZCAweDYxIChhKSB0byAweDY2IChmKSwgYWxsIGluY2x1c2l2ZSwgYXBwZW5kIGJ5dGVcbiAgICAvLyB0byBvdXRwdXQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ5dGUgPT09IDB4MjUgJiZcbiAgICAgICEoaXNIZXhDaGFyQnl0ZShpbnB1dFtpICsgMV0pICYmIGlzSGV4Q2hhckJ5dGUoaW5wdXRbaSArIDJdKSlcbiAgICApIHtcbiAgICAgIG91dHB1dFtqKytdID0gMHgyNVxuXG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBMZXQgYnl0ZVBvaW50IGJlIHRoZSB0d28gYnl0ZXMgYWZ0ZXIgYnl0ZSBpbiBpbnB1dCxcbiAgICAgIC8vIGRlY29kZWQsIGFuZCB0aGVuIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsIG51bWJlci5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dFtqKytdID0gKGhleEJ5dGVUb051bWJlcihpbnB1dFtpICsgMV0pIDw8IDQpIHwgaGV4Qnl0ZVRvTnVtYmVyKGlucHV0W2kgKyAyXSlcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gbGVuZ3RoID09PSBqID8gb3V0cHV0IDogb3V0cHV0LnN1YmFycmF5KDAsIGopXG59XG5cbi8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtYS1taW1lLXR5cGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHBhcnNlTUlNRVR5cGUgKGlucHV0KSB7XG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gaW5wdXQuXG4gIGlucHV0ID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UoaW5wdXQsIHRydWUsIHRydWUpXG5cbiAgLy8gMi4gTGV0IHBvc2l0aW9uIGJlIGEgcG9zaXRpb24gdmFyaWFibGUgZm9yIGlucHV0LFxuICAvLyBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGlucHV0LlxuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gIC8vIDMuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlXG4gIC8vIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMkYgKC8pIGZyb21cbiAgLy8gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCB0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJy8nLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA0LiBJZiB0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAgaWYgKHR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdCh0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDUuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiByZXR1cm5cbiAgLy8gZmFpbHVyZVxuICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDJGICgvKS4pXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBMZXQgc3VidHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZlxuICAvLyBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlblxuICAvLyBwb3NpdGlvbi5cbiAgbGV0IHN1YnR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnOycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDguIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gc3VidHlwZS5cbiAgc3VidHlwZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHN1YnR5cGUsIGZhbHNlLCB0cnVlKVxuXG4gIC8vIDkuIElmIHN1YnR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoc3VidHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHN1YnR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgdHlwZUxvd2VyY2FzZSA9IHR5cGUudG9Mb3dlckNhc2UoKVxuICBjb25zdCBzdWJ0eXBlTG93ZXJjYXNlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gMTAuIExldCBtaW1lVHlwZSBiZSBhIG5ldyBNSU1FIHR5cGUgcmVjb3JkIHdob3NlIHR5cGVcbiAgLy8gaXMgdHlwZSwgaW4gQVNDSUkgbG93ZXJjYXNlLCBhbmQgc3VidHlwZSBpcyBzdWJ0eXBlLFxuICAvLyBpbiBBU0NJSSBsb3dlcmNhc2UuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlXG4gIGNvbnN0IG1pbWVUeXBlID0ge1xuICAgIHR5cGU6IHR5cGVMb3dlcmNhc2UsXG4gICAgc3VidHlwZTogc3VidHlwZUxvd2VyY2FzZSxcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgcGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlLWVzc2VuY2VcbiAgICBlc3NlbmNlOiBgJHt0eXBlTG93ZXJjYXNlfS8ke3N1YnR5cGVMb3dlcmNhc2V9YFxuICB9XG5cbiAgLy8gMTEuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDEuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0IgKDspLilcbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgSFRUUFxuICAgIC8vIHdoaXRlc3BhY2UgZnJvbSBpbnB1dCBnaXZlbiBwb3NpdGlvbi5cbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICAgICAgY2hhciA9PiBIVFRQX1dISVRFU1BBQ0VfUkVHRVgudGVzdChjaGFyKSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAzLiBMZXQgcGFyYW1ldGVyTmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYVxuICAgIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgLy8gb3IgVSswMDNEICg9KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICBsZXQgcGFyYW1ldGVyTmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJzsnICYmIGNoYXIgIT09ICc9JyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA0LiBTZXQgcGFyYW1ldGVyTmFtZSB0byBwYXJhbWV0ZXJOYW1lLCBpbiBBU0NJSVxuICAgIC8vIGxvd2VyY2FzZS5cbiAgICBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuOlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgLy8gMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgICAvLyBVKzAwM0IgKDspLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJzsnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0QgKD0pLilcbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgICB9XG5cbiAgICAvLyA2LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIC8vIDcuIExldCBwYXJhbWV0ZXJWYWx1ZSBiZSBudWxsLlxuICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IG51bGxcblxuICAgIC8vIDguIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgIC8vIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGFuIEhUVFAgcXVvdGVkIHN0cmluZyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvblxuICAgICAgLy8gYW5kIHRoZSBleHRyYWN0LXZhbHVlIGZsYWcuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcoaW5wdXQsIHBvc2l0aW9uLCB0cnVlKVxuXG4gICAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90XG4gICAgICAvLyBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAvLyA5LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAgIC8vIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgICAgLy8gMi4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBwYXJhbWV0ZXJWYWx1ZS5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UocGFyYW1ldGVyVmFsdWUsIGZhbHNlLCB0cnVlKVxuXG4gICAgICAvLyAzLiBJZiBwYXJhbWV0ZXJWYWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBzb2xlbHkgY29udGFpbnMgSFRUUCB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gcGFyYW1ldGVyVmFsdWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgcXVvdGVkLXN0cmluZyB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gZG9lcyBub3QgZXhpc3RcbiAgICAvLyB0aGVuIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSB0byBwYXJhbWV0ZXJWYWx1ZS5cbiAgICBpZiAoXG4gICAgICBwYXJhbWV0ZXJOYW1lLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QocGFyYW1ldGVyTmFtZSkgJiZcbiAgICAgIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDAgfHwgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUy50ZXN0KHBhcmFtZXRlclZhbHVlKSkgJiZcbiAgICAgICFtaW1lVHlwZS5wYXJhbWV0ZXJzLmhhcyhwYXJhbWV0ZXJOYW1lKVxuICAgICkge1xuICAgICAgbWltZVR5cGUucGFyYW1ldGVycy5zZXQocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNmb3JnaXZpbmctYmFzZTY0LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICovXG5mdW5jdGlvbiBmb3JnaXZpbmdCYXNlNjQgKGRhdGEpIHtcbiAgLy8gMS4gUmVtb3ZlIGFsbCBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gZGF0YS5cbiAgZGF0YSA9IGRhdGEucmVwbGFjZShBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVgsICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGxldCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGhcbiAgLy8gMi4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gbm8gcmVtYWluZGVyLCB0aGVuOlxuICBpZiAoZGF0YUxlbmd0aCAlIDQgPT09IDApIHtcbiAgICAvLyAxLiBJZiBkYXRhIGVuZHMgd2l0aCBvbmUgb3IgdHdvIFUrMDAzRCAoPSkgY29kZSBwb2ludHMsXG4gICAgLy8gdGhlbiByZW1vdmUgdGhlbSBmcm9tIGRhdGEuXG4gICAgaWYgKGRhdGEuY2hhckNvZGVBdChkYXRhTGVuZ3RoIC0gMSkgPT09IDB4MDAzRCkge1xuICAgICAgLS1kYXRhTGVuZ3RoXG4gICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KGRhdGFMZW5ndGggLSAxKSA9PT0gMHgwMDNEKSB7XG4gICAgICAgIC0tZGF0YUxlbmd0aFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIGEgcmVtYWluZGVyIG9mIDEsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhTGVuZ3RoICUgNCA9PT0gMSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDQuIElmIGRhdGEgY29udGFpbnMgYSBjb2RlIHBvaW50IHRoYXQgaXMgbm90IG9uZSBvZlxuICAvLyAgVSswMDJCICgrKVxuICAvLyAgVSswMDJGICgvKVxuICAvLyAgQVNDSUkgYWxwaGFudW1lcmljXG4gIC8vIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICgvW14rLzAtOUEtWmEtel0vLnRlc3QoZGF0YS5sZW5ndGggPT09IGRhdGFMZW5ndGggPyBkYXRhIDogZGF0YS5zdWJzdHJpbmcoMCwgZGF0YUxlbmd0aCkpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSwgJ2Jhc2U2NCcpXG4gIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZVx1MjAxOXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBlXHUyMDE5cyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIFx1MjE5MiB2YWx1ZSBvZiBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VycmVuY2Ugb2YgVSswMDIyIChcIikgb3JcbiAgICAgIC8vICAgIFUrMDA1QyAoXFwpIGluIHZhbHVlIHdpdGggVSswMDVDIChcXCkuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhcXFxcfFwiKS9nLCAnXFxcXCQxJylcblxuICAgICAgLy8gMi4gUHJlcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlID0gJ1wiJyArIHZhbHVlXG5cbiAgICAgIC8vIDMuIEFwcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9ICdcIidcbiAgICB9XG5cbiAgICAvLyA1LiBBcHBlbmQgdmFsdWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IHZhbHVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gc2VyaWFsaXphdGlvbi5cbiAgcmV0dXJuIHNlcmlhbGl6YXRpb25cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2UgKGNoYXIpIHtcbiAgLy8gXCJcXHJcXG5cXHQgXCJcbiAgcmV0dXJuIGNoYXIgPT09IDB4MDBkIHx8IGNoYXIgPT09IDB4MDBhIHx8IGNoYXIgPT09IDB4MDA5IHx8IGNoYXIgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsZWFkaW5nPXRydWVdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmFpbGluZz10cnVlXVxuICovXG5mdW5jdGlvbiByZW1vdmVIVFRQV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0hUVFBXaGl0ZVNwYWNlKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIC8vIFwiXFxyXFxuXFx0XFxmIFwiXG4gIHJldHVybiBjaGFyID09PSAweDAwZCB8fCBjaGFyID09PSAweDAwYSB8fCBjaGFyID09PSAweDAwOSB8fCBjaGFyID09PSAweDAwYyB8fCBjaGFyID09PSAweDAyMFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWxlYWRpbmctYW5kLXRyYWlsaW5nLWFzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlYWRpbmc9dHJ1ZV1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYWlsaW5nPXRydWVdXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0FTQ0lJV2hpdGVzcGFjZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKHN0ciwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgc3RyLmxlbmd0aCAmJiBwcmVkaWNhdGUoc3RyLmNoYXJDb2RlQXQobGVhZCkpKSBsZWFkKytcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIHdoaWxlICh0cmFpbCA+IDAgJiYgcHJlZGljYXRlKHN0ci5jaGFyQ29kZUF0KHRyYWlsKSkpIHRyYWlsLS1cbiAgfVxuXG4gIHJldHVybiBsZWFkID09PSAwICYmIHRyYWlsID09PSBzdHIubGVuZ3RoIC0gMSA/IHN0ciA6IHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNEZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIFRvIGlzb21vcnBoaWMgZGVjb2RlIGEgYnl0ZSBzZXF1ZW5jZSBpbnB1dCwgcmV0dXJuIGEgc3RyaW5nIHdob3NlIGNvZGUgcG9pbnRcbiAgLy8gICAgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBsZW5ndGggYW5kIHdob3NlIGNvZGUgcG9pbnRzIGhhdmUgdGhlIHNhbWUgdmFsdWVzXG4gIC8vICAgIGFzIHRoZSB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGJ5dGVzLCBpbiB0aGUgc2FtZSBvcmRlci5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIGlmICgoMiA8PCAxNSkgLSAxID4gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgaW5wdXQpXG4gIH1cbiAgbGV0IHJlc3VsdCA9ICcnOyBsZXQgaSA9IDBcbiAgbGV0IGFkZGl0aW9uID0gKDIgPDwgMTUpIC0gMVxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGlmIChpICsgYWRkaXRpb24gPiBsZW5ndGgpIHtcbiAgICAgIGFkZGl0aW9uID0gbGVuZ3RoIC0gaVxuICAgIH1cbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBpbnB1dC5zdWJhcnJheShpLCBpICs9IGFkZGl0aW9uKSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbmltaXplLWEtc3VwcG9ydGVkLW1pbWUtdHlwZVxuICogQHBhcmFtIHtFeGNsdWRlPFJldHVyblR5cGU8dHlwZW9mIHBhcnNlTUlNRVR5cGU+LCAnZmFpbHVyZSc+fSBtaW1lVHlwZVxuICovXG5mdW5jdGlvbiBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIChtaW1lVHlwZSkge1xuICBzd2l0Y2ggKG1pbWVUeXBlLmVzc2VuY2UpIHtcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9lY21hc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQnOlxuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9lY21hc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQnOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMCc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS4xJzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjInOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMyc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS40JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjUnOlxuICAgIGNhc2UgJ3RleHQvanNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9saXZlc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L3gtZWNtYXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC94LWphdmFzY3JpcHQnOlxuICAgICAgLy8gMS4gSWYgbWltZVR5cGUgaXMgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZSwgdGhlbiByZXR1cm4gXCJ0ZXh0L2phdmFzY3JpcHRcIi5cbiAgICAgIHJldHVybiAndGV4dC9qYXZhc2NyaXB0J1xuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxuICAgIGNhc2UgJ3RleHQvanNvbic6XG4gICAgICAvLyAyLiBJZiBtaW1lVHlwZSBpcyBhIEpTT04gTUlNRSB0eXBlLCB0aGVuIHJldHVybiBcImFwcGxpY2F0aW9uL2pzb25cIi5cbiAgICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgICBjYXNlICdpbWFnZS9zdmcreG1sJzpcbiAgICAgIC8vIDMuIElmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwiaW1hZ2Uvc3ZnK3htbFwiLCB0aGVuIHJldHVybiBcImltYWdlL3N2Zyt4bWxcIi5cbiAgICAgIHJldHVybiAnaW1hZ2Uvc3ZnK3htbCdcbiAgICBjYXNlICd0ZXh0L3htbCc6XG4gICAgY2FzZSAnYXBwbGljYXRpb24veG1sJzpcbiAgICAgIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlIGlzIGEgSlNPTiBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiLlxuICBpZiAobWltZVR5cGUuc3VidHlwZS5lbmRzV2l0aCgnK2pzb24nKSkge1xuICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgfVxuXG4gIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gIGlmIChtaW1lVHlwZS5zdWJ0eXBlLmVuZHNXaXRoKCcreG1sJykpIHtcbiAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDUuIElmIG1pbWVUeXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgdXNlciBhZ2VudCwgdGhlbiByZXR1cm4gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gIC8vIFRlY2huaWNhbGx5LCBub2RlIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgbWltZXR5cGVzLlxuXG4gIC8vIDYuIFJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICByZXR1cm4gJydcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRhdGFVUkxQcm9jZXNzb3IsXG4gIFVSTFNlcmlhbGl6ZXIsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0LFxuICBzdHJpbmdQZXJjZW50RGVjb2RlLFxuICBwYXJzZU1JTUVUeXBlLFxuICBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLFxuICBzZXJpYWxpemVBTWltZVR5cGUsXG4gIHJlbW92ZUNoYXJzLFxuICByZW1vdmVIVFRQV2hpdGVzcGFjZSxcbiAgbWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZSxcbiAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLFxuICBpc29tb3JwaGljRGVjb2RlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdHlwZXMsIGluc3BlY3QgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IG1hcmtBc1VuY2xvbmVhYmxlIH0gPSByZXF1aXJlKCdub2RlOndvcmtlcl90aHJlYWRzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi8uLi90eXBlcy93ZWJpZGwnKS5XZWJpZGx9ICovXG5jb25zdCB3ZWJpZGwgPSB7fVxud2ViaWRsLmNvbnZlcnRlcnMgPSB7fVxud2ViaWRsLnV0aWwgPSB7fVxud2ViaWRsLmVycm9ycyA9IHt9XG5cbndlYmlkbC5lcnJvcnMuZXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYCR7bWVzc2FnZS5oZWFkZXJ9OiAke21lc3NhZ2UubWVzc2FnZX1gKVxufVxuXG53ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCBwbHVyYWwgPSBjb250ZXh0LnR5cGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJyBvbmUgb2YnXG4gIGNvbnN0IG1lc3NhZ2UgPVxuICAgIGAke2NvbnRleHQuYXJndW1lbnR9IGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG9gICtcbiAgICBgJHtwbHVyYWx9OiAke2NvbnRleHQudHlwZXMuam9pbignLCAnKX0uYFxuXG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbndlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2U6IGBcIiR7Y29udGV4dC52YWx1ZX1cIiBpcyBhbiBpbnZhbGlkICR7Y29udGV4dC50eXBlfS5gXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaW1wbGVtZW50c1xud2ViaWRsLmJyYW5kQ2hlY2sgPSBmdW5jdGlvbiAoViwgSSwgb3B0cykge1xuICBpZiAob3B0cz8uc3RyaWN0ICE9PSBmYWxzZSkge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBJKSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChWPy5bU3ltYm9sLnRvU3RyaW5nVGFnXSAhPT0gSS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbndlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrID0gZnVuY3Rpb24gKHsgbGVuZ3RoIH0sIG1pbiwgY3R4KSB7XG4gIGlmIChsZW5ndGggPCBtaW4pIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBtZXNzYWdlOiBgJHttaW59IGFyZ3VtZW50JHttaW4gIT09IDEgPyAncycgOiAnJ30gcmVxdWlyZWQsIGAgK1xuICAgICAgICAgICAgICAgYGJ1dCR7bGVuZ3RoID8gJyBvbmx5JyA6ICcnfSAke2xlbmd0aH0gZm91bmQuYCxcbiAgICAgIGhlYWRlcjogY3R4XG4gICAgfSlcbiAgfVxufVxuXG53ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiAnVHlwZUVycm9yJyxcbiAgICBtZXNzYWdlOiAnSWxsZWdhbCBjb25zdHJ1Y3RvcidcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWRhdGEtdHlwZXMtYW5kLXZhbHVlc1xud2ViaWRsLnV0aWwuVHlwZSA9IGZ1bmN0aW9uIChWKSB7XG4gIHN3aXRjaCAodHlwZW9mIFYpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gJ1VuZGVmaW5lZCdcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuICdCb29sZWFuJ1xuICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiAnU3RyaW5nJ1xuICAgIGNhc2UgJ3N5bWJvbCc6IHJldHVybiAnU3ltYm9sJ1xuICAgIGNhc2UgJ251bWJlcic6IHJldHVybiAnTnVtYmVyJ1xuICAgIGNhc2UgJ2JpZ2ludCc6IHJldHVybiAnQmlnSW50J1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ051bGwnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnT2JqZWN0J1xuICAgIH1cbiAgfVxufVxuXG53ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSA9IG1hcmtBc1VuY2xvbmVhYmxlIHx8ICgoKSA9PiB7fSlcbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzKSB7XG4gIGxldCB1cHBlckJvdW5kXG4gIGxldCBsb3dlckJvdW5kXG5cbiAgLy8gMS4gSWYgYml0TGVuZ3RoIGlzIDY0LCB0aGVuOlxuICBpZiAoYml0TGVuZ3RoID09PSA2NCkge1xuICAgIC8vIDEuIExldCB1cHBlckJvdW5kIGJlIDJeNTMgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIDUzKSAtIDFcblxuICAgIC8vIDIuIElmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuIGxldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAgIGxvd2VyQm91bmQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSBsZXQgbG93ZXJCb3VuZCBiZSBcdTIyMTIyXjUzICsgMS5cbiAgICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgNTMpICsgMVxuICAgIH1cbiAgfSBlbHNlIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbjpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgbG93ZXJCb3VuZCA9IDBcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIC0yXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIGJpdExlbmd0aCkgLSAxXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMSBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSkgLSAxXG4gIH1cblxuICAvLyA0LiBMZXQgeCBiZSA/IFRvTnVtYmVyKFYpLlxuICBsZXQgeCA9IE51bWJlcihWKVxuXG4gIC8vIDUuIElmIHggaXMgXHUyMjEyMCwgdGhlbiBzZXQgeCB0byArMC5cbiAgaWYgKHggPT09IDApIHtcbiAgICB4ID0gMFxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbRW5mb3JjZVJhbmdlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmIChvcHRzPy5lbmZvcmNlUmFuZ2UgPT09IHRydWUpIHtcbiAgICAvLyAxLiBJZiB4IGlzIE5hTiwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBjb252ZXJ0ICR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSB0byBhbiBpbnRlZ2VyLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gICAgeCA9IHdlYmlkbC51dGlsLkludGVnZXJQYXJ0KHgpXG5cbiAgICAvLyAzLiBJZiB4IDwgbG93ZXJCb3VuZCBvciB4ID4gdXBwZXJCb3VuZCwgdGhlblxuICAgIC8vICAgIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdJbnRlZ2VyIGNvbnZlcnNpb24nLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgbXVzdCBiZSBiZXR3ZWVuICR7bG93ZXJCb3VuZH0tJHt1cHBlckJvdW5kfSwgZ290ICR7eH0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gNy4gSWYgeCBpcyBub3QgTmFOIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJRExcbiAgLy8gICAgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIFtDbGFtcF0gZXh0ZW5kZWRcbiAgLy8gICAgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAoIU51bWJlci5pc05hTih4KSAmJiBvcHRzPy5jbGFtcCA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIFNldCB4IHRvIG1pbihtYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpLlxuICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZClcblxuICAgIC8vIDIuIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlXG4gICAgLy8gICAgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byxcbiAgICAvLyAgICBhbmQgY2hvb3NpbmcgKzAgcmF0aGVyIHRoYW4gXHUyMjEyMC5cbiAgICBpZiAoTWF0aC5mbG9vcih4KSAlIDIgPT09IDApIHtcbiAgICAgIHggPSBNYXRoLmZsb29yKHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBNYXRoLmNlaWwoeClcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gOC4gSWYgeCBpcyBOYU4sICswLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gcmV0dXJuICswLlxuICBpZiAoXG4gICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgKHggPT09IDAgJiYgT2JqZWN0LmlzKDAsIHgpKSB8fFxuICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICApIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gOS4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gIC8vIDEwLiBTZXQgeCB0byB4IG1vZHVsbyAyXmJpdExlbmd0aC5cbiAgeCA9IHggJSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG5cbiAgLy8gMTEuIElmIHNpZ25lZG5lc3MgaXMgXCJzaWduZWRcIiBhbmQgeCBcdTIyNjUgMl5iaXRMZW5ndGggXHUyMjEyIDEsXG4gIC8vICAgIHRoZW4gcmV0dXJuIHggXHUyMjEyIDJeYml0TGVuZ3RoLlxuICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3NpZ25lZCcgJiYgeCA+PSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMSkge1xuICAgIHJldHVybiB4IC0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuICB9XG5cbiAgLy8gMTIuIE90aGVyd2lzZSwgcmV0dXJuIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtaW50ZWdlcnBhcnRcbndlYmlkbC51dGlsLkludGVnZXJQYXJ0ID0gZnVuY3Rpb24gKG4pIHtcbiAgLy8gMS4gTGV0IHIgYmUgZmxvb3IoYWJzKG4pKS5cbiAgY29uc3QgciA9IE1hdGguZmxvb3IoTWF0aC5hYnMobikpXG5cbiAgLy8gMi4gSWYgbiA8IDAsIHRoZW4gcmV0dXJuIC0xIFx1MDBENyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG53ZWJpZGwudXRpbC5TdHJpbmdpZnkgPSBmdW5jdGlvbiAoVikge1xuICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShWKVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgICByZXR1cm4gYFN5bWJvbCgke1YuZGVzY3JpcHRpb259KWBcbiAgICBjYXNlICdPYmplY3QnOlxuICAgICAgcmV0dXJuIGluc3BlY3QoVilcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgcmV0dXJuIGBcIiR7Vn1cImBcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAke1Z9YFxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtc2VxdWVuY2VcbndlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWLCBwcmVmaXgsIGFyZ3VtZW50LCBJdGVyYWJsZSkgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gKCR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSkgaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSB0eXBlb2YgSXRlcmFibGUgPT09ICdmdW5jdGlvbicgPyBJdGVyYWJsZSgpIDogVj8uW1N5bWJvbC5pdGVyYXRvcl0/LigpXG4gICAgY29uc3Qgc2VxID0gW11cbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICAvLyAzLiBJZiBtZXRob2QgaXMgdW5kZWZpbmVkLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBtZXRob2QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdHlwZW9mIG1ldGhvZC5uZXh0ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH1bJHtpbmRleCsrfV1gKSlcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy10by1yZWNvcmRcbndlYmlkbC5yZWNvcmRDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoa2V5Q29udmVydGVyLCB2YWx1ZUNvbnZlcnRlcikge1xuICByZXR1cm4gKE8sIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IHByZWZpeCxcbiAgICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IChcIiR7d2ViaWRsLnV0aWwuVHlwZShPKX1cIikgaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LlxuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBpZiAoIXR5cGVzLmlzUHJveHkoTykpIHtcbiAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS5cbiAgICAgIGNvbnN0IGtleXMgPSBbLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTyksIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTyldXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5LCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSwgcHJlZml4LCBhcmd1bWVudClcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXksIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCwgb3B0cykgPT4ge1xuICAgIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIGkpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpIHRvIGJlIGFuIGluc3RhbmNlIG9mICR7aS5uYW1lfS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBWXG4gIH1cbn1cblxud2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVycykge1xuICByZXR1cm4gKGRpY3Rpb25hcnksIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShkaWN0aW9uYXJ5KVxuICAgIGNvbnN0IGRpY3QgPSB7fVxuXG4gICAgaWYgKHR5cGUgPT09ICdOdWxsJyB8fCB0eXBlID09PSAnVW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRpY3RcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtkaWN0aW9uYXJ5fSB0byBiZSBvbmUgb2Y6IE51bGwsIFVuZGVmaW5lZCwgT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvcHRpb25zIG9mIGNvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnN0IHsga2V5LCBkZWZhdWx0VmFsdWUsIHJlcXVpcmVkLCBjb252ZXJ0ZXIgfSA9IG9wdGlvbnNcblxuICAgICAgaWYgKHJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093bihkaWN0aW9uYXJ5LCBrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBrZXkgXCIke2tleX1cIi5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWUgPSBkaWN0aW9uYXJ5W2tleV1cbiAgICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBPYmplY3QuaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA/Pz0gZGVmYXVsdFZhbHVlKClcbiAgICAgIH1cblxuICAgICAgLy8gQSBrZXkgY2FuIGJlIG9wdGlvbmFsIGFuZCBoYXZlIG5vIGRlZmF1bHQgdmFsdWUuXG4gICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZG8gbm90IHBlcmZvcm0gYSBjb252ZXJzaW9uLFxuICAgICAgLy8gYW5kIGRvIG5vdCBhc3NpZ24gdGhlIGtleSBhIHZhbHVlLlxuICAgICAgaWYgKHJlcXVpcmVkIHx8IGhhc0RlZmF1bHQgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH0uJHtrZXl9YClcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkVmFsdWVzICYmXG4gICAgICAgICAgIW9wdGlvbnMuYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt2YWx1ZX0gaXMgbm90IGFuIGFjY2VwdGVkIHR5cGUuIEV4cGVjdGVkIG9uZSBvZiAke29wdGlvbnMuYWxsb3dlZFZhbHVlcy5qb2luKCcsICcpfS5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpY3RcbiAgfVxufVxuXG53ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCkgPT4ge1xuICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gVlxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0ZXIoViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLURPTVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgViBpcyBudWxsIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZVxuICAvLyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFtMZWdhY3lOdWxsVG9FbXB0eVN0cmluZ11cbiAgLy8gICAgZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuIHJldHVybiB0aGUgRE9NU3RyaW5nIHZhbHVlXG4gIC8vICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoViA9PT0gbnVsbCAmJiBvcHRzPy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IGlzIGEgc3ltYm9sLCB3aGljaCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgRE9NU3RyaW5nLmBcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBhcmd1bWVudCkge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbi8vIFRPRE86IHJld3JpdGUgdGhpcyBzbyB3ZSBjYW4gY29udHJvbCB0aGUgZXJyb3JzIHRocm93blxud2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nID0gdG9VU1ZTdHJpbmdcblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ib29sZWFuXG53ZWJpZGwuY29udmVydGVycy5ib29sZWFuID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgVG9Cb29sZWFuKFYpLlxuICBjb25zdCB4ID0gQm9vbGVhbihWKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGJvb2xlYW4gdmFsdWUgdGhhdCBpcyB0aGUgb25lIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSB0cnV0aCB2YWx1ZSBhcyB0aGUgRUNNQVNjcmlwdCBCb29sZWFuIHZhbHVlIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYW55XG53ZWJpZGwuY29udmVydGVycy5hbnkgPSBmdW5jdGlvbiAoVikge1xuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwic2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAnc2lnbmVkJywgdW5kZWZpbmVkLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGxvbmcgbG9uZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtc2hvcnRcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMTYsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMTYsICd1bnNpZ25lZCcsIG9wdHMsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgc2hvcnQgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpZGwtQXJyYXlCdWZmZXJcbndlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzPy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICBpZiAoVi5yZXNpemFibGUgfHwgVi5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBUXHUyMDE5cyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHtuYW1lfSAoXCIke3dlYmlkbC51dGlsLlN0cmluZ2lmeShWKX1cIilgLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDUuIFJldHVybiB0aGUgSURMIHZhbHVlIG9mIHR5cGUgVCB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIG5hbWUsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW0RhdGFWaWV3XV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8ICF0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICBtZXNzYWdlOiBgJHtuYW1lfSBpcyBub3QgYSBEYXRhVmlldy5gXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIERhdGFWaWV3IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jQnVmZmVyU291cmNlXG53ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIGlmICh0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyKFYsIHByZWZpeCwgbmFtZSwgeyAuLi5vcHRzLCBhbGxvd1NoYXJlZDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmICh0eXBlcy5pc1R5cGVkQXJyYXkoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheShWLCBWLmNvbnN0cnVjdG9yLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgIHByZWZpeCxcbiAgICBhcmd1bWVudDogYCR7bmFtZX0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICB0eXBlczogWydCdWZmZXJTb3VyY2UnXVxuICB9KVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ25vZGU6emxpYicpXG5jb25zdCB7IHJlZGlyZWN0U3RhdHVzU2V0LCByZWZlcnJlclBvbGljeVNldDogcmVmZXJyZXJQb2xpY3lUb2tlbnMsIGJhZFBvcnRzU2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzLCBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLCByZW1vdmVDaGFycywgcGFyc2VNSU1FVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IHBlcmZvcm1hbmNlIH0gPSByZXF1aXJlKCdub2RlOnBlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCBSZWFkYWJsZVN0cmVhbUZyb20sIGlzVmFsaWRIVFRQVG9rZW4sIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCdub2RlOnV0aWwvdHlwZXMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbiAgY29uc3QgcG9zc2libGVSZWxldmFudEhhc2hlcyA9IFsnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInXVxuICBzdXBwb3J0ZWRIYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCkuZmlsdGVyKChoYXNoKSA9PiBwb3NzaWJsZVJlbGV2YW50SGFzaGVzLmluY2x1ZGVzKGhhc2gpKVxuLyogYzggaWdub3JlIG5leHQgMyAqL1xufSBjYXRjaCB7XG5cbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VVUkwgKHJlc3BvbnNlKSB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZXNcbiAgLy8gQSByZXNwb25zZSBoYXMgYW4gYXNzb2NpYXRlZCBVUkwuIEl0IGlzIGEgcG9pbnRlciB0byB0aGUgbGFzdCBVUkxcbiAgLy8gaW4gcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGFuZCBudWxsIGlmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eS5cbiAgY29uc3QgdXJsTGlzdCA9IHJlc3BvbnNlLnVybExpc3RcbiAgY29uc3QgbGVuZ3RoID0gdXJsTGlzdC5sZW5ndGhcbiAgcmV0dXJuIGxlbmd0aCA9PT0gMCA/IG51bGwgOiB1cmxMaXN0W2xlbmd0aCAtIDFdLnRvU3RyaW5nKClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtbG9jYXRpb24tdXJsXG5mdW5jdGlvbiByZXNwb25zZUxvY2F0aW9uVVJMIChyZXNwb25zZSwgcmVxdWVzdEZyYWdtZW50KSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHJldHVybiBudWxsLlxuICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDIuIExldCBsb2NhdGlvbiBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuXG4gIC8vIGBMb2NhdGlvbmAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgbGV0IGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdsb2NhdGlvbicsIHRydWUpXG5cbiAgLy8gMy4gSWYgbG9jYXRpb24gaXMgYSBoZWFkZXIgdmFsdWUsIHRoZW4gc2V0IGxvY2F0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgcGFyc2luZyBsb2NhdGlvbiB3aXRoIHJlc3BvbnNlXHUyMDE5cyBVUkwuXG4gIGlmIChsb2NhdGlvbiAhPT0gbnVsbCAmJiBpc1ZhbGlkSGVhZGVyVmFsdWUobG9jYXRpb24pKSB7XG4gICAgaWYgKCFpc1ZhbGlkRW5jb2RlZFVSTChsb2NhdGlvbikpIHtcbiAgICAgIC8vIFNvbWUgd2Vic2l0ZXMgcmVzcG9uZCBsb2NhdGlvbiBoZWFkZXIgaW4gVVRGLTggZm9ybSB3aXRob3V0IGVuY29kaW5nIHRoZW0gYXMgQVNDSUlcbiAgICAgIC8vIGFuZCBtYWpvciBicm93c2VycyByZWRpcmVjdCB0aGVtIHRvIGNvcnJlY3RseSBVVEYtOCBlbmNvZGVkIGFkZHJlc3Nlcy5cbiAgICAgIC8vIEhlcmUsIHdlIGhhbmRsZSB0aGF0IGJlaGF2aW9yIGluIHRoZSBzYW1lIHdheS5cbiAgICAgIGxvY2F0aW9uID0gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4KGxvY2F0aW9uKVxuICAgIH1cbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9uXHUyMDE5c1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMTczOCNzZWN0aW9uLTIuMlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbmNvZGVkVVJMICh1cmwpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmwubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gdXJsLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPiAweDdFIHx8IC8vIE5vbi1VUy1BU0NJSSArIERFTFxuICAgICAgY29kZSA8IDB4MjAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzIE5VTCAtIFVTXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBJZiBzdHJpbmcgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGFzc3VtZXMgaXQncyBVVEYtOCBlbmNvZGVkIGFuZCBkZWNvZGVzIGl0LlxuICogU2luY2UgVVRGLTggaXMgYSBzdXBlcnNldCBvZiBBU0NJSSwgdGhpcyB3aWxsIHdvcmsgZm9yIEFTQ0lJIHN0cmluZ3MgYXMgd2VsbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4ICh2YWx1ZSkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsICdiaW5hcnknKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJsXHUyMDE5cyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gaXNWYWxpZEhUVFBUb2tlblxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci12YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gLSBIYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBIVFRQIHRhYiBvciBzcGFjZSBieXRlcy5cbiAgLy8gLSBDb250YWlucyBubyAweDAwIChOVUwpIG9yIEhUVFAgbmV3bGluZSBieXRlcy5cbiAgcmV0dXJuIChcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJ1xcdCcgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJyAnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICdcXHQnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICcgJyB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXG4nKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXHInKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXDAnKVxuICApID09PSBmYWxzZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc2V0LXJlcXVlc3RzLXJlZmVycmVyLXBvbGljeS1vbi1yZWRpcmVjdFxuZnVuY3Rpb24gc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCAocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpIHtcbiAgLy8gIEdpdmVuIGEgcmVxdWVzdCByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlIGFjdHVhbFJlc3BvbnNlLCB0aGlzIGFsZ29yaXRobVxuICAvLyAgdXBkYXRlcyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgYWNjb3JkaW5nIHRvIHRoZSBSZWZlcnJlci1Qb2xpY3lcbiAgLy8gIGhlYWRlciAoaWYgYW55KSBpbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyAxLiBMZXQgcG9saWN5IGJlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIFx1MDBBNyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JywgdHJ1ZSkgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHJcdTIwMTlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHJcdTIwMTlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiByXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlciwgdHJ1ZSlcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXG4gIC8vICAgIHdpdGggcmVxdWVzdC5cbiAgLy8gVE9ETzogaW1wbGVtZW50IFwiYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXCJcbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIC0gXCInY2xpZW50JyBpcyBjaGFuZ2VkIHRvIGFuIG9yaWdpbiBkdXJpbmcgZmV0Y2hpbmcuXCJcbiAgLy8gICBUaGlzIGRvZXNuJ3QgaGFwcGVuIGluIHVuZGljaSAoaW4gbW9zdCBjYXNlcykgYmVjYXVzZSB1bmRpY2ksIGJ5IGRlZmF1bHQsXG4gIC8vICAgaGFzIG5vIGNvbmNlcHQgb2Ygb3JpZ2luLlxuICAvLyAtIHJlcXVlc3Qub3JpZ2luIGNhbiBhbHNvIGJlIHNldCB0byByZXF1ZXN0LmNsaWVudC5vcmlnaW4gKGNsaWVudCBiZWluZ1xuICAvLyAgIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCksIHdoaWNoIGlzIHVuZGVmaW5lZCB3aXRob3V0IHVzaW5nXG4gIC8vICAgc2V0R2xvYmFsT3JpZ2luLlxuICBpZiAoc2VyaWFsaXplZE9yaWdpbiA9PT0gJ2NsaWVudCcgfHwgc2VyaWFsaXplZE9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBvciByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwid2Vic29ja2V0XCIsXG4gIC8vICAgIHRoZW4gYXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbiwgdHJ1ZSlcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZFxuICAgICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0XG4gICAgICAgIC8vIHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXNcbiAgICAgICAgLy8gb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4sIHRydWUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2hyLXRpbWUvI2Rmbi1jb2Fyc2VuLXRpbWVcbmZ1bmN0aW9uIGNvYXJzZW5UaW1lICh0aW1lc3RhbXAsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHRpbWVzdGFtcFxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY2xhbXAtYW5kLWNvYXJzZW4tY29ubmVjdGlvbi10aW1pbmctaW5mb1xuZnVuY3Rpb24gY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8gKGNvbm5lY3Rpb25UaW1pbmdJbmZvLCBkZWZhdWx0U3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICBpZiAoIWNvbm5lY3Rpb25UaW1pbmdJbmZvPy5zdGFydFRpbWUgfHwgY29ubmVjdGlvblRpbWluZ0luZm8uc3RhcnRUaW1lIDwgZGVmYXVsdFN0YXJ0VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGRlZmF1bHRTdGFydFRpbWUsXG4gICAgICBkb21haW5Mb29rdXBFbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgY29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIGNvbm5lY3Rpb25FbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvPy5BTFBOTmVnb3RpYXRlZFByb3RvY29sXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cFN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIGRvbWFpbkxvb2t1cEVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cEVuZFRpbWUsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSxcbiAgICBjb25uZWN0aW9uU3RhcnRUaW1lOiBjb2Fyc2VuVGltZShjb25uZWN0aW9uVGltaW5nSW5mby5jb25uZWN0aW9uU3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgY29ubmVjdGlvbkVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmNvbm5lY3Rpb25FbmRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogY29hcnNlblRpbWUoY29ubmVjdGlvblRpbWluZ0luZm8uc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvLkFMUE5OZWdvdGlhdGVkUHJvdG9jb2xcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vaHItdGltZS8jZGZuLWNvYXJzZW5lZC1zaGFyZWQtY3VycmVudC10aW1lXG5mdW5jdGlvbiBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSAoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpIHtcbiAgcmV0dXJuIGNvYXJzZW5UaW1lKHBlcmZvcm1hbmNlLm5vdygpLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1hbi1vcGFxdWUtdGltaW5nLWluZm9cbmZ1bmN0aW9uIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8gKHRpbWluZ0luZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgcmVkaXJlY3RTdGFydFRpbWU6IDAsXG4gICAgcmVkaXJlY3RFbmRUaW1lOiAwLFxuICAgIHBvc3RSZWRpcmVjdFN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICBmaW5hbFNlcnZpY2VXb3JrZXJTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVzcG9uc2VTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZTogMCxcbiAgICBlbmRUaW1lOiAwLFxuICAgIGVuY29kZWRCb2R5U2l6ZTogMCxcbiAgICBkZWNvZGVkQm9keVNpemU6IDAsXG4gICAgZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbzogbnVsbFxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3BvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIG1ha2VQb2xpY3lDb250YWluZXIgKCkge1xuICAvLyBOb3RlOiB0aGUgZmV0Y2ggc3BlYyBkb2Vzbid0IG1ha2UgdXNlIG9mIGVtYmVkZGVyIHBvbGljeSBvciBDU1AgbGlzdFxuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNjbG9uZS1hLXBvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIGNsb25lUG9saWN5Q29udGFpbmVyIChwb2xpY3lDb250YWluZXIpIHtcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogcG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI2RldGVybWluZS1yZXF1ZXN0cy1yZWZlcnJlclxuZnVuY3Rpb24gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgcG9saWN5IGJlIHJlcXVlc3QncyByZWZlcnJlciBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeSA9IHJlcXVlc3QucmVmZXJyZXJQb2xpY3lcblxuICAvLyBOb3RlOiBwb2xpY3kgY2Fubm90IChzaG91bGRuJ3QpIGJlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICBhc3NlcnQocG9saWN5KVxuXG4gIC8vIDIuIExldCBlbnZpcm9ubWVudCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnQuXG5cbiAgbGV0IHJlZmVycmVyU291cmNlID0gbnVsbFxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlcjpcbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gTm90ZTogbm9kZSBpc24ndCBhIGJyb3dzZXIgYW5kIGRvZXNuJ3QgaW1wbGVtZW50IGRvY3VtZW50L2lmcmFtZXMsXG4gICAgLy8gc28gd2UgYnlwYXNzIHRoaXMgc3RlcCBhbmQgcmVwbGFjZSBpdCB3aXRoIG91ciBvd24uXG5cbiAgICBjb25zdCBnbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgaWYgKCFnbG9iYWxPcmlnaW4gfHwgZ2xvYmFsT3JpZ2luLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgIH1cblxuICAgIC8vIG5vdGU6IHdlIG5lZWQgdG8gY2xvbmUgaXQgYXMgaXQncyBtdXRhdGVkXG4gICAgcmVmZXJyZXJTb3VyY2UgPSBuZXcgVVJMKGdsb2JhbE9yaWdpbilcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgLy8gTGV0IHJlZmVycmVyU291cmNlIGJlIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgIHJlZmVycmVyU291cmNlID0gcmVxdWVzdC5yZWZlcnJlclxuICB9XG5cbiAgLy8gNC4gTGV0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyVVJMIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvclxuICAvLyAgICB1c2UgYXMgYSByZWZlcnJlci5cbiAgbGV0IHJlZmVycmVyVVJMID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSlcblxuICAvLyA1LiBMZXQgcmVmZXJyZXJPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yIHVzZSBhc1xuICAvLyAgICBhIHJlZmVycmVyLCB3aXRoIHRoZSBvcmlnaW4tb25seSBmbGFnIHNldCB0byB0cnVlLlxuICBjb25zdCByZWZlcnJlck9yaWdpbiA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG5cbiAgLy8gNi4gSWYgdGhlIHJlc3VsdCBvZiBzZXJpYWxpemluZyByZWZlcnJlclVSTCBpcyBhIHN0cmluZyB3aG9zZSBsZW5ndGggaXNcbiAgLy8gICAgZ3JlYXRlciB0aGFuIDQwOTYsIHNldCByZWZlcnJlclVSTCB0byByZWZlcnJlck9yaWdpbi5cbiAgaWYgKHJlZmVycmVyVVJMLnRvU3RyaW5nKCkubGVuZ3RoID4gNDA5Nikge1xuICAgIHJlZmVycmVyVVJMID0gcmVmZXJyZXJPcmlnaW5cbiAgfVxuXG4gIGNvbnN0IGFyZVNhbWVPcmlnaW4gPSBzYW1lT3JpZ2luKHJlcXVlc3QsIHJlZmVycmVyVVJMKVxuICBjb25zdCBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPSBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmXG4gICAgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZXF1ZXN0LnVybClcblxuICAvLyA4LiBFeGVjdXRlIHRoZSBzd2l0Y2ggc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiBwb2xpY3k6XG4gIHN3aXRjaCAocG9saWN5KSB7XG4gICAgY2FzZSAnb3JpZ2luJzogcmV0dXJuIHJlZmVycmVyT3JpZ2luICE9IG51bGwgPyByZWZlcnJlck9yaWdpbiA6IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG4gICAgY2FzZSAndW5zYWZlLXVybCc6IHJldHVybiByZWZlcnJlclVSTFxuICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJPcmlnaW4gOiAnbm8tcmVmZXJyZXInXG4gICAgY2FzZSAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJVUkwgOiByZWZlcnJlck9yaWdpblxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gMS4gSWYgdGhlIG9yaWdpbiBvZiByZWZlcnJlclVSTCBhbmQgdGhlIG9yaWdpbiBvZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gICAgICAvLyAgICBVUkwgYXJlIHRoZSBzYW1lLCB0aGVuIHJldHVybiByZWZlcnJlclVSTC5cbiAgICAgIGlmIChzYW1lT3JpZ2luKHJlZmVycmVyVVJMLCBjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kIHJlcXVlc3RcdTIwMTlzXG4gICAgICAvLyAgICBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIHRoZW4gcmV0dXJuIG5vXG4gICAgICAvLyAgICByZWZlcnJlci5cbiAgICAgIGlmIChpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICAgIH1cblxuICAgICAgLy8gMy4gUmV0dXJuIHJlZmVycmVyT3JpZ2luLlxuICAgICAgcmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgfVxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgICAqL1xuICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAqL1xuXG4gICAgZGVmYXVsdDogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA/ICduby1yZWZlcnJlcicgOiByZWZlcnJlck9yaWdpblxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc3RyaXAtdXJsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvcmlnaW5Pbmx5XG4gKi9cbmZ1bmN0aW9uIHN0cmlwVVJMRm9yUmVmZXJyZXIgKHVybCwgb3JpZ2luT25seSkge1xuICAvLyAxLiBBc3NlcnQ6IHVybCBpcyBhIFVSTC5cbiAgYXNzZXJ0KHVybCBpbnN0YW5jZW9mIFVSTClcblxuICB1cmwgPSBuZXcgVVJMKHVybClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhIGxvY2FsIHNjaGVtZSwgdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgdXJsLnByb3RvY29sID09PSAnYWJvdXQ6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdibGFuazonKSB7XG4gICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgfVxuXG4gIC8vIDMuIFNldCB1cmxcdTIwMTlzIHVzZXJuYW1lIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC51c2VybmFtZSA9ICcnXG5cbiAgLy8gNC4gU2V0IHVybFx1MjAxOXMgcGFzc3dvcmQgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnBhc3N3b3JkID0gJydcblxuICAvLyA1LiBTZXQgdXJsXHUyMDE5cyBmcmFnbWVudCB0byBudWxsLlxuICB1cmwuaGFzaCA9ICcnXG5cbiAgLy8gNi4gSWYgdGhlIG9yaWdpbi1vbmx5IGZsYWcgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKG9yaWdpbk9ubHkpIHtcbiAgICAvLyAxLiBTZXQgdXJsXHUyMDE5cyBwYXRoIHRvIFx1MDBBQiB0aGUgZW1wdHkgc3RyaW5nIFx1MDBCQi5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybFx1MjAxOXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZVttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCBcdTAwQUIgdmFsdWUgXHUwMEJCKS5cbiAgY29uc3QgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG5cbiAgLy8gMi4gSWYgcmVzdWx0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlJylcbiAgfVxuXG4gIC8vIDMuIEFzc2VydDogcmVzdWx0IGlzIGEgc3RyaW5nLlxuICBhc3NlcnQodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpXG5cbiAgLy8gNC4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSUyNWl0ZXJhdG9ycHJvdG90eXBlJTI1LW9iamVjdFxuY29uc3QgZXNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yIChuYW1lLCBrSW50ZXJuYWxJdGVyYXRvciwga2V5SW5kZXggPSAwLCB2YWx1ZUluZGV4ID0gMSkge1xuICBjbGFzcyBGYXN0SXRlcmFibGVJdGVyYXRvciB7XG4gICAgLyoqIEB0eXBlIHthbnl9ICovXG4gICAgI3RhcmdldFxuICAgIC8qKiBAdHlwZSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9ICovXG4gICAgI2tpbmRcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICAjaW5kZXhcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4tZGVmYXVsdC1pdGVyYXRvci1vYmplY3RcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IHRhcmdldFxuICAgICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciAodGFyZ2V0LCBraW5kKSB7XG4gICAgICB0aGlzLiN0YXJnZXQgPSB0YXJnZXRcbiAgICAgIHRoaXMuI2tpbmQgPSBraW5kXG4gICAgICB0aGlzLiNpbmRleCA9IDBcbiAgICB9XG5cbiAgICBuZXh0ICgpIHtcbiAgICAgIC8vIDEuIExldCBpbnRlcmZhY2UgYmUgdGhlIGludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZXhpc3RzLlxuICAgICAgLy8gMi4gTGV0IHRoaXNWYWx1ZSBiZSB0aGUgdGhpcyB2YWx1ZS5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuICAgICAgLy8gNC4gSWYgb2JqZWN0IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuIHBlcmZvcm0gYSBzZWN1cml0eVxuICAgICAgLy8gICAgY2hlY2ssIHBhc3Npbmc6XG4gICAgICAvLyA1LiBJZiBvYmplY3QgaXMgbm90IGEgZGVmYXVsdCBpdGVyYXRvciBvYmplY3QgZm9yIGludGVyZmFjZSxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAodHlwZW9mIHRoaXMgIT09ICdvYmplY3QnIHx8IHRoaXMgPT09IG51bGwgfHwgISgjdGFyZ2V0IGluIHRoaXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCduZXh0JyBjYWxsZWQgb24gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGludGVyZmFjZSAke25hbWV9IEl0ZXJhdG9yLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBMZXQgaW5kZXggYmUgb2JqZWN0XHUyMDE5cyBpbmRleC5cbiAgICAgIC8vIDcuIExldCBraW5kIGJlIG9iamVjdFx1MjAxOXMga2luZC5cbiAgICAgIC8vIDguIExldCB2YWx1ZXMgYmUgb2JqZWN0XHUyMDE5cyB0YXJnZXQncyB2YWx1ZSBwYWlycyB0byBpdGVyYXRlIG92ZXIuXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2luZGV4XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLiN0YXJnZXRba0ludGVybmFsSXRlcmF0b3JdXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAxMS4gTGV0IHBhaXIgYmUgdGhlIGVudHJ5IGluIHZhbHVlcyBhdCBpbmRleCBpbmRleC5cbiAgICAgIGNvbnN0IHsgW2tleUluZGV4XToga2V5LCBbdmFsdWVJbmRleF06IHZhbHVlIH0gPSB2YWx1ZXNbaW5kZXhdXG5cbiAgICAgIC8vIDEyLiBTZXQgb2JqZWN0XHUyMDE5cyBpbmRleCB0byBpbmRleCArIDEuXG4gICAgICB0aGlzLiNpbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG5cbiAgICAgIC8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaXRlcmF0b3ItcmVzdWx0XG5cbiAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBraW5kOlxuICAgICAgbGV0IHJlc3VsdFxuICAgICAgc3dpdGNoICh0aGlzLiNraW5kKSB7XG4gICAgICAgIGNhc2UgJ2tleSc6XG4gICAgICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWlyXHUyMDE5cyBrZXkuXG4gICAgICAgICAgLy8gMi4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgICAgIHJlc3VsdCA9IGtleVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAna2V5K3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA1LiBMZXQgYXJyYXkgYmUgISBBcnJheUNyZWF0ZSgyKS5cbiAgICAgICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgICAgICAvLyA3LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjFcIiwgdmFsdWUpLlxuICAgICAgICAgIC8vIDguIHJlc3VsdCBpcyBhcnJheS5cbiAgICAgICAgICByZXN1bHQgPSBba2V5LCB2YWx1ZV1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBSZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIGZhbHNlKS5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4taXRlcmF0b3ItcHJvdG90eXBlLW9iamVjdFxuICAvLyBAdHMtaWdub3JlXG4gIGRlbGV0ZSBGYXN0SXRlcmFibGVJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3JcblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRmFzdEl0ZXJhYmxlSXRlcmF0b3IucHJvdG90eXBlLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZhc3RJdGVyYWJsZUl0ZXJhdG9yLnByb3RvdHlwZSwge1xuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgICB9LFxuICAgIG5leHQ6IHsgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9XG4gIH0pXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICogQHJldHVybnMge0l0ZXJhYmxlSXRlcmF0b3I8YW55Pn1cbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBraW5kKSB7XG4gICAgcmV0dXJuIG5ldyBGYXN0SXRlcmFibGVJdGVyYXRvcih0YXJnZXQsIGtpbmQpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge2FueX0gb2JqZWN0IGNsYXNzXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yTWl4aW4gKG5hbWUsIG9iamVjdCwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4ID0gMCwgdmFsdWVJbmRleCA9IDEpIHtcbiAgY29uc3QgbWFrZUl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IobmFtZSwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4LCB2YWx1ZUluZGV4KVxuXG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAga2V5czoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGtleXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleScpXG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ3ZhbHVlJylcbiAgICAgIH1cbiAgICB9LFxuICAgIGVudHJpZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnRyaWVzICgpIHtcbiAgICAgICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgb2JqZWN0KVxuICAgICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKVxuICAgICAgfVxuICAgIH0sXG4gICAgZm9yRWFjaDoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZvckVhY2ggKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIG9iamVjdClcbiAgICAgICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBgJHtuYW1lfS5mb3JFYWNoYClcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFja2ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJyR7bmFtZX0nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB7IDA6IGtleSwgMTogdmFsdWUgfSBvZiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleSt2YWx1ZScpKSB7XG4gICAgICAgICAgY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsIHZhbHVlLCBrZXksIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC4uLnByb3BlcnRpZXMsXG4gICAgW1N5bWJvbC5pdGVyYXRvcl06IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogcHJvcGVydGllcy5lbnRyaWVzLnZhbHVlXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktZnVsbHktcmVhZFxuICovXG5hc3luYyBmdW5jdGlvbiBmdWxseVJlYWRCb2R5IChib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcikge1xuICAvLyAxLiBJZiB0YXNrRGVzdGluYXRpb24gaXMgbnVsbCwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvXG4gIC8vICAgIHRoZSByZXN1bHQgb2Ygc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG5cbiAgLy8gMi4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXMgYmUgdG8gcXVldWUgYVxuICAvLyAgICBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keSBnaXZlbiBieXRlcywgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IHByb2Nlc3NCb2R5XG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgYmUgdG8gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keUVycm9yLFxuICAvLyAgICB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IHByb2Nlc3NCb2R5RXJyb3JcblxuICAvLyA0LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmb3IgYm9keVx1MjAxOXMgc3RyZWFtLlxuICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwcyB3aXRoIHRoYXRcbiAgLy8gICAgZXhjZXB0aW9uIGFuZCByZXR1cm4uXG4gIGxldCByZWFkZXJcblxuICB0cnkge1xuICAgIHJlYWRlciA9IGJvZHkuc3RyZWFtLmdldFJlYWRlcigpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA1LiBSZWFkIGFsbCBieXRlcyBmcm9tIHJlYWRlciwgZ2l2ZW4gc3VjY2Vzc1N0ZXBzIGFuZCBlcnJvclN0ZXBzLlxuICB0cnkge1xuICAgIHN1Y2Nlc3NTdGVwcyhhd2FpdCByZWFkQWxsQnl0ZXMocmVhZGVyKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZSAoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCAoXG4gICAgc3RyZWFtW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdSZWFkYWJsZVN0cmVhbScgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLnRlZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgIGNvbnRyb2xsZXIuYnlvYlJlcXVlc3Q/LnJlc3BvbmQoMClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVE9ETzogYWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhpcyBlcnJvciBvY2N1cnMuXG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29udHJvbGxlciBpcyBhbHJlYWR5IGNsb3NlZCcpICYmICFlcnIubWVzc2FnZS5pbmNsdWRlcygnUmVhZGFibGVTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQnKSkge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleCA9IC9bXlxceDAwLVxceEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBhc3NlcnQoIWludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleC50ZXN0KGlucHV0KSlcblxuICAvLyAyLiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIHdob3NlIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgY29kZVxuICAvLyAgICBwb2ludCBsZW5ndGggYW5kIHdob3NlIGJ5dGVzIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAvLyAgICB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGNvZGUgcG9pbnRzLCBpbiB0aGUgc2FtZSBvcmRlclxuICByZXR1cm4gaW5wdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtZGVmYXVsdHJlYWRlci1yZWFkLWFsbC1ieXRlc1xuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkLWxvb3BcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyfSByZWFkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEJ5dGVzIChyZWFkZXIpIHtcbiAgY29uc3QgYnl0ZXMgPSBbXVxuICBsZXQgYnl0ZUxlbmd0aCA9IDBcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IGNodW5rIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gMS4gQ2FsbCBzdWNjZXNzU3RlcHMgd2l0aCBieXRlcy5cbiAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ5dGVzLCBieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNodW5rIGlzIG5vdCBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBjYWxsIGZhaWx1cmVTdGVwc1xuICAgIC8vICAgIHdpdGggYSBUeXBlRXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVjZWl2ZWQgbm9uLVVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCB0aGUgYnl0ZXMgcmVwcmVzZW50ZWQgYnkgY2h1bmsgdG8gYnl0ZXMuXG4gICAgYnl0ZXMucHVzaChjaHVuaylcbiAgICBieXRlTGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuXG4gICAgLy8gMy4gUmVhZC1sb29wIGdpdmVuIHJlYWRlciwgYnl0ZXMsIHN1Y2Nlc3NTdGVwcywgYW5kIGZhaWx1cmVTdGVwcy5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2lzLWxvY2FsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzTG9jYWwgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnYWJvdXQ6JyB8fCBwcm90b2NvbCA9PT0gJ2Jsb2I6JyB8fCBwcm90b2NvbCA9PT0gJ2RhdGE6J1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICByZXR1cm4gKFxuICAgIChcbiAgICAgIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmXG4gICAgICB1cmxbNV0gPT09ICc6JyAmJlxuICAgICAgdXJsWzBdID09PSAnaCcgJiZcbiAgICAgIHVybFsxXSA9PT0gJ3QnICYmXG4gICAgICB1cmxbMl0gPT09ICd0JyAmJlxuICAgICAgdXJsWzNdID09PSAncCcgJiZcbiAgICAgIHVybFs0XSA9PT0gJ3MnXG4gICAgKSB8fFxuICAgIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNzaW1wbGUtcmFuZ2UtaGVhZGVyLXZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsb3dXaGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUgKHZhbHVlLCBhbGxvd1doaXRlc3BhY2UpIHtcbiAgLy8gMS4gTGV0IGRhdGEgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2Rpbmcgb2YgdmFsdWUuXG4gIC8vIE5vdGU6IGlzb21vcnBoaWMgZGVjb2RpbmcgdGFrZXMgYSBzZXF1ZW5jZSBvZiBieXRlcyAoaWUuIGEgVWludDhBcnJheSkgYW5kIHR1cm5zIGl0IGludG8gYSBzdHJpbmcsXG4gIC8vIG5vdGhpbmcgbW9yZS4gV2Ugb2J2aW91c2x5IGRvbid0IG5lZWQgdG8gZG8gdGhhdCBpZiB2YWx1ZSBpcyBhIHN0cmluZyBhbHJlYWR5LlxuICBjb25zdCBkYXRhID0gdmFsdWVcblxuICAvLyAyLiBJZiBkYXRhIGRvZXMgbm90IHN0YXJ0IHdpdGggXCJieXRlc1wiLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoIWRhdGEuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDMuIExldCBwb3NpdGlvbiBiZSBhIHBvc2l0aW9uIHZhcmlhYmxlIGZvciBkYXRhLCBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIDV0aCBjb2RlIHBvaW50IG9mIGRhdGEuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogNSB9XG5cbiAgLy8gNC4gSWYgYWxsb3dXaGl0ZXNwYWNlIGlzIHRydWUsIGNvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQIHRhYiBvciBzcGFjZSxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyA1LiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gZGF0YSBpcyBub3QgVSswMDNEICg9KSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKGRhdGEuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgIT09IDB4M0QpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLCBmcm9tXG4gIC8vICAgIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIGlmIChhbGxvd1doaXRlc3BhY2UpIHtcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICcgJyxcbiAgICAgIGRhdGEsXG4gICAgICBwb3NpdGlvblxuICAgIClcbiAgfVxuXG4gIC8vIDguIExldCByYW5nZVN0YXJ0IGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEFTQ0lJIGRpZ2l0cyxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCByYW5nZVN0YXJ0ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOS4gTGV0IHJhbmdlU3RhcnRWYWx1ZSBiZSByYW5nZVN0YXJ0LCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VTdGFydCBpcyBub3QgdGhlXG4gIC8vICAgIGVtcHR5IHN0cmluZzsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IHJhbmdlU3RhcnRWYWx1ZSA9IHJhbmdlU3RhcnQubGVuZ3RoID8gTnVtYmVyKHJhbmdlU3RhcnQpIDogbnVsbFxuXG4gIC8vIDEwLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLFxuICAvLyAgICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyAxMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGRhdGEgaXMgbm90IFUrMDAyRCAoLSksIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhLmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pICE9PSAweDJEKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDEzLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiXG4gIC8vICAgICBvciBzcGFjZSwgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICAvLyBOb3RlIGZyb20gS2hhZnJhOiBpdHMgdGhlIHNhbWUgc3RlcCBhcyBpbiAjOCBhZ2FpbiBsb2xcbiAgaWYgKGFsbG93V2hpdGVzcGFjZSkge1xuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnLFxuICAgICAgZGF0YSxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICB9XG5cbiAgLy8gMTQuIExldCByYW5nZUVuZCBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZVxuICAvLyAgICAgQVNDSUkgZGlnaXRzLCBmcm9tIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIC8vIE5vdGUgZnJvbSBLaGFmcmE6IHlvdSB3b3VsZG4ndCBndWVzcyBpdCwgYnV0IHRoaXMgaXMgYWxzbyB0aGUgc2FtZSBzdGVwIGFzICM4XG4gIGNvbnN0IHJhbmdlRW5kID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gMTUuIExldCByYW5nZUVuZFZhbHVlIGJlIHJhbmdlRW5kLCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VFbmRcbiAgLy8gICAgIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nOyBvdGhlcndpc2UgbnVsbC5cbiAgLy8gTm90ZSBmcm9tIEtoYWZyYTogVEhFIFNBTUUgU1RFUCwgQUdBSU4hISFcbiAgLy8gTm90ZTogd2h5IGludGVycHJldCBhcyBhIGRlY2ltYWwgaWYgd2Ugb25seSBjb2xsZWN0IGFzY2lpIGRpZ2l0cz9cbiAgY29uc3QgcmFuZ2VFbmRWYWx1ZSA9IHJhbmdlRW5kLmxlbmd0aCA/IE51bWJlcihyYW5nZUVuZCkgOiBudWxsXG5cbiAgLy8gMTYuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgZGF0YSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxNy4gSWYgcmFuZ2VFbmRWYWx1ZSBhbmQgcmFuZ2VTdGFydFZhbHVlIGFyZSBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAocmFuZ2VFbmRWYWx1ZSA9PT0gbnVsbCAmJiByYW5nZVN0YXJ0VmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxOC4gSWYgcmFuZ2VTdGFydFZhbHVlIGFuZCByYW5nZUVuZFZhbHVlIGFyZSBudW1iZXJzLCBhbmQgcmFuZ2VTdGFydFZhbHVlIGlzXG4gIC8vICAgICBncmVhdGVyIHRoYW4gcmFuZ2VFbmRWYWx1ZSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gTm90ZTogLi4uIHdoZW4gY2FuIHRoZXkgbm90IGJlIG51bWJlcnM/XG4gIGlmIChyYW5nZVN0YXJ0VmFsdWUgPiByYW5nZUVuZFZhbHVlKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTkuIFJldHVybiAocmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlKS5cbiAgcmV0dXJuIHsgcmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNidWlsZC1hLWNvbnRlbnQtcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZVN0YXJ0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2VFbmRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmdWxsTGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29udGVudFJhbmdlIChyYW5nZVN0YXJ0LCByYW5nZUVuZCwgZnVsbExlbmd0aCkge1xuICAvLyAxLiBMZXQgY29udGVudFJhbmdlIGJlIGBieXRlcyBgLlxuICBsZXQgY29udGVudFJhbmdlID0gJ2J5dGVzICdcblxuICAvLyAyLiBBcHBlbmQgcmFuZ2VTdGFydCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLCB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSBpc29tb3JwaGljRW5jb2RlKGAke3JhbmdlU3RhcnR9YClcblxuICAvLyAzLiBBcHBlbmQgMHgyRCAoLSkgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gJy0nXG5cbiAgLy8gNC4gQXBwZW5kIHJhbmdlRW5kLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gaXNvbW9ycGhpY0VuY29kZShgJHtyYW5nZUVuZH1gKVxuXG4gIC8vIDUuIEFwcGVuZCAweDJGICgvKSB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSAnLydcblxuICAvLyA2LiBBcHBlbmQgZnVsbExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkIHRvIGNvbnRlbnRSYW5nZS5cbiAgY29udGVudFJhbmdlICs9IGlzb21vcnBoaWNFbmNvZGUoYCR7ZnVsbExlbmd0aH1gKVxuXG4gIC8vIDcuIFJldHVybiBjb250ZW50UmFuZ2UuXG4gIHJldHVybiBjb250ZW50UmFuZ2Vcbn1cblxuLy8gQSBTdHJlYW0sIHdoaWNoIHBpcGVzIHRoZSByZXNwb25zZSB0byB6bGliLmNyZWF0ZUluZmxhdGUoKSBvclxuLy8gemxpYi5jcmVhdGVJbmZsYXRlUmF3KCkgZGVwZW5kaW5nIG9uIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBCdWZmZXIuXG4vLyBJZiB0aGUgbG93ZXIgYnl0ZSBvZiB0aGUgZmlyc3QgYnl0ZSBpcyAweDA4LCB0aGVuIHRoZSBzdHJlYW0gaXNcbi8vIGludGVycHJldGVkIGFzIGEgemxpYiBzdHJlYW0sIG90aGVyd2lzZSBpdCdzIGludGVycHJldGVkIGFzIGFcbi8vIHJhdyBkZWZsYXRlIHN0cmVhbS5cbmNsYXNzIEluZmxhdGVTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAjemxpYk9wdGlvbnNcblxuICAvKiogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdICovXG4gIGNvbnN0cnVjdG9yICh6bGliT3B0aW9ucykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLiN6bGliT3B0aW9ucyA9IHpsaWJPcHRpb25zXG4gIH1cblxuICBfdHJhbnNmb3JtIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9pbmZsYXRlU3RyZWFtKSB7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtID0gKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDhcbiAgICAgICAgPyB6bGliLmNyZWF0ZUluZmxhdGUodGhpcy4jemxpYk9wdGlvbnMpXG4gICAgICAgIDogemxpYi5jcmVhdGVJbmZsYXRlUmF3KHRoaXMuI3psaWJPcHRpb25zKVxuXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdkYXRhJywgdGhpcy5wdXNoLmJpbmQodGhpcykpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB0aGlzLnB1c2gobnVsbCkpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHRoaXMuZGVzdHJveShlcnIpKVxuICAgIH1cblxuICAgIHRoaXMuX2luZmxhdGVTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgfVxuXG4gIF9maW5hbCAoY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5faW5mbGF0ZVN0cmVhbSkge1xuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbS5lbmQoKVxuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbSA9IG51bGxcbiAgICB9XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdXG4gKiBAcmV0dXJucyB7SW5mbGF0ZVN0cmVhbX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5mbGF0ZSAoemxpYk9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBJbmZsYXRlU3RyZWFtKHpsaWJPcHRpb25zKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWV4dHJhY3QtbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9oZWFkZXJzJykuSGVhZGVyc0xpc3R9IGhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1pbWVUeXBlIChoZWFkZXJzKSB7XG4gIC8vIDEuIExldCBjaGFyc2V0IGJlIG51bGwuXG4gIGxldCBjaGFyc2V0ID0gbnVsbFxuXG4gIC8vIDIuIExldCBlc3NlbmNlIGJlIG51bGwuXG4gIGxldCBlc3NlbmNlID0gbnVsbFxuXG4gIC8vIDMuIExldCBtaW1lVHlwZSBiZSBudWxsLlxuICBsZXQgbWltZVR5cGUgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHZhbHVlcyBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIGBDb250ZW50LVR5cGVgIGZyb20gaGVhZGVycy5cbiAgY29uc3QgdmFsdWVzID0gZ2V0RGVjb2RlU3BsaXQoJ2NvbnRlbnQtdHlwZScsIGhlYWRlcnMpXG5cbiAgLy8gNS4gSWYgdmFsdWVzIGlzIG51bGwsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgLy8gNi4xLiBMZXQgdGVtcG9yYXJ5TWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHZhbHVlLlxuICAgIGNvbnN0IHRlbXBvcmFyeU1pbWVUeXBlID0gcGFyc2VNSU1FVHlwZSh2YWx1ZSlcblxuICAgIC8vIDYuMi4gSWYgdGVtcG9yYXJ5TWltZVR5cGUgaXMgZmFpbHVyZSBvciBpdHMgZXNzZW5jZSBpcyBcIiovKlwiLCB0aGVuIGNvbnRpbnVlLlxuICAgIGlmICh0ZW1wb3JhcnlNaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnIHx8IHRlbXBvcmFyeU1pbWVUeXBlLmVzc2VuY2UgPT09ICcqLyonKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIDYuMy4gU2V0IG1pbWVUeXBlIHRvIHRlbXBvcmFyeU1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gdGVtcG9yYXJ5TWltZVR5cGVcblxuICAgIC8vIDYuNC4gSWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgbm90IGVzc2VuY2UsIHRoZW46XG4gICAgaWYgKG1pbWVUeXBlLmVzc2VuY2UgIT09IGVzc2VuY2UpIHtcbiAgICAgIC8vIDYuNC4xLiBTZXQgY2hhcnNldCB0byBudWxsLlxuICAgICAgY2hhcnNldCA9IG51bGxcblxuICAgICAgLy8gNi40LjIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBleGlzdHMsIHRoZW4gc2V0IGNoYXJzZXQgdG9cbiAgICAgIC8vICAgICAgICBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICBpZiAobWltZVR5cGUucGFyYW1ldGVycy5oYXMoJ2NoYXJzZXQnKSkge1xuICAgICAgICBjaGFyc2V0ID0gbWltZVR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKVxuICAgICAgfVxuXG4gICAgICAvLyA2LjQuMy4gU2V0IGVzc2VuY2UgdG8gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gICAgICBlc3NlbmNlID0gbWltZVR5cGUuZXNzZW5jZVxuICAgIH0gZWxzZSBpZiAoIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKCdjaGFyc2V0JykgJiYgY2hhcnNldCAhPT0gbnVsbCkge1xuICAgICAgLy8gNi41LiBPdGhlcndpc2UsIGlmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBkb2VzIG5vdCBleGlzdCwgYW5kXG4gICAgICAvLyAgICAgIGNoYXJzZXQgaXMgbm9uLW51bGwsIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0gdG8gY2hhcnNldC5cbiAgICAgIG1pbWVUeXBlLnBhcmFtZXRlcnMuc2V0KCdjaGFyc2V0JywgY2hhcnNldClcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBtaW1lVHlwZSBpcyBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAobWltZVR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLXZhbHVlLWdldC1kZWNvZGUtYW5kLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXR0aW5nRGVjb2RpbmdTcGxpdHRpbmcgKHZhbHVlKSB7XG4gIC8vIDEuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIGlzb21vcnBoaWMgZGVjb2RpbmcgdmFsdWUuXG4gIGNvbnN0IGlucHV0ID0gdmFsdWVcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHZhbHVlcyBiZSBhIGxpc3Qgb2Ygc3RyaW5ncywgaW5pdGlhbGx5IGVtcHR5LlxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIC8vIDQuIExldCB0ZW1wb3JhcnlWYWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdGVtcG9yYXJ5VmFsdWUgPSAnJ1xuXG4gIC8vIDUuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDUuMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMjIgKFwiKVxuICAgIC8vICAgICAgb3IgVSswMDJDICgsKSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbiwgdG8gdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnXCInICYmIGNoYXIgIT09ICcsJyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA1LjIuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyA1LjIuMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pID09PSAweDIyKSB7XG4gICAgICAgIC8vIDUuMi4xLjEuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLCB0byB0ZW1wb3JhcnlWYWx1ZS5cbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gNS4yLjEuMi4gSWYgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBjb250aW51ZS5cbiAgICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4yLjIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyA1LjIuMi4xLiBBc3NlcnQ6IHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpcyBVKzAwMkMgKCwpLlxuICAgICAgICBhc3NlcnQoaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgPT09IDB4MkMpXG5cbiAgICAgICAgLy8gNS4yLjIuMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4zLiBSZW1vdmUgYWxsIEhUVFAgdGFiIG9yIHNwYWNlIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgPSByZW1vdmVDaGFycyh0ZW1wb3JhcnlWYWx1ZSwgdHJ1ZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgLy8gNS40LiBBcHBlbmQgdGVtcG9yYXJ5VmFsdWUgdG8gdmFsdWVzLlxuICAgIHZhbHVlcy5wdXNoKHRlbXBvcmFyeVZhbHVlKVxuXG4gICAgLy8gNS42LiBTZXQgdGVtcG9yYXJ5VmFsdWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICB0ZW1wb3JhcnlWYWx1ZSA9ICcnXG4gIH1cblxuICAvLyA2LiBSZXR1cm4gdmFsdWVzLlxuICByZXR1cm4gdmFsdWVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXQtZGVjb2RlLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBsb3dlcmNhc2UgaGVhZGVyIG5hbWVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2hlYWRlcnMnKS5IZWFkZXJzTGlzdH0gbGlzdFxuICovXG5mdW5jdGlvbiBnZXREZWNvZGVTcGxpdCAobmFtZSwgbGlzdCkge1xuICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuICBjb25zdCB2YWx1ZSA9IGxpc3QuZ2V0KG5hbWUsIHRydWUpXG5cbiAgLy8gMi4gSWYgdmFsdWUgaXMgbnVsbCwgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIHZhbHVlLlxuICByZXR1cm4gZ2V0dGluZ0RlY29kaW5nU3BsaXR0aW5nKHZhbHVlKVxufVxuXG5jb25zdCB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIHV0ZjhEZWNvZGVCeXRlcyAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAxLiBMZXQgYnVmZmVyIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyB0aHJlZSBieXRlcyBmcm9tXG4gIC8vICAgIGlvUXVldWUsIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG5cbiAgLy8gMi4gSWYgYnVmZmVyIGlzIDB4RUYgMHhCQiAweEJGLCB0aGVuIHJlYWQgdGhyZWVcbiAgLy8gICAgYnl0ZXMgZnJvbSBpb1F1ZXVlLiAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgaWYgKGJ1ZmZlclswXSA9PT0gMHhFRiAmJiBidWZmZXJbMV0gPT09IDB4QkIgJiYgYnVmZmVyWzJdID09PSAweEJGKSB7XG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDMpXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBVVEYtOFx1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuICBjb25zdCBvdXRwdXQgPSB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuY2xhc3MgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2Uge1xuICBnZXQgYmFzZVVybCAoKSB7XG4gICAgcmV0dXJuIGdldEdsb2JhbE9yaWdpbigpXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgfVxuXG4gIHBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxufVxuXG5jbGFzcyBFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IHtcbiAgc2V0dGluZ3NPYmplY3QgPSBuZXcgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2UoKVxufVxuXG5jb25zdCBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0ID0gbmV3IEVudmlyb25tZW50U2V0dGluZ3NPYmplY3QoKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNWYWxpZEVuY29kZWRVUkwsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNsYW1wQW5kQ29hcnNlbkNvbm5lY3Rpb25UaW1pbmdJbmZvLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIFRBT0NoZWNrLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICByZXNwb25zZVVSTCxcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgaXNCbG9iTGlrZSxcbiAgaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5LFxuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXRlcmF0b3JNaXhpbixcbiAgY3JlYXRlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICBieXRlc01hdGNoLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSGFzSHR0cHNTY2hlbWUsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICByZWFkQWxsQnl0ZXMsXG4gIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUsXG4gIGJ1aWxkQ29udGVudFJhbmdlLFxuICBwYXJzZU1ldGFkYXRhLFxuICBjcmVhdGVJbmZsYXRlLFxuICBleHRyYWN0TWltZVR5cGUsXG4gIGdldERlY29kZVNwbGl0LFxuICB1dGY4RGVjb2RlQnl0ZXMsXG4gIGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtIZWFkZXJzOiBTeW1ib2woJ2hlYWRlcnMnKSxcbiAga1NpZ25hbDogU3ltYm9sKCdzaWduYWwnKSxcbiAga1N0YXRlOiBTeW1ib2woJ3N0YXRlJyksXG4gIGtEaXNwYXRjaGVyOiBTeW1ib2woJ2Rpc3BhdGNoZXInKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJsb2IsIEZpbGUgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxuLy8gVE9ETyhAS2hhZnJhRGV2KTogcmVtb3ZlXG5jbGFzcyBGaWxlTGlrZSB7XG4gIGNvbnN0cnVjdG9yIChibG9iTGlrZSwgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRPRE86IGFyZ3VtZW50IGlkbCB0eXBlIGNoZWNrXG5cbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgVE9ET1xuICAgIGNvbnN0IHQgPSBvcHRpb25zLnR5cGVcblxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIC8vICAgIFRPRE9cblxuICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgIGNvbnN0IGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA/PyBEYXRlLm5vdygpXG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBibG9iTGlrZSxcbiAgICAgIG5hbWU6IG4sXG4gICAgICB0eXBlOiB0LFxuICAgICAgbGFzdE1vZGlmaWVkOiBkXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnN0cmVhbSguLi5hcmdzKVxuICB9XG5cbiAgYXJyYXlCdWZmZXIgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UuYXJyYXlCdWZmZXIoLi4uYXJncylcbiAgfVxuXG4gIHNsaWNlICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNsaWNlKC4uLmFyZ3MpXG4gIH1cblxuICB0ZXh0ICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnRleHQoLi4uYXJncylcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2l6ZVxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50eXBlXG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuICdGaWxlJ1xuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2IgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKEJsb2IpXG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAob2JqZWN0IGluc3RhbmNlb2YgRmlsZSkgfHxcbiAgICAoXG4gICAgICBvYmplY3QgJiZcbiAgICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZSdcbiAgICApXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc0Jsb2JMaWtlLCBpdGVyYXRvck1peGluIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTmF0aXZlRmlsZVxuXG4vLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2Zvcm1kYXRhXG5jbGFzcyBGb3JtRGF0YSB7XG4gIGNvbnN0cnVjdG9yIChmb3JtKSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnRm9ybURhdGEuYXBwZW5kJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHByZWZpeCwgJ3ZhbHVlJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZW5hbWUsIHByZWZpeCwgJ2ZpbGVuYW1lJylcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoXG4gICAgLy8gbmFtZSwgdmFsdWUsIGFuZCBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBBcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgfVxuXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0Zvcm1EYXRhLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyBUaGUgZGVsZXRlKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzIHdob3NlIG5hbWVcbiAgICAvLyBpcyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSB0aGlzW2tTdGF0ZV0uZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gIH1cblxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXRBbGwnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gdGhlIGVtcHR5IGxpc3QuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGVudHJpZXMgd2hvc2UgbmFtZSBpcyBuYW1lLCBpbiBvcmRlcixcbiAgICAvLyBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudmFsdWUpXG4gIH1cblxuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5oYXMnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gVGhlIGhhcyhuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFuIGVudHJ5XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3Q7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpICE9PSAtMVxuICB9XG5cbiAgc2V0IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5zZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCBwcmVmaXgpXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBUaGUgc2V0KG5hbWUsIHZhbHVlKSBhbmQgc2V0KG5hbWUsIGJsb2JWYWx1ZSwgZmlsZW5hbWUpIG1ldGhvZCBzdGVwc1xuICAgIC8vIGFyZTpcblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCBwcmVmaXgsICduYW1lJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAnbmFtZScpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlbmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aCBuYW1lLCB2YWx1ZSwgYW5kXG4gICAgLy8gZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCB3aG9zZSBuYW1lIGlzIG5hbWUsIHRoZW5cbiAgICAvLyByZXBsYWNlIHRoZSBmaXJzdCBzdWNoIGVudHJ5IHdpdGggZW50cnkgYW5kIHJlbW92ZSB0aGUgb3RoZXJzLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSBbXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZSgwLCBpZHgpLFxuICAgICAgICBlbnRyeSxcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKGlkeCArIDEpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgYXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgICB9XG4gIH1cblxuICBbbm9kZVV0aWwuaW5zcGVjdC5jdXN0b21dIChkZXB0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpc1trU3RhdGVdLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgaWYgKGFbYi5uYW1lXSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhW2IubmFtZV0pKSB7XG4gICAgICAgICAgYVtiLm5hbWVdLnB1c2goYi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhW2IubmFtZV0gPSBbYVtiLm5hbWVdLCBiLnZhbHVlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW2IubmFtZV0gPSBiLnZhbHVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhXG4gICAgfSwgeyBfX3Byb3RvX186IG51bGwgfSlcblxuICAgIG9wdGlvbnMuZGVwdGggPz89IGRlcHRoXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IG91dHB1dCA9IG5vZGVVdGlsLmZvcm1hdFdpdGhPcHRpb25zKG9wdGlvbnMsIHN0YXRlKVxuXG4gICAgLy8gcmVtb3ZlIFtPYmplY3QgbnVsbCBwcm90b3R5cGVdXG4gICAgcmV0dXJuIGBGb3JtRGF0YSAke291dHB1dC5zbGljZShvdXRwdXQuaW5kZXhPZignXScpICsgMil9YFxuICB9XG59XG5cbml0ZXJhdG9yTWl4aW4oJ0Zvcm1EYXRhJywgRm9ybURhdGEsIGtTdGF0ZSwgJ25hbWUnLCAndmFsdWUnKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGb3JtRGF0YS5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0QWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Zvcm1EYXRhJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2NyZWF0ZS1hbi1lbnRyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfEJsb2J9IHZhbHVlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGZpbGVuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBtYWtlRW50cnkgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSkge1xuICAvLyAxLiBTZXQgbmFtZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbmFtZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuXG4gIC8vIDIuIElmIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGVuIHNldCB2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmdcbiAgLy8gICAgdmFsdWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIElmIHZhbHVlIGlzIG5vdCBhIEZpbGUgb2JqZWN0LCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIHZhbHVlIGlzIFwiYmxvYlwiXG4gICAgaWYgKCFpc0ZpbGVMaWtlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSBpcyBmaWxlbmFtZS5cbiAgICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLyoqIEB0eXBlIHtGaWxlUHJvcGVydHlCYWd9ICovXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZFxuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgTmF0aXZlRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhLCBtYWtlRW50cnkgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzVVNWU3RyaW5nLCBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyB1dGY4RGVjb2RlQnl0ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEhUVFBfVE9LRU5fQ09ERVBPSU5UUywgaXNvbW9ycGhpY0RlY29kZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IG1ha2VFbnRyeSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IEZpbGU6IE5vZGVGaWxlIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTm9kZUZpbGVcblxuY29uc3QgZm9ybURhdGFOYW1lQnVmZmVyID0gQnVmZmVyLmZyb20oJ2Zvcm0tZGF0YTsgbmFtZT1cIicpXG5jb25zdCBmaWxlbmFtZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKCc7IGZpbGVuYW1lJylcbmNvbnN0IGRkID0gQnVmZmVyLmZyb20oJy0tJylcbmNvbnN0IGRkY3JsZiA9IEJ1ZmZlci5mcm9tKCctLVxcclxcbicpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJzXG4gKi9cbmZ1bmN0aW9uIGlzQXNjaWlTdHJpbmcgKGNoYXJzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGNoYXJzLmNoYXJDb2RlQXQoaSkgJiB+MHg3RikgIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNtdWx0aXBhcnQtZm9ybS1kYXRhLWJvdW5kYXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRhcnlcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb3VuZGFyeSAoYm91bmRhcnkpIHtcbiAgY29uc3QgbGVuZ3RoID0gYm91bmRhcnkubGVuZ3RoXG5cbiAgLy8gLSBpdHMgbGVuZ3RoIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMjcgYW5kIGxlc3NlciBvciBlcXVhbCB0byA3MCwgYW5kXG4gIGlmIChsZW5ndGggPCAyNyB8fCBsZW5ndGggPiA3MCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gLSBpdCBpcyBjb21wb3NlZCBieSBieXRlcyBpbiB0aGUgcmFuZ2VzIDB4MzAgdG8gMHgzOSwgMHg0MSB0byAweDVBLCBvclxuICAvLyAgIDB4NjEgdG8gMHg3QSwgaW5jbHVzaXZlIChBU0NJSSBhbHBoYW51bWVyaWMpLCBvciB3aGljaCBhcmUgMHgyNyAoJyksXG4gIC8vICAgMHgyRCAoLSkgb3IgMHg1RiAoXykuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjcCA9IGJvdW5kYXJ5LmNoYXJDb2RlQXQoaSlcblxuICAgIGlmICghKFxuICAgICAgKGNwID49IDB4MzAgJiYgY3AgPD0gMHgzOSkgfHxcbiAgICAgIChjcCA+PSAweDQxICYmIGNwIDw9IDB4NWEpIHx8XG4gICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdhKSB8fFxuICAgICAgY3AgPT09IDB4MjcgfHxcbiAgICAgIGNwID09PSAweDJkIHx8XG4gICAgICBjcCA9PT0gMHg1ZlxuICAgICkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2FuZHJldWJvdGVsbGEuZ2l0aHViLmlvL211bHRpcGFydC1mb3JtLWRhdGEvI211bHRpcGFydC1mb3JtLWRhdGEtcGFyc2VyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW5wdXRcbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTxpbXBvcnQoJy4vZGF0YS11cmwnKVsncGFyc2VNSU1FVHlwZSddPn0gbWltZVR5cGVcbiAqL1xuZnVuY3Rpb24gbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgKGlucHV0LCBtaW1lVHlwZSkge1xuICAvLyAxLiBBc3NlcnQ6IG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLlxuICBhc3NlcnQobWltZVR5cGUgIT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZS5lc3NlbmNlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG5cbiAgY29uc3QgYm91bmRhcnlTdHJpbmcgPSBtaW1lVHlwZS5wYXJhbWV0ZXJzLmdldCgnYm91bmRhcnknKVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0gZG9lcyBub3QgZXhpc3QsIHJldHVybiBmYWlsdXJlLlxuICAvLyAgICBPdGhlcndpc2UsIGxldCBib3VuZGFyeSBiZSB0aGUgcmVzdWx0IG9mIFVURi04IGRlY29kaW5nIG1pbWVUeXBlXHUyMDE5c1xuICAvLyAgICBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0uXG4gIGlmIChib3VuZGFyeVN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYm91bmRhcnkgPSBCdWZmZXIuZnJvbShgLS0ke2JvdW5kYXJ5U3RyaW5nfWAsICd1dGY4JylcblxuICAvLyAzLiBMZXQgZW50cnkgbGlzdCBiZSBhbiBlbXB0eSBlbnRyeSBsaXN0LlxuICBjb25zdCBlbnRyeUxpc3QgPSBbXVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIgdG8gYSBieXRlIGluIGlucHV0LCBpbml0aWFsbHkgcG9pbnRpbmcgYXRcbiAgLy8gICAgdGhlIGZpcnN0IGJ5dGUuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gTm90ZTogdW5kaWNpIGFkZGl0aW9uLCBhbGxvd3MgbGVhZGluZyBhbmQgdHJhaWxpbmcgQ1JMRnMuXG4gIHdoaWxlIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcbiAgfVxuXG4gIGxldCB0cmFpbGluZyA9IGlucHV0Lmxlbmd0aFxuXG4gIHdoaWxlIChpbnB1dFt0cmFpbGluZyAtIDFdID09PSAweDBhICYmIGlucHV0W3RyYWlsaW5nIC0gMl0gPT09IDB4MGQpIHtcbiAgICB0cmFpbGluZyAtPSAyXG4gIH1cblxuICBpZiAodHJhaWxpbmcgIT09IGlucHV0Lmxlbmd0aCkge1xuICAgIGlucHV0ID0gaW5wdXQuc3ViYXJyYXkoMCwgdHJhaWxpbmcpXG4gIH1cblxuICAvLyA1LiBXaGlsZSB0cnVlOlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIDUuMS4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aCAweDJEIDB4MkRcbiAgICAvLyAgICAgIChgLS1gKSBmb2xsb3dlZCBieSBib3VuZGFyeSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyICsgdGhlIGxlbmd0aCBvZlxuICAgIC8vICAgICAgYm91bmRhcnkuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgLy8gTm90ZTogYm91bmRhcnkgaXMgcGFkZGVkIHdpdGggMiBkYXNoZXMgYWxyZWFkeSwgbm8gbmVlZCB0byBhZGQgMi5cbiAgICBpZiAoaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIHBvc2l0aW9uLnBvc2l0aW9uICsgYm91bmRhcnkubGVuZ3RoKS5lcXVhbHMoYm91bmRhcnkpKSB7XG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbiArPSBib3VuZGFyeS5sZW5ndGhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDUuMi4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIHRoZSBzZXF1ZW5jZSBvZiBieXRlcyAweDJEIDB4MkQgMHgwRCAweDBBXG4gICAgLy8gICAgICAoYC0tYCBmb2xsb3dlZCBieSBDUiBMRikgZm9sbG93ZWQgYnkgdGhlIGVuZCBvZiBpbnB1dCwgcmV0dXJuIGVudHJ5IGxpc3QuXG4gICAgLy8gTm90ZTogYSBib2R5IGRvZXMgTk9UIG5lZWQgdG8gZW5kIHdpdGggQ1JMRi4gSXQgY2FuIGVuZCB3aXRoIC0tLlxuICAgIGlmIChcbiAgICAgIChwb3NpdGlvbi5wb3NpdGlvbiA9PT0gaW5wdXQubGVuZ3RoIC0gMiAmJiBidWZmZXJTdGFydHNXaXRoKGlucHV0LCBkZCwgcG9zaXRpb24pKSB8fFxuICAgICAgKHBvc2l0aW9uLnBvc2l0aW9uID09PSBpbnB1dC5sZW5ndGggLSA0ICYmIGJ1ZmZlclN0YXJ0c1dpdGgoaW5wdXQsIGRkY3JsZiwgcG9zaXRpb24pKVxuICAgICkge1xuICAgICAgcmV0dXJuIGVudHJ5TGlzdFxuICAgIH1cblxuICAgIC8vIDUuMy4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MERcbiAgICAvLyAgICAgIDB4MEEgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSAhPT0gMHgwZCB8fCBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbiArIDFdICE9PSAweDBhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gNS40LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIG5ld2xpbmUuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcblxuICAgIC8vIDUuNS4gTGV0IG5hbWUsIGZpbGVuYW1lIGFuZCBjb250ZW50VHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgICAvLyAgICAgIG11bHRpcGFydC9mb3JtLWRhdGEgaGVhZGVycyBvbiBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHRcbiAgICAvLyAgICAgIGlzIG5vdCBmYWlsdXJlLiBPdGhlcndpc2UsIHJldHVybiBmYWlsdXJlLlxuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFIZWFkZXJzKGlucHV0LCBwb3NpdGlvbilcblxuICAgIGlmIChyZXN1bHQgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIGxldCB7IG5hbWUsIGZpbGVuYW1lLCBjb250ZW50VHlwZSwgZW5jb2RpbmcgfSA9IHJlc3VsdFxuXG4gICAgLy8gNS42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIGVtcHR5IGxpbmUgdGhhdCBtYXJrc1xuICAgIC8vICAgICAgdGhlIGVuZCBvZiB0aGUgaGVhZGVycy4pXG4gICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuXG4gICAgLy8gNS43LiBMZXQgYm9keSBiZSB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgICBsZXQgYm9keVxuXG4gICAgLy8gNS44LiBCb2R5IGxvb3A6IFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gICAgLy8gVE9ETzogdGhlIHN0ZXBzIGhlcmUgYXJlIGNvbXBsZXRlbHkgd3JvbmdcbiAgICB7XG4gICAgICBjb25zdCBib3VuZGFyeUluZGV4ID0gaW5wdXQuaW5kZXhPZihib3VuZGFyeS5zdWJhcnJheSgyKSwgcG9zaXRpb24ucG9zaXRpb24pXG5cbiAgICAgIGlmIChib3VuZGFyeUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIGJvZHkgPSBpbnB1dC5zdWJhcnJheShwb3NpdGlvbi5wb3NpdGlvbiwgYm91bmRhcnlJbmRleCAtIDQpXG5cbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IGJvZHkubGVuZ3RoXG5cbiAgICAgIC8vIE5vdGU6IHBvc2l0aW9uIG11c3QgYmUgYWR2YW5jZWQgYnkgdGhlIGJvZHkncyBsZW5ndGggYmVmb3JlIGJlaW5nXG4gICAgICAvLyBkZWNvZGVkLCBvdGhlcndpc2UgdGhlIHBhcnNpbmcgd2lsbCBmYWlsLlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0Jykge1xuICAgICAgICBib2R5ID0gQnVmZmVyLmZyb20oYm9keS50b1N0cmluZygpLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjkuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgIC8vICAgICAgMHgwRCAweDBBIChDUiBMRiksIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGFkdmFuY2UgcG9zaXRpb24gYnkgMi5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkIHx8IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cblxuICAgIC8vIDUuMTAuIElmIGZpbGVuYW1lIGlzIG5vdCBudWxsOlxuICAgIGxldCB2YWx1ZVxuXG4gICAgaWYgKGZpbGVuYW1lICE9PSBudWxsKSB7XG4gICAgICAvLyA1LjEwLjEuIElmIGNvbnRlbnRUeXBlIGlzIG51bGwsIHNldCBjb250ZW50VHlwZSB0byBcInRleHQvcGxhaW5cIi5cbiAgICAgIGNvbnRlbnRUeXBlID8/PSAndGV4dC9wbGFpbidcblxuICAgICAgLy8gNS4xMC4yLiBJZiBjb250ZW50VHlwZSBpcyBub3QgYW4gQVNDSUkgc3RyaW5nLCBzZXQgY29udGVudFR5cGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgLy8gTm90ZTogYGJ1ZmZlci5pc0FzY2lpYCBjYW4gYmUgdXNlZCBhdCB6ZXJvLWNvc3QsIGJ1dCBjb252ZXJ0aW5nIGEgc3RyaW5nIHRvIGEgYnVmZmVyIGlzIGEgaGlnaCBvdmVyaGVhZC5cbiAgICAgIC8vIENvbnRlbnQtVHlwZSBpcyBhIHJlbGF0aXZlbHkgc21hbGwgc3RyaW5nLCBzbyBpdCBpcyBmYXN0ZXIgdG8gdXNlIGBTdHJpbmcjY2hhckNvZGVBdGAuXG4gICAgICBpZiAoIWlzQXNjaWlTdHJpbmcoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gJydcbiAgICAgIH1cblxuICAgICAgLy8gNS4xMC4zLiBMZXQgdmFsdWUgYmUgYSBuZXcgRmlsZSBvYmplY3Qgd2l0aCBuYW1lIGZpbGVuYW1lLCB0eXBlIGNvbnRlbnRUeXBlLCBhbmQgYm9keSBib2R5LlxuICAgICAgdmFsdWUgPSBuZXcgRmlsZShbYm9keV0sIGZpbGVuYW1lLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDUuMTEuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNS4xMS4xLiBMZXQgdmFsdWUgYmUgdGhlIFVURi04IGRlY29kaW5nIHdpdGhvdXQgQk9NIG9mIGJvZHkuXG4gICAgICB2YWx1ZSA9IHV0ZjhEZWNvZGVCeXRlcyhCdWZmZXIuZnJvbShib2R5KSlcbiAgICB9XG5cbiAgICAvLyA1LjEyLiBBc3NlcnQ6IG5hbWUgaXMgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIGFuZCB2YWx1ZSBpcyBlaXRoZXIgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIG9yIGEgRmlsZSBvYmplY3QuXG4gICAgYXNzZXJ0KGlzVVNWU3RyaW5nKG5hbWUpKVxuICAgIGFzc2VydCgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBpc1VTVlN0cmluZyh2YWx1ZSkpIHx8IGlzRmlsZUxpa2UodmFsdWUpKVxuXG4gICAgLy8gNS4xMy4gQ3JlYXRlIGFuIGVudHJ5IHdpdGggbmFtZSBhbmQgdmFsdWUsIGFuZCBhcHBlbmQgaXQgdG8gZW50cnkgbGlzdC5cbiAgICBlbnRyeUxpc3QucHVzaChtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1tdWx0aXBhcnQtZm9ybS1kYXRhLWhlYWRlcnNcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VNdWx0aXBhcnRGb3JtRGF0YUhlYWRlcnMgKGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlIGJlIG51bGwuXG4gIGxldCBuYW1lID0gbnVsbFxuICBsZXQgZmlsZW5hbWUgPSBudWxsXG4gIGxldCBjb250ZW50VHlwZSA9IG51bGxcbiAgbGV0IGVuY29kaW5nID0gbnVsbFxuXG4gIC8vIDIuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMi4xLiBJZiBwb3NpdGlvbiBwb2ludHMgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQSAoQ1IgTEYpOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgICAgLy8gMi4xLjEuIElmIG5hbWUgaXMgbnVsbCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIC8vIDIuMS4yLiBSZXR1cm4gbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlLlxuICAgICAgcmV0dXJuIHsgbmFtZSwgZmlsZW5hbWUsIGNvbnRlbnRUeXBlLCBlbmNvZGluZyB9XG4gICAgfVxuXG4gICAgLy8gMi4yLiBMZXQgaGVhZGVyIG5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmVcbiAgICAvLyAgICAgIG5vdCAweDBBIChMRiksIDB4MEQgKENSKSBvciAweDNBICg6KSwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgbGV0IGhlYWRlck5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQgJiYgY2hhciAhPT0gMHgzYSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAyLjMuIFJlbW92ZSBhbnkgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb3IgZW5kIG9mIGhlYWRlciBuYW1lLlxuICAgIGhlYWRlck5hbWUgPSByZW1vdmVDaGFycyhoZWFkZXJOYW1lLCB0cnVlLCB0cnVlLCAoY2hhcikgPT4gY2hhciA9PT0gMHg5IHx8IGNoYXIgPT09IDB4MjApXG5cbiAgICAvLyAyLjQuIElmIGhlYWRlciBuYW1lIGRvZXMgbm90IG1hdGNoIHRoZSBmaWVsZC1uYW1lIHRva2VuIHByb2R1Y3Rpb24sIHJldHVybiBmYWlsdXJlLlxuICAgIGlmICghSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QoaGVhZGVyTmFtZS50b1N0cmluZygpKSkge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDIuNS4gSWYgdGhlIGJ5dGUgYXQgcG9zaXRpb24gaXMgbm90IDB4M0EgKDopLCByZXR1cm4gZmFpbHVyZS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDNhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gMi42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gMi43LiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmUgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZ2l2ZW4gcG9zaXRpb24uXG4gICAgLy8gICAgICAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAweDIwIHx8IGNoYXIgPT09IDB4MDksXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi44LiBCeXRlLWxvd2VyY2FzZSBoZWFkZXIgbmFtZSBhbmQgc3dpdGNoIG9uIHRoZSByZXN1bHQ6XG4gICAgc3dpdGNoIChidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGhlYWRlck5hbWUpKSB7XG4gICAgICBjYXNlICdjb250ZW50LWRpc3Bvc2l0aW9uJzoge1xuICAgICAgICAvLyAxLiBTZXQgbmFtZSBhbmQgZmlsZW5hbWUgdG8gbnVsbC5cbiAgICAgICAgbmFtZSA9IGZpbGVuYW1lID0gbnVsbFxuXG4gICAgICAgIC8vIDIuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgICAgICAvLyAgICBgZm9ybS1kYXRhOyBuYW1lPVwiYCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgIGlmICghYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZm9ybURhdGFOYW1lQnVmZmVyLCBwb3NpdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIHNvIGl0IHBvaW50cyBhdCB0aGUgYnl0ZSBhZnRlciB0aGUgbmV4dCAweDIyIChcIilcbiAgICAgICAgLy8gICAgYnl0ZSAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDE3XG5cbiAgICAgICAgLy8gNC4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBuYW1lIGdpdmVuXG4gICAgICAgIC8vICAgIGlucHV0IGFuZCBwb3NpdGlvbiwgaWYgdGhlIHJlc3VsdCBpcyBub3QgZmFpbHVyZS4gT3RoZXJ3aXNlLCByZXR1cm5cbiAgICAgICAgLy8gICAgZmFpbHVyZS5cbiAgICAgICAgbmFtZSA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFOYW1lKGlucHV0LCBwb3NpdGlvbilcblxuICAgICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIElmIHBvc2l0aW9uIHBvaW50cyB0byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHN0YXJ0aW5nIHdpdGggYDsgZmlsZW5hbWU9XCJgOlxuICAgICAgICBpZiAoYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZmlsZW5hbWVCdWZmZXIsIHBvc2l0aW9uKSkge1xuICAgICAgICAgIC8vIE5vdGU6IHVuZGljaSBhbHNvIGhhbmRsZXMgZmlsZW5hbWUqXG4gICAgICAgICAgbGV0IGNoZWNrID0gcG9zaXRpb24ucG9zaXRpb24gKyBmaWxlbmFtZUJ1ZmZlci5sZW5ndGhcblxuICAgICAgICAgIGlmIChpbnB1dFtjaGVja10gPT09IDB4MmEpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDFcbiAgICAgICAgICAgIGNoZWNrICs9IDFcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5wdXRbY2hlY2tdICE9PSAweDNkIHx8IGlucHV0W2NoZWNrICsgMV0gIT09IDB4MjIpIHsgLy8gPVwiXG4gICAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBzbyBpdCBwb2ludHMgYXQgdGhlIGJ5dGUgYWZ0ZXIgdGhlIG5leHQgMHgyMiAoXCIpIGJ5dGVcbiAgICAgICAgICAvLyAgICAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMTJcblxuICAgICAgICAgIC8vIDIuIFNldCBmaWxlbmFtZSB0byB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBtdWx0aXBhcnQvZm9ybS1kYXRhIG5hbWUgZ2l2ZW5cbiAgICAgICAgICAvLyAgICBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHQgaXMgbm90IGZhaWx1cmUuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZShpbnB1dCwgcG9zaXRpb24pXG5cbiAgICAgICAgICBpZiAoZmlsZW5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10eXBlJzoge1xuICAgICAgICAvLyAxLiBMZXQgaGVhZGVyIHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlXG4gICAgICAgIC8vICAgIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gMi4gUmVtb3ZlIGFueSBIVFRQIHRhYiBvciBzcGFjZSBieXRlcyBmcm9tIHRoZSBlbmQgb2YgaGVhZGVyIHZhbHVlLlxuICAgICAgICBoZWFkZXJWYWx1ZSA9IHJlbW92ZUNoYXJzKGhlYWRlclZhbHVlLCBmYWxzZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgICAgIC8vIDMuIFNldCBjb250ZW50VHlwZSB0byB0aGUgaXNvbW9ycGhpYyBkZWNvZGluZyBvZiBoZWFkZXIgdmFsdWUuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gaXNvbW9ycGhpY0RlY29kZShoZWFkZXJWYWx1ZSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyc6IHtcbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgaGVhZGVyVmFsdWUgPSByZW1vdmVDaGFycyhoZWFkZXJWYWx1ZSwgZmFsc2UsIHRydWUsIChjaGFyKSA9PiBjaGFyID09PSAweDkgfHwgY2hhciA9PT0gMHgyMClcblxuICAgICAgICBlbmNvZGluZyA9IGlzb21vcnBoaWNEZWNvZGUoaGVhZGVyVmFsdWUpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgLy8gKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgICAgIGNvbGxlY3RBU2VxdWVuY2VPZkJ5dGVzKFxuICAgICAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQsXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuOS4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQVxuICAgIC8vICAgICAgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyIChwYXN0IHRoZSBuZXdsaW5lKS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkICYmIGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1hLW11bHRpcGFydC1mb3JtLWRhdGEtbmFtZVxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZSAoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIC8vIDEuIEFzc2VydDogVGhlIGJ5dGUgYXQgKHBvc2l0aW9uIC0gMSkgaXMgMHgyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gLSAxXSA9PT0gMHgyMilcblxuICAvLyAyLiBMZXQgbmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBieXRlcyB0aGF0IGFyZSBub3QgMHgwQSAoTEYpLCAweDBEIChDUikgb3IgMHgyMiAoXCIpLCBnaXZlbiBwb3NpdGlvbi5cbiAgLyoqIEB0eXBlIHtzdHJpbmcgfCBCdWZmZXJ9ICovXG4gIGxldCBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCAmJiBjaGFyICE9PSAweDIyLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyAzLiBJZiB0aGUgYnl0ZSBhdCBwb3NpdGlvbiBpcyBub3QgMHgyMiAoXCIpLCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBhZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gIT09IDB4MjIpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBuYW1lIGNvdWxkIGJlICdmYWlsdXJlJ1xuICB9IGVsc2Uge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDQuIFJlcGxhY2UgYW55IG9jY3VycmVuY2Ugb2YgdGhlIGZvbGxvd2luZyBzdWJzZXF1ZW5jZXMgaW4gbmFtZSB3aXRoIHRoZSBnaXZlbiBieXRlOlxuICAvLyAtIGAlMEFgOiAweDBBIChMRilcbiAgLy8gLSBgJTBEYDogMHgwRCAoQ1IpXG4gIC8vIC0gYCUyMmA6IDB4MjIgKFwiKVxuICBuYW1lID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5hbWUpXG4gICAgLnJlcGxhY2UoLyUwQS9pZywgJ1xcbicpXG4gICAgLnJlcGxhY2UoLyUwRC9pZywgJ1xccicpXG4gICAgLnJlcGxhY2UoLyUyMi9nLCAnXCInKVxuXG4gIC8vIDUuIFJldHVybiB0aGUgVVRGLTggZGVjb2Rpbmcgd2l0aG91dCBCT00gb2YgbmFtZS5cbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBudW1iZXIpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgbGV0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICB3aGlsZSAoc3RhcnQgPCBpbnB1dC5sZW5ndGggJiYgY29uZGl0aW9uKGlucHV0W3N0YXJ0XSkpIHtcbiAgICArK3N0YXJ0XG4gIH1cblxuICByZXR1cm4gaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIChwb3NpdGlvbi5wb3NpdGlvbiA9IHN0YXJ0KSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKGJ1ZiwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gYnVmLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgYnVmLmxlbmd0aCAmJiBwcmVkaWNhdGUoYnVmW2xlYWRdKSkgbGVhZCsrXG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICB3aGlsZSAodHJhaWwgPiAwICYmIHByZWRpY2F0ZShidWZbdHJhaWxdKSkgdHJhaWwtLVxuICB9XG5cbiAgcmV0dXJuIGxlYWQgPT09IDAgJiYgdHJhaWwgPT09IGJ1Zi5sZW5ndGggLSAxID8gYnVmIDogYnVmLnN1YmFycmF5KGxlYWQsIHRyYWlsICsgMSlcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYge0BwYXJhbSBidWZmZXJ9IHN0YXJ0cyB3aXRoIHtAcGFyYW0gc3RhcnR9XG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc3RhcnRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlclN0YXJ0c1dpdGggKGJ1ZmZlciwgc3RhcnQsIHBvc2l0aW9uKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgc3RhcnQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0W2ldICE9PSBidWZmZXJbcG9zaXRpb24ucG9zaXRpb24gKyBpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG11bHRpcGFydEZvcm1EYXRhUGFyc2VyLFxuICB2YWxpZGF0ZUJvdW5kYXJ5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQmxvYkxpa2UsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGV4dHJhY3RNaW1lVHlwZSxcbiAgdXRmOERlY29kZUJ5dGVzXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGlzRXJyb3JlZCwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsL3R5cGVzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsgbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEtcGFyc2VyJylcbmxldCByYW5kb21cblxudHJ5IHtcbiAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnbm9kZTpjcnlwdG8nKVxuICByYW5kb20gPSAobWF4KSA9PiBjcnlwdG8ucmFuZG9tSW50KDAsIG1heClcbn0gY2F0Y2gge1xuICByYW5kb20gPSAobWF4KSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKG1heCkpXG59XG5cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuY29uc3QgaGFzRmluYWxpemF0aW9uUmVnaXN0cnkgPSBnbG9iYWxUaGlzLkZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MTgnKSAhPT0gMFxubGV0IHN0cmVhbVJlZ2lzdHJ5XG5cbmlmIChoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSkge1xuICBzdHJlYW1SZWdpc3RyeSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgod2Vha1JlZikgPT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHdlYWtSZWYuZGVyZWYoKVxuICAgIGlmIChzdHJlYW0gJiYgIXN0cmVhbS5sb2NrZWQgJiYgIWlzRGlzdHVyYmVkKHN0cmVhbSkgJiYgIWlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICBzdHJlYW0uY2FuY2VsKCdSZXNwb25zZSBvYmplY3QgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQnKS5jYXRjaChub29wKVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHN0cmVhbSBiZSBudWxsLlxuICBsZXQgc3RyZWFtID0gbnVsbFxuXG4gIC8vIDIuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbiBzZXQgc3RyZWFtIHRvIG9iamVjdC5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgc3RyZWFtID0gb2JqZWN0XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBvYmplY3QgaXMgYSBCbG9iIG9iamVjdCwgc2V0IHN0cmVhbSB0byB0aGVcbiAgICAvLyAgICByZXN1bHQgb2YgcnVubmluZyBvYmplY3RcdTIwMTlzIGdldCBzdHJlYW0uXG4gICAgc3RyZWFtID0gb2JqZWN0LnN0cmVhbSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgc3RyZWFtIHRvIGEgbmV3IFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgYW5kIHNldFxuICAgIC8vICAgIHVwIHN0cmVhbSB3aXRoIGJ5dGUgcmVhZGluZyBzdXBwb3J0LlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnID8gdGV4dEVuY29kZXIuZW5jb2RlKHNvdXJjZSkgOiBzb3VyY2VcblxuICAgICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYnVmZmVyKVxuICAgICAgICB9XG5cbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6ICdieXRlcydcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gQXNzZXJ0OiBzdHJlYW0gaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QuXG4gIGFzc2VydChpc1JlYWRhYmxlU3RyZWFtTGlrZShzdHJlYW0pKVxuXG4gIC8vIDYuIExldCBhY3Rpb24gYmUgbnVsbC5cbiAgbGV0IGFjdGlvbiA9IG51bGxcblxuICAvLyA3LiBMZXQgc291cmNlIGJlIG51bGwuXG4gIGxldCBzb3VyY2UgPSBudWxsXG5cbiAgLy8gOC4gTGV0IGxlbmd0aCBiZSBudWxsLlxuICBsZXQgbGVuZ3RoID0gbnVsbFxuXG4gIC8vIDkuIExldCB0eXBlIGJlIG51bGwuXG4gIGxldCB0eXBlID0gbnVsbFxuXG4gIC8vIDEwLiBTd2l0Y2ggb24gb2JqZWN0OlxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBvYmplY3QuXG4gICAgLy8gTm90ZTogc2V0dGluZyBzb3VyY2UgdG8gYSBVaW50OEFycmF5IGhlcmUgYnJlYWtzIHNvbWUgbW9ja2luZyBhc3N1bXB0aW9ucy5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCB0eXBlIHRvIGB0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIC8vIFVSTFNlYXJjaFBhcmFtc1xuXG4gICAgLy8gc3BlYyBzYXlzIHRvIHJ1biBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb24gYm9keS5saXN0XG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBOb2RlLmpzIGFzIGFwYXJ0IG9mIGFuIFVSTFNlYXJjaFBhcmFtcyBpbnN0YW5jZSB0b1N0cmluZyBtZXRob2RcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMNDkwXG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMMTEwMFxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBzZXJpYWxpemVyIHdpdGggb2JqZWN0XHUyMDE5cyBsaXN0LlxuICAgIHNvdXJjZSA9IG9iamVjdC50b1N0cmluZygpXG5cbiAgICAvLyBTZXQgdHlwZSB0byBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LnNsaWNlKCkpXG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJWaWV3XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LmJ1ZmZlci5zbGljZShvYmplY3QuYnl0ZU9mZnNldCwgb2JqZWN0LmJ5dGVPZmZzZXQgKyBvYmplY3QuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShvYmplY3QpKSB7XG4gICAgY29uc3QgYm91bmRhcnkgPSBgLS0tLWZvcm1kYXRhLXVuZGljaS0wJHtgJHtyYW5kb20oMWUxMSl9YC5wYWRTdGFydCgxMSwgJzAnKX1gXG4gICAgY29uc3QgcHJlZml4ID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGFgXG5cbiAgICAvKiEgZm9ybWRhdGEtcG9seWZpbGwuIE1JVCBMaWNlbnNlLiBKaW1teSBXXHUwMEU0cnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdFx1MjAxOXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ1JMRiBpcyBhcHBlbmRlZCB0byB0aGUgYm9keSB0byBmdW5jdGlvbiB3aXRoIGxlZ2FjeSBzZXJ2ZXJzIGFuZCBtYXRjaCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9ibG9iLzM0MzRjNmI0NmU2ODI0NTI5NzM5NzJlODMxMzYxM2RmYTU4Y2Q2OTAvbGliL21pbWUuYyNMMTAyOS1MMTAzMFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy82M1xuICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAtLSR7Ym91bmRhcnl9LS1cXHJcXG5gKVxuICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rKVxuICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgaWYgKGhhc1Vua25vd25TaXplVmFsdWUpIHtcbiAgICAgIGxlbmd0aCA9IG51bGxcbiAgICB9XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGJsb2JQYXJ0cykge1xuICAgICAgICBpZiAocGFydC5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHBhcnQuc3RyZWFtKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB5aWVsZCBwYXJ0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdHlwZSB0byBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9YCxcbiAgICAvLyBmb2xsb3dlZCBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBib3VuZGFyeSBzdHJpbmcgZ2VuZXJhdGVkXG4gICAgLy8gYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgZW5jb2RpbmcgYWxnb3JpdGhtLlxuICAgIHR5cGUgPSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gQmxvYlxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICAvLyBTZXQgbGVuZ3RoIHRvIG9iamVjdFx1MjAxOXMgc2l6ZS5cbiAgICBsZW5ndGggPSBvYmplY3Quc2l6ZVxuXG4gICAgLy8gSWYgb2JqZWN0XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSBpcyBub3QgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIHNldFxuICAgIC8vIHR5cGUgdG8gaXRzIHZhbHVlLlxuICAgIGlmIChvYmplY3QudHlwZSkge1xuICAgICAgdHlwZSA9IG9iamVjdC50eXBlXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3RbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYga2VlcGFsaXZlIGlzIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGtlZXBhbGl2ZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2VlcGFsaXZlJylcbiAgICB9XG5cbiAgICAvLyBJZiBvYmplY3QgaXMgZGlzdHVyYmVkIG9yIGxvY2tlZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpIHx8IG9iamVjdC5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdSZXNwb25zZSBib2R5IG9iamVjdCBzaG91bGQgbm90IGJlIGRpc3R1cmJlZCBvciBsb2NrZWQnXG4gICAgICApXG4gICAgfVxuXG4gICAgc3RyZWFtID1cbiAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtID8gb2JqZWN0IDogUmVhZGFibGVTdHJlYW1Gcm9tKG9iamVjdClcbiAgfVxuXG4gIC8vIDExLiBJZiBzb3VyY2UgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCBhY3Rpb24gdG8gYVxuICAvLyBzdGVwIHRoYXQgcmV0dXJucyBzb3VyY2UgYW5kIGxlbmd0aCB0byBzb3VyY2VcdTIwMTlzIGxlbmd0aC5cbiAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnIHx8IHV0aWwuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHNvdXJjZSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBhY3Rpb24gaXMgbm9uLW51bGwsIHRoZW4gcnVuIHRoZXNlIHN0ZXBzIGluIGluIHBhcmFsbGVsOlxuICBpZiAoYWN0aW9uICE9IG51bGwpIHtcbiAgICAvLyBSdW4gYWN0aW9uLlxuICAgIGxldCBpdGVyYXRvclxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gYWN0aW9uKG9iamVjdClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIFdoZW4gcnVubmluZyBhY3Rpb24gaXMgZG9uZSwgY2xvc2Ugc3RyZWFtLlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgICAgY29udHJvbGxlci5ieW9iUmVxdWVzdD8ucmVzcG9uZCgwKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgb25lIG9yIG1vcmUgYnl0ZXMgYXJlIGF2YWlsYWJsZSBhbmQgc3RyZWFtIGlzIG5vdCBlcnJvcmVkLFxuICAgICAgICAgIC8vIGVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZVxuICAgICAgICAgIC8vIGJ5dGVzIGludG8gc3RyZWFtLlxuICAgICAgICAgIGlmICghaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHZhbHVlKVxuICAgICAgICAgICAgaWYgKGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShidWZmZXIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogJ2J5dGVzJ1xuICAgIH0pXG4gIH1cblxuICAvLyAxMy4gTGV0IGJvZHkgYmUgYSBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0sIHNvdXJjZSBpcyBzb3VyY2UsXG4gIC8vIGFuZCBsZW5ndGggaXMgbGVuZ3RoLlxuICBjb25zdCBib2R5ID0geyBzdHJlYW0sIHNvdXJjZSwgbGVuZ3RoIH1cblxuICAvLyAxNC4gUmV0dXJuIChib2R5LCB0eXBlKS5cbiAgcmV0dXJuIFtib2R5LCB0eXBlXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXQtc2FmZWx5LWV4dHJhY3RcbmZ1bmN0aW9uIHNhZmVseUV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIC8vIFRvIHNhZmVseSBleHRyYWN0IGEgYm9keSBhbmQgYSBgQ29udGVudC1UeXBlYCB2YWx1ZSBmcm9tXG4gIC8vIGEgYnl0ZSBzZXF1ZW5jZSBvciBCb2R5SW5pdCBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuOlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBBc3NlcnQ6IG9iamVjdCBpcyBuZWl0aGVyIGRpc3R1cmJlZCBub3IgbG9ja2VkLlxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCF1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCksICdUaGUgYm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLicpXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIW9iamVjdC5sb2NrZWQsICdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGV4dHJhY3Rpbmcgb2JqZWN0LlxuICByZXR1cm4gZXh0cmFjdEJvZHkob2JqZWN0LCBrZWVwYWxpdmUpXG59XG5cbmZ1bmN0aW9uIGNsb25lQm9keSAoaW5zdGFuY2UsIGJvZHkpIHtcbiAgLy8gVG8gY2xvbmUgYSBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNsb25lXG5cbiAgLy8gMS4gTGV0IFx1MDBBQiBvdXQxLCBvdXQyIFx1MDBCQiBiZSB0aGUgcmVzdWx0IG9mIHRlZWluZyBib2R5XHUyMDE5cyBzdHJlYW0uXG4gIGNvbnN0IFtvdXQxLCBvdXQyXSA9IGJvZHkuc3RyZWFtLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHlcdTIwMTlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogb3V0MixcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxufVxuXG5mdW5jdGlvbiBib2R5TWl4aW5NZXRob2RzIChpbnN0YW5jZSkge1xuICBjb25zdCBtZXRob2RzID0ge1xuICAgIGJsb2IgKCkge1xuICAgICAgLy8gVGhlIGJsb2IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBCbG9iIHdob3NlXG4gICAgICAvLyBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHdob3NlIHR5cGUgYXR0cmlidXRlIGlzIHRoaXNcdTIwMTlzXG4gICAgICAvLyBNSU1FIHR5cGUuXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG1pbWVUeXBlID0gJydcbiAgICAgICAgfSBlbHNlIGlmIChtaW1lVHlwZSkge1xuICAgICAgICAgIG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKG1pbWVUeXBlKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgQmxvYiB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHR5cGUgYXR0cmlidXRlXG4gICAgICAgIC8vIGlzIG1pbWVUeXBlLlxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiBtaW1lVHlwZSB9KVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFycmF5QnVmZmVyICgpIHtcbiAgICAgIC8vIFRoZSBhcnJheUJ1ZmZlcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHRcbiAgICAgIC8vIG9mIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIG5ldyBBcnJheUJ1ZmZlclxuICAgICAgLy8gd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBjb25zdW1lQm9keSh0aGlzLCB1dGY4RGVjb2RlQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBqc29uICgpIHtcbiAgICAgIC8vIFRoZSBqc29uKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBwYXJzZSBKU09OIGZyb20gYnl0ZXMuXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgcGFyc2VKU09ORnJvbUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgZm9ybURhdGEgKCkge1xuICAgICAgLy8gVGhlIGZvcm1EYXRhKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXAgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsICh2YWx1ZSkgPT4ge1xuICAgICAgICAvLyAxLiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBnZXQgdGhlIE1JTUUgdHlwZSB3aXRoIHRoaXMuXG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gYm9keU1pbWVUeXBlKHRoaXMpXG5cbiAgICAgICAgLy8gMi4gSWYgbWltZVR5cGUgaXMgbm9uLW51bGwsIHRoZW4gc3dpdGNoIG9uIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGFuZCBydW5cbiAgICAgICAgLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgc3RlcHM6XG4gICAgICAgIGlmIChtaW1lVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN3aXRjaCAobWltZVR5cGUuZXNzZW5jZSkge1xuICAgICAgICAgICAgY2FzZSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc6IHtcbiAgICAgICAgICAgICAgLy8gMS4gLi4uIFtsb25nIHN0ZXBdXG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IG11bHRpcGFydEZvcm1EYXRhUGFyc2VyKHZhbHVlLCBtaW1lVHlwZSlcblxuICAgICAgICAgICAgICAvLyAyLiBJZiB0aGF0IGZhaWxzIGZvciBzb21lIHJlYXNvbiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICAgICAgaWYgKHBhcnNlZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIGJvZHkgYXMgRm9ybURhdGEuJylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIDMuIFJldHVybiBhIG5ldyBGb3JtRGF0YSBvYmplY3QsIGFwcGVuZGluZyBlYWNoIGVudHJ5LFxuICAgICAgICAgICAgICAvLyAgICByZXN1bHRpbmcgZnJvbSB0aGUgcGFyc2luZyBvcGVyYXRpb24sIHRvIGl0cyBlbnRyeSBsaXN0LlxuICAgICAgICAgICAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgICAgICAgIGZkW2tTdGF0ZV0gPSBwYXJzZWRcblxuICAgICAgICAgICAgICByZXR1cm4gZmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IHtcbiAgICAgICAgICAgICAgLy8gMS4gTGV0IGVudHJpZXMgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGJ5dGVzLlxuICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh2YWx1ZS50b1N0cmluZygpKVxuXG4gICAgICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cblxuICAgICAgICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJ5IGxpc3QgaXMgZW50cmllcy5cbiAgICAgICAgICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgZmQuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSB3YXMgbm90IG9uZSBvZiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBvciBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLidcbiAgICAgICAgKVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGJ5dGVzICgpIHtcbiAgICAgIC8vIFRoZSBieXRlcygpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBjb25zdW1lIGJvZHlcbiAgICAgIC8vIHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIHRoZVxuICAgICAgLy8gcmVzdWx0IG9mIGNyZWF0aW5nIGEgVWludDhBcnJheSBmcm9tIGJ5dGVzIGluIHRoaXNcdTIwMTlzIHJlbGV2YW50IHJlYWxtLlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0aG9kc1xufVxuXG5mdW5jdGlvbiBtaXhpbkJvZHkgKHByb3RvdHlwZSkge1xuICBPYmplY3QuYXNzaWduKHByb3RvdHlwZS5wcm90b3R5cGUsIGJvZHlNaXhpbk1ldGhvZHMocHJvdG90eXBlKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IG9iamVjdFxuICogQHBhcmFtIHsodmFsdWU6IHVua25vd24pID0+IHVua25vd259IGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBpbnN0YW5jZVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBpcyB1bnVzYWJsZTogQm9keSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQnKVxuICB9XG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN0XHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMoQnVmZmVyLmFsbG9jVW5zYWZlKDApKVxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCBvYmplY3RcdTIwMTlzIGJvZHkgZ2l2ZW4gc3VjY2Vzc1N0ZXBzLFxuICAvLyAgICBlcnJvclN0ZXBzLCBhbmQgb2JqZWN0XHUyMDE5cyByZWxldmFudCBnbG9iYWwgb2JqZWN0LlxuICBhd2FpdCBmdWxseVJlYWRCb2R5KG9iamVjdFtrU3RhdGVdLmJvZHksIHN1Y2Nlc3NTdGVwcywgZXJyb3JTdGVwcylcblxuICAvLyA3LiBSZXR1cm4gcHJvbWlzZS5cbiAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gYm9keVVudXNhYmxlIChvYmplY3QpIHtcbiAgY29uc3QgYm9keSA9IG9iamVjdFtrU3RhdGVdLmJvZHlcblxuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keVx1MjAxOXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1qc29uLWJ5dGVzLXRvLWEtamF2YXNjcmlwdC12YWx1ZVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICovXG5mdW5jdGlvbiBwYXJzZUpTT05Gcm9tQnl0ZXMgKGJ5dGVzKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHV0ZjhEZWNvZGVCeXRlcyhieXRlcykpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LW1pbWUtdHlwZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vcmVzcG9uc2UnKS5SZXNwb25zZXxpbXBvcnQoJy4vcmVxdWVzdCcpLlJlcXVlc3R9IHJlcXVlc3RPclJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAocmVxdWVzdE9yUmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgbnVsbC5cbiAgLy8gMi4gSWYgcmVxdWVzdE9yUmVzcG9uc2UgaXMgYSBSZXF1ZXN0IG9iamVjdCwgdGhlbiBzZXQgaGVhZGVycyB0byByZXF1ZXN0T3JSZXNwb25zZVx1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDMuIE90aGVyd2lzZSwgc2V0IGhlYWRlcnMgdG8gcmVxdWVzdE9yUmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vaGVhZGVycycpLkhlYWRlcnNMaXN0fSAqL1xuICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdE9yUmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdFxuXG4gIC8vIDQuIExldCBtaW1lVHlwZSBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYSBNSU1FIHR5cGUgZnJvbSBoZWFkZXJzLlxuICBjb25zdCBtaW1lVHlwZSA9IGV4dHJhY3RNaW1lVHlwZShoZWFkZXJzKVxuXG4gIC8vIDUuIElmIG1pbWVUeXBlIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBleHRyYWN0Qm9keSxcbiAgc2FmZWx5RXh0cmFjdEJvZHksXG4gIGNsb25lQm9keSxcbiAgbWl4aW5Cb2R5LFxuICBzdHJlYW1SZWdpc3RyeSxcbiAgaGFzRmluYWxpemF0aW9uUmVnaXN0cnksXG4gIGJvZHlVbnVzYWJsZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiBnbG9iYWwgV2ViQXNzZW1ibHkgKi9cblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbC5qcycpXG5jb25zdCB7IGNoYW5uZWxzIH0gPSByZXF1aXJlKCcuLi9jb3JlL2RpYWdub3N0aWNzLmpzJylcbmNvbnN0IHRpbWVycyA9IHJlcXVpcmUoJy4uL3V0aWwvdGltZXJzLmpzJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzLmpzJylcbmNvbnN0IHtcbiAga1VybCxcbiAga1Jlc2V0LFxuICBrQ2xpZW50LFxuICBrUGFyc2VyLFxuICBrQmxvY2tpbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtOb1JlZixcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0LFxuICBrSG9zdEhlYWRlcixcbiAga1BlbmRpbmdJZHgsXG4gIGtSdW5uaW5nSWR4LFxuICBrRXJyb3IsXG4gIGtQaXBlbGluaW5nLFxuICBrU29ja2V0LFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlLFxuICBrTWF4SGVhZGVyc1NpemUsXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0LFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAga0hlYWRlcnNUaW1lb3V0LFxuICBrQm9keVRpbWVvdXQsXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoLFxuICBrTWF4UmVxdWVzdHMsXG4gIGtDb3VudGVyLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrT25FcnJvcixcbiAga1Jlc3VtZSxcbiAga0hUVFBDb250ZXh0XG59ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzLmpzJylcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi4vbGxodHRwL2NvbnN0YW50cy5qcycpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5jb25zdCBhZGRMaXN0ZW5lciA9IHV0aWwuYWRkTGlzdGVuZXJcbmNvbnN0IHJlbW92ZUFsbExpc3RlbmVycyA9IHV0aWwucmVtb3ZlQWxsTGlzdGVuZXJzXG5jb25zdCBrSWRsZVNvY2tldFZhbGlkYXRpb24gPSBTeW1ib2woJ2tJZGxlU29ja2V0VmFsaWRhdGlvbicpXG5jb25zdCBrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0ID0gU3ltYm9sKCdrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0JylcbmNvbnN0IGtTb2NrZXRVc2VkID0gU3ltYm9sKCdrU29ja2V0VXNlZCcpXG5cbmxldCBleHRyYWN0Qm9keVxuXG5hc3luYyBmdW5jdGlvbiBsYXp5bGxodHRwICgpIHtcbiAgY29uc3QgbGxodHRwV2FzbURhdGEgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA/IHJlcXVpcmUoJy4uL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUocmVxdWlyZSgnLi4vbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMnKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSB0aGUgc2ltZCBvcHRpb24gbm90XG4gICAgLy8gYmVpbmcgZW5hYmxlZCwgYnV0IHRoZSBvY2N1cnJpbmcgb2YgdGhpcyBvdGhlciBlcnJvclxuICAgIC8vICogaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL2lzc3Vlcy8xMTQ5NVxuICAgIC8vIGdvdCBtZSB0byByZW1vdmUgdGhhdCBjaGVjayB0byBhdm9pZCBicmVha2luZyBOb2RlIDEyLlxuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUobGxodHRwV2FzbURhdGEgfHwgcmVxdWlyZSgnLi4vbGxodHRwL2xsaHR0cC13YXNtLmpzJykpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kLCB7XG4gICAgZW52OiB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cblxuICAgICAgd2FzbV9vbl91cmw6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9zdGF0dXM6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25TdGF0dXMobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2JlZ2luOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUJlZ2luKCkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX2ZpZWxkOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyRmllbGQobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfdmFsdWU6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJWYWx1ZShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcnNfY29tcGxldGU6IChwLCBzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlcnNDb21wbGV0ZShzdGF0dXNDb2RlLCBCb29sZWFuKHVwZ3JhZGUpLCBCb29sZWFuKHNob3VsZEtlZXBBbGl2ZSkpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2JvZHk6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25Cb2R5KG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZTogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpIHx8IDBcbiAgICAgIH1cblxuICAgICAgLyogZXNsaW50LWVuYWJsZSBjYW1lbGNhc2UgKi9cbiAgICB9XG4gIH0pXG59XG5cbmxldCBsbGh0dHBJbnN0YW5jZSA9IG51bGxcbmxldCBsbGh0dHBQcm9taXNlID0gbGF6eWxsaHR0cCgpXG5sbGh0dHBQcm9taXNlLmNhdGNoKClcblxubGV0IGN1cnJlbnRQYXJzZXIgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyU2l6ZSA9IDBcbmxldCBjdXJyZW50QnVmZmVyUHRyID0gbnVsbFxuXG5jb25zdCBVU0VfTkFUSVZFX1RJTUVSID0gMFxuY29uc3QgVVNFX0ZBU1RfVElNRVIgPSAxXG5cbi8vIFVzZSBmYXN0IHRpbWVycyBmb3IgaGVhZGVycyBhbmQgYm9keSB0byB0YWtlIGV2ZW50dWFsIGV2ZW50IGxvb3Bcbi8vIGxhdGVuY3kgaW50byBhY2NvdW50LlxuY29uc3QgVElNRU9VVF9IRUFERVJTID0gMiB8IFVTRV9GQVNUX1RJTUVSXG5jb25zdCBUSU1FT1VUX0JPRFkgPSA0IHwgVVNFX0ZBU1RfVElNRVJcblxuLy8gVXNlIG5hdGl2ZSB0aW1lcnMgdG8gaWdub3JlIGV2ZW50IGxvb3AgbGF0ZW5jeSBmb3Iga2VlcC1hbGl2ZVxuLy8gaGFuZGxpbmcuXG5jb25zdCBUSU1FT1VUX0tFRVBfQUxJVkUgPSA4IHwgVVNFX05BVElWRV9USU1FUlxuXG5jbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoY2xpZW50LCBzb2NrZXQsIHsgZXhwb3J0cyB9KSB7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShjbGllbnRba01heEhlYWRlcnNTaXplXSkgJiYgY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0gPiAwKVxuXG4gICAgdGhpcy5sbGh0dHAgPSBleHBvcnRzXG4gICAgdGhpcy5wdHIgPSB0aGlzLmxsaHR0cC5sbGh0dHBfYWxsb2MoY29uc3RhbnRzLlRZUEUuUkVTUE9OU0UpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMudXBncmFkZSA9IGZhbHNlXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuICAgIHRoaXMuaGVhZGVyc01heFNpemUgPSBjbGllbnRba01heEhlYWRlcnNTaXplXVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gZmFsc2VcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXN1bWUgPSB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG4gICAgdGhpcy5tYXhSZXNwb25zZVNpemUgPSBjbGllbnRba01heFJlc3BvbnNlU2l6ZV1cbiAgfVxuXG4gIHNldFRpbWVvdXQgKGRlbGF5LCB0eXBlKSB7XG4gICAgLy8gSWYgdGhlIGV4aXN0aW5nIHRpbWVyIGFuZCB0aGUgbmV3IHRpbWVyIGFyZSBvZiBkaWZmZXJlbnQgdGltZXIgdHlwZVxuICAgIC8vIChmYXN0IG9yIG5hdGl2ZSkgb3IgaGF2ZSBkaWZmZXJlbnQgZGVsYXksIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4aXN0aW5nXG4gICAgLy8gdGltZXIgYW5kIHNldCBhIG5ldyBvbmUuXG4gICAgaWYgKFxuICAgICAgZGVsYXkgIT09IHRoaXMudGltZW91dFZhbHVlIHx8XG4gICAgICAodHlwZSAmIFVTRV9GQVNUX1RJTUVSKSBeICh0aGlzLnRpbWVvdXRUeXBlICYgVVNFX0ZBU1RfVElNRVIpXG4gICAgKSB7XG4gICAgICAvLyBJZiBhIHRpbWVvdXQgaXMgYWxyZWFkeSBzZXQsIGNsZWFyIGl0IHdpdGggY2xlYXJUaW1lb3V0IG9mIHRoZSBmYXN0XG4gICAgICAvLyB0aW1lciBpbXBsZW1lbnRhdGlvbiwgYXMgaXQgY2FuIGNsZWFyIGZhc3QgYW5kIG5hdGl2ZSB0aW1lcnMuXG4gICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmIChkZWxheSkge1xuICAgICAgICBpZiAodHlwZSAmIFVTRV9GQVNUX1RJTUVSKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldEZhc3RUaW1lb3V0KG9uUGFyc2VyVGltZW91dCwgZGVsYXksIG5ldyBXZWFrUmVmKHRoaXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCBkZWxheSwgbmV3IFdlYWtSZWYodGhpcykpXG4gICAgICAgICAgdGhpcy50aW1lb3V0LnVucmVmKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IGRlbGF5XG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX3Jlc3VtZSh0aGlzLnB0cilcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnNvY2tldC5yZWFkKCkgfHwgRU1QVFlfQlVGKSAvLyBGbHVzaCBwYXJzZXIuXG4gICAgdGhpcy5yZWFkTW9yZSgpXG4gIH1cblxuICByZWFkTW9yZSAoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiB0aGlzLnB0cikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLnNvY2tldC5yZWFkKClcbiAgICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgdGhpcy5leGVjdXRlKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGUgKGRhdGEpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG5cbiAgICBjb25zdCB7IHNvY2tldCwgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiBjdXJyZW50QnVmZmVyU2l6ZSkge1xuICAgICAgaWYgKGN1cnJlbnRCdWZmZXJQdHIpIHtcbiAgICAgICAgbGxodHRwLmZyZWUoY3VycmVudEJ1ZmZlclB0cilcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCdWZmZXJTaXplID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gNDA5NikgKiA0MDk2XG4gICAgICBjdXJyZW50QnVmZmVyUHRyID0gbGxodHRwLm1hbGxvYyhjdXJyZW50QnVmZmVyU2l6ZSlcbiAgICB9XG5cbiAgICBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgY3VycmVudEJ1ZmZlclB0ciwgY3VycmVudEJ1ZmZlclNpemUpLnNldChkYXRhKVxuXG4gICAgLy8gQ2FsbCBgZXhlY3V0ZWAgb24gdGhlIHdhc20gcGFyc2VyLlxuICAgIC8vIFdlIHBhc3MgdGhlIGBsbGh0dHBfcGFyc2VyYCBwb2ludGVyIGFkZHJlc3MsIHRoZSBwb2ludGVyIGFkZHJlc3Mgb2YgYnVmZmVyIHZpZXcgZGF0YSxcbiAgICAvLyBhbmQgZmluYWxseSB0aGUgbGVuZ3RoIG9mIGJ5dGVzIHRvIHBhcnNlLlxuICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgY29kZSBvciBgY29uc3RhbnRzLkVSUk9SLk9LYC5cbiAgICB0cnkge1xuICAgICAgbGV0IHJldFxuXG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gZGF0YVxuICAgICAgICBjdXJyZW50UGFyc2VyID0gdGhpc1xuICAgICAgICByZXQgPSBsbGh0dHAubGxodHRwX2V4ZWN1dGUodGhpcy5wdHIsIGN1cnJlbnRCdWZmZXJQdHIsIGRhdGEubGVuZ3RoKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYXRjaCAqL1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBvZmZzZXQgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9wb3ModGhpcy5wdHIpIC0gY3VycmVudEJ1ZmZlclB0clxuXG4gICAgICBpZiAocmV0ICE9PSBjb25zdGFudHMuRVJST1IuT0spIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0KVxuXG4gICAgICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRURfVVBHUkFERSkge1xuICAgICAgICAgIHRoaXMub25VcGdyYWRlKGJvZHkpXG4gICAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlXG4gICAgICAgICAgc29ja2V0LnVuc2hpZnQoYm9keSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKHJldCwgYm9keSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGZpbmlzaCAoKSB7XG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT09IG51bGwpXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcblxuICAgIGNvbnN0IHsgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBsZXQgcmV0XG5cbiAgICB0cnkge1xuICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgIHJldCA9IGxsaHR0cC5sbGh0dHBfZmluaXNoKHRoaXMucHRyKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5PSykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEIHx8IHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICB0aGlzLnBhdXNlZCA9IHRydWVcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRXJyb3IocmV0LCBFTVBUWV9CVUYpXG4gIH1cblxuICBjcmVhdGVFcnJvciAocmV0LCBkYXRhKSB7XG4gICAgY29uc3QgeyBsbGh0dHAsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCB9ID0gdGhpc1xuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgYnl0ZXNSZWFkICE9PSBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkpIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgcHRyID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcmVhc29uKHRoaXMucHRyKVxuICAgIGxldCBtZXNzYWdlID0gJydcbiAgICBpZiAocHRyKSB7XG4gICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgJ1Jlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHRoZSBIVFRQLzEuMSBwcm90b2NvbCAoJyArXG4gICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICcpJ1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGhpcy50aW1lb3V0ICYmIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICB9XG5cbiAgb25TdGF0dXMgKGJ1Zikge1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IGJ1Zi50b1N0cmluZygpXG4gIH1cblxuICBvbk1lc3NhZ2VCZWdpbiAoKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgcmVzcG9uc2UnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXF1ZXN0Lm9uUmVzcG9uc2VTdGFydGVkKClcbiAgfVxuXG4gIG9uSGVhZGVyRmllbGQgKGJ1Zikge1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDApIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIG9uSGVhZGVyVmFsdWUgKGJ1Zikge1xuICAgIGxldCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAxKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgICBsZW4gKz0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gdGhpcy5oZWFkZXJzW2xlbiAtIDJdXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDEwKSB7XG4gICAgICBjb25zdCBoZWFkZXJOYW1lID0gdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSlcbiAgICAgIGlmIChoZWFkZXJOYW1lID09PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgICAgdGhpcy5rZWVwQWxpdmUgKz0gYnVmLnRvU3RyaW5nKClcbiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiArPSBidWYudG9TdHJpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYgdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG4gICAgYXNzZXJ0KGNsaWVudFtrU29ja2V0XSA9PT0gc29ja2V0KVxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuICAgIGFzc2VydCgoaGVhZGVycy5sZW5ndGggJiAxKSA9PT0gMClcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuICAgIGFzc2VydChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gbnVsbFxuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgc29ja2V0LnVuc2hpZnQoaGVhZClcblxuICAgIHNvY2tldFtrUGFyc2VyXS5kZXN0cm95KClcbiAgICBzb2NrZXRba1BhcnNlcl0gPSBudWxsXG5cbiAgICBzb2NrZXRba0NsaWVudF0gPSBudWxsXG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoc29ja2V0KVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICAgIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbCAvLyBUT0RPIChmaXgpOiBUaGlzIGlzIGhhY2t5Li4uXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID09PSAwKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCByZXNwb25zZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KCh0aGlzLmhlYWRlcnMubGVuZ3RoICYgMSkgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHRoaXMuc2hvdWxkS2VlcEFsaXZlICYmIGNsaWVudFtrUGlwZWxpbmluZ10pIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZVRpbWVvdXQgPSB0aGlzLmtlZXBBbGl2ZSA/IHV0aWwucGFyc2VLZWVwQWxpdmVUaW1lb3V0KHRoaXMua2VlcEFsaXZlKSA6IG51bGxcblxuICAgICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gTWF0aC5taW4oXG4gICAgICAgICAga2VlcEFsaXZlVGltZW91dCAtIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0sXG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVNYXhUaW1lb3V0XVxuICAgICAgICApXG4gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aW1lb3V0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IGNsaWVudFtrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3AgbW9yZSByZXF1ZXN0cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwYXVzZSA9IHJlcXVlc3Qub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHRoaXMucmVzdW1lLCBzdGF0dXNUZXh0KSA9PT0gZmFsc2VcblxuICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICB9XG5cbiAgICByZXR1cm4gcGF1c2UgPyBjb25zdGFudHMuRVJST1IuUEFVU0VEIDogMFxuICB9XG5cbiAgb25Cb2R5IChidWYpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCBtYXhSZXNwb25zZVNpemUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMjAwKVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSA+IC0xICYmIHRoaXMuYnl0ZXNSZWFkICsgYnVmLmxlbmd0aCA+IG1heFJlc3BvbnNlU2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ1Zi5sZW5ndGhcblxuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShidWYpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9XG4gIH1cblxuICBvbk1lc3NhZ2VDb21wbGV0ZSAoKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgaGVhZGVycywgY29udGVudExlbmd0aCwgYnl0ZXNSZWFkLCBzaG91bGRLZWVwQWxpdmUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkICYmICghc3RhdHVzQ29kZSB8fCBzaG91bGRLZWVwQWxpdmUpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuICAgIGFzc2VydCgodGhpcy5oZWFkZXJzLmxlbmd0aCAmIDEpID09PSAwKVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgYmUgaGFuZGxlZCBieSBsbGh0dHA/ICovXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgY29udGVudExlbmd0aCAmJiBieXRlc1JlYWQgIT09IHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Db21wbGV0ZShoZWFkZXJzKVxuXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBzb2NrZXRba1NvY2tldFVzZWRdID0gdHJ1ZVxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09IG51bGwgfHwgY2xpZW50W2tQaXBlbGluaW5nXSA9PT0gMSkge1xuICAgICAgLy8gV2UgbXVzdCB3YWl0IGEgZnVsbCBldmVudCBsb29wIGN5Y2xlIHRvIHJldXNlIHRoaXMgc29ja2V0IHRvIG1ha2Ugc3VyZVxuICAgICAgLy8gdGhhdCBub24tc3BlYyBjb21wbGlhbnQgc2VydmVycyBhcmUgbm90IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gZXZlbiBpZiB0aGV5XG4gICAgICAvLyBzYWlkIHRoZXkgd29uJ3QuXG4gICAgICBzZXRJbW1lZGlhdGUoKCkgPT4gY2xpZW50W2tSZXN1bWVdKCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uUGFyc2VyVGltZW91dCAocGFyc2VyKSB7XG4gIGNvbnN0IHsgc29ja2V0LCB0aW1lb3V0VHlwZSwgY2xpZW50LCBwYXVzZWQgfSA9IHBhcnNlci5kZXJlZigpXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICBpZiAoIXNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0LndyaXRhYmxlTmVlZERyYWluIHx8IGNsaWVudFtrUnVubmluZ10gPiAxKSB7XG4gICAgICBhc3NlcnQoIXBhdXNlZCwgJ2Nhbm5vdCBiZSBwYXVzZWQgd2hpbGUgd2FpdGluZyBmb3IgaGVhZGVycycpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSGVhZGVyc1RpbWVvdXRFcnJvcigpKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKSB7XG4gICAgaWYgKCFwYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0tFRVBfQUxJVkUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3RIMSAoY2xpZW50LCBzb2NrZXQpIHtcbiAgY2xpZW50W2tTb2NrZXRdID0gc29ja2V0XG5cbiAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgIGxsaHR0cEluc3RhbmNlID0gYXdhaXQgbGxodHRwUHJvbWlzZVxuICAgIGxsaHR0cFByb21pc2UgPSBudWxsXG4gIH1cblxuICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAwXG4gIHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0XSA9IG51bGxcbiAgc29ja2V0W2tTb2NrZXRVc2VkXSA9IGZhbHNlXG4gIHNvY2tldFtrUGFyc2VyXSA9IG5ldyBQYXJzZXIoY2xpZW50LCBzb2NrZXQsIGxsaHR0cEluc3RhbmNlKVxuXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgY29uc3QgcGFyc2VyID0gdGhpc1trUGFyc2VyXVxuXG4gICAgLy8gT24gTWFjIE9TLCB3ZSBnZXQgYW4gRUNPTk5SRVNFVCBldmVuIGlmIHRoZXJlIGlzIGEgZnVsbCBib2R5IHRvIGJlIGZvcndhcmRlZFxuICAgIC8vIHRvIHRoZSB1c2VyLlxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICBjb25zdCBwYXJzZXJFcnIgPSBwYXJzZXIuZmluaXNoKClcbiAgICAgIGlmIChwYXJzZXJFcnIpIHtcbiAgICAgICAgdGhpc1trRXJyb3JdID0gcGFyc2VyRXJyXG4gICAgICAgIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKHBhcnNlckVycilcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gICAgdGhpc1trQ2xpZW50XVtrT25FcnJvcl0oZXJyKVxuICB9KVxuICBhZGRMaXN0ZW5lcihzb2NrZXQsICdyZWFkYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJzZXIgPSB0aGlzW2tQYXJzZXJdXG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICBwYXJzZXIucmVhZE1vcmUoKVxuICAgIH1cbiAgfSlcbiAgYWRkTGlzdGVuZXIoc29ja2V0LCAnZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhcnNlciA9IHRoaXNba1BhcnNlcl1cblxuICAgIGlmIChwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgY29uc3QgcGFyc2VyRXJyID0gcGFyc2VyLmZpbmlzaCgpXG4gICAgICBpZiAocGFyc2VyRXJyKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBwYXJzZXJFcnIpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSkpXG4gIH0pXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cbiAgICBjb25zdCBwYXJzZXIgPSB0aGlzW2tQYXJzZXJdXG5cbiAgICBjbGVhcklkbGVTb2NrZXRWYWxpZGF0aW9uKHRoaXMpXG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgICB0aGlzW2tFcnJvcl0gPSBwYXJzZXIuZmluaXNoKCkgfHwgdGhpc1trRXJyb3JdXG4gICAgICB9XG5cbiAgICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgICB0aGlzW2tQYXJzZXJdID0gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgICBjbGllbnRba0hUVFBDb250ZXh0XSA9IG51bGwgLy8gVE9ETyAoZml4KTogVGhpcyBpcyBoYWNreS4uLlxuXG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuXG4gICAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG5cbiAgICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0pXG5cbiAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJ2gxJyxcbiAgICBkZWZhdWx0UGlwZWxpbmluZzogMSxcbiAgICB3cml0ZSAoLi4uYXJncykge1xuICAgICAgcmV0dXJuIHdyaXRlSDEoY2xpZW50LCAuLi5hcmdzKVxuICAgIH0sXG4gICAgcmVzdW1lICgpIHtcbiAgICAgIHJlc3VtZUgxKGNsaWVudClcbiAgICB9LFxuICAgIGRlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChjbG9zZWQpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQuZGVzdHJveShlcnIpLm9uKCdjbG9zZScsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgICByZXR1cm4gc29ja2V0LmRlc3Ryb3llZFxuICAgIH0sXG4gICAgYnVzeSAocmVxdWVzdCkge1xuICAgICAgaWYgKHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tCbG9ja2luZ10gfHwgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmICFyZXF1ZXN0LmlkZW1wb3RlbnQpIHtcbiAgICAgICAgICAvLyBOb24taWRlbXBvdGVudCByZXF1ZXN0IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgICAgICAvLyBjb3VsZCBjYXVzZSBmYWlsdXJlLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgICAgIC8vIERvbid0IGRpc3BhdGNoIGFuIHVwZ3JhZGUgdW50aWwgYWxsIHByZWNlZGluZyByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgICAgICAvLyBBIG1pc2JlaGF2aW5nIHNlcnZlciBtaWdodCB1cGdyYWRlIHRoZSBjb25uZWN0aW9uIGJlZm9yZSBhbGwgcGlwZWxpbmVkXG4gICAgICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgdXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgIT09IDAgJiZcbiAgICAgICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkgfHwgdXRpbC5pc0Zvcm1EYXRhTGlrZShyZXF1ZXN0LmJvZHkpKSkge1xuICAgICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW4gZXJyb3Igd2hpbGUgb3RoZXIgcmVxdWVzdHNcbiAgICAgICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbiBieSB3YWl0aW5nIGZvciBpbmZsaWdodFxuICAgICAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBkaXNwYXRjaGluZy5cblxuICAgICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBubyBvdGhlciByZXF1ZXN0cyBhcmUgaW5mbGlnaHQgYW5kXG4gICAgICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhcklkbGVTb2NrZXRWYWxpZGF0aW9uIChzb2NrZXQpIHtcbiAgaWYgKHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0XSkge1xuICAgIGNsZWFyVGltZW91dChzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0pXG4gICAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvblRpbWVvdXRdID0gbnVsbFxuICB9XG5cbiAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAwXG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSWRsZVNvY2tldFZhbGlkYXRpb24gKGNsaWVudCwgc29ja2V0KSB7XG4gIHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25dID0gMVxuICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0gPSBudWxsXG4gICAgc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPSAyXG5cbiAgICBpZiAoY2xpZW50W2tTb2NrZXRdID09PSBzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gICAgfVxuICB9LCAwKVxuICBzb2NrZXRba0lkbGVTb2NrZXRWYWxpZGF0aW9uVGltZW91dF0udW5yZWY/LigpXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vY2xpZW50LmpzJyl9IGNsaWVudFxuICovXG5mdW5jdGlvbiByZXN1bWVIMSAoY2xpZW50KSB7XG4gIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgc29ja2V0LnVucmVmKClcbiAgICAgICAgc29ja2V0W2tOb1JlZl0gPSB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQucmVmKSB7XG4gICAgICBzb2NrZXQucmVmKClcbiAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba1BlbmRpbmddID4gMCAmJiBzb2NrZXRba1NvY2tldFVzZWRdKSB7XG4gICAgICBpZiAoc29ja2V0W2tJZGxlU29ja2V0VmFsaWRhdGlvbl0gPT09IDApIHtcbiAgICAgICAgc2NoZWR1bGVJZGxlU29ja2V0VmFsaWRhdGlvbihjbGllbnQsIHNvY2tldClcbiAgICAgICAgc29ja2V0W2tQYXJzZXJdLnJlYWRNb3JlKClcbiAgICAgICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNvY2tldFtrSWRsZVNvY2tldFZhbGlkYXRpb25dID09PSAxKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5yZWFkTW9yZSgpXG4gICAgICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIHNvY2tldFtrUGFyc2VyXS5yZWFkTW9yZSgpXG4gICAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9LRUVQX0FMSVZFKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSwgVElNRU9VVF9LRUVQX0FMSVZFKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgIT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICA/IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXRcbiAgICAgICAgICA6IGNsaWVudFtrSGVhZGVyc1RpbWVvdXRdXG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlSDEgKGNsaWVudCwgcmVxdWVzdCkge1xuICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgbGV0IHsgYm9keSwgaGVhZGVycywgY29udGVudExlbmd0aCB9ID0gcmVxdWVzdFxuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCcgfHxcbiAgICBtZXRob2QgPT09ICdRVUVSWScgfHxcbiAgICBtZXRob2QgPT09ICdQUk9QRklORCcgfHxcbiAgICBtZXRob2QgPT09ICdQUk9QUEFUQ0gnXG4gIClcblxuICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShib2R5KSkge1xuICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgIGV4dHJhY3RCb2R5ID0gcmVxdWlyZSgnLi4vd2ViL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuICAgIH1cblxuICAgIGNvbnN0IFtib2R5U3RyZWFtLCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgIGlmIChyZXF1ZXN0LmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMucHVzaCgnY29udGVudC10eXBlJywgY29udGVudFR5cGUpXG4gICAgfVxuICAgIGJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgIGNvbnRlbnRMZW5ndGggPSBib2R5U3RyZWFtLmxlbmd0aFxuICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiByZXF1ZXN0LmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGJvZHkudHlwZVxuICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgY29uc3QgY29udGVudFR5cGVWYWx1ZSA9IGAke2NvbnRlbnRUeXBlfWBcbiAgICAgIGlmICghdXRpbC5pc1ZhbGlkSGVhZGVyVmFsdWUoY29udGVudFR5cGVWYWx1ZSkpIHtcbiAgICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29udGVudC10eXBlIGhlYWRlcicpKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGhlYWRlcnMucHVzaCgnY29udGVudC10eXBlJywgY29udGVudFR5cGVWYWx1ZSlcbiAgICB9XG4gIH1cblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBjb25zdCBib2R5TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgY29udGVudExlbmd0aCA9IGJvZHlMZW5ndGggPz8gY29udGVudExlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cbiAgY2xlYXJJZGxlU29ja2V0VmFsaWRhdGlvbihzb2NrZXQpXG5cbiAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ2Fib3J0ZWQnKSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9pc3N1ZXMvMjU4XG4gICAgLy8gQ2xvc2UgYWZ0ZXIgYSBIRUFEIHJlcXVlc3QgdG8gaW50ZXJvcCB3aXRoIG1pc2JlaGF2aW5nIHNlcnZlcnNcbiAgICAvLyB0aGF0IG1heSBzZW5kIGEgYm9keSBpbiB0aGUgcmVzcG9uc2UuXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgLy8gT24gQ09OTkVDVCBvciB1cGdyYWRlLCBibG9jayBwaXBlbGluZSBmcm9tIGRpc3BhdGNoaW5nIGZ1cnRoZXJcbiAgICAvLyByZXF1ZXN0cyBvbiB0aGlzIGNvbm5lY3Rpb24uXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChyZXNldCAhPSBudWxsKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSByZXNldFxuICB9XG5cbiAgaWYgKGNsaWVudFtrTWF4UmVxdWVzdHNdICYmIHNvY2tldFtrQ291bnRlcl0rKyA+PSBjbGllbnRba01heFJlcXVlc3RzXSkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGJsb2NraW5nKSB7XG4gICAgc29ja2V0W2tCbG9ja2luZ10gPSB0cnVlXG4gIH1cblxuICBsZXQgaGVhZGVyID0gYCR7bWV0aG9kfSAke3BhdGh9IEhUVFAvMS4xXFxyXFxuYFxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBoZWFkZXIgKz0gYGhvc3Q6ICR7aG9zdH1cXHJcXG5gXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9IGNsaWVudFtrSG9zdEhlYWRlcl1cbiAgfVxuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgaGVhZGVyICs9IGBjb25uZWN0aW9uOiB1cGdyYWRlXFxyXFxudXBncmFkZTogJHt1cGdyYWRlfVxcclxcbmBcbiAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddICYmICFzb2NrZXRba1Jlc2V0XSkge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjoga2VlcC1hbGl2ZVxcclxcbidcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGNsb3NlXFxyXFxuJ1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnMubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbbiArIDBdXG4gICAgICBjb25zdCB2YWwgPSBoZWFkZXJzW24gKyAxXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsW2ldfVxcclxcbmBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsfVxcclxcbmBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY2hhbm5lbHMuc2VuZEhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zZW5kSGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdCwgaGVhZGVyczogaGVhZGVyLCBzb2NrZXQgfSlcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBhc3NlcnRpb24gKi9cbiAgaWYgKCFib2R5IHx8IGJvZHlMZW5ndGggPT09IDApIHtcbiAgICB3cml0ZUJ1ZmZlcihhYm9ydCwgbnVsbCwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIHdyaXRlQnVmZmVyKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LnN0cmVhbSgpLCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbSAoYWJvcnQsIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuXG4gIGNvbnN0IG9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSAmJiB0aGlzLnBhdXNlKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMsIGVycilcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25EcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5LnJlc3VtZSkge1xuICAgICAgYm9keS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICdjbG9zZScgbWlnaHQgYmUgZW1pdHRlZCAqYmVmb3JlKiAnZXJyb3InIGZvclxuICAgIC8vIGJyb2tlbiBzdHJlYW1zLiBXYWl0IGEgdGljayB0byBhdm9pZCB0aGlzIGNhc2UuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gSXQncyBvbmx5IHNhZmUgdG8gcmVtb3ZlICdlcnJvcicgbGlzdGVuZXIgYWZ0ZXJcbiAgICAgIC8vICdjbG9zZScuXG4gICAgICBib2R5LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgfSlcblxuICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IG9uRmluaXNoZWQoZXJyKSlcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25GaW5pc2hlZCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgYXNzZXJ0KHNvY2tldC5kZXN0cm95ZWQgfHwgKHNvY2tldFtrV3JpdGluZ10gJiYgY2xpZW50W2tSdW5uaW5nXSA8PSAxKSlcblxuICAgIHNvY2tldFxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgICAgLm9mZignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gICAgYm9keVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2UpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkNsb3NlKVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gIGlmIChib2R5LmVycm9yRW1pdHRlZCA/PyBib2R5LmVycm9yZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChib2R5LmVycm9yZWQpKVxuICB9IGVsc2UgaWYgKGJvZHkuZW5kRW1pdHRlZCA/PyBib2R5LnJlYWRhYmxlRW5kZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChudWxsKSlcbiAgfVxuXG4gIGlmIChib2R5LmNsb3NlRW1pdHRlZCA/PyBib2R5LmNsb3NlZCkge1xuICAgIHNldEltbWVkaWF0ZShvbkNsb3NlKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgICBzb2NrZXQuY29yaygpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG5cbiAgICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVCbG9iIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBjb250ZW50TGVuZ3RoICE9PSBib2R5LnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IGJvZHkuYXJyYXlCdWZmZXIoKSlcblxuICAgIHNvY2tldC5jb3JrKClcbiAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICBzb2NrZXQudW5jb3JrKClcblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFib3J0KGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ2l0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgbGV0IGNhbGxiYWNrID0gbnVsbFxuICBmdW5jdGlvbiBvbkRyYWluICgpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgY2IoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JEcmFpbiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhc3NlcnQoY2FsbGJhY2sgPT09IG51bGwpXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHJlamVjdChzb2NrZXRba0Vycm9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlXG4gICAgfVxuICB9KVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuICB0cnkge1xuICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gc29tZWhvdyBhYm9ydCB0aGUgYXN5bmMgaXRlcmFibGUuXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICAgIH1cblxuICAgICAgaWYgKCF3cml0ZXIud3JpdGUoY2h1bmspKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmVuZCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHdyaXRlci5kZXN0cm95KGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5jbGFzcyBBc3luY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yICh7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KSB7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aFxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwXG4gICAgdGhpcy5leHBlY3RzUGF5bG9hZCA9IGV4cGVjdHNQYXlsb2FkXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSB0cnVlXG4gIH1cblxuICB3cml0ZSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgaWYgKCFsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIGRlZmVyIHdyaXRpbmcgY2h1bmtzLlxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiArIGxlbiA+IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICB9XG5cbiAgICBzb2NrZXQuY29yaygpXG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoIWV4cGVjdHNQYXlsb2FkICYmIHJlcXVlc3QucmVzZXQgIT09IGZhbHNlKSB7XG4gICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfXRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZShgXFxyXFxuJHtsZW4udG9TdHJpbmcoMTYpfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGxlblxuXG4gICAgY29uc3QgcmV0ID0gc29ja2V0LndyaXRlKGNodW5rKVxuXG4gICAgc29ja2V0LnVuY29yaygpXG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG5cbiAgICBpZiAoIXJldCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBlbmQgKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciwgcmVxdWVzdCB9ID0gdGhpc1xuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKGV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBzZW5kIGEgQ29udGVudC1MZW5ndGggaW4gYSByZXF1ZXN0IG1lc3NhZ2Ugd2hlblxuICAgICAgICAvLyBubyBUcmFuc2Zlci1FbmNvZGluZyBpcyBzZW50IGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgZGVmaW5lcyBhIG1lYW5pbmdcbiAgICAgICAgLy8gZm9yIGFuIGVuY2xvc2VkIHBheWxvYWQgYm9keS5cblxuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKCdcXHJcXG4wXFxyXFxuXFxyXFxuJywgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgYWJvcnQoZXJyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsLmpzJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMuanMnKVxuY29uc3Qge1xuICBrVXJsLFxuICBrUmVzZXQsXG4gIGtDbGllbnQsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1F1ZXVlLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1NvY2tldCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtPbkVycm9yLFxuICBrTWF4Q29uY3VycmVudFN0cmVhbXMsXG4gIGtIVFRQMlNlc3Npb24sXG4gIGtSZXN1bWUsXG4gIGtTaXplLFxuICBrSFRUUENvbnRleHRcbn0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMuanMnKVxuXG5jb25zdCBrT3BlblN0cmVhbXMgPSBTeW1ib2woJ29wZW4gc3RyZWFtcycpXG5cbmxldCBleHRyYWN0Qm9keVxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ25vZGU6aHR0cDInKVxufSBjYXRjaCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cDIgPSB7IGNvbnN0YW50czoge30gfVxufVxuXG5jb25zdCB7XG4gIGNvbnN0YW50czoge1xuICAgIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gICAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgICBIVFRQMl9IRUFERVJfU0NIRU1FLFxuICAgIEhUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSCxcbiAgICBIVFRQMl9IRUFERVJfRVhQRUNULFxuICAgIEhUVFAyX0hFQURFUl9TVEFUVVNcbiAgfVxufSA9IGh0dHAyXG5cbmZ1bmN0aW9uIHBhcnNlSDJIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgLy8gaDIgbWF5IGNvbmNhdCB0aGUgaGVhZGVyIHZhbHVlIGJ5IGFycmF5XG4gICAgLy8gZS5nLiBTZXQtQ29va2llXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gcHJvdmlkZSBlYWNoIGhlYWRlciB2YWx1ZSBvZiBoZWFkZXIgbmFtZVxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBoZWFkZXJzIGhhbmRsZXIgZXhwZWN0IG5hbWUtdmFsdWUgcGFpclxuICAgICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20oc3VidmFsdWUpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20odmFsdWUpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29ubmVjdEgyIChjbGllbnQsIHNvY2tldCkge1xuICBjbGllbnRba1NvY2tldF0gPSBzb2NrZXRcblxuICBpZiAoIWgyRXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgaDJFeHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICBjb2RlOiAnVU5ESUNJLUgyJ1xuICAgIH0pXG4gIH1cblxuICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdChjbGllbnRba1VybF0sIHtcbiAgICBjcmVhdGVDb25uZWN0aW9uOiAoKSA9PiBzb2NrZXQsXG4gICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba01heENvbmN1cnJlbnRTdHJlYW1zXVxuICB9KVxuXG4gIHNlc3Npb25ba09wZW5TdHJlYW1zXSA9IDBcbiAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICBzZXNzaW9uW2tTb2NrZXRdID0gc29ja2V0XG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzZXNzaW9uLCAnZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdmcmFtZUVycm9yJywgb25IdHRwMkZyYW1lRXJyb3IpXG4gIHV0aWwuYWRkTGlzdGVuZXIoc2Vzc2lvbiwgJ2VuZCcsIG9uSHR0cDJTZXNzaW9uRW5kKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50IH0gPSB0aGlzXG4gICAgY29uc3QgeyBba1NvY2tldF06IHNvY2tldCB9ID0gY2xpZW50XG5cbiAgICBjb25zdCBlcnIgPSB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gfHwgdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpXG5cbiAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG5cbiAgICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBzZXNzaW9uLnVucmVmKClcblxuICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBzZXNzaW9uXG4gIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cblxuICB1dGlsLmFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgdGhpc1trRXJyb3JdID0gZXJyXG5cbiAgICB0aGlzW2tDbGllbnRdW2tPbkVycm9yXShlcnIpXG4gIH0pXG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzb2NrZXQsICdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpKVxuICB9KVxuXG4gIHV0aWwuYWRkTGlzdGVuZXIoc29ja2V0LCAnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXJyID0gdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuXG4gICAgaWYgKHRoaXNba0hUVFAyU2Vzc2lvbl0gIT0gbnVsbCkge1xuICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXS5kZXN0cm95KGVycilcbiAgICB9XG5cbiAgICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0pXG5cbiAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJ2gyJyxcbiAgICBkZWZhdWx0UGlwZWxpbmluZzogSW5maW5pdHksXG4gICAgd3JpdGUgKC4uLmFyZ3MpIHtcbiAgICAgIHJldHVybiB3cml0ZUgyKGNsaWVudCwgLi4uYXJncylcbiAgICB9LFxuICAgIHJlc3VtZSAoKSB7XG4gICAgICByZXN1bWVIMihjbGllbnQpXG4gICAgfSxcbiAgICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoY2xvc2VkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVzdHJveWluZyB0aGUgc29ja2V0IHdpbGwgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICAgICAgICBzb2NrZXQuZGVzdHJveShlcnIpLm9uKCdjbG9zZScsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgICByZXR1cm4gc29ja2V0LmRlc3Ryb3llZFxuICAgIH0sXG4gICAgYnVzeSAoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lSDIgKGNsaWVudCkge1xuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICBpZiAoc29ja2V0Py5kZXN0cm95ZWQgPT09IGZhbHNlKSB7XG4gICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDAgJiYgY2xpZW50W2tNYXhDb25jdXJyZW50U3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0udW5yZWYoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzb2NrZXQucmVmKClcbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXS5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKGVycilcbn1cblxuZnVuY3Rpb24gb25IdHRwMkZyYW1lRXJyb3IgKHR5cGUsIGNvZGUsIGlkKSB7XG4gIGlmIChpZCA9PT0gMCkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG4gICAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gICAgdGhpc1trQ2xpZW50XVtrT25FcnJvcl0oZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgY29uc3QgZXJyID0gbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzW2tTb2NrZXRdKSlcbiAgdGhpcy5kZXN0cm95KGVycilcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIGVycilcbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSByb290IGNhdXNlIG9mICMzMDExXG4gKiBXZSBuZWVkIHRvIGhhbmRsZSBHT0FXQVkgZnJhbWVzIHByb3Blcmx5LCBhbmQgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICogYWxvbmcgd2l0aCB0aGUgc29ja2V0IHJpZ2h0IGF3YXlcbiAqL1xuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICAvLyBXZSBjYW5ub3QgcmVjb3Zlciwgc28gYmVzdCB0byBjbG9zZSB0aGUgc2Vzc2lvbiBhbmQgdGhlIHNvY2tldFxuICBjb25zdCBlcnIgPSB0aGlzW2tFcnJvcl0gfHwgbmV3IFNvY2tldEVycm9yKGBIVFRQLzI6IFwiR09BV0FZXCIgZnJhbWUgcmVjZWl2ZWQgd2l0aCBjb2RlICR7Y29kZX1gLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpXG4gIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbFxuXG4gIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dLmRlc3Ryb3koZXJyKVxuICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gIH1cblxuICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XSwgZXJyKVxuXG4gIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPCBjbGllbnRba1F1ZXVlXS5sZW5ndGgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gIH1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICBjbGllbnRba1Jlc3VtZV0oKVxufVxuXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG5mdW5jdGlvbiBzaG91bGRTZW5kQ29udGVudExlbmd0aCAobWV0aG9kKSB7XG4gIHJldHVybiBtZXRob2QgIT09ICdHRVQnICYmIG1ldGhvZCAhPT0gJ0hFQUQnICYmIG1ldGhvZCAhPT0gJ09QVElPTlMnICYmIG1ldGhvZCAhPT0gJ1RSQUNFJyAmJiBtZXRob2QgIT09ICdDT05ORUNUJ1xufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IGNsaWVudFtrSFRUUDJTZXNzaW9uXVxuICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgZXhwZWN0Q29udGludWUsIHNpZ25hbCwgaGVhZGVyczogcmVxSGVhZGVycyB9ID0gcmVxdWVzdFxuICBsZXQgeyBib2R5IH0gPSByZXF1ZXN0XG5cbiAgaWYgKHVwZ3JhZGUpIHtcbiAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IHt9XG4gIGZvciAobGV0IG4gPSAwOyBuIDwgcmVxSGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGNvbnN0IGtleSA9IHJlcUhlYWRlcnNbbiArIDBdXG4gICAgY29uc3QgdmFsID0gcmVxSGVhZGVyc1tuICsgMV1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW2tleV0pIHtcbiAgICAgICAgICBoZWFkZXJzW2tleV0gKz0gYCwke3ZhbFtpXX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsW2ldXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyc1trZXldID0gdmFsXG4gICAgfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuXG4gIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0IHx8IGAke2hvc3RuYW1lfSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlcnIgPSBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoc3RyZWFtICE9IG51bGwpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG5cbiAgICAvLyBXZSBkbyBub3QgZGVzdHJveSB0aGUgc29ja2V0IGFzIHdlIGNhbiBjb250aW51ZSB1c2luZyB0aGUgc2Vzc2lvblxuICAgIC8vIHRoZSBzdHJlYW0gZ2V0J3MgZGVzdHJveWVkIGFuZCB0aGUgc2Vzc2lvbiByZW1haW5zIHRvIGNyZWF0ZSBuZXcgc3RyZWFtc1xuICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBXZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHN0cmVhbXMgYXJlIHBlbmRpbmcuXG4gICAgLy8gV2UgY2FuIGNhbGwgb24gY29ubmVjdCwgYW5kIHdhaXQgZm9yIGFib3J0XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgc2Vzc2lvbi5yZWYoKVxuICAgIC8vIFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc3RyZWFtcyBhcmUgcGVuZGluZywgZmlyc3QgcmVxdWVzdFxuICAgIC8vIHdpbGwgY3JlYXRlIGEgbmV3IHN0cmVhbS4gV2UgdHJpZ2dlciBhIHJlcXVlc3QgdG8gY3JlYXRlIHRoZSBzdHJlYW0gYW5kIHdhaXQgdW50aWxcbiAgICAvLyBgcmVhZHlgIGV2ZW50IGlzIHRyaWdnZXJlZFxuICAgIC8vIFdlIGRpc2FibGVkIGVuZFN0cmVhbSB0byBhbGxvdyB0aGUgdXNlciB0byB3cml0ZSB0byB0aGUgc3RyZWFtXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBmYWxzZSwgc2lnbmFsIH0pXG5cbiAgICBpZiAoc3RyZWFtLmlkICYmICFzdHJlYW0ucGVuZGluZykge1xuICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgKytzZXNzaW9uW2tPcGVuU3RyZWFtc11cbiAgICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbmNlKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgICArK3Nlc3Npb25ba09wZW5TdHJlYW1zXVxuICAgICAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkgc2Vzc2lvbi51bnJlZigpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTguM1xuICAvLyA6cGF0aCBhbmQgOnNjaGVtZSBoZWFkZXJzIG11c3QgYmUgb21pdHRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoYm9keSkpIHtcbiAgICBleHRyYWN0Qm9keSA/Pz0gcmVxdWlyZSgnLi4vd2ViL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuXG4gICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBjb250ZW50VHlwZVxuXG4gICAgYm9keSA9IGJvZHlTdHJlYW0uc3RyZWFtXG4gICAgY29udGVudExlbmd0aCA9IGJvZHlTdHJlYW0ubGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgfHwgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBhc3NlcnQoYm9keSwgJ25vIGJvZHkgbXVzdCBub3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEhdID0gYCR7Y29udGVudExlbmd0aH1gXG4gIH1cblxuICBzZXNzaW9uLnJlZigpXG5cbiAgY29uc3Qgc2hvdWxkRW5kU3RyZWFtID0gbWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJyB8fCBib2R5ID09PSBudWxsXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc3RyZWFtcyBvcGVuXG4gICsrc2Vzc2lvbltrT3BlblN0cmVhbXNdXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG4gICAgcmVxdWVzdC5vblJlc3BvbnNlU3RhcnRlZCgpXG5cbiAgICAvLyBEdWUgdG8gdGhlIHN0cmVhbSBuYXR1cmUsIGl0IGlzIHBvc3NpYmxlIHdlIGZhY2UgYSByYWNlIGNvbmRpdGlvblxuICAgIC8vIHdoZXJlIHRoZSBzdHJlYW0gaGFzIGJlZW4gYXNzaWduZWQsIGJ1dCB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkXG4gICAgLy8gdGhlIHJlcXVlc3QgcmVtYWlucyBpbi1mbGlnaHQgYW5kIGhlYWRlcnMgaGFzbid0IGJlZW4gcmVjZWl2ZWQgeWV0XG4gICAgLy8gZm9yIHRob3NlIHNjZW5hcmlvcywgYmVzdCBlZmZvcnQgaXMgdG8gZGVzdHJveSB0aGUgc3RyZWFtIGltbWVkaWF0ZWx5XG4gICAgLy8gYXMgdGhlcmUncyBubyB2YWx1ZSB0byBrZWVwIGl0IG9wZW4uXG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCBwYXJzZUgySGVhZGVycyhyZWFsSGVhZGVycyksIHN0cmVhbS5yZXN1bWUuYmluZChzdHJlYW0pLCAnJykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cblxuICAgIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKHJlcXVlc3Qub25EYXRhKGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgLy8gV2hlbiBzdGF0ZSBpcyBudWxsLCBpdCBtZWFucyB3ZSBoYXZlbid0IGNvbnN1bWVkIGJvZHkgYW5kIHRoZSBzdHJlYW0gc3RpbGwgZG8gbm90IGhhdmVcbiAgICAvLyBhIHN0YXRlLlxuICAgIC8vIFByZXNlbnQgc3BlY2lhbGx5IHdoZW4gdXNpbmcgcGlwZWxpbmUgb3Igc3RyZWFtXG4gICAgaWYgKHN0cmVhbS5zdGF0ZT8uc3RhdGUgPT0gbnVsbCB8fCBzdHJlYW0uc3RhdGUuc3RhdGUgPCA2KSB7XG4gICAgICByZXF1ZXN0Lm9uQ29tcGxldGUoW10pXG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkge1xuICAgICAgLy8gU3RyZWFtIGlzIGNsb3NlZCBvciBoYWxmLWNsb3NlZC1yZW1vdGUgKDYpLCBkZWNyZW1lbnQgY291bnRlciBhbmQgY2xlYW51cFxuICAgICAgLy8gSXQgZG9lcyBub3QgaGF2ZSBzZW5zZSB0byBjb250aW51ZSB3b3JraW5nIHdpdGggdGhlIHN0cmVhbSBhcyB3ZSBkbyBub3RcbiAgICAgIC8vIGhhdmUgeWV0IFJTVF9TVFJFQU0gc3VwcG9ydCBvbiBjbGllbnQtc2lkZVxuXG4gICAgICBzZXNzaW9uLnVucmVmKClcbiAgICB9XG5cbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdIVFRQLzI6IHN0cmVhbSBoYWxmLWNsb3NlZCAocmVtb3RlKScpKVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgIGlmIChzZXNzaW9uW2tPcGVuU3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdmcmFtZUVycm9yJywgKHR5cGUsIGNvZGUpID0+IHtcbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKSlcbiAgfSlcblxuICAvLyBzdHJlYW0ub24oJ2Fib3J0ZWQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IGFib3J0ZWRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRpbWVvdXRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3B1c2gnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgcHVzaFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndHJhaWxlcnMnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdHJhaWxlcnNcbiAgLy8gfSlcblxuICByZXR1cm4gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHdyaXRlQm9keUgyICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gICAgaWYgKCFib2R5IHx8IGNvbnRlbnRMZW5ndGggPT09IDApIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBudWxsLFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3cml0ZUl0ZXJhYmxlKFxuICAgICAgICAgIGFib3J0LFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYihcbiAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjbGllbnRba1NvY2tldF0sXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB3cml0ZVN0cmVhbShcbiAgICAgICAgYWJvcnQsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoXG4gICAgICApXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoXG4gICAgICAgIGFib3J0LFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBleHBlY3RzUGF5bG9hZCkge1xuICB0cnkge1xuICAgIGlmIChib2R5ICE9IG51bGwgJiYgdXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBoMnN0cmVhbS5jb3JrKClcbiAgICAgIGgyc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBoMnN0cmVhbS51bmNvcmsoKVxuICAgICAgaDJzdHJlYW0uZW5kKClcblxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGFib3J0KGVycm9yKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtIChhYm9ydCwgc29ja2V0LCBleHBlY3RzUGF5bG9hZCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgY29udGVudExlbmd0aCkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCAhPT0gMCB8fCBjbGllbnRba1J1bm5pbmddID09PSAwLCAnc3RyZWFtIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICBjb25zdCBwaXBlID0gcGlwZWxpbmUoXG4gICAgYm9keSxcbiAgICBoMnN0cmVhbSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShwaXBlLCBlcnIpXG4gICAgICAgIGFib3J0KGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwucmVtb3ZlQWxsTGlzdGVuZXJzKHBpcGUpXG4gICAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICB1dGlsLmFkZExpc3RlbmVyKHBpcGUsICdkYXRhJywgb25QaXBlRGF0YSlcblxuICBmdW5jdGlvbiBvblBpcGVEYXRhIChjaHVuaykge1xuICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LnNpemUsICdibG9iIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcblxuICB0cnkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCAhPT0gYm9keS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCBib2R5LmFycmF5QnVmZmVyKCkpXG5cbiAgICBoMnN0cmVhbS5jb3JrKClcbiAgICBoMnN0cmVhbS53cml0ZShidWZmZXIpXG4gICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICBoMnN0cmVhbS5lbmQoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJ1ZmZlcilcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSXRlcmFibGUgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBoMnN0cmVhbVxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBoMnN0cmVhbS53cml0ZShjaHVuaylcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaDJzdHJlYW0uZW5kKClcblxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMlxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG4gICAgdGhpcy5yZWRpcmVjdGlvbkxpbWl0UmVhY2hlZCA9IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMudGhyb3dPbk1heFJlZGlyZWN0ICYmIHRoaXMuaGlzdG9yeS5sZW5ndGggPj0gdGhpcy5tYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmFib3J0KG5ldyBFcnJvcignbWF4IHJlZGlyZWN0cycpKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJlZGlyZWN0aW9uTGltaXRSZWFjaGVkID0gdHJ1ZVxuICAgICAgdGhpcy5hYm9ydChuZXcgRXJyb3IoJ21heCByZWRpcmVjdHMnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGx5IGNob29zZXMgbm90IHRvIHNwZWNpZnkgYSBmb3JtYXQgZm9yIHN1Y2ggYm9keSBhbmQgbGVhdmUgaXQgdG9cbiAgICAgICAgc2VydmVycyBhbmQgYnJvd3NlcnMgaW1wbGVtZW50b3JzLCB3ZSBpZ25vcmUgdGhlIGJvZHkgYXMgdGhlcmUgaXMgbm8gc3BlY2lmaWVkIHdheSB0byBldmVudHVhbGx5IHBhcnNlIGl0LlxuICAgICAgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIHRyYWlsZXJzIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCBpbiBjYXNlIG9mIHJlZGlyZWN0aW9uc1xuICAgICAgICBhbmQgbmVpdGhlciBhcmUgdXNlZnVsIGlmIHByZXNlbnQuXG5cbiAgICAgICAgU2VlIGNvbW1lbnQgb24gb25EYXRhIG1ldGhvZCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbi5cbiAgICAgICovXG5cbiAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2F0aW9uIChzdGF0dXNDb2RlLCBoZWFkZXJzKSB7XG4gIGlmIChyZWRpcmVjdGFibGVTdGF0dXNDb2Rlcy5pbmRleE9mKHN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoaGVhZGVyc1tpXS5sZW5ndGggPT09IDggJiYgdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyc1tpXSkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVIZWFkZXIgKGhlYWRlciwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBpZiAoaGVhZGVyLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpID09PSAnaG9zdCdcbiAgfVxuICBpZiAocmVtb3ZlQ29udGVudCAmJiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpLnN0YXJ0c1dpdGgoJ2NvbnRlbnQtJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh1bmtub3duT3JpZ2luICYmIChoZWFkZXIubGVuZ3RoID09PSAxMyB8fCBoZWFkZXIubGVuZ3RoID09PSA2IHx8IGhlYWRlci5sZW5ndGggPT09IDE5KSkge1xuICAgIGNvbnN0IG5hbWUgPSB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpXG4gICAgcmV0dXJuIG5hbWUgPT09ICdhdXRob3JpemF0aW9uJyB8fCBuYW1lID09PSAnY29va2llJyB8fCBuYW1lID09PSAncHJveHktYXV0aG9yaXphdGlvbidcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbmZ1bmN0aW9uIGNsZWFuUmVxdWVzdEhlYWRlcnMgKGhlYWRlcnMsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGhlYWRlcnNbaV0sIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihrZXksIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoaGVhZGVycyA9PSBudWxsLCAnaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZGlyZWN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXInKVxuXG5mdW5jdGlvbiBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yICh7IG1heFJlZGlyZWN0aW9uczogZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gSW50ZXJjZXB0IChvcHRzLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCB7IG1heFJlZGlyZWN0aW9ucyA9IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSA9IG9wdHNcblxuICAgICAgaWYgKCFtYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZGlyZWN0SGFuZGxlciA9IG5ldyBSZWRpcmVjdEhhbmRsZXIoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcilcbiAgICAgIG9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIFN0b3Agc3ViIGRpc3BhdGNoZXIgZnJvbSBhbHNvIHJlZGlyZWN0aW5nLlxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG4iLCAiLy8gQHRzLWNoZWNrXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCBuZXQgPSByZXF1aXJlKCdub2RlOm5ldCcpXG5jb25zdCBodHRwID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwuanMnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi4vY29yZS9kaWFnbm9zdGljcy5qcycpXG5jb25zdCBSZXF1ZXN0ID0gcmVxdWlyZSgnLi4vY29yZS9yZXF1ZXN0LmpzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzLmpzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi4vY29yZS9jb25uZWN0LmpzJylcbmNvbnN0IHtcbiAga1VybCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrQ29ubmVjdCxcbiAga1Jlc3VtaW5nLFxuICBrUnVubmluZyxcbiAga1BlbmRpbmcsXG4gIGtTaXplLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQsXG4gIGtIb3N0SGVhZGVyLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1BpcGVsaW5pbmcsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWUsXG4gIGtNYXhIZWFkZXJzU2l6ZSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkLFxuICBrSGVhZGVyc1RpbWVvdXQsXG4gIGtCb2R5VGltZW91dCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtDb25uZWN0b3IsXG4gIGtNYXhSZWRpcmVjdGlvbnMsXG4gIGtNYXhSZXF1ZXN0cyxcbiAga0NvdW50ZXIsXG4gIGtDbG9zZSxcbiAga0Rlc3Ryb3ksXG4gIGtEaXNwYXRjaCxcbiAga0ludGVyY2VwdG9ycyxcbiAga0xvY2FsQWRkcmVzcyxcbiAga01heFJlc3BvbnNlU2l6ZSxcbiAga09uRXJyb3IsXG4gIGtIVFRQQ29udGV4dCxcbiAga01heENvbmN1cnJlbnRTdHJlYW1zLFxuICBrUmVzdW1lXG59ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzLmpzJylcbmNvbnN0IGNvbm5lY3RIMSA9IHJlcXVpcmUoJy4vY2xpZW50LWgxLmpzJylcbmNvbnN0IGNvbm5lY3RIMiA9IHJlcXVpcmUoJy4vY2xpZW50LWgyLmpzJylcbmxldCBkZXByZWNhdGVkSW50ZXJjZXB0b3JXYXJuZWQgPSBmYWxzZVxuXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgna0Nsb3NlZFJlc29sdmUnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZnVuY3Rpb24gZ2V0UGlwZWxpbmluZyAoY2xpZW50KSB7XG4gIHJldHVybiBjbGllbnRba1BpcGVsaW5pbmddID8/IGNsaWVudFtrSFRUUENvbnRleHRdPy5kZWZhdWx0UGlwZWxpbmluZyA/PyAxXG59XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2xpZW50LmpzJykuZGVmYXVsdH1cbiAqL1xuY2xhc3MgQ2xpZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NsaWVudC5qcycpLkNsaWVudC5PcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCB7XG4gICAgaW50ZXJjZXB0b3JzLFxuICAgIG1heEhlYWRlclNpemUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgc29ja2V0VGltZW91dCxcbiAgICByZXF1ZXN0VGltZW91dCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICBpZGxlVGltZW91dCxcbiAgICBrZWVwQWxpdmUsXG4gICAga2VlcEFsaXZlVGltZW91dCxcbiAgICBtYXhLZWVwQWxpdmVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZU1heFRpbWVvdXQsXG4gICAga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAgICBzb2NrZXRQYXRoLFxuICAgIHBpcGVsaW5pbmcsXG4gICAgdGxzLFxuICAgIHN0cmljdENvbnRlbnRMZW5ndGgsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgIGNvbm5lY3QsXG4gICAgbWF4UmVxdWVzdHNQZXJDbGllbnQsXG4gICAgbG9jYWxBZGRyZXNzLFxuICAgIG1heFJlc3BvbnNlU2l6ZSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICAvLyBoMlxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zLFxuICAgIGFsbG93SDIsXG4gICAgd2ViU29ja2V0XG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKHsgd2ViU29ja2V0IH0pXG5cbiAgICBpZiAoa2VlcEFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQga2VlcEFsaXZlLCB1c2UgcGlwZWxpbmluZz0wIGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgc29ja2V0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgcmVxdWVzdFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChpZGxlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGlkbGVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlVGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4S2VlcEFsaXZlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG1heEtlZXBBbGl2ZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVNYXhUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhIZWFkZXJTaXplICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShtYXhIZWFkZXJTaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1heEhlYWRlclNpemUnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRQYXRoICE9IG51bGwgJiYgdHlwZW9mIHNvY2tldFBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgc29ja2V0UGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3RUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdFRpbWVvdXQpIHx8IGNvbm5lY3RUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0KSB8fCBrZWVwQWxpdmVUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZU1heFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVNYXhUaW1lb3V0KSB8fCBrZWVwQWxpdmVNYXhUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlTWF4VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCcpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnNUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZWRpcmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlcXVlc3RzUGVyQ2xpZW50ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlcXVlc3RzUGVyQ2xpZW50KSB8fCBtYXhSZXF1ZXN0c1BlckNsaWVudCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlcXVlc3RzUGVyQ2xpZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChsb2NhbEFkZHJlc3MgIT0gbnVsbCAmJiAodHlwZW9mIGxvY2FsQWRkcmVzcyAhPT0gJ3N0cmluZycgfHwgbmV0LmlzSVAobG9jYWxBZGRyZXNzKSA9PT0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbG9jYWxBZGRyZXNzIG11c3QgYmUgdmFsaWQgc3RyaW5nIElQIGFkZHJlc3MnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVzcG9uc2VTaXplKSB8fCBtYXhSZXNwb25zZVNpemUgPCAtMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVzcG9uc2VTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCAhPSBudWxsICYmXG4gICAgICAoIU51bWJlci5pc0ludGVnZXIoYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0KSB8fCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgPCAtMSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIC8vIGgyXG4gICAgaWYgKGFsbG93SDIgIT0gbnVsbCAmJiB0eXBlb2YgYWxsb3dIMiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2FsbG93SDIgbXVzdCBiZSBhIHZhbGlkIGJvb2xlYW4gdmFsdWUnKVxuICAgIH1cblxuICAgIGlmIChtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsICYmICh0eXBlb2YgbWF4Q29uY3VycmVudFN0cmVhbXMgIT09ICdudW1iZXInIHx8IG1heENvbmN1cnJlbnRTdHJlYW1zIDwgMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q29uY3VycmVudFN0cmVhbXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4oYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChpbnRlcmNlcHRvcnM/LkNsaWVudCAmJiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9ycy5DbGllbnQpKSB7XG4gICAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgaWYgKCFkZXByZWNhdGVkSW50ZXJjZXB0b3JXYXJuZWQpIHtcbiAgICAgICAgZGVwcmVjYXRlZEludGVyY2VwdG9yV2FybmVkID0gdHJ1ZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdDbGllbnQuT3B0aW9ucyNpbnRlcmNlcHRvciBpcyBkZXByZWNhdGVkLiBVc2UgRGlzcGF0Y2hlciNjb21wb3NlIGluc3RlYWQuJywge1xuICAgICAgICAgIGNvZGU6ICdVTkRJQ0ktQ0xJRU5ULUlOVEVSQ0VQVE9SLURFUFJFQ0FURUQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB9XG5cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tQaXBlbGluaW5nXSA9IHBpcGVsaW5pbmcgIT0gbnVsbCA/IHBpcGVsaW5pbmcgOiAxXG4gICAgdGhpc1trTWF4SGVhZGVyc1NpemVdID0gbWF4SGVhZGVyU2l6ZSB8fCBodHRwLm1heEhlYWRlclNpemVcbiAgICB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF0gPSBrZWVwQWxpdmVUaW1lb3V0ID09IG51bGwgPyA0ZTMgOiBrZWVwQWxpdmVUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlTWF4VGltZW91dF0gPSBrZWVwQWxpdmVNYXhUaW1lb3V0ID09IG51bGwgPyA2MDBlMyA6IGtlZXBBbGl2ZU1heFRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXSA9IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgPT0gbnVsbCA/IDJlMyA6IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgdGhpc1trU2VydmVyTmFtZV0gPSBudWxsXG4gICAgdGhpc1trTG9jYWxBZGRyZXNzXSA9IGxvY2FsQWRkcmVzcyAhPSBudWxsID8gbG9jYWxBZGRyZXNzIDogbnVsbFxuICAgIHRoaXNba1Jlc3VtaW5nXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trTmVlZERyYWluXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trSG9zdEhlYWRlcl0gPSBgaG9zdDogJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9XFxyXFxuYFxuICAgIHRoaXNba0JvZHlUaW1lb3V0XSA9IGJvZHlUaW1lb3V0ICE9IG51bGwgPyBib2R5VGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trSGVhZGVyc1RpbWVvdXRdID0gaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCA/IGhlYWRlcnNUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tTdHJpY3RDb250ZW50TGVuZ3RoXSA9IHN0cmljdENvbnRlbnRMZW5ndGggPT0gbnVsbCA/IHRydWUgOiBzdHJpY3RDb250ZW50TGVuZ3RoXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba01heFJlcXVlc3RzXSA9IG1heFJlcXVlc3RzUGVyQ2xpZW50XG4gICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgdGhpc1trTWF4UmVzcG9uc2VTaXplXSA9IG1heFJlc3BvbnNlU2l6ZSA+IC0xID8gbWF4UmVzcG9uc2VTaXplIDogLTFcbiAgICB0aGlzW2tNYXhDb25jdXJyZW50U3RyZWFtc10gPSBtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsID8gbWF4Q29uY3VycmVudFN0cmVhbXMgOiAxMDAgLy8gTWF4IHBlZXJDb25jdXJyZW50U3RyZWFtcyBmb3IgYSBOb2RlIGgyIHNlcnZlclxuICAgIHRoaXNba0hUVFBDb250ZXh0XSA9IG51bGxcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcblxuICAgIHRoaXNba1Jlc3VtZV0gPSAoc3luYykgPT4gcmVzdW1lKHRoaXMsIHN5bmMpXG4gICAgdGhpc1trT25FcnJvcl0gPSAoZXJyKSA9PiBvbkVycm9yKHRoaXMsIGVycilcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICB0aGlzW2tSZXN1bWVdKHRydWUpXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tQZW5kaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tQZW5kaW5nSWR4XSAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuICEhdGhpc1trSFRUUENvbnRleHRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trSFRUUENvbnRleHRdLmRlc3Ryb3llZFxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpc1trSFRUUENvbnRleHRdPy5idXN5KG51bGwpIHx8XG4gICAgICAodGhpc1trU2l6ZV0gPj0gKGdldFBpcGVsaW5pbmcodGhpcykgfHwgMSkpIHx8XG4gICAgICB0aGlzW2tQZW5kaW5nXSA+IDBcbiAgICApXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmU6IG9ubHkgdXNlZCBmb3IgdGVzdCAqL1xuICBba0Nvbm5lY3RdIChjYikge1xuICAgIGNvbm5lY3QodGhpcylcbiAgICB0aGlzLm9uY2UoJ2Nvbm5lY3QnLCBjYilcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gb3B0cy5vcmlnaW4gfHwgdGhpc1trVXJsXS5vcmlnaW5cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgdGhpc1trUXVldWVdLnB1c2gocmVxdWVzdClcbiAgICBpZiAodGhpc1trUmVzdW1pbmddKSB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAodXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgPT0gbnVsbCAmJiB1dGlsLmlzSXRlcmFibGUocmVxdWVzdC5ib2R5KSkge1xuICAgICAgLy8gV2FpdCBhIHRpY2sgaW4gY2FzZSBzdHJlYW0vaXRlcmF0b3IgaXMgZW5kZWQgaW4gdGhlIHNhbWUgdGljay5cbiAgICAgIHRoaXNba1Jlc3VtaW5nXSA9IDFcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHJlc3VtZSh0aGlzKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trUmVzdW1lXSh0cnVlKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tSZXN1bWluZ10gJiYgdGhpc1trTmVlZERyYWluXSAhPT0gMiAmJiB0aGlzW2tCdXN5XSkge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IDJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXSA8IDJcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICAvLyBUT0RPOiBmb3IgSDIgd2UgbmVlZCB0byBncmFjZWZ1bGx5IGZsdXNoIHRoZSByZW1haW5pbmcgZW5xdWV1ZWRcbiAgICAvLyByZXF1ZXN0IGFuZCBjbG9zZSBlYWNoIHN0cmVhbS5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzW2tTaXplXSkge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICB1dGlsLmVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trQ2xvc2VkUmVzb2x2ZV0pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBTaG91bGQgd2UgZXJyb3IgaGVyZSB3aXRoIENsaWVudERlc3Ryb3llZEVycm9yP1xuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQQ29udGV4dF0pIHtcbiAgICAgICAgdGhpc1trSFRUUENvbnRleHRdLmRlc3Ryb3koZXJyLCBjYWxsYmFjaylcbiAgICAgICAgdGhpc1trSFRUUENvbnRleHRdID0gbnVsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9XG5cbiAgICAgIHRoaXNba1Jlc3VtZV0oKVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4uL2ludGVyY2VwdG9yL3JlZGlyZWN0LWludGVyY2VwdG9yLmpzJylcblxuZnVuY3Rpb24gb25FcnJvciAoY2xpZW50LCBlcnIpIHtcbiAgaWYgKFxuICAgIGNsaWVudFtrUnVubmluZ10gPT09IDAgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfU09DS0VUJ1xuICApIHtcbiAgICAvLyBFcnJvciBpcyBub3QgY2F1c2VkIGJ5IHJ1bm5pbmcgcmVxdWVzdCBhbmQgbm90IGEgcmVjb3ZlcmFibGVcbiAgICAvLyBzb2NrZXQgZXJyb3IuXG5cbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nSWR4XSA9PT0gY2xpZW50W2tSdW5uaW5nSWR4XSlcblxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgICBhc3NlcnQoY2xpZW50W2tTaXplXSA9PT0gMClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Q2xpZW50fSBjbGllbnRcbiAqIEByZXR1cm5zXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKGNsaWVudCkge1xuICBhc3NlcnQoIWNsaWVudFtrQ29ubmVjdGluZ10pXG4gIGFzc2VydCghY2xpZW50W2tIVFRQQ29udGV4dF0pXG5cbiAgbGV0IHsgaG9zdCwgaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0IH0gPSBjbGllbnRba1VybF1cblxuICAvLyBSZXNvbHZlIGlwdjZcbiAgaWYgKGhvc3RuYW1lWzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0bmFtZS5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIGNvbnN0IGlwID0gaG9zdG5hbWUuc3Vic3RyaW5nKDEsIGlkeClcblxuICAgIGFzc2VydChuZXQuaXNJUChpcCkpXG4gICAgaG9zdG5hbWUgPSBpcFxuICB9XG5cbiAgY2xpZW50W2tDb25uZWN0aW5nXSA9IHRydWVcblxuICBpZiAoY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QucHVibGlzaCh7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgdmVyc2lvbjogY2xpZW50W2tIVFRQQ29udGV4dF0/LnZlcnNpb24sXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LFxuICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl1cbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjbGllbnRba0Nvbm5lY3Rvcl0oe1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LCAoZXJyLCBzb2NrZXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0Lm9uKCdlcnJvcicsIG5vb3ApLCBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydChzb2NrZXQpXG5cbiAgICB0cnkge1xuICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0gPSBzb2NrZXQuYWxwblByb3RvY29sID09PSAnaDInXG4gICAgICAgID8gYXdhaXQgY29ubmVjdEgyKGNsaWVudCwgc29ja2V0KVxuICAgICAgICA6IGF3YWl0IGNvbm5lY3RIMShjbGllbnQsIHNvY2tldClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNvY2tldC5kZXN0cm95KCkub24oJ2Vycm9yJywgbm9vcClcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIGNsaWVudFtrQ29ubmVjdGluZ10gPSBmYWxzZVxuXG4gICAgc29ja2V0W2tDb3VudGVyXSA9IDBcbiAgICBzb2NrZXRba01heFJlcXVlc3RzXSA9IGNsaWVudFtrTWF4UmVxdWVzdHNdXG4gICAgc29ja2V0W2tDbGllbnRdID0gY2xpZW50XG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdGVkLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0ZWQucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgdmVyc2lvbjogY2xpZW50W2tIVFRQQ29udGV4dF0/LnZlcnNpb24sXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgc29ja2V0XG4gICAgICB9KVxuICAgIH1cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RFcnJvci5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICB2ZXJzaW9uOiBjbGllbnRba0hUVFBDb250ZXh0XT8udmVyc2lvbixcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcbiAgICAgIHdoaWxlIChjbGllbnRba1BlbmRpbmddID4gMCAmJiBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXS5zZXJ2ZXJuYW1lID09PSBjbGllbnRba1NlcnZlck5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdKytdXG4gICAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkVycm9yKGNsaWVudCwgZXJyKVxuICAgIH1cblxuICAgIGNsaWVudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBlcnIpXG4gIH1cblxuICBjbGllbnRba1Jlc3VtZV0oKVxufVxuXG5mdW5jdGlvbiBlbWl0RHJhaW4gKGNsaWVudCkge1xuICBjbGllbnRba05lZWREcmFpbl0gPSAwXG4gIGNsaWVudC5lbWl0KCdkcmFpbicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG59XG5cbmZ1bmN0aW9uIHJlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIGlmIChjbGllbnRba1Jlc3VtaW5nXSA9PT0gMikge1xuICAgIHJldHVyblxuICB9XG5cbiAgY2xpZW50W2tSZXN1bWluZ10gPSAyXG5cbiAgX3Jlc3VtZShjbGllbnQsIHN5bmMpXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMFxuXG4gIGlmIChjbGllbnRba1J1bm5pbmdJZHhdID4gMjU2KSB7XG4gICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKDAsIGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSAtPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gICAgY2xpZW50W2tSdW5uaW5nSWR4XSA9IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDbG9zZWRSZXNvbHZlXSAmJiAhY2xpZW50W2tTaXplXSkge1xuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrSFRUUENvbnRleHRdKSB7XG4gICAgICBjbGllbnRba0hUVFBDb250ZXh0XS5yZXN1bWUoKVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0J1c3ldKSB7XG4gICAgICBjbGllbnRba05lZWREcmFpbl0gPSAyXG4gICAgfSBlbHNlIGlmIChjbGllbnRba05lZWREcmFpbl0gPT09IDIpIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDFcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZW1pdERyYWluKGNsaWVudCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGdldFBpcGVsaW5pbmcoY2xpZW50KSB8fCAxKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dXG5cbiAgICBpZiAoY2xpZW50W2tVcmxdLnByb3RvY29sID09PSAnaHR0cHM6JyAmJiBjbGllbnRba1NlcnZlck5hbWVdICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY2xpZW50W2tTZXJ2ZXJOYW1lXSA9IHJlcXVlc3Quc2VydmVybmFtZVxuICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0/LmRlc3Ryb3kobmV3IEluZm9ybWF0aW9uYWxFcnJvcignc2VydmVybmFtZSBjaGFuZ2VkJyksICgpID0+IHtcbiAgICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0gPSBudWxsXG4gICAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nvbm5lY3RpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWNsaWVudFtrSFRUUENvbnRleHRdKSB7XG4gICAgICBjb25uZWN0KGNsaWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0hUVFBDb250ZXh0XS5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0hUVFBDb250ZXh0XS5idXN5KHJlcXVlc3QpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiBjbGllbnRba0hUVFBDb250ZXh0XS53cml0ZShyZXF1ZXN0KSkge1xuICAgICAgY2xpZW50W2tQZW5kaW5nSWR4XSsrXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1BlbmRpbmdJZHhdLCAxKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFxuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vLyBFeHRyYWN0ZWQgZnJvbSBub2RlL2xpYi9pbnRlcm5hbC9maXhlZF9xdWV1ZS5qc1xuXG4vLyBDdXJyZW50bHkgb3B0aW1hbCBxdWV1ZSBzaXplLCB0ZXN0ZWQgb24gVjggNi4wIC0gNi42LiBNdXN0IGJlIHBvd2VyIG9mIHR3by5cbmNvbnN0IGtTaXplID0gMjA0ODtcbmNvbnN0IGtNYXNrID0ga1NpemUgLSAxO1xuXG4vLyBUaGUgRml4ZWRRdWV1ZSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBmaXhlZC1zaXplXG4vLyBjaXJjdWxhciBidWZmZXJzLiBJdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuLy9cbi8vICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxcbi8vICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLy8gICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2XG4vLyArLS0tLS0tLS0tLS0rIDwtLS0tLVxcICAgICAgICstLS0tLS0tLS0tLSsgPC0tLS0tLVxcICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgXFwtLS0tLSB8ICAgbmV4dCAgICB8ICAgICAgICAgXFwtLS0tLS0tIHwgICBuZXh0ICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8IDwtLSB0b3AgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gT3IsIGlmIHRoZXJlIGlzIG9ubHkgb25lIGNpcmN1bGFyIGJ1ZmZlciwgaXQgbG9va3Mgc29tZXRoaW5nXG4vLyBsaWtlIGVpdGhlciBvZiB0aGVzZTpcbi8vXG4vLyAgaGVhZCAgIHRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICAgdGFpbFxuLy8gICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8XG4vLyAgICB2ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbbnVsbF0gICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgICAgICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIEFkZGluZyBhIHZhbHVlIG1lYW5zIG1vdmluZyBgdG9wYCBmb3J3YXJkIGJ5IG9uZSwgcmVtb3ZpbmcgbWVhbnNcbi8vIG1vdmluZyBgYm90dG9tYCBmb3J3YXJkIGJ5IG9uZS4gQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCwgdGhlIHF1ZXVlXG4vLyB3cmFwcyBhcm91bmQuXG4vL1xuLy8gV2hlbiBgdG9wID09PSBib3R0b21gIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGVtcHR5IGFuZCB3aGVuXG4vLyBgdG9wICsgMSA9PT0gYm90dG9tYCBpdCdzIGZ1bGwuIFRoaXMgd2FzdGVzIGEgc2luZ2xlIHNwYWNlIG9mIHN0b3JhZ2Vcbi8vIGJ1dCBhbGxvd3MgbXVjaCBxdWlja2VyIGNoZWNrcy5cblxuY2xhc3MgRml4ZWRDaXJjdWxhckJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYm90dG9tID0gMDtcbiAgICB0aGlzLnRvcCA9IDA7XG4gICAgdGhpcy5saXN0ID0gbmV3IEFycmF5KGtTaXplKTtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy50b3AgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgaXNGdWxsKCkge1xuICAgIHJldHVybiAoKHRoaXMudG9wICsgMSkgJiBrTWFzaykgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgdGhpcy5saXN0W3RoaXMudG9wXSA9IGRhdGE7XG4gICAgdGhpcy50b3AgPSAodGhpcy50b3AgKyAxKSAmIGtNYXNrO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLmxpc3RbdGhpcy5ib3R0b21dO1xuICAgIGlmIChuZXh0SXRlbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5saXN0W3RoaXMuYm90dG9tXSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJvdHRvbSA9ICh0aGlzLmJvdHRvbSArIDEpICYga01hc2s7XG4gICAgcmV0dXJuIG5leHRJdGVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuaXNFbXB0eSgpO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgaWYgKHRoaXMuaGVhZC5pc0Z1bGwoKSkge1xuICAgICAgLy8gSGVhZCBpcyBmdWxsOiBDcmVhdGVzIGEgbmV3IHF1ZXVlLCBzZXRzIHRoZSBvbGQgcXVldWUncyBgLm5leHRgIHRvIGl0LFxuICAgICAgLy8gYW5kIHNldHMgaXQgYXMgdGhlIG5ldyBtYWluIHF1ZXVlLlxuICAgICAgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICAgIH1cbiAgICB0aGlzLmhlYWQucHVzaChkYXRhKTtcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgY29uc3QgbmV4dCA9IHRhaWwuc2hpZnQoKTtcbiAgICBpZiAodGFpbC5pc0VtcHR5KCkgJiYgdGFpbC5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhbm90aGVyIHF1ZXVlLCBpdCBmb3JtcyB0aGUgbmV3IHRhaWwuXG4gICAgICB0aGlzLnRhaWwgPSB0YWlsLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0O1xuICB9XG59O1xuIiwgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBrUG9vbCA9IFN5bWJvbCgncG9vbCcpXG5cbmNsYXNzIFBvb2xTdGF0cyB7XG4gIGNvbnN0cnVjdG9yIChwb29sKSB7XG4gICAgdGhpc1trUG9vbF0gPSBwb29sXG4gIH1cblxuICBnZXQgY29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIGdldCBmcmVlICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0ZyZWVdXG4gIH1cblxuICBnZXQgcGVuZGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tQZW5kaW5nXVxuICB9XG5cbiAgZ2V0IHF1ZXVlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tRdWV1ZWRdXG4gIH1cblxuICBnZXQgcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tSdW5uaW5nXVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrU2l6ZV1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xTdGF0c1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL2ZpeGVkLXF1ZXVlJylcbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUsIGtSdW5uaW5nLCBrUGVuZGluZywga1F1ZXVlZCwga0J1c3ksIGtGcmVlLCBrVXJsLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBQb29sU3RhdHMgPSByZXF1aXJlKCcuL3Bvb2wtc3RhdHMnKVxuXG5jb25zdCBrQ2xpZW50cyA9IFN5bWJvbCgnY2xpZW50cycpXG5jb25zdCBrTmVlZERyYWluID0gU3ltYm9sKCduZWVkRHJhaW4nKVxuY29uc3Qga1F1ZXVlID0gU3ltYm9sKCdxdWV1ZScpXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgnY2xvc2VkIHJlc29sdmUnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtHZXREaXNwYXRjaGVyID0gU3ltYm9sKCdnZXQgZGlzcGF0Y2hlcicpXG5jb25zdCBrQWRkQ2xpZW50ID0gU3ltYm9sKCdhZGQgY2xpZW50JylcbmNvbnN0IGtSZW1vdmVDbGllbnQgPSBTeW1ib2woJ3JlbW92ZSBjbGllbnQnKVxuY29uc3Qga1N0YXRzID0gU3ltYm9sKCdzdGF0cycpXG5cbmNsYXNzIFBvb2xCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBuZXcgRml4ZWRRdWV1ZSgpXG4gICAgdGhpc1trQ2xpZW50c10gPSBbXVxuICAgIHRoaXNba1F1ZXVlZF0gPSAwXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSBmdW5jdGlvbiBvbkRyYWluIChvcmlnaW4sIHRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHF1ZXVlID0gcG9vbFtrUXVldWVdXG5cbiAgICAgIGxldCBuZWVkRHJhaW4gPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIW5lZWREcmFpbikge1xuICAgICAgICBjb25zdCBpdGVtID0gcXVldWUuc2hpZnQoKVxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHBvb2xba1F1ZXVlZF0tLVxuICAgICAgICBuZWVkRHJhaW4gPSAhdGhpcy5kaXNwYXRjaChpdGVtLm9wdHMsIGl0ZW0uaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpc1trTmVlZERyYWluXSA9IG5lZWREcmFpblxuXG4gICAgICBpZiAoIXRoaXNba05lZWREcmFpbl0gJiYgcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBwb29sW2tOZWVkRHJhaW5dID0gZmFsc2VcbiAgICAgICAgcG9vbC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgICAgfVxuXG4gICAgICBpZiAocG9vbFtrQ2xvc2VkUmVzb2x2ZV0gJiYgcXVldWUuaXNFbXB0eSgpKSB7XG4gICAgICAgIFByb21pc2VcbiAgICAgICAgICAuYWxsKHBvb2xba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgICAgICAgLnRoZW4ocG9vbFtrQ2xvc2VkUmVzb2x2ZV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uRGlzY29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdHNdID0gbmV3IFBvb2xTdGF0cyh0aGlzKVxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrRnJlZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSAmJiAhY2xpZW50W2tOZWVkRHJhaW5dKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1BlbmRpbmddOiBwZW5kaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBwZW5kaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICBsZXQgcmV0ID0gMFxuICAgIGZvciAoY29uc3QgeyBba1J1bm5pbmddOiBydW5uaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBydW5uaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1NpemVdOiBzaXplIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBzaXplXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBzdGF0cyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1N0YXRzXVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGlmICh0aGlzW2tRdWV1ZV0uaXNFbXB0eSgpKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzW2tRdWV1ZV0uc2hpZnQoKVxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpdGVtLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpc1trQ2xpZW50c10ubWFwKGMgPT4gYy5kZXN0cm95KGVycikpKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trUXVldWVdLnB1c2goeyBvcHRzLCBoYW5kbGVyIH0pXG4gICAgICB0aGlzW2tRdWV1ZWRdKytcbiAgICB9IGVsc2UgaWYgKCFkaXNwYXRjaGVyLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpKSB7XG4gICAgICBkaXNwYXRjaGVyW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trTmVlZERyYWluXSA9ICF0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBba0FkZENsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudFxuICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgIC5vbignZGlzY29ubmVjdCcsIHRoaXNba09uRGlzY29ubmVjdF0pXG4gICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgIHRoaXNba0NsaWVudHNdLnB1c2goY2xpZW50KVxuXG4gICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgICAgICB0aGlzW2tPbkRyYWluXShjbGllbnRba1VybF0sIFt0aGlzLCBjbGllbnRdKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBba1JlbW92ZUNsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudC5jbG9zZSgoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKGNsaWVudClcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXNba05lZWREcmFpbl0gPSB0aGlzW2tDbGllbnRzXS5zb21lKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrQ29ubmVjdGlvbnMgPSBTeW1ib2woJ2Nvbm5lY3Rpb25zJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBjb25uZWN0aW9ucyxcbiAgICBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksXG4gICAgY29ubmVjdCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICB0bHMsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgc29ja2V0UGF0aCxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICBhbGxvd0gyLFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgaWYgKGNvbm5lY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdGlvbnMpIHx8IGNvbm5lY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9ucycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4oYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHN1cGVyKG9wdGlvbnMpXG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM/LlBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sKVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trQ29ubmVjdGlvbnNdID0gY29ubmVjdGlvbnMgfHwgbnVsbFxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKG9yaWdpbilcbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QsIGFsbG93SDIgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIHRoaXMub24oJ2Nvbm5lY3Rpb25FcnJvcicsIChvcmlnaW4sIHRhcmdldHMsIGVycm9yKSA9PiB7XG4gICAgICAvLyBJZiBhIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJzLCB3ZSByZW1vdmUgdGhlIGNsaWVudCBmcm9tIHRoZSBwb29sLFxuICAgICAgLy8gYW5kIGVtaXQgYSBjb25uZWN0aW9uRXJyb3IgZXZlbnQuIFRoZXkgd2lsbCBub3QgYmUgcmUtdXNlZC5cbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8zODk1XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIC8vIERvIG5vdCB1c2Uga1JlbW92ZUNsaWVudCBoZXJlLCBhcyBpdCB3aWxsIGNsb3NlIHRoZSBjbGllbnQsXG4gICAgICAgIC8vIGJ1dCB0aGUgY2xpZW50IGNhbm5vdCBiZSBjbG9zZWQgaW4gdGhpcyBzdGF0ZS5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZih0YXJnZXQpXG4gICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgaWYgKCFjbGllbnRba05lZWREcmFpbl0pIHtcbiAgICAgICAgcmV0dXJuIGNsaWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHBhcnNlT3JpZ2luIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrR3JlYXRlc3RDb21tb25EaXZpc29yID0gU3ltYm9sKCdrR3JlYXRlc3RDb21tb25EaXZpc29yJylcbmNvbnN0IGtDdXJyZW50V2VpZ2h0ID0gU3ltYm9sKCdrQ3VycmVudFdlaWdodCcpXG5jb25zdCBrSW5kZXggPSBTeW1ib2woJ2tJbmRleCcpXG5jb25zdCBrV2VpZ2h0ID0gU3ltYm9sKCdrV2VpZ2h0JylcbmNvbnN0IGtNYXhXZWlnaHRQZXJTZXJ2ZXIgPSBTeW1ib2woJ2tNYXhXZWlnaHRQZXJTZXJ2ZXInKVxuY29uc3Qga0Vycm9yUGVuYWx0eSA9IFN5bWJvbCgna0Vycm9yUGVuYWx0eScpXG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gbnVtYmVycyBieVxuICogdXNpbmcgdGhlIEV1Y2xpZGVhbiBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGEgPT09IDApIHJldHVybiBiXG5cbiAgd2hpbGUgKGIgIT09IDApIHtcbiAgICBjb25zdCB0ID0gYlxuICAgIGIgPSBhICUgYlxuICAgIGEgPSB0XG4gIH1cbiAgcmV0dXJuIGFcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh1cHN0cmVhbXMgPSBbXSwgeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIC4uLm9wdHMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSBvcHRzXG4gICAgdGhpc1trSW5kZXhdID0gLTFcbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IDBcblxuICAgIHRoaXNba01heFdlaWdodFBlclNlcnZlcl0gPSB0aGlzW2tPcHRpb25zXS5tYXhXZWlnaHRQZXJTZXJ2ZXIgfHwgMTAwXG4gICAgdGhpc1trRXJyb3JQZW5hbHR5XSA9IHRoaXNba09wdGlvbnNdLmVycm9yUGVuYWx0eSB8fCAxNVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVwc3RyZWFtcykpIHtcbiAgICAgIHVwc3RyZWFtcyA9IFt1cHN0cmVhbXNdXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzPy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIGxldCByZXN1bHQgPSAwXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzW2tDbGllbnRzXS5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ID0gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yKHRoaXNba0NsaWVudHNdW2ldW2tXZWlnaHRdLCByZXN1bHQpXG4gICAgfVxuXG4gICAgdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXSA9IHJlc3VsdFxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrQ2xpZW50cywga1J1bm5pbmcsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvcicpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIG9wdHMuY29ubmVjdGlvbnMgPT09IDFcbiAgICA/IG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxuICAgIDogbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCBtYXhSZWRpcmVjdGlvbnMgPSAwLCBjb25uZWN0LCAuLi5vcHRpb25zIH0gPSB7fSkge1xuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM/LkFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0IH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuICAgIHRoaXNba0NsaWVudHNdID0gbmV3IE1hcCgpXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFt0aGlzLCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgcmV0ICs9IGNsaWVudFtrUnVubmluZ11cbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBsZXQga2V5XG4gICAgaWYgKG9wdHMub3JpZ2luICYmICh0eXBlb2Ygb3B0cy5vcmlnaW4gPT09ICdzdHJpbmcnIHx8IG9wdHMub3JpZ2luIGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAga2V5ID0gU3RyaW5nKG9wdHMub3JpZ2luKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMub3JpZ2luIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIFVSTC4nKVxuICAgIH1cblxuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9wdHMub3JpZ2luLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgICAgLy8gVGhpcyBpbnRyb2R1Y2VzIGEgdGlueSBtZW1vcnkgbGVhaywgYXMgZGlzcGF0Y2hlcnMgYXJlIG5ldmVyIHJlbW92ZWQgZnJvbSB0aGUgbWFwLlxuICAgICAgLy8gVE9ETyhtY29sbGluYSk6IHJlbW92ZSB0ZSB0aW1lciB3aGVuIHRoZSBjbGllbnQvcG9vbCBkbyBub3QgaGF2ZSBhbnkgbW9yZVxuICAgICAgLy8gYWN0aXZlIGNvbm5lY3Rpb25zLlxuICAgICAgdGhpc1trQ2xpZW50c10uc2V0KGtleSwgZGlzcGF0Y2hlcilcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjbG9zZVByb21pc2VzLnB1c2goY2xpZW50LmNsb3NlKCkpXG4gICAgfVxuICAgIHRoaXNba0NsaWVudHNdLmNsZWFyKClcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgIH1cbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChkZXN0cm95UHJvbWlzZXMpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBZ2VudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtQcm94eSwga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBVUkwgfSA9IHJlcXVpcmUoJ25vZGU6dXJsJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi4vY29yZS9jb25uZWN0JylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcblxuY29uc3Qga0FnZW50ID0gU3ltYm9sKCdwcm94eSBhZ2VudCcpXG5jb25zdCBrQ2xpZW50ID0gU3ltYm9sKCdwcm94eSBjbGllbnQnKVxuY29uc3Qga1Byb3h5SGVhZGVycyA9IFN5bWJvbCgncHJveHkgaGVhZGVycycpXG5jb25zdCBrUmVxdWVzdFRscyA9IFN5bWJvbCgncmVxdWVzdCB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga1Byb3h5VGxzID0gU3ltYm9sKCdwcm94eSB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga0Nvbm5lY3RFbmRwb2ludCA9IFN5bWJvbCgnY29ubmVjdCBlbmRwb2ludCBmdW5jdGlvbicpXG5jb25zdCBrVHVubmVsUHJveHkgPSBTeW1ib2woJ3R1bm5lbCBwcm94eScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm90b2NvbFBvcnQgKHByb3RvY29sKSB7XG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MFxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5mdW5jdGlvbiBkZWZhdWx0QWdlbnRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgaWYgKG9wdHMuY29ubmVjdGlvbnMgPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG4gIH1cbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgSHR0cDFQcm94eVdyYXBwZXIgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gICNjbGllbnRcblxuICBjb25zdHJ1Y3RvciAocHJveHlVcmwsIHsgaGVhZGVycyA9IHt9LCBjb25uZWN0LCBmYWN0b3J5IH0pIHtcbiAgICBzdXBlcigpXG4gICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBVUkwgaXMgbWFuZGF0b3J5JylcbiAgICB9XG5cbiAgICB0aGlzW2tQcm94eUhlYWRlcnNdID0gaGVhZGVyc1xuICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICB0aGlzLiNjbGllbnQgPSBmYWN0b3J5KHByb3h5VXJsLCB7IGNvbm5lY3QgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jY2xpZW50ID0gbmV3IENsaWVudChwcm94eVVybCwgeyBjb25uZWN0IH0pXG4gICAgfVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvbkhlYWRlcnMgPSBoYW5kbGVyLm9uSGVhZGVyc1xuICAgIGhhbmRsZXIub25IZWFkZXJzID0gZnVuY3Rpb24gKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3VtZSkge1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwNykge1xuICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGhhbmRsZXIub25FcnJvcihuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkICg0MDcpJykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25IZWFkZXJzKSBvbkhlYWRlcnMuY2FsbCh0aGlzLCBzdGF0dXNDb2RlLCBkYXRhLCByZXN1bWUpXG4gICAgfVxuXG4gICAgLy8gUmV3cml0ZSByZXF1ZXN0IGFzIGFuIEhUVFAxIFByb3h5IHJlcXVlc3QsIHdpdGhvdXQgdHVubmVsaW5nLlxuICAgIGNvbnN0IHtcbiAgICAgIG9yaWdpbixcbiAgICAgIHBhdGggPSAnLycsXG4gICAgICBoZWFkZXJzID0ge31cbiAgICB9ID0gb3B0c1xuXG4gICAgb3B0cy5wYXRoID0gb3JpZ2luICsgcGF0aFxuXG4gICAgaWYgKCEoJ2hvc3QnIGluIGhlYWRlcnMpICYmICEoJ0hvc3QnIGluIGhlYWRlcnMpKSB7XG4gICAgICBjb25zdCB7IGhvc3QgfSA9IG5ldyBVUkwob3JpZ2luKVxuICAgICAgaGVhZGVycy5ob3N0ID0gaG9zdFxuICAgIH1cbiAgICBvcHRzLmhlYWRlcnMgPSB7IC4uLnRoaXNba1Byb3h5SGVhZGVyc10sIC4uLmhlYWRlcnMgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudFtrRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudC5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICByZXR1cm4gdGhpcy4jY2xpZW50LmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmNsYXNzIFByb3h5QWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKCFvcHRzIHx8ICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgIShvcHRzIGluc3RhbmNlb2YgVVJMKSAmJiAhb3B0cy51cmkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IHVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG4gICAgaWYgKHR5cGVvZiBjbGllbnRGYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMuY2xpZW50RmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHByb3h5VHVubmVsID0gdHJ1ZSB9ID0gb3B0c1xuXG4gICAgY29uc3QgdXJsID0gdGhpcy4jZ2V0VXJsKG9wdHMpXG4gICAgY29uc3QgeyBocmVmLCBvcmlnaW4sIHBvcnQsIHByb3RvY29sLCB1c2VybmFtZSwgcGFzc3dvcmQsIGhvc3RuYW1lOiBwcm94eUhvc3RuYW1lIH0gPSB1cmxcblxuICAgIHRoaXNba1Byb3h5XSA9IHsgdXJpOiBocmVmLCBwcm90b2NvbCB9XG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzPy5Qcm94eUFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudFxuICAgICAgOiBbXVxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cbiAgICB0aGlzW2tUdW5uZWxQcm94eV0gPSBwcm94eVR1bm5lbFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG5cbiAgICBjb25zdCBhZ2VudEZhY3RvcnkgPSBvcHRzLmZhY3RvcnkgfHwgZGVmYXVsdEFnZW50RmFjdG9yeVxuICAgIGNvbnN0IGZhY3RvcnkgPSAob3JpZ2luLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCB7IHByb3RvY29sIH0gPSBuZXcgVVJMKG9yaWdpbilcbiAgICAgIGlmICghdGhpc1trVHVubmVsUHJveHldICYmIHByb3RvY29sID09PSAnaHR0cDonICYmIHRoaXNba1Byb3h5XS5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHAxUHJveHlXcmFwcGVyKHRoaXNba1Byb3h5XS51cmksIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgIGNvbm5lY3QsXG4gICAgICAgICAgZmFjdG9yeTogYWdlbnRGYWN0b3J5XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gYWdlbnRGYWN0b3J5KG9yaWdpbiwgb3B0aW9ucylcbiAgICB9XG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkodXJsLCB7IGNvbm5lY3QgfSlcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGZhY3RvcnksXG4gICAgICBjb25uZWN0OiBhc3luYyAob3B0cywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZFBhdGggPSBvcHRzLmhvc3RcbiAgICAgICAgaWYgKCFvcHRzLnBvcnQpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRQYXRoICs9IGA6JHtkZWZhdWx0UHJvdG9jb2xQb3J0KG9wdHMucHJvdG9jb2wpfWBcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgc29ja2V0LCBzdGF0dXNDb2RlIH0gPSBhd2FpdCB0aGlzW2tDbGllbnRdLmNvbm5lY3Qoe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHJlcXVlc3RlZFBhdGgsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgICAgICBob3N0OiBvcHRzLmhvc3RcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXJ2ZXJuYW1lOiB0aGlzW2tQcm94eVRsc10/LnNlcnZlcm5hbWUgfHwgcHJveHlIb3N0bmFtZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIG5vb3ApLmRlc3Ryb3koKVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoYFByb3h5IHJlc3BvbnNlICgke3N0YXR1c0NvZGV9KSAhPT0gMjAwIHdoZW4gSFRUUCBUdW5uZWxpbmdgKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdHMucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzb2NrZXQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHNlcnZlcm5hbWVcbiAgICAgICAgICBpZiAodGhpc1trUmVxdWVzdFRsc10pIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSB0aGlzW2tSZXF1ZXN0VGxzXS5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSh7IC4uLm9wdHMsIHNlcnZlcm5hbWUsIGh0dHBTb2NrZXQ6IHNvY2tldCB9LCBjYWxsYmFjaylcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpIHtcbiAgICAgICAgICAgIC8vIFRocm93IGEgY3VzdG9tIGVycm9yIHRvIGF2b2lkIGxvb3AgaW4gY2xpZW50LmpzI2Nvbm5lY3RcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvcihlcnIpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IGJ1aWxkSGVhZGVycyhvcHRzLmhlYWRlcnMpXG4gICAgdGhyb3dJZlByb3h5QXV0aElzU2VudChoZWFkZXJzKVxuXG4gICAgaWYgKGhlYWRlcnMgJiYgISgnaG9zdCcgaW4gaGVhZGVycykgJiYgISgnSG9zdCcgaW4gaGVhZGVycykpIHtcbiAgICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICAgIGhlYWRlcnMuaG9zdCA9IGhvc3RcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBoZWFkZXJzXG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvcHJveHktYWdlbnQnKS5Qcm94eUFnZW50Lk9wdGlvbnMgfCBzdHJpbmcgfCBVUkx9IG9wdHNcbiAgICogQHJldHVybnMge1VSTH1cbiAgICovXG4gICNnZXRVcmwgKG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChvcHRzKVxuICAgIH0gZWxzZSBpZiAob3B0cyBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgcmV0dXJuIG9wdHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBVUkwob3B0cy51cmkpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uZGVzdHJveSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5kZXN0cm95KClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzIChoZWFkZXJzKSB7XG4gIC8vIFdoZW4gdXNpbmcgdW5kaWNpLmZldGNoLCB0aGUgaGVhZGVycyBsaXN0IGlzIHN0b3JlZFxuICAvLyBhcyBhbiBhcnJheS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3QgaGVhZGVyc1BhaXIgPSB7fVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBoZWFkZXJzUGFpcltoZWFkZXJzW2ldXSA9IGhlYWRlcnNbaSArIDFdXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNQYWlyXG4gIH1cblxuICByZXR1cm4gaGVhZGVyc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICpcbiAqIFByZXZpb3VzIHZlcnNpb25zIG9mIFByb3h5QWdlbnQgc3VnZ2VzdHMgdGhlIFByb3h5LUF1dGhvcml6YXRpb24gaW4gcmVxdWVzdCBoZWFkZXJzXG4gKiBOZXZlcnRoZWxlc3MsIGl0IHdhcyBjaGFuZ2VkIGFuZCB0byBhdm9pZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYnkgZW5kIHVzZXJzXG4gKiB0aGlzIGNoZWNrIHdhcyBjcmVhdGVkLlxuICogSXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICovXG5mdW5jdGlvbiB0aHJvd0lmUHJveHlBdXRoSXNTZW50IChoZWFkZXJzKSB7XG4gIGNvbnN0IGV4aXN0UHJveHlBdXRoID0gaGVhZGVycyAmJiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5maW5kKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSAncHJveHktYXV0aG9yaXphdGlvbicpXG4gIGlmIChleGlzdFByb3h5QXV0aCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgYmUgc2VudCBpbiBQcm94eUFnZW50IGNvbnN0cnVjdG9yJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3h5QWdlbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IGtDbG9zZSwga0Rlc3Ryb3ksIGtDbG9zZWQsIGtEZXN0cm95ZWQsIGtEaXNwYXRjaCwga05vUHJveHlBZ2VudCwga0h0dHBQcm94eUFnZW50LCBrSHR0cHNQcm94eUFnZW50IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vcHJveHktYWdlbnQnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuY29uc3QgREVGQVVMVF9QT1JUUyA9IHtcbiAgJ2h0dHA6JzogODAsXG4gICdodHRwczonOiA0NDNcbn1cblxubGV0IGV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNsYXNzIEVudkh0dHBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAjbm9Qcm94eVZhbHVlID0gbnVsbFxuICAjbm9Qcm94eUVudHJpZXMgPSBudWxsXG4gICNvcHRzID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy4jb3B0cyA9IG9wdHNcblxuICAgIGlmICghZXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICBleHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdFbnZIdHRwUHJveHlBZ2VudCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgIGNvZGU6ICdVTkRJQ0ktRUhQQSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgeyBodHRwUHJveHksIGh0dHBzUHJveHksIG5vUHJveHksIC4uLmFnZW50T3B0cyB9ID0gb3B0c1xuXG4gICAgdGhpc1trTm9Qcm94eUFnZW50XSA9IG5ldyBBZ2VudChhZ2VudE9wdHMpXG5cbiAgICBjb25zdCBIVFRQX1BST1hZID0gaHR0cFByb3h5ID8/IHByb2Nlc3MuZW52Lmh0dHBfcHJveHkgPz8gcHJvY2Vzcy5lbnYuSFRUUF9QUk9YWVxuICAgIGlmIChIVFRQX1BST1hZKSB7XG4gICAgICB0aGlzW2tIdHRwUHJveHlBZ2VudF0gPSBuZXcgUHJveHlBZ2VudCh7IC4uLmFnZW50T3B0cywgdXJpOiBIVFRQX1BST1hZIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0h0dHBQcm94eUFnZW50XSA9IHRoaXNba05vUHJveHlBZ2VudF1cbiAgICB9XG5cbiAgICBjb25zdCBIVFRQU19QUk9YWSA9IGh0dHBzUHJveHkgPz8gcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHkgPz8gcHJvY2Vzcy5lbnYuSFRUUFNfUFJPWFlcbiAgICBpZiAoSFRUUFNfUFJPWFkpIHtcbiAgICAgIHRoaXNba0h0dHBzUHJveHlBZ2VudF0gPSBuZXcgUHJveHlBZ2VudCh7IC4uLmFnZW50T3B0cywgdXJpOiBIVFRQU19QUk9YWSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdID0gdGhpc1trSHR0cFByb3h5QWdlbnRdXG4gICAgfVxuXG4gICAgdGhpcy4jcGFyc2VOb1Byb3h5KClcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBhZ2VudCA9IHRoaXMuI2dldFByb3h5QWdlbnRGb3JVcmwodXJsKVxuICAgIHJldHVybiBhZ2VudC5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba05vUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIGlmICghdGhpc1trSHR0cFByb3h5QWdlbnRdW2tDbG9zZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIH1cbiAgICBpZiAoIXRoaXNba0h0dHBzUHJveHlBZ2VudF1ba0Nsb3NlZF0pIHtcbiAgICAgIGF3YWl0IHRoaXNba0h0dHBzUHJveHlBZ2VudF0uY2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIGF3YWl0IHRoaXNba05vUHJveHlBZ2VudF0uZGVzdHJveShlcnIpXG4gICAgaWYgKCF0aGlzW2tIdHRwUHJveHlBZ2VudF1ba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGF3YWl0IHRoaXNba0h0dHBQcm94eUFnZW50XS5kZXN0cm95KGVycilcbiAgICB9XG4gICAgaWYgKCF0aGlzW2tIdHRwc1Byb3h5QWdlbnRdW2tEZXN0cm95ZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdLmRlc3Ryb3koZXJyKVxuICAgIH1cbiAgfVxuXG4gICNnZXRQcm94eUFnZW50Rm9yVXJsICh1cmwpIHtcbiAgICBsZXQgeyBwcm90b2NvbCwgaG9zdDogaG9zdG5hbWUsIHBvcnQgfSA9IHVybFxuXG4gICAgLy8gU3RyaXBwaW5nIHBvcnRzIGluIHRoaXMgd2F5IGluc3RlYWQgb2YgdXNpbmcgcGFyc2VkVXJsLmhvc3RuYW1lIHRvIG1ha2VcbiAgICAvLyBzdXJlIHRoYXQgdGhlIGJyYWNrZXRzIGFyb3VuZCBJUHY2IGFkZHJlc3NlcyBhcmUga2VwdC5cbiAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoLzpcXGQqJC8sICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgcG9ydCA9IE51bWJlci5wYXJzZUludChwb3J0LCAxMCkgfHwgREVGQVVMVF9QT1JUU1twcm90b2NvbF0gfHwgMFxuICAgIGlmICghdGhpcy4jc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpKSB7XG4gICAgICByZXR1cm4gdGhpc1trTm9Qcm94eUFnZW50XVxuICAgIH1cbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICByZXR1cm4gdGhpc1trSHR0cHNQcm94eUFnZW50XVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1trSHR0cFByb3h5QWdlbnRdXG4gIH1cblxuICAjc2hvdWxkUHJveHkgKGhvc3RuYW1lLCBwb3J0KSB7XG4gICAgaWYgKHRoaXMuI25vUHJveHlDaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNwYXJzZU5vUHJveHkoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLiNub1Byb3h5RW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlIC8vIEFsd2F5cyBwcm94eSBpZiBOT19QUk9YWSBpcyBub3Qgc2V0IG9yIGVtcHR5LlxuICAgIH1cbiAgICBpZiAodGhpcy4jbm9Qcm94eVZhbHVlID09PSAnKicpIHtcbiAgICAgIHJldHVybiBmYWxzZSAvLyBOZXZlciBwcm94eSBpZiB3aWxkY2FyZCBpcyBzZXQuXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNub1Byb3h5RW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiNub1Byb3h5RW50cmllc1tpXVxuICAgICAgaWYgKGVudHJ5LnBvcnQgJiYgZW50cnkucG9ydCAhPT0gcG9ydCkge1xuICAgICAgICBjb250aW51ZSAvLyBTa2lwIGlmIHBvcnRzIGRvbid0IG1hdGNoLlxuICAgICAgfVxuICAgICAgaWYgKCEvXlsuKl0vLnRlc3QoZW50cnkuaG9zdG5hbWUpKSB7XG4gICAgICAgIC8vIE5vIHdpbGRjYXJkcywgc28gZG9uJ3QgcHJveHkgb25seSBpZiB0aGVyZSBpcyBub3QgYW4gZXhhY3QgbWF0Y2guXG4gICAgICAgIGlmIChob3N0bmFtZSA9PT0gZW50cnkuaG9zdG5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG9uJ3QgcHJveHkgaWYgdGhlIGhvc3RuYW1lIGVuZHMgd2l0aCB0aGUgbm9fcHJveHkgaG9zdC5cbiAgICAgICAgaWYgKGhvc3RuYW1lLmVuZHNXaXRoKGVudHJ5Lmhvc3RuYW1lLnJlcGxhY2UoL15cXCovLCAnJykpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgI3BhcnNlTm9Qcm94eSAoKSB7XG4gICAgY29uc3Qgbm9Qcm94eVZhbHVlID0gdGhpcy4jb3B0cy5ub1Byb3h5ID8/IHRoaXMuI25vUHJveHlFbnZcbiAgICBjb25zdCBub1Byb3h5U3BsaXQgPSBub1Byb3h5VmFsdWUuc3BsaXQoL1ssXFxzXS8pXG4gICAgY29uc3Qgbm9Qcm94eUVudHJpZXMgPSBbXVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub1Byb3h5U3BsaXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gbm9Qcm94eVNwbGl0W2ldXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBwYXJzZWQgPSBlbnRyeS5tYXRjaCgvXiguKyk6KFxcZCspJC8pXG4gICAgICBub1Byb3h5RW50cmllcy5wdXNoKHtcbiAgICAgICAgaG9zdG5hbWU6IChwYXJzZWQgPyBwYXJzZWRbMV0gOiBlbnRyeSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcG9ydDogcGFyc2VkID8gTnVtYmVyLnBhcnNlSW50KHBhcnNlZFsyXSwgMTApIDogMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLiNub1Byb3h5VmFsdWUgPSBub1Byb3h5VmFsdWVcbiAgICB0aGlzLiNub1Byb3h5RW50cmllcyA9IG5vUHJveHlFbnRyaWVzXG4gIH1cblxuICBnZXQgI25vUHJveHlDaGFuZ2VkICgpIHtcbiAgICBpZiAodGhpcy4jb3B0cy5ub1Byb3h5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jbm9Qcm94eVZhbHVlICE9PSB0aGlzLiNub1Byb3h5RW52XG4gIH1cblxuICBnZXQgI25vUHJveHlFbnYgKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5ub19wcm94eSA/PyBwcm9jZXNzLmVudi5OT19QUk9YWSA/PyAnJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW52SHR0cFByb3h5QWdlbnRcbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuY29uc3QgeyBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBSZXF1ZXN0UmV0cnlFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBpc0Rpc3R1cmJlZCxcbiAgcGFyc2VIZWFkZXJzLFxuICBwYXJzZVJhbmdlSGVhZGVyLFxuICB3cmFwUmVxdWVzdEJvZHlcbn0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyIChyZXRyeUFmdGVyKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBEYXRlLm5vdygpXG4gIHJldHVybiBuZXcgRGF0ZShyZXRyeUFmdGVyKS5nZXRUaW1lKCkgLSBjdXJyZW50XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aCAoaGVhZGVycywgcmFuZ2UsIHN0YXR1c0NvZGUsIHJldHJ5Q291bnQpIHtcbiAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShyYW5nZS5zdGFydCkgfHwgIU51bWJlci5pc0Zpbml0ZShyYW5nZS5lbmQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aCA9IE51bWJlcihjb250ZW50TGVuZ3RoKVxuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IHJhbmdlLmVuZCAtIHJhbmdlLnN0YXJ0ICsgMVxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShsZW5ndGgpIHx8IGxlbmd0aCAhPT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LUxlbmd0aCBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBkYXRhOiB7IGNvdW50OiByZXRyeUNvdW50IH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY2xhc3MgUmV0cnlIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXJzKSB7XG4gICAgY29uc3QgeyByZXRyeU9wdGlvbnMsIC4uLmRpc3BhdGNoT3B0cyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIFJldHJ5IHNjb3BlZFxuICAgICAgcmV0cnk6IHJldHJ5Rm4sXG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIG1pblRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgLy8gUmVzcG9uc2Ugc2NvcGVkXG4gICAgICBtZXRob2RzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIHJldHJ5QWZ0ZXIsXG4gICAgICBzdGF0dXNDb2Rlc1xuICAgIH0gPSByZXRyeU9wdGlvbnMgPz8ge31cblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBoYW5kbGVycy5kaXNwYXRjaFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJzLmhhbmRsZXJcbiAgICB0aGlzLm9wdHMgPSB7IC4uLmRpc3BhdGNoT3B0cywgYm9keTogd3JhcFJlcXVlc3RCb2R5KG9wdHMuYm9keSkgfVxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcbiAgICB0aGlzLnJldHJ5T3B0cyA9IHtcbiAgICAgIHJldHJ5OiByZXRyeUZuID8/IFJldHJ5SGFuZGxlcltrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSxcbiAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXIgPz8gdHJ1ZSxcbiAgICAgIG1heFRpbWVvdXQ6IG1heFRpbWVvdXQgPz8gMzAgKiAxMDAwLCAvLyAzMHMsXG4gICAgICBtaW5UaW1lb3V0OiBtaW5UaW1lb3V0ID8/IDUwMCwgLy8gLjVzXG4gICAgICB0aW1lb3V0RmFjdG9yOiB0aW1lb3V0RmFjdG9yID8/IDIsXG4gICAgICBtYXhSZXRyaWVzOiBtYXhSZXRyaWVzID8/IDUsXG4gICAgICAvLyBXaGF0IGVycm9ycyB3ZSBzaG91bGQgcmV0cnlcbiAgICAgIG1ldGhvZHM6IG1ldGhvZHMgPz8gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BVVCcsICdERUxFVEUnLCAnVFJBQ0UnXSxcbiAgICAgIC8vIEluZGljYXRlcyB3aGljaCBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIHN0YXR1c0NvZGVzOiBzdGF0dXNDb2RlcyA/PyBbNTAwLCA1MDIsIDUwMywgNTA0LCA0MjldLFxuICAgICAgLy8gTGlzdCBvZiBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIGVycm9yQ29kZXM6IGVycm9yQ29kZXMgPz8gW1xuICAgICAgICAnRUNPTk5SRVNFVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VORVRET1dOJyxcbiAgICAgICAgJ0VORVRVTlJFQUNIJyxcbiAgICAgICAgJ0VIT1NURE9XTicsXG4gICAgICAgICdFSE9TVFVOUkVBQ0gnLFxuICAgICAgICAnRVBJUEUnLFxuICAgICAgICAnVU5EX0VSUl9TT0NLRVQnXG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWluVGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBjb25zdCB7IGNvdW50ZXIgfSA9IHN0YXRlXG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoY29kZSAmJiBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmICFlcnJvckNvZGVzLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBtZXRob2QgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBtZXRob2QgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWV0aG9kcykgJiYgIW1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2Ygc3RhdHVzIGNvZGUgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBzdGF0dXMgY29kZSBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoXG4gICAgICBzdGF0dXNDb2RlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdHVzQ29kZXMpICYmXG4gICAgICAhc3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgcmV0cmllc1xuICAgIGlmIChjb3VudGVyID4gbWF4UmV0cmllcykge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzPy5bJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlci5pc05hTihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA/IGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgOiByZXRyeUFmdGVySGVhZGVyICogMWUzIC8vIFJldHJ5LUFmdGVyIGlzIGluIHNlY29uZHNcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVRpbWVvdXQgPVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA+IDBcbiAgICAgICAgPyBNYXRoLm1pbihyZXRyeUFmdGVySGVhZGVyLCBtYXhUaW1lb3V0KVxuICAgICAgICA6IE1hdGgubWluKG1pblRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIChjb3VudGVyIC0gMSksIG1heFRpbWVvdXQpXG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IGNiKG51bGwpLCByZXRyeVRpbWVvdXQpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBwYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgIGlmICh0aGlzLnJldHJ5T3B0cy5zdGF0dXNDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrcG9pbnQgZm9yIHJlc3VtZSBmcm9tIHdoZXJlIHdlIGxlZnQgaXRcbiAgICBpZiAodGhpcy5yZXN1bWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAgIC8vIE9ubHkgUGFydGlhbCBDb250ZW50IDIwNiBzdXBwb3NlZCB0byBwcm92aWRlIENvbnRlbnQtUmFuZ2UsXG4gICAgICAvLyBhbnkgb3RoZXIgc3RhdHVzIGNvZGUgdGhhdCBwYXJ0aWFsbHkgY29uc3VtZWQgdGhlIHBheWxvYWRcbiAgICAgIC8vIHNob3VsZCBub3QgYmUgcmV0cnkgYmVjYXVzZSBpdCB3b3VsZCByZXN1bHQgaW4gZG93bnN0cmVhbVxuICAgICAgLy8gd3JvbmdseSBjb25jYXRhbmV0ZSBtdWx0aXBsZSByZXNwb25zZXMuXG4gICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjA2ICYmICh0aGlzLnN0YXJ0ID4gMCB8fCBzdGF0dXNDb2RlICE9PSAyMDApKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmFuZ2UgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCB3YXMgcGFydGlhbGx5IGNvbnN1bWVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IHsgY291bnQ6IHRoaXMucmV0cnlDb3VudCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG4gICAgICAvLyBJZiBubyBjb250ZW50IHJhbmdlXG4gICAgICBpZiAoIWNvbnRlbnRSYW5nZSkge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignQ29udGVudC1SYW5nZSBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggYSB3ZWFrIGV0YWcgY2hlY2tcbiAgICAgIGlmICh0aGlzLmV0YWcgIT0gbnVsbCAmJiB0aGlzLmV0YWcgIT09IGhlYWRlcnMuZXRhZykge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignRVRhZyBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhFcnJvciA9IHZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aChoZWFkZXJzLCBjb250ZW50UmFuZ2UsIHN0YXR1c0NvZGUsIHRoaXMucmV0cnlDb3VudClcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmFib3J0KGNvbnRlbnRMZW5ndGhFcnJvcilcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgLSAxIH0gPSBjb250ZW50UmFuZ2VcblxuICAgICAgYXNzZXJ0KHRoaXMuc3RhcnQgPT09IHN0YXJ0LCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG4gICAgICBhc3NlcnQodGhpcy5lbmQgPT0gbnVsbCB8fCB0aGlzLmVuZCA9PT0gZW5kLCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA2KSB7XG4gICAgICAgIC8vIEZpcnN0IHRpbWUgd2UgcmVjZWl2ZSAyMDZcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcblxuICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgICAgICByZXN1bWUsXG4gICAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aEVycm9yID0gdmFsaWRhdGVQYXJ0aWFsUmVzcG9uc2VDb250ZW50TGVuZ3RoKGhlYWRlcnMsIHJhbmdlLCBzdGF0dXNDb2RlLCB0aGlzLnJldHJ5Q291bnQpXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoY29udGVudExlbmd0aEVycm9yKVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSAtIDEgfSA9IHJhbmdlXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCksXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KGVuZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShlbmQpLCAnaW52YWxpZCBjb250ZW50LWxlbmd0aCcpXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSAtIDEgOiBudWxsXG4gICAgICB9XG5cbiAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUodGhpcy5zdGFydCkpXG4gICAgICBhc3NlcnQoXG4gICAgICAgIHRoaXMuZW5kID09IG51bGwgfHwgTnVtYmVyLmlzRmluaXRlKHRoaXMuZW5kKSxcbiAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICApXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICB0aGlzLmV0YWcgPSBoZWFkZXJzLmV0YWcgIT0gbnVsbCA/IGhlYWRlcnMuZXRhZyA6IG51bGxcblxuICAgICAgLy8gV2VhayBldGFncyBhcmUgbm90IHVzZWZ1bCBmb3IgY29tcGFyaXNvbiBub3IgY2FjaGVcbiAgICAgIC8vIGZvciBpbnN0YW5jZSBub3Qgc2FmZSB0byBhc3N1bWUgaWYgdGhlIHJlc3BvbnNlIGlzIGJ5dGUtcGVyLWJ5dGVcbiAgICAgIC8vIGVxdWFsXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnLnN0YXJ0c1dpdGgoJ1cvJykpIHtcbiAgICAgICAgdGhpcy5ldGFnID0gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBkYXRhOiB7IGNvdW50OiB0aGlzLnJldHJ5Q291bnQgfVxuICAgIH0pXG5cbiAgICB0aGlzLmFib3J0KGVycilcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuc3RhcnQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHJhd1RyYWlsZXJzKSB7XG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZShyYXdUcmFpbGVycylcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGlmICh0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIC8vIFdlIHJlY29uY2lsZSBpbiBjYXNlIG9mIGEgbWl4IGJldHdlZW4gbmV0d29yayBlcnJvcnNcbiAgICAvLyBhbmQgc2VydmVyIGVycm9yIHJlc3BvbnNlXG4gICAgaWYgKHRoaXMucmV0cnlDb3VudCAtIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQgPiAwKSB7XG4gICAgICAvLyBXZSBjb3VudCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsYXN0IGNoZWNrcG9pbnQgYW5kIHRoZSBjdXJyZW50IHJldHJ5IGNvdW50XG4gICAgICB0aGlzLnJldHJ5Q291bnQgPVxuICAgICAgICB0aGlzLnJldHJ5Q291bnRDaGVja3BvaW50ICtcbiAgICAgICAgKHRoaXMucmV0cnlDb3VudCAtIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCB9LFxuICAgICAgICBvcHRzOiB7IHJldHJ5T3B0aW9uczogdGhpcy5yZXRyeU9wdHMsIC4uLnRoaXMub3B0cyB9XG4gICAgICB9LFxuICAgICAgb25SZXRyeS5iaW5kKHRoaXMpXG4gICAgKVxuXG4gICAgZnVuY3Rpb24gb25SZXRyeSAoZXJyKSB7XG4gICAgICBpZiAoZXJyICE9IG51bGwgfHwgdGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCAhPT0gMCkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0geyByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gIH1cblxuICAgICAgICAvLyBXZWFrIGV0YWcgY2hlY2sgLSB3ZWFrIGV0YWdzIHdpbGwgbWFrZSBjb21wYXJpc29uIGFsZ29yaXRobXMgbmV2ZXIgbWF0Y2hcbiAgICAgICAgaWYgKHRoaXMuZXRhZyAhPSBudWxsKSB7XG4gICAgICAgICAgaGVhZGVyc1snaWYtbWF0Y2gnXSA9IHRoaXMuZXRhZ1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRzID0ge1xuICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdHMuaGVhZGVycyxcbiAgICAgICAgICAgIC4uLmhlYWRlcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50Q2hlY2twb2ludCA9IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmV0cnlIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXInKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9yZXRyeS1oYW5kbGVyJylcblxuY2xhc3MgUmV0cnlBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICAjYWdlbnQgPSBudWxsXG4gICNvcHRpb25zID0gbnVsbFxuICBjb25zdHJ1Y3RvciAoYWdlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKG9wdGlvbnMpXG4gICAgdGhpcy4jYWdlbnQgPSBhZ2VudFxuICAgIHRoaXMuI29wdGlvbnMgPSBvcHRpb25zXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHJldHJ5ID0gbmV3IFJldHJ5SGFuZGxlcih7XG4gICAgICAuLi5vcHRzLFxuICAgICAgcmV0cnlPcHRpb25zOiB0aGlzLiNvcHRpb25zXG4gICAgfSwge1xuICAgICAgZGlzcGF0Y2g6IHRoaXMuI2FnZW50LmRpc3BhdGNoLmJpbmQodGhpcy4jYWdlbnQpLFxuICAgICAgaGFuZGxlclxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXMuI2FnZW50LmRpc3BhdGNoKG9wdHMsIHJldHJ5KVxuICB9XG5cbiAgY2xvc2UgKCkge1xuICAgIHJldHVybiB0aGlzLiNhZ2VudC5jbG9zZSgpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICByZXR1cm4gdGhpcy4jYWdlbnQuZGVzdHJveSgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUFnZW50XG4iLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC85MDdcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yLCBBYm9ydEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jb25zdCBrQ29uc3VtZSA9IFN5bWJvbCgna0NvbnN1bWUnKVxuY29uc3Qga1JlYWRpbmcgPSBTeW1ib2woJ2tSZWFkaW5nJylcbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdrQm9keScpXG5jb25zdCBrQWJvcnQgPSBTeW1ib2woJ2tBYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5jb25zdCBrQ29udGVudExlbmd0aCA9IFN5bWJvbCgna0NvbnRlbnRMZW5ndGgnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY2xhc3MgQm9keVJlYWRhYmxlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHJlc3VtZSxcbiAgICBhYm9ydCxcbiAgICBjb250ZW50VHlwZSA9ICcnLFxuICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgaGlnaFdhdGVyTWFyayA9IDY0ICogMTAyNCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICB9KSB7XG4gICAgc3VwZXIoe1xuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiByZXN1bWUsXG4gICAgICBoaWdoV2F0ZXJNYXJrXG4gICAgfSlcblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSBmYWxzZVxuXG4gICAgdGhpc1trQWJvcnRdID0gYWJvcnRcbiAgICB0aGlzW2tDb25zdW1lXSA9IG51bGxcbiAgICB0aGlzW2tCb2R5XSA9IG51bGxcbiAgICB0aGlzW2tDb250ZW50VHlwZV0gPSBjb250ZW50VHlwZVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gY29udGVudExlbmd0aFxuXG4gICAgLy8gSXMgc3RyZWFtIGJlaW5nIGNvbnN1bWVkIHRocm91Z2ggUmVhZGFibGUgQVBJP1xuICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHRoYXQgd2UgYXZvaWQgY2hlY2tpbmdcbiAgICAvLyBmb3IgJ2RhdGEnIGFuZCAncmVhZGFibGUnIGxpc3RlbmVycyBpbiB0aGUgaG90IHBhdGhcbiAgICAvLyBpbnNpZGUgcHVzaCgpLlxuICAgIHRoaXNba1JlYWRpbmddID0gZmFsc2VcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzW2tBYm9ydF0oKVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5kZXN0cm95KGVycilcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgTm9kZSBcImJ1Z1wiLiBJZiB0aGUgc3RyZWFtIGlzIGRlc3Ryb3llZCBpbiBzYW1lXG4gICAgLy8gdGljayBhcyBpdCBpcyBjcmVhdGVkLCB0aGVuIGEgdXNlciB3aG8gaXMgd2FpdGluZyBmb3IgYVxuICAgIC8vIHByb21pc2UgKGkuZSBtaWNybyB0aWNrKSBmb3IgaW5zdGFsbGluZyBhICdlcnJvcicgbGlzdGVuZXIgd2lsbFxuICAgIC8vIG5ldmVyIGdldCBhIGNoYW5jZSBhbmQgd2lsbCBhbHdheXMgZW5jb3VudGVyIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgaWYgKCF0aGlzW2tSZWFkaW5nXSkge1xuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uIChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgYWRkTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvZmYgKGV2LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCAuLi5hcmdzKVxuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IChcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwIHx8XG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgcHVzaCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trQ29uc3VtZV0gJiYgY2h1bmsgIT09IG51bGwpIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ieXRlc1xuICBhc3luYyBieXRlcyAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2J5dGVzJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBhc3luYyBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gTnVtYmVyLmlzRmluaXRlKG9wdHM/LmxpbWl0KSA/IG9wdHMubGltaXQgOiAxMjggKiAxMDI0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cz8uc2lnbmFsXG5cbiAgICBpZiAoc2lnbmFsICE9IG51bGwgJiYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICB9XG5cbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKClcblxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlRW1pdHRlZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXNba0NvbnRlbnRMZW5ndGhdID4gbGltaXQpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShzaWduYWwucmVhc29uID8/IG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICB9XG4gICAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydClcblxuICAgICAgdGhpc1xuICAgICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KVxuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uID8/IG5ldyBBYm9ydEVycm9yKCkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZXJyb3InLCBub29wKVxuICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICBsaW1pdCAtPSBjaHVuay5sZW5ndGhcbiAgICAgICAgICBpZiAobGltaXQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXN1bWUoKVxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tbG9ja2VkXG5mdW5jdGlvbiBpc0xvY2tlZCAoc2VsZikge1xuICAvLyBDb25zdW1lIGlzIGFuIGltcGxpY2l0IGxvY2suXG4gIHJldHVybiAoc2VsZltrQm9keV0gJiYgc2VsZltrQm9keV0ubG9ja2VkID09PSB0cnVlKSB8fCBzZWxmW2tDb25zdW1lXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gaXNVbnVzYWJsZSAoc2VsZikge1xuICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZChzZWxmKSB8fCBpc0xvY2tlZChzZWxmKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lIChzdHJlYW0sIHR5cGUpIHtcbiAgYXNzZXJ0KCFzdHJlYW1ba0NvbnN1bWVdKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGlzVW51c2FibGUoc3RyZWFtKSkge1xuICAgICAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoclN0YXRlLmRlc3Ryb3llZCAmJiByU3RhdGUuY2xvc2VFbWl0dGVkID09PSBmYWxzZSkge1xuICAgICAgICBzdHJlYW1cbiAgICAgICAgICAub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgICAub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJykpXG4gICAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChyU3RhdGUuZXJyb3JlZCA/PyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHN0cmVhbVtrQ29uc3VtZV0gPSB7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgIGJvZHk6IFtdXG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1cbiAgICAgICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICBjb25zdW1lU3RhcnQoc3RyZWFtW2tDb25zdW1lXSlcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgaWYgKHN0YXRlLmJ1ZmZlckluZGV4KSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzdGF0ZS5idWZmZXJJbmRleFxuICAgIGNvbnN0IGVuZCA9IHN0YXRlLmJ1ZmZlci5sZW5ndGhcbiAgICBmb3IgKGxldCBuID0gc3RhcnQ7IG4gPCBlbmQ7IG4rKykge1xuICAgICAgY29uc3VtZVB1c2goY29uc3VtZSwgc3RhdGUuYnVmZmVyW25dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIHN0YXRlLmJ1ZmZlcikge1xuICAgICAgY29uc3VtZVB1c2goY29uc3VtZSwgY2h1bmspXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUuc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICAgIH0pXG4gIH1cblxuICBjb25zdW1lLnN0cmVhbS5yZXN1bWUoKVxuXG4gIHdoaWxlIChjb25zdW1lLnN0cmVhbS5yZWFkKCkgIT0gbnVsbCkge1xuICAgIC8vIExvb3BcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyW119IGNodW5rc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5mdW5jdGlvbiBjaHVua3NEZWNvZGUgKGNodW5rcywgbGVuZ3RoKSB7XG4gIGlmIChjaHVua3MubGVuZ3RoID09PSAwIHx8IGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IGNodW5rcy5sZW5ndGggPT09IDEgPyBjaHVua3NbMF0gOiBCdWZmZXIuY29uY2F0KGNodW5rcywgbGVuZ3RoKVxuICBjb25zdCBidWZmZXJMZW5ndGggPSBidWZmZXIubGVuZ3RoXG5cbiAgLy8gU2tpcCBCT00uXG4gIGNvbnN0IHN0YXJ0ID1cbiAgICBidWZmZXJMZW5ndGggPiAyICYmXG4gICAgYnVmZmVyWzBdID09PSAweGVmICYmXG4gICAgYnVmZmVyWzFdID09PSAweGJiICYmXG4gICAgYnVmZmVyWzJdID09PSAweGJmXG4gICAgICA/IDNcbiAgICAgIDogMFxuICByZXR1cm4gYnVmZmVyLnV0ZjhTbGljZShzdGFydCwgYnVmZmVyTGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyW119IGNodW5rc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGNodW5rc0NvbmNhdCAoY2h1bmtzLCBsZW5ndGgpIHtcbiAgaWYgKGNodW5rcy5sZW5ndGggPT09IDAgfHwgbGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApXG4gIH1cbiAgaWYgKGNodW5rcy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyBmYXN0LXBhdGhcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY2h1bmtzWzBdKVxuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cobGVuZ3RoKS5idWZmZXIpXG5cbiAgbGV0IG9mZnNldCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXVxuICAgIGJ1ZmZlci5zZXQoY2h1bmssIG9mZnNldClcbiAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVFbmQgKGNvbnN1bWUpIHtcbiAgY29uc3QgeyB0eXBlLCBib2R5LCByZXNvbHZlLCBzdHJlYW0sIGxlbmd0aCB9ID0gY29uc3VtZVxuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcmVzb2x2ZShjaHVua3NEZWNvZGUoYm9keSwgbGVuZ3RoKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdqc29uJykge1xuICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGNodW5rc0RlY29kZShib2R5LCBsZW5ndGgpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgIHJlc29sdmUoY2h1bmtzQ29uY2F0KGJvZHksIGxlbmd0aCkuYnVmZmVyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICByZXNvbHZlKG5ldyBCbG9iKGJvZHksIHsgdHlwZTogc3RyZWFtW2tDb250ZW50VHlwZV0gfSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYnl0ZXMnKSB7XG4gICAgICByZXNvbHZlKGNodW5rc0NvbmNhdChib2R5LCBsZW5ndGgpKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVhZGFibGU6IEJvZHlSZWFkYWJsZSwgY2h1bmtzRGVjb2RlIH1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7XG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCB7IGNodW5rc0RlY29kZSB9ID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCBDSFVOS19MSU1JVCA9IDEyOCAqIDEwMjRcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrICh7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9KSB7XG4gIGFzc2VydChib2R5KVxuXG4gIGxldCBjaHVua3MgPSBbXVxuICBsZXQgbGVuZ3RoID0gMFxuXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgIGxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgICAgIGlmIChsZW5ndGggPiBDSFVOS19MSU1JVCkge1xuICAgICAgICBjaHVua3MgPSBbXVxuICAgICAgICBsZW5ndGggPSAwXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBjaHVua3MgPSBbXVxuICAgIGxlbmd0aCA9IDBcbiAgICAvLyBEbyBub3RoaW5nLi4uLlxuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gXG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWxlbmd0aCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSkpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzdGFja1RyYWNlTGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXRcbiAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gMFxuICBsZXQgcGF5bG9hZFxuXG4gIHRyeSB7XG4gICAgaWYgKGlzQ29udGVudFR5cGVBcHBsaWNhdGlvbkpzb24oY29udGVudFR5cGUpKSB7XG4gICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShjaHVua3NEZWNvZGUoY2h1bmtzLCBsZW5ndGgpKVxuICAgIH0gZWxzZSBpZiAoaXNDb250ZW50VHlwZVRleHQoY29udGVudFR5cGUpKSB7XG4gICAgICBwYXlsb2FkID0gY2h1bmtzRGVjb2RlKGNodW5rcywgbGVuZ3RoKVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gcHJvY2VzcyBpbiBhIGNhbGxiYWNrIHRvIGF2b2lkIHRocm93aW5nIGluIHRoZSBtaWNyb3Rhc2sgcXVldWVcbiAgfSBmaW5hbGx5IHtcbiAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBzdGFja1RyYWNlTGltaXRcbiAgfVxuICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpKVxufVxuXG5jb25zdCBpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uID0gKGNvbnRlbnRUeXBlKSA9PiB7XG4gIHJldHVybiAoXG4gICAgY29udGVudFR5cGUubGVuZ3RoID4gMTUgJiZcbiAgICBjb250ZW50VHlwZVsxMV0gPT09ICcvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzBdID09PSAnYScgJiZcbiAgICBjb250ZW50VHlwZVsxXSA9PT0gJ3AnICYmXG4gICAgY29udGVudFR5cGVbMl0gPT09ICdwJyAmJlxuICAgIGNvbnRlbnRUeXBlWzNdID09PSAnbCcgJiZcbiAgICBjb250ZW50VHlwZVs0XSA9PT0gJ2knICYmXG4gICAgY29udGVudFR5cGVbNV0gPT09ICdjJyAmJlxuICAgIGNvbnRlbnRUeXBlWzZdID09PSAnYScgJiZcbiAgICBjb250ZW50VHlwZVs3XSA9PT0gJ3QnICYmXG4gICAgY29udGVudFR5cGVbOF0gPT09ICdpJyAmJlxuICAgIGNvbnRlbnRUeXBlWzldID09PSAnbycgJiZcbiAgICBjb250ZW50VHlwZVsxMF0gPT09ICduJyAmJlxuICAgIGNvbnRlbnRUeXBlWzEyXSA9PT0gJ2onICYmXG4gICAgY29udGVudFR5cGVbMTNdID09PSAncycgJiZcbiAgICBjb250ZW50VHlwZVsxNF0gPT09ICdvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzE1XSA9PT0gJ24nXG4gIClcbn1cblxuY29uc3QgaXNDb250ZW50VHlwZVRleHQgPSAoY29udGVudFR5cGUpID0+IHtcbiAgcmV0dXJuIChcbiAgICBjb250ZW50VHlwZS5sZW5ndGggPiA0ICYmXG4gICAgY29udGVudFR5cGVbNF0gPT09ICcvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzBdID09PSAndCcgJiZcbiAgICBjb250ZW50VHlwZVsxXSA9PT0gJ2UnICYmXG4gICAgY29udGVudFR5cGVbMl0gPT09ICd4JyAmJlxuICAgIGNvbnRlbnRUeXBlWzNdID09PSAndCdcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLFxuICBpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uLFxuICBpc0NvbnRlbnRUeXBlVGV4dFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ25vZGU6YXN5bmNfaG9va3MnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMudHJhaWxlcnMgPSB7fVxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3JcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5zaWduYWwgPSBzaWduYWxcbiAgICB0aGlzLnJlYXNvbiA9IG51bGxcbiAgICB0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIgPSBudWxsXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNpZ25hbCkge1xuICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLnNpZ25hbC5yZWFzb24gPz8gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyID0gdXRpbC5hZGRBYm9ydExpc3RlbmVyKHRoaXMuc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLnNpZ25hbC5yZWFzb24gPz8gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgICAgIGlmICh0aGlzLnJlcykge1xuICAgICAgICAgICAgdXRpbC5kZXN0cm95KHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKSwgdGhpcy5yZWFzb24pXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICB0aGlzLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzPy5vZmYoJ2Nsb3NlJywgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKClcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lciA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcGFyc2VkSGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgIGNvbnN0IHJlcyA9IG5ldyBSZWFkYWJsZSh7XG4gICAgICByZXN1bWUsXG4gICAgICBhYm9ydCxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgY29udGVudExlbmd0aDogdGhpcy5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoXG4gICAgICAgID8gTnVtYmVyKGNvbnRlbnRMZW5ndGgpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcikge1xuICAgICAgcmVzLm9uKCdjbG9zZScsIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcilcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIHRoaXMucmVzID0gcmVzXG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB0cmFpbGVyczogdGhpcy50cmFpbGVycyxcbiAgICAgICAgICBvcGFxdWUsXG4gICAgICAgICAgYm9keTogcmVzLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzLCB0aGlzLnRyYWlsZXJzKVxuICAgIHRoaXMucmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgYm9keSwgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHF1ZXVlTWljcm90YXNrP1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAvLyBFbnN1cmUgYWxsIHF1ZXVlZCBoYW5kbGVycyBhcmUgaW52b2tlZCBiZWZvcmUgZGVzdHJveWluZyByZXMuXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcikge1xuICAgICAgcmVzPy5vZmYoJ2Nsb3NlJywgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKVxuICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKClcbiAgICAgIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lciA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBSZXF1ZXN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwgImNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCBrTGlzdGVuZXIgPSBTeW1ib2woJ2tMaXN0ZW5lcicpXG5jb25zdCBrU2lnbmFsID0gU3ltYm9sKCdrU2lnbmFsJylcblxuZnVuY3Rpb24gYWJvcnQgKHNlbGYpIHtcbiAgaWYgKHNlbGYuYWJvcnQpIHtcbiAgICBzZWxmLmFib3J0KHNlbGZba1NpZ25hbF0/LnJlYXNvbilcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnJlYXNvbiA9IHNlbGZba1NpZ25hbF0/LnJlYXNvbiA/PyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gIH1cbiAgcmVtb3ZlU2lnbmFsKHNlbGYpXG59XG5cbmZ1bmN0aW9uIGFkZFNpZ25hbCAoc2VsZiwgc2lnbmFsKSB7XG4gIHNlbGYucmVhc29uID0gbnVsbFxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcblxuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgYWJvcnQoc2VsZilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBzaWduYWxcbiAgc2VsZltrTGlzdGVuZXJdID0gKCkgPT4ge1xuICAgIGFib3J0KHNlbGYpXG4gIH1cblxuICBhZGRBYm9ydExpc3RlbmVyKHNlbGZba1NpZ25hbF0sIHNlbGZba0xpc3RlbmVyXSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2lnbmFsIChzZWxmKSB7XG4gIGlmICghc2VsZltrU2lnbmFsXSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCdyZW1vdmVFdmVudExpc3RlbmVyJyBpbiBzZWxmW2tTaWduYWxdKSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfSBlbHNlIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFkZFNpZ25hbCxcbiAgcmVtb3ZlU2lnbmFsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgZmluaXNoZWQsIFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFN0cmVhbUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBmYWN0b3J5JylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1NUUkVBTScpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeVxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMudHJhaWxlcnMgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciB8fCBmYWxzZVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBmYWN0b3J5LCBvcGFxdWUsIGNvbnRleHQsIGNhbGxiYWNrLCByZXNwb25zZUhlYWRlcnMgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGxldCByZXNcblxuICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICAgIHJlcyA9IG5ldyBQYXNzVGhyb3VnaCgpXG5cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFjdG9yeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoZmFjdG9yeSwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgIXJlcyB8fFxuICAgICAgICB0eXBlb2YgcmVzLndyaXRlICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMuZW5kICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMub24gIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFdyaXRhYmxlJylcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogQXZvaWQgZmluaXNoZWQuIEl0IHJlZ2lzdGVycyBhbiB1bm5lY2Vzc2FyeSBhbW91bnQgb2YgbGlzdGVuZXJzLlxuICAgICAgZmluaXNoZWQocmVzLCB7IHJlYWRhYmxlOiBmYWxzZSB9LCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHJlcywgb3BhcXVlLCB0cmFpbGVycywgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgICAgaWYgKGVyciB8fCAhcmVzLnJlYWRhYmxlKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciB8fCBudWxsLCB7IG9wYXF1ZSwgdHJhaWxlcnMgfSlcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJlcy5vbignZHJhaW4nLCByZXN1bWUpXG5cbiAgICB0aGlzLnJlcyA9IHJlc1xuXG4gICAgY29uc3QgbmVlZERyYWluID0gcmVzLndyaXRhYmxlTmVlZERyYWluICE9PSB1bmRlZmluZWRcbiAgICAgID8gcmVzLndyaXRhYmxlTmVlZERyYWluXG4gICAgICA6IHJlcy5fd3JpdGFibGVTdGF0ZT8ubmVlZERyYWluXG5cbiAgICByZXR1cm4gbmVlZERyYWluICE9PSB0cnVlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJldHVybiByZXMgPyByZXMud3JpdGUoY2h1bmspIDogdHJ1ZVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy50cmFpbGVycyA9IHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzKVxuXG4gICAgcmVzLmVuZCgpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIG9wYXF1ZSwgYm9keSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyZWFtIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0uY2FsbCh0aGlzLCBvcHRzLCBmYWN0b3J5LCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgU3RyZWFtSGFuZGxlcihvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgUGFzc1Rocm91Z2hcbn0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdub2RlOmFzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuY29uc3Qga1Jlc3VtZSA9IFN5bWJvbCgncmVzdW1lJylcblxuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0IGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuXG4gICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICBjb25zdCB7IFtrUmVzdW1lXTogcmVzdW1lIH0gPSB0aGlzXG5cbiAgICBpZiAocmVzdW1lKSB7XG4gICAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICAgICAgcmVzdW1lKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3JlYWQoKVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lUmVzcG9uc2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChyZXN1bWUpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG4gICAgdGhpc1trUmVzdW1lXSA9IHJlc3VtZVxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIHRoaXNba1Jlc3VtZV0oKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoYW5kbGVyJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfUElQRUxJTkUnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuXG4gICAgdGhpcy5yZXEgPSBuZXcgUGlwZWxpbmVSZXF1ZXN0KCkub24oJ2Vycm9yJywgdXRpbC5ub3ApXG5cbiAgICB0aGlzLnJldCA9IG5ldyBEdXBsZXgoe1xuICAgICAgcmVhZGFibGVPYmplY3RNb2RlOiBvcHRzLm9iamVjdE1vZGUsXG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKGJvZHk/LnJlc3VtZSkge1xuICAgICAgICAgIGJvZHkucmVzdW1lKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHdyaXRlOiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChyZXEucHVzaChjaHVuaywgZW5jb2RpbmcpIHx8IHJlcS5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxW2tSZXN1bWVdID0gY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IChlcnIsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSwgcmVxLCByZXMsIHJldCwgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIWVyciAmJiAhcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWJvcnQgJiYgZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG5cbiAgICAgICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfVxuICAgIH0pLm9uKCdwcmVmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAvLyBOb2RlIDwgMTUgZG9lcyBub3QgY2FsbCBfZmluYWwgaW4gc2FtZSB0aWNrLlxuICAgICAgcmVxLnB1c2gobnVsbClcbiAgICB9KVxuXG4gICAgdGhpcy5yZXMgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgcmV0LCByZXMgfSA9IHRoaXNcblxuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQoIXJlcywgJ3BpcGVsaW5lIGNhbm5vdCBiZSByZXRyaWVkJylcbiAgICBhc3NlcnQoIXJldC5kZXN0cm95ZWQpXG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSkge1xuICAgIGNvbnN0IHsgb3BhcXVlLCBoYW5kbGVyLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSBuZXcgUGlwZWxpbmVSZXNwb25zZShyZXN1bWUpXG5cbiAgICBsZXQgYm9keVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgYm9keSA9IHRoaXMucnVuSW5Bc3luY1Njb3BlKGhhbmRsZXIsIG51bGwsIHtcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgb3BhcXVlLFxuICAgICAgICBib2R5OiB0aGlzLnJlcyxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5Lm9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFJlYWRhYmxlJylcbiAgICB9XG5cbiAgICBib2R5XG4gICAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQsIGJvZHkgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5wdXNoKGNodW5rKSAmJiBib2R5LnBhdXNlKSB7XG4gICAgICAgICAgYm9keS5wYXVzZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgICAgIH0pXG4gICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICByZXQucHVzaChudWxsKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kZWQpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcGlwZWxpbmUgKG9wdHMsIGhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaXBlbGluZUhhbmRsZXIgPSBuZXcgUGlwZWxpbmVIYW5kbGVyKG9wdHMsIGhhbmRsZXIpXG4gICAgdGhpcy5kaXNwYXRjaCh7IC4uLm9wdHMsIGJvZHk6IHBpcGVsaW5lSGFuZGxlci5yZXEgfSwgcGlwZWxpbmVIYW5kbGVyKVxuICAgIHJldHVybiBwaXBlbGluZUhhbmRsZXIucmV0XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBuZXcgUGFzc1Rocm91Z2goKS5kZXN0cm95KGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ25vZGU6YXN5bmNfaG9va3MnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5cbmNsYXNzIFVwZ3JhZGVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfVVBHUkFERScpXG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGFib3J0KHRoaXMucmVhc29uKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuY2FsbGJhY2spXG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIHVwZ3JhZGUnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA9PT0gMTAxKVxuXG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGUgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwZ3JhZGUuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBncmFkZUhhbmRsZXIgPSBuZXcgVXBncmFkZUhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgIHVwZ3JhZGU6IG9wdHMucHJvdG9jb2wgfHwgJ1dlYnNvY2tldCdcbiAgICB9LCB1cGdyYWRlSGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHM/Lm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIENvbm5lY3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfQ09OTkVDVCcpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgY29ubmVjdCcsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuXG4gICAgbGV0IGhlYWRlcnMgPSByYXdIZWFkZXJzXG4gICAgLy8gSW5kaWNhdGVzIGlzIGFuIEhUVFAyU2Vzc2lvblxuICAgIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgfVxuXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29ubmVjdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29ubmVjdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25uZWN0SGFuZGxlciA9IG5ldyBDb25uZWN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgbWV0aG9kOiAnQ09OTkVDVCcgfSwgY29ubmVjdEhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzPy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWlyZSgnLi9hcGktcmVxdWVzdCcpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL2FwaS1zdHJlYW0nKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSByZXF1aXJlKCcuL2FwaS1waXBlbGluZScpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gcmVxdWlyZSgnLi9hcGktdXBncmFkZScpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gcmVxdWlyZSgnLi9hcGktY29ubmVjdCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga01vY2tOb3RNYXRjaGVkRXJyb3IgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZXJyb3IuVU5EX01PQ0tfRVJSX01PQ0tfTk9UX01BVENIRUQnKVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGRvZXMgbm90IG1hdGNoIGFueSByZWdpc3RlcmVkIG1vY2sgZGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja05vdE1hdGNoZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE1vY2tOb3RNYXRjaGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01vY2tOb3RNYXRjaGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIHJlcXVlc3QgZG9lcyBub3QgbWF0Y2ggYW55IHJlZ2lzdGVyZWQgbW9jayBkaXNwYXRjaGVzJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfTU9DS19FUlJfTU9DS19OT1RfTUFUQ0hFRCdcbiAgfVxuXG4gIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2Vba01vY2tOb3RNYXRjaGVkRXJyb3JdID09PSB0cnVlXG4gIH1cblxuICBba01vY2tOb3RNYXRjaGVkRXJyb3JdID0gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTW9ja05vdE1hdGNoZWRFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNb2NrTm90TWF0Y2hlZEVycm9yIH0gPSByZXF1aXJlKCcuL21vY2stZXJyb3JzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrT3JpZ2luLFxuICBrR2V0TmV0Q29ubmVjdFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgYnVpbGRVUkwgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHtcbiAgdHlwZXM6IHtcbiAgICBpc1Byb21pc2VcbiAgfVxufSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmZ1bmN0aW9uIG1hdGNoVmFsdWUgKG1hdGNoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBtYXRjaCA9PT0gdmFsdWVcbiAgfVxuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gbWF0Y2gudGVzdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIG1hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1hdGNoKHZhbHVlKSA9PT0gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBsb3dlckNhc2VFbnRyaWVzIChoZWFkZXJzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoaGVhZGVycykubWFwKChbaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4gW2hlYWRlck5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSwgaGVhZGVyVmFsdWVdXG4gICAgfSlcbiAgKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9pbmRleCcpLkhlYWRlcnN8c3RyaW5nW118UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJCeU5hbWUgKGhlYWRlcnMsIGtleSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKGhlYWRlcnNbaV0udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0ga2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9IGVsc2UgaWYgKHR5cGVvZiBoZWFkZXJzLmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBoZWFkZXJzLmdldChrZXkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycylba2V5LnRvTG9jYWxlTG93ZXJDYXNlKCldXG4gIH1cbn1cblxuLyoqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlcnMgKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVyc0Zyb21BcnJheSAoaGVhZGVycykgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICBjb25zdCBjbG9uZSA9IGhlYWRlcnMuc2xpY2UoKVxuICBjb25zdCBlbnRyaWVzID0gW11cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNsb25lLmxlbmd0aDsgaW5kZXggKz0gMikge1xuICAgIGVudHJpZXMucHVzaChbY2xvbmVbaW5kZXhdLCBjbG9uZVtpbmRleCArIDFdXSlcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpXG59XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVycyAobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKSB7XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICAgICAgaGVhZGVycyA9IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShoZWFkZXJzKVxuICAgIH1cbiAgICByZXR1cm4gbW9ja0Rpc3BhdGNoLmhlYWRlcnMoaGVhZGVycyA/IGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycykgOiB7fSlcbiAgfVxuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHR5cGVvZiBoZWFkZXJzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IFttYXRjaEhlYWRlck5hbWUsIG1hdGNoSGVhZGVyVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1vY2tEaXNwYXRjaC5oZWFkZXJzKSkge1xuICAgIGNvbnN0IGhlYWRlclZhbHVlID0gZ2V0SGVhZGVyQnlOYW1lKGhlYWRlcnMsIG1hdGNoSGVhZGVyTmFtZSlcblxuICAgIGlmICghbWF0Y2hWYWx1ZShtYXRjaEhlYWRlclZhbHVlLCBoZWFkZXJWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBzYWZlVXJsIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnPycpXG5cbiAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcXAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhdGhTZWdtZW50cy5wb3AoKSlcbiAgcXAuc29ydCgpXG4gIHJldHVybiBbLi4ucGF0aFNlZ21lbnRzLCBxcC50b1N0cmluZygpXS5qb2luKCc/Jylcbn1cblxuZnVuY3Rpb24gbWF0Y2hLZXkgKG1vY2tEaXNwYXRjaCwgeyBwYXRoLCBtZXRob2QsIGJvZHksIGhlYWRlcnMgfSkge1xuICBjb25zdCBwYXRoTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5wYXRoLCBwYXRoKVxuICBjb25zdCBtZXRob2RNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLm1ldGhvZCwgbWV0aG9kKVxuICBjb25zdCBib2R5TWF0Y2ggPSB0eXBlb2YgbW9ja0Rpc3BhdGNoLmJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2guYm9keSwgYm9keSkgOiB0cnVlXG4gIGNvbnN0IGhlYWRlcnNNYXRjaCA9IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpXG4gIHJldHVybiBwYXRoTWF0Y2ggJiYgbWV0aG9kTWF0Y2ggJiYgYm9keU1hdGNoICYmIGhlYWRlcnNNYXRjaFxufVxuXG5mdW5jdGlvbiBnZXRSZXNwb25zZURhdGEgKGRhdGEpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBiYXNlUGF0aCA9IGtleS5xdWVyeSA/IGJ1aWxkVVJMKGtleS5wYXRoLCBrZXkucXVlcnkpIDoga2V5LnBhdGhcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdHlwZW9mIGJhc2VQYXRoID09PSAnc3RyaW5nJyA/IHNhZmVVcmwoYmFzZVBhdGgpIDogYmFzZVBhdGhcblxuICAvLyBNYXRjaCBwYXRoXG4gIGxldCBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgY29uc3VtZWQgfSkgPT4gIWNvbnN1bWVkKS5maWx0ZXIoKHsgcGF0aCB9KSA9PiBtYXRjaFZhbHVlKHNhZmVVcmwocGF0aCksIHJlc29sdmVkUGF0aCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggbWV0aG9kXG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgbWV0aG9kIH0pID0+IG1hdGNoVmFsdWUobWV0aG9kLCBrZXkubWV0aG9kKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgbWV0aG9kICcke2tleS5tZXRob2R9JyBvbiBwYXRoICcke3Jlc29sdmVkUGF0aH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nIG9uIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggaGVhZGVyc1xuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKChtb2NrRGlzcGF0Y2gpID0+IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGtleS5oZWFkZXJzKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzXG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7aGVhZGVyc30nIG9uIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldXG4gICAgY29uc3QgbmFtZSA9IEJ1ZmZlci5mcm9tKGAke2tleX1gKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7ICsraikge1xuICAgICAgICByZXN1bHQucHVzaChuYW1lLCBCdWZmZXIuZnJvbShgJHt2YWx1ZVtqXX1gKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2gobmFtZSwgQnVmZmVyLmZyb20oYCR7dmFsdWV9YCkpXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvU3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzQ29kZVxuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNUZXh0IChzdGF0dXNDb2RlKSB7XG4gIHJldHVybiBTVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gfHwgJ3Vua25vd24nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlIChib2R5KSB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBbXVxuICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgYm9keSkge1xuICAgIGJ1ZmZlcnMucHVzaChkYXRhKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpLnRvU3RyaW5nKCd1dGY4Jylcbn1cblxuLyoqXG4gKiBNb2NrIGRpc3BhdGNoIGZ1bmN0aW9uIHVzZWQgdG8gc2ltdWxhdGUgdW5kaWNpIGRpc3BhdGNoZXNcbiAqL1xuZnVuY3Rpb24gbW9ja0Rpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gIC8vIEdldCBtb2NrIGRpc3BhdGNoIGZyb20gYnVpbHQga2V5XG4gIGNvbnN0IGtleSA9IGJ1aWxkS2V5KG9wdHMpXG4gIGNvbnN0IG1vY2tEaXNwYXRjaCA9IGdldE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuXG4gIG1vY2tEaXNwYXRjaC50aW1lc0ludm9rZWQrK1xuXG4gIC8vIEhlcmUncyB3aGVyZSB3ZSByZXNvbHZlIGEgY2FsbGJhY2sgaWYgYSBjYWxsYmFjayBpcyBwcmVzZW50IGZvciB0aGUgZGlzcGF0Y2ggZGF0YS5cbiAgaWYgKG1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKSB7XG4gICAgbW9ja0Rpc3BhdGNoLmRhdGEgPSB7IC4uLm1vY2tEaXNwYXRjaC5kYXRhLCAuLi5tb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjayhvcHRzKSB9XG4gIH1cblxuICAvLyBQYXJzZSBtb2NrRGlzcGF0Y2ggZGF0YVxuICBjb25zdCB7IGRhdGE6IHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMsIGVycm9yIH0sIGRlbGF5LCBwZXJzaXN0IH0gPSBtb2NrRGlzcGF0Y2hcbiAgY29uc3QgeyB0aW1lc0ludm9rZWQsIHRpbWVzIH0gPSBtb2NrRGlzcGF0Y2hcblxuICAvLyBJZiBpdCdzIHVzZWQgdXAgYW5kIG5vdCBwZXJzaXN0ZW50LCBtYXJrIGFzIGNvbnN1bWVkXG4gIG1vY2tEaXNwYXRjaC5jb25zdW1lZCA9ICFwZXJzaXN0ICYmIHRpbWVzSW52b2tlZCA+PSB0aW1lc1xuICBtb2NrRGlzcGF0Y2gucGVuZGluZyA9IHRpbWVzSW52b2tlZCA8IHRpbWVzXG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB0cmlnZ2VyIGRpc3BhdGNoIGVycm9yXG4gIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuICAgIGhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IHdpdGggYSBkZWxheSBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgICB9LCBkZWxheSlcbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlcGx5IChtb2NrRGlzcGF0Y2hlcywgX2RhdGEgPSBkYXRhKSB7XG4gICAgLy8gZmV0Y2gncyBIZWFkZXJzTGlzdCBpcyBhIDFEIHN0cmluZyBhcnJheVxuICAgIGNvbnN0IG9wdHNIZWFkZXJzID0gQXJyYXkuaXNBcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA/IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA6IG9wdHMuaGVhZGVyc1xuICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgX2RhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gX2RhdGEoeyAuLi5vcHRzLCBoZWFkZXJzOiBvcHRzSGVhZGVycyB9KVxuICAgICAgOiBfZGF0YVxuXG4gICAgLy8gdXRpbC50eXBlcy5pc1Byb21pc2UgaXMgbGlrZWx5IG5lZWRlZCBmb3IgamVzdC5cbiAgICBpZiAoaXNQcm9taXNlKGJvZHkpKSB7XG4gICAgICAvLyBJZiBoYW5kbGVSZXBseSBpcyBhc3luY2hyb25vdXMsIHRocm93aW5nIGFuIGVycm9yXG4gICAgICAvLyBpbiB0aGUgY2FsbGJhY2sgd2lsbCByZWplY3QgdGhlIHByb21pc2UsIHJhdGhlciB0aGFuXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRocm93IHRoZSBlcnJvciwgd2hpY2ggYnJlYWtzIHNvbWUgdGVzdHMuXG4gICAgICAvLyBSYXRoZXIsIHdlIHdhaXQgZm9yIHRoZSBjYWxsYmFjayB0byByZXNvbHZlIGlmIGl0IGlzIGFcbiAgICAgIC8vIHByb21pc2UsIGFuZCB0aGVuIHJlLXJ1biBoYW5kbGVSZXBseSB3aXRoIHRoZSBuZXcgYm9keS5cbiAgICAgIGJvZHkudGhlbigobmV3RGF0YSkgPT4gaGFuZGxlUmVwbHkobW9ja0Rpc3BhdGNoZXMsIG5ld0RhdGEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGJvZHkpXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXMoaGVhZGVycylcbiAgICBjb25zdCByZXNwb25zZVRyYWlsZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXModHJhaWxlcnMpXG5cbiAgICBoYW5kbGVyLm9uQ29ubmVjdD8uKGVyciA9PiBoYW5kbGVyLm9uRXJyb3IoZXJyKSwgbnVsbClcbiAgICBoYW5kbGVyLm9uSGVhZGVycz8uKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhPy4oQnVmZmVyLmZyb20ocmVzcG9uc2VEYXRhKSlcbiAgICBoYW5kbGVyLm9uQ29tcGxldGU/LihyZXNwb25zZVRyYWlsZXJzKVxuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaChtb2NrRGlzcGF0Y2hlcywga2V5KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lICgpIHt9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrRGlzcGF0Y2ggKCkge1xuICBjb25zdCBhZ2VudCA9IHRoaXNba01vY2tBZ2VudF1cbiAgY29uc3Qgb3JpZ2luID0gdGhpc1trT3JpZ2luXVxuICBjb25zdCBvcmlnaW5hbERpc3BhdGNoID0gdGhpc1trT3JpZ2luYWxEaXNwYXRjaF1cblxuICByZXR1cm4gZnVuY3Rpb24gZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoYWdlbnQuaXNNb2NrQWN0aXZlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBtb2NrRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTW9ja05vdE1hdGNoZWRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG5ldENvbm5lY3QgPSBhZ2VudFtrR2V0TmV0Q29ubmVjdF0oKVxuICAgICAgICAgIGlmIChuZXRDb25uZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgZGlzYWJsZWQpYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoZWNrTmV0Q29ubmVjdChuZXRDb25uZWN0LCBvcmlnaW4pKSB7XG4gICAgICAgICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgaXMgbm90IGVuYWJsZWQgZm9yIHRoaXMgb3JpZ2luKWApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrTmV0Q29ubmVjdCAobmV0Q29ubmVjdCwgb3JpZ2luKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwob3JpZ2luKVxuICBpZiAobmV0Q29ubmVjdCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXRDb25uZWN0KSAmJiBuZXRDb25uZWN0LnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoVmFsdWUobWF0Y2hlciwgdXJsLmhvc3QpKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja09wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKG9wdHMpIHtcbiAgICBjb25zdCB7IGFnZW50LCAuLi5tb2NrT3B0aW9ucyB9ID0gb3B0c1xuICAgIHJldHVybiBtb2NrT3B0aW9uc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRSZXNwb25zZURhdGEsXG4gIGdldE1vY2tEaXNwYXRjaCxcbiAgYWRkTW9ja0Rpc3BhdGNoLFxuICBkZWxldGVNb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkS2V5LFxuICBnZW5lcmF0ZUtleVZhbHVlcyxcbiAgbWF0Y2hWYWx1ZSxcbiAgZ2V0UmVzcG9uc2UsXG4gIGdldFN0YXR1c1RleHQsXG4gIG1vY2tEaXNwYXRjaCxcbiAgYnVpbGRNb2NrRGlzcGF0Y2gsXG4gIGNoZWNrTmV0Q29ubmVjdCxcbiAgYnVpbGRNb2NrT3B0aW9ucyxcbiAgZ2V0SGVhZGVyQnlOYW1lLFxuICBidWlsZEhlYWRlcnNGcm9tQXJyYXlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBnZXRSZXNwb25zZURhdGEsIGJ1aWxkS2V5LCBhZGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrRGlzcGF0Y2hLZXksXG4gIGtEZWZhdWx0SGVhZGVycyxcbiAga0RlZmF1bHRUcmFpbGVycyxcbiAga0NvbnRlbnRMZW5ndGgsXG4gIGtNb2NrRGlzcGF0Y2hcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGJ1aWxkVVJMIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG4vKipcbiAqIERlZmluZXMgdGhlIHNjb3BlIEFQSSBmb3IgYW4gaW50ZXJjZXB0b3IgcmVwbHlcbiAqL1xuY2xhc3MgTW9ja1Njb3BlIHtcbiAgY29uc3RydWN0b3IgKG1vY2tEaXNwYXRjaCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0gPSBtb2NrRGlzcGF0Y2hcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheSBhIHJlcGx5IGJ5IGEgc2V0IGFtb3VudCBpbiBtcy5cbiAgICovXG4gIGRlbGF5ICh3YWl0SW5Ncykge1xuICAgIGlmICh0eXBlb2Ygd2FpdEluTXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHdhaXRJbk1zKSB8fCB3YWl0SW5NcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3dhaXRJbk1zIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5kZWxheSA9IHdhaXRJbk1zXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBkZWZpbmVkIHJlcGx5LCBuZXZlciBtYXJrIGFzIGNvbnN1bWVkLlxuICAgKi9cbiAgcGVyc2lzdCAoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5wZXJzaXN0ID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb25lIHRvIGRlZmluZSBhIHJlcGx5IGZvciBhIHNldCBhbW91bnQgb2YgbWF0Y2hpbmcgcmVxdWVzdHMuXG4gICAqL1xuICB0aW1lcyAocmVwZWF0VGltZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGVhdFRpbWVzICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRUaW1lcykgfHwgcmVwZWF0VGltZXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBlYXRUaW1lcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0udGltZXMgPSByZXBlYXRUaW1lc1xuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGludGVyY2VwdG9yIGZvciBhIE1vY2tcbiAqL1xuY2xhc3MgTW9ja0ludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIG1vY2tEaXNwYXRjaGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMucGF0aCBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzEyNDVcbiAgICAvLyBBcyBwZXIgUkZDIDM5ODYsIGNsaWVudHMgYXJlIG5vdCBzdXBwb3NlZCB0byBzZW5kIFVSSVxuICAgIC8vIGZyYWdtZW50cyB0byBzZXJ2ZXJzIHdoZW4gdGhleSByZXRyaWV2ZSBhIGRvY3VtZW50LFxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgICAgb3B0cy5wYXRoID0gYnVpbGRVUkwob3B0cy5wYXRoLCBvcHRzLnF1ZXJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iL21haW4vbGliL3dlYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoeyBzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMgfSkge1xuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShkYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzW2tDb250ZW50TGVuZ3RoXSA/IHsgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VEYXRhLmxlbmd0aCB9IDoge31cbiAgICBjb25zdCBoZWFkZXJzID0geyAuLi50aGlzW2tEZWZhdWx0SGVhZGVyc10sIC4uLmNvbnRlbnRMZW5ndGgsIC4uLnJlc3BvbnNlT3B0aW9ucy5oZWFkZXJzIH1cbiAgICBjb25zdCB0cmFpbGVycyA9IHsgLi4udGhpc1trRGVmYXVsdFRyYWlsZXJzXSwgLi4ucmVzcG9uc2VPcHRpb25zLnRyYWlsZXJzIH1cblxuICAgIHJldHVybiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzIH1cbiAgfVxuXG4gIHZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzIChyZXBseVBhcmFtZXRlcnMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGx5UGFyYW1ldGVycy5zdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVwbHlQYXJhbWV0ZXJzLnJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgcmVwbHlQYXJhbWV0ZXJzLnJlc3BvbnNlT3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXNwb25zZU9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIHJlcGx5LlxuICAgKi9cbiAgcmVwbHkgKHJlcGx5T3B0aW9uc0NhbGxiYWNrT3JTdGF0dXNDb2RlKSB7XG4gICAgLy8gVmFsdWVzIG9mIHJlcGx5IGFyZW4ndCBhdmFpbGFibGUgcmlnaHQgbm93IGFzIHRoZXlcbiAgICAvLyBjYW4gb25seSBiZSBhdmFpbGFibGUgd2hlbiB0aGUgcmVwbHkgY2FsbGJhY2sgaXMgaW52b2tlZC5cbiAgICBpZiAodHlwZW9mIHJlcGx5T3B0aW9uc0NhbGxiYWNrT3JTdGF0dXNDb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlPcHRpb25zQ2FsbGJhY2tPclN0YXR1c0NvZGUob3B0cylcblxuICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBpbiB0aGUgcmlnaHQgZm9ybWF0XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZWREYXRhICE9PSAnb2JqZWN0JyB8fCByZXNvbHZlZERhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcGx5UGFyYW1ldGVycyA9IHsgZGF0YTogJycsIHJlc3BvbnNlT3B0aW9uczoge30sIC4uLnJlc29sdmVkRGF0YSB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMocmVwbHlQYXJhbWV0ZXJzKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShyZXBseVBhcmFtZXRlcnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCByZXBseVBhcmFtZXRlcnMgPSB7XG4gICAgICBzdGF0dXNDb2RlOiByZXBseU9wdGlvbnNDYWxsYmFja09yU3RhdHVzQ29kZSxcbiAgICAgIGRhdGE6IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gJycgOiBhcmd1bWVudHNbMV0sXG4gICAgICByZXNwb25zZU9wdGlvbnM6IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMl1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhyZXBseVBhcmFtZXRlcnMpXG5cbiAgICAvLyBTZW5kIGluLWFscmVhZHkgcHJvdmlkZWQgZGF0YSBsaWtlIHVzdWFsXG4gICAgY29uc3QgZGlzcGF0Y2hEYXRhID0gdGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEocmVwbHlQYXJhbWV0ZXJzKVxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCBkaXNwYXRjaERhdGEpXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgZXJyb3IuXG4gICAqL1xuICByZXBseVdpdGhFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdlcnJvciBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB7IGVycm9yIH0pXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IGhlYWRlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseUhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSBoZWFkZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSB0cmFpbGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5VHJhaWxlcnMgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHR5cGVvZiB0cmFpbGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndHJhaWxlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0gdHJhaWxlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXBseSBjb250ZW50IGxlbmd0aCBoZWFkZXIgZm9yIHJlcGxpZXMgb24gdGhlIGludGVyY2VwdG9yXG4gICAqL1xuICByZXBseUNvbnRlbnRMZW5ndGggKCkge1xuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuTW9ja0ludGVyY2VwdG9yID0gTW9ja0ludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5Nb2NrU2NvcGUgPSBNb2NrU2NvcGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyL2NsaWVudCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tDbGllbnQgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgQ2xpZW50IHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tDbGllbnQgZXh0ZW5kcyBDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQ2xpZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXIvcG9vbCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tQb29sIHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIFBvb2wgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja1Bvb2wgZXh0ZW5kcyBQb29sIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja1Bvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgc2luZ3VsYXJzID0ge1xuICBwcm9ub3VuOiAnaXQnLFxuICBpczogJ2lzJyxcbiAgd2FzOiAnd2FzJyxcbiAgdGhpczogJ3RoaXMnXG59XG5cbmNvbnN0IHBsdXJhbHMgPSB7XG4gIHByb25vdW46ICd0aGV5JyxcbiAgaXM6ICdhcmUnLFxuICB3YXM6ICd3ZXJlJyxcbiAgdGhpczogJ3RoZXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBsdXJhbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoc2luZ3VsYXIsIHBsdXJhbCkge1xuICAgIHRoaXMuc2luZ3VsYXIgPSBzaW5ndWxhclxuICAgIHRoaXMucGx1cmFsID0gcGx1cmFsXG4gIH1cblxuICBwbHVyYWxpemUgKGNvdW50KSB7XG4gICAgY29uc3Qgb25lID0gY291bnQgPT09IDFcbiAgICBjb25zdCBrZXlzID0gb25lID8gc2luZ3VsYXJzIDogcGx1cmFsc1xuICAgIGNvbnN0IG5vdW4gPSBvbmUgPyB0aGlzLnNpbmd1bGFyIDogdGhpcy5wbHVyYWxcbiAgICByZXR1cm4geyAuLi5rZXlzLCBjb3VudCwgbm91biB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgQ29uc29sZSB9ID0gcmVxdWlyZSgnbm9kZTpjb25zb2xlJylcblxuY29uc3QgUEVSU0lTVEVOVCA9IHByb2Nlc3MudmVyc2lvbnMuaWN1ID8gJ1x1MjcwNScgOiAnWSAnXG5jb25zdCBOT1RfUEVSU0lTVEVOVCA9IHByb2Nlc3MudmVyc2lvbnMuaWN1ID8gJ1x1Mjc0QycgOiAnTiAnXG5cbi8qKlxuICogR2V0cyB0aGUgb3V0cHV0IG9mIGBjb25zb2xlLnRhYmxlKFx1MjAyNilgIGFzIGEgc3RyaW5nLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBkaXNhYmxlQ29sb3JzIH0gPSB7fSkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSh7XG4gICAgICB0cmFuc2Zvcm0gKGNodW5rLCBfZW5jLCBjYikge1xuICAgICAgICBjYihudWxsLCBjaHVuaylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgQ29uc29sZSh7XG4gICAgICBzdGRvdXQ6IHRoaXMudHJhbnNmb3JtLFxuICAgICAgaW5zcGVjdE9wdGlvbnM6IHtcbiAgICAgICAgY29sb3JzOiAhZGlzYWJsZUNvbG9ycyAmJiAhcHJvY2Vzcy5lbnYuQ0lcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZm9ybWF0IChwZW5kaW5nSW50ZXJjZXB0b3JzKSB7XG4gICAgY29uc3Qgd2l0aFByZXR0eUhlYWRlcnMgPSBwZW5kaW5nSW50ZXJjZXB0b3JzLm1hcChcbiAgICAgICh7IG1ldGhvZCwgcGF0aCwgZGF0YTogeyBzdGF0dXNDb2RlIH0sIHBlcnNpc3QsIHRpbWVzLCB0aW1lc0ludm9rZWQsIG9yaWdpbiB9KSA9PiAoe1xuICAgICAgICBNZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgT3JpZ2luOiBvcmlnaW4sXG4gICAgICAgIFBhdGg6IHBhdGgsXG4gICAgICAgICdTdGF0dXMgY29kZSc6IHN0YXR1c0NvZGUsXG4gICAgICAgIFBlcnNpc3RlbnQ6IHBlcnNpc3QgPyBQRVJTSVNURU5UIDogTk9UX1BFUlNJU1RFTlQsXG4gICAgICAgIEludm9jYXRpb25zOiB0aW1lc0ludm9rZWQsXG4gICAgICAgIFJlbWFpbmluZzogcGVyc2lzdCA/IEluZmluaXR5IDogdGltZXMgLSB0aW1lc0ludm9rZWRcbiAgICAgIH0pKVxuXG4gICAgdGhpcy5sb2dnZXIudGFibGUod2l0aFByZXR0eUhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlYWQoKS50b1N0cmluZygpXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9hZ2VudCcpXG5jb25zdCB7XG4gIGtBZ2VudCxcbiAga01vY2tBZ2VudFNldCxcbiAga01vY2tBZ2VudEdldCxcbiAga0Rpc3BhdGNoZXMsXG4gIGtJc01vY2tBY3RpdmUsXG4gIGtOZXRDb25uZWN0LFxuICBrR2V0TmV0Q29ubmVjdCxcbiAga09wdGlvbnMsXG4gIGtGYWN0b3J5XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL21vY2stcG9vbCcpXG5jb25zdCB7IG1hdGNoVmFsdWUsIGJ1aWxkTW9ja09wdGlvbnMgfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlcicpXG5jb25zdCBQbHVyYWxpemVyID0gcmVxdWlyZSgnLi9wbHVyYWxpemVyJylcbmNvbnN0IFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSByZXF1aXJlKCcuL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlcicpXG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzPy5hZ2VudCAmJiB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuICAgIGNvbnN0IGFnZW50ID0gb3B0cz8uYWdlbnQgPyBvcHRzLmFnZW50IDogbmV3IEFnZW50KG9wdHMpXG4gICAgdGhpc1trQWdlbnRdID0gYWdlbnRcblxuICAgIHRoaXNba0NsaWVudHNdID0gYWdlbnRba0NsaWVudHNdXG4gICAgdGhpc1trT3B0aW9uc10gPSBidWlsZE1vY2tPcHRpb25zKG9wdHMpXG4gIH1cblxuICBnZXQgKG9yaWdpbikge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trTW9ja0FnZW50R2V0XShvcmlnaW4pXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICB9XG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gQ2FsbCBNb2NrQWdlbnQuZ2V0IHRvIHBlcmZvcm0gYWRkaXRpb25hbCBzZXR1cCBiZWZvcmUgZGlzcGF0Y2hpbmcgYXMgbm9ybWFsXG4gICAgdGhpcy5nZXQob3B0cy5vcmlnaW4pXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgY2xvc2UgKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgdGhpc1trQ2xpZW50c10uY2xlYXIoKVxuICB9XG5cbiAgZGVhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IGZhbHNlXG4gIH1cblxuICBhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IHRydWVcbiAgfVxuXG4gIGVuYWJsZU5ldENvbm5lY3QgKG1hdGNoZXIpIHtcbiAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBtYXRjaGVyID09PSAnZnVuY3Rpb24nIHx8IG1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXNba05ldENvbm5lY3RdKSkge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XS5wdXNoKG1hdGNoZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IFttYXRjaGVyXVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdVbnN1cHBvcnRlZCBtYXRjaGVyLiBNdXN0IGJlIG9uZSBvZiBTdHJpbmd8RnVuY3Rpb258UmVnRXhwLicpXG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZU5ldENvbm5lY3QgKCkge1xuICAgIHRoaXNba05ldENvbm5lY3RdID0gZmFsc2VcbiAgfVxuXG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gYnlwYXNzIGlzc3VlcyBjYXVzZWQgYnkgdXNpbmcgZ2xvYmFsIHN5bWJvbHMgLSBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNDQ3XG4gIGdldCBpc01vY2tBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzW2tJc01vY2tBY3RpdmVdXG4gIH1cblxuICBba01vY2tBZ2VudFNldF0gKG9yaWdpbiwgZGlzcGF0Y2hlcikge1xuICAgIHRoaXNba0NsaWVudHNdLnNldChvcmlnaW4sIGRpc3BhdGNoZXIpXG4gIH1cblxuICBba0ZhY3RvcnldIChvcmlnaW4pIHtcbiAgICBjb25zdCBtb2NrT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBhZ2VudDogdGhpcyB9LCB0aGlzW2tPcHRpb25zXSlcbiAgICByZXR1cm4gdGhpc1trT3B0aW9uc10gJiYgdGhpc1trT3B0aW9uc10uY29ubmVjdGlvbnMgPT09IDFcbiAgICAgID8gbmV3IE1vY2tDbGllbnQob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgICAgIDogbmV3IE1vY2tQb29sKG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gIH1cblxuICBba01vY2tBZ2VudEdldF0gKG9yaWdpbikge1xuICAgIC8vIEZpcnN0IGNoZWNrIGlmIHdlIGNhbiBpbW1lZGlhdGVseSBmaW5kIGl0XG4gICAgY29uc3QgY2xpZW50ID0gdGhpc1trQ2xpZW50c10uZ2V0KG9yaWdpbilcbiAgICBpZiAoY2xpZW50KSB7XG4gICAgICByZXR1cm4gY2xpZW50XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXREaXNwYXRjaGVyXSBvZiBBcnJheS5mcm9tKHRoaXNba0NsaWVudHNdKSkge1xuICAgICAgaWYgKG5vbkV4cGxpY2l0RGlzcGF0Y2hlciAmJiB0eXBlb2Yga2V5TWF0Y2hlciAhPT0gJ3N0cmluZycgJiYgbWF0Y2hWYWx1ZShrZXlNYXRjaGVyLCBvcmlnaW4pKSB7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgICBkaXNwYXRjaGVyW2tEaXNwYXRjaGVzXSA9IG5vbkV4cGxpY2l0RGlzcGF0Y2hlcltrRGlzcGF0Y2hlc11cbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBba0dldE5ldENvbm5lY3RdICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmV0Q29ubmVjdF1cbiAgfVxuXG4gIHBlbmRpbmdJbnRlcmNlcHRvcnMgKCkge1xuICAgIGNvbnN0IG1vY2tBZ2VudENsaWVudHMgPSB0aGlzW2tDbGllbnRzXVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obW9ja0FnZW50Q2xpZW50cy5lbnRyaWVzKCkpXG4gICAgICAuZmxhdE1hcCgoW29yaWdpbiwgc2NvcGVdKSA9PiBzY29wZVtrRGlzcGF0Y2hlc10ubWFwKGRpc3BhdGNoID0+ICh7IC4uLmRpc3BhdGNoLCBvcmlnaW4gfSkpKVxuICAgICAgLmZpbHRlcigoeyBwZW5kaW5nIH0pID0+IHBlbmRpbmcpXG4gIH1cblxuICBhc3NlcnROb1BlbmRpbmdJbnRlcmNlcHRvcnMgKHsgcGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IG5ldyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyKCkgfSA9IHt9KSB7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ0ludGVyY2VwdG9ycygpXG5cbiAgICBpZiAocGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBsdXJhbGl6ZXIgPSBuZXcgUGx1cmFsaXplcignaW50ZXJjZXB0b3InLCAnaW50ZXJjZXB0b3JzJykucGx1cmFsaXplKHBlbmRpbmcubGVuZ3RoKVxuXG4gICAgdGhyb3cgbmV3IFVuZGljaUVycm9yKGBcbiR7cGx1cmFsaXplci5jb3VudH0gJHtwbHVyYWxpemVyLm5vdW59ICR7cGx1cmFsaXplci5pc30gcGVuZGluZzpcblxuJHtwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyLmZvcm1hdChwZW5kaW5nKX1cbmAudHJpbSgpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0FnZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXIvYWdlbnQnKVxuXG5pZiAoZ2V0R2xvYmFsRGlzcGF0Y2hlcigpID09PSB1bmRlZmluZWQpIHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcihuZXcgQWdlbnQoKSlcbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsRGlzcGF0Y2hlciAoYWdlbnQpIHtcbiAgaWYgKCFhZ2VudCB8fCB0eXBlb2YgYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IGFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsRGlzcGF0Y2hlciwge1xuICAgIHZhbHVlOiBhZ2VudCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERpc3BhdGNoZXIgKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxEaXNwYXRjaGVyXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcixcbiAgZ2V0R2xvYmFsRGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERlY29yYXRvckhhbmRsZXIge1xuICAjaGFuZGxlclxuXG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0JyB8fCBoYW5kbGVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgdGhpcy4jaGFuZGxlciA9IGhhbmRsZXJcbiAgfVxuXG4gIG9uQ29ubmVjdCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uQ29ubmVjdD8uKC4uLmFyZ3MpXG4gIH1cblxuICBvbkVycm9yICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25FcnJvcj8uKC4uLmFyZ3MpXG4gIH1cblxuICBvblVwZ3JhZGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vblVwZ3JhZGU/LiguLi5hcmdzKVxuICB9XG5cbiAgb25SZXNwb25zZVN0YXJ0ZWQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vblJlc3BvbnNlU3RhcnRlZD8uKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkhlYWRlcnM/LiguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25EYXRhPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkNvbXBsZXRlPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkJvZHlTZW50Py4oLi4uYXJncylcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgUmVkaXJlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9yZWRpcmVjdC1oYW5kbGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBvcHRzID0+IHtcbiAgY29uc3QgZ2xvYmFsTWF4UmVkaXJlY3Rpb25zID0gb3B0cz8ubWF4UmVkaXJlY3Rpb25zXG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJlZGlyZWN0SW50ZXJjZXB0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZ2xvYmFsTWF4UmVkaXJlY3Rpb25zLCAuLi5iYXNlT3B0cyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgaGFuZGxlclxuICAgICAgKVxuXG4gICAgICByZXR1cm4gZGlzcGF0Y2goYmFzZU9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IFJldHJ5SGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvcmV0cnktaGFuZGxlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsT3B0cyA9PiB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJldHJ5SW50ZXJjZXB0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaChcbiAgICAgICAgb3B0cyxcbiAgICAgICAgbmV3IFJldHJ5SGFuZGxlcihcbiAgICAgICAgICB7IC4uLm9wdHMsIHJldHJ5T3B0aW9uczogeyAuLi5nbG9iYWxPcHRzLCAuLi5vcHRzLnJldHJ5T3B0aW9ucyB9IH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIGRpc3BhdGNoXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXInKVxuXG5jbGFzcyBEdW1wSGFuZGxlciBleHRlbmRzIERlY29yYXRvckhhbmRsZXIge1xuICAjbWF4U2l6ZSA9IDEwMjQgKiAxMDI0XG4gICNhYm9ydCA9IG51bGxcbiAgI2R1bXBlZCA9IGZhbHNlXG4gICNhYm9ydGVkID0gZmFsc2VcbiAgI3NpemUgPSAwXG4gICNyZWFzb24gPSBudWxsXG4gICNoYW5kbGVyID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yICh7IG1heFNpemUgfSwgaGFuZGxlcikge1xuICAgIHN1cGVyKGhhbmRsZXIpXG5cbiAgICBpZiAobWF4U2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKG1heFNpemUpIHx8IG1heFNpemUgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhTaXplIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAnKVxuICAgIH1cblxuICAgIHRoaXMuI21heFNpemUgPSBtYXhTaXplID8/IHRoaXMuI21heFNpemVcbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIHRoaXMuI2Fib3J0ID0gYWJvcnRcblxuICAgIHRoaXMuI2hhbmRsZXIub25Db25uZWN0KHRoaXMuI2N1c3RvbUFib3J0LmJpbmQodGhpcykpXG4gIH1cblxuICAjY3VzdG9tQWJvcnQgKHJlYXNvbikge1xuICAgIHRoaXMuI2Fib3J0ZWQgPSB0cnVlXG4gICAgdGhpcy4jcmVhc29uID0gcmVhc29uXG4gIH1cblxuICAvLyBUT0RPOiB3aWxsIHJlcXVpcmUgYWRqdXN0bWVudCBhZnRlciBuZXcgaG9va3MgYXJlIG91dFxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggPiB0aGlzLiNtYXhTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcihcbiAgICAgICAgYFJlc3BvbnNlIHNpemUgKCR7Y29udGVudExlbmd0aH0pIGxhcmdlciB0aGFuIG1heFNpemUgKCR7XG4gICAgICAgICAgdGhpcy4jbWF4U2l6ZVxuICAgICAgICB9KWBcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICBzdGF0dXNDb2RlLFxuICAgICAgcmF3SGVhZGVycyxcbiAgICAgIHJlc3VtZSxcbiAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICApXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBpZiAodGhpcy4jZHVtcGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlcnIgPSB0aGlzLiNyZWFzb24gPz8gZXJyXG5cbiAgICB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuI3NpemUgPSB0aGlzLiNzaXplICsgY2h1bmsubGVuZ3RoXG5cbiAgICBpZiAodGhpcy4jc2l6ZSA+PSB0aGlzLiNtYXhTaXplKSB7XG4gICAgICB0aGlzLiNkdW1wZWQgPSB0cnVlXG5cbiAgICAgIGlmICh0aGlzLiNhYm9ydGVkKSB7XG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcih0aGlzLiNyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNoYW5kbGVyLm9uQ29tcGxldGUoW10pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMuI2R1bXBlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2Fib3J0ZWQpIHtcbiAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcih0aGlzLnJlYXNvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuI2hhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEdW1wSW50ZXJjZXB0b3IgKFxuICB7IG1heFNpemU6IGRlZmF1bHRNYXhTaXplIH0gPSB7XG4gICAgbWF4U2l6ZTogMTAyNCAqIDEwMjRcbiAgfVxuKSB7XG4gIHJldHVybiBkaXNwYXRjaCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEludGVyY2VwdCAob3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3QgeyBkdW1wTWF4U2l6ZSA9IGRlZmF1bHRNYXhTaXplIH0gPVxuICAgICAgICBvcHRzXG5cbiAgICAgIGNvbnN0IGR1bXBIYW5kbGVyID0gbmV3IER1bXBIYW5kbGVyKFxuICAgICAgICB7IG1heFNpemU6IGR1bXBNYXhTaXplIH0sXG4gICAgICAgIGhhbmRsZXJcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGR1bXBIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUR1bXBJbnRlcmNlcHRvclxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgeyBpc0lQIH0gPSByZXF1aXJlKCdub2RlOm5ldCcpXG5jb25zdCB7IGxvb2t1cCB9ID0gcmVxdWlyZSgnbm9kZTpkbnMnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXInKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgSW5mb3JtYXRpb25hbEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBtYXhJbnQgPSBNYXRoLnBvdygyLCAzMSkgLSAxXG5cbmNsYXNzIEROU0luc3RhbmNlIHtcbiAgI21heFRUTCA9IDBcbiAgI21heEl0ZW1zID0gMFxuICAjcmVjb3JkcyA9IG5ldyBNYXAoKVxuICBkdWFsU3RhY2sgPSB0cnVlXG4gIGFmZmluaXR5ID0gbnVsbFxuICBsb29rdXAgPSBudWxsXG4gIHBpY2sgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICB0aGlzLiNtYXhUVEwgPSBvcHRzLm1heFRUTFxuICAgIHRoaXMuI21heEl0ZW1zID0gb3B0cy5tYXhJdGVtc1xuICAgIHRoaXMuZHVhbFN0YWNrID0gb3B0cy5kdWFsU3RhY2tcbiAgICB0aGlzLmFmZmluaXR5ID0gb3B0cy5hZmZpbml0eVxuICAgIHRoaXMubG9va3VwID0gb3B0cy5sb29rdXAgPz8gdGhpcy4jZGVmYXVsdExvb2t1cFxuICAgIHRoaXMucGljayA9IG9wdHMucGljayA/PyB0aGlzLiNkZWZhdWx0UGlja1xuICB9XG5cbiAgZ2V0IGZ1bGwgKCkge1xuICAgIHJldHVybiB0aGlzLiNyZWNvcmRzLnNpemUgPT09IHRoaXMuI21heEl0ZW1zXG4gIH1cblxuICBydW5Mb29rdXAgKG9yaWdpbiwgb3B0cywgY2IpIHtcbiAgICBjb25zdCBpcHMgPSB0aGlzLiNyZWNvcmRzLmdldChvcmlnaW4uaG9zdG5hbWUpXG5cbiAgICAvLyBJZiBmdWxsLCB3ZSBqdXN0IHJldHVybiB0aGUgb3JpZ2luXG4gICAgaWYgKGlwcyA9PSBudWxsICYmIHRoaXMuZnVsbCkge1xuICAgICAgY2IobnVsbCwgb3JpZ2luLm9yaWdpbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdHMgPSB7XG4gICAgICBhZmZpbml0eTogdGhpcy5hZmZpbml0eSxcbiAgICAgIGR1YWxTdGFjazogdGhpcy5kdWFsU3RhY2ssXG4gICAgICBsb29rdXA6IHRoaXMubG9va3VwLFxuICAgICAgcGljazogdGhpcy5waWNrLFxuICAgICAgLi4ub3B0cy5kbnMsXG4gICAgICBtYXhUVEw6IHRoaXMuI21heFRUTCxcbiAgICAgIG1heEl0ZW1zOiB0aGlzLiNtYXhJdGVtc1xuICAgIH1cblxuICAgIC8vIElmIG5vIElQcyB3ZSBsb29rdXBcbiAgICBpZiAoaXBzID09IG51bGwpIHtcbiAgICAgIHRoaXMubG9va3VwKG9yaWdpbiwgbmV3T3B0cywgKGVyciwgYWRkcmVzc2VzKSA9PiB7XG4gICAgICAgIGlmIChlcnIgfHwgYWRkcmVzc2VzID09IG51bGwgfHwgYWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNiKGVyciA/PyBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdObyBETlMgZW50cmllcyBmb3VuZCcpKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRSZWNvcmRzKG9yaWdpbiwgYWRkcmVzc2VzKVxuICAgICAgICBjb25zdCByZWNvcmRzID0gdGhpcy4jcmVjb3Jkcy5nZXQob3JpZ2luLmhvc3RuYW1lKVxuXG4gICAgICAgIGNvbnN0IGlwID0gdGhpcy5waWNrKFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIG5ld09wdHMuYWZmaW5pdHlcbiAgICAgICAgKVxuXG4gICAgICAgIGxldCBwb3J0XG4gICAgICAgIGlmICh0eXBlb2YgaXAucG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBwb3J0ID0gYDoke2lwLnBvcnR9YFxuICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbi5wb3J0ICE9PSAnJykge1xuICAgICAgICAgIHBvcnQgPSBgOiR7b3JpZ2luLnBvcnR9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvcnQgPSAnJ1xuICAgICAgICB9XG5cbiAgICAgICAgY2IoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBgJHtvcmlnaW4ucHJvdG9jb2x9Ly8ke1xuICAgICAgICAgICAgaXAuZmFtaWx5ID09PSA2ID8gYFske2lwLmFkZHJlc3N9XWAgOiBpcC5hZGRyZXNzXG4gICAgICAgICAgfSR7cG9ydH1gXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgSVBzIHdlIHBpY2tcbiAgICAgIGNvbnN0IGlwID0gdGhpcy5waWNrKFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGlwcyxcbiAgICAgICAgbmV3T3B0cy5hZmZpbml0eVxuICAgICAgKVxuXG4gICAgICAvLyBJZiBubyBJUHMgd2UgbG9va3VwIC0gZGVsZXRpbmcgb2xkIHJlY29yZHNcbiAgICAgIGlmIChpcCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuI3JlY29yZHMuZGVsZXRlKG9yaWdpbi5ob3N0bmFtZSlcbiAgICAgICAgdGhpcy5ydW5Mb29rdXAob3JpZ2luLCBvcHRzLCBjYilcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBwb3J0XG4gICAgICBpZiAodHlwZW9mIGlwLnBvcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHBvcnQgPSBgOiR7aXAucG9ydH1gXG4gICAgICB9IGVsc2UgaWYgKG9yaWdpbi5wb3J0ICE9PSAnJykge1xuICAgICAgICBwb3J0ID0gYDoke29yaWdpbi5wb3J0fWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvcnQgPSAnJ1xuICAgICAgfVxuXG4gICAgICBjYihcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYCR7b3JpZ2luLnByb3RvY29sfS8vJHtcbiAgICAgICAgICBpcC5mYW1pbHkgPT09IDYgPyBgWyR7aXAuYWRkcmVzc31dYCA6IGlwLmFkZHJlc3NcbiAgICAgICAgfSR7cG9ydH1gXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgI2RlZmF1bHRMb29rdXAgKG9yaWdpbiwgb3B0cywgY2IpIHtcbiAgICBsb29rdXAoXG4gICAgICBvcmlnaW4uaG9zdG5hbWUsXG4gICAgICB7XG4gICAgICAgIGFsbDogdHJ1ZSxcbiAgICAgICAgZmFtaWx5OiB0aGlzLmR1YWxTdGFjayA9PT0gZmFsc2UgPyB0aGlzLmFmZmluaXR5IDogMCxcbiAgICAgICAgb3JkZXI6ICdpcHY0Zmlyc3QnXG4gICAgICB9LFxuICAgICAgKGVyciwgYWRkcmVzc2VzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBNYXAoKVxuXG4gICAgICAgIGZvciAoY29uc3QgYWRkciBvZiBhZGRyZXNzZXMpIHtcbiAgICAgICAgICAvLyBPbiBsaW51eCB3ZSBmb3VuZCBkdXBsaWNhdGVzLCB3ZSBhdHRlbXB0IHRvIHJlbW92ZSB0aGVtIHdpdGhcbiAgICAgICAgICAvLyB0aGUgbGF0ZXN0IHJlY29yZFxuICAgICAgICAgIHJlc3VsdHMuc2V0KGAke2FkZHIuYWRkcmVzc306JHthZGRyLmZhbWlseX1gLCBhZGRyKVxuICAgICAgICB9XG5cbiAgICAgICAgY2IobnVsbCwgcmVzdWx0cy52YWx1ZXMoKSlcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICAjZGVmYXVsdFBpY2sgKG9yaWdpbiwgaG9zdG5hbWVSZWNvcmRzLCBhZmZpbml0eSkge1xuICAgIGxldCBpcCA9IG51bGxcbiAgICBjb25zdCB7IHJlY29yZHMsIG9mZnNldCB9ID0gaG9zdG5hbWVSZWNvcmRzXG5cbiAgICBsZXQgZmFtaWx5XG4gICAgaWYgKHRoaXMuZHVhbFN0YWNrKSB7XG4gICAgICBpZiAoYWZmaW5pdHkgPT0gbnVsbCkge1xuICAgICAgICAvLyBCYWxhbmNlIGJldHdlZW4gaXAgZmFtaWxpZXNcbiAgICAgICAgaWYgKG9mZnNldCA9PSBudWxsIHx8IG9mZnNldCA9PT0gbWF4SW50KSB7XG4gICAgICAgICAgaG9zdG5hbWVSZWNvcmRzLm9mZnNldCA9IDBcbiAgICAgICAgICBhZmZpbml0eSA9IDRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBob3N0bmFtZVJlY29yZHMub2Zmc2V0KytcbiAgICAgICAgICBhZmZpbml0eSA9IChob3N0bmFtZVJlY29yZHMub2Zmc2V0ICYgMSkgPT09IDEgPyA2IDogNFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmRzW2FmZmluaXR5XSAhPSBudWxsICYmIHJlY29yZHNbYWZmaW5pdHldLmlwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZhbWlseSA9IHJlY29yZHNbYWZmaW5pdHldXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYW1pbHkgPSByZWNvcmRzW2FmZmluaXR5ID09PSA0ID8gNiA6IDRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhbWlseSA9IHJlY29yZHNbYWZmaW5pdHldXG4gICAgfVxuXG4gICAgLy8gSWYgbm8gSVBzIHdlIHJldHVybiBudWxsXG4gICAgaWYgKGZhbWlseSA9PSBudWxsIHx8IGZhbWlseS5pcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gaXBcbiAgICB9XG5cbiAgICBpZiAoZmFtaWx5Lm9mZnNldCA9PSBudWxsIHx8IGZhbWlseS5vZmZzZXQgPT09IG1heEludCkge1xuICAgICAgZmFtaWx5Lm9mZnNldCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgZmFtaWx5Lm9mZnNldCsrXG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb24gPSBmYW1pbHkub2Zmc2V0ICUgZmFtaWx5Lmlwcy5sZW5ndGhcbiAgICBpcCA9IGZhbWlseS5pcHNbcG9zaXRpb25dID8/IG51bGxcblxuICAgIGlmIChpcCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaXBcbiAgICB9XG5cbiAgICBpZiAoRGF0ZS5ub3coKSAtIGlwLnRpbWVzdGFtcCA+IGlwLnR0bCkgeyAvLyByZWNvcmQgVFRMIGlzIGFscmVhZHkgaW4gbXNcbiAgICAgIC8vIFdlIGRlbGV0ZSBleHBpcmVkIHJlY29yZHNcbiAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhleSBoYXZlIGRpZmZlcmVudCBUVEwsIHNvIHdlIG1hbmFnZSB0aGVtIGluZGl2aWR1YWxseVxuICAgICAgZmFtaWx5Lmlwcy5zcGxpY2UocG9zaXRpb24sIDEpXG4gICAgICByZXR1cm4gdGhpcy5waWNrKG9yaWdpbiwgaG9zdG5hbWVSZWNvcmRzLCBhZmZpbml0eSlcbiAgICB9XG5cbiAgICByZXR1cm4gaXBcbiAgfVxuXG4gIHNldFJlY29yZHMgKG9yaWdpbiwgYWRkcmVzc2VzKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IHJlY29yZHMgPSB7IHJlY29yZHM6IHsgNDogbnVsbCwgNjogbnVsbCB9IH1cbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBhZGRyZXNzZXMpIHtcbiAgICAgIHJlY29yZC50aW1lc3RhbXAgPSB0aW1lc3RhbXBcbiAgICAgIGlmICh0eXBlb2YgcmVjb3JkLnR0bCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgLy8gVGhlIHJlY29yZCBUVEwgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gbXNcbiAgICAgICAgcmVjb3JkLnR0bCA9IE1hdGgubWluKHJlY29yZC50dGwsIHRoaXMuI21heFRUTClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZC50dGwgPSB0aGlzLiNtYXhUVExcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmFtaWx5UmVjb3JkcyA9IHJlY29yZHMucmVjb3Jkc1tyZWNvcmQuZmFtaWx5XSA/PyB7IGlwczogW10gfVxuXG4gICAgICBmYW1pbHlSZWNvcmRzLmlwcy5wdXNoKHJlY29yZClcbiAgICAgIHJlY29yZHMucmVjb3Jkc1tyZWNvcmQuZmFtaWx5XSA9IGZhbWlseVJlY29yZHNcbiAgICB9XG5cbiAgICB0aGlzLiNyZWNvcmRzLnNldChvcmlnaW4uaG9zdG5hbWUsIHJlY29yZHMpXG4gIH1cblxuICBnZXRIYW5kbGVyIChtZXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBETlNEaXNwYXRjaEhhbmRsZXIodGhpcywgbWV0YSwgb3B0cylcbiAgfVxufVxuXG5jbGFzcyBETlNEaXNwYXRjaEhhbmRsZXIgZXh0ZW5kcyBEZWNvcmF0b3JIYW5kbGVyIHtcbiAgI3N0YXRlID0gbnVsbFxuICAjb3B0cyA9IG51bGxcbiAgI2Rpc3BhdGNoID0gbnVsbFxuICAjaGFuZGxlciA9IG51bGxcbiAgI29yaWdpbiA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoc3RhdGUsIHsgb3JpZ2luLCBoYW5kbGVyLCBkaXNwYXRjaCB9LCBvcHRzKSB7XG4gICAgc3VwZXIoaGFuZGxlcilcbiAgICB0aGlzLiNvcmlnaW4gPSBvcmlnaW5cbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuI29wdHMgPSB7IC4uLm9wdHMgfVxuICAgIHRoaXMuI3N0YXRlID0gc3RhdGVcbiAgICB0aGlzLiNkaXNwYXRjaCA9IGRpc3BhdGNoXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICBjYXNlICdFVElNRURPVVQnOlxuICAgICAgY2FzZSAnRUNPTk5SRUZVU0VEJzoge1xuICAgICAgICBpZiAodGhpcy4jc3RhdGUuZHVhbFN0YWNrKSB7XG4gICAgICAgICAgLy8gV2UgZGVsZXRlIHRoZSByZWNvcmQgYW5kIHJldHJ5XG4gICAgICAgICAgdGhpcy4jc3RhdGUucnVuTG9va3VwKHRoaXMuI29yaWdpbiwgdGhpcy4jb3B0cywgKGVyciwgbmV3T3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaXNwYXRjaE9wdHMgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuI29wdHMsXG4gICAgICAgICAgICAgIG9yaWdpbjogbmV3T3JpZ2luXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuI2Rpc3BhdGNoKGRpc3BhdGNoT3B0cywgdGhpcylcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gaWYgZHVhbC1zdGFjayBkaXNhYmxlZCwgd2UgZXJyb3Igb3V0XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VOT1RGT1VORCc6XG4gICAgICAgIHRoaXMuI3N0YXRlLmRlbGV0ZVJlY29yZCh0aGlzLiNvcmlnaW4pXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJjZXB0b3JPcHRzID0+IHtcbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubWF4VFRMICE9IG51bGwgJiZcbiAgICAodHlwZW9mIGludGVyY2VwdG9yT3B0cz8ubWF4VFRMICE9PSAnbnVtYmVyJyB8fCBpbnRlcmNlcHRvck9wdHM/Lm1heFRUTCA8IDApXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBtYXhUVEwuIE11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgIT0gbnVsbCAmJlxuICAgICh0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5tYXhJdGVtcyAhPT0gJ251bWJlcicgfHxcbiAgICAgIGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgPCAxKVxuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnSW52YWxpZCBtYXhJdGVtcy4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBhbmQgZ3JlYXRlciB0aGFuIHplcm8nXG4gICAgKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgIT0gbnVsbCAmJlxuICAgIGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgIT09IDQgJiZcbiAgICBpbnRlcmNlcHRvck9wdHM/LmFmZmluaXR5ICE9PSA2XG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBhZmZpbml0eS4gTXVzdCBiZSBlaXRoZXIgNCBvciA2JylcbiAgfVxuXG4gIGlmIChcbiAgICBpbnRlcmNlcHRvck9wdHM/LmR1YWxTdGFjayAhPSBudWxsICYmXG4gICAgdHlwZW9mIGludGVyY2VwdG9yT3B0cz8uZHVhbFN0YWNrICE9PSAnYm9vbGVhbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIGR1YWxTdGFjay4gTXVzdCBiZSBhIGJvb2xlYW4nKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ubG9va3VwICE9IG51bGwgJiZcbiAgICB0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5sb29rdXAgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIGxvb2t1cC4gTXVzdCBiZSBhIGZ1bmN0aW9uJylcbiAgfVxuXG4gIGlmIChcbiAgICBpbnRlcmNlcHRvck9wdHM/LnBpY2sgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBpbnRlcmNlcHRvck9wdHM/LnBpY2sgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIHBpY2suIE11c3QgYmUgYSBmdW5jdGlvbicpXG4gIH1cblxuICBjb25zdCBkdWFsU3RhY2sgPSBpbnRlcmNlcHRvck9wdHM/LmR1YWxTdGFjayA/PyB0cnVlXG4gIGxldCBhZmZpbml0eVxuICBpZiAoZHVhbFN0YWNrKSB7XG4gICAgYWZmaW5pdHkgPSBpbnRlcmNlcHRvck9wdHM/LmFmZmluaXR5ID8/IG51bGxcbiAgfSBlbHNlIHtcbiAgICBhZmZpbml0eSA9IGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgPz8gNFxuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBtYXhUVEw6IGludGVyY2VwdG9yT3B0cz8ubWF4VFRMID8/IDEwZTMsIC8vIEV4cHJlc3NlZCBpbiBtc1xuICAgIGxvb2t1cDogaW50ZXJjZXB0b3JPcHRzPy5sb29rdXAgPz8gbnVsbCxcbiAgICBwaWNrOiBpbnRlcmNlcHRvck9wdHM/LnBpY2sgPz8gbnVsbCxcbiAgICBkdWFsU3RhY2ssXG4gICAgYWZmaW5pdHksXG4gICAgbWF4SXRlbXM6IGludGVyY2VwdG9yT3B0cz8ubWF4SXRlbXMgPz8gSW5maW5pdHlcbiAgfVxuXG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IEROU0luc3RhbmNlKG9wdHMpXG5cbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZG5zSW50ZXJjZXB0b3IgKG9yaWdEaXNwYXRjaE9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9XG4gICAgICAgIG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luLmNvbnN0cnVjdG9yID09PSBVUkxcbiAgICAgICAgICA/IG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luXG4gICAgICAgICAgOiBuZXcgVVJMKG9yaWdEaXNwYXRjaE9wdHMub3JpZ2luKVxuXG4gICAgICBpZiAoaXNJUChvcmlnaW4uaG9zdG5hbWUpICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChvcmlnRGlzcGF0Y2hPcHRzLCBoYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5ydW5Mb29rdXAob3JpZ2luLCBvcmlnRGlzcGF0Y2hPcHRzLCAoZXJyLCBuZXdPcmlnaW4pID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRpc3BhdGNoT3B0cyA9IG51bGxcbiAgICAgICAgZGlzcGF0Y2hPcHRzID0ge1xuICAgICAgICAgIC4uLm9yaWdEaXNwYXRjaE9wdHMsXG4gICAgICAgICAgc2VydmVybmFtZTogb3JpZ2luLmhvc3RuYW1lLCAvLyBGb3IgU05JIG9uIFRMU1xuICAgICAgICAgIG9yaWdpbjogbmV3T3JpZ2luLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIGhvc3Q6IG9yaWdpbi5ob3N0bmFtZSxcbiAgICAgICAgICAgIC4uLm9yaWdEaXNwYXRjaE9wdHMuaGVhZGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGRpc3BhdGNoT3B0cyxcbiAgICAgICAgICBpbnN0YW5jZS5nZXRIYW5kbGVyKHsgb3JpZ2luLCBkaXNwYXRjaCwgaGFuZGxlciB9LCBvcmlnRGlzcGF0Y2hPcHRzKVxuICAgICAgICApXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgaXRlcmF0b3JNaXhpbixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlclx1MjAxOXMgZmlyc3QgaXRlbSwgaGVhZGVyXHUyMDE5cyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSBcdTIxOTIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgLy8gICAgVE9ET1xuICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgaWYgKGdldEhlYWRlcnNHdWFyZChoZWFkZXJzKSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cblxuICAvLyA3LiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmV0dXJuIGdldEhlYWRlcnNMaXN0KGhlYWRlcnMpLmFwcGVuZChuYW1lLCB2YWx1ZSwgZmFsc2UpXG5cbiAgLy8gOC4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIGhlYWRlcnNcbn1cblxuZnVuY3Rpb24gY29tcGFyZUhlYWRlck5hbWUgKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPCBiWzBdID8gLTEgOiAxXG59XG5cbmNsYXNzIEhlYWRlcnNMaXN0IHtcbiAgLyoqIEB0eXBlIHtbc3RyaW5nLCBzdHJpbmddW118bnVsbH0gKi9cbiAgY29va2llcyA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoaW5pdCkge1xuICAgIGlmIChpbml0IGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0W2tIZWFkZXJzTWFwXSlcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gaW5pdFtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHRoaXMuY29va2llcyA9IGluaXQuY29va2llcyA9PT0gbnVsbCA/IG51bGwgOiBbLi4uaW5pdC5jb29raWVzXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdClcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbGlzdC1jb250YWluc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqL1xuICBjb250YWlucyAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0uaGFzKGlzTG93ZXJDYXNlID8gbmFtZSA6IG5hbWUudG9Mb3dlckNhc2UoKSlcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5jbGVhcigpXG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgdGhpcy5jb29raWVzID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtYXBwZW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqL1xuICBhcHBlbmQgKG5hbWUsIHZhbHVlLCBpc0xvd2VyQ2FzZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVyXHUyMDE5cyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBpc0xvd2VyQ2FzZSA/IG5hbWUgOiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICh0aGlzLmNvb2tpZXMgPz89IFtdKS5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvd2VyQ2FzZVxuICAgKi9cbiAgc2V0IChuYW1lLCB2YWx1ZSwgaXNMb3dlckNhc2UpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gaXNMb3dlckNhc2UgPyBuYW1lIDogbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBbdmFsdWVdXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCB0aGUgdmFsdWUgb2ZcbiAgICAvLyAgICB0aGUgZmlyc3Qgc3VjaCBoZWFkZXIgdG8gdmFsdWUgYW5kIHJlbW92ZSB0aGVcbiAgICAvLyAgICBvdGhlcnMuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBhcHBlbmQgaGVhZGVyIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZGVsZXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb3dlckNhc2VcbiAgICovXG4gIGRlbGV0ZSAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBpZiAoIWlzTG93ZXJDYXNlKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvd2VyQ2FzZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG4gIGdldCAobmFtZSwgaXNMb3dlckNhc2UpIHtcbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmdldChpc0xvd2VyQ2FzZSA/IG5hbWUgOiBuYW1lLnRvTG93ZXJDYXNlKCkpPy52YWx1ZSA/PyBudWxsXG4gIH1cblxuICAqIFtTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAvLyB1c2UgdGhlIGxvd2VyY2FzZWQgbmFtZVxuICAgIGZvciAoY29uc3QgeyAwOiBuYW1lLCAxOiB7IHZhbHVlIH0gfSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplICE9PSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgcmF3VmFsdWVzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0udmFsdWVzKClcbiAgfVxuXG4gIGdldCBlbnRyaWVzTGlzdCAoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICBpZiAodGhpc1trSGVhZGVyc01hcF0uc2l6ZSAhPT0gMCkge1xuICAgICAgZm9yIChjb25zdCB7IDA6IGxvd2VyTmFtZSwgMTogeyBuYW1lLCB2YWx1ZSB9IH0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgICAgaWYgKGxvd2VyTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb29raWUgb2YgdGhpcy5jb29raWVzKSB7XG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIGNvb2tpZV0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgdmFsdWVdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb252ZXJ0LWhlYWRlci1uYW1lcy10by1hLXNvcnRlZC1sb3dlcmNhc2Utc2V0XG4gIHRvU29ydGVkQXJyYXkgKCkge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzW2tIZWFkZXJzTWFwXS5zaXplXG4gICAgY29uc3QgYXJyYXkgPSBuZXcgQXJyYXkoc2l6ZSlcbiAgICAvLyBJbiBtb3N0IGNhc2VzLCB5b3Ugd2lsbCB1c2UgdGhlIGZhc3QtcGF0aC5cbiAgICAvLyBmYXN0LXBhdGg6IFVzZSBiaW5hcnkgaW5zZXJ0aW9uIHNvcnQgZm9yIHNtYWxsIGFycmF5cy5cbiAgICBpZiAoc2l6ZSA8PSAzMikge1xuICAgICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgICAgLy8gSWYgZW1wdHksIGl0IGlzIGFuIGVtcHR5IGFycmF5LiBUbyBhdm9pZCB0aGUgZmlyc3QgaW5kZXggYXNzaWdubWVudC5cbiAgICAgICAgcmV0dXJuIGFycmF5XG4gICAgICB9XG4gICAgICAvLyBJbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHVucm9sbGluZyBsb29wIGFuZCBhdm9pZGluZyBkb3VibGUtbG9vcC5cbiAgICAgIC8vIERvdWJsZS1sb29wLWxlc3MgdmVyc2lvbiBvZiB0aGUgYmluYXJ5IGluc2VydGlvbiBzb3J0LlxuICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzW2tIZWFkZXJzTWFwXVtTeW1ib2wuaXRlcmF0b3JdKClcbiAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWVcbiAgICAgIC8vIHNldCBbbmFtZSwgdmFsdWVdIHRvIGZpcnN0IGluZGV4LlxuICAgICAgYXJyYXlbMF0gPSBbZmlyc3RWYWx1ZVswXSwgZmlyc3RWYWx1ZVsxXS52YWx1ZV1cbiAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNvcnQtYW5kLWNvbWJpbmVcbiAgICAgIC8vIDMuMi4yLiBBc3NlcnQ6IHZhbHVlIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGZpcnN0VmFsdWVbMV0udmFsdWUgIT09IG51bGwpXG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgaSA9IDEsIGogPSAwLCByaWdodCA9IDAsIGxlZnQgPSAwLCBwaXZvdCA9IDAsIHgsIHZhbHVlO1xuICAgICAgICBpIDwgc2l6ZTtcbiAgICAgICAgKytpXG4gICAgICApIHtcbiAgICAgICAgLy8gZ2V0IG5leHQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWVcbiAgICAgICAgLy8gc2V0IFtuYW1lLCB2YWx1ZV0gdG8gY3VycmVudCBpbmRleC5cbiAgICAgICAgeCA9IGFycmF5W2ldID0gW3ZhbHVlWzBdLCB2YWx1ZVsxXS52YWx1ZV1cbiAgICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICAgICAgICAvLyAzLjIuMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHhbMV0gIT09IG51bGwpXG4gICAgICAgIGxlZnQgPSAwXG4gICAgICAgIHJpZ2h0ID0gaVxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoXG4gICAgICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcbiAgICAgICAgICAvLyBtaWRkbGUgaW5kZXhcbiAgICAgICAgICBwaXZvdCA9IGxlZnQgKyAoKHJpZ2h0IC0gbGVmdCkgPj4gMSlcbiAgICAgICAgICAvLyBjb21wYXJlIGhlYWRlciBuYW1lXG4gICAgICAgICAgaWYgKGFycmF5W3Bpdm90XVswXSA8PSB4WzBdKSB7XG4gICAgICAgICAgICBsZWZ0ID0gcGl2b3QgKyAxXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJpZ2h0ID0gcGl2b3RcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBpdm90KSB7XG4gICAgICAgICAgaiA9IGlcbiAgICAgICAgICB3aGlsZSAoaiA+IGxlZnQpIHtcbiAgICAgICAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXVxuICAgICAgICAgIH1cbiAgICAgICAgICBhcnJheVtsZWZ0XSA9IHhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogYzggaWdub3JlIG5leHQgNCAqL1xuICAgICAgaWYgKCFpdGVyYXRvci5uZXh0KCkuZG9uZSkge1xuICAgICAgICAvLyBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgYW5kIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnJlYWNoYWJsZScpXG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBjYXNlIHdvdWxkIGJlIGEgcmFyZSBvY2N1cnJlbmNlLlxuICAgICAgLy8gc2xvdy1wYXRoOiBmYWxsYmFja1xuICAgICAgbGV0IGkgPSAwXG4gICAgICBmb3IgKGNvbnN0IHsgMDogbmFtZSwgMTogeyB2YWx1ZSB9IH0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgICAgYXJyYXlbaSsrXSA9IFtuYW1lLCB2YWx1ZV1cbiAgICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICAgICAgICAvLyAzLjIuMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHZhbHVlICE9PSBudWxsKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5LnNvcnQoY29tcGFyZUhlYWRlck5hbWUpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgI2d1YXJkXG4gICNoZWFkZXJzTGlzdFxuXG4gIGNvbnN0cnVjdG9yIChpbml0ID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGlmIChpbml0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLiNoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXMuI2d1YXJkID0gJ25vbmUnXG5cbiAgICAvLyAyLiBJZiBpbml0IGlzIGdpdmVuLCB0aGVuIGZpbGwgdGhpcyB3aXRoIGluaXQuXG4gICAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KGluaXQsICdIZWFkZXJzIGNvbnRydWN0b3InLCAnaW5pdCcpXG4gICAgICBmaWxsKHRoaXMsIGluaXQpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgJ0hlYWRlcnMuYXBwZW5kJylcblxuICAgIGNvbnN0IHByZWZpeCA9ICdIZWFkZXJzLmFwcGVuZCdcbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUsIHByZWZpeCwgJ3ZhbHVlJylcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmRlbGV0ZScpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5kZWxldGUnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5kZWxldGUnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgbmFtZVxuICAgIC8vICAgIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlciBuYW1lLCBhbmRcbiAgICAvLyAgICBuYW1lIGlzIG5vdCBhIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpc1xuICAgIC8vICAgIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXMuI2d1YXJkID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9XG5cbiAgICAvLyA2LiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW5cbiAgICAvLyAgICByZXR1cm4uXG4gICAgaWYgKCF0aGlzLiNoZWFkZXJzTGlzdC5jb250YWlucyhuYW1lLCBmYWxzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDcuIERlbGV0ZSBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpcy5cbiAgICB0aGlzLiNoZWFkZXJzTGlzdC5kZWxldGUobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmdldCcpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5nZXQnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzLiNoZWFkZXJzTGlzdC5nZXQobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdIZWFkZXJzLmhhcycpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5oYXMnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBuYW1lO1xuICAgIC8vICAgIG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpcy4jaGVhZGVyc0xpc3QuY29udGFpbnMobmFtZSwgZmFsc2UpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCAnSGVhZGVycy5zZXQnKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0hlYWRlcnMuc2V0J1xuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXMuI2d1YXJkID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9XG5cbiAgICAvLyA3LiBTZXQgKG5hbWUsIHZhbHVlKSBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzXG4gICAgdGhpcy4jaGVhZGVyc0xpc3Quc2V0KG5hbWUsIHZhbHVlLCBmYWxzZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRzZXRjb29raWVcbiAgZ2V0U2V0Q29va2llICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgU2V0LUNvb2tpZWAsIHRoZW4gcmV0dXJuIFx1MDBBQiBcdTAwQkIuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGhlYWRlcnMgaW4gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3Qgd2hvc2UgbmFtZSBpc1xuICAgIC8vICAgIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBgU2V0LUNvb2tpZWAsIGluIG9yZGVyLlxuXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuI2hlYWRlcnNMaXN0LmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdKSB7XG4gICAgICByZXR1cm4gdGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYW4gZW1wdHkgbGlzdCBvZiBoZWFkZXJzIHdpdGggdGhlIGtleSBiZWluZyB0aGUgbmFtZVxuICAgIC8vICAgIGFuZCB2YWx1ZSB0aGUgdmFsdWUuXG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICAvLyAyLiBMZXQgbmFtZXMgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0IGhlYWRlciBuYW1lcyB0byBhIHNvcnRlZC1sb3dlcmNhc2VcbiAgICAvLyAgICBzZXQgd2l0aCBhbGwgdGhlIG5hbWVzIG9mIHRoZSBoZWFkZXJzIGluIGxpc3QuXG4gICAgY29uc3QgbmFtZXMgPSB0aGlzLiNoZWFkZXJzTGlzdC50b1NvcnRlZEFycmF5KClcblxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzLiNoZWFkZXJzTGlzdC5jb29raWVzXG5cbiAgICAvLyBmYXN0LXBhdGhcbiAgICBpZiAoY29va2llcyA9PT0gbnVsbCB8fCBjb29raWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gTm90ZTogVGhlIG5vbi1udWxsIGFzc2VydGlvbiBvZiB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgYnkgYEhlYWRlcnNMaXN0I3RvU29ydGVkQXJyYXlgXG4gICAgICByZXR1cm4gKHRoaXMuI2hlYWRlcnNMaXN0W2tIZWFkZXJzU29ydGVkTWFwXSA9IG5hbWVzKVxuICAgIH1cblxuICAgIC8vIDMuIEZvciBlYWNoIG5hbWUgb2YgbmFtZXM6XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgeyAwOiBuYW1lLCAxOiB2YWx1ZSB9ID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIC8vIE5vdGU6IFRoaXMgb3BlcmF0aW9uIHdhcyBkb25lIGJ5IGBIZWFkZXJzTGlzdCN0b1NvcnRlZEFycmF5YC5cblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gaGVhZGVycy5cbiAgICByZXR1cm4gKHRoaXMuI2hlYWRlcnNMaXN0W2tIZWFkZXJzU29ydGVkTWFwXSA9IGhlYWRlcnMpXG4gIH1cblxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV0gKGRlcHRoLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucy5kZXB0aCA/Pz0gZGVwdGhcblxuICAgIHJldHVybiBgSGVhZGVycyAke3V0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgdGhpcy4jaGVhZGVyc0xpc3QuZW50cmllcyl9YFxuICB9XG5cbiAgc3RhdGljIGdldEhlYWRlcnNHdWFyZCAobykge1xuICAgIHJldHVybiBvLiNndWFyZFxuICB9XG5cbiAgc3RhdGljIHNldEhlYWRlcnNHdWFyZCAobywgZ3VhcmQpIHtcbiAgICBvLiNndWFyZCA9IGd1YXJkXG4gIH1cblxuICBzdGF0aWMgZ2V0SGVhZGVyc0xpc3QgKG8pIHtcbiAgICByZXR1cm4gby4jaGVhZGVyc0xpc3RcbiAgfVxuXG4gIHN0YXRpYyBzZXRIZWFkZXJzTGlzdCAobywgbGlzdCkge1xuICAgIG8uI2hlYWRlcnNMaXN0ID0gbGlzdFxuICB9XG59XG5cbmNvbnN0IHsgZ2V0SGVhZGVyc0d1YXJkLCBzZXRIZWFkZXJzR3VhcmQsIGdldEhlYWRlcnNMaXN0LCBzZXRIZWFkZXJzTGlzdCB9ID0gSGVhZGVyc1xuUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShIZWFkZXJzLCAnZ2V0SGVhZGVyc0d1YXJkJylcblJlZmxlY3QuZGVsZXRlUHJvcGVydHkoSGVhZGVycywgJ3NldEhlYWRlcnNHdWFyZCcpXG5SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KEhlYWRlcnMsICdnZXRIZWFkZXJzTGlzdCcpXG5SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KEhlYWRlcnMsICdzZXRIZWFkZXJzTGlzdCcpXG5cbml0ZXJhdG9yTWl4aW4oJ0hlYWRlcnMnLCBIZWFkZXJzLCBrSGVhZGVyc1NvcnRlZE1hcCwgMCwgMSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSGVhZGVycy5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldFNldENvb2tpZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0hlYWRlcnMnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV06IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdCA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gUmVmbGVjdC5nZXQoViwgU3ltYm9sLml0ZXJhdG9yKVxuXG4gICAgLy8gQSB3b3JrLWFyb3VuZCB0byBlbnN1cmUgd2Ugc2VuZCB0aGUgcHJvcGVybHktY2FzZWQgSGVhZGVycyB3aGVuIFYgaXMgYSBIZWFkZXJzIG9iamVjdC5cbiAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvMzE1OSNpc3N1ZWNvbW1lbnQtMjA3NTUzNzIyNiBiZWZvcmUgdG91Y2hpbmcsIHBsZWFzZS5cbiAgICBpZiAoIXV0aWwudHlwZXMuaXNQcm94eShWKSAmJiBpdGVyYXRvciA9PT0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllcykgeyAvLyBIZWFkZXJzIG9iamVjdFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEhlYWRlcnNMaXN0KFYpLmVudHJpZXNMaXN0XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gZmFsbC10aHJvdWdoXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nXShWLCBwcmVmaXgsIGFyZ3VtZW50LCBpdGVyYXRvci5iaW5kKFYpKVxuICAgIH1cblxuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J10oViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxuXG4gIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZpbGwsXG4gIC8vIGZvciB0ZXN0LlxuICBjb21wYXJlSGVhZGVyTmFtZSxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3QsXG4gIGdldEhlYWRlcnNHdWFyZCxcbiAgc2V0SGVhZGVyc0d1YXJkLFxuICBzZXRIZWFkZXJzTGlzdCxcbiAgZ2V0SGVhZGVyc0xpc3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBIZWFkZXJzLCBIZWFkZXJzTGlzdCwgZmlsbCwgZ2V0SGVhZGVyc0d1YXJkLCBzZXRIZWFkZXJzR3VhcmQsIHNldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBleHRyYWN0Qm9keSwgY2xvbmVCb2R5LCBtaXhpbkJvZHksIGhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5LCBzdHJlYW1SZWdpc3RyeSwgYm9keVVudXNhYmxlIH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCBub2RlVXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHtcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBpc0Vycm9yTGlrZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdDogcmVsZXZhbnRSZWFsbVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1c1xufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY2xhc3NcbmNsYXNzIFJlc3BvbnNlIHtcbiAgLy8gQ3JlYXRlcyBuZXR3b3JrIGVycm9yIFJlc3BvbnNlLlxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIC8vIFRoZSBzdGF0aWMgZXJyb3IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFcbiAgICAvLyBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IG5ldHdvcmsgZXJyb3IsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5c1xuICAgIC8vIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gZnJvbUlubmVyUmVzcG9uc2UobWFrZU5ldHdvcmtFcnJvcigpLCAnaW1tdXRhYmxlJylcblxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdSZXNwb25zZS5qc29uJylcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBmcm9tSW5uZXJSZXNwb25zZShtYWtlUmVzcG9uc2Uoe30pLCAncmVzcG9uc2UnKVxuXG4gICAgLy8gNC4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2VPYmplY3QsIGluaXQsIGFuZCAoYm9keSwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLlxuICAgIGluaXRpYWxpemVSZXNwb25zZShyZXNwb25zZU9iamVjdCwgaW5pdCwgeyBib2R5OiBib2R5WzBdLCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSlcblxuICAgIC8vIDUuIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSByZWRpcmVjdCBSZXNwb25zZSB0aGF0IHJlZGlyZWN0cyB0byB1cmwgd2l0aCBzdGF0dXMgc3RhdHVzLlxuICBzdGF0aWMgcmVkaXJlY3QgKHVybCwgc3RhdHVzID0gMzAyKSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnUmVzcG9uc2UucmVkaXJlY3QnKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBzdGF0dXMgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShzdGF0dXMpXG5cbiAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB1cmwgd2l0aCBjdXJyZW50IHNldHRpbmdzXG4gICAgLy8gb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gVE9ETzogYmFzZS1VUkw/XG4gICAgbGV0IHBhcnNlZFVSTFxuICAgIHRyeSB7XG4gICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKHVybCwgcmVsZXZhbnRSZWFsbS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICR7dXJsfWAsIHsgY2F1c2U6IGVyciB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gdGhyb3cgYSBSYW5nZUVycm9yLlxuICAgIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHN0YXR1cyBjb2RlICR7c3RhdHVzfWApXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IGZyb21Jbm5lclJlc3BvbnNlKG1ha2VSZXNwb25zZSh7fSksICdpbW11dGFibGUnKVxuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIHN0YXR1cy5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLnN0YXR1cyA9IHN0YXR1c1xuXG4gICAgLy8gNi4gTGV0IHZhbHVlIGJlIHBhcnNlZFVSTCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgIGNvbnN0IHZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShVUkxTZXJpYWxpemVyKHBhcnNlZFVSTCkpXG5cbiAgICAvLyA3LiBBcHBlbmQgYExvY2F0aW9uYC92YWx1ZSB0byByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdsb2NhdGlvbicsIHZhbHVlLCB0cnVlKVxuXG4gICAgLy8gOC4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZVxuICBjb25zdHJ1Y3RvciAoYm9keSA9IG51bGwsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgaWYgKGJvZHkgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5ICE9PSBudWxsKSB7XG4gICAgICBib2R5ID0gd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQoYm9keSlcbiAgICB9XG5cbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgcmVzcG9uc2UgdG8gYSBuZXcgcmVzcG9uc2UuXG4gICAgdGhpc1trU3RhdGVdID0gbWFrZVJlc3BvbnNlKHt9KVxuXG4gICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkXG4gICAgLy8gaXMgXCJyZXNwb25zZVwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICBzZXRIZWFkZXJzR3VhcmQodGhpc1trSGVhZGVyc10sICdyZXNwb25zZScpXG4gICAgc2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10sIHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdClcblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoYm9keVVudXNhYmxlKHRoaXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc1x1MjAxOXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIE5vdGU6IFRvIHJlLXJlZ2lzdGVyIGJlY2F1c2Ugb2YgYSBuZXcgc3RyZWFtLlxuICAgIGlmIChoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSAmJiB0aGlzW2tTdGF0ZV0uYm9keT8uc3RyZWFtKSB7XG4gICAgICBzdHJlYW1SZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCBuZXcgV2Vha1JlZih0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pKVxuICAgIH1cblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIHJldHVybiBmcm9tSW5uZXJSZXNwb25zZShjbG9uZWRSZXNwb25zZSwgZ2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdKSlcbiAgfVxuXG4gIFtub2RlVXRpbC5pbnNwZWN0LmN1c3RvbV0gKGRlcHRoLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZGVwdGggPT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGggPSAyXG4gICAgfVxuXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgYm9keTogdGhpcy5ib2R5LFxuICAgICAgYm9keVVzZWQ6IHRoaXMuYm9keVVzZWQsXG4gICAgICBvazogdGhpcy5vayxcbiAgICAgIHJlZGlyZWN0ZWQ6IHRoaXMucmVkaXJlY3RlZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9XG5cbiAgICByZXR1cm4gYFJlc3BvbnNlICR7bm9kZVV0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgcHJvcGVydGllcyl9YFxuICB9XG59XG5cbm1peGluQm9keShSZXNwb25zZSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG4gIHR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvazoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3RlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVzcG9uc2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZSwge1xuICBqc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlc3BvbnNlIChyZXNwb25zZSkge1xuICAvLyBUbyBjbG9uZSBhIHJlc3BvbnNlIHJlc3BvbnNlLCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSwgdGhlbiByZXR1cm4gYSBuZXcgaWRlbnRpY2FsXG4gIC8vIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsIHJlc3BvbnNlIGlzIGEgY2xvbmUgb2YgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLlxuICBpZiAocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHJldHVybiBmaWx0ZXJSZXNwb25zZShcbiAgICAgIGNsb25lUmVzcG9uc2UocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSksXG4gICAgICByZXNwb25zZS50eXBlXG4gICAgKVxuICB9XG5cbiAgLy8gMi4gTGV0IG5ld1Jlc3BvbnNlIGJlIGEgY29weSBvZiByZXNwb25zZSwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyAuLi5yZXNwb25zZSwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBuZXdSZXNwb25zZVx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXNwb25zZS5ib2R5ID0gY2xvbmVCb2R5KG5ld1Jlc3BvbnNlLCByZXNwb25zZS5ib2R5KVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5ld1Jlc3BvbnNlLlxuICByZXR1cm4gbmV3UmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gbWFrZVJlc3BvbnNlIChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgcmFuZ2VSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93UGFzc2VkOiBmYWxzZSxcbiAgICByZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFsczogZmFsc2UsXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIHN0YXR1czogMjAwLFxuICAgIHRpbWluZ0luZm86IG51bGwsXG4gICAgY2FjaGVTdGF0ZTogJycsXG4gICAgc3RhdHVzVGV4dDogJycsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdD8uaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQ/LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKSxcbiAgICB1cmxMaXN0OiBpbml0Py51cmxMaXN0ID8gWy4uLmluaXQudXJsTGlzdF0gOiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXR3b3JrRXJyb3IgKHJlYXNvbikge1xuICBjb25zdCBpc0Vycm9yID0gaXNFcnJvckxpa2UocmVhc29uKVxuICByZXR1cm4gbWFrZVJlc3BvbnNlKHtcbiAgICB0eXBlOiAnZXJyb3InLFxuICAgIHN0YXR1czogMCxcbiAgICBlcnJvcjogaXNFcnJvclxuICAgICAgPyByZWFzb25cbiAgICAgIDogbmV3IEVycm9yKHJlYXNvbiA/IFN0cmluZyhyZWFzb24pIDogcmVhc29uKSxcbiAgICBhYm9ydGVkOiByZWFzb24gJiYgcmVhc29uLm5hbWUgPT09ICdBYm9ydEVycm9yJ1xuICB9KVxufVxuXG4vLyBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIGlzTmV0d29ya0Vycm9yIChyZXNwb25zZSkge1xuICByZXR1cm4gKFxuICAgIC8vIEEgbmV0d29yayBlcnJvciBpcyBhIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJlcnJvclwiLFxuICAgIHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiZcbiAgICAvLyBzdGF0dXMgaXMgMFxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMFxuICApXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWx0ZXJlZFJlc3BvbnNlIChyZXNwb25zZSwgc3RhdGUpIHtcbiAgc3RhdGUgPSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgLi4uc3RhdGVcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICBnZXQgKHRhcmdldCwgcCkge1xuICAgICAgcmV0dXJuIHAgaW4gc3RhdGUgPyBzdGF0ZVtwXSA6IHRhcmdldFtwXVxuICAgIH0sXG4gICAgc2V0ICh0YXJnZXQsIHAsIHZhbHVlKSB7XG4gICAgICBhc3NlcnQoIShwIGluIHN0YXRlKSlcbiAgICAgIHRhcmdldFtwXSA9IHZhbHVlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZmlsdGVyZWQtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbHRlclJlc3BvbnNlIChyZXNwb25zZSwgdHlwZSkge1xuICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICBpZiAodHlwZSA9PT0gJ2Jhc2ljJykge1xuICAgIC8vIEEgYmFzaWMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiYmFzaWNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3RcbiAgICAvLyB3aG9zZSBuYW1lIGlzIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnYmFzaWMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY29ycycpIHtcbiAgICAvLyBBIENPUlMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiY29yc1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJcbiAgICAvLyBsaXN0IHdob3NlIG5hbWUgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lLCBnaXZlblxuICAgIC8vIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdC5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2NvcnMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlJykge1xuICAgIC8vIEFuIG9wYXF1ZSBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXNcbiAgICAvLyBcIm9wYXF1ZVwiLCBVUkwgbGlzdCBpcyB0aGUgZW1wdHkgbGlzdCwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlXG4gICAgLy8gaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlJyxcbiAgICAgIHVybExpc3Q6IE9iamVjdC5mcmVlemUoW10pLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlcmVkaXJlY3QnKSB7XG4gICAgLy8gQW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZVxuICAgIC8vIGlzIFwib3BhcXVlcmVkaXJlY3RcIiwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlIGlzIHRoZSBlbXB0eSBieXRlXG4gICAgLy8gc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlcmVkaXJlY3QnLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBoZWFkZXJzTGlzdDogW10sXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcHJvcHJpYXRlLW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvciAoZmV0Y2hQYXJhbXMsIGVyciA9IG51bGwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZC5cbiAgYXNzZXJ0KGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSlcblxuICAvLyAyLiBSZXR1cm4gYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yIGlmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQ7XG4gIC8vIG90aGVyd2lzZSByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICByZXR1cm4gaXNBYm9ydGVkKGZldGNoUGFyYW1zKVxuICAgID8gbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSwgeyBjYXVzZTogZXJyIH0pKVxuICAgIDogbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1JlcXVlc3Qgd2FzIGNhbmNlbGxlZC4nKSwgeyBjYXVzZTogZXJyIH0pKVxufVxuXG4vLyBodHRwczovL3doYXRwci5vcmcvZmV0Y2gvMTM5Mi5odG1sI2luaXRpYWxpemUtYS1yZXNwb25zZVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlc3BvbnNlIChyZXNwb25zZSwgaW5pdCwgYm9keSkge1xuICAvLyAxLiBJZiBpbml0W1wic3RhdHVzXCJdIGlzIG5vdCBpbiB0aGUgcmFuZ2UgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLCB0aGVuXG4gIC8vICAgIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgaWYgKGluaXQuc3RhdHVzICE9PSBudWxsICYmIChpbml0LnN0YXR1cyA8IDIwMCB8fCBpbml0LnN0YXR1cyA+IDU5OSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5pdFtcInN0YXR1c1wiXSBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiAyMDAgdG8gNTk5LCBpbmNsdXNpdmUuJylcbiAgfVxuXG4gIC8vIDIuIElmIGluaXRbXCJzdGF0dXNUZXh0XCJdIGRvZXMgbm90IG1hdGNoIHRoZSByZWFzb24tcGhyYXNlIHRva2VuIHByb2R1Y3Rpb24sXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIC8vIFNlZSwgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4xLjI6XG4gICAgLy8gICByZWFzb24tcGhyYXNlICA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICAgIGlmICghaXNWYWxpZFJlYXNvblBocmFzZShTdHJpbmcoaW5pdC5zdGF0dXNUZXh0KSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RhdHVzVGV4dCcpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIGluaXRbXCJzdGF0dXNcIl0uXG4gIGlmICgnc3RhdHVzJyBpbiBpbml0ICYmIGluaXQuc3RhdHVzICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1cyA9IGluaXQuc3RhdHVzXG4gIH1cblxuICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZSB0byBpbml0W1wic3RhdHVzVGV4dFwiXS5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXNUZXh0ID0gaW5pdC5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyA1LiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gZmlsbCByZXNwb25zZVx1MjAxOXMgaGVhZGVycyB3aXRoIGluaXRbXCJoZWFkZXJzXCJdLlxuICBpZiAoJ2hlYWRlcnMnIGluIGluaXQgJiYgaW5pdC5oZWFkZXJzICE9IG51bGwpIHtcbiAgICBmaWxsKHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5pdC5oZWFkZXJzKVxuICB9XG5cbiAgLy8gNi4gSWYgYm9keSB3YXMgZ2l2ZW4sIHRoZW46XG4gIGlmIChib2R5KSB7XG4gICAgLy8gMS4gSWYgcmVzcG9uc2UncyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9YFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UncyBib2R5IHRvIGJvZHkncyBib2R5LlxuICAgIHJlc3BvbnNlW2tTdGF0ZV0uYm9keSA9IGJvZHkuYm9keVxuXG4gICAgLy8gMy4gSWYgYm9keSdzIHR5cGUgaXMgbm9uLW51bGwgYW5kIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpblxuICAgIC8vICAgIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtVHlwZWAsIGJvZHkncyB0eXBlKSB0byByZXNwb25zZSdzIGhlYWRlciBsaXN0LlxuICAgIGlmIChib2R5LnR5cGUgIT0gbnVsbCAmJiAhcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5jb250YWlucygnY29udGVudC10eXBlJywgdHJ1ZSkpIHtcbiAgICAgIHJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LXR5cGUnLCBib2R5LnR5cGUsIHRydWUpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY3JlYXRlXG4gKiBAcGFyYW0ge2FueX0gaW5uZXJSZXNwb25zZVxuICogQHBhcmFtIHsncmVxdWVzdCcgfCAnaW1tdXRhYmxlJyB8ICdyZXF1ZXN0LW5vLWNvcnMnIHwgJ3Jlc3BvbnNlJyB8ICdub25lJ30gZ3VhcmRcbiAqIEByZXR1cm5zIHtSZXNwb25zZX1cbiAqL1xuZnVuY3Rpb24gZnJvbUlubmVyUmVzcG9uc2UgKGlubmVyUmVzcG9uc2UsIGd1YXJkKSB7XG4gIGNvbnN0IHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGtDb25zdHJ1Y3QpXG4gIHJlc3BvbnNlW2tTdGF0ZV0gPSBpbm5lclJlc3BvbnNlXG4gIHJlc3BvbnNlW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gIHNldEhlYWRlcnNMaXN0KHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdClcbiAgc2V0SGVhZGVyc0d1YXJkKHJlc3BvbnNlW2tIZWFkZXJzXSwgZ3VhcmQpXG5cbiAgaWYgKGhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmIGlubmVyUmVzcG9uc2UuYm9keT8uc3RyZWFtKSB7XG4gICAgLy8gSWYgdGhlIHRhcmdldCAocmVzcG9uc2UpIGlzIHJlY2xhaW1lZCwgdGhlIGNsZWFudXAgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IHdpdGhcbiAgICAvLyB0aGUgaGVsZCB2YWx1ZSBwcm92aWRlZCBmb3IgaXQgKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pLiBUaGUgaGVsZCB2YWx1ZSBjYW4gYmUgYW55IHZhbHVlOlxuICAgIC8vIGEgcHJpbWl0aXZlIG9yIGFuIG9iamVjdCwgZXZlbiB1bmRlZmluZWQuIElmIHRoZSBoZWxkIHZhbHVlIGlzIGFuIG9iamVjdCwgdGhlIHJlZ2lzdHJ5IGtlZXBzXG4gICAgLy8gYSBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0IChzbyBpdCBjYW4gcGFzcyBpdCB0byB0aGUgY2xlYW51cCBjYWxsYmFjayBsYXRlcikuIFJld29yZGVkIGZyb21cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GaW5hbGl6YXRpb25SZWdpc3RyeVxuICAgIHN0cmVhbVJlZ2lzdHJ5LnJlZ2lzdGVyKHJlc3BvbnNlLCBuZXcgV2Vha1JlZihpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSlcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlYWRhYmxlU3RyZWFtXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgRm9ybURhdGFcbilcblxud2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgVVJMU2VhcmNoUGFyYW1zXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyN0eXBlZGVmZGVmLXhtbGh0dHByZXF1ZXN0Ym9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIHByZWZpeCwgbmFtZSlcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgcHJlZml4LCBuYW1lLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoViwgcHJlZml4LCBuYW1lKVxuICB9XG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEoViwgcHJlZml4LCBuYW1lLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyhWLCBwcmVmaXgsIG5hbWUpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgbmFtZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdCA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmIChWIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0oViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaW5jbHVkZSBhc3luYyBpdGVyYWJsZXMsXG4gIC8vIHRoaXMgaXMgYW4gdW5kaWNpIGV4dGVuc2lvbi5cbiAgaWYgKFY/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gVlxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQoViwgcHJlZml4LCBhcmd1bWVudClcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMjAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzdGF0dXNUZXh0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNOZXR3b3JrRXJyb3IsXG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2UsXG4gIGZyb21Jbm5lclJlc3BvbnNlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyIChrZXkpIHt9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgYmFja3BvcnRlZCB0byB2MThcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSAmJiBwcm9jZXNzLnZlcnNpb24uc3RhcnRzV2l0aCgndjE4JykpIHtcbiAgICBwcm9jZXNzLl9yYXdEZWJ1ZygnVXNpbmcgY29tcGF0aWJpbGl0eSBXZWFrUmVmIGFuZCBGaW5hbGl6YXRpb25SZWdpc3RyeScpXG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH1cbn1cbiIsICIvKiBnbG9iYWxzIEFib3J0Q29udHJvbGxlciAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBleHRyYWN0Qm9keSwgbWl4aW5Cb2R5LCBjbG9uZUJvZHksIGJvZHlVbnVzYWJsZSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHsgSGVhZGVycywgZmlsbDogZmlsbEhlYWRlcnMsIEhlYWRlcnNMaXN0LCBzZXRIZWFkZXJzR3VhcmQsIGdldEhlYWRlcnNHdWFyZCwgc2V0SGVhZGVyc0xpc3QsIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBGaW5hbGl6YXRpb25SZWdpc3RyeSB9ID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IG5vZGVVdGlsID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHtcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgc2FtZU9yaWdpbixcbiAgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZXF1ZXN0RHVwbGV4XG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UsIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzIH0gPSB1dGlsXG5jb25zdCB7IGtIZWFkZXJzLCBrU2lnbmFsLCBrU3RhdGUsIGtEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGdldE1heExpc3RlbmVycywgc2V0TWF4TGlzdGVuZXJzLCBnZXRFdmVudExpc3RlbmVycywgZGVmYXVsdE1heExpc3RlbmVycyB9ID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKVxuXG5jb25zdCBrQWJvcnRDb250cm9sbGVyID0gU3ltYm9sKCdhYm9ydENvbnRyb2xsZXInKVxuXG5jb25zdCByZXF1ZXN0RmluYWxpemVyID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KCh7IHNpZ25hbCwgYWJvcnQgfSkgPT4ge1xuICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydClcbn0pXG5cbmNvbnN0IGRlcGVuZGVudENvbnRyb2xsZXJNYXAgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGJ1aWxkQWJvcnQgKGFjUmVmKSB7XG4gIHJldHVybiBhYm9ydFxuXG4gIGZ1bmN0aW9uIGFib3J0ICgpIHtcbiAgICBjb25zdCBhYyA9IGFjUmVmLmRlcmVmKClcbiAgICBpZiAoYWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3VycmVudGx5LCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBGaW5hbGl6YXRpb25SZWdpc3RyeS5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDc3NDhcbiAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGFib3J0LCB0aGUgZmlyc3Qgc3RlcCBpcyB0byB1bnJlZ2lzdGVyIGZyb20gaXQuXG4gICAgICAvLyBJZiB0aGUgY29udHJvbGxlciBjYW4gcmVmZXIgdG8gaXQsIGl0IGlzIHN0aWxsIHJlZ2lzdGVyZWQuXG4gICAgICAvLyBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIHJlcXVlc3RGaW5hbGl6ZXIudW5yZWdpc3RlcihhYm9ydClcblxuICAgICAgLy8gVW5zdWJzY3JpYmUgYSBsaXN0ZW5lci5cbiAgICAgIC8vIEZpbmFsaXphdGlvblJlZ2lzdHJ5IHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZCwgc28gdGhpcyBtdXN0IGJlIGRvbmUuXG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG5cbiAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuXG4gICAgICBjb25zdCBjb250cm9sbGVyTGlzdCA9IGRlcGVuZGVudENvbnRyb2xsZXJNYXAuZ2V0KGFjLnNpZ25hbClcblxuICAgICAgaWYgKGNvbnRyb2xsZXJMaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXJMaXN0LnNpemUgIT09IDApIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBjb250cm9sbGVyTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHJlZi5kZXJlZigpXG4gICAgICAgICAgICBpZiAoY3RybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN0cmwuYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xsZXJMaXN0LmNsZWFyKClcbiAgICAgICAgfVxuICAgICAgICBkZXBlbmRlbnRDb250cm9sbGVyTWFwLmRlbGV0ZShhYy5zaWduYWwpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmxldCBwYXRjaE1ldGhvZFdhcm5pbmcgPSBmYWxzZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgaWYgKGlucHV0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSAnUmVxdWVzdCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGlucHV0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8oaW5wdXQsIHByZWZpeCwgJ2lucHV0JylcbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQoaW5pdCwgcHJlZml4LCAnaW5pdCcpXG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5iYXNlVXJsXG5cbiAgICAvLyA0LiBMZXQgc2lnbmFsIGJlIG51bGwuXG4gICAgbGV0IHNpZ25hbCA9IG51bGxcblxuICAgIC8vIDUuIElmIGlucHV0IGlzIGEgc3RyaW5nLCB0aGVuOlxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzW2tEaXNwYXRjaGVyXSA9IGluaXQuZGlzcGF0Y2hlclxuXG4gICAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBpbnB1dCB3aXRoIGJhc2VVUkwuXG4gICAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGxldCBwYXJzZWRVUkxcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwoaW5wdXQsIGJhc2VVcmwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyBpbnB1dCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHBhcnNlZFVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGZyb20gYSBVUkwgdGhhdCBpbmNsdWRlcyBjcmVkZW50aWFsczogJyArXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2hvc2UgVVJMIGlzIHBhcnNlZFVSTC5cbiAgICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IHVybExpc3Q6IFtwYXJzZWRVUkxdIH0pXG5cbiAgICAgIC8vIDUuIFNldCBmYWxsYmFja01vZGUgdG8gXCJjb3JzXCIuXG4gICAgICBmYWxsYmFja01vZGUgPSAnY29ycydcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRGlzcGF0Y2hlcl0gPSBpbml0LmRpc3BhdGNoZXIgfHwgaW5wdXRba0Rpc3BhdGNoZXJdXG5cbiAgICAgIC8vIDYuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNy4gQXNzZXJ0OiBpbnB1dCBpcyBhIFJlcXVlc3Qgb2JqZWN0LlxuICAgICAgYXNzZXJ0KGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdClcblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3QgdG8gaW5wdXRcdTIwMTlzIHJlcXVlc3QuXG4gICAgICByZXF1ZXN0ID0gaW5wdXRba1N0YXRlXVxuXG4gICAgICAvLyA5LiBTZXQgc2lnbmFsIHRvIGlucHV0XHUyMDE5cyBzaWduYWwuXG4gICAgICBzaWduYWwgPSBpbnB1dFtrU2lnbmFsXVxuICAgIH1cblxuICAgIC8vIDcuIExldCBvcmlnaW4gYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBvcmlnaW4uXG4gICAgY29uc3Qgb3JpZ2luID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdFx1MjAxOXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0LFxuICAgICAgLy8gd2luZG93IHdpbmRvdy5cbiAgICAgIHdpbmRvdyxcbiAgICAgIC8vIHByaW9yaXR5IHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5LlxuICAgICAgcHJpb3JpdHk6IHJlcXVlc3QucHJpb3JpdHksXG4gICAgICAvLyBvcmlnaW4gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLiBUaGUgcHJvcGFnYXRpb24gb2YgdGhlIG9yaWdpbiBpcyBvbmx5IHNpZ25pZmljYW50IGZvciBuYXZpZ2F0aW9uIHJlcXVlc3RzXG4gICAgICAvLyBiZWluZyBoYW5kbGVkIGJ5IGEgc2VydmljZSB3b3JrZXIuIEluIHRoaXMgc2NlbmFyaW8gYSByZXF1ZXN0IGNhbiBoYXZlIGFuIG9yaWdpbiB0aGF0IGlzIGRpZmZlcmVudFxuICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCBjbGllbnQuXG4gICAgICBvcmlnaW46IHJlcXVlc3Qub3JpZ2luLFxuICAgICAgLy8gcmVmZXJyZXIgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgICByZWZlcnJlcjogcmVxdWVzdC5yZWZlcnJlcixcbiAgICAgIC8vIHJlZmVycmVyIHBvbGljeSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgICByZWZlcnJlclBvbGljeTogcmVxdWVzdC5yZWZlcnJlclBvbGljeSxcbiAgICAgIC8vIG1vZGUgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICAgIG1vZGU6IHJlcXVlc3QubW9kZSxcbiAgICAgIC8vIGNyZWRlbnRpYWxzIG1vZGUgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0LmNyZWRlbnRpYWxzLFxuICAgICAgLy8gY2FjaGUgbW9kZSByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgICAgY2FjaGU6IHJlcXVlc3QuY2FjaGUsXG4gICAgICAvLyByZWRpcmVjdCBtb2RlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgICByZWRpcmVjdDogcmVxdWVzdC5yZWRpcmVjdCxcbiAgICAgIC8vIGludGVncml0eSBtZXRhZGF0YSByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEuXG4gICAgICBpbnRlZ3JpdHk6IHJlcXVlc3QuaW50ZWdyaXR5LFxuICAgICAgLy8ga2VlcGFsaXZlIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGtlZXBhbGl2ZTogcmVxdWVzdC5rZWVwYWxpdmUsXG4gICAgICAvLyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZWxvYWROYXZpZ2F0aW9uOiByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24sXG4gICAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIGhpc3RvcnlOYXZpZ2F0aW9uOiByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uLFxuICAgICAgLy8gVVJMIGxpc3QgQSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgICAgIHVybExpc3Q6IFsuLi5yZXF1ZXN0LnVybExpc3RdXG4gICAgfSlcblxuICAgIGNvbnN0IGluaXRIYXNLZXkgPSBPYmplY3Qua2V5cyhpbml0KS5sZW5ndGggIT09IDBcblxuICAgIC8vIDEzLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gc2V0IGl0IHRvIFwic2FtZS1vcmlnaW5cIi5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgICAgcmVxdWVzdC5tb2RlID0gJ3NhbWUtb3JpZ2luJ1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBVbnNldCByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gMy4gVW5zZXQgcmVxdWVzdFx1MjAxOXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byBcImNsaWVudFwiLlxuICAgICAgcmVxdWVzdC5vcmlnaW4gPSAnY2xpZW50J1xuXG4gICAgICAvLyA1LiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIlxuICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDYuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSAnJ1xuXG4gICAgICAvLyA3LiBTZXQgcmVxdWVzdFx1MjAxOXMgVVJMIHRvIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbcmVxdWVzdC51cmxMaXN0Lmxlbmd0aCAtIDFdXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgcmVxdWVzdFx1MjAxOXMgVVJMIFx1MDBCQi5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Quc2V0dGluZ3NPYmplY3QuYmFzZVVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnY2xpZW50J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIDQuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIHBhcnNlZFJlZmVycmVyLlxuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSBwYXJzZWRSZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTUuIElmIGluaXRbXCJyZWZlcnJlclBvbGljeVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZmVycmVyUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSBpbml0LnJlZmVycmVyUG9saWN5XG4gICAgfVxuXG4gICAgLy8gMTYuIExldCBtb2RlIGJlIGluaXRbXCJtb2RlXCJdIGlmIGl0IGV4aXN0cywgYW5kIGZhbGxiYWNrTW9kZSBvdGhlcndpc2UuXG4gICAgbGV0IG1vZGVcbiAgICBpZiAoaW5pdC5tb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1vZGUgPSBpbml0Lm1vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kZSA9IGZhbGxiYWNrTW9kZVxuICAgIH1cblxuICAgIC8vIDE3LiBJZiBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgcmVxdWVzdCBtb2RlIG5hdmlnYXRlLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMTguIElmIG1vZGUgaXMgbm9uLW51bGwsIHNldCByZXF1ZXN0XHUyMDE5cyBtb2RlIHRvIG1vZGUuXG4gICAgaWYgKG1vZGUgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5tb2RlID0gbW9kZVxuICAgIH1cblxuICAgIC8vIDE5LiBJZiBpbml0W1wiY3JlZGVudGlhbHNcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlXG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQuY3JlZGVudGlhbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jcmVkZW50aWFscyA9IGluaXQuY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgaW5pdFtcImNhY2hlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5jYWNoZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNhY2hlID0gaW5pdC5jYWNoZVxuICAgIH1cblxuICAgIC8vIDIxLiBJZiByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiBhbmQgcmVxdWVzdFx1MjAxOXMgbW9kZSBpc1xuICAgIC8vIG5vdCBcInNhbWUtb3JpZ2luXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHJlcXVlc3QuY2FjaGUgPT09ICdvbmx5LWlmLWNhY2hlZCcgJiYgcmVxdWVzdC5tb2RlICE9PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIidvbmx5LWlmLWNhY2hlZCcgY2FuIGJlIHNldCBvbmx5IHdpdGggJ3NhbWUtb3JpZ2luJyBtb2RlXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAyMi4gSWYgaW5pdFtcInJlZGlyZWN0XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWRpcmVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZGlyZWN0ID0gaW5pdC5yZWRpcmVjdFxuICAgIH1cblxuICAgIC8vIDIzLiBJZiBpbml0W1wiaW50ZWdyaXR5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIHRvIGl0LlxuICAgIGlmIChpbml0LmludGVncml0eSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0LmludGVncml0eSA9IFN0cmluZyhpbml0LmludGVncml0eSlcbiAgICB9XG5cbiAgICAvLyAyNC4gSWYgaW5pdFtcImtlZXBhbGl2ZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZSB0byBpdC5cbiAgICBpZiAoaW5pdC5rZWVwYWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5rZWVwYWxpdmUgPSBCb29sZWFuKGluaXQua2VlcGFsaXZlKVxuICAgIH1cblxuICAgIC8vIDI1LiBJZiBpbml0W1wibWV0aG9kXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IG1ldGhvZCBiZSBpbml0W1wibWV0aG9kXCJdLlxuICAgICAgbGV0IG1ldGhvZCA9IGluaXQubWV0aG9kXG5cbiAgICAgIGNvbnN0IG1heUJlTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzW21ldGhvZF1cblxuICAgICAgaWYgKG1heUJlTm9ybWFsaXplZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIE5vdGU6IEJ5cGFzcyB2YWxpZGF0aW9uIERFTEVURSwgR0VULCBIRUFELCBPUFRJT05TLCBQT1NULCBQVVQsIFBBVENIIGFuZCB0aGVzZSBsb3dlcmNhc2Ugb25lc1xuICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9IG1heUJlTm9ybWFsaXplZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAgIC8vIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBpZiAoIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cHBlckNhc2UgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuXG4gICAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0Lmhhcyh1cHBlckNhc2UpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIE5vcm1hbGl6ZSBtZXRob2QuXG4gICAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAgICAgICAgLy8gTm90ZTogbXVzdCBiZSBpbiB1cHBlcmNhc2VcbiAgICAgICAgbWV0aG9kID0gbm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlW3VwcGVyQ2FzZV0gPz8gbWV0aG9kXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG1ldGhvZCB0byBtZXRob2QuXG4gICAgICAgIHJlcXVlc3QubWV0aG9kID0gbWV0aG9kXG4gICAgICB9XG5cbiAgICAgIGlmICghcGF0Y2hNZXRob2RXYXJuaW5nICYmIHJlcXVlc3QubWV0aG9kID09PSAncGF0Y2gnKSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1VzaW5nIGBwYXRjaGAgaXMgaGlnaGx5IGxpa2VseSB0byByZXN1bHQgaW4gYSBgNDA1IE1ldGhvZCBOb3QgQWxsb3dlZGAuIGBQQVRDSGAgaXMgbXVjaCBtb3JlIGxpa2VseSB0byBzdWNjZWVkLicsIHtcbiAgICAgICAgICBjb2RlOiAnVU5ESUNJLUZFVENILXBhdGNoJ1xuICAgICAgICB9KVxuXG4gICAgICAgIHBhdGNoTWV0aG9kV2FybmluZyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXNcdTIwMTlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc1x1MjAxOXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBidWlsZEFib3J0KGFjUmVmKVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTUwMCwgc2lnbmFsKVxuICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0RXZlbnRMaXN0ZW5lcnMoc2lnbmFsLCAnYWJvcnQnKS5sZW5ndGggPj0gZGVmYXVsdE1heExpc3RlbmVycykge1xuICAgICAgICAgICAgc2V0TWF4TGlzdGVuZXJzKDE1MDAsIHNpZ25hbClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBhYm9ydClcbiAgICAgICAgLy8gVGhlIHRoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSByZWdpc3RyeSBrZXkgdG8gYmUgdW5yZWdpc3RlcmVkLlxuICAgICAgICAvLyBXaXRob3V0IGl0LCB5b3UgY2Fubm90IHVucmVnaXN0ZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ZpbmFsaXphdGlvblJlZ2lzdHJ5XG4gICAgICAgIC8vIGFib3J0IGlzIHVzZWQgYXMgdGhlIHVucmVnaXN0ZXIga2V5LiAoYmVjYXVzZSBpdCBpcyB1bmlxdWUpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9LCBhYm9ydClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMC4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmQgaXNcbiAgICAvLyBcInJlcXVlc3RcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgc2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10sIHJlcXVlc3QuaGVhZGVyc0xpc3QpXG4gICAgc2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdLCAncmVxdWVzdCcpXG5cbiAgICAvLyAzMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgc2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdLCAncmVxdWVzdC1uby1jb3JzJylcbiAgICB9XG5cbiAgICAvLyAzMi4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGVhZGVyc0xpc3R9ICovXG4gICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IGdldEhlYWRlcnNMaXN0KHRoaXNba0hlYWRlcnNdKVxuICAgICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYSBjb3B5IG9mIHRoaXNcdTIwMTlzIGhlYWRlcnMgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlclxuICAgICAgLy8gbGlzdC5cbiAgICAgIC8vIDIuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBzZXQgaGVhZGVycyB0byBpbml0W1wiaGVhZGVyc1wiXS5cbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBpbml0LmhlYWRlcnMgIT09IHVuZGVmaW5lZCA/IGluaXQuaGVhZGVycyA6IG5ldyBIZWFkZXJzTGlzdChoZWFkZXJzTGlzdClcblxuICAgICAgLy8gMy4gRW1wdHkgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICBoZWFkZXJzTGlzdC5jbGVhcigpXG5cbiAgICAgIC8vIDQuIElmIGhlYWRlcnMgaXMgYSBIZWFkZXJzIG9iamVjdCwgdGhlbiBmb3IgZWFjaCBoZWFkZXIgaW4gaXRzIGhlYWRlclxuICAgICAgLy8gbGlzdCwgYXBwZW5kIGhlYWRlclx1MjAxOXMgbmFtZS9oZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGhlYWRlcnMucmF3VmFsdWVzKCkpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQobmFtZSwgdmFsdWUsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IENvcHkgdGhlIGBzZXQtY29va2llYCBtZXRhLWRhdGEuXG4gICAgICAgIGhlYWRlcnNMaXN0LmNvb2tpZXMgPSBoZWFkZXJzLmNvb2tpZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDUuIE90aGVyd2lzZSwgZmlsbCB0aGlzXHUyMDE5cyBoZWFkZXJzIHdpdGggaGVhZGVycy5cbiAgICAgICAgZmlsbEhlYWRlcnModGhpc1trSGVhZGVyc10sIGhlYWRlcnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzMuIExldCBpbnB1dEJvZHkgYmUgaW5wdXRcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgaWYgaW5wdXQgaXMgYSBSZXF1ZXN0XG4gICAgLy8gb2JqZWN0OyBvdGhlcndpc2UgbnVsbC5cbiAgICBjb25zdCBpbnB1dEJvZHkgPSBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpbnB1dFtrU3RhdGVdLmJvZHkgOiBudWxsXG5cbiAgICAvLyAzNC4gSWYgZWl0aGVyIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwgb3IgaW5wdXRCb2R5IGlzXG4gICAgLy8gbm9uLW51bGwsIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYEdFVGAgb3IgYEhFQURgLCB0aGVuIHRocm93IGFcbiAgICAvLyBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgKGluaXQuYm9keSAhPSBudWxsIHx8IGlucHV0Qm9keSAhPSBudWxsKSAmJlxuICAgICAgKHJlcXVlc3QubWV0aG9kID09PSAnR0VUJyB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5LicpXG4gICAgfVxuXG4gICAgLy8gMzUuIExldCBpbml0Qm9keSBiZSBudWxsLlxuICAgIGxldCBpbml0Qm9keSA9IG51bGxcblxuICAgIC8vIDM2LiBJZiBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0LmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMS4gTGV0IENvbnRlbnQtVHlwZSBiZSBudWxsLlxuICAgICAgLy8gMi4gU2V0IGluaXRCb2R5IGFuZCBDb250ZW50LVR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nXG4gICAgICAvLyBpbml0W1wiYm9keVwiXSwgd2l0aCBrZWVwYWxpdmUgc2V0IHRvIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShcbiAgICAgICAgaW5pdC5ib2R5LFxuICAgICAgICByZXF1ZXN0LmtlZXBhbGl2ZVxuICAgICAgKVxuICAgICAgaW5pdEJvZHkgPSBleHRyYWN0ZWRCb2R5XG5cbiAgICAgIC8vIDMsIElmIENvbnRlbnQtVHlwZSBpcyBub24tbnVsbCBhbmQgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lc1xuICAgICAgLy8gbm90IGNvbnRhaW4gYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIGBDb250ZW50LVR5cGVgL0NvbnRlbnQtVHlwZSB0b1xuICAgICAgLy8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChjb250ZW50VHlwZSAmJiAhZ2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10pLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnLCB0cnVlKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHlcdTIwMTlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChib2R5VW51c2FibGUoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIC8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWNyZWF0ZS1hLXByb3h5XG4gICAgICBjb25zdCBpZGVudGl0eVRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oKVxuICAgICAgaW5wdXRCb2R5LnN0cmVhbS5waXBlVGhyb3VnaChpZGVudGl0eVRyYW5zZm9ybSlcbiAgICAgIGZpbmFsQm9keSA9IHtcbiAgICAgICAgc291cmNlOiBpbnB1dEJvZHkuc291cmNlLFxuICAgICAgICBsZW5ndGg6IGlucHV0Qm9keS5sZW5ndGgsXG4gICAgICAgIHN0cmVhbTogaWRlbnRpdHlUcmFuc2Zvcm0ucmVhZGFibGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0MS4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gZmluYWxCb2R5LlxuICAgIHRoaXNba1N0YXRlXS5ib2R5ID0gZmluYWxCb2R5XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIEhUVFAgbWV0aG9kLCB3aGljaCBpcyBcIkdFVFwiIGJ5IGRlZmF1bHQuXG4gIGdldCBtZXRob2QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbWV0aG9kIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1ldGhvZFxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgVVJMIG9mIHJlcXVlc3QgYXMgYSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tTdGF0ZV0udXJsKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIEhlYWRlcnMgb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGhlYWRlcnMgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIE5vdGUgdGhhdCBoZWFkZXJzIGFkZGVkIGluIHRoZSBuZXR3b3JrIGxheWVyIGJ5IHRoZSB1c2VyIGFnZW50IHdpbGwgbm90XG4gIC8vIGJlIGFjY291bnRlZCBmb3IgaW4gdGhpcyBvYmplY3QsIGUuZy4sIHRoZSBcIkhvc3RcIiBoZWFkZXIuXG4gIGdldCBoZWFkZXJzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGtpbmQgb2YgcmVzb3VyY2UgcmVxdWVzdGVkIGJ5IHJlcXVlc3QsIGUuZy4sIFwiZG9jdW1lbnRcIlxuICAvLyBvciBcInNjcmlwdFwiLlxuICBnZXQgZGVzdGluYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgZGVzdGluYXRpb24gZ2V0dGVyIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24uXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5kZXN0aW5hdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgb2YgcmVxdWVzdC4gSXRzIHZhbHVlIGNhbiBiZSBhIHNhbWUtb3JpZ2luIFVSTCBpZlxuICAvLyBleHBsaWNpdGx5IHNldCBpbiBpbml0LCB0aGUgZW1wdHkgc3RyaW5nIHRvIGluZGljYXRlIG5vIHJlZmVycmVyLCBhbmRcbiAgLy8gXCJhYm91dDpjbGllbnRcIiB3aGVuIGRlZmF1bHRpbmcgdG8gdGhlIGdsb2JhbFx1MjAxOXMgZGVmYXVsdC4gVGhpcyBpcyB1c2VkXG4gIC8vIGR1cmluZyBmZXRjaGluZyB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoZSBgUmVmZXJlcmAgaGVhZGVyIG9mIHRoZVxuICAvLyByZXF1ZXN0IGJlaW5nIG1hZGUuXG4gIGdldCByZWZlcnJlciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwibm8tcmVmZXJyZXJcIiwgdGhlbiByZXR1cm4gdGhlXG4gICAgLy8gZW1wdHkgc3RyaW5nLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICduby1yZWZlcnJlcicpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwiY2xpZW50XCIsIHRoZW4gcmV0dXJuXG4gICAgLy8gXCJhYm91dDpjbGllbnRcIi5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnY2xpZW50Jykge1xuICAgICAgcmV0dXJuICdhYm91dDpjbGllbnQnXG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXIudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBUaGlzIGlzIHVzZWQgZHVyaW5nIGZldGNoaW5nIHRvIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlci5cbiAgZ2V0IHJlZmVycmVyUG9saWN5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZmVycmVyUG9saWN5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyUG9saWN5XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nXG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3Qgd2lsbCB1c2UgQ09SUywgb3Igd2lsbCBiZSByZXN0cmljdGVkIHRvIHNhbWUtb3JpZ2luXG4gIC8vIFVSTHMuXG4gIGdldCBtb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1vZGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1vZGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNyZWRlbnRpYWxzIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGVcbiAgLy8gcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgZ2V0IGNyZWRlbnRpYWxzICgpIHtcbiAgICAvLyBUaGUgY3JlZGVudGlhbHMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjYWNoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyB0aGUgcmVxdWVzdCB3aWxsXG4gIC8vIGludGVyYWN0IHdpdGggdGhlIGJyb3dzZXJcdTIwMTlzIGNhY2hlIHdoZW4gZmV0Y2hpbmcuXG4gIGdldCBjYWNoZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBjYWNoZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY2FjaGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZGlyZWN0IG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHJlZGlyZWN0cyBmb3IgdGhlXG4gIC8vIHJlcXVlc3Qgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBmZXRjaGluZy4gQSByZXF1ZXN0XG4gIC8vIHdpbGwgZm9sbG93IHJlZGlyZWN0cyBieSBkZWZhdWx0LlxuICBnZXQgcmVkaXJlY3QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZGlyZWN0XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIHN1YnJlc291cmNlIGludGVncml0eSBtZXRhZGF0YSwgd2hpY2ggaXMgYVxuICAvLyBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIHJlc291cmNlIGJlaW5nIGZldGNoZWQuIEl0cyB2YWx1ZVxuICAvLyBjb25zaXN0cyBvZiBtdWx0aXBsZSBoYXNoZXMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuIFtTUkldXG4gIGdldCBpbnRlZ3JpdHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaW50ZWdyaXR5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGludGVncml0eVxuICAgIC8vIG1ldGFkYXRhLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaW50ZWdyaXR5XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgY2FuIG91dGxpdmUgdGhlXG4gIC8vIGdsb2JhbCBpbiB3aGljaCBpdCB3YXMgY3JlYXRlZC5cbiAgZ2V0IGtlZXBhbGl2ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBrZWVwYWxpdmUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ua2VlcGFsaXZlXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgcmVsb2FkXG4gIC8vIG5hdmlnYXRpb24uXG4gIGdldCBpc1JlbG9hZE5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNSZWxvYWROYXZpZ2F0aW9uIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVsb2FkTmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIGhpc3RvcnlcbiAgLy8gbmF2aWdhdGlvbiAoYS5rLmEuIGJhY2stZm9yd2FyZCBuYXZpZ2F0aW9uKS5cbiAgZ2V0IGlzSGlzdG9yeU5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNIaXN0b3J5TmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5oaXN0b3J5TmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgc2lnbmFsIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhbiBBYm9ydFNpZ25hbFxuICAvLyBvYmplY3QgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQsIGFuZCBpdHNcbiAgLy8gYWJvcnQgZXZlbnQgaGFuZGxlci5cbiAgZ2V0IHNpZ25hbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBzaWduYWwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIHJldHVybiB0aGlzW2tTaWduYWxdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgZ2V0IGR1cGxleCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAnaGFsZidcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXF1ZXN0LlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGJvZHlVbnVzYWJsZSh0aGlzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW51c2FibGUnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXF1ZXN0IGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXF1ZXN0LlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gTGV0IGNsb25lZFJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlcXVlc3Qgb2JqZWN0LFxuICAgIC8vIGdpdmVuIGNsb25lZFJlcXVlc3QsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWwgZm9sbG93IHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsaXN0ID0gZGVwZW5kZW50Q29udHJvbGxlck1hcC5nZXQodGhpcy5zaWduYWwpXG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxpc3QgPSBuZXcgU2V0KClcbiAgICAgICAgZGVwZW5kZW50Q29udHJvbGxlck1hcC5zZXQodGhpcy5zaWduYWwsIGxpc3QpXG4gICAgICB9XG4gICAgICBjb25zdCBhY1JlZiA9IG5ldyBXZWFrUmVmKGFjKVxuICAgICAgbGlzdC5hZGQoYWNSZWYpXG4gICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoXG4gICAgICAgIGFjLnNpZ25hbCxcbiAgICAgICAgYnVpbGRBYm9ydChhY1JlZilcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdC5cbiAgICByZXR1cm4gZnJvbUlubmVyUmVxdWVzdChjbG9uZWRSZXF1ZXN0LCBhYy5zaWduYWwsIGdldEhlYWRlcnNHdWFyZCh0aGlzW2tIZWFkZXJzXSkpXG4gIH1cblxuICBbbm9kZVV0aWwuaW5zcGVjdC5jdXN0b21dIChkZXB0aCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmRlcHRoID09PSBudWxsKSB7XG4gICAgICBvcHRpb25zLmRlcHRoID0gMlxuICAgIH1cblxuICAgIG9wdGlvbnMuY29sb3JzID8/PSB0cnVlXG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICBkZXN0aW5hdGlvbjogdGhpcy5kZXN0aW5hdGlvbixcbiAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgcmVmZXJyZXJQb2xpY3k6IHRoaXMucmVmZXJyZXJQb2xpY3ksXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgcmVkaXJlY3Q6IHRoaXMucmVkaXJlY3QsXG4gICAgICBpbnRlZ3JpdHk6IHRoaXMuaW50ZWdyaXR5LFxuICAgICAga2VlcGFsaXZlOiB0aGlzLmtlZXBhbGl2ZSxcbiAgICAgIGlzUmVsb2FkTmF2aWdhdGlvbjogdGhpcy5pc1JlbG9hZE5hdmlnYXRpb24sXG4gICAgICBpc0hpc3RvcnlOYXZpZ2F0aW9uOiB0aGlzLmlzSGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICBzaWduYWw6IHRoaXMuc2lnbmFsXG4gICAgfVxuXG4gICAgcmV0dXJuIGBSZXF1ZXN0ICR7bm9kZVV0aWwuZm9ybWF0V2l0aE9wdGlvbnMob3B0aW9ucywgcHJvcGVydGllcyl9YFxuICB9XG59XG5cbm1peGluQm9keShSZXF1ZXN0KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHNcbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0IChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBpbml0Lm1ldGhvZCA/PyAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBpbml0LmxvY2FsVVJMc09ubHkgPz8gZmFsc2UsXG4gICAgdW5zYWZlUmVxdWVzdDogaW5pdC51bnNhZmVSZXF1ZXN0ID8/IGZhbHNlLFxuICAgIGJvZHk6IGluaXQuYm9keSA/PyBudWxsLFxuICAgIGNsaWVudDogaW5pdC5jbGllbnQgPz8gbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogaW5pdC5yZXNlcnZlZENsaWVudCA/PyBudWxsLFxuICAgIHJlcGxhY2VzQ2xpZW50SWQ6IGluaXQucmVwbGFjZXNDbGllbnRJZCA/PyAnJyxcbiAgICB3aW5kb3c6IGluaXQud2luZG93ID8/ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogaW5pdC5rZWVwYWxpdmUgPz8gZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6IGluaXQuc2VydmljZVdvcmtlcnMgPz8gJ2FsbCcsXG4gICAgaW5pdGlhdG9yOiBpbml0LmluaXRpYXRvciA/PyAnJyxcbiAgICBkZXN0aW5hdGlvbjogaW5pdC5kZXN0aW5hdGlvbiA/PyAnJyxcbiAgICBwcmlvcml0eTogaW5pdC5wcmlvcml0eSA/PyBudWxsLFxuICAgIG9yaWdpbjogaW5pdC5vcmlnaW4gPz8gJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiBpbml0LnBvbGljeUNvbnRhaW5lciA/PyAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogaW5pdC5yZWZlcnJlciA/PyAnY2xpZW50JyxcbiAgICByZWZlcnJlclBvbGljeTogaW5pdC5yZWZlcnJlclBvbGljeSA/PyAnJyxcbiAgICBtb2RlOiBpbml0Lm1vZGUgPz8gJ25vLWNvcnMnLFxuICAgIHVzZUNPUlNQcmVmbGlnaHRGbGFnOiBpbml0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID8/IGZhbHNlLFxuICAgIGNyZWRlbnRpYWxzOiBpbml0LmNyZWRlbnRpYWxzID8/ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGluaXQudXNlQ3JlZGVudGlhbHMgPz8gZmFsc2UsXG4gICAgY2FjaGU6IGluaXQuY2FjaGUgPz8gJ2RlZmF1bHQnLFxuICAgIHJlZGlyZWN0OiBpbml0LnJlZGlyZWN0ID8/ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogaW5pdC5pbnRlZ3JpdHkgPz8gJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiBpbml0LmNyeXB0b0dyYXBoaWNzTm9uY2VNZXRhZGF0YSA/PyAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogaW5pdC5wYXJzZXJNZXRhZGF0YSA/PyAnJyxcbiAgICByZWxvYWROYXZpZ2F0aW9uOiBpbml0LnJlbG9hZE5hdmlnYXRpb24gPz8gZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGluaXQuaGlzdG9yeU5hdmlnYXRpb24gPz8gZmFsc2UsXG4gICAgdXNlckFjdGl2YXRpb246IGluaXQudXNlckFjdGl2YXRpb24gPz8gZmFsc2UsXG4gICAgdGFpbnRlZE9yaWdpbjogaW5pdC50YWludGVkT3JpZ2luID8/IGZhbHNlLFxuICAgIHJlZGlyZWN0Q291bnQ6IGluaXQucmVkaXJlY3RDb3VudCA/PyAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6IGluaXQucmVzcG9uc2VUYWludGluZyA/PyAnYmFzaWMnLFxuICAgIHByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uOiBpbml0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uID8/IGZhbHNlLFxuICAgIGRvbmU6IGluaXQuZG9uZSA/PyBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd0ZhaWxlZDogaW5pdC50aW1pbmdBbGxvd0ZhaWxlZCA/PyBmYWxzZSxcbiAgICB1cmxMaXN0OiBpbml0LnVybExpc3QsXG4gICAgdXJsOiBpbml0LnVybExpc3RbMF0sXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXF1ZXN0IChyZXF1ZXN0KSB7XG4gIC8vIFRvIGNsb25lIGEgcmVxdWVzdCByZXF1ZXN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gTGV0IG5ld1JlcXVlc3QgYmUgYSBjb3B5IG9mIHJlcXVlc3QsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1JlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IC4uLnJlcXVlc3QsIGJvZHk6IG51bGwgfSlcblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBzZXQgbmV3UmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVxdWVzdFx1MjAxOXMgYm9keS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVxdWVzdC5ib2R5ID0gY2xvbmVCb2R5KG5ld1JlcXVlc3QsIHJlcXVlc3QuYm9keSlcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBuZXdSZXF1ZXN0LlxuICByZXR1cm4gbmV3UmVxdWVzdFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtY3JlYXRlXG4gKiBAcGFyYW0ge2FueX0gaW5uZXJSZXF1ZXN0XG4gKiBAcGFyYW0ge0Fib3J0U2lnbmFsfSBzaWduYWxcbiAqIEBwYXJhbSB7J3JlcXVlc3QnIHwgJ2ltbXV0YWJsZScgfCAncmVxdWVzdC1uby1jb3JzJyB8ICdyZXNwb25zZScgfCAnbm9uZSd9IGd1YXJkXG4gKiBAcmV0dXJucyB7UmVxdWVzdH1cbiAqL1xuZnVuY3Rpb24gZnJvbUlubmVyUmVxdWVzdCAoaW5uZXJSZXF1ZXN0LCBzaWduYWwsIGd1YXJkKSB7XG4gIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChrQ29uc3RydWN0KVxuICByZXF1ZXN0W2tTdGF0ZV0gPSBpbm5lclJlcXVlc3RcbiAgcmVxdWVzdFtrU2lnbmFsXSA9IHNpZ25hbFxuICByZXF1ZXN0W2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gIHNldEhlYWRlcnNMaXN0KHJlcXVlc3Rba0hlYWRlcnNdLCBpbm5lclJlcXVlc3QuaGVhZGVyc0xpc3QpXG4gIHNldEhlYWRlcnNHdWFyZChyZXF1ZXN0W2tIZWFkZXJzXSwgZ3VhcmQpXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlcXVlc3QucHJvdG90eXBlLCB7XG4gIG1ldGhvZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNpZ25hbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZHVwbGV4OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZXN0aW5hdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzSGlzdG9yeU5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzUmVsb2FkTmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2VlcGFsaXZlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbnRlZ3JpdHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNhY2hlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYXR0cmlidXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlclBvbGljeToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1vZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXF1ZXN0JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlcXVlc3RcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RpbmZvXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdChWLCBwcmVmaXgsIGFyZ3VtZW50KVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBwcmVmaXgsIGFyZ3VtZW50KVxufVxuXG53ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEFib3J0U2lnbmFsXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdtZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9LFxuICB7XG4gICAga2V5OiAnYm9keScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdFxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXJQb2xpY3knLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY3lcbiAgICBhbGxvd2VkVmFsdWVzOiByZWZlcnJlclBvbGljeVxuICB9LFxuICB7XG4gICAga2V5OiAnbW9kZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1tb2RlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdE1vZGVcbiAgfSxcbiAge1xuICAgIGtleTogJ2NyZWRlbnRpYWxzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNyZWRlbnRpYWxzXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENyZWRlbnRpYWxzXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYWNoZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjYWNoZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDYWNoZVxuICB9LFxuICB7XG4gICAga2V5OiAncmVkaXJlY3QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0cmVkaXJlY3RcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0UmVkaXJlY3RcbiAgfSxcbiAge1xuICAgIGtleTogJ2ludGVncml0eScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2tlZXBhbGl2ZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzaWduYWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgKHNpZ25hbCkgPT4gd2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwoXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgJ1JlcXVlc3RJbml0JyxcbiAgICAgICAgJ3NpZ25hbCcsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9XG4gICAgICApXG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAnd2luZG93JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9LFxuICB7XG4gICAga2V5OiAnZHVwbGV4JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0RHVwbGV4XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJywgLy8gdW5kaWNpIHNwZWNpZmljIG9wdGlvblxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0geyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCwgZnJvbUlubmVyUmVxdWVzdCwgY2xvbmVSZXF1ZXN0IH1cbiIsICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIG1ha2VSZXNwb25zZSxcbiAgZnJvbUlubmVyUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IFJlcXVlc3QsIGNsb25lUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9yZXF1ZXN0JylcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCdub2RlOnpsaWInKVxuY29uc3Qge1xuICBieXRlc01hdGNoLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIFRBT0NoZWNrLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgaXNCbG9iTGlrZSxcbiAgc2FtZU9yaWdpbixcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8sXG4gIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUsXG4gIGJ1aWxkQ29udGVudFJhbmdlLFxuICBjcmVhdGVJbmZsYXRlLFxuICBleHRyYWN0TWltZVR5cGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUsIGtEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSwgZXh0cmFjdEJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICBzdWJyZXNvdXJjZVNldFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKVxuY29uc3QgeyBSZWFkYWJsZSwgcGlwZWxpbmUsIGZpbmlzaGVkIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGFkZEFib3J0TGlzdGVuZXIsIGlzRXJyb3JlZCwgaXNSZWFkYWJsZSwgYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZGF0YVVSTFByb2Nlc3Nvciwgc2VyaWFsaXplQU1pbWVUeXBlLCBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vLi4vZ2xvYmFsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IEdFVF9PUl9IRUFEID0gWydHRVQnLCAnSEVBRCddXG5cbmNvbnN0IGRlZmF1bHRVc2VyQWdlbnQgPSB0eXBlb2YgX19VTkRJQ0lfSVNfTk9ERV9fICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXNidWlsZERldGVjdGlvbiAhPT0gJ3VuZGVmaW5lZCdcbiAgPyAnbm9kZSdcbiAgOiAndW5kaWNpJ1xuXG4vKiogQHR5cGUge2ltcG9ydCgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTH0gKi9cbmxldCByZXNvbHZlT2JqZWN0VVJMXG5cbmNsYXNzIEZldGNoIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2hlcikge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsXG4gICAgdGhpcy5kdW1wID0gZmFsc2VcbiAgICB0aGlzLnN0YXRlID0gJ29uZ29pbmcnXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZldGNoRG9uZSAocmVzcG9uc2UpIHtcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHVuZGVmaW5lZCkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdnbG9iYWxUaGlzLmZldGNoJylcblxuICAvLyAxLiBMZXQgcCBiZSBhIG5ldyBwcm9taXNlLlxuICBsZXQgcCA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZlxuICAvLyBSZXF1ZXN0IGFzIGNvbnN0cnVjdG9yIHdpdGggaW5wdXQgYW5kIGluaXQgYXMgYXJndW1lbnRzLiBJZiB0aGlzIHRocm93c1xuICAvLyBhbiBleGNlcHRpb24sIHJlamVjdCBwIHdpdGggaXQgYW5kIHJldHVybiBwLlxuICBsZXQgcmVxdWVzdE9iamVjdFxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgcC5yZWplY3QoZSlcbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyAzLiBMZXQgcmVxdWVzdCBiZSByZXF1ZXN0T2JqZWN0XHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNC4gSWYgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICBpZiAocmVxdWVzdE9iamVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgIC8vIDEuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCBudWxsLCBhbmRcbiAgICAvLyAgICByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIG51bGwsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgIC8vIDIuIFJldHVybiBwLlxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDUuIExldCBnbG9iYWxPYmplY3QgYmUgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICBjb25zdCBnbG9iYWxPYmplY3QgPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAvLyA2LiBJZiBnbG9iYWxPYmplY3QgaXMgYSBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgb2JqZWN0LCB0aGVuIHNldFxuICAvLyByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgaWYgKGdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUnKSB7XG4gICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICB9XG5cbiAgLy8gNy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIG51bGwuXG4gIGxldCByZXNwb25zZU9iamVjdCA9IG51bGxcblxuICAvLyA4LiBMZXQgcmVsZXZhbnRSZWFsbSBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cblxuICAvLyA5LiBMZXQgbG9jYWxseUFib3J0ZWQgYmUgZmFsc2UuXG4gIGxldCBsb2NhbGx5QWJvcnRlZCA9IGZhbHNlXG5cbiAgLy8gMTAuIExldCBjb250cm9sbGVyIGJlIG51bGwuXG4gIGxldCBjb250cm9sbGVyID0gbnVsbFxuXG4gIC8vIDExLiBBZGQgdGhlIGZvbGxvd2luZyBhYm9ydCBzdGVwcyB0byByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWw6XG4gIGFkZEFib3J0TGlzdGVuZXIoXG4gICAgcmVxdWVzdE9iamVjdC5zaWduYWwsXG4gICAgKCkgPT4ge1xuICAgICAgLy8gMS4gU2V0IGxvY2FsbHlBYm9ydGVkIHRvIHRydWUuXG4gICAgICBsb2NhbGx5QWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gQXNzZXJ0OiBjb250cm9sbGVyIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT0gbnVsbClcblxuICAgICAgLy8gMy4gQWJvcnQgY29udHJvbGxlciB3aXRoIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgY29udHJvbGxlci5hYm9ydChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAgIGNvbnN0IHJlYWxSZXNwb25zZSA9IHJlc3BvbnNlT2JqZWN0Py5kZXJlZigpXG5cbiAgICAgIC8vIDQuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCxcbiAgICAgIC8vICAgIGFuZCByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVhbFJlc3BvbnNlLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICAvLyBzZWUgZnVuY3Rpb24gaGFuZGxlRmV0Y2hEb25lXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNlXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcsIHsgY2F1c2U6IHJlc3BvbnNlLmVycm9yIH0pKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFdlYWtSZWYoZnJvbUlubmVyUmVzcG9uc2UocmVzcG9uc2UsICdpbW11dGFibGUnKSlcblxuICAgIC8vIDUuIFJlc29sdmUgcCB3aXRoIHJlc3BvbnNlT2JqZWN0LlxuICAgIHAucmVzb2x2ZShyZXNwb25zZU9iamVjdC5kZXJlZigpKVxuICAgIHAgPSBudWxsXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IHJlcXVlc3RPYmplY3Rba0Rpc3BhdGNoZXJdIC8vIHVuZGljaVxuICB9KVxuXG4gIC8vIDE0LiBSZXR1cm4gcC5cbiAgcmV0dXJuIHAucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtYW5kLXJlcG9ydC10aW1pbmdcbmZ1bmN0aW9uIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nIChyZXNwb25zZSwgaW5pdGlhdG9yVHlwZSA9ICdvdGhlcicpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiYgcmVzcG9uc2UuYWJvcnRlZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIG51bGwgb3IgZW1wdHksIHRoZW4gcmV0dXJuLlxuICBpZiAoIXJlc3BvbnNlLnVybExpc3Q/Lmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMy4gTGV0IG9yaWdpbmFsVVJMIGJlIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdFswXS5cbiAgY29uc3Qgb3JpZ2luYWxVUkwgPSByZXNwb25zZS51cmxMaXN0WzBdXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBsZXQgdGltaW5nSW5mbyA9IHJlc3BvbnNlLnRpbWluZ0luZm9cblxuICAvLyA1LiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gIGxldCBjYWNoZVN0YXRlID0gcmVzcG9uc2UuY2FjaGVTdGF0ZVxuXG4gIC8vIDYuIElmIG9yaWdpbmFsVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShvcmlnaW5hbFVSTCkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDcuIElmIHRpbWluZ0luZm8gaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmICh0aW1pbmdJbmZvID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA4LiBJZiByZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnIGlzIG5vdCBzZXQsIHRoZW46XG4gIGlmICghcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQpIHtcbiAgICAvLyAgMS4gU2V0IHRpbWluZ0luZm8gdG8gYSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmcgaW5mbyBmb3IgdGltaW5nSW5mby5cbiAgICB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcblxuICAgIC8vICAyLiBTZXQgY2FjaGVTdGF0ZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIGNhY2hlU3RhdGUgPSAnJ1xuICB9XG5cbiAgLy8gOS4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGVuZCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZVxuICAvLyBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIC8vIFRPRE86IGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eT9cbiAgdGltaW5nSW5mby5lbmRUaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoKVxuXG4gIC8vIDEwLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTEuIE1hcmsgcmVzb3VyY2UgdGltaW5nIGZvciB0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSxcbiAgLy8gZ2xvYmFsLCBhbmQgY2FjaGVTdGF0ZS5cbiAgbWFya1Jlc291cmNlVGltaW5nKFxuICAgIHRpbWluZ0luZm8sXG4gICAgb3JpZ2luYWxVUkwuaHJlZixcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuY29uc3QgbWFya1Jlc291cmNlVGltaW5nID0gcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhYm9ydC1mZXRjaFxuZnVuY3Rpb24gYWJvcnRGZXRjaCAocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGVycm9yKSB7XG4gIC8vIDEuIFJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIGlmIChwKSB7XG4gICAgLy8gV2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoZSBwcm9taXNlIGF0IHRoaXMgc3RhZ2VcbiAgICBwLnJlamVjdChlcnJvcilcbiAgfVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGNhbmNlbCByZXF1ZXN0XHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlcXVlc3QuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlcXVlc3QuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlT2JqZWN0IGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2VPYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZS5cbiAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNS4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXNwb25zZS5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVzcG9uc2UuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2hpbmdcbmZ1bmN0aW9uIGZldGNoaW5nICh7XG4gIHJlcXVlc3QsXG4gIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlLFxuICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICB1c2VQYXJhbGxlbFF1ZXVlID0gZmFsc2UsXG4gIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG59KSB7XG4gIC8vIEVuc3VyZSB0aGF0IHRoZSBkaXNwYXRjaGVyIGlzIHNldCBhY2NvcmRpbmdseVxuICBhc3NlcnQoZGlzcGF0Y2hlcilcblxuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVudFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbiAgY29uc3QgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgIHN0YXJ0VGltZTogY3VycmVudFRpbWVcbiAgfSlcblxuICAvLyA2LiBMZXQgZmV0Y2hQYXJhbXMgYmUgYSBuZXcgZmV0Y2ggcGFyYW1zIHdob3NlXG4gIC8vIHJlcXVlc3QgaXMgcmVxdWVzdCxcbiAgLy8gdGltaW5nIGluZm8gaXMgdGltaW5nSW5mbyxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGJvZHkgY2h1bmsgbGVuZ3RoIGlzIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgaXMgcHJvY2Vzc1Jlc3BvbnNlLFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIC8vIHRhc2sgZGVzdGluYXRpb24gaXMgdGFza0Rlc3RpbmF0aW9uLFxuICAvLyBhbmQgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkgaXMgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGZldGNoUGFyYW1zID0ge1xuICAgIGNvbnRyb2xsZXI6IG5ldyBGZXRjaChkaXNwYXRjaGVyKSxcbiAgICByZXF1ZXN0LFxuICAgIHRpbWluZ0luZm8sXG4gICAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gICAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgICB0YXNrRGVzdGluYXRpb24sXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvXG4gIC8vICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAvLyBOT1RFOiBTaW5jZSBmZXRjaGluZyBpcyBvbmx5IGNhbGxlZCBmcm9tIGZldGNoLCBib2R5IHNob3VsZCBhbHJlYWR5IGJlXG4gIC8vIGV4dHJhY3RlZC5cbiAgYXNzZXJ0KCFyZXF1ZXN0LmJvZHkgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSlcblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudCwgaWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0IGlzIGEgV2luZG93IG9iamVjdDsgb3RoZXJ3aXNlXG4gIC8vIFwibm8td2luZG93XCIuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC53aW5kb3cgPVxuICAgICAgcmVxdWVzdC5jbGllbnQ/Lmdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdXaW5kb3cnXG4gICAgICAgID8gcmVxdWVzdC5jbGllbnRcbiAgICAgICAgOiAnbm8td2luZG93J1xuICB9XG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyBjbGllbnRcdTIwMTlzIG9yaWdpbi5cbiAgaWYgKHJlcXVlc3Qub3JpZ2luID09PSAnY2xpZW50Jykge1xuICAgIHJlcXVlc3Qub3JpZ2luID0gcmVxdWVzdC5jbGllbnQub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnLCB0cnVlKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUsIHRydWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScsIHRydWUpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJywgdHJ1ZSlcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lclx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3RcdTIwMTlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3RcdTIwMTlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNlXHUyMDE5cyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJywgdHJ1ZSlcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgXHUwMEFCIChgQ29udGVudC1UeXBlYCwgYHRleHQvaHRtbDtjaGFyc2V0PXV0Zi04YCkgXHUwMEJCLFxuICAgICAgLy8gYW5kIGJvZHkgaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UgYXMgYSBib2R5LlxuXG4gICAgICAvLyBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Fib3V0IHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkJykpXG4gICAgfVxuICAgIGNhc2UgJ2Jsb2I6Jzoge1xuICAgICAgaWYgKCFyZXNvbHZlT2JqZWN0VVJMKSB7XG4gICAgICAgIHJlc29sdmVPYmplY3RVUkwgPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpLnJlc29sdmVPYmplY3RVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMS4gTGV0IGJsb2JVUkxFbnRyeSBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgYmxvYiBVUkwgZW50cnkuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnkgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iLzdiMGViYWNjYzYyYjU2NmExOTY1Mzk2ZTViZTdiYjJiYzA2Zjg0MWYvRmlsZUFQSS91cmwvcmVzb3VyY2VzL2ZldGNoLXRlc3RzLmpzI0w1Mi1MNTZcbiAgICAgIC8vIEJ1ZmZlci5yZXNvbHZlT2JqZWN0VVJMIGRvZXMgbm90IGlnbm9yZSBVUkwgcXVlcmllcy5cbiAgICAgIGlmIChibG9iVVJMRW50cnkuc2VhcmNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJykpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJsb2IgPSByZXNvbHZlT2JqZWN0VVJMKGJsb2JVUkxFbnRyeS50b1N0cmluZygpKVxuXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgLCBibG9iVVJMRW50cnkgaXMgbnVsbCwgb3IgYmxvYlVSTEVudHJ5XHUyMDE5c1xuICAgICAgLy8gICAgb2JqZWN0IGlzIG5vdCBhIEJsb2Igb2JqZWN0LCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnIHx8ICFpc0Jsb2JMaWtlKGJsb2IpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJsb2IgYmUgYmxvYlVSTEVudHJ5XHUyMDE5cyBvYmplY3QuXG4gICAgICAvLyBOb3RlOiBkb25lIGFib3ZlXG5cbiAgICAgIC8vIDQuIExldCByZXNwb25zZSBiZSBhIG5ldyByZXNwb25zZS5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKClcblxuICAgICAgLy8gNS4gTGV0IGZ1bGxMZW5ndGggYmUgYmxvYlx1MjAxOXMgc2l6ZS5cbiAgICAgIGNvbnN0IGZ1bGxMZW5ndGggPSBibG9iLnNpemVcblxuICAgICAgLy8gNi4gTGV0IHNlcmlhbGl6ZWRGdWxsTGVuZ3RoIGJlIGZ1bGxMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRGdWxsTGVuZ3RoID0gaXNvbW9ycGhpY0VuY29kZShgJHtmdWxsTGVuZ3RofWApXG5cbiAgICAgIC8vIDcuIExldCB0eXBlIGJlIGJsb2JcdTIwMTlzIHR5cGUuXG4gICAgICBjb25zdCB0eXBlID0gYmxvYi50eXBlXG5cbiAgICAgIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYDpcbiAgICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnLCB0cnVlKSkge1xuICAgICAgICAvLyAxLiBMZXQgYm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgYmxvYi5cbiAgICAgICAgLy8gTm90ZTogaW4gdGhlIEZpbGVBUEkgYSBibG9iIFwib2JqZWN0XCIgaXMgYSBCbG9iICpvciogYSBNZWRpYVNvdXJjZS5cbiAgICAgICAgLy8gSW4gbm9kZSwgdGhpcyBjYW4gb25seSBldmVyIGJlIGEgQmxvYi4gVGhlcmVmb3JlIHdlIGNhbiBzYWZlbHlcbiAgICAgICAgLy8gdXNlIGV4dHJhY3RCb2R5IGRpcmVjdGx5LlxuICAgICAgICBjb25zdCBib2R5V2l0aFR5cGUgPSBleHRyYWN0Qm9keShibG9iKVxuXG4gICAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UgdG8gYE9LYC5cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dCA9ICdPSydcblxuICAgICAgICAvLyAzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYm9keVdpdGhUeXBlXHUyMDE5cyBib2R5LlxuICAgICAgICByZXNwb25zZS5ib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCB0byBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIHNlcmlhbGl6ZWRGdWxsTGVuZ3RoKSwgKGBDb250ZW50LVR5cGVgLCB0eXBlKSBcdTAwQkIuXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1sZW5ndGgnLCBzZXJpYWxpemVkRnVsbExlbmd0aCwgdHJ1ZSlcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVyc0xpc3Quc2V0KCdjb250ZW50LXR5cGUnLCB0eXBlLCB0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgICAgICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gMi4gTGV0IHJhbmdlSGVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBgUmFuZ2VgIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAgIGNvbnN0IHJhbmdlSGVhZGVyID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoJ3JhbmdlJywgdHJ1ZSlcblxuICAgICAgICAvLyAzLiBMZXQgcmFuZ2VWYWx1ZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBzaW5nbGUgcmFuZ2UgaGVhZGVyIHZhbHVlIGdpdmVuIHJhbmdlSGVhZGVyIGFuZCB0cnVlLlxuICAgICAgICBjb25zdCByYW5nZVZhbHVlID0gc2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZShyYW5nZUhlYWRlciwgdHJ1ZSlcblxuICAgICAgICAvLyA0LiBJZiByYW5nZVZhbHVlIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgaWYgKHJhbmdlVmFsdWUgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignZmFpbGVkIHRvIGZldGNoIHRoZSBkYXRhIFVSTCcpKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gTGV0IChyYW5nZVN0YXJ0LCByYW5nZUVuZCkgYmUgcmFuZ2VWYWx1ZS5cbiAgICAgICAgbGV0IHsgcmFuZ2VTdGFydFZhbHVlOiByYW5nZVN0YXJ0LCByYW5nZUVuZFZhbHVlOiByYW5nZUVuZCB9ID0gcmFuZ2VWYWx1ZVxuXG4gICAgICAgIC8vIDYuIElmIHJhbmdlU3RhcnQgaXMgbnVsbDpcbiAgICAgICAgLy8gNy4gT3RoZXJ3aXNlOlxuICAgICAgICBpZiAocmFuZ2VTdGFydCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIDEuIFNldCByYW5nZVN0YXJ0IHRvIGZ1bGxMZW5ndGggXHUyMjEyIHJhbmdlRW5kLlxuICAgICAgICAgIHJhbmdlU3RhcnQgPSBmdWxsTGVuZ3RoIC0gcmFuZ2VFbmRcblxuICAgICAgICAgIC8vIDIuIFNldCByYW5nZUVuZCB0byByYW5nZVN0YXJ0ICsgcmFuZ2VFbmQgXHUyMjEyIDEuXG4gICAgICAgICAgcmFuZ2VFbmQgPSByYW5nZVN0YXJ0ICsgcmFuZ2VFbmQgLSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gMS4gSWYgcmFuZ2VTdGFydCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gZnVsbExlbmd0aCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICAgIGlmIChyYW5nZVN0YXJ0ID49IGZ1bGxMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignUmFuZ2Ugc3RhcnQgaXMgZ3JlYXRlciB0aGFuIHRoZSBibG9iXFwncyBzaXplLicpKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuIElmIHJhbmdlRW5kIGlzIG51bGwgb3IgcmFuZ2VFbmQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGZ1bGxMZW5ndGgsIHRoZW4gc2V0XG4gICAgICAgICAgLy8gICAgcmFuZ2VFbmQgdG8gZnVsbExlbmd0aCBcdTIyMTIgMS5cbiAgICAgICAgICBpZiAocmFuZ2VFbmQgPT09IG51bGwgfHwgcmFuZ2VFbmQgPj0gZnVsbExlbmd0aCkge1xuICAgICAgICAgICAgcmFuZ2VFbmQgPSBmdWxsTGVuZ3RoIC0gMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDguIExldCBzbGljZWRCbG9iIGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgc2xpY2UgYmxvYiBnaXZlbiBibG9iLCByYW5nZVN0YXJ0LFxuICAgICAgICAvLyAgICByYW5nZUVuZCArIDEsIGFuZCB0eXBlLlxuICAgICAgICBjb25zdCBzbGljZWRCbG9iID0gYmxvYi5zbGljZShyYW5nZVN0YXJ0LCByYW5nZUVuZCwgdHlwZSlcblxuICAgICAgICAvLyA5LiBMZXQgc2xpY2VkQm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3Rpbmcgc2xpY2VkQmxvYi5cbiAgICAgICAgLy8gTm90ZTogc2FtZSByZWFzb24gYXMgbWVudGlvbmVkIGFib3ZlIGFzIHRvIHdoeSB3ZSB1c2UgZXh0cmFjdEJvZHlcbiAgICAgICAgY29uc3Qgc2xpY2VkQm9keVdpdGhUeXBlID0gZXh0cmFjdEJvZHkoc2xpY2VkQmxvYilcblxuICAgICAgICAvLyAxMC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHNsaWNlZEJvZHlXaXRoVHlwZVx1MjAxOXMgYm9keS5cbiAgICAgICAgcmVzcG9uc2UuYm9keSA9IHNsaWNlZEJvZHlXaXRoVHlwZVswXVxuXG4gICAgICAgIC8vIDExLiBMZXQgc2VyaWFsaXplZFNsaWNlZExlbmd0aCBiZSBzbGljZWRCbG9iXHUyMDE5cyBzaXplLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRTbGljZWRMZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke3NsaWNlZEJsb2Iuc2l6ZX1gKVxuXG4gICAgICAgIC8vIDEyLiBMZXQgY29udGVudFJhbmdlIGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgYnVpbGQgYSBjb250ZW50IHJhbmdlIGdpdmVuIHJhbmdlU3RhcnQsXG4gICAgICAgIC8vICAgICByYW5nZUVuZCwgYW5kIGZ1bGxMZW5ndGguXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSYW5nZSA9IGJ1aWxkQ29udGVudFJhbmdlKHJhbmdlU3RhcnQsIHJhbmdlRW5kLCBmdWxsTGVuZ3RoKVxuXG4gICAgICAgIC8vIDEzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyB0byAyMDYuXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cyA9IDIwNlxuXG4gICAgICAgIC8vIDE0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlIHRvIGBQYXJ0aWFsIENvbnRlbnRgLlxuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0ID0gJ1BhcnRpYWwgQ29udGVudCdcblxuICAgICAgICAvLyAxNS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCB0byBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIHNlcmlhbGl6ZWRTbGljZWRMZW5ndGgpLFxuICAgICAgICAvLyAgICAgKGBDb250ZW50LVR5cGVgLCB0eXBlKSwgKGBDb250ZW50LVJhbmdlYCwgY29udGVudFJhbmdlKSBcdTAwQkIuXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1sZW5ndGgnLCBzZXJpYWxpemVkU2xpY2VkTGVuZ3RoLCB0cnVlKVxuICAgICAgICByZXNwb25zZS5oZWFkZXJzTGlzdC5zZXQoJ2NvbnRlbnQtdHlwZScsIHR5cGUsIHRydWUpXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC1yYW5nZScsIGNvbnRlbnRSYW5nZSwgdHJ1ZSlcbiAgICAgIH1cblxuICAgICAgLy8gMTAuIFJldHVybiByZXNwb25zZS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgfVxuICAgIGNhc2UgJ2RhdGE6Jzoge1xuICAgICAgLy8gMS4gTGV0IGRhdGFVUkxTdHJ1Y3QgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZVxuICAgICAgLy8gICAgZGF0YTogVVJMIHByb2Nlc3NvciBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgICAgY29uc3QgZGF0YVVSTFN0cnVjdCA9IGRhdGFVUkxQcm9jZXNzb3IoY3VycmVudFVSTClcblxuICAgICAgLy8gMi4gSWYgZGF0YVVSTFN0cnVjdCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhXG4gICAgICAvLyAgICBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKGRhdGFVUkxTdHJ1Y3QgPT09ICdmYWlsdXJlJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCB0aGUgZGF0YSBVUkwnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IG1pbWVUeXBlIGJlIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIE1JTUUgdHlwZSwgc2VyaWFsaXplZC5cbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKGRhdGFVUkxTdHJ1Y3QubWltZVR5cGUpXG5cbiAgICAgIC8vIDQuIFJldHVybiBhIHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgXHUwMEJCLFxuICAgICAgLy8gICAgYW5kIGJvZHkgaXMgZGF0YVVSTFN0cnVjdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogbWltZVR5cGUgfV1cbiAgICAgICAgXSxcbiAgICAgICAgYm9keTogc2FmZWx5RXh0cmFjdEJvZHkoZGF0YVVSTFN0cnVjdC5ib2R5KVswXVxuICAgICAgfSkpXG4gICAgfVxuICAgIGNhc2UgJ2ZpbGU6Jzoge1xuICAgICAgLy8gRm9yIG5vdywgdW5mb3J0dW5hdGUgYXMgaXQgaXMsIGZpbGUgVVJMcyBhcmUgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci5cbiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ25vdCBpbXBsZW1lbnRlZC4uLiB5ZXQuLi4nKSlcbiAgICB9XG4gICAgY2FzZSAnaHR0cDonOlxuICAgIGNhc2UgJ2h0dHBzOic6IHtcbiAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cblxuICAgICAgcmV0dXJuIGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCd1bmtub3duIHNjaGVtZScpKVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbmFsaXplUmVzcG9uc2UgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gIC8vIDIsIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgaXMgbm90IG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaFxuICAvLyB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGdpdmVuIHJlc3BvbnNlLCB3aXRoXG4gIC8vIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZShyZXNwb25zZSkpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWZpbmFsZVxuZnVuY3Rpb24gZmV0Y2hGaW5hbGUgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgYSBzZWN1cmUgY29udGV4dCxcbiAgLy8gICAgdGhlbiBzZXQgdGltaW5nSW5mb1x1MjAxOXMgc2VydmVyLXRpbWluZyBoZWFkZXJzIHRvIHRoZSByZXN1bHQgb2YgZ2V0dGluZywgZGVjb2RpbmcsIGFuZCBzcGxpdHRpbmdcbiAgLy8gICAgYFNlcnZlci1UaW1pbmdgIGZyb20gcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDMuIExldCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgYmUgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgIC8vIDEuIExldCB1bnNhZmVFbmRUaW1lIGJlIHRoZSB1bnNhZmUgc2hhcmVkIGN1cnJlbnQgdGltZS5cbiAgICBjb25zdCB1bnNhZmVFbmRUaW1lID0gRGF0ZS5ub3coKSAvLyA/XG5cbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24gaXMgXCJkb2N1bWVudFwiLCB0aGVuIHNldCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlclx1MjAxOXNcbiAgICAvLyAgICBmdWxsIHRpbWluZyBpbmZvIHRvIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucmVxdWVzdC5kZXN0aW5hdGlvbiA9PT0gJ2RvY3VtZW50Jykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5mdWxsVGltaW5nSW5mbyA9IHRpbWluZ0luZm9cbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXJcdTIwMTlzIHJlcG9ydCB0aW1pbmcgc3RlcHMgdG8gdGhlIGZvbGxvd2luZyBzdGVwcyBnaXZlbiBhIGdsb2JhbCBvYmplY3QgZ2xvYmFsOlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVwb3J0VGltaW5nU3RlcHMgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBlbmQgdGltZSB0byB0aGUgcmVsYXRpdmUgaGlnaCByZXNvbHV0aW9uIHRpbWUgZ2l2ZW4gdW5zYWZlRW5kVGltZSBhbmQgZ2xvYmFsLlxuICAgICAgdGltaW5nSW5mby5lbmRUaW1lID0gdW5zYWZlRW5kVGltZVxuXG4gICAgICAvLyAzLiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gICAgICBsZXQgY2FjaGVTdGF0ZSA9IHJlc3BvbnNlLmNhY2hlU3RhdGVcblxuICAgICAgLy8gNC4gTGV0IGJvZHlJbmZvIGJlIHJlc3BvbnNlXHUyMDE5cyBib2R5IGluZm8uXG4gICAgICBjb25zdCBib2R5SW5mbyA9IHJlc3BvbnNlLmJvZHlJbmZvXG5cbiAgICAgIC8vIDUuIElmIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbiBzZXQgdGltaW5nSW5mbyB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuXG4gICAgICAvLyAgICBvcGFxdWUgdGltaW5nIGluZm8gZm9yIHRpbWluZ0luZm8gYW5kIHNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICBpZiAoIXJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkKSB7XG4gICAgICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHRpbWluZ0luZm8pXG5cbiAgICAgICAgY2FjaGVTdGF0ZSA9ICcnXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIExldCByZXNwb25zZVN0YXR1cyBiZSAwLlxuICAgICAgbGV0IHJlc3BvbnNlU3RhdHVzID0gMFxuXG4gICAgICAvLyA3LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBub3QgXCJuYXZpZ2F0ZVwiIG9yIHJlc3BvbnNlXHUyMDE5cyBoYXMtY3Jvc3Mtb3JpZ2luLXJlZGlyZWN0cyBpcyBmYWxzZTpcbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0Lm1vZGUgIT09ICduYXZpZ2F0b3InIHx8ICFyZXNwb25zZS5oYXNDcm9zc09yaWdpblJlZGlyZWN0cykge1xuICAgICAgICAvLyAxLiBTZXQgcmVzcG9uc2VTdGF0dXMgdG8gcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgICAgICAgcmVzcG9uc2VTdGF0dXMgPSByZXNwb25zZS5zdGF0dXNcblxuICAgICAgICAvLyAyLiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGEgTUlNRSB0eXBlIGZyb20gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgICBjb25zdCBtaW1lVHlwZSA9IGV4dHJhY3RNaW1lVHlwZShyZXNwb25zZS5oZWFkZXJzTGlzdClcblxuICAgICAgICAvLyAzLiBJZiBtaW1lVHlwZSBpcyBub3QgZmFpbHVyZSwgdGhlbiBzZXQgYm9keUluZm9cdTIwMTlzIGNvbnRlbnQgdHlwZSB0byB0aGUgcmVzdWx0IG9mIG1pbmltaXppbmcgYSBzdXBwb3J0ZWQgTUlNRSB0eXBlIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBpZiAobWltZVR5cGUgIT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIGJvZHlJbmZvLmNvbnRlbnRUeXBlID0gbWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZShtaW1lVHlwZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA4LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIHR5cGUgaXMgbm9uLW51bGwsIHRoZW4gbWFyayByZXNvdXJjZSB0aW1pbmcgZ2l2ZW4gdGltaW5nSW5mbyxcbiAgICAgIC8vICAgIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwsIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgdHlwZSwgZ2xvYmFsLCBjYWNoZVN0YXRlLCBib2R5SW5mbyxcbiAgICAgIC8vICAgIGFuZCByZXNwb25zZVN0YXR1cy5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUgIT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiB1cGRhdGUgbWFya3Jlc291cmNldGltaW5nXG4gICAgICAgIG1hcmtSZXNvdXJjZVRpbWluZyh0aW1pbmdJbmZvLCBmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybC5ocmVmLCBmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUsIGJvZHlJbmZvLCByZXNwb25zZVN0YXR1cylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2sgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgICAgIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAgICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzXG4gICAgICAvLyAgICByZXNwb25zZSBlbmQtb2YtYm9keSBnaXZlbiByZXNwb25zZS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgIT0gbnVsbCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkocmVzcG9uc2UpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIHR5cGUgaXMgbm9uLW51bGwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzXG4gICAgICAvLyAgICBnbG9iYWwgb2JqZWN0IGlzIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLCB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlclx1MjAxOXMgcmVwb3J0XG4gICAgICAvLyAgICB0aW1pbmcgc3RlcHMgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LmluaXRpYXRvclR5cGUgIT0gbnVsbCkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlcG9ydFRpbWluZ1N0ZXBzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBRdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2sgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVRhc2soKSlcbiAgfVxuXG4gIC8vIDQuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGlzIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vICAgIHByb2Nlc3MgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZShyZXNwb25zZSlcbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSA9IG51bGxcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcjsgb3RoZXJ3aXNlIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZS5cbiAgY29uc3QgaW50ZXJuYWxSZXNwb25zZSA9IHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgPyByZXNwb25zZSA6IChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlID8/IHJlc3BvbnNlKVxuXG4gIC8vIDYuIElmIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAvLyA3LiBPdGhlcndpc2U6XG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gbWNvbGxpbmE6IGFsbCB0aGUgZm9sbG93aW5nIHN0ZXBzIG9mIHRoZSBzcGVjcyBhcmUgc2tpcHBlZC5cbiAgICAvLyBUaGUgaW50ZXJuYWwgdHJhbnNmb3JtIHN0cmVhbSBpcyBub3QgbmVlZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzMwOTMjaXNzdWVjb21tZW50LTIwNTAxOTg1NDFcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgVHJhbnNmb3JtU3RyZWFtLlxuICAgIC8vIDIuIExldCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gd2hpY2gsIGdpdmVuIGNodW5rLCBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgLy8gMy4gU2V0IHVwIHRyYW5zZm9ybVN0cmVhbSB3aXRoIHRyYW5zZm9ybUFsZ29yaXRobSBzZXQgdG8gaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYW5kIGZsdXNoQWxnb3JpdGhtXG4gICAgLy8gICAgc2V0IHRvIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgICAvLyA0LiBTZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keVx1MjAxOXMgc3RyZWFtIHRvIHRoZSByZXN1bHQgb2YgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keVx1MjAxOXMgc3RyZWFtIHBpcGVkIHRocm91Z2ggdHJhbnNmb3JtU3RyZWFtLlxuXG4gICAgZmluaXNoZWQoaW50ZXJuYWxSZXNwb25zZS5ib2R5LnN0cmVhbSwgKCkgPT4ge1xuICAgICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdFx1MjAxOXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2VcdTIwMTlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLCByZXF1ZXN0XHUyMDE5cyBjbGllbnQsIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3kodW5kZWZpbmVkLCBmYWxzZSlcbiAgICB9XG5cbiAgICAvLyAyLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZTpcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigndW5leHBlY3RlZCByZWRpcmVjdCcpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnbWFudWFsJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbFxuICAgICAgLy8gcmVzcG9uc2UgaXMgYWN0dWFsUmVzcG9uc2UuXG4gICAgICAvLyBOT1RFKHNwZWMpOiBPbiB0aGUgd2ViIHRoaXMgd291bGQgcmV0dXJuIGFuIGBvcGFxdWVyZWRpcmVjdGAgcmVzcG9uc2UsXG4gICAgICAvLyBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2VydmVyIHNpZGUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzExOTMuXG4gICAgICByZXNwb25zZSA9IGFjdHVhbFJlc3BvbnNlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLXJlZGlyZWN0IGZldGNoIGdpdmVuXG4gICAgICAvLyBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBSZWRpcmVjdEZldGNoKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDkuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcmVkaXJlY3QtZmV0Y2hcbmZ1bmN0aW9uIGh0dHBSZWRpcmVjdEZldGNoIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZCByZXNwb25zZSxcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGNvbnN0IGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgID8gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgIDogcmVzcG9uc2VcblxuICAvLyAzLiBMZXQgbG9jYXRpb25VUkwgYmUgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIGxvY2F0aW9uIFVSTCBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gIC8vIFVSTFx1MjAxOXMgZnJhZ21lbnQuXG4gIGxldCBsb2NhdGlvblVSTFxuXG4gIHRyeSB7XG4gICAgbG9jYXRpb25VUkwgPSByZXNwb25zZUxvY2F0aW9uVVJMKFxuICAgICAgYWN0dWFsUmVzcG9uc2UsXG4gICAgICByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KS5oYXNoXG4gICAgKVxuXG4gICAgLy8gNC4gSWYgbG9jYXRpb25VUkwgaXMgbnVsbCwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gICAgaWYgKGxvY2F0aW9uVVJMID09IG51bGwpIHtcbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gNS4gSWYgbG9jYXRpb25VUkwgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICB9XG5cbiAgLy8gNi4gSWYgbG9jYXRpb25VUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyBlcnJvci5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShsb2NhdGlvblVSTCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJykpXG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBjb3VudCBpcyAyMCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAyMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigncmVkaXJlY3QgY291bnQgZXhjZWVkZWQnKSlcbiAgfVxuXG4gIC8vIDguIEluY3JlYXNlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGJ5IDEuXG4gIHJlcXVlc3QucmVkaXJlY3RDb3VudCArPSAxXG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcImNvcnNcIiwgbG9jYXRpb25VUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIGFuZFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiByZXR1cm5cbiAgLy8gIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QubW9kZSA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKSAmJlxuICAgICFzYW1lT3JpZ2luKHJlcXVlc3QsIGxvY2F0aW9uVVJMKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Nyb3NzIG9yaWdpbiBub3QgYWxsb3dlZCBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJykpXG4gIH1cblxuICAvLyAxMC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGxvY2F0aW9uVVJMIGluY2x1ZGVzXG4gIC8vIGNyZWRlbnRpYWxzLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgJ1VSTCBjYW5ub3QgY29udGFpbiBjcmVkZW50aWFscyBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJ1xuICAgICkpXG4gIH1cblxuICAvLyAxMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIGFjdHVhbFJlc3BvbnNlLnN0YXR1cyAhPT0gMzAzICYmXG4gICAgcmVxdWVzdC5ib2R5ICE9IG51bGwgJiZcbiAgICByZXF1ZXN0LmJvZHkuc291cmNlID09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCkpXG4gIH1cblxuICAvLyAxMi4gSWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZVxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAxIG9yIDMwMiBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYFxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAzIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgIG9yIGBIRUFEYFxuICBpZiAoXG4gICAgKFszMDEsIDMwMl0uaW5jbHVkZXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB8fFxuICAgIChhY3R1YWxSZXNwb25zZS5zdGF0dXMgPT09IDMwMyAmJlxuICAgICAgIUdFVF9PUl9IRUFELmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSlcbiAgKSB7XG4gICAgLy8gdGhlbjpcbiAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIGBHRVRgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIG51bGwuXG4gICAgcmVxdWVzdC5tZXRob2QgPSAnR0VUJ1xuICAgIHJlcXVlc3QuYm9keSA9IG51bGxcblxuICAgIC8vIDIuIEZvciBlYWNoIGhlYWRlck5hbWUgb2YgcmVxdWVzdC1ib2R5LWhlYWRlciBuYW1lLCBkZWxldGUgaGVhZGVyTmFtZSBmcm9tXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIHJlcXVlc3RCb2R5SGVhZGVyKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZShoZWFkZXJOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJMXHUyMDE5c1xuICAvLyAgICAgb3JpZ2luLCB0aGVuIGZvciBlYWNoIGhlYWRlck5hbWUgb2YgQ09SUyBub24td2lsZGNhcmQgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgLy8gICAgIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSwgbG9jYXRpb25VUkwpKSB7XG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvcnMtbm9uLXdpbGRjYXJkLXJlcXVlc3QtaGVhZGVyLW5hbWVcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnYXV0aG9yaXphdGlvbicsIHRydWUpXG5cbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXV0aGVudGljYXRpb24tZW50cmllc1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdwcm94eS1hdXRob3JpemF0aW9uJywgdHJ1ZSlcblxuICAgIC8vIFwiQ29va2llXCIgYW5kIFwiSG9zdFwiIGFyZSBmb3JiaWRkZW4gcmVxdWVzdC1oZWFkZXJzLCB3aGljaCB1bmRpY2kgZG9lc24ndCBpbXBsZW1lbnQuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2Nvb2tpZScsIHRydWUpXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnLCB0cnVlKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlIGZpcnN0IHJldHVyblxuICAvLyB2YWx1ZSBvZiBzYWZlbHkgZXh0cmFjdGluZyByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIGFzc2VydChyZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICAgcmVxdWVzdC5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkocmVxdWVzdC5ib2R5LnNvdXJjZSlbMF1cbiAgfVxuXG4gIC8vIDE1LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gMTYuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBlbmQgdGltZSBhbmQgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRoZVxuICAvLyBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIHRpbWluZ0luZm8ucmVkaXJlY3RFbmRUaW1lID0gdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUgPVxuICAgIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gIC8vIDE3LiBJZiB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBzdGFydCB0aW1lIGlzIDAsIHRoZW4gc2V0IHRpbWluZ0luZm9cdTIwMTlzXG4gIC8vICByZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRpbWluZ0luZm9cdTIwMTlzIHN0YXJ0IHRpbWUuXG4gIGlmICh0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID09PSAwKSB7XG4gICAgdGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gIH1cblxuICAvLyAxOC4gQXBwZW5kIGxvY2F0aW9uVVJMIHRvIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICByZXF1ZXN0LnVybExpc3QucHVzaChsb2NhdGlvblVSTClcblxuICAvLyAxOS4gSW52b2tlIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgb24gcmVkaXJlY3Qgb24gcmVxdWVzdCBhbmRcbiAgLy8gYWN0dWFsUmVzcG9uc2UuXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpXG5cbiAgLy8gMjAuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgcmV0dXJuIG1haW5GZXRjaChmZXRjaFBhcmFtcywgdHJ1ZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1vci1jYWNoZS1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaXNBdXRoZW50aWNhdGlvbkZldGNoID0gZmFsc2UsXG4gIGlzTmV3Q29ubmVjdGlvbkZldGNoID0gZmFsc2Vcbikge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgaHR0cEZldGNoUGFyYW1zIGJlIG51bGwuXG4gIGxldCBodHRwRmV0Y2hQYXJhbXMgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGh0dHBSZXF1ZXN0IGJlIG51bGwuXG4gIGxldCBodHRwUmVxdWVzdCA9IG51bGxcblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdG9yZWRSZXNwb25zZSBiZSBudWxsLlxuICAvLyBUT0RPOiBjYWNoZVxuXG4gIC8vIDYuIExldCBodHRwQ2FjaGUgYmUgbnVsbC5cbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDcuIExldCB0aGUgcmV2YWxpZGF0aW5nRmxhZyBiZSB1bnNldC5cbiAgY29uc3QgcmV2YWxpZGF0aW5nRmxhZyA9IGZhbHNlXG5cbiAgLy8gOC4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiIGFuZCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzXG4gIC8vICAgIFwiZXJyb3JcIiwgdGhlbiBzZXQgaHR0cEZldGNoUGFyYW1zIHRvIGZldGNoUGFyYW1zIGFuZCBodHRwUmVxdWVzdCB0b1xuICAvLyAgICByZXF1ZXN0LlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnICYmIHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICBodHRwRmV0Y2hQYXJhbXMgPSBmZXRjaFBhcmFtc1xuICAgIGh0dHBSZXF1ZXN0ID0gcmVxdWVzdFxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFNldCBodHRwUmVxdWVzdCB0byBhIGNsb25lIG9mIHJlcXVlc3QuXG4gICAgaHR0cFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QocmVxdWVzdClcblxuICAgIC8vIDIuIFNldCBodHRwRmV0Y2hQYXJhbXMgdG8gYSBjb3B5IG9mIGZldGNoUGFyYW1zLlxuICAgIGh0dHBGZXRjaFBhcmFtcyA9IHsgLi4uZmV0Y2hQYXJhbXMgfVxuXG4gICAgLy8gMy4gU2V0IGh0dHBGZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdCB0byBodHRwUmVxdWVzdC5cbiAgICBodHRwRmV0Y2hQYXJhbXMucmVxdWVzdCA9IGh0dHBSZXF1ZXN0XG4gIH1cblxuICAvLyAgICAzLiBMZXQgaW5jbHVkZUNyZWRlbnRpYWxzIGJlIHRydWUgaWYgb25lIG9mXG4gIGNvbnN0IGluY2x1ZGVDcmVkZW50aWFscyA9XG4gICAgcmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnIHx8XG4gICAgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdzYW1lLW9yaWdpbicgJiZcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJylcblxuICAvLyAgICA0LiBMZXQgY29udGVudExlbmd0aCBiZSBodHRwUmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgbGVuZ3RoLCBpZiBodHRwUmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgYm9keSBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBodHRwUmVxdWVzdC5ib2R5ID8gaHR0cFJlcXVlc3QuYm9keS5sZW5ndGggOiBudWxsXG5cbiAgLy8gICAgNS4gTGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBiZSBudWxsLlxuICBsZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gbnVsbFxuXG4gIC8vICAgIDYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgIG9yXG4gIC8vICAgIGBQVVRgLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gYDBgLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuYm9keSA9PSBudWxsICYmXG4gICAgWydQT1NUJywgJ1BVVCddLmluY2x1ZGVzKGh0dHBSZXF1ZXN0Lm1ldGhvZClcbiAgKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gJzAnXG4gIH1cblxuICAvLyAgICA3LiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG9cbiAgLy8gICAgY29udGVudExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShgJHtjb250ZW50TGVuZ3RofWApXG4gIH1cblxuICAvLyAgICA4LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDb250ZW50LUxlbmd0aGAvY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgaWYgKGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSAhPSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LWxlbmd0aCcsIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSwgdHJ1ZSlcbiAgfVxuXG4gIC8vICAgIDkuIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LUxlbmd0aGAsXG4gIC8vICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSkgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDEwLiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIGlzIHRydWUsXG4gIC8vICAgIHRoZW46XG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgaHR0cFJlcXVlc3Qua2VlcGFsaXZlKSB7XG4gICAgLy8gTk9URToga2VlcGFsaXZlIGlzIGEgbm9vcCBvdXRzaWRlIG9mIGJyb3dzZXIgY29udGV4dC5cbiAgfVxuXG4gIC8vICAgIDExLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgYSBVUkwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBSZWZlcmVyYC9odHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZCxcbiAgLy8gICAgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdyZWZlcmVyJywgaXNvbW9ycGhpY0VuY29kZShodHRwUmVxdWVzdC5yZWZlcnJlci5ocmVmKSwgdHJ1ZSlcbiAgfVxuXG4gIC8vICAgIDEyLiBBcHBlbmQgYSByZXF1ZXN0IGBPcmlnaW5gIGhlYWRlciBmb3IgaHR0cFJlcXVlc3QuXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTMuIEFwcGVuZCB0aGUgRmV0Y2ggbWV0YWRhdGEgaGVhZGVycyBmb3IgaHR0cFJlcXVlc3QuIFtGRVRDSC1NRVRBREFUQV1cbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YShodHRwUmVxdWVzdClcblxuICAvLyAgICAxNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFVzZXItQWdlbnRgLCB0aGVuXG4gIC8vICAgIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYFVzZXItQWdlbnRgL2RlZmF1bHQgYFVzZXItQWdlbnRgIHZhbHVlIHRvXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygndXNlci1hZ2VudCcsIHRydWUpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCd1c2VyLWFnZW50JywgZGVmYXVsdFVzZXJBZ2VudClcbiAgfVxuXG4gIC8vICAgIDE1LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcImRlZmF1bHRcIiBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0IGNvbnRhaW5zIGBJZi1Nb2RpZmllZC1TaW5jZWAsIGBJZi1Ob25lLU1hdGNoYCxcbiAgLy8gICAgYElmLVVubW9kaWZpZWQtU2luY2VgLCBgSWYtTWF0Y2hgLCBvciBgSWYtUmFuZ2VgLCB0aGVuIHNldFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ2RlZmF1bHQnICYmXG4gICAgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tb2RpZmllZC1zaW5jZScsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbm9uZS1tYXRjaCcsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtdW5tb2RpZmllZC1zaW5jZScsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbWF0Y2gnLCB0cnVlKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXJhbmdlJywgdHJ1ZSkpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMTYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tY2FjaGVcIiwgaHR0cFJlcXVlc3RcdTIwMTlzIHByZXZlbnRcbiAgLy8gICAgbm8tY2FjaGUgY2FjaGUtY29udHJvbCBoZWFkZXIgbW9kaWZpY2F0aW9uIGZsYWcgaXMgdW5zZXQsIGFuZFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDYWNoZS1Db250cm9sYC9gbWF4LWFnZT0wYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLWNhY2hlJyAmJlxuICAgICFodHRwUmVxdWVzdC5wcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbiAmJlxuICAgICFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcsIHRydWUpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICdtYXgtYWdlPTAnLCB0cnVlKVxuICB9XG5cbiAgLy8gICAgMTcuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiBvciBcInJlbG9hZFwiLCB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1zdG9yZScgfHwgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdyZWxvYWQnKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFByYWdtYWAsIHRoZW4gYXBwZW5kXG4gICAgLy8gYFByYWdtYWAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncHJhZ21hJywgdHJ1ZSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncHJhZ21hJywgJ25vLWNhY2hlJywgdHJ1ZSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsXG4gICAgLy8gdGhlbiBhcHBlbmQgYENhY2hlLUNvbnRyb2xgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnLCB0cnVlKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ25vLWNhY2hlJywgdHJ1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAgICAxOC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBBY2NlcHQtRW5jb2RpbmdgL2BpZGVudGl0eWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJywgdHJ1ZSkpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdpZGVudGl0eScsIHRydWUpXG4gIH1cblxuICAvLyAgICAxOS4gTW9kaWZ5IGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBwZXIgSFRUUC4gRG8gbm90IGFwcGVuZCBhIGdpdmVuXG4gIC8vICAgIGhlYWRlciBpZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgdGhhdCBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gIC8vICAgIFRPRE86IGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODUjaXNzdWVjb21tZW50LTg5NjU2MDEyOVxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtZW5jb2RpbmcnLCB0cnVlKSkge1xuICAgIGlmICh1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChodHRwUmVxdWVzdCkpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdiciwgZ3ppcCwgZGVmbGF0ZScsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsIGRlZmxhdGUnLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcsIHRydWUpXG5cbiAgLy8gICAgMjAuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCB0aGVuOlxuICBpZiAoaW5jbHVkZUNyZWRlbnRpYWxzKSB7XG4gICAgLy8gMS4gSWYgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gYmxvY2sgY29va2llcyBmb3IgaHR0cFJlcXVlc3RcbiAgICAvLyAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyAgICAyMS4gSWYgdGhlcmVcdTIwMTlzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnksIHVzZSBpdCBhcyBhcHByb3ByaWF0ZS5cbiAgLy8gICAgVE9ETzogcHJveHktYXV0aGVudGljYXRpb25cblxuICAvLyAgICAyMi4gU2V0IGh0dHBDYWNoZSB0byB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlXG4gIC8vICAgIHBhcnRpdGlvbiwgZ2l2ZW4gaHR0cFJlcXVlc3QuXG4gIC8vICAgIFRPRE86IGNhY2hlXG5cbiAgLy8gICAgMjMuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0b1xuICAvLyAgICBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMjQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIG5laXRoZXIgXCJuby1zdG9yZVwiIG5vciBcInJlbG9hZFwiLFxuICAvLyAgICB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgIT09ICduby1zdG9yZScgJiYgaHR0cFJlcXVlc3QuY2FjaGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnb25seS1pZi1jYWNoZWQnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignb25seSBpZiBjYWNoZWQnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBmb3J3YXJkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yayBmZXRjaFxuICAgIC8vIGdpdmVuIGh0dHBGZXRjaFBhcmFtcywgaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgaXNOZXdDb25uZWN0aW9uRmV0Y2guXG4gICAgY29uc3QgZm9yd2FyZFJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtGZXRjaChcbiAgICAgIGh0dHBGZXRjaFBhcmFtcyxcbiAgICAgIGluY2x1ZGVDcmVkZW50aWFscyxcbiAgICAgIGlzTmV3Q29ubmVjdGlvbkZldGNoXG4gICAgKVxuXG4gICAgLy8gMy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyB1bnNhZmUgYW5kIGZvcndhcmRSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzXG4gICAgLy8gaW4gdGhlIHJhbmdlIDIwMCB0byAzOTksIGluY2x1c2l2ZSwgaW52YWxpZGF0ZSBhcHByb3ByaWF0ZSBzdG9yZWRcbiAgICAvLyByZXNwb25zZXMgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlIFwiSW52YWxpZGF0aW9uXCIgY2hhcHRlciBvZiBIVFRQXG4gICAgLy8gQ2FjaGluZywgYW5kIHNldCBzdG9yZWRSZXNwb25zZSB0byBudWxsLiBbSFRUUC1DQUNISU5HXVxuICAgIGlmIChcbiAgICAgICFzYWZlTWV0aG9kc1NldC5oYXMoaHR0cFJlcXVlc3QubWV0aG9kKSAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPD0gMzk5XG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDQuIElmIHRoZSByZXZhbGlkYXRpbmdGbGFnIGlzIHNldCBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzA0LFxuICAgIC8vIHRoZW46XG4gICAgaWYgKHJldmFsaWRhdGluZ0ZsYWcgJiYgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDUuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZSB0byBmb3J3YXJkUmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGZvcndhcmRSZXNwb25zZVxuXG4gICAgICAvLyAyLiBTdG9yZSBodHRwUmVxdWVzdCBhbmQgZm9yd2FyZFJlc3BvbnNlIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZVxuICAgICAgLy8gXCJTdG9yaW5nIFJlc3BvbnNlcyBpbiBDYWNoZXNcIiBjaGFwdGVyIG9mIEhUVFAgQ2FjaGluZy4gW0hUVFAtQ0FDSElOR11cbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuICB9XG5cbiAgLy8gMTEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gYSBjbG9uZSBvZiBodHRwUmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlc3BvbnNlLnVybExpc3QgPSBbLi4uaHR0cFJlcXVlc3QudXJsTGlzdF1cblxuICAvLyAxMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5c1xuICAvLyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScsIHRydWUpKSB7XG4gICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXF1ZXN0LWluY2x1ZGVzLWNyZWRlbnRpYWxzIHRvIGluY2x1ZGVDcmVkZW50aWFscy5cbiAgcmVzcG9uc2UucmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHMgPSBpbmNsdWRlQ3JlZGVudGlhbHNcblxuICAvLyAxNC4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MDEsIGh0dHBSZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBub3RcbiAgLy8gXCJjb3JzXCIsIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCBhbmQgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50XG4gIC8vIHNldHRpbmdzIG9iamVjdCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwNywgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA3KSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgfVxuXG4gICAgLy8gMi4gPz8/XG5cbiAgICAvLyAzLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gNC4gUHJvbXB0IHRoZSBlbmQgdXNlciBhcyBhcHByb3ByaWF0ZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgYW5kIHN0b3JlXG4gICAgLy8gdGhlIHJlc3VsdCBhcyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LiBbSFRUUC1BVVRIXVxuICAgIC8vIFRPRE86IEludm9rZSBzb21lIGtpbmQgb2YgY2FsbGJhY2s/XG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlblxuICAgIC8vIGZldGNoUGFyYW1zLlxuICAgIC8vIFRPRE9cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncHJveHkgYXV0aGVudGljYXRpb24gcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gMTYuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gIGlmIChcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQyMVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDIxICYmXG4gICAgLy8gaXNOZXdDb25uZWN0aW9uRmV0Y2ggaXMgZmFsc2VcbiAgICAhaXNOZXdDb25uZWN0aW9uRmV0Y2ggJiZcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwsIG9yIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBub24tbnVsbFxuICAgIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCB8fCByZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICkge1xuICAgIC8vIHRoZW46XG5cbiAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGVcbiAgICAvLyBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcywgaXNBdXRoZW50aWNhdGlvbkZldGNoLCBhbmQgdHJ1ZS5cblxuICAgIC8vIFRPRE8gKHNwZWMpOiBUaGUgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBidXQgd2UgbmVlZCB0byBjYW5jZWxcbiAgICAvLyB0aGUgYWN0aXZlIHJlc3BvbnNlIGJlZm9yZSB3ZSBjYW4gc3RhcnQgYSBuZXcgb25lLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyOTNcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKFxuICAgICAgZmV0Y2hQYXJhbXMsXG4gICAgICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsXG4gICAgICB0cnVlXG4gICAgKVxuICB9XG5cbiAgLy8gMTcuIElmIGlzQXV0aGVudGljYXRpb25GZXRjaCBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBhdXRoZW50aWNhdGlvbiBlbnRyeVxuICBpZiAoaXNBdXRoZW50aWNhdGlvbkZldGNoKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTguIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaW5jbHVkZUNyZWRlbnRpYWxzID0gZmFsc2UsXG4gIGZvcmNlTmV3Q29ubmVjdGlvbiA9IGZhbHNlXG4pIHtcbiAgYXNzZXJ0KCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gfHwgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3llZClcblxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gPSB7XG4gICAgYWJvcnQ6IG51bGwsXG4gICAgZGVzdHJveWVkOiBmYWxzZSxcbiAgICBkZXN0cm95IChlcnIsIGFib3J0ID0gdHJ1ZSkge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgaWYgKGFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA0LiBMZXQgaHR0cENhY2hlIGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGUgcGFydGl0aW9uLFxuICAvLyBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPOiBjYWNoZVxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNS4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICByZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gNi4gTGV0IG5ldHdvcmtQYXJ0aXRpb25LZXkgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgbmV0d29ya1xuICAvLyBwYXJ0aXRpb24ga2V5IGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA3LiBMZXQgbmV3Q29ubmVjdGlvbiBiZSBcInllc1wiIGlmIGZvcmNlTmV3Q29ubmVjdGlvbiBpcyB0cnVlOyBvdGhlcndpc2VcbiAgLy8gXCJub1wiLlxuICBjb25zdCBuZXdDb25uZWN0aW9uID0gZm9yY2VOZXdDb25uZWN0aW9uID8gJ3llcycgOiAnbm8nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvLyA4LiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgbW9kZTpcbiAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLFxuICAgIC8vIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgIC8vIFRPRE9cbiAgfSBlbHNlIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIGNvbm5lY3Rpb24sIGdpdmVuXG4gICAgLy8gbmV0d29ya1BhcnRpdGlvbktleSwgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbixcbiAgICAvLyBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBmb3JjZU5ld0Nvbm5lY3Rpb24uXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gOS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIGNvbm5lY3Rpb24gaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgY2FsbGluZyBjbGFtcCBhbmQgY29hcnNlbiBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXNcbiAgLy8gICAgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSwgYW5kIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyAgICBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cblxuICAvLyAgICAzLiBJZiBjb25uZWN0aW9uIGlzIG5vdCBhbiBIVFRQLzIgY29ubmVjdGlvbiwgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gICAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIGFwcGVuZCAoYFRyYW5zZmVyLUVuY29kaW5nYCxcbiAgLy8gICAgYGNodW5rZWRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICA0LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gICAgY2FwYWJpbGl0eS5cblxuICAvLyAgICA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBtYWtpbmcgYW4gSFRUUCByZXF1ZXN0IG92ZXIgY29ubmVjdGlvblxuICAvLyAgICB1c2luZyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBjYXZlYXRzOlxuXG4gIC8vICAgICAgICAtIEZvbGxvdyB0aGUgcmVsZXZhbnQgcmVxdWlyZW1lbnRzIGZyb20gSFRUUC4gW0hUVFBdIFtIVFRQLVNFTUFOVElDU11cbiAgLy8gICAgICAgIFtIVFRQLUNPTkRdIFtIVFRQLUNBQ0hJTkddIFtIVFRQLUFVVEhdXG5cbiAgLy8gICAgICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLFxuICAvLyAgICAgICAgdGhlbiB0aGUgdXNlciBhZ2VudCBtYXkgaGF2ZSBhIGJ1ZmZlciBvZiB1cCB0byA2NCBraWJpYnl0ZXMgYW5kIHN0b3JlXG4gIC8vICAgICAgICBhIHBhcnQgb2YgcmVxdWVzdFx1MjAxOXMgYm9keSBpbiB0aGF0IGJ1ZmZlci4gSWYgdGhlIHVzZXIgYWdlbnQgcmVhZHMgZnJvbVxuICAvLyAgICAgICAgcmVxdWVzdFx1MjAxOXMgYm9keSBiZXlvbmQgdGhhdCBidWZmZXJcdTIwMTlzIHNpemUgYW5kIHRoZSB1c2VyIGFnZW50IG5lZWRzIHRvXG4gIC8vICAgICAgICByZXNlbmQgcmVxdWVzdCwgdGhlbiBpbnN0ZWFkIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgICAgIC0gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgICAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSxcbiAgLy8gICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB1c2VyIGFnZW50XHUyMDE5cyBIVFRQIHBhcnNlciByZWNlaXZlcyB0aGUgZmlyc3QgYnl0ZVxuICAvLyAgICAgICAgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXIgYnl0ZXMgZm9yIEhUVFAvMiBvciByZXNwb25zZSBzdGF0dXNcbiAgLy8gICAgICAgIGxpbmUgZm9yIEhUVFAvMS54KS5cblxuICAvLyAgICAgICAgLSBXYWl0IHVudGlsIGFsbCB0aGUgaGVhZGVycyBhcmUgdHJhbnNtaXR0ZWQuXG5cbiAgLy8gICAgICAgIC0gQW55IHJlc3BvbnNlcyB3aG9zZSBzdGF0dXMgaXMgaW4gdGhlIHJhbmdlIDEwMCB0byAxOTksIGluY2x1c2l2ZSxcbiAgLy8gICAgICAgIGFuZCBpcyBub3QgMTAxLCBhcmUgdG8gYmUgaWdub3JlZCwgZXhjZXB0IGZvciB0aGUgcHVycG9zZXMgb2Ygc2V0dGluZ1xuICAvLyAgICAgICAgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIGFib3ZlLlxuXG4gIC8vICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFRyYW5zZmVyLUVuY29kaW5nYC9gY2h1bmtlZGAgYW5kXG4gIC8vICAgIHJlc3BvbnNlIGlzIHRyYW5zZmVycmVkIHZpYSBIVFRQLzEuMCBvciBvbGRlciwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vICAgIGVycm9yLlxuXG4gIC8vICAgIC0gSWYgdGhlIEhUVFAgcmVxdWVzdCByZXN1bHRzIGluIGEgVExTIGNsaWVudCBjZXJ0aWZpY2F0ZSBkaWFsb2csIHRoZW46XG5cbiAgLy8gICAgICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QsIG1ha2UgdGhlXG4gIC8vICAgICAgICBkaWFsb2cgYXZhaWxhYmxlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cblxuICAvLyAgICAgICAgMi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vIFRvIHRyYW5zbWl0IHJlcXVlc3RcdTIwMTlzIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuICBsZXQgcmVxdWVzdEJvZHkgPSBudWxsXG4gIC8vIDEuIElmIGJvZHkgaXMgbnVsbCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpc1xuICAvLyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdFxuICAvLyBlbmQtb2YtYm9keSBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KCkpXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJvZHkgaXMgbm9uLW51bGw6XG5cbiAgICAvLyAgICAxLiBMZXQgcHJvY2Vzc0JvZHlDaHVuayBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUNodW5rID0gYXN5bmMgZnVuY3Rpb24gKiAoYnl0ZXMpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOiB0cmFuc21pdCBieXRlcy5cbiAgICAgIHlpZWxkIGJ5dGVzXG5cbiAgICAgIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBpcyBub24tbnVsbCwgdGhlbiBydW5cbiAgICAgIC8vIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBnaXZlbiBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGg/LihieXRlcy5ieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBwcm9jZXNzRW5kT2ZCb2R5IGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsXG4gICAgICAvLyB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5LlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBnaXZlbiBlIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZSkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBlIGlzIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbiwgdGhlbiBhYm9ydCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlci5cbiAgICAgIGlmIChlLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSW5jcmVtZW50YWxseSByZWFkIHJlcXVlc3RcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHlDaHVuaywgcHJvY2Vzc0VuZE9mQm9keSxcbiAgICAvLyBwcm9jZXNzQm9keUVycm9yLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgcmVxdWVzdEJvZHkgPSAoYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGJ5dGVzIG9mIHJlcXVlc3QuYm9keS5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHByb2Nlc3NCb2R5Q2h1bmsoYnl0ZXMpXG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0VuZE9mQm9keSgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzb2NrZXQgaXMgb25seSBwcm92aWRlZCBmb3Igd2Vic29ja2V0c1xuICAgIGNvbnN0IHsgYm9keSwgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0gPSBhd2FpdCBkaXNwYXRjaCh7IGJvZHk6IHJlcXVlc3RCb2R5IH0pXG5cbiAgICBpZiAoc29ja2V0KSB7XG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IGJvZHlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCA9ICgpID0+IGl0ZXJhdG9yLm5leHQoKVxuXG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QgfSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDEwLiBJZiBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAvLyAxLiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICAgIC8vIDIuIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zLCBlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoZXJyKVxuICB9XG5cbiAgLy8gMTEuIExldCBwdWxsQWxnb3JpdGhtIGJlIGFuIGFjdGlvbiB0aGF0IHJlc3VtZXMgdGhlIG9uZ29pbmcgZmV0Y2hcbiAgLy8gaWYgaXQgaXMgc3VzcGVuZGVkLlxuICBjb25zdCBwdWxsQWxnb3JpdGhtID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lKClcbiAgfVxuXG4gIC8vIDEyLiBMZXQgY2FuY2VsQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFib3J0cyBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gY29udHJvbGxlciB3aXRoIHJlYXNvbiwgZ2l2ZW4gcmVhc29uLlxuICBjb25zdCBjYW5jZWxBbGdvcml0aG0gPSAocmVhc29uKSA9PiB7XG4gICAgLy8gSWYgdGhlIGFib3J0ZWQgZmV0Y2ggd2FzIGFscmVhZHkgdGVybWluYXRlZCwgdGhlbiB3ZSBkbyBub3RcbiAgICAvLyBuZWVkIHRvIGRvIGFueXRoaW5nLlxuICAgIGlmICghaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KHJlYXNvbilcbiAgICB9XG4gIH1cblxuICAvLyAxMy4gTGV0IGhpZ2hXYXRlck1hcmsgYmUgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4gbnVtYmVyLCBjaG9zZW4gYnlcbiAgLy8gdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNC4gTGV0IHNpemVBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWNjZXB0cyBhIGNodW5rIG9iamVjdFxuICAvLyBhbmQgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiwgbm9uLWluZmluaXRlIG51bWJlciwgY2hvc2VuIGJ5IHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIExldCBzdHJlYW0gYmUgYSBuZXcgUmVhZGFibGVTdHJlYW0uXG4gIC8vIDE2LiBTZXQgdXAgc3RyZWFtIHdpdGggYnl0ZSByZWFkaW5nIHN1cHBvcnQgd2l0aCBwdWxsQWxnb3JpdGhtIHNldCB0byBwdWxsQWxnb3JpdGhtLFxuICAvLyAgICAgY2FuY2VsQWxnb3JpdGhtIHNldCB0byBjYW5jZWxBbGdvcml0aG0uXG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoY29udHJvbGxlcikge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBhd2FpdCBwdWxsQWxnb3JpdGhtKGNvbnRyb2xsZXIpXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgY2FuY2VsQWxnb3JpdGhtKHJlYXNvbilcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnYnl0ZXMnXG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0sIHNvdXJjZTogbnVsbCwgbGVuZ3RoOiBudWxsIH1cblxuICAvLyAgICAyLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzXG4gIC8vICAgIG5vdCBcIm5vLXN0b3JlXCIsIHRoZW4gdXBkYXRlIHJlc3BvbnNlIGluIGh0dHBDYWNoZSBmb3IgcmVxdWVzdC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vICAgIDMuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlIGFuZCB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZFxuICAvLyAgICB0byBibG9jayBjb29raWVzIGZvciByZXF1ZXN0IChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW4gcnVuIHRoZVxuICAvLyAgICBcInNldC1jb29raWUtc3RyaW5nXCIgcGFyc2luZyBhbGdvcml0aG0gKHNlZSBzZWN0aW9uIDUuMiBvZiBbQ09PS0lFU10pIG9uXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiBlYWNoIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAvLyAgICBgU2V0LUNvb2tpZWAgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LCBpZiBhbnksIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vIDE4LiBJZiBhYm9ydGVkLCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTkuIFJ1biB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbDpcblxuICAvLyAgICAxLiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkOlxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZCA9IG9uQWJvcnRlZFxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgb25BYm9ydGVkKVxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSA9IGFzeW5jICgpID0+IHtcbiAgICAvLyAxLiBXaGlsZSB0cnVlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIDEtMy4gU2VlIG9uRGF0YS4uLlxuXG4gICAgICAvLyA0LiBTZXQgYnl0ZXMgdG8gdGhlIHJlc3VsdCBvZiBoYW5kbGluZyBjb250ZW50IGNvZGluZ3MgZ2l2ZW5cbiAgICAgIC8vIGNvZGluZ3MgYW5kIGJ5dGVzLlxuICAgICAgbGV0IGJ5dGVzXG4gICAgICBsZXQgaXNGYWlsdXJlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQoKVxuXG4gICAgICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzID0gZG9uZSA/IHVuZGVmaW5lZCA6IHZhbHVlXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgJiYgIXRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplKSB7XG4gICAgICAgICAgLy8gemxpYiBkb2Vzbid0IGxpa2UgZW1wdHkgc3RyZWFtcy5cbiAgICAgICAgICBieXRlcyA9IHVuZGVmaW5lZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5dGVzID0gZXJyXG5cbiAgICAgICAgICAvLyBlcnIgbWF5IGJlIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgcmVhZGFibGVzdHJlYW0uY2FuY2VsLFxuICAgICAgICAgIC8vIHdoaWNoIG1pZ2h0IG5vdCBiZSBhbiBlcnJvci4gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMDlcbiAgICAgICAgICBpc0ZhaWx1cmUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGUgYnl0ZXMgdHJhbnNtaXNzaW9uIGZvciByZXNwb25zZVx1MjAxOXMgbWVzc2FnZVxuICAgICAgICAvLyBib2R5IGlzIGRvbmUgbm9ybWFsbHkgYW5kIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBjbG9zZVxuICAgICAgICAvLyBzdHJlYW0sIGZpbmFsaXplIHJlc3BvbnNlIGZvciBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UsIGFuZFxuICAgICAgICAvLyBhYm9ydCB0aGVzZSBpbi1wYXJhbGxlbCBzdGVwcy5cbiAgICAgICAgcmVhZGFibGVTdHJlYW1DbG9zZShmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIpXG5cbiAgICAgICAgZmluYWxpemVSZXNwb25zZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIEluY3JlYXNlIHRpbWluZ0luZm9cdTIwMTlzIGRlY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICB0aW1pbmdJbmZvLmRlY29kZWRCb2R5U2l6ZSArPSBieXRlcz8uYnl0ZUxlbmd0aCA/PyAwXG5cbiAgICAgIC8vIDYuIElmIGJ5dGVzIGlzIGZhaWx1cmUsIHRoZW4gdGVybWluYXRlIGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGlzRmFpbHVyZSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShieXRlcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDcuIEVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgYnl0ZXNcbiAgICAgIC8vIGludG8gc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpXG4gICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVucXVldWUoYnVmZmVyKVxuICAgICAgfVxuXG4gICAgICAvLyA4LiBJZiBzdHJlYW0gaXMgZXJyb3JlZCwgdGhlbiB0ZXJtaW5hdGUgdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gOS4gSWYgc3RyZWFtIGRvZXNuXHUyMDE5dCBuZWVkIG1vcmUgZGF0YSBhc2sgdGhlIHVzZXIgYWdlbnQgdG8gc3VzcGVuZFxuICAgICAgLy8gdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplIDw9IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gICAgMi4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgZnVuY3Rpb24gb25BYm9ydGVkIChyZWFzb24pIHtcbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZy5cbiAgICAgIHJlc3BvbnNlLmFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIElmIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciBzdHJlYW0gd2l0aCB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5c1xuICAgICAgLy8gICAgY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kIGFuXG4gICAgICAvLyAgICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJlYWxtLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IoXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHN0cmVhbSBpcyByZWFkYWJsZSwgZXJyb3Igc3RyZWFtIHdpdGggYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihuZXcgVHlwZUVycm9yKCd0ZXJtaW5hdGVkJywge1xuICAgICAgICAgIGNhdXNlOiBpc0Vycm9yTGlrZShyZWFzb24pID8gcmVhc29uIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyA1LiBPdGhlcndpc2UsIHRoZSB1c2VyIGFnZW50IHNob3VsZCBjbG9zZSBjb25uZWN0aW9uIHVubGVzcyBpdCB3b3VsZCBiZSBiYWQgZm9yIHBlcmZvcm1hbmNlIHRvIGRvIHNvLlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgfVxuXG4gIC8vIDIwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoICh7IGJvZHkgfSkge1xuICAgIGNvbnN0IHVybCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uJykuQWdlbnR9ICovXG4gICAgY29uc3QgYWdlbnQgPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXJcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBhZ2VudC5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCxcbiAgICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICBib2R5OiBhZ2VudC5pc01vY2tBY3RpdmUgPyByZXF1ZXN0LmJvZHkgJiYgKHJlcXVlc3QuYm9keS5zb3VyY2UgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSkgOiBib2R5LFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnNMaXN0LmVudHJpZXMsXG4gICAgICAgIG1heFJlZGlyZWN0aW9uczogMCxcbiAgICAgICAgdXBncmFkZTogcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JyA/ICd3ZWJzb2NrZXQnIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBib2R5OiBudWxsLFxuICAgICAgICBhYm9ydDogbnVsbCxcblxuICAgICAgICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCBjb25uZWN0aW9uIGhlcmU/XG4gICAgICAgICAgY29uc3QgeyBjb25uZWN0aW9uIH0gPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW5cbiAgICAgICAgICAvLyBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXMgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnRcbiAgICAgICAgICAvLyB0aW1lLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgICAgICAgIC8vIFRPRE86IGltcGxlbWVudCBjb25uZWN0aW9uIHRpbWluZ1xuICAgICAgICAgIHRpbWluZ0luZm8uZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbyA9IGNsYW1wQW5kQ29hcnNlbkNvbm5lY3Rpb25UaW1pbmdJbmZvKHVuZGVmaW5lZCwgdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUsIGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBhYm9ydChuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBhYm9ydClcbiAgICAgICAgICAgIHRoaXMuYWJvcnQgPSBjb25uZWN0aW9uLmFib3J0ID0gYWJvcnRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuXG4gICAgICAgICAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgICAgICAgIHRpbWluZ0luZm8uZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uUmVzcG9uc2VTdGFydGVkICgpIHtcbiAgICAgICAgICAvLyBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnRcbiAgICAgICAgICAvLyB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICAgICAgICAgLy8gdXNlciBhZ2VudFx1MjAxOXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXJcbiAgICAgICAgICAvLyBieXRlcyBmb3IgSFRUUC8yIG9yIHJlc3BvbnNlIHN0YXR1cyBsaW5lIGZvciBIVFRQLzEueCkuXG4gICAgICAgICAgdGltaW5nSW5mby5maW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzIDwgMjAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbG9jYXRpb24gPSAnJ1xuXG4gICAgICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdIZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZShyYXdIZWFkZXJzW2ldKSwgcmF3SGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ2xhdGluMScpLCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBsb2NhdGlvbiA9IGhlYWRlcnNMaXN0LmdldCgnbG9jYXRpb24nLCB0cnVlKVxuXG4gICAgICAgICAgdGhpcy5ib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVhZDogcmVzdW1lIH0pXG5cbiAgICAgICAgICBjb25zdCBkZWNvZGVycyA9IFtdXG5cbiAgICAgICAgICBjb25zdCB3aWxsRm9sbG93ID0gbG9jYXRpb24gJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycgJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgY29uc3QgY29udGVudEVuY29kaW5nID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LWVuY29kaW5nJywgdHJ1ZSlcbiAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgICAgICAgICAgY29uc3QgY29kaW5ncyA9IGNvbnRlbnRFbmNvZGluZyA/IGNvbnRlbnRFbmNvZGluZy50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykgOiBbXVxuXG4gICAgICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbnRlbnQtZW5jb2RpbmdzIHRvIHByZXZlbnQgcmVzb3VyY2UgZXhoYXVzdGlvbi5cbiAgICAgICAgICAgIC8vIENWRSBmaXggc2ltaWxhciB0byB1cmxsaWIzIChHSFNBLWdtNjIteHYyai00dzUzKSBhbmQgY3VybCAoQ1ZFLTIwMjItMzIyMDYpLlxuICAgICAgICAgICAgY29uc3QgbWF4Q29udGVudEVuY29kaW5ncyA9IDVcbiAgICAgICAgICAgIGlmIChjb2RpbmdzLmxlbmd0aCA+IG1heENvbnRlbnRFbmNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdG9vIG1hbnkgY29udGVudC1lbmNvZGluZ3MgaW4gcmVzcG9uc2U6ICR7Y29kaW5ncy5sZW5ndGh9LCBtYXhpbXVtIGFsbG93ZWQgaXMgJHttYXhDb250ZW50RW5jb2RpbmdzfWApKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY29kaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICBjb25zdCBjb2RpbmcgPSBjb2RpbmdzW2ldLnRyaW0oKVxuICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMi5odG1sI3NlY3Rpb24tNy4yXG4gICAgICAgICAgICAgIGlmIChjb2RpbmcgPT09ICd4LWd6aXAnIHx8IGNvZGluZyA9PT0gJ2d6aXAnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUd1bnppcCh7XG4gICAgICAgICAgICAgICAgICAvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcbiAgICAgICAgICAgICAgICAgIC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgLy8gYnkgY29tbW9uIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cbiAgICAgICAgICAgICAgICAgIGZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnZGVmbGF0ZScpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKGNyZWF0ZUluZmxhdGUoe1xuICAgICAgICAgICAgICAgICAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0hcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyh7XG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuQlJPVExJX09QRVJBVElPTl9GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5CUk9UTElfT1BFUkFUSU9OX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMubGVuZ3RoID0gMFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBvbkVycm9yID0gdGhpcy5vbkVycm9yLmJpbmQodGhpcylcblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0LFxuICAgICAgICAgICAgYm9keTogZGVjb2RlcnMubGVuZ3RoXG4gICAgICAgICAgICAgID8gcGlwZWxpbmUodGhpcy5ib2R5LCAuLi5kZWNvZGVycywgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgICAgICA6IHRoaXMuYm9keS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRGF0YSAoY2h1bmspIHtcbiAgICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAxLiBJZiBvbmUgb3IgbW9yZSBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgZnJvbSByZXNwb25zZVx1MjAxOXNcbiAgICAgICAgICAvLyBtZXNzYWdlIGJvZHksIHRoZW46XG5cbiAgICAgICAgICAvLyAgMS4gTGV0IGJ5dGVzIGJlIHRoZSB0cmFuc21pdHRlZCBieXRlcy5cbiAgICAgICAgICBjb25zdCBieXRlcyA9IGNodW5rXG5cbiAgICAgICAgICAvLyAgMi4gTGV0IGNvZGluZ3MgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgICAgIC8vICBnaXZlbiBgQ29udGVudC1FbmNvZGluZ2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgICAgICAvLyAgU2VlIHB1bGxBbGdvcml0aG0uXG5cbiAgICAgICAgICAvLyAgMy4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZW5jb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgICAgICB0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSArPSBieXRlcy5ieXRlTGVuZ3RoXG5cbiAgICAgICAgICAvLyAgNC4gU2VlIHB1bGxBbGdvcml0aG0uLi5cblxuICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkucHVzaChieXRlcylcbiAgICAgICAgfSxcblxuICAgICAgICBvbkNvbXBsZXRlICgpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uQWJvcnRlZClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5ib2R5LnB1c2gobnVsbClcbiAgICAgICAgfSxcblxuICAgICAgICBvbkVycm9yIChlcnJvcikge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5Py5kZXN0cm95KGVycm9yKVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyb3IpXG5cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25VcGdyYWRlIChzdGF0dXMsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09IDEwMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdIZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZShyYXdIZWFkZXJzW2ldKSwgcmF3SGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ2xhdGluMScpLCB0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdCxcbiAgICAgICAgICAgIHNvY2tldFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmV0Y2gsXG4gIEZldGNoLFxuICBmZXRjaGluZyxcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuXG5jb25zdCBrU3RhdGUgPSBTeW1ib2woJ1Byb2dyZXNzRXZlbnQgc3RhdGUnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNwcm9ncmVzc2V2ZW50XG4gKi9cbmNsYXNzIFByb2dyZXNzRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUsICdQcm9ncmVzc0V2ZW50IGNvbnN0cnVjdG9yJywgJ3R5cGUnKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVuY29kaW5nLWdldFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBsYWJlbFxuICovXG5mdW5jdGlvbiBnZXRFbmNvZGluZyAobGFiZWwpIHtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAvLyAyLiBJZiBsYWJlbCBpcyBhbiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBhbnkgb2YgdGhlXG4gIC8vICAgIGxhYmVscyBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgY29ycmVzcG9uZGluZyBlbmNvZGluZzsgb3RoZXJ3aXNlIHJldHVybiBmYWlsdXJlLlxuICBzd2l0Y2ggKGxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAndW5pY29kZS0xLTEtdXRmLTgnOlxuICAgIGNhc2UgJ3VuaWNvZGUxMXV0ZjgnOlxuICAgIGNhc2UgJ3VuaWNvZGUyMHV0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd4LXVuaWNvZGUyMHV0ZjgnOlxuICAgICAgcmV0dXJuICdVVEYtOCdcbiAgICBjYXNlICc4NjYnOlxuICAgIGNhc2UgJ2NwODY2JzpcbiAgICBjYXNlICdjc2libTg2Nic6XG4gICAgY2FzZSAnaWJtODY2JzpcbiAgICAgIHJldHVybiAnSUJNODY2J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4yJzpcbiAgICBjYXNlICdpc28tODg1OS0yJzpcbiAgICBjYXNlICdpc28taXItMTAxJzpcbiAgICBjYXNlICdpc284ODU5LTInOlxuICAgIGNhc2UgJ2lzbzg4NTkyJzpcbiAgICBjYXNlICdpc29fODg1OS0yJzpcbiAgICBjYXNlICdpc29fODg1OS0yOjE5ODcnOlxuICAgIGNhc2UgJ2wyJzpcbiAgICBjYXNlICdsYXRpbjInOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0yJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4zJzpcbiAgICBjYXNlICdpc28tODg1OS0zJzpcbiAgICBjYXNlICdpc28taXItMTA5JzpcbiAgICBjYXNlICdpc284ODU5LTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkzJzpcbiAgICBjYXNlICdpc29fODg1OS0zJzpcbiAgICBjYXNlICdpc29fODg1OS0zOjE5ODgnOlxuICAgIGNhc2UgJ2wzJzpcbiAgICBjYXNlICdsYXRpbjMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0zJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW40JzpcbiAgICBjYXNlICdpc28tODg1OS00JzpcbiAgICBjYXNlICdpc28taXItMTEwJzpcbiAgICBjYXNlICdpc284ODU5LTQnOlxuICAgIGNhc2UgJ2lzbzg4NTk0JzpcbiAgICBjYXNlICdpc29fODg1OS00JzpcbiAgICBjYXNlICdpc29fODg1OS00OjE5ODgnOlxuICAgIGNhc2UgJ2w0JzpcbiAgICBjYXNlICdsYXRpbjQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS00J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5jeXJpbGxpYyc6XG4gICAgY2FzZSAnY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTUnOlxuICAgIGNhc2UgJ2lzby1pci0xNDQnOlxuICAgIGNhc2UgJ2lzbzg4NTktNSc6XG4gICAgY2FzZSAnaXNvODg1OTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTU6MTk4OCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTUnXG4gICAgY2FzZSAnYXJhYmljJzpcbiAgICBjYXNlICdhc21vLTcwOCc6XG4gICAgY2FzZSAnY3Npc284ODU5NmUnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZpJzpcbiAgICBjYXNlICdjc2lzb2xhdGluYXJhYmljJzpcbiAgICBjYXNlICdlY21hLTExNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNic6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1lJzpcbiAgICBjYXNlICdpc28tODg1OS02LWknOlxuICAgIGNhc2UgJ2lzby1pci0xMjcnOlxuICAgIGNhc2UgJ2lzbzg4NTktNic6XG4gICAgY2FzZSAnaXNvODg1OTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTY6MTk4Nyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTYnXG4gICAgY2FzZSAnY3Npc29sYXRpbmdyZWVrJzpcbiAgICBjYXNlICdlY21hLTExOCc6XG4gICAgY2FzZSAnZWxvdF85MjgnOlxuICAgIGNhc2UgJ2dyZWVrJzpcbiAgICBjYXNlICdncmVlazgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTcnOlxuICAgIGNhc2UgJ2lzby1pci0xMjYnOlxuICAgIGNhc2UgJ2lzbzg4NTktNyc6XG4gICAgY2FzZSAnaXNvODg1OTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTc6MTk4Nyc6XG4gICAgY2FzZSAnc3VuX2V1X2dyZWVrJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNydcbiAgICBjYXNlICdjc2lzbzg4NTk4ZSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmhlYnJldyc6XG4gICAgY2FzZSAnaGVicmV3JzpcbiAgICBjYXNlICdpc28tODg1OS04JzpcbiAgICBjYXNlICdpc28tODg1OS04LWUnOlxuICAgIGNhc2UgJ2lzby1pci0xMzgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOCc6XG4gICAgY2FzZSAnaXNvODg1OTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTg6MTk4OCc6XG4gICAgY2FzZSAndmlzdWFsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOCdcbiAgICBjYXNlICdjc2lzbzg4NTk4aSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1pJzpcbiAgICBjYXNlICdsb2dpY2FsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOC1JJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW42JzpcbiAgICBjYXNlICdpc28tODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvLWlyLTE1Nyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvODg1OTEwJzpcbiAgICBjYXNlICdsNic6XG4gICAgY2FzZSAnbGF0aW42JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTAnXG4gICAgY2FzZSAnaXNvLTg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEzJ1xuICAgIGNhc2UgJ2lzby04ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5MTQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNCdcbiAgICBjYXNlICdjc2lzb2xhdGluOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMTUnOlxuICAgIGNhc2UgJ2w5JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTUnXG4gICAgY2FzZSAnaXNvLTg4NTktMTYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNidcbiAgICBjYXNlICdjc2tvaThyJzpcbiAgICBjYXNlICdrb2knOlxuICAgIGNhc2UgJ2tvaTgnOlxuICAgIGNhc2UgJ2tvaTgtcic6XG4gICAgY2FzZSAna29pOF9yJzpcbiAgICAgIHJldHVybiAnS09JOC1SJ1xuICAgIGNhc2UgJ2tvaTgtcnUnOlxuICAgIGNhc2UgJ2tvaTgtdSc6XG4gICAgICByZXR1cm4gJ0tPSTgtVSdcbiAgICBjYXNlICdjc21hY2ludG9zaCc6XG4gICAgY2FzZSAnbWFjJzpcbiAgICBjYXNlICdtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ3gtbWFjLXJvbWFuJzpcbiAgICAgIHJldHVybiAnbWFjaW50b3NoJ1xuICAgIGNhc2UgJ2lzby04ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5MTEnOlxuICAgIGNhc2UgJ3Rpcy02MjAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtODc0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy04NzQnXG4gICAgY2FzZSAnY3AxMjUwJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTAnOlxuICAgIGNhc2UgJ3gtY3AxMjUwJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUwJ1xuICAgIGNhc2UgJ2NwMTI1MSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUxJzpcbiAgICBjYXNlICd4LWNwMTI1MSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MSdcbiAgICBjYXNlICdhbnNpX3gzLjQtMTk2OCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2NwMTI1Mic6XG4gICAgY2FzZSAnY3A4MTknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW4xJzpcbiAgICBjYXNlICdpYm04MTknOlxuICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgIGNhc2UgJ2lzby1pci0xMDAnOlxuICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgY2FzZSAnaXNvODg1OTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgY2FzZSAnbDEnOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAndXMtYXNjaWknOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTInXG4gICAgY2FzZSAnY3AxMjUzJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTMnOlxuICAgIGNhc2UgJ3gtY3AxMjUzJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUzJ1xuICAgIGNhc2UgJ2NwMTI1NCc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTknOlxuICAgIGNhc2UgJ2lzby1pci0xNDgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOSc6XG4gICAgY2FzZSAnaXNvODg1OTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTk6MTk4OSc6XG4gICAgY2FzZSAnbDUnOlxuICAgIGNhc2UgJ2xhdGluNSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU0JzpcbiAgICBjYXNlICd4LWNwMTI1NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NCdcbiAgICBjYXNlICdjcDEyNTUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NSc6XG4gICAgY2FzZSAneC1jcDEyNTUnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTUnXG4gICAgY2FzZSAnY3AxMjU2JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTYnOlxuICAgIGNhc2UgJ3gtY3AxMjU2JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU2J1xuICAgIGNhc2UgJ2NwMTI1Nyc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU3JzpcbiAgICBjYXNlICd4LWNwMTI1Nyc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NydcbiAgICBjYXNlICdjcDEyNTgnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1OCc6XG4gICAgY2FzZSAneC1jcDEyNTgnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTgnXG4gICAgY2FzZSAneC1tYWMtY3lyaWxsaWMnOlxuICAgIGNhc2UgJ3gtbWFjLXVrcmFpbmlhbic6XG4gICAgICByZXR1cm4gJ3gtbWFjLWN5cmlsbGljJ1xuICAgIGNhc2UgJ2NoaW5lc2UnOlxuICAgIGNhc2UgJ2NzZ2IyMzEyJzpcbiAgICBjYXNlICdjc2lzbzU4Z2IyMzEyODAnOlxuICAgIGNhc2UgJ2diMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMi04MCc6XG4gICAgY2FzZSAnZ2JrJzpcbiAgICBjYXNlICdpc28taXItNTgnOlxuICAgIGNhc2UgJ3gtZ2JrJzpcbiAgICAgIHJldHVybiAnR0JLJ1xuICAgIGNhc2UgJ2diMTgwMzAnOlxuICAgICAgcmV0dXJuICdnYjE4MDMwJ1xuICAgIGNhc2UgJ2JpZzUnOlxuICAgIGNhc2UgJ2JpZzUtaGtzY3MnOlxuICAgIGNhc2UgJ2NuLWJpZzUnOlxuICAgIGNhc2UgJ2NzYmlnNSc6XG4gICAgY2FzZSAneC14LWJpZzUnOlxuICAgICAgcmV0dXJuICdCaWc1J1xuICAgIGNhc2UgJ2NzZXVjcGtkZm10amFwYW5lc2UnOlxuICAgIGNhc2UgJ2V1Yy1qcCc6XG4gICAgY2FzZSAneC1ldWMtanAnOlxuICAgICAgcmV0dXJuICdFVUMtSlAnXG4gICAgY2FzZSAnY3Npc28yMDIyanAnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWpwJzpcbiAgICAgIHJldHVybiAnSVNPLTIwMjItSlAnXG4gICAgY2FzZSAnY3NzaGlmdGppcyc6XG4gICAgY2FzZSAnbXM5MzInOlxuICAgIGNhc2UgJ21zX2thbmppJzpcbiAgICBjYXNlICdzaGlmdC1qaXMnOlxuICAgIGNhc2UgJ3NoaWZ0X2ppcyc6XG4gICAgY2FzZSAnc2ppcyc6XG4gICAgY2FzZSAnd2luZG93cy0zMWonOlxuICAgIGNhc2UgJ3gtc2ppcyc6XG4gICAgICByZXR1cm4gJ1NoaWZ0X0pJUydcbiAgICBjYXNlICdjc2V1Y2tyJzpcbiAgICBjYXNlICdjc2tzYzU2MDExOTg3JzpcbiAgICBjYXNlICdldWMta3InOlxuICAgIGNhc2UgJ2lzby1pci0xNDknOlxuICAgIGNhc2UgJ2tvcmVhbic6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODcnOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg5JzpcbiAgICBjYXNlICdrc2M1NjAxJzpcbiAgICBjYXNlICdrc2NfNTYwMSc6XG4gICAgY2FzZSAnd2luZG93cy05NDknOlxuICAgICAgcmV0dXJuICdFVUMtS1InXG4gICAgY2FzZSAnY3Npc28yMDIya3InOlxuICAgIGNhc2UgJ2h6LWdiLTIzMTInOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbi1leHQnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWtyJzpcbiAgICBjYXNlICdyZXBsYWNlbWVudCc6XG4gICAgICByZXR1cm4gJ3JlcGxhY2VtZW50J1xuICAgIGNhc2UgJ3VuaWNvZGVmZmZlJzpcbiAgICBjYXNlICd1dGYtMTZiZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICAgIGNhc2UgJ2NzdW5pY29kZSc6XG4gICAgY2FzZSAnaXNvLTEwNjQ2LXVjcy0yJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndW5pY29kZSc6XG4gICAgY2FzZSAndW5pY29kZWZlZmYnOlxuICAgIGNhc2UgJ3V0Zi0xNic6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgICBjYXNlICd4LXVzZXItZGVmaW5lZCc6XG4gICAgICByZXR1cm4gJ3gtdXNlci1kZWZpbmVkJ1xuICAgIGRlZmF1bHQ6IHJldHVybiAnZmFpbHVyZSdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0RW5jb2Rpbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBrU3RhdGUsXG4gIGtFcnJvcixcbiAga1Jlc3VsdCxcbiAga0Fib3J0ZWQsXG4gIGtMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgUHJvZ3Jlc3NFdmVudCB9ID0gcmVxdWlyZSgnLi9wcm9ncmVzc2V2ZW50JylcbmNvbnN0IHsgZ2V0RW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4vZW5jb2RpbmcnKVxuY29uc3QgeyBzZXJpYWxpemVBTWltZVR5cGUsIHBhcnNlTUlNRVR5cGUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJylcbmNvbnN0IHsgYnRvYSB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRPcGVyYXRpb25cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSBmclxuICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiByZWFkT3BlcmF0aW9uIChmciwgYmxvYiwgdHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBcImxvYWRpbmdcIiwgdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3JcbiAgLy8gICAgRE9NRXhjZXB0aW9uLlxuICBpZiAoZnJba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBzdGF0ZScsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gIH1cblxuICAvLyAyLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwibG9hZGluZ1wiLlxuICBmcltrU3RhdGVdID0gJ2xvYWRpbmcnXG5cbiAgLy8gMy4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gbnVsbC5cbiAgZnJba1Jlc3VsdF0gPSBudWxsXG5cbiAgLy8gNC4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBudWxsLlxuICBmcltrRXJyb3JdID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdHJlYW0gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGdldCBzdHJlYW0gb24gYmxvYi5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbX0gKi9cbiAgY29uc3Qgc3RyZWFtID0gYmxvYi5zdHJlYW0oKVxuXG4gIC8vIDYuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZyb20gc3RyZWFtLlxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAvLyA3LiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyA4LiBMZXQgY2h1bmtQcm9taXNlIGJlIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhIGNodW5rIGZyb21cbiAgLy8gICAgc3RyZWFtIHdpdGggcmVhZGVyLlxuICBsZXQgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuXG4gIC8vIDkuIExldCBpc0ZpcnN0Q2h1bmsgYmUgdHJ1ZS5cbiAgbGV0IGlzRmlyc3RDaHVuayA9IHRydWVcblxuICAvLyAxMC4gSW4gcGFyYWxsZWwsIHdoaWxlIHRydWU6XG4gIC8vIE5vdGU6IFwiSW4gcGFyYWxsZWxcIiBqdXN0IG1lYW5zIG5vbi1ibG9ja2luZ1xuICAvLyBOb3RlIDI6IHJlYWRPcGVyYXRpb24gaXRzZWxmIGNhbm5vdCBiZSBhc3luYyBhcyBkb3VibGVcbiAgLy8gcmVhZGluZyB0aGUgYm9keSB3b3VsZCB0aGVuIHJlamVjdCB0aGUgcHJvbWlzZSwgaW5zdGVhZFxuICAvLyBvZiB0aHJvd2luZyBhbiBlcnJvci5cbiAgOyhhc3luYyAoKSA9PiB7XG4gICAgd2hpbGUgKCFmcltrQWJvcnRlZF0pIHtcbiAgICAgIC8vIDEuIFdhaXQgZm9yIGNodW5rUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBjaHVua1Byb21pc2VcblxuICAgICAgICAvLyAyLiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkLCBhbmQgaXNGaXJzdENodW5rIGlzXG4gICAgICAgIC8vICAgIHRydWUsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkXG4gICAgICAgIC8vICAgIGxvYWRzdGFydCBhdCBmci5cbiAgICAgICAgaWYgKGlzRmlyc3RDaHVuayAmJiAhZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2Fkc3RhcnQnLCBmcilcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gU2V0IGlzRmlyc3RDaHVuayB0byBmYWxzZS5cbiAgICAgICAgaXNGaXJzdENodW5rID0gZmFsc2VcblxuICAgICAgICAvLyA0LiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW4gb2JqZWN0IHdob3NlXG4gICAgICAgIC8vICAgIGRvbmUgcHJvcGVydHkgaXMgZmFsc2UgYW5kIHdob3NlIHZhbHVlIHByb3BlcnR5IGlzXG4gICAgICAgIC8vICAgIGEgVWludDhBcnJheSBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcbiAgICAgICAgaWYgKCFkb25lICYmIHR5cGVzLmlzVWludDhBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyAxLiBMZXQgYnMgYmUgdGhlIGJ5dGUgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlXG4gICAgICAgICAgLy8gICAgVWludDhBcnJheSBvYmplY3QuXG5cbiAgICAgICAgICAvLyAyLiBBcHBlbmQgYnMgdG8gYnl0ZXMuXG4gICAgICAgICAgYnl0ZXMucHVzaCh2YWx1ZSlcblxuICAgICAgICAgIC8vIDMuIElmIHJvdWdobHkgNTBtcyBoYXZlIHBhc3NlZCBzaW5jZSB0aGVzZSBzdGVwc1xuICAgICAgICAgIC8vICAgIHdlcmUgbGFzdCBpbnZva2VkLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhXG4gICAgICAgICAgLy8gICAgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHByb2dyZXNzIGF0IGZyLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgRGF0ZS5ub3coKSAtIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA+PSA1MFxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIWZyW2tBYm9ydGVkXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ3Byb2dyZXNzJywgZnIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuIFNldCBjaHVua1Byb21pc2UgdG8gdGhlIHJlc3VsdCBvZiByZWFkaW5nIGFcbiAgICAgICAgICAvLyAgICBjaHVuayBmcm9tIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgICAgICAgICBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG4gICAgICAgIH0gZWxzZSBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuXG4gICAgICAgICAgLy8gICAgb2JqZWN0IHdob3NlIGRvbmUgcHJvcGVydHkgaXMgdHJ1ZSwgcXVldWUgYSB0YXNrXG4gICAgICAgICAgLy8gICAgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAgIC8vIDIuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiBwYWNrYWdlIGRhdGEgZ2l2ZW5cbiAgICAgICAgICAgIC8vICAgIGJ5dGVzLCB0eXBlLCBibG9iXHUyMDE5cyB0eXBlLCBhbmQgZW5jb2RpbmdOYW1lLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFja2FnZURhdGEoYnl0ZXMsIHR5cGUsIGJsb2IudHlwZSwgZW5jb2RpbmdOYW1lKVxuXG4gICAgICAgICAgICAgIC8vIDQuIEVsc2U6XG5cbiAgICAgICAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gcmVzdWx0LlxuICAgICAgICAgICAgICBmcltrUmVzdWx0XSA9IHJlc3VsdFxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgbG9hZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZCcsIGZyKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gMy4gSWYgcGFja2FnZSBkYXRhIHRocmV3IGFuIGV4Y2VwdGlvbiBlcnJvcjpcblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDUuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCBhblxuICAgICAgICAvLyAgICBlcnJvciBlcnJvciwgcXVldWUgYSB0YXNrIHRvIHJ1biB0aGUgZm9sbG93aW5nXG4gICAgICAgIC8vICAgIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgLy8gMi4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgIC8vIDMuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuXG4gICAgICAgICAgLy8gNC4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgZnIuXG4gICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9KSgpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZmlyZS1hLXByb2dyZXNzLWV2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSByZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmlyZUFQcm9ncmVzc0V2ZW50IChlLCByZWFkZXIpIHtcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgZG9lcyBub3QgYnViYmxlLiBlLmJ1YmJsZXMgbXVzdCBiZSBmYWxzZVxuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBpcyBOT1QgY2FuY2VsYWJsZS4gZS5jYW5jZWxhYmxlIG11c3QgYmUgZmFsc2VcbiAgY29uc3QgZXZlbnQgPSBuZXcgUHJvZ3Jlc3NFdmVudChlLCB7XG4gICAgYnViYmxlczogZmFsc2UsXG4gICAgY2FuY2VsYWJsZTogZmFsc2VcbiAgfSlcblxuICByZWFkZXIuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNibG9iLXBhY2thZ2UtZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBtaW1lVHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcGFja2FnZURhdGEgKGJ5dGVzLCB0eXBlLCBtaW1lVHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIEEgQmxvYiBoYXMgYW4gYXNzb2NpYXRlZCBwYWNrYWdlIGRhdGEgYWxnb3JpdGhtLCBnaXZlblxuICAvLyAgICBieXRlcywgYSB0eXBlLCBhIG9wdGlvbmFsIG1pbWVUeXBlLCBhbmQgYSBvcHRpb25hbFxuICAvLyAgICBlbmNvZGluZ05hbWUsIHdoaWNoIHN3aXRjaGVzIG9uIHR5cGUgYW5kIHJ1bnMgdGhlXG4gIC8vICAgIGFzc29jaWF0ZWQgc3RlcHM6XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnRGF0YVVSTCc6IHtcbiAgICAgIC8vIDEuIFJldHVybiBieXRlcyBhcyBhIERhdGFVUkwgW1JGQzIzOTddIHN1YmplY3QgdG9cbiAgICAgIC8vICAgIHRoZSBjb25zaWRlcmF0aW9ucyBiZWxvdzpcbiAgICAgIC8vICAqIFVzZSBtaW1lVHlwZSBhcyBwYXJ0IG9mIHRoZSBEYXRhIFVSTCBpZiBpdCBpc1xuICAgICAgLy8gICAgYXZhaWxhYmxlIGluIGtlZXBpbmcgd2l0aCB0aGUgRGF0YSBVUkxcbiAgICAgIC8vICAgIHNwZWNpZmljYXRpb24gW1JGQzIzOTddLlxuICAgICAgLy8gICogSWYgbWltZVR5cGUgaXMgbm90IGF2YWlsYWJsZSByZXR1cm4gYSBEYXRhIFVSTFxuICAgICAgLy8gICAgd2l0aG91dCBhIG1lZGlhLXR5cGUuIFtSRkMyMzk3XS5cblxuICAgICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3I3NlY3Rpb24tM1xuICAgICAgLy8gZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICAgICAgLy8gbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gICAgICAvLyBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gICAgICAvLyBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICAgICAgbGV0IGRhdGFVUkwgPSAnZGF0YTonXG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpXG5cbiAgICAgIGlmIChwYXJzZWQgIT09ICdmYWlsdXJlJykge1xuICAgICAgICBkYXRhVVJMICs9IHNlcmlhbGl6ZUFNaW1lVHlwZShwYXJzZWQpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gJztiYXNlNjQsJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIud3JpdGUoY2h1bmspKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci5lbmQoKSlcblxuICAgICAgcmV0dXJuIGRhdGFVUkxcbiAgICB9XG4gICAgY2FzZSAnVGV4dCc6IHtcbiAgICAgIC8vIDEuIExldCBlbmNvZGluZyBiZSBmYWlsdXJlXG4gICAgICBsZXQgZW5jb2RpbmcgPSAnZmFpbHVyZSdcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuY29kaW5nTmFtZSBpcyBwcmVzZW50LCBzZXQgZW5jb2RpbmcgdG8gdGhlXG4gICAgICAvLyAgICByZXN1bHQgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIGVuY29kaW5nTmFtZS5cbiAgICAgIGlmIChlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIGFuZCBtaW1lVHlwZSBpcyBwcmVzZW50OlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScgJiYgbWltZVR5cGUpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzZSBhIE1JTUUgdHlwZVxuICAgICAgICAvLyAgICBnaXZlbiBtaW1lVHlwZS5cbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgICAgICAgLy8gMi4gSWYgdHlwZSBpcyBub3QgZmFpbHVyZSwgc2V0IGVuY29kaW5nIHRvIHRoZSByZXN1bHRcbiAgICAgICAgLy8gICAgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIHR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbXCJjaGFyc2V0XCJdLlxuICAgICAgICBpZiAodHlwZSAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyh0eXBlLnBhcmFtZXRlcnMuZ2V0KCdjaGFyc2V0JykpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgdGhlbiBzZXQgZW5jb2RpbmcgdG8gVVRGLTguXG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJykge1xuICAgICAgICBlbmNvZGluZyA9ICdVVEYtOCdcbiAgICAgIH1cblxuICAgICAgLy8gNS4gRGVjb2RlIGJ5dGVzIHVzaW5nIGZhbGxiYWNrIGVuY29kaW5nIGVuY29kaW5nLCBhbmRcbiAgICAgIC8vICAgIHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgcmV0dXJuIGRlY29kZShieXRlcywgZW5jb2RpbmcpXG4gICAgfVxuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzoge1xuICAgICAgLy8gUmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIGNvbnN0IHNlcXVlbmNlID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoYnl0ZXMpXG5cbiAgICAgIHJldHVybiBzZXF1ZW5jZS5idWZmZXJcbiAgICB9XG4gICAgY2FzZSAnQmluYXJ5U3RyaW5nJzoge1xuICAgICAgLy8gUmV0dXJuIGJ5dGVzIGFzIGEgYmluYXJ5IHN0cmluZywgaW4gd2hpY2ggZXZlcnkgYnl0ZVxuICAgICAgLy8gIGlzIHJlcHJlc2VudGVkIGJ5IGEgY29kZSB1bml0IG9mIGVxdWFsIHZhbHVlIFswLi4yNTVdLlxuICAgICAgbGV0IGJpbmFyeVN0cmluZyA9ICcnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICAgIH1cblxuICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIuZW5kKClcblxuICAgICAgcmV0dXJuIGJpbmFyeVN0cmluZ1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2RlY29kZVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGlvUXVldWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICovXG5mdW5jdGlvbiBkZWNvZGUgKGlvUXVldWUsIGVuY29kaW5nKSB7XG4gIGNvbnN0IGJ5dGVzID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoaW9RdWV1ZSlcblxuICAvLyAxLiBMZXQgQk9NRW5jb2RpbmcgYmUgdGhlIHJlc3VsdCBvZiBCT00gc25pZmZpbmcgaW9RdWV1ZS5cbiAgY29uc3QgQk9NRW5jb2RpbmcgPSBCT01TbmlmZmluZyhieXRlcylcblxuICBsZXQgc2xpY2UgPSAwXG5cbiAgLy8gMi4gSWYgQk9NRW5jb2RpbmcgaXMgbm9uLW51bGw6XG4gIGlmIChCT01FbmNvZGluZyAhPT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCBlbmNvZGluZyB0byBCT01FbmNvZGluZy5cbiAgICBlbmNvZGluZyA9IEJPTUVuY29kaW5nXG5cbiAgICAvLyAyLiBSZWFkIHRocmVlIGJ5dGVzIGZyb20gaW9RdWV1ZSwgaWYgQk9NRW5jb2RpbmcgaXNcbiAgICAvLyAgICBVVEYtODsgb3RoZXJ3aXNlIHJlYWQgdHdvIGJ5dGVzLlxuICAgIC8vICAgIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICAgIHNsaWNlID0gQk9NRW5jb2RpbmcgPT09ICdVVEYtOCcgPyAzIDogMlxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgZW5jb2RpbmdcdTIwMTlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuXG4gIGNvbnN0IHNsaWNlZCA9IGJ5dGVzLnNsaWNlKHNsaWNlKVxuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nKS5kZWNvZGUoc2xpY2VkKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JvbS1zbmlmZlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBpb1F1ZXVlXG4gKi9cbmZ1bmN0aW9uIEJPTVNuaWZmaW5nIChpb1F1ZXVlKSB7XG4gIC8vIDEuIExldCBCT00gYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIDMgYnl0ZXMgZnJvbSBpb1F1ZXVlLFxuICAvLyAgICBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuICBjb25zdCBbYSwgYiwgY10gPSBpb1F1ZXVlXG5cbiAgLy8gMi4gRm9yIGVhY2ggb2YgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJlbG93LCBzdGFydGluZyB3aXRoXG4gIC8vICAgIHRoZSBmaXJzdCBvbmUgYW5kIGdvaW5nIGRvd24sIGlmIEJPTSBzdGFydHMgd2l0aCB0aGVcbiAgLy8gICAgYnl0ZXMgZ2l2ZW4gaW4gdGhlIGZpcnN0IGNvbHVtbiwgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGVuY29kaW5nIGdpdmVuIGluIHRoZSBjZWxsIGluIHRoZSBzZWNvbmQgY29sdW1uIG9mIHRoYXRcbiAgLy8gICAgcm93LiBPdGhlcndpc2UsIHJldHVybiBudWxsLlxuICBpZiAoYSA9PT0gMHhFRiAmJiBiID09PSAweEJCICYmIGMgPT09IDB4QkYpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkUgJiYgYiA9PT0gMHhGRikge1xuICAgIHJldHVybiAnVVRGLTE2QkUnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRiAmJiBiID09PSAweEZFKSB7XG4gICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtVaW50OEFycmF5W119IHNlcXVlbmNlc1xuICovXG5mdW5jdGlvbiBjb21iaW5lQnl0ZVNlcXVlbmNlcyAoc2VxdWVuY2VzKSB7XG4gIGNvbnN0IHNpemUgPSBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEgKyBiLmJ5dGVMZW5ndGhcbiAgfSwgMClcblxuICBsZXQgb2Zmc2V0ID0gMFxuXG4gIHJldHVybiBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgYS5zZXQoYiwgb2Zmc2V0KVxuICAgIG9mZnNldCArPSBiLmJ5dGVMZW5ndGhcbiAgICByZXR1cm4gYVxuICB9LCBuZXcgVWludDhBcnJheShzaXplKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyJylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdGaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZycpXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nLCAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JywgJ2VuY29kaW5nJylcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVhZEFzVGV4dChibG9iLCBlbmNvZGluZykgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggVGV4dCBhbmQgZW5jb2RpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnVGV4dCcsIGVuY29kaW5nKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNEYXRhVVJMXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNEYXRhVVJMIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcpXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNEYXRhVVJMKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLCBtdXN0XG4gICAgLy8gaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIERhdGFVUkwuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnRGF0YVVSTCcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLWFib3J0XG4gICAqL1xuICBhYm9ydCAoKSB7XG4gICAgLy8gMS4gSWYgdGhpcydzIHN0YXRlIGlzIFwiZW1wdHlcIiBvciBpZiB0aGlzJ3Mgc3RhdGUgaXNcbiAgICAvLyAgICBcImRvbmVcIiBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsIGFuZCB0ZXJtaW5hdGVcbiAgICAvLyAgICB0aGlzIGFsZ29yaXRobS5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnZW1wdHknIHx8IHRoaXNba1N0YXRlXSA9PT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpcydzIHN0YXRlIGlzIFwibG9hZGluZ1wiIHNldCB0aGlzJ3Mgc3RhdGUgdG9cbiAgICAvLyAgICBcImRvbmVcIiBhbmQgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbC5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9ICdkb25lJ1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgYW55IHRhc2tzIGZyb20gdGhpcyBvbiB0aGUgZmlsZSByZWFkaW5nXG4gICAgLy8gICAgdGFzayBzb3VyY2UgaW4gYW4gYWZmaWxpYXRlZCB0YXNrIHF1ZXVlLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHRob3NlIHRhc2tzIGZyb20gdGhhdCB0YXNrIHF1ZXVlLlxuICAgIHRoaXNba0Fib3J0ZWRdID0gdHJ1ZVxuXG4gICAgLy8gNC4gVGVybWluYXRlIHRoZSBhbGdvcml0aG0gZm9yIHRoZSByZWFkIG1ldGhvZCBiZWluZyBwcm9jZXNzZWQuXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gNS4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBhYm9ydCBhdCB0aGlzLlxuICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnYWJvcnQnLCB0aGlzKVxuXG4gICAgLy8gNi4gSWYgdGhpcydzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhpcy5cbiAgICBpZiAodGhpc1trU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlYWR5c3RhdGVcbiAgICovXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgc3dpdGNoICh0aGlzW2tTdGF0ZV0pIHtcbiAgICAgIGNhc2UgJ2VtcHR5JzogcmV0dXJuIHRoaXMuRU1QVFlcbiAgICAgIGNhc2UgJ2xvYWRpbmcnOiByZXR1cm4gdGhpcy5MT0FESU5HXG4gICAgICBjYXNlICdkb25lJzogcmV0dXJuIHRoaXMuRE9ORVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZXN1bHRcbiAgICovXG4gIGdldCByZXN1bHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgcmVzdWx0IGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIHJlc3VsdC5cbiAgICByZXR1cm4gdGhpc1trUmVzdWx0XVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVycm9yXG4gICAqL1xuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgZXJyb3IgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgZXJyb3IuXG4gICAgcmV0dXJuIHRoaXNba0Vycm9yXVxuICB9XG5cbiAgZ2V0IG9ubG9hZGVuZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRlbmRcbiAgfVxuXG4gIHNldCBvbmxvYWRlbmQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRlbmQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIHRoaXNba0V2ZW50c10ubG9hZGVuZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzW2tFdmVudHNdLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWRzdGFydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRzdGFydFxuICB9XG5cbiAgc2V0IG9ubG9hZHN0YXJ0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ucHJvZ3Jlc3MgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5wcm9ncmVzc1xuICB9XG5cbiAgc2V0IG9ucHJvZ3Jlc3MgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLnByb2dyZXNzKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpc1trRXZlbnRzXS5wcm9ncmVzcylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2FkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZFxuICB9XG5cbiAgc2V0IG9ubG9hZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpc1trRXZlbnRzXS5sb2FkKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmFib3J0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uYWJvcnRcbiAgfVxuXG4gIHNldCBvbmFib3J0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5hYm9ydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXNba0V2ZW50c10uYWJvcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lbXB0eVxuRmlsZVJlYWRlci5FTVBUWSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkVNUFRZID0gMFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWxvYWRpbmdcbkZpbGVSZWFkZXIuTE9BRElORyA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkxPQURJTkcgPSAxXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZG9uZVxuRmlsZVJlYWRlci5ET05FID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRE9ORSA9IDJcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlci5wcm90b3R5cGUsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRBc0FycmF5QnVmZmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNCaW5hcnlTdHJpbmc6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0RhdGFVUkw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZXN1bHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRzdGFydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25wcm9ncmVzczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlUmVhZGVyJyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGaWxlUmVhZGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi8uLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgeyBpc1ZhbGlkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLWVxdWFsc1xuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IGV4Y2x1ZGVGcmFnbWVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVybEVxdWFscyAoQSwgQiwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgY29uc3Qgc2VyaWFsaXplZEEgPSBVUkxTZXJpYWxpemVyKEEsIGV4Y2x1ZGVGcmFnbWVudClcblxuICBjb25zdCBzZXJpYWxpemVkQiA9IFVSTFNlcmlhbGl6ZXIoQiwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIHJldHVybiBzZXJpYWxpemVkQSA9PT0gc2VyaWFsaXplZEJcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzY5NGQyMGQxMzRjYjU1M2Q4ZDg5ZTU1MDBiOTE0ODAxMmIxYmEyOTkvY29udGVudC9icm93c2VyL2NhY2hlX3N0b3JhZ2UvY2FjaGVfc3RvcmFnZV9jYWNoZS5jYyNMMjYwLUwyNjJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZXMgKGhlYWRlcikge1xuICBhc3NlcnQoaGVhZGVyICE9PSBudWxsKVxuXG4gIGNvbnN0IHZhbHVlcyA9IFtdXG5cbiAgZm9yIChsZXQgdmFsdWUgb2YgaGVhZGVyLnNwbGl0KCcsJykpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKGlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXJsRXF1YWxzLFxuICBnZXRGaWVsZFZhbHVlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHVybEVxdWFscywgZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFJlc3BvbnNlLCBjbG9uZVJlc3BvbnNlLCBmcm9tSW5uZXJSZXNwb25zZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBSZXF1ZXN0LCBmcm9tSW5uZXJSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tY2FjaGUtYmF0Y2gtb3BlcmF0aW9uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYWNoZUJhdGNoT3BlcmF0aW9uXG4gKiBAcHJvcGVydHkgeydkZWxldGUnIHwgJ3B1dCd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXF1ZXN0XG4gKiBAcHJvcGVydHkge2FueX0gcmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gKiBAdHlwZWRlZiB7W2FueSwgYW55XVtdfSByZXF1ZXN0UmVzcG9uc2VMaXN0XG4gKi9cblxuY2xhc3MgQ2FjaGUge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICAgKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBhcmd1bWVudHNbMV1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZS5tYXRjaCdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICBjb25zdCBwID0gdGhpcy4jaW50ZXJuYWxNYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zLCAxKVxuXG4gICAgaWYgKHAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gcFswXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2hBbGwgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLm1hdGNoQWxsJ1xuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICByZXR1cm4gdGhpcy4jaW50ZXJuYWxNYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zKVxuICB9XG5cbiAgYXN5bmMgYWRkIChyZXF1ZXN0KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGUuYWRkJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QsIHByZWZpeCwgJ3JlcXVlc3QnKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IFtyZXF1ZXN0XVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXNwb25zZUFycmF5UHJvbWlzZSA9IHRoaXMuYWRkQWxsKHJlcXVlc3RzKVxuXG4gICAgLy8gMy5cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2VBcnJheVByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGFkZEFsbCAocmVxdWVzdHMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZS5hZGRBbGwnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZXMgPSBbXVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAvLyAzLlxuICAgIGZvciAobGV0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgICB0eXBlczogWyd1bmRlZmluZWQgaXMgbm90IGFsbG93ZWQnXVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAzLjFcbiAgICAgIGNvbnN0IHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgLy8gMy4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSB8fCByLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lLidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gNS40XG4gICAgICByLmluaXRpYXRvciA9ICdmZXRjaCdcbiAgICAgIHIuZGVzdGluYXRpb24gPSAnc3VicmVzb3VyY2UnXG5cbiAgICAgIC8vIDUuNVxuICAgICAgcmVxdWVzdExpc3QucHVzaChyKVxuXG4gICAgICAvLyA1LjZcbiAgICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAgIC8vIDUuN1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5wdXNoKGZldGNoaW5nKHtcbiAgICAgICAgcmVxdWVzdDogcixcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgfHwgcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+IDI5OSkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhbiBpbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHRoZSByZXF1ZXN0IGZhaWxlZC4nXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHsgLy8gMi5cbiAgICAgICAgICAgIC8vIDIuMVxuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgICAgICAgLy8gMi4yXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgZmV0Y2hDb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ2Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMi5cbiAgICAgICAgICByZXNwb25zZVByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIC8vIDUuOFxuICAgICAgcmVzcG9uc2VQcm9taXNlcy5wdXNoKHJlc3BvbnNlUHJvbWlzZS5wcm9taXNlKVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgY29uc3QgcCA9IFByb21pc2UuYWxsKHJlc3BvbnNlUHJvbWlzZXMpXG5cbiAgICAvLyA3LlxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IHBcblxuICAgIC8vIDcuMVxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gNy4yXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgLy8gNy4zXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDcuMy4xXG4gICAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdwdXQnLCAvLyA3LjMuMlxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0TGlzdFtpbmRleF0sIC8vIDcuMy4zXG4gICAgICAgIHJlc3BvbnNlIC8vIDcuMy40XG4gICAgICB9XG5cbiAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pIC8vIDcuMy41XG5cbiAgICAgIGluZGV4KysgLy8gNy4zLjZcbiAgICB9XG5cbiAgICAvLyA3LjVcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNy42LjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gNy42LjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gNy42LjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA3LjYuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDcuNi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDcuN1xuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgcHV0IChyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLnB1dCdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICByZXNwb25zZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlKHJlc3BvbnNlLCBwcmVmaXgsICdyZXNwb25zZScpXG5cbiAgICAvLyAxLlxuICAgIGxldCBpbm5lclJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaW5uZXJSZXF1ZXN0ID0gcmVxdWVzdFtrU3RhdGVdXG4gICAgfSBlbHNlIHsgLy8gMy5cbiAgICAgIGlubmVyUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoaW5uZXJSZXF1ZXN0LnVybCkgfHwgaW5uZXJSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBhbiBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgY29uc3QgaW5uZXJSZXNwb25zZSA9IHJlc3BvbnNlW2tTdGF0ZV1cblxuICAgIC8vIDYuXG4gICAgaWYgKGlubmVyUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiAnR290ICogdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOC5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICYmIChpc0Rpc3R1cmJlZChpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSB8fCBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtLmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNwb25zZSBib2R5IGlzIGxvY2tlZCBvciBkaXN0dXJiZWQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDkuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKGlubmVyUmVzcG9uc2UpXG5cbiAgICAvLyAxMC5cbiAgICBjb25zdCBib2R5UmVhZFByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTEuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxMS4xXG4gICAgICBjb25zdCBzdHJlYW0gPSBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtXG5cbiAgICAgIC8vIDExLjJcbiAgICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gICAgICAvLyAxMS4zXG4gICAgICByZWFkQWxsQnl0ZXMocmVhZGVyKS50aGVuKGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlLCBib2R5UmVhZFByb21pc2UucmVqZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICBib2R5UmVhZFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLy8gMTIuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyAxMy5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ3B1dCcsIC8vIDE0LlxuICAgICAgcmVxdWVzdDogaW5uZXJSZXF1ZXN0LCAvLyAxNS5cbiAgICAgIHJlc3BvbnNlOiBjbG9uZWRSZXNwb25zZSAvLyAxNi5cbiAgICB9XG5cbiAgICAvLyAxNy5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgLy8gMTkuXG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBib2R5UmVhZFByb21pc2UucHJvbWlzZVxuXG4gICAgaWYgKGNsb25lZFJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgY2xvbmVkUmVzcG9uc2UuYm9keS5zb3VyY2UgPSBieXRlc1xuICAgIH1cblxuICAgIC8vIDE5LjFcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTkuMi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDE5LjIuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyAxOS4yLjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyAxOS4yLjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9IGVsc2UgeyAvLyAxOS4yLjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBkZWxldGUgKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8cmVhZG9ubHkgUmVxdWVzdFtdPn1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLmtleXMnXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdCwgcHJlZml4LCAncmVxdWVzdCcpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMsIHByZWZpeCwgJ29wdGlvbnMnKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMi4xXG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7IC8vIDIuMlxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlcXVlc3RzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgLy8gNS4yLjEuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAvLyA1LjMuMi4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDUuNC4xXG4gICAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAgIC8vIDUuNC4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9iamVjdCA9IGZyb21Jbm5lclJlcXVlc3QoXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsLFxuICAgICAgICAgICdpbW11dGFibGUnXG4gICAgICAgIClcbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gICNpbnRlcm5hbE1hdGNoQWxsIChyZXF1ZXN0LCBvcHRpb25zLCBtYXhSZXNwb25zZXMgPSBJbmZpbml0eSkge1xuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgLy8gV2UgZG9uJ3QgaW1wbGVtZW50IENPUnMgc28gd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgdGhlIHJlc3BvbnNlcywgeWF5IVxuXG4gICAgLy8gNS41LjFcbiAgICBjb25zdCByZXNwb25zZUxpc3QgPSBbXVxuXG4gICAgLy8gNS41LjJcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNS41LjIuMVxuICAgICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBmcm9tSW5uZXJSZXNwb25zZShyZXNwb25zZSwgJ2ltbXV0YWJsZScpXG5cbiAgICAgIHJlc3BvbnNlTGlzdC5wdXNoKHJlc3BvbnNlT2JqZWN0LmNsb25lKCkpXG5cbiAgICAgIGlmIChyZXNwb25zZUxpc3QubGVuZ3RoID49IG1heFJlc3BvbnNlcykge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocmVzcG9uc2VMaXN0KVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbWF0Y2hBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwdXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuY29uc3QgY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMgPSBbXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVTZWFyY2gnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVNZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVWYXJ5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzLFxuICB7XG4gICAga2V5OiAnY2FjaGVOYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoUmVzcG9uc2UpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm9cbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgQ2FjaGUgfSA9IHJlcXVpcmUoJy4vY2FjaGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIENhY2hlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtbmFtZS10by1jYWNoZS1tYXBcbiAgICogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydCgnLi9jYWNoZScpLnJlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjY2FjaGVzID0gbmV3IE1hcCgpXG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0NhY2hlU3RvcmFnZS5tYXRjaCcpXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBpZiAob3B0aW9ucy5jYWNoZU5hbWUgIT0gbnVsbCkge1xuICAgICAgLy8gMS4xLjEuMVxuICAgICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMob3B0aW9ucy5jYWNoZU5hbWUpKSB7XG4gICAgICAgIC8vIDEuMS4xLjEuMVxuICAgICAgICBjb25zdCBjYWNoZUxpc3QgPSB0aGlzLiNjYWNoZXMuZ2V0KG9wdGlvbnMuY2FjaGVOYW1lKVxuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gMi5cbiAgICAgIC8vIDIuMlxuICAgICAgZm9yIChjb25zdCBjYWNoZUxpc3Qgb2YgdGhpcy4jY2FjaGVzLnZhbHVlcygpKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICAvLyAyLjIuMS4yXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcblxuICAgICAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtaGFzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBoYXMgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZVN0b3JhZ2UuaGFzJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSwgcHJlZml4LCAnY2FjaGVOYW1lJylcblxuICAgIC8vIDIuMS4xXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZXN0b3JhZ2Utb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlPn1cbiAgICovXG4gIGFzeW5jIG9wZW4gKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZVN0b3JhZ2Uub3BlbidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUsIHByZWZpeCwgJ2NhY2hlTmFtZScpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGVTdG9yYWdlLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUsIHByZWZpeCwgJ2NhY2hlTmFtZScpXG5cbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmRlbGV0ZShjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1rZXlzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIC8vIDIuMVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLiNjYWNoZXMua2V5cygpXG5cbiAgICAvLyAyLjJcbiAgICByZXR1cm4gWy4uLmtleXNdXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVTdG9yYWdlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGVTdG9yYWdlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVTdG9yYWdlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1hdHRyaWJ1dGUtdmFsdWUtc2l6ZVxuY29uc3QgbWF4QXR0cmlidXRlVmFsdWVTaXplID0gMTAyNFxuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tbmFtZS12YWx1ZS1wYWlyLXNpemVcbmNvbnN0IG1heE5hbWVWYWx1ZVBhaXJTaXplID0gNDA5NlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWF4QXR0cmlidXRlVmFsdWVTaXplLFxuICBtYXhOYW1lVmFsdWVQYWlyU2l6ZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSAweDAwICYmIGNvZGUgPD0gMHgwOCkgfHxcbiAgICAgIChjb2RlID49IDB4MEEgJiYgY29kZSA8PSAweDFGKSB8fFxuICAgICAgY29kZSA9PT0gMHg3RlxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuIENIQVIgICAgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiB0b2tlbiAgICAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gc2VwYXJhdG9ycyAgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gICAgICAgICAgICAgICAgfCBcIixcIiB8IFwiO1wiIHwgXCI6XCIgfCBcIlxcXCIgfCA8XCI+XG4gICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVOYW1lIChuYW1lKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSBuYW1lLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8IC8vIGV4Y2x1ZGUgQ1RMcyAoMC0zMSksIFNQIGFuZCBIVFxuICAgICAgY29kZSA+IDB4N0UgfHwgLy8gZXhjbHVkZSBub24tYXNjaWkgYW5kIERFTFxuICAgICAgY29kZSA9PT0gMHgyMiB8fCAvLyBcIlxuICAgICAgY29kZSA9PT0gMHgyOCB8fCAvLyAoXG4gICAgICBjb2RlID09PSAweDI5IHx8IC8vIClcbiAgICAgIGNvZGUgPT09IDB4M0MgfHwgLy8gPFxuICAgICAgY29kZSA9PT0gMHgzRSB8fCAvLyA+XG4gICAgICBjb2RlID09PSAweDQwIHx8IC8vIEBcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgzQiB8fCAvLyA7XG4gICAgICBjb2RlID09PSAweDNBIHx8IC8vIDpcbiAgICAgIGNvZGUgPT09IDB4NUMgfHwgLy8gXFxcbiAgICAgIGNvZGUgPT09IDB4MkYgfHwgLy8gL1xuICAgICAgY29kZSA9PT0gMHg1QiB8fCAvLyBbXG4gICAgICBjb2RlID09PSAweDVEIHx8IC8vIF1cbiAgICAgIGNvZGUgPT09IDB4M0YgfHwgLy8gP1xuICAgICAgY29kZSA9PT0gMHgzRCB8fCAvLyA9XG4gICAgICBjb2RlID09PSAweDdCIHx8IC8vIHtcbiAgICAgIGNvZGUgPT09IDB4N0QgLy8gfVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBuYW1lJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gY29va2llLXZhbHVlICAgICAgPSAqY29va2llLW9jdGV0IC8gKCBEUVVPVEUgKmNvb2tpZS1vY3RldCBEUVVPVEUgKVxuIGNvb2tpZS1vY3RldCAgICAgID0gJXgyMSAvICV4MjMtMkIgLyAleDJELTNBIC8gJXgzQy01QiAvICV4NUQtN0VcbiAgICAgICAgICAgICAgICAgICAgICAgOyBVUy1BU0NJSSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBDVExzLFxuICAgICAgICAgICAgICAgICAgICAgICA7IHdoaXRlc3BhY2UgRFFVT1RFLCBjb21tYSwgc2VtaWNvbG9uLFxuICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBiYWNrc2xhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVZhbHVlICh2YWx1ZSkge1xuICBsZXQgbGVuID0gdmFsdWUubGVuZ3RoXG4gIGxldCBpID0gMFxuXG4gIC8vIGlmIHRoZSB2YWx1ZSBpcyB3cmFwcGVkIGluIERRVU9URVxuICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICBpZiAobGVuID09PSAxIHx8IHZhbHVlW2xlbiAtIDFdICE9PSAnXCInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHZhbHVlJylcbiAgICB9XG4gICAgLS1sZW5cbiAgICArK2lcbiAgfVxuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgY29uc3QgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaSsrKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA+IDB4N0UgfHwgLy8gbm9uLWFzY2lpIGFuZCBERUwgKDEyNylcbiAgICAgIGNvZGUgPT09IDB4MjIgfHwgLy8gXCJcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgzQiB8fCAvLyA7XG4gICAgICBjb2RlID09PSAweDVDIC8vIFxcXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMCB8fCAvLyBleGNsdWRlIENUTHMgKDAtMzEpXG4gICAgICBjb2RlID4gMHg3RSB8fCAvLyBleGNsdWRlIERFTCBhbmQgbm9uLWFzY2lpXG4gICAgICBjb2RlID09PSAweDNCIC8vIDtcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogPGxldC1kaWc+IDo6PSA8bGV0dGVyPiB8IDxkaWdpdD5cbiAqXG4gKiA8bGV0dGVyPiA6Oj0gYW55IG9uZSBvZiB0aGUgNTIgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIEEgdGhyb3VnaCBaIGluXG4gKiB1cHBlciBjYXNlIGFuZCBhIHRocm91Z2ggeiBpbiBsb3dlciBjYXNlXG4gKlxuICogPGRpZ2l0PiA6Oj0gYW55IG9uZSBvZiB0aGUgdGVuIGRpZ2l0cyAwIHRocm91Z2ggOXJcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMxMDM0I3NlY3Rpb24tMy41XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0xldHRlck9yRGlnaXQgKGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICAoY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOSkgfHwgLy8gMC05XG4gICAgKGNvZGUgPj0gMHg0MSAmJiBjb2RlIDw9IDB4NUEpIHx8IC8vIEEtWlxuICAgIChjb2RlID49IDB4NjEgJiYgY29kZSA8PSAweDdBKSAvLyBhLXpcbiAgKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGNvb2tpZSBkb21haW4gYWdhaW5zdCB0aGUgXCJwcmVmZXJyZWQgbmFtZSBzeW50YXhcIi5cbiAqXG4gKiA8ZG9tYWluPiAgICAgIDo6PSA8c3ViZG9tYWluPiB8IFwiIFwiXG4gKiA8c3ViZG9tYWluPiAgIDo6PSA8bGFiZWw+IHwgPHN1YmRvbWFpbj4gXCIuXCIgPGxhYmVsPlxuICogPGxhYmVsPiAgICAgICA6Oj0gPGxldC1kaWc+IFsgWyA8bGRoLXN0cj4gXSA8bGV0LWRpZz4gXVxuICogPGxkaC1zdHI+ICAgICA6Oj0gPGxldC1kaWctaHlwPiB8IDxsZXQtZGlnLWh5cD4gPGxkaC1zdHI+XG4gKiA8bGV0LWRpZy1oeXA+IDo6PSA8bGV0LWRpZz4gfCBcIi1cIlxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzEwMzQjc2VjdGlvbi0zLjVcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzExMjMjc2VjdGlvbi0yLjFcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzEwMzUjc2VjdGlvbi0yLjMuNFxuICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZURvbWFpbiAoZG9tYWluKSB7XG4gIC8vIDxkb21haW4+IDo6PSA8c3ViZG9tYWluPiB8IFwiIFwiXG4gIGlmIChkb21haW4gPT09ICcgJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGRvbWFpbi5sZW5ndGggPiAyNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gIH1cblxuICBsZXQgbGFiZWxMZW5ndGggPSAwXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21haW4ubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gZG9tYWluLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChjb2RlID09PSAweDJFKSB7XG4gICAgICBpZiAobGFiZWxMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoZG9tYWluLmNoYXJDb2RlQXQoaSAtIDEpID09PSAweDJEKSB7IC8vIFwiLVwiXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgICAgIH1cblxuICAgICAgbGFiZWxMZW5ndGggPSAwXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChsYWJlbExlbmd0aCA9PT0gMCAmJiAhaXNMZXR0ZXJPckRpZ2l0KGNvZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gICAgfVxuXG4gICAgaWYgKCFpc0xldHRlck9yRGlnaXQoY29kZSkgJiYgY29kZSAhPT0gMHgyRCkgeyAvLyBcIi1cIlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICAgIH1cblxuICAgIGlmICgrK2xhYmVsTGVuZ3RoID4gNjMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgICB9XG4gIH1cblxuICBpZiAobGFiZWxMZW5ndGggPT09IDAgfHwgZG9tYWluLmNoYXJDb2RlQXQoZG9tYWluLmxlbmd0aCAtIDEpID09PSAweDJEKSB7IC8vIFwiLVwiXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbmNvbnN0IElNRkRheXMgPSBbXG4gICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLFxuICAnVGh1JywgJ0ZyaScsICdTYXQnXG5dXG5cbmNvbnN0IElNRk1vbnRocyA9IFtcbiAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ1xuXVxuXG5jb25zdCBJTUZQYWRkZWROdW1iZXJzID0gQXJyYXkoNjEpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMVxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGF0ZVxuICBJTUYtZml4ZGF0ZSAgPSBkYXktbmFtZSBcIixcIiBTUCBkYXRlMSBTUCB0aW1lLW9mLWRheSBTUCBHTVRcbiAgOyBmaXhlZCBsZW5ndGgvem9uZS9jYXBpdGFsaXphdGlvbiBzdWJzZXQgb2YgdGhlIGZvcm1hdFxuICA7IHNlZSBTZWN0aW9uIDMuMyBvZiBbUkZDNTMyMl1cblxuICBkYXktbmFtZSAgICAgPSAleDRELjZGLjZFIDsgXCJNb25cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0Ljc1LjY1IDsgXCJUdWVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU3LjY1LjY0IDsgXCJXZWRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0LjY4Ljc1IDsgXCJUaHVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjcyLjY5IDsgXCJGcmlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjYxLjc0IDsgXCJTYXRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjc1LjZFIDsgXCJTdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgZGF0ZTEgICAgICAgID0gZGF5IFNQIG1vbnRoIFNQIHllYXJcbiAgICAgICAgICAgICAgICAgIDsgZS5nLiwgMDIgSnVuIDE5ODJcblxuICBkYXkgICAgICAgICAgPSAyRElHSVRcbiAgbW9udGggICAgICAgID0gJXg0QS42MS42RSA7IFwiSmFuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni42NS42MiA7IFwiRmViXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43MiA7IFwiTWFyXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43MC43MiA7IFwiQXByXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43OSA7IFwiTWF5XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42RSA7IFwiSnVuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42QyA7IFwiSnVsXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43NS42NyA7IFwiQXVnXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42NS43MCA7IFwiU2VwXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ri42My43NCA7IFwiT2N0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RS42Ri43NiA7IFwiTm92XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0NC42NS42MyA7IFwiRGVjXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIHllYXIgICAgICAgICA9IDRESUdJVFxuXG4gIEdNVCAgICAgICAgICA9ICV4NDcuNEQuNTQgOyBcIkdNVFwiLCBjYXNlLXNlbnNpdGl2ZVxuXG4gIHRpbWUtb2YtZGF5ICA9IGhvdXIgXCI6XCIgbWludXRlIFwiOlwiIHNlY29uZFxuICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NjAgKGxlYXAgc2Vjb25kKVxuXG4gIGhvdXIgICAgICAgICA9IDJESUdJVFxuICBtaW51dGUgICAgICAgPSAyRElHSVRcbiAgc2Vjb25kICAgICAgID0gMkRJR0lUXG4gKi9cbmZ1bmN0aW9uIHRvSU1GRGF0ZSAoZGF0ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG4gIH1cblxuICByZXR1cm4gYCR7SU1GRGF5c1tkYXRlLmdldFVUQ0RheSgpXX0sICR7SU1GUGFkZGVkTnVtYmVyc1tkYXRlLmdldFVUQ0RhdGUoKV19ICR7SU1GTW9udGhzW2RhdGUuZ2V0VVRDTW9udGgoKV19ICR7ZGF0ZS5nZXRVVENGdWxsWWVhcigpfSAke0lNRlBhZGRlZE51bWJlcnNbZGF0ZS5nZXRVVENIb3VycygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDTWludXRlcygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDU2Vjb25kcygpXX0gR01UYFxufVxuXG4vKipcbiBtYXgtYWdlLWF2ICAgICAgICA9IFwiTWF4LUFnZT1cIiBub24temVyby1kaWdpdCAqRElHSVRcbiAgICAgICAgICAgICAgICAgICAgICAgOyBJbiBwcmFjdGljZSwgYm90aCBleHBpcmVzLWF2IGFuZCBtYXgtYWdlLWF2XG4gICAgICAgICAgICAgICAgICAgICAgIDsgYXJlIGxpbWl0ZWQgdG8gZGF0ZXMgcmVwcmVzZW50YWJsZSBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgOyB1c2VyIGFnZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IG1heEFnZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU1heEFnZSAobWF4QWdlKSB7XG4gIGlmIChtYXhBZ2UgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBtYXgtYWdlJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjUjc2VjdGlvbi00LjEuMVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Db29raWV9IGNvb2tpZVxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkgKGNvb2tpZSkge1xuICBpZiAoY29va2llLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhbGlkYXRlQ29va2llTmFtZShjb29raWUubmFtZSlcbiAgdmFsaWRhdGVDb29raWVWYWx1ZShjb29raWUudmFsdWUpXG5cbiAgY29uc3Qgb3V0ID0gW2Ake2Nvb2tpZS5uYW1lfT0ke2Nvb2tpZS52YWx1ZX1gXVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMVxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjJcbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fU2VjdXJlLScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgfVxuXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX0hvc3QtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICAgIGNvb2tpZS5kb21haW4gPSBudWxsXG4gICAgY29va2llLnBhdGggPSAnLydcbiAgfVxuXG4gIGlmIChjb29raWUuc2VjdXJlKSB7XG4gICAgb3V0LnB1c2goJ1NlY3VyZScpXG4gIH1cblxuICBpZiAoY29va2llLmh0dHBPbmx5KSB7XG4gICAgb3V0LnB1c2goJ0h0dHBPbmx5JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29va2llLm1heEFnZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZU1heEFnZShjb29raWUubWF4QWdlKVxuICAgIG91dC5wdXNoKGBNYXgtQWdlPSR7Y29va2llLm1heEFnZX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5kb21haW4pIHtcbiAgICB2YWxpZGF0ZUNvb2tpZURvbWFpbihjb29raWUuZG9tYWluKVxuICAgIG91dC5wdXNoKGBEb21haW49JHtjb29raWUuZG9tYWlufWApXG4gIH1cblxuICBpZiAoY29va2llLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZVBhdGgoY29va2llLnBhdGgpXG4gICAgb3V0LnB1c2goYFBhdGg9JHtjb29raWUucGF0aH1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5leHBpcmVzICYmIGNvb2tpZS5leHBpcmVzLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgb3V0LnB1c2goYEV4cGlyZXM9JHt0b0lNRkRhdGUoY29va2llLmV4cGlyZXMpfWApXG4gIH1cblxuICBpZiAoY29va2llLnNhbWVTaXRlKSB7XG4gICAgb3V0LnB1c2goYFNhbWVTaXRlPSR7Y29va2llLnNhbWVTaXRlfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgY29va2llLnVucGFyc2VkKSB7XG4gICAgaWYgKCFwYXJ0LmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bnBhcnNlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgW2tleSwgLi4udmFsdWVdID0gcGFydC5zcGxpdCgnPScpXG5cbiAgICBjb25zdCB0cmltbWVkS2V5ID0ga2V5LnRyaW0oKVxuICAgIGNvbnN0IGpvaW5lZFZhbHVlID0gdmFsdWUuam9pbignPScpXG5cbiAgICB2YWxpZGF0ZUNvb2tpZU5hbWUodHJpbW1lZEtleSlcbiAgICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGpvaW5lZFZhbHVlKVxuXG4gICAgb3V0LnB1c2goYCR7dHJpbW1lZEtleX09JHtqb2luZWRWYWx1ZX1gKVxuICB9XG5cbiAgcmV0dXJuIG91dC5qb2luKCc7ICcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0NUTEV4Y2x1ZGluZ0h0YWIsXG4gIHZhbGlkYXRlQ29va2llTmFtZSxcbiAgdmFsaWRhdGVDb29raWVQYXRoLFxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlLFxuICB0b0lNRkRhdGUsXG4gIHN0cmluZ2lmeVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heE5hbWVWYWx1ZVBhaXJTaXplLCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgaXNDVExFeGNsdWRpbmdIdGFiIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgdGhlIGZpZWxkLXZhbHVlIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlciBzdHJpbmcuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEByZXR1cm5zIGlmIHRoZSBoZWFkZXIgaXMgaW52YWxpZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2V0Q29va2llIChoZWFkZXIpIHtcbiAgLy8gMS4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgwMC0wOCAvICV4MEEtMUYgLyAleDdGXG4gIC8vICAgIGNoYXJhY3RlciAoQ1RMIGNoYXJhY3RlcnMgZXhjbHVkaW5nIEhUQUIpOiBBYm9ydCB0aGVzZSBzdGVwcyBhbmRcbiAgLy8gICAgaWdub3JlIHRoZSBzZXQtY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKGlzQ1RMRXhjbHVkaW5nSHRhYihoZWFkZXIpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBuYW1lVmFsdWVQYWlyID0gJydcbiAgbGV0IHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIGxldCBuYW1lID0gJydcbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAyLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyOlxuICBpZiAoaGVhZGVyLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0byxcbiAgICAvLyAgICBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSwgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgICAvLyAgICAoaW5jbHVkaW5nIHRoZSAleDNCIChcIjtcIikgaW4gcXVlc3Rpb24pLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBuYW1lVmFsdWVQYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBoZWFkZXIsIHBvc2l0aW9uKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IGhlYWRlci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnNcbiAgICAvLyAgICBjb250YWluZWQgaW4gdGhlIHNldC1jb29raWUtc3RyaW5nLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICBuYW1lVmFsdWVQYWlyID0gaGVhZGVyXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBsYWNrcyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIHRoZW5cbiAgLy8gICAgdGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5LCBhbmQgdGhlIHZhbHVlIHN0cmluZyBpcyB0aGUgdmFsdWUgb2ZcbiAgLy8gICAgbmFtZS12YWx1ZS1wYWlyLlxuICBpZiAoIW5hbWVWYWx1ZVBhaXIuaW5jbHVkZXMoJz0nKSkge1xuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpclxuICB9IGVsc2Uge1xuICAgIC8vICAgIE90aGVyd2lzZSwgdGhlIG5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHlcbiAgICAvLyAgICBlbXB0eSkgdmFsdWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdFxuICAgIC8vICAgICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cbiAgICBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBuYW1lVmFsdWVQYWlyLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfVxuXG4gIC8vIDQuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBuYW1lXG4gIC8vICAgIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZy5cbiAgbmFtZSA9IG5hbWUudHJpbSgpXG4gIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgLy8gNS4gSWYgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgbmFtZSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmdcbiAgLy8gICAgaXMgbW9yZSB0aGFuIDQwOTYgb2N0ZXRzLCBhYm9ydCB0aGVzZSBzdGVwcyBhbmQgaWdub3JlIHRoZSBzZXQtXG4gIC8vICAgIGNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChuYW1lLmxlbmd0aCArIHZhbHVlLmxlbmd0aCA+IG1heE5hbWVWYWx1ZVBhaXJTaXplKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFRoZSBjb29raWUtbmFtZSBpcyB0aGUgbmFtZSBzdHJpbmcsIGFuZCB0aGUgY29va2llLXZhbHVlIGlzIHRoZVxuICAvLyAgICB2YWx1ZSBzdHJpbmcuXG4gIHJldHVybiB7XG4gICAgbmFtZSwgdmFsdWUsIC4uLnBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcylcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlclxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1tPYmplY3QuPHN0cmluZywgdW5rbm93bj5dPXt9fSBjb29raWVBdHRyaWJ1dGVMaXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzICh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QgPSB7fSkge1xuICAvLyAxLiBJZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyBzdHJpbmcgaXMgZW1wdHksIHNraXAgdGhlIHJlc3Qgb2ZcbiAgLy8gICAgdGhlc2Ugc3RlcHMuXG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAgfVxuXG4gIC8vIDIuIERpc2NhcmQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyAod2hpY2hcbiAgLy8gICAgd2lsbCBiZSBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIpLlxuICBhc3NlcnQodW5wYXJzZWRBdHRyaWJ1dGVzWzBdID09PSAnOycpXG4gIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZSgxKVxuXG4gIGxldCBjb29raWVBdiA9ICcnXG5cbiAgLy8gMy4gSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gIC8vICAgIGNoYXJhY3RlcjpcbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgY29va2llQXYgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc7JyxcbiAgICAgIHVucGFyc2VkQXR0cmlidXRlcyxcbiAgICAgIHsgcG9zaXRpb246IDAgfVxuICAgIClcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoY29va2llQXYubGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIENvbnN1bWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcy5cbiAgICBjb29raWVBdiA9IHVucGFyc2VkQXR0cmlidXRlc1xuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIH1cblxuICAvLyBMZXQgdGhlIGNvb2tpZS1hdiBzdHJpbmcgYmUgdGhlIGNoYXJhY3RlcnMgY29uc3VtZWQgaW4gdGhpcyBzdGVwLlxuXG4gIGxldCBhdHRyaWJ1dGVOYW1lID0gJydcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gJydcblxuICAvLyA0LiBJZiB0aGUgY29va2llLWF2IHN0cmluZyBjb250YWlucyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXI6XG4gIGlmIChjb29raWVBdi5pbmNsdWRlcygnPScpKSB7XG4gICAgLy8gMS4gVGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZVxuICAgIC8vICAgIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLXZhbHVlIHN0cmluZ1xuICAgIC8vICAgIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIGNvb2tpZUF2LFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgYXR0cmlidXRlVmFsdWUgPSBjb29raWVBdi5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGNvb2tpZS1hdlxuICAgIC8vICAgIHN0cmluZywgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nIGlzIGVtcHR5LlxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb29raWVBdlxuICB9XG5cbiAgLy8gNS4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZS1cbiAgLy8gICAgbmFtZSBzdHJpbmcgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nLlxuICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50cmltKClcbiAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS50cmltKClcblxuICAvLyA2LiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGxvbmdlciB0aGFuIDEwMjQgb2N0ZXRzLCBpZ25vcmUgdGhlXG4gIC8vICAgIGNvb2tpZS1hdiBzdHJpbmcgYW5kIHJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPiBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUpIHtcbiAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICB9XG5cbiAgLy8gNy4gUHJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWUgYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlXG4gIC8vICAgIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiAgKE5vdGljZSB0aGF0XG4gIC8vICAgIGF0dHJpYnV0ZXMgd2l0aCB1bnJlY29nbml6ZWQgYXR0cmlidXRlLW5hbWVzIGFyZSBpZ25vcmVkLilcbiAgY29uc3QgYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMVxuICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAvLyBcIkV4cGlyZXNcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cbiAgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdleHBpcmVzJykge1xuICAgIC8vIDEuIExldCB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUtdmFsdWVcbiAgICAvLyAgICBhcyBjb29raWUtZGF0ZSAoc2VlIFNlY3Rpb24gNS4xLjEpLlxuICAgIGNvbnN0IGV4cGlyeVRpbWUgPSBuZXcgRGF0ZShhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDIuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZVxuICAgIC8vICAgIHRoZSBjb29raWUtYXYuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmV4cGlyZXMgPSBleHBpcnlUaW1lXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ21heC1hZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4yXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJNYXgtXG4gICAgLy8gQWdlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYVxuICAgIC8vICAgIFwiLVwiIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgY29uc3QgY2hhckNvZGUgPSBhdHRyaWJ1dGVWYWx1ZS5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgYXR0cmlidXRlVmFsdWVbMF0gIT09ICctJykge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhIG5vbi1ESUdJVFxuICAgIC8vICAgIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVsdGEtc2Vjb25kcyBiZSB0aGUgYXR0cmlidXRlLXZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLlxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDQuIExldCBjb29raWUtYWdlLWxpbWl0IGJlIHRoZSBtYXhpbXVtIGFnZSBvZiB0aGUgY29va2llICh3aGljaFxuICAgIC8vICAgIFNIT1VMRCBiZSA0MDAgZGF5cyBvciBsZXNzLCBzZWUgU2VjdGlvbiA0LjEuMi4yKS5cblxuICAgIC8vIDUuIFNldCBkZWx0YS1zZWNvbmRzIHRvIHRoZSBzbWFsbGVyIG9mIGl0cyBwcmVzZW50IHZhbHVlIGFuZCBjb29raWUtXG4gICAgLy8gICAgYWdlLWxpbWl0LlxuICAgIC8vIGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhU2Vjb25kcyAqIDEwMDAsIG1heEV4cGlyZXNNcylcblxuICAgIC8vIDYuIElmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LVxuICAgIC8vICAgIHRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgZGF0ZSBhbmQgdGltZS4gIE90aGVyd2lzZSwgbGV0XG4gICAgLy8gICAgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcGx1cyBkZWx0YS1zZWNvbmRzXG4gICAgLy8gICAgc2Vjb25kcy5cbiAgICAvLyBjb25zdCBleHBpcnlUaW1lID0gZGVsdGFTZWNvbmRzIDw9IDAgPyBEYXRlLm5vdygpIDogRGF0ZS5ub3coKSArIGRlbHRhU2Vjb25kc1xuXG4gICAgLy8gNy4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBNYXgtQWdlIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgZXhwaXJ5LXRpbWUuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5tYXhBZ2UgPSBkZWx0YVNlY29uZHNcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZG9tYWluJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuM1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiRG9tYWluXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIExldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgbGV0IGNvb2tpZURvbWFpbiA9IGF0dHJpYnV0ZVZhbHVlXG5cbiAgICAvLyAyLiBJZiBjb29raWUtZG9tYWluIHN0YXJ0cyB3aXRoICV4MkUgKFwiLlwiKSwgbGV0IGNvb2tpZS1kb21haW4gYmVcbiAgICAvLyAgICBjb29raWUtZG9tYWluIHdpdGhvdXQgaXRzIGxlYWRpbmcgJXgyRSAoXCIuXCIpLlxuICAgIGlmIChjb29raWVEb21haW5bMF0gPT09ICcuJykge1xuICAgICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnNsaWNlKDEpXG4gICAgfVxuXG4gICAgLy8gMy4gQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlxuICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA0LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIERvbWFpbiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1kb21haW4uXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5kb21haW4gPSBjb29raWVEb21haW5cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAncGF0aCcpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjRcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlBhdGhcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAgIC8vICAgIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgIGxldCBjb29raWVQYXRoID0gJydcbiAgICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID09PSAwIHx8IGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLycpIHtcbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICAgICAgY29va2llUGF0aCA9ICcvJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgICAgY29va2llUGF0aCA9IGF0dHJpYnV0ZVZhbHVlXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLXBhdGguXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5wYXRoID0gY29va2llUGF0aFxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzZWN1cmUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC41XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgIC8vIHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgU2VjdXJlIGFuZCBhbiBlbXB0eSBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNlY3VyZSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnaHR0cG9ubHknKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC42XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIkh0dHBPbmx5XCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLVxuICAgIC8vIGF0dHJpYnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgSHR0cE9ubHkgYW5kIGFuIGVtcHR5XG4gICAgLy8gYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5odHRwT25seSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2FtZXNpdGUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC43XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIlNhbWVTaXRlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3M6XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDEuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJOb25lXCIsIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgXCJOb25lXCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID09PSAnbm9uZScpIHtcbiAgICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSAnTm9uZSdcbiAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID09PSAnc3RyaWN0Jykge1xuICAgICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAgIC8vICAgIFwiU3RyaWN0XCIsIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoXG4gICAgICAvLyAgICBhbiBhdHRyaWJ1dGUtbmFtZSBvZiBcIlNhbWVTaXRlXCIgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZlxuICAgICAgLy8gICAgXCJTdHJpY3RcIi5cbiAgICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSAnU3RyaWN0J1xuICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPT09ICdsYXgnKSB7XG4gICAgICAvLyAzLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgICAgLy8gICAgXCJMYXhcIiwgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIFwiU2FtZVNpdGVcIiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIFwiTGF4XCIuXG4gICAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gJ0xheCdcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZCA/Pz0gW11cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQucHVzaChgJHthdHRyaWJ1dGVOYW1lfT0ke2F0dHJpYnV0ZVZhbHVlfWApXG4gIH1cblxuICAvLyA4LiBSZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2VTZXRDb29raWUsXG4gIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29va2llXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAcHJvcGVydHkge0RhdGV8bnVtYmVyfHVuZGVmaW5lZH0gZXhwaXJlc1xuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBtYXhBZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gZG9tYWluXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IHBhdGhcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IHNlY3VyZVxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gaHR0cE9ubHlcbiAqIEBwcm9wZXJ0eSB7J1N0cmljdCd8J0xheCd8J05vbmUnfSBzYW1lU2l0ZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gdW5wYXJzZWRcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnZ2V0Q29va2llcycpXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llID0gaGVhZGVycy5nZXQoJ2Nvb2tpZScpXG4gIGNvbnN0IG91dCA9IHt9XG5cbiAgaWYgKCFjb29raWUpIHtcbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGNvb2tpZS5zcGxpdCgnOycpKSB7XG4gICAgY29uc3QgW25hbWUsIC4uLnZhbHVlXSA9IHBpZWNlLnNwbGl0KCc9JylcblxuICAgIG91dFtuYW1lLnRyaW0oKV0gPSB2YWx1ZS5qb2luKCc9JylcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3sgcGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nIH18dW5kZWZpbmVkfSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZGVsZXRlQ29va2llIChoZWFkZXJzLCBuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IHByZWZpeCA9ICdkZWxldGVDb29raWUnXG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gIGF0dHJpYnV0ZXMgPSB3ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpXG5cbiAgLy8gTWF0Y2hlcyBiZWhhdmlvciBvZlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVub19zdGQvYmxvYi82MzgyN2IxNjMzMGI4MjQ4OWEwNDYxNDAyN2MzM2I3OTA0ZTA4YmU1L2h0dHAvY29va2llLnRzI0wyNzhcbiAgc2V0Q29va2llKGhlYWRlcnMsIHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiAnJyxcbiAgICBleHBpcmVzOiBuZXcgRGF0ZSgwKSxcbiAgICAuLi5hdHRyaWJ1dGVzXG4gIH0pXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7Q29va2llW119XG4gKi9cbmZ1bmN0aW9uIGdldFNldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnZ2V0U2V0Q29va2llcycpXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llcyA9IGhlYWRlcnMuZ2V0U2V0Q29va2llKClcblxuICBpZiAoIWNvb2tpZXMpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBjb29raWVzLm1hcCgocGFpcikgPT4gcGFyc2VTZXRDb29raWUocGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCAnc2V0Q29va2llJylcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyKVxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5Db29raWUgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICduYW1lJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAndmFsdWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcigodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10odmFsdWUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSlcbiAgICB9KSxcbiAgICBrZXk6ICdleHBpcmVzJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSksXG4gICAga2V5OiAnbWF4QWdlJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdzZWN1cmUnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnaHR0cE9ubHknLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAga2V5OiAnc2FtZVNpdGUnLFxuICAgIGFsbG93ZWRWYWx1ZXM6IFsnU3RyaWN0JywgJ0xheCcsICdOb25lJ11cbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAndW5wYXJzZWQnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb29raWVzLFxuICBkZWxldGVDb29raWUsXG4gIGdldFNldENvb2tpZXMsXG4gIHNldENvb2tpZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgTWVzc2FnZVBvcnQgfSA9IHJlcXVpcmUoJ25vZGU6d29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIGlmICh0eXBlID09PSBrQ29uc3RydWN0KSB7XG4gICAgICBzdXBlcihhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSlcbiAgICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSAnTWVzc2FnZUV2ZW50IGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlLCBwcmVmaXgsICd0eXBlJylcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdChldmVudEluaXREaWN0LCBwcmVmaXgsICdldmVudEluaXREaWN0JylcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgfVxuXG4gIGdldCBkYXRhICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmRhdGFcbiAgfVxuXG4gIGdldCBvcmlnaW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQub3JpZ2luXG4gIH1cblxuICBnZXQgbGFzdEV2ZW50SWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGFzdEV2ZW50SWRcbiAgfVxuXG4gIGdldCBzb3VyY2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuc291cmNlXG4gIH1cblxuICBnZXQgcG9ydHMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHRoaXMuI2V2ZW50SW5pdC5wb3J0cykpIHtcbiAgICAgIE9iamVjdC5mcmVlemUodGhpcy4jZXZlbnRJbml0LnBvcnRzKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucG9ydHNcbiAgfVxuXG4gIGluaXRNZXNzYWdlRXZlbnQgKFxuICAgIHR5cGUsXG4gICAgYnViYmxlcyA9IGZhbHNlLFxuICAgIGNhbmNlbGFibGUgPSBmYWxzZSxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBvcmlnaW4gPSAnJyxcbiAgICBsYXN0RXZlbnRJZCA9ICcnLFxuICAgIHNvdXJjZSA9IG51bGwsXG4gICAgcG9ydHMgPSBbXVxuICApIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdNZXNzYWdlRXZlbnQuaW5pdE1lc3NhZ2VFdmVudCcpXG5cbiAgICByZXR1cm4gbmV3IE1lc3NhZ2VFdmVudCh0eXBlLCB7XG4gICAgICBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVGYXN0TWVzc2FnZUV2ZW50ICh0eXBlLCBpbml0KSB7XG4gICAgY29uc3QgbWVzc2FnZUV2ZW50ID0gbmV3IE1lc3NhZ2VFdmVudChrQ29uc3RydWN0LCB0eXBlLCBpbml0KVxuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0ID0gaW5pdFxuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0LmRhdGEgPz89IG51bGxcbiAgICBtZXNzYWdlRXZlbnQuI2V2ZW50SW5pdC5vcmlnaW4gPz89ICcnXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQubGFzdEV2ZW50SWQgPz89ICcnXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQuc291cmNlID8/PSBudWxsXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQucG9ydHMgPz89IFtdXG4gICAgcmV0dXJuIG1lc3NhZ2VFdmVudFxuICB9XG59XG5cbmNvbnN0IHsgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCB9ID0gTWVzc2FnZUV2ZW50XG5kZWxldGUgTWVzc2FnZUV2ZW50LmNyZWF0ZUZhc3RNZXNzYWdlRXZlbnRcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIGNvbnN0IHByZWZpeCA9ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlLCBwcmVmaXgsICd0eXBlJylcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2xvc2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICBjb25zdCBwcmVmaXggPSAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSwgcHJlZml4LCAndHlwZScpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICd3YXNDbGVhbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWFzb24nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ21lc3NhZ2UnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2ZpbGVuYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsaW5lbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbG5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlcnJvcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1lc3NhZ2VFdmVudCxcbiAgQ2xvc2VFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUaGlzIGlzIGEgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIgdW5pcXVlIHVzZWRcbi8vIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGVuZHBvaW50IGFjY2VwdHMgd2Vic29ja2V0XG4vLyBjb25uZWN0aW9ucy5cbi8vIFNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tMS4zXG5jb25zdCB1aWQgPSAnMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExJ1xuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG5jb25zdCBzdGF0ZXMgPSB7XG4gIENPTk5FQ1RJTkc6IDAsXG4gIE9QRU46IDEsXG4gIENMT1NJTkc6IDIsXG4gIENMT1NFRDogM1xufVxuXG5jb25zdCBzZW50Q2xvc2VGcmFtZVN0YXRlID0ge1xuICBOT1RfU0VOVDogMCxcbiAgUFJPQ0VTU0lORzogMSxcbiAgU0VOVDogMlxufVxuXG5jb25zdCBvcGNvZGVzID0ge1xuICBDT05USU5VQVRJT046IDB4MCxcbiAgVEVYVDogMHgxLFxuICBCSU5BUlk6IDB4MixcbiAgQ0xPU0U6IDB4OCxcbiAgUElORzogMHg5LFxuICBQT05HOiAweEFcbn1cblxuY29uc3QgbWF4VW5zaWduZWQxNkJpdCA9IDIgKiogMTYgLSAxIC8vIDY1NTM1XG5cbmNvbnN0IHBhcnNlclN0YXRlcyA9IHtcbiAgSU5GTzogMCxcbiAgUEFZTE9BRExFTkdUSF8xNjogMixcbiAgUEFZTE9BRExFTkdUSF82NDogMyxcbiAgUkVBRF9EQVRBOiA0XG59XG5cbmNvbnN0IGVtcHR5QnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG5cbmNvbnN0IHNlbmRIaW50cyA9IHtcbiAgc3RyaW5nOiAxLFxuICB0eXBlZEFycmF5OiAyLFxuICBhcnJheUJ1ZmZlcjogMyxcbiAgYmxvYjogNFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdWlkLFxuICBzZW50Q2xvc2VGcmFtZVN0YXRlLFxuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBzdGF0ZXMsXG4gIG9wY29kZXMsXG4gIG1heFVuc2lnbmVkMTZCaXQsXG4gIHBhcnNlclN0YXRlcyxcbiAgZW1wdHlCdWZmZXIsXG4gIHNlbmRIaW50c1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga0NvbnRyb2xsZXIsIGtSZXNwb25zZSwga0JpbmFyeVR5cGUsIGtXZWJTb2NrZXRVUkwgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHN0YXRlcywgb3Bjb2RlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBFcnJvckV2ZW50LCBjcmVhdGVGYXN0TWVzc2FnZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IGlzVXRmOCB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCwgcmVtb3ZlSFRUUFdoaXRlc3BhY2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcblxuLyogZ2xvYmFscyBCbG9iICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGluZyAod3MpIHtcbiAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIG5vdCB5ZXQgZXN0YWJsaXNoZWQsIGFuZCB0aGUgY29ubmVjdGlvblxuICAvLyBpcyBub3QgeWV0IGNsb3NlZCwgdGhlbiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENPTk5FQ1RJTkcgc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DT05ORUNUSU5HXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRXN0YWJsaXNoZWQgKHdzKSB7XG4gIC8vIElmIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBpcyB2YWxpZGF0ZWQgYXMgcHJvdmlkZWQgZm9yIGFib3ZlLCBpdCBpc1xuICAvLyBzYWlkIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBFc3RhYmxpc2hlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIGluIHRoZSBPUEVOIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuT1BFTlxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDbG9zZWQgKHdzKSB7XG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TRURcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0geyguLi5hcmdzOiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIEV2ZW50PikgPT4gRXZlbnR9IGV2ZW50RmFjdG9yeVxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50RmFjdG9yeSA9ICh0eXBlLCBpbml0KSA9PiBuZXcgRXZlbnQodHlwZSwgaW5pdCksIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW50XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IGV2ZW50RmFjdG9yeShlLCBldmVudEluaXREaWN0KVxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSB1dGY4RGVjb2RlKGRhdGEpXG4gICAgfSBjYXRjaCB7XG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGludmFsaWQgVVRGLTggaW4gdGV4dCBmcmFtZS4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IG9wY29kZXMuQklOQVJZKSB7XG4gICAgaWYgKHdzW2tCaW5hcnlUeXBlXSA9PT0gJ2Jsb2InKSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJibG9iXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQmxvYiBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgICAgb2JqZWN0LCB0aGF0IHJlcHJlc2VudHMgZGF0YSBhcyBpdHMgcmF3IGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBCbG9iKFtkYXRhXSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYXJyYXlidWZmZXJcIlxuICAgICAgLy8gICAgICBhIG5ldyBBcnJheUJ1ZmZlciBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZVxuICAgICAgLy8gICAgICBXZWJTb2NrZXQgb2JqZWN0LCB3aG9zZSBjb250ZW50cyBhcmUgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gdG9BcnJheUJ1ZmZlcihkYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgbWVzc2FnZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCwgdXNpbmcgTWVzc2FnZUV2ZW50LFxuICAvLyAgICB3aXRoIHRoZSBvcmlnaW4gYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgb2JqZWN0XHUyMDE5cyB1cmwncyBvcmlnaW4sIGFuZCB0aGUgZGF0YSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gZGF0YUZvckV2ZW50LlxuICBmaXJlRXZlbnQoJ21lc3NhZ2UnLCB3cywgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG5mdW5jdGlvbiB0b0FycmF5QnVmZmVyIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5ieXRlTGVuZ3RoID09PSBidWZmZXIuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gYnVmZmVyLmJ1ZmZlclxuICB9XG4gIHJldHVybiBidWZmZXIuYnVmZmVyLnNsaWNlKGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZU9mZnNldCArIGJ1ZmZlci5ieXRlTGVuZ3RoKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm90b2NvbC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSBwcm90b2NvbC5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fCAvLyBDVEwsIGNvbnRhaW5zIFNQICgweDIwKSBhbmQgSFQgKDB4MDkpXG4gICAgICBjb2RlID4gMHg3RSB8fFxuICAgICAgY29kZSA9PT0gMHgyMiB8fCAvLyBcIlxuICAgICAgY29kZSA9PT0gMHgyOCB8fCAvLyAoXG4gICAgICBjb2RlID09PSAweDI5IHx8IC8vIClcbiAgICAgIGNvZGUgPT09IDB4MkMgfHwgLy8gLFxuICAgICAgY29kZSA9PT0gMHgyRiB8fCAvLyAvXG4gICAgICBjb2RlID09PSAweDNBIHx8IC8vIDpcbiAgICAgIGNvZGUgPT09IDB4M0IgfHwgLy8gO1xuICAgICAgY29kZSA9PT0gMHgzQyB8fCAvLyA8XG4gICAgICBjb2RlID09PSAweDNEIHx8IC8vID1cbiAgICAgIGNvZGUgPT09IDB4M0UgfHwgLy8gPlxuICAgICAgY29kZSA9PT0gMHgzRiB8fCAvLyA/XG4gICAgICBjb2RlID09PSAweDQwIHx8IC8vIEBcbiAgICAgIGNvZGUgPT09IDB4NUIgfHwgLy8gW1xuICAgICAgY29kZSA9PT0gMHg1QyB8fCAvLyBcXFxuICAgICAgY29kZSA9PT0gMHg1RCB8fCAvLyBdXG4gICAgICBjb2RlID09PSAweDdCIHx8IC8vIHtcbiAgICAgIGNvZGUgPT09IDB4N0QgLy8gfVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTctNFxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN0YXR1c0NvZGUgKGNvZGUpIHtcbiAgaWYgKGNvZGUgPj0gMTAwMCAmJiBjb2RlIDwgMTAxNSkge1xuICAgIHJldHVybiAoXG4gICAgICBjb2RlICE9PSAxMDA0ICYmIC8vIHJlc2VydmVkXG4gICAgICBjb2RlICE9PSAxMDA1ICYmIC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgICAgY29kZSAhPT0gMTAwNiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICApXG4gIH1cblxuICByZXR1cm4gY29kZSA+PSAzMDAwICYmIGNvZGUgPD0gNDk5OVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gKi9cbmZ1bmN0aW9uIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uICh3cywgcmVhc29uKSB7XG4gIGNvbnN0IHsgW2tDb250cm9sbGVyXTogY29udHJvbGxlciwgW2tSZXNwb25zZV06IHJlc3BvbnNlIH0gPSB3c1xuXG4gIGNvbnRyb2xsZXIuYWJvcnQoKVxuXG4gIGlmIChyZXNwb25zZT8uc29ja2V0ICYmICFyZXNwb25zZS5zb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3koKVxuICB9XG5cbiAgaWYgKHJlYXNvbikge1xuICAgIC8vIFRPRE86IHByb2Nlc3MubmV4dFRpY2tcbiAgICBmaXJlRXZlbnQoJ2Vycm9yJywgd3MsICh0eXBlLCBpbml0KSA9PiBuZXcgRXJyb3JFdmVudCh0eXBlLCBpbml0KSwge1xuICAgICAgZXJyb3I6IG5ldyBFcnJvcihyZWFzb24pLFxuICAgICAgbWVzc2FnZTogcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS41XG4gKiBAcGFyYW0ge251bWJlcn0gb3Bjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzQ29udHJvbEZyYW1lIChvcGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICBvcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UgfHxcbiAgICBvcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgIG9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HXG4gIClcbn1cblxuZnVuY3Rpb24gaXNDb250aW51YXRpb25GcmFtZSAob3Bjb2RlKSB7XG4gIHJldHVybiBvcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG59XG5cbmZ1bmN0aW9uIGlzVGV4dEJpbmFyeUZyYW1lIChvcGNvZGUpIHtcbiAgcmV0dXJuIG9wY29kZSA9PT0gb3Bjb2Rlcy5URVhUIHx8IG9wY29kZSA9PT0gb3Bjb2Rlcy5CSU5BUllcbn1cblxuZnVuY3Rpb24gaXNWYWxpZE9wY29kZSAob3Bjb2RlKSB7XG4gIHJldHVybiBpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpIHx8IGlzQ29udGludWF0aW9uRnJhbWUob3Bjb2RlKSB8fCBpc0NvbnRyb2xGcmFtZShvcGNvZGUpXG59XG5cbi8qKlxuICogUGFyc2VzIGEgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIGhlYWRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHRlbnNpb25zXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuLy8gVE9ETyhAVXpsb3BhaywgQEtoYWZyYURldik6IG1ha2UgY29tcGxpYW50IGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTkuMVxuZnVuY3Rpb24gcGFyc2VFeHRlbnNpb25zIChleHRlbnNpb25zKSB7XG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gIGNvbnN0IGV4dGVuc2lvbkxpc3QgPSBuZXcgTWFwKClcblxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBleHRlbnNpb25zLmxlbmd0aCkge1xuICAgIGNvbnN0IHBhaXIgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCgnOycsIGV4dGVuc2lvbnMsIHBvc2l0aW9uKVxuICAgIGNvbnN0IFtuYW1lLCB2YWx1ZSA9ICcnXSA9IHBhaXIuc3BsaXQoJz0nKVxuXG4gICAgZXh0ZW5zaW9uTGlzdC5zZXQoXG4gICAgICByZW1vdmVIVFRQV2hpdGVzcGFjZShuYW1lLCB0cnVlLCBmYWxzZSksXG4gICAgICByZW1vdmVIVFRQV2hpdGVzcGFjZSh2YWx1ZSwgZmFsc2UsIHRydWUpXG4gICAgKVxuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgcmV0dXJuIGV4dGVuc2lvbkxpc3Rcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3NjkyI3NlY3Rpb24tNy4xLjIuMlxuICogQGRlc2NyaXB0aW9uIFwiY2xpZW50LW1heC13aW5kb3ctYml0cyA9IDEqRElHSVRcIlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRDbGllbnRXaW5kb3dCaXRzICh2YWx1ZSkge1xuICAvLyBNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlclxuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBDaGVjayBhbGwgY2hhcmFjdGVycyBhcmUgQVNDSUkgZGlnaXRzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBieXRlID0gdmFsdWUuY2hhckNvZGVBdChpKVxuXG4gICAgaWYgKGJ5dGUgPCAweDMwIHx8IGJ5dGUgPiAweDM5KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBudW1lcmljIHJhbmdlOiB6bGliIHJlcXVpcmVzIHdpbmRvd0JpdHMgaW4gcmFuZ2UgOC0xNVxuICBjb25zdCBudW0gPSBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKVxuICByZXR1cm4gbnVtID49IDggJiYgbnVtIDw9IDE1XG59XG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaW50bC5odG1sI2RldGVjdGluZy1pbnRlcm5hdGlvbmFsaXphdGlvbi1zdXBwb3J0XG5jb25zdCBoYXNJbnRsID0gdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMuaWN1ID09PSAnc3RyaW5nJ1xuY29uc3QgZmF0YWxEZWNvZGVyID0gaGFzSW50bCA/IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pIDogdW5kZWZpbmVkXG5cbi8qKlxuICogQ29udmVydHMgYSBCdWZmZXIgdG8gdXRmLTgsIGV2ZW4gb24gcGxhdGZvcm1zIHdpdGhvdXQgaWN1LlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICovXG5jb25zdCB1dGY4RGVjb2RlID0gaGFzSW50bFxuICA/IGZhdGFsRGVjb2Rlci5kZWNvZGUuYmluZChmYXRhbERlY29kZXIpXG4gIDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuICAgIGlmIChpc1V0ZjgoYnVmZmVyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygndXRmLTgnKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHV0Zi04IHJlY2VpdmVkLicpXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ29ubmVjdGluZyxcbiAgaXNFc3RhYmxpc2hlZCxcbiAgaXNDbG9zaW5nLFxuICBpc0Nsb3NlZCxcbiAgZmlyZUV2ZW50LFxuICBpc1ZhbGlkU3VicHJvdG9jb2wsXG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkLFxuICB1dGY4RGVjb2RlLFxuICBpc0NvbnRyb2xGcmFtZSxcbiAgaXNDb250aW51YXRpb25GcmFtZSxcbiAgaXNUZXh0QmluYXJ5RnJhbWUsXG4gIGlzVmFsaWRPcGNvZGUsXG4gIHBhcnNlRXh0ZW5zaW9ucyxcbiAgaXNWYWxpZENsaWVudFdpbmRvd0JpdHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhVbnNpZ25lZDE2Qml0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IEJVRkZFUl9TSVpFID0gMTYzODZcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xubGV0IGJ1ZmZlciA9IG51bGxcbmxldCBidWZJZHggPSBCVUZGRVJfU0laRVxuXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdub2RlOmNyeXB0bycpXG4vKiBjOCBpZ25vcmUgbmV4dCAzICovXG59IGNhdGNoIHtcbiAgY3J5cHRvID0ge1xuICAgIC8vIG5vdCBmdWxsIGNvbXBhdGliaWxpdHksIGJ1dCBtaW5pbXVtLlxuICAgIHJhbmRvbUZpbGxTeW5jOiBmdW5jdGlvbiByYW5kb21GaWxsU3luYyAoYnVmZmVyLCBfb2Zmc2V0LCBfc2l6ZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW2ldID0gTWF0aC5yYW5kb20oKSAqIDI1NSB8IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWZmZXJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVNYXNrICgpIHtcbiAgaWYgKGJ1ZklkeCA9PT0gQlVGRkVSX1NJWkUpIHtcbiAgICBidWZJZHggPSAwXG4gICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKChidWZmZXIgPz89IEJ1ZmZlci5hbGxvY1Vuc2FmZShCVUZGRVJfU0laRSkpLCAwLCBCVUZGRVJfU0laRSlcbiAgfVxuICByZXR1cm4gW2J1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK11dXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgZnJhbWVEYXRhID0gdGhpcy5mcmFtZURhdGFcbiAgICBjb25zdCBtYXNrS2V5ID0gZ2VuZXJhdGVNYXNrKClcbiAgICBjb25zdCBib2R5TGVuZ3RoID0gZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gbWFza0tleVswXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAzXSA9IG1hc2tLZXlbMV1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMl0gPSBtYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gbWFza0tleVszXVxuXG4gICAgYnVmZmVyWzFdID0gcGF5bG9hZExlbmd0aFxuXG4gICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2QkUoYm9keUxlbmd0aCwgMilcbiAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgLy8gQ2xlYXIgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGhcbiAgICAgIGJ1ZmZlclsyXSA9IGJ1ZmZlclszXSA9IDBcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnRCRShib2R5TGVuZ3RoLCA0LCA2KVxuICAgIH1cblxuICAgIGJ1ZmZlclsxXSB8PSAweDgwIC8vIE1BU0tcblxuICAgIC8vIG1hc2sgYm9keVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keUxlbmd0aDsgKytpKSB7XG4gICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSBmcmFtZURhdGFbaV0gXiBtYXNrS2V5W2kgJiAzXVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdWlkLCBzdGF0ZXMsIHNlbnRDbG9zZUZyYW1lU3RhdGUsIGVtcHR5QnVmZmVyLCBvcGNvZGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtSZWFkeVN0YXRlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlcixcbiAga1JlY2VpdmVkQ2xvc2UsXG4gIGtSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGZpcmVFdmVudCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIGlzQ2xvc2luZywgaXNDbG9zZWQsIGlzRXN0YWJsaXNoZWQsIHBhcnNlRXh0ZW5zaW9ucyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY2hhbm5lbHMgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvZGlhZ25vc3RpY3MnKVxuY29uc3QgeyBDbG9zZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgSGVhZGVycywgZ2V0SGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXREZWNvZGVTcGxpdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xuXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXdlYnNvY2tldC1lc3RhYmxpc2hcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7KHJlc3BvbnNlOiBhbnksIGV4dGVuc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA9PiB2b2lkfSBvbkVzdGFibGlzaFxuICogQHBhcmFtIHtQYXJ0aWFsPGltcG9ydCgnLi4vLi4vdHlwZXMvd2Vic29ja2V0JykuV2ViU29ja2V0SW5pdD59IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiAodXJsLCBwcm90b2NvbHMsIGNsaWVudCwgd3MsIG9uRXN0YWJsaXNoLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0VVJMIGJlIGEgY29weSBvZiB1cmwsIHdpdGggaXRzIHNjaGVtZSBzZXQgdG8gXCJodHRwXCIsIGlmIHVybFx1MjAxOXNcbiAgLy8gICAgc2NoZW1lIGlzIFwid3NcIiwgYW5kIHRvIFwiaHR0cHNcIiBvdGhlcndpc2UuXG4gIGNvbnN0IHJlcXVlc3RVUkwgPSB1cmxcblxuICByZXF1ZXN0VVJMLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSAnd3M6JyA/ICdodHRwOicgOiAnaHR0cHM6J1xuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGEgbmV3IHJlcXVlc3QsIHdob3NlIFVSTCBpcyByZXF1ZXN0VVJMLCBjbGllbnQgaXMgY2xpZW50LFxuICAvLyAgICBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcIm5vbmVcIiwgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCBtb2RlIGlzXG4gIC8vICAgIFwid2Vic29ja2V0XCIsIGNyZWRlbnRpYWxzIG1vZGUgaXMgXCJpbmNsdWRlXCIsIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiICxcbiAgLy8gICAgYW5kIHJlZGlyZWN0IG1vZGUgaXMgXCJlcnJvclwiLlxuICBjb25zdCByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgIHVybExpc3Q6IFtyZXF1ZXN0VVJMXSxcbiAgICBjbGllbnQsXG4gICAgc2VydmljZVdvcmtlcnM6ICdub25lJyxcbiAgICByZWZlcnJlcjogJ25vLXJlZmVycmVyJyxcbiAgICBtb2RlOiAnd2Vic29ja2V0JyxcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICAgIHJlZGlyZWN0OiAnZXJyb3InXG4gIH0pXG5cbiAgLy8gTm90ZTogdW5kaWNpIGV4dGVuc2lvbiwgYWxsb3cgc2V0dGluZyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gZ2V0SGVhZGVyc0xpc3QobmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKSlcblxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QgPSBoZWFkZXJzTGlzdFxuICB9XG5cbiAgLy8gMy4gQXBwZW5kIChgVXBncmFkZWAsIGB3ZWJzb2NrZXRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gNC4gQXBwZW5kIChgQ29ubmVjdGlvbmAsIGBVcGdyYWRlYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIE5vdGU6IGJvdGggb2YgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdW5kaWNpIGN1cnJlbnRseS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi82OGMyNjljNDE0NGM0NDZmM2YxMjIwOTUxMzM4ZGFlZjRhNmI1ZWM0L2xpYi9jbGllbnQuanMjTDEzOTdcblxuICAvLyA1LiBMZXQga2V5VmFsdWUgYmUgYSBub25jZSBjb25zaXN0aW5nIG9mIGEgcmFuZG9tbHkgc2VsZWN0ZWRcbiAgLy8gICAgMTYtYnl0ZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIGZvcmdpdmluZy1iYXNlNjQtZW5jb2RlZCBhbmRcbiAgLy8gICAgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBjb25zdCBrZXlWYWx1ZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpXG5cbiAgLy8gNi4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1LZXlgLCBrZXlWYWx1ZSkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWtleScsIGtleVZhbHVlKVxuXG4gIC8vIDcuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtVmVyc2lvbmAsIGAxM2ApIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC12ZXJzaW9uJywgJzEzJylcblxuICAvLyA4LiBGb3IgZWFjaCBwcm90b2NvbCBpbiBwcm90b2NvbHMsIGNvbWJpbmVcbiAgLy8gICAgKGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCwgcHJvdG9jb2wpIGluIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBmb3IgKGNvbnN0IHByb3RvY29sIG9mIHByb3RvY29scykge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXByb3RvY29sJywgcHJvdG9jb2wpXG4gIH1cblxuICAvLyA5LiBMZXQgcGVybWVzc2FnZURlZmxhdGUgYmUgYSB1c2VyLWFnZW50IGRlZmluZWRcbiAgLy8gICAgXCJwZXJtZXNzYWdlLWRlZmxhdGVcIiBleHRlbnNpb24gaGVhZGVyIHZhbHVlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi9jZTc4MjM0ZjVlNjUzYTVkMzkxNjgxM2ZmOTkwZjA1MzUxMDIyN2JjL25ldHdlcmsvcHJvdG9jb2wvd2Vic29ja2V0L1dlYlNvY2tldENoYW5uZWwuY3BwI0wyNjczXG4gIGNvbnN0IHBlcm1lc3NhZ2VEZWZsYXRlID0gJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgY2xpZW50X21heF93aW5kb3dfYml0cydcblxuICAvLyAxMC4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zYCwgcGVybWVzc2FnZURlZmxhdGUpIHRvXG4gIC8vICAgICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycsIHBlcm1lc3NhZ2VEZWZsYXRlKVxuXG4gIC8vIDExLiBGZXRjaCByZXF1ZXN0IHdpdGggdXNlUGFyYWxsZWxRdWV1ZSBzZXQgdG8gdHJ1ZSwgYW5kXG4gIC8vICAgICBwcm9jZXNzUmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3RlcHM6XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICB1c2VQYXJhbGxlbFF1ZXVlOiB0cnVlLFxuICAgIGRpc3BhdGNoZXI6IG9wdGlvbnMuZGlzcGF0Y2hlcixcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2VcdTIwMTlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcbiAgICAgIGxldCBleHRlbnNpb25zXG5cbiAgICAgIGlmIChzZWNFeHRlbnNpb24gIT09IG51bGwpIHtcbiAgICAgICAgZXh0ZW5zaW9ucyA9IHBhcnNlRXh0ZW5zaW9ucyhzZWNFeHRlbnNpb24pXG5cbiAgICAgICAgaWYgKCFleHRlbnNpb25zLmhhcygncGVybWVzc2FnZS1kZWZsYXRlJykpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXIgZG9lcyBub3QgbWF0Y2guJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm90b2NvbHMgPSBnZXREZWNvZGVTcGxpdCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcsIHJlcXVlc3QuaGVhZGVyc0xpc3QpXG5cbiAgICAgICAgLy8gVGhlIGNsaWVudCBjYW4gcmVxdWVzdCB0aGF0IHRoZSBzZXJ2ZXIgdXNlIGEgc3BlY2lmaWMgc3VicHJvdG9jb2wgYnlcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgZmllbGQgaW4gaXRzIGhhbmRzaGFrZS4gIElmIGl0XG4gICAgICAgIC8vIGlzIHNwZWNpZmllZCwgdGhlIHNlcnZlciBuZWVkcyB0byBpbmNsdWRlIHRoZSBzYW1lIGZpZWxkIGFuZCBvbmUgb2ZcbiAgICAgICAgLy8gdGhlIHNlbGVjdGVkIHN1YnByb3RvY29sIHZhbHVlcyBpbiBpdHMgcmVzcG9uc2UgZm9yIHRoZSBjb25uZWN0aW9uIHRvXG4gICAgICAgIC8vIGJlIGVzdGFibGlzaGVkLlxuICAgICAgICBpZiAoIXJlcXVlc3RQcm90b2NvbHMuaW5jbHVkZXMoc2VjUHJvdG9jb2wpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdQcm90b2NvbCB3YXMgbm90IHNldCBpbiB0aGUgb3BlbmluZyBoYW5kc2hha2UuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSwgZXh0ZW5zaW9ucylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuZnVuY3Rpb24gY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uICh3cywgY29kZSwgcmVhc29uLCByZWFzb25CeXRlTGVuZ3RoKSB7XG4gIGlmIChpc0Nsb3Npbmcod3MpIHx8IGlzQ2xvc2VkKHdzKSkge1xuICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgLy8gRG8gbm90aGluZy5cbiAgfSBlbHNlIGlmICghaXNFc3RhYmxpc2hlZCh3cykpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgbm90IHlldCBlc3RhYmxpc2hlZFxuICAgIC8vIEZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGFuZCBzZXQgdGhpcydzIHJlYWR5IHN0YXRlXG4gICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIGl0IHdhcyBlc3RhYmxpc2hlZC4nKVxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSBpZiAod3Nba1NlbnRDbG9zZV0gPT09IHNlbnRDbG9zZUZyYW1lU3RhdGUuTk9UX1NFTlQpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZFxuICAgIC8vIFN0YXJ0IHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgYW5kIHNldCB0aGlzJ3MgcmVhZHlcbiAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAvLyAtIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAvLyAgIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG4gICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAvLyAgIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAvLyAtIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgd3Nba1NlbnRDbG9zZV0gPSBzZW50Q2xvc2VGcmFtZVN0YXRlLlBST0NFU1NJTkdcblxuICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgLy8gbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cblxuICAgIC8vIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgfSBlbHNlIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIgKyByZWFzb25CeXRlTGVuZ3RoKVxuICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGUocmVhc29uLCAyLCAndXRmLTgnKVxuICAgIH0gZWxzZSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgY29uc3Qgc29ja2V0ID0gd3Nba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIHNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSlcblxuICAgIHdzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UXG5cbiAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlXG4gICAgLy8gU2V0IHRoaXMncyByZWFkeSBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0RGF0YSAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLndzW2tCeXRlUGFyc2VyXS53cml0ZShjaHVuaykpIHtcbiAgICB0aGlzLnBhdXNlKClcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjRcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcbiAgY29uc3QgeyBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignZGF0YScsIG9uU29ja2V0RGF0YSlcbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICByZXNwb25zZS5zb2NrZXQub2ZmKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG5cbiAgLy8gSWYgdGhlIFRDUCBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWZ0ZXIgdGhlXG4gIC8vIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSB3YXMgY29tcGxldGVkLCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAgLy8gaXMgc2FpZCB0byBoYXZlIGJlZW4gY2xvc2VkIF9jbGVhbmx5Xy5cbiAgY29uc3Qgd2FzQ2xlYW4gPSB3c1trU2VudENsb3NlXSA9PT0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UICYmIHdzW2tSZWNlaXZlZENsb3NlXVxuXG4gIGxldCBjb2RlID0gMTAwNVxuICBsZXQgcmVhc29uID0gJydcblxuICBjb25zdCByZXN1bHQgPSB3c1trQnl0ZVBhcnNlcl0uY2xvc2luZ0luZm9cblxuICBpZiAocmVzdWx0ICYmICFyZXN1bHQuZXJyb3IpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgLy8gSWYgX1RoZSBXZWJTb2NrZXRcbiAgICAvLyBDb25uZWN0aW9uIGlzIENsb3NlZF8gYW5kIG5vIENsb3NlIGNvbnRyb2wgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZVxuICAgIC8vIGVuZHBvaW50IChzdWNoIGFzIGNvdWxkIG9jY3VyIGlmIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uXG4gICAgLy8gaXMgbG9zdCksIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXMgY29uc2lkZXJlZCB0byBiZVxuICAgIC8vIDEwMDYuXG4gICAgY29kZSA9IDEwMDZcbiAgfVxuXG4gIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gQ0xPU0VEICgzKS5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NFRFxuXG4gIC8vIDIuIElmIHRoZSB1c2VyIGFnZW50IHdhcyByZXF1aXJlZCB0byBmYWlsIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgY29ubmVjdGlvbiwgb3IgaWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHdhcyBjbG9zZWRcbiAgLy8gICAgYWZ0ZXIgYmVpbmcgZmxhZ2dlZCBhcyBmdWxsLCBmaXJlIGFuIGV2ZW50IG5hbWVkIGVycm9yXG4gIC8vICAgIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAvLyBUT0RPXG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBjbG9zZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCxcbiAgLy8gICAgdXNpbmcgQ2xvc2VFdmVudCwgd2l0aCB0aGUgd2FzQ2xlYW4gYXR0cmlidXRlXG4gIC8vICAgIGluaXRpYWxpemVkIHRvIHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gY2xvc2VkIGNsZWFubHlcbiAgLy8gICAgYW5kIGZhbHNlIG90aGVyd2lzZSwgdGhlIGNvZGUgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvXG4gIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZSBjb2RlLCBhbmQgdGhlIHJlYXNvblxuICAvLyAgICBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBVVEYtOFxuICAvLyAgICBkZWNvZGUgd2l0aG91dCBCT00gdG8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlXG4gIC8vICAgIHJlYXNvbi5cbiAgLy8gVE9ETzogcHJvY2Vzcy5uZXh0VGlja1xuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsICh0eXBlLCBpbml0KSA9PiBuZXcgQ2xvc2VFdmVudCh0eXBlLCBpbml0KSwge1xuICAgIHdhc0NsZWFuLCBjb2RlLCByZWFzb25cbiAgfSlcblxuICBpZiAoY2hhbm5lbHMuY2xvc2UuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5jbG9zZS5wdWJsaXNoKHtcbiAgICAgIHdlYnNvY2tldDogd3MsXG4gICAgICBjb2RlLFxuICAgICAgcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnJvcikge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcblxuICBpZiAoY2hhbm5lbHMuc29ja2V0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zb2NrZXRFcnJvci5wdWJsaXNoKGVycm9yKVxuICB9XG5cbiAgdGhpcy5kZXN0cm95KClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24sXG4gIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGNyZWF0ZUluZmxhdGVSYXcsIFpfREVGQVVMVF9XSU5ET1dCSVRTIH0gPSByZXF1aXJlKCdub2RlOnpsaWInKVxuY29uc3QgeyBpc1ZhbGlkQ2xpZW50V2luZG93Qml0cyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL2Vycm9ycycpXG5cbmNvbnN0IHRhaWwgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHhmZiwgMHhmZl0pXG5jb25zdCBrQnVmZmVyID0gU3ltYm9sKCdrQnVmZmVyJylcbmNvbnN0IGtMZW5ndGggPSBTeW1ib2woJ2tMZW5ndGgnKVxuXG5jbGFzcyBQZXJNZXNzYWdlRGVmbGF0ZSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOnpsaWInKS5JbmZsYXRlUmF3fSAqL1xuICAjaW5mbGF0ZVxuXG4gICNvcHRpb25zID0ge31cblxuICAjbWF4UGF5bG9hZFNpemUgPSAwXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gZXh0ZW5zaW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dGVuc2lvbnMsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNvcHRpb25zLnNlcnZlck5vQ29udGV4dFRha2VvdmVyID0gZXh0ZW5zaW9ucy5oYXMoJ3NlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyJylcbiAgICB0aGlzLiNvcHRpb25zLnNlcnZlck1heFdpbmRvd0JpdHMgPSBleHRlbnNpb25zLmdldCgnc2VydmVyX21heF93aW5kb3dfYml0cycpXG5cbiAgICB0aGlzLiNtYXhQYXlsb2FkU2l6ZSA9IG9wdGlvbnMubWF4UGF5bG9hZFNpemVcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXByZXNzIGEgY29tcHJlc3NlZCBwYXlsb2FkLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmsgQ29tcHJlc3NlZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluIEZpbmFsIGZyYWdtZW50IGZsYWdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb25cbiAgICovXG4gIGRlY29tcHJlc3MgKGNodW5rLCBmaW4sIGNhbGxiYWNrKSB7XG4gICAgLy8gQW4gZW5kcG9pbnQgdXNlcyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSB0byBkZWNvbXByZXNzIGEgbWVzc2FnZS5cbiAgICAvLyAxLiAgQXBwZW5kIDQgb2N0ZXRzIG9mIDB4MDAgMHgwMCAweGZmIDB4ZmYgdG8gdGhlIHRhaWwgZW5kIG9mIHRoZVxuICAgIC8vICAgICBwYXlsb2FkIG9mIHRoZSBtZXNzYWdlLlxuICAgIC8vIDIuICBEZWNvbXByZXNzIHRoZSByZXN1bHRpbmcgZGF0YSB1c2luZyBERUZMQVRFLlxuICAgIGlmICghdGhpcy4jaW5mbGF0ZSkge1xuICAgICAgbGV0IHdpbmRvd0JpdHMgPSBaX0RFRkFVTFRfV0lORE9XQklUU1xuXG4gICAgICBpZiAodGhpcy4jb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzKSB7IC8vIGVtcHR5IHZhbHVlcyBkZWZhdWx0IHRvIFpfREVGQVVMVF9XSU5ET1dCSVRTXG4gICAgICAgIGlmICghaXNWYWxpZENsaWVudFdpbmRvd0JpdHModGhpcy4jb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzKSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignSW52YWxpZCBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3dCaXRzID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuI29wdGlvbnMuc2VydmVyTWF4V2luZG93Qml0cylcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy4jaW5mbGF0ZSA9IGNyZWF0ZUluZmxhdGVSYXcoeyB3aW5kb3dCaXRzIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0gPSBbXVxuICAgICAgdGhpcy4jaW5mbGF0ZVtrTGVuZ3RoXSA9IDBcblxuICAgICAgdGhpcy4jaW5mbGF0ZS5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuI2luZmxhdGVba0xlbmd0aF0gKz0gZGF0YS5sZW5ndGhcblxuICAgICAgICBpZiAodGhpcy4jbWF4UGF5bG9hZFNpemUgPiAwICYmIHRoaXMuI2luZmxhdGVba0xlbmd0aF0gPiB0aGlzLiNtYXhQYXlsb2FkU2l6ZSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3IoKSlcbiAgICAgICAgICB0aGlzLiNpbmZsYXRlLnJlbW92ZUFsbExpc3RlbmVycygpXG4gICAgICAgICAgdGhpcy4jaW5mbGF0ZSA9IG51bGxcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0ucHVzaChkYXRhKVxuICAgICAgfSlcblxuICAgICAgdGhpcy4jaW5mbGF0ZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuI2luZmxhdGUgPSBudWxsXG4gICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy4jaW5mbGF0ZS53cml0ZShjaHVuaylcbiAgICBpZiAoZmluKSB7XG4gICAgICB0aGlzLiNpbmZsYXRlLndyaXRlKHRhaWwpXG4gICAgfVxuXG4gICAgdGhpcy4jaW5mbGF0ZS5mbHVzaCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuI2luZmxhdGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGwgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2luZmxhdGVba0J1ZmZlcl0sIHRoaXMuI2luZmxhdGVba0xlbmd0aF0pXG5cbiAgICAgIHRoaXMuI2luZmxhdGVba0J1ZmZlcl0ubGVuZ3RoID0gMFxuICAgICAgdGhpcy4jaW5mbGF0ZVtrTGVuZ3RoXSA9IDBcblxuICAgICAgY2FsbGJhY2sobnVsbCwgZnVsbClcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBQZXJNZXNzYWdlRGVmbGF0ZSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV3JpdGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgcGFyc2VyU3RhdGVzLCBvcGNvZGVzLCBzdGF0ZXMsIGVtcHR5QnVmZmVyLCBzZW50Q2xvc2VGcmFtZVN0YXRlIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrU2VudENsb3NlLCBrUmVzcG9uc2UsIGtSZWNlaXZlZENsb3NlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9kaWFnbm9zdGljcycpXG5jb25zdCB7XG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBpc1ZhbGlkT3Bjb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkLFxuICB1dGY4RGVjb2RlLFxuICBpc0NvbnRyb2xGcmFtZSxcbiAgaXNUZXh0QmluYXJ5RnJhbWUsXG4gIGlzQ29udGludWF0aW9uRnJhbWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuY29uc3QgeyBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFBlck1lc3NhZ2VEZWZsYXRlIH0gPSByZXF1aXJlKCcuL3Blcm1lc3NhZ2UtZGVmbGF0ZScpXG5jb25zdCB7IE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9lcnJvcnMnKVxuXG5mdW5jdGlvbiBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlICh3cywgY29kZSwgcmVhc29uKSB7XG4gIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvbih3cywgY29kZSwgcmVhc29uLCBCdWZmZXIuYnl0ZUxlbmd0aChyZWFzb24pKVxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgcmVhc29uKVxufVxuXG4vLyBUaGlzIGNvZGUgd2FzIGluZmx1ZW5jZWQgYnkgd3MgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEVpbmFyIE90dG8gU3Rhbmd2aWsgPGVpbmFyb3NAZ21haWwuY29tPlxuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFybm91dCBLYXplbWllciBhbmQgY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYgTHVpZ2kgUGluY2EgYW5kIGNvbnRyaWJ1dG9yc1xuXG5jbGFzcyBCeXRlUGFyc2VyIGV4dGVuZHMgV3JpdGFibGUge1xuICAjYnVmZmVycyA9IFtdXG4gICNmcmFnbWVudHNCeXRlcyA9IDBcbiAgI2J5dGVPZmZzZXQgPSAwXG4gICNsb29wID0gZmFsc2VcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQZXJNZXNzYWdlRGVmbGF0ZT59ICovXG4gICNleHRlbnNpb25zXG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICNtYXhGcmFnbWVudHNcblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgI21heFBheWxvYWRTaXplXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBzdHJpbmc+fG51bGx9IGV4dGVuc2lvbnNcbiAgICogQHBhcmFtIHt7IG1heEZyYWdtZW50cz86IG51bWJlciwgbWF4UGF5bG9hZFNpemU/OiBudW1iZXIgfX0gW29wdGlvbnNdXG4gICAqL1xuICBjb25zdHJ1Y3RvciAod3MsIGV4dGVuc2lvbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMud3MgPSB3c1xuICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zID09IG51bGwgPyBuZXcgTWFwKCkgOiBleHRlbnNpb25zXG4gICAgdGhpcy4jbWF4RnJhZ21lbnRzID0gb3B0aW9ucy5tYXhGcmFnbWVudHMgPz8gMFxuICAgIHRoaXMuI21heFBheWxvYWRTaXplID0gb3B0aW9ucy5tYXhQYXlsb2FkU2l6ZSA/PyAwXG5cbiAgICBpZiAodGhpcy4jZXh0ZW5zaW9ucy5oYXMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpKSB7XG4gICAgICB0aGlzLiNleHRlbnNpb25zLnNldCgncGVybWVzc2FnZS1kZWZsYXRlJywgbmV3IFBlck1lc3NhZ2VEZWZsYXRlKGV4dGVuc2lvbnMsIG9wdGlvbnMpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKi9cbiAgX3dyaXRlIChjaHVuaywgXywgY2FsbGJhY2spIHtcbiAgICB0aGlzLiNidWZmZXJzLnB1c2goY2h1bmspXG4gICAgdGhpcy4jYnl0ZU9mZnNldCArPSBjaHVuay5sZW5ndGhcbiAgICB0aGlzLiNsb29wID0gdHJ1ZVxuXG4gICAgdGhpcy5ydW4oY2FsbGJhY2spXG4gIH1cblxuICAjdmFsaWRhdGVQYXlsb2FkTGVuZ3RoICgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNtYXhQYXlsb2FkU2l6ZSA+IDAgJiZcbiAgICAgICFpc0NvbnRyb2xGcmFtZSh0aGlzLiNpbmZvLm9wY29kZSkgJiZcbiAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCArIHRoaXMuI2ZyYWdtZW50c0J5dGVzID4gdGhpcy4jbWF4UGF5bG9hZFNpemVcbiAgICApIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOSwgJ1BheWxvYWQgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVuZXZlciBhIG5ldyBjaHVuayBpcyByZWNlaXZlZC5cbiAgICogQ2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBubyBtb3JlIGNodW5rcyBidWZmZXJpbmcsXG4gICAqIG9yIG5vdCBlbm91Z2ggYnl0ZXMgYXJlIGJ1ZmZlcmVkIHRvIHBhcnNlLlxuICAgKi9cbiAgcnVuIChjYWxsYmFjaykge1xuICAgIHdoaWxlICh0aGlzLiNsb29wKSB7XG4gICAgICBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5JTkZPKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZW4ndCBlbm91Z2ggYnl0ZXMgdG8gcGFyc2UgdGhlIHBheWxvYWQgbGVuZ3RoLCBldGMuXG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcbiAgICAgICAgY29uc3QgZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIGNvbnN0IG9wY29kZSA9IGJ1ZmZlclswXSAmIDB4MEZcbiAgICAgICAgY29uc3QgbWFza2VkID0gKGJ1ZmZlclsxXSAmIDB4ODApID09PSAweDgwXG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnRlZCA9ICFmaW4gJiYgb3Bjb2RlICE9PSBvcGNvZGVzLkNPTlRJTlVBVElPTlxuICAgICAgICBjb25zdCBwYXlsb2FkTGVuZ3RoID0gYnVmZmVyWzFdICYgMHg3RlxuXG4gICAgICAgIGNvbnN0IHJzdjEgPSBidWZmZXJbMF0gJiAweDQwXG4gICAgICAgIGNvbnN0IHJzdjIgPSBidWZmZXJbMF0gJiAweDIwXG4gICAgICAgIGNvbnN0IHJzdjMgPSBidWZmZXJbMF0gJiAweDEwXG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkT3Bjb2RlKG9wY29kZSkpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnSW52YWxpZCBvcGNvZGUgcmVjZWl2ZWQnKVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWFza2VkKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ZyYW1lIGNhbm5vdCBiZSBtYXNrZWQnKVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBNVVNUIGJlIDAgdW5sZXNzIGFuIGV4dGVuc2lvbiBpcyBuZWdvdGlhdGVkIHRoYXQgZGVmaW5lcyBtZWFuaW5nc1xuICAgICAgICAvLyBmb3Igbm9uLXplcm8gdmFsdWVzLiAgSWYgYSBub256ZXJvIHZhbHVlIGlzIHJlY2VpdmVkIGFuZCBub25lIG9mXG4gICAgICAgIC8vIHRoZSBuZWdvdGlhdGVkIGV4dGVuc2lvbnMgZGVmaW5lcyB0aGUgbWVhbmluZyBvZiBzdWNoIGEgbm9uemVyb1xuICAgICAgICAvLyB2YWx1ZSwgdGhlIHJlY2VpdmluZyBlbmRwb2ludCBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXRcbiAgICAgICAgLy8gQ29ubmVjdGlvbl8uXG4gICAgICAgIC8vIFRoaXMgZG9jdW1lbnQgYWxsb2NhdGVzIHRoZSBSU1YxIGJpdCBvZiB0aGUgV2ViU29ja2V0IGhlYWRlciBmb3JcbiAgICAgICAgLy8gUE1DRXMgYW5kIGNhbGxzIHRoZSBiaXQgdGhlIFwiUGVyLU1lc3NhZ2UgQ29tcHJlc3NlZFwiIGJpdC4gIE9uIGFcbiAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gd2hlcmUgYSBQTUNFIGlzIGluIHVzZSwgdGhpcyBiaXQgaW5kaWNhdGVzXG4gICAgICAgIC8vIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgICAgICBpZiAocnN2MSAhPT0gMCAmJiAhdGhpcy4jZXh0ZW5zaW9ucy5oYXMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0V4cGVjdGVkIFJTVjEgdG8gYmUgY2xlYXIuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyc3YyICE9PSAwIHx8IHJzdjMgIT09IDApIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUlNWMSwgUlNWMiwgUlNWMyBtdXN0IGJlIGNsZWFyJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnbWVudGVkICYmICFpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpKSB7XG4gICAgICAgICAgLy8gT25seSB0ZXh0IGFuZCBiaW5hcnkgZnJhbWVzIGNhbiBiZSBmcmFnbWVudGVkXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ludmFsaWQgZnJhbWUgdHlwZSB3YXMgZnJhZ21lbnRlZC4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgcGFyc2luZyBhIHRleHQvYmluYXJ5IGZyYW1lIGFuZCBkbyBub3QgcmVjZWl2ZSBlaXRoZXJcbiAgICAgICAgLy8gYSBjb250aW51YXRpb24gZnJhbWUgb3IgY2xvc2UgZnJhbWUsIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG4gICAgICAgIGlmIChpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpICYmIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0V4cGVjdGVkIGNvbnRpbnVhdGlvbiBmcmFtZScpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIGZyYWdtZW50ZWQpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFwiQWxsIGNvbnRyb2wgZnJhbWVzIE1VU1QgaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBvciBsZXNzXG4gICAgICAgIC8vIGFuZCBNVVNUIE5PVCBiZSBmcmFnbWVudGVkLlwiXG4gICAgICAgIGlmICgocGF5bG9hZExlbmd0aCA+IDEyNSB8fCBmcmFnbWVudGVkKSAmJiBpc0NvbnRyb2xGcmFtZShvcGNvZGUpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0NvbnRyb2wgZnJhbWUgZWl0aGVyIHRvbyBsYXJnZSBvciBmcmFnbWVudGVkJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvbnRpbnVhdGlvbkZyYW1lKG9wY29kZSkgJiYgdGhpcy4jZnJhZ21lbnRzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy4jaW5mby5jb21wcmVzc2VkKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1VuZXhwZWN0ZWQgY29udGludWF0aW9uIGZyYW1lJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoIDw9IDEyNSkge1xuICAgICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IHBheWxvYWRMZW5ndGhcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcblxuICAgICAgICAgIGlmICghdGhpcy4jdmFsaWRhdGVQYXlsb2FkTGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2XG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVGV4dEJpbmFyeUZyYW1lKG9wY29kZSkpIHtcbiAgICAgICAgICB0aGlzLiNpbmZvLmJpbmFyeVR5cGUgPSBvcGNvZGVcbiAgICAgICAgICB0aGlzLiNpbmZvLmNvbXByZXNzZWQgPSByc3YxICE9PSAwXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9IG9wY29kZVxuICAgICAgICB0aGlzLiNpbmZvLm1hc2tlZCA9IG1hc2tlZFxuICAgICAgICB0aGlzLiNpbmZvLmZpbiA9IGZpblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSBmcmFnbWVudGVkXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcblxuICAgICAgICBpZiAoIXRoaXMuI3ZhbGlkYXRlUGF5bG9hZExlbmd0aCgpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG4gICAgICAgIGNvbnN0IGxvd2VyID0gYnVmZmVyLnJlYWRVSW50MzJCRSg0KVxuXG4gICAgICAgIC8vIDJeMzEgaXMgdGhlIG1heGltdW0gYnl0ZXMgYW4gYXJyYXlidWZmZXIgY2FuIGNvbnRhaW5cbiAgICAgICAgLy8gb24gMzItYml0IHN5c3RlbXMuIEFsdGhvdWdoLCBvbiA2NC1iaXQgc3lzdGVtcywgdGhpcyBpc1xuICAgICAgICAvLyAyXjUzLTEgYnl0ZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9JbnZhbGlkX2FycmF5X2xlbmd0aFxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvY29tbW9uL2dsb2JhbHMuaDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZTticHY9MTticHQ9MTtsPTEyNzVcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLmg7bD0zNDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZVxuICAgICAgICBpZiAodXBwZXIgIT09IDAgfHwgbG93ZXIgPiAyICoqIDMxIC0gMSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBwYXlsb2FkIGxlbmd0aCA+IDJeMzEgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IGxvd2VyXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuXG4gICAgICAgIGlmICghdGhpcy4jdmFsaWRhdGVQYXlsb2FkTGVuZ3RoKCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlJFQURfREFUQSkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aClcblxuICAgICAgICBpZiAoaXNDb250cm9sRnJhbWUodGhpcy4jaW5mby5vcGNvZGUpKSB7XG4gICAgICAgICAgdGhpcy4jbG9vcCA9IHRoaXMucGFyc2VDb250cm9sRnJhbWUoYm9keSlcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmNvbXByZXNzZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy53cml0ZUZyYWdtZW50cyhib2R5KSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuI21heFBheWxvYWRTaXplID4gMCAmJiB0aGlzLiNmcmFnbWVudHNCeXRlcyA+IHRoaXMuI21heFBheWxvYWRTaXplKSB7XG4gICAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOSwgbmV3IE1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvcigpLm1lc3NhZ2UpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgbm90IGZyYWdtZW50ZWQsIGEgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cbiAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyBmcmFnbWVudGVkLCBpdCB3aWxsIHRlcm1pbmF0ZSB3aXRoIGEgZmluIGJpdCBzZXRcbiAgICAgICAgICAgIC8vIGFuZCBhbiBvcGNvZGUgb2YgMCAoY29udGludWF0aW9uKSwgdGhlcmVmb3JlIHdlIGhhbmRsZSB0aGF0IHdoZW5cbiAgICAgICAgICAgIC8vIHBhcnNpbmcgY29udGludWF0aW9uIGZyYW1lcywgbm90IGhlcmUuXG4gICAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLmZpbikge1xuICAgICAgICAgICAgICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQodGhpcy53cywgdGhpcy4jaW5mby5iaW5hcnlUeXBlLCB0aGlzLmNvbnN1bWVGcmFnbWVudHMoKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNleHRlbnNpb25zLmdldCgncGVybWVzc2FnZS1kZWZsYXRlJykuZGVjb21wcmVzcyhcbiAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgdGhpcy4jaW5mby5maW4sXG4gICAgICAgICAgICAgIChlcnJvciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGVycm9yIGluc3RhbmNlb2YgTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yID8gMTAwOSA6IDEwMDdcbiAgICAgICAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgY29kZSwgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy53cml0ZUZyYWdtZW50cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI21heFBheWxvYWRTaXplID4gMCAmJiB0aGlzLiNmcmFnbWVudHNCeXRlcyA+IHRoaXMuI21heFBheWxvYWRTaXplKSB7XG4gICAgICAgICAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlKHRoaXMud3MsIDEwMDksIG5ldyBNZXNzYWdlU2l6ZUV4Y2VlZGVkRXJyb3IoKS5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmZpbikge1xuICAgICAgICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgICAgICAgICAgdGhpcy4jbG9vcCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8uYmluYXJ5VHlwZSwgdGhpcy5jb25zdW1lRnJhZ21lbnRzKCkpXG5cbiAgICAgICAgICAgICAgICB0aGlzLiNsb29wID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cbiAgICAgICAgICAgICAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICB0aGlzLiNsb29wID0gZmFsc2VcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgbiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBCdWZmZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxlZCBjb25zdW1lKCkgYmVmb3JlIGJ1ZmZlcnMgc2F0aWF0ZWQuJylcbiAgICB9IGVsc2UgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIGlmICh0aGlzLiNidWZmZXJzWzBdLmxlbmd0aCA9PT0gbikge1xuICAgICAgdGhpcy4jYnl0ZU9mZnNldCAtPSB0aGlzLiNidWZmZXJzWzBdLmxlbmd0aFxuICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlcnMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKVxuICAgIGxldCBvZmZzZXQgPSAwXG5cbiAgICB3aGlsZSAob2Zmc2V0ICE9PSBuKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy4jYnVmZmVyc1swXVxuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG5leHRcblxuICAgICAgaWYgKGxlbmd0aCArIG9mZnNldCA9PT0gbikge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggKyBvZmZzZXQgPiBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQobmV4dC5zdWJhcnJheSgwLCBuIC0gb2Zmc2V0KSwgb2Zmc2V0KVxuICAgICAgICB0aGlzLiNidWZmZXJzWzBdID0gbmV4dC5zdWJhcnJheShuIC0gb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgb2Zmc2V0ICs9IG5leHQubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jYnl0ZU9mZnNldCAtPSBuXG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICB3cml0ZUZyYWdtZW50cyAoZnJhZ21lbnQpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNtYXhGcmFnbWVudHMgPiAwICYmXG4gICAgICB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID09PSB0aGlzLiNtYXhGcmFnbWVudHNcbiAgICApIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uV2l0aENvZGUodGhpcy53cywgMTAwOCwgJ1RvbyBtYW55IG1lc3NhZ2UgZnJhZ21lbnRzJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMuI2ZyYWdtZW50c0J5dGVzICs9IGZyYWdtZW50Lmxlbmd0aFxuICAgIHRoaXMuI2ZyYWdtZW50cy5wdXNoKGZyYWdtZW50KVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdW1lRnJhZ21lbnRzICgpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB0aGlzLiNmcmFnbWVudHNcblxuICAgIGlmIChmcmFnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLiNmcmFnbWVudHNCeXRlcyA9IDBcbiAgICAgIHJldHVybiBmcmFnbWVudHMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoZnJhZ21lbnRzLCB0aGlzLiNmcmFnbWVudHNCeXRlcylcbiAgICB0aGlzLiNmcmFnbWVudHMgPSBbXVxuICAgIHRoaXMuI2ZyYWdtZW50c0J5dGVzID0gMFxuXG4gICAgcmV0dXJuIG91dHB1dFxuICB9XG5cbiAgcGFyc2VDbG9zZUJvZHkgKGRhdGEpIHtcbiAgICBhc3NlcnQoZGF0YS5sZW5ndGggIT09IDEpXG5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgY29kZVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoID49IDIpIHtcbiAgICAgIC8vIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXNcbiAgICAgIC8vIGRlZmluZWQgYXMgdGhlIHN0YXR1cyBjb2RlIChTZWN0aW9uIDcuNCkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBDbG9zZVxuICAgICAgLy8gY29udHJvbCBmcmFtZSByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb25cbiAgICAgIGNvZGUgPSBkYXRhLnJlYWRVSW50MTZCRSgwKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4geyBjb2RlOiAxMDAyLCByZWFzb246ICdJbnZhbGlkIHN0YXR1cyBjb2RlJywgZXJyb3I6IHRydWUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZWFzb24gPSB1dGY4RGVjb2RlKHJlYXNvbilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IDEwMDcsIHJlYXNvbjogJ0ludmFsaWQgVVRGLTgnLCBlcnJvcjogdHJ1ZSB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZSwgcmVhc29uLCBlcnJvcjogZmFsc2UgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBjb250cm9sIGZyYW1lcy5cbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJvZHlcbiAgICovXG4gIHBhcnNlQ29udHJvbEZyYW1lIChib2R5KSB7XG4gICAgY29uc3QgeyBvcGNvZGUsIHBheWxvYWRMZW5ndGggfSA9IHRoaXMuI2luZm9cblxuICAgIGlmIChvcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBjbG9zZSBmcmFtZSB3aXRoIGEgMS1ieXRlIGJvZHkuJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2luZm8uY2xvc2VJbmZvID0gdGhpcy5wYXJzZUNsb3NlQm9keShib2R5KVxuXG4gICAgICBpZiAodGhpcy4jaW5mby5jbG9zZUluZm8uZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBjb2RlLCByZWFzb24gfSA9IHRoaXMuI2luZm8uY2xvc2VJbmZvXG5cbiAgICAgICAgY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsIGNvZGUsIHJlYXNvbiwgcmVhc29uLmxlbmd0aClcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgcmVhc29uKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMud3Nba1NlbnRDbG9zZV0gIT09IHNlbnRDbG9zZUZyYW1lU3RhdGUuU0VOVCkge1xuICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgIC8vIENsb3NlIGZyYW1lLCB0aGUgZW5kcG9pbnQgTVVTVCBzZW5kIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UuICAoV2hlblxuICAgICAgICAvLyBzZW5kaW5nIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UsIHRoZSBlbmRwb2ludCB0eXBpY2FsbHkgZWNob3MgdGhlXG4gICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgbGV0IGJvZHkgPSBlbXB0eUJ1ZmZlclxuICAgICAgICBpZiAodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSkge1xuICAgICAgICAgIGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICBib2R5LndyaXRlVUludDE2QkUodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSwgMClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9zZUZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoXG4gICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0gPSB0cnVlXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAob3Bjb2RlID09PSBvcGNvZGVzLlBJTkcpIHtcbiAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgIC8vIHJlc3BvbnNlLCB1bmxlc3MgaXQgYWxyZWFkeSByZWNlaXZlZCBhIENsb3NlIGZyYW1lLlxuICAgICAgLy8gQSBQb25nIGZyYW1lIHNlbnQgaW4gcmVzcG9uc2UgdG8gYSBQaW5nIGZyYW1lIG11c3QgaGF2ZSBpZGVudGljYWxcbiAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgIGlmICghdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0pIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgIGlmIChjaGFubmVscy5waW5nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgY2hhbm5lbHMucGluZy5wdWJsaXNoKHtcbiAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcGNvZGUgPT09IG9wY29kZXMuUE9ORykge1xuICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgLy8gdW5pZGlyZWN0aW9uYWwgaGVhcnRiZWF0LiAgQSByZXNwb25zZSB0byBhbiB1bnNvbGljaXRlZCBQb25nIGZyYW1lIGlzXG4gICAgICAvLyBub3QgZXhwZWN0ZWQuXG5cbiAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgIGNoYW5uZWxzLnBvbmcucHVibGlzaCh7XG4gICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBnZXQgY2xvc2luZ0luZm8gKCkge1xuICAgIHJldHVybiB0aGlzLiNpbmZvLmNsb3NlSW5mb1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCeXRlUGFyc2VyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcbmNvbnN0IHsgb3Bjb2Rlcywgc2VuZEhpbnRzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCBGaXhlZFF1ZXVlID0gcmVxdWlyZSgnLi4vLi4vZGlzcGF0Y2hlci9maXhlZC1xdWV1ZScpXG5cbi8qKiBAdHlwZSB7dHlwZW9mIFVpbnQ4QXJyYXl9ICovXG5jb25zdCBGYXN0QnVmZmVyID0gQnVmZmVyW1N5bWJvbC5zcGVjaWVzXVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlbmRRdWV1ZU5vZGVcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTx2b2lkPiB8IG51bGx9IHByb21pc2VcbiAqIEBwcm9wZXJ0eSB7KCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KX0gY2FsbGJhY2tcbiAqIEBwcm9wZXJ0eSB7QnVmZmVyIHwgbnVsbH0gZnJhbWVcbiAqL1xuXG5jbGFzcyBTZW5kUXVldWUge1xuICAvKipcbiAgICogQHR5cGUge0ZpeGVkUXVldWV9XG4gICAqL1xuICAjcXVldWUgPSBuZXcgRml4ZWRRdWV1ZSgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgI3J1bm5pbmcgPSBmYWxzZVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOm5ldCcpLlNvY2tldH0gKi9cbiAgI3NvY2tldFxuXG4gIGNvbnN0cnVjdG9yIChzb2NrZXQpIHtcbiAgICB0aGlzLiNzb2NrZXQgPSBzb2NrZXRcbiAgfVxuXG4gIGFkZCAoaXRlbSwgY2IsIGhpbnQpIHtcbiAgICBpZiAoaGludCAhPT0gc2VuZEhpbnRzLmJsb2IpIHtcbiAgICAgIGNvbnN0IGZyYW1lID0gY3JlYXRlRnJhbWUoaXRlbSwgaGludClcbiAgICAgIGlmICghdGhpcy4jcnVubmluZykge1xuICAgICAgICAvLyBmYXN0LXBhdGhcbiAgICAgICAgdGhpcy4jc29ja2V0LndyaXRlKGZyYW1lLCBjYilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qKiBAdHlwZSB7U2VuZFF1ZXVlTm9kZX0gKi9cbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgICAgICBmcmFtZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3F1ZXVlLnB1c2gobm9kZSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7U2VuZFF1ZXVlTm9kZX0gKi9cbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgcHJvbWlzZTogaXRlbS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIG5vZGUucHJvbWlzZSA9IG51bGxcbiAgICAgICAgbm9kZS5mcmFtZSA9IGNyZWF0ZUZyYW1lKGFiLCBoaW50KVxuICAgICAgfSksXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBmcmFtZTogbnVsbFxuICAgIH1cblxuICAgIHRoaXMuI3F1ZXVlLnB1c2gobm9kZSlcblxuICAgIGlmICghdGhpcy4jcnVubmluZykge1xuICAgICAgdGhpcy4jcnVuKClcbiAgICB9XG4gIH1cblxuICBhc3luYyAjcnVuICgpIHtcbiAgICB0aGlzLiNydW5uaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHF1ZXVlID0gdGhpcy4jcXVldWVcbiAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgIC8vIHdhaXQgcGVuZGluZyBwcm9taXNlXG4gICAgICBpZiAobm9kZS5wcm9taXNlICE9PSBudWxsKSB7XG4gICAgICAgIGF3YWl0IG5vZGUucHJvbWlzZVxuICAgICAgfVxuICAgICAgLy8gd3JpdGVcbiAgICAgIHRoaXMuI3NvY2tldC53cml0ZShub2RlLmZyYW1lLCBub2RlLmNhbGxiYWNrKVxuICAgICAgLy8gY2xlYW51cFxuICAgICAgbm9kZS5jYWxsYmFjayA9IG5vZGUuZnJhbWUgPSBudWxsXG4gICAgfVxuICAgIHRoaXMuI3J1bm5pbmcgPSBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYW1lIChkYXRhLCBoaW50KSB7XG4gIHJldHVybiBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHRvQnVmZmVyKGRhdGEsIGhpbnQpKS5jcmVhdGVGcmFtZShoaW50ID09PSBzZW5kSGludHMuc3RyaW5nID8gb3Bjb2Rlcy5URVhUIDogb3Bjb2Rlcy5CSU5BUlkpXG59XG5cbmZ1bmN0aW9uIHRvQnVmZmVyIChkYXRhLCBoaW50KSB7XG4gIHN3aXRjaCAoaGludCkge1xuICAgIGNhc2Ugc2VuZEhpbnRzLnN0cmluZzpcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKVxuICAgIGNhc2Ugc2VuZEhpbnRzLmFycmF5QnVmZmVyOlxuICAgIGNhc2Ugc2VuZEhpbnRzLmJsb2I6XG4gICAgICByZXR1cm4gbmV3IEZhc3RCdWZmZXIoZGF0YSlcbiAgICBjYXNlIHNlbmRIaW50cy50eXBlZEFycmF5OlxuICAgICAgcmV0dXJuIG5ldyBGYXN0QnVmZmVyKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgU2VuZFF1ZXVlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGEtdXJsJylcbmNvbnN0IHsgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCB7IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsIHN0YXRlcywgc2VudENsb3NlRnJhbWVTdGF0ZSwgc2VuZEhpbnRzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtXZWJTb2NrZXRVUkwsXG4gIGtSZWFkeVN0YXRlLFxuICBrQ29udHJvbGxlcixcbiAga0JpbmFyeVR5cGUsXG4gIGtSZXNwb25zZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXJcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3Qge1xuICBpc0Nvbm5lY3RpbmcsXG4gIGlzRXN0YWJsaXNoZWQsXG4gIGlzQ2xvc2luZyxcbiAgaXNWYWxpZFN1YnByb3RvY29sLFxuICBmaXJlRXZlbnRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uLCBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi8uLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHsgRXJyb3JFdmVudCwgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBTZW5kUXVldWUgfSA9IHJlcXVpcmUoJy4vc2VuZGVyJylcblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLWRlZmluaXRpb25cbmNsYXNzIFdlYlNvY2tldCBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgI2V2ZW50cyA9IHtcbiAgICBvcGVuOiBudWxsLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGNsb3NlOiBudWxsLFxuICAgIG1lc3NhZ2U6IG51bGxcbiAgfVxuXG4gICNidWZmZXJlZEFtb3VudCA9IDBcbiAgI3Byb3RvY29sID0gJydcbiAgI2V4dGVuc2lvbnMgPSAnJ1xuXG4gIC8qKiBAdHlwZSB7U2VuZFF1ZXVlfSAqL1xuICAjc2VuZFF1ZXVlXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSh0aGlzKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ1dlYlNvY2tldCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddKHByb3RvY29scywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsLCBwcmVmaXgsICd1cmwnKVxuICAgIHByb3RvY29scyA9IG9wdGlvbnMucHJvdG9jb2xzXG5cbiAgICAvLyAxLiBMZXQgYmFzZVVSTCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0J3MgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVUkwgPSBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3JkXHUyMDE5cyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgY29uc3QgY2xpZW50ID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdFxuXG4gICAgLy8gMTIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6XG5cbiAgICAvLyAgICAxLiBFc3RhYmxpc2ggYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBnaXZlbiB1cmxSZWNvcmQsIHByb3RvY29scyxcbiAgICAvLyAgICAgICBhbmQgY2xpZW50LlxuICAgIHRoaXNba0NvbnRyb2xsZXJdID0gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihcbiAgICAgIHVybFJlY29yZCxcbiAgICAgIHByb3RvY29scyxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRoaXMsXG4gICAgICAocmVzcG9uc2UsIGV4dGVuc2lvbnMpID0+IHRoaXMuI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkKHJlc3BvbnNlLCBleHRlbnNpb25zKSxcbiAgICAgIG9wdGlvbnNcbiAgICApXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgcmVhZHkgc3RhdGUsIHdoaWNoIGlzIGFcbiAgICAvLyBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4gSW5pdGlhbGx5IGl0IG11c3RcbiAgICAvLyBiZSBDT05ORUNUSU5HICgwKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DT05ORUNUSU5HXG5cbiAgICB0aGlzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5OT1RfU0VOVFxuXG4gICAgLy8gVGhlIGV4dGVuc2lvbnMgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gVGhlIHByb3RvY29sIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCBiaW5hcnkgdHlwZSwgd2hpY2ggaXMgYVxuICAgIC8vIEJpbmFyeVR5cGUuIEluaXRpYWxseSBpdCBtdXN0IGJlIFwiYmxvYlwiLlxuICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlXG4gICAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICAgKi9cbiAgY2xvc2UgKGNvZGUgPSB1bmRlZmluZWQsIHJlYXNvbiA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGNvbnN0IHByZWZpeCA9ICdXZWJTb2NrZXQuY2xvc2UnXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgcHJlZml4LCAnY29kZScsIHsgY2xhbXA6IHRydWUgfSlcbiAgICB9XG5cbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlYXNvbiA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhyZWFzb24sIHByZWZpeCwgJ3JlYXNvbicpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY29kZSBpcyBwcmVzZW50LCBidXQgaXMgbmVpdGhlciBhbiBpbnRlZ2VyIGVxdWFsIHRvIDEwMDAgbm9yIGFuXG4gICAgLy8gICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMzAwMCB0byA0OTk5LCBpbmNsdXNpdmUsIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkQWNjZXNzRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvZGUgIT09IDEwMDAgJiYgKGNvZGUgPCAzMDAwIHx8IGNvZGUgPiA0OTk5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdpbnZhbGlkIGNvZGUnLCAnSW52YWxpZEFjY2Vzc0Vycm9yJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVhc29uQnl0ZUxlbmd0aCA9IDBcblxuICAgIC8vIDIuIElmIHJlYXNvbiBpcyBwcmVzZW50LCB0aGVuIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWFzb25CeXRlcyBiZSB0aGUgcmVzdWx0IG9mIGVuY29kaW5nIHJlYXNvbi5cbiAgICAgIC8vIDIuIElmIHJlYXNvbkJ5dGVzIGlzIGxvbmdlciB0aGFuIDEyMyBieXRlcywgdGhlbiB0aHJvdyBhXG4gICAgICAvLyAgICBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgcmVhc29uQnl0ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlYXNvbilcblxuICAgICAgaWYgKHJlYXNvbkJ5dGVMZW5ndGggPiAxMjMpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgICBgUmVhc29uIG11c3QgYmUgbGVzcyB0aGFuIDEyMyBieXRlczsgcmVjZWl2ZWQgJHtyZWFzb25CeXRlTGVuZ3RofWAsXG4gICAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUnVuIHRoZSBmaXJzdCBtYXRjaGluZyBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24odGhpcywgY29kZSwgcmVhc29uLCByZWFzb25CeXRlTGVuZ3RoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1zZW5kXG4gICAqIEBwYXJhbSB7Tm9kZUpTLlR5cGVkQXJyYXl8QXJyYXlCdWZmZXJ8QmxvYnxzdHJpbmd9IGRhdGFcbiAgICovXG4gIHNlbmQgKGRhdGEpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnV2ViU29ja2V0LnNlbmQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBkYXRhID0gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEoZGF0YSwgcHJlZml4LCAnZGF0YScpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGlzQ29ubmVjdGluZyh0aGlzKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBkYXRhIGlzIGEgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgdGhlIGRhdGEgYXJndW1lbnRcbiAgICAgIC8vIHVzaW5nIGEgdGV4dCBmcmFtZSBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuXG4gICAgICAvLyBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCxcbiAgICAgIC8vIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2VcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhXG4gICAgICAvLyBzdHJpbmcgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZVxuICAgICAgLy8gdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0b1xuICAgICAgLy8gZXhwcmVzcyB0aGUgYXJndW1lbnQgYXMgVVRGLTguXG5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IGxlbmd0aFxuICAgICAgdGhpcy4jc2VuZFF1ZXVlLmFkZChkYXRhLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IGxlbmd0aFxuICAgICAgfSwgc2VuZEhpbnRzLnN0cmluZylcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZFxuICAgICAgLy8gdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgLy8gVGhlIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBkZXNjcmliZWRcbiAgICAgIC8vIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QuIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYW5cbiAgICAgIC8vIEFycmF5QnVmZmVyIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3RcbiAgICAgIC8vIGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIGxlbmd0aCBvZiB0aGVcbiAgICAgIC8vIEFycmF5QnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIHRoaXMuI3NlbmRRdWV1ZS5hZGQoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIH0sIHNlbmRIaW50cy5hcnJheUJ1ZmZlcilcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YVx1MjAxOXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIHRoaXMuI3NlbmRRdWV1ZS5hZGQoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICAgIH0sIHNlbmRIaW50cy50eXBlZEFycmF5KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3RcdTIwMTlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gZGF0YS5zaXplXG4gICAgICB0aGlzLiNzZW5kUXVldWUuYWRkKGRhdGEsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gZGF0YS5zaXplXG4gICAgICB9LCBzZW5kSGludHMuYmxvYilcbiAgICB9XG4gIH1cblxuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHJlYWR5U3RhdGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHJlYWR5IHN0YXRlLlxuICAgIHJldHVybiB0aGlzW2tSZWFkeVN0YXRlXVxuICB9XG5cbiAgZ2V0IGJ1ZmZlcmVkQW1vdW50ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jYnVmZmVyZWRBbW91bnRcbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHVybCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tXZWJTb2NrZXRVUkxdKVxuICB9XG5cbiAgZ2V0IGV4dGVuc2lvbnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNleHRlbnNpb25zXG4gIH1cblxuICBnZXQgcHJvdG9jb2wgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNwcm90b2NvbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy4jZXZlbnRzLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25jbG9zZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5jbG9zZVxuICB9XG5cbiAgc2V0IG9uY2xvc2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5jbG9zZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoaXMuI2V2ZW50cy5jbG9zZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5tZXNzYWdlXG4gIH1cblxuICBzZXQgb25tZXNzYWdlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMubWVzc2FnZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy4jZXZlbnRzLm1lc3NhZ2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBiaW5hcnlUeXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpc1trQmluYXJ5VHlwZV1cbiAgfVxuXG4gIHNldCBiaW5hcnlUeXBlICh0eXBlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHR5cGUgIT09ICdibG9iJyAmJiB0eXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9IHR5cGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICAgKi9cbiAgI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkIChyZXNwb25zZSwgcGFyc2VkRXh0ZW5zaW9ucykge1xuICAgIC8vIHByb2Nlc3NSZXNwb25zZSBpcyBjYWxsZWQgd2hlbiB0aGUgXCJyZXNwb25zZSdzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHdlYlNvY2tldE9wdGlvbnMgPSB0aGlzW2tDb250cm9sbGVyXT8uZGlzcGF0Y2hlcj8ud2ViU29ja2V0T3B0aW9uc1xuICAgIGNvbnN0IG1heEZyYWdtZW50cyA9IHdlYlNvY2tldE9wdGlvbnM/Lm1heEZyYWdtZW50c1xuICAgIGNvbnN0IG1heFBheWxvYWRTaXplID0gd2ViU29ja2V0T3B0aW9ucz8ubWF4UGF5bG9hZFNpemVcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMsIHBhcnNlZEV4dGVuc2lvbnMsIHtcbiAgICAgIG1heEZyYWdtZW50cyxcbiAgICAgIG1heFBheWxvYWRTaXplXG4gICAgfSlcbiAgICBwYXJzZXIub24oJ2RyYWluJywgb25QYXJzZXJEcmFpbilcbiAgICBwYXJzZXIub24oJ2Vycm9yJywgb25QYXJzZXJFcnJvci5iaW5kKHRoaXMpKVxuXG4gICAgcmVzcG9uc2Uuc29ja2V0LndzID0gdGhpc1xuICAgIHRoaXNba0J5dGVQYXJzZXJdID0gcGFyc2VyXG5cbiAgICB0aGlzLiNzZW5kUXVldWUgPSBuZXcgU2VuZFF1ZXVlKHJlc3BvbnNlLnNvY2tldClcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZVx1MjAxOXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIGFyZ3VtZW50KSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcG9zYWwgbWFkZSBpbiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3dlYnNvY2tldHMvaXNzdWVzLzQyXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAncHJvdG9jb2xzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbmV3IEFycmF5KDApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQpXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdChWKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJvdG9jb2xzOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXShWKSB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBcnJheUJ1ZmZlcihWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxuZnVuY3Rpb24gb25QYXJzZXJEcmFpbiAoKSB7XG4gIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQucmVzdW1lKClcbn1cblxuZnVuY3Rpb24gb25QYXJzZXJFcnJvciAoZXJyKSB7XG4gIGxldCBtZXNzYWdlXG4gIGxldCBjb2RlXG5cbiAgaWYgKGVyciBpbnN0YW5jZW9mIENsb3NlRXZlbnQpIHtcbiAgICBtZXNzYWdlID0gZXJyLnJlYXNvblxuICAgIGNvZGUgPSBlcnIuY29kZVxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZVxuICB9XG5cbiAgZmlyZUV2ZW50KCdlcnJvcicsIHRoaXMsICgpID0+IG5ldyBFcnJvckV2ZW50KCdlcnJvcicsIHsgZXJyb3I6IGVyciwgbWVzc2FnZSB9KSlcblxuICBjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24odGhpcywgY29kZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdlYlNvY2tldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSB2YWxpZCBMYXN0RXZlbnRJZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRMYXN0RXZlbnRJZCAodmFsdWUpIHtcbiAgLy8gTGFzdEV2ZW50SWQgc2hvdWxkIG5vdCBjb250YWluIFUrMDAwMCBOVUxMXG4gIHJldHVybiB2YWx1ZS5pbmRleE9mKCdcXHUwMDAwJykgPT09IC0xXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGJhc2UgMTAgZGlnaXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0FTQ0lJTnVtYmVyICh2YWx1ZSkge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh2YWx1ZS5jaGFyQ29kZUF0KGkpIDwgMHgzMCB8fCB2YWx1ZS5jaGFyQ29kZUF0KGkpID4gMHgzOSkgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzI2NjRcbmZ1bmN0aW9uIGRlbGF5IChtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKS51bnJlZigpXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1ZhbGlkTGFzdEV2ZW50SWQsXG4gIGlzQVNDSUlOdW1iZXIsXG4gIGRlbGF5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBpc0FTQ0lJTnVtYmVyLCBpc1ZhbGlkTGFzdEV2ZW50SWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8qKlxuICogQHR5cGUge251bWJlcltdfSBCT01cbiAqL1xuY29uc3QgQk9NID0gWzB4RUYsIDB4QkIsIDB4QkZdXG4vKipcbiAqIEB0eXBlIHsxMH0gTEZcbiAqL1xuY29uc3QgTEYgPSAweDBBXG4vKipcbiAqIEB0eXBlIHsxM30gQ1JcbiAqL1xuY29uc3QgQ1IgPSAweDBEXG4vKipcbiAqIEB0eXBlIHs1OH0gQ09MT05cbiAqL1xuY29uc3QgQ09MT04gPSAweDNBXG4vKipcbiAqIEB0eXBlIHszMn0gU1BBQ0VcbiAqL1xuY29uc3QgU1BBQ0UgPSAweDIwXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRXZlbnRTb3VyY2VTdHJlYW1FdmVudFxuICogQHR5cGUge29iamVjdH1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXZlbnRdIFRoZSBldmVudCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhXSBUaGUgZGF0YSBvZiB0aGUgbWVzc2FnZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaWRdIEEgdW5pcXVlIElEIGZvciB0aGUgZXZlbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JldHJ5XSBUaGUgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIGV2ZW50U291cmNlU2V0dGluZ3NcbiAqIEB0eXBlIHtvYmplY3R9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFzdEV2ZW50SWQgVGhlIGxhc3QgZXZlbnQgSUQgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9yaWdpbiBUaGUgb3JpZ2luIG9mIHRoZSBldmVudCBzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVjb25uZWN0aW9uVGltZSBUaGUgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuXG5jbGFzcyBFdmVudFNvdXJjZVN0cmVhbSBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBAdHlwZSB7ZXZlbnRTb3VyY2VTZXR0aW5nc31cbiAgICovXG4gIHN0YXRlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBMZWFkaW5nIGJ5dGUtb3JkZXItbWFyayBjaGVjay5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBjaGVja0JPTSA9IHRydWVcblxuICAvKipcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBjcmxmQ2hlY2sgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGV2ZW50RW5kQ2hlY2sgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7QnVmZmVyfVxuICAgKi9cbiAgYnVmZmVyID0gbnVsbFxuXG4gIHBvcyA9IDBcblxuICBldmVudCA9IHtcbiAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICBpZDogdW5kZWZpbmVkLFxuICAgIHJldHJ5OiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2V2ZW50U291cmNlU2V0dGluZ3N9IG9wdGlvbnMuZXZlbnRTb3VyY2VTZXR0aW5nc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5wdXNoXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEVuYWJsZSBvYmplY3QgbW9kZSBhcyBFdmVudFNvdXJjZVN0cmVhbSBlbWl0cyBvYmplY3RzIG9mIHNoYXBlXG4gICAgLy8gRXZlbnRTb3VyY2VTdHJlYW1FdmVudFxuICAgIG9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlID0gdHJ1ZVxuXG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIHRoaXMuc3RhdGUgPSBvcHRpb25zLmV2ZW50U291cmNlU2V0dGluZ3MgfHwge31cbiAgICBpZiAob3B0aW9ucy5wdXNoKSB7XG4gICAgICB0aGlzLnB1c2ggPSBvcHRpb25zLnB1c2hcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfZW5jb2RpbmdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfdHJhbnNmb3JtIChjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgIGlmIChjaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhY2hlIHRoZSBjaHVuayBpbiB0aGUgYnVmZmVyLCBhcyB0aGUgZGF0YSBtaWdodCBub3QgYmUgY29tcGxldGUgd2hpbGVcbiAgICAvLyBwcm9jZXNzaW5nIGl0XG4gICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgaWYgdGhlcmUgaXMgYSBtb3JlIHBlcmZvcm1hbnQgd2F5IHRvIGhhbmRsZVxuICAgIC8vIGluY29taW5nIGNodW5rc1xuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzI2MzBcbiAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWZmZXIsIGNodW5rXSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWZmZXIgPSBjaHVua1xuICAgIH1cblxuICAgIC8vIFN0cmlwIGxlYWRpbmcgYnl0ZS1vcmRlci1tYXJrIGlmIHdlIG9wZW5lZCB0aGUgc3RyZWFtIGFuZCBzdGFydGVkXG4gICAgLy8gdGhlIHByb2Nlc3Npbmcgb2YgdGhlIGluY29taW5nIGRhdGFcbiAgICBpZiAodGhpcy5jaGVja0JPTSkge1xuICAgICAgc3dpdGNoICh0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBCT01cbiAgICAgICAgICBpZiAodGhpcy5idWZmZXJbMF0gPT09IEJPTVswXSkge1xuICAgICAgICAgICAgLy8gSWYgaXQgaXMsIHdlIG5lZWQgdG8gd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgIC8vIEJPTSBhbnltb3JlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG5cbiAgICAgICAgICAvLyBUaGUgYnVmZmVyIG9ubHkgY29udGFpbnMgb25lIGJ5dGUgc28gd2UgbmVlZCB0byB3YWl0IGZvciBtb3JlIGRhdGFcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlyc3QgdHdvIGJ5dGVzIGFyZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgdHdvIGJ5dGVzXG4gICAgICAgICAgLy8gb2YgdGhlIEJPTVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzBdID09PSBCT01bMF0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzFdID09PSBCT01bMV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIG1vcmUgZGF0YSwgYmVjYXVzZSB0aGUgdGhpcmQgYnl0ZVxuICAgICAgICAgICAgLy8gaXMgbmVlZGVkIHRvIGRldGVybWluZSBpZiBpdCBpcyB0aGUgQk9NIG9yIG5vdFxuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgIC8vIEJPTSBhbnltb3JlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaXJzdCB0aHJlZSBieXRlcyBhcmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHRocmVlXG4gICAgICAgICAgLy8gYnl0ZXMgb2YgdGhlIEJPTVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzBdID09PSBCT01bMF0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzFdID09PSBCT01bMV0gJiZcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyWzJdID09PSBCT01bMl1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzLCB3ZSBjYW4gZHJvcCB0aGUgYnVmZmVyZWQgZGF0YSwgYXMgaXQgaXMgb25seSB0aGUgQk9NXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygwKVxuICAgICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgICAgLy8gQk9NIGFueW1vcmVcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCT00gPSBmYWxzZVxuXG4gICAgICAgICAgICAvLyBBd2FpdCBtb3JlIGRhdGFcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgdGhlIEJPTSwgd2UgY2FuIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIGRhdGFcbiAgICAgICAgICB0aGlzLmNoZWNrQk9NID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgbG9uZ2VyIHRoYW4gMyBieXRlcywgc28gd2UgY2FuIGRyb3AgdGhlIEJPTSBpZiBpdCBpc1xuICAgICAgICAgIC8vIHByZXNlbnRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclswXSA9PT0gQk9NWzBdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsxXSA9PT0gQk9NWzFdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsyXSA9PT0gQk9NWzJdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIEJPTSBmcm9tIHRoZSBidWZmZXJcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkoMylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZXQgdGhlIGNoZWNrQk9NIGZsYWcgdG8gZmFsc2UgYXMgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgdGhlXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBsaW5lIGVuZGVkIHdpdGggYW4gZW5kLW9mLWxpbmUsIHdlIG5lZWQgdG8gY2hlY2tcbiAgICAgIC8vIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhbHNvIGFuIGVuZC1vZi1saW5lLlxuICAgICAgaWYgKHRoaXMuZXZlbnRFbmRDaGVjaykge1xuICAgICAgICAvLyBJZiB0aGUgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGFuIGVuZC1vZi1saW5lLCB0aGVuIHRoZSBldmVudFxuICAgICAgICAvLyBpcyBmaW5pc2hlZCBhbmQgd2UgY2FuIHByb2Nlc3MgaXRcblxuICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgbGluZSBlbmRlZCB3aXRoIGEgY2FycmlhZ2UgcmV0dXJuLCB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGxpbmUgZmVlZCBhbmQgcmVtb3ZlIGl0XG4gICAgICAgIC8vIGZyb20gdGhlIGJ1ZmZlci5cbiAgICAgICAgaWYgKHRoaXMuY3JsZkNoZWNrKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGEgbGluZSBmZWVkLCB3ZSBjYW4gcmVtb3ZlIGl0XG4gICAgICAgICAgLy8gZnJvbSB0aGUgYnVmZmVyIGFuZCByZXNldCB0aGUgY3JsZkNoZWNrIGZsYWdcbiAgICAgICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBMRikge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyArIDEpXG4gICAgICAgICAgICB0aGlzLnBvcyA9IDBcbiAgICAgICAgICAgIHRoaXMuY3JsZkNoZWNrID0gZmFsc2VcblxuICAgICAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgbGluZSBmZWVkIGlzIG5vdCB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAgICAgLy8gZXZlbnQuIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGFuXG4gICAgICAgICAgICAvLyBlbmQtb2YtbGluZSBjaGFyYWN0ZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBldmVudCBpc1xuICAgICAgICAgICAgLy8gZmluaXNoZWQuIFdlIHNpbXBseSBjb250aW51ZSB0aGUgbG9vcCB0byBjaGVjayB0aGUgbmV4dFxuICAgICAgICAgICAgLy8gY2hhcmFjdGVyLlxuXG4gICAgICAgICAgICAvLyBBcyB3ZSByZW1vdmVkIHRoZSBsaW5lIGZlZWQgZnJvbSB0aGUgYnVmZmVyIGFuZCBzZXQgdGhlXG4gICAgICAgICAgICAvLyBjcmxmQ2hlY2sgZmxhZyB0byBmYWxzZSwgd2UgYmFzaWNhbGx5IGRvbid0IG1ha2UgYW55XG4gICAgICAgICAgICAvLyBkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgbGluZSBmZWVkIGFuZCBhIGNhcnJpYWdlIHJldHVybi5cbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3JsZkNoZWNrID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IExGIHx8IHRoaXMuYnVmZmVyW3RoaXMucG9zXSA9PT0gQ1IpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgYSBjYXJyaWFnZSByZXR1cm4sIHdlIG5lZWQgdG9cbiAgICAgICAgICAvLyBzZXQgdGhlIGNybGZDaGVjayBmbGFnIHRvIHRydWUsIGFzIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gICAgICAgICAgLy8gbmV4dCBjaGFyYWN0ZXIgaXMgYSBsaW5lIGZlZWQgc28gd2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuICAgICAgICAgIC8vIGJ1ZmZlclxuICAgICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgICAgICB0aGlzLmNybGZDaGVjayA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zICsgMSlcbiAgICAgICAgICB0aGlzLnBvcyA9IDBcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmV2ZW50LmRhdGEgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmV2ZW50LmV2ZW50IHx8IHRoaXMuZXZlbnQuaWQgfHwgdGhpcy5ldmVudC5yZXRyeSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnQodGhpcy5ldmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jbGVhckV2ZW50KClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBub3QgYW4gZW5kLW9mLWxpbmUsIHRoZW4gdGhlIGV2ZW50XG4gICAgICAgIC8vIGlzIG5vdCBmaW5pc2hlZCBhbmQgd2UgaGF2ZSB0byByZXNldCB0aGUgZXZlbnRFbmRDaGVjayBmbGFnXG4gICAgICAgIHRoaXMuZXZlbnRFbmRDaGVjayA9IGZhbHNlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhbiBlbmQtb2YtbGluZSwgd2UgY2FuIHByb2Nlc3MgdGhlXG4gICAgICAvLyBsaW5lXG4gICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBMRiB8fCB0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGNhcnJpYWdlIHJldHVybiwgd2UgbmVlZCB0b1xuICAgICAgICAvLyBzZXQgdGhlIGNybGZDaGVjayBmbGFnIHRvIHRydWUsIGFzIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gICAgICAgIC8vIG5leHQgY2hhcmFjdGVyIGlzIGEgbGluZSBmZWVkXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgICAgdGhpcy5jcmxmQ2hlY2sgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBhbnkgY2FzZSwgd2UgY2FuIHByb2Nlc3MgdGhlIGxpbmUgYXMgd2UgcmVhY2hlZCBhblxuICAgICAgICAvLyBlbmQtb2YtbGluZSBjaGFyYWN0ZXJcbiAgICAgICAgdGhpcy5wYXJzZUxpbmUodGhpcy5idWZmZXIuc3ViYXJyYXkoMCwgdGhpcy5wb3MpLCB0aGlzLmV2ZW50KVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgcHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MgKyAxKVxuICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24gYXMgd2UgcmVtb3ZlZCB0aGUgcHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgYnVmZmVyXG4gICAgICAgIHRoaXMucG9zID0gMFxuICAgICAgICAvLyBBIGxpbmUgd2FzIHByb2Nlc3NlZCBhbmQgdGhpcyBjb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBldmVudC4gV2UgbmVlZFxuICAgICAgICAvLyB0byBjaGVjayBpZiB0aGUgbmV4dCBsaW5lIGlzIGVtcHR5IHRvIGRldGVybWluZSBpZiB0aGUgZXZlbnQgaXNcbiAgICAgICAgLy8gZmluaXNoZWQuXG4gICAgICAgIHRoaXMuZXZlbnRFbmRDaGVjayA9IHRydWVcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MrK1xuICAgIH1cblxuICAgIGNhbGxiYWNrKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gbGluZVxuICAgKiBAcGFyYW0ge0V2ZW50U3RyZWFtRXZlbnR9IGV2ZW50XG4gICAqL1xuICBwYXJzZUxpbmUgKGxpbmUsIGV2ZW50KSB7XG4gICAgLy8gSWYgdGhlIGxpbmUgaXMgZW1wdHkgKGEgYmxhbmsgbGluZSlcbiAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQsIGFzIGRlZmluZWQgYmVsb3cuXG4gICAgLy8gVGhpcyB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIF90cmFuc2Zvcm0gbWV0aG9kXG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbGluZSBzdGFydHMgd2l0aCBhIFUrMDAzQSBDT0xPTiBjaGFyYWN0ZXIgKDopXG4gICAgLy8gSWdub3JlIHRoZSBsaW5lLlxuICAgIGNvbnN0IGNvbG9uUG9zaXRpb24gPSBsaW5lLmluZGV4T2YoQ09MT04pXG4gICAgaWYgKGNvbG9uUG9zaXRpb24gPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBmaWVsZCA9ICcnXG4gICAgbGV0IHZhbHVlID0gJydcblxuICAgIC8vIElmIHRoZSBsaW5lIGNvbnRhaW5zIGEgVSswMDNBIENPTE9OIGNoYXJhY3RlciAoOilcbiAgICBpZiAoY29sb25Qb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgIC8vIENvbGxlY3QgdGhlIGNoYXJhY3RlcnMgb24gdGhlIGxpbmUgYmVmb3JlIHRoZSBmaXJzdCBVKzAwM0EgQ09MT05cbiAgICAgIC8vIGNoYXJhY3RlciAoOiksIGFuZCBsZXQgZmllbGQgYmUgdGhhdCBzdHJpbmcuXG4gICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSBpZiB0aGVyZSBpcyBhIG1vcmUgcGVyZm9ybWFudCB3YXkgdG8gZXh0cmFjdCB0aGVcbiAgICAgIC8vIGZpZWxkXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yNjMwXG4gICAgICBmaWVsZCA9IGxpbmUuc3ViYXJyYXkoMCwgY29sb25Qb3NpdGlvbikudG9TdHJpbmcoJ3V0ZjgnKVxuXG4gICAgICAvLyBDb2xsZWN0IHRoZSBjaGFyYWN0ZXJzIG9uIHRoZSBsaW5lIGFmdGVyIHRoZSBmaXJzdCBVKzAwM0EgQ09MT05cbiAgICAgIC8vIGNoYXJhY3RlciAoOiksIGFuZCBsZXQgdmFsdWUgYmUgdGhhdCBzdHJpbmcuXG4gICAgICAvLyBJZiB2YWx1ZSBzdGFydHMgd2l0aCBhIFUrMDAyMCBTUEFDRSBjaGFyYWN0ZXIsIHJlbW92ZSBpdCBmcm9tIHZhbHVlLlxuICAgICAgbGV0IHZhbHVlU3RhcnQgPSBjb2xvblBvc2l0aW9uICsgMVxuICAgICAgaWYgKGxpbmVbdmFsdWVTdGFydF0gPT09IFNQQUNFKSB7XG4gICAgICAgICsrdmFsdWVTdGFydFxuICAgICAgfVxuICAgICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgaWYgdGhlcmUgaXMgYSBtb3JlIHBlcmZvcm1hbnQgd2F5IHRvIGV4dHJhY3QgdGhlXG4gICAgICAvLyB2YWx1ZVxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjYzMFxuICAgICAgdmFsdWUgPSBsaW5lLnN1YmFycmF5KHZhbHVlU3RhcnQpLnRvU3RyaW5nKCd1dGY4JylcblxuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgc3RyaW5nIGlzIG5vdCBlbXB0eSBidXQgZG9lcyBub3QgY29udGFpbiBhIFUrMDAzQSBDT0xPTlxuICAgICAgLy8gY2hhcmFjdGVyICg6KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcm9jZXNzIHRoZSBmaWVsZCB1c2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGJlbG93LCB1c2luZyB0aGUgd2hvbGVcbiAgICAgIC8vIGxpbmUgYXMgdGhlIGZpZWxkIG5hbWUsIGFuZCB0aGUgZW1wdHkgc3RyaW5nIGFzIHRoZSBmaWVsZCB2YWx1ZS5cbiAgICAgIGZpZWxkID0gbGluZS50b1N0cmluZygndXRmOCcpXG4gICAgICB2YWx1ZSA9ICcnXG4gICAgfVxuXG4gICAgLy8gTW9kaWZ5IHRoZSBldmVudCB3aXRoIHRoZSBmaWVsZCBuYW1lIGFuZCB2YWx1ZS4gVGhlIHZhbHVlIGlzIGFsc29cbiAgICAvLyBkZWNvZGVkIGFzIFVURi04XG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgIGlmIChldmVudFtmaWVsZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnRbZmllbGRdICs9IGBcXG4ke3ZhbHVlfWBcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmV0cnknOlxuICAgICAgICBpZiAoaXNBU0NJSU51bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICBldmVudFtmaWVsZF0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdpZCc6XG4gICAgICAgIGlmIChpc1ZhbGlkTGFzdEV2ZW50SWQodmFsdWUpKSB7XG4gICAgICAgICAgZXZlbnRbZmllbGRdID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZXZlbnQnOlxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFNvdXJjZVN0cmVhbUV2ZW50fSBldmVudFxuICAgKi9cbiAgcHJvY2Vzc0V2ZW50IChldmVudCkge1xuICAgIGlmIChldmVudC5yZXRyeSAmJiBpc0FTQ0lJTnVtYmVyKGV2ZW50LnJldHJ5KSkge1xuICAgICAgdGhpcy5zdGF0ZS5yZWNvbm5lY3Rpb25UaW1lID0gcGFyc2VJbnQoZXZlbnQucmV0cnksIDEwKVxuICAgIH1cblxuICAgIGlmIChldmVudC5pZCAmJiBpc1ZhbGlkTGFzdEV2ZW50SWQoZXZlbnQuaWQpKSB7XG4gICAgICB0aGlzLnN0YXRlLmxhc3RFdmVudElkID0gZXZlbnQuaWRcbiAgICB9XG5cbiAgICAvLyBvbmx5IGRpc3BhdGNoIGV2ZW50LCB3aGVuIGRhdGEgaXMgcHJvdmlkZWRcbiAgICBpZiAoZXZlbnQuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2goe1xuICAgICAgICB0eXBlOiBldmVudC5ldmVudCB8fCAnbWVzc2FnZScsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBkYXRhOiBldmVudC5kYXRhLFxuICAgICAgICAgIGxhc3RFdmVudElkOiB0aGlzLnN0YXRlLmxhc3RFdmVudElkLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5zdGF0ZS5vcmlnaW5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjbGVhckV2ZW50ICgpIHtcbiAgICB0aGlzLmV2ZW50ID0ge1xuICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICByZXRyeTogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFNvdXJjZVN0cmVhbVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaCcpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBFdmVudFNvdXJjZVN0cmVhbSB9ID0gcmVxdWlyZSgnLi9ldmVudHNvdXJjZS1zdHJlYW0nKVxuY29uc3QgeyBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhLXVybCcpXG5jb25zdCB7IGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQgfSA9IHJlcXVpcmUoJy4uL3dlYnNvY2tldC9ldmVudHMnKVxuY29uc3QgeyBpc05ldHdvcmtFcnJvciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBkZWxheSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vKipcbiAqIEEgcmVjb25uZWN0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBtdXN0IGluaXRpYWxseSBiZSBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLFxuICogcHJvYmFibHkgaW4gdGhlIHJlZ2lvbiBvZiBhIGZldyBzZWNvbmRzLlxuICpcbiAqIEluIENvbXBhcmlzb246XG4gKiAtIENocm9tZSB1c2VzIDMwMDBtcy5cbiAqIC0gRGVubyB1c2VzIDUwMDBtcy5cbiAqXG4gKiBAdHlwZSB7MzAwMH1cbiAqL1xuY29uc3QgZGVmYXVsdFJlY29ubmVjdGlvblRpbWUgPSAzMDAwXG5cbi8qKlxuICogVGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLlxuICogQGVudW1cbiAqIEByZWFkb25seVxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNkb20tZXZlbnRzb3VyY2UtcmVhZHlzdGF0ZS1kZXZcbiAqL1xuXG4vKipcbiAqIFRoZSBjb25uZWN0aW9uIGhhcyBub3QgeWV0IGJlZW4gZXN0YWJsaXNoZWQsIG9yIGl0IHdhcyBjbG9zZWQgYW5kIHRoZSB1c2VyXG4gKiBhZ2VudCBpcyByZWNvbm5lY3RpbmcuXG4gKiBAdHlwZSB7MH1cbiAqL1xuY29uc3QgQ09OTkVDVElORyA9IDBcblxuLyoqXG4gKiBUaGUgdXNlciBhZ2VudCBoYXMgYW4gb3BlbiBjb25uZWN0aW9uIGFuZCBpcyBkaXNwYXRjaGluZyBldmVudHMgYXMgaXRcbiAqIHJlY2VpdmVzIHRoZW0uXG4gKiBAdHlwZSB7MX1cbiAqL1xuY29uc3QgT1BFTiA9IDFcblxuLyoqXG4gKiBUaGUgY29ubmVjdGlvbiBpcyBub3Qgb3BlbiwgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCB0cnlpbmcgdG8gcmVjb25uZWN0LlxuICogQHR5cGUgezJ9XG4gKi9cbmNvbnN0IENMT1NFRCA9IDJcblxuLyoqXG4gKiBSZXF1ZXN0cyBmb3IgdGhlIGVsZW1lbnQgd2lsbCBoYXZlIHRoZWlyIG1vZGUgc2V0IHRvIFwiY29yc1wiIGFuZCB0aGVpciBjcmVkZW50aWFscyBtb2RlIHNldCB0byBcInNhbWUtb3JpZ2luXCIuXG4gKiBAdHlwZSB7J2Fub255bW91cyd9XG4gKi9cbmNvbnN0IEFOT05ZTU9VUyA9ICdhbm9ueW1vdXMnXG5cbi8qKlxuICogUmVxdWVzdHMgZm9yIHRoZSBlbGVtZW50IHdpbGwgaGF2ZSB0aGVpciBtb2RlIHNldCB0byBcImNvcnNcIiBhbmQgdGhlaXIgY3JlZGVudGlhbHMgbW9kZSBzZXQgdG8gXCJpbmNsdWRlXCIuXG4gKiBAdHlwZSB7J3VzZS1jcmVkZW50aWFscyd9XG4gKi9cbmNvbnN0IFVTRV9DUkVERU5USUFMUyA9ICd1c2UtY3JlZGVudGlhbHMnXG5cbi8qKlxuICogVGhlIEV2ZW50U291cmNlIGludGVyZmFjZSBpcyB1c2VkIHRvIHJlY2VpdmUgc2VydmVyLXNlbnQgZXZlbnRzLiBJdFxuICogY29ubmVjdHMgdG8gYSBzZXJ2ZXIgb3ZlciBIVFRQIGFuZCByZWNlaXZlcyBldmVudHMgaW4gdGV4dC9ldmVudC1zdHJlYW1cbiAqIGZvcm1hdCB3aXRob3V0IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uXG4gKiBAZXh0ZW5kcyB7RXZlbnRUYXJnZXR9XG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI3NlcnZlci1zZW50LWV2ZW50c1xuICogQGFwaSBwdWJsaWNcbiAqL1xuY2xhc3MgRXZlbnRTb3VyY2UgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gICNldmVudHMgPSB7XG4gICAgb3BlbjogbnVsbCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsXG4gIH1cblxuICAjdXJsID0gbnVsbFxuICAjd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcblxuICAjcmVhZHlTdGF0ZSA9IENPTk5FQ1RJTkdcblxuICAjcmVxdWVzdCA9IG51bGxcbiAgI2NvbnRyb2xsZXIgPSBudWxsXG5cbiAgI2Rpc3BhdGNoZXJcblxuICAvKipcbiAgICogQHR5cGUge2ltcG9ydCgnLi9ldmVudHNvdXJjZS1zdHJlYW0nKS5ldmVudFNvdXJjZVNldHRpbmdzfVxuICAgKi9cbiAgI3N0YXRlXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRXZlbnRTb3VyY2Ugb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7RXZlbnRTb3VyY2VJbml0fSBbZXZlbnRTb3VyY2VJbml0RGljdF1cbiAgICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCN0aGUtZXZlbnRzb3VyY2UtaW50ZXJmYWNlXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCBldmVudFNvdXJjZUluaXREaWN0ID0ge30pIHtcbiAgICAvLyAxLiBMZXQgZXYgYmUgYSBuZXcgRXZlbnRTb3VyY2Ugb2JqZWN0LlxuICAgIHN1cGVyKClcblxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnRXZlbnRTb3VyY2UgY29uc3RydWN0b3InXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBpZiAoIWV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgZXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnRXZlbnRTb3VyY2UgaXMgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICBjb2RlOiAnVU5ESUNJLUVTJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsLCBwcmVmaXgsICd1cmwnKVxuICAgIGV2ZW50U291cmNlSW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5FdmVudFNvdXJjZUluaXREaWN0KGV2ZW50U291cmNlSW5pdERpY3QsIHByZWZpeCwgJ2V2ZW50U291cmNlSW5pdERpY3QnKVxuXG4gICAgdGhpcy4jZGlzcGF0Y2hlciA9IGV2ZW50U291cmNlSW5pdERpY3QuZGlzcGF0Y2hlclxuICAgIHRoaXMuI3N0YXRlID0ge1xuICAgICAgbGFzdEV2ZW50SWQ6ICcnLFxuICAgICAgcmVjb25uZWN0aW9uVGltZTogZGVmYXVsdFJlY29ubmVjdGlvblRpbWVcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgc2V0dGluZ3MgYmUgZXYncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIGNvbnN0IHNldHRpbmdzID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdFxuXG4gICAgbGV0IHVybFJlY29yZFxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIDMuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBlbmNvZGluZy1wYXJzaW5nIGEgVVJMIGdpdmVuIHVybCwgcmVsYXRpdmUgdG8gc2V0dGluZ3MuXG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgc2V0dGluZ3Muc2V0dGluZ3NPYmplY3QuYmFzZVVybClcbiAgICAgIHRoaXMuI3N0YXRlLm9yaWdpbiA9IHVybFJlY29yZC5vcmlnaW5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyA0LiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNS4gU2V0IGV2J3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzLiN1cmwgPSB1cmxSZWNvcmQuaHJlZlxuXG4gICAgLy8gNi4gTGV0IGNvcnNBdHRyaWJ1dGVTdGF0ZSBiZSBBbm9ueW1vdXMuXG4gICAgbGV0IGNvcnNBdHRyaWJ1dGVTdGF0ZSA9IEFOT05ZTU9VU1xuXG4gICAgLy8gNy4gSWYgdGhlIHZhbHVlIG9mIGV2ZW50U291cmNlSW5pdERpY3QncyB3aXRoQ3JlZGVudGlhbHMgbWVtYmVyIGlzIHRydWUsXG4gICAgLy8gdGhlbiBzZXQgY29yc0F0dHJpYnV0ZVN0YXRlIHRvIFVzZSBDcmVkZW50aWFscyBhbmQgc2V0IGV2J3NcbiAgICAvLyB3aXRoQ3JlZGVudGlhbHMgYXR0cmlidXRlIHRvIHRydWUuXG4gICAgaWYgKGV2ZW50U291cmNlSW5pdERpY3Qud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICBjb3JzQXR0cmlidXRlU3RhdGUgPSBVU0VfQ1JFREVOVElBTFNcbiAgICAgIHRoaXMuI3dpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9XG5cbiAgICAvLyA4LiBMZXQgcmVxdWVzdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcG90ZW50aWFsLUNPUlMgcmVxdWVzdCBnaXZlblxuICAgIC8vIHVybFJlY29yZCwgdGhlIGVtcHR5IHN0cmluZywgYW5kIGNvcnNBdHRyaWJ1dGVTdGF0ZS5cbiAgICBjb25zdCBpbml0UmVxdWVzdCA9IHtcbiAgICAgIHJlZGlyZWN0OiAnZm9sbG93JyxcbiAgICAgIGtlZXBhbGl2ZTogdHJ1ZSxcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdXJscy1hbmQtZmV0Y2hpbmcuaHRtbCNjb3JzLXNldHRpbmdzLWF0dHJpYnV0ZXNcbiAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICAgIGNyZWRlbnRpYWxzOiBjb3JzQXR0cmlidXRlU3RhdGUgPT09ICdhbm9ueW1vdXMnXG4gICAgICAgID8gJ3NhbWUtb3JpZ2luJ1xuICAgICAgICA6ICdvbWl0JyxcbiAgICAgIHJlZmVycmVyOiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gOS4gU2V0IHJlcXVlc3QncyBjbGllbnQgdG8gc2V0dGluZ3MuXG4gICAgaW5pdFJlcXVlc3QuY2xpZW50ID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdFxuXG4gICAgLy8gMTAuIFVzZXIgYWdlbnRzIG1heSBzZXQgKGBBY2NlcHRgLCBgdGV4dC9ldmVudC1zdHJlYW1gKSBpbiByZXF1ZXN0J3MgaGVhZGVyIGxpc3QuXG4gICAgaW5pdFJlcXVlc3QuaGVhZGVyc0xpc3QgPSBbWydhY2NlcHQnLCB7IG5hbWU6ICdhY2NlcHQnLCB2YWx1ZTogJ3RleHQvZXZlbnQtc3RyZWFtJyB9XV1cblxuICAgIC8vIDExLiBTZXQgcmVxdWVzdCdzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICAgIGluaXRSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuXG4gICAgLy8gMTIuIFNldCByZXF1ZXN0J3MgaW5pdGlhdG9yIHR5cGUgdG8gXCJvdGhlclwiLlxuICAgIGluaXRSZXF1ZXN0LmluaXRpYXRvciA9ICdvdGhlcidcblxuICAgIGluaXRSZXF1ZXN0LnVybExpc3QgPSBbbmV3IFVSTCh0aGlzLiN1cmwpXVxuXG4gICAgLy8gMTMuIFNldCBldidzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzLiNyZXF1ZXN0ID0gbWFrZVJlcXVlc3QoaW5pdFJlcXVlc3QpXG5cbiAgICB0aGlzLiNjb25uZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGlzIEV2ZW50U291cmNlIG9iamVjdCdzIGNvbm5lY3Rpb24uIEl0IGNhbiBoYXZlIHRoZVxuICAgKiB2YWx1ZXMgZGVzY3JpYmVkIGJlbG93LlxuICAgKiBAcmV0dXJucyB7MHwxfDJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHJldHVybiB0aGlzLiNyZWFkeVN0YXRlXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgVVJMIHByb3ZpZGluZyB0aGUgZXZlbnQgc3RyZWFtLlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldCB1cmwgKCkge1xuICAgIHJldHVybiB0aGlzLiN1cmxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIEV2ZW50U291cmNlIG9iamVjdCB3YXNcbiAgICogaW5zdGFudGlhdGVkIHdpdGggQ09SUyBjcmVkZW50aWFscyBzZXQgKHRydWUpLCBvciBub3QgKGZhbHNlLCB0aGUgZGVmYXVsdCkuXG4gICAqL1xuICBnZXQgd2l0aENyZWRlbnRpYWxzICgpIHtcbiAgICByZXR1cm4gdGhpcy4jd2l0aENyZWRlbnRpYWxzXG4gIH1cblxuICAjY29ubmVjdCAoKSB7XG4gICAgaWYgKHRoaXMuI3JlYWR5U3RhdGUgPT09IENMT1NFRCkgcmV0dXJuXG5cbiAgICB0aGlzLiNyZWFkeVN0YXRlID0gQ09OTkVDVElOR1xuXG4gICAgY29uc3QgZmV0Y2hQYXJhbXMgPSB7XG4gICAgICByZXF1ZXN0OiB0aGlzLiNyZXF1ZXN0LFxuICAgICAgZGlzcGF0Y2hlcjogdGhpcy4jZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIC8vIDE0LiBMZXQgcHJvY2Vzc0V2ZW50U291cmNlRW5kT2ZCb2R5IGdpdmVuIHJlc3BvbnNlIHJlcyBiZSB0aGUgZm9sbG93aW5nIHN0ZXA6IGlmIHJlcyBpcyBub3QgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uLlxuICAgIGNvbnN0IHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keSA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGlzTmV0d29ya0Vycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy4jcmVjb25uZWN0KClcbiAgICB9XG5cbiAgICAvLyAxNS4gRmV0Y2ggcmVxdWVzdCwgd2l0aCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgc2V0IHRvIHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keS4uLlxuICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSA9IHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keVxuXG4gICAgLy8gYW5kIHByb2Nlc3NSZXNwb25zZSBzZXQgdG8gdGhlIGZvbGxvd2luZyBzdGVwcyBnaXZlbiByZXNwb25zZSByZXM6XG4gICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyAxLiBJZiByZXMgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG5cbiAgICAgIGlmIChpc05ldHdvcmtFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgLy8gMS4gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gZmFpbCB0aGUgY29ubmVjdGlvbiwgdGhlIHVzZXIgYWdlbnRcbiAgICAgICAgLy8gbXVzdCBxdWV1ZSBhIHRhc2sgd2hpY2gsIGlmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYVxuICAgICAgICAvLyB2YWx1ZSBvdGhlciB0aGFuIENMT1NFRCwgc2V0cyB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gQ0xPU0VEXG4gICAgICAgIC8vIGFuZCBmaXJlcyBhbiBldmVudCBuYW1lZCBlcnJvciBhdCB0aGUgRXZlbnRTb3VyY2Ugb2JqZWN0LiBPbmNlIHRoZVxuICAgICAgICAvLyB1c2VyIGFnZW50IGhhcyBmYWlsZWQgdGhlIGNvbm5lY3Rpb24sIGl0IGRvZXMgbm90IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gcmVjb25uZWN0LlxuICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiByZXMgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlZXN0YWJsaXNoIHRoZVxuICAgICAgICAgIC8vIGNvbm5lY3Rpb24sIHVubGVzcyB0aGUgdXNlciBhZ2VudCBrbm93cyB0aGF0IHRvIGJlIGZ1dGlsZSwgaW5cbiAgICAgICAgICAvLyB3aGljaCBjYXNlIHRoZSB1c2VyIGFnZW50IG1heSBmYWlsIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI3JlY29ubmVjdCgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiByZXMncyBzdGF0dXMgaXMgbm90IDIwMCwgb3IgaWYgcmVzJ3MgYENvbnRlbnQtVHlwZWBcbiAgICAgIC8vIGlzIG5vdCBgdGV4dC9ldmVudC1zdHJlYW1gLCB0aGVuIGZhaWwgdGhlIGNvbm5lY3Rpb24uXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnY29udGVudC10eXBlJywgdHJ1ZSlcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gY29udGVudFR5cGUgIT09IG51bGwgPyBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKSA6ICdmYWlsdXJlJ1xuICAgICAgY29uc3QgY29udGVudFR5cGVWYWxpZCA9IG1pbWVUeXBlICE9PSAnZmFpbHVyZScgJiYgbWltZVR5cGUuZXNzZW5jZSA9PT0gJ3RleHQvZXZlbnQtc3RyZWFtJ1xuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDIwMCB8fFxuICAgICAgICBjb250ZW50VHlwZVZhbGlkID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhbm5vdW5jZSB0aGUgY29ubmVjdGlvbiBhbmQgaW50ZXJwcmV0IHJlcydzIGJvZHlcbiAgICAgIC8vIGxpbmUgYnkgbGluZS5cblxuICAgICAgLy8gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gYW5ub3VuY2UgdGhlIGNvbm5lY3Rpb24sIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHF1ZXVlIGEgdGFzayB3aGljaCwgaWYgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIGlzIHNldCB0byBhXG4gICAgICAvLyB2YWx1ZSBvdGhlciB0aGFuIENMT1NFRCwgc2V0cyB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gT1BFTlxuICAgICAgLy8gYW5kIGZpcmVzIGFuIGV2ZW50IG5hbWVkIG9wZW4gYXQgdGhlIEV2ZW50U291cmNlIG9iamVjdC5cbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VydmVyLXNlbnQtZXZlbnRzLmh0bWwjc3NlLXByb2Nlc3NpbmctbW9kZWxcbiAgICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBPUEVOXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdvcGVuJykpXG5cbiAgICAgIC8vIElmIHJlZGlyZWN0ZWQgdG8gYSBkaWZmZXJlbnQgb3JpZ2luLCBzZXQgdGhlIG9yaWdpbiB0byB0aGUgbmV3IG9yaWdpbi5cbiAgICAgIHRoaXMuI3N0YXRlLm9yaWdpbiA9IHJlc3BvbnNlLnVybExpc3RbcmVzcG9uc2UudXJsTGlzdC5sZW5ndGggLSAxXS5vcmlnaW5cblxuICAgICAgY29uc3QgZXZlbnRTb3VyY2VTdHJlYW0gPSBuZXcgRXZlbnRTb3VyY2VTdHJlYW0oe1xuICAgICAgICBldmVudFNvdXJjZVNldHRpbmdzOiB0aGlzLiNzdGF0ZSxcbiAgICAgICAgcHVzaDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQoXG4gICAgICAgICAgICBldmVudC50eXBlLFxuICAgICAgICAgICAgZXZlbnQub3B0aW9uc1xuICAgICAgICAgICkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHBpcGVsaW5lKHJlc3BvbnNlLmJvZHkuc3RyZWFtLFxuICAgICAgICBldmVudFNvdXJjZVN0cmVhbSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXJyb3I/LmFib3J0ZWQgPT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuI2NvbnRyb2xsZXIgPSBmZXRjaGluZyhmZXRjaFBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI3NzZS1wcm9jZXNzaW5nLW1vZGVsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgI3JlY29ubmVjdCAoKSB7XG4gICAgLy8gV2hlbiBhIHVzZXIgYWdlbnQgaXMgdG8gcmVlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24sIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAvLyBydW4gdGhlIGZvbGxvd2luZyBzdGVwcy4gVGhlc2Ugc3RlcHMgYXJlIHJ1biBpbiBwYXJhbGxlbCwgbm90IGFzIHBhcnQgb2ZcbiAgICAvLyBhIHRhc2suIChUaGUgdGFza3MgdGhhdCBpdCBxdWV1ZXMsIG9mIGNvdXJzZSwgYXJlIHJ1biBsaWtlIG5vcm1hbCB0YXNrc1xuICAgIC8vIGFuZCBub3QgdGhlbXNlbHZlcyBpbiBwYXJhbGxlbC4pXG5cbiAgICAvLyAxLiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAgIDEuIElmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gQ0xPU0VELCBhYm9ydCB0aGUgdGFzay5cbiAgICBpZiAodGhpcy4jcmVhZHlTdGF0ZSA9PT0gQ0xPU0VEKSByZXR1cm5cblxuICAgIC8vICAgMi4gU2V0IHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBDT05ORUNUSU5HLlxuICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBDT05ORUNUSU5HXG5cbiAgICAvLyAgIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3IgYXQgdGhlIEV2ZW50U291cmNlIG9iamVjdC5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuXG4gICAgLy8gMi4gV2FpdCBhIGRlbGF5IGVxdWFsIHRvIHRoZSByZWNvbm5lY3Rpb24gdGltZSBvZiB0aGUgZXZlbnQgc291cmNlLlxuICAgIGF3YWl0IGRlbGF5KHRoaXMuI3N0YXRlLnJlY29ubmVjdGlvblRpbWUpXG5cbiAgICAvLyA1LiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAgIDEuIElmIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IHRvXG4gICAgLy8gICAgICBDT05ORUNUSU5HLCB0aGVuIHJldHVybi5cbiAgICBpZiAodGhpcy4jcmVhZHlTdGF0ZSAhPT0gQ09OTkVDVElORykgcmV0dXJuXG5cbiAgICAvLyAgIDIuIExldCByZXF1ZXN0IGJlIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyByZXF1ZXN0LlxuICAgIC8vICAgMy4gSWYgdGhlIEV2ZW50U291cmNlIG9iamVjdCdzIGxhc3QgZXZlbnQgSUQgc3RyaW5nIGlzIG5vdCB0aGUgZW1wdHlcbiAgICAvLyAgICAgIHN0cmluZywgdGhlbjpcbiAgICAvLyAgICAgIDEuIExldCBsYXN0RXZlbnRJRFZhbHVlIGJlIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyBsYXN0IGV2ZW50IElEXG4gICAgLy8gICAgICAgICBzdHJpbmcsIGVuY29kZWQgYXMgVVRGLTguXG4gICAgLy8gICAgICAyLiBTZXQgKGBMYXN0LUV2ZW50LUlEYCwgbGFzdEV2ZW50SURWYWx1ZSkgaW4gcmVxdWVzdCdzIGhlYWRlclxuICAgIC8vICAgICAgICAgbGlzdC5cbiAgICBpZiAodGhpcy4jc3RhdGUubGFzdEV2ZW50SWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNyZXF1ZXN0LmhlYWRlcnNMaXN0LnNldCgnbGFzdC1ldmVudC1pZCcsIHRoaXMuI3N0YXRlLmxhc3RFdmVudElkLCB0cnVlKVxuICAgIH1cblxuICAgIC8vICAgNC4gRmV0Y2ggcmVxdWVzdCBhbmQgcHJvY2VzcyB0aGUgcmVzcG9uc2Ugb2J0YWluZWQgaW4gdGhpcyBmYXNoaW9uLCBpZiBhbnksIGFzIGRlc2NyaWJlZCBlYXJsaWVyIGluIHRoaXMgc2VjdGlvbi5cbiAgICB0aGlzLiNjb25uZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24sIGlmIGFueSwgYW5kIHNldHMgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHRvXG4gICAqIENMT1NFRC5cbiAgICovXG4gIGNsb3NlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFdmVudFNvdXJjZSlcblxuICAgIGlmICh0aGlzLiNyZWFkeVN0YXRlID09PSBDTE9TRUQpIHJldHVyblxuICAgIHRoaXMuI3JlYWR5U3RhdGUgPSBDTE9TRURcbiAgICB0aGlzLiNjb250cm9sbGVyLmFib3J0KClcbiAgICB0aGlzLiNyZXF1ZXN0ID0gbnVsbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGNvbnN0YW50c1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIENPTk5FQ1RJTkc6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBDT05ORUNUSU5HLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9LFxuICBPUEVOOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogT1BFTixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSxcbiAgQ0xPU0VEOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogQ0xPU0VELFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEV2ZW50U291cmNlLCBjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzKVxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRXZlbnRTb3VyY2UucHJvdG90eXBlLCBjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFdmVudFNvdXJjZS5wcm90b3R5cGUsIHtcbiAgY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25vcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdpdGhDcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXZlbnRTb3VyY2VJbml0RGljdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3dpdGhDcmVkZW50aWFscycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2Rpc3BhdGNoZXInLCAvLyB1bmRpY2kgb25seVxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFdmVudFNvdXJjZSxcbiAgZGVmYXVsdFJlY29ubmVjdGlvblRpbWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9jbGllbnQnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlcicpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9wb29sJylcbmNvbnN0IEJhbGFuY2VkUG9vbCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvYmFsYW5jZWQtcG9vbCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvYWdlbnQnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQnKVxuY29uc3QgRW52SHR0cFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50JylcbmNvbnN0IFJldHJ5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL3JldHJ5LWFnZW50JylcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoJy4vbGliL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2xpYi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gZXJyb3JzXG5jb25zdCBhcGkgPSByZXF1aXJlKCcuL2xpYi9hcGknKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Nvbm5lY3QnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja0FnZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWFnZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLXBvb2wnKVxuY29uc3QgbW9ja0Vycm9ycyA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1lcnJvcnMnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciwgc2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi9saWIvZ2xvYmFsJylcbmNvbnN0IERlY29yYXRvckhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL2RlY29yYXRvci1oYW5kbGVyJylcbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvcmVkaXJlY3QtaGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QtaW50ZXJjZXB0b3InKVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5FbnZIdHRwUHJveHlBZ2VudCA9IEVudkh0dHBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUFnZW50ID0gUmV0cnlBZ2VudFxubW9kdWxlLmV4cG9ydHMuUmV0cnlIYW5kbGVyID0gUmV0cnlIYW5kbGVyXG5cbm1vZHVsZS5leHBvcnRzLkRlY29yYXRvckhhbmRsZXIgPSBEZWNvcmF0b3JIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5SZWRpcmVjdEhhbmRsZXIgPSBSZWRpcmVjdEhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5pbnRlcmNlcHRvcnMgPSB7XG4gIHJlZGlyZWN0OiByZXF1aXJlKCcuL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdCcpLFxuICByZXRyeTogcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmV0cnknKSxcbiAgZHVtcDogcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvZHVtcCcpLFxuICBkbnM6IHJlcXVpcmUoJy4vbGliL2ludGVyY2VwdG9yL2RucycpXG59XG5cbm1vZHVsZS5leHBvcnRzLmJ1aWxkQ29ubmVjdG9yID0gYnVpbGRDb25uZWN0b3Jcbm1vZHVsZS5leHBvcnRzLmVycm9ycyA9IGVycm9yc1xubW9kdWxlLmV4cG9ydHMudXRpbCA9IHtcbiAgcGFyc2VIZWFkZXJzOiB1dGlsLnBhcnNlSGVhZGVycyxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nOiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZ1xufVxuXG5mdW5jdGlvbiBtYWtlRGlzcGF0Y2hlciAoZm4pIHtcbiAgcmV0dXJuICh1cmwsIG9wdHMsIGhhbmRsZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGhhbmRsZXIgPSBvcHRzXG4gICAgICBvcHRzID0gbnVsbFxuICAgIH1cblxuICAgIGlmICghdXJsIHx8ICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdXJsICE9PSAnb2JqZWN0JyAmJiAhKHVybCBpbnN0YW5jZW9mIFVSTCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAhPSBudWxsICYmIHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICYmIG9wdHMucGF0aCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMucGF0aCcpXG4gICAgICB9XG5cbiAgICAgIGxldCBwYXRoID0gb3B0cy5wYXRoXG4gICAgICBpZiAoIW9wdHMucGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICAgIH1cblxuICAgICAgdXJsID0gbmV3IFVSTCh1dGlsLnBhcnNlT3JpZ2luKHVybCkub3JpZ2luICsgcGF0aClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIG9wdHMgPSB0eXBlb2YgdXJsID09PSAnb2JqZWN0JyA/IHVybCA6IHt9XG4gICAgICB9XG5cbiAgICAgIHVybCA9IHV0aWwucGFyc2VVUkwodXJsKVxuICAgIH1cblxuICAgIGNvbnN0IHsgYWdlbnQsIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgfSA9IG9wdHNcblxuICAgIGlmIChhZ2VudCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBvcHRzLmFnZW50LiBEaWQgeW91IG1lYW4gb3B0cy5jbGllbnQ/JylcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uY2FsbChkaXNwYXRjaGVyLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgcGF0aDogdXJsLnNlYXJjaCA/IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCA6IHVybC5wYXRobmFtZSxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgKG9wdHMuYm9keSA/ICdQVVQnIDogJ0dFVCcpXG4gICAgfSwgaGFuZGxlcilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxEaXNwYXRjaGVyID0gc2V0R2xvYmFsRGlzcGF0Y2hlclxubW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsRGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXJcblxuY29uc3QgZmV0Y2hJbXBsID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoJykuZmV0Y2hcbm1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKGluaXQsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZmV0Y2hJbXBsKGluaXQsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgJiYgdHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycilcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaC9oZWFkZXJzJykuSGVhZGVyc1xubW9kdWxlLmV4cG9ydHMuUmVzcG9uc2UgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdCA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaC9yZXF1ZXN0JykuUmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvZm9ybWRhdGEnKS5Gb3JtRGF0YVxubW9kdWxlLmV4cG9ydHMuRmlsZSA9IGdsb2JhbFRoaXMuRmlsZSA/PyByZXF1aXJlKCdub2RlOmJ1ZmZlcicpLkZpbGVcbm1vZHVsZS5leHBvcnRzLkZpbGVSZWFkZXIgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG5jb25zdCB7IHNldEdsb2JhbE9yaWdpbiwgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsJylcblxubW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW5cblxuY29uc3QgeyBDYWNoZVN0b3JhZ2UgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvY2FjaGUvc3ltYm9scycpXG5cbi8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4vLyBpbiBhbiBvbGRlciB2ZXJzaW9uIG9mIE5vZGUsIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgdXNlIHdpdGhvdXQgZmV0Y2guXG5tb2R1bGUuZXhwb3J0cy5jYWNoZXMgPSBuZXcgQ2FjaGVTdG9yYWdlKGtDb25zdHJ1Y3QpXG5cbmNvbnN0IHsgZGVsZXRlQ29va2llLCBnZXRDb29raWVzLCBnZXRTZXRDb29raWVzLCBzZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9jb29raWVzJylcblxubW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG5tb2R1bGUuZXhwb3J0cy5nZXRDb29raWVzID0gZ2V0Q29va2llc1xubW9kdWxlLmV4cG9ydHMuZ2V0U2V0Q29va2llcyA9IGdldFNldENvb2tpZXNcbm1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoL2RhdGEtdXJsJylcblxubW9kdWxlLmV4cG9ydHMucGFyc2VNSU1FVHlwZSA9IHBhcnNlTUlNRVR5cGVcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUFNaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZVxuXG5jb25zdCB7IENsb3NlRXZlbnQsIEVycm9yRXZlbnQsIE1lc3NhZ2VFdmVudCB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMnKVxubW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gcmVxdWlyZSgnLi9saWIvd2ViL3dlYnNvY2tldC93ZWJzb2NrZXQnKS5XZWJTb2NrZXRcbm1vZHVsZS5leHBvcnRzLkNsb3NlRXZlbnQgPSBDbG9zZUV2ZW50XG5tb2R1bGUuZXhwb3J0cy5FcnJvckV2ZW50ID0gRXJyb3JFdmVudFxubW9kdWxlLmV4cG9ydHMuTWVzc2FnZUV2ZW50ID0gTWVzc2FnZUV2ZW50XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcblxuY29uc3QgeyBFdmVudFNvdXJjZSB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlJylcblxubW9kdWxlLmV4cG9ydHMuRXZlbnRTb3VyY2UgPSBFdmVudFNvdXJjZVxuIiwgbnVsbCwgbnVsbCwgIi8qIVxuICogY29udGVudC10eXBlXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuY29uc3QgVEVYVF9SRUdFWFAgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSokLztcbmNvbnN0IFRPS0VOX1JFR0VYUCA9IC9eWyEjJCUmJyorLl5fYHx+MC05QS1aYS16LV0rJC87XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIGNoYXJzIHRoYXQgbXVzdCBiZSBxdW90ZWQtcGFpciBpbiBSRkMgOTExMCBzZWMgNS42LjRcbiAqL1xuY29uc3QgUVVPVEVfUkVHRVhQID0gL1tcXFxcXCJdL2c7XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHR5cGUgaW4gUkZDIDkxMTAgc2VjIDguMy4xXG4gKlxuICogbWVkaWEtdHlwZSA9IHR5cGUgXCIvXCIgc3VidHlwZVxuICogdHlwZSAgICAgICA9IHRva2VuXG4gKiBzdWJ0eXBlICAgID0gdG9rZW5cbiAqL1xuY29uc3QgVFlQRV9SRUdFWFAgPVxuICAvXlshIyQlJicqKy5eX2B8fjAtOUEtWmEtei1dK1xcL1shIyQlJicqKy5eX2B8fjAtOUEtWmEtei1dKyQvO1xuXG4vKipcbiAqIE51bGwgb2JqZWN0IHBlcmYgb3B0aW1pemF0aW9uLiBGYXN0ZXIgdGhhbiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgYW5kIGB7IF9fcHJvdG9fXzogbnVsbCB9YC5cbiAqL1xuY29uc3QgTnVsbE9iamVjdCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICBjb25zdCBDID0gZnVuY3Rpb24gKCkge307XG4gIEMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIEM7XG59KSgpIGFzIHVua25vd24gYXMgeyBuZXcgKCk6IGFueSB9O1xuXG4vKipcbiAqIFRoZSBjb250ZW50IHR5cGUgb2JqZWN0IGNvbnRhaW5zIGEgdHlwZSBzdHJpbmcgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFR5cGUge1xuICB0eXBlOiBzdHJpbmc7XG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogRm9ybWF0IGFuIG9iamVjdCBpbnRvIGEgYENvbnRlbnQtVHlwZWAgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KG9iajogUGFydGlhbDxDb250ZW50VHlwZT4pOiBzdHJpbmcge1xuICBjb25zdCB7IHR5cGUsIHBhcmFtZXRlcnMgfSA9IG9iajtcblxuICBpZiAoIXR5cGUgfHwgIVRZUEVfUkVHRVhQLnRlc3QodHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSB0eXBlO1xuXG4gIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKSkge1xuICAgICAgaWYgKCFUT0tFTl9SRUdFWFAudGVzdChwYXJhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgbmFtZTogJHtwYXJhbX1gKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IGA7ICR7cGFyYW19PSR7cXN0cmluZyhwYXJhbWV0ZXJzW3BhcmFtXSl9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHBhcnNpbmcgYSBgQ29udGVudC1UeXBlYCBoZWFkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VPcHRpb25zIHtcbiAgcGFyYW1ldGVycz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSBgQ29udGVudC1UeXBlYCBoZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShoZWFkZXI6IHN0cmluZywgb3B0aW9ucz86IFBhcnNlT3B0aW9ucyk6IENvbnRlbnRUeXBlIHtcbiAgY29uc3QgbGVuID0gaGVhZGVyLmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gc2tpcE9XUyhoZWFkZXIsIDAsIGxlbik7XG5cbiAgY29uc3QgdmFsdWVTdGFydCA9IGluZGV4O1xuICBpbmRleCA9IHNraXBWYWx1ZShoZWFkZXIsIGluZGV4LCBsZW4pO1xuICBjb25zdCB2YWx1ZUVuZCA9IHRyYWlsaW5nT1dTKGhlYWRlciwgdmFsdWVTdGFydCwgaW5kZXgpO1xuICBjb25zdCB0eXBlID0gaGVhZGVyLnNsaWNlKHZhbHVlU3RhcnQsIHZhbHVlRW5kKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwYXJhbWV0ZXJzID1cbiAgICBvcHRpb25zPy5wYXJhbWV0ZXJzID09PSBmYWxzZVxuICAgICAgPyBuZXcgTnVsbE9iamVjdCgpXG4gICAgICA6IHBhcnNlUGFyYW1ldGVycyhoZWFkZXIsIGluZGV4LCBsZW4pO1xuXG4gIHJldHVybiB7IHR5cGUsIHBhcmFtZXRlcnMgfTtcbn1cblxuY29uc3QgU1AgPSAzMjsgLy8gXCIgXCJcbmNvbnN0IEhUQUIgPSA5OyAvLyBcIlxcdFwiXG5jb25zdCBTRU1JID0gNTk7IC8vIFwiO1wiXG5jb25zdCBFUSA9IDYxOyAvLyBcIj1cIlxuY29uc3QgRFFVT1RFID0gMzQ7IC8vICdcIidcbmNvbnN0IEJTTEFTSCA9IDkyOyAvLyBcIlxcXFxcIlxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcGFyYW1ldGVycyBvZiBhIGBDb250ZW50LVR5cGVgIGhlYWRlciBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVycyhcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIGluZGV4OiBudW1iZXIsXG4gIGxlbjogbnVtYmVyLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTnVsbE9iamVjdCgpO1xuXG4gIHBhcmFtZXRlcjogd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgaW5kZXggPSBza2lwT1dTKGhlYWRlciwgaW5kZXggKyAxIC8qIFNraXAgb3ZlciA7ICovLCBsZW4pO1xuXG4gICAgY29uc3Qga2V5U3RhcnQgPSBpbmRleDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbikge1xuICAgICAgY29uc3QgY29kZSA9IGhlYWRlci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgIGlmIChjb2RlID09PSBTRU1JKSBjb250aW51ZSBwYXJhbWV0ZXI7XG5cbiAgICAgIGlmIChjb2RlID09PSBFUSkge1xuICAgICAgICBjb25zdCBrZXlFbmQgPSB0cmFpbGluZ09XUyhoZWFkZXIsIGtleVN0YXJ0LCBpbmRleCk7XG4gICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZShrZXlTdGFydCwga2V5RW5kKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGluZGV4ID0gc2tpcE9XUyhoZWFkZXIsIGluZGV4ICsgMSwgbGVuKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBsZW4gJiYgaGVhZGVyLmNoYXJDb2RlQXQoaW5kZXgpID09PSBEUVVPVEUpIHtcbiAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBoZWFkZXIuY2hhckNvZGVBdChpbmRleCsrKTtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBEUVVPVEUpIHtcbiAgICAgICAgICAgICAgaW5kZXggPSBza2lwVmFsdWUoaGVhZGVyLCBpbmRleCwgbGVuKTtcbiAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNba2V5XSA9PT0gdW5kZWZpbmVkKSBwYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSBCU0xBU0ggJiYgaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgICAgdmFsdWUgKz0gaGVhZGVyW2luZGV4KytdO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZSBwYXJhbWV0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIGluZGV4ID0gc2tpcFZhbHVlKGhlYWRlciwgaW5kZXgsIGxlbik7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcnNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVFbmQgPSB0cmFpbGluZ09XUyhoZWFkZXIsIHZhbHVlU3RhcnQsIGluZGV4KTtcbiAgICAgICAgICBwYXJhbWV0ZXJzW2tleV0gPSBoZWFkZXIuc2xpY2UodmFsdWVTdGFydCwgdmFsdWVFbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWUgcGFyYW1ldGVyO1xuICAgICAgfVxuXG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG4vKipcbiAqIFNraXAgb3ZlciBjaGFyYWN0ZXJzIHVudGlsIGEgc2VtaWNvbG9uLlxuICovXG5mdW5jdGlvbiBza2lwVmFsdWUoc3RyOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICBpZiAoY2hhciA9PT0gU0VNSSkgYnJlYWs7XG4gICAgaW5kZXgrKztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbi8qKlxuICogU2tpcCBvcHRpb25hbCB3aGl0ZXNwYWNlIChPV1MpIGluIGFuIEhUVFAgaGVhZGVyIHZhbHVlLlxuICpcbiAqIE9XUyBpcyBkZWZpbmVkIGluIFJGQyA5MTEwIHNlYyA1LjYuMyBhcyBTUCAoXCIgXCIpIG9yIEhUQUIgKFwiXFx0XCIpLlxuICovXG5mdW5jdGlvbiBza2lwT1dTKGhlYWRlcjogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBsZW46IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChpbmRleCA8IGxlbikge1xuICAgIGNvbnN0IGNoYXIgPSBoZWFkZXIuY2hhckNvZGVBdChpbmRleCk7XG4gICAgaWYgKGNoYXIgIT09IFNQICYmIGNoYXIgIT09IEhUQUIpIGJyZWFrO1xuICAgIGluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFRyaW0gb3B0aW9uYWwgd2hpdGVzcGFjZSAoT1dTKSBmcm9tIHRoZSBlbmQgb2YgYSBzdWJzdHJpbmcuXG4gKlxuICogT1dTIGlzIGRlZmluZWQgaW4gUkZDIDkxMTAgc2VjIDUuNi4zIGFzIFNQIChcIiBcIikgb3IgSFRBQiAoXCJcXHRcIikuXG4gKi9cbmZ1bmN0aW9uIHRyYWlsaW5nT1dTKGhlYWRlcjogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChlbmQgPiBzdGFydCkge1xuICAgIGNvbnN0IGNoYXIgPSBoZWFkZXIuY2hhckNvZGVBdChlbmQgLSAxKTtcbiAgICBpZiAoY2hhciAhPT0gU1AgJiYgY2hhciAhPT0gSFRBQikgYnJlYWs7XG4gICAgZW5kLS07XG4gIH1cbiAgcmV0dXJuIGVuZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBwYXJhbWV0ZXIgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHFzdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoVE9LRU5fUkVHRVhQLnRlc3Qoc3RyKSkgcmV0dXJuIHN0cjtcbiAgaWYgKFRFWFRfUkVHRVhQLnRlc3Qoc3RyKSkgcmV0dXJuIGBcIiR7c3RyLnJlcGxhY2UoUVVPVEVfUkVHRVhQLCBcIlxcXFwkJlwiKX1cImA7XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgdmFsdWU6ICR7c3RyfWApO1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBOb3RlOiB0aGlzIGlzIHRoZSBzZW12ZXIub3JnIHZlcnNpb24gb2YgdGhlIHNwZWMgdGhhdCBpdCBpbXBsZW1lbnRzXG4vLyBOb3QgbmVjZXNzYXJpbHkgdGhlIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGNvZGUuXG5jb25zdCBTRU1WRVJfU1BFQ19WRVJTSU9OID0gJzIuMC4wJ1xuXG5jb25zdCBNQVhfTEVOR1RIID0gMjU2XG5jb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDkwMDcxOTkyNTQ3NDA5OTFcblxuLy8gTWF4IHNhZmUgc2VnbWVudCBsZW5ndGggZm9yIGNvZXJjaW9uLlxuY29uc3QgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCA9IDE2XG5cbi8vIE1heCBzYWZlIGxlbmd0aCBmb3IgYSBidWlsZCBpZGVudGlmaWVyLiBUaGUgbWF4IGxlbmd0aCBtaW51cyA2IGNoYXJhY3RlcnMgZm9yXG4vLyB0aGUgc2hvcnRlc3QgdmVyc2lvbiB3aXRoIGEgYnVpbGQgMC4wLjArQlVJTEQuXG5jb25zdCBNQVhfU0FGRV9CVUlMRF9MRU5HVEggPSBNQVhfTEVOR1RIIC0gNlxuXG5jb25zdCBSRUxFQVNFX1RZUEVTID0gW1xuICAnbWFqb3InLFxuICAncHJlbWFqb3InLFxuICAnbWlub3InLFxuICAncHJlbWlub3InLFxuICAncGF0Y2gnLFxuICAncHJlcGF0Y2gnLFxuICAncHJlcmVsZWFzZScsXG5dXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RILFxuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9TQUZFX0lOVEVHRVIsXG4gIFJFTEVBU0VfVFlQRVMsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT04sXG4gIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFOiAwYjAwMSxcbiAgRkxBR19MT09TRTogMGIwMTAsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlYnVnID0gKFxuICB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgcHJvY2Vzcy5lbnYgJiZcbiAgcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJlxuICAvXFxic2VtdmVyXFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKVxuKSA/ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKCdTRU1WRVInLCAuLi5hcmdzKVxuICA6ICgpID0+IHt9XG5cbm1vZHVsZS5leHBvcnRzID0gZGVidWdcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9MRU5HVEgsXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnJylcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHt9XG5cbi8vIFRoZSBhY3R1YWwgcmVnZXhwcyBnbyBvbiBleHBvcnRzLnJlXG5jb25zdCByZSA9IGV4cG9ydHMucmUgPSBbXVxuY29uc3Qgc2FmZVJlID0gZXhwb3J0cy5zYWZlUmUgPSBbXVxuY29uc3Qgc3JjID0gZXhwb3J0cy5zcmMgPSBbXVxuY29uc3Qgc2FmZVNyYyA9IGV4cG9ydHMuc2FmZVNyYyA9IFtdXG5jb25zdCB0ID0gZXhwb3J0cy50ID0ge31cbmxldCBSID0gMFxuXG5jb25zdCBMRVRURVJEQVNITlVNQkVSID0gJ1thLXpBLVowLTktXSdcblxuLy8gUmVwbGFjZSBzb21lIGdyZWVkeSByZWdleCB0b2tlbnMgdG8gcHJldmVudCByZWdleCBkb3MgaXNzdWVzLiBUaGVzZSByZWdleCBhcmVcbi8vIHVzZWQgaW50ZXJuYWxseSB2aWEgdGhlIHNhZmVSZSBvYmplY3Qgc2luY2UgYWxsIGlucHV0cyBpbiB0aGlzIGxpYnJhcnkgZ2V0XG4vLyBub3JtYWxpemVkIGZpcnN0IHRvIHRyaW0gYW5kIGNvbGxhcHNlIGFsbCBleHRyYSB3aGl0ZXNwYWNlLiBUaGUgb3JpZ2luYWxcbi8vIHJlZ2V4ZXMgYXJlIGV4cG9ydGVkIGZvciB1c2VybGFuZCBjb25zdW1wdGlvbiBhbmQgbG93ZXIgbGV2ZWwgdXNhZ2UuIEFcbi8vIGZ1dHVyZSBicmVha2luZyBjaGFuZ2UgY291bGQgZXhwb3J0IHRoZSBzYWZlciByZWdleCBvbmx5IHdpdGggYSBub3RlIHRoYXRcbi8vIGFsbCBpbnB1dCBzaG91bGQgaGF2ZSBleHRyYSB3aGl0ZXNwYWNlIHJlbW92ZWQuXG5jb25zdCBzYWZlUmVnZXhSZXBsYWNlbWVudHMgPSBbXG4gIFsnXFxcXHMnLCAxXSxcbiAgWydcXFxcZCcsIE1BWF9MRU5HVEhdLFxuICBbTEVUVEVSREFTSE5VTUJFUiwgTUFYX1NBRkVfQlVJTERfTEVOR1RIXSxcbl1cblxuY29uc3QgbWFrZVNhZmVSZWdleCA9ICh2YWx1ZSkgPT4ge1xuICBmb3IgKGNvbnN0IFt0b2tlbiwgbWF4XSBvZiBzYWZlUmVnZXhSZXBsYWNlbWVudHMpIHtcbiAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAuc3BsaXQoYCR7dG9rZW59KmApLmpvaW4oYCR7dG9rZW59ezAsJHttYXh9fWApXG4gICAgICAuc3BsaXQoYCR7dG9rZW59K2ApLmpvaW4oYCR7dG9rZW59ezEsJHttYXh9fWApXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmNvbnN0IGNyZWF0ZVRva2VuID0gKG5hbWUsIHZhbHVlLCBpc0dsb2JhbCkgPT4ge1xuICBjb25zdCBzYWZlID0gbWFrZVNhZmVSZWdleCh2YWx1ZSlcbiAgY29uc3QgaW5kZXggPSBSKytcbiAgZGVidWcobmFtZSwgaW5kZXgsIHZhbHVlKVxuICB0W25hbWVdID0gaW5kZXhcbiAgc3JjW2luZGV4XSA9IHZhbHVlXG4gIHNhZmVTcmNbaW5kZXhdID0gc2FmZVxuICByZVtpbmRleF0gPSBuZXcgUmVnRXhwKHZhbHVlLCBpc0dsb2JhbCA/ICdnJyA6IHVuZGVmaW5lZClcbiAgc2FmZVJlW2luZGV4XSA9IG5ldyBSZWdFeHAoc2FmZSwgaXNHbG9iYWwgPyAnZycgOiB1bmRlZmluZWQpXG59XG5cbi8vIFRoZSBmb2xsb3dpbmcgUmVndWxhciBFeHByZXNzaW9ucyBjYW4gYmUgdXNlZCBmb3IgdG9rZW5pemluZyxcbi8vIHZhbGlkYXRpbmcsIGFuZCBwYXJzaW5nIFNlbVZlciB2ZXJzaW9uIHN0cmluZ3MuXG5cbi8vICMjIE51bWVyaWMgSWRlbnRpZmllclxuLy8gQSBzaW5nbGUgYDBgLCBvciBhIG5vbi16ZXJvIGRpZ2l0IGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBkaWdpdHMuXG5cbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUicsICcwfFsxLTldXFxcXGQqJylcbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUkxPT1NFJywgJ1xcXFxkKycpXG5cbi8vICMjIE5vbi1udW1lcmljIElkZW50aWZpZXJcbi8vIFplcm8gb3IgbW9yZSBkaWdpdHMsIGZvbGxvd2VkIGJ5IGEgbGV0dGVyIG9yIGh5cGhlbiwgYW5kIHRoZW4gemVybyBvclxuLy8gbW9yZSBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMuXG5cbmNyZWF0ZVRva2VuKCdOT05OVU1FUklDSURFTlRJRklFUicsIGBcXFxcZCpbYS16QS1aLV0ke0xFVFRFUkRBU0hOVU1CRVJ9KmApXG5cbi8vICMjIE1haW4gVmVyc2lvblxuLy8gVGhyZWUgZG90LXNlcGFyYXRlZCBudW1lcmljIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignTUFJTlZFUlNJT04nLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuY3JlYXRlVG9rZW4oJ01BSU5WRVJTSU9OTE9PU0UnLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb24gSWRlbnRpZmllclxuLy8gQSBudW1lcmljIGlkZW50aWZpZXIsIG9yIGEgbm9uLW51bWVyaWMgaWRlbnRpZmllci5cbi8vIE5vbi1udW1lcmljIGlkZW50aWZpZXJzIGluY2x1ZGUgbnVtZXJpYyBpZGVudGlmaWVycyBidXQgY2FuIGJlIGxvbmdlci5cbi8vIFRoZXJlZm9yZSBub24tbnVtZXJpYyBpZGVudGlmaWVycyBtdXN0IGdvIGZpcnN0LlxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUlERU5USUZJRVInLCBgKD86JHtzcmNbdC5OT05OVU1FUklDSURFTlRJRklFUl1cbn18JHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KWApXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFJywgYCg/OiR7c3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdXG59fCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb25cbi8vIEh5cGhlbiwgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgZG90LXNlcGFyYXRlZCBwcmUtcmVsZWFzZSB2ZXJzaW9uXG4vLyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0UnLCBgKD86LSgke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSXVxufSg/OlxcXFwuJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUl19KSopKWApXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFTE9PU0UnLCBgKD86LT8oJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXVxufSg/OlxcXFwuJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXX0pKikpYClcblxuLy8gIyMgQnVpbGQgTWV0YWRhdGEgSWRlbnRpZmllclxuLy8gQW55IGNvbWJpbmF0aW9uIG9mIGRpZ2l0cywgbGV0dGVycywgb3IgaHlwaGVucy5cblxuY3JlYXRlVG9rZW4oJ0JVSUxESURFTlRJRklFUicsIGAke0xFVFRFUkRBU0hOVU1CRVJ9K2ApXG5cbi8vICMjIEJ1aWxkIE1ldGFkYXRhXG4vLyBQbHVzIHNpZ24sIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHBlcmlvZC1zZXBhcmF0ZWQgYnVpbGQgbWV0YWRhdGFcbi8vIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignQlVJTEQnLCBgKD86XFxcXCsoJHtzcmNbdC5CVUlMRElERU5USUZJRVJdXG59KD86XFxcXC4ke3NyY1t0LkJVSUxESURFTlRJRklFUl19KSopKWApXG5cbi8vICMjIEZ1bGwgVmVyc2lvbiBTdHJpbmdcbi8vIEEgbWFpbiB2ZXJzaW9uLCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiBhbmRcbi8vIGJ1aWxkIG1ldGFkYXRhLlxuXG4vLyBOb3RlIHRoYXQgdGhlIG9ubHkgbWFqb3IsIG1pbm9yLCBwYXRjaCwgYW5kIHByZS1yZWxlYXNlIHNlY3Rpb25zIG9mXG4vLyB0aGUgdmVyc2lvbiBzdHJpbmcgYXJlIGNhcHR1cmluZyBncm91cHMuICBUaGUgYnVpbGQgbWV0YWRhdGEgaXMgbm90IGFcbi8vIGNhcHR1cmluZyBncm91cCwgYmVjYXVzZSBpdCBzaG91bGQgbm90IGV2ZXIgYmUgdXNlZCBpbiB2ZXJzaW9uXG4vLyBjb21wYXJpc29uLlxuXG5jcmVhdGVUb2tlbignRlVMTFBMQUlOJywgYHY/JHtzcmNbdC5NQUlOVkVSU0lPTl1cbn0ke3NyY1t0LlBSRVJFTEVBU0VdfT8ke1xuICBzcmNbdC5CVUlMRF19P2ApXG5cbmNyZWF0ZVRva2VuKCdGVUxMJywgYF4ke3NyY1t0LkZVTExQTEFJTl19JGApXG5cbi8vIGxpa2UgZnVsbCwgYnV0IGFsbG93cyB2MS4yLjMgYW5kID0xLjIuMywgd2hpY2ggcGVvcGxlIGRvIHNvbWV0aW1lcy5cbi8vIGFsc28sIDEuMC4wYWxwaGExIChwcmVyZWxlYXNlIHdpdGhvdXQgdGhlIGh5cGhlbikgd2hpY2ggaXMgcHJldHR5XG4vLyBjb21tb24gaW4gdGhlIG5wbSByZWdpc3RyeS5cbmNyZWF0ZVRva2VuKCdMT09TRVBMQUlOJywgYFt2PVxcXFxzXSoke3NyY1t0Lk1BSU5WRVJTSU9OTE9PU0VdXG59JHtzcmNbdC5QUkVSRUxFQVNFTE9PU0VdfT8ke1xuICBzcmNbdC5CVUlMRF19P2ApXG5cbmNyZWF0ZVRva2VuKCdMT09TRScsIGBeJHtzcmNbdC5MT09TRVBMQUlOXX0kYClcblxuY3JlYXRlVG9rZW4oJ0dUTFQnLCAnKCg/Ojx8Pik/PT8pJylcblxuLy8gU29tZXRoaW5nIGxpa2UgXCIyLipcIiBvciBcIjEuMi54XCIuXG4vLyBOb3RlIHRoYXQgXCJ4LnhcIiBpcyBhIHZhbGlkIHhSYW5nZSBpZGVudGlmaWVyLCBtZWFuaW5nIFwiYW55IHZlcnNpb25cIlxuLy8gT25seSB0aGUgZmlyc3QgaXRlbSBpcyBzdHJpY3RseSByZXF1aXJlZC5cbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSTE9PU0UnLCBgJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX18eHxYfFxcXFwqYClcbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfXx4fFh8XFxcXCpgKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU4nLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/JHtcbiAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU5MT09TRScsIGBbdj1cXFxcc10qKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKT8pP2ApXG5cbmNyZWF0ZVRva2VuKCdYUkFOR0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignWFJBTkdFTE9PU0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ29lcmNpb24uXG4vLyBFeHRyYWN0IGFueXRoaW5nIHRoYXQgY291bGQgY29uY2VpdmFibHkgYmUgYSBwYXJ0IG9mIGEgdmFsaWQgc2VtdmVyXG5jcmVhdGVUb2tlbignQ09FUkNFUExBSU4nLCBgJHsnKF58W15cXFxcZF0pJyArXG4gICAgICAgICAgICAgICcoXFxcXGR7MSwnfSR7TUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSH19KWAgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2AgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2ApXG5jcmVhdGVUb2tlbignQ09FUkNFJywgYCR7c3JjW3QuQ09FUkNFUExBSU5dfSg/OiR8W15cXFxcZF0pYClcbmNyZWF0ZVRva2VuKCdDT0VSQ0VGVUxMJywgc3JjW3QuQ09FUkNFUExBSU5dICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRV19KT9gICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuQlVJTERdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMJywgc3JjW3QuQ09FUkNFXSwgdHJ1ZSlcbmNyZWF0ZVRva2VuKCdDT0VSQ0VSVExGVUxMJywgc3JjW3QuQ09FUkNFRlVMTF0sIHRydWUpXG5cbi8vIFRpbGRlIHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJyZWFzb25hYmx5IGF0IG9yIGdyZWF0ZXIgdGhhblwiXG5jcmVhdGVUb2tlbignTE9ORVRJTERFJywgJyg/On4+PyknKVxuXG5jcmVhdGVUb2tlbignVElMREVUUklNJywgYChcXFxccyopJHtzcmNbdC5MT05FVElMREVdfVxcXFxzK2AsIHRydWUpXG5leHBvcnRzLnRpbGRlVHJpbVJlcGxhY2UgPSAnJDF+J1xuXG5jcmVhdGVUb2tlbignVElMREUnLCBgXiR7c3JjW3QuTE9ORVRJTERFXX0ke3NyY1t0LlhSQU5HRVBMQUlOXX0kYClcbmNyZWF0ZVRva2VuKCdUSUxERUxPT1NFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ2FyZXQgcmFuZ2VzLlxuLy8gTWVhbmluZyBpcyBcImF0IGxlYXN0IGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoXCJcbmNyZWF0ZVRva2VuKCdMT05FQ0FSRVQnLCAnKD86XFxcXF4pJylcblxuY3JlYXRlVG9rZW4oJ0NBUkVUVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORUNBUkVUXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy5jYXJldFRyaW1SZXBsYWNlID0gJyQxXidcblxuY3JlYXRlVG9rZW4oJ0NBUkVUJywgYF4ke3NyY1t0LkxPTkVDQVJFVF19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignQ0FSRVRMT09TRScsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIEEgc2ltcGxlIGd0L2x0L2VxIHRoaW5nLCBvciBqdXN0IFwiXCIgdG8gaW5kaWNhdGUgXCJhbnkgdmVyc2lvblwiXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUkxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfSkkfF4kYClcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkZVTExQTEFJTl19KSR8XiRgKVxuXG4vLyBBbiBleHByZXNzaW9uIHRvIHN0cmlwIGFueSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIGd0bHQgYW5kIHRoZSB0aGluZ1xuLy8gaXQgbW9kaWZpZXMsIHNvIHRoYXQgYD4gMS4yLjNgID09PiBgPjEuMi4zYFxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JUUklNJywgYChcXFxccyopJHtzcmNbdC5HVExUXVxufVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfXwke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCwgdHJ1ZSlcbmV4cG9ydHMuY29tcGFyYXRvclRyaW1SZXBsYWNlID0gJyQxJDIkMydcblxuLy8gU29tZXRoaW5nIGxpa2UgYDEuMi4zIC0gMS4yLjRgXG4vLyBOb3RlIHRoYXQgdGhlc2UgYWxsIHVzZSB0aGUgbG9vc2UgZm9ybSwgYmVjYXVzZSB0aGV5J2xsIGJlXG4vLyBjaGVja2VkIGFnYWluc3QgZWl0aGVyIHRoZSBzdHJpY3Qgb3IgbG9vc2UgY29tcGFyYXRvciBmb3JtXG4vLyBsYXRlci5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRScsIGBeXFxcXHMqKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5YUkFOR0VQTEFJTl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuY3JlYXRlVG9rZW4oJ0hZUEhFTlJBTkdFTE9PU0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccystXFxcXHMrYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFxcXFxzKiRgKVxuXG4vLyBTdGFyIHJhbmdlcyBiYXNpY2FsbHkganVzdCBhbGxvdyBhbnl0aGluZyBhdCBhbGwuXG5jcmVhdGVUb2tlbignU1RBUicsICcoPHw+KT89P1xcXFxzKlxcXFwqJylcbi8vID49MC4wLjAgaXMgbGlrZSBhIHN0YXJcbmNyZWF0ZVRva2VuKCdHVEUwJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjBcXFxccyokJylcbmNyZWF0ZVRva2VuKCdHVEUwUFJFJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjAtMFxcXFxzKiQnKVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBwYXJzZSBvdXQganVzdCB0aGUgb3B0aW9ucyB3ZSBjYXJlIGFib3V0XG5jb25zdCBsb29zZU9wdGlvbiA9IE9iamVjdC5mcmVlemUoeyBsb29zZTogdHJ1ZSB9KVxuY29uc3QgZW1wdHlPcHRzID0gT2JqZWN0LmZyZWV6ZSh7IH0pXG5jb25zdCBwYXJzZU9wdGlvbnMgPSBvcHRpb25zID0+IHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuIGVtcHR5T3B0c1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBsb29zZU9wdGlvblxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VPcHRpb25zXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG51bWVyaWMgPSAvXlswLTldKyQvXG5jb25zdCBjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4ge1xuICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhID09PSBiID8gMCA6IGEgPCBiID8gLTEgOiAxXG4gIH1cblxuICBjb25zdCBhbnVtID0gbnVtZXJpYy50ZXN0KGEpXG4gIGNvbnN0IGJudW0gPSBudW1lcmljLnRlc3QoYilcblxuICBpZiAoYW51bSAmJiBibnVtKSB7XG4gICAgYSA9ICthXG4gICAgYiA9ICtiXG4gIH1cblxuICByZXR1cm4gYSA9PT0gYiA/IDBcbiAgICA6IChhbnVtICYmICFibnVtKSA/IC0xXG4gICAgOiAoYm51bSAmJiAhYW51bSkgPyAxXG4gICAgOiBhIDwgYiA/IC0xXG4gICAgOiAxXG59XG5cbmNvbnN0IHJjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4gY29tcGFyZUlkZW50aWZpZXJzKGIsIGEpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgeyBNQVhfTEVOR1RILCBNQVhfU0FGRV9JTlRFR0VSIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBjb21wYXJlSWRlbnRpZmllcnMgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2lkZW50aWZpZXJzJylcblxuY29uc3QgaXNQcmVyZWxlYXNlSWRlbnRpZmllciA9IChwcmVyZWxlYXNlLCBpZGVudGlmaWVyKSA9PiB7XG4gIGNvbnN0IGlkZW50aWZpZXJzID0gaWRlbnRpZmllci5zcGxpdCgnLicpXG4gIGlmIChpZGVudGlmaWVycy5sZW5ndGggPiBwcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjb21wYXJlSWRlbnRpZmllcnMocHJlcmVsZWFzZVtpXSwgaWRlbnRpZmllcnNbaV0pICE9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5jbGFzcyBTZW1WZXIge1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgICBpZiAodmVyc2lvbi5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlICYmXG4gICAgICAgIHZlcnNpb24uaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgICByZXR1cm4gdmVyc2lvblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24udmVyc2lvblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHZlcnNpb24uIE11c3QgYmUgYSBzdHJpbmcuIEdvdCB0eXBlIFwiJHt0eXBlb2YgdmVyc2lvbn1cIi5gKVxuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uLmxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGB2ZXJzaW9uIGlzIGxvbmdlciB0aGFuICR7TUFYX0xFTkdUSH0gY2hhcmFjdGVyc2BcbiAgICAgIClcbiAgICB9XG5cbiAgICBkZWJ1ZygnU2VtVmVyJywgdmVyc2lvbiwgb3B0aW9ucylcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5sb29zZSA9ICEhb3B0aW9ucy5sb29zZVxuICAgIC8vIHRoaXMgaXNuJ3QgYWN0dWFsbHkgcmVsZXZhbnQgZm9yIHZlcnNpb25zLCBidXQga2VlcCBpdCBzbyB0aGF0IHdlXG4gICAgLy8gZG9uJ3QgcnVuIGludG8gdHJvdWJsZSBwYXNzaW5nIHRoaXMub3B0aW9ucyBhcm91bmQuXG4gICAgdGhpcy5pbmNsdWRlUHJlcmVsZWFzZSA9ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuXG4gICAgY29uc3QgbSA9IHZlcnNpb24udHJpbSgpLm1hdGNoKG9wdGlvbnMubG9vc2UgPyByZVt0LkxPT1NFXSA6IHJlW3QuRlVMTF0pXG5cbiAgICBpZiAoIW0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgVmVyc2lvbjogJHt2ZXJzaW9ufWApXG4gICAgfVxuXG4gICAgdGhpcy5yYXcgPSB2ZXJzaW9uXG5cbiAgICAvLyB0aGVzZSBhcmUgYWN0dWFsbHkgbnVtYmVyc1xuICAgIHRoaXMubWFqb3IgPSArbVsxXVxuICAgIHRoaXMubWlub3IgPSArbVsyXVxuICAgIHRoaXMucGF0Y2ggPSArbVszXVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMubWFqb3IgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG1ham9yIHZlcnNpb24nKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1pbm9yID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLm1pbm9yIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBtaW5vciB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXRjaCA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5wYXRjaCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcGF0Y2ggdmVyc2lvbicpXG4gICAgfVxuXG4gICAgLy8gbnVtYmVyaWZ5IGFueSBwcmVyZWxlYXNlIG51bWVyaWMgaWRzXG4gICAgaWYgKCFtWzRdKSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBtWzRdLnNwbGl0KCcuJykubWFwKChpZCkgPT4ge1xuICAgICAgICBpZiAoL15bMC05XSskLy50ZXN0KGlkKSkge1xuICAgICAgICAgIGNvbnN0IG51bSA9ICtpZFxuICAgICAgICAgIGlmIChudW0gPj0gMCAmJiBudW0gPCBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkID0gbVs1XSA/IG1bNV0uc3BsaXQoJy4nKSA6IFtdXG4gICAgdGhpcy5mb3JtYXQoKVxuICB9XG5cbiAgZm9ybWF0ICgpIHtcbiAgICB0aGlzLnZlcnNpb24gPSBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5wYXRjaH1gXG4gICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbiArPSBgLSR7dGhpcy5wcmVyZWxlYXNlLmpvaW4oJy4nKX1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZlcnNpb25cbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uXG4gIH1cblxuICBjb21wYXJlIChvdGhlcikge1xuICAgIGRlYnVnKCdTZW1WZXIuY29tcGFyZScsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zLCBvdGhlcilcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3RoZXIgPT09ICdzdHJpbmcnICYmIG90aGVyID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZU1haW4ob3RoZXIpIHx8IHRoaXMuY29tcGFyZVByZShvdGhlcilcbiAgfVxuXG4gIGNvbXBhcmVNYWluIChvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPCBvdGhlci5tYWpvcikge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGlmICh0aGlzLm1ham9yID4gb3RoZXIubWFqb3IpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICAgIGlmICh0aGlzLm1pbm9yIDwgb3RoZXIubWlub3IpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICBpZiAodGhpcy5taW5vciA+IG90aGVyLm1pbm9yKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICBpZiAodGhpcy5wYXRjaCA8IG90aGVyLnBhdGNoKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgaWYgKHRoaXMucGF0Y2ggPiBvdGhlci5wYXRjaCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGNvbXBhcmVQcmUgKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBOT1QgaGF2aW5nIGEgcHJlcmVsZWFzZSBpcyA+IGhhdmluZyBvbmVcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGggJiYgb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMucHJlcmVsZWFzZVtpXVxuICAgICAgY29uc3QgYiA9IG90aGVyLnByZXJlbGVhc2VbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIGNvbXBhcmVCdWlsZCAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGxldCBpID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmJ1aWxkW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIuYnVpbGRbaV1cbiAgICAgIGRlYnVnKCdidWlsZCBjb21wYXJlJywgaSwgYSwgYilcbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQgJiYgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9IGVsc2UgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfSBlbHNlIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlSWRlbnRpZmllcnMoYSwgYilcbiAgICAgIH1cbiAgICB9IHdoaWxlICgrK2kpXG4gIH1cblxuICAvLyBwcmVtaW5vciB3aWxsIGJ1bXAgdGhlIHZlcnNpb24gdXAgdG8gdGhlIG5leHQgbWlub3IgcmVsZWFzZSwgYW5kIGltbWVkaWF0ZWx5XG4gIC8vIGRvd24gdG8gcHJlLXJlbGVhc2UuIHByZW1ham9yIGFuZCBwcmVwYXRjaCB3b3JrIHRoZSBzYW1lIHdheS5cbiAgaW5jIChyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkge1xuICAgIGlmIChyZWxlYXNlLnN0YXJ0c1dpdGgoJ3ByZScpKSB7XG4gICAgICBpZiAoIWlkZW50aWZpZXIgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgaXMgZW1wdHknKVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgYW4gaW52YWxpZCBzZW12ZXIgcmVzdWx0c1xuICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBgLSR7aWRlbnRpZmllcn1gLm1hdGNoKHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuUFJFUkVMRUFTRUxPT1NFXSA6IHJlW3QuUFJFUkVMRUFTRV0pXG4gICAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gIT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaWRlbnRpZmllcjogJHtpZGVudGlmaWVyfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlbGVhc2UpIHtcbiAgICAgIGNhc2UgJ3ByZW1ham9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZW1pbm9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZXBhdGNoJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbHJlYWR5IGEgcHJlcmVsZWFzZSwgaXQgd2lsbCBidW1wIHRvIHRoZSBuZXh0IHZlcnNpb25cbiAgICAgICAgLy8gZHJvcCBhbnkgcHJlcmVsZWFzZXMgdGhhdCBtaWdodCBhbHJlYWR5IGV4aXN0LCBzaW5jZSB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gcmVsZXZhbnQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBhIG5vbi1wcmVyZWxlYXNlIHZlcnNpb24sIHRoaXMgYWN0cyB0aGUgc2FtZSBhc1xuICAgICAgLy8gcHJlcGF0Y2guXG4gICAgICBjYXNlICdwcmVyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmluYygncGF0Y2gnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZlcnNpb24gJHt0aGlzLnJhd30gaXMgbm90IGEgcHJlcmVsZWFzZWApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbWFqb3InOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlLW1ham9yIHZlcnNpb24sIGJ1bXAgdXAgdG8gdGhlIHNhbWUgbWFqb3IgdmVyc2lvbi5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGluY3JlbWVudCBtYWpvci5cbiAgICAgICAgLy8gMS4wLjAtNSBidW1wcyB0byAxLjAuMFxuICAgICAgICAvLyAxLjEuMCBidW1wcyB0byAyLjAuMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5taW5vciAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucGF0Y2ggIT09IDAgfHxcbiAgICAgICAgICB0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdtaW5vcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWlub3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtaW5vciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1pbm9yLlxuICAgICAgICAvLyAxLjIuMC01IGJ1bXBzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4xIGJ1bXBzIHRvIDEuMy4wXG4gICAgICAgIGlmICh0aGlzLnBhdGNoICE9PSAwIHx8IHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLm1pbm9yKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdGNoID0gMFxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncGF0Y2gnOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIHByZS1yZWxlYXNlIHZlcnNpb24sIGl0IHdpbGwgaW5jcmVtZW50IHRoZSBwYXRjaC5cbiAgICAgICAgLy8gSWYgaXQgaXMgYSBwcmUtcmVsZWFzZSBpdCB3aWxsIGJ1bXAgdXAgdG8gdGhlIHNhbWUgcGF0Y2ggdmVyc2lvbi5cbiAgICAgICAgLy8gMS4yLjAtNSBwYXRjaGVzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4wIHBhdGNoZXMgdG8gMS4yLjFcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnBhdGNoKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgLy8gVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdXNlZCBwdWJsaWNseS5cbiAgICAgIC8vIDEuMC4wICdwcmUnIHdvdWxkIGJlY29tZSAxLjAuMC0wIHdoaWNoIGlzIHRoZSB3cm9uZyBkaXJlY3Rpb24uXG4gICAgICBjYXNlICdwcmUnOiB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBOdW1iZXIoaWRlbnRpZmllckJhc2UpID8gMSA6IDBcblxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtiYXNlXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBpID0gdGhpcy5wcmVyZWxlYXNlLmxlbmd0aFxuICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXJlbGVhc2VbaV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZVtpXSsrXG4gICAgICAgICAgICAgIGkgPSAtMlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIGRpZG4ndCBpbmNyZW1lbnQgYW55dGhpbmdcbiAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09PSB0aGlzLnByZXJlbGVhc2Uuam9pbignLicpICYmIGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGFscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5wdXNoKGJhc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgLy8gMS4yLjAtYmV0YS4xIGJ1bXBzIHRvIDEuMi4wLWJldGEuMixcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLmZvb2JseiBvciAxLjIuMC1iZXRhIGJ1bXBzIHRvIDEuMi4wLWJldGEuMFxuICAgICAgICAgIGxldCBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXIsIGJhc2VdXG4gICAgICAgICAgaWYgKGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcHJlcmVsZWFzZSA9IFtpZGVudGlmaWVyXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNQcmVyZWxlYXNlSWRlbnRpZmllcih0aGlzLnByZXJlbGVhc2UsIGlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVyZWxlYXNlQmFzZSA9IHRoaXMucHJlcmVsZWFzZVtpZGVudGlmaWVyLnNwbGl0KCcuJykubGVuZ3RoXVxuICAgICAgICAgICAgaWYgKGlzTmFOKHByZXJlbGVhc2VCYXNlKSkge1xuICAgICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IHByZXJlbGVhc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6ICR7cmVsZWFzZX1gKVxuICAgIH1cbiAgICB0aGlzLnJhdyA9IHRoaXMuZm9ybWF0KClcbiAgICBpZiAodGhpcy5idWlsZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmF3ICs9IGArJHt0aGlzLmJ1aWxkLmpvaW4oJy4nKX1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZW1WZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSAodmVyc2lvbiwgb3B0aW9ucywgdGhyb3dFcnJvcnMgPSBmYWxzZSkgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmICghdGhyb3dFcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHRocm93IGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgdmFsaWQgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB2ID0gcGFyc2UodmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIHYgPyB2LnZlcnNpb24gOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHZhbGlkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCBjbGVhbiA9ICh2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHMgPSBwYXJzZSh2ZXJzaW9uLnRyaW0oKS5yZXBsYWNlKC9eWz12XSsvLCAnJyksIG9wdGlvbnMpXG4gIHJldHVybiBzID8gcy52ZXJzaW9uIDogbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBjbGVhblxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IGluYyA9ICh2ZXJzaW9uLCByZWxlYXNlLCBvcHRpb25zLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkgPT4ge1xuICBpZiAodHlwZW9mIChvcHRpb25zKSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZGVudGlmaWVyQmFzZSA9IGlkZW50aWZpZXJcbiAgICBpZGVudGlmaWVyID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWRcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBTZW1WZXIoXG4gICAgICB2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyID8gdmVyc2lvbi52ZXJzaW9uIDogdmVyc2lvbixcbiAgICAgIG9wdGlvbnNcbiAgICApLmluYyhyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkudmVyc2lvblxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gaW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZS5qcycpXG5cbmNvbnN0IGRpZmYgPSAodmVyc2lvbjEsIHZlcnNpb24yKSA9PiB7XG4gIGNvbnN0IHYxID0gcGFyc2UodmVyc2lvbjEsIG51bGwsIHRydWUpXG4gIGNvbnN0IHYyID0gcGFyc2UodmVyc2lvbjIsIG51bGwsIHRydWUpXG4gIGNvbnN0IGNvbXBhcmlzb24gPSB2MS5jb21wYXJlKHYyKVxuXG4gIGlmIChjb21wYXJpc29uID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHYxSGlnaGVyID0gY29tcGFyaXNvbiA+IDBcbiAgY29uc3QgaGlnaFZlcnNpb24gPSB2MUhpZ2hlciA/IHYxIDogdjJcbiAgY29uc3QgbG93VmVyc2lvbiA9IHYxSGlnaGVyID8gdjIgOiB2MVxuICBjb25zdCBoaWdoSGFzUHJlID0gISFoaWdoVmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aFxuICBjb25zdCBsb3dIYXNQcmUgPSAhIWxvd1ZlcnNpb24ucHJlcmVsZWFzZS5sZW5ndGhcblxuICBpZiAobG93SGFzUHJlICYmICFoaWdoSGFzUHJlKSB7XG4gICAgLy8gR29pbmcgZnJvbSBwcmVyZWxlYXNlIC0+IG5vIHByZXJlbGVhc2UgcmVxdWlyZXMgc29tZSBzcGVjaWFsIGNhc2luZ1xuXG4gICAgLy8gSWYgdGhlIGxvdyB2ZXJzaW9uIGhhcyBvbmx5IGEgbWFqb3IsIHRoZW4gaXQgd2lsbCBhbHdheXMgYmUgYSBtYWpvclxuICAgIC8vIFNvbWUgZXhhbXBsZXM6XG4gICAgLy8gMS4wLjAtMSAtPiAxLjAuMFxuICAgIC8vIDEuMC4wLTEgLT4gMS4xLjFcbiAgICAvLyAxLjAuMC0xIC0+IDIuMC4wXG4gICAgaWYgKCFsb3dWZXJzaW9uLnBhdGNoICYmICFsb3dWZXJzaW9uLm1pbm9yKSB7XG4gICAgICByZXR1cm4gJ21ham9yJ1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBtYWluIHBhcnQgaGFzIG5vIGRpZmZlcmVuY2VcbiAgICBpZiAobG93VmVyc2lvbi5jb21wYXJlTWFpbihoaWdoVmVyc2lvbikgPT09IDApIHtcbiAgICAgIGlmIChsb3dWZXJzaW9uLm1pbm9yICYmICFsb3dWZXJzaW9uLnBhdGNoKSB7XG4gICAgICAgIHJldHVybiAnbWlub3InXG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BhdGNoJ1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCB0aGUgYHByZWAgcHJlZml4IGlmIHdlIGFyZSBnb2luZyB0byBhIHByZXJlbGVhc2UgdmVyc2lvblxuICBjb25zdCBwcmVmaXggPSBoaWdoSGFzUHJlID8gJ3ByZScgOiAnJ1xuXG4gIGlmICh2MS5tYWpvciAhPT0gdjIubWFqb3IpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ21ham9yJ1xuICB9XG5cbiAgaWYgKHYxLm1pbm9yICE9PSB2Mi5taW5vcikge1xuICAgIHJldHVybiBwcmVmaXggKyAnbWlub3InXG4gIH1cblxuICBpZiAodjEucGF0Y2ggIT09IHYyLnBhdGNoKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdwYXRjaCdcbiAgfVxuXG4gIC8vIGhpZ2ggYW5kIGxvdyBhcmUgcHJlcmVsZWFzZXNcbiAgcmV0dXJuICdwcmVyZWxlYXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgbWFqb3IgPSAoYSwgbG9vc2UpID0+IG5ldyBTZW1WZXIoYSwgbG9vc2UpLm1ham9yXG5tb2R1bGUuZXhwb3J0cyA9IG1ham9yXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IG1pbm9yID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5taW5vclxubW9kdWxlLmV4cG9ydHMgPSBtaW5vclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBwYXRjaCA9IChhLCBsb29zZSkgPT4gbmV3IFNlbVZlcihhLCBsb29zZSkucGF0Y2hcbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHByZXJlbGVhc2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZSh2ZXJzaW9uLCBvcHRpb25zKVxuICByZXR1cm4gKHBhcnNlZCAmJiBwYXJzZWQucHJlcmVsZWFzZS5sZW5ndGgpID8gcGFyc2VkLnByZXJlbGVhc2UgOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHByZXJlbGVhc2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT5cbiAgbmV3IFNlbVZlcihhLCBsb29zZSkuY29tcGFyZShuZXcgU2VtVmVyKGIsIGxvb3NlKSlcblxubW9kdWxlLmV4cG9ydHMgPSBjb21wYXJlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgcmNvbXBhcmUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYiwgYSwgbG9vc2UpXG5tb2R1bGUuZXhwb3J0cyA9IHJjb21wYXJlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgY29tcGFyZUxvb3NlID0gKGEsIGIpID0+IGNvbXBhcmUoYSwgYiwgdHJ1ZSlcbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUxvb3NlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IGNvbXBhcmVCdWlsZCA9IChhLCBiLCBsb29zZSkgPT4ge1xuICBjb25zdCB2ZXJzaW9uQSA9IG5ldyBTZW1WZXIoYSwgbG9vc2UpXG4gIGNvbnN0IHZlcnNpb25CID0gbmV3IFNlbVZlcihiLCBsb29zZSlcbiAgcmV0dXJuIHZlcnNpb25BLmNvbXBhcmUodmVyc2lvbkIpIHx8IHZlcnNpb25BLmNvbXBhcmVCdWlsZCh2ZXJzaW9uQilcbn1cbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUJ1aWxkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmVCdWlsZCA9IHJlcXVpcmUoJy4vY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChhLCBiLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHJzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChiLCBhLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHJzb3J0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3QgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID4gMFxubW9kdWxlLmV4cG9ydHMgPSBndFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGx0ID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA8IDBcbm1vZHVsZS5leHBvcnRzID0gbHRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBlcSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPT09IDBcbm1vZHVsZS5leHBvcnRzID0gZXFcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBuZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpICE9PSAwXG5tb2R1bGUuZXhwb3J0cyA9IG5lcVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGd0ZSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPj0gMFxubW9kdWxlLmV4cG9ydHMgPSBndGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBsdGUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpIDw9IDBcbm1vZHVsZS5leHBvcnRzID0gbHRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGVxID0gcmVxdWlyZSgnLi9lcScpXG5jb25zdCBuZXEgPSByZXF1aXJlKCcuL25lcScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4vZ3QnKVxuY29uc3QgZ3RlID0gcmVxdWlyZSgnLi9ndGUnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2x0JylcbmNvbnN0IGx0ZSA9IHJlcXVpcmUoJy4vbHRlJylcblxuY29uc3QgY21wID0gKGEsIG9wLCBiLCBsb29zZSkgPT4ge1xuICBzd2l0Y2ggKG9wKSB7XG4gICAgY2FzZSAnPT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSA9PT0gYlxuXG4gICAgY2FzZSAnIT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSAhPT0gYlxuXG4gICAgY2FzZSAnJzpcbiAgICBjYXNlICc9JzpcbiAgICBjYXNlICc9PSc6XG4gICAgICByZXR1cm4gZXEoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICchPSc6XG4gICAgICByZXR1cm4gbmVxKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPic6XG4gICAgICByZXR1cm4gZ3QoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc+PSc6XG4gICAgICByZXR1cm4gZ3RlKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPCc6XG4gICAgICByZXR1cm4gbHQoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc8PSc6XG4gICAgICByZXR1cm4gbHRlKGEsIGIsIGxvb3NlKVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgb3BlcmF0b3I6ICR7b3B9YClcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBjbXBcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuXG5jb25zdCBjb2VyY2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInKSB7XG4gICAgdmVyc2lvbiA9IFN0cmluZyh2ZXJzaW9uKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGxldCBtYXRjaCA9IG51bGxcbiAgaWYgKCFvcHRpb25zLnJ0bCkge1xuICAgIG1hdGNoID0gdmVyc2lvbi5tYXRjaChvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VGVUxMXSA6IHJlW3QuQ09FUkNFXSlcbiAgfSBlbHNlIHtcbiAgICAvLyBGaW5kIHRoZSByaWdodC1tb3N0IGNvZXJjaWJsZSBzdHJpbmcgdGhhdCBkb2VzIG5vdCBzaGFyZVxuICAgIC8vIGEgdGVybWludXMgd2l0aCBhIG1vcmUgbGVmdC13YXJkIGNvZXJjaWJsZSBzdHJpbmcuXG4gICAgLy8gRWcsICcxLjIuMy40JyB3YW50cyB0byBjb2VyY2UgJzIuMy40Jywgbm90ICczLjQnIG9yICc0J1xuICAgIC8vIFdpdGggaW5jbHVkZVByZXJlbGVhc2Ugb3B0aW9uIHNldCwgJzEuMi4zLjQtcmMnIHdhbnRzIHRvIGNvZXJjZSAnMi4zLjQtcmMnLCBub3QgJzIuMy40J1xuICAgIC8vXG4gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzdHJpbmcgY2hlY2tpbmcgd2l0aCBhIC9nIHJlZ2V4cFxuICAgIC8vIE1hbnVhbGx5IHNldCB0aGUgaW5kZXggc28gYXMgdG8gcGljayB1cCBvdmVybGFwcGluZyBtYXRjaGVzLlxuICAgIC8vIFN0b3Agd2hlbiB3ZSBnZXQgYSBtYXRjaCB0aGF0IGVuZHMgYXQgdGhlIHN0cmluZyBlbmQsIHNpbmNlIG5vXG4gICAgLy8gY29lcmNpYmxlIHN0cmluZyBjYW4gYmUgbW9yZSByaWdodC13YXJkIHdpdGhvdXQgdGhlIHNhbWUgdGVybWludXMuXG4gICAgY29uc3QgY29lcmNlUnRsUmVnZXggPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VSVExGVUxMXSA6IHJlW3QuQ09FUkNFUlRMXVxuICAgIGxldCBuZXh0XG4gICAgd2hpbGUgKChuZXh0ID0gY29lcmNlUnRsUmVnZXguZXhlYyh2ZXJzaW9uKSkgJiZcbiAgICAgICAgKCFtYXRjaCB8fCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPT0gdmVyc2lvbi5sZW5ndGgpXG4gICAgKSB7XG4gICAgICBpZiAoIW1hdGNoIHx8XG4gICAgICAgICAgICBuZXh0LmluZGV4ICsgbmV4dFswXS5sZW5ndGggIT09IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSB7XG4gICAgICAgIG1hdGNoID0gbmV4dFxuICAgICAgfVxuICAgICAgY29lcmNlUnRsUmVnZXgubGFzdEluZGV4ID0gbmV4dC5pbmRleCArIG5leHRbMV0ubGVuZ3RoICsgbmV4dFsyXS5sZW5ndGhcbiAgICB9XG4gICAgLy8gbGVhdmUgaXQgaW4gYSBjbGVhbiBzdGF0ZVxuICAgIGNvZXJjZVJ0bFJlZ2V4Lmxhc3RJbmRleCA9IC0xXG4gIH1cblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbWFqb3IgPSBtYXRjaFsyXVxuICBjb25zdCBtaW5vciA9IG1hdGNoWzNdIHx8ICcwJ1xuICBjb25zdCBwYXRjaCA9IG1hdGNoWzRdIHx8ICcwJ1xuICBjb25zdCBwcmVyZWxlYXNlID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJiBtYXRjaFs1XSA/IGAtJHttYXRjaFs1XX1gIDogJydcbiAgY29uc3QgYnVpbGQgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIG1hdGNoWzZdID8gYCske21hdGNoWzZdfWAgOiAnJ1xuXG4gIHJldHVybiBwYXJzZShgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0ke3ByZXJlbGVhc2V9JHtidWlsZH1gLCBvcHRpb25zKVxufVxubW9kdWxlLmV4cG9ydHMgPSBjb2VyY2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2NvbnN0YW50cycpXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IHRydW5jYXRlID0gKHZlcnNpb24sIHRydW5jYXRpb24sIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFjb25zdGFudHMuUkVMRUFTRV9UWVBFUy5pbmNsdWRlcyh0cnVuY2F0aW9uKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBjbG9uZWRWZXJzaW9uID0gY2xvbmVJbnB1dFZlcnNpb24odmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIGNsb25lZFZlcnNpb24gJiYgZG9UcnVuY2F0aW9uKGNsb25lZFZlcnNpb24sIHRydW5jYXRpb24pXG59XG5cbmNvbnN0IGNsb25lSW5wdXRWZXJzaW9uID0gKHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgdmVyc2lvblN0cmluZ1RvUGFyc2UgPSAoXG4gICAgdmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlciA/IHZlcnNpb24udmVyc2lvbiA6IHZlcnNpb25cbiAgKVxuXG4gIHJldHVybiBwYXJzZSh2ZXJzaW9uU3RyaW5nVG9QYXJzZSwgb3B0aW9ucylcbn1cblxuY29uc3QgZG9UcnVuY2F0aW9uID0gKHZlcnNpb24sIHRydW5jYXRpb24pID0+IHtcbiAgaWYgKGlzUHJlcmVsZWFzZSh0cnVuY2F0aW9uKSkge1xuICAgIHJldHVybiB2ZXJzaW9uLnZlcnNpb25cbiAgfVxuXG4gIHZlcnNpb24ucHJlcmVsZWFzZSA9IFtdXG5cbiAgc3dpdGNoICh0cnVuY2F0aW9uKSB7XG4gICAgY2FzZSAnbWFqb3InOlxuICAgICAgdmVyc2lvbi5taW5vciA9IDBcbiAgICAgIHZlcnNpb24ucGF0Y2ggPSAwXG4gICAgICBicmVha1xuICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgIHZlcnNpb24ucGF0Y2ggPSAwXG4gICAgICBicmVha1xuICB9XG5cbiAgcmV0dXJuIHZlcnNpb24uZm9ybWF0KClcbn1cblxuY29uc3QgaXNQcmVyZWxlYXNlID0gKHR5cGUpID0+IHtcbiAgcmV0dXJuIHR5cGUuc3RhcnRzV2l0aCgncHJlJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cnVuY2F0ZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBMUlVDYWNoZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLm1heCA9IDEwMDBcbiAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKVxuICB9XG5cbiAgZ2V0IChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubWFwLmdldChrZXkpXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgbWFwIGFuZCBhZGQgaXQgdG8gdGhlIGVuZFxuICAgICAgdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgICAgIHRoaXMubWFwLnNldChrZXksIHZhbHVlKVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICB9XG5cbiAgZGVsZXRlIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGtleSlcbiAgfVxuXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLmRlbGV0ZShrZXkpXG5cbiAgICBpZiAoIWRlbGV0ZWQgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgY2FjaGUgaXMgZnVsbCwgZGVsZXRlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW1cbiAgICAgIGlmICh0aGlzLm1hcC5zaXplID49IHRoaXMubWF4KSB7XG4gICAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5tYXAua2V5cygpLm5leHQoKS52YWx1ZVxuICAgICAgICB0aGlzLmRlbGV0ZShmaXJzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXAuc2V0KGtleSwgdmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExSVUNhY2hlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNQQUNFX0NIQVJBQ1RFUlMgPSAvXFxzKy9nXG5cbi8vIGhvaXN0ZWQgY2xhc3MgZm9yIGN5Y2xpYyBkZXBlbmRlbmN5XG5jbGFzcyBSYW5nZSB7XG4gIGNvbnN0cnVjdG9yIChyYW5nZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UgJiZcbiAgICAgICAgcmFuZ2UuaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZS5yYXcsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJhbmdlIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgLy8ganVzdCBwdXQgaXQgaW4gdGhlIHNldCBhbmQgcmV0dXJuXG4gICAgICB0aGlzLnJhdyA9IHJhbmdlLnZhbHVlXG4gICAgICB0aGlzLnNldCA9IFtbcmFuZ2VdXVxuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSB1bmRlZmluZWRcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICAvLyBGaXJzdCByZWR1Y2UgYWxsIHdoaXRlc3BhY2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZWx5XG4gICAgLy8gb24gcG90ZW50aWFsbHkgc2xvdyByZWdleGVzIGxpa2UgXFxzKi4gVGhpcyBpcyB0aGVuIHN0b3JlZCBhbmQgdXNlZCBmb3JcbiAgICAvLyBmdXR1cmUgZXJyb3IgbWVzc2FnZXMgYXMgd2VsbC5cbiAgICB0aGlzLnJhdyA9IHJhbmdlLnRyaW0oKS5yZXBsYWNlKFNQQUNFX0NIQVJBQ1RFUlMsICcgJylcblxuICAgIC8vIEZpcnN0LCBzcGxpdCBvbiB8fFxuICAgIHRoaXMuc2V0ID0gdGhpcy5yYXdcbiAgICAgIC5zcGxpdCgnfHwnKVxuICAgICAgLy8gbWFwIHRoZSByYW5nZSB0byBhIDJkIGFycmF5IG9mIGNvbXBhcmF0b3JzXG4gICAgICAubWFwKHIgPT4gdGhpcy5wYXJzZVJhbmdlKHIudHJpbSgpKSlcbiAgICAgIC8vIHRocm93IG91dCBhbnkgY29tcGFyYXRvciBsaXN0cyB0aGF0IGFyZSBlbXB0eVxuICAgICAgLy8gdGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCBpdCB3YXMgbm90IGEgdmFsaWQgcmFuZ2UsIHdoaWNoIGlzIGFsbG93ZWRcbiAgICAgIC8vIGluIGxvb3NlIG1vZGUsIGJ1dCB3aWxsIHN0aWxsIHRocm93IGlmIHRoZSBXSE9MRSByYW5nZSBpcyBpbnZhbGlkLlxuICAgICAgLmZpbHRlcihjID0+IGMubGVuZ3RoKVxuXG4gICAgaWYgKCF0aGlzLnNldC5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgU2VtVmVyIFJhbmdlOiAke3RoaXMucmF3fWApXG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZSBhbnkgdGhhdCBhcmUgbm90IHRoZSBudWxsIHNldCwgdGhyb3cgb3V0IG51bGwgc2V0cy5cbiAgICBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgLy8ga2VlcCB0aGUgZmlyc3Qgb25lLCBpbiBjYXNlIHRoZXkncmUgYWxsIG51bGwgc2V0c1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLnNldFswXVxuICAgICAgdGhpcy5zZXQgPSB0aGlzLnNldC5maWx0ZXIoYyA9PiAhaXNOdWxsU2V0KGNbMF0pKVxuICAgICAgaWYgKHRoaXMuc2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNldCA9IFtmaXJzdF1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlIGFueSB0aGF0IGFyZSAqLCB0aGVuIHRoZSByYW5nZSBpcyBqdXN0ICpcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgaWYgKGMubGVuZ3RoID09PSAxICYmIGlzQW55KGNbMF0pKSB7XG4gICAgICAgICAgICB0aGlzLnNldCA9IFtjXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1hdHRlZCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0IHJhbmdlICgpIHtcbiAgICBpZiAodGhpcy5mb3JtYXR0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSAnJ1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnfHwnXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSB0aGlzLnNldFtpXVxuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNvbXBzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgaWYgKGsgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnICdcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JtYXR0ZWQgKz0gY29tcHNba10udG9TdHJpbmcoKS50cmltKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWRcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZVxuICB9XG5cbiAgcGFyc2VSYW5nZSAocmFuZ2UpIHtcbiAgICAvLyBzdHJpcCBidWlsZCBtZXRhZGF0YSBzbyBpdCBjYW4ndCBibGVlZCBpbnRvIHRoZSB2ZXJzaW9uXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKEJVSUxEU1RSSVBSRSwgJycpXG5cbiAgICAvLyBtZW1vaXplIHJhbmdlIHBhcnNpbmcgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIHRoaXMgaXMgYSB2ZXJ5IGhvdCBwYXRoLCBhbmQgZnVsbHkgZGV0ZXJtaW5pc3RpYy5cbiAgICBjb25zdCBtZW1vT3B0cyA9XG4gICAgICAodGhpcy5vcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFKSB8XG4gICAgICAodGhpcy5vcHRpb25zLmxvb3NlICYmIEZMQUdfTE9PU0UpXG4gICAgY29uc3QgbWVtb0tleSA9IG1lbW9PcHRzICsgJzonICsgcmFuZ2VcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQobWVtb0tleSlcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkXG4gICAgfVxuXG4gICAgY29uc3QgbG9vc2UgPSB0aGlzLm9wdGlvbnMubG9vc2VcbiAgICAvLyBgMS4yLjMgLSAxLjIuNGAgPT4gYD49MS4yLjMgPD0xLjIuNGBcbiAgICBjb25zdCBociA9IGxvb3NlID8gcmVbdC5IWVBIRU5SQU5HRUxPT1NFXSA6IHJlW3QuSFlQSEVOUkFOR0VdXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKGhyLCBoeXBoZW5SZXBsYWNlKHRoaXMub3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkpXG4gICAgZGVidWcoJ2h5cGhlbiByZXBsYWNlJywgcmFuZ2UpXG5cbiAgICAvLyBgPiAxLjIuMyA8IDEuMi41YCA9PiBgPjEuMi4zIDwxLjIuNWBcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DT01QQVJBVE9SVFJJTV0sIGNvbXBhcmF0b3JUcmltUmVwbGFjZSlcbiAgICBkZWJ1ZygnY29tcGFyYXRvciB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgfiAxLjIuM2AgPT4gYH4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5USUxERVRSSU1dLCB0aWxkZVRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCd0aWxkZSB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgXiAxLjIuM2AgPT4gYF4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DQVJFVFRSSU1dLCBjYXJldFRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCdjYXJldCB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmFuZ2UgaXMgY29tcGxldGVseSB0cmltbWVkIGFuZFxuICAgIC8vIHJlYWR5IHRvIGJlIHNwbGl0IGludG8gY29tcGFyYXRvcnMuXG5cbiAgICBsZXQgcmFuZ2VMaXN0ID0gcmFuZ2VcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKGNvbXAgPT4gcGFyc2VDb21wYXJhdG9yKGNvbXAsIHRoaXMub3B0aW9ucykpXG4gICAgICAuam9pbignICcpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLy8gPj0wLjAuMCBpcyBlcXVpdmFsZW50IHRvICpcbiAgICAgIC5tYXAoY29tcCA9PiByZXBsYWNlR1RFMChjb21wLCB0aGlzLm9wdGlvbnMpKVxuXG4gICAgaWYgKGxvb3NlKSB7XG4gICAgICAvLyBpbiBsb29zZSBtb2RlLCB0aHJvdyBvdXQgYW55IHRoYXQgYXJlIG5vdCB2YWxpZCBjb21wYXJhdG9yc1xuICAgICAgcmFuZ2VMaXN0ID0gcmFuZ2VMaXN0LmZpbHRlcihjb21wID0+IHtcbiAgICAgICAgZGVidWcoJ2xvb3NlIGludmFsaWQgZmlsdGVyJywgY29tcCwgdGhpcy5vcHRpb25zKVxuICAgICAgICByZXR1cm4gISFjb21wLm1hdGNoKHJlW3QuQ09NUEFSQVRPUkxPT1NFXSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGRlYnVnKCdyYW5nZSBsaXN0JywgcmFuZ2VMaXN0KVxuXG4gICAgLy8gaWYgYW55IGNvbXBhcmF0b3JzIGFyZSB0aGUgbnVsbCBzZXQsIHRoZW4gcmVwbGFjZSB3aXRoIEpVU1QgbnVsbCBzZXRcbiAgICAvLyBpZiBtb3JlIHRoYW4gb25lIGNvbXBhcmF0b3IsIHJlbW92ZSBhbnkgKiBjb21wYXJhdG9yc1xuICAgIC8vIGFsc28sIGRvbid0IGluY2x1ZGUgdGhlIHNhbWUgY29tcGFyYXRvciBtb3JlIHRoYW4gb25jZVxuICAgIGNvbnN0IHJhbmdlTWFwID0gbmV3IE1hcCgpXG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZUxpc3QubWFwKGNvbXAgPT4gbmV3IENvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKSlcbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcGFyYXRvcnMpIHtcbiAgICAgIGlmIChpc051bGxTZXQoY29tcCkpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wXVxuICAgICAgfVxuICAgICAgcmFuZ2VNYXAuc2V0KGNvbXAudmFsdWUsIGNvbXApXG4gICAgfVxuICAgIGlmIChyYW5nZU1hcC5zaXplID4gMSAmJiByYW5nZU1hcC5oYXMoJycpKSB7XG4gICAgICByYW5nZU1hcC5kZWxldGUoJycpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLnJhbmdlTWFwLnZhbHVlcygpXVxuICAgIGNhY2hlLnNldChtZW1vS2V5LCByZXN1bHQpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaW50ZXJzZWN0cyAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIShyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBSYW5nZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0LnNvbWUoKHRoaXNDb21wYXJhdG9ycykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNTYXRpc2ZpYWJsZSh0aGlzQ29tcGFyYXRvcnMsIG9wdGlvbnMpICYmXG4gICAgICAgIHJhbmdlLnNldC5zb21lKChyYW5nZUNvbXBhcmF0b3JzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzU2F0aXNmaWFibGUocmFuZ2VDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgICAgIHRoaXNDb21wYXJhdG9ycy5ldmVyeSgodGhpc0NvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlQ29tcGFyYXRvcnMuZXZlcnkoKHJhbmdlQ29tcGFyYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzQ29tcGFyYXRvci5pbnRlcnNlY3RzKHJhbmdlQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG4gIH1cblxuICAvLyBpZiBBTlkgb2YgdGhlIHNldHMgbWF0Y2ggQUxMIG9mIGl0cyBjb21wYXJhdG9ycywgdGhlbiBwYXNzXG4gIHRlc3QgKHZlcnNpb24pIHtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIHRoaXMub3B0aW9ucylcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0ZXN0U2V0KHRoaXMuc2V0W2ldLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VcblxuY29uc3QgTFJVID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvbHJ1Y2FjaGUnKVxuY29uc3QgY2FjaGUgPSBuZXcgTFJVKClcblxuY29uc3QgcGFyc2VPcHRpb25zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcGFyc2Utb3B0aW9ucycpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jb21wYXJhdG9yJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3Qge1xuICBzYWZlUmU6IHJlLFxuICBzcmMsXG4gIHQsXG4gIGNvbXBhcmF0b3JUcmltUmVwbGFjZSxcbiAgdGlsZGVUcmltUmVwbGFjZSxcbiAgY2FyZXRUcmltUmVwbGFjZSxcbn0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCB7IEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFLCBGTEFHX0xPT1NFIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuXG4vLyB1bmJvdW5kZWQgZ2xvYmFsIGJ1aWxkLW1ldGFkYXRhIHN0cmlwcGVyIHVzZWQgYnkgcGFyc2VSYW5nZVxuY29uc3QgQlVJTERTVFJJUFJFID0gbmV3IFJlZ0V4cChzcmNbdC5CVUlMRF0sICdnJylcblxuY29uc3QgaXNOdWxsU2V0ID0gYyA9PiBjLnZhbHVlID09PSAnPDAuMC4wLTAnXG5jb25zdCBpc0FueSA9IGMgPT4gYy52YWx1ZSA9PT0gJydcblxuLy8gdGFrZSBhIHNldCBvZiBjb21wYXJhdG9ycyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmVcbi8vIGV4aXN0cyBhIHZlcnNpb24gd2hpY2ggY2FuIHNhdGlzZnkgaXRcbmNvbnN0IGlzU2F0aXNmaWFibGUgPSAoY29tcGFyYXRvcnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlc3VsdCA9IHRydWVcbiAgY29uc3QgcmVtYWluaW5nQ29tcGFyYXRvcnMgPSBjb21wYXJhdG9ycy5zbGljZSgpXG4gIGxldCB0ZXN0Q29tcGFyYXRvciA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLnBvcCgpXG5cbiAgd2hpbGUgKHJlc3VsdCAmJiByZW1haW5pbmdDb21wYXJhdG9ycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSByZW1haW5pbmdDb21wYXJhdG9ycy5ldmVyeSgob3RoZXJDb21wYXJhdG9yKSA9PiB7XG4gICAgICByZXR1cm4gdGVzdENvbXBhcmF0b3IuaW50ZXJzZWN0cyhvdGhlckNvbXBhcmF0b3IsIG9wdGlvbnMpXG4gICAgfSlcblxuICAgIHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gY29tcHJpc2VkIG9mIHhyYW5nZXMsIHRpbGRlcywgc3RhcnMsIGFuZCBndGx0J3MgYXQgdGhpcyBwb2ludC5cbi8vIGFscmVhZHkgcmVwbGFjZWQgdGhlIGh5cGhlbiByYW5nZXNcbi8vIHR1cm4gaW50byBhIHNldCBvZiBKVVNUIGNvbXBhcmF0b3JzLlxuY29uc3QgcGFyc2VDb21wYXJhdG9yID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29tcCA9IGNvbXAucmVwbGFjZShyZVt0LkJVSUxEXSwgJycpXG4gIGRlYnVnKCdjb21wJywgY29tcCwgb3B0aW9ucylcbiAgY29tcCA9IHJlcGxhY2VDYXJldHMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ2NhcmV0JywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VUaWxkZXMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ3RpbGRlcycsIGNvbXApXG4gIGNvbXAgPSByZXBsYWNlWFJhbmdlcyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygneHJhbmdlJywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VTdGFycyhjb21wLCBvcHRpb25zKVxuICBkZWJ1Zygnc3RhcnMnLCBjb21wKVxuICByZXR1cm4gY29tcFxufVxuXG5jb25zdCBpc1ggPSBpZCA9PiAhaWQgfHwgaWQudG9Mb3dlckNhc2UoKSA9PT0gJ3gnIHx8IGlkID09PSAnKidcblxuY29uc3QgaW52YWxpZFhSYW5nZU9yZGVyID0gKE0sIG0sIHApID0+IChcbiAgKGlzWChNKSAmJiAhaXNYKG0pKSB8fFxuICAoaXNYKG0pICYmIHAgJiYgIWlzWChwKSlcbilcblxuLy8gfiwgfj4gLS0+ICogKGFueSwga2luZGEgc2lsbHkpXG4vLyB+MiwgfjIueCwgfjIueC54LCB+PjIsIH4+Mi54IH4+Mi54LnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIH4yLjAsIH4yLjAueCwgfj4yLjAsIH4+Mi4wLnggLS0+ID49Mi4wLjAgPDIuMS4wLTBcbi8vIH4xLjIsIH4xLjIueCwgfj4xLjIsIH4+MS4yLnggLS0+ID49MS4yLjAgPDEuMy4wLTBcbi8vIH4xLjIuMywgfj4xLjIuMyAtLT4gPj0xLjIuMyA8MS4zLjAtMFxuLy8gfjEuMi4wLCB+PjEuMi4wIC0tPiA+PTEuMi4wIDwxLjMuMC0wXG4vLyB+MC4wLjEgLS0+ID49MC4wLjEgPDAuMS4wLTBcbmNvbnN0IHJlcGxhY2VUaWxkZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VUaWxkZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VUaWxkZSA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5USUxERUxPT1NFXSA6IHJlW3QuVElMREVdXG4gIC8vIGlmIHdlJ3JlIGluY2x1ZGluZyBwcmVyZWxlYXNlcyBpbiB0aGUgbWF0Y2gsIHRoZW4gdGhlIGxvd2VyIGJvdW5kIGlzXG4gIC8vIC0wLCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByZXJlbGVhc2UgdmFsdWUsIGp1c3QgbGlrZSB4LXJhbmdlcyBhbmQgY2FyZXRzLlxuICAvLyB0aGlzIGtlZXBzIGB+MS4yYCBlcXVpdmFsZW50IHRvIHRoZSBgMS4yLnhgIHgtcmFuZ2UgaXQncyBkb2N1bWVudGVkIGFzLlxuICBjb25zdCB6ID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCd0aWxkZScsIGNvbXAsIF8sIE0sIG0sIHAsIHByKVxuICAgIGxldCByZXRcblxuICAgIGlmIChpc1goTSkpIHtcbiAgICAgIHJldCA9ICcnXG4gICAgfSBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICAvLyB+MS4yID09ID49MS4yLjAgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHt6fSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH0gZWxzZSBpZiAocHIpIHtcbiAgICAgIGRlYnVnKCdyZXBsYWNlVGlsZGUgcHInLCBwcilcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gfjEuMi4zID09ID49MS4yLjMgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3BcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9XG5cbiAgICBkZWJ1ZygndGlsZGUgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuLy8gXiAtLT4gKiAoYW55LCBraW5kYSBzaWxseSlcbi8vIF4yLCBeMi54LCBeMi54LnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIF4yLjAsIF4yLjAueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gXjEuMiwgXjEuMi54IC0tPiA+PTEuMi4wIDwyLjAuMC0wXG4vLyBeMS4yLjMgLS0+ID49MS4yLjMgPDIuMC4wLTBcbi8vIF4xLjIuMCAtLT4gPj0xLjIuMCA8Mi4wLjAtMFxuLy8gXjAuMC4xIC0tPiA+PTAuMC4xIDwwLjAuMi0wXG4vLyBeMC4xLjAgLS0+ID49MC4xLjAgPDAuMi4wLTBcbmNvbnN0IHJlcGxhY2VDYXJldHMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VDYXJldChjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VDYXJldCA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGRlYnVnKCdjYXJldCcsIGNvbXAsIG9wdGlvbnMpXG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5DQVJFVExPT1NFXSA6IHJlW3QuQ0FSRVRdXG4gIGNvbnN0IHogPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gJy0wJyA6ICcnXG4gIHJldHVybiBjb21wLnJlcGxhY2UociwgKF8sIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ2NhcmV0JywgY29tcCwgXywgTSwgbSwgcCwgcHIpXG4gICAgbGV0IHJldFxuXG4gICAgaWYgKGlzWChNKSkge1xuICAgICAgcmV0ID0gJydcbiAgICB9IGVsc2UgaWYgKGlzWChtKSkge1xuICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3p9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgfSBlbHNlIGlmIChpc1gocCkpIHtcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3p9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByKSB7XG4gICAgICBkZWJ1ZygncmVwbGFjZUNhcmV0IHByJywgcHIpXG4gICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgIGlmIChtID09PSAnMCcpIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICAgICAgfSA8JHtNfS4ke219LiR7K3AgKyAxfS0wYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgfSA8JHsrTSArIDF9LjAuMC0wYFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Zygnbm8gcHInKVxuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICBpZiAobSA9PT0gJzAnKSB7XG4gICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgICAgIH0gPCR7TX0uJHttfS4keytwICsgMX0tMGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgIH0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWJ1ZygnY2FyZXQgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuY29uc3QgcmVwbGFjZVhSYW5nZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZVhSYW5nZXMnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZVhSYW5nZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VYUmFuZ2UgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBjb21wID0gY29tcC50cmltKClcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LlhSQU5HRUxPT1NFXSA6IHJlW3QuWFJBTkdFXVxuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChyZXQsIGd0bHQsIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ3hSYW5nZScsIGNvbXAsIHJldCwgZ3RsdCwgTSwgbSwgcCwgcHIpXG4gICAgaWYgKGludmFsaWRYUmFuZ2VPcmRlcihNLCBtLCBwKSkge1xuICAgICAgcmV0dXJuIGNvbXBcbiAgICB9XG5cbiAgICBjb25zdCB4TSA9IGlzWChNKVxuICAgIGNvbnN0IHhtID0geE0gfHwgaXNYKG0pXG4gICAgY29uc3QgeHAgPSB4bSB8fCBpc1gocClcbiAgICBjb25zdCBhbnlYID0geHBcblxuICAgIGlmIChndGx0ID09PSAnPScgJiYgYW55WCkge1xuICAgICAgZ3RsdCA9ICcnXG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgaW5jbHVkaW5nIHByZXJlbGVhc2VzIGluIHRoZSBtYXRjaCwgdGhlbiB3ZSBuZWVkXG4gICAgLy8gdG8gZml4IHRoaXMgdG8gLTAsIHRoZSBsb3dlc3QgcG9zc2libGUgcHJlcmVsZWFzZSB2YWx1ZVxuICAgIHByID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuXG4gICAgaWYgKHhNKSB7XG4gICAgICBpZiAoZ3RsdCA9PT0gJz4nIHx8IGd0bHQgPT09ICc8Jykge1xuICAgICAgICAvLyBub3RoaW5nIGlzIGFsbG93ZWRcbiAgICAgICAgcmV0ID0gJzwwLjAuMC0wJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm90aGluZyBpcyBmb3JiaWRkZW5cbiAgICAgICAgcmV0ID0gJyonXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChndGx0ICYmIGFueVgpIHtcbiAgICAgIC8vIHdlIGtub3cgcGF0Y2ggaXMgYW4geCwgYmVjYXVzZSB3ZSBoYXZlIGFueSB4IGF0IGFsbC5cbiAgICAgIC8vIHJlcGxhY2UgWCB3aXRoIDBcbiAgICAgIGlmICh4bSkge1xuICAgICAgICBtID0gMFxuICAgICAgfVxuICAgICAgcCA9IDBcblxuICAgICAgaWYgKGd0bHQgPT09ICc+Jykge1xuICAgICAgICAvLyA+MSA9PiA+PTIuMC4wXG4gICAgICAgIC8vID4xLjIgPT4gPj0xLjMuMFxuICAgICAgICBndGx0ID0gJz49J1xuICAgICAgICBpZiAoeG0pIHtcbiAgICAgICAgICBNID0gK00gKyAxXG4gICAgICAgICAgbSA9IDBcbiAgICAgICAgICBwID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG0gPSArbSArIDFcbiAgICAgICAgICBwID0gMFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGd0bHQgPT09ICc8PScpIHtcbiAgICAgICAgLy8gPD0wLjcueCBpcyBhY3R1YWxseSA8MC44LjAsIHNpbmNlIGFueSAwLjcueCBzaG91bGRcbiAgICAgICAgLy8gcGFzcy4gIFNpbWlsYXJseSwgPD03LnggaXMgYWN0dWFsbHkgPDguMC4wLCBldGMuXG4gICAgICAgIGd0bHQgPSAnPCdcbiAgICAgICAgaWYgKHhtKSB7XG4gICAgICAgICAgTSA9ICtNICsgMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG0gPSArbSArIDFcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ3RsdCA9PT0gJzwnKSB7XG4gICAgICAgIHByID0gJy0wJ1xuICAgICAgfVxuXG4gICAgICByZXQgPSBgJHtndGx0ICsgTX0uJHttfS4ke3B9JHtwcn1gXG4gICAgfSBlbHNlIGlmICh4bSkge1xuICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3ByfSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoeHApIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHtwclxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH1cblxuICAgIGRlYnVnKCd4UmFuZ2UgcmV0dXJuJywgcmV0KVxuXG4gICAgcmV0dXJuIHJldFxuICB9KVxufVxuXG4vLyBCZWNhdXNlICogaXMgQU5ELWVkIHdpdGggZXZlcnl0aGluZyBlbHNlIGluIHRoZSBjb21wYXJhdG9yLFxuLy8gYW5kICcnIG1lYW5zIFwiYW55IHZlcnNpb25cIiwganVzdCByZW1vdmUgdGhlICpzIGVudGlyZWx5LlxuY29uc3QgcmVwbGFjZVN0YXJzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ3JlcGxhY2VTdGFycycsIGNvbXAsIG9wdGlvbnMpXG4gIC8vIExvb3NlbmVzcyBpcyBpZ25vcmVkIGhlcmUuICBzdGFyIGlzIGFsd2F5cyBhcyBsb29zZSBhcyBpdCBnZXRzIVxuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZShyZVt0LlNUQVJdLCAnJylcbn1cblxuY29uc3QgcmVwbGFjZUdURTAgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZUdURTAnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZShyZVtvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gdC5HVEUwUFJFIDogdC5HVEUwXSwgJycpXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIHN0cmluZy5yZXBsYWNlKHJlW3QuSFlQSEVOUkFOR0VdKVxuLy8gTSwgbSwgcGF0Y2gsIHByZXJlbGVhc2UsIGJ1aWxkXG4vLyAxLjIgLSAzLjQuNSA9PiA+PTEuMi4wIDw9My40LjVcbi8vIDEuMi4zIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wLTAgQW55IDMuNC54IHdpbGwgZG9cbi8vIDEuMiAtIDMuNCA9PiA+PTEuMi4wIDwzLjUuMC0wXG4vLyBUT0RPIGJ1aWxkP1xuY29uc3QgaHlwaGVuUmVwbGFjZSA9IGluY1ByID0+ICgkMCxcbiAgZnJvbSwgZk0sIGZtLCBmcCwgZnByLCBmYixcbiAgdG8sIHRNLCB0bSwgdHAsIHRwcikgPT4ge1xuICBpZiAoaXNYKGZNKSkge1xuICAgIGZyb20gPSAnJ1xuICB9IGVsc2UgaWYgKGlzWChmbSkpIHtcbiAgICBmcm9tID0gYD49JHtmTX0uMC4wJHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH0gZWxzZSBpZiAoaXNYKGZwKSkge1xuICAgIGZyb20gPSBgPj0ke2ZNfS4ke2ZtfS4wJHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH0gZWxzZSBpZiAoZnByKSB7XG4gICAgZnJvbSA9IGA+PSR7ZnJvbX1gXG4gIH0gZWxzZSB7XG4gICAgZnJvbSA9IGA+PSR7ZnJvbX0ke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfVxuXG4gIGlmIChpc1godE0pKSB7XG4gICAgdG8gPSAnJ1xuICB9IGVsc2UgaWYgKGlzWCh0bSkpIHtcbiAgICB0byA9IGA8JHsrdE0gKyAxfS4wLjAtMGBcbiAgfSBlbHNlIGlmIChpc1godHApKSB7XG4gICAgdG8gPSBgPCR7dE19LiR7K3RtICsgMX0uMC0wYFxuICB9IGVsc2UgaWYgKHRwcikge1xuICAgIHRvID0gYDw9JHt0TX0uJHt0bX0uJHt0cH0tJHt0cHJ9YFxuICB9IGVsc2UgaWYgKGluY1ByKSB7XG4gICAgdG8gPSBgPCR7dE19LiR7dG19LiR7K3RwICsgMX0tMGBcbiAgfSBlbHNlIHtcbiAgICB0byA9IGA8PSR7dG99YFxuICB9XG5cbiAgcmV0dXJuIGAke2Zyb219ICR7dG99YC50cmltKClcbn1cblxuY29uc3QgdGVzdFNldCA9IChzZXQsIHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXNldFtpXS50ZXN0KHZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBpZiAodmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgIC8vIEZpbmQgdGhlIHNldCBvZiB2ZXJzaW9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIGhhdmUgcHJlcmVsZWFzZXNcbiAgICAvLyBGb3IgZXhhbXBsZSwgXjEuMi4zLXByLjEgZGVzdWdhcnMgdG8gPj0xLjIuMy1wci4xIDwyLjAuMFxuICAgIC8vIFRoYXQgc2hvdWxkIGFsbG93IGAxLjIuMy1wci4yYCB0byBwYXNzLlxuICAgIC8vIEhvd2V2ZXIsIGAxLjIuNC1hbHBoYS5ub3RyZWFkeWAgc2hvdWxkIE5PVCBiZSBhbGxvd2VkLFxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0J3Mgd2l0aGluIHRoZSByYW5nZSBzZXQgYnkgdGhlIGNvbXBhcmF0b3JzLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWJ1ZyhzZXRbaV0uc2VtdmVyKVxuICAgICAgaWYgKHNldFtpXS5zZW12ZXIgPT09IENvbXBhcmF0b3IuQU5ZKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXRbaV0uc2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBhbGxvd2VkID0gc2V0W2ldLnNlbXZlclxuICAgICAgICBpZiAoYWxsb3dlZC5tYWpvciA9PT0gdmVyc2lvbi5tYWpvciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5taW5vciA9PT0gdmVyc2lvbi5taW5vciAmJlxuICAgICAgICAgICAgYWxsb3dlZC5wYXRjaCA9PT0gdmVyc2lvbi5wYXRjaCkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWZXJzaW9uIGhhcyBhIC1wcmUsIGJ1dCBpdCdzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2UgbGlrZS5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEFOWSA9IFN5bWJvbCgnU2VtVmVyIEFOWScpXG4vLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgQ29tcGFyYXRvciB7XG4gIHN0YXRpYyBnZXQgQU5ZICgpIHtcbiAgICByZXR1cm4gQU5ZXG4gIH1cblxuICBjb25zdHJ1Y3RvciAoY29tcCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChjb21wIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgaWYgKGNvbXAubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSkge1xuICAgICAgICByZXR1cm4gY29tcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcCA9IGNvbXAudmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wID0gY29tcC50cmltKCkuc3BsaXQoL1xccysvKS5qb2luKCcgJylcbiAgICBkZWJ1ZygnY29tcGFyYXRvcicsIGNvbXAsIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLnBhcnNlKGNvbXApXG5cbiAgICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wZXJhdG9yICsgdGhpcy5zZW12ZXIudmVyc2lvblxuICAgIH1cblxuICAgIGRlYnVnKCdjb21wJywgdGhpcylcbiAgfVxuXG4gIHBhcnNlIChjb21wKSB7XG4gICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuQ09NUEFSQVRPUkxPT1NFXSA6IHJlW3QuQ09NUEFSQVRPUl1cbiAgICBjb25zdCBtID0gY29tcC5tYXRjaChyKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGNvbXBhcmF0b3I6ICR7Y29tcH1gKVxuICAgIH1cblxuICAgIHRoaXMub3BlcmF0b3IgPSBtWzFdICE9PSB1bmRlZmluZWQgPyBtWzFdIDogJydcbiAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJz0nKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiBpdCBsaXRlcmFsbHkgaXMganVzdCAnPicgb3IgJycgdGhlbiBhbGxvdyBhbnl0aGluZy5cbiAgICBpZiAoIW1bMl0pIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gQU5ZXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gbmV3IFNlbVZlcihtWzJdLCB0aGlzLm9wdGlvbnMubG9vc2UpXG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cblxuICB0ZXN0ICh2ZXJzaW9uKSB7XG4gICAgZGVidWcoJ0NvbXBhcmF0b3IudGVzdCcsIHZlcnNpb24sIHRoaXMub3B0aW9ucy5sb29zZSlcblxuICAgIGlmICh0aGlzLnNlbXZlciA9PT0gQU5ZIHx8IHZlcnNpb24gPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY21wKHZlcnNpb24sIHRoaXMub3BlcmF0b3IsIHRoaXMuc2VtdmVyLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbnRlcnNlY3RzIChjb21wLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGNvbXAudmFsdWUsIG9wdGlvbnMpLnRlc3QodGhpcy52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKGNvbXAub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICBpZiAoY29tcC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy52YWx1ZSwgb3B0aW9ucykudGVzdChjb21wLnNlbXZlcilcbiAgICB9XG5cbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyBTcGVjaWFsIGNhc2VzIHdoZXJlIG5vdGhpbmcgY2FuIHBvc3NpYmx5IGJlIGxvd2VyXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICAgICh0aGlzLnZhbHVlID09PSAnPDAuMC4wLTAnIHx8IGNvbXAudmFsdWUgPT09ICc8MC4wLjAtMCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmXG4gICAgICAodGhpcy52YWx1ZS5zdGFydHNXaXRoKCc8MC4wLjAnKSB8fCBjb21wLnZhbHVlLnN0YXJ0c1dpdGgoJzwwLjAuMCcpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gU2FtZSBkaXJlY3Rpb24gaW5jcmVhc2luZyAoPiBvciA+PSlcbiAgICBpZiAodGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykgJiYgY29tcC5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFNhbWUgZGlyZWN0aW9uIGRlY3JlYXNpbmcgKDwgb3IgPD0pXG4gICAgaWYgKHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBzYW1lIFNlbVZlciBhbmQgYm90aCBzaWRlcyBhcmUgaW5jbHVzaXZlICg8PSBvciA+PSlcbiAgICBpZiAoXG4gICAgICAodGhpcy5zZW12ZXIudmVyc2lvbiA9PT0gY29tcC5zZW12ZXIudmVyc2lvbikgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IuaW5jbHVkZXMoJz0nKSAmJiBjb21wLm9wZXJhdG9yLmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIG9wcG9zaXRlIGRpcmVjdGlvbnMgbGVzcyB0aGFuXG4gICAgaWYgKGNtcCh0aGlzLnNlbXZlciwgJzwnLCBjb21wLnNlbXZlciwgb3B0aW9ucykgJiZcbiAgICAgIHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zIGdyZWF0ZXIgdGhhblxuICAgIGlmIChjbXAodGhpcy5zZW12ZXIsICc+JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJz4nKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb21wYXJhdG9yXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCBjbXAgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL3JhbmdlJylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IHNhdGlzZmllcyA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiByYW5nZS50ZXN0KHZlcnNpb24pXG59XG5tb2R1bGUuZXhwb3J0cyA9IHNhdGlzZmllc1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuXG4vLyBNb3N0bHkganVzdCBmb3IgdGVzdGluZyBhbmQgbGVnYWN5IEFQSSByZWFzb25zXG5jb25zdCB0b0NvbXBhcmF0b3JzID0gKHJhbmdlLCBvcHRpb25zKSA9PlxuICBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnNldFxuICAgIC5tYXAoY29tcCA9PiBjb21wLm1hcChjID0+IGMudmFsdWUpLmpvaW4oJyAnKS50cmltKCkuc3BsaXQoJyAnKSlcblxubW9kdWxlLmV4cG9ydHMgPSB0b0NvbXBhcmF0b3JzXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbmNvbnN0IG1heFNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtYXggPSBudWxsXG4gIGxldCBtYXhTViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1heCB8fCBtYXhTVi5jb21wYXJlKHYpID09PSAtMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1heCwgdiwgdHJ1ZSlcbiAgICAgICAgbWF4ID0gdlxuICAgICAgICBtYXhTViA9IG5ldyBTZW1WZXIobWF4LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1heFxufVxubW9kdWxlLmV4cG9ydHMgPSBtYXhTYXRpc2Z5aW5nXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBtaW5TYXRpc2Z5aW5nID0gKHZlcnNpb25zLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICBsZXQgbWluID0gbnVsbFxuICBsZXQgbWluU1YgPSBudWxsXG4gIGxldCByYW5nZU9iaiA9IG51bGxcbiAgdHJ5IHtcbiAgICByYW5nZU9iaiA9IG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucylcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHZlcnNpb25zLmZvckVhY2goKHYpID0+IHtcbiAgICBpZiAocmFuZ2VPYmoudGVzdCh2KSkge1xuICAgICAgLy8gc2F0aXNmaWVzKHYsIHJhbmdlLCBvcHRpb25zKVxuICAgICAgaWYgKCFtaW4gfHwgbWluU1YuY29tcGFyZSh2KSA9PT0gMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1pbiwgdiwgdHJ1ZSlcbiAgICAgICAgbWluID0gdlxuICAgICAgICBtaW5TViA9IG5ldyBTZW1WZXIobWluLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1pblxufVxubW9kdWxlLmV4cG9ydHMgPSBtaW5TYXRpc2Z5aW5nXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndCcpXG5cbmNvbnN0IG1pblZlcnNpb24gPSAocmFuZ2UsIGxvb3NlKSA9PiB7XG4gIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBsb29zZSlcblxuICBsZXQgbWludmVyID0gbmV3IFNlbVZlcignMC4wLjAnKVxuICBpZiAocmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgbWludmVyID0gbmV3IFNlbVZlcignMC4wLjAtMCcpXG4gIGlmIChyYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICBtaW52ZXIgPSBudWxsXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2V0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZS5zZXRbaV1cblxuICAgIGxldCBzZXRNaW4gPSBudWxsXG4gICAgY29tcGFyYXRvcnMuZm9yRWFjaCgoY29tcGFyYXRvcikgPT4ge1xuICAgICAgLy8gQ2xvbmUgdG8gYXZvaWQgbWFuaXB1bGF0aW5nIHRoZSBjb21wYXJhdG9yJ3Mgc2VtdmVyIG9iamVjdC5cbiAgICAgIGNvbnN0IGNvbXB2ZXIgPSBuZXcgU2VtVmVyKGNvbXBhcmF0b3Iuc2VtdmVyLnZlcnNpb24pXG4gICAgICBzd2l0Y2ggKGNvbXBhcmF0b3Iub3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSAnPic6XG4gICAgICAgICAgaWYgKGNvbXB2ZXIucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbXB2ZXIucGF0Y2grK1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wdmVyLnByZXJlbGVhc2UucHVzaCgwKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb21wdmVyLnJhdyA9IGNvbXB2ZXIuZm9ybWF0KClcbiAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgICAgICBjYXNlICcnOlxuICAgICAgICBjYXNlICc+PSc6XG4gICAgICAgICAgaWYgKCFzZXRNaW4gfHwgZ3QoY29tcHZlciwgc2V0TWluKSkge1xuICAgICAgICAgICAgc2V0TWluID0gY29tcHZlclxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FzZSAnPD0nOlxuICAgICAgICAgIC8qIElnbm9yZSBtYXhpbXVtIHZlcnNpb25zICovXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb3BlcmF0aW9uOiAke2NvbXBhcmF0b3Iub3BlcmF0b3J9YClcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmIChzZXRNaW4gJiYgKCFtaW52ZXIgfHwgZ3QobWludmVyLCBzZXRNaW4pKSkge1xuICAgICAgbWludmVyID0gc2V0TWluXG4gICAgfVxuICB9XG5cbiAgaWYgKG1pbnZlciAmJiByYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBtaW5WZXJzaW9uXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCB2YWxpZFJhbmdlID0gKHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gUmV0dXJuICcqJyBpbnN0ZWFkIG9mICcnIHNvIHRoYXQgdHJ1dGhpbmVzcyB3b3Jrcy5cbiAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgaXQncyBpbnZhbGlkIGFueXdheVxuICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnJhbmdlIHx8ICcqJ1xuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRSYW5nZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9jb21wYXJhdG9yJylcbmNvbnN0IHsgQU5ZIH0gPSBDb21wYXJhdG9yXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3NhdGlzZmllcycpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndCcpXG5jb25zdCBsdCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBsdGUgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGd0ZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9ndGUnKVxuXG5jb25zdCBvdXRzaWRlID0gKHZlcnNpb24sIHJhbmdlLCBoaWxvLCBvcHRpb25zKSA9PiB7XG4gIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIG9wdGlvbnMpXG4gIHJhbmdlID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuXG4gIGxldCBndGZuLCBsdGVmbiwgbHRmbiwgY29tcCwgZWNvbXBcbiAgc3dpdGNoIChoaWxvKSB7XG4gICAgY2FzZSAnPic6XG4gICAgICBndGZuID0gZ3RcbiAgICAgIGx0ZWZuID0gbHRlXG4gICAgICBsdGZuID0gbHRcbiAgICAgIGNvbXAgPSAnPidcbiAgICAgIGVjb21wID0gJz49J1xuICAgICAgYnJlYWtcbiAgICBjYXNlICc8JzpcbiAgICAgIGd0Zm4gPSBsdFxuICAgICAgbHRlZm4gPSBndGVcbiAgICAgIGx0Zm4gPSBndFxuICAgICAgY29tcCA9ICc8J1xuICAgICAgZWNvbXAgPSAnPD0nXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHByb3ZpZGUgYSBoaWxvIHZhbCBvZiBcIjxcIiBvciBcIj5cIicpXG4gIH1cblxuICAvLyBJZiBpdCBzYXRpc2ZpZXMgdGhlIHJhbmdlIGl0IGlzIG5vdCBvdXRzaWRlXG4gIGlmIChzYXRpc2ZpZXModmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBGcm9tIG5vdyBvbiwgdmFyaWFibGUgdGVybXMgYXJlIGFzIGlmIHdlJ3JlIGluIFwiZ3RyXCIgbW9kZS5cbiAgLy8gYnV0IG5vdGUgdGhhdCBldmVyeXRoaW5nIGlzIGZsaXBwZWQgZm9yIHRoZSBcImx0clwiIGZ1bmN0aW9uLlxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2V0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZS5zZXRbaV1cblxuICAgIGxldCBoaWdoID0gbnVsbFxuICAgIGxldCBsb3cgPSBudWxsXG5cbiAgICBjb21wYXJhdG9ycy5mb3JFYWNoKChjb21wYXJhdG9yKSA9PiB7XG4gICAgICBpZiAoY29tcGFyYXRvci5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgICBjb21wYXJhdG9yID0gbmV3IENvbXBhcmF0b3IoJz49MC4wLjAnKVxuICAgICAgfVxuICAgICAgaGlnaCA9IGhpZ2ggfHwgY29tcGFyYXRvclxuICAgICAgbG93ID0gbG93IHx8IGNvbXBhcmF0b3JcbiAgICAgIGlmIChndGZuKGNvbXBhcmF0b3Iuc2VtdmVyLCBoaWdoLnNlbXZlciwgb3B0aW9ucykpIHtcbiAgICAgICAgaGlnaCA9IGNvbXBhcmF0b3JcbiAgICAgIH0gZWxzZSBpZiAobHRmbihjb21wYXJhdG9yLnNlbXZlciwgbG93LnNlbXZlciwgb3B0aW9ucykpIHtcbiAgICAgICAgbG93ID0gY29tcGFyYXRvclxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBJZiB0aGUgZWRnZSB2ZXJzaW9uIGNvbXBhcmF0b3IgaGFzIGEgb3BlcmF0b3IgdGhlbiBvdXIgdmVyc2lvblxuICAgIC8vIGlzbid0IG91dHNpZGUgaXRcbiAgICBpZiAoaGlnaC5vcGVyYXRvciA9PT0gY29tcCB8fCBoaWdoLm9wZXJhdG9yID09PSBlY29tcCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGxvd2VzdCB2ZXJzaW9uIGNvbXBhcmF0b3IgaGFzIGFuIG9wZXJhdG9yIGFuZCBvdXIgdmVyc2lvblxuICAgIC8vIGlzIGxlc3MgdGhhbiBpdCB0aGVuIGl0IGlzbid0IGhpZ2hlciB0aGFuIHRoZSByYW5nZVxuICAgIGlmICgoIWxvdy5vcGVyYXRvciB8fCBsb3cub3BlcmF0b3IgPT09IGNvbXApICYmXG4gICAgICAgIGx0ZWZuKHZlcnNpb24sIGxvdy5zZW12ZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYgKGxvdy5vcGVyYXRvciA9PT0gZWNvbXAgJiYgbHRmbih2ZXJzaW9uLCBsb3cuc2VtdmVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0c2lkZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2UuXG5jb25zdCBvdXRzaWRlID0gcmVxdWlyZSgnLi9vdXRzaWRlJylcbmNvbnN0IGd0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJz4nLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBndHJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBsZXNzIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbmNvbnN0IGx0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJzwnLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBsdHJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IGludGVyc2VjdHMgPSAocjEsIHIyLCBvcHRpb25zKSA9PiB7XG4gIHIxID0gbmV3IFJhbmdlKHIxLCBvcHRpb25zKVxuICByMiA9IG5ldyBSYW5nZShyMiwgb3B0aW9ucylcbiAgcmV0dXJuIHIxLmludGVyc2VjdHMocjIsIG9wdGlvbnMpXG59XG5tb2R1bGUuZXhwb3J0cyA9IGludGVyc2VjdHNcbiIsICIndXNlIHN0cmljdCdcblxuLy8gZ2l2ZW4gYSBzZXQgb2YgdmVyc2lvbnMgYW5kIGEgcmFuZ2UsIGNyZWF0ZSBhIFwic2ltcGxpZmllZFwiIHJhbmdlXG4vLyB0aGF0IGluY2x1ZGVzIHRoZSBzYW1lIHZlcnNpb25zIHRoYXQgdGhlIG9yaWdpbmFsIHJhbmdlIGRvZXNcbi8vIElmIHRoZSBvcmlnaW5hbCByYW5nZSBpcyBzaG9ydGVyIHRoYW4gdGhlIHNpbXBsaWZpZWQgb25lLCByZXR1cm4gdGhhdC5cbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcbm1vZHVsZS5leHBvcnRzID0gKHZlcnNpb25zLCByYW5nZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBzZXQgPSBbXVxuICBsZXQgZmlyc3QgPSBudWxsXG4gIGxldCBwcmV2ID0gbnVsbFxuICBjb25zdCB2ID0gdmVyc2lvbnMuc29ydCgoYSwgYikgPT4gY29tcGFyZShhLCBiLCBvcHRpb25zKSlcbiAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHYpIHtcbiAgICBjb25zdCBpbmNsdWRlZCA9IHNhdGlzZmllcyh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucylcbiAgICBpZiAoaW5jbHVkZWQpIHtcbiAgICAgIHByZXYgPSB2ZXJzaW9uXG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIGZpcnN0ID0gdmVyc2lvblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICBzZXQucHVzaChbZmlyc3QsIHByZXZdKVxuICAgICAgfVxuICAgICAgcHJldiA9IG51bGxcbiAgICAgIGZpcnN0ID0gbnVsbFxuICAgIH1cbiAgfVxuICBpZiAoZmlyc3QpIHtcbiAgICBzZXQucHVzaChbZmlyc3QsIG51bGxdKVxuICB9XG5cbiAgY29uc3QgcmFuZ2VzID0gW11cbiAgZm9yIChjb25zdCBbbWluLCBtYXhdIG9mIHNldCkge1xuICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgcmFuZ2VzLnB1c2gobWluKVxuICAgIH0gZWxzZSBpZiAoIW1heCAmJiBtaW4gPT09IHZbMF0pIHtcbiAgICAgIHJhbmdlcy5wdXNoKCcqJylcbiAgICB9IGVsc2UgaWYgKCFtYXgpIHtcbiAgICAgIHJhbmdlcy5wdXNoKGA+PSR7bWlufWApXG4gICAgfSBlbHNlIGlmIChtaW4gPT09IHZbMF0pIHtcbiAgICAgIHJhbmdlcy5wdXNoKGA8PSR7bWF4fWApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlcy5wdXNoKGAke21pbn0gLSAke21heH1gKVxuICAgIH1cbiAgfVxuICBjb25zdCBzaW1wbGlmaWVkID0gcmFuZ2VzLmpvaW4oJyB8fCAnKVxuICBjb25zdCBvcmlnaW5hbCA9IHR5cGVvZiByYW5nZS5yYXcgPT09ICdzdHJpbmcnID8gcmFuZ2UucmF3IDogU3RyaW5nKHJhbmdlKVxuICByZXR1cm4gc2ltcGxpZmllZC5sZW5ndGggPCBvcmlnaW5hbC5sZW5ndGggPyBzaW1wbGlmaWVkIDogcmFuZ2Vcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlLmpzJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3IuanMnKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcblxuLy8gQ29tcGxleCByYW5nZSBgcjEgfHwgcjIgfHwgLi4uYCBpcyBhIHN1YnNldCBvZiBgUjEgfHwgUjIgfHwgLi4uYCBpZmY6XG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIGlzIGEgbnVsbCBzZXQsIE9SXG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIHdoaWNoIGlzIG5vdCBhIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mXG4vLyAgIHNvbWUgYFIxLCBSMiwgLi4uYFxuLy9cbi8vIFNpbXBsZSByYW5nZSBgYzEgYzIgLi4uYCBpcyBhIHN1YnNldCBvZiBzaW1wbGUgcmFuZ2UgYEMxIEMyIC4uLmAgaWZmOlxuLy8gLSBJZiBjIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gSWYgQyBpcyBvbmx5IHRoZSBBTlkgY29tcGFyYXRvciwgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIGlmIGluIHByZXJlbGVhc2UgbW9kZSwgcmV0dXJuIGZhbHNlXG4vLyAgIC0gZWxzZSByZXBsYWNlIGMgd2l0aCBgWz49MC4wLjBdYFxuLy8gLSBJZiBDIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gaWYgaW4gcHJlcmVsZWFzZSBtb2RlLCByZXR1cm4gdHJ1ZVxuLy8gICAtIGVsc2UgcmVwbGFjZSBDIHdpdGggYFs+PTAuMC4wXWBcbi8vIC0gTGV0IEVRIGJlIHRoZSBzZXQgb2YgPSBjb21wYXJhdG9ycyBpbiBjXG4vLyAtIElmIEVRIGlzIG1vcmUgdGhhbiBvbmUsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vIC0gTGV0IEdUIGJlIHRoZSBoaWdoZXN0ID4gb3IgPj0gY29tcGFyYXRvciBpbiBjXG4vLyAtIExldCBMVCBiZSB0aGUgbG93ZXN0IDwgb3IgPD0gY29tcGFyYXRvciBpbiBjXG4vLyAtIElmIEdUIGFuZCBMVCwgYW5kIEdULnNlbXZlciA+IExULnNlbXZlciwgcmV0dXJuIHRydWUgKG51bGwgc2V0KVxuLy8gLSBJZiBhbnkgQyBpcyBhID0gcmFuZ2UsIGFuZCBHVCBvciBMVCBhcmUgc2V0LCByZXR1cm4gZmFsc2Vcbi8vIC0gSWYgRVFcbi8vICAgLSBJZiBHVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgR1QsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBMVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgTFQsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBFUSBzYXRpc2ZpZXMgZXZlcnkgQywgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIHJldHVybiBmYWxzZVxuLy8gLSBJZiBHVFxuLy8gICAtIElmIEdULnNlbXZlciBpcyBsb3dlciB0aGFuIGFueSA+IG9yID49IGNvbXAgaW4gQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1QgaXMgPj0sIGFuZCBHVC5zZW12ZXIgZG9lcyBub3Qgc2F0aXNmeSBldmVyeSBDLCByZXR1cm4gZmFsc2Vcbi8vICAgLSBJZiBHVC5zZW12ZXIgaGFzIGEgcHJlcmVsZWFzZSwgYW5kIG5vdCBpbiBwcmVyZWxlYXNlIG1vZGVcbi8vICAgICAtIElmIG5vIEMgaGFzIGEgcHJlcmVsZWFzZSBhbmQgdGhlIEdULnNlbXZlciB0dXBsZSwgcmV0dXJuIGZhbHNlXG4vLyAtIElmIExUXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGlzIGdyZWF0ZXIgdGhhbiBhbnkgPCBvciA8PSBjb21wIGluIEMsIHJldHVybiBmYWxzZVxuLy8gICAtIElmIExUIGlzIDw9LCBhbmQgTFQuc2VtdmVyIGRvZXMgbm90IHNhdGlzZnkgZXZlcnkgQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGhhcyBhIHByZXJlbGVhc2UsIGFuZCBub3QgaW4gcHJlcmVsZWFzZSBtb2RlXG4vLyAgICAgLSBJZiBubyBDIGhhcyBhIHByZXJlbGVhc2UgYW5kIHRoZSBMVC5zZW12ZXIgdHVwbGUsIHJldHVybiBmYWxzZVxuLy8gLSBFbHNlIHJldHVybiB0cnVlXG5cbmNvbnN0IHN1YnNldCA9IChzdWIsIGRvbSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChzdWIgPT09IGRvbSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBzdWIgPSBuZXcgUmFuZ2Uoc3ViLCBvcHRpb25zKVxuICBkb20gPSBuZXcgUmFuZ2UoZG9tLCBvcHRpb25zKVxuICBsZXQgc2F3Tm9uTnVsbCA9IGZhbHNlXG5cbiAgT1VURVI6IGZvciAoY29uc3Qgc2ltcGxlU3ViIG9mIHN1Yi5zZXQpIHtcbiAgICBmb3IgKGNvbnN0IHNpbXBsZURvbSBvZiBkb20uc2V0KSB7XG4gICAgICBjb25zdCBpc1N1YiA9IHNpbXBsZVN1YnNldChzaW1wbGVTdWIsIHNpbXBsZURvbSwgb3B0aW9ucylcbiAgICAgIHNhd05vbk51bGwgPSBzYXdOb25OdWxsIHx8IGlzU3ViICE9PSBudWxsXG4gICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgY29udGludWUgT1VURVJcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mIGV2ZXJ5dGhpbmcsIGJ1dCBudWxsIHNpbXBsZSByYW5nZXMgaW5cbiAgICAvLyBhIGNvbXBsZXggcmFuZ2Ugc2hvdWxkIGJlIGlnbm9yZWQuICBzbyBpZiB3ZSBzYXcgYSBub24tbnVsbCByYW5nZSxcbiAgICAvLyB0aGVuIHdlIGtub3cgdGhpcyBpc24ndCBhIHN1YnNldCwgYnV0IGlmIEVWRVJZIHNpbXBsZSByYW5nZSB3YXMgbnVsbCxcbiAgICAvLyB0aGVuIGl0IGlzIGEgc3Vic2V0LlxuICAgIGlmIChzYXdOb25OdWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgbWluaW11bVZlcnNpb25XaXRoUHJlUmVsZWFzZSA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMC0wJyldXG5jb25zdCBtaW5pbXVtVmVyc2lvbiA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXVxuXG5jb25zdCBzaW1wbGVTdWJzZXQgPSAoc3ViLCBkb20sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN1YiA9PT0gZG9tKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdWIubGVuZ3RoID09PSAxICYmIHN1YlswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgIGlmIChkb20ubGVuZ3RoID09PSAxICYmIGRvbVswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgIHN1YiA9IG1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBpZiAoZG9tLmxlbmd0aCA9PT0gMSAmJiBkb21bMF0uc2VtdmVyID09PSBBTlkpIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBjb25zdCBlcVNldCA9IG5ldyBTZXQoKVxuICBsZXQgZ3QsIGx0XG4gIGZvciAoY29uc3QgYyBvZiBzdWIpIHtcbiAgICBpZiAoYy5vcGVyYXRvciA9PT0gJz4nIHx8IGMub3BlcmF0b3IgPT09ICc+PScpIHtcbiAgICAgIGd0ID0gaGlnaGVyR1QoZ3QsIGMsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgbHQgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBlcVNldC5hZGQoYy5zZW12ZXIpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVxU2V0LnNpemUgPiAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBndGx0Q29tcFxuICBpZiAoZ3QgJiYgbHQpIHtcbiAgICBndGx0Q29tcCA9IGNvbXBhcmUoZ3Quc2VtdmVyLCBsdC5zZW12ZXIsIG9wdGlvbnMpXG4gICAgaWYgKGd0bHRDb21wID4gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGd0bHRDb21wID09PSAwICYmIChndC5vcGVyYXRvciAhPT0gJz49JyB8fCBsdC5vcGVyYXRvciAhPT0gJzw9JykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gd2lsbCBpdGVyYXRlIG9uZSBvciB6ZXJvIHRpbWVzXG4gIGZvciAoY29uc3QgZXEgb2YgZXFTZXQpIHtcbiAgICBpZiAoZ3QgJiYgIXNhdGlzZmllcyhlcSwgU3RyaW5nKGd0KSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKGx0ICYmICFzYXRpc2ZpZXMoZXEsIFN0cmluZyhsdCksIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICAgIGlmICghc2F0aXNmaWVzKGVxLCBTdHJpbmcoYyksIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgaGlnaGVyLCBsb3dlclxuICBsZXQgaGFzRG9tTFQsIGhhc0RvbUdUXG4gIC8vIGlmIHRoZSBzdWJzZXQgaGFzIGEgcHJlcmVsZWFzZSwgd2UgbmVlZCBhIGNvbXBhcmF0b3IgaW4gdGhlIHN1cGVyc2V0XG4gIC8vIHdpdGggdGhlIHNhbWUgdHVwbGUgYW5kIGEgcHJlcmVsZWFzZSwgb3IgaXQncyBub3QgYSBzdWJzZXRcbiAgbGV0IG5lZWREb21MVFByZSA9IGx0ICYmXG4gICAgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICBsdC5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPyBsdC5zZW12ZXIgOiBmYWxzZVxuICBsZXQgbmVlZERvbUdUUHJlID0gZ3QgJiZcbiAgICAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJlxuICAgIGd0LnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA/IGd0LnNlbXZlciA6IGZhbHNlXG4gIC8vIGV4Y2VwdGlvbjogPDEuMi4zLTAgaXMgdGhlIHNhbWUgYXMgPDEuMi4zXG4gIGlmIChuZWVkRG9tTFRQcmUgJiYgbmVlZERvbUxUUHJlLnByZXJlbGVhc2UubGVuZ3RoID09PSAxICYmXG4gICAgICBsdC5vcGVyYXRvciA9PT0gJzwnICYmIG5lZWREb21MVFByZS5wcmVyZWxlYXNlWzBdID09PSAwKSB7XG4gICAgbmVlZERvbUxUUHJlID0gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICBoYXNEb21HVCA9IGhhc0RvbUdUIHx8IGMub3BlcmF0b3IgPT09ICc+JyB8fCBjLm9wZXJhdG9yID09PSAnPj0nXG4gICAgaGFzRG9tTFQgPSBoYXNEb21MVCB8fCBjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9J1xuICAgIGlmIChndCkge1xuICAgICAgaWYgKG5lZWREb21HVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21HVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21HVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21HVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21HVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPicgfHwgYy5vcGVyYXRvciA9PT0gJz49Jykge1xuICAgICAgICBoaWdoZXIgPSBoaWdoZXJHVChndCwgYywgb3B0aW9ucylcbiAgICAgICAgaWYgKGhpZ2hlciA9PT0gYyAmJiBoaWdoZXIgIT09IGd0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3Qub3BlcmF0b3IgPT09ICc+PScgJiYgIWMudGVzdChndC5zZW12ZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobHQpIHtcbiAgICAgIGlmIChuZWVkRG9tTFRQcmUpIHtcbiAgICAgICAgaWYgKGMuc2VtdmVyLnByZXJlbGVhc2UgJiYgYy5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLm1ham9yID09PSBuZWVkRG9tTFRQcmUubWFqb3IgJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLm1pbm9yID09PSBuZWVkRG9tTFRQcmUubWlub3IgJiZcbiAgICAgICAgICAgIGMuc2VtdmVyLnBhdGNoID09PSBuZWVkRG9tTFRQcmUucGF0Y2gpIHtcbiAgICAgICAgICBuZWVkRG9tTFRQcmUgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYy5vcGVyYXRvciA9PT0gJzwnIHx8IGMub3BlcmF0b3IgPT09ICc8PScpIHtcbiAgICAgICAgbG93ZXIgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgICAgICBpZiAobG93ZXIgPT09IGMgJiYgbG93ZXIgIT09IGx0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobHQub3BlcmF0b3IgPT09ICc8PScgJiYgIWMudGVzdChsdC5zZW12ZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWMub3BlcmF0b3IgJiYgKGx0IHx8IGd0KSAmJiBndGx0Q29tcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlcmUgd2FzIGEgPCBvciA+LCBhbmQgbm90aGluZyBpbiB0aGUgZG9tLCB0aGVuIG11c3QgYmUgZmFsc2VcbiAgLy8gVU5MRVNTIGl0IHdhcyBsaW1pdGVkIGJ5IGFub3RoZXIgcmFuZ2UgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi5cbiAgLy8gRWcsID4xLjAuMCA8MS4wLjEgaXMgc3RpbGwgYSBzdWJzZXQgb2YgPDIuMC4wXG4gIGlmIChndCAmJiBoYXNEb21MVCAmJiAhbHQgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChsdCAmJiBoYXNEb21HVCAmJiAhZ3QgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIHdlIG5lZWRlZCBhIHByZXJlbGVhc2UgcmFuZ2UgaW4gYSBzcGVjaWZpYyB0dXBsZSwgYnV0IGRpZG4ndCBnZXQgb25lXG4gIC8vIHRoZW4gdGhpcyBpc24ndCBhIHN1YnNldC4gIGVnID49MS4yLjMtcHJlIGlzIG5vdCBhIHN1YnNldCBvZiA+PTEuMC4wLFxuICAvLyBiZWNhdXNlIGl0IGluY2x1ZGVzIHByZXJlbGVhc2VzIGluIHRoZSAxLjIuMyB0dXBsZVxuICBpZiAobmVlZERvbUdUUHJlIHx8IG5lZWREb21MVFByZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gPj0xLjIuMyBpcyBsb3dlciB0aGFuID4xLjIuM1xuY29uc3QgaGlnaGVyR1QgPSAoYSwgYiwgb3B0aW9ucykgPT4ge1xuICBpZiAoIWEpIHtcbiAgICByZXR1cm4gYlxuICB9XG4gIGNvbnN0IGNvbXAgPSBjb21wYXJlKGEuc2VtdmVyLCBiLnNlbXZlciwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXAgPiAwID8gYVxuICAgIDogY29tcCA8IDAgPyBiXG4gICAgOiBiLm9wZXJhdG9yID09PSAnPicgJiYgYS5vcGVyYXRvciA9PT0gJz49JyA/IGJcbiAgICA6IGFcbn1cblxuLy8gPD0xLjIuMyBpcyBoaWdoZXIgdGhhbiA8MS4yLjNcbmNvbnN0IGxvd2VyTFQgPSAoYSwgYiwgb3B0aW9ucykgPT4ge1xuICBpZiAoIWEpIHtcbiAgICByZXR1cm4gYlxuICB9XG4gIGNvbnN0IGNvbXAgPSBjb21wYXJlKGEuc2VtdmVyLCBiLnNlbXZlciwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXAgPCAwID8gYVxuICAgIDogY29tcCA+IDAgPyBiXG4gICAgOiBiLm9wZXJhdG9yID09PSAnPCcgJiYgYS5vcGVyYXRvciA9PT0gJzw9JyA/IGJcbiAgICA6IGFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdWJzZXRcbiIsICIndXNlIHN0cmljdCdcblxuLy8ganVzdCBwcmUtbG9hZCBhbGwgdGhlIHN0dWZmIHRoYXQgaW5kZXguanMgbGF6aWx5IGV4cG9ydHNcbmNvbnN0IGludGVybmFsUmUgPSByZXF1aXJlKCcuL2ludGVybmFsL3JlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29uc3RhbnRzJylcbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgaWRlbnRpZmllcnMgPSByZXF1aXJlKCcuL2ludGVybmFsL2lkZW50aWZpZXJzJylcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcGFyc2UnKVxuY29uc3QgdmFsaWQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy92YWxpZCcpXG5jb25zdCBjbGVhbiA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NsZWFuJylcbmNvbnN0IGluYyA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2luYycpXG5jb25zdCBkaWZmID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZGlmZicpXG5jb25zdCBtYWpvciA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL21ham9yJylcbmNvbnN0IG1pbm9yID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbWlub3InKVxuY29uc3QgcGF0Y2ggPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wYXRjaCcpXG5jb25zdCBwcmVyZWxlYXNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcHJlcmVsZWFzZScpXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZScpXG5jb25zdCByY29tcGFyZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jjb21wYXJlJylcbmNvbnN0IGNvbXBhcmVMb29zZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NvbXBhcmUtbG9vc2UnKVxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc29ydCcpXG5jb25zdCByc29ydCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jzb3J0JylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZ3QnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBlcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2VxJylcbmNvbnN0IG5lcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL25lcScpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9ndGUnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGNtcCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NtcCcpXG5jb25zdCBjb2VyY2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb2VyY2UnKVxuY29uc3QgdHJ1bmNhdGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy90cnVuY2F0ZScpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jbGFzc2VzL2NvbXBhcmF0b3InKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc2F0aXNmaWVzJylcbmNvbnN0IHRvQ29tcGFyYXRvcnMgPSByZXF1aXJlKCcuL3Jhbmdlcy90by1jb21wYXJhdG9ycycpXG5jb25zdCBtYXhTYXRpc2Z5aW5nID0gcmVxdWlyZSgnLi9yYW5nZXMvbWF4LXNhdGlzZnlpbmcnKVxuY29uc3QgbWluU2F0aXNmeWluZyA9IHJlcXVpcmUoJy4vcmFuZ2VzL21pbi1zYXRpc2Z5aW5nJylcbmNvbnN0IG1pblZlcnNpb24gPSByZXF1aXJlKCcuL3Jhbmdlcy9taW4tdmVyc2lvbicpXG5jb25zdCB2YWxpZFJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvdmFsaWQnKVxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL291dHNpZGUnKVxuY29uc3QgZ3RyID0gcmVxdWlyZSgnLi9yYW5nZXMvZ3RyJylcbmNvbnN0IGx0ciA9IHJlcXVpcmUoJy4vcmFuZ2VzL2x0cicpXG5jb25zdCBpbnRlcnNlY3RzID0gcmVxdWlyZSgnLi9yYW5nZXMvaW50ZXJzZWN0cycpXG5jb25zdCBzaW1wbGlmeVJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvc2ltcGxpZnknKVxuY29uc3Qgc3Vic2V0ID0gcmVxdWlyZSgnLi9yYW5nZXMvc3Vic2V0Jylcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZSxcbiAgdmFsaWQsXG4gIGNsZWFuLFxuICBpbmMsXG4gIGRpZmYsXG4gIG1ham9yLFxuICBtaW5vcixcbiAgcGF0Y2gsXG4gIHByZXJlbGVhc2UsXG4gIGNvbXBhcmUsXG4gIHJjb21wYXJlLFxuICBjb21wYXJlTG9vc2UsXG4gIGNvbXBhcmVCdWlsZCxcbiAgc29ydCxcbiAgcnNvcnQsXG4gIGd0LFxuICBsdCxcbiAgZXEsXG4gIG5lcSxcbiAgZ3RlLFxuICBsdGUsXG4gIGNtcCxcbiAgY29lcmNlLFxuICB0cnVuY2F0ZSxcbiAgQ29tcGFyYXRvcixcbiAgUmFuZ2UsXG4gIHNhdGlzZmllcyxcbiAgdG9Db21wYXJhdG9ycyxcbiAgbWF4U2F0aXNmeWluZyxcbiAgbWluU2F0aXNmeWluZyxcbiAgbWluVmVyc2lvbixcbiAgdmFsaWRSYW5nZSxcbiAgb3V0c2lkZSxcbiAgZ3RyLFxuICBsdHIsXG4gIGludGVyc2VjdHMsXG4gIHNpbXBsaWZ5UmFuZ2UsXG4gIHN1YnNldCxcbiAgU2VtVmVyLFxuICByZTogaW50ZXJuYWxSZS5yZSxcbiAgc3JjOiBpbnRlcm5hbFJlLnNyYyxcbiAgdG9rZW5zOiBpbnRlcm5hbFJlLnQsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT046IGNvbnN0YW50cy5TRU1WRVJfU1BFQ19WRVJTSU9OLFxuICBSRUxFQVNFX1RZUEVTOiBjb25zdGFudHMuUkVMRUFTRV9UWVBFUyxcbiAgY29tcGFyZUlkZW50aWZpZXJzOiBpZGVudGlmaWVycy5jb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnM6IGlkZW50aWZpZXJzLnJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjYgVGhlIHpiIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbiAqL1xuXG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ0BhY3Rpb25zL2NvcmUnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ0BhY3Rpb25zL2V4ZWMnO1xuaW1wb3J0IHsgZ2V0T2N0b2tpdCB9IGZyb20gJ0BhY3Rpb25zL2dpdGh1Yic7XG5pbXBvcnQgeyBkb3dubG9hZFRvb2wsIGV4dHJhY3RUYXIsIGV4dHJhY3RaaXAgfSBmcm9tICdAYWN0aW9ucy90b29sLWNhY2hlJztcblxuaW50ZXJmYWNlIFJlbGVhc2Uge1xuICB0YWdOYW1lOiBzdHJpbmc7XG4gIHJlbGVhc2VBc3NldHM6IFJlbGVhc2VBc3NldENvbm5lY3Rpb247XG59XG5cbmludGVyZmFjZSBSZWxlYXNlQXNzZXRDb25uZWN0aW9uIHtcbiAgbm9kZXM6IFJlbGVhc2VBc3NldFtdO1xufVxuXG5pbnRlcmZhY2UgUmVsZWFzZUFzc2V0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkb3dubG9hZFVybDogc3RyaW5nO1xufVxuXG5jb25zdCByZWxlYXNlRnJhZ21lbnQgPVxuICBgXG4gICAgZnJhZ21lbnQgcmVsZWFzZUZpZWxkcyBvbiBSZWxlYXNlIHtcbiAgICAgIHRhZ05hbWVcbiAgICAgIHJlbGVhc2VBc3NldHMoZmlyc3Q6IDUwKSB7XG4gICAgICAgIG5vZGVzIHtcbiAgICAgICAgICBuYW1lXG4gICAgICAgICAgZG93bmxvYWRVcmxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgYDtcblxuKGFzeW5jICgpID0+IHtcbiAgY29uc3Qgb2N0b2tpdCA9IGdldE9jdG9raXQoJycpO1xuXG4gIGNvbnN0IHZlcnNpb24gPSBjb3JlLmdldElucHV0KCd6Yi12ZXJzaW9uJyk7XG4gIGNvbnN0IGdyYXBocWxSZXF1ZXN0ID1cbiAgICB2ZXJzaW9uID9cbiAgICAgIHtcbiAgICAgICAgcXVlcnk6XG4gICAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5IHJlbGVhc2VBc3NldHNGb3JWZXJzaW9uKCR0YWdOYW1lOiBTdHJpbmchKSB7XG4gICAgICAgICAgICByZXBvc2l0b3J5KG93bmVyOiBcIjI1NmxpZ2h0c1wiLCByZXBvOiBcInpiXCIpIHtcbiAgICAgICAgICAgICAgcmVsZWFzZSh0YWdOYW1lOiAkdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIC4uLnJlbGVhc2VGaWVsZHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICR7cmVsZWFzZUZyYWdtZW50fVxuICAgICAgICBgLFxuICAgICAgICB0YWdOYW1lOiAndicgKyB2ZXJzaW9uLFxuICAgICAgfSA6XG4gICAgICB7XG4gICAgICAgIHF1ZXJ5OlxuICAgICAgICAgIGBcbiAgICAgICAgICBxdWVyeSByZWxlYXNlQXNzZXRzRm9yTGF0ZXN0IHtcbiAgICAgICAgICAgIHJlcG9zaXRvcnkob3duZXI6IFwiMjU2bGlnaHRzXCIsIHJlcG86IFwiemJcIikge1xuICAgICAgICAgICAgICByZWxlYXNlOiBsYXRlc3RSZWxlYXNlIHtcbiAgICAgICAgICAgICAgICAuLi5yZWxlYXNlRmllbGRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAke3JlbGVhc2VGcmFnbWVudH1cbiAgICAgICAgYCxcbiAgICAgIH07XG4gIGNvbnN0IGdyYXBocWxSZXNwb25zZSA9IGF3YWl0IG9jdG9raXQuZ3JhcGhxbDx7XG4gICAgcmVwb3NpdG9yeToge1xuICAgICAgcmVsZWFzZTogUmVsZWFzZSB8IG51bGw7XG4gICAgfVxuICB9PihncmFwaHFsUmVxdWVzdCk7XG4gIGNvbnN0IHJlbGVhc2UgPSBncmFwaHFsUmVzcG9uc2UucmVwb3NpdG9yeS5yZWxlYXNlO1xuICBjb25zdCByZWxlYXNlQXNzZXRzID0gcmVsZWFzZT8ucmVsZWFzZUFzc2V0cz8ubm9kZXMgfHwgW107XG5cbiAgbGV0IGFzc2V0OiBSZWxlYXNlQXNzZXQgfCB1bmRlZmluZWQ7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyAmJiBwcm9jZXNzLmFyY2ggPT09ICdhcm02NCcpIHtcbiAgICBhc3NldCA9IHJlbGVhc2VBc3NldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUuaW5jbHVkZXMoJ2FhcmNoNjQtYXBwbGUtbWFjb3MnKSlcbiAgfSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnICYmIHByb2Nlc3MuYXJjaCA9PT0gJ3g2NCcpIHtcbiAgICBhc3NldCA9IHJlbGVhc2VBc3NldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUuaW5jbHVkZXMoJ3g4Nl82NC11bmtub3duLWxpbnV4JykpXG4gIH1cbiAgaWYgKCFhc3NldCkge1xuICAgIGNvcmUuc2V0RmFpbGVkKGBObyBkb3dubG9hZCBmb3VuZCBmb3IgJHtwcm9jZXNzLmFyY2h9LSR7cHJvY2Vzcy5wbGF0Zm9ybX0gdmVyc2lvbiAke3JlbGVhc2U/LnRhZ05hbWUgfHwgdmVyc2lvbn1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB6YkFyY2hpdmVQYXRoID0gYXdhaXQgZG93bmxvYWRUb29sKGFzc2V0LmRvd25sb2FkVXJsKTtcbiAgY29uc3QgemJFeHRyYWN0ZWRGb2xkZXJQYXRoID0gYXNzZXQuZG93bmxvYWRVcmwuZW5kc1dpdGgoJy56aXAnKSA/XG4gICAgYXdhaXQgZXh0cmFjdFppcCh6YkFyY2hpdmVQYXRoKSA6XG4gICAgYXdhaXQgZXh0cmFjdFRhcih6YkFyY2hpdmVQYXRoKTtcbiAgYXdhaXQgZXhlYyhwYXRoLmpvaW4oemJFeHRyYWN0ZWRGb2xkZXJQYXRoLCAnaW5zdGFsbCcpLCBbJy0tc2luZ2xlLXVzZXInLCAnLS1uby1zeXN0ZW1kJywgJy0tbm8tbGF1bmNoZCddKTtcbn0pKCk7XG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke1xuICAgICAgcHJvY2Vzcy5hcmNoXG4gICAgfSlgO1xuICB9XG5cbiAgcmV0dXJuIFwiPGVudmlyb25tZW50IHVuZGV0ZWN0YWJsZT5cIjtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKChjYWxsYmFjaywgbmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKChtZXRob2QsIHJlZ2lzdGVyZWQpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKHN0YXRlLCBraW5kLCBuYW1lLCBob29rKSB7XG4gIGNvbnN0IG9yaWcgPSBob29rO1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgc3RhdGUucmVnaXN0cnlbbmFtZV0gPSBbXTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImJlZm9yZVwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihvcmlnLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYWZ0ZXJcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbigocmVzdWx0XykgPT4ge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF87XG4gICAgICAgICAgcmV0dXJuIG9yaWcocmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiBvcmlnKGVycm9yLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnB1c2goe1xuICAgIGhvb2s6IGhvb2ssXG4gICAgb3JpZzogb3JpZyxcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gc3RhdGUucmVnaXN0cnlbbmFtZV1cbiAgICAubWFwKChyZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5vcmlnO1xuICAgIH0pXG4gICAgLmluZGV4T2YobWV0aG9kKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9saWIvcmVnaXN0ZXIuanNcIjtcbmltcG9ydCB7IGFkZEhvb2sgfSBmcm9tIFwiLi9saWIvYWRkLmpzXCI7XG5pbXBvcnQgeyByZW1vdmVIb29rIH0gZnJvbSBcIi4vbGliL3JlbW92ZS5qc1wiO1xuXG4vLyBiaW5kIHdpdGggYXJyYXkgb2YgYXJndW1lbnRzOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjE3OTI5MTNcbmNvbnN0IGJpbmQgPSBGdW5jdGlvbi5iaW5kO1xuY29uc3QgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgY29uc3QgcmVtb3ZlSG9va1JlZiA9IGJpbmRhYmxlKHJlbW92ZUhvb2ssIG51bGwpLmFwcGx5KFxuICAgIG51bGwsXG4gICAgbmFtZSA/IFtzdGF0ZSwgbmFtZV0gOiBbc3RhdGVdXG4gICk7XG4gIGhvb2suYXBpID0geyByZW1vdmU6IHJlbW92ZUhvb2tSZWYgfTtcbiAgaG9vay5yZW1vdmUgPSByZW1vdmVIb29rUmVmO1xuICBbXCJiZWZvcmVcIiwgXCJlcnJvclwiLCBcImFmdGVyXCIsIFwid3JhcFwiXS5mb3JFYWNoKChraW5kKSA9PiB7XG4gICAgY29uc3QgYXJncyA9IG5hbWUgPyBbc3RhdGUsIGtpbmQsIG5hbWVdIDogW3N0YXRlLCBraW5kXTtcbiAgICBob29rW2tpbmRdID0gaG9vay5hcGlba2luZF0gPSBiaW5kYWJsZShhZGRIb29rLCBudWxsKS5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFNpbmd1bGFyKCkge1xuICBjb25zdCBzaW5ndWxhckhvb2tOYW1lID0gU3ltYm9sKFwiU2luZ3VsYXJcIik7XG4gIGNvbnN0IHNpbmd1bGFySG9va1N0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcbiAgY29uc3Qgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24oKSB7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcblxuICBjb25zdCBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IFNpbmd1bGFyLCBDb2xsZWN0aW9uIH07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbnZhciBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIlxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9sb3dlcmNhc2Uta2V5cy5qc1xuZnVuY3Rpb24gbG93ZXJjYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbWVyZ2UtZGVlcC5qc1xuZnVuY3Rpb24gbWVyZ2VEZWVwKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9uc1trZXldKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGRlZmF1bHRzKSkgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICAgIGVsc2UgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9yZW1vdmUtdW5kZWZpbmVkLXByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9tZXJnZS5qc1xuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7IG1ldGhvZCwgdXJsIH0gOiB7IHVybDogbWV0aG9kIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH1cbiAgb3B0aW9ucy5oZWFkZXJzID0gbG93ZXJjYXNlS2V5cyhvcHRpb25zLmhlYWRlcnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMuaGVhZGVycyk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdHMgfHwge30sIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy51cmwgPT09IFwiL2dyYXBocWxcIikge1xuICAgIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKFxuICAgICAgICAocHJldmlldykgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpXG4gICAgICApLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gICAgfVxuICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gKG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzIHx8IFtdKS5tYXAoKHByZXZpZXcpID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnM7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2FkZC1xdWVyeS1wYXJhbWV0ZXJzLmpzXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHJldHVybiB1cmwgKyBzZXBhcmF0b3IgKyBuYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyc1tuYW1lXSl9YDtcbiAgfSkuam9pbihcIiZcIik7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2V4dHJhY3QtdXJsLXZhcmlhYmxlLW5hbWVzLmpzXG52YXIgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXnt9fV0rXFx9L2c7XG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC8oPzpeXFxXKyl8KD86KD88IVxcVylcXFcrJCkvZywgXCJcIikuc3BsaXQoLywvKTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXMubWFwKHJlbW92ZU5vbkNoYXJzKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL29taXQuanNcbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzVG9PbWl0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgX19wcm90b19fOiBudWxsIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICBpZiAoa2V5c1RvT21pdC5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC91cmwtdGVtcGxhdGUuanNcbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24ocGFydCkge1xuICAgIGlmICghLyVbMC05QS1GYS1mXS8udGVzdChwYXJ0KSkge1xuICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KS5yZXBsYWNlKC8lNUIvZywgXCJbXCIpLnJlcGxhY2UoLyU1RC9nLCBcIl1cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24oYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdm9pZCAwICYmIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIGtleSwgbW9kaWZpZXIpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLCByZXN1bHQgPSBbXTtcbiAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC8oPzwhW1xcdy1dKVtcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5leHBvcnQge1xuICBlbmRwb2ludFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IGVuZHBvaW50IH0gZnJvbSBcIkBvY3Rva2l0L2VuZHBvaW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMTAuMC4xMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciBkZWZhdWx0c19kZWZhdWx0ID0ge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSBcImNvbnRlbnQtdHlwZVwiO1xuaW1wb3J0IHsgSlNPTlBhcnNlLCBKU09OU3RyaW5naWZ5IH0gZnJvbSBcImpzb24td2l0aC1iaWdpbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG52YXIgbm9vcCA9ICgpID0+IFwiXCI7XG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoO1xuICBpZiAoIWZldGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJmZXRjaCBpcyBub3Qgc2V0LiBQbGVhc2UgcGFzcyBhIGZldGNoIGltcGxlbWVudGF0aW9uIGFzIG5ldyBPY3Rva2l0KHsgcmVxdWVzdDogeyBmZXRjaCB9fSkuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvb2N0b2tpdC5qcy8jZmV0Y2gtbWlzc2luZ1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5sb2cgfHwgY29uc29sZTtcbiAgY29uc3QgcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ICE9PSBmYWxzZTtcbiAgY29uc3QgYm9keSA9IGlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA/IEpTT05TdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSkgOiByZXF1ZXN0T3B0aW9ucy5ib2R5O1xuICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtcbiAgICAgIG5hbWUsXG4gICAgICBTdHJpbmcodmFsdWUpXG4gICAgXSlcbiAgKTtcbiAgbGV0IGZldGNoUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgZmV0Y2hSZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgICAgbWV0aG9kOiByZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgICBib2R5LFxuICAgICAgcmVkaXJlY3Q6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnJlZGlyZWN0LFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBzaWduYWw6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnNpZ25hbCxcbiAgICAgIC8vIGR1cGxleCBtdXN0IGJlIHNldCBpZiByZXF1ZXN0LmJvZHkgaXMgUmVhZGFibGVTdHJlYW0gb3IgQXN5bmMgSXRlcmFibGVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgICAgLi4ucmVxdWVzdE9wdGlvbnMuYm9keSAmJiB7IGR1cGxleDogXCJoYWxmXCIgfVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxldCBtZXNzYWdlID0gXCJVbmtub3duIEVycm9yXCI7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICBlcnJvci5zdGF0dXMgPSA1MDA7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2UubWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihtZXNzYWdlLCA1MDAsIHtcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gICAgcmVxdWVzdEVycm9yLmNhdXNlID0gZXJyb3I7XG4gICAgdGhyb3cgcmVxdWVzdEVycm9yO1xuICB9XG4gIGNvbnN0IHN0YXR1cyA9IGZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICBjb25zdCB1cmwgPSBmZXRjaFJlc3BvbnNlLnVybDtcbiAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGZldGNoUmVzcG9uc2UuaGVhZGVycykge1xuICAgIHJlc3BvbnNlSGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cbiAgY29uc3Qgb2N0b2tpdFJlc3BvbnNlID0ge1xuICAgIHVybCxcbiAgICBzdGF0dXMsXG4gICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgIGRhdGE6IFwiXCJcbiAgfTtcbiAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiByZXNwb25zZUhlYWRlcnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gcmVzcG9uc2VIZWFkZXJzLmxpbmsgJiYgcmVzcG9uc2VIZWFkZXJzLmxpbmsubWF0Y2goLzwoW148Pl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgbG9nLndhcm4oXG4gICAgICBgW0BvY3Rva2l0L3JlcXVlc3RdIFwiJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cmVxdWVzdE9wdGlvbnMudXJsfVwiIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIG9uICR7cmVzcG9uc2VIZWFkZXJzLnN1bnNldH0ke2RlcHJlY2F0aW9uTGluayA/IGAuIFNlZSAke2RlcHJlY2F0aW9uTGlua31gIDogXCJcIn1gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSAyMDQgfHwgc3RhdHVzID09PSAyMDUpIHtcbiAgICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xuICB9XG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihmZXRjaFJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMzA0KSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihcIk5vdCBtb2RpZmllZFwiLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcih0b0Vycm9yTWVzc2FnZShvY3Rva2l0UmVzcG9uc2UuZGF0YSksIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPyBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSkgOiBmZXRjaFJlc3BvbnNlLmJvZHk7XG4gIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKCFjb250ZW50VHlwZSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkuY2F0Y2gobm9vcCk7XG4gIH1cbiAgY29uc3QgbWltZXR5cGUgPSBwYXJzZShjb250ZW50VHlwZSk7XG4gIGlmIChpc0pTT05SZXNwb25zZShtaW1ldHlwZSkpIHtcbiAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICByZXR1cm4gSlNPTlBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbWV0eXBlLnR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpIHx8IG1pbWV0eXBlLnBhcmFtZXRlcnMuY2hhcnNldD8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaChub29wKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS5jYXRjaChcbiAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xuICAgICAgKCkgPT4gbmV3IEFycmF5QnVmZmVyKDApXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNKU09OUmVzcG9uc2UobWltZXR5cGUpIHtcbiAgcmV0dXJuIG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiIHx8IG1pbWV0eXBlLnR5cGUgPT09IFwiYXBwbGljYXRpb24vc2NpbStqc29uXCI7XG59XG5mdW5jdGlvbiB0b0Vycm9yTWVzc2FnZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gXCJVbmtub3duIGVycm9yXCI7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIGRhdGEgIT09IG51bGwgJiYgXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGNvbnN0IG9iamVjdERhdGEgPSBkYXRhO1xuICAgIGNvbnN0IHN1ZmZpeCA9IFwiZG9jdW1lbnRhdGlvbl91cmxcIiBpbiBvYmplY3REYXRhID8gYCAtICR7b2JqZWN0RGF0YS5kb2N1bWVudGF0aW9uX3VybH1gIDogXCJcIjtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmplY3REYXRhLmVycm9ycykgPyBgJHtvYmplY3REYXRhLm1lc3NhZ2V9OiAke29iamVjdERhdGEuZXJyb3JzLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gIDogYCR7b2JqZWN0RGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LCBkZWZhdWx0c19kZWZhdWx0KTtcbmV4cG9ydCB7XG4gIHJlcXVlc3Rcbn07XG4vKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cbi8qIHY4IGlnbm9yZSBlbHNlIC0tIEBwcmVzZXJ2ZSAqL1xuIiwgImNvbnN0IGludFJlZ2V4ID0gL14tP1xcZCskLztcbmNvbnN0IG5vaXNlVmFsdWUgPSAvXi0/XFxkK24rJC87IC8vIE5vaXNlIC0gc3RyaW5ncyB0aGF0IG1hdGNoIHRoZSBjdXN0b20gZm9ybWF0IGJlZm9yZSBiZWluZyBjb252ZXJ0ZWQgdG8gaXRcbmNvbnN0IG9yaWdpbmFsU3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnk7XG5jb25zdCBvcmlnaW5hbFBhcnNlID0gSlNPTi5wYXJzZTtcbmNvbnN0IGN1c3RvbUZvcm1hdCA9IC9eLT9cXGQrbiQvO1xuXG5jb25zdCBiaWdJbnRzU3RyaW5naWZ5ID0gLyhbXFxbOl0pP1wiKC0/XFxkKyluXCIoJHxcXHMqWyxcXH1cXF1dKS9nO1xuY29uc3Qgbm9pc2VTdHJpbmdpZnkgPSAvKFtcXFs6XSk/KFwiLT9cXGQrbispbihcIiR8XCJcXHMqWyxcXH1cXF1dKS9nO1xuXG4vKipcbiAqIEB0eXBlZGVmIHsodGhpczogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSkgPT4gYW55fSBSZXBsYWNlclxuICogQHR5cGVkZWYgeyhrZXk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSwgY29udGV4dD86IHsgc291cmNlOiBzdHJpbmcgfSkgPT4gYW55fSBSZXZpdmVyXG4gKi9cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyB1bnN0cmluZ2lmaWFibGUgYWNjb3JkaW5nIHRvIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSBydWxlcy5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIGEgZnVuY3Rpb24sIG9yIGEgc3ltYm9sLlxuICovXG5jb25zdCBpc1Vuc3RyaW5naWZpYWJsZSA9ICh2YWwpID0+XG4gIHZhbCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgdmFsID09PSBcInN5bWJvbFwiO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgbmF0aXZlIEpTT04ucmF3SlNPTiBvYmplY3QgKE5vZGUuanMgMjIrKS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIFJhd0pTT04gaW5zdGFuY2UuXG4gKi9cbmNvbnN0IGlzUmF3SlNPTiA9ICh2YWwpID0+XG4gIHZhbCAhPT0gbnVsbCAmJlxuICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiICYmXG4gIHZhbC5jb25zdHJ1Y3RvciAmJlxuICB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gXCJSYXdKU09OXCI7XG5cbi8qKlxuICogSXRlcmF0aXZlbHkgY29udmVydHMgYSBKUyB2YWx1ZSB0byBhIEpTT04gc3RyaW5nLlxuICogVXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gdGhlIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSBoaXRzIHRoZSBNYXhpbXVtIENhbGwgU3RhY2sgc2l6ZS5cbiAqIEZ1bGx5IGNvbXBsaWFudCB3aXRoIEpTT04gZm9ybWF0dGluZyAoc3BhY2UpLCByZXBsYWNlcnMsIGFuZCB0b0pTT04gYmVoYXZpb3JzLlxuICpcbiAqIEBwYXJhbSB7YW55fSByb290VmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeS5cbiAqIEBwYXJhbSB7UmVwbGFjZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbH0gW3JlcGxhY2VyXSBVc2VyJ3MgY3VzdG9tIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IFtzcGFjZVBhcmFtXSBJbmRlbnRhdGlvbiBmb3IgcHJldHR5LXByaW50aW5nLlxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gVGhlIGdlbmVyYXRlZCBKU09OIHN0cmluZy5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5SXRlcmF0aXZlbHkgPSAocm9vdFZhbHVlLCByZXBsYWNlciwgc3BhY2VQYXJhbSkgPT4ge1xuICBsZXQgc3BhY2UgPSBcIlwiO1xuXG4gIGlmICh0eXBlb2Ygc3BhY2VQYXJhbSA9PT0gXCJudW1iZXJcIikge1xuICAgIHNwYWNlID0gXCIgXCIucmVwZWF0KE1hdGgubWluKDEwLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHNwYWNlUGFyYW0pKSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZVBhcmFtID09PSBcInN0cmluZ1wiKSB7XG4gICAgc3BhY2UgPSBzcGFjZVBhcmFtLnNsaWNlKDAsIDEwKTtcbiAgfVxuXG4gIGNvbnN0IGlzRnVuY3Rpb25SZXBsYWNlciA9IHR5cGVvZiByZXBsYWNlciA9PT0gXCJmdW5jdGlvblwiO1xuICBjb25zdCBwcm9wZXJ0eUxpc3QgPSBBcnJheS5pc0FycmF5KHJlcGxhY2VyKVxuICAgID8gbmV3IFNldChyZXBsYWNlci5tYXAoU3RyaW5nKSlcbiAgICA6IG51bGw7XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgdmFsdWUgZm9yIHN0cmluZ2lmaWNhdGlvbiBieSByZXNvbHZpbmcgdG9KU09OLCBoYW5kbGluZyBCaWdJbnRzLFxuICAgKiBhcHBseWluZyBjdXN0b20gcmVwbGFjZXJzLCBhbmQgdW53cmFwcGluZyBwcmltaXRpdmUgb2JqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R8QXJyYXl9IHBhcmVudCBUaGUgcGFyZW50IG9iamVjdCBvciBhcnJheSBob2xkaW5nIHRoZSB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgVGhlIHJhdyB2YWx1ZSB0byBwcm9jZXNzLlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgcHJvY2Vzc2VkIHZhbHVlIHJlYWR5IGZvciBzdHJpbmdpZmljYXRpb24uXG4gICAqL1xuICBjb25zdCBwcmVwYXJlVmFsID0gKHBhcmVudCwga2V5LCB2YWwpID0+IHtcbiAgICBjb25zdCBpc09iamVjdCA9IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiO1xuICAgIGNvbnN0IGhhc1RvSlNPTiA9IGlzT2JqZWN0ICYmIHR5cGVvZiB2YWwudG9KU09OID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICBpZiAoaGFzVG9KU09OKSB7XG4gICAgICB2YWwgPSB2YWwudG9KU09OKGtleSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOb2lzZSA9IHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgJiYgbm9pc2VWYWx1ZS50ZXN0KHZhbCk7XG5cbiAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIHZhbCArIFwiblwiO1xuXG4gICAgY29uc3QgaXNCaWdJbnQgPSB0eXBlb2YgdmFsID09PSBcImJpZ2ludFwiO1xuXG4gICAgaWYgKGlzQmlnSW50KSB7XG4gICAgICBjb25zdCBzdXBwb3J0c1Jhd0pTT04gPSBcInJhd0pTT05cIiBpbiBKU09OO1xuXG4gICAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSByZXR1cm4gSlNPTi5yYXdKU09OKHZhbC50b1N0cmluZygpKTtcblxuICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb25SZXBsYWNlcikge1xuICAgICAgdmFsID0gcmVwbGFjZXIuY2FsbChwYXJlbnQsIGtleSwgdmFsKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1Bvc3RSZXBsYWNlck9iamVjdCA9IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiO1xuXG4gICAgaWYgKGlzUG9zdFJlcGxhY2VyT2JqZWN0KSB7XG4gICAgICBjb25zdCBpc1ByaW1pdGl2ZVdyYXBwZXIgPVxuICAgICAgICB2YWwgaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgdmFsIGluc3RhbmNlb2YgU3RyaW5nIHx8XG4gICAgICAgIHZhbCBpbnN0YW5jZW9mIEJvb2xlYW47XG5cbiAgICAgIGlmIChpc1ByaW1pdGl2ZVdyYXBwZXIpIHtcbiAgICAgICAgdmFsID0gdmFsLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9O1xuXG4gIGNvbnN0IHJvb3RQcm9jZXNzZWQgPSBwcmVwYXJlVmFsKHsgXCJcIjogcm9vdFZhbHVlIH0sIFwiXCIsIHJvb3RWYWx1ZSk7XG5cbiAgaWYgKGlzVW5zdHJpbmdpZmlhYmxlKHJvb3RQcm9jZXNzZWQpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGlzUm9vdFByaW1pdGl2ZSA9XG4gICAgcm9vdFByb2Nlc3NlZCA9PT0gbnVsbCB8fCB0eXBlb2Ygcm9vdFByb2Nlc3NlZCAhPT0gXCJvYmplY3RcIjtcbiAgY29uc3QgaXNSb290TmF0aXZlUmF3SlNPTiA9IGlzUmF3SlNPTihyb290UHJvY2Vzc2VkKTtcblxuICBpZiAoaXNSb290UHJpbWl0aXZlIHx8IGlzUm9vdE5hdGl2ZVJhd0pTT04pIHtcbiAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmdpZnkocm9vdFByb2Nlc3NlZCk7XG4gIH1cblxuICBjb25zdCBjaHVua3MgPSBbXTtcbiAgbGV0IGxldmVsID0gMDtcblxuICBjb25zdCBzdGFjayA9IFtcbiAgICB7XG4gICAgICBwYXJlbnQ6IHsgXCJcIjogcm9vdFByb2Nlc3NlZCB9LFxuICAgICAga2V5OiBcIlwiLFxuICAgICAgdmFsOiByb290UHJvY2Vzc2VkLFxuICAgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheShyb290UHJvY2Vzc2VkKSxcbiAgICAgIGtleXM6IEFycmF5LmlzQXJyYXkocm9vdFByb2Nlc3NlZCkgPyBudWxsIDogT2JqZWN0LmtleXMocm9vdFByb2Nlc3NlZCksXG4gICAgICBpbmRleDogMCxcbiAgICAgIGZpcnN0OiB0cnVlLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KFtyb290UHJvY2Vzc2VkXSk7XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICBpZiAobm9kZS5pbmRleCA9PT0gMCkge1xuICAgICAgY2h1bmtzLnB1c2gobm9kZS5pc0FycmF5ID8gXCJbXCIgOiBcIntcIik7XG4gICAgICBsZXZlbCsrO1xuICAgIH1cblxuICAgIGxldCBpc0RvbmUgPSBmYWxzZTtcblxuICAgIGlmIChub2RlLmlzQXJyYXkpIHtcbiAgICAgIGlmIChub2RlLmluZGV4IDwgbm9kZS52YWwubGVuZ3RoKSB7XG4gICAgICAgIGlmICghbm9kZS5maXJzdCkgY2h1bmtzLnB1c2goXCIsXCIpO1xuXG4gICAgICAgIGlmIChzcGFjZSkgY2h1bmtzLnB1c2goXCJcXG5cIiArIHNwYWNlLnJlcGVhdChsZXZlbCkpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkUmF3ID0gbm9kZS52YWxbbm9kZS5pbmRleF07XG4gICAgICAgIGNvbnN0IGNoaWxkVmFsID0gcHJlcGFyZVZhbChub2RlLnZhbCwgU3RyaW5nKG5vZGUuaW5kZXgpLCBjaGlsZFJhdyk7XG5cbiAgICAgICAgaWYgKGlzVW5zdHJpbmdpZmlhYmxlKGNoaWxkVmFsKSkge1xuICAgICAgICAgIGNodW5rcy5wdXNoKFwibnVsbFwiKTtcbiAgICAgICAgICBub2RlLmZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzQ29tcGxleE9iamVjdCA9XG4gICAgICAgICAgICBjaGlsZFZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGRWYWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgICAgY29uc3QgaXNOYXRpdmVSYXcgPSBpc1Jhd0pTT04oY2hpbGRWYWwpO1xuXG4gICAgICAgICAgaWYgKGlzQ29tcGxleE9iamVjdCAmJiAhaXNOYXRpdmVSYXcpIHtcbiAgICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhjaGlsZFZhbCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKGNoaWxkVmFsKTtcblxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHBhcmVudDogbm9kZS52YWwsXG4gICAgICAgICAgICAgIGtleTogU3RyaW5nKG5vZGUuaW5kZXgpLFxuICAgICAgICAgICAgICB2YWw6IGNoaWxkVmFsLFxuICAgICAgICAgICAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKSxcbiAgICAgICAgICAgICAga2V5czogQXJyYXkuaXNBcnJheShjaGlsZFZhbCkgPyBudWxsIDogT2JqZWN0LmtleXMoY2hpbGRWYWwpLFxuICAgICAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAgICAgZmlyc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbm9kZS5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChvcmlnaW5hbFN0cmluZ2lmeShjaGlsZFZhbCkpO1xuICAgICAgICAgICAgbm9kZS5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5pbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNEb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKG5vZGUuaW5kZXggPCBub2RlLmtleXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGsgPSBub2RlLmtleXNbbm9kZS5pbmRleCsrXTtcblxuICAgICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0QnlBcnJheSA9IHByb3BlcnR5TGlzdCAmJiAhcHJvcGVydHlMaXN0LmhhcyhrKTtcblxuICAgICAgICBpZiAoaXNGaWx0ZXJlZE91dEJ5QXJyYXkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkUmF3ID0gbm9kZS52YWxba107XG4gICAgICAgIGNvbnN0IGNoaWxkVmFsID0gcHJlcGFyZVZhbChub2RlLnZhbCwgaywgY2hpbGRSYXcpO1xuXG4gICAgICAgIGlmIChpc1Vuc3RyaW5naWZpYWJsZShjaGlsZFZhbCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICghbm9kZS5maXJzdCkgY2h1bmtzLnB1c2goXCIsXCIpO1xuXG4gICAgICAgIGlmIChzcGFjZSkge1xuICAgICAgICAgIGNodW5rcy5wdXNoKFwiXFxuXCIgKyBzcGFjZS5yZXBlYXQobGV2ZWwpICsgb3JpZ2luYWxTdHJpbmdpZnkoaykgKyBcIjogXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rcy5wdXNoKG9yaWdpbmFsU3RyaW5naWZ5KGspICsgXCI6XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNDb21wbGV4T2JqZWN0ID1cbiAgICAgICAgICBjaGlsZFZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGRWYWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgIGNvbnN0IGlzTmF0aXZlUmF3ID0gaXNSYXdKU09OKGNoaWxkVmFsKTtcblxuICAgICAgICBpZiAoaXNDb21wbGV4T2JqZWN0ICYmICFpc05hdGl2ZVJhdykge1xuICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhjaGlsZFZhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZpc2l0ZWQuYWRkKGNoaWxkVmFsKTtcblxuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcGFyZW50OiBub2RlLnZhbCxcbiAgICAgICAgICAgIGtleTogayxcbiAgICAgICAgICAgIHZhbDogY2hpbGRWYWwsXG4gICAgICAgICAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKSxcbiAgICAgICAgICAgIGtleXM6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpID8gbnVsbCA6IE9iamVjdC5rZXlzKGNoaWxkVmFsKSxcbiAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgZmlyc3Q6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBub2RlLmZpcnN0ID0gZmFsc2U7XG5cbiAgICAgICAgICBicmVhazsgLy8gU3RvcCBjdXJyZW50IGxvb3AgbGV2ZWwgdG8gcHJvY2VzcyB0aGUgbmV3bHkgcHVzaGVkIHN0YWNrIG5vZGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaHVua3MucHVzaChvcmlnaW5hbFN0cmluZ2lmeShjaGlsZFZhbCkpO1xuICAgICAgICAgIG5vZGUuZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc05vZGVGdWxseVByb2Nlc3NlZCA9XG4gICAgICAgIG5vZGUuaW5kZXggPj0gbm9kZS5rZXlzLmxlbmd0aCAmJiBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9PT0gbm9kZTtcblxuICAgICAgaWYgKGlzTm9kZUZ1bGx5UHJvY2Vzc2VkKSB7XG4gICAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzRG9uZSkge1xuICAgICAgbGV2ZWwtLTtcblxuICAgICAgaWYgKCFub2RlLmZpcnN0ICYmIHNwYWNlKSBjaHVua3MucHVzaChcIlxcblwiICsgc3BhY2UucmVwZWF0KGxldmVsKSk7XG5cbiAgICAgIGNodW5rcy5wdXNoKG5vZGUuaXNBcnJheSA/IFwiXVwiIDogXCJ9XCIpO1xuICAgICAgdmlzaXRlZC5kZWxldGUobm9kZS52YWwpO1xuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNodW5rcy5qb2luKFwiXCIpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIEphdmFTY3JpcHQgdmFsdWUgdG8gYSBKU09OIHN0cmluZy5cbiAqXG4gKiBTdXBwb3J0cyBzZXJpYWxpemF0aW9uIG9mIEJpZ0ludCB2YWx1ZXMgdXNpbmcgdHdvIHN0cmF0ZWdpZXM6XG4gKiAxLiBDdXN0b20gZm9ybWF0IFwiMTIzblwiIFx1MjE5MiBcIjEyM1wiICh1bml2ZXJzYWwgZmFsbGJhY2spXG4gKiAyLiBOYXRpdmUgSlNPTi5yYXdKU09OKCkgKE5vZGUuanMgMjIrLCBmYXN0ZXN0KSB3aGVuIGF2YWlsYWJsZVxuICpcbiAqIEFsbCBvdGhlciB2YWx1ZXMgYXJlIHNlcmlhbGl6ZWQgZXhhY3RseSBsaWtlIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSgpLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBKU09OIHN0cmluZy5cbiAqIEBwYXJhbSB7UmVwbGFjZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbH0gW3JlcGxhY2VyXVxuICogQSBmdW5jdGlvbiB0aGF0IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN0cmluZ2lmaWNhdGlvbiBwcm9jZXNzLFxuICogb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy9udW1iZXJzIHRvIGluZGljYXRlIHByb3BlcnRpZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBbc3BhY2VdXG4gKiBBIHN0cmluZyBvciBudW1iZXIgdG8gc3BlY2lmeSBpbmRlbnRhdGlvbiBvciBwcmV0dHktcHJpbnRpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKi9cbmNvbnN0IEpTT05TdHJpbmdpZnkgPSAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN1cHBvcnRzUmF3SlNPTiA9IFwicmF3SlNPTlwiIGluIEpTT047XG5cbiAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxTdHJpbmdpZnkoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAoa2V5LCB2YWwpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJiaWdpbnRcIikgcmV0dXJuIEpTT04ucmF3SlNPTih2YWwudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICBjb25zdCBoYXNGdW5jdGlvblJlcGxhY2VyID0gdHlwZW9mIHJlcGxhY2VyID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICAgICAgICBpZiAoaGFzRnVuY3Rpb25SZXBsYWNlcikgcmV0dXJuIHJlcGxhY2VyKGtleSwgdmFsKTtcblxuICAgICAgICAgIGNvbnN0IGlzS2V5SW5BcnJheVJlcGxhY2VyID1cbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVwbGFjZXIpICYmIHJlcGxhY2VyLmluY2x1ZGVzKGtleSk7XG5cbiAgICAgICAgICBpZiAoaXNLZXlJbkFycmF5UmVwbGFjZXIpIHJldHVybiB2YWw7XG5cbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBzcGFjZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG9yaWdpbmFsU3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpO1xuXG4gICAgY29uc3QgY29udmVydGVkVG9DdXN0b21KU09OID0gb3JpZ2luYWxTdHJpbmdpZnkoXG4gICAgICB2YWx1ZSxcbiAgICAgIChrZXksIHZhbCkgPT4ge1xuICAgICAgICBjb25zdCBpc05vaXNlID0gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiAmJiBub2lzZVZhbHVlLnRlc3QodmFsKTtcblxuICAgICAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7IC8vIE1hcmsgbm9pc2UgdmFsdWVzIHdpdGggYWRkaXRpb25hbCBcIm5cIiB0byBvZmZzZXQgdGhlIGRlbGV0aW9uIG9mIG9uZSBcIm5cIiBkdXJpbmcgdGhlIHByb2Nlc3NpbmdcblxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJiaWdpbnRcIikgcmV0dXJuIHZhbC50b1N0cmluZygpICsgXCJuXCI7XG5cbiAgICAgICAgY29uc3QgaGFzRnVuY3Rpb25SZXBsYWNlciA9IHR5cGVvZiByZXBsYWNlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICAgIGlmIChoYXNGdW5jdGlvblJlcGxhY2VyKSByZXR1cm4gcmVwbGFjZXIoa2V5LCB2YWwpO1xuXG4gICAgICAgIGNvbnN0IGlzS2V5SW5BcnJheVJlcGxhY2VyID1cbiAgICAgICAgICBBcnJheS5pc0FycmF5KHJlcGxhY2VyKSAmJiByZXBsYWNlci5pbmNsdWRlcyhrZXkpO1xuXG4gICAgICAgIGlmIChpc0tleUluQXJyYXlSZXBsYWNlcikgcmV0dXJuIHZhbDtcblxuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfSxcbiAgICAgIHNwYWNlLFxuICAgICk7XG5cbiAgICBjb25zdCBwcm9jZXNzZWRKU09OID0gY29udmVydGVkVG9DdXN0b21KU09OLnJlcGxhY2UoXG4gICAgICBiaWdJbnRzU3RyaW5naWZ5LFxuICAgICAgXCIkMSQyJDNcIixcbiAgICApOyAvLyBEZWxldGUgb25lIFwiblwiIG9mZiB0aGUgZW5kIG9mIGV2ZXJ5IEJpZ0ludCB2YWx1ZVxuXG4gICAgY29uc3QgZGVub2lzZWRKU09OID0gcHJvY2Vzc2VkSlNPTi5yZXBsYWNlKG5vaXNlU3RyaW5naWZ5LCBcIiQxJDIkM1wiKTsgLy8gUmVtb3ZlIG9uZSBcIm5cIiBvZmYgdGhlIGVuZCBvZiBldmVyeSBub2lzeSBzdHJpbmdcblxuICAgIHJldHVybiBkZW5vaXNlZEpTT047XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xuICAgICAgY29uc3QgY29udmVydGVkSlNPTiA9IHN0cmluZ2lmeUl0ZXJhdGl2ZWx5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpO1xuXG4gICAgICBpZiAoY29udmVydGVkSlNPTiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzdXBwb3J0c1Jhd0pTT04gPSBcInJhd0pTT05cIiBpbiBKU09OO1xuXG4gICAgICBpZiAoc3VwcG9ydHNSYXdKU09OKSByZXR1cm4gY29udmVydGVkSlNPTjtcblxuICAgICAgY29uc3QgcHJvY2Vzc2VkSlNPTiA9IGNvbnZlcnRlZEpTT04ucmVwbGFjZShiaWdJbnRzU3RyaW5naWZ5LCBcIiQxJDIkM1wiKTtcblxuICAgICAgcmV0dXJuIHByb2Nlc3NlZEpTT04ucmVwbGFjZShub2lzZVN0cmluZ2lmeSwgXCIkMSQyJDNcIik7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGZlYXR1cmVDYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBEZXRlY3RzIGlmIHRoZSBjdXJyZW50IEpTT04ucGFyc2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgdGhlIGNvbnRleHQuc291cmNlIGZlYXR1cmUuXG4gKlxuICogVXNlcyB0b1N0cmluZygpIGZpbmdlcnByaW50aW5nIHRvIGNhY2hlIHJlc3VsdHMgYW5kIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHJ1bnRpbWVcbiAqIHJlcGxhY2VtZW50cyBvZiBKU09OLnBhcnNlIChwb2x5ZmlsbHMsIG1vY2tzLCBldGMuKS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBjb250ZXh0LnNvdXJjZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuY29uc3QgaXNDb250ZXh0U291cmNlU3VwcG9ydGVkID0gKCkgPT4ge1xuICBjb25zdCBwYXJzZUZpbmdlcnByaW50ID0gSlNPTi5wYXJzZS50b1N0cmluZygpO1xuXG4gIGlmIChmZWF0dXJlQ2FjaGUuaGFzKHBhcnNlRmluZ2VycHJpbnQpKSB7XG4gICAgcmV0dXJuIGZlYXR1cmVDYWNoZS5nZXQocGFyc2VGaW5nZXJwcmludCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoXG4gICAgICBcIjFcIixcbiAgICAgIChfLCBfXywgY29udGV4dCkgPT4gISFjb250ZXh0Py5zb3VyY2UgJiYgY29udGV4dC5zb3VyY2UgPT09IFwiMVwiLFxuICAgICk7XG4gICAgZmVhdHVyZUNhY2hlLnNldChwYXJzZUZpbmdlcnByaW50LCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCB7XG4gICAgZmVhdHVyZUNhY2hlLnNldChwYXJzZUZpbmdlcnByaW50LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogUmV2aXZlciBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGN1c3RvbS1mb3JtYXQgQmlnSW50IHN0cmluZ3MgYmFjayB0byBCaWdJbnQgdmFsdWVzLlxuICogQWxzbyBoYW5kbGVzIFwibm9pc2VcIiBzdHJpbmdzIHRoYXQgYWNjaWRlbnRhbGx5IG1hdGNoIHRoZSBCaWdJbnQgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkfSBrZXkgVGhlIG9iamVjdCBrZXkuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBiZWluZyBwYXJzZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIFBhcnNlIGNvbnRleHQgKGlmIHN1cHBvcnRlZCBieSBKU09OLnBhcnNlKS5cbiAqIEBwYXJhbSB7UmV2aXZlcn0gW3VzZXJSZXZpdmVyXSBVc2VyJ3MgY3VzdG9tIHJldml2ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7YW55fSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUuXG4gKi9cbmNvbnN0IGNvbnZlcnRNYXJrZWRCaWdJbnRzUmV2aXZlciA9IChrZXksIHZhbHVlLCBjb250ZXh0LCB1c2VyUmV2aXZlcikgPT4ge1xuICBjb25zdCBpc0N1c3RvbUZvcm1hdEJpZ0ludCA9XG4gICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIGN1c3RvbUZvcm1hdC50ZXN0KHZhbHVlKTtcblxuICBpZiAoaXNDdXN0b21Gb3JtYXRCaWdJbnQpIHJldHVybiBCaWdJbnQodmFsdWUuc2xpY2UoMCwgLTEpKTtcblxuICBjb25zdCBpc05vaXNlVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgbm9pc2VWYWx1ZS50ZXN0KHZhbHVlKTtcbiAgaWYgKGlzTm9pc2VWYWx1ZSkgcmV0dXJuIHZhbHVlLnNsaWNlKDAsIC0xKTtcblxuICBjb25zdCBoYXNVc2VyUmV2aXZlciA9IHR5cGVvZiB1c2VyUmV2aXZlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gIGlmICghaGFzVXNlclJldml2ZXIpIHJldHVybiB2YWx1ZTtcblxuICByZXR1cm4gdXNlclJldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIEZhc3QgSlNPTi5wYXJzZSBpbXBsZW1lbnRhdGlvbiAofjJ4IGZhc3RlciB0aGFuIGNsYXNzaWMgZmFsbGJhY2spLlxuICogVXNlcyBKU09OLnBhcnNlJ3MgY29udGV4dC5zb3VyY2UgZmVhdHVyZSB0byBkZXRlY3QgaW50ZWdlcnMgYW5kIGNvbnZlcnRcbiAqIGxhcmdlIG51bWJlcnMgZGlyZWN0bHkgdG8gQmlnSW50IHdpdGhvdXQgc3RyaW5nIG1hbmlwdWxhdGlvbi5cbiAqXG4gKiBEb2VzIG5vdCBzdXBwb3J0IGxlZ2FjeSBjdXN0b20gZm9ybWF0IGZyb20gdjEgb2YgdGhpcyBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IEpTT04gc3RyaW5nIHRvIHBhcnNlLlxuICogQHBhcmFtIHtSZXZpdmVyfSBbcmV2aXZlcl0gVHJhbnNmb3JtIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUuXG4gKiBAcmV0dXJucyB7YW55fSBQYXJzZWQgSmF2YVNjcmlwdCB2YWx1ZS5cbiAqL1xuY29uc3QgSlNPTlBhcnNlVjIgPSAodGV4dCwgcmV2aXZlcikgPT4ge1xuICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0LCAoa2V5LCB2YWx1ZSwgY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGlzTnVtYmVyID0gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlzT3V0T2ZCb3VuZHMgPVxuICAgICAgdmFsdWUgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCB2YWx1ZSA8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgIGNvbnN0IGlzQmlnTnVtYmVyID0gaXNOdW1iZXIgJiYgaXNPdXRPZkJvdW5kcztcbiAgICBjb25zdCBpc0ludCA9IGNvbnRleHQgJiYgaW50UmVnZXgudGVzdChjb250ZXh0LnNvdXJjZSk7XG4gICAgY29uc3QgaXNCaWdJbnQgPSBpc0JpZ051bWJlciAmJiBpc0ludDtcblxuICAgIGlmIChpc0JpZ0ludCkgcmV0dXJuIEJpZ0ludChjb250ZXh0LnNvdXJjZSk7XG5cbiAgICBjb25zdCBoYXNDdXN0b21SZXZpdmVyID0gdHlwZW9mIHJldml2ZXIgPT09IFwiZnVuY3Rpb25cIjtcblxuICAgIGlmICghaGFzQ3VzdG9tUmV2aXZlcikgcmV0dXJuIHZhbHVlO1xuXG4gICAgcmV0dXJuIHJldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuY29uc3QgTUFYX0lOVCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLnRvU3RyaW5nKCk7XG5jb25zdCBNQVhfRElHSVRTID0gTUFYX0lOVC5sZW5ndGg7XG5jb25zdCBzdHJpbmdzT3JMYXJnZU51bWJlcnMgPVxuICAvXCIoPzpcXFxcLnxbXlwiXSkqXCJ8LT8oMHxbMS05XVswLTldKikoXFwuWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8vZztcbmNvbnN0IG5vaXNlVmFsdWVXaXRoUXVvdGVzID0gL15cIi0/XFxkK24rXCIkLzsgLy8gTm9pc2UgLSBzdHJpbmdzIHRoYXQgbWF0Y2ggdGhlIGN1c3RvbSBmb3JtYXQgYmVmb3JlIGJlaW5nIGNvbnZlcnRlZCB0byBpdFxuXG4vKipcbiAqIEl0ZXJhdGl2ZWx5IHRyYXZlcnNlcyB0aGUgcGFyc2VkIG9iamVjdCBib3R0b20tdXAgKHBvc3Qtb3JkZXIpLFxuICogZW11bGF0aW5nIHRoZSBuYXRpdmUgSlNPTi5wYXJzZSByZXZpdmVyIGJlaGF2aW9yLlxuICogVGhpcyBhdm9pZHMgQ2FsbCBTdGFjayBvdmVyZmxvd3MgKFJhbmdlRXJyb3IpIG9uIGRlZXBseSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAqXG4gKiBAcGFyYW0ge2FueX0gcGFyc2VkIFRoZSBuYXRpdmVseSBwYXJzZWQgSlNPTiBvYmplY3QuXG4gKiBAcGFyYW0ge1Jldml2ZXJ9IFt1c2VyUmV2aXZlcl0gVXNlcidzIGN1c3RvbSByZXZpdmVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMge2FueX0gVGhlIGZ1bGx5IHByb2Nlc3NlZCBvYmplY3QuXG4gKi9cbmNvbnN0IGFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5ID0gKHBhcnNlZCwgdXNlclJldml2ZXIpID0+IHtcbiAgY29uc3Qgcm9vdEhvbGRlciA9IHsgXCJcIjogcGFyc2VkIH07XG4gIGNvbnN0IHN0YWNrID0gW3sgcGFyZW50OiByb290SG9sZGVyLCBrZXk6IFwiXCIsIHZpc2l0ZWQ6IGZhbHNlIH1dO1xuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKCFub2RlLnZpc2l0ZWQpIHtcbiAgICAgIG5vZGUudmlzaXRlZCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gbm9kZS5wYXJlbnRbbm9kZS5rZXldO1xuICAgICAgY29uc3QgaXNDb21wbGV4T2JqZWN0ID0gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xuXG4gICAgICBpZiAoaXNDb21wbGV4T2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGtleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHsgcGFyZW50OiB2YWx1ZSwga2V5OiBrZXlzW2ldLCB2aXNpdGVkOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHBhcmVudCwga2V5IH0gPSBub2RlO1xuICAgICAgbGV0IHZhbHVlID0gcGFyZW50W2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgaXNDdXN0b21Gb3JtYXRCaWdJbnQgPSBjdXN0b21Gb3JtYXQudGVzdCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGlzQ3VzdG9tRm9ybWF0QmlnSW50KSB7XG4gICAgICAgICAgdmFsdWUgPSBCaWdJbnQodmFsdWUuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpc05vaXNlID0gbm9pc2VWYWx1ZS50ZXN0KHZhbHVlKTtcblxuICAgICAgICAgIGlmIChpc05vaXNlKSB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNVc2VyUmV2aXZlciA9IHR5cGVvZiB1c2VyUmV2aXZlciA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICBpZiAoaGFzVXNlclJldml2ZXIpIHtcbiAgICAgICAgdmFsdWUgPSB1c2VyUmV2aXZlci5jYWxsKHBhcmVudCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRGVsZXRlZCA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0RlbGV0ZWQpIHtcbiAgICAgICAgZGVsZXRlIHBhcmVudFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3RIb2xkZXJbXCJcIl07XG59O1xuXG4vKipcbiAqIFByZS1wcm9jZXNzZXMgdGhlIEpTT04gc3RyaW5nIHRvIG1hcmsgbGFyZ2UgbnVtYmVycyB3aXRoIGFuICduJyBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHJhdyBKU09OIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzZXJpYWxpemVkIHN0cmluZyB3aXRoIG1hcmtlZCBCaWdJbnRzLlxuICovXG5jb25zdCBzZXJpYWxpemVCaWdJbnRzID0gKHRleHQpID0+IHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZShcbiAgICBzdHJpbmdzT3JMYXJnZU51bWJlcnMsXG4gICAgKG1hdGNoLCBkaWdpdHMsIGZyYWN0aW9uYWwsIGV4cG9uZW50aWFsKSA9PiB7XG4gICAgICBjb25zdCBpc1N0cmluZyA9IG1hdGNoWzBdID09PSAnXCInO1xuICAgICAgY29uc3QgaXNOb2lzZSA9IGlzU3RyaW5nICYmIG5vaXNlVmFsdWVXaXRoUXVvdGVzLnRlc3QobWF0Y2gpO1xuXG4gICAgICBpZiAoaXNOb2lzZSkgcmV0dXJuIG1hdGNoLnN1YnN0cmluZygwLCBtYXRjaC5sZW5ndGggLSAxKSArICduXCInOyAvLyBNYXJrIG5vaXNlIHZhbHVlcyB3aXRoIGFkZGl0aW9uYWwgXCJuXCIgdG8gb2Zmc2V0IHRoZSBkZWxldGlvbiBvZiBvbmUgXCJuXCIgZHVyaW5nIHRoZSBwcm9jZXNzaW5nXG5cbiAgICAgIGNvbnN0IGhhc0ZyYWN0aW9uYWxPckV4cG9uZW50aWFsID0gZnJhY3Rpb25hbCB8fCBleHBvbmVudGlhbDtcblxuICAgICAgLy8gV2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMsIHdlIGNhbiBjb3JyZWN0bHkgdXNlIGxleGljb2dyYXBoaWNhbCBjb21wYXJpc29uIHRvIGRvIGEgbnVtZXJpYyBjb21wYXJpc29uXG4gICAgICBjb25zdCBpc0xlc3NUaGFuTWF4U2FmZUludCA9XG4gICAgICAgIGRpZ2l0cyAmJlxuICAgICAgICAoZGlnaXRzLmxlbmd0aCA8IE1BWF9ESUdJVFMgfHxcbiAgICAgICAgICAoZGlnaXRzLmxlbmd0aCA9PT0gTUFYX0RJR0lUUyAmJiBkaWdpdHMgPD0gTUFYX0lOVCkpO1xuXG4gICAgICBjb25zdCBpc1N0YW5kYXJkVmFsdWUgPVxuICAgICAgICBpc1N0cmluZyB8fCBoYXNGcmFjdGlvbmFsT3JFeHBvbmVudGlhbCB8fCBpc0xlc3NUaGFuTWF4U2FmZUludDtcblxuICAgICAgaWYgKGlzU3RhbmRhcmRWYWx1ZSkgcmV0dXJuIG1hdGNoO1xuXG4gICAgICByZXR1cm4gJ1wiJyArIG1hdGNoICsgJ25cIic7XG4gICAgfSxcbiAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBKU09OIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCB2YWx1ZS5cbiAqXG4gKiBTdXBwb3J0cyBwYXJzaW5nIG9mIGxhcmdlIGludGVnZXJzIHVzaW5nIHR3byBzdHJhdGVnaWVzOlxuICogMS4gQ2xhc3NpYyBmYWxsYmFjazogTWFya3MgbGFyZ2UgbnVtYmVycyB3aXRoIFwiMTIzblwiIGZvcm1hdCwgdGhlbiBjb252ZXJ0cyB0byBCaWdJbnRcbiAqIDIuIEZhc3QgcGF0aCAoSlNPTlBhcnNlVjIpOiBVc2VzIGNvbnRleHQuc291cmNlIGZlYXR1cmUgKH4yeCBmYXN0ZXIpIHdoZW4gYXZhaWxhYmxlXG4gKlxuICogQWxsIG90aGVyIEpTT04gdmFsdWVzIGFyZSBwYXJzZWQgZXhhY3RseSBsaWtlIG5hdGl2ZSBKU09OLnBhcnNlKCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgQSB2YWxpZCBKU09OIHN0cmluZy5cbiAqIEBwYXJhbSB7UmV2aXZlcn0gW3Jldml2ZXJdXG4gKiBBIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2ggbWVtYmVyXG4gKiBvZiB0aGUgb2JqZWN0LiBJZiBhIG1lbWJlciBjb250YWlucyBuZXN0ZWQgb2JqZWN0cywgdGhlIG5lc3RlZCBvYmplY3RzIGFyZVxuICogdHJhbnNmb3JtZWQgYmVmb3JlIHRoZSBwYXJlbnQgb2JqZWN0IGlzLlxuICogQHJldHVybnMge2FueX0gVGhlIHBhcnNlZCBKYXZhU2NyaXB0IHZhbHVlLlxuICogQHRocm93cyB7U3ludGF4RXJyb3J9IElmIHRleHQgaXMgbm90IHZhbGlkIEpTT04uXG4gKi9cbmNvbnN0IEpTT05QYXJzZSA9ICh0ZXh0LCByZXZpdmVyKSA9PiB7XG4gIGlmICghdGV4dCkgcmV0dXJuIG9yaWdpbmFsUGFyc2UodGV4dCwgcmV2aXZlcik7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaXNDb250ZXh0U291cmNlU3VwcG9ydGVkKCkpIHJldHVybiBKU09OUGFyc2VWMih0ZXh0LCByZXZpdmVyKTsgLy8gU2hvcnRjdXQgdG8gYSBmYXN0ZXIgKDJ4KSBhbmQgc2ltcGxlciB2ZXJzaW9uXG5cbiAgICAvLyBGaW5kIGFuZCBtYXJrIGJpZyBudW1iZXJzIHdpdGggXCJuXCJcbiAgICBjb25zdCBzZXJpYWxpemVkRGF0YSA9IHNlcmlhbGl6ZUJpZ0ludHModGV4dCk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWxQYXJzZShzZXJpYWxpemVkRGF0YSwgKGtleSwgdmFsdWUsIGNvbnRleHQpID0+XG4gICAgICBjb252ZXJ0TWFya2VkQmlnSW50c1Jldml2ZXIoa2V5LCB2YWx1ZSwgY29udGV4dCwgcmV2aXZlciksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSB7XG4gICAgICBjb25zdCBzZXJpYWxpemVkRGF0YSA9IHNlcmlhbGl6ZUJpZ0ludHModGV4dCk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBvcmlnaW5hbFBhcnNlKHNlcmlhbGl6ZWREYXRhKTtcblxuICAgICAgcmV0dXJuIGFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5KHBhcnNlZCwgcmV2aXZlcik7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCB7IEpTT05TdHJpbmdpZnksIEpTT05QYXJzZSB9O1xuIiwgImNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgbmFtZTtcbiAgLyoqXG4gICAqIGh0dHAgc3RhdHVzIGNvZGVcbiAgICovXG4gIHN0YXR1cztcbiAgLyoqXG4gICAqIFJlcXVlc3Qgb3B0aW9ucyB0aGF0IGxlYWQgdG8gdGhlIGVycm9yLlxuICAgKi9cbiAgcmVxdWVzdDtcbiAgLyoqXG4gICAqIFJlc3BvbnNlIG9iamVjdCBpZiBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxuICAgKi9cbiAgcmVzcG9uc2U7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlOiBvcHRpb25zLmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBOdW1iZXIucGFyc2VJbnQoc3RhdHVzQ29kZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih0aGlzLnN0YXR1cykpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIGVsc2UgLS0gQHByZXNlcnZlIC0tIEJ1ZyB3aXRoIHZpdGVzdCBjb3ZlcmFnZSB3aGVyZSBpdCBzZWVzIGFuIGVsc2UgYnJhbmNoIHRoYXQgZG9lc24ndCBleGlzdCAqL1xuICAgIGlmIChcInJlc3BvbnNlXCIgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0KTtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgcmVxdWVzdENvcHkuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLCB7XG4gICAgICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24ucmVwbGFjZShcbiAgICAgICAgICAvKD88ISApIC4qJC8sXG4gICAgICAgICAgXCIgW1JFREFDVEVEXVwiXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXF1ZXN0Q29weS51cmwgPSByZXF1ZXN0Q29weS51cmwucmVwbGFjZSgvXFxiY2xpZW50X3NlY3JldD1cXHcrL2csIFwiY2xpZW50X3NlY3JldD1bUkVEQUNURURdXCIpLnJlcGxhY2UoL1xcYmFjY2Vzc190b2tlbj1cXHcrL2csIFwiYWNjZXNzX3Rva2VuPVtSRURBQ1RFRF1cIik7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdENvcHk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIFJlcXVlc3RFcnJvclxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmltcG9ydCB7IHJlcXVlc3QgYXMgUmVxdWVzdDIgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBSZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2Vycm9yLmpzXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxuYCArIGRhdGEuZXJyb3JzLm1hcCgoZSkgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG52YXIgR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVxdWVzdDIsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDI7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnM7XG4gICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgfVxuICBuYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiO1xuICBlcnJvcnM7XG4gIGRhdGE7XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIE5PTl9WQVJJQUJMRV9PUFRJT05TID0gW1xuICBcIm1ldGhvZFwiLFxuICBcImJhc2VVcmxcIixcbiAgXCJ1cmxcIixcbiAgXCJoZWFkZXJzXCIsXG4gIFwicmVxdWVzdFwiLFxuICBcInF1ZXJ5XCIsXG4gIFwibWVkaWFUeXBlXCIsXG4gIFwib3BlcmF0aW9uTmFtZVwiXG5dO1xudmFyIEZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TID0gW1wicXVlcnlcIiwgXCJtZXRob2RcIiwgXCJ1cmxcIl07XG52YXIgR0hFU19WM19TVUZGSVhfUkVHRVggPSAvXFwvYXBpXFwvdjNcXC8/JC87XG5mdW5jdGlvbiBncmFwaHFsKHJlcXVlc3QyLCBxdWVyeSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgXCJxdWVyeVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKGBbQG9jdG9raXQvZ3JhcGhxbF0gXCJxdWVyeVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCFGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBbQG9jdG9raXQvZ3JhcGhxbF0gXCIke2tleX1cIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gT2JqZWN0LmFzc2lnbih7IHF1ZXJ5IH0sIG9wdGlvbnMpIDogcXVlcnk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmtleXMoXG4gICAgcGFyc2VkT3B0aW9uc1xuICApLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICBpZiAoTk9OX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoIXJlc3VsdC52YXJpYWJsZXMpIHtcbiAgICAgIHJlc3VsdC52YXJpYWJsZXMgPSB7fTtcbiAgICB9XG4gICAgcmVzdWx0LnZhcmlhYmxlc1trZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbiAgY29uc3QgYmFzZVVybCA9IHBhcnNlZE9wdGlvbnMuYmFzZVVybCB8fCByZXF1ZXN0Mi5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsO1xuICBpZiAoR0hFU19WM19TVUZGSVhfUkVHRVgudGVzdChiYXNlVXJsKSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnVybCA9IGJhc2VVcmwucmVwbGFjZShHSEVTX1YzX1NVRkZJWF9SRUdFWCwgXCIvYXBpL2dyYXBocWxcIik7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3QyKHJlcXVlc3RPcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9ycykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEdyYXBocWxSZXNwb25zZUVycm9yKFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcmVzcG9uc2UuZGF0YVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocmVxdWVzdDIsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0Mi5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IChxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBncmFwaHFsKG5ld1JlcXVlc3QsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIG5ld1JlcXVlc3QpLFxuICAgIGVuZHBvaW50OiBuZXdSZXF1ZXN0LmVuZHBvaW50XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBncmFwaHFsMiA9IHdpdGhEZWZhdWx0cyhyZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG5leHBvcnQge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcixcbiAgZ3JhcGhxbDIgYXMgZ3JhcGhxbCxcbiAgd2l0aEN1c3RvbVJlcXVlc3Rcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2lzLWp3dC5qc1xudmFyIGI2NHVybCA9IFwiKD86W2EtekEtWjAtOV8tXSspXCI7XG52YXIgc2VwID0gXCJcXFxcLlwiO1xudmFyIGp3dFJFID0gbmV3IFJlZ0V4cChgXiR7YjY0dXJsfSR7c2VwfSR7YjY0dXJsfSR7c2VwfSR7YjY0dXJsfSRgKTtcbnZhciBpc0pXVCA9IGp3dFJFLnRlc3QuYmluZChqd3RSRSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9hdXRoLmpzXG5hc3luYyBmdW5jdGlvbiBhdXRoKHRva2VuKSB7XG4gIGNvbnN0IGlzQXBwID0gaXNKV1QodG9rZW4pO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IHRva2VuLnN0YXJ0c1dpdGgoXCJ2MS5cIikgfHwgdG9rZW4uc3RhcnRzV2l0aChcImdoc19cIik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gdG9rZW4uc3RhcnRzV2l0aChcImdodV9cIik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtYXV0aG9yaXphdGlvbi1wcmVmaXguanNcbmZ1bmN0aW9uIHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKSB7XG4gIGlmICh0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGBiZWFyZXIgJHt0b2tlbn1gO1xuICB9XG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaG9vay5qc1xuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKFxuICAgIHJvdXRlLFxuICAgIHBhcmFtZXRlcnNcbiAgKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aDIodG9rZW4pIHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBObyB0b2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBUb2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoIGlzIG5vdCBhIHN0cmluZ1wiXG4gICAgKTtcbiAgfVxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG5leHBvcnQge1xuICBjcmVhdGVUb2tlbkF1dGhcbn07XG4iLCAiY29uc3QgVkVSU0lPTiA9IFwiNy4wLjZcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5pbXBvcnQgSG9vayBmcm9tIFwiYmVmb3JlLWFmdGVyLWhvb2tcIjtcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuaW1wb3J0IHsgd2l0aEN1c3RvbVJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvZ3JhcGhxbFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9rZW5BdXRoIH0gZnJvbSBcIkBvY3Rva2l0L2F1dGgtdG9rZW5cIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcbmNvbnN0IGNvbnNvbGVXYXJuID0gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG5jb25zdCBjb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIobG9nZ2VyID0ge30pIHtcbiAgaWYgKHR5cGVvZiBsb2dnZXIuZGVidWcgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5kZWJ1ZyA9IG5vb3A7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIuaW5mbyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmluZm8gPSBub29wO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLndhcm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci53YXJuID0gY29uc29sZVdhcm47XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIuZXJyb3IgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5lcnJvciA9IGNvbnNvbGVFcnJvcjtcbiAgfVxuICByZXR1cm4gbG9nZ2VyO1xufVxuY29uc3QgdXNlckFnZW50VHJhaWwgPSBgb2N0b2tpdC1jb3JlLmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gO1xuY2xhc3MgT2N0b2tpdCB7XG4gIHN0YXRpYyBWRVJTSU9OID0gVkVSU0lPTjtcbiAgc3RhdGljIGRlZmF1bHRzKGRlZmF1bHRzKSB7XG4gICAgY29uc3QgT2N0b2tpdFdpdGhEZWZhdWx0cyA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzBdIHx8IHt9O1xuICAgICAgICBpZiAodHlwZW9mIGRlZmF1bHRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzdXBlcihkZWZhdWx0cyhvcHRpb25zKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMudXNlckFnZW50ICYmIGRlZmF1bHRzLnVzZXJBZ2VudCA/IHtcbiAgICAgICAgICAgICAgdXNlckFnZW50OiBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHtkZWZhdWx0cy51c2VyQWdlbnR9YFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT2N0b2tpdFdpdGhEZWZhdWx0cztcbiAgfVxuICBzdGF0aWMgcGx1Z2lucyA9IFtdO1xuICAvKipcbiAgICogQXR0YWNoIGEgcGx1Z2luIChvciBtYW55KSB0byB5b3VyIE9jdG9raXQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IEFQSSA9IE9jdG9raXQucGx1Z2luKHBsdWdpbjEsIHBsdWdpbjIsIHBsdWdpbjMsIC4uLilcbiAgICovXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgc3RhdGljIHBsdWdpbnMgPSBjdXJyZW50UGx1Z2lucy5jb25jYXQoXG4gICAgICAgIG5ld1BsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKVxuICAgICAgKTtcbiAgICB9O1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGhvb2sgPSBuZXcgSG9vay5Db2xsZWN0aW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdERlZmF1bHRzID0ge1xuICAgICAgYmFzZVVybDogcmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXF1ZXN0OiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QsIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCB1c2FnZSBvbmx5LCBubyBuZWVkIHRvIHR5cGVcbiAgICAgICAgaG9vazogaG9vay5iaW5kKG51bGwsIFwicmVxdWVzdFwiKVxuICAgICAgfSksXG4gICAgICBtZWRpYVR5cGU6IHtcbiAgICAgICAgcHJldmlld3M6IFtdLFxuICAgICAgICBmb3JtYXQ6IFwiXCJcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widXNlci1hZ2VudFwiXSA9IG9wdGlvbnMudXNlckFnZW50ID8gYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7dXNlckFnZW50VHJhaWx9YCA6IHVzZXJBZ2VudFRyYWlsO1xuICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wcmV2aWV3cykge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG9wdGlvbnMucHJldmlld3M7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRpbWVab25lKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInRpbWUtem9uZVwiXSA9IG9wdGlvbnMudGltZVpvbmU7XG4gICAgfVxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmdyYXBocWwgPSB3aXRoQ3VzdG9tUmVxdWVzdCh0aGlzLnJlcXVlc3QpLmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5sb2cgPSBjcmVhdGVMb2dnZXIob3B0aW9ucy5sb2cpO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGNyZWF0ZVRva2VuQXV0aChvcHRpb25zLmF1dGgpO1xuICAgICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgYXV0aFN0cmF0ZWd5LCAuLi5vdGhlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBhdXRoID0gYXV0aFN0cmF0ZWd5KFxuICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcbiAgICAgICAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICAgICAgICAvLyB3ZSBwYXNzIHRoZSBjdXJyZW50IG9jdG9raXQgaW5zdGFuY2UgYXMgd2VsbCBhcyBpdHMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgICAgICAgLy8gdG8gYWxsb3cgZm9yIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWdpZXMgdGhhdCByZXR1cm4gYSBuZXcgb2N0b2tpdCBpbnN0YW5jZVxuICAgICAgICAgICAgLy8gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaW50ZXJuYWwgc3RhdGUgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGUgb3JpZ2luYWxcbiAgICAgICAgICAgIC8vIHJlcXVpcmVtZW50IGZvciB0aGlzIHdhcyB0aGUgXCJldmVudC1vY3Rva2l0XCIgYXV0aGVudGljYXRpb24gc3RyYXRlZ3lcbiAgICAgICAgICAgIC8vIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9ib3Qvb2N0b2tpdC1hdXRoLXByb2JvdC5cbiAgICAgICAgICAgIG9jdG9raXQ6IHRoaXMsXG4gICAgICAgICAgICBvY3Rva2l0T3B0aW9uczogb3RoZXJPcHRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25zLmF1dGhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzQ29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNsYXNzQ29uc3RydWN0b3IucGx1Z2luc1tpXSh0aGlzLCBvcHRpb25zKSk7XG4gICAgfVxuICB9XG4gIC8vIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3RvclxuICByZXF1ZXN0O1xuICBncmFwaHFsO1xuICBsb2c7XG4gIGhvb2s7XG4gIC8vIFRPRE86IHR5cGUgYG9jdG9raXQuYXV0aGAgYmFzZWQgb24gcGFzc2VkIG9wdGlvbnMuYXV0aFN0cmF0ZWd5XG4gIGF1dGg7XG59XG5leHBvcnQge1xuICBPY3Rva2l0XG59O1xuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxNy4wLjBcIjtcbiIsICJpbXBvcnQgdHlwZSB7IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmNvbnN0IEVuZHBvaW50czogRW5kcG9pbnRzRGVmYXVsdHNBbmREZWNvcmF0aW9ucyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgYWRkUmVwb0FjY2Vzc1RvU2VsZkhvc3RlZFJ1bm5lckdyb3VwSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiLFxuICAgIF0sXG4gICAgY2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiLFxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPcmdWYXJpYWJsZTogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvVmFyaWFibGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVdvcmtmbG93RGlzcGF0Y2g6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFydGlmYWN0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ3VzdG9tSW1hZ2VGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVDdXN0b21JbWFnZVZlcnNpb25Gcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9L3ZlcnNpb25zL3t2ZXJzaW9ufVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW46IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJ0aWZhY3Q6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIixcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiLFxuICAgIF0sXG4gICAgZm9yY2VDYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZm9yY2UtY2FuY2VsXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIixcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRDdXN0b21JbWFnZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy9pbWFnZXMvY3VzdG9tL3tpbWFnZV9kZWZpbml0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Q3VzdG9tSW1hZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9jdXN0b20ve2ltYWdlX2RlZmluaXRpb25faWR9L3ZlcnNpb25zL3t2ZXJzaW9ufVwiLFxuICAgIF0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0dpdGh1Yk93bmVkSW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9naXRodWItb3duZWRcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNMaW1pdHNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbGltaXRzXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzTWFjaGluZVNwZWNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL21hY2hpbmUtc2l6ZXNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQYXJ0bmVySW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9wYXJ0bmVyXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzUGxhdGZvcm1zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3BsYXRmb3Jtc1wiLFxuICAgIF0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1ZhcmlhYmxlOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfSxcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCIsXG4gICAgXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW5Vc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEN1c3RvbUltYWdlVmVyc2lvbnNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2N1c3RvbS97aW1hZ2VfZGVmaW5pdGlvbl9pZH0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RDdXN0b21JbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2N1c3RvbVwiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RHaXRodWJIb3N0ZWRSdW5uZXJzSW5Hcm91cEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0SG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0T3JnVmFyaWFibGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25TZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5BcnRpZmFjdHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIixcbiAgICBdLFxuICAgIHJlUnVuV29ya2Zsb3c6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93RmFpbGVkSm9iczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCIsXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc0RvbmU6IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIlBVVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcXVlc3RzRm9yQXV0aGVudGljYXRlZEFwcDogW1xuICAgICAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl0sXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQmlsbGluZ1ByZW1pdW1SZXF1ZXN0VXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcHJlbWl1bV9yZXF1ZXN0L3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nUHJlbWl1bVJlcXVlc3RVc2FnZVJlcG9ydFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcHJlbWl1bV9yZXF1ZXN0L3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nVXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkJpbGxpbmdVc2FnZVJlcG9ydFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiLFxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiLFxuICAgIF0sXG4gIH0sXG4gIGNhbXBhaWduczoge1xuICAgIGNyZWF0ZUNhbXBhaWduOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiXSxcbiAgICBkZWxldGVDYW1wYWlnbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NhbXBhaWducy97Y2FtcGFpZ25fbnVtYmVyfVwiXSxcbiAgICBnZXRDYW1wYWlnblN1bW1hcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9jYW1wYWlnbnMve2NhbXBhaWduX251bWJlcn1cIl0sXG4gICAgbGlzdE9yZ0NhbXBhaWduczogW1wiR0VUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiXSxcbiAgICB1cGRhdGVDYW1wYWlnbjogW1wiUEFUQ0ggL29yZ3Mve29yZ30vY2FtcGFpZ25zL3tjYW1wYWlnbl9udW1iZXJ9XCJdLFxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiLFxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3ByZWZlcmVuY2VzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBjb21taXRBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXgvY29tbWl0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2ZpeDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBjcmVhdGVWYXJpYW50QW5hbHlzaXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5hbHlzaXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfSxcbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRBdXRvZml4OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeFwiLFxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGdldFZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzUmVwb1Rhc2s6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzL3tjb2RlcWxfdmFyaWFudF9hbmFseXNpc19pZH0vcmVwb3Mve3JlcG9fb3duZXJ9L3tyZXBvX25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCIsXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl0sXG4gIH0sXG4gIGNvZGVTZWN1cml0eToge1xuICAgIGF0dGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGF0dGFjaEVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiXSxcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQT1NUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZXRhY2hDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RldGFjaFwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25Gb3JSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zZWN1cml0eS1jb25maWd1cmF0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0ZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGdldERlZmF1bHRDb25maWd1cmF0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvc2l0b3JpZXNGb3JDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0U2luZ2xlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBzZXRDb25maWd1cmF0aW9uQXNEZWZhdWx0Rm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGNvZGVzT2ZDb25kdWN0OiB7XG4gICAgZ2V0QWxsQ29kZXNPZkNvbmR1Y3Q6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdFwiXSxcbiAgICBnZXRDb25kdWN0Q29kZTogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0L3trZXl9XCJdLFxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvckRldmNvbnRhaW5lcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvcGVybWlzc2lvbnNfY2hlY2tcIixcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCIsXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZ2V0RXhwb3J0RGV0YWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGxpc3RJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IG9yZ19pZDogXCJvcmdcIiB9IH0sXG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiLFxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIixcbiAgICBdLFxuICAgIHVwZGF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclRlYW1zOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCIsXG4gICAgXSxcbiAgICBsaXN0Q29waWxvdFNlYXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCJdLFxuICB9LFxuICBjcmVkZW50aWFsczogeyByZXZva2U6IFtcIlBPU1QgL2NyZWRlbnRpYWxzL3Jldm9rZVwiXSB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXBvc2l0b3J5QWNjZXNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnfS9kZXBlbmRhYm90L3JlcG9zaXRvcnktYWNjZXNzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3J5QWNjZXNzRGVmYXVsdExldmVsOiBbXG4gICAgICBcIlBVVCAvb3JnYW5pemF0aW9ucy97b3JnfS9kZXBlbmRhYm90L3JlcG9zaXRvcnktYWNjZXNzL2RlZmF1bHQtbGV2ZWxcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXBvc2l0b3J5QWNjZXNzRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdhbml6YXRpb25zL3tvcmd9L2RlcGVuZGFib3QvcmVwb3NpdG9yeS1hY2Nlc3NcIixcbiAgICBdLFxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIixcbiAgICBdLFxuICAgIGRpZmZSYW5nZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXSxcbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZW50ZXJwcmlzZVRlYW1NZW1iZXJzaGlwczoge1xuICAgIGFkZDogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBidWxrQWRkOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy9hZGRcIixcbiAgICBdLFxuICAgIGJ1bGtSZW1vdmU6IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzL3JlbW92ZVwiLFxuICAgIF0sXG4gICAgZ2V0OiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L21lbWJlcnNoaXBzXCJdLFxuICAgIHJlbW92ZTogW1xuICAgICAgXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgZW50ZXJwcmlzZVRlYW1Pcmdhbml6YXRpb25zOiB7XG4gICAgYWRkOiBbXG4gICAgICBcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMve29yZ31cIixcbiAgICBdLFxuICAgIGJ1bGtBZGQ6IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMvYWRkXCIsXG4gICAgXSxcbiAgICBidWxrUmVtb3ZlOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9vcmdhbml6YXRpb25zL3JlbW92ZVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnMve29yZ31cIixcbiAgICBdLFxuICAgIGdldEFzc2lnbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve2VudGVycHJpc2UtdGVhbX0vb3JnYW5pemF0aW9ucy97b3JnfVwiLFxuICAgIF0sXG4gICAgZ2V0QXNzaWdubWVudHM6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve2VudGVycHJpc2UtdGVhbX0vb3JnYW5pemF0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIGVudGVycHJpc2VUZWFtczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtc1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIGdpc3RzOiB7XG4gICAgY2hlY2tJc1N0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9naXN0c1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZm9yazogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGdldDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldFJldmlzaW9uOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS97c2hhfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2dpc3RzXCJdLFxuICAgIGxpc3RDb21tZW50czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvZ2lzdHMvcHVibGljXCJdLFxuICAgIGxpc3RTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3N0YXJyZWRcIl0sXG4gICAgc3RhcjogW1wiUFVUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1bnN0YXI6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICB9LFxuICBnaXQ6IHtcbiAgICBjcmVhdGVCbG9iOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnNcIl0sXG4gICAgY3JlYXRlQ29tbWl0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0c1wiXSxcbiAgICBjcmVhdGVSZWY6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzXCJdLFxuICAgIGNyZWF0ZVRhZzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3NcIl0sXG4gICAgY3JlYXRlVHJlZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzXCJdLFxuICAgIGRlbGV0ZVJlZjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgICBnZXRCbG9iOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9icy97ZmlsZV9zaGF9XCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0cy97Y29tbWl0X3NoYX1cIl0sXG4gICAgZ2V0UmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWYve3JlZn1cIl0sXG4gICAgZ2V0VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzL3t0YWdfc2hhfVwiXSxcbiAgICBnZXRUcmVlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlcy97dHJlZV9zaGF9XCJdLFxuICAgIGxpc3RNYXRjaGluZ1JlZnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L21hdGNoaW5nLXJlZnMve3JlZn1cIl0sXG4gICAgdXBkYXRlUmVmOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdLFxuICB9LFxuICBob3N0ZWRDb21wdXRlOiB7XG4gICAgY3JlYXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVOZXR3b3JrQ29uZmlndXJhdGlvbkZyb21Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldE5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXROZXR3b3JrU2V0dGluZ3NGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstc2V0dGluZ3Mve25ldHdvcmtfc2V0dGluZ3NfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0TmV0d29ya0NvbmZpZ3VyYXRpb25zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICB1cGRhdGVOZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgaW50ZXJhY3Rpb25zOiB7XG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwiZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gIH0sXG4gIGlzc3Vlczoge1xuICAgIGFkZEFzc2lnbmVlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCIsXG4gICAgXSxcbiAgICBhZGRCbG9ja2VkQnlEZXBlbmRlbmN5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tlZF9ieVwiLFxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGFkZFN1Yklzc3VlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlcy97YXNzaWduZWV9XCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWRUb0lzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlcy97YXNzaWduZWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBnZXRQYXJlbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3BhcmVudFwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3REZXBlbmRlbmNpZXNCbG9ja2VkQnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnlcIixcbiAgICBdLFxuICAgIGxpc3REZXBlbmRlbmNpZXNCbG9ja2luZzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tpbmdcIixcbiAgICBdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbGlzdFN1Yklzc3VlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBsb2NrOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHJlbW92ZUFsbExhYmVsczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIHJlbW92ZURlcGVuZGVuY3lCbG9ja2VkQnk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnkve2lzc3VlX2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3ViSXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3VlXCIsXG4gICAgXSxcbiAgICByZXByaW9yaXRpemVTdWJJc3N1ZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZXMvcHJpb3JpdHlcIixcbiAgICBdLFxuICAgIHNldExhYmVsczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIHVubG9jazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlTGFiZWw6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHVwZGF0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXSxcbiAgfSxcbiAgbWFya2Rvd246IHtcbiAgICByZW5kZXI6IFtcIlBPU1QgL21hcmtkb3duXCJdLFxuICAgIHJlbmRlclJhdzogW1xuICAgICAgXCJQT1NUIC9tYXJrZG93bi9yYXdcIixcbiAgICAgIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIiB9IH0sXG4gICAgXSxcbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdLFxuICB9LFxuICBtaWdyYXRpb25zOiB7XG4gICAgZGVsZXRlQXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGdldEFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJtaWdyYXRpb25zXCIsIFwibGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCIsXG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIixcbiAgICBdLFxuICB9LFxuICBvaWRjOiB7XG4gICAgZ2V0T2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICAgIHVwZGF0ZU9pZGNDdXN0b21TdWJUZW1wbGF0ZUZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgfSxcbiAgb3Jnczoge1xuICAgIGFkZFNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5vcmdzLmFkZFNlY3VyaXR5TWFuYWdlclRlYW0oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL3NlY3VyaXR5LW1hbmFnZXJzI2FkZC1hLXNlY3VyaXR5LW1hbmFnZXItdGVhbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFzc2lnblRlYW1Ub09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfS97cm9sZV9pZH1cIixcbiAgICBdLFxuICAgIGFzc2lnblVzZXJUb09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlQXJ0aWZhY3RTdG9yYWdlUmVjb3JkOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYXJ0aWZhY3RzL21ldGFkYXRhL3N0b3JhZ2UtcmVjb3JkXCIsXG4gICAgXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZUlzc3VlVHlwZTogW1wiUE9TVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JPcmdzQ3JlYXRlT3JVcGRhdGVPcmdhbml6YXRpb25WYWx1ZXM6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ2FuaXphdGlvbnMve29yZ30vb3JnLXByb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yT3Jnc0dldE9yZ2FuaXphdGlvblZhbHVlczogW1xuICAgICAgXCJHRVQgL29yZ2FuaXphdGlvbnMve29yZ30vb3JnLXByb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NDcmVhdGVPclVwZGF0ZU9yZ2FuaXphdGlvbkRlZmluaXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlT3JnYW5pemF0aW9uRGVmaW5pdGlvbnM6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlT3JnYW5pemF0aW9uVmFsdWVzOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NEZWxldGVPcmdhbml6YXRpb25EZWZpbml0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NHZXRPcmdhbml6YXRpb25EZWZpbml0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzRm9yUmVwb3NHZXRPcmdhbml6YXRpb25EZWZpbml0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0dldE9yZ2FuaXphdGlvblZhbHVlczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J1bGs6IFtcIlBPU1QgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL2RlbGV0ZS1yZXF1ZXN0XCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy97YXR0ZXN0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBdHRlc3RhdGlvbnNCeVN1YmplY3REaWdlc3Q6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy9kaWdlc3Qve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSXNzdWVUeXBlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUltbXV0YWJsZVJlbGVhc2VzT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlU2VsZWN0ZWRSZXBvc2l0b3J5SW1tdXRhYmxlUmVsZWFzZXNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRJbW11dGFibGVSZWxlYXNlc1NldHRpbmdzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIGdldEltbXV0YWJsZVJlbGVhc2VzU2V0dGluZ3NSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRIaXN0b3J5OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIl0sXG4gICAgZ2V0T3JnUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5L3t2ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEFydGlmYWN0U3RvcmFnZVJlY29yZHM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FydGlmYWN0cy97c3ViamVjdF9kaWdlc3R9L21ldGFkYXRhL3N0b3JhZ2UtcmVjb3Jkc1wiLFxuICAgIF0sXG4gICAgbGlzdEF0dGVzdGF0aW9uUmVwb3NpdG9yaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uc0J1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hdHRlc3RhdGlvbnMvYnVsay1saXN0ez9wZXJfcGFnZSxiZWZvcmUsYWZ0ZXJ9XCIsXG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RGYWlsZWRJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9vcmdzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvblRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCJdLFxuICAgIGxpc3RJc3N1ZVR5cGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGF0R3JhbnRSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MubGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNsaXN0LXNlY3VyaXR5LW1hbmFnZXItdGVhbXNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5yZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNyZW1vdmUtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZXZpZXdQYXRHcmFudFJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRJbW11dGFibGVSZWxlYXNlc1NldHRpbmdzOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIHNldEltbXV0YWJsZVJlbGVhc2VzU2V0dGluZ3NSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2ltbXV0YWJsZS1yZWxlYXNlcy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHVuYmxvY2tVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvb3Jncy97b3JnfVwiXSxcbiAgICB1cGRhdGVJc3N1ZVR5cGU6IFtcIlBVVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlcy97aXNzdWVfdHlwZV9pZH1cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIixcbiAgICBdLFxuICAgIHVwZGF0ZVBhdEFjY2VzczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9XCJdLFxuICAgIHVwZGF0ZVBhdEFjY2Vzc2VzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JPcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gIH0sXG4gIHBhY2thZ2VzOiB7XG4gICAgZGVsZXRlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5QW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicGFja2FnZXNcIiwgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZ1wiXSB9LFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5VGhlQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmVuYW1lZDogW1xuICAgICAgICAgIFwicGFja2FnZXNcIixcbiAgICAgICAgICBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIixcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeVVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgfSxcbiAgcHJpdmF0ZVJlZ2lzdHJpZXM6IHtcbiAgICBjcmVhdGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzXCJdLFxuICAgIGRlbGV0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldE9yZ1ByaXZhdGVSZWdpc3RyeTogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy9wdWJsaWMta2V5XCJdLFxuICAgIGxpc3RPcmdQcml2YXRlUmVnaXN0cmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiXSxcbiAgICB1cGRhdGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZEl0ZW1Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCJdLFxuICAgIGFkZEl0ZW1Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gICAgXSxcbiAgICBkZWxldGVJdGVtRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVJdGVtRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RmllbGRGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHMve2ZpZWxkX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RmllbGRGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vZmllbGRzL3tmaWVsZF9pZH1cIixcbiAgICBdLFxuICAgIGdldEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfVwiXSxcbiAgICBnZXRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9XCJdLFxuICAgIGdldE9yZ0l0ZW06IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCJdLFxuICAgIGdldFVzZXJJdGVtOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXMve2l0ZW1faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0RmllbGRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2ZpZWxkc1wiXSxcbiAgICBsaXN0RmllbGRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2ZpZWxkc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjJcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyXCJdLFxuICAgIGxpc3RJdGVtc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9pdGVtc1wiXSxcbiAgICBsaXN0SXRlbXNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyL3twcm9qZWN0X251bWJlcn0vaXRlbXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUl0ZW1Gb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSXRlbUZvclVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zL3tpdGVtX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIixcbiAgICBdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCIsXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGNoZWNrQ29sbGFib3JhdG9yOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ltbXV0YWJsZVJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltbXV0YWJsZS1yZWxlYXNlc1wiXSxcbiAgICBjaGVja1ByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUF0dGVzdGF0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnNcIl0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlT3JnUnVsZXNldDogW1wiUE9TVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVQYWdlc0RlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlUmVwb1J1bGVzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0NyZWF0ZU9yVXBkYXRlUmVwb3NpdG9yeVZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGN1c3RvbVByb3BlcnRpZXNGb3JSZXBvc0dldFJlcG9zaXRvcnlWYWx1ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbkVudmlyb25tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZURlcGxveW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnUnVsZXNldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlSW1tdXRhYmxlUmVsZWFzZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbW11dGFibGUtcmVsZWFzZXNcIixcbiAgICBdLFxuICAgIGRpc2FibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIixcbiAgICBdLFxuICAgIGRpc2FibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRvd25sb2FkWmlwYmFsbEFyY2hpdmVcIl0gfSxcbiAgICBdLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZW5hYmxlSW1tdXRhYmxlUmVsZWFzZXM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1tdXRhYmxlLXJlbGVhc2VzXCJdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiLFxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgIF0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0Q3VzdG9tRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIixcbiAgICBdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlcy97c3RhdHVzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhZ2VzSGVhbHRoQ2hlY2s6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvaGVhbHRoXCJdLFxuICAgIGdldFBhcnRpY2lwYXRpb25TdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wYXJ0aWNpcGF0aW9uXCJdLFxuICAgIGdldFB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldEhpc3Rvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVzZXRWZXJzaW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgICBdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vYnJhbmNoZXMtd2hlcmUtaGVhZFwiLFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3RDdXN0b21EZXBsb3ltZW50UnVsZUludGVncmF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgcmVuYW1lQnJhbmNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9yZW5hbWVcIl0sXG4gICAgcmVwbGFjZUFsbFRvcGljczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgcmVxdWVzdFBhZ2VzQnVpbGQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBzZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJlbGVhc2U6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgdXBkYXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9LFxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIl0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl0sXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgY3JlYXRlUHVzaFByb3RlY3Rpb25CeXBhc3M6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3B1c2gtcHJvdGVjdGlvbi1ieXBhc3Nlc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRTY2FuSGlzdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvc2Nhbi1oaXN0b3J5XCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdQYXR0ZXJuQ29uZmlnczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL3BhdHRlcm4tY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdQYXR0ZXJuQ29uZmlnczogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvcGF0dGVybi1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHNlY3VyaXR5QWR2aXNvcmllczoge1xuICAgIGNyZWF0ZUZvcms6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vZm9ya3NcIixcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9zaXRvcnlBZHZpc29yeUN2ZVJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vY3ZlXCIsXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIixcbiAgICBdLFxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldERpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0RGlzY3Vzc2lvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3RlYW1zXCJdLFxuICAgIGxpc3RNZW1iZXJzSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vaW52aXRhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J1bGs6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMvZGVsZXRlLXJlcXVlc3RcIixcbiAgICBdLFxuICAgIGRlbGV0ZUF0dGVzdGF0aW9uc0J5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97YXR0ZXN0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBdHRlc3RhdGlvbnNCeVN1YmplY3REaWdlc3Q6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy9kaWdlc3Qve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgZGVsZXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlJZDogW1wiR0VUIC91c2VyL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnNCdWxrOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vYXR0ZXN0YXRpb25zL2J1bGstbGlzdHs/cGVyX3BhZ2UsYmVmb3JlLGFmdGVyfVwiLFxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCJdLFxuICAgIGxpc3RQdWJsaWNLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5c1wiXSxcbiAgICBsaXN0U29jaWFsQWNjb3VudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U29jaWFsQWNjb3VudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsXG4gICAgXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVuZHBvaW50cztcbiIsICJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludE9wdGlvbnMsIFJlcXVlc3RQYXJhbWV0ZXJzLCBSb3V0ZSB9IGZyb20gXCJAb2N0b2tpdC90eXBlc1wiO1xuaW1wb3J0IEVORFBPSU5UUyBmcm9tIFwiLi9nZW5lcmF0ZWQvZW5kcG9pbnRzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludE1ldGhvZHMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQvbWV0aG9kLXR5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50RGVjb3JhdGlvbnMgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vLyBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIHJlZmFjdG9yZWQgaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMuanMvcHVsbC82MjJcbi8vIHRvIG9wdGltaXNlIHRoZSBydW50aW1lIHBlcmZvcm1hbmNlIG9mIE9jdG9raXQgaW5pdGlhbGl6YXRpb24uXG4vL1xuLy8gVGhpcyBvcHRpbWl6YXRpb24gaW52b2x2ZXMgdHdvIGtleSBjaGFuZ2VzOlxuLy8gMS4gUHJlLUNvbXB1dGF0aW9uOiBUaGUgZW5kcG9pbnQgbWV0aG9kcyBhcmUgcHJlLWNvbXB1dGVkIG9uY2UgYXQgbW9kdWxlIGxvYWRcbi8vICAgIHRpbWUgaW5zdGVhZCBvZiBlYWNoIGludm9jYXRpb24gb2YgYGVuZHBvaW50c1RvTWV0aG9kcygpYC5cbi8vIDIuIExhenkgaW5pdGlhbGl6YXRpb24gYW5kIGNhY2hpbmc6IFdlIHVzZSBhIFByb3h5IGZvciBlYWNoIHNjb3BlIHRvIG9ubHlcbi8vICAgIGluaXRpYWxpemUgbWV0aG9kcyB0aGF0IGFyZSBhY3R1YWxseSBjYWxsZWQuIFRoaXMgcmVkdWNlcyBydW50aW1lIG92ZXJoZWFkXG4vLyAgICBhcyB0aGUgaW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgZGVlcCBtZXJnaW5nIG9mIG9iamVjdHMuIFRoZSBpbml0aWFsaXplZFxuLy8gICAgbWV0aG9kcyBhcmUgdGhlbiBjYWNoZWQgZm9yIGZ1dHVyZSB1c2UuXG5cbmNvbnN0IGVuZHBvaW50TWV0aG9kc01hcCA9IG5ldyBNYXAoKTtcbmZvciAoY29uc3QgW3Njb3BlLCBlbmRwb2ludHNdIG9mIE9iamVjdC5lbnRyaWVzKEVORFBPSU5UUykpIHtcbiAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgZW5kcG9pbnRdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50cykpIHtcbiAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICBjb25zdCBlbmRwb2ludERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHMsXG4gICAgKTtcblxuICAgIGlmICghZW5kcG9pbnRNZXRob2RzTWFwLmhhcyhzY29wZSkpIHtcbiAgICAgIGVuZHBvaW50TWV0aG9kc01hcC5zZXQoc2NvcGUsIG5ldyBNYXAoKSk7XG4gICAgfVxuXG4gICAgZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuc2V0KG1ldGhvZE5hbWUsIHtcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICBkZWNvcmF0aW9ucyxcbiAgICB9KTtcbiAgfVxufVxuXG50eXBlIFByb3h5VGFyZ2V0ID0ge1xuICBvY3Rva2l0OiBPY3Rva2l0O1xuICBzY29wZTogc3RyaW5nO1xuICBjYWNoZTogUmVjb3JkPHN0cmluZywgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+O1xufTtcblxuY29uc3QgaGFuZGxlciA9IHtcbiAgaGFzKHsgc2NvcGUgfTogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5oYXMobWV0aG9kTmFtZSk7XG4gIH0sXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHRoaXMuZ2V0KHRhcmdldCwgbWV0aG9kTmFtZSksIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0sXG4gIGRlZmluZVByb3BlcnR5KFxuICAgIHRhcmdldDogUHJveHlUYXJnZXQsXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcixcbiAgKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9OiBQcm94eVRhcmdldCkge1xuICAgIHJldHVybiBbLi4uZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkua2V5cygpXTtcbiAgfSxcbiAgc2V0KHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiAodGFyZ2V0LmNhY2hlW21ldGhvZE5hbWVdID0gdmFsdWUpO1xuICB9LFxuICBnZXQoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGUgfTogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIGlmIChjYWNoZVttZXRob2ROYW1lXSkge1xuICAgICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZCA9IGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmdldChtZXRob2ROYW1lKTtcbiAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gZGVjb3JhdGUoXG4gICAgICAgIG9jdG9raXQsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgICBkZWNvcmF0aW9ucyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgfSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IFJlc3RFbmRwb2ludE1ldGhvZHMge1xuICBjb25zdCBuZXdNZXRob2RzID0ge30gYXMgeyBba2V5OiBzdHJpbmddOiBvYmplY3QgfTtcblxuICBmb3IgKGNvbnN0IHNjb3BlIG9mIGVuZHBvaW50TWV0aG9kc01hcC5rZXlzKCkpIHtcbiAgICBuZXdNZXRob2RzW3Njb3BlXSA9IG5ldyBQcm94eSh7IG9jdG9raXQsIHNjb3BlLCBjYWNoZToge30gfSwgaGFuZGxlcik7XG4gIH1cblxuICByZXR1cm4gbmV3TWV0aG9kcyBhcyBSZXN0RW5kcG9pbnRNZXRob2RzO1xufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZShcbiAgb2N0b2tpdDogT2N0b2tpdCxcbiAgc2NvcGU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBkZWZhdWx0czogRW5kcG9pbnRPcHRpb25zLFxuICBkZWNvcmF0aW9uczogRW5kcG9pbnREZWNvcmF0aW9ucyxcbikge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiB3aXRoRGVjb3JhdGlvbnMoXG4gICAgLi4uYXJnczogW1JvdXRlLCBSZXF1ZXN0UGFyYW1ldGVycz9dIHwgW0VuZHBvaW50T3B0aW9uc11cbiAgKSB7XG4gICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgLy8gVGhlcmUgYXJlIGN1cnJlbnRseSBubyBvdGhlciBkZWNvcmF0aW9ucyB0aGFuIGAubWFwVG9EYXRhYFxuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzLFxuICAgICAgKSkge1xuICAgICAgICBpZiAobmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCEoYWxpYXMgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbYWxpYXNdID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKC4uLmFyZ3MpO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHdpdGhEZWNvcmF0aW9ucywgcmVxdWVzdFdpdGhEZWZhdWx0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBPY3Rva2l0IH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgeyBSZXN0RW5kcG9pbnRNZXRob2RUeXBlcyB9IGZyb20gXCIuL2dlbmVyYXRlZC9wYXJhbWV0ZXJzLWFuZC1yZXNwb25zZS10eXBlcy5qc1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGVuZHBvaW50c1RvTWV0aG9kcyB9IGZyb20gXCIuL2VuZHBvaW50cy10by1tZXRob2RzLmpzXCI7XG5cbi8vIEV4cG9ydCB0aGUgdHlwZSBmb3IgZG93bnN0cmVhbSB1c2VycyBpbiBvcmRlciB0byBmaXggYSBUeXBlU2NyaXB0IGVycm9yXG4vLyBUaGUgaW5mZXJyZWQgdHlwZSBvZiAnT2N0b2tpdCcgY2Fubm90IGJlIG5hbWVkIHdpdGhvdXQgYSByZWZlcmVuY2UgdG8gJy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3QtdHlwZXMvdHlwZXMuanMnLiBUaGlzIGlzIGxpa2VseSBub3QgcG9ydGFibGUuIEEgdHlwZSBhbm5vdGF0aW9uIGlzIG5lY2Vzc2FyeS5cbmV4cG9ydCB0eXBlIHsgQXBpIH07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBBcGkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpLFxuICB9O1xufVxucmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IEFwaVtcInJlc3RcIl0gJiBBcGkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgLi4uYXBpLFxuICAgIHJlc3Q6IGFwaSxcbiAgfTtcbn1cbmxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gKFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhIHx8IFwidG90YWxfY29tbWl0c1wiIGluIHJlc3BvbnNlLmRhdGEpICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IHRvdGFsQ29tbWl0cyA9IHJlc3BvbnNlLmRhdGEudG90YWxfY29tbWl0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvbW1pdHM7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY29tbWl0cyA9IHRvdGFsQ29tbWl0cztcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaXRlcmF0b3IuanNcbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKSByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0TWV0aG9kKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB1cmwgPSAoKG5vcm1hbGl6ZWRSZXNwb25zZS5oZWFkZXJzLmxpbmsgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAvPChbXjw+XSspPjtcXHMqcmVsPVwibmV4dFwiL1xuICAgICAgICAgICkgfHwgW10pWzFdO1xuICAgICAgICAgIGlmICghdXJsICYmIFwidG90YWxfY29tbWl0c1wiIGluIG5vcm1hbGl6ZWRSZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKG5vcm1hbGl6ZWRSZXNwb25zZS51cmwpO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gcGFyc2VkVXJsLnNlYXJjaFBhcmFtcztcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChwYXJhbXMuZ2V0KFwicGFnZVwiKSB8fCBcIjFcIiwgMTApO1xuICAgICAgICAgICAgY29uc3QgcGVyX3BhZ2UgPSBwYXJzZUludChwYXJhbXMuZ2V0KFwicGVyX3BhZ2VcIikgfHwgXCIyNTBcIiwgMTApO1xuICAgICAgICAgICAgaWYgKHBhZ2UgKiBwZXJfcGFnZSA8IG5vcm1hbGl6ZWRSZXNwb25zZS5kYXRhLnRvdGFsX2NvbW1pdHMpIHtcbiAgICAgICAgICAgICAgcGFyYW1zLnNldChcInBhZ2VcIiwgU3RyaW5nKHBhZ2UgKyAxKSk7XG4gICAgICAgICAgICAgIHVybCA9IHBhcnNlZFVybC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0ZS5qc1xuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGdhdGhlcihcbiAgICBvY3Rva2l0LFxuICAgIFtdLFxuICAgIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbiAgICBtYXBGblxuICApO1xufVxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yMi5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGVhcmx5RXhpdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoXG4gICAgICBtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YVxuICAgICk7XG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHJldHVybiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbik7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvY29tcG9zZS1wYWdpbmF0ZS5qc1xudmFyIGNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBPYmplY3QuYXNzaWduKHBhZ2luYXRlLCB7XG4gIGl0ZXJhdG9yXG59KTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dlbmVyYXRlZC9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xudmFyIHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXG4gIFwiR0VUIC9hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvYXNzaWdubWVudHMve2Fzc2lnbm1lbnRfaWR9L2FjY2VwdGVkX2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zL3tjbGFzc3Jvb21faWR9L2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vdGVhbXNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS90ZWFtcy97ZW50ZXJwcmlzZS10ZWFtfS9tZW1iZXJzaGlwc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3RlYW1zL3tlbnRlcnByaXNlLXRlYW19L29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnMve29yZ30vZGVwZW5kYWJvdC9yZXBvc2l0b3J5LWFjY2Vzc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGYtaG9zdGVkLXJ1bm5lcnMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vaG9zdGVkLXJ1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NhbXBhaWduc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvbWV0cmljc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zaWdodHMvYXBpL3JvdXRlLXN0YXRzL3thY3Rvcl90eXBlfS97YWN0b3JfaWR9XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9zdWJqZWN0LXN0YXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS91c2VyLXN0YXRzL3t1c2VyX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1YyXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9pbW11dGFibGUtcmVsZWFzZXMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXNlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvZGV2Y29udGFpbmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZGVwZW5kZW5jaWVzL2Jsb2NrZWRfYnlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9kZXBlbmRlbmNpZXMvYmxvY2tpbmdcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1YyXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzVjIve3Byb2plY3RfbnVtYmVyfS9maWVsZHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNWMi97cHJvamVjdF9udW1iZXJ9L2l0ZW1zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXG5dO1xuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuZnVuY3Rpb24gcGFnaW5hdGVSZXN0KG9jdG9raXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdpbmF0ZTogT2JqZWN0LmFzc2lnbihwYWdpbmF0ZS5iaW5kKG51bGwsIG9jdG9raXQpLCB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IuYmluZChudWxsLCBvY3Rva2l0KVxuICAgIH0pXG4gIH07XG59XG5wYWdpbmF0ZVJlc3QuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sCiAgIm1hcHBpbmdzIjogInNrQkFBQSxJQUFBQSxHQUFBQyxFQUFBQyxJQUFBLGNBRUEsSUFBSUMsR0FBTSxRQUFRLEtBQUssRUFDbkJDLEdBQU0sUUFBUSxLQUFLLEVBQ25CQyxHQUFPLFFBQVEsTUFBTSxFQUNyQkMsR0FBUSxRQUFRLE9BQU8sRUFDdkJDLEdBQVMsUUFBUSxRQUFRLEVBQ3pCQyxHQUFTLFFBQVEsUUFBUSxFQUN6QkMsR0FBTyxRQUFRLE1BQU0sRUFHekJQLEdBQVEsYUFBZVEsR0FDdkJSLEdBQVEsY0FBZ0JTLEdBQ3hCVCxHQUFRLGNBQWdCVSxHQUN4QlYsR0FBUSxlQUFpQlcsR0FHekIsU0FBU0gsR0FBYUksRUFBUyxDQUM3QixJQUFJQyxFQUFRLElBQUlDLEdBQWVGLENBQU8sRUFDdEMsT0FBQUMsRUFBTSxRQUFVVixHQUFLLFFBQ2RVLENBQ1QsQ0FFQSxTQUFTSixHQUFjRyxFQUFTLENBQzlCLElBQUlDLEVBQVEsSUFBSUMsR0FBZUYsQ0FBTyxFQUN0QyxPQUFBQyxFQUFNLFFBQVVWLEdBQUssUUFDckJVLEVBQU0sYUFBZUUsR0FDckJGLEVBQU0sWUFBYyxJQUNiQSxDQUNULENBRUEsU0FBU0gsR0FBY0UsRUFBUyxDQUM5QixJQUFJQyxFQUFRLElBQUlDLEdBQWVGLENBQU8sRUFDdEMsT0FBQUMsRUFBTSxRQUFVVCxHQUFNLFFBQ2ZTLENBQ1QsQ0FFQSxTQUFTRixHQUFlQyxFQUFTLENBQy9CLElBQUlDLEVBQVEsSUFBSUMsR0FBZUYsQ0FBTyxFQUN0QyxPQUFBQyxFQUFNLFFBQVVULEdBQU0sUUFDdEJTLEVBQU0sYUFBZUUsR0FDckJGLEVBQU0sWUFBYyxJQUNiQSxDQUNULENBR0EsU0FBU0MsR0FBZUYsRUFBUyxDQUMvQixJQUFJSSxFQUFPLEtBQ1hBLEVBQUssUUFBVUosR0FBVyxDQUFDLEVBQzNCSSxFQUFLLGFBQWVBLEVB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LEVBQUksVUFDbENBLEVBQVFBLEVBQVEsUUFBYSxDQUFDLEVBQUksVUFDbENBLEVBQVFBLEVBQVEsTUFBVyxDQUFDLEVBQUksUUFFaENBLEVBQVFBLEVBQVEsS0FBVSxDQUFDLEVBQUksT0FDL0JBLEVBQVFBLEVBQVEsS0FBVSxDQUFDLEVBQUksT0FDL0JBLEVBQVFBLEVBQVEsTUFBVyxFQUFFLEVBQUksUUFDakNBLEVBQVFBLEVBQVEsS0FBVSxFQUFFLEVBQUksT0FDaENBLEVBQVFBLEVBQVEsU0FBYyxFQUFFLEVBQUksV0FDcENBLEVBQVFBLEVBQVEsVUFBZSxFQUFFLEVBQUksWUFDckNBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsS0FBVSxFQUFFLEVBQUksT0FDaENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsSUFBUyxFQUFFLEVBQUksTUFFL0JBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsV0FBZ0IsRUFBRSxFQUFJLGFBQ3RDQSxFQUFRQSxFQUFRLFNBQWMsRUFBRSxFQUFJLFdBQ3BDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBRWpDQSxFQUFRQSxFQUFRLFVBQVUsRUFBSSxFQUFFLEVBQUksV0FDcENBLEVBQVFBLEVBQVEsT0FBWSxFQUFFLEVBQUksU0FDbENBLEVBQVFBLEVBQVEsVUFBZSxFQUFFLEVBQUksWUFDckNBLEVBQVFBLEVBQVEsWUFBaUIsRUFBRSxFQUFJLGNBRXZDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBQ2pDQSxFQUFRQSxFQUFRLE1BQVcsRUFBRSxFQUFJLFFBRWpDQSxFQUFRQSxFQUFRLFdBQWdCLEVBQUUsRUFBSSxhQUV0Q0EsRUFBUUEsRUFBUSxLQUFVLEVBQUUsRUFBSSxPQUNoQ0EsRUFBUUEsRUFBUSxPQUFZLEVBQUUs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SyxhQUNMLElBQUssWUFDTCxJQUFLLFdBQ0wsSUFBSyxhQUNMLElBQUssa0JBQ0wsSUFBSyxTQUNILE1BQU8sYUFDVCxJQUFLLGNBQ0wsSUFBSyxlQUNMLElBQUssVUFDSCxNQUFPLGVBQ1QsSUFBSyxjQUNMLElBQUssY0FDTCxJQUFLLGFBQ0wsSUFBSyxhQUNMLElBQUssWUFDTCxJQUFLLEtBQ0wsSUFBSyxTQUNILE1BQU8sY0FDVCxJQUFLLGNBQ0wsSUFBSyxhQUNMLElBQUssWUFDSCxNQUFPLGNBQ1QsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLFlBQ0gsTUFBTyxjQUNULElBQUssY0FDTCxJQUFLLGNBQ0wsSUFBSyxhQUNMLElBQUssWUFDTCxJQUFLLGNBQ0wsSUFBSyxLQUNILE1BQU8sY0FDVCxJQUFLLGNBQ0gsTUFBTyxjQUNULElBQUssVUFDTCxJQUFLLE1BQ0wsSUFBSyxPQUNMLElBQUssU0FDTCxJQUFLLFNBQ0gsTUFBTyxTQUNULElBQUssVUFDTCxJQUFLLFNBQ0gsTUFBTyxTQUNULElBQUssY0FDTCxJQUFLLE1BQ0wsSUFBSyxZQUNMLElBQUssY0FDSCxNQUFPLFlBQ1QsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLFlBQ0wsSUFBSyxVQUNMLElBQUssY0FDSCxNQUFPLGNBQ1QsSUFBSyxTQUNMLElBQUssZUFDTCxJQUFLLFdBQ0gsTUFBTyxlQUNULElBQUssU0FDTCxJQUFLLGVBQ0wsSUFBSyxXQUNILE1BQU8sZUFDVCxJQUFLLGlCQUNMLElBQUssUUFDTCxJQUFLLFNBQ0wsSUFBSyxRQUNMLElBQUssY0FDTCxJQUFLLFNBQ0wsSUFBSyxhQUNMLElBQUssYUFDTCxJQUFLLFlBQ0wsSUFBSyxXQUNMLElBQUssYUFDTCxJQUFLLGtCQUNMLElBQUssS0FDTCxJQUFLLFNBQ0wsSUFBSyxXQUNMLElBQUssZUFDTCxJQUFLLFdBQ0gsTUFBTyxlQUNULElBQUssU0FDTCxJQUFLLGVBQ0wsSUFBSyxXQUNILE1BQU8sZUFDVCxJQUFLLFNBQ0wsSUFBSyxjQUNMLElBQUssYUFDTCxJQUFLLGFBQ0ws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LGNBQWEsVUFBb0IsVUFBUyxRQUNwREEsRUFBUUQsRUFBYyxLQUFLLENBQUMsQ0FBRSxLQUFBRSxDQUFLLElBQU1BLEVBQUssU0FBUyxxQkFBcUIsQ0FBQyxFQUM1RCxjQUFhLFNBQW1CLFVBQVMsUUFDMURELEVBQVFELEVBQWMsS0FBSyxDQUFDLENBQUUsS0FBQUUsQ0FBSyxJQUFNQSxFQUFLLFNBQVMsc0JBQXNCLENBQUMsR0FFNUUsQ0FBQ0QsRUFBTyxDQUNMRSxHQUFVLHlCQUFpQyxPQUFJLElBQVksV0FBUSxZQUFZSixHQUFTLFNBQVdILENBQU8sRUFBRSxFQUNqSCxNQUNGLENBRUEsSUFBTVEsRUFBZ0IsTUFBTUMsR0FBYUosRUFBTSxXQUFXLEVBQ3BESyxFQUF3QkwsRUFBTSxZQUFZLFNBQVMsTUFBTSxFQUM3RCxNQUFNTSxHQUFXSCxDQUFhLEVBQzlCLE1BQU1JLEdBQVdKLENBQWEsRUFDaEMsTUFBTUssR0FBSyxHQUFBQyxRQUFLLEtBQUtKLEVBQXVCLFNBQVMsRUFBRyxDQUFDLGdCQUFpQixlQUFnQixjQUFjLENBQUMsQ0FDM0csR0FBRyIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX3R1bm5lbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibmV0IiwgInRscyIsICJodHRwIiwgImh0dHBzIiwgImV2ZW50cyIsICJhc3NlcnQiLCAidXRpbCIsICJodHRwT3Zlckh0dHAiLCAiaHR0cHNPdmVySHR0cCIsICJodHRwT3Zlckh0dHBzIiwgImh0dHBzT3Zlckh0dHBzIiwgIm9wdGlvbnMiLCAiYWdlbnQiLCAiVHVubmVsaW5nQWdlbnQiLCAiY3JlYXRlU2VjdXJlU29ja2V0IiwgInNlbGYiLCAic29ja2V0IiwgImhvc3QiLCAicG9ydCIsICJsb2NhbEFkZHJlc3MiLCAidG9PcHRpb25zIiwgImkiLCAibGVuIiwgInBlbmRpbmciLCAicmVxIiwgIm1lcmdlT3B0aW9ucyIsICJvbkZyZWUiLCAib25DbG9zZU9yUmVtb3ZlIiwgImVyciIsICJjYiIsICJwbGFjZWhvbGRlciIsICJjb25uZWN0T3B0aW9ucyIsICJkZWJ1ZyIsICJjb25uZWN0UmVxIiwgIm9uUmVzcG9uc2UiLCAib25VcGdyYWRlIiwgIm9uQ29ubmVjdCIsICJvbkVycm9yIiwgInJlcyIsICJoZWFkIiwgImVycm9yIiwgImNhdXNlIiwgInBvcyIsICJob3N0SGVhZGVyIiwgInRsc09wdGlvbnMiLCAic2VjdXJlU29ja2V0IiwgInRhcmdldCIsICJvdmVycmlkZXMiLCAia2V5cyIsICJqIiwgImtleUxlbiIsICJrIiwgImFyZ3MiLCAicmVxdWlyZV90dW5uZWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2Vycm9ycyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtVbmRpY2lFcnJvciIsICJVbmRpY2lFcnJvciIsICJtZXNzYWdlIiwgImluc3RhbmNlIiwgImtDb25uZWN0VGltZW91dEVycm9yIiwgIkNvbm5lY3RUaW1lb3V0RXJyb3IiLCAia0hlYWRlcnNUaW1lb3V0RXJyb3IiLCAiSGVhZGVyc1RpbWVvdXRFcnJvciIsICJrSGVhZGVyc092ZXJmbG93RXJyb3IiLCAiSGVhZGVyc092ZXJmbG93RXJyb3IiLCAia0JvZHlUaW1lb3V0RXJyb3IiLCAiQm9keVRpbWVvdXRFcnJvciIsICJrUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAiUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAic3RhdHVzQ29kZSIsICJoZWFkZXJzIiwgImJvZHkiLCAia0ludmFsaWRBcmd1bWVudEVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJrQWJvcnRFcnJvciIsICJBYm9ydEVycm9yIiwgImtSZXF1ZXN0QWJvcnRlZEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAia0luZm9ybWF0aW9uYWxFcnJvciIsICJJbmZvcm1hdGlvbmFsRXJyb3IiLCAia1JlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciIsICJSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAia1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAiUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciIsICJrQ2xpZW50RGVzdHJveWVkRXJyb3IiLCAiQ2xpZW50RGVzdHJveWVkRXJyb3IiLCAia0NsaWVudENsb3NlZEVycm9yIiwgIkNsaWVudENsb3NlZEVycm9yIiwgImtTb2NrZXRFcnJvciIsICJTb2NrZXRFcnJvciIsICJzb2NrZXQiLCAia05vdFN1cHBvcnRlZEVycm9yIiwgIk5vdFN1cHBvcnRlZEVycm9yIiwgImtCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciIsICJCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciIsICJrSFRUUFBhcnNlckVycm9yIiwgIkhUVFBQYXJzZXJFcnJvciIsICJjb2RlIiwgImRhdGEiLCAia1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IiLCAiUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciIsICJrUmVxdWVzdFJldHJ5RXJyb3IiLCAiUmVxdWVzdFJldHJ5RXJyb3IiLCAia1Jlc3BvbnNlRXJyb3IiLCAiUmVzcG9uc2VFcnJvciIsICJrU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IiLCAiU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IiLCAiY2F1c2UiLCAib3B0aW9ucyIsICJrTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIiwgIk1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIiwgIndlbGxrbm93bkhlYWRlck5hbWVzIiwgImkiLCAia2V5IiwgImxvd2VyQ2FzZWRLZXkiLCAicmVxdWlyZV90cmVlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAid2VsbGtub3duSGVhZGVyTmFtZXMiLCAiaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQiLCAiVHN0Tm9kZSIsICJfVHN0Tm9kZSIsICJrZXkiLCAidmFsdWUiLCAiaW5kZXgiLCAibGVuZ3RoIiwgIm5vZGUiLCAiY29kZSIsICJrZXlsZW5ndGgiLCAiVGVybmFyeVNlYXJjaFRyZWUiLCAidHJlZSIsICJpIiwgInJlcXVpcmVfdXRpbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJrRGVzdHJveWVkIiwgImtCb2R5VXNlZCIsICJrTGlzdGVuZXJzIiwgImtCb2R5IiwgIkluY29taW5nTWVzc2FnZSIsICJzdHJlYW0iLCAibmV0IiwgIkJsb2IiLCAibm9kZVV0aWwiLCAic3RyaW5naWZ5IiwgIkVFIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIiwgInRyZWUiLCAibm9kZU1ham9yIiwgIm5vZGVNaW5vciIsICJ2IiwgIkJvZHlBc3luY0l0ZXJhYmxlIiwgImJvZHkiLCAid3JhcFJlcXVlc3RCb2R5IiwgImlzU3RyZWFtIiwgImJvZHlMZW5ndGgiLCAiaXNJdGVyYWJsZSIsICJub3AiLCAib2JqIiwgImlzQmxvYkxpa2UiLCAib2JqZWN0IiwgInNUYWciLCAiYnVpbGRVUkwiLCAidXJsIiwgInF1ZXJ5UGFyYW1zIiwgInN0cmluZ2lmaWVkIiwgImlzVmFsaWRQb3J0IiwgInBvcnQiLCAidmFsdWUiLCAiaXNIdHRwT3JIdHRwc1ByZWZpeGVkIiwgInBhcnNlVVJMIiwgIm9yaWdpbiIsICJwYXRoIiwgInBhcnNlT3JpZ2luIiwgImdldEhvc3RuYW1lIiwgImhvc3QiLCAiaWR4IiwgImdldFNlcnZlck5hbWUiLCAic2VydmVybmFtZSIsICJkZWVwQ2xvbmUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgInN0YXRlIiwgImlzQnVmZmVyIiwgImlzRGVzdHJveWVkIiwgImRlc3Ryb3kiLCAiZXJyIiwgIktFRVBBTElWRV9USU1FT1VUX0VYUFIiLCAicGFyc2VLZWVwQWxpdmVUaW1lb3V0IiwgInZhbCIsICJtIiwgImhlYWRlck5hbWVUb1N0cmluZyIsICJidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIiwgInBhcnNlSGVhZGVycyIsICJoZWFkZXJzIiwgImkiLCAia2V5IiwgImhlYWRlcnNWYWx1ZSIsICJ4IiwgInBhcnNlUmF3SGVhZGVycyIsICJsZW4iLCAicmV0IiwgImhhc0NvbnRlbnRMZW5ndGgiLCAiY29udGVudERpc3Bvc2l0aW9uSWR4IiwgImtMZW4iLCAibiIsICJidWZmZXIiLCAidmFsaWRhdGVIYW5kbGVyIiwgImhhbmRsZXIiLCAibWV0aG9kIiwgInVwZ3JhZGUiLCAiaXNEaXN0dXJiZWQiLCAiaXNFcnJvcmVkIiwgImlzUmVhZGFibGUiLCAiZ2V0U29ja2V0SW5mbyIsICJzb2NrZXQiLCAiUmVhZGFibGVTdHJlYW1Gcm9tIiwgIml0ZXJhYmxlIiwgIml0ZXJhdG9yIiwgImNvbnRyb2xsZXIiLCAiZG9uZSIsICJidWYiLCAicmVhc29uIiwgImlzRm9ybURhdGFMaWtlIiwgImFkZEFib3J0TGlzdGVuZXIiLCAic2lnbmFsIiwgImxpc3RlbmVyIiwgImhhc1RvV2VsbEZvcm1lZCIsICJoYXNJc1dlbGxGb3JtZWQiLCAidG9VU1ZTdHJpbmciLCAiaXNVU1ZTdHJpbmciLCAiaXNUb2tlbkNoYXJDb2RlIiwgImMiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJjaGFyYWN0ZXJzIiwgImhlYWRlckNoYXJSZWdleCIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAicGFyc2VSYW5nZUhlYWRlciIsICJyYW5nZSIsICJhZGRMaXN0ZW5lciIsICJuYW1lIiwgInJlbW92ZUFsbExpc3RlbmVycyIsICJlcnJvclJlcXVlc3QiLCAiY2xpZW50IiwgInJlcXVlc3QiLCAia0VudW1lcmFibGVQcm9wZXJ0eSIsICJub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UiLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHMiLCAicmVxdWlyZV9kaWFnbm9zdGljcyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImRpYWdub3N0aWNzQ2hhbm5lbCIsICJ1dGlsIiwgInVuZGljaURlYnVnTG9nIiwgImZldGNoRGVidWdsb2ciLCAid2Vic29ja2V0RGVidWdsb2ciLCAiaXNDbGllbnRTZXQiLCAiY2hhbm5lbHMiLCAiZGVidWdsb2ciLCAiZXZ0IiwgInZlcnNpb24iLCAicHJvdG9jb2wiLCAicG9ydCIsICJob3N0IiwgImVycm9yIiwgIm1ldGhvZCIsICJwYXRoIiwgIm9yaWdpbiIsICJzdGF0dXNDb2RlIiwgImFkZHJlc3MiLCAid2Vic29ja2V0IiwgImNvZGUiLCAicmVhc29uIiwgImVyciIsICJyZXF1aXJlX3JlcXVlc3QiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJOb3RTdXBwb3J0ZWRFcnJvciIsICJhc3NlcnQiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAiaXNTdHJlYW0iLCAiZGVzdHJveSIsICJpc0J1ZmZlciIsICJpc0Zvcm1EYXRhTGlrZSIsICJpc0l0ZXJhYmxlIiwgImlzQmxvYkxpa2UiLCAiYnVpbGRVUkwiLCAidmFsaWRhdGVIYW5kbGVyIiwgImdldFNlcnZlck5hbWUiLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHMiLCAiY2hhbm5lbHMiLCAiaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQiLCAiaW52YWxpZFBhdGhSZWdleCIsICJrSGFuZGxlciIsICJSZXF1ZXN0IiwgIm9yaWdpbiIsICJwYXRoIiwgIm1ldGhvZCIsICJib2R5IiwgImhlYWRlcnMiLCAicXVlcnkiLCAiaWRlbXBvdGVudCIsICJibG9ja2luZyIsICJ1cGdyYWRlIiwgImhlYWRlcnNUaW1lb3V0IiwgImJvZHlUaW1lb3V0IiwgInJlc2V0IiwgInRocm93T25FcnJvciIsICJleHBlY3RDb250aW51ZSIsICJzZXJ2ZXJuYW1lIiwgImhhbmRsZXIiLCAiclN0YXRlIiwgImVyciIsICJpIiwgInByb2Nlc3NIZWFkZXIiLCAiaGVhZGVyIiwgImtleXMiLCAiY2h1bmsiLCAiYWJvcnQiLCAic3RhdHVzQ29kZSIsICJyZXN1bWUiLCAic3RhdHVzVGV4dCIsICJzb2NrZXQiLCAidHJhaWxlcnMiLCAiZXJyb3IiLCAia2V5IiwgInZhbHVlIiwgInJlcXVlc3QiLCAidmFsIiwgImhlYWRlck5hbWUiLCAiYXJyIiwgInN0ciIsICJyZXF1aXJlX2Rpc3BhdGNoZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJFdmVudEVtaXR0ZXIiLCAiRGlzcGF0Y2hlciIsICJhcmdzIiwgImludGVyY2VwdG9ycyIsICJkaXNwYXRjaCIsICJpbnRlcmNlcHRvciIsICJDb21wb3NlZERpc3BhdGNoZXIiLCAiI2Rpc3BhdGNoZXIiLCAiI2Rpc3BhdGNoIiwgImRpc3BhdGNoZXIiLCAicmVxdWlyZV9kaXNwYXRjaGVyX2Jhc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJEaXNwYXRjaGVyIiwgIkNsaWVudERlc3Ryb3llZEVycm9yIiwgIkNsaWVudENsb3NlZEVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtEZXN0cm95IiwgImtDbG9zZSIsICJrQ2xvc2VkIiwgImtEZXN0cm95ZWQiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAia09uRGVzdHJveWVkIiwgImtPbkNsb3NlZCIsICJrSW50ZXJjZXB0ZWREaXNwYXRjaCIsICJrV2ViU29ja2V0T3B0aW9ucyIsICJEaXNwYXRjaGVyQmFzZSIsICJvcHRzIiwgIm5ld0ludGVyY2VwdG9ycyIsICJpIiwgImNhbGxiYWNrIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVyciIsICJkYXRhIiwgIm9uQ2xvc2VkIiwgImNhbGxiYWNrcyIsICJvbkRlc3Ryb3llZCIsICJoYW5kbGVyIiwgImRpc3BhdGNoIiwgInJlcXVpcmVfdGltZXJzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZmFzdE5vdyIsICJSRVNPTFVUSU9OX01TIiwgIlRJQ0tfTVMiLCAiZmFzdE5vd1RpbWVvdXQiLCAia0Zhc3RUaW1lciIsICJmYXN0VGltZXJzIiwgIk5PVF9JTl9MSVNUIiwgIlRPX0JFX0NMRUFSRUQiLCAiUEVORElORyIsICJBQ1RJVkUiLCAib25UaWNrIiwgImlkeCIsICJsZW4iLCAidGltZXIiLCAicmVmcmVzaFRpbWVvdXQiLCAiRmFzdFRpbWVyIiwgImNhbGxiYWNrIiwgImRlbGF5IiwgImFyZyIsICJ0aW1lb3V0IiwgInJlcXVpcmVfY29ubmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm5ldCIsICJhc3NlcnQiLCAidXRpbCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJDb25uZWN0VGltZW91dEVycm9yIiwgInRpbWVycyIsICJub29wIiwgInRscyIsICJTZXNzaW9uQ2FjaGUiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAia2V5IiwgInJlZiIsICJzZXNzaW9uS2V5IiwgInNlc3Npb24iLCAib2xkZXN0S2V5IiwgImJ1aWxkQ29ubmVjdG9yIiwgImFsbG93SDIiLCAic29ja2V0UGF0aCIsICJ0aW1lb3V0IiwgImN1c3RvbVNlc3Npb24iLCAib3B0cyIsICJvcHRpb25zIiwgInNlc3Npb25DYWNoZSIsICJob3N0bmFtZSIsICJob3N0IiwgInByb3RvY29sIiwgInBvcnQiLCAic2VydmVybmFtZSIsICJsb2NhbEFkZHJlc3MiLCAiaHR0cFNvY2tldCIsICJjYWxsYmFjayIsICJzb2NrZXQiLCAia2VlcEFsaXZlSW5pdGlhbERlbGF5IiwgImNsZWFyQ29ubmVjdFRpbWVvdXQiLCAic2V0dXBDb25uZWN0VGltZW91dCIsICJjYiIsICJlcnIiLCAic29ja2V0V2Vha1JlZiIsICJzMSIsICJzMiIsICJmYXN0VGltZXIiLCAib25Db25uZWN0VGltZW91dCIsICJtZXNzYWdlIiwgInJlcXVpcmVfdXRpbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgImVudW1Ub01hcCIsICJvYmoiLCAicmVzIiwgImtleSIsICJ2YWx1ZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAidXRpbHNfMSIsICJFUlJPUiIsICJUWVBFIiwgIkZMQUdTIiwgIkxFTklFTlRfRkxBR1MiLCAiTUVUSE9EUyIsICJrZXkiLCAiRklOSVNIIiwgImkiLCAiYyIsICJIRUFERVJfU1RBVEUiLCAicmVxdWlyZV9sbGh0dHBfd2FzbSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJ1ZmZlciIsICJyZXF1aXJlX2xsaHR0cF9zaW1kX3dhc20iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCdWZmZXIiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb3JzU2FmZUxpc3RlZE1ldGhvZHMiLCAiY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0IiwgIm51bGxCb2R5U3RhdHVzIiwgInJlZGlyZWN0U3RhdHVzIiwgInJlZGlyZWN0U3RhdHVzU2V0IiwgImJhZFBvcnRzIiwgImJhZFBvcnRzU2V0IiwgInJlZmVycmVyUG9saWN5IiwgInJlZmVycmVyUG9saWN5U2V0IiwgInJlcXVlc3RSZWRpcmVjdCIsICJzYWZlTWV0aG9kcyIsICJzYWZlTWV0aG9kc1NldCIsICJyZXF1ZXN0TW9kZSIsICJyZXF1ZXN0Q3JlZGVudGlhbHMiLCAicmVxdWVzdENhY2hlIiwgInJlcXVlc3RCb2R5SGVhZGVyIiwgInJlcXVlc3REdXBsZXgiLCAiZm9yYmlkZGVuTWV0aG9kcyIsICJmb3JiaWRkZW5NZXRob2RzU2V0IiwgInN1YnJlc291cmNlIiwgInN1YnJlc291cmNlU2V0IiwgInJlcXVpcmVfZ2xvYmFsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsT3JpZ2luIiwgImdldEdsb2JhbE9yaWdpbiIsICJzZXRHbG9iYWxPcmlnaW4iLCAibmV3T3JpZ2luIiwgInBhcnNlZFVSTCIsICJyZXF1aXJlX2RhdGFfdXJsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImVuY29kZXIiLCAiSFRUUF9UT0tFTl9DT0RFUE9JTlRTIiwgIkhUVFBfV0hJVEVTUEFDRV9SRUdFWCIsICJBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVgiLCAiSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyIsICJkYXRhVVJMUHJvY2Vzc29yIiwgImRhdGFVUkwiLCAiaW5wdXQiLCAiVVJMU2VyaWFsaXplciIsICJwb3NpdGlvbiIsICJtaW1lVHlwZSIsICJjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCIsICJtaW1lVHlwZUxlbmd0aCIsICJyZW1vdmVBU0NJSVdoaXRlc3BhY2UiLCAiZW5jb2RlZEJvZHkiLCAiYm9keSIsICJzdHJpbmdQZXJjZW50RGVjb2RlIiwgInN0cmluZ0JvZHkiLCAiaXNvbW9ycGhpY0RlY29kZSIsICJmb3JnaXZpbmdCYXNlNjQiLCAibWltZVR5cGVSZWNvcmQiLCAicGFyc2VNSU1FVHlwZSIsICJ1cmwiLCAiZXhjbHVkZUZyYWdtZW50IiwgImhyZWYiLCAiaGFzaExlbmd0aCIsICJzZXJpYWxpemVkIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMiLCAiY29uZGl0aW9uIiwgInJlc3VsdCIsICJjaGFyIiwgImlkeCIsICJzdGFydCIsICJieXRlcyIsICJwZXJjZW50RGVjb2RlIiwgImlzSGV4Q2hhckJ5dGUiLCAiYnl0ZSIsICJoZXhCeXRlVG9OdW1iZXIiLCAibGVuZ3RoIiwgIm91dHB1dCIsICJqIiwgImkiLCAicmVtb3ZlSFRUUFdoaXRlc3BhY2UiLCAidHlwZSIsICJzdWJ0eXBlIiwgInR5cGVMb3dlcmNhc2UiLCAic3VidHlwZUxvd2VyY2FzZSIsICJwYXJhbWV0ZXJOYW1lIiwgInBhcmFtZXRlclZhbHVlIiwgImNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmciLCAiZGF0YSIsICJkYXRhTGVuZ3RoIiwgImJ1ZmZlciIsICJleHRyYWN0VmFsdWUiLCAicG9zaXRpb25TdGFydCIsICJ2YWx1ZSIsICJxdW90ZU9yQmFja3NsYXNoIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJwYXJhbWV0ZXJzIiwgImVzc2VuY2UiLCAic2VyaWFsaXphdGlvbiIsICJuYW1lIiwgImlzSFRUUFdoaXRlU3BhY2UiLCAic3RyIiwgImxlYWRpbmciLCAidHJhaWxpbmciLCAicmVtb3ZlQ2hhcnMiLCAiaXNBU0NJSVdoaXRlc3BhY2UiLCAicHJlZGljYXRlIiwgImxlYWQiLCAidHJhaWwiLCAiYWRkaXRpb24iLCAibWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZSIsICJyZXF1aXJlX3dlYmlkbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInR5cGVzIiwgImluc3BlY3QiLCAibWFya0FzVW5jbG9uZWFibGUiLCAidG9VU1ZTdHJpbmciLCAid2ViaWRsIiwgIm1lc3NhZ2UiLCAiY29udGV4dCIsICJwbHVyYWwiLCAiViIsICJJIiwgIm9wdHMiLCAiZXJyIiwgImxlbmd0aCIsICJtaW4iLCAiY3R4IiwgImJpdExlbmd0aCIsICJzaWduZWRuZXNzIiwgInVwcGVyQm91bmQiLCAibG93ZXJCb3VuZCIsICJ4IiwgIm4iLCAiciIsICJjb252ZXJ0ZXIiLCAicHJlZml4IiwgImFyZ3VtZW50IiwgIkl0ZXJhYmxlIiwgIm1ldGhvZCIsICJzZXEiLCAiaW5kZXgiLCAiZG9uZSIsICJ2YWx1ZSIsICJrZXlDb252ZXJ0ZXIiLCAidmFsdWVDb252ZXJ0ZXIiLCAiTyIsICJyZXN1bHQiLCAia2V5cyIsICJrZXkiLCAidHlwZWRLZXkiLCAidHlwZWRWYWx1ZSIsICJpIiwgImNvbnZlcnRlcnMiLCAiZGljdGlvbmFyeSIsICJ0eXBlIiwgImRpY3QiLCAib3B0aW9ucyIsICJkZWZhdWx0VmFsdWUiLCAicmVxdWlyZWQiLCAiaGFzRGVmYXVsdCIsICJUIiwgIm5hbWUiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVHJhbnNmb3JtIiwgInpsaWIiLCAicmVkaXJlY3RTdGF0dXNTZXQiLCAicmVmZXJyZXJQb2xpY3lUb2tlbnMiLCAiYmFkUG9ydHNTZXQiLCAiZ2V0R2xvYmFsT3JpZ2luIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMiLCAiY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyIsICJyZW1vdmVDaGFycyIsICJwYXJzZU1JTUVUeXBlIiwgInBlcmZvcm1hbmNlIiwgImlzQmxvYkxpa2UiLCAiUmVhZGFibGVTdHJlYW1Gcm9tIiwgImlzVmFsaWRIVFRQVG9rZW4iLCAibm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlIiwgImFzc2VydCIsICJpc1VpbnQ4QXJyYXkiLCAid2ViaWRsIiwgInN1cHBvcnRlZEhhc2hlcyIsICJjcnlwdG8iLCAicG9zc2libGVSZWxldmFudEhhc2hlcyIsICJoYXNoIiwgInJlc3BvbnNlVVJMIiwgInJlc3BvbnNlIiwgInVybExpc3QiLCAibGVuZ3RoIiwgInJlc3BvbnNlTG9jYXRpb25VUkwiLCAicmVxdWVzdEZyYWdtZW50IiwgImxvY2F0aW9uIiwgImlzVmFsaWRIZWFkZXJWYWx1ZSIsICJpc1ZhbGlkRW5jb2RlZFVSTCIsICJub3JtYWxpemVCaW5hcnlTdHJpbmdUb1V0ZjgiLCAidXJsIiwgImkiLCAiY29kZSIsICJ2YWx1ZSIsICJyZXF1ZXN0Q3VycmVudFVSTCIsICJyZXF1ZXN0IiwgInJlcXVlc3RCYWRQb3J0IiwgInVybElzSHR0cEh0dHBzU2NoZW1lIiwgImlzRXJyb3JMaWtlIiwgIm9iamVjdCIsICJpc1ZhbGlkUmVhc29uUGhyYXNlIiwgInN0YXR1c1RleHQiLCAiYyIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJwb3RlbnRpYWxWYWx1ZSIsICJzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IiwgImFjdHVhbFJlc3BvbnNlIiwgImhlYWRlcnNMaXN0IiwgInBvbGljeUhlYWRlciIsICJwb2xpY3kiLCAidG9rZW4iLCAiY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrIiwgImNvcnNDaGVjayIsICJUQU9DaGVjayIsICJhcHBlbmRGZXRjaE1ldGFkYXRhIiwgImh0dHBSZXF1ZXN0IiwgImhlYWRlciIsICJhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIiwgInNlcmlhbGl6ZWRPcmlnaW4iLCAidXJsSGFzSHR0cHNTY2hlbWUiLCAic2FtZU9yaWdpbiIsICJjb2Fyc2VuVGltZSIsICJ0aW1lc3RhbXAiLCAiY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkiLCAiY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8iLCAiY29ubmVjdGlvblRpbWluZ0luZm8iLCAiZGVmYXVsdFN0YXJ0VGltZSIsICJjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSIsICJjcmVhdGVPcGFxdWVUaW1pbmdJbmZvIiwgInRpbWluZ0luZm8iLCAibWFrZVBvbGljeUNvbnRhaW5lciIsICJjbG9uZVBvbGljeUNvbnRhaW5lciIsICJwb2xpY3lDb250YWluZXIiLCAiZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciIsICJyZWZlcnJlclNvdXJjZSIsICJnbG9iYWxPcmlnaW4iLCAicmVmZXJyZXJVUkwiLCAic3RyaXBVUkxGb3JSZWZlcnJlciIsICJyZWZlcnJlck9yaWdpbiIsICJhcmVTYW1lT3JpZ2luIiwgImlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSIsICJpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkiLCAiY3VycmVudFVSTCIsICJvcmlnaW5Pbmx5IiwgImlzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeSIsICJvcmlnaW4iLCAib3JpZ2luQXNVUkwiLCAiYnl0ZXNNYXRjaCIsICJieXRlcyIsICJtZXRhZGF0YUxpc3QiLCAicGFyc2VkTWV0YWRhdGEiLCAicGFyc2VNZXRhZGF0YSIsICJzdHJvbmdlc3QiLCAiZ2V0U3Ryb25nZXN0TWV0YWRhdGEiLCAibWV0YWRhdGEiLCAiZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0iLCAiaXRlbSIsICJhbGdvcml0aG0iLCAiZXhwZWN0ZWRWYWx1ZSIsICJhY3R1YWxWYWx1ZSIsICJjb21wYXJlQmFzZTY0TWl4ZWQiLCAicGFyc2VIYXNoV2l0aE9wdGlvbnMiLCAicmVzdWx0IiwgImVtcHR5IiwgInBhcnNlZFRva2VuIiwgInBvcyIsICJ0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwiLCAiQSIsICJCIiwgImNyZWF0ZURlZmVycmVkUHJvbWlzZSIsICJyZXMiLCAicmVqIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImlzQWJvcnRlZCIsICJmZXRjaFBhcmFtcyIsICJpc0NhbmNlbGxlZCIsICJub3JtYWxpemVNZXRob2QiLCAibWV0aG9kIiwgInNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyIsICJlc0l0ZXJhdG9yUHJvdG90eXBlIiwgImNyZWF0ZUl0ZXJhdG9yIiwgIm5hbWUiLCAia0ludGVybmFsSXRlcmF0b3IiLCAia2V5SW5kZXgiLCAidmFsdWVJbmRleCIsICJGYXN0SXRlcmFibGVJdGVyYXRvciIsICIjdGFyZ2V0IiwgIiNraW5kIiwgIiNpbmRleCIsICJ0YXJnZXQiLCAia2luZCIsICJpbmRleCIsICJ2YWx1ZXMiLCAibGVuIiwgImtleSIsICJpdGVyYXRvck1peGluIiwgIm1ha2VJdGVyYXRvciIsICJwcm9wZXJ0aWVzIiwgImNhbGxiYWNrZm4iLCAidGhpc0FyZyIsICJmdWxseVJlYWRCb2R5IiwgImJvZHkiLCAicHJvY2Vzc0JvZHkiLCAicHJvY2Vzc0JvZHlFcnJvciIsICJzdWNjZXNzU3RlcHMiLCAiZXJyb3JTdGVwcyIsICJyZWFkZXIiLCAiZSIsICJyZWFkQWxsQnl0ZXMiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAic3RyZWFtIiwgInJlYWRhYmxlU3RyZWFtQ2xvc2UiLCAiY29udHJvbGxlciIsICJlcnIiLCAiaW52YWxpZElzb21vcnBoaWNFbmNvZGVWYWx1ZVJlZ2V4IiwgImlzb21vcnBoaWNFbmNvZGUiLCAiaW5wdXQiLCAiYnl0ZUxlbmd0aCIsICJkb25lIiwgImNodW5rIiwgInVybElzTG9jYWwiLCAicHJvdG9jb2wiLCAic2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZSIsICJhbGxvd1doaXRlc3BhY2UiLCAiZGF0YSIsICJwb3NpdGlvbiIsICJjaGFyIiwgInJhbmdlU3RhcnQiLCAicmFuZ2VTdGFydFZhbHVlIiwgInJhbmdlRW5kIiwgInJhbmdlRW5kVmFsdWUiLCAiYnVpbGRDb250ZW50UmFuZ2UiLCAiZnVsbExlbmd0aCIsICJjb250ZW50UmFuZ2UiLCAiSW5mbGF0ZVN0cmVhbSIsICIjemxpYk9wdGlvbnMiLCAiemxpYk9wdGlvbnMiLCAiZW5jb2RpbmciLCAiY2FsbGJhY2siLCAiY3JlYXRlSW5mbGF0ZSIsICJleHRyYWN0TWltZVR5cGUiLCAiaGVhZGVycyIsICJjaGFyc2V0IiwgImVzc2VuY2UiLCAibWltZVR5cGUiLCAiZ2V0RGVjb2RlU3BsaXQiLCAidGVtcG9yYXJ5TWltZVR5cGUiLCAiZ2V0dGluZ0RlY29kaW5nU3BsaXR0aW5nIiwgInRlbXBvcmFyeVZhbHVlIiwgImxpc3QiLCAidGV4dERlY29kZXIiLCAidXRmOERlY29kZUJ5dGVzIiwgImJ1ZmZlciIsICJFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0QmFzZSIsICJFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAicmVxdWlyZV9zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9maWxlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQmxvYiIsICJGaWxlIiwgImtTdGF0ZSIsICJ3ZWJpZGwiLCAiRmlsZUxpa2UiLCAiX0ZpbGVMaWtlIiwgImJsb2JMaWtlIiwgImZpbGVOYW1lIiwgIm9wdGlvbnMiLCAibiIsICJ0IiwgImQiLCAiYXJncyIsICJpc0ZpbGVMaWtlIiwgIm9iamVjdCIsICJyZXF1aXJlX2Zvcm1kYXRhIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNCbG9iTGlrZSIsICJpdGVyYXRvck1peGluIiwgImtTdGF0ZSIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIkZpbGVMaWtlIiwgImlzRmlsZUxpa2UiLCAid2ViaWRsIiwgIk5hdGl2ZUZpbGUiLCAibm9kZVV0aWwiLCAiRmlsZSIsICJGb3JtRGF0YSIsICJfRm9ybURhdGEiLCAiZm9ybSIsICJuYW1lIiwgInZhbHVlIiwgImZpbGVuYW1lIiwgInByZWZpeCIsICJlbnRyeSIsICJtYWtlRW50cnkiLCAiaWR4IiwgImRlcHRoIiwgIm9wdGlvbnMiLCAic3RhdGUiLCAiYSIsICJiIiwgIm91dHB1dCIsICJyZXF1aXJlX2Zvcm1kYXRhX3BhcnNlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzVVNWU3RyaW5nIiwgImJ1ZmZlclRvTG93ZXJDYXNlZEhlYWRlck5hbWUiLCAidXRmOERlY29kZUJ5dGVzIiwgIkhUVFBfVE9LRU5fQ09ERVBPSU5UUyIsICJpc29tb3JwaGljRGVjb2RlIiwgImlzRmlsZUxpa2UiLCAibWFrZUVudHJ5IiwgImFzc2VydCIsICJOb2RlRmlsZSIsICJGaWxlIiwgImZvcm1EYXRhTmFtZUJ1ZmZlciIsICJmaWxlbmFtZUJ1ZmZlciIsICJkZCIsICJkZGNybGYiLCAiaXNBc2NpaVN0cmluZyIsICJjaGFycyIsICJpIiwgInZhbGlkYXRlQm91bmRhcnkiLCAiYm91bmRhcnkiLCAibGVuZ3RoIiwgImNwIiwgIm11bHRpcGFydEZvcm1EYXRhUGFyc2VyIiwgImlucHV0IiwgIm1pbWVUeXBlIiwgImJvdW5kYXJ5U3RyaW5nIiwgImVudHJ5TGlzdCIsICJwb3NpdGlvbiIsICJ0cmFpbGluZyIsICJidWZmZXJTdGFydHNXaXRoIiwgInJlc3VsdCIsICJwYXJzZU11bHRpcGFydEZvcm1EYXRhSGVhZGVycyIsICJuYW1lIiwgImZpbGVuYW1lIiwgImNvbnRlbnRUeXBlIiwgImVuY29kaW5nIiwgImJvZHkiLCAiYm91bmRhcnlJbmRleCIsICJ2YWx1ZSIsICJoZWFkZXJOYW1lIiwgImNvbGxlY3RBU2VxdWVuY2VPZkJ5dGVzIiwgImNoYXIiLCAicmVtb3ZlQ2hhcnMiLCAicGFyc2VNdWx0aXBhcnRGb3JtRGF0YU5hbWUiLCAiY2hlY2siLCAiaGVhZGVyVmFsdWUiLCAiY29uZGl0aW9uIiwgInN0YXJ0IiwgImJ1ZiIsICJsZWFkaW5nIiwgInByZWRpY2F0ZSIsICJsZWFkIiwgInRyYWlsIiwgImJ1ZmZlciIsICJyZXF1aXJlX2JvZHkiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgIlJlYWRhYmxlU3RyZWFtRnJvbSIsICJpc0Jsb2JMaWtlIiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgInJlYWRhYmxlU3RyZWFtQ2xvc2UiLCAiY3JlYXRlRGVmZXJyZWRQcm9taXNlIiwgImZ1bGx5UmVhZEJvZHkiLCAiZXh0cmFjdE1pbWVUeXBlIiwgInV0ZjhEZWNvZGVCeXRlcyIsICJGb3JtRGF0YSIsICJrU3RhdGUiLCAid2ViaWRsIiwgIkJsb2IiLCAiYXNzZXJ0IiwgImlzRXJyb3JlZCIsICJpc0Rpc3R1cmJlZCIsICJpc0FycmF5QnVmZmVyIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJtdWx0aXBhcnRGb3JtRGF0YVBhcnNlciIsICJyYW5kb20iLCAiY3J5cHRvIiwgIm1heCIsICJ0ZXh0RW5jb2RlciIsICJub29wIiwgImhhc0ZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgInN0cmVhbVJlZ2lzdHJ5IiwgIndlYWtSZWYiLCAic3RyZWFtIiwgImV4dHJhY3RCb2R5IiwgIm9iamVjdCIsICJrZWVwYWxpdmUiLCAiY29udHJvbGxlciIsICJidWZmZXIiLCAic291cmNlIiwgImFjdGlvbiIsICJsZW5ndGgiLCAidHlwZSIsICJib3VuZGFyeSIsICJwcmVmaXgiLCAiZXNjYXBlIiwgInN0ciIsICJub3JtYWxpemVMaW5lZmVlZHMiLCAidmFsdWUiLCAiYmxvYlBhcnRzIiwgInJuIiwgImhhc1Vua25vd25TaXplVmFsdWUiLCAibmFtZSIsICJjaHVuayIsICJwYXJ0IiwgIml0ZXJhdG9yIiwgImRvbmUiLCAicmVhc29uIiwgInNhZmVseUV4dHJhY3RCb2R5IiwgImNsb25lQm9keSIsICJpbnN0YW5jZSIsICJib2R5IiwgIm91dDEiLCAib3V0MiIsICJ0aHJvd0lmQWJvcnRlZCIsICJzdGF0ZSIsICJib2R5TWl4aW5NZXRob2RzIiwgImNvbnN1bWVCb2R5IiwgImJ5dGVzIiwgIm1pbWVUeXBlIiwgImJvZHlNaW1lVHlwZSIsICJwYXJzZUpTT05Gcm9tQnl0ZXMiLCAicGFyc2VkIiwgImZkIiwgImVudHJpZXMiLCAibWl4aW5Cb2R5IiwgInByb3RvdHlwZSIsICJjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUiLCAiYm9keVVudXNhYmxlIiwgInByb21pc2UiLCAiZXJyb3JTdGVwcyIsICJlcnJvciIsICJzdWNjZXNzU3RlcHMiLCAiZGF0YSIsICJlIiwgInJlcXVlc3RPclJlc3BvbnNlIiwgImhlYWRlcnMiLCAicmVxdWlyZV9jbGllbnRfaDEiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAidXRpbCIsICJjaGFubmVscyIsICJ0aW1lcnMiLCAiUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIiwgIlJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJIZWFkZXJzVGltZW91dEVycm9yIiwgIkhlYWRlcnNPdmVyZmxvd0Vycm9yIiwgIlNvY2tldEVycm9yIiwgIkluZm9ybWF0aW9uYWxFcnJvciIsICJCb2R5VGltZW91dEVycm9yIiwgIkhUVFBQYXJzZXJFcnJvciIsICJSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIiwgImtVcmwiLCAia1Jlc2V0IiwgImtDbGllbnQiLCAia1BhcnNlciIsICJrQmxvY2tpbmciLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1NpemUiLCAia1dyaXRpbmciLCAia1F1ZXVlIiwgImtOb1JlZiIsICJrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQiLCAia0hvc3RIZWFkZXIiLCAia1BlbmRpbmdJZHgiLCAia1J1bm5pbmdJZHgiLCAia0Vycm9yIiwgImtQaXBlbGluaW5nIiwgImtTb2NrZXQiLCAia0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSIsICJrTWF4SGVhZGVyc1NpemUiLCAia0tlZXBBbGl2ZU1heFRpbWVvdXQiLCAia0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQiLCAia0hlYWRlcnNUaW1lb3V0IiwgImtCb2R5VGltZW91dCIsICJrU3RyaWN0Q29udGVudExlbmd0aCIsICJrTWF4UmVxdWVzdHMiLCAia0NvdW50ZXIiLCAia01heFJlc3BvbnNlU2l6ZSIsICJrT25FcnJvciIsICJrUmVzdW1lIiwgImtIVFRQQ29udGV4dCIsICJjb25zdGFudHMiLCAiRU1QVFlfQlVGIiwgIkZhc3RCdWZmZXIiLCAiYWRkTGlzdGVuZXIiLCAicmVtb3ZlQWxsTGlzdGVuZXJzIiwgImtJZGxlU29ja2V0VmFsaWRhdGlvbiIsICJrSWRsZVNvY2tldFZhbGlkYXRpb25UaW1lb3V0IiwgImtTb2NrZXRVc2VkIiwgImV4dHJhY3RCb2R5IiwgImxhenlsbGh0dHAiLCAibGxodHRwV2FzbURhdGEiLCAibW9kIiwgInAiLCAiYXQiLCAibGVuIiwgImN1cnJlbnRQYXJzZXIiLCAic3RhcnQiLCAiY3VycmVudEJ1ZmZlclB0ciIsICJjdXJyZW50QnVmZmVyUmVmIiwgInN0YXR1c0NvZGUiLCAidXBncmFkZSIsICJzaG91bGRLZWVwQWxpdmUiLCAibGxodHRwSW5zdGFuY2UiLCAibGxodHRwUHJvbWlzZSIsICJjdXJyZW50QnVmZmVyU2l6ZSIsICJVU0VfTkFUSVZFX1RJTUVSIiwgIlVTRV9GQVNUX1RJTUVSIiwgIlRJTUVPVVRfSEVBREVSUyIsICJUSU1FT1VUX0JPRFkiLCAiVElNRU9VVF9LRUVQX0FMSVZFIiwgIlBhcnNlciIsICJjbGllbnQiLCAic29ja2V0IiwgImRlbGF5IiwgInR5cGUiLCAib25QYXJzZXJUaW1lb3V0IiwgImNodW5rIiwgImRhdGEiLCAibGxodHRwIiwgInJldCIsICJlcnIiLCAib2Zmc2V0IiwgImJvZHkiLCAiY29udGVudExlbmd0aCIsICJieXRlc1JlYWQiLCAicHRyIiwgIm1lc3NhZ2UiLCAiYnVmIiwgInJlcXVlc3QiLCAia2V5IiwgImhlYWRlck5hbWUiLCAiaGVhZCIsICJoZWFkZXJzIiwgInN0YXR1c1RleHQiLCAiYm9keVRpbWVvdXQiLCAia2VlcEFsaXZlVGltZW91dCIsICJ0aW1lb3V0IiwgInBhdXNlIiwgIm1heFJlc3BvbnNlU2l6ZSIsICJwYXJzZXIiLCAidGltZW91dFR5cGUiLCAicGF1c2VkIiwgImNvbm5lY3RIMSIsICJwYXJzZXJFcnIiLCAiY2xlYXJJZGxlU29ja2V0VmFsaWRhdGlvbiIsICJyZXF1ZXN0cyIsICJjbG9zZWQiLCAiYXJncyIsICJ3cml0ZUgxIiwgInJlc3VtZUgxIiwgImNhbGxiYWNrIiwgInNjaGVkdWxlSWRsZVNvY2tldFZhbGlkYXRpb24iLCAiaGVhZGVyc1RpbWVvdXQiLCAic2hvdWxkU2VuZENvbnRlbnRMZW5ndGgiLCAibWV0aG9kIiwgInBhdGgiLCAiaG9zdCIsICJibG9ja2luZyIsICJyZXNldCIsICJleHBlY3RzUGF5bG9hZCIsICJib2R5U3RyZWFtIiwgImNvbnRlbnRUeXBlIiwgImNvbnRlbnRUeXBlVmFsdWUiLCAiYm9keUxlbmd0aCIsICJhYm9ydCIsICJoZWFkZXIiLCAibiIsICJ2YWwiLCAiaSIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZUl0ZXJhYmxlIiwgIndyaXRlQmxvYiIsICJ3cml0ZVN0cmVhbSIsICJmaW5pc2hlZCIsICJ3cml0ZXIiLCAiQXN5bmNXcml0ZXIiLCAib25EYXRhIiwgIm9uRHJhaW4iLCAib25DbG9zZSIsICJvbkZpbmlzaGVkIiwgImVyIiwgImJ1ZmZlciIsICJjYiIsICJ3YWl0Rm9yRHJhaW4iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYnl0ZXNXcml0dGVuIiwgInJlcXVpcmVfY2xpZW50X2gyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgInBpcGVsaW5lIiwgInV0aWwiLCAiUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiU29ja2V0RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgImtVcmwiLCAia1Jlc2V0IiwgImtDbGllbnQiLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1F1ZXVlIiwgImtQZW5kaW5nSWR4IiwgImtSdW5uaW5nSWR4IiwgImtFcnJvciIsICJrU29ja2V0IiwgImtTdHJpY3RDb250ZW50TGVuZ3RoIiwgImtPbkVycm9yIiwgImtNYXhDb25jdXJyZW50U3RyZWFtcyIsICJrSFRUUDJTZXNzaW9uIiwgImtSZXN1bWUiLCAia1NpemUiLCAia0hUVFBDb250ZXh0IiwgImtPcGVuU3RyZWFtcyIsICJleHRyYWN0Qm9keSIsICJoMkV4cGVyaW1lbnRhbFdhcm5lZCIsICJodHRwMiIsICJIVFRQMl9IRUFERVJfQVVUSE9SSVRZIiwgIkhUVFAyX0hFQURFUl9NRVRIT0QiLCAiSFRUUDJfSEVBREVSX1BBVEgiLCAiSFRUUDJfSEVBREVSX1NDSEVNRSIsICJIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgiLCAiSFRUUDJfSEVBREVSX0VYUEVDVCIsICJIVFRQMl9IRUFERVJfU1RBVFVTIiwgInBhcnNlSDJIZWFkZXJzIiwgImhlYWRlcnMiLCAicmVzdWx0IiwgIm5hbWUiLCAidmFsdWUiLCAic3VidmFsdWUiLCAiY29ubmVjdEgyIiwgImNsaWVudCIsICJzb2NrZXQiLCAic2Vzc2lvbiIsICJvbkh0dHAyU2Vzc2lvbkVycm9yIiwgIm9uSHR0cDJGcmFtZUVycm9yIiwgIm9uSHR0cDJTZXNzaW9uRW5kIiwgIm9uSFRUUDJHb0F3YXkiLCAiZXJyIiwgInJlcXVlc3RzIiwgImkiLCAicmVxdWVzdCIsICJjbG9zZWQiLCAiYXJncyIsICJ3cml0ZUgyIiwgInJlc3VtZUgyIiwgImNhbGxiYWNrIiwgInR5cGUiLCAiY29kZSIsICJpZCIsICJzaG91bGRTZW5kQ29udGVudExlbmd0aCIsICJtZXRob2QiLCAicGF0aCIsICJob3N0IiwgInVwZ3JhZGUiLCAiZXhwZWN0Q29udGludWUiLCAic2lnbmFsIiwgInJlcUhlYWRlcnMiLCAiYm9keSIsICJuIiwgImtleSIsICJ2YWwiLCAic3RyZWFtIiwgImhvc3RuYW1lIiwgInBvcnQiLCAiYWJvcnQiLCAiZXhwZWN0c1BheWxvYWQiLCAiY29udGVudExlbmd0aCIsICJib2R5U3RyZWFtIiwgImNvbnRlbnRUeXBlIiwgInNob3VsZEVuZFN0cmVhbSIsICJ3cml0ZUJvZHlIMiIsICJzdGF0dXNDb2RlIiwgInJlYWxIZWFkZXJzIiwgImNodW5rIiwgIndyaXRlQnVmZmVyIiwgIndyaXRlSXRlcmFibGUiLCAid3JpdGVCbG9iIiwgIndyaXRlU3RyZWFtIiwgImgyc3RyZWFtIiwgImVycm9yIiwgInBpcGUiLCAib25QaXBlRGF0YSIsICJidWZmZXIiLCAib25EcmFpbiIsICJjYiIsICJ3YWl0Rm9yRHJhaW4iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAicmVzIiwgInJlcXVpcmVfcmVkaXJlY3RfaGFuZGxlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInV0aWwiLCAia0JvZHlVc2VkIiwgImFzc2VydCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJFRSIsICJyZWRpcmVjdGFibGVTdGF0dXNDb2RlcyIsICJrQm9keSIsICJCb2R5QXN5bmNJdGVyYWJsZSIsICJib2R5IiwgIlJlZGlyZWN0SGFuZGxlciIsICJkaXNwYXRjaCIsICJtYXhSZWRpcmVjdGlvbnMiLCAib3B0cyIsICJoYW5kbGVyIiwgImFib3J0IiwgInN0YXR1c0NvZGUiLCAiaGVhZGVycyIsICJzb2NrZXQiLCAiZXJyb3IiLCAicmVzdW1lIiwgInN0YXR1c1RleHQiLCAicGFyc2VMb2NhdGlvbiIsICJvcmlnaW4iLCAicGF0aG5hbWUiLCAic2VhcmNoIiwgInBhdGgiLCAiY2xlYW5SZXF1ZXN0SGVhZGVycyIsICJjaHVuayIsICJ0cmFpbGVycyIsICJpIiwgInNob3VsZFJlbW92ZUhlYWRlciIsICJoZWFkZXIiLCAicmVtb3ZlQ29udGVudCIsICJ1bmtub3duT3JpZ2luIiwgIm5hbWUiLCAicmV0IiwgImtleSIsICJyZXF1aXJlX3JlZGlyZWN0X2ludGVyY2VwdG9yIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmVkaXJlY3RIYW5kbGVyIiwgImNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IiLCAiZGVmYXVsdE1heFJlZGlyZWN0aW9ucyIsICJkaXNwYXRjaCIsICJvcHRzIiwgImhhbmRsZXIiLCAibWF4UmVkaXJlY3Rpb25zIiwgInJlZGlyZWN0SGFuZGxlciIsICJyZXF1aXJlX2NsaWVudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJuZXQiLCAiaHR0cCIsICJ1dGlsIiwgImNoYW5uZWxzIiwgIlJlcXVlc3QiLCAiRGlzcGF0Y2hlckJhc2UiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgIkNsaWVudERlc3Ryb3llZEVycm9yIiwgImJ1aWxkQ29ubmVjdG9yIiwgImtVcmwiLCAia1NlcnZlck5hbWUiLCAia0NsaWVudCIsICJrQnVzeSIsICJrQ29ubmVjdCIsICJrUmVzdW1pbmciLCAia1J1bm5pbmciLCAia1BlbmRpbmciLCAia1NpemUiLCAia1F1ZXVlIiwgImtDb25uZWN0ZWQiLCAia0Nvbm5lY3RpbmciLCAia05lZWREcmFpbiIsICJrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQiLCAia0hvc3RIZWFkZXIiLCAia1BlbmRpbmdJZHgiLCAia1J1bm5pbmdJZHgiLCAia0Vycm9yIiwgImtQaXBlbGluaW5nIiwgImtLZWVwQWxpdmVUaW1lb3V0VmFsdWUiLCAia01heEhlYWRlcnNTaXplIiwgImtLZWVwQWxpdmVNYXhUaW1lb3V0IiwgImtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkIiwgImtIZWFkZXJzVGltZW91dCIsICJrQm9keVRpbWVvdXQiLCAia1N0cmljdENvbnRlbnRMZW5ndGgiLCAia0Nvbm5lY3RvciIsICJrTWF4UmVkaXJlY3Rpb25zIiwgImtNYXhSZXF1ZXN0cyIsICJrQ291bnRlciIsICJrQ2xvc2UiLCAia0Rlc3Ryb3kiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAia0xvY2FsQWRkcmVzcyIsICJrTWF4UmVzcG9uc2VTaXplIiwgImtPbkVycm9yIiwgImtIVFRQQ29udGV4dCIsICJrTWF4Q29uY3VycmVudFN0cmVhbXMiLCAia1Jlc3VtZSIsICJjb25uZWN0SDEiLCAiY29ubmVjdEgyIiwgImRlcHJlY2F0ZWRJbnRlcmNlcHRvcldhcm5lZCIsICJrQ2xvc2VkUmVzb2x2ZSIsICJub29wIiwgImdldFBpcGVsaW5pbmciLCAiY2xpZW50IiwgIkNsaWVudCIsICJ1cmwiLCAiaW50ZXJjZXB0b3JzIiwgIm1heEhlYWRlclNpemUiLCAiaGVhZGVyc1RpbWVvdXQiLCAic29ja2V0VGltZW91dCIsICJyZXF1ZXN0VGltZW91dCIsICJjb25uZWN0VGltZW91dCIsICJib2R5VGltZW91dCIsICJpZGxlVGltZW91dCIsICJrZWVwQWxpdmUiLCAia2VlcEFsaXZlVGltZW91dCIsICJtYXhLZWVwQWxpdmVUaW1lb3V0IiwgImtlZXBBbGl2ZU1heFRpbWVvdXQiLCAia2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCIsICJzb2NrZXRQYXRoIiwgInBpcGVsaW5pbmciLCAidGxzIiwgInN0cmljdENvbnRlbnRMZW5ndGgiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAibWF4UmVkaXJlY3Rpb25zIiwgImNvbm5lY3QiLCAibWF4UmVxdWVzdHNQZXJDbGllbnQiLCAibG9jYWxBZGRyZXNzIiwgIm1heFJlc3BvbnNlU2l6ZSIsICJhdXRvU2VsZWN0RmFtaWx5IiwgImF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCIsICJtYXhDb25jdXJyZW50U3RyZWFtcyIsICJhbGxvd0gyIiwgIndlYlNvY2tldCIsICJjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yIiwgInN5bmMiLCAicmVzdW1lIiwgImVyciIsICJvbkVycm9yIiwgInZhbHVlIiwgImNiIiwgIm9wdHMiLCAiaGFuZGxlciIsICJvcmlnaW4iLCAicmVxdWVzdCIsICJyZXNvbHZlIiwgInJlcXVlc3RzIiwgImkiLCAiY2FsbGJhY2siLCAiaG9zdCIsICJob3N0bmFtZSIsICJwcm90b2NvbCIsICJwb3J0IiwgImlkeCIsICJpcCIsICJzb2NrZXQiLCAicmVqZWN0IiwgImVtaXREcmFpbiIsICJfcmVzdW1lIiwgInJlcXVpcmVfZml4ZWRfcXVldWUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJGaXhlZENpcmN1bGFyQnVmZmVyIiwgImRhdGEiLCAibmV4dEl0ZW0iLCAidGFpbCIsICJuZXh0IiwgInJlcXVpcmVfcG9vbF9zdGF0cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtGcmVlIiwgImtDb25uZWN0ZWQiLCAia1BlbmRpbmciLCAia1F1ZXVlZCIsICJrUnVubmluZyIsICJrU2l6ZSIsICJrUG9vbCIsICJQb29sU3RhdHMiLCAicG9vbCIsICJyZXF1aXJlX3Bvb2xfYmFzZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRpc3BhdGNoZXJCYXNlIiwgIkZpeGVkUXVldWUiLCAia0Nvbm5lY3RlZCIsICJrU2l6ZSIsICJrUnVubmluZyIsICJrUGVuZGluZyIsICJrUXVldWVkIiwgImtCdXN5IiwgImtGcmVlIiwgImtVcmwiLCAia0Nsb3NlIiwgImtEZXN0cm95IiwgImtEaXNwYXRjaCIsICJQb29sU3RhdHMiLCAia0NsaWVudHMiLCAia05lZWREcmFpbiIsICJrUXVldWUiLCAia0Nsb3NlZFJlc29sdmUiLCAia09uRHJhaW4iLCAia09uQ29ubmVjdCIsICJrT25EaXNjb25uZWN0IiwgImtPbkNvbm5lY3Rpb25FcnJvciIsICJrR2V0RGlzcGF0Y2hlciIsICJrQWRkQ2xpZW50IiwgImtSZW1vdmVDbGllbnQiLCAia1N0YXRzIiwgIlBvb2xCYXNlIiwgIm9wdHMiLCAicG9vbCIsICJvcmlnaW4iLCAidGFyZ2V0cyIsICJxdWV1ZSIsICJuZWVkRHJhaW4iLCAiaXRlbSIsICJjIiwgImVyciIsICJjbGllbnQiLCAicmV0IiwgInBlbmRpbmciLCAicnVubmluZyIsICJzaXplIiwgInJlc29sdmUiLCAiaGFuZGxlciIsICJkaXNwYXRjaGVyIiwgImlkeCIsICJyZXF1aXJlX3Bvb2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQb29sQmFzZSIsICJrQ2xpZW50cyIsICJrTmVlZERyYWluIiwgImtBZGRDbGllbnQiLCAia0dldERpc3BhdGNoZXIiLCAiQ2xpZW50IiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInV0aWwiLCAia1VybCIsICJrSW50ZXJjZXB0b3JzIiwgImJ1aWxkQ29ubmVjdG9yIiwgImtPcHRpb25zIiwgImtDb25uZWN0aW9ucyIsICJrRmFjdG9yeSIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJQb29sIiwgImNvbm5lY3Rpb25zIiwgImZhY3RvcnkiLCAiY29ubmVjdCIsICJjb25uZWN0VGltZW91dCIsICJ0bHMiLCAibWF4Q2FjaGVkU2Vzc2lvbnMiLCAic29ja2V0UGF0aCIsICJhdXRvU2VsZWN0RmFtaWx5IiwgImF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCIsICJhbGxvd0gyIiwgIm9wdGlvbnMiLCAidGFyZ2V0cyIsICJlcnJvciIsICJ0YXJnZXQiLCAiaWR4IiwgImNsaWVudCIsICJkaXNwYXRjaGVyIiwgInJlcXVpcmVfYmFsYW5jZWRfcG9vbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlBvb2xCYXNlIiwgImtDbGllbnRzIiwgImtOZWVkRHJhaW4iLCAia0FkZENsaWVudCIsICJrUmVtb3ZlQ2xpZW50IiwgImtHZXREaXNwYXRjaGVyIiwgIlBvb2wiLCAia1VybCIsICJrSW50ZXJjZXB0b3JzIiwgInBhcnNlT3JpZ2luIiwgImtGYWN0b3J5IiwgImtPcHRpb25zIiwgImtHcmVhdGVzdENvbW1vbkRpdmlzb3IiLCAia0N1cnJlbnRXZWlnaHQiLCAia0luZGV4IiwgImtXZWlnaHQiLCAia01heFdlaWdodFBlclNlcnZlciIsICJrRXJyb3JQZW5hbHR5IiwgImdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciIsICJhIiwgImIiLCAidCIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJCYWxhbmNlZFBvb2wiLCAidXBzdHJlYW1zIiwgImZhY3RvcnkiLCAidXBzdHJlYW0iLCAidXBzdHJlYW1PcmlnaW4iLCAicG9vbCIsICJhcmdzIiwgImVyciIsICJjbGllbnQiLCAicmVzdWx0IiwgImkiLCAiZGlzcGF0Y2hlciIsICJwIiwgImNvdW50ZXIiLCAibWF4V2VpZ2h0SW5kZXgiLCAicmVxdWlyZV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImtDbGllbnRzIiwgImtSdW5uaW5nIiwgImtDbG9zZSIsICJrRGVzdHJveSIsICJrRGlzcGF0Y2giLCAia0ludGVyY2VwdG9ycyIsICJEaXNwYXRjaGVyQmFzZSIsICJQb29sIiwgIkNsaWVudCIsICJ1dGlsIiwgImNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IiLCAia09uQ29ubmVjdCIsICJrT25EaXNjb25uZWN0IiwgImtPbkNvbm5lY3Rpb25FcnJvciIsICJrTWF4UmVkaXJlY3Rpb25zIiwgImtPbkRyYWluIiwgImtGYWN0b3J5IiwgImtPcHRpb25zIiwgImRlZmF1bHRGYWN0b3J5IiwgIm9yaWdpbiIsICJvcHRzIiwgIkFnZW50IiwgImZhY3RvcnkiLCAibWF4UmVkaXJlY3Rpb25zIiwgImNvbm5lY3QiLCAib3B0aW9ucyIsICJ0YXJnZXRzIiwgImVyciIsICJyZXQiLCAiY2xpZW50IiwgImhhbmRsZXIiLCAia2V5IiwgImRpc3BhdGNoZXIiLCAiY2xvc2VQcm9taXNlcyIsICJkZXN0cm95UHJvbWlzZXMiLCAicmVxdWlyZV9wcm94eV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtQcm94eSIsICJrQ2xvc2UiLCAia0Rlc3Ryb3kiLCAia0Rpc3BhdGNoIiwgImtJbnRlcmNlcHRvcnMiLCAiVVJMIiwgIkFnZW50IiwgIlBvb2wiLCAiRGlzcGF0Y2hlckJhc2UiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJTZWN1cmVQcm94eUNvbm5lY3Rpb25FcnJvciIsICJidWlsZENvbm5lY3RvciIsICJDbGllbnQiLCAia0FnZW50IiwgImtDbGllbnQiLCAia1Byb3h5SGVhZGVycyIsICJrUmVxdWVzdFRscyIsICJrUHJveHlUbHMiLCAia0Nvbm5lY3RFbmRwb2ludCIsICJrVHVubmVsUHJveHkiLCAiZGVmYXVsdFByb3RvY29sUG9ydCIsICJwcm90b2NvbCIsICJkZWZhdWx0RmFjdG9yeSIsICJvcmlnaW4iLCAib3B0cyIsICJub29wIiwgImRlZmF1bHRBZ2VudEZhY3RvcnkiLCAiSHR0cDFQcm94eVdyYXBwZXIiLCAiI2NsaWVudCIsICJwcm94eVVybCIsICJoZWFkZXJzIiwgImNvbm5lY3QiLCAiZmFjdG9yeSIsICJoYW5kbGVyIiwgIm9uSGVhZGVycyIsICJzdGF0dXNDb2RlIiwgImRhdGEiLCAicmVzdW1lIiwgInBhdGgiLCAiaG9zdCIsICJlcnIiLCAiUHJveHlBZ2VudCIsICJjbGllbnRGYWN0b3J5IiwgInByb3h5VHVubmVsIiwgInVybCIsICIjZ2V0VXJsIiwgImhyZWYiLCAicG9ydCIsICJ1c2VybmFtZSIsICJwYXNzd29yZCIsICJwcm94eUhvc3RuYW1lIiwgImFnZW50RmFjdG9yeSIsICJvcHRpb25zIiwgImNhbGxiYWNrIiwgInJlcXVlc3RlZFBhdGgiLCAic29ja2V0IiwgInNlcnZlcm5hbWUiLCAiYnVpbGRIZWFkZXJzIiwgInRocm93SWZQcm94eUF1dGhJc1NlbnQiLCAiaGVhZGVyc1BhaXIiLCAiaSIsICJrZXkiLCAicmVxdWlyZV9lbnZfaHR0cF9wcm94eV9hZ2VudCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRpc3BhdGNoZXJCYXNlIiwgImtDbG9zZSIsICJrRGVzdHJveSIsICJrQ2xvc2VkIiwgImtEZXN0cm95ZWQiLCAia0Rpc3BhdGNoIiwgImtOb1Byb3h5QWdlbnQiLCAia0h0dHBQcm94eUFnZW50IiwgImtIdHRwc1Byb3h5QWdlbnQiLCAiUHJveHlBZ2VudCIsICJBZ2VudCIsICJERUZBVUxUX1BPUlRTIiwgImV4cGVyaW1lbnRhbFdhcm5lZCIsICJFbnZIdHRwUHJveHlBZ2VudCIsICIjbm9Qcm94eVZhbHVlIiwgIiNub1Byb3h5RW50cmllcyIsICIjb3B0cyIsICJvcHRzIiwgImh0dHBQcm94eSIsICJodHRwc1Byb3h5IiwgIm5vUHJveHkiLCAiYWdlbnRPcHRzIiwgIkhUVFBfUFJPWFkiLCAiSFRUUFNfUFJPWFkiLCAiI3BhcnNlTm9Qcm94eSIsICJoYW5kbGVyIiwgInVybCIsICIjZ2V0UHJveHlBZ2VudEZvclVybCIsICJlcnIiLCAicHJvdG9jb2wiLCAiaG9zdG5hbWUiLCAicG9ydCIsICIjc2hvdWxkUHJveHkiLCAiI25vUHJveHlDaGFuZ2VkIiwgImkiLCAiZW50cnkiLCAibm9Qcm94eVZhbHVlIiwgIiNub1Byb3h5RW52IiwgIm5vUHJveHlTcGxpdCIsICJub1Byb3h5RW50cmllcyIsICJwYXJzZWQiLCAicmVxdWlyZV9yZXRyeV9oYW5kbGVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnkiLCAiUmVxdWVzdFJldHJ5RXJyb3IiLCAiaXNEaXN0dXJiZWQiLCAicGFyc2VIZWFkZXJzIiwgInBhcnNlUmFuZ2VIZWFkZXIiLCAid3JhcFJlcXVlc3RCb2R5IiwgImNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIiLCAicmV0cnlBZnRlciIsICJjdXJyZW50IiwgInZhbGlkYXRlUGFydGlhbFJlc3BvbnNlQ29udGVudExlbmd0aCIsICJoZWFkZXJzIiwgInJhbmdlIiwgInN0YXR1c0NvZGUiLCAicmV0cnlDb3VudCIsICJjb250ZW50TGVuZ3RoIiwgImxlbmd0aCIsICJleHBlY3RlZExlbmd0aCIsICJSZXRyeUhhbmRsZXIiLCAiX1JldHJ5SGFuZGxlciIsICJvcHRzIiwgImhhbmRsZXJzIiwgInJldHJ5T3B0aW9ucyIsICJkaXNwYXRjaE9wdHMiLCAicmV0cnlGbiIsICJtYXhSZXRyaWVzIiwgIm1heFRpbWVvdXQiLCAibWluVGltZW91dCIsICJ0aW1lb3V0RmFjdG9yIiwgIm1ldGhvZHMiLCAiZXJyb3JDb2RlcyIsICJzdGF0dXNDb2RlcyIsICJyZWFzb24iLCAic29ja2V0IiwgImFib3J0IiwgImNodW5rIiwgImVyciIsICJzdGF0ZSIsICJjYiIsICJjb2RlIiwgIm1ldGhvZCIsICJjb3VudGVyIiwgInJldHJ5QWZ0ZXJIZWFkZXIiLCAicmV0cnlUaW1lb3V0IiwgInJhd0hlYWRlcnMiLCAicmVzdW1lIiwgInN0YXR1c01lc3NhZ2UiLCAiY29udGVudFJhbmdlIiwgImNvbnRlbnRMZW5ndGhFcnJvciIsICJzdGFydCIsICJzaXplIiwgImVuZCIsICJyYXdUcmFpbGVycyIsICJvblJldHJ5IiwgInJlcXVpcmVfcmV0cnlfYWdlbnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJEaXNwYXRjaGVyIiwgIlJldHJ5SGFuZGxlciIsICJSZXRyeUFnZW50IiwgIiNhZ2VudCIsICIjb3B0aW9ucyIsICJhZ2VudCIsICJvcHRpb25zIiwgIm9wdHMiLCAiaGFuZGxlciIsICJyZXRyeSIsICJyZXF1aXJlX3JlYWRhYmxlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgIlJlYWRhYmxlIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiTm90U3VwcG9ydGVkRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQWJvcnRFcnJvciIsICJ1dGlsIiwgIlJlYWRhYmxlU3RyZWFtRnJvbSIsICJrQ29uc3VtZSIsICJrUmVhZGluZyIsICJrQm9keSIsICJrQWJvcnQiLCAia0NvbnRlbnRUeXBlIiwgImtDb250ZW50TGVuZ3RoIiwgIm5vb3AiLCAiQm9keVJlYWRhYmxlIiwgInJlc3VtZSIsICJhYm9ydCIsICJjb250ZW50VHlwZSIsICJjb250ZW50TGVuZ3RoIiwgImhpZ2hXYXRlck1hcmsiLCAiZXJyIiwgImNhbGxiYWNrIiwgImV2IiwgImFyZ3MiLCAicmV0IiwgImNodW5rIiwgImNvbnN1bWVQdXNoIiwgImNvbnN1bWUiLCAib3B0cyIsICJsaW1pdCIsICJzaWduYWwiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib25BYm9ydCIsICJpc0xvY2tlZCIsICJzZWxmIiwgImlzVW51c2FibGUiLCAic3RyZWFtIiwgInR5cGUiLCAiclN0YXRlIiwgImNvbnN1bWVGaW5pc2giLCAiY29uc3VtZVN0YXJ0IiwgInN0YXRlIiwgInN0YXJ0IiwgImVuZCIsICJuIiwgImNvbnN1bWVFbmQiLCAiY2h1bmtzRGVjb2RlIiwgImNodW5rcyIsICJsZW5ndGgiLCAiYnVmZmVyIiwgImJ1ZmZlckxlbmd0aCIsICJjaHVua3NDb25jYXQiLCAib2Zmc2V0IiwgImkiLCAiYm9keSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IiLCAiY2h1bmtzRGVjb2RlIiwgIkNIVU5LX0xJTUlUIiwgImdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayIsICJjYWxsYmFjayIsICJib2R5IiwgImNvbnRlbnRUeXBlIiwgInN0YXR1c0NvZGUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgImNodW5rcyIsICJsZW5ndGgiLCAiY2h1bmsiLCAibWVzc2FnZSIsICJzdGFja1RyYWNlTGltaXQiLCAicGF5bG9hZCIsICJpc0NvbnRlbnRUeXBlQXBwbGljYXRpb25Kc29uIiwgImlzQ29udGVudFR5cGVUZXh0IiwgInJlcXVpcmVfYXBpX3JlcXVlc3QiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiUmVhZGFibGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiUmVxdWVzdEFib3J0ZWRFcnJvciIsICJ1dGlsIiwgImdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayIsICJBc3luY1Jlc291cmNlIiwgIlJlcXVlc3RIYW5kbGVyIiwgIm9wdHMiLCAiY2FsbGJhY2siLCAic2lnbmFsIiwgIm1ldGhvZCIsICJvcGFxdWUiLCAiYm9keSIsICJvbkluZm8iLCAicmVzcG9uc2VIZWFkZXJzIiwgInRocm93T25FcnJvciIsICJoaWdoV2F0ZXJNYXJrIiwgImVyciIsICJhYm9ydCIsICJjb250ZXh0IiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgInBhcnNlZEhlYWRlcnMiLCAiY29udGVudFR5cGUiLCAiY29udGVudExlbmd0aCIsICJyZXMiLCAiY2h1bmsiLCAidHJhaWxlcnMiLCAicmVxdWVzdCIsICJyZXNvbHZlIiwgInJlamVjdCIsICJkYXRhIiwgInJlcXVpcmVfYWJvcnRfc2lnbmFsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYWRkQWJvcnRMaXN0ZW5lciIsICJSZXF1ZXN0QWJvcnRlZEVycm9yIiwgImtMaXN0ZW5lciIsICJrU2lnbmFsIiwgImFib3J0IiwgInNlbGYiLCAicmVtb3ZlU2lnbmFsIiwgImFkZFNpZ25hbCIsICJzaWduYWwiLCAicmVxdWlyZV9hcGlfc3RyZWFtIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXNzZXJ0IiwgImZpbmlzaGVkIiwgIlBhc3NUaHJvdWdoIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkludmFsaWRSZXR1cm5WYWx1ZUVycm9yIiwgInV0aWwiLCAiZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIiwgIkFzeW5jUmVzb3VyY2UiLCAiYWRkU2lnbmFsIiwgInJlbW92ZVNpZ25hbCIsICJTdHJlYW1IYW5kbGVyIiwgIm9wdHMiLCAiZmFjdG9yeSIsICJjYWxsYmFjayIsICJzaWduYWwiLCAibWV0aG9kIiwgIm9wYXF1ZSIsICJib2R5IiwgIm9uSW5mbyIsICJyZXNwb25zZUhlYWRlcnMiLCAidGhyb3dPbkVycm9yIiwgImVyciIsICJhYm9ydCIsICJjb250ZXh0IiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJoZWFkZXJzIiwgInJlcyIsICJjb250ZW50VHlwZSIsICJ0cmFpbGVycyIsICJjaHVuayIsICJzdHJlYW0iLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZGF0YSIsICJyZXF1aXJlX2FwaV9waXBlbGluZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJlYWRhYmxlIiwgIkR1cGxleCIsICJQYXNzVGhyb3VnaCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciIsICJSZXF1ZXN0QWJvcnRlZEVycm9yIiwgInV0aWwiLCAiQXN5bmNSZXNvdXJjZSIsICJhZGRTaWduYWwiLCAicmVtb3ZlU2lnbmFsIiwgImFzc2VydCIsICJrUmVzdW1lIiwgIlBpcGVsaW5lUmVxdWVzdCIsICJyZXN1bWUiLCAiZXJyIiwgImNhbGxiYWNrIiwgIlBpcGVsaW5lUmVzcG9uc2UiLCAiUGlwZWxpbmVIYW5kbGVyIiwgIm9wdHMiLCAiaGFuZGxlciIsICJzaWduYWwiLCAibWV0aG9kIiwgIm9wYXF1ZSIsICJvbkluZm8iLCAicmVzcG9uc2VIZWFkZXJzIiwgImJvZHkiLCAiY2h1bmsiLCAiZW5jb2RpbmciLCAicmVxIiwgInJlcyIsICJyZXQiLCAiYWJvcnQiLCAiY29udGV4dCIsICJzdGF0dXNDb2RlIiwgInJhd0hlYWRlcnMiLCAiaGVhZGVycyIsICJ0cmFpbGVycyIsICJwaXBlbGluZSIsICJwaXBlbGluZUhhbmRsZXIiLCAicmVxdWlyZV9hcGlfdXBncmFkZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlNvY2tldEVycm9yIiwgIkFzeW5jUmVzb3VyY2UiLCAidXRpbCIsICJhZGRTaWduYWwiLCAicmVtb3ZlU2lnbmFsIiwgImFzc2VydCIsICJVcGdyYWRlSGFuZGxlciIsICJvcHRzIiwgImNhbGxiYWNrIiwgInNpZ25hbCIsICJvcGFxdWUiLCAicmVzcG9uc2VIZWFkZXJzIiwgImFib3J0IiwgImNvbnRleHQiLCAic3RhdHVzQ29kZSIsICJyYXdIZWFkZXJzIiwgInNvY2tldCIsICJoZWFkZXJzIiwgImVyciIsICJ1cGdyYWRlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImRhdGEiLCAidXBncmFkZUhhbmRsZXIiLCAicmVxdWlyZV9hcGlfY29ubmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFzc2VydCIsICJBc3luY1Jlc291cmNlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlNvY2tldEVycm9yIiwgInV0aWwiLCAiYWRkU2lnbmFsIiwgInJlbW92ZVNpZ25hbCIsICJDb25uZWN0SGFuZGxlciIsICJvcHRzIiwgImNhbGxiYWNrIiwgInNpZ25hbCIsICJvcGFxdWUiLCAicmVzcG9uc2VIZWFkZXJzIiwgImFib3J0IiwgImNvbnRleHQiLCAic3RhdHVzQ29kZSIsICJyYXdIZWFkZXJzIiwgInNvY2tldCIsICJoZWFkZXJzIiwgImVyciIsICJjb25uZWN0IiwgInJlc29sdmUiLCAicmVqZWN0IiwgImRhdGEiLCAiY29ubmVjdEhhbmRsZXIiLCAicmVxdWlyZV9hcGkiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX21vY2tfZXJyb3JzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVW5kaWNpRXJyb3IiLCAia01vY2tOb3RNYXRjaGVkRXJyb3IiLCAiTW9ja05vdE1hdGNoZWRFcnJvciIsICJfTW9ja05vdE1hdGNoZWRFcnJvciIsICJtZXNzYWdlIiwgImluc3RhbmNlIiwgInJlcXVpcmVfbW9ja19zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9tb2NrX3V0aWxzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiTW9ja05vdE1hdGNoZWRFcnJvciIsICJrRGlzcGF0Y2hlcyIsICJrTW9ja0FnZW50IiwgImtPcmlnaW5hbERpc3BhdGNoIiwgImtPcmlnaW4iLCAia0dldE5ldENvbm5lY3QiLCAiYnVpbGRVUkwiLCAiU1RBVFVTX0NPREVTIiwgImlzUHJvbWlzZSIsICJtYXRjaFZhbHVlIiwgIm1hdGNoIiwgInZhbHVlIiwgImxvd2VyQ2FzZUVudHJpZXMiLCAiaGVhZGVycyIsICJoZWFkZXJOYW1lIiwgImhlYWRlclZhbHVlIiwgImdldEhlYWRlckJ5TmFtZSIsICJrZXkiLCAiaSIsICJidWlsZEhlYWRlcnNGcm9tQXJyYXkiLCAiY2xvbmUiLCAiZW50cmllcyIsICJpbmRleCIsICJtYXRjaEhlYWRlcnMiLCAibW9ja0Rpc3BhdGNoIiwgIm1hdGNoSGVhZGVyTmFtZSIsICJtYXRjaEhlYWRlclZhbHVlIiwgInNhZmVVcmwiLCAicGF0aCIsICJwYXRoU2VnbWVudHMiLCAicXAiLCAibWF0Y2hLZXkiLCAibWV0aG9kIiwgImJvZHkiLCAicGF0aE1hdGNoIiwgIm1ldGhvZE1hdGNoIiwgImJvZHlNYXRjaCIsICJoZWFkZXJzTWF0Y2giLCAiZ2V0UmVzcG9uc2VEYXRhIiwgImRhdGEiLCAiZ2V0TW9ja0Rpc3BhdGNoIiwgIm1vY2tEaXNwYXRjaGVzIiwgImJhc2VQYXRoIiwgInJlc29sdmVkUGF0aCIsICJtYXRjaGVkTW9ja0Rpc3BhdGNoZXMiLCAiY29uc3VtZWQiLCAiYWRkTW9ja0Rpc3BhdGNoIiwgImJhc2VEYXRhIiwgInJlcGx5RGF0YSIsICJuZXdNb2NrRGlzcGF0Y2giLCAiZGVsZXRlTW9ja0Rpc3BhdGNoIiwgImRpc3BhdGNoIiwgImJ1aWxkS2V5IiwgIm9wdHMiLCAicXVlcnkiLCAiZ2VuZXJhdGVLZXlWYWx1ZXMiLCAia2V5cyIsICJyZXN1bHQiLCAibmFtZSIsICJqIiwgImdldFN0YXR1c1RleHQiLCAic3RhdHVzQ29kZSIsICJnZXRSZXNwb25zZSIsICJidWZmZXJzIiwgImhhbmRsZXIiLCAidHJhaWxlcnMiLCAiZXJyb3IiLCAiZGVsYXkiLCAicGVyc2lzdCIsICJ0aW1lc0ludm9rZWQiLCAidGltZXMiLCAiaGFuZGxlUmVwbHkiLCAiX2RhdGEiLCAib3B0c0hlYWRlcnMiLCAibmV3RGF0YSIsICJyZXNwb25zZURhdGEiLCAicmVzcG9uc2VIZWFkZXJzIiwgInJlc3BvbnNlVHJhaWxlcnMiLCAiZXJyIiwgInJlc3VtZSIsICJidWlsZE1vY2tEaXNwYXRjaCIsICJhZ2VudCIsICJvcmlnaW4iLCAib3JpZ2luYWxEaXNwYXRjaCIsICJuZXRDb25uZWN0IiwgImNoZWNrTmV0Q29ubmVjdCIsICJ1cmwiLCAibWF0Y2hlciIsICJidWlsZE1vY2tPcHRpb25zIiwgIm1vY2tPcHRpb25zIiwgInJlcXVpcmVfbW9ja19pbnRlcmNlcHRvciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdldFJlc3BvbnNlRGF0YSIsICJidWlsZEtleSIsICJhZGRNb2NrRGlzcGF0Y2giLCAia0Rpc3BhdGNoZXMiLCAia0Rpc3BhdGNoS2V5IiwgImtEZWZhdWx0SGVhZGVycyIsICJrRGVmYXVsdFRyYWlsZXJzIiwgImtDb250ZW50TGVuZ3RoIiwgImtNb2NrRGlzcGF0Y2giLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiYnVpbGRVUkwiLCAiTW9ja1Njb3BlIiwgIm1vY2tEaXNwYXRjaCIsICJ3YWl0SW5NcyIsICJyZXBlYXRUaW1lcyIsICJNb2NrSW50ZXJjZXB0b3IiLCAib3B0cyIsICJtb2NrRGlzcGF0Y2hlcyIsICJwYXJzZWRVUkwiLCAic3RhdHVzQ29kZSIsICJkYXRhIiwgInJlc3BvbnNlT3B0aW9ucyIsICJyZXNwb25zZURhdGEiLCAiY29udGVudExlbmd0aCIsICJoZWFkZXJzIiwgInRyYWlsZXJzIiwgInJlcGx5UGFyYW1ldGVycyIsICJyZXBseU9wdGlvbnNDYWxsYmFja09yU3RhdHVzQ29kZSIsICJ3cmFwcGVkRGVmYXVsdHNDYWxsYmFjayIsICJyZXNvbHZlZERhdGEiLCAibmV3TW9ja0Rpc3BhdGNoIiwgImRpc3BhdGNoRGF0YSIsICJlcnJvciIsICJyZXF1aXJlX21vY2tfY2xpZW50IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicHJvbWlzaWZ5IiwgIkNsaWVudCIsICJidWlsZE1vY2tEaXNwYXRjaCIsICJrRGlzcGF0Y2hlcyIsICJrTW9ja0FnZW50IiwgImtDbG9zZSIsICJrT3JpZ2luYWxDbG9zZSIsICJrT3JpZ2luIiwgImtPcmlnaW5hbERpc3BhdGNoIiwgImtDb25uZWN0ZWQiLCAiTW9ja0ludGVyY2VwdG9yIiwgIlN5bWJvbHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiTW9ja0NsaWVudCIsICJvcmlnaW4iLCAib3B0cyIsICJyZXF1aXJlX21vY2tfcG9vbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInByb21pc2lmeSIsICJQb29sIiwgImJ1aWxkTW9ja0Rpc3BhdGNoIiwgImtEaXNwYXRjaGVzIiwgImtNb2NrQWdlbnQiLCAia0Nsb3NlIiwgImtPcmlnaW5hbENsb3NlIiwgImtPcmlnaW4iLCAia09yaWdpbmFsRGlzcGF0Y2giLCAia0Nvbm5lY3RlZCIsICJNb2NrSW50ZXJjZXB0b3IiLCAiU3ltYm9scyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJNb2NrUG9vbCIsICJvcmlnaW4iLCAib3B0cyIsICJyZXF1aXJlX3BsdXJhbGl6ZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzaW5ndWxhcnMiLCAicGx1cmFscyIsICJzaW5ndWxhciIsICJwbHVyYWwiLCAiY291bnQiLCAib25lIiwgImtleXMiLCAibm91biIsICJyZXF1aXJlX3BlbmRpbmdfaW50ZXJjZXB0b3JzX2Zvcm1hdHRlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlRyYW5zZm9ybSIsICJDb25zb2xlIiwgIlBFUlNJU1RFTlQiLCAiTk9UX1BFUlNJU1RFTlQiLCAiZGlzYWJsZUNvbG9ycyIsICJjaHVuayIsICJfZW5jIiwgImNiIiwgInBlbmRpbmdJbnRlcmNlcHRvcnMiLCAid2l0aFByZXR0eUhlYWRlcnMiLCAibWV0aG9kIiwgInBhdGgiLCAic3RhdHVzQ29kZSIsICJwZXJzaXN0IiwgInRpbWVzIiwgInRpbWVzSW52b2tlZCIsICJvcmlnaW4iLCAicmVxdWlyZV9tb2NrX2FnZW50IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia0NsaWVudHMiLCAiQWdlbnQiLCAia0FnZW50IiwgImtNb2NrQWdlbnRTZXQiLCAia01vY2tBZ2VudEdldCIsICJrRGlzcGF0Y2hlcyIsICJrSXNNb2NrQWN0aXZlIiwgImtOZXRDb25uZWN0IiwgImtHZXROZXRDb25uZWN0IiwgImtPcHRpb25zIiwgImtGYWN0b3J5IiwgIk1vY2tDbGllbnQiLCAiTW9ja1Bvb2wiLCAibWF0Y2hWYWx1ZSIsICJidWlsZE1vY2tPcHRpb25zIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlVuZGljaUVycm9yIiwgIkRpc3BhdGNoZXIiLCAiUGx1cmFsaXplciIsICJQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIiwgIk1vY2tBZ2VudCIsICJvcHRzIiwgImFnZW50IiwgIm9yaWdpbiIsICJkaXNwYXRjaGVyIiwgImhhbmRsZXIiLCAibWF0Y2hlciIsICJtb2NrT3B0aW9ucyIsICJjbGllbnQiLCAia2V5TWF0Y2hlciIsICJub25FeHBsaWNpdERpc3BhdGNoZXIiLCAibW9ja0FnZW50Q2xpZW50cyIsICJzY29wZSIsICJkaXNwYXRjaCIsICJwZW5kaW5nIiwgInBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIiLCAicGx1cmFsaXplciIsICJyZXF1aXJlX2dsb2JhbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbERpc3BhdGNoZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQWdlbnQiLCAiZ2V0R2xvYmFsRGlzcGF0Y2hlciIsICJzZXRHbG9iYWxEaXNwYXRjaGVyIiwgImFnZW50IiwgInJlcXVpcmVfZGVjb3JhdG9yX2hhbmRsZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIjaGFuZGxlciIsICJoYW5kbGVyIiwgImFyZ3MiLCAicmVxdWlyZV9yZWRpcmVjdCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJlZGlyZWN0SGFuZGxlciIsICJvcHRzIiwgImdsb2JhbE1heFJlZGlyZWN0aW9ucyIsICJkaXNwYXRjaCIsICJoYW5kbGVyIiwgIm1heFJlZGlyZWN0aW9ucyIsICJiYXNlT3B0cyIsICJyZWRpcmVjdEhhbmRsZXIiLCAicmVxdWlyZV9yZXRyeSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlJldHJ5SGFuZGxlciIsICJnbG9iYWxPcHRzIiwgImRpc3BhdGNoIiwgIm9wdHMiLCAiaGFuZGxlciIsICJyZXF1aXJlX2R1bXAiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIlJlcXVlc3RBYm9ydGVkRXJyb3IiLCAiRGVjb3JhdG9ySGFuZGxlciIsICJEdW1wSGFuZGxlciIsICIjbWF4U2l6ZSIsICIjYWJvcnQiLCAiI2R1bXBlZCIsICIjYWJvcnRlZCIsICIjc2l6ZSIsICIjcmVhc29uIiwgIiNoYW5kbGVyIiwgIm1heFNpemUiLCAiaGFuZGxlciIsICJhYm9ydCIsICIjY3VzdG9tQWJvcnQiLCAicmVhc29uIiwgInN0YXR1c0NvZGUiLCAicmF3SGVhZGVycyIsICJyZXN1bWUiLCAic3RhdHVzTWVzc2FnZSIsICJjb250ZW50TGVuZ3RoIiwgImVyciIsICJjaHVuayIsICJ0cmFpbGVycyIsICJjcmVhdGVEdW1wSW50ZXJjZXB0b3IiLCAiZGVmYXVsdE1heFNpemUiLCAiZGlzcGF0Y2giLCAib3B0cyIsICJkdW1wTWF4U2l6ZSIsICJkdW1wSGFuZGxlciIsICJyZXF1aXJlX2RucyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzSVAiLCAibG9va3VwIiwgIkRlY29yYXRvckhhbmRsZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSW5mb3JtYXRpb25hbEVycm9yIiwgIm1heEludCIsICJETlNJbnN0YW5jZSIsICIjbWF4VFRMIiwgIiNtYXhJdGVtcyIsICIjcmVjb3JkcyIsICJvcHRzIiwgIiNkZWZhdWx0TG9va3VwIiwgIiNkZWZhdWx0UGljayIsICJvcmlnaW4iLCAiY2IiLCAiaXBzIiwgIm5ld09wdHMiLCAiZXJyIiwgImFkZHJlc3NlcyIsICJyZWNvcmRzIiwgImlwIiwgInBvcnQiLCAicmVzdWx0cyIsICJhZGRyIiwgImhvc3RuYW1lUmVjb3JkcyIsICJhZmZpbml0eSIsICJvZmZzZXQiLCAiZmFtaWx5IiwgInBvc2l0aW9uIiwgInRpbWVzdGFtcCIsICJyZWNvcmQiLCAiZmFtaWx5UmVjb3JkcyIsICJtZXRhIiwgIkROU0Rpc3BhdGNoSGFuZGxlciIsICIjc3RhdGUiLCAiI29wdHMiLCAiI2Rpc3BhdGNoIiwgIiNoYW5kbGVyIiwgIiNvcmlnaW4iLCAic3RhdGUiLCAiaGFuZGxlciIsICJkaXNwYXRjaCIsICJuZXdPcmlnaW4iLCAiZGlzcGF0Y2hPcHRzIiwgImludGVyY2VwdG9yT3B0cyIsICJkdWFsU3RhY2siLCAiaW5zdGFuY2UiLCAib3JpZ0Rpc3BhdGNoT3B0cyIsICJyZXF1aXJlX2hlYWRlcnMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrQ29uc3RydWN0IiwgImtFbnVtZXJhYmxlUHJvcGVydHkiLCAiaXRlcmF0b3JNaXhpbiIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJpc1ZhbGlkSGVhZGVyVmFsdWUiLCAid2ViaWRsIiwgImFzc2VydCIsICJ1dGlsIiwgImtIZWFkZXJzTWFwIiwgImtIZWFkZXJzU29ydGVkTWFwIiwgImlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZSIsICJjb2RlIiwgImhlYWRlclZhbHVlTm9ybWFsaXplIiwgInBvdGVudGlhbFZhbHVlIiwgImkiLCAiaiIsICJmaWxsIiwgImhlYWRlcnMiLCAib2JqZWN0IiwgImhlYWRlciIsICJhcHBlbmRIZWFkZXIiLCAia2V5cyIsICJuYW1lIiwgInZhbHVlIiwgImdldEhlYWRlcnNHdWFyZCIsICJnZXRIZWFkZXJzTGlzdCIsICJjb21wYXJlSGVhZGVyTmFtZSIsICJhIiwgImIiLCAiSGVhZGVyc0xpc3QiLCAiX0hlYWRlcnNMaXN0IiwgImluaXQiLCAiaXNMb3dlckNhc2UiLCAibG93ZXJjYXNlTmFtZSIsICJleGlzdHMiLCAiZGVsaW1pdGVyIiwgImxvd2VyTmFtZSIsICJjb29raWUiLCAic2l6ZSIsICJhcnJheSIsICJpdGVyYXRvciIsICJmaXJzdFZhbHVlIiwgInJpZ2h0IiwgImxlZnQiLCAicGl2b3QiLCAieCIsICJIZWFkZXJzIiwgIl9IZWFkZXJzIiwgIiNndWFyZCIsICIjaGVhZGVyc0xpc3QiLCAicHJlZml4IiwgImxpc3QiLCAibmFtZXMiLCAiY29va2llcyIsICJkZXB0aCIsICJvcHRpb25zIiwgIm8iLCAiZ3VhcmQiLCAic2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgIlYiLCAiYXJndW1lbnQiLCAicmVxdWlyZV9yZXNwb25zZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkhlYWRlcnMiLCAiSGVhZGVyc0xpc3QiLCAiZmlsbCIsICJnZXRIZWFkZXJzR3VhcmQiLCAic2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgImV4dHJhY3RCb2R5IiwgImNsb25lQm9keSIsICJtaXhpbkJvZHkiLCAiaGFzRmluYWxpemF0aW9uUmVnaXN0cnkiLCAic3RyZWFtUmVnaXN0cnkiLCAiYm9keVVudXNhYmxlIiwgInV0aWwiLCAibm9kZVV0aWwiLCAia0VudW1lcmFibGVQcm9wZXJ0eSIsICJpc1ZhbGlkUmVhc29uUGhyYXNlIiwgImlzQ2FuY2VsbGVkIiwgImlzQWJvcnRlZCIsICJpc0Jsb2JMaWtlIiwgInNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyIsICJpc0Vycm9yTGlrZSIsICJpc29tb3JwaGljRW5jb2RlIiwgInJlbGV2YW50UmVhbG0iLCAicmVkaXJlY3RTdGF0dXNTZXQiLCAibnVsbEJvZHlTdGF0dXMiLCAia1N0YXRlIiwgImtIZWFkZXJzIiwgIndlYmlkbCIsICJGb3JtRGF0YSIsICJVUkxTZXJpYWxpemVyIiwgImtDb25zdHJ1Y3QiLCAiYXNzZXJ0IiwgInR5cGVzIiwgInRleHRFbmNvZGVyIiwgIlJlc3BvbnNlIiwgIl9SZXNwb25zZSIsICJmcm9tSW5uZXJSZXNwb25zZSIsICJtYWtlTmV0d29ya0Vycm9yIiwgImRhdGEiLCAiaW5pdCIsICJieXRlcyIsICJib2R5IiwgInJlc3BvbnNlT2JqZWN0IiwgIm1ha2VSZXNwb25zZSIsICJpbml0aWFsaXplUmVzcG9uc2UiLCAidXJsIiwgInN0YXR1cyIsICJwYXJzZWRVUkwiLCAiZXJyIiwgInZhbHVlIiwgImJvZHlXaXRoVHlwZSIsICJleHRyYWN0ZWRCb2R5IiwgInR5cGUiLCAidXJsTGlzdCIsICJjbG9uZWRSZXNwb25zZSIsICJjbG9uZVJlc3BvbnNlIiwgImRlcHRoIiwgIm9wdGlvbnMiLCAicHJvcGVydGllcyIsICJyZXNwb25zZSIsICJmaWx0ZXJSZXNwb25zZSIsICJuZXdSZXNwb25zZSIsICJyZWFzb24iLCAiaXNFcnJvciIsICJpc05ldHdvcmtFcnJvciIsICJtYWtlRmlsdGVyZWRSZXNwb25zZSIsICJzdGF0ZSIsICJ0YXJnZXQiLCAicCIsICJtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IiLCAiZmV0Y2hQYXJhbXMiLCAiaW5uZXJSZXNwb25zZSIsICJndWFyZCIsICJWIiwgInByZWZpeCIsICJuYW1lIiwgImFyZ3VtZW50IiwgInJlcXVpcmVfZGlzcGF0Y2hlcl93ZWFrcmVmIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia0Nvbm5lY3RlZCIsICJrU2l6ZSIsICJDb21wYXRXZWFrUmVmIiwgInZhbHVlIiwgIkNvbXBhdEZpbmFsaXplciIsICJmaW5hbGl6ZXIiLCAiZGlzcGF0Y2hlciIsICJrZXkiLCAicmVxdWlyZV9yZXF1ZXN0IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXh0cmFjdEJvZHkiLCAibWl4aW5Cb2R5IiwgImNsb25lQm9keSIsICJib2R5VW51c2FibGUiLCAiSGVhZGVycyIsICJmaWxsSGVhZGVycyIsICJIZWFkZXJzTGlzdCIsICJzZXRIZWFkZXJzR3VhcmQiLCAiZ2V0SGVhZGVyc0d1YXJkIiwgInNldEhlYWRlcnNMaXN0IiwgImdldEhlYWRlcnNMaXN0IiwgIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgInV0aWwiLCAibm9kZVV0aWwiLCAiaXNWYWxpZEhUVFBUb2tlbiIsICJzYW1lT3JpZ2luIiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAiZm9yYmlkZGVuTWV0aG9kc1NldCIsICJjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQiLCAicmVmZXJyZXJQb2xpY3kiLCAicmVxdWVzdFJlZGlyZWN0IiwgInJlcXVlc3RNb2RlIiwgInJlcXVlc3RDcmVkZW50aWFscyIsICJyZXF1ZXN0Q2FjaGUiLCAicmVxdWVzdER1cGxleCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIm5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSIsICJub3JtYWxpemVkTWV0aG9kUmVjb3JkcyIsICJrSGVhZGVycyIsICJrU2lnbmFsIiwgImtTdGF0ZSIsICJrRGlzcGF0Y2hlciIsICJ3ZWJpZGwiLCAiVVJMU2VyaWFsaXplciIsICJrQ29uc3RydWN0IiwgImFzc2VydCIsICJnZXRNYXhMaXN0ZW5lcnMiLCAic2V0TWF4TGlzdGVuZXJzIiwgImdldEV2ZW50TGlzdGVuZXJzIiwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCAia0Fib3J0Q29udHJvbGxlciIsICJyZXF1ZXN0RmluYWxpemVyIiwgInNpZ25hbCIsICJhYm9ydCIsICJkZXBlbmRlbnRDb250cm9sbGVyTWFwIiwgImJ1aWxkQWJvcnQiLCAiYWNSZWYiLCAiYWMiLCAiY29udHJvbGxlckxpc3QiLCAicmVmIiwgImN0cmwiLCAicGF0Y2hNZXRob2RXYXJuaW5nIiwgIlJlcXVlc3QiLCAiX1JlcXVlc3QiLCAiaW5wdXQiLCAiaW5pdCIsICJwcmVmaXgiLCAicmVxdWVzdCIsICJmYWxsYmFja01vZGUiLCAiYmFzZVVybCIsICJwYXJzZWRVUkwiLCAiZXJyIiwgIm1ha2VSZXF1ZXN0IiwgIm9yaWdpbiIsICJ3aW5kb3ciLCAiaW5pdEhhc0tleSIsICJyZWZlcnJlciIsICJwYXJzZWRSZWZlcnJlciIsICJtb2RlIiwgIm1ldGhvZCIsICJtYXlCZU5vcm1hbGl6ZWQiLCAidXBwZXJDYXNlIiwgImhlYWRlcnNMaXN0IiwgImhlYWRlcnMiLCAibmFtZSIsICJ2YWx1ZSIsICJpbnB1dEJvZHkiLCAiaW5pdEJvZHkiLCAiZXh0cmFjdGVkQm9keSIsICJjb250ZW50VHlwZSIsICJpbnB1dE9ySW5pdEJvZHkiLCAiZmluYWxCb2R5IiwgImlkZW50aXR5VHJhbnNmb3JtIiwgImNsb25lZFJlcXVlc3QiLCAiY2xvbmVSZXF1ZXN0IiwgImxpc3QiLCAiZnJvbUlubmVyUmVxdWVzdCIsICJkZXB0aCIsICJvcHRpb25zIiwgInByb3BlcnRpZXMiLCAibmV3UmVxdWVzdCIsICJpbm5lclJlcXVlc3QiLCAiZ3VhcmQiLCAiViIsICJhcmd1bWVudCIsICJyZXF1aXJlX2ZldGNoIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibWFrZU5ldHdvcmtFcnJvciIsICJtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IiLCAiZmlsdGVyUmVzcG9uc2UiLCAibWFrZVJlc3BvbnNlIiwgImZyb21Jbm5lclJlc3BvbnNlIiwgIkhlYWRlcnNMaXN0IiwgIlJlcXVlc3QiLCAiY2xvbmVSZXF1ZXN0IiwgInpsaWIiLCAiYnl0ZXNNYXRjaCIsICJtYWtlUG9saWN5Q29udGFpbmVyIiwgImNsb25lUG9saWN5Q29udGFpbmVyIiwgInJlcXVlc3RCYWRQb3J0IiwgIlRBT0NoZWNrIiwgImFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIiLCAicmVzcG9uc2VMb2NhdGlvblVSTCIsICJyZXF1ZXN0Q3VycmVudFVSTCIsICJzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IiwgInRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCIsICJjcmVhdGVPcGFxdWVUaW1pbmdJbmZvIiwgImFwcGVuZEZldGNoTWV0YWRhdGEiLCAiY29yc0NoZWNrIiwgImNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayIsICJkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIiwgImNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIiwgImNyZWF0ZURlZmVycmVkUHJvbWlzZSIsICJpc0Jsb2JMaWtlIiwgInNhbWVPcmlnaW4iLCAiaXNDYW5jZWxsZWQiLCAiaXNBYm9ydGVkIiwgImlzRXJyb3JMaWtlIiwgImZ1bGx5UmVhZEJvZHkiLCAicmVhZGFibGVTdHJlYW1DbG9zZSIsICJpc29tb3JwaGljRW5jb2RlIiwgInVybElzTG9jYWwiLCAidXJsSXNIdHRwSHR0cHNTY2hlbWUiLCAidXJsSGFzSHR0cHNTY2hlbWUiLCAiY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8iLCAic2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZSIsICJidWlsZENvbnRlbnRSYW5nZSIsICJjcmVhdGVJbmZsYXRlIiwgImV4dHJhY3RNaW1lVHlwZSIsICJrU3RhdGUiLCAia0Rpc3BhdGNoZXIiLCAiYXNzZXJ0IiwgInNhZmVseUV4dHJhY3RCb2R5IiwgImV4dHJhY3RCb2R5IiwgInJlZGlyZWN0U3RhdHVzU2V0IiwgIm51bGxCb2R5U3RhdHVzIiwgInNhZmVNZXRob2RzU2V0IiwgInJlcXVlc3RCb2R5SGVhZGVyIiwgInN1YnJlc291cmNlU2V0IiwgIkVFIiwgIlJlYWRhYmxlIiwgInBpcGVsaW5lIiwgImZpbmlzaGVkIiwgImFkZEFib3J0TGlzdGVuZXIiLCAiaXNFcnJvcmVkIiwgImlzUmVhZGFibGUiLCAiYnVmZmVyVG9Mb3dlckNhc2VkSGVhZGVyTmFtZSIsICJkYXRhVVJMUHJvY2Vzc29yIiwgInNlcmlhbGl6ZUFNaW1lVHlwZSIsICJtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIiwgImdldEdsb2JhbERpc3BhdGNoZXIiLCAid2ViaWRsIiwgIlNUQVRVU19DT0RFUyIsICJHRVRfT1JfSEVBRCIsICJkZWZhdWx0VXNlckFnZW50IiwgInJlc29sdmVPYmplY3RVUkwiLCAiRmV0Y2giLCAiZGlzcGF0Y2hlciIsICJyZWFzb24iLCAiZXJyb3IiLCAiaGFuZGxlRmV0Y2hEb25lIiwgInJlc3BvbnNlIiwgImZpbmFsaXplQW5kUmVwb3J0VGltaW5nIiwgImZldGNoIiwgImlucHV0IiwgImluaXQiLCAicCIsICJyZXF1ZXN0T2JqZWN0IiwgImUiLCAicmVxdWVzdCIsICJhYm9ydEZldGNoIiwgInJlc3BvbnNlT2JqZWN0IiwgImxvY2FsbHlBYm9ydGVkIiwgImNvbnRyb2xsZXIiLCAicmVhbFJlc3BvbnNlIiwgImZldGNoaW5nIiwgImluaXRpYXRvclR5cGUiLCAib3JpZ2luYWxVUkwiLCAidGltaW5nSW5mbyIsICJjYWNoZVN0YXRlIiwgIm1hcmtSZXNvdXJjZVRpbWluZyIsICJlcnIiLCAicHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgiLCAicHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkiLCAicHJvY2Vzc1Jlc3BvbnNlIiwgInByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSIsICJwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSIsICJ1c2VQYXJhbGxlbFF1ZXVlIiwgInRhc2tEZXN0aW5hdGlvbiIsICJjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSIsICJjdXJyZW50VGltZSIsICJmZXRjaFBhcmFtcyIsICJtYWluRmV0Y2giLCAicmVjdXJzaXZlIiwgImN1cnJlbnRVUkwiLCAic2NoZW1lRmV0Y2giLCAiaHR0cEZldGNoIiwgImludGVybmFsUmVzcG9uc2UiLCAicHJvY2Vzc0JvZHlFcnJvciIsICJmZXRjaEZpbmFsZSIsICJwcm9jZXNzQm9keSIsICJieXRlcyIsICJzY2hlbWUiLCAiYmxvYlVSTEVudHJ5IiwgImJsb2IiLCAiZnVsbExlbmd0aCIsICJzZXJpYWxpemVkRnVsbExlbmd0aCIsICJ0eXBlIiwgInJhbmdlSGVhZGVyIiwgInJhbmdlVmFsdWUiLCAicmFuZ2VTdGFydCIsICJyYW5nZUVuZCIsICJzbGljZWRCbG9iIiwgInNsaWNlZEJvZHlXaXRoVHlwZSIsICJzZXJpYWxpemVkU2xpY2VkTGVuZ3RoIiwgImNvbnRlbnRSYW5nZSIsICJib2R5V2l0aFR5cGUiLCAiZGF0YVVSTFN0cnVjdCIsICJtaW1lVHlwZSIsICJmaW5hbGl6ZVJlc3BvbnNlIiwgInVuc2FmZUVuZFRpbWUiLCAiYm9keUluZm8iLCAicmVzcG9uc2VTdGF0dXMiLCAicHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayIsICJhY3R1YWxSZXNwb25zZSIsICJodHRwTmV0d29ya09yQ2FjaGVGZXRjaCIsICJodHRwUmVkaXJlY3RGZXRjaCIsICJsb2NhdGlvblVSTCIsICJoZWFkZXJOYW1lIiwgImlzQXV0aGVudGljYXRpb25GZXRjaCIsICJpc05ld0Nvbm5lY3Rpb25GZXRjaCIsICJodHRwRmV0Y2hQYXJhbXMiLCAiaHR0cFJlcXVlc3QiLCAiaHR0cENhY2hlIiwgInJldmFsaWRhdGluZ0ZsYWciLCAiaW5jbHVkZUNyZWRlbnRpYWxzIiwgImNvbnRlbnRMZW5ndGgiLCAiY29udGVudExlbmd0aEhlYWRlclZhbHVlIiwgImZvcndhcmRSZXNwb25zZSIsICJodHRwTmV0d29ya0ZldGNoIiwgImZvcmNlTmV3Q29ubmVjdGlvbiIsICJhYm9ydCIsICJuZXdDb25uZWN0aW9uIiwgInJlcXVlc3RCb2R5IiwgInByb2Nlc3NCb2R5Q2h1bmsiLCAicHJvY2Vzc0VuZE9mQm9keSIsICJib2R5IiwgInN0YXR1cyIsICJzdGF0dXNUZXh0IiwgImhlYWRlcnNMaXN0IiwgInNvY2tldCIsICJkaXNwYXRjaCIsICJpdGVyYXRvciIsICJwdWxsQWxnb3JpdGhtIiwgImNhbmNlbEFsZ29yaXRobSIsICJzdHJlYW0iLCAib25BYm9ydGVkIiwgImlzRmFpbHVyZSIsICJkb25lIiwgInZhbHVlIiwgImJ1ZmZlciIsICJ1cmwiLCAiYWdlbnQiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiY29ubmVjdGlvbiIsICJyYXdIZWFkZXJzIiwgInJlc3VtZSIsICJsb2NhdGlvbiIsICJpIiwgImRlY29kZXJzIiwgIndpbGxGb2xsb3ciLCAiY29udGVudEVuY29kaW5nIiwgImNvZGluZ3MiLCAibWF4Q29udGVudEVuY29kaW5ncyIsICJjb2RpbmciLCAib25FcnJvciIsICJjaHVuayIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3Byb2dyZXNzZXZlbnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3ZWJpZGwiLCAia1N0YXRlIiwgIlByb2dyZXNzRXZlbnQiLCAiX1Byb2dyZXNzRXZlbnQiLCAidHlwZSIsICJldmVudEluaXREaWN0IiwgInJlcXVpcmVfZW5jb2RpbmciLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnZXRFbmNvZGluZyIsICJsYWJlbCIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrU3RhdGUiLCAia0Vycm9yIiwgImtSZXN1bHQiLCAia0Fib3J0ZWQiLCAia0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQiLCAiUHJvZ3Jlc3NFdmVudCIsICJnZXRFbmNvZGluZyIsICJzZXJpYWxpemVBTWltZVR5cGUiLCAicGFyc2VNSU1FVHlwZSIsICJ0eXBlcyIsICJTdHJpbmdEZWNvZGVyIiwgImJ0b2EiLCAic3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyIsICJyZWFkT3BlcmF0aW9uIiwgImZyIiwgImJsb2IiLCAidHlwZSIsICJlbmNvZGluZ05hbWUiLCAicmVhZGVyIiwgImJ5dGVzIiwgImNodW5rUHJvbWlzZSIsICJpc0ZpcnN0Q2h1bmsiLCAiZG9uZSIsICJ2YWx1ZSIsICJmaXJlQVByb2dyZXNzRXZlbnQiLCAicmVzdWx0IiwgInBhY2thZ2VEYXRhIiwgImVycm9yIiwgImUiLCAiZXZlbnQiLCAibWltZVR5cGUiLCAiZGF0YVVSTCIsICJwYXJzZWQiLCAiZGVjb2RlciIsICJjaHVuayIsICJlbmNvZGluZyIsICJkZWNvZGUiLCAiY29tYmluZUJ5dGVTZXF1ZW5jZXMiLCAiYmluYXJ5U3RyaW5nIiwgImlvUXVldWUiLCAiQk9NRW5jb2RpbmciLCAiQk9NU25pZmZpbmciLCAic2xpY2UiLCAic2xpY2VkIiwgImEiLCAiYiIsICJjIiwgInNlcXVlbmNlcyIsICJzaXplIiwgIm9mZnNldCIsICJyZXF1aXJlX2ZpbGVyZWFkZXIiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzIiwgInJlYWRPcGVyYXRpb24iLCAiZmlyZUFQcm9ncmVzc0V2ZW50IiwgImtTdGF0ZSIsICJrRXJyb3IiLCAia1Jlc3VsdCIsICJrRXZlbnRzIiwgImtBYm9ydGVkIiwgIndlYmlkbCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgIkZpbGVSZWFkZXIiLCAiX0ZpbGVSZWFkZXIiLCAiYmxvYiIsICJlbmNvZGluZyIsICJmbiIsICJyZXF1aXJlX3N5bWJvbHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NlcnQiLCAiVVJMU2VyaWFsaXplciIsICJpc1ZhbGlkSGVhZGVyTmFtZSIsICJ1cmxFcXVhbHMiLCAiQSIsICJCIiwgImV4Y2x1ZGVGcmFnbWVudCIsICJzZXJpYWxpemVkQSIsICJzZXJpYWxpemVkQiIsICJnZXRGaWVsZFZhbHVlcyIsICJoZWFkZXIiLCAidmFsdWVzIiwgInZhbHVlIiwgInJlcXVpcmVfY2FjaGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrQ29uc3RydWN0IiwgInVybEVxdWFscyIsICJnZXRGaWVsZFZhbHVlcyIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImlzRGlzdHVyYmVkIiwgIndlYmlkbCIsICJSZXNwb25zZSIsICJjbG9uZVJlc3BvbnNlIiwgImZyb21Jbm5lclJlc3BvbnNlIiwgIlJlcXVlc3QiLCAiZnJvbUlubmVyUmVxdWVzdCIsICJrU3RhdGUiLCAiZmV0Y2hpbmciLCAidXJsSXNIdHRwSHR0cHNTY2hlbWUiLCAiY3JlYXRlRGVmZXJyZWRQcm9taXNlIiwgInJlYWRBbGxCeXRlcyIsICJhc3NlcnQiLCAiQ2FjaGUiLCAiX0NhY2hlIiwgIiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QiLCAicmVxdWVzdCIsICJvcHRpb25zIiwgInByZWZpeCIsICJwIiwgIiNpbnRlcm5hbE1hdGNoQWxsIiwgInJlcXVlc3RzIiwgInJlc3BvbnNlUHJvbWlzZXMiLCAicmVxdWVzdExpc3QiLCAiciIsICJmZXRjaENvbnRyb2xsZXJzIiwgInJlc3BvbnNlUHJvbWlzZSIsICJyZXNwb25zZSIsICJmaWVsZFZhbHVlcyIsICJmaWVsZFZhbHVlIiwgImNvbnRyb2xsZXIiLCAicmVzcG9uc2VzIiwgIm9wZXJhdGlvbnMiLCAiaW5kZXgiLCAib3BlcmF0aW9uIiwgImNhY2hlSm9iUHJvbWlzZSIsICJlcnJvckRhdGEiLCAiI2JhdGNoQ2FjaGVPcGVyYXRpb25zIiwgImUiLCAiaW5uZXJSZXF1ZXN0IiwgImlubmVyUmVzcG9uc2UiLCAiY2xvbmVkUmVzcG9uc2UiLCAiYm9keVJlYWRQcm9taXNlIiwgInJlYWRlciIsICJieXRlcyIsICJyZXF1ZXN0UmVzcG9uc2VzIiwgInByb21pc2UiLCAicmVxdWVzdFJlc3BvbnNlIiwgIiNxdWVyeUNhY2hlIiwgInJlcXVlc3RPYmplY3QiLCAiY2FjaGUiLCAiYmFja3VwQ2FjaGUiLCAiYWRkZWRJdGVtcyIsICJyZXN1bHRMaXN0IiwgImlkeCIsICJyZXF1ZXN0UXVlcnkiLCAidGFyZ2V0U3RvcmFnZSIsICJzdG9yYWdlIiwgImNhY2hlZFJlcXVlc3QiLCAiY2FjaGVkUmVzcG9uc2UiLCAiI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbSIsICJxdWVyeVVSTCIsICJjYWNoZWRVUkwiLCAicmVxdWVzdFZhbHVlIiwgInF1ZXJ5VmFsdWUiLCAibWF4UmVzcG9uc2VzIiwgInJlc3BvbnNlTGlzdCIsICJyZXNwb25zZU9iamVjdCIsICJjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyIsICJyZXF1aXJlX2NhY2hlc3RvcmFnZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtDb25zdHJ1Y3QiLCAiQ2FjaGUiLCAid2ViaWRsIiwgImtFbnVtZXJhYmxlUHJvcGVydHkiLCAiQ2FjaGVTdG9yYWdlIiwgIl9DYWNoZVN0b3JhZ2UiLCAiI2NhY2hlcyIsICJyZXF1ZXN0IiwgIm9wdGlvbnMiLCAiY2FjaGVMaXN0IiwgInJlc3BvbnNlIiwgImNhY2hlTmFtZSIsICJwcmVmaXgiLCAiY2FjaGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc0NUTEV4Y2x1ZGluZ0h0YWIiLCAidmFsdWUiLCAiaSIsICJjb2RlIiwgInZhbGlkYXRlQ29va2llTmFtZSIsICJuYW1lIiwgInZhbGlkYXRlQ29va2llVmFsdWUiLCAibGVuIiwgInZhbGlkYXRlQ29va2llUGF0aCIsICJwYXRoIiwgImlzTGV0dGVyT3JEaWdpdCIsICJ2YWxpZGF0ZUNvb2tpZURvbWFpbiIsICJkb21haW4iLCAibGFiZWxMZW5ndGgiLCAiSU1GRGF5cyIsICJJTUZNb250aHMiLCAiSU1GUGFkZGVkTnVtYmVycyIsICJfIiwgInRvSU1GRGF0ZSIsICJkYXRlIiwgInZhbGlkYXRlQ29va2llTWF4QWdlIiwgIm1heEFnZSIsICJzdHJpbmdpZnkiLCAiY29va2llIiwgIm91dCIsICJwYXJ0IiwgImtleSIsICJ0cmltbWVkS2V5IiwgImpvaW5lZFZhbHVlIiwgInJlcXVpcmVfcGFyc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtYXhOYW1lVmFsdWVQYWlyU2l6ZSIsICJtYXhBdHRyaWJ1dGVWYWx1ZVNpemUiLCAiaXNDVExFeGNsdWRpbmdIdGFiIiwgImNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IiwgImFzc2VydCIsICJwYXJzZVNldENvb2tpZSIsICJoZWFkZXIiLCAibmFtZVZhbHVlUGFpciIsICJ1bnBhcnNlZEF0dHJpYnV0ZXMiLCAibmFtZSIsICJ2YWx1ZSIsICJwb3NpdGlvbiIsICJwYXJzZVVucGFyc2VkQXR0cmlidXRlcyIsICJjb29raWVBdHRyaWJ1dGVMaXN0IiwgImNvb2tpZUF2IiwgImF0dHJpYnV0ZU5hbWUiLCAiYXR0cmlidXRlVmFsdWUiLCAiYXR0cmlidXRlTmFtZUxvd2VyY2FzZSIsICJleHBpcnlUaW1lIiwgImNoYXJDb2RlIiwgImRlbHRhU2Vjb25kcyIsICJjb29raWVEb21haW4iLCAiY29va2llUGF0aCIsICJhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSIsICJyZXF1aXJlX2Nvb2tpZXMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXJzZVNldENvb2tpZSIsICJzdHJpbmdpZnkiLCAid2ViaWRsIiwgIkhlYWRlcnMiLCAiZ2V0Q29va2llcyIsICJoZWFkZXJzIiwgImNvb2tpZSIsICJvdXQiLCAicGllY2UiLCAibmFtZSIsICJ2YWx1ZSIsICJkZWxldGVDb29raWUiLCAiYXR0cmlidXRlcyIsICJwcmVmaXgiLCAic2V0Q29va2llIiwgImdldFNldENvb2tpZXMiLCAiY29va2llcyIsICJwYWlyIiwgInN0ciIsICJyZXF1aXJlX2V2ZW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIndlYmlkbCIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImtDb25zdHJ1Y3QiLCAiTWVzc2FnZVBvcnQiLCAiTWVzc2FnZUV2ZW50IiwgIl9NZXNzYWdlRXZlbnQiLCAiI2V2ZW50SW5pdCIsICJ0eXBlIiwgImV2ZW50SW5pdERpY3QiLCAicHJlZml4IiwgImJ1YmJsZXMiLCAiY2FuY2VsYWJsZSIsICJkYXRhIiwgIm9yaWdpbiIsICJsYXN0RXZlbnRJZCIsICJzb3VyY2UiLCAicG9ydHMiLCAiaW5pdCIsICJtZXNzYWdlRXZlbnQiLCAiY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCIsICJDbG9zZUV2ZW50IiwgIl9DbG9zZUV2ZW50IiwgIkVycm9yRXZlbnQiLCAiX0Vycm9yRXZlbnQiLCAiZXZlbnRJbml0IiwgInJlcXVpcmVfY29uc3RhbnRzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidWlkIiwgInN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAib3Bjb2RlcyIsICJtYXhVbnNpZ25lZDE2Qml0IiwgInBhcnNlclN0YXRlcyIsICJlbXB0eUJ1ZmZlciIsICJzZW5kSGludHMiLCAicmVxdWlyZV9zeW1ib2xzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia1JlYWR5U3RhdGUiLCAia0NvbnRyb2xsZXIiLCAia1Jlc3BvbnNlIiwgImtCaW5hcnlUeXBlIiwgImtXZWJTb2NrZXRVUkwiLCAic3RhdGVzIiwgIm9wY29kZXMiLCAiRXJyb3JFdmVudCIsICJjcmVhdGVGYXN0TWVzc2FnZUV2ZW50IiwgImlzVXRmOCIsICJjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCIsICJyZW1vdmVIVFRQV2hpdGVzcGFjZSIsICJpc0Nvbm5lY3RpbmciLCAid3MiLCAiaXNFc3RhYmxpc2hlZCIsICJpc0Nsb3NpbmciLCAiaXNDbG9zZWQiLCAiZmlyZUV2ZW50IiwgImUiLCAidGFyZ2V0IiwgImV2ZW50RmFjdG9yeSIsICJ0eXBlIiwgImluaXQiLCAiZXZlbnRJbml0RGljdCIsICJldmVudCIsICJ3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQiLCAiZGF0YSIsICJkYXRhRm9yRXZlbnQiLCAidXRmOERlY29kZSIsICJmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiIsICJ0b0FycmF5QnVmZmVyIiwgImJ1ZmZlciIsICJpc1ZhbGlkU3VicHJvdG9jb2wiLCAicHJvdG9jb2wiLCAiaSIsICJjb2RlIiwgImlzVmFsaWRTdGF0dXNDb2RlIiwgInJlYXNvbiIsICJjb250cm9sbGVyIiwgInJlc3BvbnNlIiwgImlzQ29udHJvbEZyYW1lIiwgIm9wY29kZSIsICJpc0NvbnRpbnVhdGlvbkZyYW1lIiwgImlzVGV4dEJpbmFyeUZyYW1lIiwgImlzVmFsaWRPcGNvZGUiLCAicGFyc2VFeHRlbnNpb25zIiwgImV4dGVuc2lvbnMiLCAicG9zaXRpb24iLCAiZXh0ZW5zaW9uTGlzdCIsICJwYWlyIiwgIm5hbWUiLCAidmFsdWUiLCAiaXNWYWxpZENsaWVudFdpbmRvd0JpdHMiLCAiYnl0ZSIsICJudW0iLCAiaGFzSW50bCIsICJmYXRhbERlY29kZXIiLCAicmVxdWlyZV9mcmFtZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm1heFVuc2lnbmVkMTZCaXQiLCAiQlVGRkVSX1NJWkUiLCAiY3J5cHRvIiwgImJ1ZmZlciIsICJidWZJZHgiLCAiX29mZnNldCIsICJfc2l6ZSIsICJpIiwgImdlbmVyYXRlTWFzayIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiZGF0YSIsICJvcGNvZGUiLCAiZnJhbWVEYXRhIiwgIm1hc2tLZXkiLCAiYm9keUxlbmd0aCIsICJwYXlsb2FkTGVuZ3RoIiwgIm9mZnNldCIsICJyZXF1aXJlX2Nvbm5lY3Rpb24iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1aWQiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAiZW1wdHlCdWZmZXIiLCAib3Bjb2RlcyIsICJrUmVhZHlTdGF0ZSIsICJrU2VudENsb3NlIiwgImtCeXRlUGFyc2VyIiwgImtSZWNlaXZlZENsb3NlIiwgImtSZXNwb25zZSIsICJmaXJlRXZlbnQiLCAiZmFpbFdlYnNvY2tldENvbm5lY3Rpb24iLCAiaXNDbG9zaW5nIiwgImlzQ2xvc2VkIiwgImlzRXN0YWJsaXNoZWQiLCAicGFyc2VFeHRlbnNpb25zIiwgImNoYW5uZWxzIiwgIkNsb3NlRXZlbnQiLCAibWFrZVJlcXVlc3QiLCAiZmV0Y2hpbmciLCAiSGVhZGVycyIsICJnZXRIZWFkZXJzTGlzdCIsICJnZXREZWNvZGVTcGxpdCIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiY3J5cHRvIiwgImVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24iLCAidXJsIiwgInByb3RvY29scyIsICJjbGllbnQiLCAid3MiLCAib25Fc3RhYmxpc2giLCAib3B0aW9ucyIsICJyZXF1ZXN0VVJMIiwgInJlcXVlc3QiLCAiaGVhZGVyc0xpc3QiLCAia2V5VmFsdWUiLCAicHJvdG9jb2wiLCAicmVzcG9uc2UiLCAic2VjV1NBY2NlcHQiLCAiZGlnZXN0IiwgInNlY0V4dGVuc2lvbiIsICJleHRlbnNpb25zIiwgInNlY1Byb3RvY29sIiwgIm9uU29ja2V0RGF0YSIsICJvblNvY2tldENsb3NlIiwgIm9uU29ja2V0RXJyb3IiLCAiY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uIiwgImNvZGUiLCAicmVhc29uIiwgInJlYXNvbkJ5dGVMZW5ndGgiLCAiZnJhbWUiLCAiY2h1bmsiLCAid2FzQ2xlYW4iLCAicmVzdWx0IiwgInR5cGUiLCAiaW5pdCIsICJlcnJvciIsICJyZXF1aXJlX3Blcm1lc3NhZ2VfZGVmbGF0ZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNyZWF0ZUluZmxhdGVSYXciLCAiWl9ERUZBVUxUX1dJTkRPV0JJVFMiLCAiaXNWYWxpZENsaWVudFdpbmRvd0JpdHMiLCAiTWVzc2FnZVNpemVFeGNlZWRlZEVycm9yIiwgInRhaWwiLCAia0J1ZmZlciIsICJrTGVuZ3RoIiwgIlBlck1lc3NhZ2VEZWZsYXRlIiwgIiNpbmZsYXRlIiwgIiNvcHRpb25zIiwgIiNtYXhQYXlsb2FkU2l6ZSIsICJleHRlbnNpb25zIiwgIm9wdGlvbnMiLCAiY2h1bmsiLCAiZmluIiwgImNhbGxiYWNrIiwgIndpbmRvd0JpdHMiLCAiZXJyIiwgImRhdGEiLCAiZnVsbCIsICJyZXF1aXJlX3JlY2VpdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiV3JpdGFibGUiLCAiYXNzZXJ0IiwgInBhcnNlclN0YXRlcyIsICJvcGNvZGVzIiwgInN0YXRlcyIsICJlbXB0eUJ1ZmZlciIsICJzZW50Q2xvc2VGcmFtZVN0YXRlIiwgImtSZWFkeVN0YXRlIiwgImtTZW50Q2xvc2UiLCAia1Jlc3BvbnNlIiwgImtSZWNlaXZlZENsb3NlIiwgImNoYW5uZWxzIiwgImlzVmFsaWRTdGF0dXNDb2RlIiwgImlzVmFsaWRPcGNvZGUiLCAiZmFpbFdlYnNvY2tldENvbm5lY3Rpb24iLCAid2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkIiwgInV0ZjhEZWNvZGUiLCAiaXNDb250cm9sRnJhbWUiLCAiaXNUZXh0QmluYXJ5RnJhbWUiLCAiaXNDb250aW51YXRpb25GcmFtZSIsICJXZWJzb2NrZXRGcmFtZVNlbmQiLCAiY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uIiwgIlBlck1lc3NhZ2VEZWZsYXRlIiwgIk1lc3NhZ2VTaXplRXhjZWVkZWRFcnJvciIsICJmYWlsV2Vic29ja2V0Q29ubmVjdGlvbldpdGhDb2RlIiwgIndzIiwgImNvZGUiLCAicmVhc29uIiwgIkJ5dGVQYXJzZXIiLCAiI2J1ZmZlcnMiLCAiI2ZyYWdtZW50c0J5dGVzIiwgIiNieXRlT2Zmc2V0IiwgIiNsb29wIiwgIiNzdGF0ZSIsICIjaW5mbyIsICIjZnJhZ21lbnRzIiwgIiNleHRlbnNpb25zIiwgIiNtYXhGcmFnbWVudHMiLCAiI21heFBheWxvYWRTaXplIiwgImV4dGVuc2lvbnMiLCAib3B0aW9ucyIsICJjaHVuayIsICJfIiwgImNhbGxiYWNrIiwgIiN2YWxpZGF0ZVBheWxvYWRMZW5ndGgiLCAiYnVmZmVyIiwgImZpbiIsICJvcGNvZGUiLCAibWFza2VkIiwgImZyYWdtZW50ZWQiLCAicGF5bG9hZExlbmd0aCIsICJyc3YxIiwgInJzdjIiLCAicnN2MyIsICJ1cHBlciIsICJsb3dlciIsICJib2R5IiwgImVycm9yIiwgImRhdGEiLCAibiIsICJvZmZzZXQiLCAibmV4dCIsICJsZW5ndGgiLCAiZnJhZ21lbnQiLCAiZnJhZ21lbnRzIiwgIm91dHB1dCIsICJjbG9zZUZyYW1lIiwgImVyciIsICJmcmFtZSIsICJyZXF1aXJlX3NlbmRlciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIldlYnNvY2tldEZyYW1lU2VuZCIsICJvcGNvZGVzIiwgInNlbmRIaW50cyIsICJGaXhlZFF1ZXVlIiwgIkZhc3RCdWZmZXIiLCAiU2VuZFF1ZXVlIiwgIiNxdWV1ZSIsICIjcnVubmluZyIsICIjc29ja2V0IiwgInNvY2tldCIsICJpdGVtIiwgImNiIiwgImhpbnQiLCAiZnJhbWUiLCAiY3JlYXRlRnJhbWUiLCAibm9kZSIsICJhYiIsICIjcnVuIiwgInF1ZXVlIiwgImRhdGEiLCAidG9CdWZmZXIiLCAicmVxdWlyZV93ZWJzb2NrZXQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3ZWJpZGwiLCAiVVJMU2VyaWFsaXplciIsICJlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IiwgInN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMiLCAic3RhdGVzIiwgInNlbnRDbG9zZUZyYW1lU3RhdGUiLCAic2VuZEhpbnRzIiwgImtXZWJTb2NrZXRVUkwiLCAia1JlYWR5U3RhdGUiLCAia0NvbnRyb2xsZXIiLCAia0JpbmFyeVR5cGUiLCAia1Jlc3BvbnNlIiwgImtTZW50Q2xvc2UiLCAia0J5dGVQYXJzZXIiLCAiaXNDb25uZWN0aW5nIiwgImlzRXN0YWJsaXNoZWQiLCAiaXNDbG9zaW5nIiwgImlzVmFsaWRTdWJwcm90b2NvbCIsICJmaXJlRXZlbnQiLCAiZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiIsICJjbG9zZVdlYlNvY2tldENvbm5lY3Rpb24iLCAiQnl0ZVBhcnNlciIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImlzQmxvYkxpa2UiLCAiZ2V0R2xvYmFsRGlzcGF0Y2hlciIsICJ0eXBlcyIsICJFcnJvckV2ZW50IiwgIkNsb3NlRXZlbnQiLCAiU2VuZFF1ZXVlIiwgIldlYlNvY2tldCIsICJfV2ViU29ja2V0IiwgIiNldmVudHMiLCAiI2J1ZmZlcmVkQW1vdW50IiwgIiNwcm90b2NvbCIsICIjZXh0ZW5zaW9ucyIsICIjc2VuZFF1ZXVlIiwgInVybCIsICJwcm90b2NvbHMiLCAicHJlZml4IiwgIm9wdGlvbnMiLCAiYmFzZVVSTCIsICJ1cmxSZWNvcmQiLCAiZSIsICJwIiwgImNsaWVudCIsICJyZXNwb25zZSIsICJleHRlbnNpb25zIiwgIiNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCIsICJjb2RlIiwgInJlYXNvbiIsICJyZWFzb25CeXRlTGVuZ3RoIiwgImRhdGEiLCAibGVuZ3RoIiwgImZuIiwgInR5cGUiLCAicGFyc2VkRXh0ZW5zaW9ucyIsICJ3ZWJTb2NrZXRPcHRpb25zIiwgIm1heEZyYWdtZW50cyIsICJtYXhQYXlsb2FkU2l6ZSIsICJwYXJzZXIiLCAib25QYXJzZXJEcmFpbiIsICJvblBhcnNlckVycm9yIiwgInByb3RvY29sIiwgIlYiLCAiYXJndW1lbnQiLCAiZXJyIiwgIm1lc3NhZ2UiLCAicmVxdWlyZV91dGlsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNWYWxpZExhc3RFdmVudElkIiwgInZhbHVlIiwgImlzQVNDSUlOdW1iZXIiLCAiaSIsICJkZWxheSIsICJtcyIsICJyZXNvbHZlIiwgInJlcXVpcmVfZXZlbnRzb3VyY2Vfc3RyZWFtIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVHJhbnNmb3JtIiwgImlzQVNDSUlOdW1iZXIiLCAiaXNWYWxpZExhc3RFdmVudElkIiwgIkJPTSIsICJMRiIsICJDUiIsICJDT0xPTiIsICJTUEFDRSIsICJFdmVudFNvdXJjZVN0cmVhbSIsICJvcHRpb25zIiwgImNodW5rIiwgIl9lbmNvZGluZyIsICJjYWxsYmFjayIsICJsaW5lIiwgImV2ZW50IiwgImNvbG9uUG9zaXRpb24iLCAiZmllbGQiLCAidmFsdWUiLCAidmFsdWVTdGFydCIsICJyZXF1aXJlX2V2ZW50c291cmNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGlwZWxpbmUiLCAiZmV0Y2hpbmciLCAibWFrZVJlcXVlc3QiLCAid2ViaWRsIiwgIkV2ZW50U291cmNlU3RyZWFtIiwgInBhcnNlTUlNRVR5cGUiLCAiY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCIsICJpc05ldHdvcmtFcnJvciIsICJkZWxheSIsICJrRW51bWVyYWJsZVByb3BlcnR5IiwgImVudmlyb25tZW50U2V0dGluZ3NPYmplY3QiLCAiZXhwZXJpbWVudGFsV2FybmVkIiwgImRlZmF1bHRSZWNvbm5lY3Rpb25UaW1lIiwgIkNPTk5FQ1RJTkciLCAiT1BFTiIsICJDTE9TRUQiLCAiQU5PTllNT1VTIiwgIlVTRV9DUkVERU5USUFMUyIsICJFdmVudFNvdXJjZSIsICJfRXZlbnRTb3VyY2UiLCAiI2V2ZW50cyIsICIjdXJsIiwgIiN3aXRoQ3JlZGVudGlhbHMiLCAiI3JlYWR5U3RhdGUiLCAiI3JlcXVlc3QiLCAiI2NvbnRyb2xsZXIiLCAiI2Rpc3BhdGNoZXIiLCAiI3N0YXRlIiwgInVybCIsICJldmVudFNvdXJjZUluaXREaWN0IiwgInByZWZpeCIsICJzZXR0aW5ncyIsICJ1cmxSZWNvcmQiLCAiZSIsICJjb3JzQXR0cmlidXRlU3RhdGUiLCAiaW5pdFJlcXVlc3QiLCAiI2Nvbm5lY3QiLCAiZmV0Y2hQYXJhbXMiLCAicHJvY2Vzc0V2ZW50U291cmNlRW5kT2ZCb2R5IiwgInJlc3BvbnNlIiwgIiNyZWNvbm5lY3QiLCAiY29udGVudFR5cGUiLCAibWltZVR5cGUiLCAiY29udGVudFR5cGVWYWxpZCIsICJldmVudFNvdXJjZVN0cmVhbSIsICJldmVudCIsICJlcnJvciIsICJmbiIsICJjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzIiwgInJlcXVpcmVfdW5kaWNpIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQ2xpZW50IiwgIkRpc3BhdGNoZXIiLCAiUG9vbCIsICJCYWxhbmNlZFBvb2wiLCAiQWdlbnQiLCAiUHJveHlBZ2VudCIsICJFbnZIdHRwUHJveHlBZ2VudCIsICJSZXRyeUFnZW50IiwgImVycm9ycyIsICJ1dGlsIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImFwaSIsICJidWlsZENvbm5lY3RvciIsICJNb2NrQ2xpZW50IiwgIk1vY2tBZ2VudCIsICJNb2NrUG9vbCIsICJtb2NrRXJyb3JzIiwgIlJldHJ5SGFuZGxlciIsICJnZXRHbG9iYWxEaXNwYXRjaGVyIiwgInNldEdsb2JhbERpc3BhdGNoZXIiLCAiRGVjb3JhdG9ySGFuZGxlciIsICJSZWRpcmVjdEhhbmRsZXIiLCAiY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciIsICJtYWtlRGlzcGF0Y2hlciIsICJmbiIsICJ1cmwiLCAib3B0cyIsICJoYW5kbGVyIiwgInBhdGgiLCAiYWdlbnQiLCAiZGlzcGF0Y2hlciIsICJmZXRjaEltcGwiLCAiaW5pdCIsICJvcHRpb25zIiwgImVyciIsICJzZXRHbG9iYWxPcmlnaW4iLCAiZ2V0R2xvYmFsT3JpZ2luIiwgIkNhY2hlU3RvcmFnZSIsICJrQ29uc3RydWN0IiwgImRlbGV0ZUNvb2tpZSIsICJnZXRDb29raWVzIiwgImdldFNldENvb2tpZXMiLCAic2V0Q29va2llIiwgInBhcnNlTUlNRVR5cGUiLCAic2VyaWFsaXplQU1pbWVUeXBlIiwgIkNsb3NlRXZlbnQiLCAiRXJyb3JFdmVudCIsICJNZXNzYWdlRXZlbnQiLCAiRXZlbnRTb3VyY2UiLCAiZXhwb3J0cyIsICJnZXRQcm94eVVybCIsICJjaGVja0J5cGFzcyIsICJyZXFVcmwiLCAidXNpbmdTc2wiLCAicHJveHlWYXIiLCAiRGVjb2RlZFVSTCIsICJyZXFIb3N0IiwgImlzTG9vcGJhY2tBZGRyZXNzIiwgIm5vUHJveHkiLCAicmVxUG9ydCIsICJ1cHBlclJlcUhvc3RzIiwgInVwcGVyTm9Qcm94eUl0ZW0iLCAieCIsICJob3N0IiwgImhvc3RMb3dlciIsICJ1cmwiLCAiYmFzZSIsICJleHBvcnRzIiwgImdldFByb3h5VXJsIiwgImlzSHR0cHMiLCAiaHR0cCIsICJfX2ltcG9ydFN0YXIiLCAiaHR0cHMiLCAicG0iLCAidHVubmVsIiwgInVuZGljaV8xIiwgIkh0dHBDb2RlcyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAic2VydmVyVXJsIiwgInByb3h5VXJsIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgIkh0dHBSZXNwb25zZVJldHJ5Q29kZXMiLCAiUmV0cnlhYmxlSHR0cFZlcmJzIiwgIkV4cG9uZW50aWFsQmFja29mZkNlaWxpbmciLCAiRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlIiwgIkh0dHBDbGllbnRFcnJvciIsICJfSHR0cENsaWVudEVycm9yIiwgIm1lc3NhZ2UiLCAic3RhdHVzQ29kZSIsICJIdHRwQ2xpZW50UmVzcG9uc2UiLCAicmVzb2x2ZSIsICJfX2F3YWl0ZXIiLCAib3V0cHV0IiwgImNodW5rIiwgImNodW5rcyIsICJyZXF1ZXN0VXJsIiwgIkh0dHBDbGllbnQiLCAidXNlckFnZW50IiwgImhhbmRsZXJzIiwgInJlcXVlc3RPcHRpb25zIiwgImFkZGl0aW9uYWxIZWFkZXJzIiwgImRhdGEiLCAidmVyYiIsICJzdHJlYW0iLCAicmVxdWVzdFVybF8xIiwgInJlcyIsICJvYmpfMSIsICJvYmoiLCAiaGVhZGVycyIsICJwYXJzZWRVcmwiLCAiaW5mbyIsICJtYXhUcmllcyIsICJudW1UcmllcyIsICJyZXNwb25zZSIsICJhdXRoZW50aWNhdGlvbkhhbmRsZXIiLCAiaGFuZGxlciIsICJyZWRpcmVjdHNSZW1haW5pbmciLCAicmVkaXJlY3RVcmwiLCAicGFyc2VkUmVkaXJlY3RVcmwiLCAiaGVhZGVyIiwgInJlamVjdCIsICJjYWxsYmFja0ZvclJlc3VsdCIsICJlcnIiLCAib25SZXN1bHQiLCAiY2FsbGJhY2tDYWxsZWQiLCAiaGFuZGxlUmVzdWx0IiwgInJlcSIsICJtc2ciLCAic29ja2V0IiwgInNvY2siLCAibWV0aG9kIiwgInVzaW5nU3NsIiwgImRlZmF1bHRQb3J0IiwgImxvd2VyY2FzZUtleXMiLCAiX2RlZmF1bHQiLCAiY2xpZW50SGVhZGVyIiwgImhlYWRlclZhbHVlIiwgImFkZGl0aW9uYWxWYWx1ZSIsICJhZ2VudCIsICJ1c2VQcm94eSIsICJtYXhTb2NrZXRzIiwgImFnZW50T3B0aW9ucyIsICJ0dW5uZWxBZ2VudCIsICJvdmVySHR0cHMiLCAib3B0aW9ucyIsICJwcm94eUFnZW50IiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgInNhbml0aXplZElkIiwgInJldHJ5TnVtYmVyIiwgIm1zIiwgImRhdGVUaW1lRGVzZXJpYWxpemVyIiwgImtleSIsICJ2YWx1ZSIsICJhIiwgImNvbnRlbnRzIiwgImMiLCAiayIsICJleHBvcnRzIiwgImZvcm1hdCIsICJwYXJzZSIsICJURVhUX1JFR0VYUCIsICJUT0tFTl9SRUdFWFAiLCAiUVVPVEVfUkVHRVhQIiwgIlRZUEVfUkVHRVhQIiwgIk51bGxPYmplY3QiLCAiQyIsICJvYmoiLCAidHlwZSIsICJwYXJhbWV0ZXJzIiwgInJlc3VsdCIsICJwYXJhbSIsICJxc3RyaW5nIiwgImhlYWRlciIsICJvcHRpb25zIiwgImxlbiIsICJpbmRleCIsICJza2lwT1dTIiwgInZhbHVlU3RhcnQiLCAic2tpcFZhbHVlIiwgInZhbHVlRW5kIiwgInRyYWlsaW5nT1dTIiwgInBhcnNlUGFyYW1ldGVycyIsICJTUCIsICJIVEFCIiwgIlNFTUkiLCAiRVEiLCAiRFFVT1RFIiwgIkJTTEFTSCIsICJwYXJhbWV0ZXIiLCAia2V5U3RhcnQiLCAiY29kZSIsICJrZXlFbmQiLCAia2V5IiwgInZhbHVlIiwgInN0ciIsICJjaGFyIiwgInN0YXJ0IiwgImVuZCIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNFTVZFUl9TUEVDX1ZFUlNJT04iLCAiTUFYX1NBRkVfSU5URUdFUiIsICJNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIIiwgIk1BWF9TQUZFX0JVSUxEX0xFTkdUSCIsICJSRUxFQVNFX1RZUEVTIiwgInJlcXVpcmVfZGVidWciLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJkZWJ1ZyIsICJhcmdzIiwgInJlcXVpcmVfcmUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIIiwgIk1BWF9TQUZFX0JVSUxEX0xFTkdUSCIsICJNQVhfTEVOR1RIIiwgImRlYnVnIiwgInJlIiwgInNhZmVSZSIsICJzcmMiLCAic2FmZVNyYyIsICJ0IiwgIlIiLCAiTEVUVEVSREFTSE5VTUJFUiIsICJzYWZlUmVnZXhSZXBsYWNlbWVudHMiLCAibWFrZVNhZmVSZWdleCIsICJ2YWx1ZSIsICJ0b2tlbiIsICJtYXgiLCAiY3JlYXRlVG9rZW4iLCAibmFtZSIsICJpc0dsb2JhbCIsICJzYWZlIiwgImluZGV4IiwgInJlcXVpcmVfcGFyc2Vfb3B0aW9ucyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImxvb3NlT3B0aW9uIiwgImVtcHR5T3B0cyIsICJwYXJzZU9wdGlvbnMiLCAib3B0aW9ucyIsICJyZXF1aXJlX2lkZW50aWZpZXJzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibnVtZXJpYyIsICJjb21wYXJlSWRlbnRpZmllcnMiLCAiYSIsICJiIiwgImFudW0iLCAiYm51bSIsICJyY29tcGFyZUlkZW50aWZpZXJzIiwgInJlcXVpcmVfc2VtdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZGVidWciLCAiTUFYX0xFTkdUSCIsICJNQVhfU0FGRV9JTlRFR0VSIiwgInJlIiwgInQiLCAicGFyc2VPcHRpb25zIiwgImNvbXBhcmVJZGVudGlmaWVycyIsICJpc1ByZXJlbGVhc2VJZGVudGlmaWVyIiwgInByZXJlbGVhc2UiLCAiaWRlbnRpZmllciIsICJpZGVudGlmaWVycyIsICJpIiwgIlNlbVZlciIsICJfU2VtVmVyIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJtIiwgImlkIiwgIm51bSIsICJvdGhlciIsICJhIiwgImIiLCAicmVsZWFzZSIsICJpZGVudGlmaWVyQmFzZSIsICJtYXRjaCIsICJiYXNlIiwgInByZXJlbGVhc2VCYXNlIiwgInJlcXVpcmVfcGFyc2UiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAicGFyc2UiLCAidmVyc2lvbiIsICJvcHRpb25zIiwgInRocm93RXJyb3JzIiwgImVyIiwgInJlcXVpcmVfdmFsaWQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXJzZSIsICJ2YWxpZCIsICJ2ZXJzaW9uIiwgIm9wdGlvbnMiLCAidiIsICJyZXF1aXJlX2NsZWFuIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAiY2xlYW4iLCAidmVyc2lvbiIsICJvcHRpb25zIiwgInMiLCAicmVxdWlyZV9pbmMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAiaW5jIiwgInZlcnNpb24iLCAicmVsZWFzZSIsICJvcHRpb25zIiwgImlkZW50aWZpZXIiLCAiaWRlbnRpZmllckJhc2UiLCAicmVxdWlyZV9kaWZmIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAiZGlmZiIsICJ2ZXJzaW9uMSIsICJ2ZXJzaW9uMiIsICJ2MSIsICJ2MiIsICJjb21wYXJpc29uIiwgInYxSGlnaGVyIiwgImhpZ2hWZXJzaW9uIiwgImxvd1ZlcnNpb24iLCAiaGlnaEhhc1ByZSIsICJwcmVmaXgiLCAicmVxdWlyZV9tYWpvciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJtYWpvciIsICJhIiwgImxvb3NlIiwgInJlcXVpcmVfbWlub3IiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZW1WZXIiLCAibWlub3IiLCAiYSIsICJsb29zZSIsICJyZXF1aXJlX3BhdGNoIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgInBhdGNoIiwgImEiLCAibG9vc2UiLCAicmVxdWlyZV9wcmVyZWxlYXNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGFyc2UiLCAicHJlcmVsZWFzZSIsICJ2ZXJzaW9uIiwgIm9wdGlvbnMiLCAicGFyc2VkIiwgInJlcXVpcmVfY29tcGFyZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJjb21wYXJlIiwgImEiLCAiYiIsICJsb29zZSIsICJyZXF1aXJlX3Jjb21wYXJlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJyY29tcGFyZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9jb21wYXJlX2xvb3NlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJjb21wYXJlTG9vc2UiLCAiYSIsICJiIiwgInJlcXVpcmVfY29tcGFyZV9idWlsZCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJjb21wYXJlQnVpbGQiLCAiYSIsICJiIiwgImxvb3NlIiwgInZlcnNpb25BIiwgInZlcnNpb25CIiwgInJlcXVpcmVfc29ydCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvbXBhcmVCdWlsZCIsICJzb3J0IiwgImxpc3QiLCAibG9vc2UiLCAiYSIsICJiIiwgInJlcXVpcmVfcnNvcnQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlQnVpbGQiLCAicnNvcnQiLCAibGlzdCIsICJsb29zZSIsICJhIiwgImIiLCAicmVxdWlyZV9ndCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvbXBhcmUiLCAiZ3QiLCAiYSIsICJiIiwgImxvb3NlIiwgInJlcXVpcmVfbHQiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImx0IiwgImEiLCAiYiIsICJsb29zZSIsICJyZXF1aXJlX2VxIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29tcGFyZSIsICJlcSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9uZXEiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgIm5lcSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9ndGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImd0ZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9sdGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb21wYXJlIiwgImx0ZSIsICJhIiwgImIiLCAibG9vc2UiLCAicmVxdWlyZV9jbXAiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJlcSIsICJuZXEiLCAiZ3QiLCAiZ3RlIiwgImx0IiwgImx0ZSIsICJjbXAiLCAiYSIsICJvcCIsICJiIiwgImxvb3NlIiwgInJlcXVpcmVfY29lcmNlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgInBhcnNlIiwgInJlIiwgInQiLCAiY29lcmNlIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJtYXRjaCIsICJjb2VyY2VSdGxSZWdleCIsICJuZXh0IiwgIm1ham9yIiwgIm1pbm9yIiwgInBhdGNoIiwgInByZXJlbGVhc2UiLCAiYnVpbGQiLCAicmVxdWlyZV90cnVuY2F0ZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhcnNlIiwgImNvbnN0YW50cyIsICJTZW1WZXIiLCAidHJ1bmNhdGUiLCAidmVyc2lvbiIsICJ0cnVuY2F0aW9uIiwgIm9wdGlvbnMiLCAiY2xvbmVkVmVyc2lvbiIsICJjbG9uZUlucHV0VmVyc2lvbiIsICJkb1RydW5jYXRpb24iLCAidmVyc2lvblN0cmluZ1RvUGFyc2UiLCAiaXNQcmVyZWxlYXNlIiwgInR5cGUiLCAicmVxdWlyZV9scnVjYWNoZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkxSVUNhY2hlIiwgImtleSIsICJ2YWx1ZSIsICJmaXJzdEtleSIsICJyZXF1aXJlX3JhbmdlIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU1BBQ0VfQ0hBUkFDVEVSUyIsICJSYW5nZSIsICJfUmFuZ2UiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJwYXJzZU9wdGlvbnMiLCAiQ29tcGFyYXRvciIsICJyIiwgImMiLCAiZmlyc3QiLCAiaXNOdWxsU2V0IiwgImlzQW55IiwgImkiLCAiY29tcHMiLCAiayIsICJCVUlMRFNUUklQUkUiLCAibWVtb0tleSIsICJGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRSIsICJGTEFHX0xPT1NFIiwgImNhY2hlZCIsICJjYWNoZSIsICJsb29zZSIsICJociIsICJyZSIsICJ0IiwgImh5cGhlblJlcGxhY2UiLCAiZGVidWciLCAiY29tcGFyYXRvclRyaW1SZXBsYWNlIiwgInRpbGRlVHJpbVJlcGxhY2UiLCAiY2FyZXRUcmltUmVwbGFjZSIsICJyYW5nZUxpc3QiLCAiY29tcCIsICJwYXJzZUNvbXBhcmF0b3IiLCAicmVwbGFjZUdURTAiLCAicmFuZ2VNYXAiLCAiY29tcGFyYXRvcnMiLCAicmVzdWx0IiwgInRoaXNDb21wYXJhdG9ycyIsICJpc1NhdGlzZmlhYmxlIiwgInJhbmdlQ29tcGFyYXRvcnMiLCAidGhpc0NvbXBhcmF0b3IiLCAicmFuZ2VDb21wYXJhdG9yIiwgInZlcnNpb24iLCAiU2VtVmVyIiwgInRlc3RTZXQiLCAiTFJVIiwgInNyYyIsICJyZW1haW5pbmdDb21wYXJhdG9ycyIsICJ0ZXN0Q29tcGFyYXRvciIsICJvdGhlckNvbXBhcmF0b3IiLCAicmVwbGFjZUNhcmV0cyIsICJyZXBsYWNlVGlsZGVzIiwgInJlcGxhY2VYUmFuZ2VzIiwgInJlcGxhY2VTdGFycyIsICJpc1giLCAiaWQiLCAiaW52YWxpZFhSYW5nZU9yZGVyIiwgIk0iLCAibSIsICJwIiwgInJlcGxhY2VUaWxkZSIsICJ6IiwgIl8iLCAicHIiLCAicmV0IiwgInJlcGxhY2VDYXJldCIsICJyZXBsYWNlWFJhbmdlIiwgImd0bHQiLCAieE0iLCAieG0iLCAieHAiLCAiYW55WCIsICJpbmNQciIsICIkMCIsICJmcm9tIiwgImZNIiwgImZtIiwgImZwIiwgImZwciIsICJmYiIsICJ0byIsICJ0TSIsICJ0bSIsICJ0cCIsICJ0cHIiLCAic2V0IiwgImFsbG93ZWQiLCAicmVxdWlyZV9jb21wYXJhdG9yIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQU5ZIiwgIkNvbXBhcmF0b3IiLCAiX0NvbXBhcmF0b3IiLCAiY29tcCIsICJvcHRpb25zIiwgInBhcnNlT3B0aW9ucyIsICJkZWJ1ZyIsICJyZSIsICJ0IiwgIm0iLCAiU2VtVmVyIiwgInZlcnNpb24iLCAiY21wIiwgIlJhbmdlIiwgInJlcXVpcmVfc2F0aXNmaWVzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAic2F0aXNmaWVzIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX3RvX2NvbXBhcmF0b3JzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAidG9Db21wYXJhdG9ycyIsICJyYW5nZSIsICJvcHRpb25zIiwgImNvbXAiLCAiYyIsICJyZXF1aXJlX21heF9zYXRpc2Z5aW5nIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgIm1heFNhdGlzZnlpbmciLCAidmVyc2lvbnMiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJtYXgiLCAibWF4U1YiLCAicmFuZ2VPYmoiLCAidiIsICJyZXF1aXJlX21pbl9zYXRpc2Z5aW5nIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgIm1pblNhdGlzZnlpbmciLCAidmVyc2lvbnMiLCAicmFuZ2UiLCAib3B0aW9ucyIsICJtaW4iLCAibWluU1YiLCAicmFuZ2VPYmoiLCAidiIsICJyZXF1aXJlX21pbl92ZXJzaW9uIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2VtVmVyIiwgIlJhbmdlIiwgImd0IiwgIm1pblZlcnNpb24iLCAicmFuZ2UiLCAibG9vc2UiLCAibWludmVyIiwgImkiLCAiY29tcGFyYXRvcnMiLCAic2V0TWluIiwgImNvbXBhcmF0b3IiLCAiY29tcHZlciIsICJyZXF1aXJlX3ZhbGlkIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAidmFsaWRSYW5nZSIsICJyYW5nZSIsICJvcHRpb25zIiwgInJlcXVpcmVfb3V0c2lkZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNlbVZlciIsICJDb21wYXJhdG9yIiwgIkFOWSIsICJSYW5nZSIsICJzYXRpc2ZpZXMiLCAiZ3QiLCAibHQiLCAibHRlIiwgImd0ZSIsICJvdXRzaWRlIiwgInZlcnNpb24iLCAicmFuZ2UiLCAiaGlsbyIsICJvcHRpb25zIiwgImd0Zm4iLCAibHRlZm4iLCAibHRmbiIsICJjb21wIiwgImVjb21wIiwgImkiLCAiY29tcGFyYXRvcnMiLCAiaGlnaCIsICJsb3ciLCAiY29tcGFyYXRvciIsICJyZXF1aXJlX2d0ciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm91dHNpZGUiLCAiZ3RyIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX2x0ciIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm91dHNpZGUiLCAibHRyIiwgInZlcnNpb24iLCAicmFuZ2UiLCAib3B0aW9ucyIsICJyZXF1aXJlX2ludGVyc2VjdHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSYW5nZSIsICJpbnRlcnNlY3RzIiwgInIxIiwgInIyIiwgIm9wdGlvbnMiLCAicmVxdWlyZV9zaW1wbGlmeSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNhdGlzZmllcyIsICJjb21wYXJlIiwgInZlcnNpb25zIiwgInJhbmdlIiwgIm9wdGlvbnMiLCAic2V0IiwgImZpcnN0IiwgInByZXYiLCAidiIsICJhIiwgImIiLCAidmVyc2lvbiIsICJyYW5nZXMiLCAibWluIiwgIm1heCIsICJzaW1wbGlmaWVkIiwgIm9yaWdpbmFsIiwgInJlcXVpcmVfc3Vic2V0IiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUmFuZ2UiLCAiQ29tcGFyYXRvciIsICJBTlkiLCAic2F0aXNmaWVzIiwgImNvbXBhcmUiLCAic3Vic2V0IiwgInN1YiIsICJkb20iLCAib3B0aW9ucyIsICJzYXdOb25OdWxsIiwgIk9VVEVSIiwgInNpbXBsZVN1YiIsICJzaW1wbGVEb20iLCAiaXNTdWIiLCAic2ltcGxlU3Vic2V0IiwgIm1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2UiLCAibWluaW11bVZlcnNpb24iLCAiZXFTZXQiLCAiZ3QiLCAibHQiLCAiYyIsICJoaWdoZXJHVCIsICJsb3dlckxUIiwgImd0bHRDb21wIiwgImVxIiwgImhpZ2hlciIsICJsb3dlciIsICJoYXNEb21MVCIsICJoYXNEb21HVCIsICJuZWVkRG9tTFRQcmUiLCAibmVlZERvbUdUUHJlIiwgImEiLCAiYiIsICJjb21wIiwgInJlcXVpcmVfc2VtdmVyIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaW50ZXJuYWxSZSIsICJjb25zdGFudHMiLCAiU2VtVmVyIiwgImlkZW50aWZpZXJzIiwgInBhcnNlIiwgInZhbGlkIiwgImNsZWFuIiwgImluYyIsICJkaWZmIiwgIm1ham9yIiwgIm1pbm9yIiwgInBhdGNoIiwgInByZXJlbGVhc2UiLCAiY29tcGFyZSIsICJyY29tcGFyZSIsICJjb21wYXJlTG9vc2UiLCAiY29tcGFyZUJ1aWxkIiwgInNvcnQiLCAicnNvcnQiLCAiZ3QiLCAibHQiLCAiZXEiLCAibmVxIiwgImd0ZSIsICJsdGUiLCAiY21wIiwgImNvZXJjZSIsICJ0cnVuY2F0ZSIsICJDb21wYXJhdG9yIiwgIlJhbmdlIiwgInNhdGlzZmllcyIsICJ0b0NvbXBhcmF0b3JzIiwgIm1heFNhdGlzZnlpbmciLCAibWluU2F0aXNmeWluZyIsICJtaW5WZXJzaW9uIiwgInZhbGlkUmFuZ2UiLCAib3V0c2lkZSIsICJndHIiLCAibHRyIiwgImludGVyc2VjdHMiLCAic2ltcGxpZnlSYW5nZSIsICJzdWJzZXQiLCAicHJvY2VzcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgIm9zIiwgInRvQ29tbWFuZFZhbHVlIiwgImlucHV0IiwgInRvQ29tbWFuZFByb3BlcnRpZXMiLCAiYW5ub3RhdGlvblByb3BlcnRpZXMiLCAiaXNzdWVDb21tYW5kIiwgImNvbW1hbmQiLCAicHJvcGVydGllcyIsICJtZXNzYWdlIiwgImNtZCIsICJDb21tYW5kIiwgIkNNRF9TVFJJTkciLCAiQ29tbWFuZCIsICJjb21tYW5kIiwgInByb3BlcnRpZXMiLCAibWVzc2FnZSIsICJjbWRTdHIiLCAiZmlyc3QiLCAia2V5IiwgInZhbCIsICJlc2NhcGVQcm9wZXJ0eSIsICJlc2NhcGVEYXRhIiwgInMiLCAidG9Db21tYW5kVmFsdWUiLCAib3MiLCAiaHR0cCIsICJodHRwcyIsICJnZXRQcm94eVVybCIsICJyZXFVcmwiLCAidXNpbmdTc2wiLCAiY2hlY2tCeXBhc3MiLCAicHJveHlWYXIiLCAiRGVjb2RlZFVSTCIsICJyZXFIb3N0IiwgImlzTG9vcGJhY2tBZGRyZXNzIiwgIm5vUHJveHkiLCAicmVxUG9ydCIsICJ1cHBlclJlcUhvc3RzIiwgInVwcGVyTm9Qcm94eUl0ZW0iLCAieCIsICJob3N0IiwgImhvc3RMb3dlciIsICJ1cmwiLCAiYmFzZSIsICJ0dW5uZWwiLCAiaW1wb3J0X3VuZGljaSIsICJIdHRwQ29kZXMiLCAiSGVhZGVycyIsICJNZWRpYVR5cGVzIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgIkh0dHBDb2RlcyIsICJIdHRwUmVzcG9uc2VSZXRyeUNvZGVzIiwgIlJldHJ5YWJsZUh0dHBWZXJicyIsICJFeHBvbmVudGlhbEJhY2tvZmZDZWlsaW5nIiwgIkV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSIsICJIdHRwQ2xpZW50RXJyb3IiLCAiX0h0dHBDbGllbnRFcnJvciIsICJtZXNzYWdlIiwgInN0YXR1c0NvZGUiLCAiSHR0cENsaWVudFJlc3BvbnNlIiwgInJlc29sdmUiLCAiX19hd2FpdGVyIiwgIm91dHB1dCIsICJjaHVuayIsICJjaHVua3MiLCAiSHR0cENsaWVudCIsICJ1c2VyQWdlbnQiLCAiaGFuZGxlcnMiLCAicmVxdWVzdE9wdGlvbnMiLCAicmVxdWVzdFVybCIsICJhZGRpdGlvbmFsSGVhZGVycyIsICJkYXRhIiwgInZlcmIiLCAic3RyZWFtIiwgInJlcXVlc3RVcmxfMSIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAicmVzIiwgIm9ial8xIiwgIm9iaiIsICJoZWFkZXJzIiwgInBhcnNlZFVybCIsICJpbmZvIiwgIm1heFRyaWVzIiwgIlJldHJ5YWJsZUh0dHBWZXJicyIsICJudW1UcmllcyIsICJyZXNwb25zZSIsICJIdHRwQ29kZXMiLCAiYXV0aGVudGljYXRpb25IYW5kbGVyIiwgImhhbmRsZXIiLCAicmVkaXJlY3RzUmVtYWluaW5nIiwgIkh0dHBSZWRpcmVjdENvZGVzIiwgInJlZGlyZWN0VXJsIiwgInBhcnNlZFJlZGlyZWN0VXJsIiwgImhlYWRlciIsICJIdHRwUmVzcG9uc2VSZXRyeUNvZGVzIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImNhbGxiYWNrRm9yUmVzdWx0IiwgImVyciIsICJvblJlc3VsdCIsICJjYWxsYmFja0NhbGxlZCIsICJoYW5kbGVSZXN1bHQiLCAicmVxIiwgIm1zZyIsICJIdHRwQ2xpZW50UmVzcG9uc2UiLCAic29ja2V0IiwgInNvY2siLCAic2VydmVyVXJsIiwgInByb3h5VXJsIiwgImdldFByb3h5VXJsIiwgIm1ldGhvZCIsICJ1c2luZ1NzbCIsICJodHRwcyIsICJodHRwIiwgImRlZmF1bHRQb3J0IiwgImxvd2VyY2FzZUtleXMiLCAiX2RlZmF1bHQiLCAiY2xpZW50SGVhZGVyIiwgImhlYWRlclZhbHVlIiwgImFkZGl0aW9uYWxWYWx1ZSIsICJhZ2VudCIsICJ1c2VQcm94eSIsICJtYXhTb2NrZXRzIiwgImFnZW50T3B0aW9ucyIsICJ0dW5uZWxBZ2VudCIsICJvdmVySHR0cHMiLCAib3B0aW9ucyIsICJwcm94eUFnZW50IiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgInNhbml0aXplZElkIiwgInJldHJ5TnVtYmVyIiwgIkV4cG9uZW50aWFsQmFja29mZkNlaWxpbmciLCAibXMiLCAiRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlIiwgIl9fYXdhaXRlciIsICJzdGF0dXNDb2RlIiwgImRhdGVUaW1lRGVzZXJpYWxpemVyIiwgImtleSIsICJ2YWx1ZSIsICJhIiwgImNvbnRlbnRzIiwgIkh0dHBDbGllbnRFcnJvciIsICJjIiwgImsiLCAiaW1wb3J0X29zIiwgImltcG9ydF9mcyIsICJhY2Nlc3MiLCAiYXBwZW5kRmlsZSIsICJ3cml0ZUZpbGUiLCAiU1VNTUFSWV9FTlZfVkFSIiwgIlN1bW1hcnkiLCAicGF0aEZyb21FbnYiLCAiU1VNTUFSWV9FTlZfVkFSIiwgImFjY2VzcyIsICJ0YWciLCAiY29udGVudCIsICJhdHRycyIsICJodG1sQXR0cnMiLCAia2V5IiwgInZhbHVlIiwgIm9wdGlvbnMiLCAib3ZlcndyaXRlIiwgImZpbGVQYXRoIiwgIndyaXRlRmlsZSIsICJhcHBlbmRGaWxlIiwgInRleHQiLCAiYWRkRU9MIiwgImNvZGUiLCAibGFuZyIsICJlbGVtZW50IiwgIml0ZW1zIiwgIm9yZGVyZWQiLCAibGlzdEl0ZW1zIiwgIml0ZW0iLCAicm93cyIsICJ0YWJsZUJvZHkiLCAicm93IiwgImNlbGxzIiwgImNlbGwiLCAiaGVhZGVyIiwgImRhdGEiLCAiY29sc3BhbiIsICJyb3dzcGFuIiwgImxhYmVsIiwgInNyYyIsICJhbHQiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImxldmVsIiwgImFsbG93ZWRUYWciLCAiY2l0ZSIsICJocmVmIiwgIl9zdW1tYXJ5IiwgImltcG9ydF9vcyIsICJvcyIsICJldmVudHMiLCAiY2hpbGQiLCAicGF0aCIsICJpbXBvcnRfYXNzZXJ0IiwgInBhdGgiLCAiZnMiLCAicGF0aCIsICJjaG1vZCIsICJjb3B5RmlsZSIsICJsc3RhdCIsICJta2RpciIsICJvcGVuIiwgInJlYWRkaXIiLCAicmVuYW1lIiwgInJtIiwgInJtZGlyIiwgInN0YXQiLCAic3ltbGluayIsICJ1bmxpbmsiLCAiSVNfV0lORE9XUyIsICJSRUFET05MWSIsICJleGlzdHMiLCAiZnNQYXRoIiwgInN0YXQiLCAiZXJyIiwgImlzUm9vdGVkIiwgInAiLCAibm9ybWFsaXplU2VwYXJhdG9ycyIsICJJU19XSU5ET1dTIiwgInRyeUdldEV4ZWN1dGFibGVQYXRoIiwgImZpbGVQYXRoIiwgImV4dGVuc2lvbnMiLCAic3RhdHMiLCAic3RhdCIsICJlcnIiLCAidXBwZXJFeHQiLCAidmFsaWRFeHQiLCAiaXNVbml4RXhlY3V0YWJsZSIsICJvcmlnaW5hbEZpbGVQYXRoIiwgImV4dGVuc2lvbiIsICJkaXJlY3RvcnkiLCAidXBwZXJOYW1lIiwgImFjdHVhbE5hbWUiLCAicmVhZGRpciIsICJybVJGIiwgImlucHV0UGF0aCIsICJJU19XSU5ET1dTIiwgInJtIiwgImVyciIsICJta2RpclAiLCAiZnNQYXRoIiwgIm1rZGlyIiwgIndoaWNoIiwgInRvb2wiLCAiY2hlY2siLCAicmVzdWx0IiwgIm1hdGNoZXMiLCAiZmluZEluUGF0aCIsICJleHRlbnNpb25zIiwgImV4dGVuc2lvbiIsICJpc1Jvb3RlZCIsICJmaWxlUGF0aCIsICJ0cnlHZXRFeGVjdXRhYmxlUGF0aCIsICJkaXJlY3RvcmllcyIsICJwIiwgImRpcmVjdG9yeSIsICJpbXBvcnRfdGltZXJzIiwgIklTX1dJTkRPV1MiLCAiVG9vbFJ1bm5lciIsICJ0b29sUGF0aCIsICJhcmdzIiwgIm9wdGlvbnMiLCAibWVzc2FnZSIsICJub1ByZWZpeCIsICJjbWQiLCAiYSIsICJkYXRhIiwgInN0ckJ1ZmZlciIsICJvbkxpbmUiLCAibiIsICJsaW5lIiwgImVyciIsICJhcmdsaW5lIiwgInN0ciIsICJlbmQiLCAidXBwZXJUb29sUGF0aCIsICJhcmciLCAiY21kU3BlY2lhbENoYXJzIiwgIm5lZWRzUXVvdGVzIiwgImNoYXIiLCAieCIsICJyZXZlcnNlIiwgInF1b3RlSGl0IiwgImkiLCAicmVzdWx0IiwgImlzUm9vdGVkIiwgIndoaWNoIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIl9fYXdhaXRlciIsICJvcHRpb25zTm9uTnVsbCIsICJzdGF0ZSIsICJFeGVjU3RhdGUiLCAiZXhpc3RzIiwgImZpbGVOYW1lIiwgImNwIiwgInN0ZGJ1ZmZlciIsICJlcnJidWZmZXIiLCAiY29kZSIsICJlcnJvciIsICJleGl0Q29kZSIsICJhcmdTdHJpbmdUb0FycmF5IiwgImFyZ1N0cmluZyIsICJpblF1b3RlcyIsICJlc2NhcGVkIiwgImFwcGVuZCIsICJjIiwgIl9FeGVjU3RhdGUiLCAiZXhlYyIsICJjb21tYW5kTGluZSIsICJhcmdzIiwgIm9wdGlvbnMiLCAiY29tbWFuZEFyZ3MiLCAiYXJnU3RyaW5nVG9BcnJheSIsICJ0b29sUGF0aCIsICJUb29sUnVubmVyIiwgInBsYXRmb3JtIiwgIm9zIiwgImFyY2giLCAiRXhpdENvZGUiLCAiZ2V0SW5wdXQiLCAibmFtZSIsICJvcHRpb25zIiwgInZhbCIsICJzZXRGYWlsZWQiLCAibWVzc2FnZSIsICJFeGl0Q29kZSIsICJlcnJvciIsICJpc0RlYnVnIiwgImRlYnVnIiwgImlzc3VlQ29tbWFuZCIsICJwcm9wZXJ0aWVzIiwgInRvQ29tbWFuZFByb3BlcnRpZXMiLCAiaW5mbyIsICJtZXNzYWdlIiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiQ29udGV4dCIsICJwYXRoIiwgIl9hIiwgIl9iIiwgIl9jIiwgInBheWxvYWQiLCAib3duZXIiLCAicmVwbyIsICJodHRwQ2xpZW50IiwgImltcG9ydF91bmRpY2kiLCAiZ2V0QXV0aFN0cmluZyIsICJ0b2tlbiIsICJvcHRpb25zIiwgImdldFByb3h5QWdlbnQiLCAiZGVzdGluYXRpb25VcmwiLCAiZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIiLCAiZ2V0UHJveHlGZXRjaCIsICJodHRwRGlzcGF0Y2hlciIsICJ1cmwiLCAib3B0cyIsICJfX2F3YWl0ZXIiLCAiZ2V0QXBpQmFzZVVybCIsICJnZXRVc2VyQWdlbnRXaXRoT3JjaGVzdHJhdGlvbklkIiwgImJhc2VVc2VyQWdlbnQiLCAib3JjaElkIiwgIl9hIiwgInRhZyIsICJnZXRVc2VyQWdlbnQiLCAicmVnaXN0ZXIiLCAic3RhdGUiLCAibmFtZSIsICJtZXRob2QiLCAib3B0aW9ucyIsICJjYWxsYmFjayIsICJyZWdpc3RlcmVkIiwgImFkZEhvb2siLCAic3RhdGUiLCAia2luZCIsICJuYW1lIiwgImhvb2siLCAib3JpZyIsICJtZXRob2QiLCAib3B0aW9ucyIsICJyZXN1bHQiLCAicmVzdWx0XyIsICJlcnJvciIsICJyZW1vdmVIb29rIiwgInN0YXRlIiwgIm5hbWUiLCAibWV0aG9kIiwgImluZGV4IiwgInJlZ2lzdGVyZWQiLCAiYmluZCIsICJiaW5kYWJsZSIsICJiaW5kQXBpIiwgImhvb2siLCAic3RhdGUiLCAibmFtZSIsICJyZW1vdmVIb29rUmVmIiwgInJlbW92ZUhvb2siLCAia2luZCIsICJhcmdzIiwgImFkZEhvb2siLCAiU2luZ3VsYXIiLCAic2luZ3VsYXJIb29rTmFtZSIsICJzaW5ndWxhckhvb2tTdGF0ZSIsICJzaW5ndWxhckhvb2siLCAicmVnaXN0ZXIiLCAiQ29sbGVjdGlvbiIsICJiZWZvcmVfYWZ0ZXJfaG9va19kZWZhdWx0IiwgIlZFUlNJT04iLCAidXNlckFnZW50IiwgImdldFVzZXJBZ2VudCIsICJERUZBVUxUUyIsICJsb3dlcmNhc2VLZXlzIiwgIm9iamVjdCIsICJuZXdPYmoiLCAia2V5IiwgImlzUGxhaW5PYmplY3QiLCAidmFsdWUiLCAicHJvdG8iLCAiQ3RvciIsICJtZXJnZURlZXAiLCAiZGVmYXVsdHMiLCAib3B0aW9ucyIsICJyZXN1bHQiLCAicmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyIsICJvYmoiLCAibWVyZ2UiLCAicm91dGUiLCAibWV0aG9kIiwgInVybCIsICJtZXJnZWRPcHRpb25zIiwgInByZXZpZXciLCAiYWRkUXVlcnlQYXJhbWV0ZXJzIiwgInBhcmFtZXRlcnMiLCAic2VwYXJhdG9yIiwgIm5hbWVzIiwgIm5hbWUiLCAidXJsVmFyaWFibGVSZWdleCIsICJyZW1vdmVOb25DaGFycyIsICJ2YXJpYWJsZU5hbWUiLCAiZXh0cmFjdFVybFZhcmlhYmxlTmFtZXMiLCAibWF0Y2hlcyIsICJhIiwgImIiLCAib21pdCIsICJrZXlzVG9PbWl0IiwgImVuY29kZVJlc2VydmVkIiwgInN0ciIsICJwYXJ0IiwgImVuY29kZVVucmVzZXJ2ZWQiLCAiYyIsICJlbmNvZGVWYWx1ZSIsICJvcGVyYXRvciIsICJpc0RlZmluZWQiLCAiaXNLZXlPcGVyYXRvciIsICJnZXRWYWx1ZXMiLCAiY29udGV4dCIsICJtb2RpZmllciIsICJ2YWx1ZTIiLCAiayIsICJ0bXAiLCAicGFyc2VVcmwiLCAidGVtcGxhdGUiLCAiZXhwYW5kIiwgIm9wZXJhdG9ycyIsICJfIiwgImV4cHJlc3Npb24iLCAibGl0ZXJhbCIsICJ2YWx1ZXMiLCAidmFyaWFibGUiLCAicGFyc2UiLCAiaGVhZGVycyIsICJib2R5IiwgInVybFZhcmlhYmxlTmFtZXMiLCAib21pdHRlZFBhcmFtZXRlcnMiLCAib3B0aW9uIiwgInJlbWFpbmluZ1BhcmFtZXRlcnMiLCAiZm9ybWF0IiwgInByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciIsICJlbmRwb2ludFdpdGhEZWZhdWx0cyIsICJ3aXRoRGVmYXVsdHMiLCAib2xkRGVmYXVsdHMiLCAibmV3RGVmYXVsdHMiLCAiREVGQVVMVFMyIiwgImVuZHBvaW50MiIsICJlbmRwb2ludCIsICJpbXBvcnRfY29udGVudF90eXBlIiwgImludFJlZ2V4IiwgIm5vaXNlVmFsdWUiLCAib3JpZ2luYWxTdHJpbmdpZnkiLCAib3JpZ2luYWxQYXJzZSIsICJjdXN0b21Gb3JtYXQiLCAiYmlnSW50c1N0cmluZ2lmeSIsICJub2lzZVN0cmluZ2lmeSIsICJpc1Vuc3RyaW5naWZpYWJsZSIsICJ2YWwiLCAiaXNSYXdKU09OIiwgInN0cmluZ2lmeUl0ZXJhdGl2ZWx5IiwgInJvb3RWYWx1ZSIsICJyZXBsYWNlciIsICJzcGFjZVBhcmFtIiwgInNwYWNlIiwgImlzRnVuY3Rpb25SZXBsYWNlciIsICJwcm9wZXJ0eUxpc3QiLCAicHJlcGFyZVZhbCIsICJwYXJlbnQiLCAia2V5IiwgInJvb3RQcm9jZXNzZWQiLCAiaXNSb290UHJpbWl0aXZlIiwgImlzUm9vdE5hdGl2ZVJhd0pTT04iLCAiY2h1bmtzIiwgImxldmVsIiwgInN0YWNrIiwgInZpc2l0ZWQiLCAibm9kZSIsICJpc0RvbmUiLCAiY2hpbGRSYXciLCAiY2hpbGRWYWwiLCAiaXNDb21wbGV4T2JqZWN0IiwgImlzTmF0aXZlUmF3IiwgImsiLCAiSlNPTlN0cmluZ2lmeSIsICJ2YWx1ZSIsICJlcnJvciIsICJjb252ZXJ0ZWRKU09OIiwgImZlYXR1cmVDYWNoZSIsICJpc0NvbnRleHRTb3VyY2VTdXBwb3J0ZWQiLCAicGFyc2VGaW5nZXJwcmludCIsICJyZXN1bHQiLCAiXyIsICJfXyIsICJjb250ZXh0IiwgImNvbnZlcnRNYXJrZWRCaWdJbnRzUmV2aXZlciIsICJ1c2VyUmV2aXZlciIsICJKU09OUGFyc2VWMiIsICJ0ZXh0IiwgInJldml2ZXIiLCAiaXNOdW1iZXIiLCAiaXNPdXRPZkJvdW5kcyIsICJpc0JpZ051bWJlciIsICJpc0ludCIsICJNQVhfSU5UIiwgIk1BWF9ESUdJVFMiLCAic3RyaW5nc09yTGFyZ2VOdW1iZXJzIiwgIm5vaXNlVmFsdWVXaXRoUXVvdGVzIiwgImFwcGx5UmV2aXZlckl0ZXJhdGl2ZWx5IiwgInBhcnNlZCIsICJyb290SG9sZGVyIiwgImtleXMiLCAiaSIsICJzZXJpYWxpemVCaWdJbnRzIiwgIm1hdGNoIiwgImRpZ2l0cyIsICJmcmFjdGlvbmFsIiwgImV4cG9uZW50aWFsIiwgImlzU3RyaW5nIiwgImhhc0ZyYWN0aW9uYWxPckV4cG9uZW50aWFsIiwgImlzTGVzc1RoYW5NYXhTYWZlSW50IiwgIkpTT05QYXJzZSIsICJzZXJpYWxpemVkRGF0YSIsICJSZXF1ZXN0RXJyb3IiLCAibWVzc2FnZSIsICJzdGF0dXNDb2RlIiwgIm9wdGlvbnMiLCAicmVxdWVzdENvcHkiLCAiVkVSU0lPTiIsICJkZWZhdWx0c19kZWZhdWx0IiwgImdldFVzZXJBZ2VudCIsICJpc1BsYWluT2JqZWN0IiwgInZhbHVlIiwgInByb3RvIiwgIkN0b3IiLCAibm9vcCIsICJmZXRjaFdyYXBwZXIiLCAicmVxdWVzdE9wdGlvbnMiLCAiZmV0Y2giLCAibG9nIiwgInBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSIsICJib2R5IiwgIkpTT05TdHJpbmdpZnkiLCAicmVxdWVzdEhlYWRlcnMiLCAibmFtZSIsICJmZXRjaFJlc3BvbnNlIiwgImVycm9yIiwgIm1lc3NhZ2UiLCAicmVxdWVzdEVycm9yIiwgIlJlcXVlc3RFcnJvciIsICJzdGF0dXMiLCAidXJsIiwgInJlc3BvbnNlSGVhZGVycyIsICJrZXkiLCAib2N0b2tpdFJlc3BvbnNlIiwgIm1hdGNoZXMiLCAiZGVwcmVjYXRpb25MaW5rIiwgImdldFJlc3BvbnNlRGF0YSIsICJ0b0Vycm9yTWVzc2FnZSIsICJyZXNwb25zZSIsICJjb250ZW50VHlwZSIsICJtaW1ldHlwZSIsICJpc0pTT05SZXNwb25zZSIsICJ0ZXh0IiwgIkpTT05QYXJzZSIsICJkYXRhIiwgIm9iamVjdERhdGEiLCAic3VmZml4IiwgInYiLCAid2l0aERlZmF1bHRzIiwgIm9sZEVuZHBvaW50IiwgIm5ld0RlZmF1bHRzIiwgImVuZHBvaW50MiIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgImVuZHBvaW50T3B0aW9ucyIsICJyZXF1ZXN0MiIsICJyb3V0ZTIiLCAicGFyYW1ldGVyczIiLCAicmVxdWVzdCIsICJlbmRwb2ludCIsICJWRVJTSU9OIiwgIl9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyIsICJkYXRhIiwgIkdyYXBocWxSZXNwb25zZUVycm9yIiwgInJlcXVlc3QyIiwgImhlYWRlcnMiLCAicmVzcG9uc2UiLCAiTk9OX1ZBUklBQkxFX09QVElPTlMiLCAiRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMiLCAiR0hFU19WM19TVUZGSVhfUkVHRVgiLCAiZ3JhcGhxbCIsICJxdWVyeSIsICJvcHRpb25zIiwgImtleSIsICJwYXJzZWRPcHRpb25zIiwgInJlcXVlc3RPcHRpb25zIiwgInJlc3VsdCIsICJiYXNlVXJsIiwgIndpdGhEZWZhdWx0cyIsICJuZXdEZWZhdWx0cyIsICJuZXdSZXF1ZXN0IiwgImdyYXBocWwyIiwgInJlcXVlc3QiLCAiZ2V0VXNlckFnZW50IiwgIndpdGhDdXN0b21SZXF1ZXN0IiwgImN1c3RvbVJlcXVlc3QiLCAiYjY0dXJsIiwgInNlcCIsICJqd3RSRSIsICJpc0pXVCIsICJhdXRoIiwgInRva2VuIiwgImlzQXBwIiwgImlzSW5zdGFsbGF0aW9uIiwgImlzVXNlclRvU2VydmVyIiwgIndpdGhBdXRob3JpemF0aW9uUHJlZml4IiwgImhvb2siLCAicmVxdWVzdCIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgImVuZHBvaW50IiwgImNyZWF0ZVRva2VuQXV0aCIsICJWRVJTSU9OIiwgIm5vb3AiLCAiY29uc29sZVdhcm4iLCAiY29uc29sZUVycm9yIiwgImNyZWF0ZUxvZ2dlciIsICJsb2dnZXIiLCAidXNlckFnZW50VHJhaWwiLCAiVkVSU0lPTiIsICJnZXRVc2VyQWdlbnQiLCAiT2N0b2tpdCIsICJkZWZhdWx0cyIsICJhcmdzIiwgIm9wdGlvbnMiLCAibmV3UGx1Z2lucyIsICJjdXJyZW50UGx1Z2lucyIsICJwbHVnaW4iLCAiaG9vayIsICJiZWZvcmVfYWZ0ZXJfaG9va19kZWZhdWx0IiwgInJlcXVlc3REZWZhdWx0cyIsICJyZXF1ZXN0IiwgIndpdGhDdXN0b21SZXF1ZXN0IiwgImF1dGhTdHJhdGVneSIsICJvdGhlck9wdGlvbnMiLCAiYXV0aCIsICJjcmVhdGVUb2tlbkF1dGgiLCAiY2xhc3NDb25zdHJ1Y3RvciIsICJpIiwgIlZFUlNJT04iLCAiRW5kcG9pbnRzIiwgImVuZHBvaW50c19kZWZhdWx0IiwgImVuZHBvaW50TWV0aG9kc01hcCIsICJzY29wZSIsICJlbmRwb2ludHMiLCAiZW5kcG9pbnRzX2RlZmF1bHQiLCAibWV0aG9kTmFtZSIsICJlbmRwb2ludCIsICJyb3V0ZSIsICJkZWZhdWx0cyIsICJkZWNvcmF0aW9ucyIsICJtZXRob2QiLCAidXJsIiwgImVuZHBvaW50RGVmYXVsdHMiLCAiaGFuZGxlciIsICJ0YXJnZXQiLCAiZGVzY3JpcHRvciIsICJ2YWx1ZSIsICJvY3Rva2l0IiwgImNhY2hlIiwgImRlY29yYXRlIiwgImVuZHBvaW50c1RvTWV0aG9kcyIsICJuZXdNZXRob2RzIiwgInJlcXVlc3RXaXRoRGVmYXVsdHMiLCAid2l0aERlY29yYXRpb25zIiwgImFyZ3MiLCAib3B0aW9ucyIsICJuZXdTY29wZSIsICJuZXdNZXRob2ROYW1lIiwgIm5hbWUiLCAiYWxpYXMiLCAicmVzdEVuZHBvaW50TWV0aG9kcyIsICJvY3Rva2l0IiwgImVuZHBvaW50c1RvTWV0aG9kcyIsICJWRVJTSU9OIiwgImxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMiLCAiYXBpIiwgIlZFUlNJT04iLCAibm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlIiwgInJlc3BvbnNlIiwgImluY29tcGxldGVSZXN1bHRzIiwgInJlcG9zaXRvcnlTZWxlY3Rpb24iLCAidG90YWxDb3VudCIsICJ0b3RhbENvbW1pdHMiLCAibmFtZXNwYWNlS2V5IiwgImRhdGEiLCAiaXRlcmF0b3IiLCAib2N0b2tpdCIsICJyb3V0ZSIsICJwYXJhbWV0ZXJzIiwgIm9wdGlvbnMiLCAicmVxdWVzdE1ldGhvZCIsICJtZXRob2QiLCAiaGVhZGVycyIsICJ1cmwiLCAibm9ybWFsaXplZFJlc3BvbnNlIiwgInBhcnNlZFVybCIsICJwYXJhbXMiLCAicGFnZSIsICJwZXJfcGFnZSIsICJlcnJvciIsICJwYWdpbmF0ZSIsICJtYXBGbiIsICJnYXRoZXIiLCAicmVzdWx0cyIsICJpdGVyYXRvcjIiLCAicmVzdWx0IiwgImVhcmx5RXhpdCIsICJkb25lIiwgImNvbXBvc2VQYWdpbmF0ZVJlc3QiLCAicGFnaW5hdGVSZXN0IiwgIm9jdG9raXQiLCAicGFnaW5hdGUiLCAiaXRlcmF0b3IiLCAiVkVSU0lPTiIsICJjb250ZXh0IiwgIkNvbnRleHQiLCAiYmFzZVVybCIsICJnZXRBcGlCYXNlVXJsIiwgImRlZmF1bHRzIiwgImdldFByb3h5QWdlbnQiLCAiZ2V0UHJveHlGZXRjaCIsICJHaXRIdWIiLCAiT2N0b2tpdCIsICJyZXN0RW5kcG9pbnRNZXRob2RzIiwgInBhZ2luYXRlUmVzdCIsICJnZXRPY3Rva2l0T3B0aW9ucyIsICJ0b2tlbiIsICJvcHRpb25zIiwgIm9wdHMiLCAiYXV0aCIsICJnZXRBdXRoU3RyaW5nIiwgInVzZXJBZ2VudCIsICJnZXRVc2VyQWdlbnRXaXRoT3JjaGVzdHJhdGlvbklkIiwgImNvbnRleHQiLCAiQ29udGV4dCIsICJnZXRPY3Rva2l0IiwgInRva2VuIiwgIm9wdGlvbnMiLCAiYWRkaXRpb25hbFBsdWdpbnMiLCAiR2l0SHViV2l0aFBsdWdpbnMiLCAiR2l0SHViIiwgImdldE9jdG9raXRPcHRpb25zIiwgImNyeXB0byIsICJmcyIsICJzZW12ZXIiLCAicGF0aCIsICJzZW12ZXIiLCAic3RyZWFtIiwgInV0aWwiLCAiaW1wb3J0X2Fzc2VydCIsICJSZXRyeUhlbHBlciIsICJtYXhBdHRlbXB0cyIsICJtaW5TZWNvbmRzIiwgIm1heFNlY29uZHMiLCAiYWN0aW9uIiwgImlzUmV0cnlhYmxlIiwgImF0dGVtcHQiLCAiZXJyIiwgImluZm8iLCAic2Vjb25kcyIsICJyZXNvbHZlIiwgIkhUVFBFcnJvciIsICJodHRwU3RhdHVzQ29kZSIsICJJU19XSU5ET1dTIiwgIklTX01BQyIsICJ1c2VyQWdlbnQiLCAiZG93bmxvYWRUb29sIiwgInVybCIsICJkZXN0IiwgImF1dGgiLCAiaGVhZGVycyIsICJfZ2V0VGVtcERpcmVjdG9yeSIsICJta2RpclAiLCAiZGVidWciLCAibWF4QXR0ZW1wdHMiLCAibWluU2Vjb25kcyIsICJfZ2V0R2xvYmFsIiwgIm1heFNlY29uZHMiLCAiUmV0cnlIZWxwZXIiLCAiX19hd2FpdGVyIiwgImRvd25sb2FkVG9vbEF0dGVtcHQiLCAiZXJyIiwgImh0dHAiLCAiSHR0cENsaWVudCIsICJyZXNwb25zZSIsICJwaXBlbGluZSIsICJyZWFkU3RyZWFtIiwgInN1Y2NlZWRlZCIsICJybVJGIiwgImV4dHJhY3RUYXIiLCAiZmlsZV8xIiwgImRlc3RfMSIsICJmaWxlIiwgImRlc3QiLCAiZmxhZ3MiLCAiX2NyZWF0ZUV4dHJhY3RGb2xkZXIiLCAiZGVidWciLCAidmVyc2lvbk91dHB1dCIsICJleGVjIiwgImRhdGEiLCAiaXNHbnVUYXIiLCAiYXJncyIsICJpc0RlYnVnIiwgImRlc3RBcmciLCAiZmlsZUFyZyIsICJJU19XSU5ET1dTIiwgImV4dHJhY3RaaXAiLCAiZmlsZSIsICJkZXN0IiwgIl9jcmVhdGVFeHRyYWN0Rm9sZGVyIiwgIklTX1dJTkRPV1MiLCAiZXh0cmFjdFppcFdpbiIsICJleHRyYWN0WmlwTml4IiwgImVzY2FwZWRGaWxlIiwgImVzY2FwZWREZXN0IiwgInB3c2hQYXRoIiwgIndoaWNoIiwgImFyZ3MiLCAiZGVidWciLCAiZXhlYyIsICJwb3dlcnNoZWxsUGF0aCIsICJ1bnppcFBhdGgiLCAiaXNEZWJ1ZyIsICJfY3JlYXRlRXh0cmFjdEZvbGRlciIsICJkZXN0IiwgIl9nZXRUZW1wRGlyZWN0b3J5IiwgIm1rZGlyUCIsICJfZ2V0VGVtcERpcmVjdG9yeSIsICJ0ZW1wRGlyZWN0b3J5IiwgIl9nZXRHbG9iYWwiLCAia2V5IiwgImRlZmF1bHRWYWx1ZSIsICJ2YWx1ZSIsICJyZWxlYXNlRnJhZ21lbnQiLCAib2N0b2tpdCIsICJnZXRPY3Rva2l0IiwgInZlcnNpb24iLCAiZ2V0SW5wdXQiLCAiZ3JhcGhxbFJlcXVlc3QiLCAicmVsZWFzZSIsICJyZWxlYXNlQXNzZXRzIiwgImFzc2V0IiwgIm5hbWUiLCAic2V0RmFpbGVkIiwgInpiQXJjaGl2ZVBhdGgiLCAiZG93bmxvYWRUb29sIiwgInpiRXh0cmFjdGVkRm9sZGVyUGF0aCIsICJleHRyYWN0WmlwIiwgImV4dHJhY3RUYXIiLCAiZXhlYyIsICJwYXRoIl0KfQo= From e152dac29f6cb052082ad0a26733c04ee1ea7a28 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:18:03 -0700 Subject: [PATCH 14/23] Add GitHub token input --- .github/actions/setup-zb/action.yml | 3 +++ .github/actions/setup-zb/dist/main.js | 6 +++--- .github/actions/setup-zb/src/main.ts | 6 +++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/actions/setup-zb/action.yml b/.github/actions/setup-zb/action.yml index fb77ea6..43ff285 100644 --- a/.github/actions/setup-zb/action.yml +++ b/.github/actions/setup-zb/action.yml @@ -4,6 +4,9 @@ author: The zb Authors inputs: zb-version: description: The zb version to download and use. Be sure to enclose this option in single quotation marks. + github-token: + description: Personal access token (PAT) used to get zb release information. + default: ${{ github.token }} runs: using: node24 main: dist/main.js diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index 0b46119..8114393 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -27885,7 +27885,7 @@ var releaseFragment = ` } `; (async () => { - const octokit = getOctokit(""); + const octokit = getOctokit(getInput("github-token", { required: true })); const version = getInput("zb-version"); const graphqlRequest = version ? { query: ` @@ -27898,7 +27898,7 @@ var releaseFragment = ` } ${releaseFragment} - `, + `, tagName: "v" + version } : { query: ` @@ -27911,7 +27911,7 @@ var releaseFragment = ` } ${releaseFragment} - ` + ` }; const graphqlResponse = await octokit.graphql(graphqlRequest); const release = graphqlResponse.repository.release; diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index 3fbbefd..1798284 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -40,7 +40,7 @@ const releaseFragment = `; (async () => { - const octokit = getOctokit(''); + const octokit = getOctokit(core.getInput('github-token', { required: true })); const version = core.getInput('zb-version'); const graphqlRequest = @@ -57,7 +57,7 @@ const releaseFragment = } ${releaseFragment} - `, + `, tagName: 'v' + version, } : { @@ -72,7 +72,7 @@ const releaseFragment = } ${releaseFragment} - `, + `, }; const graphqlResponse = await octokit.graphql<{ repository: { From f31026e2e52e501b42595afa6c022fe0a7123b46 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:23:57 -0700 Subject: [PATCH 15/23] Fix GraphQL query --- .github/actions/setup-zb/dist/main.js | 4 ++-- .github/actions/setup-zb/src/main.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index 8114393..24d97f0 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -27890,7 +27890,7 @@ var releaseFragment = ` const graphqlRequest = version ? { query: ` query releaseAssetsForVersion($tagName: String!) { - repository(owner: "256lights", repo: "zb") { + repository(owner: "256lights", name: "zb") { release(tagName: $tagName) { ...releaseFields } @@ -27903,7 +27903,7 @@ var releaseFragment = ` } : { query: ` query releaseAssetsForLatest { - repository(owner: "256lights", repo: "zb") { + repository(owner: "256lights", name: "zb") { release: latestRelease { ...releaseFields } diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index 1798284..171ba9e 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -49,7 +49,7 @@ const releaseFragment = query: ` query releaseAssetsForVersion($tagName: String!) { - repository(owner: "256lights", repo: "zb") { + repository(owner: "256lights", name: "zb") { release(tagName: $tagName) { ...releaseFields } @@ -64,7 +64,7 @@ const releaseFragment = query: ` query releaseAssetsForLatest { - repository(owner: "256lights", repo: "zb") { + repository(owner: "256lights", name: "zb") { release: latestRelease { ...releaseFields } From cd4e880a4f1e4aa2d01e5a997b3f065811e98afd Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:25:54 -0700 Subject: [PATCH 16/23] Add logging --- .github/actions/setup-zb/dist/main.js | 2 ++ .github/actions/setup-zb/src/main.ts | 3 +++ 2 files changed, 5 insertions(+) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index 24d97f0..572bf54 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -27926,8 +27926,10 @@ var releaseFragment = ` setFailed(`No download found for ${process2.arch}-${process2.platform} version ${release?.tagName || version}`); return; } + info(`Downloading from ${asset.downloadUrl}...`); const zbArchivePath = await downloadTool(asset.downloadUrl); const zbExtractedFolderPath = asset.downloadUrl.endsWith(".zip") ? await extractZip(zbArchivePath) : await extractTar(zbArchivePath); + info(`Running installer...`); await exec(import_node_path.default.join(zbExtractedFolderPath, "install"), ["--single-user", "--no-systemd", "--no-launchd"]); })(); /** diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index 171ba9e..a2e417e 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -92,10 +92,13 @@ const releaseFragment = core.setFailed(`No download found for ${process.arch}-${process.platform} version ${release?.tagName || version}`); return; } + core.info(`Downloading from ${asset.downloadUrl}...`); const zbArchivePath = await downloadTool(asset.downloadUrl); const zbExtractedFolderPath = asset.downloadUrl.endsWith('.zip') ? await extractZip(zbArchivePath) : await extractTar(zbArchivePath); + + core.info(`Running installer...`); await exec(path.join(zbExtractedFolderPath, 'install'), ['--single-user', '--no-systemd', '--no-launchd']); })(); From 25052425f5fb0bdca5bd7d860b9d9c571ec3e3ee Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:30:27 -0700 Subject: [PATCH 17/23] Support .tar.bz2 files --- .github/actions/setup-zb/dist/main.js | 11 ++++++++++- .github/actions/setup-zb/src/main.ts | 14 +++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index 572bf54..19dc5b2 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -27884,6 +27884,15 @@ var releaseFragment = ` } } `; +function extractArchive(file, name) { + if ((name || file).endsWith(".zip")) { + return extractZip(file); + } else if ((name || file).endsWith(".tar.bz2")) { + return extractTar(file, void 0, "xj"); + } else { + return extractTar(file); + } +} (async () => { const octokit = getOctokit(getInput("github-token", { required: true })); const version = getInput("zb-version"); @@ -27928,7 +27937,7 @@ var releaseFragment = ` } info(`Downloading from ${asset.downloadUrl}...`); const zbArchivePath = await downloadTool(asset.downloadUrl); - const zbExtractedFolderPath = asset.downloadUrl.endsWith(".zip") ? await extractZip(zbArchivePath) : await extractTar(zbArchivePath); + const zbExtractedFolderPath = await extractArchive(zbArchivePath); info(`Running installer...`); await exec(import_node_path.default.join(zbExtractedFolderPath, "install"), ["--single-user", "--no-systemd", "--no-launchd"]); })(); diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index a2e417e..6e0c03c 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -39,6 +39,16 @@ const releaseFragment = } `; +function extractArchive(file: string, name?: string): Promise { + if ((name || file).endsWith('.zip')) { + return extractZip(file); + } else if ((name || file).endsWith('.tar.bz2')) { + return extractTar(file, undefined, 'xj'); + } else { + return extractTar(file); + } +} + (async () => { const octokit = getOctokit(core.getInput('github-token', { required: true })); @@ -95,9 +105,7 @@ const releaseFragment = core.info(`Downloading from ${asset.downloadUrl}...`); const zbArchivePath = await downloadTool(asset.downloadUrl); - const zbExtractedFolderPath = asset.downloadUrl.endsWith('.zip') ? - await extractZip(zbArchivePath) : - await extractTar(zbArchivePath); + const zbExtractedFolderPath = await extractArchive(zbArchivePath); core.info(`Running installer...`); await exec(path.join(zbExtractedFolderPath, 'install'), ['--single-user', '--no-systemd', '--no-launchd']); From abd1f4d729c16bf239bebe4bf273bd75ba51649d Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:31:58 -0700 Subject: [PATCH 18/23] Pass asset name to extractArchive --- .github/actions/setup-zb/dist/main.js | 2 +- .github/actions/setup-zb/src/main.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index 19dc5b2..d48991b 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -27937,7 +27937,7 @@ function extractArchive(file, name) { } info(`Downloading from ${asset.downloadUrl}...`); const zbArchivePath = await downloadTool(asset.downloadUrl); - const zbExtractedFolderPath = await extractArchive(zbArchivePath); + const zbExtractedFolderPath = await extractArchive(zbArchivePath, asset.name); info(`Running installer...`); await exec(import_node_path.default.join(zbExtractedFolderPath, "install"), ["--single-user", "--no-systemd", "--no-launchd"]); })(); diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index 6e0c03c..2013d70 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -105,7 +105,7 @@ function extractArchive(file: string, name?: string): Promise { core.info(`Downloading from ${asset.downloadUrl}...`); const zbArchivePath = await downloadTool(asset.downloadUrl); - const zbExtractedFolderPath = await extractArchive(zbArchivePath); + const zbExtractedFolderPath = await extractArchive(zbArchivePath, asset.name); core.info(`Running installer...`); await exec(path.join(zbExtractedFolderPath, 'install'), ['--single-user', '--no-systemd', '--no-launchd']); From 6a8aec66fc70eb21f64e8830d8a5ca65707282a0 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:35:20 -0700 Subject: [PATCH 19/23] Search for install script in archive directory --- .github/actions/setup-zb/dist/main.js | 5 ++++- .github/actions/setup-zb/src/main.ts | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index d48991b..10b5d45 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -27893,6 +27893,9 @@ function extractArchive(file, name) { return extractTar(file); } } +function archiveBaseName(name) { + return name.match(/^(.*)(?:\.(?:zip|tar\.gz|tar\.bz2))?$/)[1]; +} (async () => { const octokit = getOctokit(getInput("github-token", { required: true })); const version = getInput("zb-version"); @@ -27939,7 +27942,7 @@ function extractArchive(file, name) { const zbArchivePath = await downloadTool(asset.downloadUrl); const zbExtractedFolderPath = await extractArchive(zbArchivePath, asset.name); info(`Running installer...`); - await exec(import_node_path.default.join(zbExtractedFolderPath, "install"), ["--single-user", "--no-systemd", "--no-launchd"]); + await exec(import_node_path.default.join(zbExtractedFolderPath, archiveBaseName(asset.name), "install"), ["--single-user", "--no-systemd", "--no-launchd"]); })(); /** * @license diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index 2013d70..e1de931 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -49,6 +49,10 @@ function extractArchive(file: string, name?: string): Promise { } } +function archiveBaseName(name: string): string { + return name.match(/^(.*)(?:\.(?:zip|tar\.gz|tar\.bz2))?$/)![1]; +} + (async () => { const octokit = getOctokit(core.getInput('github-token', { required: true })); @@ -108,5 +112,5 @@ function extractArchive(file: string, name?: string): Promise { const zbExtractedFolderPath = await extractArchive(zbArchivePath, asset.name); core.info(`Running installer...`); - await exec(path.join(zbExtractedFolderPath, 'install'), ['--single-user', '--no-systemd', '--no-launchd']); + await exec(path.join(zbExtractedFolderPath, archiveBaseName(asset.name), 'install'), ['--single-user', '--no-systemd', '--no-launchd']); })(); From 8a91c9d49a88dc9175dac45ee46c0d19cff4bfd6 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:47:43 -0700 Subject: [PATCH 20/23] Fix regex --- .github/actions/setup-zb/dist/main.js | 2 +- .github/actions/setup-zb/src/main.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index 10b5d45..9b784ae 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -27894,7 +27894,7 @@ function extractArchive(file, name) { } } function archiveBaseName(name) { - return name.match(/^(.*)(?:\.(?:zip|tar\.gz|tar\.bz2))?$/)[1]; + return name.match(/^(.*?)(?:\.(?:zip|tar\.gz|tar\.bz2))?$/)[1]; } (async () => { const octokit = getOctokit(getInput("github-token", { required: true })); diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index e1de931..d596417 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -50,7 +50,7 @@ function extractArchive(file: string, name?: string): Promise { } function archiveBaseName(name: string): string { - return name.match(/^(.*)(?:\.(?:zip|tar\.gz|tar\.bz2))?$/)![1]; + return name.match(/^(.*?)(?:\.(?:zip|tar\.gz|tar\.bz2))?$/)![1]; } (async () => { From 1b3f3f1ee3172b9e9f308d7d8121591369b61c42 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 17:53:02 -0700 Subject: [PATCH 21/23] Add zb to PATH --- .github/actions/setup-zb/dist/main.js | 313 +++++++++++++++++--------- .github/actions/setup-zb/src/main.ts | 32 ++- 2 files changed, 236 insertions(+), 109 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index 9b784ae..d55de94 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -1068,14 +1068,14 @@ var require_util = __commonJS({ } const port = url.port != null ? url.port : url.protocol === "https:" ? 443 : 80; let origin = url.origin != null ? url.origin : `${url.protocol || ""}//${url.hostname || ""}:${port}`; - let path6 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; + let path7 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; if (origin[origin.length - 1] === "/") { origin = origin.slice(0, origin.length - 1); } - if (path6 && path6[0] !== "/") { - path6 = `/${path6}`; + if (path7 && path7[0] !== "/") { + path7 = `/${path7}`; } - return new URL(`${origin}${path6}`); + return new URL(`${origin}${path7}`); } if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); @@ -1526,39 +1526,39 @@ var require_diagnostics = __commonJS({ }); diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { const { - request: { method, path: path6, origin } + request: { method, path: path7, origin } } = evt; - debuglog("sending request to %s %s/%s", method, origin, path6); + debuglog("sending request to %s %s/%s", method, origin, path7); }); diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => { const { - request: { method, path: path6, origin }, + request: { method, path: path7, origin }, response: { statusCode } } = evt; debuglog( "received response to %s %s/%s - HTTP %d", method, origin, - path6, + path7, statusCode ); }); diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => { const { - request: { method, path: path6, origin } + request: { method, path: path7, origin } } = evt; - debuglog("trailers received from %s %s/%s", method, origin, path6); + debuglog("trailers received from %s %s/%s", method, origin, path7); }); diagnosticsChannel.channel("undici:request:error").subscribe((evt) => { const { - request: { method, path: path6, origin }, + request: { method, path: path7, origin }, error: error2 } = evt; debuglog( "request to %s %s/%s errored - %s", method, origin, - path6, + path7, error2.message ); }); @@ -1607,9 +1607,9 @@ var require_diagnostics = __commonJS({ }); diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { const { - request: { method, path: path6, origin } + request: { method, path: path7, origin } } = evt; - debuglog("sending request to %s %s/%s", method, origin, path6); + debuglog("sending request to %s %s/%s", method, origin, path7); }); } diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => { @@ -1672,7 +1672,7 @@ var require_request = __commonJS({ var kHandler = /* @__PURE__ */ Symbol("handler"); var Request = class { constructor(origin, { - path: path6, + path: path7, method, body, headers, @@ -1687,11 +1687,11 @@ var require_request = __commonJS({ expectContinue, servername }, handler2) { - if (typeof path6 !== "string") { + if (typeof path7 !== "string") { throw new InvalidArgumentError("path must be a string"); - } else if (path6[0] !== "/" && !(path6.startsWith("http://") || path6.startsWith("https://")) && method !== "CONNECT") { + } else if (path7[0] !== "/" && !(path7.startsWith("http://") || path7.startsWith("https://")) && method !== "CONNECT") { throw new InvalidArgumentError("path must be an absolute URL or start with a slash"); - } else if (invalidPathRegex.test(path6)) { + } else if (invalidPathRegex.test(path7)) { throw new InvalidArgumentError("invalid request path"); } if (typeof method !== "string") { @@ -1757,7 +1757,7 @@ var require_request = __commonJS({ this.completed = false; this.aborted = false; this.upgrade = upgrade || null; - this.path = query ? buildURL(path6, query) : path6; + this.path = query ? buildURL(path7, query) : path7; this.origin = origin; this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent; this.blocking = blocking == null ? false : blocking; @@ -6387,7 +6387,7 @@ var require_client_h1 = __commonJS({ return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; } function writeH1(client, request2) { - const { method, path: path6, host, upgrade, blocking, reset } = request2; + const { method, path: path7, host, upgrade, blocking, reset } = request2; let { body, headers, contentLength } = request2; const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH"; if (util2.isFormDataLike(body)) { @@ -6462,7 +6462,7 @@ var require_client_h1 = __commonJS({ if (blocking) { socket[kBlocking] = true; } - let header = `${method} ${path6} HTTP/1.1\r + let header = `${method} ${path7} HTTP/1.1\r `; if (typeof host === "string") { header += `host: ${host}\r @@ -6988,7 +6988,7 @@ var require_client_h2 = __commonJS({ } function writeH2(client, request2) { const session = client[kHTTP2Session]; - const { method, path: path6, host, upgrade, expectContinue, signal, headers: reqHeaders } = request2; + const { method, path: path7, host, upgrade, expectContinue, signal, headers: reqHeaders } = request2; let { body } = request2; if (upgrade) { util2.errorRequest(client, request2, new Error("Upgrade not supported for H2")); @@ -7055,7 +7055,7 @@ var require_client_h2 = __commonJS({ }); return true; } - headers[HTTP2_HEADER_PATH] = path6; + headers[HTTP2_HEADER_PATH] = path7; headers[HTTP2_HEADER_SCHEME] = "https"; const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; if (body && typeof body.read === "function") { @@ -7408,9 +7408,9 @@ var require_redirect_handler = __commonJS({ return this.handler.onHeaders(statusCode, headers, resume, statusText); } const { origin, pathname, search } = util2.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin))); - const path6 = search ? `${pathname}${search}` : pathname; + const path7 = search ? `${pathname}${search}` : pathname; this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); - this.opts.path = path6; + this.opts.path = path7; this.opts.origin = origin; this.opts.maxRedirections = 0; this.opts.query = null; @@ -8645,10 +8645,10 @@ var require_proxy_agent = __commonJS({ }; const { origin, - path: path6 = "/", + path: path7 = "/", headers = {} } = opts; - opts.path = origin + path6; + opts.path = origin + path7; if (!("host" in headers) && !("Host" in headers)) { const { host } = new URL2(origin); headers.host = host; @@ -10597,20 +10597,20 @@ var require_mock_utils = __commonJS({ } return true; } - function safeUrl(path6) { - if (typeof path6 !== "string") { - return path6; + function safeUrl(path7) { + if (typeof path7 !== "string") { + return path7; } - const pathSegments = path6.split("?"); + const pathSegments = path7.split("?"); if (pathSegments.length !== 2) { - return path6; + return path7; } const qp = new URLSearchParams(pathSegments.pop()); qp.sort(); return [...pathSegments, qp.toString()].join("?"); } - function matchKey(mockDispatch2, { path: path6, method, body, headers }) { - const pathMatch = matchValue(mockDispatch2.path, path6); + function matchKey(mockDispatch2, { path: path7, method, body, headers }) { + const pathMatch = matchValue(mockDispatch2.path, path7); const methodMatch = matchValue(mockDispatch2.method, method); const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true; const headersMatch = matchHeaders(mockDispatch2, headers); @@ -10632,7 +10632,7 @@ var require_mock_utils = __commonJS({ function getMockDispatch(mockDispatches, key) { const basePath = key.query ? buildURL(key.path, key.query) : key.path; const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath; - let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path6 }) => matchValue(safeUrl(path6), resolvedPath)); + let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path7 }) => matchValue(safeUrl(path7), resolvedPath)); if (matchedMockDispatches.length === 0) { throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`); } @@ -10670,9 +10670,9 @@ var require_mock_utils = __commonJS({ } } function buildKey(opts) { - const { path: path6, method, body, headers, query } = opts; + const { path: path7, method, body, headers, query } = opts; return { - path: path6, + path: path7, method, body, headers, @@ -11135,10 +11135,10 @@ var require_pending_interceptors_formatter = __commonJS({ } format(pendingInterceptors) { const withPrettyHeaders = pendingInterceptors.map( - ({ method, path: path6, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ + ({ method, path: path7, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ Method: method, Origin: origin, - Path: path6, + Path: path7, "Status code": statusCode, Persistent: persist ? PERSISTENT : NOT_PERSISTENT, Invocations: timesInvoked, @@ -11901,10 +11901,10 @@ var require_headers = __commonJS({ const lowercaseName = isLowerCase ? name : name.toLowerCase(); const exists2 = this[kHeadersMap].get(lowercaseName); if (exists2) { - const delimiter2 = lowercaseName === "cookie" ? "; " : ", "; + const delimiter3 = lowercaseName === "cookie" ? "; " : ", "; this[kHeadersMap].set(lowercaseName, { name: exists2.name, - value: `${exists2.value}${delimiter2}${value}` + value: `${exists2.value}${delimiter3}${value}` }); } else { this[kHeadersMap].set(lowercaseName, { name, value }); @@ -16019,9 +16019,9 @@ var require_util6 = __commonJS({ } } } - function validateCookiePath(path6) { - for (let i = 0; i < path6.length; ++i) { - const code = path6.charCodeAt(i); + function validateCookiePath(path7) { + for (let i = 0; i < path7.length; ++i) { + const code = path7.charCodeAt(i); if (code < 32 || // exclude CTLs (0-31) code > 126 || // exclude DEL and non-ascii code === 59) { @@ -18752,11 +18752,11 @@ var require_undici = __commonJS({ if (typeof opts.path !== "string") { throw new InvalidArgumentError("invalid opts.path"); } - let path6 = opts.path; + let path7 = opts.path; if (!opts.path.startsWith("/")) { - path6 = `/${path6}`; + path7 = `/${path7}`; } - url = new URL(util2.parseOrigin(url).origin + path6); + url = new URL(util2.parseOrigin(url).origin + path7); } else { if (!opts) { opts = typeof url === "object" ? url : {}; @@ -18949,7 +18949,7 @@ var require_lib = __commonJS({ return result; }; })(); - var __awaiter10 = exports2 && exports2.__awaiter || function(thisArg, _arguments, P, generator) { + var __awaiter11 = exports2 && exports2.__awaiter || function(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve2) { resolve2(value); @@ -19057,8 +19057,8 @@ var require_lib = __commonJS({ this.message = message; } readBody() { - return __awaiter10(this, void 0, void 0, function* () { - return new Promise((resolve2) => __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter11(this, void 0, void 0, function* () { let output = Buffer.alloc(0); this.message.on("data", (chunk) => { output = Buffer.concat([output, chunk]); @@ -19070,8 +19070,8 @@ var require_lib = __commonJS({ }); } readBodyBuffer() { - return __awaiter10(this, void 0, void 0, function* () { - return new Promise((resolve2) => __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter11(this, void 0, void 0, function* () { const chunks = []; this.message.on("data", (chunk) => { chunks.push(chunk); @@ -19127,42 +19127,42 @@ var require_lib = __commonJS({ } } options(requestUrl, additionalHeaders) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { return this.request("OPTIONS", requestUrl, null, additionalHeaders || {}); }); } get(requestUrl, additionalHeaders) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { return this.request("GET", requestUrl, null, additionalHeaders || {}); }); } del(requestUrl, additionalHeaders) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { return this.request("DELETE", requestUrl, null, additionalHeaders || {}); }); } post(requestUrl, data, additionalHeaders) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { return this.request("POST", requestUrl, data, additionalHeaders || {}); }); } patch(requestUrl, data, additionalHeaders) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { return this.request("PATCH", requestUrl, data, additionalHeaders || {}); }); } put(requestUrl, data, additionalHeaders) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { return this.request("PUT", requestUrl, data, additionalHeaders || {}); }); } head(requestUrl, additionalHeaders) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { return this.request("HEAD", requestUrl, null, additionalHeaders || {}); }); } sendStream(verb, requestUrl, stream2, additionalHeaders) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { return this.request(verb, requestUrl, stream2, additionalHeaders); }); } @@ -19171,14 +19171,14 @@ var require_lib = __commonJS({ * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise */ getJson(requestUrl_1) { - return __awaiter10(this, arguments, void 0, function* (requestUrl, additionalHeaders = {}) { + return __awaiter11(this, arguments, void 0, function* (requestUrl, additionalHeaders = {}) { additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); const res = yield this.get(requestUrl, additionalHeaders); return this._processResponse(res, this.requestOptions); }); } postJson(requestUrl_1, obj_1) { - return __awaiter10(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + return __awaiter11(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { const data = JSON.stringify(obj, null, 2); additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); additionalHeaders[Headers2.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes2.ApplicationJson); @@ -19187,7 +19187,7 @@ var require_lib = __commonJS({ }); } putJson(requestUrl_1, obj_1) { - return __awaiter10(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + return __awaiter11(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { const data = JSON.stringify(obj, null, 2); additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); additionalHeaders[Headers2.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes2.ApplicationJson); @@ -19196,7 +19196,7 @@ var require_lib = __commonJS({ }); } patchJson(requestUrl_1, obj_1) { - return __awaiter10(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + return __awaiter11(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { const data = JSON.stringify(obj, null, 2); additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); additionalHeaders[Headers2.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes2.ApplicationJson); @@ -19210,7 +19210,7 @@ var require_lib = __commonJS({ * Prefer get, del, post and patch */ request(verb, requestUrl, data, headers) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { if (this._disposed) { throw new Error("Client has already been disposed."); } @@ -19284,7 +19284,7 @@ var require_lib = __commonJS({ * @param data */ requestRaw(info2, data) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { return new Promise((resolve2, reject) => { function callbackForResult(err, res) { if (err) { @@ -19533,15 +19533,15 @@ var require_lib = __commonJS({ return baseUserAgent; } _performExponentialBackoff(retryNumber) { - return __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { retryNumber = Math.min(ExponentialBackoffCeiling2, retryNumber); const ms = ExponentialBackoffTimeSlice2 * Math.pow(2, retryNumber); return new Promise((resolve2) => setTimeout(() => resolve2(), ms)); }); } _processResponse(res, options) { - return __awaiter10(this, void 0, void 0, function* () { - return new Promise((resolve2, reject) => __awaiter10(this, void 0, void 0, function* () { + return __awaiter11(this, void 0, void 0, function* () { + return new Promise((resolve2, reject) => __awaiter11(this, void 0, void 0, function* () { const statusCode = res.message.statusCode || 0; const response = { statusCode, @@ -21725,7 +21725,8 @@ var require_semver2 = __commonJS({ }); // src/main.ts -var process2 = __toESM(require("node:process")); +var import_promises = __toESM(require("node:fs/promises")); +var import_node_process = __toESM(require("node:process")); var import_node_path = __toESM(require("node:path")); // node_modules/@actions/core/lib/command.js @@ -21759,6 +21760,9 @@ function issueCommand(command, properties, message) { const cmd = new Command(command, properties, message); process.stdout.write(cmd.toString() + os.EOL); } +function issue(name, message = "") { + issueCommand(name, {}, message); +} var CMD_STRING = "::"; var Command = class { constructor(command, properties, message) { @@ -21799,8 +21803,25 @@ function escapeProperty(s) { return toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/:/g, "%3A").replace(/,/g, "%2C"); } +// node_modules/@actions/core/lib/file-command.js +var fs = __toESM(require("fs"), 1); +var os2 = __toESM(require("os"), 1); +function issueFileCommand(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, `${toCommandValue(message)}${os2.EOL}`, { + encoding: "utf8" + }); +} + // node_modules/@actions/core/lib/core.js -var os4 = __toESM(require("os"), 1); +var os5 = __toESM(require("os"), 1); +var path4 = __toESM(require("path"), 1); // node_modules/@actions/http-client/lib/index.js var http = __toESM(require("http"), 1); @@ -22798,7 +22819,7 @@ var _summary = new Summary(); var import_os2 = __toESM(require("os"), 1); // node_modules/@actions/exec/lib/toolrunner.js -var os2 = __toESM(require("os"), 1); +var os3 = __toESM(require("os"), 1); var events = __toESM(require("events"), 1); var child = __toESM(require("child_process"), 1); var path3 = __toESM(require("path"), 1); @@ -22808,7 +22829,7 @@ var import_assert = require("assert"); var path2 = __toESM(require("path"), 1); // node_modules/@actions/io/lib/io-util.js -var fs = __toESM(require("fs"), 1); +var fs2 = __toESM(require("fs"), 1); var path = __toESM(require("path"), 1); var __awaiter3 = function(thisArg, _arguments, P, generator) { function adopt(value) { @@ -22837,9 +22858,9 @@ var __awaiter3 = function(thisArg, _arguments, P, generator) { step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var { chmod, copyFile, lstat, mkdir, open, readdir, rename, rm, rmdir, stat, symlink, unlink } = fs.promises; +var { chmod, copyFile, lstat, mkdir, open, readdir, rename, rm, rmdir, stat, symlink, unlink } = fs2.promises; var IS_WINDOWS = process.platform === "win32"; -var READONLY = fs.constants.O_RDONLY; +var READONLY = fs2.constants.O_RDONLY; function exists(fsPath) { return __awaiter3(this, void 0, void 0, function* () { try { @@ -23128,12 +23149,12 @@ var ToolRunner = class extends events.EventEmitter { _processLineBuffer(data, strBuffer, onLine) { try { let s = strBuffer + data.toString(); - let n = s.indexOf(os2.EOL); + let n = s.indexOf(os3.EOL); while (n > -1) { const line = s.substring(0, n); onLine(line); - s = s.substring(n + os2.EOL.length); - n = s.indexOf(os2.EOL); + s = s.substring(n + os3.EOL.length); + n = s.indexOf(os3.EOL); } return s; } catch (err) { @@ -23302,7 +23323,7 @@ var ToolRunner = class extends events.EventEmitter { } const optionsNonNull = this._cloneExecOptions(this.options); if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os2.EOL); + optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os3.EOL); } const state = new ExecState(optionsNonNull, this.toolPath); state.on("debug", (message) => { @@ -23543,11 +23564,47 @@ var platform = import_os2.default.platform(); var arch = import_os2.default.arch(); // node_modules/@actions/core/lib/core.js +var __awaiter7 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; var ExitCode; (function(ExitCode2) { ExitCode2[ExitCode2["Success"] = 0] = "Success"; ExitCode2[ExitCode2["Failure"] = 1] = "Failure"; })(ExitCode || (ExitCode = {})); +function addPath(inputPath) { + const filePath = process.env["GITHUB_PATH"] || ""; + if (filePath) { + issueFileCommand("PATH", inputPath); + } else { + issueCommand("add-path", {}, inputPath); + } + process.env["PATH"] = `${inputPath}${path4.delimiter}${process.env["PATH"]}`; +} function getInput(name, options) { const val = process.env[`INPUT_${name.replace(/ /g, "_").toUpperCase()}`] || ""; if (options && options.required && !val) { @@ -23572,7 +23629,25 @@ function error(message, properties = {}) { issueCommand("error", toCommandProperties(properties), message instanceof Error ? message.toString() : message); } function info(message) { - process.stdout.write(message + os4.EOL); + process.stdout.write(message + os5.EOL); +} +function startGroup(name) { + issue("group", name); +} +function endGroup() { + issue("endgroup"); +} +function group(name, fn) { + return __awaiter7(this, void 0, void 0, function* () { + startGroup(name); + let result; + try { + result = yield fn(); + } finally { + endGroup(); + } + return result; + }); } // node_modules/@actions/github/lib/context.js @@ -23589,8 +23664,8 @@ var Context = class { if ((0, import_fs2.existsSync)(process.env.GITHUB_EVENT_PATH)) { this.payload = JSON.parse((0, import_fs2.readFileSync)(process.env.GITHUB_EVENT_PATH, { encoding: "utf8" })); } else { - const path6 = process.env.GITHUB_EVENT_PATH; - process.stdout.write(`GITHUB_EVENT_PATH ${path6} does not exist${import_os3.EOL}`); + const path7 = process.env.GITHUB_EVENT_PATH; + process.stdout.write(`GITHUB_EVENT_PATH ${path7} does not exist${import_os3.EOL}`); } } this.eventName = process.env.GITHUB_EVENT_NAME; @@ -23629,7 +23704,7 @@ var Context = class { // node_modules/@actions/github/lib/internal/utils.js var httpClient = __toESM(require_lib(), 1); var import_undici2 = __toESM(require_undici(), 1); -var __awaiter7 = function(thisArg, _arguments, P, generator) { +var __awaiter8 = function(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve2) { resolve2(value); @@ -23674,7 +23749,7 @@ function getProxyAgentDispatcher(destinationUrl) { } function getProxyFetch(destinationUrl) { const httpDispatcher = getProxyAgentDispatcher(destinationUrl); - const proxyFetch = (url, opts) => __awaiter7(this, void 0, void 0, function* () { + const proxyFetch = (url, opts) => __awaiter8(this, void 0, void 0, function* () { return (0, import_undici2.fetch)(url, Object.assign(Object.assign({}, opts), { dispatcher: httpDispatcher })); }); return proxyFetch; @@ -27555,20 +27630,20 @@ function getOctokit(token, options, ...additionalPlugins) { // node_modules/@actions/tool-cache/lib/tool-cache.js var crypto = __toESM(require("crypto"), 1); -var fs2 = __toESM(require("fs"), 1); +var fs3 = __toESM(require("fs"), 1); // node_modules/@actions/tool-cache/lib/manifest.js var semver = __toESM(require_semver2(), 1); // node_modules/@actions/tool-cache/lib/tool-cache.js -var path4 = __toESM(require("path"), 1); +var path5 = __toESM(require("path"), 1); var semver2 = __toESM(require_semver2(), 1); var stream = __toESM(require("stream"), 1); var util = __toESM(require("util"), 1); var import_assert2 = require("assert"); // node_modules/@actions/tool-cache/lib/retry-helper.js -var __awaiter8 = function(thisArg, _arguments, P, generator) { +var __awaiter9 = function(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve2) { resolve2(value); @@ -27608,7 +27683,7 @@ var RetryHelper = class { } } execute(action, isRetryable) { - return __awaiter8(this, void 0, void 0, function* () { + return __awaiter9(this, void 0, void 0, function* () { let attempt = 1; while (attempt < this.maxAttempts) { try { @@ -27631,14 +27706,14 @@ var RetryHelper = class { return Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + this.minSeconds; } sleep(seconds) { - return __awaiter8(this, void 0, void 0, function* () { + return __awaiter9(this, void 0, void 0, function* () { return new Promise((resolve2) => setTimeout(resolve2, seconds * 1e3)); }); } }; // node_modules/@actions/tool-cache/lib/tool-cache.js -var __awaiter9 = function(thisArg, _arguments, P, generator) { +var __awaiter10 = function(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve2) { resolve2(value); @@ -27676,16 +27751,16 @@ var IS_WINDOWS3 = process.platform === "win32"; var IS_MAC = process.platform === "darwin"; var userAgent2 = "actions/tool-cache"; function downloadTool(url, dest, auth2, headers) { - return __awaiter9(this, void 0, void 0, function* () { - dest = dest || path4.join(_getTempDirectory(), crypto.randomUUID()); - yield mkdirP(path4.dirname(dest)); + return __awaiter10(this, void 0, void 0, function* () { + dest = dest || path5.join(_getTempDirectory(), crypto.randomUUID()); + yield mkdirP(path5.dirname(dest)); debug(`Downloading ${url}`); debug(`Destination ${dest}`); const maxAttempts = 3; const minSeconds = _getGlobal("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS", 10); const maxSeconds = _getGlobal("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS", 20); const retryHelper = new RetryHelper(maxAttempts, minSeconds, maxSeconds); - return yield retryHelper.execute(() => __awaiter9(this, void 0, void 0, function* () { + return yield retryHelper.execute(() => __awaiter10(this, void 0, void 0, function* () { return yield downloadToolAttempt(url, dest || "", auth2, headers); }), (err) => { if (err instanceof HTTPError && err.httpStatusCode) { @@ -27698,8 +27773,8 @@ function downloadTool(url, dest, auth2, headers) { }); } function downloadToolAttempt(url, dest, auth2, headers) { - return __awaiter9(this, void 0, void 0, function* () { - if (fs2.existsSync(dest)) { + return __awaiter10(this, void 0, void 0, function* () { + if (fs3.existsSync(dest)) { throw new Error(`Destination file path ${dest} already exists`); } const http2 = new HttpClient(userAgent2, [], { @@ -27723,7 +27798,7 @@ function downloadToolAttempt(url, dest, auth2, headers) { const readStream = responseMessageFactory(); let succeeded = false; try { - yield pipeline2(readStream, fs2.createWriteStream(dest)); + yield pipeline2(readStream, fs3.createWriteStream(dest)); debug("download complete"); succeeded = true; return dest; @@ -27740,7 +27815,7 @@ function downloadToolAttempt(url, dest, auth2, headers) { }); } function extractTar(file_1, dest_1) { - return __awaiter9(this, arguments, void 0, function* (file, dest, flags = "xz") { + return __awaiter10(this, arguments, void 0, function* (file, dest, flags = "xz") { if (!file) { throw new Error("parameter 'file' is required"); } @@ -27783,7 +27858,7 @@ function extractTar(file_1, dest_1) { }); } function extractZip(file, dest) { - return __awaiter9(this, void 0, void 0, function* () { + return __awaiter10(this, void 0, void 0, function* () { if (!file) { throw new Error("parameter 'file' is required"); } @@ -27797,7 +27872,7 @@ function extractZip(file, dest) { }); } function extractZipWin(file, dest) { - return __awaiter9(this, void 0, void 0, function* () { + return __awaiter10(this, void 0, void 0, function* () { const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ""); const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ""); const pwshPath = yield which("pwsh", false); @@ -27843,7 +27918,7 @@ function extractZipWin(file, dest) { }); } function extractZipNix(file, dest) { - return __awaiter9(this, void 0, void 0, function* () { + return __awaiter10(this, void 0, void 0, function* () { const unzipPath = yield which("unzip", true); const args = [file]; if (!isDebug()) { @@ -27854,9 +27929,9 @@ function extractZipNix(file, dest) { }); } function _createExtractFolder(dest) { - return __awaiter9(this, void 0, void 0, function* () { + return __awaiter10(this, void 0, void 0, function* () { if (!dest) { - dest = path4.join(_getTempDirectory(), crypto.randomUUID()); + dest = path5.join(_getTempDirectory(), crypto.randomUUID()); } yield mkdirP(dest); return dest; @@ -27929,20 +28004,44 @@ function archiveBaseName(name) { const release = graphqlResponse.repository.release; const releaseAssets = release?.releaseAssets?.nodes || []; let asset; - if (process2.platform === "darwin" && process2.arch === "arm64") { + if (import_node_process.default.platform === "darwin" && import_node_process.default.arch === "arm64") { asset = releaseAssets.find(({ name }) => name.includes("aarch64-apple-macos")); - } else if (process2.platform === "linux" && process2.arch === "x64") { + } else if (import_node_process.default.platform === "linux" && import_node_process.default.arch === "x64") { asset = releaseAssets.find(({ name }) => name.includes("x86_64-unknown-linux")); } if (!asset) { - setFailed(`No download found for ${process2.arch}-${process2.platform} version ${release?.tagName || version}`); + setFailed(`No download found for ${import_node_process.default.arch}-${import_node_process.default.platform} version ${release?.tagName || version}`); return; } info(`Downloading from ${asset.downloadUrl}...`); const zbArchivePath = await downloadTool(asset.downloadUrl); const zbExtractedFolderPath = await extractArchive(zbArchivePath, asset.name); info(`Running installer...`); - await exec(import_node_path.default.join(zbExtractedFolderPath, archiveBaseName(asset.name), "install"), ["--single-user", "--no-systemd", "--no-launchd"]); + const installerPath = import_node_path.default.join(zbExtractedFolderPath, archiveBaseName(asset.name), "install"); + await group("Installer output", () => exec(installerPath, [ + "--single-user", + "--no-systemd", + "--no-launchd" + ])); + const installerStorePath = import_node_path.default.join(zbExtractedFolderPath, archiveBaseName(asset.name), "store"); + const objectNames = await import_promises.default.readdir(installerStorePath); + const zbStoreDirectory = import_node_process.default.platform === "win32" ? "C:\\zb\\store" : "/opt/zb/store"; + const zbBins = await Promise.all( + objectNames.filter((name) => name.match(/-zb-/)).map(async (name) => { + const binPath = import_node_path.default.join(zbStoreDirectory, name, "bin"); + try { + await import_promises.default.lstat(binPath); + } catch { + return null; + } + return binPath; + }) + ); + for (const binPath of zbBins) { + if (binPath) { + addPath(binPath); + } + } })(); /** * @license diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index d596417..0badf09 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -4,7 +4,8 @@ * SPDX-License-Identifier: MIT */ -import * as process from 'node:process'; +import fs from 'node:fs/promises'; +import process from 'node:process'; import path from 'node:path'; import * as core from '@actions/core'; @@ -112,5 +113,32 @@ function archiveBaseName(name: string): string { const zbExtractedFolderPath = await extractArchive(zbArchivePath, asset.name); core.info(`Running installer...`); - await exec(path.join(zbExtractedFolderPath, archiveBaseName(asset.name), 'install'), ['--single-user', '--no-systemd', '--no-launchd']); + const installerPath = path.join(zbExtractedFolderPath, archiveBaseName(asset.name), 'install'); + await core.group("Installer output", () => exec(installerPath, [ + '--single-user', + '--no-systemd', + '--no-launchd', + ])); + + const installerStorePath = path.join(zbExtractedFolderPath, archiveBaseName(asset.name), 'store'); + const objectNames = await fs.readdir(installerStorePath); + const zbStoreDirectory = process.platform === 'win32' ? 'C:\\zb\\store' : '/opt/zb/store'; + const zbBins = await Promise.all( + objectNames + .filter((name) => name.match(/-zb-/)) + .map(async (name) => { + const binPath = path.join(zbStoreDirectory, name, 'bin'); + try { + await fs.lstat(binPath); + } catch { + return null; + } + return binPath; + }) + ); + for (const binPath of zbBins) { + if (binPath) { + core.addPath(binPath); + } + } })(); From bf94dec7c4ef9f5fc884f6ac8e123223b0be335c Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 18:15:12 -0700 Subject: [PATCH 22/23] Install 0.2.0-beta1 --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index be8d6d1..2581191 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,5 +16,7 @@ jobs: uses: actions/checkout@v7 - name: Install zb uses: $/.github/actions/setup-zb + with: + zb-version: '0.2.0-beta1' - name: Check zb version run: zb --version From df41b1f179965409562214567be80d1243a20075 Mon Sep 17 00:00:00 2001 From: Roxy Light Date: Fri, 31 Jul 2026 18:18:04 -0700 Subject: [PATCH 23/23] Group output better --- .github/actions/setup-zb/dist/main.js | 10 +++++----- .github/actions/setup-zb/src/main.ts | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/actions/setup-zb/dist/main.js b/.github/actions/setup-zb/dist/main.js index d55de94..4c69cfe 100644 --- a/.github/actions/setup-zb/dist/main.js +++ b/.github/actions/setup-zb/dist/main.js @@ -28013,12 +28013,12 @@ function archiveBaseName(name) { setFailed(`No download found for ${import_node_process.default.arch}-${import_node_process.default.platform} version ${release?.tagName || version}`); return; } - info(`Downloading from ${asset.downloadUrl}...`); - const zbArchivePath = await downloadTool(asset.downloadUrl); - const zbExtractedFolderPath = await extractArchive(zbArchivePath, asset.name); - info(`Running installer...`); + const zbExtractedFolderPath = await group(`Downloading ${asset.downloadUrl}`, async () => { + const zbArchivePath = await downloadTool(asset.downloadUrl); + return extractArchive(zbArchivePath, asset.name); + }); const installerPath = import_node_path.default.join(zbExtractedFolderPath, archiveBaseName(asset.name), "install"); - await group("Installer output", () => exec(installerPath, [ + await group("Running installer", () => exec(installerPath, [ "--single-user", "--no-systemd", "--no-launchd" diff --git a/.github/actions/setup-zb/src/main.ts b/.github/actions/setup-zb/src/main.ts index 0badf09..19e6b33 100644 --- a/.github/actions/setup-zb/src/main.ts +++ b/.github/actions/setup-zb/src/main.ts @@ -107,14 +107,14 @@ function archiveBaseName(name: string): string { core.setFailed(`No download found for ${process.arch}-${process.platform} version ${release?.tagName || version}`); return; } - core.info(`Downloading from ${asset.downloadUrl}...`); - const zbArchivePath = await downloadTool(asset.downloadUrl); - const zbExtractedFolderPath = await extractArchive(zbArchivePath, asset.name); + const zbExtractedFolderPath = await core.group(`Downloading ${asset.downloadUrl}`, async () => { + const zbArchivePath = await downloadTool(asset.downloadUrl); + return extractArchive(zbArchivePath, asset.name); + }); - core.info(`Running installer...`); const installerPath = path.join(zbExtractedFolderPath, archiveBaseName(asset.name), 'install'); - await core.group("Installer output", () => exec(installerPath, [ + await core.group('Running installer', () => exec(installerPath, [ '--single-user', '--no-systemd', '--no-launchd',